diff options
Diffstat (limited to 'src/arch/ppc/lib/cpu.c')
-rw-r--r-- | src/arch/ppc/lib/cpu.c | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/src/arch/ppc/lib/cpu.c b/src/arch/ppc/lib/cpu.c index 7a8e46f5cd..efb914b059 100644 --- a/src/arch/ppc/lib/cpu.c +++ b/src/arch/ppc/lib/cpu.c @@ -1,35 +1,49 @@ #include <console/console.h> -#include <mem.h> #include <arch/io.h> #include <string.h> #include <cpu/cpu.h> #include <cpu/ppc/cpuid.h> #include <smp/start_stop.h> +#include "ppc.h" +#include "ppcreg.h" -static void cache_on(struct mem_range *mem) -{ -} - -static void interrupts_on() -{ -} +#error "FIXME what should call cpu_initialize?" -unsigned long cpu_initialize(struct mem_range *mem) +void cpu_initialize(void) { /* Because we busy wait at the printk spinlock. * It is important to keep the number of printed messages * from secondary cpus to a minimum, when debugging is * disabled. */ - unsigned long processor_id = this_processors_id(); - printk_notice("Initializing CPU #%d\n", processor_id); + struct device *cpu; + struct cpu_info *info; + info = cpu_info(); + + printk_notice("Initializing CPU #%d\n", info->index); + + cpu = info->cpu; + if (!cpu) { + die("CPU: missing cpu device structure"); + } - /* Turn on caching if we haven't already */ - cache_on(mem); + /* Find what type of cpu we are dealing with */ + cpu->vendor 0; /* PPC cpus do not have a vendor field */ + cpu->device = ppc_getpvr(); + display_cpuid(cpu); - display_cpuid(); +#if 0 + /* Lookup the cpu's operations */ + set_cpu_ops(cpu); - interrupts_on(); + /* Initialize the cpu */ + if (cpu->ops && cpu->ops->init) { + cpu->enabled = 1; + cpu->initialized = 1; + cpu->ops->init(); + } +#endif + /* Turn on caching if we haven't already */ printk_info("CPU #%d Initialized\n", processor_id); return processor_id; |