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 840D5740052 for ; Wed, 27 Mar 2024 14:02:01 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=5MHOS4GkS5vRAU8AjbhYnHoc32Z4k8aSoJHPe7TyWzk=; 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:Resent-Date:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20240206; t=1711548120; v=1; b=LkBREJXFuL/WlCvpRJk5HNimXiVm627tFBiTMKx56d++j93Q1WQAG9EkYJsY5g4SaiDHpCqg p39KZ8gkFJjDpTdrVFIVu9NMwn6+Wf2WpvPIGOuX23ly6/sBYPT4U6H4ktXrRB9jFtUwPXw2jZZ sMSMgl2wMDI8KQK0fogS/iYzZNOhufii57jIxCvHWM/uRgklSVgZJwExs/fDBS0LyumrKLh3rti GOBfKhE8iQt0bsQjKegtsIfrgZWqPChalQWwYPUzemLl+3IZ87xYjOUN4uY3ymFK0m74d6XR5Oj ftasjh724NPn/5Xi6fujLyzkFp9ZpvX0BSwXUhcCwXUmA== X-Received: by 127.0.0.2 with SMTP id WGoBYY7687511xvIZ1tgex93; Wed, 27 Mar 2024 07:02:00 -0700 X-Received: from sgoci-sdnproxy-4.icoremail.net (sgoci-sdnproxy-4.icoremail.net [129.150.39.64]) by mx.groups.io with SMTP id smtpd.web11.38374.1711548119173682183 for ; Wed, 27 Mar 2024 07:01:59 -0700 X-Received: from prodtpl.icoremail.net (unknown [10.12.1.20]) by hzbj-icmmx-7 (Coremail) with SMTP id AQAAfwDHzrbVJgRm9hUXEA--.12889S2; Wed, 27 Mar 2024 22:01:57 +0800 (CST) X-Received: from phytium.com.cn (unknown [218.76.62.144]) by mail (Coremail) with SMTP id AQAAfwD3iPjTJgRmwncAAA--.1442S4; Wed, 27 Mar 2024 22:01:56 +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 v4 1/1] SbsaQemu: add memory space for the high memory nodes Date: Wed, 27 Mar 2024 14:01:43 +0000 Message-Id: <20240327140143.3802632-2-xiongyining1480@phytium.com.cn> In-Reply-To: <20240327140143.3802632-1-xiongyining1480@phytium.com.cn> References: <20240327140143.3802632-1-xiongyining1480@phytium.com.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAfwD3iPjTJgRmwncAAA--.1442S4 X-CM-SenderInfo: x0lr0wp1lqx0bjrumio6sk53xlxphulrpou0/1tbiAQARBmYDI2QGUgAAsg X-Coremail-Antispam: 1Uk129KBjvJXoW3Wr17tryxAr4kJrW3AFyfXrb_yoWxWFyUpF W7AFWruw48J3s2vw4fGa4rZFy5CFy3C3yUGrZrX3WxXa13JF18Zw47Zrn3Jr98Jrn8Za1k WF48t34UW3Z5Kw7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj 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 Resent-Date: Wed, 27 Mar 2024 07:01:59 -0700 Reply-To: devel@edk2.groups.io,xiongyining1480@phytium.com.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: OY3CHBRzAes6dAciQpMHXzgzx7686176AA= Content-Transfer-Encoding: 8bit X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=LkBREJXF; 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 Tested-by: Marcin Juszkiewicz --- Platform/Qemu/SbsaQemu/SbsaQemu.dsc | 1 + Platform/Qemu/SbsaQemu/SbsaQemu.fdf | 1 + .../SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.inf | 45 ++++++ .../SbsaQemuHighMemDxe/SbsaQemuHighMemDxe.c | 134 ++++++++++++++++++ 4 files changed, 181 insertions(+) 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 3b936f6e6386..22017792bad2 100644 --- a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc +++ b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc @@ -671,6 +671,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..304f47392298 --- /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 + HardwareInfoLib + +[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..004a8c0cf654 --- /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 = GetMemNodeCount(); + for (index = 0; index < NumMemNodes; index++){ + GetMemInfo(index, &MemInfo); + 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 (#117168): https://edk2.groups.io/g/devel/message/117168 Mute This Topic: https://groups.io/mt/105177586/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-