ARM: uniphier: fix ROM boot mode for PH1-sLD3
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Wed, 10 Aug 2016 07:08:40 +0000 (16:08 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Thu, 11 Aug 2016 08:49:14 +0000 (17:49 +0900)
Commit 4b50369fb535 ("ARM: uniphier: create early page table at
run-time") broke the ROM boot mode for PH1-sLD3 SoC, because the
run-time page table creation requires the outer cache register
access but the page table in the sLD3 Boot ROM does not straight-map
virtual/physical addresses.

The idea here is to check the current page table to determine if
it is a straight map table.  If not, adjust the outer cache register
base.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
arch/arm/mach-uniphier/arm32/lowlevel_init.S

index 2be95058b3347773f93a7f0b92557458697516d0..b0c94ad01e25c29f865a4aeaefc4a638f4f0a1b1 100644 (file)
@@ -99,6 +99,11 @@ ENDPROC(enable_mmu)
 
 ENTRY(setup_init_ram)
        ldr     r1, = SSCO_BASE
+       mrc     p15, 0, r0, c2, c0, 0   @ TTBR0
+       ldr     r0, [r0, #0x400]        @ entry for virtual address 0x100*****
+       bfc     r0, #0, #20
+       cmp     r0, #0x50000000         @ is sLD3 page table?
+       biceq   r1, r1, #0xc0000000     @ sLD3 ROM maps 0x5******* to 0x1*******
 
        /* Touch to zero for the boot way */
 0:     ldr     r0, = 0x00408006        @ touch to zero with address range