diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2018-11-13 23:46:42 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-11-21 09:27:41 +0100 |
commit | bf6ae42ce4aea5089f74d4eea84fbe271e67e55d (patch) | |
tree | be6b3dc36b22da7fb53e8c66decc89ff772bf4b5 | |
parent | fdc26b9d183c1c3ea4769e139a54bdf2aad6ecf4 (diff) | |
download | linux-stable-bf6ae42ce4aea5089f74d4eea84fbe271e67e55d.tar.gz linux-stable-bf6ae42ce4aea5089f74d4eea84fbe271e67e55d.tar.bz2 linux-stable-bf6ae42ce4aea5089f74d4eea84fbe271e67e55d.zip |
xtensa: fix boot parameters address translation
commit 40dc948f234b73497c3278875eb08a01d5854d3f upstream.
The bootloader may pass physical address of the boot parameters structure
to the MMUv3 kernel in the register a2. Code in the _SetupMMU block in
the arch/xtensa/kernel/head.S is supposed to map that physical address to
the virtual address in the configured virtual memory layout.
This code haven't been updated when additional 256+256 and 512+512
memory layouts were introduced and it may produce wrong addresses when
used with these layouts.
Cc: stable@vger.kernel.org
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | arch/xtensa/kernel/head.S | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/xtensa/kernel/head.S b/arch/xtensa/kernel/head.S index 05e1df943856..c7b3bedbfffe 100644 --- a/arch/xtensa/kernel/head.S +++ b/arch/xtensa/kernel/head.S @@ -88,9 +88,12 @@ _SetupMMU: initialize_mmu #if defined(CONFIG_MMU) && XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY rsr a2, excsave1 - movi a3, 0x08000000 + movi a3, XCHAL_KSEG_PADDR + bltu a2, a3, 1f + sub a2, a2, a3 + movi a3, XCHAL_KSEG_SIZE bgeu a2, a3, 1f - movi a3, 0xd0000000 + movi a3, XCHAL_KSEG_CACHED_VADDR add a2, a2, a3 wsr a2, excsave1 1: |