aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mn10300
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mn10300')
-rw-r--r--arch/mn10300/boot/compressed/misc.c37
-rw-r--r--arch/mn10300/kernel/gdb-stub.c108
-rw-r--r--arch/mn10300/kernel/mn10300-serial.c2
-rw-r--r--arch/mn10300/mm/init.c6
-rw-r--r--arch/mn10300/mm/pgtable.c27
5 files changed, 50 insertions, 130 deletions
diff --git a/arch/mn10300/boot/compressed/misc.c b/arch/mn10300/boot/compressed/misc.c
index ded207efc97a..f673383518e4 100644
--- a/arch/mn10300/boot/compressed/misc.c
+++ b/arch/mn10300/boot/compressed/misc.c
@@ -153,26 +153,9 @@ static uch *output_data;
153static unsigned long output_ptr; 153static unsigned long output_ptr;
154 154
155 155
156static void *malloc(int size);
157
158static inline void free(void *where)
159{ /* Don't care */
160}
161
162static unsigned long free_mem_ptr = (unsigned long) &end; 156static unsigned long free_mem_ptr = (unsigned long) &end;
163static unsigned long free_mem_end_ptr = (unsigned long) &end + 0x90000; 157static unsigned long free_mem_end_ptr = (unsigned long) &end + 0x90000;
164 158
165static inline void gzip_mark(void **ptr)
166{
167 kputs(".");
168 *ptr = (void *) free_mem_ptr;
169}
170
171static inline void gzip_release(void **ptr)
172{
173 free_mem_ptr = (unsigned long) *ptr;
174}
175
176#define INPLACE_MOVE_ROUTINE 0x1000 159#define INPLACE_MOVE_ROUTINE 0x1000
177#define LOW_BUFFER_START 0x2000 160#define LOW_BUFFER_START 0x2000
178#define LOW_BUFFER_END 0x90000 161#define LOW_BUFFER_END 0x90000
@@ -186,26 +169,6 @@ static int lines, cols;
186 169
187#include "../../../../lib/inflate.c" 170#include "../../../../lib/inflate.c"
188 171
189static void *malloc(int size)
190{
191 void *p;
192
193 if (size < 0)
194 error("Malloc error\n");
195 if (!free_mem_ptr)
196 error("Memory error\n");
197
198 free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
199
200 p = (void *) free_mem_ptr;
201 free_mem_ptr += size;
202
203 if (free_mem_ptr >= free_mem_end_ptr)
204 error("\nOut of memory\n");
205
206 return p;
207}
208
209static inline void scroll(void) 172static inline void scroll(void)
210{ 173{
211 int i; 174 int i;
diff --git a/arch/mn10300/kernel/gdb-stub.c b/arch/mn10300/kernel/gdb-stub.c
index 21891c71d549..54be6afb5555 100644
--- a/arch/mn10300/kernel/gdb-stub.c
+++ b/arch/mn10300/kernel/gdb-stub.c
@@ -163,8 +163,6 @@ static char input_buffer[BUFMAX];
163static char output_buffer[BUFMAX]; 163static char output_buffer[BUFMAX];
164static char trans_buffer[BUFMAX]; 164static char trans_buffer[BUFMAX];
165 165
166static const char hexchars[] = "0123456789abcdef";
167
168struct gdbstub_bkpt { 166struct gdbstub_bkpt {
169 u8 *addr; /* address of breakpoint */ 167 u8 *addr; /* address of breakpoint */
170 u8 len; /* size of breakpoint */ 168 u8 len; /* size of breakpoint */
@@ -363,8 +361,8 @@ static int putpacket(char *buffer)
363 } 361 }
364 362
365 gdbstub_io_tx_char('#'); 363 gdbstub_io_tx_char('#');
366 gdbstub_io_tx_char(hexchars[checksum >> 4]); 364 gdbstub_io_tx_char(hex_asc_hi(checksum));
367 gdbstub_io_tx_char(hexchars[checksum & 0xf]); 365 gdbstub_io_tx_char(hex_asc_lo(checksum));
368 366
369 } while (gdbstub_io_rx_char(&ch, 0), 367 } while (gdbstub_io_rx_char(&ch, 0),
370 ch == '-' && (gdbstub_io("### GDB Rx NAK\n"), 0), 368 ch == '-' && (gdbstub_io("### GDB Rx NAK\n"), 0),
@@ -822,8 +820,7 @@ unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fault)
822 if ((u32) mem & 1 && count >= 1) { 820 if ((u32) mem & 1 && count >= 1) {
823 if (gdbstub_read_byte(mem, ch) != 0) 821 if (gdbstub_read_byte(mem, ch) != 0)
824 return 0; 822 return 0;
825 *buf++ = hexchars[ch[0] >> 4]; 823 buf = pack_hex_byte(buf, ch[0]);
826 *buf++ = hexchars[ch[0] & 0xf];
827 mem++; 824 mem++;
828 count--; 825 count--;
829 } 826 }
@@ -831,10 +828,8 @@ unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fault)
831 if ((u32) mem & 3 && count >= 2) { 828 if ((u32) mem & 3 && count >= 2) {
832 if (gdbstub_read_word(mem, ch) != 0) 829 if (gdbstub_read_word(mem, ch) != 0)
833 return 0; 830 return 0;
834 *buf++ = hexchars[ch[0] >> 4]; 831 buf = pack_hex_byte(buf, ch[0]);
835 *buf++ = hexchars[ch[0] & 0xf]; 832 buf = pack_hex_byte(buf, ch[1]);
836 *buf++ = hexchars[ch[1] >> 4];
837 *buf++ = hexchars[ch[1] & 0xf];
838 mem += 2; 833 mem += 2;
839 count -= 2; 834 count -= 2;
840 } 835 }
@@ -842,14 +837,10 @@ unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fault)
842 while (count >= 4) { 837 while (count >= 4) {
843 if (gdbstub_read_dword(mem, ch) != 0) 838 if (gdbstub_read_dword(mem, ch) != 0)
844 return 0; 839 return 0;
845 *buf++ = hexchars[ch[0] >> 4]; 840 buf = pack_hex_byte(buf, ch[0]);
846 *buf++ = hexchars[ch[0] & 0xf]; 841 buf = pack_hex_byte(buf, ch[1]);
847 *buf++ = hexchars[ch[1] >> 4]; 842 buf = pack_hex_byte(buf, ch[2]);
848 *buf++ = hexchars[ch[1] & 0xf]; 843 buf = pack_hex_byte(buf, ch[3]);
849 *buf++ = hexchars[ch[2] >> 4];
850 *buf++ = hexchars[ch[2] & 0xf];
851 *buf++ = hexchars[ch[3] >> 4];
852 *buf++ = hexchars[ch[3] & 0xf];
853 mem += 4; 844 mem += 4;
854 count -= 4; 845 count -= 4;
855 } 846 }
@@ -857,10 +848,8 @@ unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fault)
857 if (count >= 2) { 848 if (count >= 2) {
858 if (gdbstub_read_word(mem, ch) != 0) 849 if (gdbstub_read_word(mem, ch) != 0)
859 return 0; 850 return 0;
860 *buf++ = hexchars[ch[0] >> 4]; 851 buf = pack_hex_byte(buf, ch[0]);
861 *buf++ = hexchars[ch[0] & 0xf]; 852 buf = pack_hex_byte(buf, ch[1]);
862 *buf++ = hexchars[ch[1] >> 4];
863 *buf++ = hexchars[ch[1] & 0xf];
864 mem += 2; 853 mem += 2;
865 count -= 2; 854 count -= 2;
866 } 855 }
@@ -868,8 +857,7 @@ unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fault)
868 if (count >= 1) { 857 if (count >= 1) {
869 if (gdbstub_read_byte(mem, ch) != 0) 858 if (gdbstub_read_byte(mem, ch) != 0)
870 return 0; 859 return 0;
871 *buf++ = hexchars[ch[0] >> 4]; 860 buf = pack_hex_byte(buf, ch[0]);
872 *buf++ = hexchars[ch[0] & 0xf];
873 } 861 }
874 862
875 *buf = 0; 863 *buf = 0;
@@ -1304,14 +1292,14 @@ static int gdbstub(struct pt_regs *regs, enum exception_code excep)
1304 *ptr++ = 'O'; 1292 *ptr++ = 'O';
1305 ptr = mem2hex(title, ptr, sizeof(title) - 1, 0); 1293 ptr = mem2hex(title, ptr, sizeof(title) - 1, 0);
1306 1294
1307 hx = hexchars[(excep & 0xf000) >> 12]; 1295 hx = hex_asc_hi(excep >> 8);
1308 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1296 ptr = pack_hex_byte(ptr, hx);
1309 hx = hexchars[(excep & 0x0f00) >> 8]; 1297 hx = hex_asc_lo(excep >> 8);
1310 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1298 ptr = pack_hex_byte(ptr, hx);
1311 hx = hexchars[(excep & 0x00f0) >> 4]; 1299 hx = hex_asc_hi(excep);
1312 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1300 ptr = pack_hex_byte(ptr, hx);
1313 hx = hexchars[(excep & 0x000f)]; 1301 hx = hex_asc_lo(excep);
1314 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1302 ptr = pack_hex_byte(ptr, hx);
1315 1303
1316 ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0); 1304 ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0);
1317 *ptr = 0; 1305 *ptr = 0;
@@ -1322,22 +1310,22 @@ static int gdbstub(struct pt_regs *regs, enum exception_code excep)
1322 *ptr++ = 'O'; 1310 *ptr++ = 'O';
1323 ptr = mem2hex(tbcberr, ptr, sizeof(tbcberr) - 1, 0); 1311 ptr = mem2hex(tbcberr, ptr, sizeof(tbcberr) - 1, 0);
1324 1312
1325 hx = hexchars[(bcberr & 0xf0000000) >> 28]; 1313 hx = hex_asc_hi(bcberr >> 24);
1326 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1314 ptr = pack_hex_byte(ptr, hx);
1327 hx = hexchars[(bcberr & 0x0f000000) >> 24]; 1315 hx = hex_asc_lo(bcberr >> 24);
1328 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1316 ptr = pack_hex_byte(ptr, hx);
1329 hx = hexchars[(bcberr & 0x00f00000) >> 20]; 1317 hx = hex_asc_hi(bcberr >> 16);
1330 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1318 ptr = pack_hex_byte(ptr, hx);
1331 hx = hexchars[(bcberr & 0x000f0000) >> 16]; 1319 hx = hex_asc_lo(bcberr >> 16);
1332 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1320 ptr = pack_hex_byte(ptr, hx);
1333 hx = hexchars[(bcberr & 0x0000f000) >> 12]; 1321 hx = hex_asc_hi(bcberr >> 8);
1334 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1322 ptr = pack_hex_byte(ptr, hx);
1335 hx = hexchars[(bcberr & 0x00000f00) >> 8]; 1323 hx = hex_asc_lo(bcberr >> 8);
1336 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1324 ptr = pack_hex_byte(ptr, hx);
1337 hx = hexchars[(bcberr & 0x000000f0) >> 4]; 1325 hx = hex_asc_hi(bcberr);
1338 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1326 ptr = pack_hex_byte(ptr, hx);
1339 hx = hexchars[(bcberr & 0x0000000f)]; 1327 hx = hex_asc_lo(bcberr);
1340 *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; 1328 ptr = pack_hex_byte(ptr, hx);
1341 1329
1342 ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0); 1330 ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0);
1343 *ptr = 0; 1331 *ptr = 0;
@@ -1353,14 +1341,12 @@ static int gdbstub(struct pt_regs *regs, enum exception_code excep)
1353 * Send trap type (converted to signal) 1341 * Send trap type (converted to signal)
1354 */ 1342 */
1355 *ptr++ = 'T'; 1343 *ptr++ = 'T';
1356 *ptr++ = hexchars[sigval >> 4]; 1344 ptr = pack_hex_byte(ptr, sigval);
1357 *ptr++ = hexchars[sigval & 0xf];
1358 1345
1359 /* 1346 /*
1360 * Send Error PC 1347 * Send Error PC
1361 */ 1348 */
1362 *ptr++ = hexchars[GDB_REGID_PC >> 4]; 1349 ptr = pack_hex_byte(ptr, GDB_REGID_PC);
1363 *ptr++ = hexchars[GDB_REGID_PC & 0xf];
1364 *ptr++ = ':'; 1350 *ptr++ = ':';
1365 ptr = mem2hex(&regs->pc, ptr, 4, 0); 1351 ptr = mem2hex(&regs->pc, ptr, 4, 0);
1366 *ptr++ = ';'; 1352 *ptr++ = ';';
@@ -1368,8 +1354,7 @@ static int gdbstub(struct pt_regs *regs, enum exception_code excep)
1368 /* 1354 /*
1369 * Send frame pointer 1355 * Send frame pointer
1370 */ 1356 */
1371 *ptr++ = hexchars[GDB_REGID_FP >> 4]; 1357 ptr = pack_hex_byte(ptr, GDB_REGID_FP);
1372 *ptr++ = hexchars[GDB_REGID_FP & 0xf];
1373 *ptr++ = ':'; 1358 *ptr++ = ':';
1374 ptr = mem2hex(&regs->a3, ptr, 4, 0); 1359 ptr = mem2hex(&regs->a3, ptr, 4, 0);
1375 *ptr++ = ';'; 1360 *ptr++ = ';';
@@ -1378,8 +1363,7 @@ static int gdbstub(struct pt_regs *regs, enum exception_code excep)
1378 * Send stack pointer 1363 * Send stack pointer
1379 */ 1364 */
1380 ssp = (unsigned long) (regs + 1); 1365 ssp = (unsigned long) (regs + 1);
1381 *ptr++ = hexchars[GDB_REGID_SP >> 4]; 1366 ptr = pack_hex_byte(ptr, GDB_REGID_SP);
1382 *ptr++ = hexchars[GDB_REGID_SP & 0xf];
1383 *ptr++ = ':'; 1367 *ptr++ = ':';
1384 ptr = mem2hex(&ssp, ptr, 4, 0); 1368 ptr = mem2hex(&ssp, ptr, 4, 0);
1385 *ptr++ = ';'; 1369 *ptr++ = ';';
@@ -1399,8 +1383,8 @@ packet_waiting:
1399 /* request repeat of last signal number */ 1383 /* request repeat of last signal number */
1400 case '?': 1384 case '?':
1401 output_buffer[0] = 'S'; 1385 output_buffer[0] = 'S';
1402 output_buffer[1] = hexchars[sigval >> 4]; 1386 output_buffer[1] = hex_asc_hi(sigval);
1403 output_buffer[2] = hexchars[sigval & 0xf]; 1387 output_buffer[2] = hex_asc_lo(sigval);
1404 output_buffer[3] = 0; 1388 output_buffer[3] = 0;
1405 break; 1389 break;
1406 1390
@@ -1838,8 +1822,8 @@ void gdbstub_exit(int status)
1838 1822
1839 gdbstub_busy = 1; 1823 gdbstub_busy = 1;
1840 output_buffer[0] = 'W'; 1824 output_buffer[0] = 'W';
1841 output_buffer[1] = hexchars[(status >> 4) & 0x0F]; 1825 output_buffer[1] = hex_asc_hi(status);
1842 output_buffer[2] = hexchars[status & 0x0F]; 1826 output_buffer[2] = hex_asc_lo(status);
1843 output_buffer[3] = 0; 1827 output_buffer[3] = 0;
1844 1828
1845 gdbstub_io_tx_char('$'); 1829 gdbstub_io_tx_char('$');
@@ -1853,8 +1837,8 @@ void gdbstub_exit(int status)
1853 } 1837 }
1854 1838
1855 gdbstub_io_tx_char('#'); 1839 gdbstub_io_tx_char('#');
1856 gdbstub_io_tx_char(hexchars[checksum >> 4]); 1840 gdbstub_io_tx_char(hex_asc_hi(checksum));
1857 gdbstub_io_tx_char(hexchars[checksum & 0xf]); 1841 gdbstub_io_tx_char(hex_asc_lo(checksum));
1858 1842
1859 /* make sure the output is flushed, or else RedBoot might clobber it */ 1843 /* make sure the output is flushed, or else RedBoot might clobber it */
1860 gdbstub_io_tx_flush(); 1844 gdbstub_io_tx_flush();
diff --git a/arch/mn10300/kernel/mn10300-serial.c b/arch/mn10300/kernel/mn10300-serial.c
index b9c268c6b2fb..8b054e7a8ae8 100644
--- a/arch/mn10300/kernel/mn10300-serial.c
+++ b/arch/mn10300/kernel/mn10300-serial.c
@@ -392,7 +392,7 @@ static int mask_test_and_clear(volatile u8 *ptr, u8 mask)
392static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port) 392static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port)
393{ 393{
394 struct uart_icount *icount = &port->uart.icount; 394 struct uart_icount *icount = &port->uart.icount;
395 struct tty_struct *tty = port->uart.info->tty; 395 struct tty_struct *tty = port->uart.info->port.tty;
396 unsigned ix; 396 unsigned ix;
397 int count; 397 int count;
398 u8 st, ch, push, status, overrun; 398 u8 st, ch, push, status, overrun;
diff --git a/arch/mn10300/mm/init.c b/arch/mn10300/mm/init.c
index 8c5d88c7b90a..8cee387a24fd 100644
--- a/arch/mn10300/mm/init.c
+++ b/arch/mn10300/mm/init.c
@@ -67,8 +67,8 @@ void __init paging_init(void)
67 67
68 /* declare the sizes of the RAM zones (only use the normal zone) */ 68 /* declare the sizes of the RAM zones (only use the normal zone) */
69 zones_size[ZONE_NORMAL] = 69 zones_size[ZONE_NORMAL] =
70 (contig_page_data.bdata->node_low_pfn) - 70 contig_page_data.bdata->node_low_pfn -
71 (contig_page_data.bdata->node_boot_start >> PAGE_SHIFT); 71 contig_page_data.bdata->node_min_pfn;
72 72
73 /* pass the memory from the bootmem allocator to the main allocator */ 73 /* pass the memory from the bootmem allocator to the main allocator */
74 free_area_init(zones_size); 74 free_area_init(zones_size);
@@ -87,7 +87,7 @@ void __init mem_init(void)
87 if (!mem_map) 87 if (!mem_map)
88 BUG(); 88 BUG();
89 89
90#define START_PFN (contig_page_data.bdata->node_boot_start >> PAGE_SHIFT) 90#define START_PFN (contig_page_data.bdata->node_min_pfn)
91#define MAX_LOW_PFN (contig_page_data.bdata->node_low_pfn) 91#define MAX_LOW_PFN (contig_page_data.bdata->node_low_pfn)
92 92
93 max_mapnr = num_physpages = MAX_LOW_PFN - START_PFN; 93 max_mapnr = num_physpages = MAX_LOW_PFN - START_PFN;
diff --git a/arch/mn10300/mm/pgtable.c b/arch/mn10300/mm/pgtable.c
index a477038752ba..baffc581e031 100644
--- a/arch/mn10300/mm/pgtable.c
+++ b/arch/mn10300/mm/pgtable.c
@@ -27,33 +27,6 @@
27#include <asm/tlb.h> 27#include <asm/tlb.h>
28#include <asm/tlbflush.h> 28#include <asm/tlbflush.h>
29 29
30void show_mem(void)
31{
32 unsigned long i;
33 int free = 0, total = 0, reserved = 0, shared = 0;
34
35 int cached = 0;
36 printk(KERN_INFO "Mem-info:\n");
37 show_free_areas();
38 i = max_mapnr;
39 while (i-- > 0) {
40 total++;
41 if (PageReserved(mem_map + i))
42 reserved++;
43 else if (PageSwapCache(mem_map + i))
44 cached++;
45 else if (!page_count(mem_map + i))
46 free++;
47 else
48 shared += page_count(mem_map + i) - 1;
49 }
50 printk(KERN_INFO "%d pages of RAM\n", total);
51 printk(KERN_INFO "%d free pages\n", free);
52 printk(KERN_INFO "%d reserved pages\n", reserved);
53 printk(KERN_INFO "%d pages shared\n", shared);
54 printk(KERN_INFO "%d pages swap cached\n", cached);
55}
56
57/* 30/*
58 * Associate a large virtual page frame with a given physical page frame 31 * Associate a large virtual page frame with a given physical page frame
59 * and protection flags for that frame. pfn is for the base of the page, 32 * and protection flags for that frame. pfn is for the base of the page,