mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-01-10 20:28:59 +00:00
s5pc1xx: serial: fix the error check logic
Because of Frame error, Parity error and Overrun error are occured only receive operation, need to masking when error checking. Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
This commit is contained in:
parent
2888223720
commit
78b06d63e2
1 changed files with 16 additions and 6 deletions
|
@ -98,14 +98,24 @@ int serial_init_dev(const int dev_index)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int serial_err_check(const int dev_index)
|
||||
static int serial_err_check(const int dev_index, int op)
|
||||
{
|
||||
struct s5pc1xx_uart *const uart = s5pc1xx_get_base_uart(dev_index);
|
||||
unsigned int mask;
|
||||
|
||||
if (readl(&uart->uerstat) & 0xf)
|
||||
return 1;
|
||||
/*
|
||||
* UERSTAT
|
||||
* Break Detect [3]
|
||||
* Frame Err [2] : receive operation
|
||||
* Parity Err [1] : receive operation
|
||||
* Overrun Err [0] : receive operation
|
||||
*/
|
||||
if (op)
|
||||
mask = 0x8;
|
||||
else
|
||||
mask = 0xf;
|
||||
|
||||
return 0;
|
||||
return readl(&uart->uerstat) & mask;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -119,7 +129,7 @@ int serial_getc_dev(const int dev_index)
|
|||
|
||||
/* wait for character to arrive */
|
||||
while (!(readl(&uart->utrstat) & 0x1)) {
|
||||
if (serial_err_check(dev_index))
|
||||
if (serial_err_check(dev_index, 0))
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -135,7 +145,7 @@ void serial_putc_dev(const char c, const int dev_index)
|
|||
|
||||
/* wait for room in the tx FIFO */
|
||||
while (!(readl(&uart->utrstat) & 0x2)) {
|
||||
if (serial_err_check(dev_index))
|
||||
if (serial_err_check(dev_index, 1))
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue