#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;
}
-