public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-non-osi][PATCH 1/1] Platform/RaspberryPi: Update TF-A to v2.6 to enable the PCI SMCCC interface
@ 2022-01-10 13:42 Pete Batard
  2022-01-10 14:01 ` Ard Biesheuvel
  0 siblings, 1 reply; 2+ messages in thread
From: Pete Batard @ 2022-01-10 13:42 UTC (permalink / raw)
  To: devel; +Cc: ardb+tianocore, leif, jeremy.linton, samer.el-haj-mahmoud

The RPi4 has a single nonstandard PCI config region. It is broken into two
pieces, the root port config registers and a window to a single device's
config space which can move between devices. However there isn't (yet) an
authoritative public document on this since the available BCM2711 reference
notes that there is a PCIe root port in the memory map but doesn't describe
it.

Considering that it's not ECAM compliant, yet relatively simple, it is
however possible to make use of the newly introduced PCI SMCCC interface
that was added for the RPi4 platform as part of the TF-A 2.6 release.

As a result, we update the RPi4 TF-A to the 2.6 release version, and, for
good measure, the RPi3 also, using binaries that were built in an open and
verifiable manner through the GitHub Actions build script located at
https://github.com/pftf/pitf.

For more details on the SMCCC interface, see DEN0115 available from:
https://developer.arm.com/documentation/den0115/latest

Tested for regression on Pi 3 Model B and Pi 4 Model B.

Signed-off-by: Pete Batard <pete@akeo.ie>
---
 Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md |   6 +++---
 Platform/RaspberryPi/RPi3/TrustedFirmware/bl1.bin   | Bin 18853 -> 18853 bytes
 Platform/RaspberryPi/RPi3/TrustedFirmware/fip.bin   | Bin 53988 -> 53988 bytes
 Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md |   6 +++---
 Platform/RaspberryPi/RPi4/TrustedFirmware/bl31.bin  | Bin 41067 -> 45163 bytes
 5 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md b/Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md
index cd88e0345c91..a136cfb9e413 100644
--- a/Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md
+++ b/Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md
@@ -2,14 +2,14 @@ ARM Trusted Firmware for Raspberry Pi 3
 =======================================
 
 The `bl1.bin` and `fip.bin` TF-A binaries found in this directory were built from the
-[official TF-A 2.5 release](https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.5)
+[official TF-A 2.6 release](https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.6)
 through a [GitHub build script](https://github.com/pftf/pitf/blob/master/.github/workflows/build.yml)
 that is designed to provide evidence that these binaries match the vanilla TF-A source.
 
 Per the [GitHub Actions log](https://github.com/pftf/pitf/runs/2822874196),
 the SHA-256 sums for the blobs can be validated to be as follows:
-- `bl1.bin`: `5ba701a7e977d308a19928e19937107387677d52a1a4d628a5c2bb4e795aae8b`
-- `fip.bin`: `0c3f8a3e8192e5dcb3bdc5867976e4277e9d948159a92ee71a54e92cb8dce9a3`
+- `bl1.bin`: `787acb2ca1c99678dcdec70a64b9602f8f8f658a4abb0b3f7edfa5f5efb22f73`
+- `fip.bin`: `fd85f9a230aad88f6a59cf0c5d88e6067f23fb8080c6b8bdc61f1a5f6cbbf9ec`
 
 For Raspberry Pi 3 usage, TF-A was built using the command:
 ```
diff --git a/Platform/RaspberryPi/RPi3/TrustedFirmware/bl1.bin b/Platform/RaspberryPi/RPi3/TrustedFirmware/bl1.bin
index edfb46702e801a102c9d18e4a52bb4ab9bd72a47..cbbde5f744a7e2f50232a2e6c1a9de1d5254669c 100644
GIT binary patch
delta 3943
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
AcmMzZ

delta 3868
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
BL5~0c

