From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web10.2647.1679678288724536194 for ; Fri, 24 Mar 2023 10:18:09 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=i3n2yRWl; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: andrei.warkentin@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1679678288; x=1711214288; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=Fgoxo7CFbB2eHo4F7LOGjeSrjXnM/Mb9DthZk9jHpso=; b=i3n2yRWll7n7jMXefK8E9CpSMNaE9lBTa5w4Kx9cLP9jI4N0tM4cFCjO u1Zd8ARHb5u0/aGpi3USHBDBMJC2qph4A/J/JXyE3NkhrTBSq87gHGB1U qjlCEPB6PTWSyBMGl0KNxKUzKGyh3Jjsgfc9qOTOhFWQQDis83Mrqqv5h uOWfhYB7HDDhxkFuzf0huLBaVQVs8IUmLEPq3MDjfVHWqIt00/M652vBl ZkXVpKvDw4Qv4xfA2jtgx+L/1Hz0TIy/wGelsYqFRJTV6ezRakJJc6C+d MGSRzyHIpont4bTEWe7vi5UvAgeIB1Ymjbc0v7nRduT9xw6O0xbhjPuOG Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10659"; a="328259412" X-IronPort-AV: E=Sophos;i="5.98,288,1673942400"; d="scan'208";a="328259412" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Mar 2023 10:17:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10659"; a="632905474" X-IronPort-AV: E=Sophos;i="5.98,288,1673942400"; d="scan'208";a="632905474" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga003.jf.intel.com with ESMTP; 24 Mar 2023 10:17:51 -0700 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Fri, 24 Mar 2023 10:17:51 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21 via Frontend Transport; Fri, 24 Mar 2023 10:17:51 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.177) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.21; Fri, 24 Mar 2023 10:17:50 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LTdplRYD7E31D7hIJ6GBju878vumSZSbMimpWUnvtXE2xgKeuPvC2XMgFqoyRgq8sR0YXhI9IQ5BQtLSV/BOpb7wkYSYByvs8gYRwvK3YR736lXg5Qu3Vpp+FsbSR6v9UMRPK2cNdpeIHZ5tGQmt4NAp9PKedXZTt+ZB4q3JW3FlrNmm/Mn6KyUsR2l6ya89P8KtHQmXlV3crQ2y6GPyawSwDpLJawPyAlm2grVj+u5L4+Y1bGGr7NIidya8BuZnyRny9rccX1AhmpcvDw/JDHXgSuZi3V/u3lp20AdoRmqedTlUZxSiagBvI9a/1UWQ3zR/8LsWwSvxH9ouvAVXag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gGkTzMOLuby6Ju0KeznCnlOLhNJcjIBp59V00Q9fshk=; b=Jk3JYuROqy1R4DVPNYtTiaDAvWILAlBrlZ7jJd0zmsXrPzVuS45s7Wf8CwVuxjP/KDcy1f9upDbzysFKAL5MvrpLkozWx3ErZUKlZgq1JYscrq1/Jqh/4V9bgSI8/RsNvugdex4z/00xOtMIk9SNXD89XQPil5tplPm6ZEQXJaO0neUpZ7qltEWRsRd+nHOkV1D3zLuLeBYTLHzhJPsupkM8mAmjkKvHtzpKZvgMIqFLQ+2IzMv++76B5wmlr7rorfDaGpDkNrYvDLR2Ukz2dn1reqovmE4i+02U/nY9iaW8WmyIFZIFtOm0Qr+907yq+3vMIkJarH8RbhTtrzZj2g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from PH8PR11MB6856.namprd11.prod.outlook.com (2603:10b6:510:22b::7) by SA2PR11MB4953.namprd11.prod.outlook.com (2603:10b6:806:117::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.38; Fri, 24 Mar 2023 17:17:47 +0000 Received: from PH8PR11MB6856.namprd11.prod.outlook.com ([fe80::f480:22ed:c915:13f1]) by PH8PR11MB6856.namprd11.prod.outlook.com ([fe80::f480:22ed:c915:13f1%4]) with mapi id 15.20.6178.039; Fri, 24 Mar 2023 17:17:47 +0000 From: "Andrei Warkentin" To: Sunil V L , "devel@edk2.groups.io" CC: Ard Biesheuvel , "Yao, Jiewen" , "Justen, Jordan L" , "Gerd Hoffmann" Subject: Re: [PATCH 1/1] OvmfPkg/RiscVVirt: Support multiple reserved memory ranges Thread-Topic: [PATCH 1/1] OvmfPkg/RiscVVirt: Support multiple reserved memory ranges Thread-Index: AQHZXWxQBQVuSI6zJkGAlz+Eu7qWg68KLVRg Date: Fri, 24 Mar 2023 17:17:47 +0000 Message-ID: References: <20230323094556.2580417-1-sunilvl@ventanamicro.com> In-Reply-To: <20230323094556.2580417-1-sunilvl@ventanamicro.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH8PR11MB6856:EE_|SA2PR11MB4953:EE_ x-ms-office365-filtering-correlation-id: 2aac5888-bfd6-4947-db17-08db2c8bb04c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: VHvu09pTncGGelFumAF7ZG/KHKCSE1duTr/HFgb2DPPriXWdFqY++Tqw1+kM3eG4dzRTWM0mi+ZzoeuLT7Q1oI2ttB+c9aND/t1W5+Jj/iMhnKZB3/dwPkkJ4+9EyKbOVySLU+Aewz8sf6+5SddT7ZIAUpYeA3wsBCnInxE7k46I+O/jVSOoQOsI58OuHRxgi6pgDdrSjwuS3ukWIfkKYKDYoFLmXlwC82BjtUXp71COJkT96htZWhofy0kf8bh27D6gMgyPwmkj6W3Gym05w5isahocdaoUKR+0lnojSYfcH2dCPNNwuGdZ0d4vztvGASnnoMioSV+tagxWc3T3J5RADkv5dcp9g6tgIz7Q6D/rGlqIZNAXjxdyk80qoQUiLyEthTCjaddklBk0kYGcodq5GgHs8WbAj2Fp8KBBpGnbx1VLMqfuxhhWGyDepK9sA5AAho2HPt+oEFKqXNtFjCFOyC4H/S9YEBiKWuVxboOezEeHSVKtah3JBcvThJydFsrqUnc7ipgHya5vvkhVNpoNJ5dKWUC9guOkL6Do+AryMks02PFo8sE9uqgVwzizSzkGsHqNLT3UUcxn9N84DzklO9DWoN1Xwv8xTe6UrO1F8gmNAhX0f0QcAqqwqlRCgzLXcWHU6JMOXNAd3MXM+1/5vhZFv/FMnoC2lKsjjx7lsK6gVByj/N/JtYX9zN24K8hmBtMdz0gbtBZBeykXCA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB6856.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(346002)(376002)(366004)(136003)(396003)(39860400002)(451199018)(38100700002)(55016003)(38070700005)(2906002)(8676002)(83380400001)(71200400001)(66476007)(186003)(9686003)(478600001)(86362001)(33656002)(7696005)(66946007)(66446008)(64756008)(4326008)(76116006)(54906003)(66556008)(53546011)(110136005)(26005)(6506007)(8936002)(52536014)(82960400001)(41300700001)(5660300002)(316002)(122000001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?sC1XEJqbKggMJn0+jn8BSmqi/0PT2UijZzuuKbsxY5/HCeekOba1XDlb8kEV?= =?us-ascii?Q?gf31XhEOz0yuwHpFaQfxLlPd/GngAXVf4bvi1pDZ7TCcwzPCWuNEGQ56kwQ4?= =?us-ascii?Q?LMrYUdMLnQN6u2GXrLm00SiJtf/ND+LQIfW6mgKOQjcVyyvVzh8F2p2O41wy?= =?us-ascii?Q?mzSBPPlPMbmFJ/VndG78aOya/iamVx1m0mxqji8G5pgUYlz8Gvkd2iahOwwC?= =?us-ascii?Q?ID/9RZj9Sg07ING+AARVEsOkRpgme4bYgtZfyJpl3nahl80z0LZ7PFRzOZn1?= =?us-ascii?Q?iRPNDYZaftEfHPjuNcVRlFhdCOePXJAAbqI4phiqlh36Khk9Yob4OgnDPJ13?= =?us-ascii?Q?o3SZwcZty6suSAuOk6uNfnyLMZY199dZ69BsojKUyHtjQZPRpGUfDb3hbtNs?= =?us-ascii?Q?6Ti3o9QiNhboz/5taEgUo8xrDBWaIFky/XobkeTWm6RyP12Pq5g6CLuJahnJ?= =?us-ascii?Q?Jwf3JFeHfzg8+96I71m9VSVJM10xkGAO6lOOtzwgTLyA0G+peYpVpHDObulY?= =?us-ascii?Q?dxaT2ZXedbRoU68CaHaMySC9AS2v9k4Xcx96iJ2RUIXS3wnCAWs2pOQ7QzXT?= =?us-ascii?Q?brTIDKtCGdCe4/4XPikY03LUy2Q4+agnuxERD8b8mZeXvCksPoqpI9Ss0v6R?= =?us-ascii?Q?C/ZjSDTZ6VBIBgeE8Zm2mQH9CtjmsIVxblPIbddQVvUGiLLvR6r4ajeHAPBX?= =?us-ascii?Q?fsjJu1M0yBFuWySp6HNWzzkLl7fws2bCzFyGlwojgwnqqJrPWo5ZmgKf1oyJ?= =?us-ascii?Q?TXbfFG8B206Hw89unl+9mkJD+j3hNTZbYGTa9Xt9ohxxXMaRm6q/sc37EVKW?= =?us-ascii?Q?qmdfEKqTUidmkYHvb30d6X/otnbWXrTrfVew/70e/XWNiHP9CIQj5/bk5pZ4?= =?us-ascii?Q?KG1WTCWGLsotem03GANBRZj+8JfN5d7YN+kdeLeZT1CTpY9fdNPr/5LnTa5M?= =?us-ascii?Q?1vFNRM2NVWmDYYAboM1wXMI+cGj1Jfki2CNj5pL0z4jtEOQzHoUaRcUdbRRN?= =?us-ascii?Q?rIwRLuDDcRALm69dE+auhsS3/EYdB6BwOCOUdt7i94FkY1IoQXUOgKmzt9iw?= =?us-ascii?Q?eogl9uuYz7LkfKJ6QbdD+S88G/eAeQvQt4XppsdXM4w0MklDjWfpoXbMAA3t?= =?us-ascii?Q?t6/l8sPpbcFhpJ6DoQM6KGQpt6qCKKo/8wWAK/JtnCM8afGEoRJ24/DfV6On?= =?us-ascii?Q?wNLBCr886k9jKVKHF6VwW+vpI4X4NJvS9bE4FgBpqIrKxYFQWAX4D6rJq1Z6?= =?us-ascii?Q?kB1FUmN3NBHUx82I+JNaPlFmQ/2zvp8uM86QgoEBMEp29ze8FaiTuDj8bfNZ?= =?us-ascii?Q?08x/RTAVZfD5t7RCHKMJ5j1Mei3Ok+vnSttKbwufIf63jczxOnZNgwciKmXW?= =?us-ascii?Q?e2vISzmwiUw5BjAVSAqkeE1dMwIIFMBbOQEVT6a7Czf0ojGrZdaoZQ7A/6JC?= =?us-ascii?Q?Ls3cnb4tjPlJAs/B9B+6UEdo2d2aGoX2E+wTjfYxF/Ds41yu5jQDz0VNySQ2?= =?us-ascii?Q?2AUNoxAdU6aWjIbt07NbjnRxa/Sk6pGYca6GMUzL2Lcs44miivlH4PstXyxs?= =?us-ascii?Q?aVfbWnsER8QPa96SXZxBVOLZr/sQalOM1b+SDeZRc7RmMwRRHnkgTq0XMzpo?= =?us-ascii?Q?3Q=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB6856.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2aac5888-bfd6-4947-db17-08db2c8bb04c X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Mar 2023 17:17:47.2335 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: baRr71Q+ZvNcJlqEjBYiUs91ZeANAJ9pzhDEpV/x0G1jLmAd9JGi9AQpQHKUTbuf/mGF0CPCCs6Dw2YQJBAS6TqGtoFF6zJzW355lLSFK5Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB4953 Return-Path: andrei.warkentin@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Sunil, Looks reasonable! Can you please add the IN/OUT annotations to the functions that are missing= them - at least the changed ones, such as: - GetNumCells (also missing a comment header) - AddReservedMemoryMap With that - Reviewed-by: Andrei Warkentin -----Original Message----- From: Sunil V L =20 Sent: Thursday, March 23, 2023 4:46 AM To: devel@edk2.groups.io Cc: Ard Biesheuvel ; Yao, Jiewen ; Justen, Jordan L ; Gerd Hoffmann ; Warkentin, Andrei Subject: [PATCH 1/1] OvmfPkg/RiscVVirt: Support multiple reserved memory ra= nges M-mode firmware ranges should not be used by EDK2/OS. Currently, we search for mmode_resv0 node in FDT and mark it as the reserve= d memory in EFI memory map. However, if there are multiple M-mode firmware = ranges, then this will miss those extra ranges allowing the OS to access th= e memory and hit a fault. This issue is exposed since recent opensbi started creating two ranges for = text and data. Fix this by searching for all reserved memory nodes and marking them as res= erved in the EFI memory map. Cc: Ard Biesheuvel Cc: Jiewen Yao Cc: Jordan Justen Cc: Gerd Hoffmann Cc: Andrei Warkentin Signed-off-by: Sunil V L --- OvmfPkg/RiscVVirt/Sec/Memory.c | 208 +++++++++++++++++++++------------ 1 file changed, 136 insertions(+), 72 deletions(-) diff --git a/OvmfPkg/RiscVVirt/Sec/Memory.c b/OvmfPkg/RiscVVirt/Sec/Memory.= c index 70935b07b56b..aeae361ebe90 100644 --- a/OvmfPkg/RiscVVirt/Sec/Memory.c +++ b/OvmfPkg/RiscVVirt/Sec/Memory.c @@ -38,31 +38,6 @@ BuildMemoryTypeInformationHob ( VOID ); =20 -/** - Build reserved memory range resource HOB. - - @param MemoryBase Reserved memory range base address. - @param MemorySize Reserved memory range size. - -**/ -STATIC -VOID -AddReservedMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize - ) -{ - BuildResourceDescriptorHob ( - EFI_RESOURCE_MEMORY_RESERVED, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_TESTED, - MemoryBase, - MemorySize - ); -} - /** Create memory range resource HOB using the memory base address and size. @@ -133,38 +108,143 @@ STATIC VOID InitializeRamRegions ( EFI_PHYSICAL_ADDRESS SystemMemoryBase, - UINT64 SystemMemorySize, - EFI_PHYSICAL_ADDRESS MmodeResvBase, - UINT64 MmodeResvSize + UINT64 SystemMemorySize ) { - /* - * M-mode FW can be loaded anywhere in memory but should not overlap - * with the EDK2. This can happen if some other boot code loads the - * M-mode firmware. - * - * The M-mode firmware memory should be marked as reserved memory - * so that OS doesn't use it. - */ - DEBUG (( - DEBUG_INFO, - "%a: M-mode FW Memory Start:0x%lx End:0x%lx\n", - __FUNCTION__, - MmodeResvBase, - MmodeResvBase + MmodeResvSize - )); - AddReservedMemoryBaseSizeHob (MmodeResvBase, MmodeResvSize); - - if (MmodeResvBase > SystemMemoryBase) { - AddMemoryRangeHob (SystemMemoryBase, MmodeResvBase); - } - AddMemoryRangeHob ( - MmodeResvBase + MmodeResvSize, + SystemMemoryBase, SystemMemoryBase + SystemMemorySize ); } =20 +STATIC +INT32 +GetNumCells ( + VOID *Fdt, + INT32 Node, + CONST CHAR8 *Name + ) +{ + CONST INT32 *Prop; + INT32 Len; + UINT32 Val; + + Prop =3D fdt_getprop (Fdt, Node, Name, &Len); if (Prop =3D=3D NULL) { + return Len; + } + + if (Len !=3D sizeof (*Prop)) { + return -FDT_ERR_BADNCELLS; + } + + Val =3D fdt32_to_cpu (*Prop); + if (Val > FDT_MAX_NCELLS) { + return -FDT_ERR_BADNCELLS; + } + + return (INT32)Val; +} + +/** Mark reserved memory ranges in the EFI memory map + * + * The M-mode firmware ranges should not be used by the + * EDK2/OS. These ranges are passed via device tree using reserved + * memory nodes. Parse the DT and mark those ranges as of + * type EfiReservedMemoryType. + * + * NOTE: Device Tree spec section 3.5.4 says reserved memory regions + * without no-map property should be installed as EfiBootServicesData. + * As per UEFI spec, memory of type EfiBootServicesData can be used + * by the OS after ExitBootServices(). + * This is not an issue for DT since OS can parse the DT also along + * with EFI memory map and avoid using these ranges. But with ACPI, + * there is no such mechanisms possible. + * Since EDK2 needs to support both DT and ACPI, we are deviating + * from the DT spec and marking all reserved memory ranges as + * EfiReservedMemoryType itself irrespective of no-map. + * + * @param FdtPointer Pointer to FDT + * +**/ +STATIC +VOID +AddReservedMemoryMap ( + VOID *FdtPointer + ) +{ + CONST INT32 *RegProp; + INT32 Node; + INT32 SubNode; + INT32 Len; + EFI_PHYSICAL_ADDRESS Addr; + UINT64 Size; + INTN NumRsv, i; + INT32 NumAddrCells, NumSizeCells; + + NumRsv =3D fdt_num_mem_rsv (FdtPointer); + + /* Look for an existing entry and add it to the efi mem map. */ for=20 + (i =3D 0; i < NumRsv; i++) { + if (fdt_get_mem_rsv (FdtPointer, i, &Addr, &Size) !=3D 0) { + continue; + } + + BuildMemoryAllocationHob ( + Addr, + Size, + EfiReservedMemoryType + ); + } + + /* process reserved-memory */ + Node =3D fdt_subnode_offset (FdtPointer, 0, "reserved-memory"); if=20 + (Node >=3D 0) { + NumAddrCells =3D GetNumCells (FdtPointer, Node, "#address-cells"); + if (NumAddrCells <=3D 0) { + return; + } + + NumSizeCells =3D GetNumCells (FdtPointer, Node, "#size-cells"); + if (NumSizeCells <=3D 0) { + return; + } + + fdt_for_each_subnode (SubNode, FdtPointer, Node) { + RegProp =3D fdt_getprop (FdtPointer, SubNode, "reg", &Len); + + if ((RegProp !=3D 0) && (Len =3D=3D ((NumAddrCells + NumSizeCells) *= sizeof (INT32)))) { + Addr =3D fdt32_to_cpu (RegProp[0]); + + if (NumAddrCells > 1) { + Addr =3D (Addr << 32) | fdt32_to_cpu (RegProp[1]); + } + + RegProp +=3D NumAddrCells; + Size =3D fdt32_to_cpu (RegProp[0]); + + if (NumSizeCells > 1) { + Size =3D (Size << 32) | fdt32_to_cpu (RegProp[1]); + } + + DEBUG (( + DEBUG_INFO, + "%a: Adding Reserved Memory Addr =3D 0x%llx, Size =3D 0x%llx\n", + __func__, + Addr, + Size + )); + + BuildMemoryAllocationHob ( + Addr, + Size, + EfiReservedMemoryType + ); + } + } + } +} + /** Initialize memory hob based on the DTB information. =20 @@ -183,8 +263,6 @@ MemoryPeimInitialization ( INT32 Node, Prev; INT32 Len; VOID *FdtPointer; - EFI_PHYSICAL_ADDRESS MmodeResvBase; - UINT64 MmodeResvSize; =20 FirmwareContext =3D NULL; GetFirmwareContextPointer (&FirmwareContext); @@ -200,16 +278,6 @@ Memor= yPeimInitialization ( return EFI_UNSUPPORTED; } =20 - /* try to locate the reserved memory opensbi node */ - Node =3D fdt_path_offset (FdtPointer, "/reserved-memory/mmode_resv0"); - if (Node >=3D 0) { - RegProp =3D fdt_getprop (FdtPointer, Node, "reg", &Len); - if ((RegProp !=3D 0) && (Len =3D=3D (2 * sizeof (UINT64)))) { - MmodeResvBase =3D fdt64_to_cpu (ReadUnaligned64 (RegProp)); - MmodeResvSize =3D fdt64_to_cpu (ReadUnaligned64 (RegProp + 1)); - } - } - // Look for the lowest memory node for (Prev =3D 0; ; Prev =3D Node) { Node =3D fdt_next_node (FdtPointer, Prev, NULL); @@ -235,16 +303,10 @@= MemoryPeimInitialization ( CurBase + CurSize - 1 )); =20 - if ((MmodeResvBase >=3D CurBase) && ((MmodeResvBase + MmodeResvSiz= e) <=3D (CurBase + CurSize))) { - InitializeRamRegions ( - CurBase, - CurSize, - MmodeResvBase, - MmodeResvSize - ); - } else { - AddMemoryBaseSizeHob (CurBase, CurSize); - } + InitializeRamRegions ( + CurBase, + CurSize + ); } else { DEBUG (( DEBUG_ERROR, @@ -255,6 +317,8 @@ MemoryPeimInitialization ( } } =20 + AddReservedMemoryMap (FdtPointer); + InitMmu (); =20 BuildMemoryTypeInformationHob (); -- 2.34.1