[edk2,3/5] ArmVirtPkg: refactor reading of the physical address space size

Message ID 20181123121431.22353-4-ard.biesheuvel@linaro.org
State New
Headers show
Series
  • ArmPkg, ArmVirtPkg: lift 40-bit IPA space limit
Related show

Commit Message

Ard Biesheuvel Nov. 23, 2018, 12:14 p.m.
In preparation of dropping the hardcoded 40-bit limit on the physical
address space when running under virtualization, let's refactor the
code a bit so we read the hardware limit in a single place.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h                       |  1 +
 ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c |  4 +-
 ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S          | 39 --------------------
 ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S              | 24 ------------
 ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c           |  3 +-
 ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf         |  6 ---
 ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf      |  6 ---
 ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S           | 39 --------------------
 ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S               | 24 ------------
 ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c             |  8 +---
 ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf           |  6 ---
 11 files changed, 8 insertions(+), 152 deletions(-)

-- 
2.17.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Laszlo Ersek Nov. 26, 2018, 10 a.m. | #1
On 11/23/18 13:14, Ard Biesheuvel wrote:
> In preparation of dropping the hardcoded 40-bit limit on the physical

> address space when running under virtualization, let's refactor the

> code a bit so we read the hardware limit in a single place.

> 

> Contributed-under: TianoCore Contribution Agreement 1.1

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---

>  ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h                       |  1 +

>  ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c |  4 +-

>  ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S          | 39 --------------------

>  ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S              | 24 ------------

>  ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c           |  3 +-

>  ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf         |  6 ---

>  ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf      |  6 ---

>  ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S           | 39 --------------------

>  ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S               | 24 ------------

>  ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c             |  8 +---

>  ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf           |  6 ---

>  11 files changed, 8 insertions(+), 152 deletions(-)


OK so we got:

- one declaration for ArmVirtGetMemoryMap(), namely in
"ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h";

- two implementations (in
"ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c" and
"ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c");

- and one call site (in
"ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c").

> 

> diff --git a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

> index bdf1c513bc6d..15562b35c730 100644

> --- a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

> +++ b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

> @@ -35,6 +35,7 @@

>  VOID

>  EFIAPI

>  ArmVirtGetMemoryMap (

> +  IN  EFI_PHYSICAL_ADDRESS            TopOfAddressSpace,


Good parameter name; in OvmfPkg/PlatformPei, I call the same thing
"FirstNonAddress". :)

This handles the declaration of the API.

>    OUT ARM_MEMORY_REGION_DESCRIPTOR    **VirtualMemoryMap

>    );

>  

> diff --git a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c

> index 05afd1282422..3f0e9b3a0579 100644

> --- a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c

> +++ b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c

> @@ -15,6 +15,7 @@

>  

>  #include <PiPei.h>

>  

> +#include <Library/ArmLib.h>


Right, the INF file already spells out the ArmLib class, but the header
was never included. (Has the lib class been superfluous all this time?
Who knows. We do need it now.)

>  #include <Library/ArmMmuLib.h>

>  #include <Library/ArmVirtMemInfoLib.h>

>  #include <Library/DebugLib.h>

