[OpenBIOS] Adding new device in the middle of device-tree
BALATON Zoltan
balaton at eik.bme.hu
Sat Jul 15 22:27:18 CEST 2017
On Thu, 13 Jul 2017, Mark Cave-Ayland wrote:
> On 28/05/17 11:38, BALATON Zoltan wrote:
>> I'm trying to do this so I don't need the patch to OpenBIOS:
>>
>> https://mail.coreboot.org/pipermail/openbios/2017-January/009867.html
>>
>> Unfortunately the code relying on this (which I can't change) seems to
>> have some assumptions about order of pci busses in the device tree and
>> only works if added before the exising entry (i.e. /pci at f0000000 has to
>> come before /pci at f2000000).
>
> FWIW I've just been testing OpenBIOS git master ready for upstreaming to
> QEMU and noticed the the recent changes to the PCI host bridge
> properties have fixed PCI bus enumeration on FreeBSD PPC under -M mac99
> (it still panics, but hey at least it finally sees a proper set of devices).
>
> If you get a moment, can you try again with git master and report back
> whether things have improved for you or not?
It works as good as before: that is I still need the above patch but your
changes haven't seem to do any harm nor fix anything for what I have
tested.
I'm still not sure how to add another PCI bus to MAC99 because the
assumption of a single PCI bus seems to be in the OpenBIOS pci driver.
I've noticed some possible redundancy though in the pci arch definition:
[ARCH_MAC99] = {
.name = "MAC99",
.vendor_id = PCI_VENDOR_ID_APPLE,
.device_id = PCI_DEVICE_ID_APPLE_UNI_N_PCI,
.cfg_addr = 0xf2800000,
.cfg_data = 0xf2c00000,
.cfg_base = 0xf2000000,
.cfg_len = 0x02000000,
.host_pci_base = 0x0,
.pci_mem_base = 0x80000000,
.mem_len = 0x10000000,
.io_base = 0xf2000000,
.io_len = 0x00800000,
.host_ranges = {
{ .type = IO_SPACE, .parentaddr = 0, .childaddr = 0xf2000000, .len = 0x00800000 },
{ .type = MEMORY_SPACE_32, .parentaddr = 0x80000000, .childaddr = 0x80000000, .len = 0x10000000 },
{ .type = 0, .parentaddr = 0, .childaddr = 0, .len = 0 }
},
.irqs = { 0x1b, 0x1c, 0x1d, 0x1e }
},
Aren't pci_mem_base/mem_len and io_base/io_len the same as the IO and
MEMORY ranges in host_ranges (and the cfg_* values offsets into the IO
space)? Do we need these separately or could it be simplified?
To add another PCI bus I think this arch structure needs to be extended to
be able to define ids and ranges for multiple buses but I'm not sure how
to do that without breaking other archs. Do you have any idea how to go
about this? (Also does any other arch need this? If not is it worth doing
it when the other PCI bus on QEMU is empty with no devices and we only
need it to be present in the device tree? So could we just go with the
above hack until handling multiple PCI buses are implemented eventually?)
Regards,
BALATON Zoltan
More information about the OpenBIOS
mailing list