diff --git a/Platform/RaspberryPi/RPi3/TrustedFirmware/fip.bin b/Platform/RaspberryPi/RPi3/TrustedFirmware/fip.bin
index 8feac04185377c5b9320a8bc32380b7b3b8ce43d..662d638e181af0461ef63058c459a48ef12971dd 100644
GIT binary patch
delta 8958
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
bj(xBtiuuM2W{-N+bQ)XlO@rTad&m9@uf`UJ

delta 8730
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

diff --git a/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md b/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
index 6631c05400dc..6db49445073a 100644
--- a/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
+++ b/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
@@ -2,15 +2,15 @@ ARM Trusted Firmware for Raspberry Pi 4
 =======================================
 
 The `bl31.bin` TF-A binary found in this directory was built from the
-[official TF-A 2.5 release](https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.5)
+[official TF-A 2.6 release](https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.6)
 through a [GitHub build script](https://github.com/pftf/pitf/blob/master/.github/workflows/build.yml)
 that is designed to provide evidence that these binaries match the vanilla TF-A source.
 
 Per the [GitHub Actions log](https://github.com/pftf/pitf/runs/2822874196),
 the SHA-256 sum for the bin can be validated to be as follows:
-- `bl31.bin`: `59c4486a0a257c8d630d8ea39d6a13d038cd50be4fc9a81985bf2c32a7c3fca6`
+- `bl31.bin`: `48f129b3064fd44992c9903e8207eeee09f67edb6d06b14eba8e10614ac5c5b7`
 
 For Raspberry Pi 4 usage, TF-A was built using the command:
 ```
-make PLAT=rpi4 RPI3_PRELOADED_DTB_BASE=0x1F0000 PRELOADED_BL33_BASE=0x20000 SUPPORT_VFP=1 DEBUG=0 all
+make PLAT=rpi4 RPI3_PRELOADED_DTB_BASE=0x1F0000 PRELOADED_BL33_BASE=0x20000 SUPPORT_VFP=1 SMC_PCI_SUPPORT=1 DEBUG=0 all
 ```
diff --git a/Platform/RaspberryPi/RPi4/TrustedFirmware/bl31.bin b/Platform/RaspberryPi/RPi4/TrustedFirmware/bl31.bin
index c97aab3895bd3a831d1a3f8c6759959acf2dba04..37aa0c433e9ec4b32bacf383532125f722c1cfc9 100644
GIT binary patch
delta 10813
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
E-<MbcivR!s

delta 9266
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
ToKt?*i)yQtBVy?OBk}(ScM+JC

-- 
2.33.0.windows.2


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [edk2-non-osi][PATCH 1/1] Platform/RaspberryPi: Update TF-A to v2.6 to enable the PCI SMCCC interface
  2022-01-10 13:42 [edk2-non-osi][PATCH 1/1] Platform/RaspberryPi: Update TF-A to v2.6 to enable the PCI SMCCC interface Pete Batard
@ 2022-01-10 14:01 ` Ard Biesheuvel
  0 siblings, 0 replies; 2+ messages in thread
From: Ard Biesheuvel @ 2022-01-10 14:01 UTC (permalink / raw)
  To: Pete Batard
  Cc: edk2-devel-groups-io, Ard Biesheuvel, Leif Lindholm,
	Jeremy Linton, Samer El-Haj-Mahmoud

On Mon, 10 Jan 2022 at 14:43, Pete Batard <pete@akeo.ie> wrote:
>
> The RPi4 has a single nonstandard PCI config region. It is broken into two
> pieces, the root port config registers and a window to a single device's
> config space which can move between devices. However there isn't (yet) an
> authoritative public document on this since the available BCM2711 reference
> notes that there is a PCIe root port in the memory map but doesn't describe
> it.
>
> Considering that it's not ECAM compliant, yet relatively simple, it is
> however possible to make use of the newly introduced PCI SMCCC interface
> that was added for the RPi4 platform as part of the TF-A 2.6 release.
>
> As a result, we update the RPi4 TF-A to the 2.6 release version, and, for
> good measure, the RPi3 also, using binaries that were built in an open and
> verifiable manner through the GitHub Actions build script located at
> https://github.com/pftf/pitf.
>
> For more details on the SMCCC interface, see DEN0115 available from:
> https://developer.arm.com/documentation/den0115/latest
>
> Tested for regression on Pi 3 Model B and Pi 4 Model B.
>
> Signed-off-by: Pete Batard <pete@akeo.ie>

Thanks Pete

Reviewed-by: Ard Biesheuvel <ardb@kernel.org>

Pushed as d02501aaa8d9..c1075e9ddd64 (after fixing up the GitHub
Actions log links)

-- 
Ard.


> ---
>  Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md |   6 +++---
>  Platform/RaspberryPi/RPi3/TrustedFirmware/bl1.bin   | Bin 18853 -> 18853 bytes
>  Platform/RaspberryPi/RPi3/TrustedFirmware/fip.bin   | Bin 53988 -> 53988 bytes
>  Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md |   6 +++---
>  Platform/RaspberryPi/RPi4/TrustedFirmware/bl31.bin  | Bin 41067 -> 45163 bytes
>  5 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md b/Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md
> index cd88e0345c91..a136cfb9e413 100644
> --- a/Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md
> +++ b/Platform/RaspberryPi/RPi3/TrustedFirmware/Readme.md
> @@ -2,14 +2,14 @@ ARM Trusted Firmware for Raspberry Pi 3
>  =======================================
>
>  The `bl1.bin` and `fip.bin` TF-A binaries found in this directory were built from the
> -[official TF-A 2.5 release](https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.5)
> +[official TF-A 2.6 release](https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.6)
>  through a [GitHub build script](https://github.com/pftf/pitf/blob/master/.github/workflows/build.yml)
>  that is designed to provide evidence that these binaries match the vanilla TF-A source.
>
>  Per the [GitHub Actions log](https://github.com/pftf/pitf/runs/2822874196),
>  the SHA-256 sums for the blobs can be validated to be as follows:
> -- `bl1.bin`: `5ba701a7e977d308a19928e19937107387677d52a1a4d628a5c2bb4e795aae8b`
> -- `fip.bin`: `0c3f8a3e8192e5dcb3bdc5867976e4277e9d948159a92ee71a54e92cb8dce9a3`
> +- `bl1.bin`: `787acb2ca1c99678dcdec70a64b9602f8f8f658a4abb0b3f7edfa5f5efb22f73`
> +- `fip.bin`: `fd85f9a230aad88f6a59cf0c5d88e6067f23fb8080c6b8bdc61f1a5f6cbbf9ec`
>
>  For Raspberry Pi 3 usage, TF-A was built using the command:
>  ```
> diff --git a/Platform/RaspberryPi/RPi3/TrustedFirmware/bl1.bin b/Platform/RaspberryPi/RPi3/TrustedFirmware/bl1.bin
> index edfb46702e801a102c9d18e4a52bb4ab9bd72a47..cbbde5f744a7e2f50232a2e6c1a9de1d5254669c 100644
> GIT binary patch
...
> diff --git a/Platform/RaspberryPi/RPi3/TrustedFirmware/fip.bin b/Platform/RaspberryPi/RPi3/TrustedFirmware/fip.bin
> index 8feac04185377c5b9320a8bc32380b7b3b8ce43d..662d638e181af0461ef63058c459a48ef12971dd 100644
> GIT binary patch
...
> diff --git a/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md b/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
> index 6631c05400dc..6db49445073a 100644
> --- a/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
> +++ b/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
> @@ -2,15 +2,15 @@ ARM Trusted Firmware for Raspberry Pi 4
>  =======================================
>
>  The `bl31.bin` TF-A binary found in this directory was built from the
> -[official TF-A 2.5 release](https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.5)
> +[official TF-A 2.6 release](https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.6)
>  through a [GitHub build script](https://github.com/pftf/pitf/blob/master/.github/workflows/build.yml)
>  that is designed to provide evidence that these binaries match the vanilla TF-A source.
>
>  Per the [GitHub Actions log](https://github.com/pftf/pitf/runs/2822874196),
>  the SHA-256 sum for the bin can be validated to be as follows:
> -- `bl31.bin`: `59c4486a0a257c8d630d8ea39d6a13d038cd50be4fc9a81985bf2c32a7c3fca6`
> +- `bl31.bin`: `48f129b3064fd44992c9903e8207eeee09f67edb6d06b14eba8e10614ac5c5b7`
>
>  For Raspberry Pi 4 usage, TF-A was built using the command:
>  ```
> -make PLAT=rpi4 RPI3_PRELOADED_DTB_BASE=0x1F0000 PRELOADED_BL33_BASE=0x20000 SUPPORT_VFP=1 DEBUG=0 all
> +make PLAT=rpi4 RPI3_PRELOADED_DTB_BASE=0x1F0000 PRELOADED_BL33_BASE=0x20000 SUPPORT_VFP=1 SMC_PCI_SUPPORT=1 DEBUG=0 all
>  ```
> diff --git a/Platform/RaspberryPi/RPi4/TrustedFirmware/bl31.bin b/Platform/RaspberryPi/RPi4/TrustedFirmware/bl31.bin
> index c97aab3895bd3a831d1a3f8c6759959acf2dba04..37aa0c433e9ec4b32bacf383532125f722c1cfc9 100644
> GIT binary patch
...
>
> --
> 2.33.0.windows.2
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-01-10 14:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-10 13:42 [edk2-non-osi][PATCH 1/1] Platform/RaspberryPi: Update TF-A to v2.6 to enable the PCI SMCCC interface Pete Batard
2022-01-10 14:01 ` Ard Biesheuvel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox