Reviewed-by: Ray Ni <ray...@intel.com> > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Foster Nong > Sent: Thursday, September 29, 2022 5:20 PM > To: devel@edk2.groups.io > Cc: Nong, Foster <foster.n...@intel.com> > Subject: [edk2-devel] [PATCH 1/1] MdeModulePkg: Handle InitialVFs=0 case for > SR-IOV > > Per the section 3.3.5 SR-IOV spec v1.1, InitialVFs (0ch). > InitialVFs indicates to SR-PCIM the number of VFs that are initially > associated with the PF. > The minimum value of InitialVFs is 0. > > Below code is used to calculate SR-IOV reserved bus number, > if InitialVFs =0, it maybe calculate the wrong bus number in this case. > LastVF = PFRid + FirstVFOffset + (PciIoDevice->InitialVFs - 1) * VFStride > > we can fix it with below code: > if (PciIoDevice->InitialVFs == 0) { > PciIoDevice->ReservedBusNum = 0; > } else { > PFRid = EFI_PCI_RID (Bus, Device, Func); > LastVF = PFRid + FirstVFOffset + (PciIoDevice->InitialVFs - 1) * VFStride; > // > // Calculate ReservedBusNum for this PF > // > PciIoDevice->ReservedBusNum = (UINT16)(EFI_PCI_BUS_OF_RID (LastVF) - Bus + 1); > // > // Calculate ReservedBusNum for this PF > // > PciIoDevice->ReservedBusNum = (UINT16)(EFI_PCI_BUS_OF_RID (LastVF) - Bus + > 1); > } > > https://bugzilla.tianocore.org/show_bug.cgi?id=4069 > > Signed-off-by: Foster Nong <foster.n...@intel.com> > --- > .../Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 16 ++++++++++------ > 1 file changed, 10 insertions(+), 6 deletions(-) > > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c > index 509f828b621d..eb250f6f7b62 100644 > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c > @@ -2416,13 +2416,17 @@ CreatePciIoDevice ( > // > // Calculate LastVF > // > - PFRid = EFI_PCI_RID (Bus, Device, Func); > - LastVF = PFRid + FirstVFOffset + (PciIoDevice->InitialVFs - 1) * > VFStride; > + if (PciIoDevice->InitialVFs == 0) { > + PciIoDevice->ReservedBusNum = 0; > + } else { > + PFRid = EFI_PCI_RID (Bus, Device, Func); > + LastVF = PFRid + FirstVFOffset + (PciIoDevice->InitialVFs - 1) * > VFStride; > > - // > - // Calculate ReservedBusNum for this PF > - // > - PciIoDevice->ReservedBusNum = (UINT16)(EFI_PCI_BUS_OF_RID (LastVF) - > Bus + 1); > + // > + // Calculate ReservedBusNum for this PF > + // > + PciIoDevice->ReservedBusNum = (UINT16)(EFI_PCI_BUS_OF_RID (LastVF) - > Bus + 1); > + } > > DEBUG (( > DEBUG_INFO, > -- > 2.37.1.windows.1 > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#94558): https://edk2.groups.io/g/devel/message/94558 Mute This Topic: https://groups.io/mt/94007103/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-