From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (EUR05-VI1-obe.outbound.protection.outlook.com [40.107.21.48]) by mx.groups.io with SMTP id smtpd.web08.3400.1616579538622927177 for ; Wed, 24 Mar 2021 02:52:19 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=TOcuzCfC; spf=pass (domain: arm.com, ip: 40.107.21.48, mailfrom: sunny.wang@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=+m16mF6KfPonMEDTm5Ryv9hp6JcrmnIU9BMAUPaGA3I=; b=TOcuzCfCsxBwO3J/dvnbCwG+0CopfLaFVUYdE+SHyceV09+SN9PzD+U4vZR0NhDM3+n8xCghPEg7jCOToX//dUe2WAXokeoWyRS9FbO5i1yu/+5S9ODC04mmjLrICPpFpR39+ckQw1V4znuBqsWYM3M35lXh6dmKoiAmSiTb2A0= Received: from DB7PR05CA0009.eurprd05.prod.outlook.com (2603:10a6:10:36::22) by HE1PR08MB2905.eurprd08.prod.outlook.com (2603:10a6:7:31::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3955.24; Wed, 24 Mar 2021 09:52:12 +0000 Received: from DB5EUR03FT037.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:36:cafe::5) by DB7PR05CA0009.outlook.office365.com (2603:10a6:10:36::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3977.24 via Frontend Transport; Wed, 24 Mar 2021 09:52:12 +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 DB5EUR03FT037.mail.protection.outlook.com (10.152.20.215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3977.25 via Frontend Transport; Wed, 24 Mar 2021 09:52:12 +0000 Received: ("Tessian outbound 2220e7a8bae2:v89"); Wed, 24 Mar 2021 09:52:12 +0000 X-CR-MTA-TID: 64aa7808 Received: from 8f29067e3edb.3 by 64aa7808-outbound-1.mta.getcheckrecipient.com id D6463FC2-5151-4A6E-AC24-09E48D987DA8.1; Wed, 24 Mar 2021 09:52:01 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 8f29067e3edb.3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 24 Mar 2021 09:52:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HnTp8RSAlj+SH9sD2jFekMmh08ALcJZ5EhYw3cgzsklHGTx0OXOUP/wvEPBYjapjyHomzDB8tsupHwK7VjVhP46BtT0OvdU/mLeXM73T+sFHhnU6alpTO/LE8pwHDMWBnh6Zl14KPOaTQJ3ym+qNI8gEH8JesHXuopOX3AH7VSW2N21CW2JqNGcTTljMzT3crVlXN+HUZwqfp4E9aQWfyQO+gmQ+9d+aF+vqcS5GyxZsDTILe3UYq+gmWNMieVazQWb+fzuY2QGGhAYBLU/YigLW6an5ESbFwoFgQzAFYgCapLWEJiURGfMVrzoYYixiBGhG0C5Mc2uCNtRCqBF7Kw== 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=+m16mF6KfPonMEDTm5Ryv9hp6JcrmnIU9BMAUPaGA3I=; b=OHfKRDmoM3VJLGAs3lFo1xXMsTMtfOivcmw3UQf3FzFr/YWkCZP1u7UQzLiJ1SzW0KFcJqXw2aRuUzZzv3zSDFS9Oe1qgzujo7aJnFB9HrWe6JKm122aGtI1zEHWm6UxtjyFFaniYRQ7bEmhdfVbfOmnvLZyw8A2dPx1SnnsnGsTZdu5C8IAnrlcrFb2x5CA3FCWuzVSuNhs49ctqoS0TG6vwGUW8quSgNMjmTSBz7xxU4fdyksJpmqxzcErEHZ842pl4LWtk4QfFIQfVctkW7HWxeONs4lw116t7m59Zygj1ZLG5H8sfd4A6AiXJ5j3qvrvjGEoZuoAq1HDkCLPFw== 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=+m16mF6KfPonMEDTm5Ryv9hp6JcrmnIU9BMAUPaGA3I=; b=TOcuzCfCsxBwO3J/dvnbCwG+0CopfLaFVUYdE+SHyceV09+SN9PzD+U4vZR0NhDM3+n8xCghPEg7jCOToX//dUe2WAXokeoWyRS9FbO5i1yu/+5S9ODC04mmjLrICPpFpR39+ckQw1V4znuBqsWYM3M35lXh6dmKoiAmSiTb2A0= Received: from HE1PR0802MB2425.eurprd08.prod.outlook.com (2603:10a6:3:dd::23) by HE1PR0801MB1706.eurprd08.prod.outlook.com (2603:10a6:3:84::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3977.25; Wed, 24 Mar 2021 09:51:59 +0000 Received: from HE1PR0802MB2425.eurprd08.prod.outlook.com ([fe80::84ac:a3cf:2181:db41]) by HE1PR0802MB2425.eurprd08.prod.outlook.com ([fe80::84ac:a3cf:2181:db41%5]) with mapi id 15.20.3955.027; Wed, 24 Mar 2021 09:51:59 +0000 From: "Sunny Wang" To: "devel@edk2.groups.io" , Sunny Wang CC: Samer El-Haj-Mahmoud , Sami Mujawar , Jeremy Linton , Pete Batard , Ard Biesheuvel Subject: Re: [edk2-devel] [PATCH v2 1/2] Platform/RaspberryPi: Dynamically build UARTs info in ACPI Thread-Topic: [edk2-devel] [PATCH v2 1/2] Platform/RaspberryPi: Dynamically build UARTs info in ACPI Thread-Index: AQHXIJKZbNiCqRZaJUGumfTa/bwLk6qS5QLA Date: Wed, 24 Mar 2021 09:51:59 +0000 Message-ID: References: <166F3E32A8D73FDE.651@groups.io> In-Reply-To: <166F3E32A8D73FDE.651@groups.io> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 7FC1469AB2649E468DA3B06279D794DE.0 x-checkrecipientchecked: true Authentication-Results-Original: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=arm.com; x-originating-ip: [114.45.167.102] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 6d5a0760-bdf3-4147-1586-08d8eeaa7f52 x-ms-traffictypediagnostic: HE1PR0801MB1706:|HE1PR08MB2905: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:4714;OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: u8llZXI/0d7JVvzRYkynQGDLeO2o9DJlXZKK4852QHLg+EwtlI06pu6JERsFz/7zZi3zjcWK/cEbPfTqSEOx9PgKznPH2hqEJBImS63TWmjlp0I6b5uc+ajyJTnoQW1h9Xmicovh7GsuxA+p+wppUofelwYjnsBhxjE5s4H2xzLJDEqrhDRsbjqXZkyGV5fnljF3B2W0dEXxzzezHDEDk4sLR2yVV3yKeRU196CCjmfcYU5VeFNDVbCJxwHrl42101TXtJEUobvZNPSIpW8ZlgopRLEwsn+MVeXq9MCF/fxT9XndLxDNmf3QIoZWWiu8kdQr832q01zHHrhDzjsnZrbwN53aQcg9Sd/F9HQocyG8zUI6X3QlvyGVFq28VBW/Gx7rorTlRdmYrQTD+ljlvNuv5p+pS+AM/k0JSmW6PZdBKpbqaoZgLsrN2iMFjYfHO3DyOnUQIbCcZunSxixkngFUdBHszawZSSYWPRqo17KjY6l60CkUh/42UIgZ60muQDhzNrqbNJuVxcUhQFnYylta4+FhcGmshK9kYV1zgBwUF/ToqyxqiBRslh0QVhF6M5yNzlyezSIrnj29/lccxbvkDQD1ugWfMRhO2Z9Zo0LGrOtJXj2pfueFf3DQCiIfoNVpdcADpO0/OEYX/GvAQrvamjaLqqf/18kFAFsLHxKnl4ty/XwhajCqMZe3rZgvAXMjw9vBfLMqcRZurVv5yvmp8WNSizhYqJwbiKME2wsQ4MkN7mkDj5wb5daR1JqPY7W+NSwZWhddkAnJc6e3wA== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HE1PR0802MB2425.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(396003)(366004)(346002)(39860400002)(376002)(76116006)(66556008)(8676002)(64756008)(66476007)(66946007)(8936002)(66446008)(4326008)(71200400001)(9686003)(55016002)(5660300002)(30864003)(52536014)(86362001)(966005)(26005)(45080400002)(38100700001)(54906003)(478600001)(33656002)(19627235002)(186003)(7696005)(83380400001)(53546011)(6506007)(2906002)(316002)(110136005)(11716005)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?BwhxYXuGHAnF7rzhw6romiYclOumaYtgTamn9CXC7VIaboEwbfnIaw6CjAaQ?= =?us-ascii?Q?sPQRHNU8h//3PyaNtnyHxVyTeAV6ucvz1WAjKVnVOWvmB1SmGkzIwRPgKK1d?= =?us-ascii?Q?OIRS7Yztyr+mC1GQc2RdDlrBXbgI/G1DqhqPqvF+orE4ILV6qUhP1wmni9WS?= =?us-ascii?Q?9dXpi/OuxkiKgGQacwUfywF9jlf6IGARpVK2jh4ePMDwgVgxT7KusfjZdWZq?= =?us-ascii?Q?Co/pBz0G9mJtZTubydlazkfiTg/M1l5r1ukhvNBdUVeP7W9KpXIRgSC/ha9a?= =?us-ascii?Q?wx2C6X9Mo+1P+DBivbMIG17P6nFMp8M44D+/TR5aHICpzXskBFgAr87fBnqW?= =?us-ascii?Q?OYmXLYsQRjzDHZ1atGcYMVdGCYUR1B9t3PrjV8Pv1z6o2FqZmfsShOr2Nbyr?= =?us-ascii?Q?0ZSo2xrusKo2Xc9R+nDbcEiHiJVr1YPxwqmg3jU17VYnmTt4hAGplQ/leR6S?= =?us-ascii?Q?r6G9rHIO4TBrhDcDARnNFllNx31KaCVo14rbtZgRFzj1Il/KJM732nAHMkVY?= =?us-ascii?Q?UyTFqJI56WX/KLfmH3aK0M+NTTssuwr2pX5e8nC27qLPPSuSAF3yHHPonQ3g?= =?us-ascii?Q?umEE6iPVgE0wup3DZ8hT/a1PQ+qvjIHQiHc3LLaA5C163ymsIXSIaXbrcVam?= =?us-ascii?Q?ttBEmzYERJ5WSKm6wIdqUFSF03XREwBsx8mzBjblhW/vUf1s2lHFRSCklkmp?= =?us-ascii?Q?+kPG0by2OMrwYIW4WNSsCzpNcs+y7aojVVEekGj2kMhUyhJb4qt4CkmSDc0B?= =?us-ascii?Q?FS6yx17a6XGPiTHyYu4T9qBG0L5UQal9y2PUFQBkws6fhBd/4a6cWMMtPtk7?= =?us-ascii?Q?yimRlHcVdWNaDXe2EvYtS8r0yHpw49/xjZfSFLBtQ2Vsvijc8kS2YLWZA/3K?= =?us-ascii?Q?j340D5IHkTGfoYvGAIqK8QXnomFUVJPs/1xC1JVVvZeGAUIKAgq5ihvYQEcJ?= =?us-ascii?Q?TkAr7hPk9mbS7sK+Vtvb2999C+qrzdbC4D8XBVOYbHeorh593SfttVqaAGqX?= =?us-ascii?Q?rxzbwmyMR9EznSrvG1bUCJV1oVEr38/pO2fiRcklVtorLVS9zB8dqZHKUsNh?= =?us-ascii?Q?OfqYLzKTbXqUTZU6zL3sMHx4MMSkGIjh5Q0GXf8Mi2A1TCMIsAAEZ0t5ltqv?= =?us-ascii?Q?5+y4+QLMT7BIPdMWnRktJ8rvlAz/+Ol/cYVUI2twgV7mL4KRP/hO/nU4fNT/?= =?us-ascii?Q?dXYwRGr2PyIy+Dx1WG/ALzhEI06mU+v3bSehebq8wBhYuZfCgA8fSpvpOkkW?= =?us-ascii?Q?M1LuL/dwQmqMF0vo+R7LgcfmVSBXLJfJ/5sG2mQy6J+ukHEk6NwkCDrub23x?= =?us-ascii?Q?5FnWj1bqIL80X24mZE0Yww8x?= MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1706 Original-Authentication-Results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=arm.com; Return-Path: Sunny.Wang@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT037.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 4a8670ea-4d33-4a6c-f847-08d8eeaa77c8 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /hq5KHtHaRBx5H9GhqDlL1S/rzaO2GOOmInNmKCG9YbK2yTJIU6TtPT1wej0U34eMX2d0AhtD01zepajYcJQFvU8i4zwYeZc9oabPiIa8Cw3SlymWw+nC5mQvDL6QA8N2tNHRu+mS5aSl4Bz4iW4RrFL+TugOfnAQmpE/QTYDMcZlMz01Gkf0f11XRGmPHkOKlqOlRCeEp8wPDnh5GPxHsgoshy7SgL5oN22p2q/wZ4thqi+ZKJf00PbCynXcGr0NXTK4y8ZoptN/7PG8m5pfo6XTbDqEy/oNCqyPB8Q5TjjtBUJRrTpfm9xtQ/sWD2AVq72ZnNvLdak4BlPrkDwUgviOS/ug0sMvp3MxhCbLQXW86z6ULzWbY6yxgVAv1a7Ln+E502Makoj1yYsFI+2+xQg81YzGX7E9cNsM2g5MIvviFdO/0jCy3k5I23cloFTFZJkbWzTE60VAtZ7CEdkafHGpsCrdR9adGJ8RdbpPCaUlDxjfioW3tle/4KNqBGEpIH+c9gcLzTDUWs8uqiUuDOs6x9b6lQmEfZgG6pJfloX+CcvfTzrSctJKfkM/d+rLzy4bBwBhM4YPd95bKQRBSAw6rQL/S3WrlDxRaYOpk72BYTLUah0Wk2q4E4BWRNoYNAthvoPVxO2ZcOfXTrkeA1JK/jsL3SHgwGZLC4oYc70fEpQEPLbu3rv0SRG8o3R4sp9OUE4CZN2Hf108cA3rude2xc0JteZjp4ulF4IfhgknYI2S3ePFy1RG+kjzWFD 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)(376002)(396003)(39860400002)(136003)(346002)(36840700001)(46966006)(55016002)(86362001)(4326008)(107886003)(19627235002)(6506007)(8676002)(52536014)(7696005)(82740400003)(81166007)(356005)(53546011)(478600001)(30864003)(2906002)(70586007)(54906003)(316002)(5660300002)(33656002)(83380400001)(26005)(9686003)(110136005)(36860700001)(186003)(8936002)(70206006)(45080400002)(47076005)(82310400003)(966005)(336012)(11716005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2021 09:52:12.0782 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6d5a0760-bdf3-4147-1586-08d8eeaa7f52 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: DB5EUR03FT037.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB2905 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Somehow my first patch got messed up. Please ignore this. I will check the problem and send the patches again. Best Regards, Sunny Wang -----Original Message----- From: devel@edk2.groups.io On Behalf Of Sunny Wang v= ia groups.io Sent: Wednesday, March 24, 2021 5:45 PM To: devel@edk2.groups.io Cc: Sunny Wang ; Samer El-Haj-Mahmoud ; Sami Mujawar ; Jeremy Linton ; Pete Batard ; Ard Biesheuvel ; Sunny Wang Subject: [edk2-devel] [PATCH v2 1/2] Platform/RaspberryPi: Dynamically buil= d UARTs info in ACPI Changes: 1. Add code to ConfigDxe driver and AcpiTables module to dynamica= lly build either Mini UART or PL011 UART info in ACPI. This fixes the = issue discussed in https://github.com/pftf/RPi4/issues/118. 2. Cleanup = by moving duplicate Debug Port 2 table related defines and structures t= o a newly created header file (RpiDebugPort2Table.h).Testing Done: - Boote= d to UEFI shell and use acpiview command to check the result of the diff= erent UART settings in config.txt (enabling either Mini UART or PL011) a= nd SPCR, DBG2 tables and device BTH0 are dynamically changed as expected= .Cc: Samer El-Haj-Mahmoud Cc: Sami Mujawar Cc: Jeremy Linton Cc: Pete Batar= d Cc: Ard Biesheuvel Signed-off-by= : Sunny Wang --- .../RaspberryPi/AcpiTables/AcpiTables.= inf | 9 +- .../RaspberryPi/AcpiTables/Dbg2MiniUart.aslc | 82 ++++++= ++ .../AcpiTables/{Dbg2.aslc =3D> Dbg2Pl011.aslc} | 187 ++++++++--------- = .../RaspberryPi/AcpiTables/SpcrMiniUart.aslc | 92 +++++++++ .../AcpiTable= s/{Spcr.aslc =3D> SpcrPl011.aslc} | 188 +++++++++--------- Platform/Raspbe= rryPi/AcpiTables/Uart.asl | 10 +- .../RaspberryPi/Drivers/ConfigDxe/C= onfigDxe.c | 107 +++++++++- .../IndustryStandard/RpiDebugPort2Table.h |= 34 ++++ 8 files changed, 497 insertions(+), 212 deletions(-) create mode = 100644 Platform/RaspberryPi/AcpiTables/Dbg2MiniUart.aslc rename Platform/Ra= spberryPi/AcpiTables/{Dbg2.aslc =3D> Dbg2Pl011.aslc} (72%) create mode 1006= 44 Platform/RaspberryPi/AcpiTables/SpcrMiniUart.aslc rename Platform/Raspbe= rryPi/AcpiTables/{Spcr.aslc =3D> SpcrPl011.aslc} (87%) create mode 100644 P= latform/RaspberryPi/Include/IndustryStandard/RpiDebugPort2Table.hdiff --git= a/Platform/RaspberryPi/AcpiTables/AcpiTables.inf b/Platform/RaspberryPi/Ac= piTables/AcpiTables.infindex d3363a76a1..fc8e927138 100644--- a/Platform/Ra= spberryPi/AcpiTables/AcpiTables.inf+++ b/Platform/RaspberryPi/AcpiTables/Ac= piTables.inf@@ -2,7 +2,7 @@ # # ACPI table data and ASL sources required t= o boot the platform. #-# Copyright (c) 2019, ARM Limited. All rights reser= ved.+# Copyright (c) 2019-2021, ARM Limited. All rights reserved. # Copyr= ight (c) 2017, Andrey Warkentin # Copyright (= c) Microsoft Corporation. All rights reserved. #@@ -28,12 +28,14 @@ Emmc.= asl Madt.aslc Fadt.aslc- Dbg2.aslc+ Dbg2MiniUart.aslc+ Dbg2Pl011.asl= c Gtdt.aslc Iort.aslc Dsdt.asl Csrt.aslc- Spcr.aslc+ SpcrMiniUart= .aslc+ SpcrPl011.aslc Pptt.aslc SsdtThermal.asl@@ -71,3 +73,4 @@ [Buil= dOptions] GCC:*_*_*_ASL_FLAGS =3D -vw3133 -vw3150+diff --git a/Plat= form/RaspberryPi/AcpiTables/Dbg2MiniUart.aslc b/Platform/RaspberryPi/AcpiTa= bles/Dbg2MiniUart.aslcnew file mode 100644index 0000000000..c83b978731--- /= dev/null+++ b/Platform/RaspberryPi/AcpiTables/Dbg2MiniUart.aslc@@ -0,0 +1,8= 2 @@+/** @file+ *+ * Debug Port Table (DBG2)+ *+ * Copyright (c) 2019, Pe= te Batard + * Copyright (c) 2012-2021, ARM Limited. All righ= ts reserved.+ *+ * SPDX-License-Identifier: BSD-2-Clause-Patent+ *+ **/++#= include +#include +#in= clude +#include += #include ++#include "AcpiTables.h"++#pragma pack(1)++#def= ine RPI_UART_INTERFACE_TYPE EFI_ACPI_DBG2_PORT_SUBT= YPE_SERIAL_BCM2835_UART+#define RPI_UART_BASE_ADDRESS = BCM2836_MINI_UART_BASE_ADDRESS+#define RPI_UART_LENGTH = BCM2836_MINI_UART_LENGTH+//+// RPI_UART_STR should match t= he value used Uart.asl+//+#define RPI_UART_STR = { '\\', '_', 'S', 'B', '.', 'G', 'D', 'V', '0', '.', 'U', 'R', 'T', = 'M', 0x00 }++#define DBG2_DEBUG_PORT_DDI(NumReg, SubType, UartBase, UartAdd= rLen, UartNameStr) { \+ { = = \+ EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_ST= RUCT_REVISION, /* UINT8 Revision */ \+ = sizeof (DBG2_DEBUG_DEVICE_INFORMATION), /* UINT= 16 Length */ \+ NumReg, = /* UINT8 NumberofGenericAddressRe= gisters */ \+ RPI_DBG2_NAMESPACESTRING_FIELD_SIZE, = /* UINT16 NameSpaceStringLength */ \+ OFFSET_OF (= DBG2_DEBUG_DEVICE_INFORMATION, NameSpaceString), /* UINT16 NameSpace= StringOffset */ \+ 0, = /* UINT16 OemDataLength */ \+ = 0, /* UINT= 16 OemDataOffset */ \+ EFI_ACPI_DBG2_PORT_TYPE_SE= RIAL, /* UINT16 Port Type */ = \+ SubType, = /* UINT16 Port Subtype */ \+ {EFI_ACPI_R= ESERVED_BYTE, EFI_ACPI_RESERVED_BYTE}, /* UINT8 Reserved[= 2] */ \+ OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION,= BaseAddressRegister), /* UINT16 BaseAddressRegister Offset */ \+ = OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, AddressSize) /* UINT= 16 AddressSize Offset */ \+ }, = = \+ ARM_GAS32 (UartBase), /* EFI_AC= PI_6_3_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister */ \+ UartAddrLen, = /* UINT32 AddressSize */ = \+ UartNameStr = /* UINT8 NameSpaceString[MAX_DBG2_NAME_LEN] */ \+ = }+++STATIC DBG2_TABLE Dbg2 =3D {+ {+ ACPI_HEADER (+ EFI_ACPI_6_3_D= EBUG_PORT_2_TABLE_SIGNATURE,+ DBG2_TABLE,+ EFI_ACPI_DBG2_DEBUG_DE= VICE_INFORMATION_STRUCT_REVISION+ ),+ OFFSET_OF (DBG2_TABLE, Dbg2Devi= ceInfo),+ RPI_DBG2_NUM_DEBUG_PORTS = /* UINT32 NumberDbgDeviceInfo */+ },+ {+ /*+ * Kernel Debug P= ort+ */+ DBG2_DEBUG_PORT_DDI (+ RPI_DBG2_NUMBER_OF_GENERIC_ADDR= ESS_REGISTERS,+ RPI_UART_INTERFACE_TYPE,+ RPI_UART_BASE_ADDRESS,+= RPI_UART_LENGTH,+ RPI_UART_STR+ ),+ }+};++#pragma pack()++//= +// Reference the table being generated to prevent the optimizer from remov= ing+// the data structure from the executable+//+VOID* CONST ReferenceAcpiT= able =3D &Dbg2;+diff --git a/Platform/RaspberryPi/AcpiTables/Dbg2.aslc b/Pl= atform/RaspberryPi/AcpiTables/Dbg2Pl011.aslcsimilarity index 72%rename from= Platform/RaspberryPi/AcpiTables/Dbg2.aslcrename to Platform/RaspberryPi/Ac= piTables/Dbg2Pl011.aslcindex e3f2adae7e..dccfa24601 100644--- a/Platform/Ra= spberryPi/AcpiTables/Dbg2.aslc+++ b/Platform/RaspberryPi/AcpiTables/Dbg2Pl0= 11.aslc@@ -1,105 +1,82 @@-/** @file- *- * Debug Port Table (DBG2)- *- * C= opyright (c) 2019, Pete Batard - * Copyright (c) 2012-2020, = ARM Limited. All rights reserved.- *- * SPDX-License-Identifier: BSD-2-Cla= use-Patent- *- **/--#include -#include -#include -#include -#include --#include "AcpiTables.h"--#pr= agma pack(1)--#define RPI_DBG2_NUM_DEBUG_PORTS 1-#de= fine RPI_DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS 1-#define RPI_DBG2_NAM= ESPACESTRING_FIELD_SIZE 15--#if (RPI_MODEL =3D=3D 4)-#define RP= I_UART_INTERFACE_TYPE EFI_ACPI_DBG2_PORT_SUBTYPE_SE= RIAL_ARM_PL011_UART-#define RPI_UART_BASE_ADDRESS = BCM2836_PL011_UART_BASE_ADDRESS-#define RPI_UART_LENGTH = BCM2836_PL011_UART_LENGTH-#define RPI_UART_STR = { '\\', '_', 'S', 'B', '.', 'G', 'D', 'V', '0', '.', '= U', 'R', 'T', '0', 0x00 }-#else-#define RPI_UART_INTERFACE_TYPE = EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_BCM2835_UART-#define RPI_UAR= T_BASE_ADDRESS BCM2836_MINI_UART_BASE_ADDRESS-#de= fine RPI_UART_LENGTH BCM2836_MINI_UART_LENG= TH-//-// RPI_UART_STR should match the value used Uart.asl-//-#define RPI_U= ART_STR { '\\', '_', 'S', 'B', '.', 'G',= 'D', 'V', '0', '.', 'U', 'R', 'T', 'M', 0x00 }-#endif--typedef struct {- = EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT Dbg2Device;- EFI_ACP= I_6_3_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister;- UINT3= 2 AddressSize;- UINT8 = NameSpaceString[RPI_DBG2_NAMESPA= CESTRING_FIELD_SIZE];-} DBG2_DEBUG_DEVICE_INFORMATION;--typedef struct {- = EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE Description;- DBG2_D= EBUG_DEVICE_INFORMATION Dbg2DeviceInfo[RPI_DBG2_NUM= _DEBUG_PORTS];-} DBG2_TABLE;---#define DBG2_DEBUG_PORT_DDI(NumReg, SubType,= UartBase, UartAddrLen, UartNameStr) { \= - { = \- EFI_ACPI_DBG2_DEBUG_DEV= ICE_INFORMATION_STRUCT_REVISION, /* UINT8 Revision */ = \- sizeof (DBG2_DEBUG_DEVICE_INFORMATION), = /* UINT16 Length */ \- NumReg, = /* UINT8 Number= ofGenericAddressRegisters */ \- RPI_DBG2_NAMESPACESTRING_FIELD_SIZE, = /* UINT16 NameSpaceStringLength */ \= - OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, NameSpaceString), /* U= INT16 NameSpaceStringOffset */ \- 0, = /* UINT16 OemDataLength */ = \- 0, = /* UINT16 OemDataOffset */ \- EFI_ACPI= _DBG2_PORT_TYPE_SERIAL, /* UINT16 Port T= ype */ \- SubType, = /* UINT16 Port Subtype */ \= - {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE}, /* U= INT8 Reserved[2] */ \- OFFSET_OF (DBG2_DEBUG_D= EVICE_INFORMATION, BaseAddressRegister), /* UINT16 BaseAddressRegister O= ffset */ \- OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, AddressSize= ) /* UINT16 AddressSize Offset */ \- }, = = \- ARM_GAS32 (UartBase), = /* EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister */ \= - UartAddrLen, /* UINT32 AddressSiz= e */ \- UartNameStr = /* UINT8 NameSpaceString[MAX_DBG2_NAME_LEN] */ = \- }---STATIC DBG2_TABLE Dbg2 =3D {- {- ACPI_HEADER (- = EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE,- DBG2_TABLE,- EFI_= ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION- ),- OFFSET_OF (DB= G2_TABLE, Dbg2DeviceInfo),- RPI_DBG2_NUM_DEBUG_PORTS = /* UINT32 NumberDbgDeviceInfo */- },- {- /*- = * Kernel Debug Port- */- DBG2_DEBUG_PORT_DDI (- RPI_DBG2_NUMB= ER_OF_GENERIC_ADDRESS_REGISTERS,- RPI_UART_INTERFACE_TYPE,- RPI_U= ART_BASE_ADDRESS,- RPI_UART_LENGTH,- RPI_UART_STR- ),- }-};--= #pragma pack()--//-// Reference the table being generated to prevent the op= timizer from removing-// the data structure from the executable-//-VOID* CO= NST ReferenceAcpiTable =3D &Dbg2;+/** @file+ *+ * Debug Port Table (DBG2)+= *+ * Copyright (c) 2019, Pete Batard + * Copyright (c) 201= 2-2021, ARM Limited. All rights reserved.+ *+ * SPDX-License-Identifier: B= SD-2-Clause-Patent+ *+ **/++#include +#include +#include += #include +#include ++#include "AcpiTab= les.h"++#pragma pack(1)++#define RPI_UART_INTERFACE_TYPE = EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART+#define RPI_UART_BAS= E_ADDRESS BCM2836_PL011_UART_BASE_ADDRESS+#define= RPI_UART_LENGTH BCM2836_PL011_UART_LENGTH+= //+// RPI_UART_STR should match the value used Uart.asl+//+#define RPI_UART= _STR { '\\', '_', 'S', 'B', '.', 'G', 'D= ', 'V', '0', '.', 'U', 'R', 'T', '0', 0x00 }++#define DBG2_DEBUG_PORT_DDI(N= umReg, SubType, UartBase, UartAddrLen, UartNameStr) { = \+ { = \+ EFI_ACPI= _DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION, /* UINT8 Revisi= on */ \+ sizeof (DBG2_DEBUG_DEVICE_INFORMATION)= , /* UINT16 Length */ \= + NumReg, /* U= INT8 NumberofGenericAddressRegisters */ \+ RPI_DBG2_NAMESPACESTRIN= G_FIELD_SIZE, /* UINT16 NameSpaceStringLength= */ \+ OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, NameSpaceSt= ring), /* UINT16 NameSpaceStringOffset */ \+ 0, = /* UINT16 OemDat= aLength */ \+ 0, = /* UINT16 OemDataOffset */ \= + EFI_ACPI_DBG2_PORT_TYPE_SERIAL, /* U= INT16 Port Type */ \+ SubType, = /* UINT16 Port Subtype */ = \+ {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE}, = /* UINT8 Reserved[2] */ \+ OFFSET_O= F (DBG2_DEBUG_DEVICE_INFORMATION, BaseAddressRegister), /* UINT16 BaseAd= dressRegister Offset */ \+ OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATI= ON, AddressSize) /* UINT16 AddressSize Offset */ \= + }, = \+ ARM_GAS32 (UartBase), = /* EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE BaseAddre= ssRegister */ \+ UartAddrLen, /* UIN= T32 AddressSize */ \+ UartNameSt= r /* UINT8 NameSpaceString[MAX_DBG2_= NAME_LEN] */ \+ }+++STATIC DBG2_TABLE Dbg2 =3D {+ {+ A= CPI_HEADER (+ EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE,+ DBG2_TA= BLE,+ EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION+ ),+ = OFFSET_OF (DBG2_TABLE, Dbg2DeviceInfo),+ RPI_DBG2_NUM_DEBUG_PORTS = /* UINT32 NumberDbgDeviceInfo */+ },= + {+ /*+ * Kernel Debug Port+ */+ DBG2_DEBUG_PORT_DDI (+ = RPI_DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS,+ RPI_UART_INTERFACE_TY= PE,+ RPI_UART_BASE_ADDRESS,+ RPI_UART_LENGTH,+ RPI_UART_STR+= ),+ }+};++#pragma pack()++//+// Reference the table being generated to= prevent the optimizer from removing+// the data structure from the executa= ble+//+VOID* CONST ReferenceAcpiTable =3D &Dbg2;+diff --git a/Platform/Rasp= berryPi/AcpiTables/SpcrMiniUart.aslc b/Platform/RaspberryPi/AcpiTables/Spcr= MiniUart.aslcnew file mode 100644index 0000000000..aaf5c5317e--- /dev/null+= ++ b/Platform/RaspberryPi/AcpiTables/SpcrMiniUart.aslc@@ -0,0 +1,92 @@+/** = @file+* SPCR Table+*+* Copyright (c) 2019 Pete Batard +* Copy= right (c) 2014-2021, ARM Limited. All rights reserved.+*+* SPDX-License-Ide= ntifier: BSD-2-Clause-Patent+*+**/++#include +#inc= lude +#include +#include +#include ++#include "AcpiTables.h"++#define RPI_UART_FLOW_CONTROL_NONE = 0++#define RPI_UART_INTERFACE_TYPE EFI_ACPI_SERIAL_PORT_CONSO= LE_REDIRECTION_TABLE_INTERFACE_TYPE_BCM2835_UART+#define RPI_UART_BASE_ADDR= ESS BCM2836_MINI_UART_BASE_ADDRESS+#define RPI_UART_INTERRUP= T BCM2836_MINI_UART_INTERRUPT++STATIC EFI_ACPI_SERIAL_POR= T_CONSOLE_REDIRECTION_TABLE Spcr =3D {+ ACPI_HEADER (+ EFI_ACPI_6_3_SER= IAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,+ EFI_ACPI_SERIAL_PORT_CONS= OLE_REDIRECTION_TABLE,+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_R= EVISION+ ),+ // UINT8 InterfaceType;+ = RPI_UART_INTERFACE_TYPE,+ // UINT8 Reser= ved1[3];+ {+ EFI_ACPI_RESERVED_BYTE,+ EFI_ACPI_RESERVED_BYTE,+ EF= I_ACPI_RESERVED_BYTE+ },+ // EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE Base= Address;+ ARM_GAS32 (RPI_UART_BASE_ADDRESS),+ // UINT8 = InterruptType;+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_T= ABLE_INTERRUPT_TYPE_GIC,+ // UINT8 Irq;+= 0, // Not used on ARM+ // UINT32= GlobalSystemInterrupt;+ RPI_UART_INTERRU= PT,+ // UINT8 BaudRate;+#if (FixedPcdGet= 64 (PcdUartDefaultBaudRate) =3D=3D 9600)+ EFI_ACPI_SERIAL_PORT_CONSOLE_RED= IRECTION_TABLE_BAUD_RATE_9600,+#elif (FixedPcdGet64 (PcdUartDefaultBaudRate= ) =3D=3D 19200)+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_= 19200,+#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) =3D=3D 57600)+ EFI_AC= PI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_57600,+#elif (FixedPcdGe= t64 (PcdUartDefaultBaudRate) =3D=3D 115200)+ EFI_ACPI_SERIAL_PORT_CONSOLE_= REDIRECTION_TABLE_BAUD_RATE_115200,+#else+#error Unsupported SPCR Baud Rate= +#endif+ // UINT8 Parity;+ EFI_ACPI_SER= IAL_PORT_CONSOLE_REDIRECTION_TABLE_PARITY_NO_PARITY,+ // UINT8 = StopBits;+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION= _TABLE_STOP_BITS_1,+ // UINT8 FlowContro= l;+ RPI_UART_FLOW_CONTROL_NONE,+ // UINT8 = TerminalType;+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_TERMINAL_= TYPE_VT_UTF8,+ // UINT8 Reserved2;+ EFI= _ACPI_RESERVED_BYTE,+ // UINT16 PciDevice= Id;+ 0xFFFF,+ // UINT16 PciVendorId;+ 0= xFFFF,+ // UINT8 PciBusNumber;+ 0x00,+ = // UINT8 PciDeviceNumber;+ 0x00,+ // U= INT8 PciFunctionNumber;+ 0x00,+ // UINT= 32 PciFlags;+ 0x00000000,+ // UINT8 = PciSegment;+ 0x00,+ // UINT32 = Reserved3;+ EFI_ACPI_RESERVED_DWORD+};++//+// Referenc= e the table being generated to prevent the optimizer from removing the+// d= ata structure from the executable+//+VOID* CONST ReferenceAcpiTable =3D &Sp= cr;+diff --git a/Platform/RaspberryPi/AcpiTables/Spcr.aslc b/Platform/Raspb= erryPi/AcpiTables/SpcrPl011.aslcsimilarity index 87%rename from Platform/Ra= spberryPi/AcpiTables/Spcr.aslcrename to Platform/RaspberryPi/AcpiTables/Spc= rPl011.aslcindex 07df3a718d..5a540adf08 100644--- a/Platform/RaspberryPi/Ac= piTables/Spcr.aslc+++ b/Platform/RaspberryPi/AcpiTables/SpcrPl011.aslc@@ -1= ,97 +1,91 @@-/** @file-* SPCR Table-*-* Copyright (c) 2019 Pete Batard -* Copyright (c) 2014-2016, ARM Limited. All rights reserved.-*-*= SPDX-License-Identifier: BSD-2-Clause-Patent-*-**/--#include -#include -#include -#include -#inclu= de --#include "AcpiTables.h"--#define RPI_UART_FLOW_CONTR= OL_NONE 0--// Prefer PL011 serial output on the Raspberry Pi 4-#i= f (RPI_MODEL =3D=3D 4)-#define RPI_UART_INTERFACE_TYPE EFI_ACP= I_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_ARM_PL011_UART-#defi= ne RPI_UART_BASE_ADDRESS BCM2836_PL011_UART_BASE_ADDRESS-#de= fine RPI_UART_INTERRUPT BCM2836_PL011_UART_INTERRUPT-#els= e-#define RPI_UART_INTERFACE_TYPE EFI_ACPI_SERIAL_PORT_CONSOLE= _REDIRECTION_TABLE_INTERFACE_TYPE_BCM2835_UART-#define RPI_UART_BASE_ADDRES= S BCM2836_MINI_UART_BASE_ADDRESS-#define RPI_UART_INTERRUPT = BCM2836_MINI_UART_INTERRUPT-#endif-STATIC EFI_ACPI_SERIAL= _PORT_CONSOLE_REDIRECTION_TABLE Spcr =3D {- ACPI_HEADER (- EFI_ACPI_6_3= _SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,- EFI_ACPI_SERIAL_PORT_= CONSOLE_REDIRECTION_TABLE,- EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TAB= LE_REVISION- ),- // UINT8 InterfaceType= ;- RPI_UART_INTERFACE_TYPE,- // UINT8 R= eserved1[3];- {- EFI_ACPI_RESERVED_BYTE,- EFI_ACPI_RESERVED_BYTE,- = EFI_ACPI_RESERVED_BYTE- },- // EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE = BaseAddress;- ARM_GAS32 (RPI_UART_BASE_ADDRESS),- // UINT8 = InterruptType;- EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTI= ON_TABLE_INTERRUPT_TYPE_GIC,- // UINT8 I= rq;- 0, // Not used on ARM- // UI= NT32 GlobalSystemInterrupt;- RPI_UART_INT= ERRUPT,- // UINT8 BaudRate;-#if (FixedPc= dGet64 (PcdUartDefaultBaudRate) =3D=3D 9600)- EFI_ACPI_SERIAL_PORT_CONSOLE= _REDIRECTION_TABLE_BAUD_RATE_9600,-#elif (FixedPcdGet64 (PcdUartDefaultBaud= Rate) =3D=3D 19200)- EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_R= ATE_19200,-#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) =3D=3D 57600)- EF= I_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_57600,-#elif (FixedP= cdGet64 (PcdUartDefaultBaudRate) =3D=3D 115200)- EFI_ACPI_SERIAL_PORT_CONS= OLE_REDIRECTION_TABLE_BAUD_RATE_115200,-#else-#error Unsupported SPCR Baud = Rate-#endif- // UINT8 Parity;- EFI_ACPI= _SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_PARITY_NO_PARITY,- // UINT8 = StopBits;- EFI_ACPI_SERIAL_PORT_CONSOLE_REDIREC= TION_TABLE_STOP_BITS_1,- // UINT8 FlowCo= ntrol;- RPI_UART_FLOW_CONTROL_NONE,- // UINT8 = TerminalType;- EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_TERMI= NAL_TYPE_VT_UTF8,- // UINT8 Reserved2;- = EFI_ACPI_RESERVED_BYTE,- // UINT16 PciDe= viceId;- 0xFFFF,- // UINT16 PciVendorId;= - 0xFFFF,- // UINT8 PciBusNumber;- 0x0= 0,- // UINT8 PciDeviceNumber;- 0x00,- = // UINT8 PciFunctionNumber;- 0x00,- // = UINT32 PciFlags;- 0x00000000,- // UINT8 = PciSegment;- 0x00,- // UINT32 = Reserved3;- EFI_ACPI_RESERVED_DWORD-};--//-// Refe= rence the table being generated to prevent the optimizer from removing the-= // data structure from the executable-//-VOID* CONST ReferenceAcpiTable =3D= &Spcr;+/** @file+* SPCR Table+*+* Copyright (c) 2019 Pete Batard +* Copyright (c) 2014-2021, ARM Limited. All rights reserved.+*+* SPDX= -License-Identifier: BSD-2-Clause-Patent+*+**/++#include +#include +#include +#include +#include ++#include "AcpiTables.h"++#define RPI_UART_FLOW_CONTROL_NO= NE 0++#define RPI_UART_INTERFACE_TYPE EFI_ACPI_SERIA= L_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_ARM_PL011_UART+#define RPI_= UART_BASE_ADDRESS BCM2836_PL011_UART_BASE_ADDRESS+#define RP= I_UART_INTERRUPT BCM2836_PL011_UART_INTERRUPT++STATIC EFI= _ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE Spcr =3D {+ ACPI_HEADER (+ = EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,+ EFI_ACPI_= SERIAL_PORT_CONSOLE_REDIRECTION_TABLE,+ EFI_ACPI_SERIAL_PORT_CONSOLE_RED= IRECTION_TABLE_REVISION+ ),+ // UINT8 I= nterfaceType;+ RPI_UART_INTERFACE_TYPE,+ // UINT8 = Reserved1[3];+ {+ EFI_ACPI_RESERVED_BYTE,+ EFI_ACPI_RESER= VED_BYTE,+ EFI_ACPI_RESERVED_BYTE+ },+ // EFI_ACPI_6_3_GENERIC_ADDRESS= _STRUCTURE BaseAddress;+ ARM_GAS32 (RPI_UART_BASE_ADDRESS),+ // UINT8 = InterruptType;+ EFI_ACPI_SERIAL_PORT_CONSO= LE_REDIRECTION_TABLE_INTERRUPT_TYPE_GIC,+ // UINT8 = Irq;+ 0, // Not used on= ARM+ // UINT32 GlobalSystemInterrupt;+ = RPI_UART_INTERRUPT,+ // UINT8 BaudRate;+= #if (FixedPcdGet64 (PcdUartDefaultBaudRate) =3D=3D 9600)+ EFI_ACPI_SERIAL_= PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_9600,+#elif (FixedPcdGet64 (PcdUar= tDefaultBaudRate) =3D=3D 19200)+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_= TABLE_BAUD_RATE_19200,+#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) =3D=3D= 57600)+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_57600,+#= elif (FixedPcdGet64 (PcdUartDefaultBaudRate) =3D=3D 115200)+ EFI_ACPI_SERI= AL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_115200,+#else+#error Unsupporte= d SPCR Baud Rate+#endif+ // UINT8 Parity= ;+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_PARITY_NO_PARITY,+ // U= INT8 StopBits;+ EFI_ACPI_SERIAL_PORT_CON= SOLE_REDIRECTION_TABLE_STOP_BITS_1,+ // UINT8 = FlowControl;+ RPI_UART_FLOW_CONTROL_NONE,+ // UINT8 = TerminalType;+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION= _TABLE_TERMINAL_TYPE_VT_UTF8,+ // UINT8 = Reserved2;+ EFI_ACPI_RESERVED_BYTE,+ // UINT16 = PciDeviceId;+ 0xFFFF,+ // UINT16 = PciVendorId;+ 0xFFFF,+ // UINT8 PciBusN= umber;+ 0x00,+ // UINT8 PciDeviceNumber= ;+ 0x00,+ // UINT8 PciFunctionNumber;+ = 0x00,+ // UINT32 PciFlags;+ 0x00000000,= + // UINT8 PciSegment;+ 0x00,+ // UINT= 32 Reserved3;+ EFI_ACPI_RESERVED_DWORD+};= ++//+// Reference the table being generated to prevent the optimizer from r= emoving the+// data structure from the executable+//+VOID* CONST ReferenceA= cpiTable =3D &Spcr;diff --git a/Platform/RaspberryPi/AcpiTables/Uart.asl b/= Platform/RaspberryPi/AcpiTables/Uart.aslindex 81ae6711af..8ce297078d 100644= --- a/Platform/RaspberryPi/AcpiTables/Uart.asl+++ b/Platform/RaspberryPi/Ac= piTables/Uart.asl@@ -2,6 +2,7 @@ * * [DSDT] Serial devices (UART). *+ *= Copyright (c) 2021, ARM Limited. All rights reserved. * Copyright (c) 2= 020, Pete Batard * Copyright (c) 2018, Andrey Warkentin * Copyright (c) Microsoft Corporation. All rig= hts reserved.@@ -101,7 +102,10 @@ Device(BTH0) { Name (RBUF, Resource= Template () {- // BT UART: URT0 (PL011) or URTM (miniUART)+ /= /+ // BT UART: ResourceSource will be dynamically updated to+ // = either URT0 (PL011) or URTM (miniUART) during boot+ // UARTSeria= lBus( 115200, // InitialBaudRate: in BPS , = // BitsPerByte: default to 8 bits@@ -126,11 +130,7 @@ Device(BTH0) = // no flow control. 16, // ReceiveB= ufferSize 16, // TransmitBufferSize-#if (RPI_MODEL =3D= =3D 4)- "\\_SB.GDV0.URTM", // ResourceSource:-#else "\\_SB.= GDV0.URT0", // ResourceSource:-#endif // UART bus= controller name , // ResourceSourceIndex: assumed to = be 0 , // ResourceUsage: assumed to bediff --git a/Pla= tform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c b/Platform/RaspberryPi/Driv= ers/ConfigDxe/ConfigDxe.cindex 22f86d4d44..68ba14c846 100644--- a/Platform/= RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c+++ b/Platform/RaspberryPi/Drivers= /ConfigDxe/ConfigDxe.c@@ -1,6 +1,6 @@ /** @file *- * Copyright (c) 2019 -= 2020, ARM Limited. All rights reserved.+ * Copyright (c) 2019 - 2021, ARM= Limited. All rights reserved. * Copyright (c) 2018 - 2020, Andrei Warken= tin * * SPDX-License-Identifier: BSD-2-Clau= se-Patent@@ -12,6 +12,9 @@ #include #include <= IndustryStandard/Bcm2836Gpio.h> #include +#incl= ude +#include + #include #include #include @@ -40,6 +43,8 @@ STATI= C UINT32 mModelFamily =3D 0; STATIC UINT32 mModelInstalledMB =3D 0; STATIC = EFI_MAC_ADDRESS mMacAddress;+BOOLEAN mUsePl011Uart;+BOOLEA= N mUseMiniUart; /* * The GUID inside Platform/RaspberryPi/= RPi3/AcpiTables/AcpiTables.inf and@@ -699,6 +704,71 @@ UpdateSdtNameOps ( = } }+//+// BTH0._HID.BCM2EA6+//+#define BTH0_HID_PATTERN_LEN 17++//+// \_SB= .GDV0.URT+//+#define RESOURCE_SOURCE_PATTERN_LEN 13++//+// Scan the given n= amespace table (DSDT/SSDT) for AML NameOps+// listed in the NameOpReplace s= tructure. If one is found then+// update the value in the table from the sp= ecified Pcd+//+// This allows us to have conditionals in AML controlled+// = by options in the BDS or detected during firmware bootstrap.+// We could ex= tend this concept for strings/etc but due to len+// variations its probably= easier to encode the strings+// in the ASL and pick the correct one based = off a variable.+//+STATIC+VOID+UpdateDevBth0 (+ EFI_ACPI_DESCRIPTION_HEADE= R *AcpiTable+ )+{+ UINTN Index;+ CHAR8 Bth0HidPattern[BTH0_HID_PATT= ERN_LEN] =3D {0x42, 0x54, 0x48, 0x30, 0x08, 0x5F, 0X48, 0x49, 0x44, 0x0D, 0= x42, 0x43, 0x4D, 0x32, 0x45, 0x41, 0x36};+ CHAR8 ResourceSourcePattern[B= TH0_HID_PATTERN_LEN] =3D {0x5C, 0x5F, 0x53, 0x42, 0x2E, 0x47, 0X44, 0x56, 0= x30, 0x2E, 0x55, 0x52, 0x54};+ BOOLEAN FoundBth0HidPattern;+ UINT8 *Sdt= Ptr;+ UINT32 SdtSize;++ FoundBth0HidPattern =3D FALSE;+ SdtSize =3D Acp= iTable->Length;++ if (SdtSize > 0) {+ SdtPtr =3D (UINT8 *)AcpiTable;+ = for (Index =3D 0; Index < (SdtSize - BTH0_HID_PATTERN_LEN); Index++) {+ = if (!FoundBth0HidPattern) {+ if (CompareMem (SdtPtr + Index, Bth= 0HidPattern, BTH0_HID_PATTERN_LEN) =3D=3D 0) {+ FoundBth0HidPatter= n =3D TRUE;+ }+ } else {+ if (CompareMem (SdtPtr + Index= , ResourceSourcePattern, RESOURCE_SOURCE_PATTERN_LEN) =3D=3D 0) {+ = if (mUsePl011Uart) {+ //+ // Since PL011 has been se= t as Primary UART, set the last char in+ // ResourceSource strin= g to 'M' (0x4D) so that Mini UART can be used as Secondary UART for BlueToo= th.+ //+ SdtPtr[Index + RESOURCE_SOURCE_PATTERN_LEN] = =3D 0x4D;+ } else if (mUseMiniUart) {+ //+ /= / Since Mini UART has been set as Primary UART, set the last char in+ = // ResourceSource string to '0' (0x30) so that PL011 can be used as S= econdary UART for BlueTooth.+ //+ SdtPtr[Index + RESO= URCE_SOURCE_PATTERN_LEN] =3D 0x30;+ }+ break;+ }+ = }+ }+ }+} STATIC BOOLEAN@@ -770,8 +840,14 @@ HandleDynamicNamespac= e ( { UINTN Tables;+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE *Spc= rTable;+ DBG2_TABLE *Dbg2Table;+ swi= tch (AcpiHeader->Signature) { case SIGNATURE_32 ('D', 'S', 'D', 'T'):+ = UpdateDevBth0 (AcpiHeader);+ return TRUE;+ case SIGNATURE_32 ('S', 'S= ', 'D', 'T'): for (Tables =3D 0; SdtTables[Tables].OemTableId; Tables++= ) { if (AcpiHeader->OemTableId =3D=3D SdtTables[Tables].OemTableId) {= @@ -779,14 +855,37 @@ HandleDynamicNamespace ( } } DEBUG ((DE= BUG_ERROR, "Found namespace table not in table list.\n"));- return FALS= E;+ case SIGNATURE_32 ('I', 'O', 'R', 'T'): // only enable the IORT o= n machines with >3G and no limit // to avoid problems with rhel/centos = and other older OSs if (PcdGet32 (PcdRamLimitTo3GB) || !PcdGet32 (PcdRa= mMoreThan3GB)) { return FALSE; }+ return TRUE;++ case SIGNATU= RE_32 ('S', 'P', 'C', 'R'):+ SpcrTable =3D (EFI_ACPI_SERIAL_PORT_CONSOLE= _REDIRECTION_TABLE *)AcpiHeader;+ if (mUsePl011Uart && (SpcrTable->Inter= faceType =3D=3D EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TY= PE_ARM_PL011_UART)) {+ return TRUE;+ } else if (mUseMiniUart && (Sp= crTable->InterfaceType =3D=3D EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABL= E_INTERFACE_TYPE_BCM2835_UART)) {+ return TRUE;+ } else {+ ret= urn FALSE;+ }+ return TRUE;++ case SIGNATURE_32 ('D', 'B', 'G', '2')= :+ Dbg2Table =3D (DBG2_TABLE *)AcpiHeader;+ if (mUsePl011Uart && (Dbg= 2Table->Dbg2DeviceInfo[0].Dbg2Device.PortSubtype =3D=3D EFI_ACPI_DBG2_PORT_= SUBTYPE_SERIAL_ARM_PL011_UART)) {+ return TRUE;+ } else if (mUseMin= iUart && (Dbg2Table->Dbg2DeviceInfo[0].Dbg2Device.PortSubtype =3D=3D EFI_AC= PI_DBG2_PORT_SUBTYPE_SERIAL_BCM2835_UART)) {+ return TRUE;+ } else = {+ return FALSE;+ }+ return TRUE; } return TRUE;@@ -803,6 +9= 02,9 @@ ConfigInitialize ( EFI_STATUS Status; EFI_= EVENT EndOfDxeEvent;+ mUsePl011Uart =3D ((MmioRead32= (GPIO_BASE_ADDRESS + 4) & 0x0003F000) =3D=3D 0x00024000);+ mUseMiniUart = =3D ((MmioRead32(GPIO_BASE_ADDRESS + 4) & 0x0003F000) =3D=3D 0x00012000);+ = Status =3D gBS->LocateProtocol (&gRaspberryPiFirmwareProtocolGuid, = NULL, (VOID**)&mFwProtocol); ASSERT_EFI_ERROR (Status);@@ -85= 9,3 +961,4 @@ ConfigInitialize ( return EFI_SUCCESS; }+diff --git a/Platf= orm/RaspberryPi/Include/IndustryStandard/RpiDebugPort2Table.h b/Platform/Ra= spberryPi/Include/IndustryStandard/RpiDebugPort2Table.hnew file mode 100644= index 0000000000..8f7452f97a--- /dev/null+++ b/Platform/RaspberryPi/Include= /IndustryStandard/RpiDebugPort2Table.h@@ -0,0 +1,34 @@+/** @file++ Copyrig= ht (c) 2021, ARM Limited. All rights reserved.++ SPDX-License-Identifier: = BSD-2-Clause-Patent++ **/+#ifndef __RPI_DEBUG_PORT_2_H__+#define __RPI_DEBU= G_PORT_2_H__++#include ++#define RPI_DB= G2_NUM_DEBUG_PORTS 1+#define RPI_DBG2_NUMBER_OF_GENE= RIC_ADDRESS_REGISTERS 1+#define RPI_DBG2_NAMESPACESTRING_FIELD_SIZE = 15++#pragma pack(1)+++typedef struct {+ EFI_ACPI_DBG2_DEBUG_DEVICE= _INFORMATION_STRUCT Dbg2Device;+ EFI_ACPI_6_3_GENERIC_ADDRESS_STRU= CTURE BaseAddressRegister;+ UINT32 = AddressSize;+ UINT8 = NameSpaceString[RPI_DBG2_NAMESPACESTRING_FIELD_SIZE];+} DB= G2_DEBUG_DEVICE_INFORMATION;++typedef struct {+ EFI_ACPI_DEBUG_PORT_2_DESC= RIPTION_TABLE Description;+ DBG2_DEBUG_DEVICE_INFORMATION = Dbg2DeviceInfo[RPI_DBG2_NUM_DEBUG_PORTS];+} DBG2_TABL= E;++#pragma pack()+#endif //__RPI_DEBUG_PORT_2_H__+--2.31.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D Groups.io Links: You receive all messages sent to this group. View/Reply Online (#73200): https://edk2.groups.io/g/devel/message/73200 Mute This Topic: https://groups.io/mt/81572763/5985097 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [Sunny.Wang@arm.com] -=3D= -=3D-=3D-=3D-=3D-=3D IMPORTANT NOTICE: The contents of this email and any attachments are confid= ential and may also be privileged. If you are not the intended recipient, p= lease notify the sender immediately and do not disclose the contents to any= other person, use it for any purpose, or store or copy the information in = any medium. Thank you.