From nobody Mon Feb 9 19:30:15 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+45815+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+45815+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1565949627; cv=none; d=zoho.com; s=zohoarc; b=O1zSbQ5Qm0P+ftARcQfKkQsq/u5nm2gGZwlYf5CE0n1vw7iOSAHO2DPf92n8T5KjjT9WY9kIErrykmgFBm9ihDEGqFjqJAqQ/vOpe6t7vH2b21LWdjeIxzckXlLB8Redr6D94s+41Mc9Up/Y8zBUC/lxnJFhQHYp62//Kggo+Ss= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565949627; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To:ARC-Authentication-Results; bh=84n4ED8W3QVlreSh3s8ZnD3AIEmJi3rDCBarO7pooSc=; b=mWViG7yCuQ+0KhqDuCiZMe/GUa5mpJGuNF0tKb7HOFti6jmTfvrin7a7auvpgrGc73QjPn2JvZ/fzbqkJTBJBR9+ZF1sDI7JdrbnjScaGTDd+ru5TaPMTEfntjwtpTf4yvN9HAxJKWX77wHQGejs8+l+A+qCGfr0N6xGhbp2wyA= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+45815+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1565949627116270.9055997843261; Fri, 16 Aug 2019 03:00:27 -0700 (PDT) Return-Path: X-Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by groups.io with SMTP; Fri, 16 Aug 2019 03:00:26 -0700 X-Received: by mail-wr1-f68.google.com with SMTP id u16so1005351wrr.0 for ; Fri, 16 Aug 2019 03:00:25 -0700 (PDT) X-Gm-Message-State: APjAAAWGAVhaDG/n8F+iMjtcYjwBnWlNtNuJkQr6J26eps1R3sx6pJnv pdTBOBzJojkE/aYTWhMKLYXK0i+owDg= X-Google-Smtp-Source: APXvYqy/z4hc1Wci+rYOEIG7HAOkx2IriBGMTtlwhEC00kBXPEGMbqvtHs+DMMdHp6UbCaCpf+0voQ== X-Received: by 2002:adf:b612:: with SMTP id f18mr10146154wre.97.1565949623911; Fri, 16 Aug 2019 03:00:23 -0700 (PDT) X-Received: from localhost.localdomain ([84.203.61.230]) by smtp.gmail.com with ESMTPSA id j16sm4750851wrp.62.2019.08.16.03.00.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 16 Aug 2019 03:00:23 -0700 (PDT) From: "Pete Batard" To: devel@edk2.groups.io Cc: ard.biesheuvel@linaro.org, leif.lindholm@linaro.org Subject: [edk2-devel] [edk2-platforms: PATCH v2 2/2] Platforms/RPi3: Add multiple embedded Device Tree selection Date: Fri, 16 Aug 2019 11:00:09 +0100 Message-Id: <20190816100009.3360-3-pete@akeo.ie> In-Reply-To: <20190816100009.3360-1-pete@akeo.ie> References: <20190816100009.3360-1-pete@akeo.ie> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,pete@akeo.ie Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1565949626; bh=d6JpJHQg+ZHakfVI0xhnSnPwGnuK9WAZoWhqEKS3hDw=; h=Cc:Date:From:Reply-To:Subject:To; b=dQdNdGuRWBIpFG64jypcv36KieORDsHLBS9/L5+aopcov9ZwJA1/DaRiBwQFuWvadgV KdN5ZyV+DpxkSIGg+Lb74xtJPOnZU9i5xAR9O3+WFPang/WUy3ouS9qk8xj0RfBfxawTz xw5wzAPDkbV3A1qZ4/TjwdRmf+igqkcata8= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The Raspberry Pi 3 platform currently has 2 different models, each with a different Device Tree. Rather than embedding a single one, and requiring users to manually provide the other, this patch ensures that we now embed both and and serve the relevant one at runtime. This patch also adds support for the Raspberry Pi 4 in FdtDxe. Signed-off-by: Pete Batard --- Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c | 56 +++++++++++++++++= --- Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.inf | 5 +- Platform/RaspberryPi/RPi3/RPi3.dec | 8 ++- Platform/RaspberryPi/RPi3/RPi3.fdf | 6 ++- 4 files changed, 66 insertions(+), 9 deletions(-) diff --git a/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c b/Platform/R= aspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c index da99ef9535c8..45ffe2e394a2 100644 --- a/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c +++ b/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c @@ -366,9 +366,11 @@ FdtDxeInitialize ( ) { EFI_STATUS Status; + EFI_GUID *FdtGuid; VOID *FdtImage; UINTN FdtSize; INT32 Retval; + UINT32 BoardRevision; BOOLEAN Internal; =20 Status =3D gBS->LocateProtocol (&gRaspberryPiFirmwareProtocolGuid, NULL, @@ -386,16 +388,58 @@ FdtDxeInitialize ( DEBUG ((DEBUG_INFO, "Device Tree passed via config.txt (0x%lx bytes)\n= ", FdtSize)); Status =3D EFI_SUCCESS; } else { + /* + * Use one of the embedded FDT's. + */ Internal =3D TRUE; DEBUG ((DEBUG_INFO, "No/Bad Device Tree found at address 0x%p (%a), " - "trying internal one...\n", FdtImage, fdt_strerror (Retval))); - Status =3D GetSectionFromAnyFv (&gRaspberryPiFdtFileGuid, EFI_SECTION_= RAW, 0, - &FdtImage, &FdtSize); - if (Status =3D=3D EFI_SUCCESS) { - if (fdt_check_header (FdtImage) !=3D 0) { - Status =3D EFI_INCOMPATIBLE_VERSION; + "looking up internal one...\n", FdtImage, fdt_strerror (Retval))); + /* + * Query the board revision to differentiate between models. + */ + Status =3D mFwProtocol->GetModelRevision (&BoardRevision); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Failed to get board type: %r\n", Status)); + DEBUG ((DEBUG_INFO, "Using default internal Device Tree\n")); + FdtGuid =3D &gRaspberryPiDefaultFdtGuid; + } else { + // www.raspberrypi.org/documentation/hardware/raspberrypi/revision-c= odes/README.md + switch ((BoardRevision >> 4) & 0xFF) { + case 0x08: + DEBUG ((DEBUG_INFO, "Using Raspberry Pi 3 Model B internal Device = Tree\n")); + FdtGuid =3D &gRaspberryPi3ModelBFdtGuid; + break; + case 0x0D: + DEBUG ((DEBUG_INFO, "Using Raspberry Pi 3 Model B+ internal Device= Tree\n")); + FdtGuid =3D &gRaspberryPi3ModelBPlusFdtGuid; + break; + case 0x11: + DEBUG ((DEBUG_INFO, "Using Raspberry Pi 4 Model B internal Device = Tree\n")); + FdtGuid =3D &gRaspberryPi4ModelBFdtGuid; + break; + default: + DEBUG ((DEBUG_INFO, "Using default internal Device Tree\n")); + FdtGuid =3D &gRaspberryPiDefaultFdtGuid; + break; } } + do { + Status =3D GetSectionFromAnyFv (FdtGuid, EFI_SECTION_RAW, 0, &FdtIma= ge, &FdtSize); + if (Status =3D=3D EFI_SUCCESS) { + if (fdt_check_header (FdtImage) !=3D 0) { + Status =3D EFI_INCOMPATIBLE_VERSION; + } + } + // No retry needed if we are successful or are dealing with the defa= ult Fdt. + if ( (Status =3D=3D EFI_SUCCESS) || + (CompareGuid (FdtGuid, &gRaspberryPiDefaultFdtGuid)) ) + break; + // Otherwise, try one more time with the default Fdt. An example of = this + // is if we detected a non-default Fdt, that isn't included in the F= DF. + DEBUG ((DEBUG_INFO, "Internal Device Tree was not found for this pla= tform, " + "falling back to default...\n")); + FdtGuid =3D &gRaspberryPiDefaultFdtGuid; + } while (1); } =20 if (EFI_ERROR (Status)) { diff --git a/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.inf b/Platform= /RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.inf index 5b0b1a09f374..570b05b62564 100644 --- a/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.inf +++ b/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.inf @@ -35,7 +35,10 @@ [LibraryClasses] =20 [Guids] gFdtTableGuid - gRaspberryPiFdtFileGuid + gRaspberryPi3ModelBFdtGuid + gRaspberryPi3ModelBPlusFdtGuid + gRaspberryPi4ModelBFdtGuid + gRaspberryPiDefaultFdtGuid =20 [Protocols] gRaspberryPiFirmwareProtocolGuid ## CONSUMES diff --git a/Platform/RaspberryPi/RPi3/RPi3.dec b/Platform/RaspberryPi/RPi3= /RPi3.dec index 22de439fde8f..d2a813417648 100644 --- a/Platform/RaspberryPi/RPi3/RPi3.dec +++ b/Platform/RaspberryPi/RPi3/RPi3.dec @@ -24,9 +24,15 @@ [Protocols] =20 [Guids] gRaspberryPiTokenSpaceGuid =3D {0xCD7CC258, 0x31DB, 0x11E6, {0x9F, 0xD3,= 0x63, 0xB0, 0xB8, 0xEE, 0xD6, 0xB5}} - gRaspberryPiFdtFileGuid =3D {0xDF5DA223, 0x1D27, 0x47C3, { 0x8D, 0x1B, 0= x9A, 0x41, 0xB5, 0x5A, 0x18, 0xBC}} gRaspberryPiEventResetGuid =3D {0xCD7CC258, 0x31DB, 0x11E6, {0x9F, 0xD3,= 0x63, 0xB4, 0xB4, 0xE4, 0xD4, 0xB4}} gConfigDxeFormSetGuid =3D {0xCD7CC258, 0x31DB, 0x22E6, {0x9F, 0x22, 0x63= , 0xB0, 0xB8, 0xEE, 0xD6, 0xB5}} + # GUIDs used by FdtDxe to serve a Device Tree at runtime. Not all of the= se need to apply + # to the current platform or match an actual FDF binary, but they need t= o be defined. + gRaspberryPi3ModelBFdtGuid =3D { 0xDF5DA223, 0x1D27, 0x47C3, { 0x8D, 0x1= B, 0x9A, 0x41, 0xB5, 0x5A, 0x18, 0xBC } } + gRaspberryPi3ModelBPlusFdtGuid =3D { 0x3D523012, 0x73FE, 0x40E5, { 0x89,= 0x2E, 0x1A, 0x4D, 0xF6, 0x0F, 0x3C, 0x0C } } + gRaspberryPi4ModelBFdtGuid =3D { 0x80AB6833, 0xCAE4, 0x4CEE, { 0xB5, 0x9= D, 0xEB, 0x20, 0x39, 0xB0, 0x55, 0x51 } } + # Default Fdt to serve if the hardware model can't be detected. Should m= atch one of the above. + gRaspberryPiDefaultFdtGuid =3D {0xDF5DA223, 0x1D27, 0x47C3, { 0x8D, 0x1B= , 0x9A, 0x41, 0xB5, 0x5A, 0x18, 0xBC}} =20 [PcdsFixedAtBuild.common] gRaspberryPiTokenSpaceGuid.PcdFdtBaseAddress|0x10000|UINT32|0x00000001 diff --git a/Platform/RaspberryPi/RPi3/RPi3.fdf b/Platform/RaspberryPi/RPi3= /RPi3.fdf index c62d649834c7..17c0094ac1cf 100644 --- a/Platform/RaspberryPi/RPi3/RPi3.fdf +++ b/Platform/RaspberryPi/RPi3/RPi3.fdf @@ -300,11 +300,15 @@ [FV.FvMain] INF Platform/RaspberryPi/$(PLATFORM_NAME)/Drivers/LogoDxe/LogoDxe.inf =20 # - # FDT (GUID matches gRaspberryPiFdtFileGuid in FdtDxe) + # Device Tree support (used by FdtDxe) + # GUIDs should match gRaspberryPi#####FdtGuid's from the .dec # FILE FREEFORM =3D DF5DA223-1D27-47C3-8D1B-9A41B55A18BC { SECTION RAW =3D Platform/RaspberryPi/$(PLATFORM_NAME)/DeviceTree/bcm27= 10-rpi-3-b.dtb } + FILE FREEFORM =3D 3D523012-73FE-40E5-892E-1A4DF60F3C0C { + SECTION RAW =3D Platform/RaspberryPi/$(PLATFORM_NAME)/DeviceTree/bcm27= 10-rpi-3-b-plus.dtb + } =20 [FV.FVMAIN_COMPACT] FvAlignment =3D 16 --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#45815): https://edk2.groups.io/g/devel/message/45815 Mute This Topic: https://groups.io/mt/32896987/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-