[OpenBIOS] [PATCH 3/4] arch/ppc/qemu: Add a node for the other (empty) PCI bus to the device tree
BALATON Zoltan
balaton at eik.bme.hu
Sun Jan 1 23:22:01 CET 2017
On Sat, 31 Dec 2016, Mark Cave-Ayland wrote:
> I've given this a spin around my PPC images and I don't see any
> regressions so I think this is going in the right direction - I think it
Good to hear. Have you also tested if it makes a difference with irq-s on
mac99? I've found that USB irq-s did not work correctly without this patch
so it may help with problems with that (e.g. sound and mouse problems) and
likely makes the patch in OpenBIOS to set the bus master for RTL8139
unnecessary as well but I haven't tested these.
> may need a couple of minor tweaks though.
>
> Firstly, I now see the following PCI BAR warnings on boot for my old
> openSUSE 11 boot ISO (openSUSE-11.1-NET-ppc.iso):
[...]
> I/O resource not set for host bridge 0
> Memory resource not set for host bridge 0
> pci 0001:10:0e.0: BAR 0: can't allocate mem resource [0x0-0xffffff]
> pci 0001:10:0c.0: BAR 0: can't allocate mem resource [0x0-0x7ffff]
> pci 0001:10:0f.0: BAR 6: can't allocate mem resource [0x82040000-0x8207ffff]
> pci 0001:10:0e.0: BAR 6: can't allocate mem resource [0x82010000-0x8201ffff]
> pci 0001:10:0e.0: BAR 2: can't allocate mem resource [0x0-0xfff]
> pci 0001:10:0d.0: BAR 0: can't allocate mem resource [0x0-0xff]
> ohci_hcd 0001:10:0d.0: init 0001:10:0d.0 fail, -16
Maybe these were silently failing before but I'm not sure what it is. It's
hard to see these messages on normal boot as it seems to be printing dark
gray text on black. Is there some way to get output on serial and enable
more detailed logs? I'm not familiar with openSUSE on PPC or yaboot.
I've also noticed this color problem with Finnix and wonder how this shows
up on real Macs. I thought Macs have a light background by default but
this happens after the boot loader has cleared the screen and set up its
own colors so maybe it's not the default background but there's a problem
somewhere later. (After all the OpenBIOS background is also light but
it's cleared black before the text is printed.)
> So perhaps you might need to fake up a few extra properties to get rid
> of the warnings on boot?
I'm not sure. Maybe only the first two warnings for bridge 0 could be
eliminated by that but the other warnings refer to cards on the second bus
and not the one my patch touches. Maybe the patch just uncovers problems
with the other bus that was hidden so far because these requests were
previously sent to the first bus and got empty replies earlier before it
could get to the place where the warnings are issued. These warnings may
show that the cards are actually tried to be initialised now but there are
some problems. These may need to be fixed somewhere else on the other bus
not in the empty PCI bus my patch adds as that does not have these cards
at all.
> Secondly while the address of the extra PCI node looks fine for -M mac99
> in the device tree, I'm not sure it is correct for -M g3beige:
[...]
> Perhaps the extra /pci node needs to be wrapped in an [IFDEF] block or
> similar so that it only appears for -M mac99?
It's likely wrong for g3beige but not sure an [IFDEF] would be enough to
make it only appear on mac99. [IFDEF]s seem to test CONFIG_* options but
mac99 is a runtime parameter so we would need a way to detect if we're
running on mac99 or g3beige (the same openbios-elf.ppc compiled with the
same CONFIG_* options can run on both so I can't use [IFDEF] for that). We
would need to test the value of machine_id from arch/ppc/qemu/init.c for
this but I'm not sure how to do that from Forth. Maybe moving the patch
from Forth to C would be easier.
But instead of that we could also aim for a more complete solution and
consider doing it similar to spapr and SLOF and generate an fdt in QEMU
and pass it to OpenBIOS and patch/amend it as needed after converting to a
usual device tree (we could use the code from SLOF for this). I've checked
how it's done with spapr and there a call to the hypervisor is used to get
the fdt. We don't have that but we already use FWCFG so we could use
FW_CFG_SETUP_* to pass the fdt. I think this is doable but I'm still
missing some details and haven't tried to implement it. What do you think
about such a solution? Basiacally we would need to add creating the fdt
and making it available via FWCFG to the mac machines in QEMU, then
implement getting it and using it in OpenBIOS. This way we could also
solve the problem of keeping OpenBIOS and QEMU in sync because a change in
the fdt could be made entirely in QEMU without needing a corresponding
change in OpenBIOS. Also adding new machines could be easier. This is a
bigger task but maybe worth doing if it could make the current code
cleaner.
Regards,
BALATON Zoltan
More information about the OpenBIOS
mailing list