• Tom Parker's avatar
    Blackfin arch: fix bug - Error if one serial has hardware flow control and the other doesn't · 97d4b35f
    Tom Parker authored
    I have a system where UART0 is configured with hardware flow control, but UART1
    doesn't have it enabled. Attempting to access UART1 in this configuration
    results in the following error in dmesg:
    
    <3>bfin-gpio: GPIO 0 is already reserved as Peripheral by bfin-uart !
    <5>Stack from 0082bc7c:
    <5>        0082bc88 00404dd6 00000003 00000000 0054051e 004079da 0082bcb4
    00000000
    <5>        00000003 00000000 0052686c 0113f2a0 005fa3f0 00000032 20515249
    00003035
    <5>        00427228 00526e50 0113f2e0 005fa3f0 00000032 0113f2e0 0054b748
    0000ffff
    <5>        22222222 22222222 004e1628 00427304 00000000 00000032 00000023
    0054b748
    <5>        00487a94 0054b7e8 0054b748 0000000b 00487fb8 0054b748 0054b748
    00000001
    <5>        0000000a 005fa3f0 009d4fe8 0101e3c0 0054b748 005fa3f0 0050b134
    0054b748
    <5>
    <5>Call Trace:
    <4>[<00485c16>] _uart_startup+0x56/0x178
    <4>[<004865c8>] _uart_open+0x40/0x3e0
    <4>[<0048661c>] _uart_open+0x94/0x3e0
    <4>[<0047f1ce>] _init_dev+0x1fa/0x450
    <4>[<004e1628>] ___mutex_unlock_slowpath+0x30/0xe8
    <4>[<004815da>] _tty_open+0xf6/0x21c
    <4>[<0043dab0>] ___path_lookup_intent_open+0x34/0x7c
    <4>[<004375e4>] _chrdev_open+0x7c/0x134
    <4>[<0043dc2c>] _open_namei+0x60/0x568
    <4>[<00433fa2>] ___dentry_open+0x9e/0x188
    <4>[<00437568>] _chrdev_open+0x0/0x134
    <4>[<0043410c>] _nameidata_to_filp+0x30/0x3c
    <4>[<00434152>] _do_filp_open+0x3a/0x44
    <4>[<00408826>] _task_running_tick+0x102/0x278
    <4>[<0043418e>] _do_sys_open+0x32/0xac
    <4>[<0043ede4>] _sys_ioctl+0x28/0x50
    <4>[<0043edbc>] _sys_ioctl+0x0/0x50
    <4>[<00434224>] _sys_open+0x18/0x20
    <4>[<0043420c>] _sys_open+0x0/0x20
    <4>[<00418174>] _sys_setuid+0x0/0xc8
    
    This is because the #ifdef's in bfin_serial_5xx.h are messed up. More
    specifically, they add/remove the uart_{rts,cts}_pin fields in
    bfin_serial_resources based on whether the particular port has rts/cts enabled,
    as opposed to when either port has it enabled.
    
    This patch fixed this.
    Signed-off-by: default avatarTom Parker <blackfin@tevp.net>
    Signed-off-by: default avatarSonic Zhang <sonic.zhang@analog.com>
    Signed-off-by: default avatarBryan Wu <cooloney@kernel.org>
    97d4b35f
bfin_serial_5xx.h 5.51 KB