- First stab at getting the ppc ports building and working.
[coreboot.git] / src / arch / ppc / lib / cpu.c
index 49b230c871535b713e27c03e8c47f195f2d673e7..3b6a256908f0b970d53c1ec6e54539c6d2db7a05 100644 (file)
@@ -1,36 +1,69 @@
 #include <console/console.h>
-#include <mem.h>
 #include <arch/io.h>
 #include <string.h>
+#include <device/device.h>
 #include <cpu/cpu.h>
 #include <cpu/ppc/cpuid.h>
+#include "ppc.h"
+#include "ppcreg.h"
 
-static void cache_on(struct mem_range *mem)
+#if 0
+static void set_cpu_ops(struct device *cpu)
 {
+       struct cpu_driver *driver;
+       cpu->ops = 0;
+       for (driver = cpu_drivers; driver < ecpu_drivers; driver++) {
+               struct cpu_device_id *id;
+               for(id = driver->id_table; id->pvr != 0; id++) {
+                       if (cpu->device == id->pvr) 
+                       {
+                               goto found;
+                       }
+               }
+       }
+       die("Unknown cpu");
+       return;
+ found:
+       cpu->ops = driver->ops;
 }
+#endif
 
-static void interrupts_on()
-{
-}
-
-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;
+       printk_info("CPU #%d Initialized\n", info->index);
+       return;
 }
-