• Stephen Warren's avatar
    spi: tegra: fix hang in set_mode() · 4832c7f5
    Stephen Warren authored
    In tegra20_slink.c, the set_mode() function may be executed before the
    SPI bus is claimed the first time, and hence the clocks to the SPI
    controller may not be running. If so, any register read/write at this
    time will hang the CPU. Fix this by ensuring the clock is running as soon
    as the driver is probed. This is observed on the Tegra30 Beaver board.
    
    Apply the same clock initialization fix to all other Tegra SPI drivers so
    that if set_mode() is ever implemented there, the same bug will not appear.
    Note that tegra114_spi.c already operates in this fashion.
    
    The clock manipulation code is copied from claim_bus() to probe() rather
    than moved. This ensures that any calls to set_speed() take effect; the
    clock can't be set once during probe and left unchanged.
    
    Fixes: 5cb1b7b3 ("spi: tegra20: Add support for mode selection")
    Cc: Mirza Krak <mirza.krak@hostmobility.com>
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
    Signed-off-by: default avatarTom Warren <twarren@nvidia.com>
    4832c7f5
tegra20_slink.c 10.1 KB