Message ID | 87siizad3v.fsf@free.fr (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tuesday 07 October 2014 21:33:56 Robert Jarzmik wrote: > Arnd Bergmann <arnd@arndb.de> writes: > > > > Can't you just define CONFIG_DEBUG_UART_VIRT outside of the existing > > mappings? It doesn't have to use the same mapping as PERIPH_PHYS. > > > > Arnd > Yep, that looks better. > Would something like that be appropriate ? I tested that on pxa27x, but not on > pxa25x, even if there seems to be no reason it wouldn't work for it too ... > > And I have not yet thought over if there is any impact on vmalloc memory or if > the double virtual mapping can trigger something bad. Ah, you mean doing it now? That would work too. I was thinking of reverting the patch for now and fixing it properly later, but your patch also looks simple enough that we could probably just do it. > ---<8--- > From 93239cf3015997d45fec8fee97059758cac1fab3 Mon Sep 17 00:00:00 2001 > From: Robert Jarzmik <robert.jarzmik@free.fr> > Date: Tue, 7 Oct 2014 21:18:14 +0200 > Subject: [PATCH] ARM: pxa: fix hang on startup with DEBUG_LL > > The commit 2111667b4677 ("ARM: pxa: call debug_ll_io_init for > earlyprintk") triggers in the current kernel the attached backtrace on > PXA/tosa early in the boot time when DEBUG_LL is enabled. > > It is due to overlap between uart virtual memory defined in > DEBUG_UART_VIRT and mapped by debug_ll_io_init() and peripheral bus > mapped by pxa_map_io at the same address, 0xf2100000. > > As hinted by Arnd, map early virtual memory for low level debug on > address 0xf6200000, even if that means 2 virtual mappings will give > access to the pxa internal UARTs (FFUART, BTUART, STUART, ...). Acked-by: Arnd Bergmann <arnd@arndb.de> > ------------[ cut here ]------------ > kernel BUG at /home/lumag/linux/mm/vmalloc.c:1143! > Internal error: Oops - BUG: 0 [#1] PREEMPT ARM > Modules linked in: > CPU: 0 PID: 0 Comm: swapper Not tainted 3.17.0-00032-g8e0d202-dirty #23 > task: c062a5a8 ti: c0620000 task.ti: c0620000 > PC is at vm_area_add_early+0x54/0x84 > LR is at add_static_vm_early+0xc/0x60 > pc : [<c03e1100>] lr : [<c03d9ef4>] psr: 800001d3 > sp : c0621f04 ip : c03efa74 fp : c03edf84 > r10: c0637e98 r9 : 40000001 r8 : c03da57c > r7 : c3ffcfb0 r6 : 00000000 r5 : c3ffcfb0 r4 : 02000000 > r3 : c3ffcfd8 r2 : f2100000 r1 : f4000000 r0 : c3ffcfb0 > Flags: Nzcv IRQs off FIQs off Mode SVC_32 ISA ARM Segment kernel > Control: 00007977 Table: a0004000 DAC: 00000017 > Process swapper (pid: 0, stack limit = 0xc06201c8) > Stack: (0xc0621f04 to 0xc0622000) > 1f00: c3ffcfd8 40000001 c3ffcfd8 c03ee08c c03da570 c03db90c c0637d24 > 1f20: 00000000 c03ec7cc c066e654 a0700000 000a0700 c03db914 c03db90c c03daf84 > 1f40: 00000000 000a0000 c0000000 c03ec7cc 000a0700 c0700000 ffff1000 000a3fff > 1f60: 00001000 00000007 00000000 c03ec7cc c0008000 c03ed748 c0621fd4 c03d5d18 > 1f80: 69052d00 a03ec48c 00000000 c03d8ad0 0000006c 00007977 c036c6e8 00000001 > 1fa0: c0621fd4 c03ed744 c0628000 a0004000 69052d00 a03ec48c 00000000 c03d68d4 > 1fc0: 00000000 00000000 00000000 00000000 00000000 c03ed748 c0649894 c062801c > 1fe0: c03ed744 c062b2f0 a0004000 69052d00 a03ec48c a0008040 00000000 00000000 > [<c03e1100>] (vm_area_add_early) from [<c03d9ef4>] (add_static_vm_early+0xc/0x60) > [<c03d9ef4>] (add_static_vm_early) from [<c03da570>] (iotable_init.part.6+0xa8/0xb4) > [<c03da570>] (iotable_init.part.6) from [<c03db914>] (pxa25x_map_io+0x8/0x24) > [<c03db914>] (pxa25x_map_io) from [<c03daf84>] (paging_init+0x744/0x8d8) > [<c03daf84>] (paging_init) from [<c03d8ad0>] (setup_arch+0x354/0x608) > [<c03d8ad0>] (setup_arch) from [<c03d68d4>] (start_kernel+0xa8/0x3dc) > [<c03d68d4>] (start_kernel) from [<a0008040>] (0xa0008040) > Code: e5904008 e0811004 e1520001 2a000005 (e7f001f2) > ---[ end trace f24b6c88ae00fa9a ]--- > Kernel panic - not syncing: Attempted to kill the idle task! > ---[ end Kernel panic - not syncing: Attempted to kill the idle task! > > Cc: <stable@vger.kernel.org> > Reported-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> > Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Arnd Bergmann <arnd@arndb.de> writes: > Ah, you mean doing it now? That would work too. > > I was thinking of reverting the patch for now and fixing it properly later, > but your patch also looks simple enough that we could probably just do it. > ...zip... > Acked-by: Arnd Bergmann <arnd@arndb.de> Andrew, Dmitry, A small test would be welcome, as I don't have a pxa25x board, and my board doesn't have an available UART for debugging anyway. If I have no news in the next week I'll consider it fixes the problem, and we'll move forward. Cheers. -- Robert
On Sun, Oct 12, 2014 at 03:37:09PM +0200, Robert Jarzmik wrote: > A small test would be welcome, as I don't have a pxa25x board, and my board > doesn't have an available UART for debugging anyway. I should be able to give it a test on a pxa270 board in the next 24 hours or so but I don't have any pxa25x boards to test with. Cheers, Andy
Andrew Ruder <andrew.ruder@elecsyscorp.com> writes: > On Sun, Oct 12, 2014 at 03:37:09PM +0200, Robert Jarzmik wrote: >> A small test would be welcome, as I don't have a pxa25x board, and my board >> doesn't have an available UART for debugging anyway. > > I should be able to give it a test on a pxa270 board in the next 24 > hours or so but I don't have any pxa25x boards to test with. Queued to pxa/fixes. Cheers.
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index b11ad54..2f78e54 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -1142,7 +1142,7 @@ config DEBUG_UART_VIRT default 0xf1c28000 if DEBUG_SUNXI_UART0 default 0xf1c28400 if DEBUG_SUNXI_UART1 default 0xf1f02800 if DEBUG_SUNXI_R_UART - default 0xf2100000 if DEBUG_PXA_UART1 + default 0xf6200000 if DEBUG_PXA_UART1 default 0xf4090000 if ARCH_LPC32XX default 0xf4200000 if ARCH_GEMINI default 0xf7000000 if DEBUG_S3C24XX_UART && (DEBUG_S3C_UART0 || \ diff --git a/arch/arm/mach-pxa/include/mach/addr-map.h b/arch/arm/mach-pxa/include/mach/addr-map.h index bbf9df3..d28fe29 100644 --- a/arch/arm/mach-pxa/include/mach/addr-map.h +++ b/arch/arm/mach-pxa/include/mach/addr-map.h @@ -39,6 +39,11 @@ #define DMEMC_SIZE 0x00100000 /* + * Reserved space for low level debug virtual addresses within + * 0xf6200000..0xf6201000 + */ + +/* * Internal Memory Controller (PXA27x and later) */ #define IMEMC_PHYS 0x58000000