Message ID | 20180201160435.3010-1-ard.biesheuvel@linaro.org |
---|---|
Headers | show |
Series | Platform/Cello, Overdrive: upgrade firmware for Spectre | expand |
The ARM Trusted Firmware build we have been using up until now was built
with optimizations disabled (which means every variable manipulation
involves a load, the operation itself and a store), and runs with the
MMU disabled, making it needlessly slow.
This appears to be due to the fact that
a) the page tables are not set up correctly, so not all memory can be
accessed from EL3
b) the handling of SMC service calls does not take into account that
these calls may be made with the MMU off (e.g., by UEFI PEI).
These issues have been fixed in the source code, which should hopefully
remove any performance bottlenecks that may become more noticeable now
that we are going to call into the secure firmware more often to perform
Spectre variant 2 mitigations, which have been backported as well.
So update the binary image to a RELEASE build that was created with
optimizations enabled, and has the above fixes incorporated.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
Silicon/AMD/Styx/ArmTrustedFirmware.bin | Bin 75344 -> 34320 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/Silicon/AMD/Styx/ArmTrustedFirmware.bin b/Silicon/AMD/Styx/ArmTrustedFirmware.bin
index 9278e32a2dd9230e4f0220a530a94fce5780ee9a..67b2ccb3605788ed2000b61068abc777e4295e29 100644
GIT binary patch
literal 34320
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
literal 75344
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%0D0)jX|$pXU~@A2;K8C!7J`PRi6otxcB5Gnc#<}
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
Hs>i<oT>MG(
--
2.11.0
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
On Thu, Feb 01, 2018 at 04:04:33PM +0000, Ard Biesheuvel wrote: > This is the edk2-non-osi part of the Overdrive/Cello changes to implement > the new SMC Calling Convention version 1.1 in ARM Trusted Firmware. Some > improvements were made along the way, i.e., to use a release build with > optimization enabled, and to fix issues that were preventing EL3 from > running with the MMU off. > > A edk2-platform counterpart series will follow shortly. > > Ard Biesheuvel (2): > Platform/Cello,Overdrive: split SCP and secure AP firmware > Silicon/AMD/Styx: update ArmTrustedFirmware.bin For the series: Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org> > Platform/AMD/OverdriveBoard/{PreUefiFirmware.bin => ScpFirmware.bin} | Bin 393216 -> 310016 bytes > Platform/LeMaker/CelloBoard/{PreUefiFirmware.bin => ScpFirmware.bin} | Bin 393216 -> 307968 bytes > Silicon/AMD/Styx/ArmTrustedFirmware.bin | Bin 0 -> 34320 bytes > 3 files changed, 0 insertions(+), 0 deletions(-) > rename Platform/AMD/OverdriveBoard/{PreUefiFirmware.bin => ScpFirmware.bin} (78%) > rename Platform/LeMaker/CelloBoard/{PreUefiFirmware.bin => ScpFirmware.bin} (78%) > create mode 100644 Silicon/AMD/Styx/ArmTrustedFirmware.bin > > -- > 2.11.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
On 1 February 2018 at 16:04, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > The ARM Trusted Firmware build we have been using up until now was built > with optimizations disabled (which means every variable manipulation > involves a load, the operation itself and a store), and runs with the > MMU disabled, making it needlessly slow. > > This appears to be due to the fact that > a) the page tables are not set up correctly, so not all memory can be > accessed from EL3 > b) the handling of SMC service calls does not take into account that > these calls may be made with the MMU off (e.g., by UEFI PEI). > > These issues have been fixed in the source code, which should hopefully > remove any performance bottlenecks that may become more noticeable now > that we are going to call into the secure firmware more often to perform > Spectre variant 2 mitigations, which have been backported as well. > > So update the binary image to a RELEASE build that was created with > optimizations enabled, and has the above fixes incorporated. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > --- > Silicon/AMD/Styx/ArmTrustedFirmware.bin | Bin 75344 -> 34320 bytes > 1 file changed, 0 insertions(+), 0 deletions(-) > Note to Marc: this is the exact image I shared with you as bl31.bin-release earlier today, so if that works as expected, could you report back here please? Thanks. _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
On 01/02/18 16:42, Ard Biesheuvel wrote: > On 1 February 2018 at 16:04, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: >> The ARM Trusted Firmware build we have been using up until now was built >> with optimizations disabled (which means every variable manipulation >> involves a load, the operation itself and a store), and runs with the >> MMU disabled, making it needlessly slow. >> >> This appears to be due to the fact that >> a) the page tables are not set up correctly, so not all memory can be >> accessed from EL3 >> b) the handling of SMC service calls does not take into account that >> these calls may be made with the MMU off (e.g., by UEFI PEI). >> >> These issues have been fixed in the source code, which should hopefully >> remove any performance bottlenecks that may become more noticeable now >> that we are going to call into the secure firmware more often to perform >> Spectre variant 2 mitigations, which have been backported as well. >> >> So update the binary image to a RELEASE build that was created with >> optimizations enabled, and has the above fixes incorporated. >> >> Contributed-under: TianoCore Contribution Agreement 1.1 >> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> >> --- >> Silicon/AMD/Styx/ArmTrustedFirmware.bin | Bin 75344 -> 34320 bytes >> 1 file changed, 0 insertions(+), 0 deletions(-) >> > > Note to Marc: this is the exact image I shared with you as > bl31.bin-release earlier today, so if that works as expected, could > you report back here please? Thanks. Absolutely. I'll give it a shot at the weekend (or earlier if I can). Thanks, M. -- Jazz is not dead. It just smells funny... _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
On Thu, 1 Feb 2018 16:42:53 +0000 Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > On 1 February 2018 at 16:04, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > > The ARM Trusted Firmware build we have been using up until now was built > > with optimizations disabled (which means every variable manipulation > > involves a load, the operation itself and a store), and runs with the > > MMU disabled, making it needlessly slow. > > > > This appears to be due to the fact that > > a) the page tables are not set up correctly, so not all memory can be > > accessed from EL3 > > b) the handling of SMC service calls does not take into account that > > these calls may be made with the MMU off (e.g., by UEFI PEI). > > > > These issues have been fixed in the source code, which should hopefully > > remove any performance bottlenecks that may become more noticeable now > > that we are going to call into the secure firmware more often to perform > > Spectre variant 2 mitigations, which have been backported as well. > > > > So update the binary image to a RELEASE build that was created with > > optimizations enabled, and has the above fixes incorporated. > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > > --- > > Silicon/AMD/Styx/ArmTrustedFirmware.bin | Bin 75344 -> 34320 bytes > > 1 file changed, 0 insertions(+), 0 deletions(-) > > > > Note to Marc: this is the exact image I shared with you as > bl31.bin-release earlier today, so if that works as expected, could > you report back here please? Thanks. To confirm, this firmware boots perfectly on Cello, and the new SMCCC 1.1 is now reported by the kernel (with in-flight patches): [ 0.000000] psci: probing for conduit method from DT. [ 0.000000] psci: PSCIv1.0 detected in firmware. [ 0.000000] psci: Using standard PSCI v0.2 function IDs [ 0.000000] psci: MIGRATE_INFO_TYPE not supported. [ 0.000000] psci: SMC Calling Convention v1.1 as well as ARM_SMCCC_ARCH_WORKAROUND_1, allowing for efficient mitigation of Spectre v2. I guess we have quite a few Seattle/Overdrive and OD1000 that now need this to be deployed. Thanks a lot Ard! M. -- Without deviation from the norm, progress is not possible. _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
On 3 February 2018 at 14:44, Marc Zyngier <marc.zyngier@arm.com> wrote: > On Thu, 1 Feb 2018 16:42:53 +0000 > Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > >> On 1 February 2018 at 16:04, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: >> > The ARM Trusted Firmware build we have been using up until now was built >> > with optimizations disabled (which means every variable manipulation >> > involves a load, the operation itself and a store), and runs with the >> > MMU disabled, making it needlessly slow. >> > >> > This appears to be due to the fact that >> > a) the page tables are not set up correctly, so not all memory can be >> > accessed from EL3 >> > b) the handling of SMC service calls does not take into account that >> > these calls may be made with the MMU off (e.g., by UEFI PEI). >> > >> > These issues have been fixed in the source code, which should hopefully >> > remove any performance bottlenecks that may become more noticeable now >> > that we are going to call into the secure firmware more often to perform >> > Spectre variant 2 mitigations, which have been backported as well. >> > >> > So update the binary image to a RELEASE build that was created with >> > optimizations enabled, and has the above fixes incorporated. >> > >> > Contributed-under: TianoCore Contribution Agreement 1.1 >> > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> >> > --- >> > Silicon/AMD/Styx/ArmTrustedFirmware.bin | Bin 75344 -> 34320 bytes >> > 1 file changed, 0 insertions(+), 0 deletions(-) >> > >> >> Note to Marc: this is the exact image I shared with you as >> bl31.bin-release earlier today, so if that works as expected, could >> you report back here please? Thanks. > > To confirm, this firmware boots perfectly on Cello, and the new SMCCC > 1.1 is now reported by the kernel (with in-flight patches): > > [ 0.000000] psci: probing for conduit method from DT. > [ 0.000000] psci: PSCIv1.0 detected in firmware. > [ 0.000000] psci: Using standard PSCI v0.2 function IDs > [ 0.000000] psci: MIGRATE_INFO_TYPE not supported. > [ 0.000000] psci: SMC Calling Convention v1.1 > > as well as ARM_SMCCC_ARCH_WORKAROUND_1, allowing for efficient > mitigation of Spectre v2. I guess we have quite a few Seattle/Overdrive > and OD1000 that now need this to be deployed. > > Thanks a lot Ard! > Liekwise. Let me know if you need help upgrading those Overdrive systems. _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
On 1 February 2018 at 16:39, Leif Lindholm <leif.lindholm@linaro.org> wrote: > On Thu, Feb 01, 2018 at 04:04:33PM +0000, Ard Biesheuvel wrote: >> This is the edk2-non-osi part of the Overdrive/Cello changes to implement >> the new SMC Calling Convention version 1.1 in ARM Trusted Firmware. Some >> improvements were made along the way, i.e., to use a release build with >> optimization enabled, and to fix issues that were preventing EL3 from >> running with the MMU off. >> >> A edk2-platform counterpart series will follow shortly. >> >> Ard Biesheuvel (2): >> Platform/Cello,Overdrive: split SCP and secure AP firmware >> Silicon/AMD/Styx: update ArmTrustedFirmware.bin > > For the series: > Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org> > Thanks. I pushed these with Marc's T-b _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel