• Julien BLACHE's avatar
    [SERIAL] IP22: fix serial console hangs · c65b15cf
    Julien BLACHE authored
    The patch below fixes serial console hangs as seen on IP22
    machines. Typically, while booting, the machine hangs for ~1 minute
    displaying "INIT: ", then the same thing happens again when init
    enters in the designated runlevel and finally the getty process on
    ttyS0 hangs indefinitely (though strace'ing it helps).
    
    strace (-e raw=ioctl, otherwise the ioctl() translation is utterly
    bogus) reveals that getty hangs on ioctl() 0x540f which happens to be
    TCSETSW (I saw it hang on another console ioctl() but couldn't
    reproduce that one).
    
    A diff between ip22zilog and sunzilog revealed the following
    differences:
     1. the channel A flag being set on up.port.flags instead of up.flags
     2. the channel A flag being set on what is marked as being channel B
     3. sunzilog has a call to uart_update_timeout(port, termios->c_cflag, baud);
        at the end of sunzilog_set_termios(), which ip22zilog lacks (on
        purpose ?)
    
    The patch below addresses point 1 and fixes the serial console hangs
    just fine. However point 2 should be investigated by someone familiar
    with the IP22 Zilog; it's probably OK as is but even if it is, a
    comment in ip22zilog.c is badly needed.
    
    Point 3 is left as an exercise for whoever feels like digging into
    ip22zilog :)
    
    These are the main obvious differences between ip22zilog and
    sunzilog. Newer versions of sunzilog (Linus's git tree as of today)
    are more close to ip22zilog as the sbus_{write,read}b have been
    changed into simple {write,read}b, which shrinks the diff by a fair
    amount. Resyncing both drivers should be doable in a few hours time
    now for someone familiar with the IP22 Zilog hardware.
    Signed-off-by: default avatarJulien BLACHE <jb@jblache.org>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    c65b15cf
ip22zilog.c 31.7 KB