summaryrefslogtreecommitdiff
path: root/target/ag241/patches/ar7.patch
blob: 7fe9f03c0586a127977ee68353872e278a0bbb1e (plain)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
diff -Nur linux-2.6.33.1.orig/arch/mips/ar7/platform.c linux-2.6.33.1/arch/mips/ar7/platform.c
--- linux-2.6.33.1.orig/arch/mips/ar7/platform.c	2010-03-15 17:09:39.000000000 +0100
+++ linux-2.6.33.1/arch/mips/ar7/platform.c	2010-03-28 19:26:53.000000000 +0200
@@ -509,7 +509,7 @@
 
 	memset(uart_port, 0, sizeof(struct uart_port) * 2);
 
-	uart_port[0].type = PORT_16550A;
+	uart_port[0].type = PORT_AR7;
 	uart_port[0].line = 0;
 	uart_port[0].irq = AR7_IRQ_UART0;
 	uart_port[0].uartclk = ar7_bus_freq() / 2;
@@ -524,7 +524,7 @@
 
 	/* Only TNETD73xx have a second serial port */
 	if (ar7_has_second_uart()) {
-		uart_port[1].type = PORT_16550A;
+		uart_port[1].type = PORT_AR7;
 		uart_port[1].line = 1;
 		uart_port[1].irq = AR7_IRQ_UART1;
 		uart_port[1].uartclk = ar7_bus_freq() / 2;
diff -Nur linux-2.6.33.1.orig/arch/mips/ar7/prom.c linux-2.6.33.1/arch/mips/ar7/prom.c
--- linux-2.6.33.1.orig/arch/mips/ar7/prom.c	2010-03-15 17:09:39.000000000 +0100
+++ linux-2.6.33.1/arch/mips/ar7/prom.c	2010-03-28 19:26:53.000000000 +0200
@@ -219,6 +219,14 @@
 	if (strstr(prom_getcmdline(), "console="))
 		return;
 
+#ifdef CONFIG_KGDB
+	if (!strstr(prom_getcmdline(), "nokgdb")) {
+		strcat(prom_getcmdline(), " console=kgdb");
+		kgdb_enabled = 1;
+		return;
+	}
+#endif
+
 	s = prom_getenv("modetty0");
 	if (s) {
 		baud = simple_strtoul(s, &p, 10);
diff -Nur linux-2.6.33.1.orig/arch/mips/include/asm/page.h linux-2.6.33.1/arch/mips/include/asm/page.h
--- linux-2.6.33.1.orig/arch/mips/include/asm/page.h	2010-03-15 17:09:39.000000000 +0100
+++ linux-2.6.33.1/arch/mips/include/asm/page.h	2010-03-28 19:26:53.000000000 +0200
@@ -200,8 +200,11 @@
 #define VM_DATA_DEFAULT_FLAGS	(VM_READ | VM_WRITE | VM_EXEC | \
 				 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
 
-#define UNCAC_ADDR(addr)	((addr) - PAGE_OFFSET + UNCAC_BASE)
-#define CAC_ADDR(addr)		((addr) - UNCAC_BASE + PAGE_OFFSET)
+#define UNCAC_ADDR(addr)       ((addr) - PAGE_OFFSET + UNCAC_BASE +    \
+                                PHYS_OFFSET)
+#define CAC_ADDR(addr)         ((addr) - UNCAC_BASE + PAGE_OFFSET -    \
+                                PHYS_OFFSET)
+
 
 #include <asm-generic/memory_model.h>
 #include <asm-generic/getorder.h>
diff -Nur linux-2.6.33.1.orig/arch/mips/Kconfig linux-2.6.33.1/arch/mips/Kconfig
--- linux-2.6.33.1.orig/arch/mips/Kconfig	2010-03-15 17:09:39.000000000 +0100
+++ linux-2.6.33.1/arch/mips/Kconfig	2010-03-28 19:26:53.000000000 +0200
@@ -34,7 +34,6 @@
 	select CEVT_R4K
 	select CSRC_R4K
 	select IRQ_CPU
-	select NO_EXCEPT_FILL
 	select SWAP_IO_SPACE
 	select SYS_HAS_CPU_MIPS32_R1
 	select SYS_HAS_EARLY_PRINTK
diff -Nur linux-2.6.33.1.orig/arch/mips/kernel/traps.c linux-2.6.33.1/arch/mips/kernel/traps.c
--- linux-2.6.33.1.orig/arch/mips/kernel/traps.c	2010-03-15 17:09:39.000000000 +0100
+++ linux-2.6.33.1/arch/mips/kernel/traps.c	2010-03-28 19:26:53.000000000 +0200
@@ -1283,9 +1283,22 @@
 
 	exception_handlers[n] = handler;
 	if (n == 0 && cpu_has_divec) {
-		*(u32 *)(ebase + 0x200) = 0x08000000 |
-					  (0x03ffffff & (handler >> 2));
-		local_flush_icache_range(ebase + 0x200, ebase + 0x204);
+              if ((handler ^ (ebase + 4)) & 0xfc000000) {
+                      /* lui k0, 0x0000 */
+                      *(u32 *)(ebase + 0x200) = 0x3c1a0000 | (handler >> 16);
+                      /* ori k0, 0x0000 */
+                      *(u32 *)(ebase + 0x204) =
+                                      0x375a0000 | (handler & 0xffff);
+                      /* jr k0 */
+                      *(u32 *)(ebase + 0x208) = 0x03400008;
+                      /* nop */
+                      *(u32 *)(ebase + 0x20C) = 0x00000000;
+                      flush_icache_range(ebase + 0x200, ebase + 0x210);
+              } else {
+                      *(u32 *)(ebase + 0x200) =
+                              0x08000000 | (0x03ffffff & (handler >> 2));
+                      flush_icache_range(ebase + 0x200, ebase + 0x204);
+              }
 	}
 	return (void *)old_handler;
 }
diff -Nur linux-2.6.33.1.orig/drivers/mtd/ar7part.c linux-2.6.33.1/drivers/mtd/ar7part.c
--- linux-2.6.33.1.orig/drivers/mtd/ar7part.c	2010-03-15 17:09:39.000000000 +0100
+++ linux-2.6.33.1/drivers/mtd/ar7part.c	2010-03-28 19:26:53.000000000 +0200
@@ -28,7 +28,7 @@
 #include <linux/bootmem.h>
 #include <linux/magic.h>
 
-#define AR7_PARTS	4
+#define AR7_PARTS	5
 #define ROOT_OFFSET	0xe0000
 
 #define LOADER_MAGIC1	le32_to_cpu(0xfeedfa42)
@@ -122,14 +122,19 @@
 
 	ar7_parts[2].name = "linux";
 	ar7_parts[2].offset = pre_size;
-	ar7_parts[2].size = master->size - pre_size - post_size;
+	ar7_parts[2].size = master->size - pre_size - post_size - 2*master->erasesize;
 	ar7_parts[2].mask_flags = 0;
 
 	ar7_parts[3].name = "rootfs";
 	ar7_parts[3].offset = root_offset;
-	ar7_parts[3].size = master->size - root_offset - post_size;
+	ar7_parts[3].size = master->size - root_offset - post_size - 2*master->erasesize;
 	ar7_parts[3].mask_flags = 0;
 
+	ar7_parts[4].name = "cfgfs";
+	ar7_parts[4].offset = master->size - 2*master->erasesize;
+	ar7_parts[4].size = 2*master->erasesize;
+	ar7_parts[4].mask_flags = 0;
+
 	*pparts = ar7_parts;
 	return AR7_PARTS;
 }
diff -Nur linux-2.6.33.1.orig/drivers/mtd/maps/physmap.c linux-2.6.33.1/drivers/mtd/maps/physmap.c
--- linux-2.6.33.1.orig/drivers/mtd/maps/physmap.c	2010-03-15 17:09:39.000000000 +0100
+++ linux-2.6.33.1/drivers/mtd/maps/physmap.c	2010-03-28 19:26:53.000000000 +0200
@@ -79,7 +79,7 @@
 					"map_rom",
 					NULL };
 #ifdef CONFIG_MTD_PARTITIONS
-static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", NULL };
+static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", "ar7part", NULL };
 #endif
 
 static int physmap_flash_probe(struct platform_device *dev)
diff -Nur linux-2.6.33.1.orig/drivers/serial/8250.c linux-2.6.33.1/drivers/serial/8250.c
--- linux-2.6.33.1.orig/drivers/serial/8250.c	2010-03-15 17:09:39.000000000 +0100
+++ linux-2.6.33.1/drivers/serial/8250.c	2010-03-28 19:26:53.000000000 +0200
@@ -2715,7 +2715,11 @@
 {
 	struct uart_8250_port *up = (struct uart_8250_port *)port;
 
+#ifdef CONFIG_AR7
+	wait_for_xmitr(up, BOTH_EMPTY);
+#else
 	wait_for_xmitr(up, UART_LSR_THRE);
+#endif
 	serial_out(up, UART_TX, ch);
 }