On 15/12/11 14:02, Pawel Moll wrote: > This patch adds support for RS1 memory map based Versatile Express > motherboard. > [...] > --- a/arch/arm/mach-vexpress/include/mach/debug-macro.S > +++ b/arch/arm/mach-vexpress/include/mach/debug-macro.S > @@ -10,12 +10,41 @@ > * published by the Free Software Foundation. > */ > > -#define DEBUG_LL_UART_OFFSET 0x00009000 > +#define DEBUG_LL_PHYS_BASE 0x10000000 > +#define DEBUG_LL_UART_OFFSET 0x00009000 > + > +#define DEBUG_LL_PHYS_BASE_RS1 0x1c000000 > +#define DEBUG_LL_UART_OFFSET_RS1 0x00090000 > + > +#define DEBUG_LL_VIRT_BASE 0xf8000000 > > .macro addruart,rp,rv,tmp > - mov \rp, #DEBUG_LL_UART_OFFSET > - orr \rv, \rp, #0xf8000000 @ virtual base > - orr \rp, \rp, #0x10000000 @ physical base > + > + @ Check the MMU state > +#if defined(CONFIG_MMU) > + mrc p15, 0, \tmp, c1, c0 @ SCTRL > + tst \tmp, #1 @ MMU enabled? > + moveq \tmp, #DEBUG_LL_PHYS_BASE > + movne \tmp, #DEBUG_LL_VIRT_BASE > +#else > + mov \tmp, #DEBUG_LL_PHYS_BASE > +#endif > + > + @ PL011 present in "original" place? > + orr \tmp, \tmp, #DEBUG_LL_UART_OFFSET > + ldr \tmp, [\tmp, #0xfe0] @ PeriphID0
This doesn't work with CONFIG_EARLY_PRINTK=y on a system with the RS1 memory map. __create_page_tables has only mapped the single physical page at 0x1c090000 and thus the test for the UART in the other memory map faults. I made it work with this hack, but I'm not sure what the correct solution would be. diff --git a/arch/arm/mach-vexpress/include/mach/debug-macro.S b/arch/arm/mach-vexpress/include/mach/debug-macro.S index 8010ff9..af443b4 100644 --- a/arch/arm/mach-vexpress/include/mach/debug-macro.S +++ b/arch/arm/mach-vexpress/include/mach/debug-macro.S @@ -30,6 +30,7 @@ mov \tmp, #DEBUG_LL_PHYS_BASE #endif +#if 0 @ PL011 present in "original" place? orr \tmp, \tmp, #DEBUG_LL_UART_OFFSET ldr \tmp, [\tmp, #0xfe0] @ PeriphID0 @@ -39,11 +40,12 @@ moveq \rp, #DEBUG_LL_UART_OFFSET orreq \rv, \rp, #DEBUG_LL_VIRT_BASE orreq \rp, \rp, #DEBUG_LL_PHYS_BASE +#endif - @ RS1 memory map - movne \rp, #DEBUG_LL_UART_OFFSET_RS1 - orrne \rv, \rp, #DEBUG_LL_VIRT_BASE - orrne \rp, \rp, #DEBUG_LL_PHYS_BASE_RS1 + @ RS1 memory map + mov \rp, #DEBUG_LL_UART_OFFSET_RS1 + mov \rv, \rp, #DEBUG_LL_VIRT_BASE + orr \rp, \rp, #DEBUG_LL_PHYS_BASE_RS1 .endm > + teq \tmp, #0x11 @ PL011 > + > + @ Original memory map > + moveq \rp, #DEBUG_LL_UART_OFFSET > + orreq \rv, \rp, #DEBUG_LL_VIRT_BASE > + orreq \rp, \rp, #DEBUG_LL_PHYS_BASE > + > + @ RS1 memory map > + movne \rp, #DEBUG_LL_UART_OFFSET_RS1 > + orrne \rv, \rp, #DEBUG_LL_VIRT_BASE > + orrne \rp, \rp, #DEBUG_LL_PHYS_BASE_RS1 > + > .endm > > #include <asm/hardware/debug-pl01x.S> David _______________________________________________ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss