From: Andrei Warkentin <andrey.warkentin@gmail.com>
This is required so that we can make the 3 to 4 GB segment of
the Raspberry Pi 4 a user-configurable option.
This also removes the need for the PcdAcpiBasicMode PCD.
Signed-off-by: Pete Batard <pete@akeo.ie>
---
Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf | 3 --
Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c | 33 ++++++++++++++------
2 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf b/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf
index 9abcc2cc0075..77cdbe399a06 100644
--- a/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf
+++ b/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf
@@ -59,8 +59,5 @@ [FixedPcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
-[FeaturePcd]
- gRaspberryPiTokenSpaceGuid.PcdAcpiBasicMode
-
[Ppis]
gArmMpCoreInfoPpiGuid
diff --git a/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c b/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c
index 4b388465cdde..3f257d4fa528 100644
--- a/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c
+++ b/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c
@@ -25,7 +25,7 @@ UINT32 mBoardRevision;
// The total number of descriptors, including the final "end-of-table" descriptor.
-#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 10
+#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 11
STATIC BOOLEAN VirtualMemoryInfoInitialized = FALSE;
STATIC RPI_MEMORY_REGION_INFO VirtualMemoryInfo[MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS];
@@ -60,6 +60,7 @@ ArmPlatformGetVirtualMemoryMap (
{
UINTN Index = 0;
UINTN GpuIndex;
+ INT64 OrigMemorySize;
INT64 SystemMemorySize;
ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable;
@@ -78,7 +79,6 @@ ArmPlatformGetVirtualMemoryMap (
return;
}
-
// Firmware Volume
VirtualMemoryTable[Index].PhysicalBase = FixedPcdGet64 (PcdFdBaseAddress);
VirtualMemoryTable[Index].VirtualBase = VirtualMemoryTable[Index].PhysicalBase;
@@ -155,13 +155,13 @@ ArmPlatformGetVirtualMemoryMap (
VirtualMemoryInfo[Index].Type = RPI_MEM_UNMAPPED_REGION;
VirtualMemoryInfo[Index++].Name = L"SoC Reserved (283x)";
- if (FeaturePcdGet (PcdAcpiBasicMode)) {
- //
- // Limit the memory to 3 GB to work around the DMA bugs in the SoC without
- // having to rely on IORT or _DMA descriptions.
- //
- SystemMemorySize = MIN(SystemMemorySize, 3U * SIZE_1GB);
- }
+ //
+ // By default we limit the memory to 3 GB to work around the DMA bugs in the SoC, for
+ // OSes that don't support _DMA range descriptors. On 4GB boards, it's runtime
+ // setting to boot with 4GB, and the additional 1GB is added by ConfigDxe.
+ //
+ OrigMemorySize = SystemMemorySize;
+ SystemMemorySize = MIN(SystemMemorySize, 3U * SIZE_1GB);
// If we have RAM above the 1 GB mark, declare it
if (SystemMemorySize - SIZE_1GB > 0) {
@@ -170,7 +170,20 @@ ArmPlatformGetVirtualMemoryMap (
VirtualMemoryTable[Index].Length = SystemMemorySize - SIZE_1GB;
VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
VirtualMemoryInfo[Index].Type = RPI_MEM_BASIC_REGION;
- VirtualMemoryInfo[Index++].Name = L"Extended System RAM";
+ VirtualMemoryInfo[Index++].Name = L"Extended System RAM below 3GB";
+ }
+
+ //
+ // If we have RAM above 3 GB mark, declare it so it's mapped, but
+ // don't add it to the memory map. This is done later by ConfigDxe if necessary.
+ //
+ if (OrigMemorySize > (3UL * SIZE_1GB)) {
+ VirtualMemoryTable[Index].PhysicalBase = 3UL * SIZE_1GB;
+ VirtualMemoryTable[Index].VirtualBase = VirtualMemoryTable[Index].PhysicalBase;
+ VirtualMemoryTable[Index].Length = OrigMemorySize - VirtualMemoryTable[Index].PhysicalBase;
+ VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
+ VirtualMemoryInfo[Index].Type = RPI_MEM_UNMAPPED_REGION;
+ VirtualMemoryInfo[Index++].Name = L"Extended System RAM above 3GB";
}
// End of Table
--
2.21.0.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#55305): https://edk2.groups.io/g/devel/message/55305
Mute This Topic: https://groups.io/mt/71697496/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
On Tue, 3 Mar 2020 at 11:33, Pete Batard <pete@akeo.ie> wrote:
>
> From: Andrei Warkentin <andrey.warkentin@gmail.com>
>
> This is required so that we can make the 3 to 4 GB segment of
> the Raspberry Pi 4 a user-configurable option.
>
> This also removes the need for the PcdAcpiBasicMode PCD.
>
> Signed-off-by: Pete Batard <pete@akeo.ie>
Please fix the commit log so it is clear what 'this' means
> ---
> Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf | 3 --
> Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c | 33 ++++++++++++++------
> 2 files changed, 23 insertions(+), 13 deletions(-)
>
> diff --git a/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf b/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf
> index 9abcc2cc0075..77cdbe399a06 100644
> --- a/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf
> +++ b/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf
> @@ -59,8 +59,5 @@ [FixedPcd]
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
>
> -[FeaturePcd]
> - gRaspberryPiTokenSpaceGuid.PcdAcpiBasicMode
> -
> [Ppis]
> gArmMpCoreInfoPpiGuid
> diff --git a/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c b/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c
> index 4b388465cdde..3f257d4fa528 100644
> --- a/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c
> +++ b/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c
> @@ -25,7 +25,7 @@ UINT32 mBoardRevision;
>
>
> // The total number of descriptors, including the final "end-of-table" descriptor.
> -#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 10
> +#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 11
>
> STATIC BOOLEAN VirtualMemoryInfoInitialized = FALSE;
> STATIC RPI_MEMORY_REGION_INFO VirtualMemoryInfo[MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS];
> @@ -60,6 +60,7 @@ ArmPlatformGetVirtualMemoryMap (
> {
> UINTN Index = 0;
> UINTN GpuIndex;
> + INT64 OrigMemorySize;
> INT64 SystemMemorySize;
> ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable;
>
> @@ -78,7 +79,6 @@ ArmPlatformGetVirtualMemoryMap (
> return;
> }
>
> -
> // Firmware Volume
> VirtualMemoryTable[Index].PhysicalBase = FixedPcdGet64 (PcdFdBaseAddress);
> VirtualMemoryTable[Index].VirtualBase = VirtualMemoryTable[Index].PhysicalBase;
Drop this hunk please
> @@ -155,13 +155,13 @@ ArmPlatformGetVirtualMemoryMap (
> VirtualMemoryInfo[Index].Type = RPI_MEM_UNMAPPED_REGION;
> VirtualMemoryInfo[Index++].Name = L"SoC Reserved (283x)";
>
> - if (FeaturePcdGet (PcdAcpiBasicMode)) {
> - //
> - // Limit the memory to 3 GB to work around the DMA bugs in the SoC without
> - // having to rely on IORT or _DMA descriptions.
> - //
> - SystemMemorySize = MIN(SystemMemorySize, 3U * SIZE_1GB);
> - }
> + //
> + // By default we limit the memory to 3 GB to work around the DMA bugs in the SoC, for
> + // OSes that don't support _DMA range descriptors. On 4GB boards, it's runtime
> + // setting to boot with 4GB, and the additional 1GB is added by ConfigDxe.
> + //
> + OrigMemorySize = SystemMemorySize;
> + SystemMemorySize = MIN(SystemMemorySize, 3U * SIZE_1GB);
>
> // If we have RAM above the 1 GB mark, declare it
> if (SystemMemorySize - SIZE_1GB > 0) {
> @@ -170,7 +170,20 @@ ArmPlatformGetVirtualMemoryMap (
> VirtualMemoryTable[Index].Length = SystemMemorySize - SIZE_1GB;
> VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
> VirtualMemoryInfo[Index].Type = RPI_MEM_BASIC_REGION;
> - VirtualMemoryInfo[Index++].Name = L"Extended System RAM";
> + VirtualMemoryInfo[Index++].Name = L"Extended System RAM below 3GB";
> + }
> +
> + //
> + // If we have RAM above 3 GB mark, declare it so it's mapped, but
> + // don't add it to the memory map. This is done later by ConfigDxe if necessary.
> + //
> + if (OrigMemorySize > (3UL * SIZE_1GB)) {
> + VirtualMemoryTable[Index].PhysicalBase = 3UL * SIZE_1GB;
> + VirtualMemoryTable[Index].VirtualBase = VirtualMemoryTable[Index].PhysicalBase;
> + VirtualMemoryTable[Index].Length = OrigMemorySize - VirtualMemoryTable[Index].PhysicalBase;
> + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
> + VirtualMemoryInfo[Index].Type = RPI_MEM_UNMAPPED_REGION;
> + VirtualMemoryInfo[Index++].Name = L"Extended System RAM above 3GB";
> }
>
> // End of Table
> --
> 2.21.0.windows.1
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#55310): https://edk2.groups.io/g/devel/message/55310
Mute This Topic: https://groups.io/mt/71697496/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2026 Red Hat, Inc.