From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (EUR04-HE1-obe.outbound.protection.outlook.com [40.107.7.83]) by mx.groups.io with SMTP id smtpd.web08.94.1623775024316479191 for ; Tue, 15 Jun 2021 09:37:04 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=WQ1VqQpU; spf=pass (domain: arm.com, ip: 40.107.7.83, mailfrom: sami.mujawar@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=z6qe/VvbYdSButKUgOXgTMKXyUYo/ktKe5R2mKHF1aM=; b=WQ1VqQpUMs7qeoXClaOFh58nLKZ9v01EYil6WrjbHXziqJctx2Sp28mTlMUBFoZvwgYZcM9K0RiZTePNSq8JuBPRcIj/eqEcOpUvjmuFztp3V9usYfwirMtxg0kdvQjMc+IImnVaBwUuGEyzQXkjWC8ARQsP5LbotvLsPGOPo5o= Received: from AM5PR0502CA0005.eurprd05.prod.outlook.com (2603:10a6:203:91::15) by VI1PR08MB2861.eurprd08.prod.outlook.com (2603:10a6:802:19::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.25; Tue, 15 Jun 2021 16:36:58 +0000 Received: from AM5EUR03FT052.eop-EUR03.prod.protection.outlook.com (2603:10a6:203:91:cafe::97) by AM5PR0502CA0005.outlook.office365.com (2603:10a6:203:91::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20 via Frontend Transport; Tue, 15 Jun 2021 16:36:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; 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; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT052.mail.protection.outlook.com (10.152.17.161) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21 via Frontend Transport; Tue, 15 Jun 2021 16:36:58 +0000 Received: ("Tessian outbound 94919dbe50f5:v93"); Tue, 15 Jun 2021 16:36:58 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: f14ab648bafc56cf X-CR-MTA-TID: 64aa7808 Received: from ed5f106e5125.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 7601D713-3022-4BA5-8913-79573EE0E38D.1; Tue, 15 Jun 2021 16:36:48 +0000 Received: from EUR02-AM5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ed5f106e5125.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 15 Jun 2021 16:36:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CQ51cYghWtIIdjJehySr0KoiQuTL5MMHbDtfQOwpqC+bOg73AVmzsQxNfhOvEWGZt3qveBRawOmxnwaxljS69lrfpxvWiXpEq8aroFNde9K7cbdEwkPdsPpkf94AmQakhGsT/wg9PIxtTlhVoMnm6rE7wdbrmkZ9U8Q7fojrokADnyzqQTue6bjLSzGC6fUjXKILqvnQa/91Ja4RfKvMY44lzP9FTCtYFBPL945Ashy/e3S1W4SJYakBcW9ntX5El+nRC95/gSvk7itzAT4UFH15U7uHuQri4s4sDsrEGMj9Py3fT/WgNWiDUEFytBnSe/6lbv/A1bJh5AzSwMsnUg== 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=z6qe/VvbYdSButKUgOXgTMKXyUYo/ktKe5R2mKHF1aM=; b=K9dVJ+vicAA7rscZ9ndpLFwMK36fDDbjdXa/xDNII/PVovdXPnNjIJ6LeL6CaFfZT2X2mLNgwsbIiAqp/55djhm0Und4t01NmGFbMqXAXWRmshn/R+a53WqDraoUuNcuOQsO5QyJ3y/++5I4BgHv5tjIuAn1p99DXKl2LHQluM27zJUlmISrA7AWGmg5KzJ+G9R+4D2SIA6D/zDmNqIikTbPbzwMJbQpnXvvWq59s6+394sTG3R1cgFedKyZeQNieWE1KfIU79QjAPaGQBX8WivnesTaiiAABr8UXevA4P88BKEM0tfZ+T4W6ZCH8DvUo1i4Ong1t9bvkf+tU6t2pw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); 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=z6qe/VvbYdSButKUgOXgTMKXyUYo/ktKe5R2mKHF1aM=; b=WQ1VqQpUMs7qeoXClaOFh58nLKZ9v01EYil6WrjbHXziqJctx2Sp28mTlMUBFoZvwgYZcM9K0RiZTePNSq8JuBPRcIj/eqEcOpUvjmuFztp3V9usYfwirMtxg0kdvQjMc+IImnVaBwUuGEyzQXkjWC8ARQsP5LbotvLsPGOPo5o= Received: from AM6P192CA0099.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:8d::40) by DB6PR08MB2935.eurprd08.prod.outlook.com (2603:10a6:6:1f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21; Tue, 15 Jun 2021 16:36:44 +0000 Received: from AM5EUR03FT010.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:8d:cafe::c2) by AM6P192CA0099.outlook.office365.com (2603:10a6:209:8d::40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21 via Frontend Transport; Tue, 15 Jun 2021 16:36:44 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; Received: from nebula.arm.com (40.67.248.234) by AM5EUR03FT010.mail.protection.outlook.com (10.152.16.134) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.4219.21 via Frontend Transport; Tue, 15 Jun 2021 16:36:43 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX04.Arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Tue, 15 Jun 2021 16:36:23 +0000 Received: from E114225.Arm.com (10.1.196.43) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2176.14 via Frontend Transport; Tue, 15 Jun 2021 16:36:23 +0000 From: "Sami Mujawar" To: CC: Sami Mujawar , , , , Subject: [PATCH v1 6/8] DynamicTablesPkg: IORT set reference to interrupt array if present Date: Tue, 15 Jun 2021 17:36:16 +0100 Message-ID: <20210615163618.85200-7-sami.mujawar@arm.com> X-Mailer: git-send-email 2.16.2.windows.1 In-Reply-To: <20210615163618.85200-1-sami.mujawar@arm.com> References: <20210615163618.85200-1-sami.mujawar@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c7c818c3-2082-4919-450e-08d9301bcb52 X-MS-TrafficTypeDiagnostic: DB6PR08MB2935:|VI1PR08MB2861: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:4502;OLM:4502; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: DUNA+SIfRWLMBJjPM51TogDQtVqoKznOgYSD9TaMTNzOfzBFOeKzk+hi5Ea72jxeBW3kqjGdUfoXREXec3W14YmLXUGiyJnufJHMT1ati05fuVDQ10AOKAsU7OjpjH/nEa+1yaJwGDz2EdtAk5RHFxBIgBKJs5pdFot+3vahIRx+bSDmHyh7P7uXkAe1iX/R/szS+UhrczlYq6WqTaOBDU23PvoPrE8j3kTgy2hoKECczU6y9TtGupgyv1OFjs20Do5vVeeabGCdP5wlbfXDR9qAiDCIlKsfLEr1y9uFjiaJ7H3lQVAFnMBLp/iEkvmF/EIC6akAvZ5pBj+5dvfR8V4bmo9YQvB+3vfJvlNlrMUigEPCo/Drt+ev7lMriTIpMc9/h0aFEwuqz6ZisAVnNrtBHm6njaQRrtnTBUhl4BZ4bu0ppEVtQiPdrc3i+D1UDiYr1trZamqREvweDjtY7EQNCsCjCxn6vOmmcQb5h/tyk05jDibThRsdSFku68cuZTtJ1BRAqX/Y2BelMj8UGsPR7tjK3/fOp77HqJrqHEXp6MxBIAcYys7ed+N4hEBag72JhXqiswaf09/Ap9QjcUu1RSbJ8t7OPi8KcM+KUAlL4if2OHbMhICfDYMHhdYvpLtNf2mQWiLM5EOOEtgMNK8W+EsoBQvs7AlYkjwSzUzuWrAwEt8yAodqkq9k6QM1 X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(396003)(136003)(346002)(39850400004)(376002)(36840700001)(46966006)(7696005)(86362001)(44832011)(478600001)(83380400001)(6916009)(8936002)(5660300002)(70206006)(36756003)(336012)(47076005)(81166007)(70586007)(1076003)(316002)(82740400003)(36860700001)(26005)(8676002)(6666004)(4326008)(356005)(54906003)(2616005)(426003)(2906002)(82310400003)(186003)(36900700001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR08MB2935 Return-Path: Sami.Mujawar@arm.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT052.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 383f1685-e149-4dfd-81b0-08d9301bc294 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XYejtYQ0wpw1oXddTsS/iLZeBZY/lyF/VEwM8faEdR7EbqDeq2uhk4blKx3ADM5FLxNgzflIyYNV1O+yV4xI7AA19IGDp3QFTDmUEGU6V6HkfMjsmQAIU1jnGoQJhlaod3Zv7FcfObnyySvkvibfnTd/aNAK/DFBj/Ir1i3lIL7VbqqzCM4Js7nmkPELEK1JzL6Fs6Xr2dB7+G3S+nJcCQMkooxw3QubYjlgxRrJgCTb8QXqQlgF2ok1BrSRxntWVmSlgkSz0SD0WloTTGa0GAmsgvZpS3pNYH/6f3TdtQQ0fB3Khv0m9c9hF1CXX54UYlp0KTar64ORWa15itzDg8/JkIj134AKCK7wYSFc66S1HTpRfmN13gonR7lkXHzoATwgnftLkeFBp8kNmaJ2S9jOP4WZrvFLe6h98d2qn+vFQJbsDqW+IEgJFPJd98v3r5KknXRc8rmMCNVWB50xKFvAOvCJvUtYTcXLRvD/VoUS2K2yPoCrxZOU2L9ZCt8vAyszeWqqvTM2SMpfWE99fdYQSE6ZBLI2Fgacd74GefBLIgCiHNPZMfbNnta12Gg6w8jzHZbK91kyLF0quC1ogNGSTOS55mH1FMrQAAl1nE30NyijX2so85h+gmi9zR6b7MOSdZkDpbML+yYG3VQ4Vg== 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:(4636009)(39850400004)(346002)(136003)(396003)(376002)(36840700001)(46966006)(86362001)(186003)(47076005)(7696005)(478600001)(26005)(6916009)(54906003)(316002)(8676002)(81166007)(70586007)(70206006)(83380400001)(2616005)(5660300002)(8936002)(36860700001)(82740400003)(82310400003)(426003)(6666004)(2906002)(1076003)(336012)(4326008)(36756003)(44832011);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2021 16:36:58.2512 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c7c818c3-2082-4919-450e-08d9301bcb52 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: AM5EUR03FT052.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB2861 Content-Type: text/plain The IORT generator is populating the reference field for Context and PMU interrupts even if their count is zero. Update the IORT generator to set the references only if the interrupt count is not 0. Also add checks to ensure a valid reference token has been provided. Signed-off-by: Sami Mujawar --- DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c | 82 +++++++++++++------- 1 file changed, 55 insertions(+), 27 deletions(-) diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c index bdf839eab25e2b84b40c50da38f2bf961cdc5f42..9ccf72594db378878d4e3abbafe98e749d9963da 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c @@ -1136,6 +1136,7 @@ AddSmmuV1V2Nodes ( EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT * ContextInterruptArray; EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT * PmuInterruptArray; UINT64 NodeLength; + UINT32 Offset; ASSERT (Iort != NULL); @@ -1178,47 +1179,74 @@ AddSmmuV1V2Nodes ( SmmuNode->GlobalInterruptArrayRef = OFFSET_OF (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE, SMMU_NSgIrpt); + Offset = sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE); // Context Interrupt SmmuNode->NumContextInterrupts = NodeList->ContextInterruptCount; - SmmuNode->ContextInterruptArrayRef = - sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE); - ContextInterruptArray = - (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT*)((UINT8*)SmmuNode + - sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE)); + if (NodeList->ContextInterruptCount != 0) { + SmmuNode->ContextInterruptArrayRef = Offset; + ContextInterruptArray = + (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT*)((UINT8*)SmmuNode + Offset); + Offset += (NodeList->ContextInterruptCount * + sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT)); + } // PMU Interrupt SmmuNode->NumPmuInterrupts = NodeList->PmuInterruptCount; - SmmuNode->PmuInterruptArrayRef = SmmuNode->ContextInterruptArrayRef + - (NodeList->ContextInterruptCount * - sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT)); - PmuInterruptArray = - (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT*)((UINT8*)SmmuNode + - SmmuNode->PmuInterruptArrayRef); + if (NodeList->PmuInterruptCount != 0) { + SmmuNode->PmuInterruptArrayRef = Offset; + PmuInterruptArray = + (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT*)((UINT8*)SmmuNode + Offset); + } SmmuNode->SMMU_NSgIrpt = NodeList->SMMU_NSgIrpt; SmmuNode->SMMU_NSgIrptFlags = NodeList->SMMU_NSgIrptFlags; SmmuNode->SMMU_NSgCfgIrpt = NodeList->SMMU_NSgCfgIrpt; SmmuNode->SMMU_NSgCfgIrptFlags = NodeList->SMMU_NSgCfgIrptFlags; - // Add Context Interrupt Array - Status = AddSmmuInterruptArray ( - CfgMgrProtocol, - ContextInterruptArray, - SmmuNode->NumContextInterrupts, - NodeList->ContextInterruptToken - ); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: IORT: Failed to Context Interrupt Array. Status = %r\n", - Status - )); - return Status; + if (NodeList->ContextInterruptCount != 0) { + if (NodeList->ContextInterruptToken == CM_NULL_TOKEN) { + Status = EFI_INVALID_PARAMETER; + DEBUG (( + DEBUG_ERROR, + "ERROR: IORT: Invalid Context Interrupt token," + " Token = 0x%x, Status =%r\n", + NodeList->ContextInterruptToken, + Status + )); + return Status; + } + + // Add Context Interrupt Array + Status = AddSmmuInterruptArray ( + CfgMgrProtocol, + ContextInterruptArray, + SmmuNode->NumContextInterrupts, + NodeList->ContextInterruptToken + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: IORT: Failed to Context Interrupt Array. Status = %r\n", + Status + )); + return Status; + } } // Add PMU Interrupt Array - if ((SmmuNode->NumPmuInterrupts > 0) && - (NodeList->PmuInterruptToken != CM_NULL_TOKEN)) { + if (SmmuNode->NumPmuInterrupts != 0) { + if (NodeList->PmuInterruptToken == CM_NULL_TOKEN) { + Status = EFI_INVALID_PARAMETER; + DEBUG (( + DEBUG_ERROR, + "ERROR: IORT: Invalid PMU Interrupt token," + " Token = 0x%x, Status =%r\n", + NodeList->PmuInterruptToken, + Status + )); + return Status; + } + Status = AddSmmuInterruptArray ( CfgMgrProtocol, PmuInterruptArray, -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'