From nobody Tue Feb 10 10:04:05 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+93884+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+93884+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1663296398; cv=none; d=zohomail.com; s=zohoarc; b=kNqzrwAoOSpxKBufi0uy1HHtBr7Z9aIVD0pTEBUfZSUakr7jGEvz0KfHfPEVua4SrmDlgVI8x9FRO6UMFg6p37wMpDOuIX/RON1RZ9TdaTq5V2tCzdA718CsWzNcv44HVGPWCOjqti06tu1k/l85WRPPtiEG5ORvVIw/6uesaFs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1663296398; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:Message-ID:Reply-To:References:Sender:Subject:To; bh=BcEAQW3ZBmSu77waO/XC8Fmsmm+X/pynszoFmp9STm0=; b=jHgoS86C/IFZ/iDseBvvpV+O9zeiX9x/JzeSzUe92C7wiLngC4QQA9bFLn1McMJgXyGNiNLA7e1CMdxGIm1SqY4z7DtSoFUELabmAbLXzXCRQFJSQLLfjhOyd2mFuqG45u5f4vZZvuKYYF4Stk9+g54azre9JqjWHNYJ4ps6XCA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+93884+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1663296398537358.1893267797444; Thu, 15 Sep 2022 19:46:38 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id HyNVYY1788612xjhhfFe9gaK; Thu, 15 Sep 2022 19:46:38 -0700 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web08.1796.1663296397395455513 for ; Thu, 15 Sep 2022 19:46:37 -0700 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6CC77ED1; Thu, 15 Sep 2022 19:46:43 -0700 (PDT) X-Received: from entos-thunderx2-desktop.shanghai.arm.com (entos-thunderx2-desktop.shanghai.arm.com [10.169.212.232]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 301273F71A; Thu, 15 Sep 2022 19:46:34 -0700 (PDT) From: "Jianyong Wu" To: devel@edk2.groups.io, Sami.Mujawar@arm.com Cc: ardb+tianocore@kernel.org, justin.he@arm.com, jianyong.wu@arm.com Subject: [edk2-devel] [PATCH 2/3] CloudHv:arm: build hob for kernel image memory as read-only Date: Fri, 16 Sep 2022 10:46:19 +0800 Message-Id: <20220916024620.114084-3-jianyong.wu@arm.com> In-Reply-To: <20220916024620.114084-1-jianyong.wu@arm.com> References: <20220916024620.114084-1-jianyong.wu@arm.com> Precedence: Bulk List-Unsubscribe: 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,jianyong.wu@arm.com X-Gm-Message-State: oXeGcWDT0V6n7Gp0gV4eKzpJx1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1663296398; bh=FfEsJ57ge/gBMb5alVeBGvAebk6rGUwJbMYX53oVJ/w=; h=Cc:Date:From:Reply-To:Subject:To; b=R+SNEE8wgquwfW8RMX/6RxQUnBUtpaIZdWUMGf0oSh1W1WSdGAbwJ6Cuw7lo1SK/nq4 dm8nXgMVby4rywhd24Mq2qCiZzDkIkqAvCDPUlGIiYZ9a1drUU0CPhwOAIlM6eDYBf/of sM5i4oyYjlLnP84XI0Drk9if7kgOsw+5Flg= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1663296400544100009 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As we use memory to pass kernel image, the memory region where kernel image locates should be added into hob as read-only. Signed-off-by: Jianyong Wu --- .../CloudHvVirtMemInfoLib.c | 66 +++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/ArmVirtPkg/Library/CloudHvVirtMemInfoLib/CloudHvVirtMemInfoLib= .c b/ArmVirtPkg/Library/CloudHvVirtMemInfoLib/CloudHvVirtMemInfoLib.c index 28a0c0b078..d9b7d51a16 100644 --- a/ArmVirtPkg/Library/CloudHvVirtMemInfoLib/CloudHvVirtMemInfoLib.c +++ b/ArmVirtPkg/Library/CloudHvVirtMemInfoLib/CloudHvVirtMemInfoLib.c @@ -37,13 +37,14 @@ CloudHvVirtMemInfoPeiLibConstructor ( ) { VOID *DeviceTreeBase; - EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttributes; + EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttributes, ReadOnlyResourceAttribu= tes; INT32 Node, Prev; UINT64 FirMemNodeBase, FirMemNodeSize; - UINT64 CurBase, MemBase; + UINT64 CurBase, MemBase, CurSizeOff; UINT64 CurSize; + UINT64 KernelStart, KernelSize; CONST CHAR8 *Type; - INT32 Len; + INT32 Len, ChosenNode; CONST UINT64 *RegProp; RETURN_STATUS PcdStatus; UINT8 Index; @@ -53,6 +54,8 @@ CloudHvVirtMemInfoPeiLibConstructor ( FirMemNodeBase =3D 0; FirMemNodeSize =3D 0; Index =3D 0; + CurSizeOff =3D 0; + KernelSize =3D 0; MemBase =3D FixedPcdGet64 (PcdSystemMemoryBase); ResourceAttributes =3D ( EFI_RESOURCE_ATTRIBUTE_PRESENT | @@ -60,6 +63,12 @@ CloudHvVirtMemInfoPeiLibConstructor ( EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | EFI_RESOURCE_ATTRIBUTE_TESTED ); + ReadOnlyResourceAttributes =3D ( + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_TESTED | + EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTED + ); DeviceTreeBase =3D (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddr= ess); if (DeviceTreeBase =3D=3D NULL) { return EFI_NOT_FOUND; @@ -72,6 +81,21 @@ CloudHvVirtMemInfoPeiLibConstructor ( return EFI_NOT_FOUND; } =20 + // + // Try to get kernel image info from DT + // + ChosenNode =3D fdt_path_offset (DeviceTreeBase, "/chosen"); + if (ChosenNode >=3D 0) { + RegProp =3D fdt_getprop (DeviceTreeBase, ChosenNode, "linux,kernel-sta= rt", &Len); + if ((RegProp !=3D NULL) && (Len > 0)) { + KernelStart =3D (UINT64)fdt64_to_cpu (ReadUnaligned64 (RegProp)); + RegProp =3D fdt_getprop (DeviceTreeBase, ChosenNode, "linux,kern= el-size", &Len); + if ((RegProp !=3D NULL) && (Len > 0)) { + KernelSize =3D (UINT64)fdt64_to_cpu (ReadUnaligned64 (RegProp)); + } + } + } + // // Look for the lowest memory node // @@ -105,11 +129,26 @@ CloudHvVirtMemInfoPeiLibConstructor ( =20 // We should build Hob seperately for the memory node except the f= irst one if (CurBase !=3D MemBase) { + // If kernel image resides in current memory node, build hob fro= m CurBase to the beginning of kernel image. + if ((KernelSize !=3D 0) && (KernelStart >=3D CurBase) && (Kernel= Start + KernelSize <=3D CurBase + CurSize)) { + CurSizeOff =3D CurBase + CurSize - KernelStart; + // align up with 0x1000 + CurSizeOff =3D (CurSizeOff + 0xfff) & ~0xfffUL; + } + BuildResourceDescriptorHob ( EFI_RESOURCE_SYSTEM_MEMORY, ResourceAttributes, CurBase, - CurSize + CurSize - CurSizeOff + ); + + // Add kernel image memory region to hob as read only + BuildResourceDescriptorHob ( + EFI_RESOURCE_SYSTEM_MEMORY, + ReadOnlyResourceAttributes, + CurBase + CurSize - CurSizeOff, + CurSizeOff ); } else { FirMemNodeBase =3D CurBase; @@ -146,8 +185,27 @@ CloudHvVirtMemInfoPeiLibConstructor ( return EFI_NOT_FOUND; } =20 + CurSizeOff =3D 0; + // Build hob for the lowest memory node from its base to the beginning o= f kernel image once the kernel image reside here + if ((KernelSize !=3D 0) && (KernelStart >=3D FirMemNodeBase) && (KernelS= tart + KernelSize <=3D FirMemNodeBase + FirMemNodeSize)) { + CurSizeOff =3D FirMemNodeBase + FirMemNodeSize - KernelStart; + // Caution the alignment + CurSizeOff =3D (CurSizeOff + 0xfff) & ~0xfffUL; + + // Add kernel image memory region to hob as read only + BuildResourceDescriptorHob ( + EFI_RESOURCE_SYSTEM_MEMORY, + ReadOnlyResourceAttributes, + FirMemNodeBase + FirMemNodeSize - CurSizeOff, + CurSizeOff + ); + } + + FirMemNodeSize -=3D CurSizeOff; + PcdStatus =3D PcdSet64S (PcdSystemMemorySize, FirMemNodeSize); ASSERT_RETURN_ERROR (PcdStatus); + ASSERT ( (((UINT64)PcdGet64 (PcdFdBaseAddress) + (UINT64)PcdGet32 (PcdFdSize)) <=3D FirMemNodeBase) || --=20 2.17.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#93884): https://edk2.groups.io/g/devel/message/93884 Mute This Topic: https://groups.io/mt/93715217/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-