Branch: refs/heads/master
  Home:   https://github.com/tianocore/edk2
  Commit: de103f1981cfca90dd19296d4b20449a2b93dc26
      
https://github.com/tianocore/edk2/commit/de103f1981cfca90dd19296d4b20449a2b93dc26
  Author: Foster Nong <foster.n...@intel.com>
  Date:   2022-10-08 (Sat, 08 Oct 2022)

  Changed paths:
    M MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c

  Log Message:
  -----------
  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>
Reviewed-by: Ray Ni <ray...@intel.com>




_______________________________________________
edk2-commits mailing list
edk2-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to