1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
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 <linux/module.h>
#include <linux/ioport.h>
#include <linux/init.h>
@@ -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);
}
|