Hi everyone,
I have some question about the: acpi_drv and platform_drv.
In short: Is acpi_drv and platform_drv are only supporting hardware boards with PCIe ?
In detail: I do following: make KERNEL=nova run/lighttpd
And start the var/run/lighttpd.iso with qemu-system-x86_64 (without -machine q35 parameter!) qemu-system-x86_64 -no-kvm -display sdl -cpu core2duo -nographic -netdev user,id=net0,hostfwd=tcp::5555-:80,hostfwd=tcp::5556-:443 -net nic,model=e1000,netdev=net0 -serial mon:stdio -m 512 -cdrom var/run/lighttpd.iso
It fails with: .... [init -> nic_drv -> acpi_drv] SMBIOS table (entry point: 0x1758f0 structures: 0xf5910) [init -> nic_drv -> platform_drv] Error: ACPI report parsing error. [init -> nic_drv -> platform_drv] Error: Uncaught exception of type 'int' [init -> nic_drv -> platform_drv] Warning: abort called - thread: ep
I extendend the "error output" (maybe you would like to have this? I can create a PR?)
And I got following: ... [init -> nic_drv -> acpi_drv] Freeing up memory of elements - 3104 bytes [init -> nic_drv -> acpi_drv] SMBIOS table (entry point: 0x1758f0 structures: 0xf5910) [init -> nic_drv -> platform_drv] Error: ACPI report parsing error. Exception type int: 2 [init -> nic_drv -> platform_drv] Error: ACPI ROM: <acpi> [init -> nic_drv -> platform_drv] <root_bridge bdf="0x0"/> [init -> nic_drv -> platform_drv] <irq_override irq="11" gsi="11" flags="0xd"/> [init -> nic_drv -> platform_drv] <irq_override irq="10" gsi="10" flags="0xd"/> [init -> nic_drv -> platform_drv] <irq_override irq="9" gsi="9" flags="0xd"/> [init -> nic_drv -> platform_drv] <irq_override irq="5" gsi="5" flags="0xd"/> [init -> nic_drv -> platform_drv] <irq_override irq="0" gsi="2" flags="0x0"/> [init -> nic_drv -> platform_drv] </acpi> [init -> nic_drv -> platform_drv] [init -> nic_drv -> platform_drv] Error: Uncaught exception of type 'int' [init -> nic_drv -> platform_drv] Warning: abort called - thread: ep
I figured out that following is missing: [init -> nic_drv -> platform_drv] <bdf start="0" count="65536" base="0xb0000000"/>
The acpi_drv get this from [init -> nic_drv -> acpi_drv] MCFG BASE 0xb0000000 seg 0x0 bus 0x0-0xff MCFG -> PCI Express memory mapped configuration space base address Description Table
I also figured out that the qemu parameter -machine q35 is using as chipset a ICH9 and this has PCIe
* Can I somehow "manuel" configure the system on 440FX based hardware ? * Is there a reason why platform_drv is not supporting older hardware ?
Thanks Jörg
Hello Jörg,
On Wed, Feb 24, 2021 at 15:01:26 CET, Joerg-C. Boehme wrote:
I have some question about the: acpi_drv and platform_drv.
In short: Is acpi_drv and platform_drv are only supporting hardware boards with PCIe ?
In general, no, we do not depend on PCIe directly. Nevertheless, I admit that we do not test PCIe-less systems in any real-world scenario.
And start the var/run/lighttpd.iso with qemu-system-x86_64 (without -machine q35 parameter!) qemu-system-x86_64 -no-kvm -display sdl -cpu core2duo -nographic -netdev user,id=net0,hostfwd=tcp::5555-:80,hostfwd=tcp::5556-:443 -net nic,model=e1000,netdev=net0 -serial mon:stdio -m 512 -cdrom var/run/lighttpd.iso
As you discovered this is not supported. The reason is not the missing PCIe capability but that Qemu's i440FX chipset does not support ECAM/MMCONF (memory-mapped) PCI configuration space access. We replaced the I/O port based PCI driver implementation by MMCONF based access after a vivid discussion in 2018 [1]. Thus, we may indirectly depend on PCIe if systems lacking PCIe ports also lack MMCONF.
- Can I somehow "manuel" configure the system on 440FX based hardware ?
In theory, you could generate the acpi_drv report by hand. But that's not my playground.
- Is there a reason why platform_drv is not supporting older hardware ?
We switched to MMCONF because of demand from the community and the promise that it's widely available. We never considered to support both PCI-config access options for complexity and testing effort reasons.
[1] https://github.com/genodelabs/genode/commit/47724c68c2c27a430e9a60c55ebb42f8...
Greets
Hi Christian,
thanks for the quick answer.
Am Mittwoch, 24. Februar 2021 15:58:50 CET schrieb Christian Helmuth:
The reason is not the missing PCIe capability but that Qemu's i440FX chipset does not support ECAM/MMCONF (memory-mapped) PCI configuration space access.
I found in the PCI/PCI Express Configuration Space Access documentation [1] the following sentence: PCI Express defines an Enhanced Configuration Access mechanism (ECAM). This means, i440FX chipset type based hardware [2] are old Pentium hardware and PCIe did not exist on it.
I don't want to be petty but I need a "criteria" to "sort" my hardware for genode :-) At least where I can use the "acpi_drv".
Again thanks for your answer and also for the support.
Greets Jörg
[1] http://developer.amd.com/wordpress/media/2012/10/pci%20-%20pci%20express%20c... [2] https://en.wikipedia.org/wiki/Intel_440FX