From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web11.47563.1624284391701169131 for ; Mon, 21 Jun 2021 07:06:32 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=ynskoaOP; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: maurice.ma@intel.com) IronPort-SDR: fNGHQu+k3uLwPG52xuNpwrbKkyQAn4qC2A7dJU8dqIPILGCNIoq0hseVThqcI5xbMidbg83+zC arss2sskduyg== X-IronPort-AV: E=McAfee;i="6200,9189,10021"; a="194160268" X-IronPort-AV: E=Sophos;i="5.83,289,1616482800"; d="scan'208";a="194160268" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jun 2021 07:06:30 -0700 IronPort-SDR: O5C6s1Ww971C2wnXoWeRt8TVKFySYIgDmeYH8x94SdCDh9SsUPaHDAFi2qqEO83GUdKnschJaX KBU3K6fskN1w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,289,1616482800"; d="scan'208";a="444268513" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by orsmga007.jf.intel.com with ESMTP; 21 Jun 2021 07:06:30 -0700 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Mon, 21 Jun 2021 07:06:29 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Mon, 21 Jun 2021 07:06:29 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4 via Frontend Transport; Mon, 21 Jun 2021 07:06:29 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.169) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.4; Mon, 21 Jun 2021 07:06:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z5ibo40/OtUn3YhvmgFoCzY4mwRauNksdLKp3NC7lDJGpyyXW7YrXP75WDF5ix/DWs8CzyXdpy+lto41TQvpbyi5tzwnLuDQX1XgPOt9C++M/FsFl0w+0Toecrgi/JSScVQx4v8SjNQ64A4DgtwRD+2/e5ny9Ni8sDmvzMvVWpjq0F0x6eXsHg7NaDTWrjkypJFyBmtoyoFq79aEWcgCsqwp45fM5c7c1+6UYvvWfWjotB5myPgBbV/Fb7LZWNzrqp9MvNkWVb3HRq4BgycuAZLQsCopXO8lb7l6dGsqbeeuxBRMJO8tzzsbXh0EKNMAazaPfJ/NiatSx4mAjprSJA== 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=wisWRe4moi3P7vTa2wvnp+HQrUDsj5XiBMVOuvLiCLA=; b=odPNoDYwOYAUtrFOFu3uMrcc1a9BostDHJwslNnJ8PdrjukK8KEPi+H0DEhf+gMh/gQkgr7j0B0ZsZ6AQfiVCG/XJmXal1J9o6kLGUEazFXBZm65v1IZfOwzm9O7fr8hR0NbQqtI4kpQxTCSD8oYiMWJYod5BA55UjTtQ/dNmD0JDgKdbMYnwkq8XhBsRrATf7eZaf8R3E3w6G0gfmdz0cuiYzMLfcttAf4mkdHgdcZVaqwtEhqb55mfm/x3L0/Madi4Y+MQ3uWSCdAFrJktDToK9HpZZonYqsLmOLZZ2u12Q8Vpj0v7BD5KWfwZpKdHr505YVwFnLAu0VbYDxOJog== 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=wisWRe4moi3P7vTa2wvnp+HQrUDsj5XiBMVOuvLiCLA=; b=ynskoaOPRmhglKH5o7+I+v6U9quMpaDG1PR6p9Mc06SkM+asf40am0kKuWZkjxpb3JOINq0esEwt1VZUtkLeR1fKQWsFj04KUYeEPD6EH12QoE1UY9yGH+VvkuRTG13nLe+cawtdxF8YSstU0cpky5aBcga5jakAXXa3OgYDQ54= Received: from CO1PR11MB4945.namprd11.prod.outlook.com (2603:10b6:303:9c::8) by MWHPR1101MB2238.namprd11.prod.outlook.com (2603:10b6:301:55::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Mon, 21 Jun 2021 14:06:27 +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.023; Mon, 21 Jun 2021 14:06:27 +0000 From: "Ma, Maurice" To: Patrick Rudolph , "devel@edk2.groups.io" CC: "Dong, Guo" , "You, Benjamin" Subject: Re: [PATCH v3] UefiPayloadPkg/UefiPayloadEntry: Improve bootloader memrange parsing Thread-Topic: [PATCH v3] UefiPayloadPkg/UefiPayloadEntry: Improve bootloader memrange parsing Thread-Index: AQHXZnTRxztq7VryskSIX7W6HVU0JasegALA Date: Mon, 21 Jun 2021 14:06:27 +0000 Message-ID: References: <20210621080937.76468-1-patrick.rudolph@9elements.com> In-Reply-To: <20210621080937.76468-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: d96f84e8-5535-48f6-72ad-08d934bdc31e x-ms-traffictypediagnostic: MWHPR1101MB2238: 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: qUjwc4ztvZ+yCSyFjsEd8V7S4Wa2NI9R00kgd2AhpPBqmayVgArjgDM/aCNCQ9nlY7ZwH65FRfmq5GnzwGquFmvPJmJQeT7gv1WFivbhEPpRWHgV6nzVF9Ck2ONvmpzyC/3Ls0rw+8H9tVlN6W1/fsWICA4KUe2U1jtxgApoTh4HyJPKW/DVeQxKpl87Pu+HwolH4gFO1MZKQWdr3QIjwi7BzXyt2Xzq6z3zvRH5J93gx6YlWquaudd5ryu6YZyq+qf5NLzcRY5GuOEw6hhmK1gv4urYu3l1bZ492yHgypMCPexWgjVtsr4LHSToTK6EwySn8aIW3DvwLL2QWAhRX0EcJaorbdYE/oUXmEgfdoTMcs9+Cfa6oI5BN0oyAUAFBrj7qq/gfGtsq11+bDQZtzDxycedqqApaSteRzxSNmMCXSSB+QsnTV21igCpOeTLz1tmd+mmYFQ9WA49wHl1pTz6dxuOBOUI/dSR6ipDT82narArHWuEnDQ2E8gazOlHnAvNOR7GuNXN9ee+GaIurImcsMukyj+0N2tIhB9LjfX8avSy70ZIdaU1QZR8LLxnOIXnWW9ASYALb41B9Ux74bWI+BixMRFU6pY+F5A7bfY= 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:(366004)(136003)(376002)(346002)(396003)(39860400002)(8676002)(9686003)(8936002)(52536014)(66946007)(76116006)(186003)(26005)(64756008)(110136005)(316002)(66476007)(66446008)(66556008)(54906003)(5660300002)(33656002)(71200400001)(478600001)(4326008)(107886003)(7696005)(38100700002)(55016002)(83380400001)(53546011)(6506007)(2906002)(86362001)(122000001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ixfFR/iz9tPJFvYXxZOB22f5ubzl16YliN8KzBcoYuhX1nOXaQJKfRDSKGUH?= =?us-ascii?Q?DPifd/tLQ0rCGQR09NiunF9NKPhxRbUaMutcmdq+ljQ0Nz4adAFkyxS6eD7z?= =?us-ascii?Q?3hFGJMnFobFTdVsOdNqfb/b9M9YjMGq0LOTtoLJDuJSMTW2a85/hhW8K18cd?= =?us-ascii?Q?D3PtZr2n+1uWZmJgX64ZjPXqNV3/sox9FVr7K1C2I5tGHoiJb17oVDclkljb?= =?us-ascii?Q?hUjPJqFFnqW0bARXOhL7gVHPR1ahsXPchI0SdDjCkDSgmHfRamhTRjP195pR?= =?us-ascii?Q?+DkyI/GpkaGmHeheUxDcA3s4Ei/AF6a+1v2Yk4iOeqh+yV9cmsIVYk8Tjxwz?= =?us-ascii?Q?ZjlZSF9MrCvI9nFUPK0f5djzVFkBTC5xVxSFsp0snds96aaIztKHjz41EZzV?= =?us-ascii?Q?7W4im5+Ft6egjHYHqlAaK5RXg+BHMn3c4D1utpJsE0ao/VdGaU+g9M5PfSMk?= =?us-ascii?Q?48RnhmtG0equtJXVpkFgWql8awC2FULdJcSVf3dWtlkPVaP7CO6CQJZhM4gL?= =?us-ascii?Q?PBMOAlLL45g8qOuc7CoZkMHEDeRu9NYDFTvARdV9H2t7wkoFQ4v5Xr+En22v?= =?us-ascii?Q?uxJquJpWRc1AuWaSIp5U5RIRRl1nlFbnVjp4y83YFAywNM4s6+fQFA7pB2K0?= =?us-ascii?Q?O1PExtsJoHCro5HHpZaw6K9/30voH6442did2KmY30BjTy0qXYDdkEHb+3kd?= =?us-ascii?Q?vq6WNwLlaOGY10HzCnbdH1HOo4lczERDQ+XVvYlizcuxHd/ZMbkcGCFr+hxq?= =?us-ascii?Q?Q0MM4XaS0pHGrvbKL2TTRAAwJj2CuXOqBKuW0ouxV2b3P1rT4eRg0pN+smes?= =?us-ascii?Q?HSDPDS324SZ4s/1y2508bTDKHwQlRHNx5aHEegqdw51ThTGJWMb1KPI6Pemy?= =?us-ascii?Q?VPs7kmq4CrWZ+5AYv7hMzee5UdjQDX8MCPxy4biuC7xuK7PtwV8DkqrLJ4fm?= =?us-ascii?Q?C49onv8ZCrc7IDNQ9aIaGEsW5ZvhVwslC+ogtKvF/9RefygVHw5zc5vpiIJG?= =?us-ascii?Q?IUjnrno0DnhVBtDpL+y+bZBYWyZqoaOiZsFxgcv/vr6BkpNbHQh5qjdLRq0r?= =?us-ascii?Q?29Ho7sx4vMuh0rCO179UL+IjgPL3tp69B3aUAR4cpI2WBpePJxOu1Mo+IP0H?= =?us-ascii?Q?eZeLSJl/QMdXYBokOoaKO4/H1lV8/cPoWzwAH/0DJSqqDXKNgNfE65798PK9?= =?us-ascii?Q?2qETDBcX0eoc44m9U4x9dMCij3HP0rrw5THDpUWvCR8/iWklVi7qRiZeHDfT?= =?us-ascii?Q?dh6kQTaLsbu56iLhID7WWRLXV5e4YPWe28T6uNAmwMI8jx4wOW1DxgU+D1oF?= =?us-ascii?Q?Ha3PXJioF9hXNGGPcsgA5fB2?= 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: d96f84e8-5535-48f6-72ad-08d934bdc31e X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jun 2021 14:06:27.5546 (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: 4lFzWI8M33epPfK4y5x4/gU5AXlxlUT0noQMoYwEudNh4qjK9TYQUcNV8flg2AJAjZ0Xnu6AshkE1jQju6ZBFg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR1101MB2238 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 Looks good to me. =20 Reviewed-by: Maurice Ma Regards -Maurice > -----Original Message----- > From: Patrick Rudolph > Sent: Monday, June 21, 2021 1:10 > To: devel@edk2.groups.io > Cc: Ma, Maurice ; Dong, Guo > ; You, Benjamin > Subject: [PATCH v3] 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..04c58f776c 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 + > MemoryMapEntry->Size) > 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 (UINT32)(MemoryMapEntry->Base + > MemoryMapEntry->Size);+ }+ } else {+ //+ // It might be 'reserv= ed > DRAM' or 'MMIO'.+ //+ // If it touches usable DRAM at Base assume i= t's > DRAM as well,+ // as it could be bootloader installed tables, TSEG, GT= T, ...+ > //+ if (mTopOfLowerUsableDram =3D=3D MemoryMapEntry->Base) {+ > mTopOfLowerUsableDram =3D (UINT32)(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