[SPARC64]: Convert cpu_find_by_*() interface to in-kernel PROM device tree.
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -39,6 +39,7 @@
|
||||
#include <asm/starfire.h>
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/prom.h>
|
||||
|
||||
extern void calibrate_delay(void);
|
||||
|
||||
@@ -76,41 +77,42 @@ void smp_bogo(struct seq_file *m)
|
||||
|
||||
void __init smp_store_cpu_info(int id)
|
||||
{
|
||||
int cpu_node, def;
|
||||
struct device_node *dp;
|
||||
int def;
|
||||
|
||||
/* multiplier and counter set by
|
||||
smp_setup_percpu_timer() */
|
||||
cpu_data(id).udelay_val = loops_per_jiffy;
|
||||
|
||||
cpu_find_by_mid(id, &cpu_node);
|
||||
cpu_data(id).clock_tick = prom_getintdefault(cpu_node,
|
||||
"clock-frequency", 0);
|
||||
cpu_find_by_mid(id, &dp);
|
||||
cpu_data(id).clock_tick =
|
||||
of_getintprop_default(dp, "clock-frequency", 0);
|
||||
|
||||
def = ((tlb_type == hypervisor) ? (8 * 1024) : (16 * 1024));
|
||||
cpu_data(id).dcache_size = prom_getintdefault(cpu_node, "dcache-size",
|
||||
def);
|
||||
cpu_data(id).dcache_size =
|
||||
of_getintprop_default(dp, "dcache-size", def);
|
||||
|
||||
def = 32;
|
||||
cpu_data(id).dcache_line_size =
|
||||
prom_getintdefault(cpu_node, "dcache-line-size", def);
|
||||
of_getintprop_default(dp, "dcache-line-size", def);
|
||||
|
||||
def = 16 * 1024;
|
||||
cpu_data(id).icache_size = prom_getintdefault(cpu_node, "icache-size",
|
||||
def);
|
||||
cpu_data(id).icache_size =
|
||||
of_getintprop_default(dp, "icache-size", def);
|
||||
|
||||
def = 32;
|
||||
cpu_data(id).icache_line_size =
|
||||
prom_getintdefault(cpu_node, "icache-line-size", def);
|
||||
of_getintprop_default(dp, "icache-line-size", def);
|
||||
|
||||
def = ((tlb_type == hypervisor) ?
|
||||
(3 * 1024 * 1024) :
|
||||
(4 * 1024 * 1024));
|
||||
cpu_data(id).ecache_size = prom_getintdefault(cpu_node, "ecache-size",
|
||||
def);
|
||||
cpu_data(id).ecache_size =
|
||||
of_getintprop_default(dp, "ecache-size", def);
|
||||
|
||||
def = 64;
|
||||
cpu_data(id).ecache_line_size =
|
||||
prom_getintdefault(cpu_node, "ecache-line-size", def);
|
||||
of_getintprop_default(dp, "ecache-line-size", def);
|
||||
|
||||
printk("CPU[%d]: Caches "
|
||||
"D[sz(%d):line_sz(%d)] "
|
||||
@@ -342,10 +344,10 @@ static int __devinit smp_boot_one_cpu(unsigned int cpu)
|
||||
|
||||
prom_startcpu_cpuid(cpu, entry, cookie);
|
||||
} else {
|
||||
int cpu_node;
|
||||
struct device_node *dp;
|
||||
|
||||
cpu_find_by_mid(cpu, &cpu_node);
|
||||
prom_startcpu(cpu_node, entry, cookie);
|
||||
cpu_find_by_mid(cpu, &dp);
|
||||
prom_startcpu(dp->node, entry, cookie);
|
||||
}
|
||||
|
||||
for (timeout = 0; timeout < 5000000; timeout++) {
|
||||
@@ -1289,7 +1291,8 @@ int setup_profiling_timer(unsigned int multiplier)
|
||||
|
||||
static void __init smp_tune_scheduling(void)
|
||||
{
|
||||
int instance, node;
|
||||
struct device_node *dp;
|
||||
int instance;
|
||||
unsigned int def, smallest = ~0U;
|
||||
|
||||
def = ((tlb_type == hypervisor) ?
|
||||
@@ -1297,10 +1300,10 @@ static void __init smp_tune_scheduling(void)
|
||||
(4 * 1024 * 1024));
|
||||
|
||||
instance = 0;
|
||||
while (!cpu_find_by_instance(instance, &node, NULL)) {
|
||||
while (!cpu_find_by_instance(instance, &dp, NULL)) {
|
||||
unsigned int val;
|
||||
|
||||
val = prom_getintdefault(node, "ecache-size", def);
|
||||
val = of_getintprop_default(dp, "ecache-size", def);
|
||||
if (val < smallest)
|
||||
smallest = val;
|
||||
|
||||
|
Reference in New Issue
Block a user