From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web09.186.1623939088954881611 for ; Thu, 17 Jun 2021 07:11:31 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=qf2PJB0L; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: maurice.ma@intel.com) IronPort-SDR: nJHZh4n17k4F2U0UnjBnwl1+RFRArVm5eqAq7/5pj480EuHuDLhYDkxil0EyIuO/TeP162t7xZ cUEMRioO7SAw== X-IronPort-AV: E=McAfee;i="6200,9189,10017"; a="267523228" X-IronPort-AV: E=Sophos;i="5.83,280,1616482800"; d="scan'208";a="267523228" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Jun 2021 07:11:27 -0700 IronPort-SDR: Nk1J4tm3iogCDNjJ+QR7xuopIltfY9PjRn0VJCMnHl8IcY+doIYMLhv84pfVckVavvqbr5lAxU KFBQQIfcX50A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,280,1616482800"; d="scan'208";a="451030183" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga008.jf.intel.com with ESMTP; 17 Jun 2021 07:11:27 -0700 Received: from orsmsx609.amr.corp.intel.com (10.22.229.22) 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.2242.4; Thu, 17 Jun 2021 07:11:27 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX609.amr.corp.intel.com (10.22.229.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Thu, 17 Jun 2021 07:11:26 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4 via Frontend Transport; Thu, 17 Jun 2021 07:11:26 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.103) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.4; Thu, 17 Jun 2021 07:11:26 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SDR6NtFN2WQgkE9j4E8+afY6e6ZtmU5omys5CDyF/8UUIQFG9OlO7Ajnjg0WkZ23dLl3JaKOjGg+mSqRCwcHRgZGQZ9L0DxNZqRLOCKv6Q79HMyqwwhrDD5OF+yhJa1ASwcaiFP/bjzJ7vThVAmrUA05wfmxGGVNBk+hEUxpc5r47tCaG39yYRFEZ2ZAT9jQWC6+fyMn7A0jEQRL6bdMF6/VjI8TcUzmVgB6nsReGu32T5fhYKNjRgnKoXO60a/0Zg+877ulSWGjneJnsq2EzicsiGRJNDCtEvb7HRpf4tFQBrg8setf5zEvV8EIrDG71p9QjDtAM/ELbcp/RR0J6Q== 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-SenderADCheck; bh=9rsQdpjxuCdi521XF53b1D+W58VuQpbBvrhAAM46chM=; b=IgCDLV4E1KtzeGAHIwhTHIiRVX31LyoTpA5TJFMnMBY49kEb9U3jfA+ScDyE7xTjOs+TPIQ4W+vf9w4jzU0ABzeRQ5GAgSapmsefNMAMZpTFWZyGFmqhstdGG16WER0Hsw/QrorYUtKJF+VIuDeZ9GdSTYDNi7boNR3r7DzJGP3i3mKH3o4u3W5Kg9VZri3XJWQ5bJyuRwa9ZIRHxS8SuqRfkXOjs30Cd01Qhic/UtO1cE7PX3P82mcCW2vfI2HadllL8vBth6oC2Eyv+lnvLAP5bX2fBDQFjlHaAwA7Rnhx4ylnXdK+ZDQpaq8j+oYUF3eH/7JCFruDQ3DjqtdwVg== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9rsQdpjxuCdi521XF53b1D+W58VuQpbBvrhAAM46chM=; b=qf2PJB0LFPRpXIrIa2mQXRzKUQtL7u4wD70Bm27Br86ya+OqmgxXyt3yWFOcNu7RJxPiTq/cVMkykoflKtLtD16PosXBwy6SIejV9PAYFFSEinaD6KTqUp4fxx5Zk4B0mvQ+0D2JikDP6YTaBoA9ANDeUn3DCdQr7V1POE1d6pI= Received: from CO1PR11MB4945.namprd11.prod.outlook.com (2603:10b6:303:9c::8) by MWHPR11MB1680.namprd11.prod.outlook.com (2603:10b6:301:d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.24; Thu, 17 Jun 2021 14:11:25 +0000 Received: from CO1PR11MB4945.namprd11.prod.outlook.com ([fe80::74c3:dd4a:c4aa:6c8d]) by CO1PR11MB4945.namprd11.prod.outlook.com ([fe80::74c3:dd4a:c4aa:6c8d%7]) with mapi id 15.20.4242.021; Thu, 17 Jun 2021 14:11:25 +0000 From: "Ma, Maurice" To: Patrick Rudolph , "devel@edk2.groups.io" CC: "Dong, Guo" , "You, Benjamin" Subject: Re: [PATCH v2] UefiPayloadPkg/UefiPayloadEntry: Improve bootloader memrange parsing Thread-Topic: [PATCH v2] UefiPayloadPkg/UefiPayloadEntry: Improve bootloader memrange parsing Thread-Index: AQHXY3PndECR/d4zLkKLZaF9CAM2yKsYPIoQ Date: Thu, 17 Jun 2021 14:11:25 +0000 Message-ID: References: <20210617122528.280133-1-patrick.rudolph@9elements.com> In-Reply-To: <20210617122528.280133-1-patrick.rudolph@9elements.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.5.1.3 dlp-reaction: no-action authentication-results: 9elements.com; dkim=none (message not signed) header.d=none;9elements.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [104.153.200.60] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e0b70a24-fad0-47d5-099b-08d93199cad4 x-ms-traffictypediagnostic: MWHPR11MB1680: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 1t76BWbGdGNWEFPH4ueMnWKBASek0FFsseOug01pinYrTkYr7s1ydpVD8AVPkc/+Mkvft2J3z7rAdifU6gj32yACjvwgsXni++qx9fjxnxKbx11Tc7LpbhTB2UMyrHrNgu+uTGFohz5TfzjIFfkPXpqx5dJFiRWwmJbXL+cfGwjKX9qNNv6dB+1rmZmPiJY7W8fFD1gSAgoO89wFe6jpyJNcDfMHwtoA/KBAevgyWzcEvXONL+2PjNNWs5fa9d4wnH/KfgDleezmN5IJutckKGKCAAHODGoqjXmh/CO1pELpvdH7io2O9rs7FlkQHZ+oC9sIsndps14gw/6m0xZk+fJqHMXxMEkRoK5Q1u1bydgBU5iqZ2cX0kfDuq80rzzqj3XEK1xtnHWiLWbb3W4Vp1Q3Gvk+RaR35TKNChbMk2SHvX2WmRnc/ip/1CkhDMCG2kU4fylKtQKS2bFctzUzwsllGPZZkzCxw3alBBgHhTXs2suart01i4w2FDf4EiUN1sr5oXCjRT1CGyxIKeZlXROoljTt3vahTBMYTQjbmICvXvweK933pMP0yCYddBdiuRFhwAwLuEHFuaxlB8ZtF7UB2lTfhryXpXMOunM13bs= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4945.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(346002)(366004)(136003)(396003)(376002)(478600001)(86362001)(4326008)(7696005)(2906002)(5660300002)(8676002)(66556008)(76116006)(66946007)(6506007)(52536014)(53546011)(186003)(107886003)(26005)(71200400001)(66476007)(64756008)(66446008)(8936002)(83380400001)(122000001)(110136005)(54906003)(9686003)(316002)(38100700002)(55016002)(33656002)(30864003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?Dqt6zRq+q3BZHLi48IbSd1Bq8x+jRAGL8qUYa6XnlOKtgicb20fyFlSvJJzR?= =?us-ascii?Q?cqF5naUJ1h9un0gkUFr8IMmUJVwOZBlqoMjzQo1VmmwSTOgdiefo1x/bn6u6?= =?us-ascii?Q?6kEZgemxCce+2BQvvcYnLRvwyJAqGGWFkEzIm9ZNRSqw9BAs5GiPoKGsL7Tc?= =?us-ascii?Q?dtb58IrZH/8L41xRYgqqXgCG9PT6R51YwKmiuQHShvlBPlL0zQH9T+jQeByb?= =?us-ascii?Q?+0pw4MSh42wARydsUifENunJlf5hJRu0kmlbv7Qizk/1K3wbxcXtWhyAcUEk?= =?us-ascii?Q?YbFUvpym7k8B2+ZTaSF0ITYLg3eskHNwFbapFeWxPGvyBHMKL6//Dd2UjYIb?= =?us-ascii?Q?SwUHZxWdXuCVpGVIbq6lf1KdBZTvNk9JNgMFrypK8w5XAgDuzXAtDva6mtkw?= =?us-ascii?Q?kMVhW2snime2dkmoNRpEOexlNVY7KCMbuytCHqqnAE8DrgXyJzs/CQGCZGrP?= =?us-ascii?Q?ZMv9FJJiNluCuvU2GcSvc/CQA/jNd34HBxsumsx8PWkGOBke32pTMg/w9zFj?= =?us-ascii?Q?gZAl+MCoa7nmUCCGgjEKiLZikuXyKUgOCjTHG7UELtLyBJ8Nw6yKxypEFV7q?= =?us-ascii?Q?F9T+TAwhuyzoh527kZhITbWQcauPj+KTCuhgE/uCGtuxb5Aw2gxv1mRKojiP?= =?us-ascii?Q?MlOZDPQ7jaTlLVybUQT/kRBUTWfqMWsEFYwBNCNIcCB/BOexCBhE1vMaGs18?= =?us-ascii?Q?i8J28do/OZc9CvzI7Lnpz3JLiWdvXrwCz9k15QfjdaRTLBAPNHOWy8ufC6Hs?= =?us-ascii?Q?5Z90aAhXkwyQLOwNEjR1Q9nDfZhicvHME8GuwK8E/8NaHSuE9ahETQSkPsAc?= =?us-ascii?Q?Vyg/cCy5Rwiz6Dy3khgHclfhP0MlExlAE5OxQvrAoFlWi/o7U21xjb6zq96Q?= =?us-ascii?Q?ZQD7nK4eutPDn3za7RlNjUNLg2SySN+QNe95RwVprgoT60gF4SjPTWwe70d9?= =?us-ascii?Q?0ymaDXVvxK8JPz64IAD/j9GjCC04pybmyI7sfyRH/LhmnNd/OneEfdN0jfJt?= =?us-ascii?Q?5RVqEC0v+w6K6FV/j/cK6InDX4zNAwD2h5ErfcVEE0m9jbK3qXdzOav56qBt?= =?us-ascii?Q?WqBMLQ9Z5dCABRGkQj3Ez281//EnXaDmHdb2IKGof7neYJ8tKqq43Lt5Fr0R?= =?us-ascii?Q?MQJbEJ932KQHlyDJGImqFz3fa4fb8dcGRppF41QiDi7UbWbCaf1KgmC+O6Is?= =?us-ascii?Q?9y9G1CcC4R6hv6bLtNzryiyY+TEpMxqoGBIQp/DkbuqiuInNRPWkj35+SE6o?= =?us-ascii?Q?/m8fqQOuRYUkdLZreEdaTsTMxLC/gDq+3/AW6XxVsV8JvsSmKpxf8HeFBYJM?= =?us-ascii?Q?xP2NtcOqimYAgkpCIWsDyfG5?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4945.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e0b70a24-fad0-47d5-099b-08d93199cad4 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Jun 2021 14:11:25.0504 (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: Bf80+SkUhMnIEctA+ThkrZPFkX4mA5WTmKj7m8A9V2kDDOiqEvLITR456SW1llCHIleCAfrPN8huCVQ4z5u3xA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1680 Return-Path: maurice.ma@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, Patrick, The V2 patch addressed all previous comments. =20 However, when I try to test your patch and build with VS2019, it gave me c= ompiling error as below:=20 w:\edk2\UefiPayloadPkg\UefiPayloadEntry\UefiPayloadEntry.c(140): warning C4= 244: '=3D': conversion from 'UINT64' to 'UINT32', possible loss of data w:\edk2\UefiPayloadPkg\UefiPayloadEntry\UefiPayloadEntry.c(150): warning C4= 244: '=3D': conversion from 'UINT64' to 'UINT32', possible loss of data Both are related to mTopOfLowerUsableDram calculation: mTopOfLowerUsableDram =3D MemoryMapEntry->Base + MemoryMapEntry->Size; I think we will need to add typecast to fix the build issue.=20 Thanks Maurice > -----Original Message----- > From: Patrick Rudolph > Sent: Thursday, June 17, 2021 5:25 > To: devel@edk2.groups.io > Cc: Ma, Maurice ; Dong, Guo > ; You, Benjamin > Subject: [PATCH v2] UefiPayloadPkg/UefiPayloadEntry: Improve bootloader > memrange parsing >=20 > Currently several DXE crash due to invalid memory resource settings. > The PciHostBridgeDxe which expects the MMCONF and PCI Aperature to be > EfiMemoryMappedIO, but currently those regions are (partly) mapped as > EfiReservedMemoryType. >=20 > coreboot and slimbootloader provide an e820 compatible memory map, > which doesn't work well with EDK2 as the e820 spec is missing MMIO region= s. > In e820 'reserved' could either mean "DRAM used by boot firmware" or > "MMIO in use and not detectable by OS". >=20 > Guess Top of lower usable DRAM (TOLUD) by walking the bootloader > provided memory ranges. Memory types of RAM, ACPI and ACPI NVS below > 4 GiB are used to increment TOLUD and reserved memory ranges touching > TOLUD at the base are also assumed to be reserved DRAM, which increment > TOLUD. >=20 > Then mark everything reserved below TOLUD as EfiReservedMemoryType > and everything reserved above TOLUD as EfiMemoryMappedIO. >=20 > This fixes assertions seen in PciHostBridgeDxe. >=20 > Signed-off-by: Patrick Rudolph > --- > .../UefiPayloadEntry/UefiPayloadEntry.c | 190 +++++++++++++++++- > .../UefiPayloadEntry/UefiPayloadEntry.h | 10 + > 2 files changed, 197 insertions(+), 3 deletions(-) >=20 > diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c > b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c > index 805f5448d9..1b2a674401 100644 > --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c > +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c > @@ -7,10 +7,159 @@ > #include "UefiPayloadEntry.h" +STATIC UINT32 mTopOfLowerUsableDram =3D > 0;+ /** Callback function to build resource descriptor HOB This fu= nction > build a HOB based on the memory map entry info.+ It creates only > EFI_RESOURCE_MEMORY_MAPPED_IO and > EFI_RESOURCE_MEMORY_RESERVED+ resources.++ @param > MemoryMapEntry Memory map entry info got from bootloader.+ > @param Params A pointer to ACPI_BOARD_INFO.++ @retval > EFI_SUCCESS Successfully build a HOB.+ @retval > EFI_INVALID_PARAMETER Invalid parameter > provided.+**/+EFI_STATUS+MemInfoCallbackMmio (+ IN > MEMROY_MAP_ENTRY *MemoryMapEntry,+ IN VOID > *Params+ )+{+ EFI_PHYSICAL_ADDRESS Base;+ EFI_RESOURCE_TYPE > Type;+ UINT64 Size;+ EFI_RESOURCE_ATTRIBUTE_TYPE > Attribue;+ ACPI_BOARD_INFO *AcpiBoardInfo;++ AcpiBoardInfo= =3D > (ACPI_BOARD_INFO *)Params;+ if (AcpiBoardInfo =3D=3D NULL) {+ return > EFI_INVALID_PARAMETER;+ }++ //+ // Skip types already handled in > MemInfoCallback+ //+ if (MemoryMapEntry->Type =3D=3D E820_RAM || > MemoryMapEntry->Type =3D=3D E820_ACPI) {+ return EFI_SUCCESS;+ }++ i= f > (MemoryMapEntry->Base =3D=3D AcpiBoardInfo->PcieBaseAddress) {+ //+ = // > MMCONF is always MMIO+ //+ Type =3D > EFI_RESOURCE_MEMORY_MAPPED_IO;+ } else if (MemoryMapEntry->Base > < mTopOfLowerUsableDram) {+ //+ // It's in DRAM and thus must be > reserved+ //+ Type =3D EFI_RESOURCE_MEMORY_RESERVED;+ } else if > ((MemoryMapEntry->Base < 0x100000000ULL) && (MemoryMapEntry- > >Base >=3D mTopOfLowerUsableDram)) {+ //+ // It's not in DRAM, must= be > MMIO+ //+ Type =3D EFI_RESOURCE_MEMORY_MAPPED_IO;+ } else {+ > Type =3D EFI_RESOURCE_MEMORY_RESERVED;+ }++ Base =3D > MemoryMapEntry->Base;+ Size =3D MemoryMapEntry->Size;++ Attribue =3D > EFI_RESOURCE_ATTRIBUTE_PRESENT |+ > EFI_RESOURCE_ATTRIBUTE_INITIALIZED |+ > EFI_RESOURCE_ATTRIBUTE_TESTED |+ > EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |+ > EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |+ > EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |+ > EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE;++ > BuildResourceDescriptorHob (Type, Attribue, (EFI_PHYSICAL_ADDRESS)Base, > Size);+ DEBUG ((DEBUG_INFO , "buildhob: base =3D 0x%lx, size =3D 0x%lx, = type =3D > 0x%x\n", Base, Size, Type));++ if (MemoryMapEntry->Type =3D=3D > E820_UNUSABLE ||+ MemoryMapEntry->Type =3D=3D E820_DISABLED) {+ > BuildMemoryAllocationHob (Base, Size, EfiUnusableMemory);+ } else if > (MemoryMapEntry->Type =3D=3D E820_PMEM) {+ BuildMemoryAllocationHob > (Base, Size, EfiPersistentMemory);+ }++ return EFI_SUCCESS;+}+++/**+ > Callback function to find TOLUD (Top of Lower Usable DRAM)++ Estimate > where TOLUD (Top of Lower Usable DRAM) resides. The exact position+ > would require platform specific code.++ @param MemoryMapEntry > Memory map entry info got from bootloader.+ @param Params = Not > used for now.++ @retval EFI_SUCCESS Successfully updated > mTopOfLowerUsableDram.+**/+EFI_STATUS+FindToludCallback (+ IN > MEMROY_MAP_ENTRY *MemoryMapEntry,+ IN VOID > *Params+ )+{+ //+ // This code assumes that the memory map on this x86 > machine below 4GiB is continous+ // until TOLUD. In addition it assumes = that > the bootloader provided memory tables have+ // no "holes" and thus the > first memory range not covered by e820 marks the end of+ // usable DRAM. > In addition it's assumed that every reserved memory region touching+ // > usable RAM is also covering DRAM, everything else that is marked reserved > thus must be+ // MMIO not detectable by bootloader/OS+ //++ //+ // Sk= ip > memory types not RAM or reserved+ //+ if ((MemoryMapEntry->Type =3D=3D > E820_UNUSABLE) || (MemoryMapEntry->Type =3D=3D E820_DISABLED) ||+ > (MemoryMapEntry->Type =3D=3D E820_PMEM)) {+ return EFI_SUCCESS;+ }++ > //+ // Skip resources above 4GiB+ //+ if (MemoryMapEntry->Base >=3D > 0x100000000ULL) {+ return EFI_SUCCESS;+ }++ if ((MemoryMapEntry- > >Type =3D=3D E820_RAM) || (MemoryMapEntry->Type =3D=3D E820_ACPI) ||+ > (MemoryMapEntry->Type =3D=3D E820_NVS)) {+ //+ // It's usable DRAM. > Update TOLUD.+ //+ if (mTopOfLowerUsableDram < (MemoryMapEntry- > >Base + MemoryMapEntry->Size)) {+ mTopOfLowerUsableDram =3D > MemoryMapEntry->Base + MemoryMapEntry->Size;+ }+ } else {+ //+ = // > It might be reserved DRAM or MMIO.+ //+ // If it touches usable DRA= M at > Base assume it's DRAM as well,+ // as it could be bootloader installed= tables, > TSEG, GTT, ...+ //+ if (mTopOfLowerUsableDram =3D=3D MemoryMapEntry= - > >Base) {+ mTopOfLowerUsableDram =3D MemoryMapEntry->Base + > MemoryMapEntry->Size;+ }+ }++ return EFI_SUCCESS;+}+++/**+ > Callback function to build resource descriptor HOB++ This function buil= d a > HOB based on the memory map entry info.+ Only add > EFI_RESOURCE_SYSTEM_MEMORY. @param MemoryMapEntry > Memory map entry info got from bootloader. @param Params = Not > used for now.@@ -28,7 +177,16 @@ MemInfoCallback ( > UINT64 Size; EFI_RESOURCE_ATTRIBUTE_TYPE Attr= ibue; - Type > =3D (MemoryMapEntry->Type =3D=3D 1) ? EFI_RESOURCE_SYSTEM_MEMORY : > EFI_RESOURCE_MEMORY_RESERVED;+ //+ // Skip everything not known to > be usable DRAM.+ // It will be added later.+ //+ if ((MemoryMapEntry- > >Type !=3D E820_RAM) && (MemoryMapEntry->Type !=3D E820_ACPI) &&+ > (MemoryMapEntry->Type !=3D E820_NVS)) {+ return > RETURN_SUCCESS;+ }++ Type =3D EFI_RESOURCE_SYSTEM_MEMORY; Base > =3D MemoryMapEntry->Base; Size =3D MemoryMapEntry->Size; @@ -40,7 > +198,7 @@ MemInfoCallback ( > EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | > EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE; - if (Base >=3D > BASE_4GB ) {+ if (Base >=3D BASE_4GB) { // Remove tested attribute t= o > avoid DXE core to dispatch driver to memory above 4GB Attribue &=3D > ~EFI_RESOURCE_ATTRIBUTE_TESTED; }@@ -48,6 +206,12 @@ > MemInfoCallback ( > BuildResourceDescriptorHob (Type, Attribue, > (EFI_PHYSICAL_ADDRESS)Base, Size); DEBUG ((DEBUG_INFO , "buildhob: > base =3D 0x%lx, size =3D 0x%lx, type =3D 0x%x\n", Base, Size, Type)); + = if > (MemoryMapEntry->Type =3D=3D E820_ACPI) {+ BuildMemoryAllocationHob > (Base, Size, EfiACPIReclaimMemory);+ } else if (MemoryMapEntry->Type =3D= =3D > E820_NVS) {+ BuildMemoryAllocationHob (Base, Size, > EfiACPIMemoryNVS);+ }+ return RETURN_SUCCESS; } @@ -236,8 +400,19 > @@ BuildHobFromBl ( > EFI_PEI_GRAPHICS_DEVICE_INFO_HOB *NewGfxDeviceInfo; //- // Parse > memory info and build memory HOBs+ // First find TOLUD+ //+ DEBUG > ((DEBUG_INFO , "Guessing Top of Lower Usable DRAM:\n"));+ Status =3D > ParseMemoryInfo (FindToludCallback, NULL);+ if (EFI_ERROR(Status)) {+ > return Status;+ }+ DEBUG ((DEBUG_INFO , "Assuming TOLUD =3D 0x%x\n", > mTopOfLowerUsableDram));++ //+ // Parse memory info and build memory > HOBs for Usable RAM //+ DEBUG ((DEBUG_INFO , "Building > ResourceDescriptorHobs for usable memory:\n")); Status =3D > ParseMemoryInfo (MemInfoCallback, NULL); if (EFI_ERROR(Status)) > { return Status;@@ -289,6 +464,15 @@ BuildHobFromBl ( > DEBUG ((DEBUG_INFO, "Create acpi board info guid hob\n")); } + //= + // > Parse memory info and build memory HOBs for reserved DRAM and MMIO+ > //+ DEBUG ((DEBUG_INFO , "Building ResourceDescriptorHobs for reserved > memory:\n"));+ Status =3D ParseMemoryInfo (MemInfoCallbackMmio, > &AcpiBoardInfo);+ if (EFI_ERROR(Status)) {+ return Status;+ }+ // = // > Parse platform specific information. //diff --git > a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h > b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h > index 2c84d6ed53..4fd50e47cd 100644 > --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h > +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h > @@ -38,6 +38,16 @@ > #define GET_OCCUPIED_SIZE(ActualSize, Alignment) \ ((ActualSize) + > (((Alignment) - ((ActualSize) & ((Alignment) - 1))) & ((Alignment) - 1))) > ++#define E820_RAM 1+#define E820_RESERVED 2+#define E820_ACPI > 3+#define E820_NVS 4+#define E820_UNUSABLE 5+#define > E820_DISABLED 6+#define E820_PMEM 7+#define E820_UNDEFINED 8+ > /** Auto-generated function that calls the library constructors for all= of the > module's dependent libraries.-- > 2.30.2