The ARIMA HDAMA now boots, and everything looks like it is working properly.
Converting everything else still remains but we now have a working example to look at.
We are down to one device tree instead of two. And hardwaremain has been reduced to:
void hardwaremain(int boot_complete) { /* the order here is a bit tricky. We don't want to do much of * anything that uses config registers until after PciAllocateResources * since that function also figures out what kind of config strategy * to use (type 1 or type 2). * so we turn on cache, then worry about PCI setup, then do other * things, so that the other work can use the PciRead* and PciWrite* * functions. */ struct lb_memory *lb_mem;
post_code(0x80);
/* displayinit MUST PRECEDE ALL PRINTK! */ console_init(); post_code(0x39); printk_notice("LinuxBIOS-%s%s %s %s...\n", linuxbios_version, linuxbios_extra_version, linuxbios_build, (boot_complete)?"rebooting":"booting");
post_code(0x40);
/* If we have already booted attempt a hard reboot */ if (boot_complete) { hard_reset(); }
/* FIXME: Is there a better way to handle this? */ init_timer();
/* pick how to scan the bus. This is first so we can get at memory size. */ printk_info("Finding PCI configuration type.\n"); pci_set_method(); post_code(0x5f); dev_enumerate(); post_code(0x66); /* Now do the real bus. * We round the total ram up a lot for thing like the SISFB, which * shares high memory with the CPU. */ dev_configure(); post_code(0x88);
dev_enable();
dev_initialize(); post_code(0x89);
/* Now that we have collected all of our information * write our configuration tables. */ lb_mem = write_tables();
#if CONFIG_FS_STREAM == 1 filo(lb_mem); #else elfboot(lb_mem); #endif }
There is more scrubbing on the horizon but so for things look good.
Eric