Re: [PATCH v7 1/6] MdeModulePkg/PciHostBridge: io range is not mandatory


Gerd Hoffmann
 

Hi,

I did a quick test with both ArmVirtQemu and microvm (using this
series but omitting the MdeModulePkg), and I can confirm that not
having a I/O resource window at all seems to work fine if none of the
PCI devices have I/O BARs.

Gerd, do you remember why exactly this patch is needed? Is it related
to devices that have I/O BARs but don't actually require them to
function correctly?
Well, the difference seem to be pcie root ports. When plugging my
virtio device into the root bus everything is fine:

PCI Bus First Scanning
PciBus: Discovered PCI @ [00|00|00]

PciBus: Discovered PCI @ [00|01|00]
BAR[1]: Type = Mem32; Alignment = 0xFFF; Length = 0x1000; Offset = 0x14
BAR[4]: Type = PMem64; Alignment = 0x3FFF; Length = 0x4000; Offset = 0x20
[ ... ]
PciHostBridge: NotifyPhase (AllocateResources)
RootBridge: PciRoot(0x0)
Mem64: Base/Length/Alignment = 6000000000/100000/FFFFF - Success
Mem: Base/Length/Alignment = C0000000/100000/FFFFF - Success
PciBus: HostBridge->NotifyPhase(AllocateResources) - Success

When plugging the virtio device into a pcie root port it doesn't work
and the log looks like this:

PCI Bus First Scanning
PciBus: Discovered PCI @ [00|00|00]

PciBus: Discovered PPB @ [00|08|00]
Padding: Type = Mem32; Alignment = 0x1FFFFF; Length = 0x200000
Padding: Type = Io; Alignment = 0x1FF; Length = 0x200
BAR[0]: Type = Mem32; Alignment = 0xFFF; Length = 0x1000; Offset = 0x10

PciBus: Discovered PCI @ [01|00|00]
BAR[1]: Type = Mem32; Alignment = 0xFFF; Length = 0x1000; Offset = 0x14
BAR[4]: Type = PMem64; Alignment = 0x3FFF; Length = 0x4000; Offset = 0x20
[ ... ]
PciHostBridge: NotifyPhase (AllocateResources)
RootBridge: PciRoot(0x0)
Mem: Base/Length/Alignment = C0000000/300000/1FFFFF - Success
Mem64: Base/Length/Alignment = 6000000000/100000/FFFFF - Success
I/O: Base/Length/Alignment = FFFFFFFFFFFFFFFF/1000/FFF - Out Of Resource!
[ ... ]
PciHostBridge: NotifyPhase (AllocateResources)
RootBridge: PciRoot(0x0)
Mem64: Base/Length/Alignment = 6000000000/100000/FFFFF - Success
Mem: Base/Length/Alignment = C0000000/200000/FFFFF - Success
I/O: Base/Length/Alignment = FFFFFFFFFFFFFFFF/0/FFF - Out Of Resource!

So, it's apparently the io window of the pcie root port which causes
edk2 try allocate io resources.

take care,
Gerd

Join devel@edk2.groups.io to automatically receive all group messages.