Hi Pranav, On Sun, Jul 19, 2020 at 2:19 PM Pranav Madhu <pranav.ma...@arm.com> wrote: > > From: Deepak Pandey <deepak.pan...@arm.com> > > A slave error is generated when host accesses the config space of > non-available device or unimplemented function on a given bus. So > implement a Neoverse N1 SoC specific PciExpressLib library with a > workaround to return 0xffffffff for all such access. > > This library is inherited from MdePkg/Library/BasePciExpressLib and > based on commit 9344f0921518 of that library in the tianocore/edk2 > project. > > In addition to this, the Neoverse N1 SoC has two other limitations which > affect the access to the PCIe root port: > 1. ECAM space is not contiguous, root port ECAM (BDF = 0:0:0) is > isolated from rest of the downstream hierarchy ECAM space. > 2. Root port ECAM space is not capable of 8bit/16bit writes. > This library includes workaround for these limitations as well. > > Cc: Ard Biesheuvel <ard.biesheu...@arm.com> > Cc: Leif Lindholm <l...@nuviainc.com> > Signed-off-by: Pranav Madhu <pranav.ma...@arm.com> > --- > Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec > | 4 + > > Silicon/ARM/NeoverseN1Soc/Library/NeoverseN1SocPciExpressLib/PciExpressLib.inf > | 56 + > Silicon/ARM/NeoverseN1Soc/Library/NeoverseN1SocPciExpressLib/PciExpressLib.c > | 1589 ++++++++++++++++++++ > 3 files changed, 1649 insertions(+) >
<...> > +UINT8 > +EFIAPI > +PciExpressWrite8 ( > + IN UINTN Address, > + IN UINT8 Value > + ) > +{ > + UINT8 Bus, Device, Function; > + UINT8 Offset; > + UINT32 Data; > + > + ASSERT_INVALID_PCI_ADDRESS (Address); > + > + Bus = GET_BUS_NUM (Address); > + Device = GET_DEV_NUM (Address); > + Function = GET_FUNC_NUM (Address); > + > + // > + // 8-bit and 16-bit writes to root port config space is not supported due > to > + // a hardware limitation. As a workaround, perform a read-update-write > + // sequence on the whole 32-bit word of the root port config register such > + // that only the specified 8-bits of that word are updated. > + // > + if ((Bus == 0) && (Device == 0) && (Function == 0)) { > + Offset = Address & 0x3; > + Address &= 0xFFFFFFFC; > + Data = MmioRead32 ((UINTN)GetPciExpressAddress (Address)); nit: There should have been a space before the GetPciExpressAddress. This is inconsistent with the rest of the file. Thanks, Thomas. <...> -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#62989): https://edk2.groups.io/g/devel/message/62989 Mute This Topic: https://groups.io/mt/75658679/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-