aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/serial/bfin_5xx.c
diff options
context:
space:
mode:
authorMike Frysinger <michael.frysinger@analog.com>2007-08-05 04:48:08 -0400
committerBryan Wu <bryan.wu@analog.com>2007-08-05 04:48:08 -0400
commitbbf275f092b1b2a9bc8a504500ec387f9ddff859 (patch)
treef1f5874c918e538edb880b60bf45c0d3735c8533 /drivers/serial/bfin_5xx.c
parent85a75996edd0e49477cc7c9eb4bac33f02b07685 (diff)
Blackfin serial driver: pending a unique anomaly id, tie the break flood issue to ANOMALY_05000230
pending a unique anomaly id, tie the break flood issue to ANOMALY_05000230 as when that was fixed, the fallout also fixed the break flood Signed-off-by: Mike Frysinger <michael.frysinger@analog.com> Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Diffstat (limited to 'drivers/serial/bfin_5xx.c')
-rw-r--r--drivers/serial/bfin_5xx.c43
1 files changed, 21 insertions, 22 deletions
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 3f39e1814693..6f475b609864 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -231,12 +231,10 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
231{ 231{
232 struct tty_struct *tty = uart->port.info->tty; 232 struct tty_struct *tty = uart->port.info->tty;
233 unsigned int status, ch, flg; 233 unsigned int status, ch, flg;
234 static int in_break = 0;
234#ifdef CONFIG_KGDB_UART 235#ifdef CONFIG_KGDB_UART
235 struct pt_regs *regs = get_irq_regs(); 236 struct pt_regs *regs = get_irq_regs();
236#endif 237#endif
237#ifdef BF533_FAMILY
238 static int in_break = 0;
239#endif
240 238
241 status = UART_GET_LSR(uart); 239 status = UART_GET_LSR(uart);
242 ch = UART_GET_CHAR(uart); 240 ch = UART_GET_CHAR(uart);
@@ -262,29 +260,30 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
262 } 260 }
263 } 261 }
264#endif 262#endif
265 263
266#ifdef BF533_FAMILY 264 if (ANOMALY_05000230) {
267 /* The BF533 family of processors have a nice misbehavior where 265 /* The BF533 family of processors have a nice misbehavior where
268 * they continuously generate characters for a "single" break. 266 * they continuously generate characters for a "single" break.
269 * We have to basically ignore this flood until the "next" valid 267 * We have to basically ignore this flood until the "next" valid
270 * character comes across. All other Blackfin families operate 268 * character comes across. All other Blackfin families operate
271 * properly though. 269 * properly though.
272 */ 270 * Note: While Anomaly 05000230 does not directly address this,
273 if (in_break) { 271 * the changes that went in for it also fixed this issue.
274 if (ch != 0) { 272 */
275 in_break = 0; 273 if (in_break) {
276 ch = UART_GET_CHAR(uart); 274 if (ch != 0) {
277 if (bfin_revid() < 5) 275 in_break = 0;
276 ch = UART_GET_CHAR(uart);
277 if (bfin_revid() < 5)
278 return;
279 } else
278 return; 280 return;
279 } else 281 }
280 return;
281 } 282 }
282#endif
283 283
284 if (status & BI) { 284 if (status & BI) {
285#ifdef BF533_FAMILY 285 if (ANOMALY_05000230)
286 in_break = 1; 286 in_break = 1;
287#endif
288 uart->port.icount.brk++; 287 uart->port.icount.brk++;
289 if (uart_handle_break(&uart->port)) 288 if (uart_handle_break(&uart->port))
290 goto ignore_char; 289 goto ignore_char;