> @@ -39,7 +40,8 @@ InitMmu (

>    RETURN_STATUS                 Status;

>  

>    // Get Virtual Memory Map from the Platform Library

> -  ArmVirtGetMemoryMap (&MemoryTable);

> +  ArmVirtGetMemoryMap (LShiftU64 (1ULL, ArmGetPhysicalAddressBits ()),

> +    &MemoryTable);

>  

>    //Note: Because we called PeiServicesInstallPeiMemory() before to call InitMmu() the MMU Page Table resides in

>    //      DRAM (even at the top of DRAM as it is the first permanent memory allocation)


Right. I think I understand the use of ArmGetPhysicalAddressBits() here,
and I agree about the LShiftU64() too.

So this covers the call site. OK.

> diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S b/ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S

> deleted file mode 100644

> index a1f6a194d59b..000000000000

> --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S

> +++ /dev/null

> @@ -1,39 +0,0 @@

> -#

> -#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> -#  Copyright (c) 2016-2017, Linaro Limited. All rights reserved.

> -#

> -#  This program and the accompanying materials

> -#  are licensed and made available under the terms and conditions of the BSD License

> -#  which accompanies this distribution.  The full text of the license may be found at

> -#  http://opensource.org/licenses/bsd-license.php

> -#

> -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -#

> -#

> -

> -#include <AsmMacroIoLibV8.h>

> -

> -//EFI_PHYSICAL_ADDRESS

> -//GetPhysAddrTop (

> -//  VOID

> -//  );

> -ASM_FUNC(ArmGetPhysAddrTop)

> -  mrs   x0, id_aa64mmfr0_el1

> -  adr   x1, .LPARanges

> -  and   x0, x0, #7

> -  ldrb  w1, [x1, x0]

> -  mov   x0, #1

> -  lsl   x0, x0, x1

> -  ret

> -

> -//

> -// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the

> -// physical address space support on this CPU:

> -// 0 == 32 bits, 1 == 36 bits, etc etc

> -// 6 and 7 are reserved

> -//

> -.LPARanges:

> -  .byte 32, 36, 40, 42, 44, 48, -1, -1

> -

> -ASM_FUNCTION_REMOVE_IF_UNREFERENCED

> diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S b/ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S

> deleted file mode 100644

> index 9cd81529fb3d..000000000000

> --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S

> +++ /dev/null

> @@ -1,24 +0,0 @@

> -#

> -#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> -#  Copyright (c) 2014-2017, Linaro Limited. All rights reserved.

> -#

> -#  This program and the accompanying materials

> -#  are licensed and made available under the terms and conditions of the BSD License

> -#  which accompanies this distribution.  The full text of the license may be found at

> -#  http://opensource.org/licenses/bsd-license.php

> -#

> -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -#

> -#

> -

> -#include <AsmMacroIoLib.h>

> -

> -//EFI_PHYSICAL_ADDRESS

> -//GetPhysAddrTop (

> -//  VOID

> -//  );

> -ASM_FUNC(ArmGetPhysAddrTop)

> -  mov   r0, #0x00000000

> -  mov   r1, #0x10000

> -  bx    lr

> diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c

> index 760bcc169cf4..4eca9b895354 100644

> --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c

> +++ b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c

> @@ -41,6 +41,7 @@ ArmGetPhysAddrTop (

>  **/

>  VOID

>  ArmVirtGetMemoryMap (

> +  IN  EFI_PHYSICAL_ADDRESS           TopOfAddressSpace,

>    OUT ARM_MEMORY_REGION_DESCRIPTOR   **VirtualMemoryMap

>    )

>  {

> @@ -80,7 +81,7 @@ ArmVirtGetMemoryMap (

>  

>    // Peripheral space after DRAM

>    TopOfMemory = MIN (1ULL << FixedPcdGet8 (PcdPrePiCpuMemorySize),

> -                     ArmGetPhysAddrTop ());

> +                     TopOfAddressSpace);

>    VirtualMemoryTable[2].PhysicalBase = VirtualMemoryTable[0].Length + VirtualMemoryTable[1].Length;

>    VirtualMemoryTable[2].VirtualBase  = VirtualMemoryTable[2].PhysicalBase;

>    VirtualMemoryTable[2].Length       = TopOfMemory -


This updates one of the implementations, replacing the internal (asm)
helper function with the external param. OK.

(1) Can you remove the declaration too, of the helper function
ArmGetPhysAddrTop(), in "QemuVirtMemInfoLib.c"? The 32-bit & 64-bit
definitions are removed with the assembly files, but the declaration is
currently left over.

> diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf

> index c72a97f9e78a..f2c461e3b55a 100644

> --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf

> +++ b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf

> @@ -24,12 +24,6 @@

>  [Sources]

>    QemuVirtMemInfoLib.c

>  

> -[Sources.ARM]

> -  Arm/PhysAddrTop.S

> -

> -[Sources.AARCH64]

> -  AArch64/PhysAddrTop.S

> -

>  [Packages]

>    ArmPkg/ArmPkg.dec

>    ArmVirtPkg/ArmVirtPkg.dec

> diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf

> index e4032d3efb53..f54fb51ee1d4 100644

> --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf

> +++ b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf

> @@ -26,12 +26,6 @@

>    QemuVirtMemInfoLib.c

>    QemuVirtMemInfoPeiLibConstructor.c

>  

> -[Sources.ARM]

> -  Arm/PhysAddrTop.S

> -

> -[Sources.AARCH64]

> -  AArch64/PhysAddrTop.S

> -

>  [Packages]

>    ArmPkg/ArmPkg.dec

>    ArmVirtPkg/ArmVirtPkg.dec


These look good.

> diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S b/ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S

> deleted file mode 100644

> index a1f6a194d59b..000000000000

> --- a/ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S

> +++ /dev/null

> @@ -1,39 +0,0 @@

> -#

> -#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> -#  Copyright (c) 2016-2017, Linaro Limited. All rights reserved.

> -#

> -#  This program and the accompanying materials

> -#  are licensed and made available under the terms and conditions of the BSD License

> -#  which accompanies this distribution.  The full text of the license may be found at

> -#  http://opensource.org/licenses/bsd-license.php

> -#

> -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -#

> -#

> -

> -#include <AsmMacroIoLibV8.h>

> -

> -//EFI_PHYSICAL_ADDRESS

> -//GetPhysAddrTop (

> -//  VOID

> -//  );

> -ASM_FUNC(ArmGetPhysAddrTop)

> -  mrs   x0, id_aa64mmfr0_el1

> -  adr   x1, .LPARanges

> -  and   x0, x0, #7

> -  ldrb  w1, [x1, x0]

> -  mov   x0, #1

> -  lsl   x0, x0, x1

> -  ret

> -

> -//

> -// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the

> -// physical address space support on this CPU:

> -// 0 == 32 bits, 1 == 36 bits, etc etc

> -// 6 and 7 are reserved

> -//

> -.LPARanges:

> -  .byte 32, 36, 40, 42, 44, 48, -1, -1

> -

> -ASM_FUNCTION_REMOVE_IF_UNREFERENCED

> diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S b/ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S

> deleted file mode 100644

> index 9cd81529fb3d..000000000000

> --- a/ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S

> +++ /dev/null

> @@ -1,24 +0,0 @@

> -#

> -#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> -#  Copyright (c) 2014-2017, Linaro Limited. All rights reserved.

> -#

> -#  This program and the accompanying materials

> -#  are licensed and made available under the terms and conditions of the BSD License

> -#  which accompanies this distribution.  The full text of the license may be found at

> -#  http://opensource.org/licenses/bsd-license.php

> -#

> -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -#

> -#

> -

> -#include <AsmMacroIoLib.h>

> -

> -//EFI_PHYSICAL_ADDRESS

> -//GetPhysAddrTop (

> -//  VOID

> -//  );

> -ASM_FUNC(ArmGetPhysAddrTop)

> -  mov   r0, #0x00000000

> -  mov   r1, #0x10000

> -  bx    lr

> diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c

> index 88ff3167cbfd..3d4e3e38c3f1 100644

> --- a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c

> +++ b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c

> @@ -18,11 +18,6 @@

>  

>  STATIC ARM_MEMORY_REGION_DESCRIPTOR  mVirtualMemoryTable[2];

>  

> -EFI_PHYSICAL_ADDRESS

> -ArmGetPhysAddrTop (

> -  VOID

> -  );

> -

>  /**

>    Return the Virtual Memory Map of your platform

>  


Aha, here you didn't miss the helper's declaration. :)

> @@ -39,6 +34,7 @@ ArmGetPhysAddrTop (

>  VOID

>  EFIAPI

>  ArmVirtGetMemoryMap (

> +  IN  EFI_PHYSICAL_ADDRESS           TopOfAddressSpace,

>    OUT ARM_MEMORY_REGION_DESCRIPTOR   **VirtualMemoryMap

>    )

>  {

> @@ -51,7 +47,7 @@ ArmVirtGetMemoryMap (

>    //

>    mVirtualMemoryTable[0].PhysicalBase = 0x0;

>    mVirtualMemoryTable[0].VirtualBase  = 0x0;

> -  mVirtualMemoryTable[0].Length       = ArmGetPhysAddrTop ();

> +  mVirtualMemoryTable[0].Length       = TopOfAddressSpace;

>    mVirtualMemoryTable[0].Attributes   = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;

>  

>    mVirtualMemoryTable[1].PhysicalBase = 0x0;


And this covers implementation #2.

> diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf

> index cd4c805a4db9..ae107810e927 100644

> --- a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf

> +++ b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf

> @@ -24,12 +24,6 @@

>  [Sources]

>    XenVirtMemInfoLib.c

>  

> -[Sources.ARM]

> -  Arm/PhysAddrTop.S

> -

> -[Sources.AARCH64]

> -  AArch64/PhysAddrTop.S

> -

>  [Packages]

>    ArmPkg/ArmPkg.dec

>    ArmVirtPkg/ArmVirtPkg.dec

> 


With (1) fixed:

Reviewed-by: Laszlo Ersek <lersek@redhat.com>


This is a good clean-up (with the help of patch #1) even without the
specific use case.

Thanks!
Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel Nov. 26, 2018, 11:44 a.m. | #2
On Mon, 26 Nov 2018 at 11:00, Laszlo Ersek <lersek@redhat.com> wrote:
>

> On 11/23/18 13:14, Ard Biesheuvel wrote:

> > In preparation of dropping the hardcoded 40-bit limit on the physical

> > address space when running under virtualization, let's refactor the

> > code a bit so we read the hardware limit in a single place.

> >

> > Contributed-under: TianoCore Contribution Agreement 1.1

> > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> > ---

> >  ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h                       |  1 +

> >  ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c |  4 +-

> >  ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S          | 39 --------------------

> >  ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S              | 24 ------------

> >  ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c           |  3 +-

> >  ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf         |  6 ---

> >  ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf      |  6 ---

> >  ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S           | 39 --------------------

> >  ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S               | 24 ------------

> >  ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c             |  8 +---

> >  ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf           |  6 ---

> >  11 files changed, 8 insertions(+), 152 deletions(-)

>

> OK so we got:

>

> - one declaration for ArmVirtGetMemoryMap(), namely in

> "ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h";

>

> - two implementations (in

> "ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c" and

> "ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c");

>

> - and one call site (in

> "ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c").

>

> >

> > diff --git a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

> > index bdf1c513bc6d..15562b35c730 100644

> > --- a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

> > +++ b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

> > @@ -35,6 +35,7 @@

> >  VOID

> >  EFIAPI

> >  ArmVirtGetMemoryMap (

> > +  IN  EFI_PHYSICAL_ADDRESS            TopOfAddressSpace,

>

> Good parameter name; in OvmfPkg/PlatformPei, I call the same thing

> "FirstNonAddress". :)

>

> This handles the declaration of the API.

>

> >    OUT ARM_MEMORY_REGION_DESCRIPTOR    **VirtualMemoryMap

> >    );

> >

> > diff --git a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c

> > index 05afd1282422..3f0e9b3a0579 100644

> > --- a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c

> > +++ b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c

> > @@ -15,6 +15,7 @@

> >

> >  #include <PiPei.h>

> >

> > +#include <Library/ArmLib.h>

>

> Right, the INF file already spells out the ArmLib class, but the header

> was never included. (Has the lib class been superfluous all this time?

> Who knows. We do need it now.)

>

> >  #include <Library/ArmMmuLib.h>

> >  #include <Library/ArmVirtMemInfoLib.h>

> >  #include <Library/DebugLib.h>

> > @@ -39,7 +40,8 @@ InitMmu (

> >    RETURN_STATUS                 Status;

> >

> >    // Get Virtual Memory Map from the Platform Library

> > -  ArmVirtGetMemoryMap (&MemoryTable);

> > +  ArmVirtGetMemoryMap (LShiftU64 (1ULL, ArmGetPhysicalAddressBits ()),

> > +    &MemoryTable);

> >

> >    //Note: Because we called PeiServicesInstallPeiMemory() before to call InitMmu() the MMU Page Table resides in

> >    //      DRAM (even at the top of DRAM as it is the first permanent memory allocation)

>

> Right. I think I understand the use of ArmGetPhysicalAddressBits() here,

> and I agree about the LShiftU64() too.

>

> So this covers the call site. OK.

>

> > diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S b/ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S

> > deleted file mode 100644

> > index a1f6a194d59b..000000000000

> > --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S

> > +++ /dev/null

> > @@ -1,39 +0,0 @@

> > -#

> > -#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> > -#  Copyright (c) 2016-2017, Linaro Limited. All rights reserved.

> > -#

> > -#  This program and the accompanying materials

> > -#  are licensed and made available under the terms and conditions of the BSD License

> > -#  which accompanies this distribution.  The full text of the license may be found at

> > -#  http://opensource.org/licenses/bsd-license.php

> > -#

> > -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> > -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> > -#

> > -#

> > -

> > -#include <AsmMacroIoLibV8.h>

> > -

> > -//EFI_PHYSICAL_ADDRESS

> > -//GetPhysAddrTop (

> > -//  VOID

> > -//  );

> > -ASM_FUNC(ArmGetPhysAddrTop)

> > -  mrs   x0, id_aa64mmfr0_el1

> > -  adr   x1, .LPARanges

> > -  and   x0, x0, #7

> > -  ldrb  w1, [x1, x0]

> > -  mov   x0, #1

> > -  lsl   x0, x0, x1

> > -  ret

> > -

> > -//

> > -// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the

> > -// physical address space support on this CPU:

> > -// 0 == 32 bits, 1 == 36 bits, etc etc

> > -// 6 and 7 are reserved

> > -//

> > -.LPARanges:

> > -  .byte 32, 36, 40, 42, 44, 48, -1, -1

> > -

> > -ASM_FUNCTION_REMOVE_IF_UNREFERENCED

> > diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S b/ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S

> > deleted file mode 100644

> > index 9cd81529fb3d..000000000000

> > --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S

> > +++ /dev/null

> > @@ -1,24 +0,0 @@

> > -#

> > -#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> > -#  Copyright (c) 2014-2017, Linaro Limited. All rights reserved.

> > -#

> > -#  This program and the accompanying materials

> > -#  are licensed and made available under the terms and conditions of the BSD License

> > -#  which accompanies this distribution.  The full text of the license may be found at

> > -#  http://opensource.org/licenses/bsd-license.php

> > -#

> > -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> > -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> > -#

> > -#

> > -

> > -#include <AsmMacroIoLib.h>

> > -

> > -//EFI_PHYSICAL_ADDRESS

> > -//GetPhysAddrTop (

> > -//  VOID

> > -//  );

> > -ASM_FUNC(ArmGetPhysAddrTop)

> > -  mov   r0, #0x00000000

> > -  mov   r1, #0x10000

> > -  bx    lr

> > diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c

> > index 760bcc169cf4..4eca9b895354 100644

> > --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c

> > +++ b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c

> > @@ -41,6 +41,7 @@ ArmGetPhysAddrTop (

> >  **/

> >  VOID

> >  ArmVirtGetMemoryMap (

> > +  IN  EFI_PHYSICAL_ADDRESS           TopOfAddressSpace,

> >    OUT ARM_MEMORY_REGION_DESCRIPTOR   **VirtualMemoryMap

> >    )

> >  {

> > @@ -80,7 +81,7 @@ ArmVirtGetMemoryMap (

> >

> >    // Peripheral space after DRAM

> >    TopOfMemory = MIN (1ULL << FixedPcdGet8 (PcdPrePiCpuMemorySize),

> > -                     ArmGetPhysAddrTop ());

> > +                     TopOfAddressSpace);

> >    VirtualMemoryTable[2].PhysicalBase = VirtualMemoryTable[0].Length + VirtualMemoryTable[1].Length;

> >    VirtualMemoryTable[2].VirtualBase  = VirtualMemoryTable[2].PhysicalBase;

> >    VirtualMemoryTable[2].Length       = TopOfMemory -

>

> This updates one of the implementations, replacing the internal (asm)

> helper function with the external param. OK.

>

> (1) Can you remove the declaration too, of the helper function

> ArmGetPhysAddrTop(), in "QemuVirtMemInfoLib.c"? The 32-bit & 64-bit

> definitions are removed with the assembly files, but the declaration is

> currently left over.

>


OK

> > diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf

> > index c72a97f9e78a..f2c461e3b55a 100644

> > --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf

> > +++ b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf

> > @@ -24,12 +24,6 @@

> >  [Sources]

> >    QemuVirtMemInfoLib.c

> >

> > -[Sources.ARM]

> > -  Arm/PhysAddrTop.S

> > -

> > -[Sources.AARCH64]

> > -  AArch64/PhysAddrTop.S

> > -

> >  [Packages]

> >    ArmPkg/ArmPkg.dec

> >    ArmVirtPkg/ArmVirtPkg.dec

> > diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf

> > index e4032d3efb53..f54fb51ee1d4 100644

> > --- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf

> > +++ b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf

> > @@ -26,12 +26,6 @@

> >    QemuVirtMemInfoLib.c

> >    QemuVirtMemInfoPeiLibConstructor.c

> >

> > -[Sources.ARM]

> > -  Arm/PhysAddrTop.S

> > -

> > -[Sources.AARCH64]

> > -  AArch64/PhysAddrTop.S

> > -

> >  [Packages]

> >    ArmPkg/ArmPkg.dec

> >    ArmVirtPkg/ArmVirtPkg.dec

>

> These look good.

>

> > diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S b/ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S

> > deleted file mode 100644

> > index a1f6a194d59b..000000000000

> > --- a/ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S

> > +++ /dev/null

> > @@ -1,39 +0,0 @@

> > -#

> > -#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> > -#  Copyright (c) 2016-2017, Linaro Limited. All rights reserved.

> > -#

> > -#  This program and the accompanying materials

> > -#  are licensed and made available under the terms and conditions of the BSD License

> > -#  which accompanies this distribution.  The full text of the license may be found at

> > -#  http://opensource.org/licenses/bsd-license.php

> > -#

> > -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> > -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> > -#

> > -#

> > -

> > -#include <AsmMacroIoLibV8.h>

> > -

> > -//EFI_PHYSICAL_ADDRESS

> > -//GetPhysAddrTop (

> > -//  VOID

> > -//  );

> > -ASM_FUNC(ArmGetPhysAddrTop)

> > -  mrs   x0, id_aa64mmfr0_el1

> > -  adr   x1, .LPARanges

> > -  and   x0, x0, #7

> > -  ldrb  w1, [x1, x0]

> > -  mov   x0, #1

> > -  lsl   x0, x0, x1

> > -  ret

> > -

> > -//

> > -// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the

> > -// physical address space support on this CPU:

> > -// 0 == 32 bits, 1 == 36 bits, etc etc

> > -// 6 and 7 are reserved

> > -//

> > -.LPARanges:

> > -  .byte 32, 36, 40, 42, 44, 48, -1, -1

> > -

> > -ASM_FUNCTION_REMOVE_IF_UNREFERENCED

> > diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S b/ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S

> > deleted file mode 100644

> > index 9cd81529fb3d..000000000000

> > --- a/ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S

> > +++ /dev/null

> > @@ -1,24 +0,0 @@

> > -#

> > -#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> > -#  Copyright (c) 2014-2017, Linaro Limited. All rights reserved.

> > -#

> > -#  This program and the accompanying materials

> > -#  are licensed and made available under the terms and conditions of the BSD License

> > -#  which accompanies this distribution.  The full text of the license may be found at

> > -#  http://opensource.org/licenses/bsd-license.php

> > -#

> > -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> > -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> > -#

> > -#

> > -

> > -#include <AsmMacroIoLib.h>

> > -

> > -//EFI_PHYSICAL_ADDRESS

> > -//GetPhysAddrTop (

> > -//  VOID

> > -//  );

> > -ASM_FUNC(ArmGetPhysAddrTop)

> > -  mov   r0, #0x00000000

> > -  mov   r1, #0x10000

> > -  bx    lr

> > diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c

> > index 88ff3167cbfd..3d4e3e38c3f1 100644

> > --- a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c

> > +++ b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c

> > @@ -18,11 +18,6 @@

> >

> >  STATIC ARM_MEMORY_REGION_DESCRIPTOR  mVirtualMemoryTable[2];

> >

> > -EFI_PHYSICAL_ADDRESS

> > -ArmGetPhysAddrTop (

> > -  VOID

> > -  );

> > -

> >  /**

> >    Return the Virtual Memory Map of your platform

> >

>

> Aha, here you didn't miss the helper's declaration. :)

>

> > @@ -39,6 +34,7 @@ ArmGetPhysAddrTop (

> >  VOID

> >  EFIAPI

> >  ArmVirtGetMemoryMap (

> > +  IN  EFI_PHYSICAL_ADDRESS           TopOfAddressSpace,

> >    OUT ARM_MEMORY_REGION_DESCRIPTOR   **VirtualMemoryMap

> >    )

> >  {

> > @@ -51,7 +47,7 @@ ArmVirtGetMemoryMap (

> >    //

> >    mVirtualMemoryTable[0].PhysicalBase = 0x0;

> >    mVirtualMemoryTable[0].VirtualBase  = 0x0;

> > -  mVirtualMemoryTable[0].Length       = ArmGetPhysAddrTop ();

> > +  mVirtualMemoryTable[0].Length       = TopOfAddressSpace;

> >    mVirtualMemoryTable[0].Attributes   = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;

> >

> >    mVirtualMemoryTable[1].PhysicalBase = 0x0;

>

> And this covers implementation #2.

>

> > diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf

> > index cd4c805a4db9..ae107810e927 100644

> > --- a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf

> > +++ b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf

> > @@ -24,12 +24,6 @@

> >  [Sources]

> >    XenVirtMemInfoLib.c

> >

> > -[Sources.ARM]

> > -  Arm/PhysAddrTop.S

> > -

> > -[Sources.AARCH64]

> > -  AArch64/PhysAddrTop.S

> > -

> >  [Packages]

> >    ArmPkg/ArmPkg.dec

> >    ArmVirtPkg/ArmVirtPkg.dec

> >

>

> With (1) fixed:

>

> Reviewed-by: Laszlo Ersek <lersek@redhat.com>

>

> This is a good clean-up (with the help of patch #1) even without the

> specific use case.

>


Indeed. I will reorder this with #2

Thanks
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Patch

diff --git a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h
index bdf1c513bc6d..15562b35c730 100644
--- a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h
+++ b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h
@@ -35,6 +35,7 @@ 
 VOID
 EFIAPI
 ArmVirtGetMemoryMap (
+  IN  EFI_PHYSICAL_ADDRESS            TopOfAddressSpace,
   OUT ARM_MEMORY_REGION_DESCRIPTOR    **VirtualMemoryMap
   );
 
diff --git a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
index 05afd1282422..3f0e9b3a0579 100644
--- a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
+++ b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
@@ -15,6 +15,7 @@ 
 
 #include <PiPei.h>
 
+#include <Library/ArmLib.h>
 #include <Library/ArmMmuLib.h>
 #include <Library/ArmVirtMemInfoLib.h>
 #include <Library/DebugLib.h>
@@ -39,7 +40,8 @@  InitMmu (
   RETURN_STATUS                 Status;
 
   // Get Virtual Memory Map from the Platform Library
-  ArmVirtGetMemoryMap (&MemoryTable);
+  ArmVirtGetMemoryMap (LShiftU64 (1ULL, ArmGetPhysicalAddressBits ()),
+    &MemoryTable);
 
   //Note: Because we called PeiServicesInstallPeiMemory() before to call InitMmu() the MMU Page Table resides in
   //      DRAM (even at the top of DRAM as it is the first permanent memory allocation)
diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S b/ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S
deleted file mode 100644
index a1f6a194d59b..000000000000
--- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S
+++ /dev/null
@@ -1,39 +0,0 @@ 
-#
-#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
-#  Copyright (c) 2016-2017, Linaro Limited. All rights reserved.
-#
-#  This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-
-#include <AsmMacroIoLibV8.h>
-
-//EFI_PHYSICAL_ADDRESS
-//GetPhysAddrTop (
-//  VOID
-//  );
-ASM_FUNC(ArmGetPhysAddrTop)
-  mrs   x0, id_aa64mmfr0_el1
-  adr   x1, .LPARanges
-  and   x0, x0, #7
-  ldrb  w1, [x1, x0]
-  mov   x0, #1
-  lsl   x0, x0, x1
-  ret
-
-//
-// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the
-// physical address space support on this CPU:
-// 0 == 32 bits, 1 == 36 bits, etc etc
-// 6 and 7 are reserved
-//
-.LPARanges:
-  .byte 32, 36, 40, 42, 44, 48, -1, -1
-
-ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S b/ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S
deleted file mode 100644
index 9cd81529fb3d..000000000000
--- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S
+++ /dev/null
@@ -1,24 +0,0 @@ 
-#
-#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
-#  Copyright (c) 2014-2017, Linaro Limited. All rights reserved.
-#
-#  This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-
-#include <AsmMacroIoLib.h>
-
-//EFI_PHYSICAL_ADDRESS
-//GetPhysAddrTop (
-//  VOID
-//  );
-ASM_FUNC(ArmGetPhysAddrTop)
-  mov   r0, #0x00000000
-  mov   r1, #0x10000
-  bx    lr
diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c
index 760bcc169cf4..4eca9b895354 100644
--- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c
+++ b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.c
@@ -41,6 +41,7 @@  ArmGetPhysAddrTop (
 **/
 VOID
 ArmVirtGetMemoryMap (
+  IN  EFI_PHYSICAL_ADDRESS           TopOfAddressSpace,
   OUT ARM_MEMORY_REGION_DESCRIPTOR   **VirtualMemoryMap
   )
 {
@@ -80,7 +81,7 @@  ArmVirtGetMemoryMap (
 
   // Peripheral space after DRAM
   TopOfMemory = MIN (1ULL << FixedPcdGet8 (PcdPrePiCpuMemorySize),
-                     ArmGetPhysAddrTop ());
+                     TopOfAddressSpace);
   VirtualMemoryTable[2].PhysicalBase = VirtualMemoryTable[0].Length + VirtualMemoryTable[1].Length;
   VirtualMemoryTable[2].VirtualBase  = VirtualMemoryTable[2].PhysicalBase;
   VirtualMemoryTable[2].Length       = TopOfMemory -
diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf
index c72a97f9e78a..f2c461e3b55a 100644
--- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf
+++ b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf
@@ -24,12 +24,6 @@ 
 [Sources]
   QemuVirtMemInfoLib.c
 
-[Sources.ARM]
-  Arm/PhysAddrTop.S
-
-[Sources.AARCH64]
-  AArch64/PhysAddrTop.S
-
 [Packages]
   ArmPkg/ArmPkg.dec
   ArmVirtPkg/ArmVirtPkg.dec
diff --git a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf
index e4032d3efb53..f54fb51ee1d4 100644
--- a/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf
+++ b/ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf
@@ -26,12 +26,6 @@ 
   QemuVirtMemInfoLib.c
   QemuVirtMemInfoPeiLibConstructor.c
 
-[Sources.ARM]
-  Arm/PhysAddrTop.S
-
-[Sources.AARCH64]
-  AArch64/PhysAddrTop.S
-
 [Packages]
   ArmPkg/ArmPkg.dec
   ArmVirtPkg/ArmVirtPkg.dec
diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S b/ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S
deleted file mode 100644
index a1f6a194d59b..000000000000
--- a/ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S
+++ /dev/null
@@ -1,39 +0,0 @@ 
-#
-#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
-#  Copyright (c) 2016-2017, Linaro Limited. All rights reserved.
-#
-#  This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-
-#include <AsmMacroIoLibV8.h>
-
-//EFI_PHYSICAL_ADDRESS
-//GetPhysAddrTop (
-//  VOID
-//  );
-ASM_FUNC(ArmGetPhysAddrTop)
-  mrs   x0, id_aa64mmfr0_el1
-  adr   x1, .LPARanges
-  and   x0, x0, #7
-  ldrb  w1, [x1, x0]
-  mov   x0, #1
-  lsl   x0, x0, x1
-  ret
-
-//
-// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the
-// physical address space support on this CPU:
-// 0 == 32 bits, 1 == 36 bits, etc etc
-// 6 and 7 are reserved
-//
-.LPARanges:
-  .byte 32, 36, 40, 42, 44, 48, -1, -1
-
-ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S b/ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S
deleted file mode 100644
index 9cd81529fb3d..000000000000
--- a/ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S
+++ /dev/null
@@ -1,24 +0,0 @@ 
-#
-#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
-#  Copyright (c) 2014-2017, Linaro Limited. All rights reserved.
-#
-#  This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-
-#include <AsmMacroIoLib.h>
-
-//EFI_PHYSICAL_ADDRESS
-//GetPhysAddrTop (
-//  VOID
-//  );
-ASM_FUNC(ArmGetPhysAddrTop)
-  mov   r0, #0x00000000
-  mov   r1, #0x10000
-  bx    lr
diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c
index 88ff3167cbfd..3d4e3e38c3f1 100644
--- a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c
+++ b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.c
@@ -18,11 +18,6 @@ 
 
 STATIC ARM_MEMORY_REGION_DESCRIPTOR  mVirtualMemoryTable[2];
 
-EFI_PHYSICAL_ADDRESS
-ArmGetPhysAddrTop (
-  VOID
-  );
-
 /**
   Return the Virtual Memory Map of your platform
 
@@ -39,6 +34,7 @@  ArmGetPhysAddrTop (
 VOID
 EFIAPI
 ArmVirtGetMemoryMap (
+  IN  EFI_PHYSICAL_ADDRESS           TopOfAddressSpace,
   OUT ARM_MEMORY_REGION_DESCRIPTOR   **VirtualMemoryMap
   )
 {
@@ -51,7 +47,7 @@  ArmVirtGetMemoryMap (
   //
   mVirtualMemoryTable[0].PhysicalBase = 0x0;
   mVirtualMemoryTable[0].VirtualBase  = 0x0;
-  mVirtualMemoryTable[0].Length       = ArmGetPhysAddrTop ();
+  mVirtualMemoryTable[0].Length       = TopOfAddressSpace;
   mVirtualMemoryTable[0].Attributes   = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
 
   mVirtualMemoryTable[1].PhysicalBase = 0x0;
diff --git a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf
index cd4c805a4db9..ae107810e927 100644
--- a/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf
+++ b/ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf
@@ -24,12 +24,6 @@ 
 [Sources]
   XenVirtMemInfoLib.c
 
-[Sources.ARM]
-  Arm/PhysAddrTop.S
-
-[Sources.AARCH64]
-  AArch64/PhysAddrTop.S
-
 [Packages]
   ArmPkg/ArmPkg.dec
   ArmVirtPkg/ArmVirtPkg.dec