Patch "ARM: 9046/1: decompressor: Do not clear SCTLR.nTLSMD for ARMv7+ cores" has been added to the 5.11-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ARM: 9046/1: decompressor: Do not clear SCTLR.nTLSMD for ARMv7+ cores

to the 5.11-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     arm-9046-1-decompressor-do-not-clear-sctlr.ntlsmd-fo.patch
and it can be found in the queue-5.11 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit fc9b24eaaa85fab4b7718ac6a1e7795c2b2306fa
Author: Vladimir Murzin <vladimir.murzin@xxxxxxx>
Date:   Thu Jan 7 10:47:24 2021 +0100

    ARM: 9046/1: decompressor: Do not clear SCTLR.nTLSMD for ARMv7+ cores
    
    [ Upstream commit 2acb909750431030b65a0a2a17fd8afcbd813a84 ]
    
    It was observed that decompressor running on hardware implementing ARM v8.2
    Load/Store Multiple Atomicity and Ordering Control (LSMAOC), say, as guest,
    would stuck just after:
    
    Uncompressing Linux... done, booting the kernel.
    
    The reason is that it clears nTLSMD bit when disabling caches:
    
      nTLSMD, bit [3]
    
      When ARMv8.2-LSMAOC is implemented:
    
        No Trap Load Multiple and Store Multiple to
        Device-nGRE/Device-nGnRE/Device-nGnRnE memory.
    
        0b0 All memory accesses by A32 and T32 Load Multiple and Store
            Multiple at EL1 or EL0 that are marked at stage 1 as
            Device-nGRE/Device-nGnRE/Device-nGnRnE memory are trapped and
            generate a stage 1 Alignment fault.
    
        0b1 All memory accesses by A32 and T32 Load Multiple and Store
            Multiple at EL1 or EL0 that are marked at stage 1 as
            Device-nGRE/Device-nGnRE/Device-nGnRnE memory are not trapped.
    
      This bit is permitted to be cached in a TLB.
    
      This field resets to 1.
    
      Otherwise:
    
      Reserved, RES1
    
    So as effect we start getting traps we are not quite ready for.
    
    Looking into history it seems that mask used for SCTLR clear came from
    the similar code for ARMv4, where bit[3] is the enable/disable bit for
    the write buffer. That not applicable to ARMv7 and onwards, so retire
    that bit from the masks.
    
    Fixes: 7d09e85448dfa78e3e58186c934449aaf6d49b50 ("[ARM] 4393/2: ARMv7: Add uncompressing code for the new CPU Id format")
    Signed-off-by: Vladimir Murzin <vladimir.murzin@xxxxxxx>
    Signed-off-by: Russell King <rmk+kernel@xxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index d9cce7238a365..73eee41826e2d 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -1164,9 +1164,9 @@ __armv4_mmu_cache_off:
 __armv7_mmu_cache_off:
 		mrc	p15, 0, r0, c1, c0
 #ifdef CONFIG_MMU
-		bic	r0, r0, #0x000d
+		bic	r0, r0, #0x0005
 #else
-		bic	r0, r0, #0x000c
+		bic	r0, r0, #0x0004
 #endif
 		mcr	p15, 0, r0, c1, c0	@ turn MMU and cache off
 		mov	r0, #0



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux