Commit 40dc948f authored by Max Filippov's avatar Max Filippov

xtensa: fix boot parameters address translation

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: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent 0773495b
...@@ -88,9 +88,12 @@ _SetupMMU: ...@@ -88,9 +88,12 @@ _SetupMMU:
initialize_mmu initialize_mmu
#if defined(CONFIG_MMU) && XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY #if defined(CONFIG_MMU) && XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY
rsr a2, excsave1 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 bgeu a2, a3, 1f
movi a3, 0xd0000000 movi a3, XCHAL_KSEG_CACHED_VADDR
add a2, a2, a3 add a2, a2, a3
wsr a2, excsave1 wsr a2, excsave1
1: 1:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment