Work around some errata in the pxa serial code (copied from motorolas 2.4.x tree) diff -Nru --exclude-from=/sunbeam/home/laforge/scripts/dontdiff linux-2.6.16.5/drivers/serial/pxa.c linux-2.6.16.5-exz/drivers/serial/pxa.c --- linux-2.6.16.5/drivers/serial/pxa.c 2006-04-12 22:27:57.000000000 +0200 +++ linux-2.6.16.5-exz/drivers/serial/pxa.c 2006-04-17 13:03:02.000000000 +0200 @@ -30,6 +30,10 @@ #define SUPPORT_SYSRQ #endif +#define pxa_buggy_port(x) ({ \ + int cpu_ver; asm("mrc%? p15, 0, %0, c0, c0" : "=r" (cpu_ver)); \ + ((x) == PORT_PXA && (cpu_ver & ~1) == 0x69052100); }) + #include #include #include @@ -205,6 +209,8 @@ if (!(up->ier & UART_IER_THRI)) { up->ier |= UART_IER_THRI; serial_out(up, UART_IER, up->ier); + if (pxa_buggy_port(up->port.type)) + serial_pxa_irq(up->port.irq, NULL, NULL); } } @@ -302,6 +308,9 @@ mcr |= up->mcr; + if (pxa_buggy_port(up->port.type) && up->port.irq != 0) + mcr ^= UART_MCR_OUT2; + serial_out(up, UART_MCR, mcr); }