• S
    omap: serial: Fix the boot-up crash/reboot without CONFIG_PM · a1b04cc1
    Santosh Shilimkar 提交于
    The omap2plus_defconfig doesn't boot up when built with CONFIG_PM
    disabled on the latest linux-omap master. Below are the observations
    1. OMAP3 reboots in the middle of boot
    --------------------------------------------------
    [    0.000000] Calibrating delay loop... 494.72 BogoMIPS (lpj=1933312)
    [    0.000000] pid_max: default: 32768 minimum: 301
    [    0.000000] Security Framework initialized
    [    0.000000] Mount-cache hash table entries: 512
    [    0.000000] CPU: Testing write buffer coherency: ok
    [    0.000000] Brought up 1 CPUs
    [    0.000000] SMP: Total of 1 processors activated (494.72 BogoMIPS).
    [    0.000000] regulator: core version 0.5
    [    0.000000] NET: Registered protocol family 16
    
    U-Boot 1.1.4 (Feb 11 2009 - 16:10:23)
    
    OMAP3430-GP rev 2, CPU-OPP2 L3-165MHz
    TI 3430SDP 1.0 Version + mDDR (Boot NOR)
    DRAM:  128 MB
    Flash: 128 MB
    NAND:128 MiB
    --------------------------------------------------
    
    2. OMAP4 does a kernel PANIC
    -------------------------------------
    [    0.000000] Calibrating delay loop... 1195.29 BogoMIPS (lpj=4669440)
    [    0.000000] pid_max: default: 32768 minimum: 301
    [    0.000000] Security Framework initialized
    [    0.000000] Mount-cache hash table entries: 512
    [    0.000000] CPU: Testing write buffer coherency: ok
    [    0.000000] L310 cache controller enabled
    [    0.000000] l2x0: 16 ways, CACHE_ID 0x410000c2, AUX_CTRL 0x0e050000
    [    0.000000] CPU1: Booted secondary processor
    [    0.000000] Brought up 2 CPUs
    [    0.000000] SMP: Total of 2 processors activated (2395.78 BogoMIPS).
    [    0.000000] regulator: core version 0.5
    [    0.000000] NET: Registered protocol family 16
    [    0.000000] mux: Could not set signal i2c2_scl.i2c2_scl
    [    0.000000] mux: Could not set signal i2c2_sda.i2c2_sda
    [    0.000000] mux: Could not set signal i2c3_scl.i2c3_scl
    [    0.000000] mux: Could not set signal i2c3_sda.i2c3_sda
    [    0.000000] mux: Could not set signal i2c4_scl.i2c4_scl
    [    0.000000] mux: Could not set signal i2c4_sda.i2c4_sda
    -------------------------------------
    
    This is happening because 'omap_serial_init()' is hanging in the boot.
    On OMAP3 the watchdog is generating reboot because devices_init doesn't
    happens where as on OMAP4 it just hangs without reboot.
    The uart clock is not getting enabled after omap_device_idle as part
    of omap_serial_init.
    The omap_device_idle(will disable the clock) then omap_uart_block_sleep()
    should enable clock back disabled during the boot up phase.
    But omap_uart_block_sleep() stuffed version is binded only under
    CONFIG_PM and other version is just empty. Hence it is not enabling
    clock back as expected
    
    This patch adds uart clock enable code to omap_uart_block_sleep() function
    built with CONFIG_PM disabled.
    Thanks to Charulatha and Govindraj for their help on this debug.
    Signed-off-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
    Signed-off-by: NCharulatha V <charu@ti.com>
    Signed-off-by: NGovindraj.R <govindraj.raja@ti.com>
    Acked-by: NKevin Hilman <khilman@deeprootsystems.com>
    Signed-off-by: NTony Lindgren <tony@atomide.com>
    a1b04cc1
serial.c 20.9 KB