public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [PATCH 0/1] Add support for generating SRAT tables
@ 2024-01-31 13:15 Xiong Yining
  2024-01-31 13:15 ` [edk2-devel] [PATCH 1/1] SbsaQemu: AcpiDxe: Create SRAT table at runtime Xiong Yining
  0 siblings, 1 reply; 5+ messages in thread
From: Xiong Yining @ 2024-01-31 13:15 UTC (permalink / raw)
  To: devel
  Cc: quic_llindhol, ardb+tianocore, graeme, marcin.juszkiewicz,
	chenbaozi, Xiong Yining

SbsaQemu can configure with numa-related arguments, but OS cannot
identify the numa architecture without SRAT tables. We add supporting
for generating SRAT tables at runtime to solve this issue.

the numa-related information and memory information can be obtained via
SMC calls which is provided on the EDK2 patch "get rid of DeviceTree from 
SbsaQemu"

Xiong Yining (1):
  SbsaQemu: AcpiDxe: Create SRAT table at runtime

 .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h | 27 ++++++
 .../Include/Library/SbsaQemuHardwareInfoLib.h | 11 +++
 .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c | 92 +++++++++++++++++++
 .../SbsaQemuHardwareInfoLib.c                 | 36 ++++++++
 4 files changed, 166 insertions(+)

-- 
2.34.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114895): https://edk2.groups.io/g/devel/message/114895
Mute This Topic: https://groups.io/mt/104074354/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [edk2-devel] [PATCH 1/1] SbsaQemu: AcpiDxe: Create SRAT table at runtime
  2024-01-31 13:15 [edk2-devel] [PATCH 0/1] Add support for generating SRAT tables Xiong Yining
@ 2024-01-31 13:15 ` Xiong Yining
  2024-02-15 14:17   ` Marcin Juszkiewicz
  0 siblings, 1 reply; 5+ messages in thread
From: Xiong Yining @ 2024-01-31 13:15 UTC (permalink / raw)
  To: devel
  Cc: quic_llindhol, ardb+tianocore, graeme, marcin.juszkiewicz,
	chenbaozi, Xiong Yining

Add support to create SRAT(System resource affinity table) for
sbsa platform at runtime.

Signed-off-by: Xiong Yining <xiongyining1480@phytium.com.cn>
Signed-off-by: Chen Baozi <chenbaozi@phytium.com.cn>
---
 .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h | 27 ++++++
 .../Include/Library/SbsaQemuHardwareInfoLib.h | 11 +++
 .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c | 92 +++++++++++++++++++
 .../SbsaQemuHardwareInfoLib.c                 | 36 ++++++++
 4 files changed, 166 insertions(+)

diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h
index 7595df4c8a2d..b8c29b803b81 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h
@@ -63,4 +63,31 @@ typedef struct {
 
 #define GTDT_WDTIMER_FLAGS          (GTDT_WDTIMER_ACTIVE_HIGH | GTDT_WDTIMER_LEVEL_TRIGGERED)
 
+#define SBSAQEMU_ACPI_MEMORY_AFFINITY_STRUCTURE_INIT(                             \
+          ProximityDomain, Base, Length, Flags)                                   \
+  {                                                                               \
+    1,                                                  /* Type */                \
+    sizeof (EFI_ACPI_6_4_MEMORY_AFFINITY_STRUCTURE),    /* Length */              \
+    ProximityDomain,                                    /* Proximity Domain */    \
+    0,                                                  /* Reserved */            \
+    (Base) & 0xffffffff,                                /* Base Address Low */    \
+    ((Base) >> 32) & 0xffffffff ,                       /* Base Address High */   \
+    (Length) & 0xffffffff,                              /* Length Low */          \
+    ((Length) >> 32) & 0xffffffff,                      /* Length High */         \
+    0,                                                  /* Reserved */            \
+    Flags,                                              /* Flags */               \
+    0                                                   /* Reserved */            \
+  }
+
++#define SBSAQEMU_ACPI_GICC_AFFINITY_STRUCTURE_INIT(                              \
+          ProximtyDomain, ACPIProcessorUID, Flags, ClockDomain)                   \
+  {                                                                               \
+    3,                                                  /* Type */                \
+    sizeof (EFI_ACPI_6_4_GICC_AFFINITY_STRUCTURE),      /* Length */              \
+    ProximityDomain,                                    /* Proximity Domain */    \
+    ACPIProcessorUID,                                   /* ACPI Processor UID */  \
+    Flags,                                              /* Flags */               \
+    ClockDomain                                         /* Clock Domain */        \
+  }
+
 #endif
diff --git a/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h b/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h
index 0b71a3f7e6eb..831efe2e8d1d 100644
--- a/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h
+++ b/Silicon/Qemu/SbsaQemu/Include/Library/SbsaQemuHardwareInfoLib.h
@@ -70,4 +70,15 @@ SbsaQemuGetMemInfo (
   IN UINTN   MemoryId
   );
 
+/**
+  Get the number of numa node from device tree passed by Qemu.
+
+  @retval                the number of numa node.
+**/
+UINT64
+SbsaQemuGetNumaNodeCount (
+  VOID
+  );
+
+
 #endif /* SBSA_QEMU_HARDWARE_INFO_ */
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
index 03f7a34977a0..2685d4b00426 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
@@ -682,6 +682,91 @@ AddGtdtTable (
   return Status;
 }
 
+/*
+ * A function that adds the SRAT ACPI table.
+ */
+EFI_STATUS
+AddSratTable (
+  IN EFI_ACPI_TABLE_PROTOCOL   *AcpiTable
+  )
+{
+  EFI_STATUS            Status;
+  UINT8                 *New;
+  EFI_PHYSICAL_ADDRESS  PageAddress;
+  UINTN                 TableHandle;
+  UINT32                TableSize;
+  UINT32                Index;
+  UINT32                NodeId;
+  UINT32                NumMemNodes;
+  MemoryInfo            MemInfo;
+  UINT32                NumCores = PcdGet32 (PcdCoreCount);
+
+  // Initialize SRAT ACPI Header
+  EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER Header = {
+     SBSAQEMU_ACPI_HEADER (EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE,
+                           EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER,
+                           EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION),
+      1, 0 };
+
+  NumMemNodes  = SbsaQemuGetMemNodeCount();
+
+  // Calculate the new table size based on the number of cores
+  TableSize = sizeof (EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER) +
+               (sizeof (EFI_ACPI_6_4_MEMORY_AFFINITY_STRUCTURE) * NumMemNodes ) +
+               (sizeof (EFI_ACPI_6_4_GICC_AFFINITY_STRUCTURE) * NumCores);
+
+  Status = gBS->AllocatePages (
+                AllocateAnyPages,
+                EfiACPIReclaimMemory,
+                EFI_SIZE_TO_PAGES (TableSize),
+                &PageAddress
+                );
+
+  if (EFI_ERROR(Status)) {
+    DEBUG ((DEBUG_ERROR, "Failed to allocate pages for SRAT table\n"));
+    return EFI_OUT_OF_RESOURCES;
+  }
+
+  New = (UINT8 *)(UINTN) PageAddress;
+  ZeroMem (New, TableSize);
+
+  // Add the ACPI Description table header
+  CopyMem (New, &Header, sizeof (EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER));
+  ((EFI_ACPI_DESCRIPTION_HEADER*) New)->Length = TableSize;
+  New += sizeof (EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER);
+
+  // Add memory structures
+  for (Index = 0; Index < NumMemNodes ; Index++) {
+    MemInfo = SbsaQemuGetMemInfo (Index);
+    EFI_ACPI_6_4_MEMORY_AFFINITY_STRUCTURE memory = SBSAQEMU_ACPI_MEMORY_AFFINITY_STRUCTURE_INIT (MemInfo.NodeId, MemInfo.AddressBase, MemInfo.AddressSize, 1);
+    CopyMem (New, &memory, sizeof (EFI_ACPI_6_4_MEMORY_AFFINITY_STRUCTURE));
+    New += sizeof (EFI_ACPI_6_4_MEMORY_AFFINITY_STRUCTURE);
+  }
+
+  // Add processor structures for the cores
+  for (Index = 0; Index < NumCores; Index++) {
+    NodeId = SbsaQemuGetCpuNumaNode(Index);
+    EFI_ACPI_6_4_GICC_AFFINITY_STRUCTURE gicc = SBSAQEMU_ACPI_GICC_AFFINITY_STRUCTURE_INIT(NodeId, Index, 1, 0);
+    CopyMem (New, &gicc, sizeof (EFI_ACPI_6_4_GICC_AFFINITY_STRUCTURE));
+    New += sizeof (EFI_ACPI_6_4_GICC_AFFINITY_STRUCTURE);
+  }
+
+  // Perform Checksum
+  AcpiPlatformChecksum ((UINT8*) PageAddress, TableSize);
+
+  Status = AcpiTable->InstallAcpiTable (
+                        AcpiTable,
+                        (EFI_ACPI_COMMON_HEADER *)PageAddress,
+                        TableSize,
+                        &TableHandle
+                        );
+  if (EFI_ERROR(Status)) {
+    DEBUG ((DEBUG_ERROR, "Failed to install SRAT table\n"));
+  }
+
+  return Status;
+}
+
 /*
  * A function to disable XHCI node on Platform Version lower than 0.3
  */
@@ -793,6 +878,13 @@ InitializeSbsaQemuAcpiDxe (
     DEBUG ((DEBUG_ERROR, "Failed to add PPTT table\n"));
   }
 
+  if (SbsaQemuGetNumaNodeCount() > 0){
+    Status = AddSratTable (AcpiTable);
+    if (EFI_ERROR (Status)) {
+      DEBUG ((DEBUG_ERROR, "Failed to add SRAT table\n"));
+    }
+  }
+
   Status = AddGtdtTable (AcpiTable);
   if (EFI_ERROR (Status)) {
     DEBUG ((DEBUG_ERROR, "Failed to add GTDT table\n"));
diff --git a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c
index 03e33c544ee0..04a8a076ab64 100644
--- a/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c
+++ b/Silicon/Qemu/SbsaQemu/Library/SbsaQemuHardwareInfoLib/SbsaQemuHardwareInfoLib.c
@@ -352,3 +352,39 @@ SbsaQemuGetMemInfo (
 
   return MemInfo;
 }
+
+UINT64
+SbsaQemuGetNumaNodeCount (
+  VOID
+)
+{
+  UINT64                Arg;
+  UINT32                Index;
+  UINT32                NumNumaCount;
+  UINT32                NumMemCount;
+  UINT32                NumCores = PcdGet32 (PcdCoreCount);
+  MemoryInfo            MemInfo;
+
+  NumNumaCount = 0;
+  NumMemCount = SbsaQemuGetMemNodeCount();
+
+  if (NumCores > 0){
+    for (Index = 0; Index < NumCores; Index ++){
+      Arg = SbsaQemuGetCpuNumaNode(Index);
+      if (NumNumaCount == 0 || NumNumaCount < (Arg + 1)){
+        NumNumaCount = Arg + 1;
+      }
+    }
+  }
+
+  if (NumMemCount > 0){
+    for (Index = 0; Index < NumMemCount; Index ++){
+      MemInfo = SbsaQemuGetMemInfo(Index);
+      if (NumNumaCount == 0 || NumNumaCount < (MemInfo.NodeId + 1)){
+        NumNumaCount = MemInfo.NodeId + 1;
+      }
+    }
+  }
+
+  return NumNumaCount;
+}
-- 
2.34.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114894): https://edk2.groups.io/g/devel/message/114894
Mute This Topic: https://groups.io/mt/104074353/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [edk2-devel] [PATCH 1/1] SbsaQemu: AcpiDxe: Create SRAT table at runtime
  2024-01-31 13:15 ` [edk2-devel] [PATCH 1/1] SbsaQemu: AcpiDxe: Create SRAT table at runtime Xiong Yining
@ 2024-02-15 14:17   ` Marcin Juszkiewicz
  2024-02-20  8:03     ` Xiong Yining
  0 siblings, 1 reply; 5+ messages in thread
From: Marcin Juszkiewicz @ 2024-02-15 14:17 UTC (permalink / raw)
  To: Xiong Yining, devel; +Cc: quic_llindhol, ardb+tianocore, graeme, chenbaozi

W dniu 31.01.2024 o 2:15 PM, Xiong Yining pisze:
> Add support to create SRAT(System resource affinity table) for
> sbsa platform at runtime.
> 
> Signed-off-by: Xiong Yining <xiongyining1480@phytium.com.cn>
> Signed-off-by: Chen Baozi <chenbaozi@phytium.com.cn>
> ---
>   .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h | 27 ++++++
>   .../Include/Library/SbsaQemuHardwareInfoLib.h | 11 +++
>   .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c | 92 +++++++++++++++++++
>   .../SbsaQemuHardwareInfoLib.c                 | 36 ++++++++
>   4 files changed, 166 insertions(+)
> 
> diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h
> index 7595df4c8a2d..b8c29b803b81 100644
> --- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h
> +++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.h
> @@ -63,4 +63,31 @@ typedef struct {
>   

> ++#define SBSAQEMU_ACPI_GICC_AFFINITY_STRUCTURE_INIT(                              \
> +          ProximtyDomain, ACPIProcessorUID, Flags, ClockDomain)                   \

s/ProximtyDomain/ProximityDomain/ please

Applied it on top of 20240131120507.2829117-1-xiongyining1480@phytium.com.cn
series ("get rid of DeviceTree from SbsaQemu v5" one).

Code boots but only memory from the first node is listed by both EDK2 and Linux.

QEMU arguments:
-smp 4,sockets=4,maxcpus=4
-m 4G,slots=2,maxmem=5G
-object memory-backend-ram,size=1G,id=m0
-object memory-backend-ram,size=3G,id=m1
-numa node,nodeid=0,cpus=0-1,memdev=m0
-numa node,nodeid=1,cpus=2,memdev=m1
-numa node,nodeid=2,cpus=3

EDK2 memmap:

Type       Start            End              # Pages          Attributes
Available  0000010000000000-000001003841AFFF 000000000003841B 000000000000000E
LoaderCode 000001003841B000-00000100384FFFFF 00000000000000E5 000000000000000E
RT_Code    0000010038500000-000001003857FFFF 0000000000000080 800000000000000E
RT_Data    0000010038580000-000001003861FFFF 00000000000000A0 800000000000000E
RT_Code    0000010038620000-000001003866FFFF 0000000000000050 800000000000000E
ACPI_Recl  0000010038670000-00000100386DFFFF 0000000000000070 000000000000000E
RT_Code    00000100386E0000-000001003872FFFF 0000000000000050 800000000000000E
Available  0000010038730000-000001003A00DFFF 00000000000018DE 000000000000000E
BS_Data    000001003A00E000-000001003A02BFFF 000000000000001E 000000000000000E
Available  000001003A02C000-000001003A039FFF 000000000000000E 000000000000000E
BS_Data    000001003A03A000-000001003A056FFF 000000000000001D 000000000000000E
Available  000001003A057000-000001003A057FFF 0000000000000001 000000000000000E
BS_Data    000001003A058000-000001003B623FFF 00000000000015CC 000000000000000E
Available  000001003B624000-000001003B7D3FFF 00000000000001B0 000000000000000E
BS_Code    000001003B7D4000-000001003BBFFFFF 000000000000042C 000000000000000E
RT_Code    000001003BC00000-000001003BD8FFFF 0000000000000190 800000000000000E
RT_Data    000001003BD90000-000001003BFDFFFF 0000000000000250 800000000000000E
Available  000001003BFE0000-000001003BFFEFFF 000000000000001F 000000000000000E
BS_Data    000001003BFFF000-000001003C01FFFF 0000000000000021 000000000000000E
Available  000001003C020000-000001003F7D4FFF 00000000000037B5 000000000000000E
BS_Data    000001003F7D5000-000001003F7F5FFF 0000000000000021 000000000000000E
BS_Code    000001003F7F6000-000001003F83CFFF 0000000000000047 000000000000000E
BS_Data    000001003F83D000-000001003FFD9FFF 000000000000079D 000000000000000E
BS_Code    000001003FFDA000-000001003FFF7FFF 000000000000001E 000000000000000E
BS_Data    000001003FFF8000-000001003FFFFFFF 0000000000000008 000000000000000E
MMIO       0000000010000000-00000000106BFFFF 00000000000006C0 8000000000000001
MMIO       0000000060010000-0000000060010FFF 0000000000000001 8000000000000001
  
   Reserved  :              0 Pages (0 Bytes)
   LoaderCode:            229 Pages (937,984 Bytes)
   LoaderData:              0 Pages (0 Bytes)
   BS_Code   :          1,169 Pages (4,788,224 Bytes)
   BS_Data   :          7,662 Pages (31,383,552 Bytes)
   RT_Code   :            688 Pages (2,818,048 Bytes)
   RT_Data   :            752 Pages (3,080,192 Bytes)
   ACPI_Recl :            112 Pages (458,752 Bytes)
   ACPI_NVS  :              0 Pages (0 Bytes)
   MMIO      :          1,729 Pages (7,081,984 Bytes)
   MMIO_Port :              0 Pages (0 Bytes)
   PalCode   :              0 Pages (0 Bytes)
   Available :        251,532 Pages (1,030,275,072 Bytes)
   Persistent:              0 Pages (0 Bytes)
               --------------
