Dear Genodians,
I'm trying to enable Genode on the apu2c4. I successfully could run the test-pci component using branch [1] based on Genode 17.11:
However, using the genodelabs/master branch results in a ACPI parsing error: ´[init -> platform_drv] Error: ACPI report parsing error.´
I set the report_rom to verbose and I noticed following differences:
# Working version on apu2c4 [1]:
´´´ Genode 17.11-103-gd0028480b <local changes> 4039 MiB RAM and 63253 caps assigned to init [init -> test-pci] --- Platform test started --- [init -> acpi_drv] Found MADT [init -> acpi_drv] MADT IRQ 0 -> GSI 2 flags: 0 [init -> acpi_drv] MADT IRQ 9 -> GSI 9 flags: 15 [init -> acpi_report_rom] report 'acpi_drv -> acpi' [init -> acpi_report_rom] <acpi> [init -> acpi_report_rom] <fadt features="0x3c5a5" reset_type="0x1000801" reset_addr="0xcf9" reset_value="0x6"/> [init -> acpi_report_rom] <irq_override irq="9" gsi="9" flags="0xf"/> [init -> acpi_report_rom] <irq_override irq="0" gsi="2" flags="0x0"/> [init -> acpi_report_rom] <routing gsi="0x2b" bridge_bdf="0x15" device="0x0" device_pin="0x3"/> [init -> acpi_report_rom] <routing gsi="0x2a" bridge_bdf="0x15" device="0x0" device_pin="0x2"/> [init -> acpi_report_rom] <routing gsi="0x29" bridge_bdf="0x15" device="0x0" device_pin="0x1"/> ... [init -> acpi_report_rom] <routing gsi="0x2c" bridge_bdf="0xc0" device="0x1" device_pin="0x0"/> [init -> acpi_report_rom] </acpi> [init -> test-pci] 0:0.0 class=0x600 vendor=0x1022 (unknown) device=0x1566 [init -> test-pci] 0:2.0 class=0x600 vendor=0x1022 (unknown) device=0x156b ...
´´´
# Broken version on apu2c4 (current master):
´´´ Genode 19.08 <local changes> 4027 MiB RAM and 63253 caps assigned to init [init -> test-pci] --- Platform test started --- [init -> acpi_drv] Found MADT [init -> acpi_drv] MADT IRQ 0 -> GSI 2 flags: 0 [init -> acpi_drv] MADT IRQ 9 -> GSI 9 flags: 15 [init -> acpi_drv] XSDT OEM 'CORE ', table id 'COREBOOT', revision 0, creator 'CORE' (0) [init -> acpi_report_rom] report 'acpi_drv -> acpi' [init -> acpi_report_rom] <acpi> [init -> acpi_report_rom] <root_bridge bdf="0xc0"/> [init -> acpi_report_rom] <irq_override irq="9" gsi="9" flags="0xf"/> [init -> acpi_report_rom] <irq_override irq="0" gsi="2" flags="0x0"/> [init -> acpi_report_rom] <routing gsi="0x2b" bridge_bdf="0x15" device="0x0" device_pin="0x3"/> [init -> acpi_report_rom] <routing gsi="0x2a" bridge_bdf="0x15" device="0x0" device_pin="0x2"/> [init -> acpi_report_rom] <routing gsi="0x29" bridge_bdf="0x15" device="0x0" device_pin="0x1"/> ... [init -> acpi_report_rom] <routing gsi="0x2c" bridge_bdf="0xc0" device="0x1" device_pin="0x0"/> [init -> acpi_report_rom] </acpi> [init -> platform_drv] Error: ACPI report parsing error. [init -> acpi_drv] SMBIOS table (entry point: 0x163ad0 structures: 0xdffd7020) [init -> platform_drv] Error: Uncaught exception of type 'int' [init -> platform_drv] Warning: abort called - thread: ep [init -> acpi_report_rom] report 'acpi_drv -> smbios_table' [init -> acpi_report_rom] _SM_b▒ ´´´
# on QEMU (current master):
´´´ Genode 19.08 <local changes> 471 MiB RAM and 63253 caps assigned to init [init -> test-pci] --- Platform test started --- [init -> acpi_drv] Found MADT [init -> acpi_drv] MADT IRQ 0 -> GSI 2 flags: 0 [init -> acpi_drv] MADT IRQ 5 -> GSI 5 flags: 13 [init -> acpi_drv] MADT IRQ 9 -> GSI 9 flags: 13 [init -> acpi_drv] MADT IRQ 10 -> GSI 10 flags: 13 [init -> acpi_drv] MADT IRQ 11 -> GSI 11 flags: 13 [init -> acpi_drv] Found MCFG [init -> acpi_drv] MCFG BASE 0xb0000000 seg 0x0 bus 0x0-0xff [init -> acpi_drv] RSDT OEM 'BOCHS ', table id 'BXPCRSDT', revision 1, creator 'BXPC' (1) [init -> acpi_report_rom] report 'acpi_drv -> acpi' [init -> acpi_report_rom] <acpi> [init -> acpi_report_rom] <root_bridge bdf="0x0"/> [init -> acpi_report_rom] <bdf start="0" count="65536" base="0xb0000000"/> [init -> acpi_report_rom] <irq_override irq="11" gsi="11" flags="0xd"/> [init -> acpi_report_rom] <irq_override irq="10" gsi="10" flags="0xd"/> [init -> acpi_report_rom] <irq_override irq="9" gsi="9" flags="0xd"/> [init -> acpi_report_rom] <irq_override irq="5" gsi="5" flags="0xd"/> [init -> acpi_report_rom] <irq_override irq="0" gsi="2" flags="0x0"/> [init -> acpi_report_rom] </acpi> [init -> platform_drv] ECAM/MMCONF range 00:00.0-ff:1f.7 - addr [00000000b0000000,00000000c0000000) [init -> acpi_drv] SMBIOS table (entry point: 0x165710 structures: 0xf5730) [init -> platform_drv] Root bridge: 00:00.0 [init -> acpi_report_rom] report 'acpi_drv -> smbios_table' [init -> acpi_report_rom] _SM_W [init -> test-pci] 0:0.0 class=0x600 vendor=0x8086 (Intel) device=0x29c0 [init -> test-pci] 0:1.0 class=0x300 vendor=0x1234 (unknown) device=0x1111 ...
´´´
Cherry-picking from [1] to the master branch didn't help.
On QEMU I noticed a ´bdf´ node in the acpi_report. ´platform_drv´ is expecting this node. The ´bdf´ node is written in ´Acpi::generate_report()´ but only if there is an entry in the ´Pci_config_space´ list. The only function that inserts something to that list is ´Table_wrapper::parse_mcfg()´, which is called from ´Acpi_table::_parse_tables()´ in case one of the tables has the "MCFG" signature. However, none of the tables seem to have that signature.
And now I'm lost. How do I move on?
Cheers, Sid