From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.120]) by mx.groups.io with SMTP id smtpd.web12.13214.1576688413427805106 for ; Wed, 18 Dec 2019 09:00:13 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=a55nPqqb; spf=pass (domain: redhat.com, ip: 205.139.110.120, mailfrom: philmd@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1576688412; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cQBr6e7iavu5+XJ73HmRhx4dzVxZm4ZSxHHBJM7+1eg=; b=a55nPqqbR9irVDny9+f1LNnT7b6DWlbRZKJDSNDtiEPAvATt8rGUpKsaYSqSuML6AvJRMj f+5iWmLWDJ0iDOax5nezB6WpjGiHjnT3hrnS9aQQ8VUzBwb468YYbgik/U7jZDb1T4ZF7b 1L+CHcMJWKQvAeDjMrz8HJSC8wvu13o= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-40-d9OLtpRGMI2p9McGjHCfMQ-1; Wed, 18 Dec 2019 12:00:11 -0500 Received: by mail-wr1-f70.google.com with SMTP id o6so1114609wrp.8 for ; Wed, 18 Dec 2019 09:00:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=BmnktHi9rWU5wOwjA9xuO4GupYP1kBct3V1/bzOmIGY=; b=CyuB0GK91OnETtr3rX1cDogkw2HttS9oWBfAhF/BgtSVBcc3u/iJTU+A4RW3K3wZZC ecn9QSrq5qI3B7vKLdkcKBLumSYsSlTA7hTIy2pfxkybnAhrsQ1UtMZGbKetPiWYsQj0 D8OMaFB8pu2kyoyZrETPYWwkedcbH9wk2YOHMRckCKV+bE2h2o8UizZlb1kue0bl2UAm lyL1a2Xdovu8KTX5CpcsGR9ditPR9qvY8PYKg/JibUfHMXo+GRCBwjFw3ybJWaEoJ2pB reN5u4vyi83i8TfJ5d8mbPuwQ8fdkIZVwXj7B0gBjdXLNQ9TF52yiFzZ7U8KWWEAMuaV 9IzQ== X-Gm-Message-State: APjAAAWWa2fmROpe3lKTxMmj2aqSU62B96LeR++tJq+2YZR1NvGBir75 DtxWREcaHKqrV9RbgNNoEUOe2mHSDXKvPPk3G9uiy+KemP+bb41u9aPq0YI6KxHv23obqiP3Twc i6UfilIPYBZMNeg== X-Received: by 2002:a5d:4b45:: with SMTP id w5mr4161117wrs.224.1576688409336; Wed, 18 Dec 2019 09:00:09 -0800 (PST) X-Google-Smtp-Source: APXvYqxM4e9RDf/2dkaN63Ti0+jkbRE/MJkGN5ZZPr7fZhLaOUaaSNEVhEwSYCu4n+EI7/0jYHB7Mg== X-Received: by 2002:a5d:4b45:: with SMTP id w5mr4161086wrs.224.1576688409084; Wed, 18 Dec 2019 09:00:09 -0800 (PST) Return-Path: Received: from [192.168.1.35] (34.red-83-42-66.dynamicip.rima-tde.net. [83.42.66.34]) by smtp.gmail.com with ESMTPSA id d8sm3105584wrx.71.2019.12.18.09.00.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 18 Dec 2019 09:00:08 -0800 (PST) Subject: Re: [edk2-platforms][PATCH 3/6] Platform/RPi4: Improve SPCR and DBG2 ACPI table generation To: Pete Batard , devel@edk2.groups.io Cc: ard.biesheuvel@linaro.org, leif.lindholm@linaro.org References: <20191218114156.9036-1-pete@akeo.ie> <20191218114156.9036-4-pete@akeo.ie> <1771aae3-dee9-ed27-5134-962434db5f57@redhat.com> From: =?UTF-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= Message-ID: Date: Wed, 18 Dec 2019 18:00:07 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: X-MC-Unique: d9OLtpRGMI2p9McGjHCfMQ-1 X-Mimecast-Spam-Score: 0 Content-Language: en-US Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable On 12/18/19 5:36 PM, Pete Batard wrote: > Hi Philippe, >=20 > On 2019.12.18 15:57, Philippe Mathieu-Daud=C3=A9 wrote: >> On 12/18/19 12:41 PM, Pete Batard wrote: >>> Use code derived from JunoPkg to generate our serial tables and >>> also use PCDs where possible. >>> >>> Signed-off-by: Pete Batard >>> --- >>> =C2=A0 Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf |=C2=A0=C2= =A0 4 +- >>> =C2=A0 Platform/RaspberryPi/RPi4/AcpiTables/Dbg2.aslc=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 | 100=20 >>> +++++++++++++++++--- >>> =C2=A0 Platform/RaspberryPi/RPi4/AcpiTables/Spcr.asl=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 |=C2=A0 48 ---------- >>> =C2=A0 Platform/RaspberryPi/RPi4/AcpiTables/Spcr.aslc=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 |=C2=A0 94=20 >>> ++++++++++++++++++ >>> =C2=A0 4 files changed, 183 insertions(+), 63 deletions(-) >>> >>> diff --git a/Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf=20 >>> b/Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf >>> index 50c9f7694d84..6b1155d66444 100644 >>> --- a/Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf >>> +++ b/Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf >>> @@ -31,7 +31,7 @@ [Sources] >>> =C2=A0=C2=A0=C2=A0 Gtdt.aslc >>> =C2=A0=C2=A0=C2=A0 Dsdt.asl >>> =C2=A0=C2=A0=C2=A0 Csrt.aslc >>> -=C2=A0 Spcr.asl >>> +=C2=A0 Spcr.aslc >>> =C2=A0 [Packages] >>> =C2=A0=C2=A0=C2=A0 ArmPkg/ArmPkg.dec >>> @@ -47,4 +47,6 @@ [FixedPcd] >>> =C2=A0=C2=A0=C2=A0 gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum >>> =C2=A0=C2=A0=C2=A0 gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase >>> =C2=A0=C2=A0=C2=A0 gArmTokenSpaceGuid.PcdGicDistributorBase >>> +=C2=A0 gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase >>> +=C2=A0 gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate >>> =C2=A0=C2=A0=C2=A0 gEmbeddedTokenSpaceGuid.PcdInterruptBaseAddress >>> diff --git a/Platform/RaspberryPi/RPi4/AcpiTables/Dbg2.aslc=20 >>> b/Platform/RaspberryPi/RPi4/AcpiTables/Dbg2.aslc >>> index 849cf5134793..589a5c2cbd71 100644 >>> --- a/Platform/RaspberryPi/RPi4/AcpiTables/Dbg2.aslc >>> +++ b/Platform/RaspberryPi/RPi4/AcpiTables/Dbg2.aslc >>> @@ -2,27 +2,99 @@ >>> =C2=A0=C2=A0 * >>> =C2=A0=C2=A0 *=C2=A0 Debug Port Table (DBG2) >>> =C2=A0=C2=A0 * >>> - *=C2=A0 Copyright (c) Microsoft Corporation. All rights reserved. >>> + *=C2=A0 Copyright (c) 2019, Pete Batard >>> + *=C2=A0 Copyright (c) 2012-2016, ARM Limited. All rights reserved. >>> =C2=A0=C2=A0 * >>> =C2=A0=C2=A0 *=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >>> =C2=A0=C2=A0 * >>> =C2=A0=C2=A0 **/ >>> -UINT8 Dbg2[92] =3D { >>> -=C2=A0 0x44, 0x42, 0x47, 0x32, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, >>> -=C2=A0 0x4D, 0x53, 0x46, 0x54, 0x20, 0x20, 0x45, 0x44, 0x4B, 0x32, >>> -=C2=A0 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x4D, 0x53, >>> -=C2=A0 0x46, 0x54, 0x01, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, >>> -=C2=A0 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x0A, 0x00, >>> -=C2=A0 0x26, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x80, 0x10, 0x00, >>> -=C2=A0 0x00, 0x00, 0x16, 0x00, 0x22, 0x00, 0x00, 0x20, 0x00, 0x10, >>> -=C2=A0 0x00, 0x50, 0x21, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x00, >>> -=C2=A0 0x00, 0x00, '\\',=C2=A0 '_',=C2=A0 'S',=C2=A0 'B',=C2=A0 '.',= =C2=A0 'U',=C2=A0 'R',=C2=A0 'T', >>> -=C2=A0 'M', 0x00, >>> +#include >>> +#include >>> +#include >>> +#include >>> + >>> +#include "AcpiTables.h" >>> + >>> +#pragma pack(1) >>> + >>> +#define RPI_DBG2_NUM_DEBUG_PORTS=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1 >>> +#define RPI_DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS=C2=A0=C2=A0=C2=A0= 1 >>> +#define RPI_DBG2_NAMESPACESTRING_FIELD_SIZE=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 10 >>> + >>> +// >>> +// When using the miniUART, PcdSerialRegisterBase points to the 8250= =20 >>> base address, >>> +// which is offset by 0x40 from the actual Bcm2835 base address >> >> Actually this is the other way around, the 8250 is at AUX + 0x40. >> >> Can we clean that up or is it too late? >=20 > Yeah, re-reading this I admit the comment is not too clear. >=20 > Let me try to rephrase this better in v2. Actually my comment is about the code... Do you think we can clean the=20 RPi3/RPi4 codebase by changing=20 gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase? If you don't have time for this, maybe you can add a /* TODO FIXME */? >> >>> +// >>> +#define RPI_UART_BASE_ADDRESS (FixedPcdGet64 (PcdSerialRegisterBase)= =20 >>> - 0x40) >>> +#define RPI_UART_LENGTH=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=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 70 >>> +// >>> +// RPI_UART_STR should match the value used Uart.asl >>> +// >>> +#define RPI_UART_STR=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=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 { '\\', '_',=20 >>> 'S', 'B', '.', 'U', 'R', 'T', 'M', 0x00 } >>> + >>> +typedef struct { >>> +=C2=A0 EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Dbg2Device; >>> +=C2=A0 EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister; >>> +=C2=A0 UINT32=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=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=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= AddressSize; >>> +=C2=A0 UINT8 NameSpaceString[RPI_DBG2_NAMESPACESTRING_FIELD_SIZE]; >>> +} DBG2_DEBUG_DEVICE_INFORMATION; >>> + >>> +typedef struct { >>> +=C2=A0 EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE=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=C2=A0 Description; >>> +=C2=A0 DBG2_DEBUG_DEVICE_INFORMATION=20 >>> Dbg2DeviceInfo[RPI_DBG2_NUM_DEBUG_PORTS]; >>> +} DBG2_TABLE; >>> + >>> + >>> +#define DBG2_DEBUG_PORT_DDI(NumReg, SubType, UartBase, UartAddrLen,=20 >>> UartNameStr) {=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=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=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=C2=A0 EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_= STRUCT_REVISION, /*=20 >>> UINT8=C2=A0=C2=A0=C2=A0=C2=A0 Revision */=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=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=C2=A0=C2=A0 sizeof (DBG2_DEBUG_DEVICE_INFORMATION),= /* UINT16=C2=A0=C2=A0=C2=A0 Length=20 >>> */=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=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=C2=A0=C2=A0=C2=A0=C2=A0 NumReg, /* UINT8=C2=A0=C2=A0=C2=A0=C2= =A0 NumberofGenericAddressRegisters */ \ >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 RPI_DBG2_NAMESPACESTRING_FIELD_SIZE, /*= UINT16 =20 >>> NameSpaceStringLength */=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=C2=A0=C2=A0 OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATIO= N, NameSpaceString), /*=20 >>> UINT16=C2=A0=C2=A0=C2=A0 NameSpaceStringOffset */=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=C2=A0=C2=A0 0, /* UINT16=C2=A0=C2=A0=C2=A0 OemDataL= ength */=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, /* UINT16=C2=A0=C2=A0=C2=A0 OemDataO= ffset */=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_DBG2_PORT_TYPE_SERIAL, /* UINT= 16=C2=A0=C2=A0=C2=A0 Port Type=20 >>> */=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=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=C2=A0 SubType, /* UINT16=C2=A0=C2=A0=C2=A0 Po= rt Subtype */=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESER= VED_BYTE}, /* UINT8 =20 >>> Reserved[2] */=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATIO= N,=20 >>> BaseAddressRegister), /* UINT16=C2=A0=C2=A0=C2=A0 BaseAddressRegister O= ffset */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATIO= N, AddressSize) /*=20 >>> UINT16=C2=A0=C2=A0=C2=A0 AddressSize Offset */=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 \ >>> + }, \ >>> +=C2=A0=C2=A0=C2=A0 ARM_GAS32 (UartBase),=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=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=C2=A0 /*=20 >>> EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister */ \ >>> +=C2=A0=C2=A0=C2=A0 UartAddrLen,=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=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 /* UINT32=20 >>> AddressSize */=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=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=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 \ >>> +=C2=A0=C2=A0=C2=A0 UartNameStr=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=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* UINT8=20 >>> NameSpaceString[MAX_DBG2_NAME_LEN] */=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=C2=A0=C2=A0=C2=A0 \ >>> +=C2=A0 } >>> + >>> + >>> +STATIC DBG2_TABLE Dbg2 =3D { >>> +=C2=A0 { >>> +=C2=A0=C2=A0=C2=A0 ACPI_HEADER ( >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_5_1_DEBUG_PORT_2_TABLE_SIGNATU= RE, >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DBG2_TABLE, >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_= STRUCT_REVISION >>> +=C2=A0=C2=A0=C2=A0 ), >>> +=C2=A0=C2=A0=C2=A0 OFFSET_OF (DBG2_TABLE, Dbg2DeviceInfo), >>> +=C2=A0=C2=A0=C2=A0 RPI_DBG2_NUM_DEBUG_PORTS /* UINT32=C2=A0 NumberDbgD= eviceInfo */ >>> +=C2=A0 }, >>> +=C2=A0 { >>> +=C2=A0=C2=A0=C2=A0 /* >>> +=C2=A0=C2=A0=C2=A0=C2=A0 * Kernel Debug Port >>> +=C2=A0=C2=A0=C2=A0=C2=A0 */ >>> +=C2=A0=C2=A0=C2=A0 DBG2_DEBUG_PORT_DDI ( >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 RPI_DBG2_NUMBER_OF_GENERIC_ADDRESS_REGI= STERS, >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_BCM28= 35_UART, >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 RPI_UART_BASE_ADDRESS, >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 RPI_UART_LENGTH, >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 RPI_UART_STR >>> +=C2=A0=C2=A0=C2=A0 ), >>> +=C2=A0 } >>> =C2=A0 }; >> [...] >> >=20