[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [edk2] OVMF broken under Xen (in PCI initialisation)
On Thu, May 05, 2016 at 08:03:05AM +0000, Ni, Ruiyu wrote: > Gary, > Can you kindly teach me how to run OVMF under Xen? > > I worked out a draft fix and need to verify whether > everything is fine. > Currently you need to build Xen's hvmloader, which will embed a OVMF binary inside it. These are some rough steps: 1. git clone xen.git from xenbits.xen.org 2. cd xen.git, create a .config file, which contains lines: OVMF_UPSTREAM_URL = /path/to/your/ovmf/tree OVMF_UPSTREAM_REVISION = $OVMF_REVISION 3. run ./configure --enable-ovmf 4. make dist -- you will get everything built in dist directory Depending whether you have a working xen system or not, you might want to either 1. install the xen system you just built. or 1. get the hvmloader binary from dist/install/usr/local/lib/xen/boot 2. copy that to your working xen system Feel free to ask questions. As a side note, your ovmf will be cloned into tools/firmware/ directory, you can check if xen is really building the commit you want there. It's a bit cumbersome at the moment. Hopefully this will change in the next release -- Anthony has a series to let you provide a firmware binary directly. Wei. > Regards, > Ray > > >-----Original Message----- > >From: Laszlo Ersek [mailto:lersek@xxxxxxxxxx] > >Sent: Thursday, April 28, 2016 6:36 PM > >To: Ni, Ruiyu <ruiyu.ni@xxxxxxxxx>; Gary Lin <glin@xxxxxxxx> > >Cc: edk2-devel@xxxxxxxxxxxx <edk2-devel@xxxxxxxxxxx>; Xen Devel > ><xen-devel@xxxxxxxxxxxxx>; Kinney, Michael D > ><michael.d.kinney@xxxxxxxxx> > >Subject: Re: [edk2] OVMF broken under Xen (in PCI initialisation) > > > >On 04/28/16 07:08, Ni, Ruiyu wrote: > > > > > >>>>> Do you know whether Xen passes the PCI device resource > >>>>> information to firmware? > >>> > >>> I don't think so, no. > >>> > >>> But, given that the previous PciHostBridgeDxe driver was working on Xen, > >>> can we perhaps emulate that behavior in > >>> "OvmfPkg/Library/PciHostBridgeLib" somehow? > >> > >> Let me explain the reason why previous PciHostBridgeDxe driver was > >> working on Xen: > >> The PciRootBridgeIo.Configuration() in new driver only create resource > >> descriptor when the resource status is allocated: > >> > >> if (ResAllocNode->Status != ResAllocated) { > >> continue; > >> } > >> > >> The same function in old driver doesn't check the Status field so it > >> unconditionally returns BUS descriptor with AddrRangeMin and > >> AddrRangeMax both equal 0. So that PciEnumeratorLight() > >> in PciBus driver can still search the devices from starting bus 0. > >> It just happened to work. > >> > >> I think the new driver's Configuration() implementation is correct > >> while the old driver's one is wrong. So I don't want to change to > >> wrong implementation to fix this issue. > > > >Makes sense, thank you for the explanation. > > > >> The issue can be resolved if we have a way to tell PciBus > >> PciEnumeratorLight() which bus number to start searching. > >> > >> It's almost true that starting bus number for root bridge #0 > >> is 0. But it might not be true for the rest root bridges. > >> > >> OVMF's PciHostBridgeLib currently returns multiple root bridges > >> and for root bridge #1, the starting bus number is obviously > >> not 0 unless "etc/extra-pci-roots" doesn't exist or is 0 so there is > >> only one root bridge. > >> > >> My question is in OVMF over Xen, does "etc/extra-pci-roots" exist? > >> If it exists, device behind root bridge #1, #2... can *not* be found > >> with the current implementation. > > > >"etc/extra-pci-roots" (more precisely, fw_cfg in general) is specific to > >QEMU. QemuFwCfgLib runs alright in Xen guests, but whenever you look for > >an fw_cfg file, it is not found -- which is good behavior. > > > >So, OVMF's PciHostBridgeLib produces exactly one PCI_ROOT_BRIDGE object > >when it runs on Xen. ExtraRootBridges is set to zero, the loop runs zero > >times, and the one InitRootBridge() call after the loop produces one > >PCI_ROOT_BRIDGE object, with the following parameters: > >- Bus.Base = 0 > >- Bus.Limit = PCI_MAX_BUS > > > >Thanks > >Laszlo > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |