I've resumed hacking on LinuxBIOS on an Athlon socket AM2 board with an nVidia MCP55 southbridge and a C51XE between the two. I'm using the CK804 southbridge code with updated PCI IDs, and Yinghai's socket AM2 code.
I've gotten a Linux kernel to boot, but I am stuck on a few issues:
1. I haven't gotten interrupt routing to work yet, and the IRQ routing table I extract from the factory BIOS seems broken. When I boot with the factory BIOS, however, Linux uses ACPI for interrupt routing, which I think bypasses the routing table altogether. Should I try to fix the routing table or try to get ACPI working? Linux searches for a device to act as an interrupt router; which device on my board would play that role?
2. The HT bridge configuration seems messed up. Linux complains "Unable to handle 64-bit address space" for each bridge because the limit register is still 0. How do I get these registers configured properly?
3. I'm not sure whether HT unitid assignment is correct; the meanings of HT_CHAIN_UNITID_BASE, HT_CHAIN_END_UNITID_BASE, SB_HT_CHAIN_ON_BUS0 and SB_HT_CHAIN_UNITID_OFFSET_ONLY are very unclear despite comments in the code.
4. The PCI device IDs assigned during HyperTransport device enumeration don't match up with those assigned by the factory BIOS, e.g. the southbridge HT interface (device 10de:0369) is assigned to device 1 on LinuxBIOS but device 8 on the factory BIOS. I'm not sure whether this is a big deal, but is there some way to get them assigned in the same way?
I've attached a boot dump (boot.txt), various lspci dumps, and my mainboard Options.lb and Config.lb.
Any help would be appreciated.
--Ed
* Ed Swierk eswierk@arastra.com [061212 19:50]:
Should I try to fix the routing table or try to get ACPI working?
Get a simple version of ACPI working. Its much more complete and still cleaner than having to implement _both_ of mp and pirq to get things right. pirq handling in linux is broken, too.
Have a look at the acpi implementation of the epia-m. its simple and clean. The one of some Opteron mainboards might be a better fit, since they're more modular and already contain most of what you need.
The factory bios DSDT knows the interrupt routing.
- I'm not sure whether HT unitid assignment is correct; the meanings
of HT_CHAIN_UNITID_BASE, HT_CHAIN_END_UNITID_BASE, SB_HT_CHAIN_ON_BUS0 and SB_HT_CHAIN_UNITID_OFFSET_ONLY are very unclear despite comments in the code.
Nobody except Yinghai really knows what their valid parameters are ;-) If you copied the values from an existing board, its probably fine though.
- The PCI device IDs assigned during HyperTransport device
enumeration don't match up with those assigned by the factory BIOS, e.g. the southbridge HT interface (device 10de:0369) is assigned to device 1 on LinuxBIOS but device 8 on the factory BIOS. I'm not sure whether this is a big deal, but is there some way to get them assigned in the same way?
The variables of 3. have something to do with it. Also, parts of this is a breadth-first vs depth-first algorithm issue. Its really no big deal though.