Commit 7a6af5e3 authored by Stephen Rothwell's avatar Stephen Rothwell Committed by Paul Mackerras
Browse files

[PATCH] ppc64: remove firmware features from cpu_spec



The firmware_features field of struct cpu_spec should really be a separate
variable as the firmware features do not depend on the chip and the
bitmask is constructed independently.  By removing it, we save 112 bytes
from the cpu_specs array and we access the bitmask directly instead of via
the cur_cpu_spec pointer.

Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 6fbb49d5
Loading
Loading
Loading
Loading
+1 −15
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@

struct cpu_spec* cur_cpu_spec = NULL;
EXPORT_SYMBOL(cur_cpu_spec);
unsigned long ppc64_firmware_features;

/* NOTE:
 * Unlike ppc32, ppc64 will only call this once for the boot CPU, it's
@@ -60,7 +61,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power3,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* Power3+ */
		.pvr_mask		= 0xffff0000,
@@ -73,7 +73,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power3,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* Northstar */
		.pvr_mask		= 0xffff0000,
@@ -86,7 +85,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power3,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* Pulsar */
		.pvr_mask		= 0xffff0000,
@@ -99,7 +97,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power3,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* I-star */
		.pvr_mask		= 0xffff0000,
@@ -112,7 +109,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power3,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* S-star */
		.pvr_mask		= 0xffff0000,
@@ -125,7 +121,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power3,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* Power4 */
		.pvr_mask		= 0xffff0000,
@@ -138,7 +133,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power4,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* Power4+ */
		.pvr_mask		= 0xffff0000,
@@ -151,7 +145,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power4,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* PPC970 */
		.pvr_mask		= 0xffff0000,
@@ -166,7 +159,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_ppc970,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* PPC970FX */
		.pvr_mask		= 0xffff0000,
@@ -181,7 +173,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_ppc970,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* PPC970MP */
		.pvr_mask		= 0xffff0000,
@@ -196,7 +187,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_ppc970,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* Power5 */
		.pvr_mask		= 0xffff0000,
@@ -211,7 +201,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power4,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* Power5 */
		.pvr_mask		= 0xffff0000,
@@ -226,7 +215,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power4,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* BE DD1.x */
		.pvr_mask		= 0xffff0000,
@@ -241,7 +229,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_be,
		.firmware_features	= COMMON_PPC64_FW,
	},
	{	/* default match */
		.pvr_mask		= 0x00000000,
@@ -254,7 +241,6 @@ struct cpu_spec cpu_specs[] = {
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.cpu_setup		= __setup_cpu_power4,
		.firmware_features	= COMMON_PPC64_FW,
	}
};

+2 −2
Original line number Diff line number Diff line
@@ -377,7 +377,7 @@ static int lparcfg_data(struct seq_file *m, void *v)

	partition_active_processors = lparcfg_count_active_processors();

	if (cur_cpu_spec->firmware_features & FW_FEATURE_SPLPAR) {
	if (ppc64_firmware_features & FW_FEATURE_SPLPAR) {
		unsigned long h_entitled, h_unallocated;
		unsigned long h_aggregation, h_resource;
		unsigned long pool_idle_time, pool_procs;
@@ -571,7 +571,7 @@ int __init lparcfg_init(void)
	mode_t mode = S_IRUSR;

	/* Allow writing if we have FW_FEATURE_SPLPAR */
	if (cur_cpu_spec->firmware_features & FW_FEATURE_SPLPAR) {
	if (ppc64_firmware_features & FW_FEATURE_SPLPAR) {
		lparcfg_fops.write = lparcfg_write;
		mode |= S_IWUSR;
	}
+1 −1
Original line number Diff line number Diff line
@@ -546,7 +546,7 @@ void iommu_init_early_pSeries(void)
	}

	if (systemcfg->platform & PLATFORM_LPAR) {
		if (cur_cpu_spec->firmware_features & FW_FEATURE_MULTITCE) {
		if (ppc64_firmware_features & FW_FEATURE_MULTITCE) {
			ppc_md.tce_build = tce_buildmulti_pSeriesLP;
			ppc_md.tce_free	 = tce_freemulti_pSeriesLP;
		} else {
+6 −6
Original line number Diff line number Diff line
@@ -231,11 +231,11 @@ static void __init pSeries_setup_arch(void)

	pSeries_nvram_init();

	if (cur_cpu_spec->firmware_features & FW_FEATURE_SPLPAR)
	if (ppc64_firmware_features & FW_FEATURE_SPLPAR)
		vpa_init(boot_cpuid);

	/* Choose an idle loop */
	if (cur_cpu_spec->firmware_features & FW_FEATURE_SPLPAR) {
	if (ppc64_firmware_features & FW_FEATURE_SPLPAR) {
		if (get_paca()->lppaca.shared_proc) {
			printk(KERN_INFO "Using shared processor idle loop\n");
			ppc_md.idle_loop = pseries_shared_idle;
@@ -260,7 +260,7 @@ static int __init pSeries_init_panel(void)
arch_initcall(pSeries_init_panel);


/* Build up the firmware_features bitmask field
/* Build up the ppc64_firmware_features bitmask field
 * using contents of device-tree/ibm,hypertas-functions.
 * Ultimately this functionality may be moved into prom.c prom_init().
 */
@@ -272,7 +272,7 @@ void __init fw_feature_init(void)

	DBG(" -> fw_feature_init()\n");

	cur_cpu_spec->firmware_features = 0;
	ppc64_firmware_features = 0;
	dn = of_find_node_by_path("/rtas");
	if (dn == NULL) {
		printk(KERN_ERR "WARNING ! Cannot find RTAS in device-tree !\n");
@@ -288,7 +288,7 @@ void __init fw_feature_init(void)
				if ((firmware_features_table[i].name) &&
				    (strcmp(firmware_features_table[i].name,hypertas))==0) {
					/* we have a match */
					cur_cpu_spec->firmware_features |= 
					ppc64_firmware_features |= 
						(firmware_features_table[i].val);
					break;
				} 
@@ -302,7 +302,7 @@ void __init fw_feature_init(void)
	of_node_put(dn);
 no_rtas:
	printk(KERN_INFO "firmware_features = 0x%lx\n", 
	       cur_cpu_spec->firmware_features);
	       ppc64_firmware_features);

	DBG(" <- fw_feature_init()\n");
}
+1 −1
Original line number Diff line number Diff line
@@ -326,7 +326,7 @@ static void __devinit smp_xics_setup_cpu(int cpu)
	if (cpu != boot_cpuid)
		xics_setup_cpu();

	if (cur_cpu_spec->firmware_features & FW_FEATURE_SPLPAR)
	if (ppc64_firmware_features & FW_FEATURE_SPLPAR)
		vpa_init(cpu);

	cpu_clear(cpu, of_spin_map);
Loading