diff options
Diffstat (limited to 'arch/powerpc/kernel/setup-common.c')
| -rw-r--r-- | arch/powerpc/kernel/setup-common.c | 66 | 
1 files changed, 29 insertions, 37 deletions
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 3d261c071fc..e5b022c55cc 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -62,8 +62,6 @@  #include <mm/mmu_decl.h>  #include <asm/fadump.h> -#include "setup.h" -  #ifdef DEBUG  #include <asm/udbg.h>  #define DBG(fmt...) udbg_printf(fmt) @@ -78,6 +76,9 @@ EXPORT_SYMBOL(ppc_md);  struct machdep_calls *machine_id;  EXPORT_SYMBOL(machine_id); +int boot_cpuid = -1; +EXPORT_SYMBOL_GPL(boot_cpuid); +  unsigned long klimit = (unsigned long) _end;  char cmd_line[COMMAND_LINE_SIZE]; @@ -211,6 +212,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)  {  	unsigned long cpu_id = (unsigned long)v - 1;  	unsigned int pvr; +	unsigned long proc_freq;  	unsigned short maj;  	unsigned short min; @@ -262,12 +264,19 @@ static int show_cpuinfo(struct seq_file *m, void *v)  #endif /* CONFIG_TAU */  	/* -	 * Assume here that all clock rates are the same in a -	 * smp system.  -- Cort +	 * Platforms that have variable clock rates, should implement +	 * the method ppc_md.get_proc_freq() that reports the clock +	 * rate of a given cpu. The rest can use ppc_proc_freq to +	 * report the clock rate that is same across all cpus.  	 */ -	if (ppc_proc_freq) +	if (ppc_md.get_proc_freq) +		proc_freq = ppc_md.get_proc_freq(cpu_id); +	else +		proc_freq = ppc_proc_freq; + +	if (proc_freq)  		seq_printf(m, "clock\t\t: %lu.%06luMHz\n", -			   ppc_proc_freq / 1000000, ppc_proc_freq % 1000000); +			   proc_freq / 1000000, proc_freq % 1000000);  	if (ppc_md.show_percpuinfo != NULL)  		ppc_md.show_percpuinfo(m, cpu_id); @@ -381,9 +390,10 @@ void __init check_for_initrd(void)  #ifdef CONFIG_SMP -int threads_per_core, threads_shift; +int threads_per_core, threads_per_subcore, threads_shift;  cpumask_t threads_core_mask;  EXPORT_SYMBOL_GPL(threads_per_core); +EXPORT_SYMBOL_GPL(threads_per_subcore);  EXPORT_SYMBOL_GPL(threads_shift);  EXPORT_SYMBOL_GPL(threads_core_mask); @@ -392,6 +402,7 @@ static void __init cpu_init_thread_core_maps(int tpc)  	int i;  	threads_per_core = tpc; +	threads_per_subcore = tpc;  	cpumask_clear(&threads_core_mask);  	/* This implementation only supports power of 2 number of threads @@ -458,9 +469,17 @@ void __init smp_setup_cpu_maps(void)  		}  		for (j = 0; j < nthreads && cpu < nr_cpu_ids; j++) { +			bool avail; +  			DBG("    thread %d -> cpu %d (hard id %d)\n",  			    j, cpu, be32_to_cpu(intserv[j])); -			set_cpu_present(cpu, true); + +			avail = of_device_is_available(dn); +			if (!avail) +				avail = !of_property_match_string(dn, +						"enable-method", "spin-table"); + +			set_cpu_present(cpu, avail);  			set_hard_smp_processor_id(cpu, be32_to_cpu(intserv[j]));  			set_cpu_possible(cpu, true);  			cpu++; @@ -481,7 +500,7 @@ void __init smp_setup_cpu_maps(void)  	if (machine_is(pseries) && firmware_has_feature(FW_FEATURE_LPAR) &&  	    (dn = of_find_node_by_path("/rtas"))) {  		int num_addr_cell, num_size_cell, maxcpus; -		const unsigned int *ireg; +		const __be32 *ireg;  		num_addr_cell = of_n_addr_cells(dn);  		num_size_cell = of_n_size_cells(dn); @@ -491,7 +510,7 @@ void __init smp_setup_cpu_maps(void)  		if (!ireg)  			goto out; -		maxcpus = ireg[num_addr_cell + num_size_cell]; +		maxcpus = be32_to_cpup(ireg + num_addr_cell + num_size_cell);  		/* Double maxcpus for processors which have SMT capability */  		if (cpu_has_feature(CPU_FTR_SMT)) @@ -717,33 +736,6 @@ static int powerpc_debugfs_init(void)  arch_initcall(powerpc_debugfs_init);  #endif -#ifdef CONFIG_BOOKE_WDT -extern u32 booke_wdt_enabled; -extern u32 booke_wdt_period; - -/* Checks wdt=x and wdt_period=xx command-line option */ -notrace int __init early_parse_wdt(char *p) -{ -	if (p && strncmp(p, "0", 1) != 0) -		booke_wdt_enabled = 1; - -	return 0; -} -early_param("wdt", early_parse_wdt); - -int __init early_parse_wdt_period(char *p) -{ -	unsigned long ret; -	if (p) { -		if (!kstrtol(p, 0, &ret)) -			booke_wdt_period = ret; -	} - -	return 0; -} -early_param("wdt_period", early_parse_wdt_period); -#endif	/* CONFIG_BOOKE_WDT */ -  void ppc_printk_progress(char *s, unsigned short hex)  {  	pr_info("%s\n", s);  | 
