Hi! > > ...hardware should be identical. 3.5.3-nemo kernel seems to work on > > both. 4.13-rc2 with display and clock patches boots on phone "S", but > > does not on phone "P"; nothing nothing is received on serial port. > > > > There is some difference in the bootloaders: S's bootloader provides > > lots of debug info, P's is silent. R&D settings do _not_ have > > influence on bootloader. We know P's serial works, as 3.5.3 kernel > > prints "Uncompressing linux...booting" there. > > > > I'll need to return "S" phone and serial cable tommorow. If you have > > any ideas, let me know. > > If you get nothing out of the uart, chances are the pins are > not muxed for the uart in nolo and maybe kernel dts is missing the > pinctrl entries for uart? Ok. With patch below, I get: [ 4.770965] Booting... Uncompressing Linux... done, booting the kernel. [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 4.13.0-rc2-12806-g7603303-dirty (pavel@duo) (gcc version 4.7.2 (GCC)) #7 ... on "S" machine. (But still nothing on "P" machine). 3.5.3 does have to set up pinmux for debug printing somewhere, right? Where can I copy that from? Thanks, Pavel commit 5dc1c6ea8f20b6480e01c24710514434c00d53f8 Author: Pavel <pavel@xxxxxx> Date: Thu Oct 26 10:42:06 2017 +0200 Add debugging hacks. In particular, Uncompressing Linux.... done, booting... is now printed. diff --git a/.config b/.config index 40aaa5e..60750b3 100644 --- a/.config +++ b/.config @@ -2534,10 +2534,29 @@ CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y # CONFIG_ARM_PTDUMP is not set # CONFIG_ARM_UNWIND is not set # CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_LL is not set -CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_OMAP2UART1 is not set +# CONFIG_DEBUG_OMAP2UART2 is not set +# CONFIG_DEBUG_OMAP2UART3 is not set +CONFIG_DEBUG_OMAP3UART3=y +# CONFIG_DEBUG_OMAP4UART3 is not set +# CONFIG_DEBUG_OMAP3UART4 is not set +# CONFIG_DEBUG_OMAP4UART4 is not set +# CONFIG_DEBUG_TI81XXUART1 is not set +# CONFIG_DEBUG_TI81XXUART2 is not set +# CONFIG_DEBUG_TI81XXUART3 is not set +# CONFIG_DEBUG_AM33XXUART1 is not set +# CONFIG_DEBUG_ZOOM_UART is not set +# CONFIG_DEBUG_ICEDCC is not set +# CONFIG_DEBUG_SEMIHOSTING is not set +# CONFIG_DEBUG_LL_UART_8250 is not set +# CONFIG_DEBUG_LL_UART_PL01X is not set +CONFIG_DEBUG_OMAP2PLUS_UART=y +CONFIG_DEBUG_LL_INCLUDE="debug/omap2plus.S" # CONFIG_DEBUG_UART_8250 is not set +CONFIG_DEBUG_UNCOMPRESS=y CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" +CONFIG_EARLY_PRINTK=y # CONFIG_PID_IN_CONTEXTIDR is not set # CONFIG_CORESIGHT is not set diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 447629d..0f50439 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -1736,7 +1736,7 @@ config DEBUG_UART_8250_FLOW_CONTROL config DEBUG_UNCOMPRESS bool depends on ARCH_MULTIPLATFORM || PLAT_SAMSUNG || ARM_SINGLE_ARMV7M - default y if DEBUG_LL && !DEBUG_OMAP2PLUS_UART && \ + default y if DEBUG_LL && (!DEBUG_OMAP2PLUS_UART || !ZROM_BOOT) && \ (!DEBUG_TEGRA_UART || !ZBOOT_ROM) && \ !DEBUG_BRCMSTB_UART help diff --git a/arch/arm/include/debug/omap2plus.S b/arch/arm/include/debug/omap2plus.S index 6d867ae..3684e04 100644 --- a/arch/arm/include/debug/omap2plus.S +++ b/arch/arm/include/debug/omap2plus.S @@ -58,12 +58,17 @@ #define UART_OFFSET(addr) ((addr) & 0x00ffffff) +#if defined(ZIMAGE) + omap_uart_phys: .word 0 + omap_uart_virt: .word 0 + omap_uart_lsr: .word 0 +#else .pushsection .data -omap_uart_phys: .word 0 -omap_uart_virt: .word 0 -omap_uart_lsr: .word 0 + omap_uart_phys: .word 0 + omap_uart_virt: .word 0 + omap_uart_lsr: .word 0 .popsection - +#endif .macro addruart, rp, rv, tmp /* Use omap_uart_phys/virt if already configured */ diff --git a/arch/arm/include/debug/uncompress.h b/arch/arm/include/debug/uncompress.h index 0e2949b..f660c51 100644 --- a/arch/arm/include/debug/uncompress.h +++ b/arch/arm/include/debug/uncompress.h @@ -1,7 +1,109 @@ -#ifdef CONFIG_DEBUG_UNCOMPRESS -extern void putc(int c); -#else -static inline void putc(int c) {} -#endif -static inline void flush(void) {} -static inline void arch_decomp_setup(void) {} +/* + * arch/arm/plat-omap/include/mach/uncompress.h + * + * Serial port stubs for kernel decompress status messages + * + * Initially based on: + * linux-2.4.15-rmk1-dsplinux1.6/arch/arm/plat-omap/include/mach1510/uncompress.h + * Copyright (C) 2000 RidgeRun, Inc. + * Author: Greg Lonnon <glonnon@xxxxxxxxxxxx> + * + * Rewritten by: + * Author: <source@xxxxxxxxxx> + * 2004 (c) MontaVista Software, Inc. + * + * This file is licensed under the terms of the GNU General Public License + * version 2. This program is licensed "as is" without any warranty of any + * kind, whether express or implied. + */ + +#include <linux/types.h> +#include <linux/serial_reg.h> + +#include <asm/memory.h> +#include <asm/mach-types.h> + +//#include <mach/serial.h> + +#define OMAP_UART_INFO_OFS 0x3ffc + +#define MDR1_MODE_MASK 0x07 + +volatile u8 *uart_base; +int uart_shift; + +/* + * Store the DEBUG_LL uart number into memory. + * See also debug-macro.S, and serial.c for related code. + */ +static void set_omap_uart_info(unsigned char port) +{ + /* + * Get address of some.bss variable and round it down + * a la CONFIG_AUTO_ZRELADDR. + */ + u32 ram_start = (u32)&uart_shift & 0xf8000000; + u32 *uart_info = (u32 *)(ram_start + OMAP_UART_INFO_OFS); + *uart_info = port; +} + +static inline void putc(int c) +{ + if (!uart_base) + return; + + /* Check for UART 16x mode */ + if ((uart_base[UART_OMAP_MDR1 << uart_shift] & MDR1_MODE_MASK) != 0) + return; + + while (!(uart_base[UART_LSR << uart_shift] & UART_LSR_THRE)) + barrier(); + uart_base[UART_TX << uart_shift] = c; +} + +static inline void flush(void) +{ +} + +/* + * Macros to configure UART1 and debug UART + */ +#define _DEBUG_LL_ENTRY(mach, dbg_uart, dbg_shft, dbg_id) \ + if (1) { \ + uart_base = (volatile u8 *)(dbg_uart); \ + uart_shift = (dbg_shft); \ + port = (dbg_id); \ + set_omap_uart_info(port); \ + break; \ + } + +#define DEBUG_LL_OMAP7XX(p, mach) \ + _DEBUG_LL_ENTRY(mach, OMAP1_UART##p##_BASE, OMAP7XX_PORT_SHIFT, \ + OMAP1UART##p) + +#define DEBUG_LL_OMAP1(p, mach) \ + _DEBUG_LL_ENTRY(mach, OMAP1_UART##p##_BASE, OMAP_PORT_SHIFT, \ + OMAP1UART##p) + +#define DEBUG_LL_OMAP3(p, mach) \ + _DEBUG_LL_ENTRY(mach, OMAP3_UART##p##_BASE, OMAP_PORT_SHIFT, \ + OMAP3UART##p) + +#define OMAP3_UART3_BASE 0x49020000 +#define OMAP_PORT_SHIFT 2 +#define OMAP3UART3 33 + +static inline void arch_decomp_setup(void) +{ + int port = 0; + + /* + * Initialize the port based on the machine ID from the bootloader. + * Note that we're using macros here instead of switch statement + * as machine_is functions are optimized out for the boards that + * are not selected. + */ + do { + DEBUG_LL_OMAP3(3, nokia_rm680); + } while (0); +} diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c index 484cdad..7d3e635 100644 --- a/arch/arm/mach-omap2/common.c +++ b/arch/arm/mach-omap2/common.c @@ -14,6 +14,7 @@ */ #include <linux/kernel.h> #include <linux/init.h> +#include <linux/gpio.h> #include "common.h" #include "omap-secure.h" @@ -32,3 +33,20 @@ void __init omap_reserve(void) omap_secure_ram_reserve_memblock(); omap_barrier_reserve_memblock(); } + +void iam_alive(void) +{ + int i; + int debug_gpio = 92; + printk("request: %d\n", gpio_request(debug_gpio, "debug")); + printk("output: %d\n", gpio_direction_output(debug_gpio, 1)); + + for (i=0; i<5; i++) { + gpio_set_value(debug_gpio, 0); + msleep(1000); + gpio_set_value(debug_gpio, 1); + msleep(1000); + } + +} + diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c index 0b77a01..97b59e0 100644 --- a/arch/arm/mach-omap2/dma.c +++ b/arch/arm/mach-omap2/dma.c @@ -118,6 +118,10 @@ static void omap2_show_dma_caps(void) u8 revision = dma_read(REVISION, 0) & 0xff; printk(KERN_INFO "OMAP DMA hardware revision %d.%d\n", revision >> 4, revision & 0xf); + { + extern void iam_alive(void); + iam_alive(); + } } static unsigned configure_dma_errata(void) -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Attachment:
signature.asc
Description: Digital signature