Skip to content
  • Timur Tabi's avatar
    tty: pl011: fix initialization order of QDF2400 E44 · 37ef38f3
    Timur Tabi authored
    The work-around for Qualcomm Technologies QDF2400 Erratum 44 hinges on a
    global variable defined in the pl011 driver.  The ACPI SPCR parsing code
    determines whether the work-around is needed, and if so, it changes the
    console name from "pl011" to "qdf2400_e44".  The expectation is that
    the pl011 driver will implement the work-around when it sees the console
    name.  The global variable qdf2400_e44_present is set when that happens.
    
    The problem is that work-around needs to be enabled when the pl011
    driver probes, not when the console name is queried.  However, sbsa_probe()
    is called before pl011_console_match().  The work-around appeared to work
    previously because the default console on QDF2400 platforms was always
    ttyAMA1.  The first time sbsa_probe() is called (for ttyAMA0),
    qdf2400_e44_present is still false.  Then pl011_console_match() is called,
    and it sets qdf2400_e44_present to true.  All subsequent calls to
    sbsa_probe() enable the work-around.
    
    The solution is to move the global variable into spcr.c and let the
    pl011 driver query it during probe time.  This works because all QDF2400
    platforms require SPCR, so parse_spcr() will always be called.
    pl011_console_match still checks for the "qdf2400_e44" console name,
    but it doesn't do anything else special.
    
    Fixes: 5a0722b8
    
     ("tty: pl011: use "qdf2400_e44" as the earlycon name for QDF2400 E44")
    Tested-by: default avatarJeffrey Hugo <jhugo@codeaurora.org>
    Signed-off-by: default avatarTimur Tabi <timur@codeaurora.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    37ef38f3