• John Ogness's avatar
    tty: serial: sh-sci: use setup() callback for early console · ff707dfd
    John Ogness authored
    When setting up the early console, the setup() callback of the
    regular console is used. It is called manually before registering
    the early console instead of providing a setup() callback for the
    early console. This is probably because the early setup needs a
    different @options during the early stage.
    
    The issue here is that the setup() callback is called without the
    console_list_lock held and functions such as uart_set_options()
    expect that.
    
    Rather than manually calling the setup() function before registering,
    provide an early console setup() callback that will use the different
    early options. This ensures that the error checking, ordering, and
    locking context when setting up the early console are correct.
    
    Since this early console can only be registered via the earlyprintk=
    parameter, the @options argument of the setup() callback will always
    be NULL. Rather than simply ignoring the argument, add a WARN_ON()
    to get our attention in case the setup() callback semantics should
    change in the future.
    
    Note that technically the current implementation works because it is
    only used in early boot. And since the early console setup is
    performed before registering, it cannot race with anything and thus
    does not need any locking. However, longterm maintenance is easier
    when drivers rely on the subsystem API rather than manually
    implementing steps that could cause breakage in the future.
    Signed-off-by: default avatarJohn Ogness <john.ogness@linutronix.de>
    Reviewed-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Link: https://lore.kernel.org/r/20221116162152.193147-41-john.ogness@linutronix.de
    ff707dfd
sh-sci.c 84.5 KB