From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (EUR03-DBA-obe.outbound.protection.outlook.com [40.107.104.85]) by mx.groups.io with SMTP id smtpd.web12.52479.1658314828045046382 for ; Wed, 20 Jul 2022 04:00:28 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=OO62nxWF; spf=pass (domain: arm.com, ip: 40.107.104.85, mailfrom: sami.mujawar@arm.com) ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=Pd0htDGIVaylwQc+6MnNgOq0iLDSuGk+I/9YFZouAcrEkCX6dInvDIPCYtUbzXUyA9WKX5X6hTrurCI6vwr3I+G8L5dxWU7a3s07p+x95DAWAmAD5R3dCkG4diB1p66ZmLZwFhhepP16B56bGsvsQbKMQ2POVvLjgOjPONDAu9nGcgHK7/rDXoF11HRBoPDYeJDhA/LHIASYtoRTNaV94x/yAOsCnWY+cm4QmWUgTxjmBRAA+SW+EX/nw6VF+UUb7CtN4EtKYqVjaSpRIv8mPSg1l5GUc1r4ZCTDX/0btc5VYq4wRZK2DAZPZQIo2Yz7ZQVa6u0w+Pfbqukcuaeecg== ARC-Message-Signature: i=2; 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=y0E4HmiieZiMRAg14ByExMX2udVn0r/hir0UAWi+pCw=; b=LE1IgyC1NeTcdNkx03pial4IxrRB91enasfgULMKCeqRRczkb8WRaW7FTlBmlpK0P7//wJXPqSgfPYKRpNZGGRI7PmcQ6ksnqBmG2WJfymzhS8GDm58hUYEvJp4rArQBMLs+WgMgGB0bTrnFgtJ12nwLKH9CC9wp7SQw8mUCt44FIvr5unkRZIndxArro2QGUESykFV2bnADEfYswNg2RiiVo3feTErednGJp3aTgklQl2o4enIZLUMk3YdTlwm9DjF4gTei0sB0JCm7wvVy8PenNKsWCHpiZkBvj/6z18wVWYju8q3NL3s8HQ+KSRF45iGUAiF8L+YLUPn1AmUTzQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=y0E4HmiieZiMRAg14ByExMX2udVn0r/hir0UAWi+pCw=; b=OO62nxWF9GgiGBa5/XIM1t8fWVPjiLKTe6BlieCVGuzi2WnwM+Kv/x/Mlzcv2ci16ONVz1h2kyE5at93k3jbNIY1J0Mm53qy0FunGpZOyl4Ts4rADDBqIiJXXmAwPUQqvOO/F+KVuUB1LYVXuLIsLu7em629WNvtjx04bmwfgvs= Received: from FR0P281CA0137.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:96::13) by AM6PR08MB4005.eurprd08.prod.outlook.com (2603:10a6:20b:a4::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5438.21; Wed, 20 Jul 2022 11:00:24 +0000 Received: from VE1EUR03FT018.eop-EUR03.prod.protection.outlook.com (2603:10a6:d10:96:cafe::d4) by FR0P281CA0137.outlook.office365.com (2603:10a6:d10:96::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.11 via Frontend Transport; Wed, 20 Jul 2022 11:00:24 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT018.mail.protection.outlook.com (10.152.18.135) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5438.12 via Frontend Transport; Wed, 20 Jul 2022 11:00:24 +0000 Received: ("Tessian outbound c883b5ba7b70:v123"); Wed, 20 Jul 2022 11:00:23 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: ac16c58758ab9c64 X-CR-MTA-TID: 64aa7808 Received: from ce1db59d5683.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F5D4B012-7E08-4E6C-B0A5-C345976B72E1.1; Wed, 20 Jul 2022 11:00:14 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ce1db59d5683.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 20 Jul 2022 11:00:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gwDPhMhUn9e+tS7vBouu1B6UCJX7QcL1vAH0ag7/fJUVh++nUNy0BK4kd+nB5zanQl+1cFWOHZcuVjRF5a3MBXkDjmI2BYZC79o847HdExd0uxnV3OvQ5ovMYdkdIPrsx95CH6/zBncYJZJIS94yO1hsaRpuzL3o1aBcZS0vMxFsZlS0hk4d5p7fxYLSe1iypkW+tNaZ7N5+xjS6jBaVE7WXiObmmPrgesJXgHFKWuZBpWw6yyOQh1kkRhiWctL6WqrVrHNmV9bpmNyet4+TluNKOKVLEbaqsMdZSmcShXarW+koPInm0ih8QsQ/cNnkqgeua1TnKyfn4uz5e326Rg== 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=y0E4HmiieZiMRAg14ByExMX2udVn0r/hir0UAWi+pCw=; b=hBwboTmZnm+jVgG36E+/3y6Kl/+c01X5wnO0GMbNE4COSferuxMj5mT7pald27bMXRAslHWQh9jTozUdPzmv18qbpZWIWzTcdV623v9JAvIx8F+ilwoT4p0kF1Ll5ZcqlI3Dg+rBmfeGJMpL6IONU1gBlVMFosyVkgtayYFfROIi2Ns1rQiYk5YioQTkIYUIAjJ+Oe5hg1lOCwvNooG803VkzYXQMDrVjmXX16UcW4vjFCVMzF/S1WvxcpkgU6tjmVy9ajlG0wOx1osD+JF04/7shnRdYveXRqfKFuh3pClYf6VIBMNY1+qzjykVQUXgKgOmu1JHzbaMmdyqOBlt/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=y0E4HmiieZiMRAg14ByExMX2udVn0r/hir0UAWi+pCw=; b=OO62nxWF9GgiGBa5/XIM1t8fWVPjiLKTe6BlieCVGuzi2WnwM+Kv/x/Mlzcv2ci16ONVz1h2kyE5at93k3jbNIY1J0Mm53qy0FunGpZOyl4Ts4rADDBqIiJXXmAwPUQqvOO/F+KVuUB1LYVXuLIsLu7em629WNvtjx04bmwfgvs= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by VI1PR08MB4125.eurprd08.prod.outlook.com (2603:10a6:803:e8::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.18; Wed, 20 Jul 2022 11:00:09 +0000 Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::d562:5a52:f638:7fe9]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::d562:5a52:f638:7fe9%4]) with mapi id 15.20.5458.018; Wed, 20 Jul 2022 11:00:09 +0000 Message-ID: <890206a7-fec3-dc98-3ea4-8791c50689f4@arm.com> Date: Wed, 20 Jul 2022 12:00:07 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v1 4/6] DynamicTablesPkg: DynamicTableManagerDxe: Added check for installed tables To: Kun Qin , devel@edk2.groups.io CC: Alexei Fedorov , Joe Lopez , nd@arm.com References: <20220719002254.1891-1-kuqin12@gmail.com> <20220719002254.1891-5-kuqin12@gmail.com> From: "Sami Mujawar" In-Reply-To: <20220719002254.1891-5-kuqin12@gmail.com> X-ClientProxiedBy: LO2P265CA0360.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:d::36) To AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: c11346f7-7937-49ac-a5d4-08da6a3f0c1f X-MS-TrafficTypeDiagnostic: VI1PR08MB4125:EE_|VE1EUR03FT018:EE_|AM6PR08MB4005:EE_ x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: hV7qOyR81sCIQWlSuNjE51ztH/ttppuyX/W5MYFDJSajZOM4e4qk+tRHQ/8l6lm7Rfwz602q/njq+yebC36Dm46G8pPE2HolcLXAIdSh10eMqCcWE9xM0vgLjbKEbOH8pt+wz7ZWyhjQZt1Ohf43sNE+bJouZevLbM8IwIDwyRbxqqFDhPobdEjAOQs930zIDY7mwiRXO8ULheV4EXj7AqmVZz6podVWV72mm7nXj1VkOdLVFSmWTQoo2SzBA/ETIlByAWtWe8/JMgBeW829vMirOaqytGQ1IwW/V2Yqe2ebtQfgx9bZciYVq/shdnt0VIj8IpSzEBnWUvZ2grFjRw2bny0cSQV4SuyxXFm09J/yoE0m4YB6UXR7yS6ZHghUkT+NfNO6y4JQxACEl0IH15QgFvEXZWhBuuMiYMY6zfUZIAnAOYjY3NDFEQtA5RFsMRZQjD2tzOu3Ampr/ia7CElGdL2yOi1UCsOBlvj1mYy0OKVzCuYFGh4q3bFcJ8P9IUbi9BI/yipGAmgO0uigKT6TG4eLwW1Aqy2ezHv3fhrJvQWyNYjXxfyBZMKiweRDTBye1B4RxWz61pbJss1ybramN3NoFu4bLtfJHvFkArJw9iIVfwhamGawY/OWzGgW2xqjOTmm6i+OTNKFEgHpC4wY89ynMog74IfOax9Oo9FhfvhL7l82hVyQGsd8YVpBp8RXCW/bRpmVZYaDSg3W/8dNGW0ozDXlS5JIFKsmOzvUQMqrx1HUCBNElIuFRqTeUH9Rbfsl9CnnVQ2Kbp8zw6/vuuvi8f8pvcrDFjQ/NE9tRDWmL6Gx6BajgIEsEzfkE/062yrEhA5ewFI/LWbs/oDNbiFGAK1WqjRup7nWlxg= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(346002)(39860400002)(136003)(376002)(366004)(396003)(2616005)(186003)(83380400001)(38100700002)(66946007)(31686004)(4326008)(8676002)(66556008)(316002)(66476007)(45080400002)(36756003)(54906003)(53546011)(966005)(6486002)(26005)(6512007)(2906002)(6506007)(41300700001)(5660300002)(8936002)(478600001)(31696002)(30864003)(44832011)(86362001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4125 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT018.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 287dac34-0b0e-4936-c740-08da6a3f031e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +/KHA9tfb0vV0qF/3HLShCz1ZR0e7E/uQiqD3sycHQz06e63k73Nb8Pk8xeLFu5rbeW/mKUirQdJHrRaPW6lJtljATxI/D/a4aCzxw1QUpQWajWnhEvZDuhBudVP2Rm9/YrbYaH6RZG16wjgZ6wmfIybwrareBVI38dxk6eATa93AfCyRmZjyXwTVJicO2THDDjXDmRd2C0+kBQeADehOT1GmRehuQ3zfJBTSnNUL1ySl7GEId7vxz6oeFNCknAS2DiYIA5jJYTpYfxwQQ+h5kvImrypNwdMq2saAhlnOl4lgIeY2WyUpNpSXLMtgOV1NERiMr+kd426ejQ5artEgA/Z5p1+cIN0t9fIlrH9p3tgBWPZtYpq3NKcrC0CSN2W8/GJmQStllTB+T2FYeNomUgn/w4alb3Nesi+Y+3gs7J/iO3rg+ycNpLHLij5eVSpN6Aksdd+XMkRNcsvwDKuahB0pFS6hOO3Bl6mP0iFMBtkiWPTiHb7iuVnLq/afdkuHptc4afQFowhDr0o+GYokvp1JLQp9tQ3xscx1KkpRxV31t+R8ixZK3I4jtXOkVkvS18h/fFO93luEH+LWv4cbpT9t4jnE6E06bJfNSpQRujTxtqyigMaT2BrDGEWZej6vpYrRLigjGJViKSfmGDcbe29F/JtnUaGDMKzJxGynYGppj3ImnDjhJTyrkNdXY29lzFs8iMObUa1y/c0EIse1dsQRU5mtrq/Gy4xe2w7ng327NX03jSXA6wd0PDVlX3mxmHbYoLvU+RstcAmOCahv3Kivom0Mk8foyfVjjGLKCVi14UCpMrzIDJI+dzkPhwBOfcREK/R3ToG2PjIXx3w5Hk86nezkde652fhX1eFI4qMjeFo1FtxVV+v2BaZk/HJ X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230016)(4636009)(376002)(136003)(396003)(346002)(39860400002)(40470700004)(36840700001)(46966006)(44832011)(82740400003)(30864003)(40480700001)(45080400002)(40460700003)(5660300002)(36860700001)(316002)(2906002)(54906003)(31696002)(86362001)(356005)(81166007)(8936002)(186003)(31686004)(6512007)(2616005)(8676002)(70206006)(4326008)(47076005)(478600001)(336012)(70586007)(26005)(41300700001)(6486002)(83380400001)(966005)(53546011)(6506007)(36756003)(82310400005)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2022 11:00:24.3668 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c11346f7-7937-49ac-a5d4-08da6a3f0c1f X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT018.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4005 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi Kun, Thank you for this patch. I have some minor suggestions marked inline as [SAMI], otherwise this=20 patch looks good to me. With that updated. Reviewed-by: Sami Mujawar Regards, Sami Mujawar On 19/07/2022 01:22 am, Kun Qin wrote: > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3997 > > This change added an extra step to allow check for installed ACPI tables. > > For FADT, MADT, GTDT, DSDT and DBG2 tables, either pre-installed or > supplied through AcpiTableInfo can be accepted. > > An extra check for FADT ACPI table existence during installation step is > also added. > > Cc: Sami Mujawar > Cc: Alexei Fedorov > > Co-authored-by: Joe Lopez > Signed-off-by: Kun Qin > --- > DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.= c | 200 ++++++++++++++++---- > DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.= inf | 1 + > 2 files changed, 167 insertions(+), 34 deletions(-) > > diff --git a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTable= ManagerDxe.c b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTable= ManagerDxe.c > index ed62299f9bbd..ac5fe0bed91b 100644 > --- a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManager= Dxe.c > +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManager= Dxe.c > @@ -11,6 +11,7 @@ > #include > > #include > > #include > > +#include [SAMI] Can thie include statement above be alphabetically ordered, please? > > =20 > > // Module specific include files. > > #include > > @@ -387,6 +388,57 @@ BuildAndInstallAcpiTable ( > return Status; > > } > > =20 > > +/** > > + This function uses the ACPI SDT protocol to locate an ACPI table. > > + It is really only useful for finding tables that only have a single in= stance, > > + e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc. > > + > > + @param[in] Signature - Pointer to an ASCII string containing= the OEM Table ID from the ACPI table header > > + @param[in, out] Table - Updated with a pointer to the table > > + @param[in, out] Handle - AcpiSupport protocol table handle for= the table found > > + > > + @retval EFI_SUCCESS - The function completed successfully. [SAMI] Please add EFI_NOT_FOUND as a return type if an ACPI table with=20 the requested signature is not found or if the ACPI SDT protocol is not=20 installed. > > +**/ > > +STATIC > > +EFI_STATUS > > +LocateAcpiTableBySignature ( > > + IN UINT32 Signature, > > + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table, > > + IN OUT UINTN *Handle > > + ) > > +{ > > + EFI_STATUS Status; > > + INTN Index; > > + EFI_ACPI_TABLE_VERSION Version; > > + EFI_ACPI_SDT_PROTOCOL *AcpiSdt; > > + > > + AcpiSdt =3D NULL; > > + Status =3D gBS->LocateProtocol (&gEfiAcpiSdtProtocolGuid, NULL, (VOID= **)&AcpiSdt); > > + > > + if (EFI_ERROR (Status) || (AcpiSdt =3D=3D NULL)) { > > + return EFI_NOT_FOUND; > > + } > > + > > + // > > + // Locate table with matching ID > > + // > > + Version =3D 0; > > + Index =3D 0; > > + do { > > + Status =3D AcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)Tab= le, &Version, Handle); > > + if (EFI_ERROR (Status)) { > > + break; > > + } > > + > > + Index++; > > + } while ((*Table)->Signature !=3D Signature); > > + > > + // > > + // If we found the table, there will be no error. > > + // > > + return Status; > > +} > > + > > /** The function checks if the Configuration Manager has provided the > > mandatory ACPI tables for installation. > > =20 > > @@ -411,6 +463,9 @@ VerifyMandatoryTablesArePresent ( > BOOLEAN DsdtFound; > > BOOLEAN Dbg2Found; > > BOOLEAN SpcrFound; > > + UINTN Handle; > > + > > + EFI_ACPI_DESCRIPTION_HEADER *DummyHeader; > > =20 > > Status =3D EFI_SUCCESS; > > FadtFound =3D FALSE; > > @@ -447,32 +502,99 @@ VerifyMandatoryTablesArePresent ( > } > > =20 > > // We need at least the FADT, MADT, GTDT and the DSDT tables to boot > > - if (!FadtFound) { > > - DEBUG ((DEBUG_ERROR, "ERROR: FADT Table not found\n")); > > + // But they also might be published already, so we can search from the= re > > + Handle =3D 0; > > + Status =3D LocateAcpiTableBySignature ( > > + EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, > > + &DummyHeader, > > + &Handle > > + ); > > + if (EFI_ERROR (Status) && !FadtFound) { > > + DEBUG ((DEBUG_ERROR, "ERROR: FADT Table not found.\n")); > > Status =3D EFI_NOT_FOUND; > > + } else if (!EFI_ERROR (Status) && FadtFound) { > > + DEBUG ((DEBUG_ERROR, "ERROR: FADT Table found while already publishe= d.\n")); > > + Status =3D EFI_ALREADY_STARTED; [SAMI] Please update the function documentation header to reflect the=20 EFI_ALREADY_STARTED error code. > > + } else { > > + FadtFound =3D TRUE; > > } > > =20 > > - if (!MadtFound) { > > + Handle =3D 0; > > + Status =3D LocateAcpiTableBySignature ( > > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, > > + &DummyHeader, > > + &Handle > > + ); > > + if (EFI_ERROR (Status) && !MadtFound) { > > DEBUG ((DEBUG_ERROR, "ERROR: MADT Table not found.\n")); > > Status =3D EFI_NOT_FOUND; > > + } else if (!EFI_ERROR (Status) && MadtFound) { > > + DEBUG ((DEBUG_ERROR, "ERROR: MADT Table found while already publishe= d.\n")); > > + Status =3D EFI_ALREADY_STARTED; > > + } else { > > + MadtFound =3D TRUE; > > } > > =20 > > - if (!GtdtFound) { > > + Handle =3D 0; > > + Status =3D LocateAcpiTableBySignature ( > > + EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, > > + &DummyHeader, > > + &Handle > > + ); > > + if (EFI_ERROR (Status) && !GtdtFound) { > > DEBUG ((DEBUG_ERROR, "ERROR: GTDT Table not found.\n")); > > Status =3D EFI_NOT_FOUND; > > + } else if (!EFI_ERROR (Status) && GtdtFound) { > > + DEBUG ((DEBUG_ERROR, "ERROR: GTDT Table found while already publishe= d.\n")); > > + Status =3D EFI_ALREADY_STARTED; > > + } else { > > + GtdtFound =3D TRUE; > > } > > =20 > > - if (!DsdtFound) { > > + Handle =3D 0; > > + Status =3D LocateAcpiTableBySignature ( > > + EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNAT= URE, > > + &DummyHeader, > > + &Handle > > + ); > > + if (EFI_ERROR (Status) && !DsdtFound) { > > DEBUG ((DEBUG_ERROR, "ERROR: DSDT Table not found.\n")); > > Status =3D EFI_NOT_FOUND; > > + } else if (!EFI_ERROR (Status) && DsdtFound) { > > + DEBUG ((DEBUG_ERROR, "ERROR: DSDT Table found while already publishe= d.\n")); > > + Status =3D EFI_ALREADY_STARTED; > > + } else { > > + DsdtFound =3D TRUE; > > } > > =20 > > - if (!Dbg2Found) { > > + Handle =3D 0; > > + Status =3D LocateAcpiTableBySignature ( > > + EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE, > > + &DummyHeader, > > + &Handle > > + ); > > + if (EFI_ERROR (Status) && !Dbg2Found) { > > DEBUG ((DEBUG_WARN, "WARNING: DBG2 Table not found.\n")); > > + } else if (!EFI_ERROR (Status) && Dbg2Found) { > > + DEBUG ((DEBUG_ERROR, "ERROR: DBG2 Table found while already publishe= d.\n")); > > + Status =3D EFI_ALREADY_STARTED; > > + } else { > > + Dbg2Found =3D TRUE; > > } > > =20 > > - if (!SpcrFound) { > > + Handle =3D 0; > > + Status =3D LocateAcpiTableBySignature ( > > + EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATUR= E, > > + &DummyHeader, > > + &Handle > > + ); > > + if (EFI_ERROR (Status) && !SpcrFound) { > > DEBUG ((DEBUG_WARN, "WARNING: SPCR Table not found.\n")); > > + } else if (!EFI_ERROR (Status) && SpcrFound) { > > + DEBUG ((DEBUG_ERROR, "ERROR: SPCR Table found while already publishe= d.\n")); > > + Status =3D EFI_ALREADY_STARTED; > > + } else { > > + SpcrFound =3D TRUE; > > } > > =20 > > return Status; > > @@ -500,11 +622,13 @@ ProcessAcpiTables ( > IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol > > ) > > { > > - EFI_STATUS Status; > > - EFI_ACPI_TABLE_PROTOCOL *AcpiTableProtocol; > > - CM_STD_OBJ_ACPI_TABLE_INFO *AcpiTableInfo; > > - UINT32 AcpiTableCount; > > - UINT32 Idx; > > + EFI_STATUS Status; > > + EFI_ACPI_TABLE_PROTOCOL *AcpiTableProtocol; > > + CM_STD_OBJ_ACPI_TABLE_INFO *AcpiTableInfo; > > + UINT32 AcpiTableCount; > > + UINT32 Idx; > > + UINTN Handle; > > + EFI_ACPI_DESCRIPTION_HEADER *DummyHeader; > > =20 > > ASSERT (TableFactoryProtocol !=3D NULL); > > ASSERT (CfgMgrProtocol !=3D NULL); > > @@ -570,29 +694,37 @@ ProcessAcpiTables ( > } > [snip] =C2=A0 // Check if mandatory ACPI tables are present. =C2=A0 Status =3D VerifyMandatoryTablesArePresent ( =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 A= cpiTableInfo, =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 A= cpiTableCount =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )= ; =C2=A0 if (EFI_ERROR (Status)) { =C2=A0=C2=A0=C2=A0 DEBUG (( =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG_ERROR, =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "ERROR: Failed to find mandatory ACPI Table= (s)." =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 " Status =3D %r\n", =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )); [SAMI] Is it possible to update the error reporting to reflect the=20 EFI_ALREADY_STARTED error type, please? Please also update the function=20 documentation header for ProcessAcpiTables(). =C2=A0=C2=A0=C2=A0 return Status; =C2=A0 } [/snip] > =20 > > // Add the FADT Table first. > > - for (Idx =3D 0; Idx < AcpiTableCount; Idx++) { > > - if (CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdFadt) =3D=3D > > - AcpiTableInfo[Idx].TableGeneratorId) > > - { > > - Status =3D BuildAndInstallAcpiTable ( > > - TableFactoryProtocol, > > - CfgMgrProtocol, > > - AcpiTableProtocol, > > - &AcpiTableInfo[Idx] > > - ); > > - if (EFI_ERROR (Status)) { > > - DEBUG (( > > - DEBUG_ERROR, > > - "ERROR: Failed to find build and install ACPI FADT Table." \ > > - " Status =3D %r\n", > > - Status > > - )); > > - return Status; > > + Status =3D LocateAcpiTableBySignature ( > > + EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, > > + &DummyHeader, > > + &Handle > > + ); > > + if (EFI_ERROR (Status)) { > > + // FADT is not yet installed > > + for (Idx =3D 0; Idx < AcpiTableCount; Idx++) { > > + if (CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdFadt) =3D=3D > > + AcpiTableInfo[Idx].TableGeneratorId) > > + { > > + Status =3D BuildAndInstallAcpiTable ( > > + TableFactoryProtocol, > > + CfgMgrProtocol, > > + AcpiTableProtocol, > > + &AcpiTableInfo[Idx] > > + ); > > + if (EFI_ERROR (Status)) { > > + DEBUG (( > > + DEBUG_ERROR, > > + "ERROR: Failed to find build and install ACPI FADT Table." \ > > + " Status =3D %r\n", > > + Status > > + )); > > + return Status; > > + } > > + > > + break; > > } > > - > > - break; > > - } > > - } // for > > + } // for > > + } > > =20 > > // Add remaining ACPI Tables > > for (Idx =3D 0; Idx < AcpiTableCount; Idx++) { > > diff --git a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTable= ManagerDxe.inf b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTab= leManagerDxe.inf > index 028c3d413cf8..5ca98c8b4895 100644 > --- a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManager= Dxe.inf > +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManager= Dxe.inf > @@ -36,6 +36,7 @@ [LibraryClasses] > =20 > > [Protocols] > > gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSU= MED > > + gEfiAcpiSdtProtocolGuid # PROTOCOL ALWAYS_CONSUM= ED [SAMI] Should the DEPEX section be updated to relect the dependency on=20 the SDT protocol? > > =20 > > gEdkiiConfigurationManagerProtocolGuid # PROTOCOL ALWAYS_CONSU= MED > > gEdkiiDynamicTableFactoryProtocolGuid # PROTOCOL ALWAYS_CONSU= MED >