[edk2-devel] [PATCH] MdeModulePkg/PciHostBridge: Update Mem and PMem Limit Checks

Wasim Khan wasim.khan at nxp.com
Fri Apr 24 07:32:56 UTC 2020



> -----Original Message-----
> From: Ard Biesheuvel <ard.biesheuvel at arm.com>
> Sent: Friday, April 24, 2020 11:38 AM
> To: devel at edk2.groups.io; Wasim Khan <wasim.khan at nxp.com>; Ard
> Biesheuvel <ard.biesheuvel at linaro.org>
> Cc: Varun Sethi <V.Sethi at nxp.com>; Wu, Hao A <hao.a.wu at intel.com>; Ni, Ray
> <ray.ni at intel.com>
> Subject: Re: [edk2-devel] [PATCH] MdeModulePkg/PciHostBridge: Update Mem
> and PMem Limit Checks
> 
> On 4/24/20 6:35 AM, Wasim Khan via groups.io wrote:
> >
> >
> >> -----Original Message-----
> >> From: Ard Biesheuvel <ard.biesheuvel at linaro.org>
> >> Sent: Friday, April 24, 2020 12:27 AM
> >> To: Wasim Khan <wasim.khan at nxp.com>
> >> Cc: edk2-devel-groups-io <devel at edk2.groups.io>; Varun Sethi
> >> <V.Sethi at nxp.com>; Wu, Hao A <hao.a.wu at intel.com>; Ni, Ray
> >> <ray.ni at intel.com>
> >> Subject: Re: [PATCH] MdeModulePkg/PciHostBridge: Update Mem and PMem
> >> Limit Checks
> >>
> >> On Thu, 23 Apr 2020 at 12:43, Wasim Khan <wasim.khan at nxp.com> wrote:
> >>>
> >>> With Address Translation Support, it is possible and also correct
> >>> that Mem and Pmem Limit cross the 4GB boundary.
> >>> Update the checks so that Mem/PMem Limit should not cross 4GB from
> >>> the Mem/PMem Base address.
> >>>
> >>> Signed-off-by: Wasim Khan <wasim.khan at nxp.com>
> >>> ---
> >>>   MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c | 8 ++++----
> >>>   1 file changed, 4 insertions(+), 4 deletions(-)
> >>>
> >>> diff --git a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c
> >>> b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c
> >>> index d304fae..9cf7e98 100644
> >>> --- a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c
> >>> +++ b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c
> >>> @@ -117,8 +117,8 @@ CreateRootBridge (
> >>>     // Make sure Mem and MemAbove4G apertures are valid
> >>>     //
> >>>     if (RESOURCE_VALID (&Bridge->Mem)) {
> >>> -    ASSERT (Bridge->Mem.Limit < SIZE_4GB);
> >>> -    if (Bridge->Mem.Limit >= SIZE_4GB) {
> >>> +    ASSERT (Bridge->Mem.Limit < (Bridge->Mem.Base + SIZE_4GB));
> >>> +    if (Bridge->Mem.Limit >= (Bridge->Mem.Base + SIZE_4GB)) {
> >>>         return NULL;
> >>>       }
> >>>     }
> >>> @@ -129,8 +129,8 @@ CreateRootBridge (
> >>>       }
> >>>     }
> >>>     if (RESOURCE_VALID (&Bridge->PMem)) {
> >>> -    ASSERT (Bridge->PMem.Limit < SIZE_4GB);
> >>> -    if (Bridge->PMem.Limit >= SIZE_4GB) {
> >>> +    ASSERT (Bridge->PMem.Limit < (Bridge->PMem.Base + SIZE_4GB));
> >>> +    if (Bridge->PMem.Limit >= (Bridge->PMem.Base + SIZE_4GB)) {
> >>>         return NULL;
> >>>       }
> >>>     }
> >>> --
> >>> 2.7.4
> >>>
> >>
> >> This is not the right fix.
> >>
> >> The translation offset should be taken into account for these checks
> >
> > Thanks for the review Ard.
> > device address = host address + translation offset.
> > Mem and Pmem represents "device address" , so that are already taking
> translation offset into account.
> >
> 
> OK, apparently I am missing something.
> 
> For the MMIO32 window, the limit has to be < 4 GB, since the whole region
> needs to be 32-bit addressable. Otherwise, how are you going to allocate a 32-
> bit BAR from the part of the window that is > 4 GB ?
> 

OK, it is correct that we can not allocate 32-bit BAR from the part of window that is > 4GB.
Thanks for catching it.
Thanks Ard, Ray for the good discussion.

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#58027): https://edk2.groups.io/g/devel/message/58027
Mute This Topic: https://groups.io/mt/73215737/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list