mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
arm64: mte: initialize RGSR_EL1.SEED in __cpu_setup
commit37a8024d26upstream. A valid implementation choice for the ChooseRandomNonExcludedTag() pseudocode function used by IRG is to behave in the same way as with GCR_EL1.RRND=0. This would mean that RGSR_EL1.SEED is used as an LFSR which must have a non-zero value in order for IRG to properly produce pseudorandom numbers. However, RGSR_EL1 is reset to an UNKNOWN value on soft reset and thus may reset to 0. Therefore we must initialize RGSR_EL1.SEED to a non-zero value in order to ensure that IRG behaves as expected. Signed-off-by: Peter Collingbourne <pcc@google.com> Fixes:3b714d24ef("arm64: mte: CPU feature detection and initial sysreg configuration") Cc: <stable@vger.kernel.org> # 5.10 Link: https://linux-review.googlesource.com/id/I2b089b6c7d6f17ee37e2f0db7df5ad5bcc04526c Acked-by: Mark Rutland <mark.rutland@arm.com> Link: https://lore.kernel.org/r/20210507185905.1745402-1-pcc@google.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
70748bba55
commit
d3bab7cbad
@@ -444,6 +444,18 @@ SYM_FUNC_START(__cpu_setup)
|
|||||||
mov x10, #(SYS_GCR_EL1_RRND | SYS_GCR_EL1_EXCL_MASK)
|
mov x10, #(SYS_GCR_EL1_RRND | SYS_GCR_EL1_EXCL_MASK)
|
||||||
msr_s SYS_GCR_EL1, x10
|
msr_s SYS_GCR_EL1, x10
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If GCR_EL1.RRND=1 is implemented the same way as RRND=0, then
|
||||||
|
* RGSR_EL1.SEED must be non-zero for IRG to produce
|
||||||
|
* pseudorandom numbers. As RGSR_EL1 is UNKNOWN out of reset, we
|
||||||
|
* must initialize it.
|
||||||
|
*/
|
||||||
|
mrs x10, CNTVCT_EL0
|
||||||
|
ands x10, x10, #SYS_RGSR_EL1_SEED_MASK
|
||||||
|
csinc x10, x10, xzr, ne
|
||||||
|
lsl x10, x10, #SYS_RGSR_EL1_SEED_SHIFT
|
||||||
|
msr_s SYS_RGSR_EL1, x10
|
||||||
|
|
||||||
/* clear any pending tag check faults in TFSR*_EL1 */
|
/* clear any pending tag check faults in TFSR*_EL1 */
|
||||||
msr_s SYS_TFSR_EL1, xzr
|
msr_s SYS_TFSR_EL1, xzr
|
||||||
msr_s SYS_TFSRE0_EL1, xzr
|
msr_s SYS_TFSRE0_EL1, xzr
|
||||||
|
|||||||
Reference in New Issue
Block a user