Total Memory:          1,024 MB (1,073,741,824 Bytes)


SRAT table shows both memory nodes:

  --------------- SRAT Table ---------------

Address  : 0x100386DFD18
Length   : 200
   
00000000 : 53 52 41 54 C8 00 00 00 - 03 48 4C 49 4E 41 52 4F   SRAT.....HLINARO
00000010 : 53 42 53 41 51 45 4D 55 - 10 08 20 20 4C 4E 52 4F   SBSAQEMU..  LNRO
00000020 : 01 00 00 00 01 00 00 00 - 00 00 00 00 00 00 00 00   ................
00000030 : 01 28 01 00 00 00 00 00 - 00 00 00 40 00 01 00 00   .(.........@....
00000040 : 00 00 00 C0 00 00 00 00 - 00 00 00 00 01 00 00 00   ................
00000050 : 00 00 00 00 00 00 00 00 - 01 28 00 00 00 00 00 00   .........(......
00000060 : 00 00 00 00 00 01 00 00 - 00 00 00 40 00 00 00 00   ...........@....
00000070 : 00 00 00 00 01 00 00 00 - 00 00 00 00 00 00 00 00   ................
00000080 : 03 12 00 00 00 00 00 00 - 00 00 01 00 00 00 00 00   ................
00000090 : 00 00 03 12 00 00 00 00 - 01 00 00 00 01 00 00 00   ................
000000A0 : 00 00 00 00 03 12 01 00 - 00 00 02 00 00 00 01 00   ................
000000B0 : 00 00 00 00 00 00 03 12 - 02 00 00 00 03 00 00 00   ................
000000C0 : 01 00 00 00 00 00 00 00                             ........

Table Checksum : OK

SRAT                                 :
   Signature                          : SRAT
   Length                             : 200
   Revision                           : 3
   Checksum                           : 0x48
   Oem ID                             : LINARO
   Oem Table ID                       : SBSAQEMU
   Oem Revision                       : 0x20200810
   Creator ID                         : LNRO
   Creator Revision                   : 0x1
   Reserved                           : 0x1
   Reserved                           : 0x0
   Memory Affinity Structure [0]      :
     Type                             : 0x1
     Length                           : 0x28
     Proximity Domain                 : 0x1
     Reserved                         : 0x0
     Base Address Low                 : 0x40000000
     Base Address High                : 0x100
     Length Low                       : 0xC0000000
     Length High                      : 0x0
     Reserved                         : 0x0
     Flags                            : 0x1
     Reserved                         : 0x0
   Memory Affinity Structure [1]      :
     Type                             : 0x1
     Length                           : 0x28
     Proximity Domain                 : 0x0
     Reserved                         : 0x0
     Base Address Low                 : 0x0
     Base Address High                : 0x100
     Length Low                       : 0x40000000
     Length High                      : 0x0
     Reserved                         : 0x0
     Flags                            : 0x1
     Reserved                         : 0x0
   GICC Affinity Structure [0]        :
     Type                             : 0x3
     Length                           : 0x12
     Proximity Domain                 : 0x0
     ACPI Processor UID               : 0x0
     Flags                            : 0x1
     Clock Domain                     : 0x0
   GICC Affinity Structure [1]        :
     Type                             : 0x3
     Length                           : 0x12
     Proximity Domain                 : 0x0
     ACPI Processor UID               : 0x1
     Flags                            : 0x1
     Clock Domain                     : 0x0
   GICC Affinity Structure [2]        :
     Type                             : 0x3
     Length                           : 0x12
     Proximity Domain                 : 0x1
     ACPI Processor UID               : 0x2
     Flags                            : 0x1
     Clock Domain                     : 0x0
   GICC Affinity Structure [3]        :
     Type                             : 0x3
     Length                           : 0x12
     Proximity Domain                 : 0x2
     ACPI Processor UID               : 0x3
     Flags                            : 0x1
     Clock Domain                     : 0x0


Linux (kernel from Debian or Fedora) boots with memory
from the first node only:

[    0.000000] ACPI: SPCR: console: pl011,mmio32,0x60000000,115200
[    0.000000] ACPI: SRAT: Node 1 PXM 1 [mem 0x10040000000-0x100ffffffff]
[    0.000000] ACPI: SRAT: Node 0 PXM 0 [mem 0x10000000000-0x1003fffffff]
[    0.000000] NUMA: NODE_DATA [mem 0x1003f6fd1c0-0x1003f713fff]
[    0.000000] NUMA: Initmem setup node 1 [<memory-less node>]
[    0.000000] NUMA: NODE_DATA [mem 0x1003f6e6380-0x1003f6fd1bf]
[    0.000000] NUMA: NODE_DATA(1) on node 0
[    0.000000] NUMA: Initmem setup node 2 [<memory-less node>]
[    0.000000] NUMA: NODE_DATA [mem 0x1003f6cf540-0x1003f6e637f]
[    0.000000] NUMA: NODE_DATA(2) on node 0
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000010000000000-0x000001003fffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000]   Device   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000010000000000-0x00000100384fffff]
[    0.000000]   node   0: [mem 0x0000010038500000-0x000001003866ffff]
[    0.000000]   node   0: [mem 0x0000010038670000-0x00000100386dffff]
[    0.000000]   node   0: [mem 0x00000100386e0000-0x000001003872ffff]
[    0.000000]   node   0: [mem 0x0000010038730000-0x000001003bbfffff]
[    0.000000]   node   0: [mem 0x000001003bc00000-0x000001003bfdffff]
[    0.000000]   node   0: [mem 0x000001003bfe0000-0x000001003fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000010000000000-0x000001003fffffff]
[    0.000000] Initmem setup node 1 as memoryless
[    0.000000] Initmem setup node 2 as memoryless

[    0.000000] ACPI: NUMA: SRAT: PXM 0 -> MPIDR 0x0 -> Node 0
[    0.000000] ACPI: NUMA: SRAT: PXM 0 -> MPIDR 0x1 -> Node 0
[    0.000000] ACPI: NUMA: SRAT: PXM 1 -> MPIDR 0x2 -> Node 1
[    0.000000] ACPI: NUMA: SRAT: PXM 2 -> MPIDR 0x3 -> Node 2
[    0.000000] percpu: Embedded 15 pages/cpu s195368 r8192 d42200 u245760

[    0.000000] Fallback order for Node 0: 0
[    0.000000] Fallback order for Node 1: 1 0
[    0.000000] Fallback order for Node 2: 2 0
[    0.000000] Built 3 zonelists, mobility grouping on.  Total pages: 65280

[    0.000000] Memory: 833824K/1048576K available (18496K kernel code, 4236K rwdata, 16112K rodata, 10560K init, 10585K bss, 149216K reserved, 65536K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=3



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115524): https://edk2.groups.io/g/devel/message/115524
Mute This Topic: https://groups.io/mt/104074353/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [edk2-devel] [PATCH 1/1] SbsaQemu: AcpiDxe: Create SRAT table at runtime
  2024-02-15 14:17   ` Marcin Juszkiewicz
@ 2024-02-20  8:03     ` Xiong Yining
  2024-02-21 13:22       ` Marcin Juszkiewicz
  0 siblings, 1 reply; 5+ messages in thread
From: Xiong Yining @ 2024-02-20  8:03 UTC (permalink / raw)
  To: Marcin Juszkiewicz, devel

[-- Attachment #1: Type: text/plain, Size: 653 bytes --]

This is beacuse UEFI only allocates the first memory node memory space for SbsaQemu platform,  i refer to implemet of "OvmfPkg/Fdt/HighMemDxe" and add the support for other memory nodes via GCD services. Maybe you can apply patch "support multi memory nodes" together with this patch.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115641): https://edk2.groups.io/g/devel/message/115641
Mute This Topic: https://groups.io/mt/104074353/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



[-- Attachment #2: Type: text/html, Size: 1069 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [edk2-devel] [PATCH 1/1] SbsaQemu: AcpiDxe: Create SRAT table at runtime
  2024-02-20  8:03     ` Xiong Yining
