Ard, Thank you very much for your comment.
> -----Original Message----- > From: Ard Biesheuvel [mailto:[email protected]] > Sent: Sunday, May 13, 2018 3:25 AM > To: Roman Bacik > Cc: [email protected]; Ruiyu Ni; Vladimir Olovyannikov > Subject: Re: [edk2] [PATCH] Enable using device address when programming > BARs > > On 9 May 2018 at 22:17, Roman Bacik <[email protected]> wrote: > > I will upload v2 with the corrected subject - add package name > > MdeModulePkg/Bus . > > > > I don't think this is the correct approach. Please use the address > translation > support that has been added recently to PciHostBridgeDxe and > PciHostBridgeLib. > Would you like to see this change: Address = Base + Node->Offset; + if (UseDeviceAddress) + Address = TO_DEVICE_ADDRESS(Address, -Base); Instead of: - Address = Base + Node->Offset; + Address = UseDeviceAddress? Node->Offset: Base + Node->Offset; > > > > > > *From:* Roman Bacik [mailto:[email protected]] > > *Sent:* Thursday, May 3, 2018 3:55 PM > > *To:* [email protected] > > *Cc:* Ruiyu Ni; Vladimir Olovyannikov > > *Subject:* [edk2] [PATCH] Enable using device address when programming > > BARs > > > > > > > > Some SoCs require to use device address when BARs are programmed: > > https://bugzilla.tianocore.org/show_bug.cgi?id=948 > > > > Cc: Ruiyu Ni <[email protected]> > > Cc: Vladimir Olovyannikov <[email protected]> > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Roman Bacik <[email protected]> > > --- > > MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf | 1 + > > MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c | 8 +++++--- > > MdeModulePkg/MdeModulePkg.dec | 3 +++ > > MdeModulePkg/MdeModulePkg.dsc | 1 + > > 4 files changed, 10 insertions(+), 3 deletions(-) > > > > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf > > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf > > index 97608bfcf245..1368e5068574 100644 > > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf > > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf > > @@ -110,6 +110,7 @@ > > gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport ## > CONSUMES > > gEfiMdeModulePkgTokenSpaceGuid.PcdMrIovSupport ## > CONSUMES > > gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration ## > > SOMETIMES_CONSUMES > > + gEfiMdeModulePkgTokenSpaceGuid.PcdUseDeviceAddress ## > CONSUMES > > > > [UserExtensions.TianoCore."ExtraFiles"] > > PciBusDxeExtra.uni > > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c > > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c > > index 2f713fcee95e..a23bd1e258ef 100644 > > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c > > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c > > @@ -1269,6 +1269,7 @@ ProgramBar ( > > EFI_PCI_IO_PROTOCOL *PciIo; > > UINT64 Address; > > UINT32 Address32; > > + BOOLEAN UseDeviceAddress; > > > > ASSERT (Node->Bar < PCI_MAX_BAR); > > > > @@ -1282,8 +1283,9 @@ ProgramBar ( > > > > Address = 0; > > PciIo = &(Node->PciDev->PciIo); > > + UseDeviceAddress = FeaturePcdGet (PcdUseDeviceAddress); > > > > - Address = Base + Node->Offset; > > + Address = UseDeviceAddress? Node->Offset: Base + Node->Offset; > > > > // > > // Indicate pci bus driver has allocated @@ -1308,7 +1310,7 @@ > > ProgramBar ( > > &Address > > ); > > > > - Node->PciDev->PciBar[Node->Bar].BaseAddress = Address; > > + Node->PciDev->PciBar[Node->Bar].BaseAddress = UseDeviceAddress? > > + Base + > > Address: Address; > > > > break; > > > > @@ -1335,7 +1337,7 @@ ProgramBar ( > > &Address32 > > ); > > > > - Node->PciDev->PciBar[Node->Bar].BaseAddress = Address; > > + Node->PciDev->PciBar[Node->Bar].BaseAddress = UseDeviceAddress? > > + Base + > > Address: Address; > > > > break; > > > > diff --git a/MdeModulePkg/MdeModulePkg.dec > > b/MdeModulePkg/MdeModulePkg.dec index cc397185f7b9..58425ee0d57f > > 100644 > > --- a/MdeModulePkg/MdeModulePkg.dec > > +++ b/MdeModulePkg/MdeModulePkg.dec > > @@ -1005,6 +1005,9 @@ > > # @Prompt Enable UEFI Stack Guard. > > > > > gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard|FALSE|BOOLEAN|0 > x300010 > > 55 > > > > + ## Indicates whether the device address should be used for BAR > > programming > > + > > > > > gEfiMdeModulePkgTokenSpaceGuid.PcdUseDeviceAddress|FALSE|BOOLEA > N|0x300 > > 01056 > > + > > [PcdsFixedAtBuild, PcdsPatchableInModule] > > ## Dynamic type PCD can be registered callback function for Pcd > > setting action. > > # PcdMaxPeiPcdCallBackNumberPerPcdEntry indicates the maximum > > number of callback function diff --git > a/MdeModulePkg/MdeModulePkg.dsc > > b/MdeModulePkg/MdeModulePkg.dsc index > ec24a50c7d0a..39b397cb13d9 > > 100644 > > --- a/MdeModulePkg/MdeModulePkg.dsc > > +++ b/MdeModulePkg/MdeModulePkg.dsc > > @@ -200,6 +200,7 @@ > > > gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule|0x0 > > gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizePopulateCapsule|0x0 > > > gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|28 > > + gEfiMdeModulePkgTokenSpaceGuid.PcdUseDeviceAddress|FALSE > > > > [PcdsFixedAtBuild.IPF] > > > gEfiMdePkgTokenSpaceGuid.PcdIoBlockBaseAddressForIpf|0x0ffffc000000 > > -- > > 1.9.1 > > _______________________________________________ > > edk2-devel mailing list > > [email protected] > > https://lists.01.org/mailman/listinfo/edk2-devel Thanks, Roman _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

