diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/Kconfig | 2 | ||||
-rw-r--r-- | arch/arm/mach-iop13xx/setup.c | 217 | ||||
-rw-r--r-- | arch/arm/mach-iop32x/glantank.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-iop32x/iq31244.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-iop32x/iq80321.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-iop32x/n2100.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-iop33x/iq80331.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-iop33x/iq80332.c | 3 | ||||
-rw-r--r-- | arch/arm/plat-iop/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/plat-iop/adma.c | 209 | ||||
-rw-r--r-- | arch/mips/au1000/common/setup.c | 6 | ||||
-rw-r--r-- | arch/mips/au1000/common/time.c | 29 | ||||
-rw-r--r-- | arch/mips/au1000/pb1200/board_setup.c | 9 | ||||
-rw-r--r-- | arch/mips/kernel/branch.c | 5 | ||||
-rw-r--r-- | arch/mips/kernel/traps.c | 8 | ||||
-rw-r--r-- | arch/mips/math-emu/cp1emu.c | 19 | ||||
-rw-r--r-- | arch/mips/math-emu/dsemul.c | 12 | ||||
-rw-r--r-- | arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c | 19 |
18 files changed, 468 insertions, 87 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index b53e1d4bc486..a44c6da9bf83 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -1042,6 +1042,8 @@ source "drivers/mmc/Kconfig" | |||
1042 | 1042 | ||
1043 | source "drivers/rtc/Kconfig" | 1043 | source "drivers/rtc/Kconfig" |
1044 | 1044 | ||
1045 | source "drivers/dma/Kconfig" | ||
1046 | |||
1045 | endmenu | 1047 | endmenu |
1046 | 1048 | ||
1047 | source "fs/Kconfig" | 1049 | source "fs/Kconfig" |
diff --git a/arch/arm/mach-iop13xx/setup.c b/arch/arm/mach-iop13xx/setup.c index bc4871553f6a..bfe0c87e3397 100644 --- a/arch/arm/mach-iop13xx/setup.c +++ b/arch/arm/mach-iop13xx/setup.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <asm/hardware.h> | 25 | #include <asm/hardware.h> |
26 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
27 | #include <asm/io.h> | 27 | #include <asm/io.h> |
28 | #include <asm/hardware/iop_adma.h> | ||
28 | 29 | ||
29 | #define IOP13XX_UART_XTAL 33334000 | 30 | #define IOP13XX_UART_XTAL 33334000 |
30 | #define IOP13XX_SETUP_DEBUG 0 | 31 | #define IOP13XX_SETUP_DEBUG 0 |
@@ -236,19 +237,143 @@ static unsigned long iq8134x_probe_flash_size(void) | |||
236 | } | 237 | } |
237 | #endif | 238 | #endif |
238 | 239 | ||
240 | /* ADMA Channels */ | ||
241 | static struct resource iop13xx_adma_0_resources[] = { | ||
242 | [0] = { | ||
243 | .start = IOP13XX_ADMA_PHYS_BASE(0), | ||
244 | .end = IOP13XX_ADMA_UPPER_PA(0), | ||
245 | .flags = IORESOURCE_MEM, | ||
246 | }, | ||
247 | [1] = { | ||
248 | .start = IRQ_IOP13XX_ADMA0_EOT, | ||
249 | .end = IRQ_IOP13XX_ADMA0_EOT, | ||
250 | .flags = IORESOURCE_IRQ | ||
251 | }, | ||
252 | [2] = { | ||
253 | .start = IRQ_IOP13XX_ADMA0_EOC, | ||
254 | .end = IRQ_IOP13XX_ADMA0_EOC, | ||
255 | .flags = IORESOURCE_IRQ | ||
256 | }, | ||
257 | [3] = { | ||
258 | .start = IRQ_IOP13XX_ADMA0_ERR, | ||
259 | .end = IRQ_IOP13XX_ADMA0_ERR, | ||
260 | .flags = IORESOURCE_IRQ | ||
261 | } | ||
262 | }; | ||
263 | |||
264 | static struct resource iop13xx_adma_1_resources[] = { | ||
265 | [0] = { | ||
266 | .start = IOP13XX_ADMA_PHYS_BASE(1), | ||
267 | .end = IOP13XX_ADMA_UPPER_PA(1), | ||
268 | .flags = IORESOURCE_MEM, | ||
269 | }, | ||
270 | [1] = { | ||
271 | .start = IRQ_IOP13XX_ADMA1_EOT, | ||
272 | .end = IRQ_IOP13XX_ADMA1_EOT, | ||
273 | .flags = IORESOURCE_IRQ | ||
274 | }, | ||
275 | [2] = { | ||
276 | .start = IRQ_IOP13XX_ADMA1_EOC, | ||
277 | .end = IRQ_IOP13XX_ADMA1_EOC, | ||
278 | .flags = IORESOURCE_IRQ | ||
279 | }, | ||
280 | [3] = { | ||
281 | .start = IRQ_IOP13XX_ADMA1_ERR, | ||
282 | .end = IRQ_IOP13XX_ADMA1_ERR, | ||
283 | .flags = IORESOURCE_IRQ | ||
284 | } | ||
285 | }; | ||
286 | |||
287 | static struct resource iop13xx_adma_2_resources[] = { | ||
288 | [0] = { | ||
289 | .start = IOP13XX_ADMA_PHYS_BASE(2), | ||
290 | .end = IOP13XX_ADMA_UPPER_PA(2), | ||
291 | .flags = IORESOURCE_MEM, | ||
292 | }, | ||
293 | [1] = { | ||
294 | .start = IRQ_IOP13XX_ADMA2_EOT, | ||
295 | .end = IRQ_IOP13XX_ADMA2_EOT, | ||
296 | .flags = IORESOURCE_IRQ | ||
297 | }, | ||
298 | [2] = { | ||
299 | .start = IRQ_IOP13XX_ADMA2_EOC, | ||
300 | .end = IRQ_IOP13XX_ADMA2_EOC, | ||
301 | .flags = IORESOURCE_IRQ | ||
302 | }, | ||
303 | [3] = { | ||
304 | .start = IRQ_IOP13XX_ADMA2_ERR, | ||
305 | .end = IRQ_IOP13XX_ADMA2_ERR, | ||
306 | .flags = IORESOURCE_IRQ | ||
307 | } | ||
308 | }; | ||
309 | |||
310 | static u64 iop13xx_adma_dmamask = DMA_64BIT_MASK; | ||
311 | static struct iop_adma_platform_data iop13xx_adma_0_data = { | ||
312 | .hw_id = 0, | ||
313 | .pool_size = PAGE_SIZE, | ||
314 | }; | ||
315 | |||
316 | static struct iop_adma_platform_data iop13xx_adma_1_data = { | ||
317 | .hw_id = 1, | ||
318 | .pool_size = PAGE_SIZE, | ||
319 | }; | ||
320 | |||
321 | static struct iop_adma_platform_data iop13xx_adma_2_data = { | ||
322 | .hw_id = 2, | ||
323 | .pool_size = PAGE_SIZE, | ||
324 | }; | ||
325 | |||
326 | /* The ids are fixed up later in iop13xx_platform_init */ | ||
327 | static struct platform_device iop13xx_adma_0_channel = { | ||
328 | .name = "iop-adma", | ||
329 | .id = 0, | ||
330 | .num_resources = 4, | ||
331 | .resource = iop13xx_adma_0_resources, | ||
332 | .dev = { | ||
333 | .dma_mask = &iop13xx_adma_dmamask, | ||
334 | .coherent_dma_mask = DMA_64BIT_MASK, | ||
335 | .platform_data = (void *) &iop13xx_adma_0_data, | ||
336 | }, | ||
337 | }; | ||
338 | |||
339 | static struct platform_device iop13xx_adma_1_channel = { | ||
340 | .name = "iop-adma", | ||
341 | .id = 0, | ||
342 | .num_resources = 4, | ||
343 | .resource = iop13xx_adma_1_resources, | ||
344 | .dev = { | ||
345 | .dma_mask = &iop13xx_adma_dmamask, | ||
346 | .coherent_dma_mask = DMA_64BIT_MASK, | ||
347 | .platform_data = (void *) &iop13xx_adma_1_data, | ||
348 | }, | ||
349 | }; | ||
350 | |||
351 | static struct platform_device iop13xx_adma_2_channel = { | ||
352 | .name = "iop-adma", | ||
353 | .id = 0, | ||
354 | .num_resources = 4, | ||
355 | .resource = iop13xx_adma_2_resources, | ||
356 | .dev = { | ||
357 | .dma_mask = &iop13xx_adma_dmamask, | ||
358 | .coherent_dma_mask = DMA_64BIT_MASK, | ||
359 | .platform_data = (void *) &iop13xx_adma_2_data, | ||
360 | }, | ||
361 | }; | ||
362 | |||
239 | void __init iop13xx_map_io(void) | 363 | void __init iop13xx_map_io(void) |
240 | { | 364 | { |
241 | /* Initialize the Static Page Table maps */ | 365 | /* Initialize the Static Page Table maps */ |
242 | iotable_init(iop13xx_std_desc, ARRAY_SIZE(iop13xx_std_desc)); | 366 | iotable_init(iop13xx_std_desc, ARRAY_SIZE(iop13xx_std_desc)); |
243 | } | 367 | } |
244 | 368 | ||
245 | static int init_uart = 0; | 369 | static int init_uart; |
246 | static int init_i2c = 0; | 370 | static int init_i2c; |
371 | static int init_adma; | ||
247 | 372 | ||
248 | void __init iop13xx_platform_init(void) | 373 | void __init iop13xx_platform_init(void) |
249 | { | 374 | { |
250 | int i; | 375 | int i; |
251 | u32 uart_idx, i2c_idx, plat_idx; | 376 | u32 uart_idx, i2c_idx, adma_idx, plat_idx; |
252 | struct platform_device *iop13xx_devices[IQ81340_MAX_PLAT_DEVICES]; | 377 | struct platform_device *iop13xx_devices[IQ81340_MAX_PLAT_DEVICES]; |
253 | 378 | ||
254 | /* set the bases so we can read the device id */ | 379 | /* set the bases so we can read the device id */ |
@@ -294,6 +419,12 @@ void __init iop13xx_platform_init(void) | |||
294 | } | 419 | } |
295 | } | 420 | } |
296 | 421 | ||
422 | if (init_adma == IOP13XX_INIT_ADMA_DEFAULT) { | ||
423 | init_adma |= IOP13XX_INIT_ADMA_0; | ||
424 | init_adma |= IOP13XX_INIT_ADMA_1; | ||
425 | init_adma |= IOP13XX_INIT_ADMA_2; | ||
426 | } | ||
427 | |||
297 | plat_idx = 0; | 428 | plat_idx = 0; |
298 | uart_idx = 0; | 429 | uart_idx = 0; |
299 | i2c_idx = 0; | 430 | i2c_idx = 0; |
@@ -332,6 +463,56 @@ void __init iop13xx_platform_init(void) | |||
332 | } | 463 | } |
333 | } | 464 | } |
334 | 465 | ||
466 | /* initialize adma channel ids and capabilities */ | ||
467 | adma_idx = 0; | ||
468 | for (i = 0; i < IQ81340_NUM_ADMA; i++) { | ||
469 | struct iop_adma_platform_data *plat_data; | ||
470 | if ((init_adma & (1 << i)) && IOP13XX_SETUP_DEBUG) | ||
471 | printk(KERN_INFO | ||
472 | "Adding adma%d to platform device list\n", i); | ||
473 | switch (init_adma & (1 << i)) { | ||
474 | case IOP13XX_INIT_ADMA_0: | ||
475 | iop13xx_adma_0_channel.id = adma_idx++; | ||
476 | iop13xx_devices[plat_idx++] = &iop13xx_adma_0_channel; | ||
477 | plat_data = &iop13xx_adma_0_data; | ||
478 | dma_cap_set(DMA_MEMCPY, plat_data->cap_mask); | ||
479 | dma_cap_set(DMA_XOR, plat_data->cap_mask); | ||
480 | dma_cap_set(DMA_DUAL_XOR, plat_data->cap_mask); | ||
481 | dma_cap_set(DMA_ZERO_SUM, plat_data->cap_mask); | ||
482 | dma_cap_set(DMA_MEMSET, plat_data->cap_mask); | ||
483 | dma_cap_set(DMA_MEMCPY_CRC32C, plat_data->cap_mask); | ||
484 | dma_cap_set(DMA_INTERRUPT, plat_data->cap_mask); | ||
485 | break; | ||
486 | case IOP13XX_INIT_ADMA_1: | ||
487 | iop13xx_adma_1_channel.id = adma_idx++; | ||
488 | iop13xx_devices[plat_idx++] = &iop13xx_adma_1_channel; | ||
489 | plat_data = &iop13xx_adma_1_data; | ||
490 | dma_cap_set(DMA_MEMCPY, plat_data->cap_mask); | ||
491 | dma_cap_set(DMA_XOR, plat_data->cap_mask); | ||
492 | dma_cap_set(DMA_DUAL_XOR, plat_data->cap_mask); | ||
493 | dma_cap_set(DMA_ZERO_SUM, plat_data->cap_mask); | ||
494 | dma_cap_set(DMA_MEMSET, plat_data->cap_mask); | ||
495 | dma_cap_set(DMA_MEMCPY_CRC32C, plat_data->cap_mask); | ||
496 | dma_cap_set(DMA_INTERRUPT, plat_data->cap_mask); | ||
497 | break; | ||
498 | case IOP13XX_INIT_ADMA_2: | ||
499 | iop13xx_adma_2_channel.id = adma_idx++; | ||
500 | iop13xx_devices[plat_idx++] = &iop13xx_adma_2_channel; | ||
501 | plat_data = &iop13xx_adma_2_data; | ||
502 | dma_cap_set(DMA_MEMCPY, plat_data->cap_mask); | ||
503 | dma_cap_set(DMA_XOR, plat_data->cap_mask); | ||
504 | dma_cap_set(DMA_DUAL_XOR, plat_data->cap_mask); | ||
505 | dma_cap_set(DMA_ZERO_SUM, plat_data->cap_mask); | ||
506 | dma_cap_set(DMA_MEMSET, plat_data->cap_mask); | ||
507 | dma_cap_set(DMA_MEMCPY_CRC32C, plat_data->cap_mask); | ||
508 | dma_cap_set(DMA_INTERRUPT, plat_data->cap_mask); | ||
509 | dma_cap_set(DMA_PQ_XOR, plat_data->cap_mask); | ||
510 | dma_cap_set(DMA_PQ_UPDATE, plat_data->cap_mask); | ||
511 | dma_cap_set(DMA_PQ_ZERO_SUM, plat_data->cap_mask); | ||
512 | break; | ||
513 | } | ||
514 | } | ||
515 | |||
335 | #ifdef CONFIG_MTD_PHYSMAP | 516 | #ifdef CONFIG_MTD_PHYSMAP |
336 | iq8134x_flash_resource.end = iq8134x_flash_resource.start + | 517 | iq8134x_flash_resource.end = iq8134x_flash_resource.start + |
337 | iq8134x_probe_flash_size() - 1; | 518 | iq8134x_probe_flash_size() - 1; |
@@ -399,5 +580,35 @@ static int __init iop13xx_init_i2c_setup(char *str) | |||
399 | return 1; | 580 | return 1; |
400 | } | 581 | } |
401 | 582 | ||
583 | static int __init iop13xx_init_adma_setup(char *str) | ||
584 | { | ||
585 | if (str) { | ||
586 | while (*str != '\0') { | ||
587 | switch (*str) { | ||
588 | case '0': | ||
589 | init_adma |= IOP13XX_INIT_ADMA_0; | ||
590 | break; | ||
591 | case '1': | ||
592 | init_adma |= IOP13XX_INIT_ADMA_1; | ||
593 | break; | ||
594 | case '2': | ||
595 | init_adma |= IOP13XX_INIT_ADMA_2; | ||
596 | break; | ||
597 | case ',': | ||
598 | case '=': | ||
599 | break; | ||
600 | default: | ||
601 | PRINTK("\"iop13xx_init_adma\" malformed" | ||
602 | " at character: \'%c\'", *str); | ||
603 | *(str + 1) = '\0'; | ||
604 | init_adma = IOP13XX_INIT_ADMA_DEFAULT; | ||
605 | } | ||
606 | str++; | ||
607 | } | ||
608 | } | ||
609 | return 1; | ||
610 | } | ||
611 | |||
612 | __setup("iop13xx_init_adma", iop13xx_init_adma_setup); | ||
402 | __setup("iop13xx_init_uart", iop13xx_init_uart_setup); | 613 | __setup("iop13xx_init_uart", iop13xx_init_uart_setup); |
403 | __setup("iop13xx_init_i2c", iop13xx_init_i2c_setup); | 614 | __setup("iop13xx_init_i2c", iop13xx_init_i2c_setup); |
diff --git a/arch/arm/mach-iop32x/glantank.c b/arch/arm/mach-iop32x/glantank.c index 5776fd884115..2b086ab2668c 100644 --- a/arch/arm/mach-iop32x/glantank.c +++ b/arch/arm/mach-iop32x/glantank.c | |||
@@ -180,6 +180,8 @@ static void __init glantank_init_machine(void) | |||
180 | platform_device_register(&iop3xx_i2c1_device); | 180 | platform_device_register(&iop3xx_i2c1_device); |
181 | platform_device_register(&glantank_flash_device); | 181 | platform_device_register(&glantank_flash_device); |
182 | platform_device_register(&glantank_serial_device); | 182 | platform_device_register(&glantank_serial_device); |
183 | platform_device_register(&iop3xx_dma_0_channel); | ||
184 | platform_device_register(&iop3xx_dma_1_channel); | ||
183 | 185 | ||
184 | pm_power_off = glantank_power_off; | 186 | pm_power_off = glantank_power_off; |
185 | } | 187 | } |
diff --git a/arch/arm/mach-iop32x/iq31244.c b/arch/arm/mach-iop32x/iq31244.c index d4eefbea1fe6..98cfa1cd6bdb 100644 --- a/arch/arm/mach-iop32x/iq31244.c +++ b/arch/arm/mach-iop32x/iq31244.c | |||
@@ -298,9 +298,14 @@ static void __init iq31244_init_machine(void) | |||
298 | platform_device_register(&iop3xx_i2c1_device); | 298 | platform_device_register(&iop3xx_i2c1_device); |
299 | platform_device_register(&iq31244_flash_device); | 299 | platform_device_register(&iq31244_flash_device); |
300 | platform_device_register(&iq31244_serial_device); | 300 | platform_device_register(&iq31244_serial_device); |
301 | platform_device_register(&iop3xx_dma_0_channel); | ||
302 | platform_device_register(&iop3xx_dma_1_channel); | ||
301 | 303 | ||
302 | if (is_ep80219()) | 304 | if (is_ep80219()) |
303 | pm_power_off = ep80219_power_off; | 305 | pm_power_off = ep80219_power_off; |
306 | |||
307 | if (!is_80219()) | ||
308 | platform_device_register(&iop3xx_aau_channel); | ||
304 | } | 309 | } |
305 | 310 | ||
306 | static int __init force_ep80219_setup(char *str) | 311 | static int __init force_ep80219_setup(char *str) |
diff --git a/arch/arm/mach-iop32x/iq80321.c b/arch/arm/mach-iop32x/iq80321.c index 8d9f49164a84..18ad29f213b2 100644 --- a/arch/arm/mach-iop32x/iq80321.c +++ b/arch/arm/mach-iop32x/iq80321.c | |||
@@ -181,6 +181,9 @@ static void __init iq80321_init_machine(void) | |||
181 | platform_device_register(&iop3xx_i2c1_device); | 181 | platform_device_register(&iop3xx_i2c1_device); |
182 | platform_device_register(&iq80321_flash_device); | 182 | platform_device_register(&iq80321_flash_device); |
183 | platform_device_register(&iq80321_serial_device); | 183 | platform_device_register(&iq80321_serial_device); |
184 | platform_device_register(&iop3xx_dma_0_channel); | ||
185 | platform_device_register(&iop3xx_dma_1_channel); | ||
186 | platform_device_register(&iop3xx_aau_channel); | ||
184 | } | 187 | } |
185 | 188 | ||
186 | MACHINE_START(IQ80321, "Intel IQ80321") | 189 | MACHINE_START(IQ80321, "Intel IQ80321") |
diff --git a/arch/arm/mach-iop32x/n2100.c b/arch/arm/mach-iop32x/n2100.c index d55005d64781..390a97d39e5a 100644 --- a/arch/arm/mach-iop32x/n2100.c +++ b/arch/arm/mach-iop32x/n2100.c | |||
@@ -245,6 +245,8 @@ static void __init n2100_init_machine(void) | |||
245 | platform_device_register(&iop3xx_i2c0_device); | 245 | platform_device_register(&iop3xx_i2c0_device); |
246 | platform_device_register(&n2100_flash_device); | 246 | platform_device_register(&n2100_flash_device); |
247 | platform_device_register(&n2100_serial_device); | 247 | platform_device_register(&n2100_serial_device); |
248 | platform_device_register(&iop3xx_dma_0_channel); | ||
249 | platform_device_register(&iop3xx_dma_1_channel); | ||
248 | 250 | ||
249 | pm_power_off = n2100_power_off; | 251 | pm_power_off = n2100_power_off; |
250 | 252 | ||
diff --git a/arch/arm/mach-iop33x/iq80331.c b/arch/arm/mach-iop33x/iq80331.c index 2b063180687a..433188ebff2a 100644 --- a/arch/arm/mach-iop33x/iq80331.c +++ b/arch/arm/mach-iop33x/iq80331.c | |||
@@ -136,6 +136,9 @@ static void __init iq80331_init_machine(void) | |||
136 | platform_device_register(&iop33x_uart0_device); | 136 | platform_device_register(&iop33x_uart0_device); |
137 | platform_device_register(&iop33x_uart1_device); | 137 | platform_device_register(&iop33x_uart1_device); |
138 | platform_device_register(&iq80331_flash_device); | 138 | platform_device_register(&iq80331_flash_device); |
139 | platform_device_register(&iop3xx_dma_0_channel); | ||
140 | platform_device_register(&iop3xx_dma_1_channel); | ||
141 | platform_device_register(&iop3xx_aau_channel); | ||
139 | } | 142 | } |
140 | 143 | ||
141 | MACHINE_START(IQ80331, "Intel IQ80331") | 144 | MACHINE_START(IQ80331, "Intel IQ80331") |
diff --git a/arch/arm/mach-iop33x/iq80332.c b/arch/arm/mach-iop33x/iq80332.c index 7889ce3cb08e..416c09564cc6 100644 --- a/arch/arm/mach-iop33x/iq80332.c +++ b/arch/arm/mach-iop33x/iq80332.c | |||
@@ -136,6 +136,9 @@ static void __init iq80332_init_machine(void) | |||
136 | platform_device_register(&iop33x_uart0_device); | 136 | platform_device_register(&iop33x_uart0_device); |
137 | platform_device_register(&iop33x_uart1_device); | 137 | platform_device_register(&iop33x_uart1_device); |
138 | platform_device_register(&iq80332_flash_device); | 138 | platform_device_register(&iq80332_flash_device); |
139 | platform_device_register(&iop3xx_dma_0_channel); | ||
140 | platform_device_register(&iop3xx_dma_1_channel); | ||
141 | platform_device_register(&iop3xx_aau_channel); | ||
139 | } | 142 | } |
140 | 143 | ||
141 | MACHINE_START(IQ80332, "Intel IQ80332") | 144 | MACHINE_START(IQ80332, "Intel IQ80332") |
diff --git a/arch/arm/plat-iop/Makefile b/arch/arm/plat-iop/Makefile index 4d2b1da3cd82..36bff0325959 100644 --- a/arch/arm/plat-iop/Makefile +++ b/arch/arm/plat-iop/Makefile | |||
@@ -12,6 +12,7 @@ obj-$(CONFIG_ARCH_IOP32X) += setup.o | |||
12 | obj-$(CONFIG_ARCH_IOP32X) += time.o | 12 | obj-$(CONFIG_ARCH_IOP32X) += time.o |
13 | obj-$(CONFIG_ARCH_IOP32X) += io.o | 13 | obj-$(CONFIG_ARCH_IOP32X) += io.o |
14 | obj-$(CONFIG_ARCH_IOP32X) += cp6.o | 14 | obj-$(CONFIG_ARCH_IOP32X) += cp6.o |
15 | obj-$(CONFIG_ARCH_IOP32X) += adma.o | ||
15 | 16 | ||
16 | # IOP33X | 17 | # IOP33X |
17 | obj-$(CONFIG_ARCH_IOP33X) += gpio.o | 18 | obj-$(CONFIG_ARCH_IOP33X) += gpio.o |
@@ -21,6 +22,7 @@ obj-$(CONFIG_ARCH_IOP33X) += setup.o | |||
21 | obj-$(CONFIG_ARCH_IOP33X) += time.o | 22 | obj-$(CONFIG_ARCH_IOP33X) += time.o |
22 | obj-$(CONFIG_ARCH_IOP33X) += io.o | 23 | obj-$(CONFIG_ARCH_IOP33X) += io.o |
23 | obj-$(CONFIG_ARCH_IOP33X) += cp6.o | 24 | obj-$(CONFIG_ARCH_IOP33X) += cp6.o |
25 | obj-$(CONFIG_ARCH_IOP33X) += adma.o | ||
24 | 26 | ||
25 | # IOP13XX | 27 | # IOP13XX |
26 | obj-$(CONFIG_ARCH_IOP13XX) += cp6.o | 28 | obj-$(CONFIG_ARCH_IOP13XX) += cp6.o |
diff --git a/arch/arm/plat-iop/adma.c b/arch/arm/plat-iop/adma.c new file mode 100644 index 000000000000..53c5e9a52eb1 --- /dev/null +++ b/arch/arm/plat-iop/adma.c | |||
@@ -0,0 +1,209 @@ | |||
1 | /* | ||
2 | * platform device definitions for the iop3xx dma/xor engines | ||
3 | * Copyright © 2006, Intel Corporation. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms and conditions of the GNU General Public License, | ||
7 | * version 2, as published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
17 | * | ||
18 | */ | ||
19 | #include <linux/platform_device.h> | ||
20 | #include <asm/hardware/iop3xx.h> | ||
21 | #include <linux/dma-mapping.h> | ||
22 | #include <asm/arch/adma.h> | ||
23 | #include <asm/hardware/iop_adma.h> | ||
24 | |||
25 | #ifdef CONFIG_ARCH_IOP32X | ||
26 | #define IRQ_DMA0_EOT IRQ_IOP32X_DMA0_EOT | ||
27 | #define IRQ_DMA0_EOC IRQ_IOP32X_DMA0_EOC | ||
28 | #define IRQ_DMA0_ERR IRQ_IOP32X_DMA0_ERR | ||
29 | |||
30 | #define IRQ_DMA1_EOT IRQ_IOP32X_DMA1_EOT | ||
31 | #define IRQ_DMA1_EOC IRQ_IOP32X_DMA1_EOC | ||
32 | #define IRQ_DMA1_ERR IRQ_IOP32X_DMA1_ERR | ||
33 | |||
34 | #define IRQ_AA_EOT IRQ_IOP32X_AA_EOT | ||
35 | #define IRQ_AA_EOC IRQ_IOP32X_AA_EOC | ||
36 | #define IRQ_AA_ERR IRQ_IOP32X_AA_ERR | ||
37 | #endif | ||
38 | #ifdef CONFIG_ARCH_IOP33X | ||
39 | #define IRQ_DMA0_EOT IRQ_IOP33X_DMA0_EOT | ||
40 | #define IRQ_DMA0_EOC IRQ_IOP33X_DMA0_EOC | ||
41 | #define IRQ_DMA0_ERR IRQ_IOP33X_DMA0_ERR | ||
42 | |||
43 | #define IRQ_DMA1_EOT IRQ_IOP33X_DMA1_EOT | ||
44 | #define IRQ_DMA1_EOC IRQ_IOP33X_DMA1_EOC | ||
45 | #define IRQ_DMA1_ERR IRQ_IOP33X_DMA1_ERR | ||
46 | |||
47 | #define IRQ_AA_EOT IRQ_IOP33X_AA_EOT | ||
48 | #define IRQ_AA_EOC IRQ_IOP33X_AA_EOC | ||
49 | #define IRQ_AA_ERR IRQ_IOP33X_AA_ERR | ||
50 | #endif | ||
51 | /* AAU and DMA Channels */ | ||
52 | static struct resource iop3xx_dma_0_resources[] = { | ||
53 | [0] = { | ||
54 | .start = IOP3XX_DMA_PHYS_BASE(0), | ||
55 | .end = IOP3XX_DMA_UPPER_PA(0), | ||
56 | .flags = IORESOURCE_MEM, | ||
57 | }, | ||
58 | [1] = { | ||
59 | .start = IRQ_DMA0_EOT, | ||
60 | .end = IRQ_DMA0_EOT, | ||
61 | .flags = IORESOURCE_IRQ | ||
62 | }, | ||
63 | [2] = { | ||
64 | .start = IRQ_DMA0_EOC, | ||
65 | .end = IRQ_DMA0_EOC, | ||
66 | .flags = IORESOURCE_IRQ | ||
67 | }, | ||
68 | [3] = { | ||
69 | .start = IRQ_DMA0_ERR, | ||
70 | .end = IRQ_DMA0_ERR, | ||
71 | .flags = IORESOURCE_IRQ | ||
72 | } | ||
73 | }; | ||
74 | |||
75 | static struct resource iop3xx_dma_1_resources[] = { | ||
76 | [0] = { | ||
77 | .start = IOP3XX_DMA_PHYS_BASE(1), | ||
78 | .end = IOP3XX_DMA_UPPER_PA(1), | ||
79 | .flags = IORESOURCE_MEM, | ||
80 | }, | ||
81 | [1] = { | ||
82 | .start = IRQ_DMA1_EOT, | ||
83 | .end = IRQ_DMA1_EOT, | ||
84 | .flags = IORESOURCE_IRQ | ||
85 | }, | ||
86 | [2] = { | ||
87 | .start = IRQ_DMA1_EOC, | ||
88 | .end = IRQ_DMA1_EOC, | ||
89 | .flags = IORESOURCE_IRQ | ||
90 | }, | ||
91 | [3] = { | ||
92 | .start = IRQ_DMA1_ERR, | ||
93 | .end = IRQ_DMA1_ERR, | ||
94 | .flags = IORESOURCE_IRQ | ||
95 | } | ||
96 | }; | ||
97 | |||
98 | |||
99 | static struct resource iop3xx_aau_resources[] = { | ||
100 | [0] = { | ||
101 | .start = IOP3XX_AAU_PHYS_BASE, | ||
102 | .end = IOP3XX_AAU_UPPER_PA, | ||
103 | .flags = IORESOURCE_MEM, | ||
104 | }, | ||
105 | [1] = { | ||
106 | .start = IRQ_AA_EOT, | ||
107 | .end = IRQ_AA_EOT, | ||
108 | .flags = IORESOURCE_IRQ | ||
109 | }, | ||
110 | [2] = { | ||
111 | .start = IRQ_AA_EOC, | ||
112 | .end = IRQ_AA_EOC, | ||
113 | .flags = IORESOURCE_IRQ | ||
114 | }, | ||
115 | [3] = { | ||
116 | .start = IRQ_AA_ERR, | ||
117 | .end = IRQ_AA_ERR, | ||
118 | .flags = IORESOURCE_IRQ | ||
119 | } | ||
120 | }; | ||
121 | |||
122 | static u64 iop3xx_adma_dmamask = DMA_32BIT_MASK; | ||
123 | |||
124 | static struct iop_adma_platform_data iop3xx_dma_0_data = { | ||
125 | .hw_id = DMA0_ID, | ||
126 | .pool_size = PAGE_SIZE, | ||
127 | }; | ||
128 | |||
129 | static struct iop_adma_platform_data iop3xx_dma_1_data = { | ||
130 | .hw_id = DMA1_ID, | ||
131 | .pool_size = PAGE_SIZE, | ||
132 | }; | ||
133 | |||
134 | static struct iop_adma_platform_data iop3xx_aau_data = { | ||
135 | .hw_id = AAU_ID, | ||
136 | .pool_size = 3 * PAGE_SIZE, | ||
137 | }; | ||
138 | |||
139 | struct platform_device iop3xx_dma_0_channel = { | ||
140 | .name = "iop-adma", | ||
141 | .id = 0, | ||
142 | .num_resources = 4, | ||
143 | .resource = iop3xx_dma_0_resources, | ||
144 | .dev = { | ||
145 | .dma_mask = &iop3xx_adma_dmamask, | ||
146 | .coherent_dma_mask = DMA_64BIT_MASK, | ||
147 | .platform_data = (void *) &iop3xx_dma_0_data, | ||
148 | }, | ||
149 | }; | ||
150 | |||
151 | struct platform_device iop3xx_dma_1_channel = { | ||
152 | .name = "iop-adma", | ||
153 | .id = 1, | ||
154 | .num_resources = 4, | ||
155 | .resource = iop3xx_dma_1_resources, | ||
156 | .dev = { | ||
157 | .dma_mask = &iop3xx_adma_dmamask, | ||
158 | .coherent_dma_mask = DMA_64BIT_MASK, | ||
159 | .platform_data = (void *) &iop3xx_dma_1_data, | ||
160 | }, | ||
161 | }; | ||
162 | |||
163 | struct platform_device iop3xx_aau_channel = { | ||
164 | .name = "iop-adma", | ||
165 | .id = 2, | ||
166 | .num_resources = 4, | ||
167 | .resource = iop3xx_aau_resources, | ||
168 | .dev = { | ||
169 | .dma_mask = &iop3xx_adma_dmamask, | ||
170 | .coherent_dma_mask = DMA_64BIT_MASK, | ||
171 | .platform_data = (void *) &iop3xx_aau_data, | ||
172 | }, | ||
173 | }; | ||
174 | |||
175 | static int __init iop3xx_adma_cap_init(void) | ||
176 | { | ||
177 | #ifdef CONFIG_ARCH_IOP32X /* the 32x DMA does not perform CRC32C */ | ||
178 | dma_cap_set(DMA_MEMCPY, iop3xx_dma_0_data.cap_mask); | ||
179 | dma_cap_set(DMA_INTERRUPT, iop3xx_dma_0_data.cap_mask); | ||
180 | #else | ||
181 | dma_cap_set(DMA_MEMCPY, iop3xx_dma_0_data.cap_mask); | ||
182 | dma_cap_set(DMA_MEMCPY_CRC32C, iop3xx_dma_0_data.cap_mask); | ||
183 | dma_cap_set(DMA_INTERRUPT, iop3xx_dma_0_data.cap_mask); | ||
184 | #endif | ||
185 | |||
186 | #ifdef CONFIG_ARCH_IOP32X /* the 32x DMA does not perform CRC32C */ | ||
187 | dma_cap_set(DMA_MEMCPY, iop3xx_dma_1_data.cap_mask); | ||
188 | dma_cap_set(DMA_INTERRUPT, iop3xx_dma_1_data.cap_mask); | ||
189 | #else | ||
190 | dma_cap_set(DMA_MEMCPY, iop3xx_dma_1_data.cap_mask); | ||
191 | dma_cap_set(DMA_MEMCPY_CRC32C, iop3xx_dma_1_data.cap_mask); | ||
192 | dma_cap_set(DMA_INTERRUPT, iop3xx_dma_1_data.cap_mask); | ||
193 | #endif | ||
194 | |||
195 | #ifdef CONFIG_ARCH_IOP32X /* the 32x AAU does not perform zero sum */ | ||
196 | dma_cap_set(DMA_XOR, iop3xx_aau_data.cap_mask); | ||
197 | dma_cap_set(DMA_MEMSET, iop3xx_aau_data.cap_mask); | ||
198 | dma_cap_set(DMA_INTERRUPT, iop3xx_aau_data.cap_mask); | ||
199 | #else | ||
200 | dma_cap_set(DMA_XOR, iop3xx_aau_data.cap_mask); | ||
201 | dma_cap_set(DMA_ZERO_SUM, iop3xx_aau_data.cap_mask); | ||
202 | dma_cap_set(DMA_MEMSET, iop3xx_aau_data.cap_mask); | ||
203 | dma_cap_set(DMA_INTERRUPT, iop3xx_aau_data.cap_mask); | ||
204 | #endif | ||
205 | |||
206 | return 0; | ||
207 | } | ||
208 | |||
209 | arch_initcall(iop3xx_adma_cap_init); | ||
diff --git a/arch/mips/au1000/common/setup.c b/arch/mips/au1000/common/setup.c index fdf2b85a69c8..a95b37773196 100644 --- a/arch/mips/au1000/common/setup.c +++ b/arch/mips/au1000/common/setup.c | |||
@@ -103,12 +103,6 @@ void __init plat_mem_setup(void) | |||
103 | } | 103 | } |
104 | #endif | 104 | #endif |
105 | 105 | ||
106 | #ifdef CONFIG_FB_XPERT98 | ||
107 | if ((argptr = strstr(argptr, "video=")) == NULL) { | ||
108 | argptr = prom_getcmdline(); | ||
109 | strcat(argptr, " video=atyfb:1024x768-8@70"); | ||
110 | } | ||
111 | #endif | ||
112 | 106 | ||
113 | #if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) | 107 | #if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) |
114 | /* au1000 does not support vra, au1500 and au1100 do */ | 108 | /* au1000 does not support vra, au1500 and au1100 do */ |
diff --git a/arch/mips/au1000/common/time.c b/arch/mips/au1000/common/time.c index fa1c62f05515..8fc29982d700 100644 --- a/arch/mips/au1000/common/time.c +++ b/arch/mips/au1000/common/time.c | |||
@@ -203,11 +203,7 @@ wakeup_counter0_set(int ticks) | |||
203 | /* I haven't found anyone that doesn't use a 12 MHz source clock, | 203 | /* I haven't found anyone that doesn't use a 12 MHz source clock, |
204 | * but just in case..... | 204 | * but just in case..... |
205 | */ | 205 | */ |
206 | #ifdef CONFIG_AU1000_SRC_CLK | ||
207 | #define AU1000_SRC_CLK CONFIG_AU1000_SRC_CLK | ||
208 | #else | ||
209 | #define AU1000_SRC_CLK 12000000 | 206 | #define AU1000_SRC_CLK 12000000 |
210 | #endif | ||
211 | 207 | ||
212 | /* | 208 | /* |
213 | * We read the real processor speed from the PLL. This is important | 209 | * We read the real processor speed from the PLL. This is important |
@@ -247,33 +243,8 @@ unsigned long cal_r4koff(void) | |||
247 | au_writel (0, SYS_TOYWRITE); | 243 | au_writel (0, SYS_TOYWRITE); |
248 | while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S); | 244 | while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S); |
249 | 245 | ||
250 | #if defined(CONFIG_AU1000_USE32K) | ||
251 | { | ||
252 | unsigned long start, end, count; | ||
253 | |||
254 | start = au_readl(SYS_RTCREAD); | ||
255 | start += 2; | ||
256 | /* wait for the beginning of a new tick | ||
257 | */ | ||
258 | while (au_readl(SYS_RTCREAD) < start); | ||
259 | |||
260 | /* Start r4k counter. | ||
261 | */ | ||
262 | write_c0_count(0); | ||
263 | |||
264 | /* Wait 0.5 seconds. | ||
265 | */ | ||
266 | end = start + (32768 / trim_divide)/2; | ||
267 | |||
268 | while (end > au_readl(SYS_RTCREAD)); | ||
269 | |||
270 | count = read_c0_count(); | ||
271 | cpu_speed = count * 2; | ||
272 | } | ||
273 | #else | ||
274 | cpu_speed = (au_readl(SYS_CPUPLL) & 0x0000003f) * | 246 | cpu_speed = (au_readl(SYS_CPUPLL) & 0x0000003f) * |
275 | AU1000_SRC_CLK; | 247 | AU1000_SRC_CLK; |
276 | #endif | ||
277 | } | 248 | } |
278 | else { | 249 | else { |
279 | /* The 32KHz oscillator isn't running, so assume there | 250 | /* The 32KHz oscillator isn't running, so assume there |
diff --git a/arch/mips/au1000/pb1200/board_setup.c b/arch/mips/au1000/pb1200/board_setup.c index 043302b7fe58..eea2092bde8d 100644 --- a/arch/mips/au1000/pb1200/board_setup.c +++ b/arch/mips/au1000/pb1200/board_setup.c | |||
@@ -131,14 +131,7 @@ void __init board_setup(void) | |||
131 | /* The Pb1200 development board uses external MUX for PSC0 to | 131 | /* The Pb1200 development board uses external MUX for PSC0 to |
132 | support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI | 132 | support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI |
133 | */ | 133 | */ |
134 | #if defined(CONFIG_AU1XXX_PSC_SPI) && defined(CONFIG_I2C_AU1550) | 134 | #ifdef CONFIG_I2C_AU1550 |
135 | #error I2C and SPI are mutually exclusive. Both are physically connected to PSC0.\ | ||
136 | Refer to Pb1200/Db1200 documentation. | ||
137 | #elif defined( CONFIG_AU1XXX_PSC_SPI ) | ||
138 | bcsr->resets |= BCSR_RESETS_PCS0MUX; | ||
139 | /*Hard Coding Value to enable Temp Sensors [bit 14] Value for SOC Au1200. Pls refer documentation*/ | ||
140 | bcsr->resets =0x900f; | ||
141 | #elif defined( CONFIG_I2C_AU1550 ) | ||
142 | bcsr->resets &= (~BCSR_RESETS_PCS0MUX); | 135 | bcsr->resets &= (~BCSR_RESETS_PCS0MUX); |
143 | #endif | 136 | #endif |
144 | au_sync(); | 137 | au_sync(); |
diff --git a/arch/mips/kernel/branch.c b/arch/mips/kernel/branch.c index 76fd3f22c766..6b5df8bfab85 100644 --- a/arch/mips/kernel/branch.c +++ b/arch/mips/kernel/branch.c | |||
@@ -22,7 +22,8 @@ | |||
22 | */ | 22 | */ |
23 | int __compute_return_epc(struct pt_regs *regs) | 23 | int __compute_return_epc(struct pt_regs *regs) |
24 | { | 24 | { |
25 | unsigned int *addr, bit, fcr31, dspcontrol; | 25 | unsigned int __user *addr; |
26 | unsigned int bit, fcr31, dspcontrol; | ||
26 | long epc; | 27 | long epc; |
27 | union mips_instruction insn; | 28 | union mips_instruction insn; |
28 | 29 | ||
@@ -33,7 +34,7 @@ int __compute_return_epc(struct pt_regs *regs) | |||
33 | /* | 34 | /* |
34 | * Read the instruction | 35 | * Read the instruction |
35 | */ | 36 | */ |
36 | addr = (unsigned int *) epc; | 37 | addr = (unsigned int __user *) epc; |
37 | if (__get_user(insn.word, addr)) { | 38 | if (__get_user(insn.word, addr)) { |
38 | force_sig(SIGSEGV, current); | 39 | force_sig(SIGSEGV, current); |
39 | return -EFAULT; | 40 | return -EFAULT; |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 5e9fa83c4ef0..37c562c4c817 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -131,7 +131,7 @@ static void show_stacktrace(struct task_struct *task, struct pt_regs *regs) | |||
131 | const int field = 2 * sizeof(unsigned long); | 131 | const int field = 2 * sizeof(unsigned long); |
132 | long stackdata; | 132 | long stackdata; |
133 | int i; | 133 | int i; |
134 | unsigned long *sp = (unsigned long *)regs->regs[29]; | 134 | unsigned long __user *sp = (unsigned long __user *)regs->regs[29]; |
135 | 135 | ||
136 | printk("Stack :"); | 136 | printk("Stack :"); |
137 | i = 0; | 137 | i = 0; |
@@ -187,7 +187,7 @@ void dump_stack(void) | |||
187 | 187 | ||
188 | EXPORT_SYMBOL(dump_stack); | 188 | EXPORT_SYMBOL(dump_stack); |
189 | 189 | ||
190 | void show_code(unsigned int *pc) | 190 | static void show_code(unsigned int __user *pc) |
191 | { | 191 | { |
192 | long i; | 192 | long i; |
193 | 193 | ||
@@ -305,7 +305,7 @@ void show_registers(struct pt_regs *regs) | |||
305 | printk("Process %s (pid: %d, threadinfo=%p, task=%p)\n", | 305 | printk("Process %s (pid: %d, threadinfo=%p, task=%p)\n", |
306 | current->comm, current->pid, current_thread_info(), current); | 306 | current->comm, current->pid, current_thread_info(), current); |
307 | show_stacktrace(current, regs); | 307 | show_stacktrace(current, regs); |
308 | show_code((unsigned int *) regs->cp0_epc); | 308 | show_code((unsigned int __user *) regs->cp0_epc); |
309 | printk("\n"); | 309 | printk("\n"); |
310 | } | 310 | } |
311 | 311 | ||
@@ -865,7 +865,7 @@ asmlinkage void do_mcheck(struct pt_regs *regs) | |||
865 | dump_tlb_all(); | 865 | dump_tlb_all(); |
866 | } | 866 | } |
867 | 867 | ||
868 | show_code((unsigned int *) regs->cp0_epc); | 868 | show_code((unsigned int __user *) regs->cp0_epc); |
869 | 869 | ||
870 | /* | 870 | /* |
871 | * Some chips may have other causes of machine check (e.g. SB1 | 871 | * Some chips may have other causes of machine check (e.g. SB1 |
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c index d7f05b0abe17..17419e11ecad 100644 --- a/arch/mips/math-emu/cp1emu.c +++ b/arch/mips/math-emu/cp1emu.c | |||
@@ -205,7 +205,7 @@ static int isBranchInstr(mips_instruction * i) | |||
205 | static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | 205 | static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx) |
206 | { | 206 | { |
207 | mips_instruction ir; | 207 | mips_instruction ir; |
208 | void * emulpc, *contpc; | 208 | unsigned long emulpc, contpc; |
209 | unsigned int cond; | 209 | unsigned int cond; |
210 | 210 | ||
211 | if (get_user(ir, (mips_instruction __user *) xcp->cp0_epc)) { | 211 | if (get_user(ir, (mips_instruction __user *) xcp->cp0_epc)) { |
@@ -230,7 +230,7 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | |||
230 | * Linux MIPS branch emulator operates on context, updating the | 230 | * Linux MIPS branch emulator operates on context, updating the |
231 | * cp0_epc. | 231 | * cp0_epc. |
232 | */ | 232 | */ |
233 | emulpc = (void *) (xcp->cp0_epc + 4); /* Snapshot emulation target */ | 233 | emulpc = xcp->cp0_epc + 4; /* Snapshot emulation target */ |
234 | 234 | ||
235 | if (__compute_return_epc(xcp)) { | 235 | if (__compute_return_epc(xcp)) { |
236 | #ifdef CP1DBG | 236 | #ifdef CP1DBG |
@@ -244,12 +244,12 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | |||
244 | return SIGBUS; | 244 | return SIGBUS; |
245 | } | 245 | } |
246 | /* __compute_return_epc() will have updated cp0_epc */ | 246 | /* __compute_return_epc() will have updated cp0_epc */ |
247 | contpc = (void *) xcp->cp0_epc; | 247 | contpc = xcp->cp0_epc; |
248 | /* In order not to confuse ptrace() et al, tweak context */ | 248 | /* In order not to confuse ptrace() et al, tweak context */ |
249 | xcp->cp0_epc = (unsigned long) emulpc - 4; | 249 | xcp->cp0_epc = emulpc - 4; |
250 | } else { | 250 | } else { |
251 | emulpc = (void *) xcp->cp0_epc; | 251 | emulpc = xcp->cp0_epc; |
252 | contpc = (void *) (xcp->cp0_epc + 4); | 252 | contpc = xcp->cp0_epc + 4; |
253 | } | 253 | } |
254 | 254 | ||
255 | emul: | 255 | emul: |
@@ -427,8 +427,7 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | |||
427 | * instruction | 427 | * instruction |
428 | */ | 428 | */ |
429 | xcp->cp0_epc += 4; | 429 | xcp->cp0_epc += 4; |
430 | contpc = (void *) | 430 | contpc = (xcp->cp0_epc + |
431 | (xcp->cp0_epc + | ||
432 | (MIPSInst_SIMM(ir) << 2)); | 431 | (MIPSInst_SIMM(ir) << 2)); |
433 | 432 | ||
434 | if (get_user(ir, | 433 | if (get_user(ir, |
@@ -462,7 +461,7 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | |||
462 | * Single step the non-cp1 | 461 | * Single step the non-cp1 |
463 | * instruction in the dslot | 462 | * instruction in the dslot |
464 | */ | 463 | */ |
465 | return mips_dsemul(xcp, ir, (unsigned long) contpc); | 464 | return mips_dsemul(xcp, ir, contpc); |
466 | } | 465 | } |
467 | else { | 466 | else { |
468 | /* branch not taken */ | 467 | /* branch not taken */ |
@@ -521,7 +520,7 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | |||
521 | } | 520 | } |
522 | 521 | ||
523 | /* we did it !! */ | 522 | /* we did it !! */ |
524 | xcp->cp0_epc = (unsigned long) contpc; | 523 | xcp->cp0_epc = contpc; |
525 | xcp->cp0_cause &= ~CAUSEF_BD; | 524 | xcp->cp0_cause &= ~CAUSEF_BD; |
526 | 525 | ||
527 | return 0; | 526 | return 0; |
diff --git a/arch/mips/math-emu/dsemul.c b/arch/mips/math-emu/dsemul.c index ea6ba7248489..653e325849e4 100644 --- a/arch/mips/math-emu/dsemul.c +++ b/arch/mips/math-emu/dsemul.c | |||
@@ -54,8 +54,7 @@ struct emuframe { | |||
54 | int mips_dsemul(struct pt_regs *regs, mips_instruction ir, unsigned long cpc) | 54 | int mips_dsemul(struct pt_regs *regs, mips_instruction ir, unsigned long cpc) |
55 | { | 55 | { |
56 | extern asmlinkage void handle_dsemulret(void); | 56 | extern asmlinkage void handle_dsemulret(void); |
57 | mips_instruction *dsemul_insns; | 57 | struct emuframe __user *fr; |
58 | struct emuframe *fr; | ||
59 | int err; | 58 | int err; |
60 | 59 | ||
61 | if (ir == 0) { /* a nop is easy */ | 60 | if (ir == 0) { /* a nop is easy */ |
@@ -87,8 +86,8 @@ int mips_dsemul(struct pt_regs *regs, mips_instruction ir, unsigned long cpc) | |||
87 | */ | 86 | */ |
88 | 87 | ||
89 | /* Ensure that the two instructions are in the same cache line */ | 88 | /* Ensure that the two instructions are in the same cache line */ |
90 | dsemul_insns = (mips_instruction *) ((regs->regs[29] - sizeof(struct emuframe)) & ~0x7); | 89 | fr = (struct emuframe __user *) |
91 | fr = (struct emuframe *) dsemul_insns; | 90 | ((regs->regs[29] - sizeof(struct emuframe)) & ~0x7); |
92 | 91 | ||
93 | /* Verify that the stack pointer is not competely insane */ | 92 | /* Verify that the stack pointer is not competely insane */ |
94 | if (unlikely(!access_ok(VERIFY_WRITE, fr, sizeof(struct emuframe)))) | 93 | if (unlikely(!access_ok(VERIFY_WRITE, fr, sizeof(struct emuframe)))) |
@@ -113,12 +112,13 @@ int mips_dsemul(struct pt_regs *regs, mips_instruction ir, unsigned long cpc) | |||
113 | 112 | ||
114 | int do_dsemulret(struct pt_regs *xcp) | 113 | int do_dsemulret(struct pt_regs *xcp) |
115 | { | 114 | { |
116 | struct emuframe *fr; | 115 | struct emuframe __user *fr; |
117 | unsigned long epc; | 116 | unsigned long epc; |
118 | u32 insn, cookie; | 117 | u32 insn, cookie; |
119 | int err = 0; | 118 | int err = 0; |
120 | 119 | ||
121 | fr = (struct emuframe *) (xcp->cp0_epc - sizeof(mips_instruction)); | 120 | fr = (struct emuframe __user *) |
121 | (xcp->cp0_epc - sizeof(mips_instruction)); | ||
122 | 122 | ||
123 | /* | 123 | /* |
124 | * If we can't even access the area, something is very wrong, but we'll | 124 | * If we can't even access the area, something is very wrong, but we'll |
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c index a0c11efeaeeb..40c7c3eeafaf 100644 --- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c +++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c | |||
@@ -138,7 +138,6 @@ extern void toshiba_rbtx4927_irq_setup(void); | |||
138 | char *prom_getcmdline(void); | 138 | char *prom_getcmdline(void); |
139 | 139 | ||
140 | #ifdef CONFIG_PCI | 140 | #ifdef CONFIG_PCI |
141 | #define CONFIG_TX4927BUG_WORKAROUND | ||
142 | #undef TX4927_SUPPORT_COMMAND_IO | 141 | #undef TX4927_SUPPORT_COMMAND_IO |
143 | #undef TX4927_SUPPORT_PCI_66 | 142 | #undef TX4927_SUPPORT_PCI_66 |
144 | int tx4927_cpu_clock = 100000000; /* 100MHz */ | 143 | int tx4927_cpu_clock = 100000000; /* 100MHz */ |
@@ -669,15 +668,7 @@ void tx4927_pci_setup(void) | |||
669 | 668 | ||
670 | /* PCI->GB mappings (MEM 16MB) -not used */ | 669 | /* PCI->GB mappings (MEM 16MB) -not used */ |
671 | tx4927_pcicptr->p2gm1plbase = 0xffffffff; | 670 | tx4927_pcicptr->p2gm1plbase = 0xffffffff; |
672 | #ifdef CONFIG_TX4927BUG_WORKAROUND | ||
673 | /* | ||
674 | * TX4927-PCIC-BUG: P2GM1PUBASE must be 0 | ||
675 | * if P2GM0PUBASE was 0. | ||
676 | */ | ||
677 | tx4927_pcicptr->p2gm1pubase = 0; | ||
678 | #else | ||
679 | tx4927_pcicptr->p2gm1pubase = 0xffffffff; | 671 | tx4927_pcicptr->p2gm1pubase = 0xffffffff; |
680 | #endif | ||
681 | tx4927_pcicptr->p2gmgbase[1] = 0; | 672 | tx4927_pcicptr->p2gmgbase[1] = 0; |
682 | 673 | ||
683 | /* PCI->GB mappings (MEM 1MB) -not used */ | 674 | /* PCI->GB mappings (MEM 1MB) -not used */ |
@@ -910,16 +901,6 @@ void __init toshiba_rbtx4927_setup(void) | |||
910 | if (tx4927_ccfg_toeon) | 901 | if (tx4927_ccfg_toeon) |
911 | tx4927_ccfgptr->ccfg |= TX4927_CCFG_TOE; | 902 | tx4927_ccfgptr->ccfg |= TX4927_CCFG_TOE; |
912 | 903 | ||
913 | /* SDRAMC fixup */ | ||
914 | #ifdef CONFIG_TX4927BUG_WORKAROUND | ||
915 | /* | ||
916 | * TX4927-BUG: INF 01-01-18/ BUG 01-01-22 | ||
917 | * G-bus timeout error detection is incorrect | ||
918 | */ | ||
919 | if (tx4927_ccfg_toeon) | ||
920 | tx4927_sdramcptr->tr |= 0x02000000; /* RCD:3tck */ | ||
921 | #endif | ||
922 | |||
923 | tx4927_pci_setup(); | 904 | tx4927_pci_setup(); |
924 | if (tx4927_using_backplane == 1) | 905 | if (tx4927_using_backplane == 1) |
925 | printk("backplane board IS installed\n"); | 906 | printk("backplane board IS installed\n"); |