@ 2024-02-21 13:22       ` Marcin Juszkiewicz
  0 siblings, 0 replies; 5+ messages in thread
From: Marcin Juszkiewicz @ 2024-02-21 13:22 UTC (permalink / raw)
  To: devel, xiongyining1480

W dniu 20.02.2024 o 9:03 AM, Xiong Yining pisze:
> This is beacuse UEFI only allocates the first memory node memory space 
> for SbsaQemu platform,  i refer to implemet of "OvmfPkg/Fdt/HighMemDxe" 
> and add the support for other memory nodes via GCD services. Maybe you 
> can apply patch "support multi memory nodes" together with this patch.

Collected patches:

6ea06a5ae4c9 (tag: multi-node-v3) SbsaQemu: add memory space for the high memory nodes
6cad2691e06e (tag: srat-v2) SbsaQemu: AcpiDxe: Create SRAT table at runtime
86c5fc908bd4 Platform/SbsaQemu: add DeviceTree fallbacks to parse memory information
a2e8ffb1e046 Platform/SbsaQemu: get the information of memory via SMC calls
6007fcaae876 Platform/SbsaQemu: hang if there is no cpu information
dc9360e2e2c8 Platform/SbsaQemu: move FdtHandlerLib to SbsaQemuHardwareInfoLib
5a0a7fa00139 Platform/SbsaQemu: use PcdCoreCount directly
9bebc3a2a7b9 Platform/SbsaQemu: read amount of cpus during init
e7ec1d2d346b (tag: nodt-v5) Platform/SbsaQemu: add SbsaQemuHardwareInfoLib

And effect is nice.

QEMU args:

-smp 4,sockets=4,maxcpus=4
-m 4G,slots=2,maxmem=5G
-object memory-backend-ram,size=1G,id=m0
-object memory-backend-ram,size=3G,id=m1
-numa node,nodeid=0,cpus=0-1,memdev=m0
-numa node,nodeid=1,cpus=2,memdev=m1
-numa node,nodeid=2,cpus=3

EDK2 reports 4GB ram, Linux gets 4GB ram too.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115724): https://edk2.groups.io/g/devel/message/115724
Mute This Topic: https://groups.io/mt/104074353/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-02-21 13:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-31 13:15 [edk2-devel] [PATCH 0/1] Add support for generating SRAT tables Xiong Yining
2024-01-31 13:15 ` [edk2-devel] [PATCH 1/1] SbsaQemu: AcpiDxe: Create SRAT table at runtime Xiong Yining
2024-02-15 14:17   ` Marcin Juszkiewicz
2024-02-20  8:03     ` Xiong Yining
2024-02-21 13:22       ` Marcin Juszkiewicz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox