• Sam Protsenko's avatar
    tty: serial: samsung: Fix console registration from module · 8cf8d3c4
    Sam Protsenko authored
    
    
    On modern Exynos SoCs (like Exynos850) the UART can be implemented as a
    part of USI IP-core. In such case, USI driver is used to initialize USI
    registers, and it also calls of_platform_populate() to instantiate all
    sub-nodes (e.g. serial node) of USI node. When serial driver is
    built-in, but USI driver is a module, and CONFIG_SERIAL_SAMSUNG_CONSOLE
    is enabled, next call chain will happen when loading USI module from
    user space:
    
        usi_init
          v
        usi_probe
          v
        of_platform_populate
          v
        s3c24xx_serial_probe
          v
        uart_add_one_port
          v
        uart_configure_port
          v
        register_console
          v
        try_enable_new_console
          v
        s3c24xx_serial_console_setup
    
    But because the serial driver is built-in, and
    s3c24xx_serial_console_setup() is marked with __init keyword, that
    symbol will discarded and long gone by that time already, causing failed
    paging request.
    
    That happens during the next config combination:
    
        EXYNOS_USI=m
        SERIAL_SAMSUNG=y
        SERIAL_SAMSUNG_CONSOLE=y
    
    That config should be completely possible, so rather than limiting
    SERIAL_SAMSUNG choice to "m" only when USI=m, remove __init keyword for
    all affected functions.
    Signed-off-by: default avatarSam Protsenko <semen.protsenko@linaro.org>
    Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Link: https://lore.kernel.org/r/20211204195757.8600-6-semen.protsenko@linaro.org
    
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8cf8d3c4
samsung_tty.c 76 KB