From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id CDA4574003E for ; Tue, 20 Feb 2024 07:34:34 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=6TVL9TEigkkmd/Pvr4Nts8C4tOMVgVOpNhyEZkedrKI=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1708414473; v=1; b=WLKg3AZgtegGWYoMWGJG3JbyE87paXAQcRRQ3Vba3klvImCBQmBTuDWRO2a15RpRo2IylfbN UiCBble3FFF+jTckq5EeWxFDXYZh2+eQKiernf5RqnC7sjHkug7LyNnedKksI9ceSSaCUlPDaKr HQNIwSfQ3sE1nqbWokDMQ04o= X-Received: by 127.0.0.2 with SMTP id nPIWYY7687511xWNDU6OvwKM; Mon, 19 Feb 2024 23:34:33 -0800 X-Received: from zg8tmja5ljk3lje4ms43mwaa.icoremail.net (zg8tmja5ljk3lje4ms43mwaa.icoremail.net [209.97.181.73]) by mx.groups.io with SMTP id smtpd.web10.8533.1708414471848047217 for ; Mon, 19 Feb 2024 23:34:32 -0800 X-Received: from prodtpl.icoremail.net (unknown [10.12.1.20]) by hzbj-icmmx-7 (Coremail) with SMTP id AQAAfwAX+bQDVtRlgi8rCQ--.19648S2; Tue, 20 Feb 2024 15:34:27 +0800 (CST) X-Received: from phytium.com.cn (unknown [218.76.62.144]) by mail (Coremail) with SMTP id AQAAfwAHmYT9VdRlCj8AAA--.302S4; Tue, 20 Feb 2024 15:34:26 +0800 (CST) From: "Xiong Yining" To: devel@edk2.groups.io Cc: quic_llindhol@quicinc.com, ardb+tianocore@kernel.org, graeme@xora.org.uk, marcin.juszkiewicz@linaro.org, chenbaozi@phytium.com.cn, Xiong Yining Subject: [edk2-devel] [PATCH v3 1/1] SbsaQemu: add memory space for the high memory nodes Date: Tue, 20 Feb 2024 07:33:32 +0000 Message-Id: <20240220073332.3249289-2-xiongyining1480@phytium.com.cn> In-Reply-To: <20240220073332.3249289-1-xiongyining1480@phytium.com.cn> References: <20240220073332.3249289-1-xiongyining1480@phytium.com.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAfwAHmYT9VdRlCj8AAA--.302S4 X-CM-SenderInfo: x0lr0wp1lqx0bjrumio6sk53xlxphulrpou0/1tbiAQABBmXTrXETQwAAs8 X-Coremail-Antispam: 1Uk129KBjvJXoW3Wr17tryUJF48WrWrKw1UGFg_yoWxWF13pF y7AFWruw48J3sFvw4fGa4rZFy5CFy3C3yUG39rX3WxJa13JF18Zw47Zrn3Jr98Jrn8Za1k WF48t34UW3Z5KaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj DUYxn0WfASr-VFAU7a7-sFnT9fnUUIcSsGvfJ3UbIYCTnIWIevJa73UjIFyTuYvj4RJUUU UUUUU Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,xiongyining1480@phytium.com.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 6dLOtlQHcYA12wWoWD4uiMglx7686176AA= Content-Transfer-Encoding: 8bit X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=WLKg3AZg; dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io To support more memory nodes, we refer to the implement of "OvmfPkg/Fdt/HighMemDxe" to add memory space for the high memory nodes except the first one. Signed-off-by: Xiong Yining Signed-off-by: Chen Baozi --- Platform/Qemu/SbsaQemu/SbsaQemu.dsc | 1 + Platform/Qemu/SbsaQemu/SbsaQemu.fdf | 1 + .../SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.inf | 45 ++++++ .../SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.c | 134 ++++++++++++++++++ 4 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.inf create mode 100644 Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.c diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc index bde61651da2e..e48bb8eb0174 100644 --- a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc +++ b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc @@ -675,6 +675,7 @@ DEFINE NETWORK_HTTP_BOOT_ENABLE = FALSE ArmPkg/Drivers/TimerDxe/TimerDxe.inf OvmfPkg/VirtNorFlashDxe/VirtNorFlashDxe.inf MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf + Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.inf # # FAT filesystem + GPT/MBR partitioning diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.fdf b/Platform/Qemu/SbsaQemu/SbsaQemu.fdf index 6fcfd25faaeb..b35f42e11aa4 100644 --- a/Platform/Qemu/SbsaQemu/SbsaQemu.fdf +++ b/Platform/Qemu/SbsaQemu/SbsaQemu.fdf @@ -161,6 +161,7 @@ READ_LOCK_STATUS = TRUE INF MdeModulePkg/Core/Dxe/DxeMain.inf INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf + INF Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.inf # # PI DXE Drivers producing Architectural Protocols (EFI Services) diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.inf b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.inf new file mode 100644 index 000000000000..85bfb722affa --- /dev/null +++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.inf @@ -0,0 +1,45 @@ +## @file +# High memory node enumeration DXE driver for SbsaQemu +# +# Copyright (c) 2023, Linaro Ltd. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = SbsaQemuHighMemDxe + FILE_GUID = 9E749C5E-C282-32F8-7CC3-E5A3DDE15329 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + + ENTRY_POINT = InitializeHighMemDxe + +[Sources] + SbsaQemuHighMemDxe.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + ArmPkg/ArmPkg.dec + Silicon/Qemu/SbsaQemu/SbsaQemu.dec + +[LibraryClasses] + BaseLib + DebugLib + DxeServicesTableLib + PcdLib + UefiBootServicesTableLib + UefiDriverEntryPoint + SbsaQemuHardwareInfoLib + +[Protocols] + gEfiCpuArchProtocolGuid ## CONSUMES + +[Pcd] + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy + gArmTokenSpaceGuid.PcdSystemMemoryBase + +[Depex] + gEfiCpuArchProtocolGuid diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.c new file mode 100644 index 000000000000..35ccf8eb942b --- /dev/null +++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.c @@ -0,0 +1,134 @@ +/** @file +* High memory node enumeration DXE driver for SbsaQemu +* Virtual Machines +* +* Copyright (c) 2023, Linaro Ltd. All rights reserved. +* +* SPDX-License-Identifier: BSD-2-Clause-Patent +* +**/ + +#include +#include +#include +#include +#include +#include + +#include + +EFI_STATUS +EFIAPI +InitializeHighMemDxe ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_CPU_ARCH_PROTOCOL *Cpu; + EFI_STATUS Status; + UINT32 NumMemNodes; + UINT32 index; + UINT64 CurBase; + UINT64 CurSize; + UINT64 Attributes; + MemoryInfo MemInfo; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; + + Status = gBS->LocateProtocol ( + &gEfiCpuArchProtocolGuid, + NULL, + (VOID **)&Cpu + ); + ASSERT_EFI_ERROR (Status); + + // + // Check for memory node and add the memory spaces except the lowest one + // + NumMemNodes = SbsaQemuGetMemNodeCount(); + for (index = 0; index < NumMemNodes; index++){ + MemInfo = SbsaQemuGetMemInfo(index); + CurBase = MemInfo.AddressBase; + CurSize = MemInfo.AddressSize; + + if (CurBase > PcdGet64 (PcdSystemMemoryBase)) { + Status = gDS->GetMemorySpaceDescriptor (CurBase, &GcdDescriptor); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_WARN, + "%a: Region 0x%lx - 0x%lx not found in the GCD memory space map\n", + __func__, + CurBase, + CurBase + CurSize - 1 + )); + continue; + } + + if (GcdDescriptor.GcdMemoryType == EfiGcdMemoryTypeNonExistent) { + Status = gDS->AddMemorySpace ( + EfiGcdMemoryTypeSystemMemory, + CurBase, + CurSize, + EFI_MEMORY_WB + ); + + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "%a: Failed to add System RAM @ 0x%lx - 0x%lx (%r)\n", + __func__, + CurBase, + CurBase + CurSize - 1, + Status + )); + continue; + } + + Status = gDS->SetMemorySpaceAttributes ( + CurBase, + CurSize, + EFI_MEMORY_WB + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_WARN, + "%a: gDS->SetMemorySpaceAttributes() failed on region 0x%lx - 0x%lx (%r)\n", + __func__, + CurBase, + CurBase + CurSize - 1, + Status + )); + } + + Attributes = EFI_MEMORY_WB; + if ((PcdGet64 (PcdDxeNxMemoryProtectionPolicy) & + (1U << (UINT32)EfiConventionalMemory)) != 0) + { + Attributes |= EFI_MEMORY_XP; + } + + Status = Cpu->SetMemoryAttributes (Cpu, CurBase, CurSize, Attributes); + + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "%a: Failed to set System RAM @ 0x%lx - 0x%lx attribute (%r)\n", + __func__, + CurBase, + CurBase + CurSize - 1, + Status + )); + } else { + DEBUG (( + DEBUG_INFO, + "%a: Add System RAM @ 0x%lx - 0x%lx\n", + __func__, + CurBase, + CurBase + CurSize - 1 + )); + } + } + } + } + + return EFI_SUCCESS; +} -- 2.34.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115636): https://edk2.groups.io/g/devel/message/115636 Mute This Topic: https://groups.io/mt/104463710/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-