diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-03-17 11:21:20 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-03-17 11:21:20 -0400 |
| commit | 47239561e39bceefecc3cd67f71fcf86a198a8ff (patch) | |
| tree | 9823d0973494ea8acabb744bc3aba42b610fb434 /arch/arm | |
| parent | ed681a91ab805341675d166a9592551093c0a2d9 (diff) | |
| parent | 5bee17f18b595937e6beafeee5197868a3f74a06 (diff) | |
Merge branch 'linus' into core/printk
Diffstat (limited to 'arch/arm')
65 files changed, 433 insertions, 162 deletions
diff --git a/arch/arm/configs/at91sam9260ek_defconfig b/arch/arm/configs/at91sam9260ek_defconfig index e0ee7060f9aa..98e2f3de4bc5 100644 --- a/arch/arm/configs/at91sam9260ek_defconfig +++ b/arch/arm/configs/at91sam9260ek_defconfig | |||
| @@ -608,7 +608,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 608 | # Watchdog Device Drivers | 608 | # Watchdog Device Drivers |
| 609 | # | 609 | # |
| 610 | # CONFIG_SOFT_WATCHDOG is not set | 610 | # CONFIG_SOFT_WATCHDOG is not set |
| 611 | CONFIG_AT91SAM9_WATCHDOG=y | 611 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 612 | 612 | ||
| 613 | # | 613 | # |
| 614 | # USB-based Watchdog Cards | 614 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/at91sam9261ek_defconfig b/arch/arm/configs/at91sam9261ek_defconfig index 01d1ef97d8be..149456142392 100644 --- a/arch/arm/configs/at91sam9261ek_defconfig +++ b/arch/arm/configs/at91sam9261ek_defconfig | |||
| @@ -700,7 +700,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 700 | # Watchdog Device Drivers | 700 | # Watchdog Device Drivers |
| 701 | # | 701 | # |
| 702 | # CONFIG_SOFT_WATCHDOG is not set | 702 | # CONFIG_SOFT_WATCHDOG is not set |
| 703 | CONFIG_AT91SAM9_WATCHDOG=y | 703 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 704 | 704 | ||
| 705 | # | 705 | # |
| 706 | # USB-based Watchdog Cards | 706 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/at91sam9263ek_defconfig b/arch/arm/configs/at91sam9263ek_defconfig index 036a126725c1..21599f3c6275 100644 --- a/arch/arm/configs/at91sam9263ek_defconfig +++ b/arch/arm/configs/at91sam9263ek_defconfig | |||
| @@ -710,7 +710,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 710 | # Watchdog Device Drivers | 710 | # Watchdog Device Drivers |
| 711 | # | 711 | # |
| 712 | # CONFIG_SOFT_WATCHDOG is not set | 712 | # CONFIG_SOFT_WATCHDOG is not set |
| 713 | CONFIG_AT91SAM9_WATCHDOG=y | 713 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 714 | 714 | ||
| 715 | # | 715 | # |
| 716 | # USB-based Watchdog Cards | 716 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/at91sam9rlek_defconfig b/arch/arm/configs/at91sam9rlek_defconfig index 237a2a6a8517..e2df81a3e804 100644 --- a/arch/arm/configs/at91sam9rlek_defconfig +++ b/arch/arm/configs/at91sam9rlek_defconfig | |||
| @@ -606,7 +606,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 606 | # Watchdog Device Drivers | 606 | # Watchdog Device Drivers |
| 607 | # | 607 | # |
| 608 | # CONFIG_SOFT_WATCHDOG is not set | 608 | # CONFIG_SOFT_WATCHDOG is not set |
| 609 | CONFIG_AT91SAM9_WATCHDOG=y | 609 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 610 | 610 | ||
| 611 | # | 611 | # |
| 612 | # Sonics Silicon Backplane | 612 | # Sonics Silicon Backplane |
diff --git a/arch/arm/configs/qil-a9260_defconfig b/arch/arm/configs/qil-a9260_defconfig index cd1d717903ac..9b32d0eb89ba 100644 --- a/arch/arm/configs/qil-a9260_defconfig +++ b/arch/arm/configs/qil-a9260_defconfig | |||
| @@ -727,7 +727,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 727 | # Watchdog Device Drivers | 727 | # Watchdog Device Drivers |
| 728 | # | 728 | # |
| 729 | # CONFIG_SOFT_WATCHDOG is not set | 729 | # CONFIG_SOFT_WATCHDOG is not set |
| 730 | # CONFIG_AT91SAM9_WATCHDOG is not set | 730 | # CONFIG_AT91SAM9X_WATCHDOG is not set |
| 731 | 731 | ||
| 732 | # | 732 | # |
| 733 | # USB-based Watchdog Cards | 733 | # USB-based Watchdog Cards |
diff --git a/arch/arm/kernel/elf.c b/arch/arm/kernel/elf.c index 84849098c8e8..d4a0da1e48f4 100644 --- a/arch/arm/kernel/elf.c +++ b/arch/arm/kernel/elf.c | |||
| @@ -74,9 +74,9 @@ EXPORT_SYMBOL(elf_set_personality); | |||
| 74 | */ | 74 | */ |
| 75 | int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) | 75 | int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) |
| 76 | { | 76 | { |
| 77 | if (executable_stack != EXSTACK_ENABLE_X) | 77 | if (executable_stack != EXSTACK_DISABLE_X) |
| 78 | return 1; | 78 | return 1; |
| 79 | if (cpu_architecture() <= CPU_ARCH_ARMv6) | 79 | if (cpu_architecture() < CPU_ARCH_ARMv6) |
| 80 | return 1; | 80 | return 1; |
| 81 | return 0; | 81 | return 0; |
| 82 | } | 82 | } |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 49a6ba926c2b..159d0416f270 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
| @@ -111,6 +111,7 @@ ENTRY(mcount) | |||
| 111 | .globl mcount_call | 111 | .globl mcount_call |
| 112 | mcount_call: | 112 | mcount_call: |
| 113 | bl ftrace_stub | 113 | bl ftrace_stub |
| 114 | ldr lr, [fp, #-4] @ restore lr | ||
| 114 | ldmia sp!, {r0-r3, pc} | 115 | ldmia sp!, {r0-r3, pc} |
| 115 | 116 | ||
| 116 | ENTRY(ftrace_caller) | 117 | ENTRY(ftrace_caller) |
| @@ -122,6 +123,7 @@ ENTRY(ftrace_caller) | |||
| 122 | .globl ftrace_call | 123 | .globl ftrace_call |
| 123 | ftrace_call: | 124 | ftrace_call: |
| 124 | bl ftrace_stub | 125 | bl ftrace_stub |
| 126 | ldr lr, [fp, #-4] @ restore lr | ||
| 125 | ldmia sp!, {r0-r3, pc} | 127 | ldmia sp!, {r0-r3, pc} |
| 126 | 128 | ||
| 127 | #else | 129 | #else |
| @@ -133,6 +135,7 @@ ENTRY(mcount) | |||
| 133 | adr r0, ftrace_stub | 135 | adr r0, ftrace_stub |
| 134 | cmp r0, r2 | 136 | cmp r0, r2 |
| 135 | bne trace | 137 | bne trace |
| 138 | ldr lr, [fp, #-4] @ restore lr | ||
| 136 | ldmia sp!, {r0-r3, pc} | 139 | ldmia sp!, {r0-r3, pc} |
| 137 | 140 | ||
| 138 | trace: | 141 | trace: |
| @@ -141,6 +144,7 @@ trace: | |||
| 141 | sub r0, r0, #MCOUNT_INSN_SIZE | 144 | sub r0, r0, #MCOUNT_INSN_SIZE |
| 142 | mov lr, pc | 145 | mov lr, pc |
| 143 | mov pc, r2 | 146 | mov pc, r2 |
| 147 | mov lr, r1 @ restore lr | ||
| 144 | ldmia sp!, {r0-r3, pc} | 148 | ldmia sp!, {r0-r3, pc} |
| 145 | 149 | ||
| 146 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 150 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c index 36f81d967979..6ff7919613d7 100644 --- a/arch/arm/kernel/fiq.c +++ b/arch/arm/kernel/fiq.c | |||
| @@ -88,7 +88,7 @@ void set_fiq_handler(void *start, unsigned int length) | |||
| 88 | * disable irqs for the duration. Note - these functions are almost | 88 | * disable irqs for the duration. Note - these functions are almost |
| 89 | * entirely coded in assembly. | 89 | * entirely coded in assembly. |
| 90 | */ | 90 | */ |
| 91 | void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs) | 91 | void __naked set_fiq_regs(struct pt_regs *regs) |
| 92 | { | 92 | { |
| 93 | register unsigned long tmp; | 93 | register unsigned long tmp; |
| 94 | asm volatile ( | 94 | asm volatile ( |
| @@ -106,7 +106,7 @@ void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs) | |||
| 106 | : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)); | 106 | : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)); |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs) | 109 | void __naked get_fiq_regs(struct pt_regs *regs) |
| 110 | { | 110 | { |
| 111 | register unsigned long tmp; | 111 | register unsigned long tmp; |
| 112 | asm volatile ( | 112 | asm volatile ( |
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index 440dc62cdc3a..598ca61e7bca 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
| @@ -13,8 +13,8 @@ | |||
| 13 | #include <asm/cacheflush.h> | 13 | #include <asm/cacheflush.h> |
| 14 | #include <asm/mach-types.h> | 14 | #include <asm/mach-types.h> |
| 15 | 15 | ||
| 16 | const extern unsigned char relocate_new_kernel[]; | 16 | extern const unsigned char relocate_new_kernel[]; |
| 17 | const extern unsigned int relocate_new_kernel_size; | 17 | extern const unsigned int relocate_new_kernel_size; |
| 18 | 18 | ||
| 19 | extern void setup_mm_for_reboot(char mode); | 19 | extern void setup_mm_for_reboot(char mode); |
| 20 | 20 | ||
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 7049815d66d5..68d6494c0389 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
| @@ -233,12 +233,13 @@ static void __init cacheid_init(void) | |||
| 233 | unsigned int cachetype = read_cpuid_cachetype(); | 233 | unsigned int cachetype = read_cpuid_cachetype(); |
| 234 | unsigned int arch = cpu_architecture(); | 234 | unsigned int arch = cpu_architecture(); |
| 235 | 235 | ||
| 236 | if (arch >= CPU_ARCH_ARMv7) { | 236 | if (arch >= CPU_ARCH_ARMv6) { |
| 237 | cacheid = CACHEID_VIPT_NONALIASING; | 237 | if ((cachetype & (7 << 29)) == 4 << 29) { |
| 238 | if ((cachetype & (3 << 14)) == 1 << 14) | 238 | /* ARMv7 register format */ |
| 239 | cacheid |= CACHEID_ASID_TAGGED; | 239 | cacheid = CACHEID_VIPT_NONALIASING; |
| 240 | } else if (arch >= CPU_ARCH_ARMv6) { | 240 | if ((cachetype & (3 << 14)) == 1 << 14) |
| 241 | if (cachetype & (1 << 23)) | 241 | cacheid |= CACHEID_ASID_TAGGED; |
| 242 | } else if (cachetype & (1 << 23)) | ||
| 242 | cacheid = CACHEID_VIPT_ALIASING; | 243 | cacheid = CACHEID_VIPT_ALIASING; |
| 243 | else | 244 | else |
| 244 | cacheid = CACHEID_VIPT_NONALIASING; | 245 | cacheid = CACHEID_VIPT_NONALIASING; |
diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c index 9eca2209cde6..412aa49ad2fb 100644 --- a/arch/arm/mach-at91/at91cap9_devices.c +++ b/arch/arm/mach-at91/at91cap9_devices.c | |||
| @@ -697,7 +697,7 @@ static void __init at91_add_device_rtt(void) | |||
| 697 | * Watchdog | 697 | * Watchdog |
| 698 | * -------------------------------------------------------------------- */ | 698 | * -------------------------------------------------------------------- */ |
| 699 | 699 | ||
| 700 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 700 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 701 | static struct platform_device at91cap9_wdt_device = { | 701 | static struct platform_device at91cap9_wdt_device = { |
| 702 | .name = "at91_wdt", | 702 | .name = "at91_wdt", |
| 703 | .id = -1, | 703 | .id = -1, |
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index fdde1ea21b07..d74c9ac007e7 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
| @@ -643,7 +643,7 @@ static void __init at91_add_device_rtt(void) | |||
| 643 | * Watchdog | 643 | * Watchdog |
| 644 | * -------------------------------------------------------------------- */ | 644 | * -------------------------------------------------------------------- */ |
| 645 | 645 | ||
| 646 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 646 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 647 | static struct platform_device at91sam9260_wdt_device = { | 647 | static struct platform_device at91sam9260_wdt_device = { |
| 648 | .name = "at91_wdt", | 648 | .name = "at91_wdt", |
| 649 | .id = -1, | 649 | .id = -1, |
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 17289756f80f..59fc48311fb0 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c | |||
| @@ -621,7 +621,7 @@ static void __init at91_add_device_rtt(void) | |||
| 621 | * Watchdog | 621 | * Watchdog |
| 622 | * -------------------------------------------------------------------- */ | 622 | * -------------------------------------------------------------------- */ |
| 623 | 623 | ||
| 624 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 624 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 625 | static struct platform_device at91sam9261_wdt_device = { | 625 | static struct platform_device at91sam9261_wdt_device = { |
| 626 | .name = "at91_wdt", | 626 | .name = "at91_wdt", |
| 627 | .id = -1, | 627 | .id = -1, |
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index b753cb879d8e..b7f233242315 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c | |||
| @@ -347,6 +347,111 @@ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) | |||
| 347 | void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {} | 347 | void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {} |
| 348 | #endif | 348 | #endif |
| 349 | 349 | ||
| 350 | /* -------------------------------------------------------------------- | ||
| 351 | * Compact Flash (PCMCIA or IDE) | ||
| 352 | * -------------------------------------------------------------------- */ | ||
| 353 | |||
| 354 | #if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE) || \ | ||
| 355 | defined(CONFIG_BLK_DEV_IDE_AT91) || defined(CONFIG_BLK_DEV_IDE_AT91_MODULE) | ||
| 356 | |||
| 357 | static struct at91_cf_data cf0_data; | ||
| 358 | |||
| 359 | static struct resource cf0_resources[] = { | ||
| 360 | [0] = { | ||
| 361 | .start = AT91_CHIPSELECT_4, | ||
| 362 | .end = AT91_CHIPSELECT_4 + SZ_256M - 1, | ||
| 363 | .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT, | ||
| 364 | } | ||
| 365 | }; | ||
| 366 | |||
| 367 | static struct platform_device cf0_device = { | ||
| 368 | .id = 0, | ||
| 369 | .dev = { | ||
| 370 | .platform_data = &cf0_data, | ||
| 371 | }, | ||
| 372 | .resource = cf0_resources, | ||
| 373 | .num_resources = ARRAY_SIZE(cf0_resources), | ||
| 374 | }; | ||
| 375 | |||
| 376 | static struct at91_cf_data cf1_data; | ||
| 377 | |||
| 378 | static struct resource cf1_resources[] = { | ||
| 379 | [0] = { | ||
| 380 | .start = AT91_CHIPSELECT_5, | ||
| 381 | .end = AT91_CHIPSELECT_5 + SZ_256M - 1, | ||
| 382 | .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT, | ||
| 383 | } | ||
| 384 | }; | ||
| 385 | |||
| 386 | static struct platform_device cf1_device = { | ||
| 387 | .id = 1, | ||
| 388 | .dev = { | ||
| 389 | .platform_data = &cf1_data, | ||
| 390 | }, | ||
| 391 | .resource = cf1_resources, | ||
| 392 | .num_resources = ARRAY_SIZE(cf1_resources), | ||
| 393 | }; | ||
| 394 | |||
| 395 | void __init at91_add_device_cf(struct at91_cf_data *data) | ||
| 396 | { | ||
| 397 | unsigned long ebi0_csa; | ||
| 398 | struct platform_device *pdev; | ||
| 399 | |||
| 400 | if (!data) | ||
| 401 | return; | ||
| 402 | |||
| 403 | /* | ||
| 404 | * assign CS4 or CS5 to SMC with Compact Flash logic support, | ||
| 405 | * we assume SMC timings are configured by board code, | ||
| 406 | * except True IDE where timings are controlled by driver | ||
| 407 | */ | ||
| 408 | ebi0_csa = at91_sys_read(AT91_MATRIX_EBI0CSA); | ||
| 409 | switch (data->chipselect) { | ||
| 410 | case 4: | ||
| 411 | at91_set_A_periph(AT91_PIN_PD6, 0); /* EBI0_NCS4/CFCS0 */ | ||
| 412 | ebi0_csa |= AT91_MATRIX_EBI0_CS4A_SMC_CF1; | ||
| 413 | cf0_data = *data; | ||
| 414 | pdev = &cf0_device; | ||
| 415 | break; | ||
| 416 | case 5: | ||
| 417 | at91_set_A_periph(AT91_PIN_PD7, 0); /* EBI0_NCS5/CFCS1 */ | ||
| 418 | ebi0_csa |= AT91_MATRIX_EBI0_CS5A_SMC_CF2; | ||
| 419 | cf1_data = *data; | ||
| 420 | pdev = &cf1_device; | ||
| 421 | break; | ||
| 422 | default: | ||
| 423 | printk(KERN_ERR "AT91 CF: bad chip-select requested (%u)\n", | ||
| 424 | data->chipselect); | ||
| 425 | return; | ||
| 426 | } | ||
| 427 | at91_sys_write(AT91_MATRIX_EBI0CSA, ebi0_csa); | ||
| 428 | |||
| 429 | if (data->det_pin) { | ||
| 430 | at91_set_gpio_input(data->det_pin, 1); | ||
| 431 | at91_set_deglitch(data->det_pin, 1); | ||
| 432 | } | ||
| 433 | |||
| 434 | if (data->irq_pin) { | ||
| 435 | at91_set_gpio_input(data->irq_pin, 1); | ||
| 436 | at91_set_deglitch(data->irq_pin, 1); | ||
| 437 | } | ||
| 438 | |||
| 439 | if (data->vcc_pin) | ||
| 440 | /* initially off */ | ||
| 441 | at91_set_gpio_output(data->vcc_pin, 0); | ||
| 442 | |||
| 443 | /* enable EBI controlled pins */ | ||
| 444 | at91_set_A_periph(AT91_PIN_PD5, 1); /* NWAIT */ | ||
| 445 | at91_set_A_periph(AT91_PIN_PD8, 0); /* CFCE1 */ | ||
| 446 | at91_set_A_periph(AT91_PIN_PD9, 0); /* CFCE2 */ | ||
| 447 | at91_set_A_periph(AT91_PIN_PD14, 0); /* CFNRW */ | ||
| 448 | |||
| 449 | pdev->name = (data->flags & AT91_CF_TRUE_IDE) ? "at91_ide" : "at91_cf"; | ||
| 450 | platform_device_register(pdev); | ||
| 451 | } | ||
| 452 | #else | ||
| 453 | void __init at91_add_device_cf(struct at91_cf_data *data) {} | ||
| 454 | #endif | ||
| 350 | 455 | ||
| 351 | /* -------------------------------------------------------------------- | 456 | /* -------------------------------------------------------------------- |
| 352 | * NAND / SmartMedia | 457 | * NAND / SmartMedia |
| @@ -854,7 +959,7 @@ static void __init at91_add_device_rtt(void) | |||
| 854 | * Watchdog | 959 | * Watchdog |
| 855 | * -------------------------------------------------------------------- */ | 960 | * -------------------------------------------------------------------- */ |
| 856 | 961 | ||
| 857 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 962 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 858 | static struct platform_device at91sam9263_wdt_device = { | 963 | static struct platform_device at91sam9263_wdt_device = { |
| 859 | .name = "at91_wdt", | 964 | .name = "at91_wdt", |
| 860 | .id = -1, | 965 | .id = -1, |
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index 145324f4ec56..728186515cdf 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c | |||
| @@ -609,7 +609,7 @@ static void __init at91_add_device_rtt(void) | |||
| 609 | * Watchdog | 609 | * Watchdog |
| 610 | * -------------------------------------------------------------------- */ | 610 | * -------------------------------------------------------------------- */ |
| 611 | 611 | ||
| 612 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 612 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 613 | static struct platform_device at91sam9rl_wdt_device = { | 613 | static struct platform_device at91sam9rl_wdt_device = { |
| 614 | .name = "at91_wdt", | 614 | .name = "at91_wdt", |
| 615 | .id = -1, | 615 | .id = -1, |
diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c index 9b0447c3d59b..2f7d4977dce9 100644 --- a/arch/arm/mach-at91/gpio.c +++ b/arch/arm/mach-at91/gpio.c | |||
| @@ -490,7 +490,8 @@ postcore_initcall(at91_gpio_debugfs_init); | |||
| 490 | 490 | ||
| 491 | /*--------------------------------------------------------------------------*/ | 491 | /*--------------------------------------------------------------------------*/ |
| 492 | 492 | ||
| 493 | /* This lock class tells lockdep that GPIO irqs are in a different | 493 | /* |
| 494 | * This lock class tells lockdep that GPIO irqs are in a different | ||
| 494 | * category than their parents, so it won't report false recursion. | 495 | * category than their parents, so it won't report false recursion. |
| 495 | */ | 496 | */ |
| 496 | static struct lock_class_key gpio_lock_class; | 497 | static struct lock_class_key gpio_lock_class; |
| @@ -509,9 +510,6 @@ void __init at91_gpio_irq_setup(void) | |||
| 509 | unsigned id = this->id; | 510 | unsigned id = this->id; |
| 510 | unsigned i; | 511 | unsigned i; |
| 511 | 512 | ||
| 512 | /* enable PIO controller's clock */ | ||
| 513 | clk_enable(this->clock); | ||
| 514 | |||
| 515 | __raw_writel(~0, this->regbase + PIO_IDR); | 513 | __raw_writel(~0, this->regbase + PIO_IDR); |
| 516 | 514 | ||
| 517 | for (i = 0, pin = this->chipbase; i < 32; i++, pin++) { | 515 | for (i = 0, pin = this->chipbase; i < 32; i++, pin++) { |
| @@ -556,7 +554,14 @@ void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks) | |||
| 556 | data->chipbase = PIN_BASE + i * 32; | 554 | data->chipbase = PIN_BASE + i * 32; |
| 557 | data->regbase = data->offset + (void __iomem *)AT91_VA_BASE_SYS; | 555 | data->regbase = data->offset + (void __iomem *)AT91_VA_BASE_SYS; |
| 558 | 556 | ||
| 559 | /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */ | 557 | /* enable PIO controller's clock */ |
| 558 | clk_enable(data->clock); | ||
| 559 | |||
| 560 | /* | ||
| 561 | * Some processors share peripheral ID between multiple GPIO banks. | ||
| 562 | * SAM9263 (PIOC, PIOD, PIOE) | ||
| 563 | * CAP9 (PIOA, PIOB, PIOC, PIOD) | ||
| 564 | */ | ||
| 560 | if (last && last->id == data->id) | 565 | if (last && last->id == data->id) |
| 561 | last->next = data; | 566 | last->next = data; |
| 562 | } | 567 | } |
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index fb51f0e0a83f..793fe7b25f36 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h | |||
| @@ -56,6 +56,9 @@ struct at91_cf_data { | |||
| 56 | u8 vcc_pin; /* power switching */ | 56 | u8 vcc_pin; /* power switching */ |
| 57 | u8 rst_pin; /* card reset */ | 57 | u8 rst_pin; /* card reset */ |
| 58 | u8 chipselect; /* EBI Chip Select number */ | 58 | u8 chipselect; /* EBI Chip Select number */ |
| 59 | u8 flags; | ||
| 60 | #define AT91_CF_TRUE_IDE 0x01 | ||
| 61 | #define AT91_IDE_SWAP_A0_A2 0x02 | ||
| 59 | }; | 62 | }; |
| 60 | extern void __init at91_add_device_cf(struct at91_cf_data *data); | 63 | extern void __init at91_add_device_cf(struct at91_cf_data *data); |
| 61 | 64 | ||
| @@ -93,6 +96,7 @@ struct atmel_nand_data { | |||
| 93 | u8 enable_pin; /* chip enable */ | 96 | u8 enable_pin; /* chip enable */ |
| 94 | u8 det_pin; /* card detect */ | 97 | u8 det_pin; /* card detect */ |
| 95 | u8 rdy_pin; /* ready/busy */ | 98 | u8 rdy_pin; /* ready/busy */ |
| 99 | u8 rdy_pin_active_low; /* rdy_pin value is inverted */ | ||
| 96 | u8 ale; /* address line number connected to ALE */ | 100 | u8 ale; /* address line number connected to ALE */ |
| 97 | u8 cle; /* address line number connected to CLE */ | 101 | u8 cle; /* address line number connected to CLE */ |
| 98 | u8 bus_width_16; /* buswidth is 16 bit */ | 102 | u8 bus_width_16; /* buswidth is 16 bit */ |
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index 9bb4f043aa22..7ac812dc055a 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c | |||
| @@ -332,7 +332,6 @@ static int at91_pm_enter(suspend_state_t state) | |||
| 332 | at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR)); | 332 | at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR)); |
| 333 | 333 | ||
| 334 | error: | 334 | error: |
| 335 | sdram_selfrefresh_disable(); | ||
| 336 | target_state = PM_SUSPEND_ON; | 335 | target_state = PM_SUSPEND_ON; |
| 337 | at91_irq_resume(); | 336 | at91_irq_resume(); |
| 338 | at91_gpio_resume(); | 337 | at91_gpio_resume(); |
diff --git a/arch/arm/mach-davinci/board-evm.c b/arch/arm/mach-davinci/board-evm.c index a957d239a683..38b6a9ce2a93 100644 --- a/arch/arm/mach-davinci/board-evm.c +++ b/arch/arm/mach-davinci/board-evm.c | |||
| @@ -311,6 +311,9 @@ evm_u35_setup(struct i2c_client *client, int gpio, unsigned ngpio, void *c) | |||
| 311 | gpio_request(gpio + 7, "nCF_SEL"); | 311 | gpio_request(gpio + 7, "nCF_SEL"); |
| 312 | gpio_direction_output(gpio + 7, 1); | 312 | gpio_direction_output(gpio + 7, 1); |
| 313 | 313 | ||
| 314 | /* irlml6401 sustains over 3A, switches 5V in under 8 msec */ | ||
| 315 | setup_usb(500, 8); | ||
| 316 | |||
| 314 | return 0; | 317 | return 0; |
| 315 | } | 318 | } |
| 316 | 319 | ||
| @@ -417,9 +420,6 @@ static __init void davinci_evm_init(void) | |||
| 417 | platform_add_devices(davinci_evm_devices, | 420 | platform_add_devices(davinci_evm_devices, |
| 418 | ARRAY_SIZE(davinci_evm_devices)); | 421 | ARRAY_SIZE(davinci_evm_devices)); |
| 419 | evm_init_i2c(); | 422 | evm_init_i2c(); |
| 420 | |||
| 421 | /* irlml6401 sustains over 3A, switches 5V in under 8 msec */ | ||
| 422 | setup_usb(500, 8); | ||
| 423 | } | 423 | } |
| 424 | 424 | ||
| 425 | static __init void davinci_evm_irq_init(void) | 425 | static __init void davinci_evm_irq_init(void) |
diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c index 28f6dbc95bd7..abb92b7eca0c 100644 --- a/arch/arm/mach-davinci/clock.c +++ b/arch/arm/mach-davinci/clock.c | |||
| @@ -231,6 +231,11 @@ static struct clk davinci_clks[] = { | |||
| 231 | .lpsc = DAVINCI_LPSC_GPIO, | 231 | .lpsc = DAVINCI_LPSC_GPIO, |
| 232 | }, | 232 | }, |
| 233 | { | 233 | { |
| 234 | .name = "usb", | ||
| 235 | .rate = &commonrate, | ||
| 236 | .lpsc = DAVINCI_LPSC_USB, | ||
| 237 | }, | ||
| 238 | { | ||
| 234 | .name = "AEMIFCLK", | 239 | .name = "AEMIFCLK", |
| 235 | .rate = &commonrate, | 240 | .rate = &commonrate, |
| 236 | .lpsc = DAVINCI_LPSC_AEMIF, | 241 | .lpsc = DAVINCI_LPSC_AEMIF, |
diff --git a/arch/arm/mach-davinci/usb.c b/arch/arm/mach-davinci/usb.c index 867ead2559ad..69680784448a 100644 --- a/arch/arm/mach-davinci/usb.c +++ b/arch/arm/mach-davinci/usb.c | |||
| @@ -47,6 +47,7 @@ static struct musb_hdrc_platform_data usb_data = { | |||
| 47 | #elif defined(CONFIG_USB_MUSB_HOST) | 47 | #elif defined(CONFIG_USB_MUSB_HOST) |
| 48 | .mode = MUSB_HOST, | 48 | .mode = MUSB_HOST, |
| 49 | #endif | 49 | #endif |
| 50 | .clock = "usb", | ||
| 50 | .config = &musb_config, | 51 | .config = &musb_config, |
| 51 | }; | 52 | }; |
| 52 | 53 | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/gesbc9312.h b/arch/arm/mach-ep93xx/include/mach/gesbc9312.h deleted file mode 100644 index 21fe2b922aa5..000000000000 --- a/arch/arm/mach-ep93xx/include/mach/gesbc9312.h +++ /dev/null | |||
| @@ -1,3 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ep93xx/include/mach/gesbc9312.h | ||
| 3 | */ | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/hardware.h b/arch/arm/mach-ep93xx/include/mach/hardware.h index 529807d182bf..2866297310b7 100644 --- a/arch/arm/mach-ep93xx/include/mach/hardware.h +++ b/arch/arm/mach-ep93xx/include/mach/hardware.h | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | 10 | ||
| 11 | #include "platform.h" | 11 | #include "platform.h" |
| 12 | 12 | ||
| 13 | #include "gesbc9312.h" | ||
| 14 | #include "ts72xx.h" | 13 | #include "ts72xx.h" |
| 15 | 14 | ||
| 16 | #endif | 15 | #endif |
diff --git a/arch/arm/mach-ep93xx/include/mach/platform.h b/arch/arm/mach-ep93xx/include/mach/platform.h index 88f7e88f152f..05f0f4f2f3ce 100644 --- a/arch/arm/mach-ep93xx/include/mach/platform.h +++ b/arch/arm/mach-ep93xx/include/mach/platform.h | |||
| @@ -4,6 +4,8 @@ | |||
| 4 | 4 | ||
| 5 | #ifndef __ASSEMBLY__ | 5 | #ifndef __ASSEMBLY__ |
| 6 | 6 | ||
| 7 | struct i2c_board_info; | ||
| 8 | |||
| 7 | struct ep93xx_eth_data | 9 | struct ep93xx_eth_data |
| 8 | { | 10 | { |
| 9 | unsigned char dev_addr[6]; | 11 | unsigned char dev_addr[6]; |
diff --git a/arch/arm/mach-kirkwood/irq.c b/arch/arm/mach-kirkwood/irq.c index efb86b700276..06083b23bb44 100644 --- a/arch/arm/mach-kirkwood/irq.c +++ b/arch/arm/mach-kirkwood/irq.c | |||
| @@ -42,7 +42,7 @@ void __init kirkwood_init_irq(void) | |||
| 42 | writel(0, GPIO_EDGE_CAUSE(32)); | 42 | writel(0, GPIO_EDGE_CAUSE(32)); |
| 43 | 43 | ||
| 44 | for (i = IRQ_KIRKWOOD_GPIO_START; i < NR_IRQS; i++) { | 44 | for (i = IRQ_KIRKWOOD_GPIO_START; i < NR_IRQS; i++) { |
| 45 | set_irq_chip(i, &orion_gpio_irq_level_chip); | 45 | set_irq_chip(i, &orion_gpio_irq_chip); |
| 46 | set_irq_handler(i, handle_level_irq); | 46 | set_irq_handler(i, handle_level_irq); |
| 47 | irq_desc[i].status |= IRQ_LEVEL; | 47 | irq_desc[i].status |= IRQ_LEVEL; |
| 48 | set_irq_flags(i, IRQF_VALID); | 48 | set_irq_flags(i, IRQF_VALID); |
diff --git a/arch/arm/mach-mv78xx0/irq.c b/arch/arm/mach-mv78xx0/irq.c index e273418797b4..30b7e4bcdbc7 100644 --- a/arch/arm/mach-mv78xx0/irq.c +++ b/arch/arm/mach-mv78xx0/irq.c | |||
| @@ -40,7 +40,7 @@ void __init mv78xx0_init_irq(void) | |||
| 40 | writel(0, GPIO_EDGE_CAUSE(0)); | 40 | writel(0, GPIO_EDGE_CAUSE(0)); |
| 41 | 41 | ||
| 42 | for (i = IRQ_MV78XX0_GPIO_START; i < NR_IRQS; i++) { | 42 | for (i = IRQ_MV78XX0_GPIO_START; i < NR_IRQS; i++) { |
| 43 | set_irq_chip(i, &orion_gpio_irq_level_chip); | 43 | set_irq_chip(i, &orion_gpio_irq_chip); |
| 44 | set_irq_handler(i, handle_level_irq); | 44 | set_irq_handler(i, handle_level_irq); |
| 45 | irq_desc[i].status |= IRQ_LEVEL; | 45 | irq_desc[i].status |= IRQ_LEVEL; |
| 46 | set_irq_flags(i, IRQF_VALID); | 46 | set_irq_flags(i, IRQF_VALID); |
diff --git a/arch/arm/mach-mx1/devices.c b/arch/arm/mach-mx1/devices.c index 686d8d2dbb24..a95644193f3f 100644 --- a/arch/arm/mach-mx1/devices.c +++ b/arch/arm/mach-mx1/devices.c | |||
| @@ -23,6 +23,8 @@ | |||
| 23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
| 24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
| 25 | #include <linux/gpio.h> | 25 | #include <linux/gpio.h> |
| 26 | |||
| 27 | #include <mach/irqs.h> | ||
| 26 | #include <mach/hardware.h> | 28 | #include <mach/hardware.h> |
| 27 | 29 | ||
| 28 | static struct resource imx_csi_resources[] = { | 30 | static struct resource imx_csi_resources[] = { |
diff --git a/arch/arm/mach-mx1/mx1ads.c b/arch/arm/mach-mx1/mx1ads.c index 2e4b185fe4a9..3200cf60e384 100644 --- a/arch/arm/mach-mx1/mx1ads.c +++ b/arch/arm/mach-mx1/mx1ads.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
| 22 | #include <asm/mach/time.h> | 22 | #include <asm/mach/time.h> |
| 23 | 23 | ||
| 24 | #include <mach/irqs.h> | ||
| 24 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
| 25 | #include <mach/common.h> | 26 | #include <mach/common.h> |
| 26 | #include <mach/imx-uart.h> | 27 | #include <mach/imx-uart.h> |
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index f6a13451d1fd..6031e179926b 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c | |||
| @@ -81,7 +81,7 @@ static inline void __init ldp_init_smc911x(void) | |||
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | ldp_smc911x_resources[0].start = cs_mem_base + 0x0; | 83 | ldp_smc911x_resources[0].start = cs_mem_base + 0x0; |
| 84 | ldp_smc911x_resources[0].end = cs_mem_base + 0xf; | 84 | ldp_smc911x_resources[0].end = cs_mem_base + 0xff; |
| 85 | udelay(100); | 85 | udelay(100); |
| 86 | 86 | ||
| 87 | eth_gpio = LDP_SMC911X_GPIO; | 87 | eth_gpio = LDP_SMC911X_GPIO; |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 38c88fbe658d..e39cd2c46cfa 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
| @@ -178,7 +178,9 @@ static int __init omap3_beagle_i2c_init(void) | |||
| 178 | #ifdef CONFIG_I2C2_OMAP_BEAGLE | 178 | #ifdef CONFIG_I2C2_OMAP_BEAGLE |
| 179 | omap_register_i2c_bus(2, 400, NULL, 0); | 179 | omap_register_i2c_bus(2, 400, NULL, 0); |
| 180 | #endif | 180 | #endif |
| 181 | omap_register_i2c_bus(3, 400, NULL, 0); | 181 | /* Bus 3 is attached to the DVI port where devices like the pico DLP |
| 182 | * projector don't work reliably with 400kHz */ | ||
| 183 | omap_register_i2c_bus(3, 100, NULL, 0); | ||
| 182 | return 0; | 184 | return 0; |
| 183 | } | 185 | } |
| 184 | 186 | ||
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index ad721e0cbf7a..ce4d46a4a838 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c | |||
| @@ -565,7 +565,7 @@ u32 omap2_clksel_to_divisor(struct clk *clk, u32 field_val) | |||
| 565 | * | 565 | * |
| 566 | * Given a struct clk of a rate-selectable clksel clock, and a clock divisor, | 566 | * Given a struct clk of a rate-selectable clksel clock, and a clock divisor, |
| 567 | * find the corresponding register field value. The return register value is | 567 | * find the corresponding register field value. The return register value is |
| 568 | * the value before left-shifting. Returns 0xffffffff on error | 568 | * the value before left-shifting. Returns ~0 on error |
| 569 | */ | 569 | */ |
| 570 | u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) | 570 | u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) |
| 571 | { | 571 | { |
| @@ -577,7 +577,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) | |||
| 577 | 577 | ||
| 578 | clks = omap2_get_clksel_by_parent(clk, clk->parent); | 578 | clks = omap2_get_clksel_by_parent(clk, clk->parent); |
| 579 | if (clks == NULL) | 579 | if (clks == NULL) |
| 580 | return 0; | 580 | return ~0; |
| 581 | 581 | ||
| 582 | for (clkr = clks->rates; clkr->div; clkr++) { | 582 | for (clkr = clks->rates; clkr->div; clkr++) { |
| 583 | if ((clkr->flags & cpu_mask) && (clkr->div == div)) | 583 | if ((clkr->flags & cpu_mask) && (clkr->div == div)) |
| @@ -588,7 +588,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) | |||
| 588 | printk(KERN_ERR "clock: Could not find divisor %d for " | 588 | printk(KERN_ERR "clock: Could not find divisor %d for " |
| 589 | "clock %s parent %s\n", div, clk->name, | 589 | "clock %s parent %s\n", div, clk->name, |
| 590 | clk->parent->name); | 590 | clk->parent->name); |
| 591 | return 0; | 591 | return ~0; |
| 592 | } | 592 | } |
| 593 | 593 | ||
| 594 | return clkr->val; | 594 | return clkr->val; |
| @@ -708,7 +708,7 @@ static u32 omap2_clksel_get_src_field(void __iomem **src_addr, | |||
| 708 | return 0; | 708 | return 0; |
| 709 | 709 | ||
| 710 | for (clkr = clks->rates; clkr->div; clkr++) { | 710 | for (clkr = clks->rates; clkr->div; clkr++) { |
| 711 | if (clkr->flags & (cpu_mask | DEFAULT_RATE)) | 711 | if (clkr->flags & cpu_mask && clkr->flags & DEFAULT_RATE) |
| 712 | break; /* Found the default rate for this platform */ | 712 | break; /* Found the default rate for this platform */ |
| 713 | } | 713 | } |
| 714 | 714 | ||
| @@ -746,7 +746,7 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent) | |||
| 746 | return -EINVAL; | 746 | return -EINVAL; |
| 747 | 747 | ||
| 748 | if (clk->usecount > 0) | 748 | if (clk->usecount > 0) |
| 749 | _omap2_clk_disable(clk); | 749 | omap2_clk_disable(clk); |
| 750 | 750 | ||
| 751 | /* Set new source value (previous dividers if any in effect) */ | 751 | /* Set new source value (previous dividers if any in effect) */ |
| 752 | reg_val = __raw_readl(src_addr) & ~field_mask; | 752 | reg_val = __raw_readl(src_addr) & ~field_mask; |
| @@ -759,11 +759,11 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent) | |||
| 759 | wmb(); | 759 | wmb(); |
| 760 | } | 760 | } |
| 761 | 761 | ||
| 762 | if (clk->usecount > 0) | ||
| 763 | _omap2_clk_enable(clk); | ||
| 764 | |||
| 765 | clk->parent = new_parent; | 762 | clk->parent = new_parent; |
| 766 | 763 | ||
| 764 | if (clk->usecount > 0) | ||
| 765 | omap2_clk_enable(clk); | ||
| 766 | |||
| 767 | /* CLKSEL clocks follow their parents' rates, divided by a divisor */ | 767 | /* CLKSEL clocks follow their parents' rates, divided by a divisor */ |
| 768 | clk->rate = new_parent->rate; | 768 | clk->rate = new_parent->rate; |
| 769 | 769 | ||
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index 0a623379789f..8a0e49d84256 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
| @@ -431,6 +431,10 @@ void __init orion5x_uart1_init(void) | |||
| 431 | /***************************************************************************** | 431 | /***************************************************************************** |
| 432 | * XOR engine | 432 | * XOR engine |
| 433 | ****************************************************************************/ | 433 | ****************************************************************************/ |
| 434 | struct mv_xor_platform_shared_data orion5x_xor_shared_data = { | ||
| 435 | .dram = &orion5x_mbus_dram_info, | ||
| 436 | }; | ||
| 437 | |||
| 434 | static struct resource orion5x_xor_shared_resources[] = { | 438 | static struct resource orion5x_xor_shared_resources[] = { |
| 435 | { | 439 | { |
| 436 | .name = "xor low", | 440 | .name = "xor low", |
| @@ -448,6 +452,9 @@ static struct resource orion5x_xor_shared_resources[] = { | |||
| 448 | static struct platform_device orion5x_xor_shared = { | 452 | static struct platform_device orion5x_xor_shared = { |
| 449 | .name = MV_XOR_SHARED_NAME, | 453 | .name = MV_XOR_SHARED_NAME, |
| 450 | .id = 0, | 454 | .id = 0, |
| 455 | .dev = { | ||
| 456 | .platform_data = &orion5x_xor_shared_data, | ||
| 457 | }, | ||
| 451 | .num_resources = ARRAY_SIZE(orion5x_xor_shared_resources), | 458 | .num_resources = ARRAY_SIZE(orion5x_xor_shared_resources), |
| 452 | .resource = orion5x_xor_shared_resources, | 459 | .resource = orion5x_xor_shared_resources, |
| 453 | }; | 460 | }; |
diff --git a/arch/arm/mach-orion5x/irq.c b/arch/arm/mach-orion5x/irq.c index 0caae43301e5..e03f7b45cb0d 100644 --- a/arch/arm/mach-orion5x/irq.c +++ b/arch/arm/mach-orion5x/irq.c | |||
| @@ -44,7 +44,7 @@ void __init orion5x_init_irq(void) | |||
| 44 | * User can use set_type() if he wants to use edge types handlers. | 44 | * User can use set_type() if he wants to use edge types handlers. |
| 45 | */ | 45 | */ |
| 46 | for (i = IRQ_ORION5X_GPIO_START; i < NR_IRQS; i++) { | 46 | for (i = IRQ_ORION5X_GPIO_START; i < NR_IRQS; i++) { |
| 47 | set_irq_chip(i, &orion_gpio_irq_level_chip); | 47 | set_irq_chip(i, &orion_gpio_irq_chip); |
| 48 | set_irq_handler(i, handle_level_irq); | 48 | set_irq_handler(i, handle_level_irq); |
| 49 | irq_desc[i].status |= IRQ_LEVEL; | 49 | irq_desc[i].status |= IRQ_LEVEL; |
| 50 | set_irq_flags(i, IRQF_VALID); | 50 | set_irq_flags(i, IRQF_VALID); |
diff --git a/arch/arm/mach-pxa/dma.c b/arch/arm/mach-pxa/dma.c index b1514fb20d3a..7de17fc5d54b 100644 --- a/arch/arm/mach-pxa/dma.c +++ b/arch/arm/mach-pxa/dma.c | |||
| @@ -121,20 +121,22 @@ int __init pxa_init_dma(int num_ch) | |||
| 121 | if (dma_channels == NULL) | 121 | if (dma_channels == NULL) |
| 122 | return -ENOMEM; | 122 | return -ENOMEM; |
| 123 | 123 | ||
| 124 | ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL); | ||
| 125 | if (ret) { | ||
| 126 | printk (KERN_CRIT "Wow! Can't register IRQ for DMA\n"); | ||
| 127 | kfree(dma_channels); | ||
| 128 | return ret; | ||
| 129 | } | ||
| 130 | |||
| 131 | /* dma channel priorities on pxa2xx processors: | 124 | /* dma channel priorities on pxa2xx processors: |
| 132 | * ch 0 - 3, 16 - 19 <--> (0) DMA_PRIO_HIGH | 125 | * ch 0 - 3, 16 - 19 <--> (0) DMA_PRIO_HIGH |
| 133 | * ch 4 - 7, 20 - 23 <--> (1) DMA_PRIO_MEDIUM | 126 | * ch 4 - 7, 20 - 23 <--> (1) DMA_PRIO_MEDIUM |
| 134 | * ch 8 - 15, 24 - 31 <--> (2) DMA_PRIO_LOW | 127 | * ch 8 - 15, 24 - 31 <--> (2) DMA_PRIO_LOW |
| 135 | */ | 128 | */ |
| 136 | for (i = 0; i < num_ch; i++) | 129 | for (i = 0; i < num_ch; i++) { |
| 130 | DCSR(i) = 0; | ||
| 137 | dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW); | 131 | dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW); |
| 132 | } | ||
| 133 | |||
| 134 | ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL); | ||
| 135 | if (ret) { | ||
| 136 | printk (KERN_CRIT "Wow! Can't register IRQ for DMA\n"); | ||
| 137 | kfree(dma_channels); | ||
| 138 | return ret; | ||
| 139 | } | ||
| 138 | 140 | ||
| 139 | num_dma_channels = num_ch; | 141 | num_dma_channels = num_ch; |
| 140 | return 0; | 142 | return 0; |
diff --git a/arch/arm/mach-pxa/include/mach/regs-ac97.h b/arch/arm/mach-pxa/include/mach/regs-ac97.h index e41b9d202b8c..b8d14bd9ae59 100644 --- a/arch/arm/mach-pxa/include/mach/regs-ac97.h +++ b/arch/arm/mach-pxa/include/mach/regs-ac97.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef __ASM_ARCH_REGS_AC97_H | 1 | #ifndef __ASM_ARCH_REGS_AC97_H |
| 2 | #define __ASM_ARCH_REGS_AC97_H | 2 | #define __ASM_ARCH_REGS_AC97_H |
| 3 | 3 | ||
| 4 | #include <mach/hardware.h> | ||
| 5 | |||
| 4 | /* | 6 | /* |
| 5 | * AC97 Controller registers | 7 | * AC97 Controller registers |
| 6 | */ | 8 | */ |
diff --git a/arch/arm/mach-pxa/include/mach/regs-ssp.h b/arch/arm/mach-pxa/include/mach/regs-ssp.h index 3c04cde2cf1f..cf31986f6f05 100644 --- a/arch/arm/mach-pxa/include/mach/regs-ssp.h +++ b/arch/arm/mach-pxa/include/mach/regs-ssp.h | |||
| @@ -41,6 +41,9 @@ | |||
| 41 | #elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) | 41 | #elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) |
| 42 | #define SSCR0_SCR (0x000fff00) /* Serial Clock Rate (mask) */ | 42 | #define SSCR0_SCR (0x000fff00) /* Serial Clock Rate (mask) */ |
| 43 | #define SSCR0_SerClkDiv(x) (((x) - 1) << 8) /* Divisor [1..4096] */ | 43 | #define SSCR0_SerClkDiv(x) (((x) - 1) << 8) /* Divisor [1..4096] */ |
| 44 | #endif | ||
| 45 | |||
| 46 | #if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) | ||
| 44 | #define SSCR0_EDSS (1 << 20) /* Extended data size select */ | 47 | #define SSCR0_EDSS (1 << 20) /* Extended data size select */ |
| 45 | #define SSCR0_NCS (1 << 21) /* Network clock select */ | 48 | #define SSCR0_NCS (1 << 21) /* Network clock select */ |
| 46 | #define SSCR0_RIM (1 << 22) /* Receive FIFO overrrun interrupt mask */ | 49 | #define SSCR0_RIM (1 << 22) /* Receive FIFO overrrun interrupt mask */ |
diff --git a/arch/arm/mach-pxa/pxa300.c b/arch/arm/mach-pxa/pxa300.c index f735e58e6669..83fb609b6eb7 100644 --- a/arch/arm/mach-pxa/pxa300.c +++ b/arch/arm/mach-pxa/pxa300.c | |||
| @@ -88,13 +88,13 @@ static struct pxa3xx_mfp_addr_map pxa310_mfp_addr_map[] __initdata = { | |||
| 88 | static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0); | 88 | static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0); |
| 89 | 89 | ||
| 90 | static struct clk_lookup common_clkregs[] = { | 90 | static struct clk_lookup common_clkregs[] = { |
| 91 | INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", "NANDCLK"), | 91 | INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", NULL), |
| 92 | }; | 92 | }; |
| 93 | 93 | ||
| 94 | static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0); | 94 | static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0); |
| 95 | 95 | ||
| 96 | static struct clk_lookup pxa310_clkregs[] = { | 96 | static struct clk_lookup pxa310_clkregs[] = { |
| 97 | INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", "MMCCLK"), | 97 | INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", NULL), |
| 98 | }; | 98 | }; |
| 99 | 99 | ||
| 100 | static int __init pxa300_init(void) | 100 | static int __init pxa300_init(void) |
diff --git a/arch/arm/mach-pxa/pxa320.c b/arch/arm/mach-pxa/pxa320.c index effe408c186f..36f066196fa2 100644 --- a/arch/arm/mach-pxa/pxa320.c +++ b/arch/arm/mach-pxa/pxa320.c | |||
| @@ -83,7 +83,7 @@ static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = { | |||
| 83 | static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0); | 83 | static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0); |
| 84 | 84 | ||
| 85 | static struct clk_lookup pxa320_clkregs[] = { | 85 | static struct clk_lookup pxa320_clkregs[] = { |
| 86 | INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", "NANDCLK"), | 86 | INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", NULL), |
| 87 | }; | 87 | }; |
| 88 | 88 | ||
| 89 | static int __init pxa320_init(void) | 89 | static int __init pxa320_init(void) |
diff --git a/arch/arm/mach-rpc/riscpc.c b/arch/arm/mach-rpc/riscpc.c index e88d417736af..c7fc01e9d1f6 100644 --- a/arch/arm/mach-rpc/riscpc.c +++ b/arch/arm/mach-rpc/riscpc.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/serial_8250.h> | 19 | #include <linux/serial_8250.h> |
| 20 | #include <linux/ata_platform.h> | 20 | #include <linux/ata_platform.h> |
| 21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
| 22 | #include <linux/i2c.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/elf.h> | 24 | #include <asm/elf.h> |
| 24 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
| @@ -201,8 +202,13 @@ static struct platform_device *devs[] __initdata = { | |||
| 201 | &pata_device, | 202 | &pata_device, |
| 202 | }; | 203 | }; |
| 203 | 204 | ||
| 205 | static struct i2c_board_info i2c_rtc = { | ||
| 206 | I2C_BOARD_INFO("pcf8583", 0x50) | ||
| 207 | }; | ||
| 208 | |||
| 204 | static int __init rpc_init(void) | 209 | static int __init rpc_init(void) |
| 205 | { | 210 | { |
| 211 | i2c_register_board_info(0, &i2c_rtc, 1); | ||
| 206 | return platform_add_devices(devs, ARRAY_SIZE(devs)); | 212 | return platform_add_devices(devs, ARRAY_SIZE(devs)); |
| 207 | } | 213 | } |
| 208 | 214 | ||
diff --git a/arch/arm/mach-s3c6410/mach-smdk6410.c b/arch/arm/mach-s3c6410/mach-smdk6410.c index 3c4d47145c83..25f7935576f8 100644 --- a/arch/arm/mach-s3c6410/mach-smdk6410.c +++ b/arch/arm/mach-s3c6410/mach-smdk6410.c | |||
| @@ -129,7 +129,7 @@ static struct s3c_fb_platdata smdk6410_lcd_pdata __initdata = { | |||
| 129 | .vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC, | 129 | .vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC, |
| 130 | }; | 130 | }; |
| 131 | 131 | ||
| 132 | struct map_desc smdk6410_iodesc[] = {}; | 132 | static struct map_desc smdk6410_iodesc[] = {}; |
| 133 | 133 | ||
| 134 | static struct platform_device *smdk6410_devices[] __initdata = { | 134 | static struct platform_device *smdk6410_devices[] __initdata = { |
| 135 | #ifdef CONFIG_SMDK6410_SD_CH0 | 135 | #ifdef CONFIG_SMDK6410_SD_CH0 |
| @@ -146,7 +146,7 @@ static struct platform_device *smdk6410_devices[] __initdata = { | |||
| 146 | 146 | ||
| 147 | static struct i2c_board_info i2c_devs0[] __initdata = { | 147 | static struct i2c_board_info i2c_devs0[] __initdata = { |
| 148 | { I2C_BOARD_INFO("24c08", 0x50), }, | 148 | { I2C_BOARD_INFO("24c08", 0x50), }, |
| 149 | { I2C_BOARD_INFO("WM8580", 0X1b), }, | 149 | { I2C_BOARD_INFO("wm8580", 0x1b), }, |
| 150 | }; | 150 | }; |
| 151 | 151 | ||
| 152 | static struct i2c_board_info i2c_devs1[] __initdata = { | 152 | static struct i2c_board_info i2c_devs1[] __initdata = { |
diff --git a/arch/arm/mm/abort-ev6.S b/arch/arm/mm/abort-ev6.S index 8a7f65ba14b7..94077fbd96b7 100644 --- a/arch/arm/mm/abort-ev6.S +++ b/arch/arm/mm/abort-ev6.S | |||
| @@ -23,7 +23,8 @@ ENTRY(v6_early_abort) | |||
| 23 | #ifdef CONFIG_CPU_32v6K | 23 | #ifdef CONFIG_CPU_32v6K |
| 24 | clrex | 24 | clrex |
| 25 | #else | 25 | #else |
| 26 | strex r0, r1, [sp] @ Clear the exclusive monitor | 26 | sub r1, sp, #4 @ Get unused stack location |
| 27 | strex r0, r1, [r1] @ Clear the exclusive monitor | ||
| 27 | #endif | 28 | #endif |
| 28 | mrc p15, 0, r1, c5, c0, 0 @ get FSR | 29 | mrc p15, 0, r1, c5, c0, 0 @ get FSR |
| 29 | mrc p15, 0, r0, c6, c0, 0 @ get FAR | 30 | mrc p15, 0, r0, c6, c0, 0 @ get FAR |
diff --git a/arch/arm/mm/copypage-feroceon.c b/arch/arm/mm/copypage-feroceon.c index c3ba6a94da0c..70997d5bee2d 100644 --- a/arch/arm/mm/copypage-feroceon.c +++ b/arch/arm/mm/copypage-feroceon.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
| 14 | #include <linux/highmem.h> | 14 | #include <linux/highmem.h> |
| 15 | 15 | ||
| 16 | static void __attribute__((naked)) | 16 | static void __naked |
| 17 | feroceon_copy_user_page(void *kto, const void *kfrom) | 17 | feroceon_copy_user_page(void *kto, const void *kfrom) |
| 18 | { | 18 | { |
| 19 | asm("\ | 19 | asm("\ |
diff --git a/arch/arm/mm/copypage-v3.c b/arch/arm/mm/copypage-v3.c index 70ed96c8af8e..de9c06854ad7 100644 --- a/arch/arm/mm/copypage-v3.c +++ b/arch/arm/mm/copypage-v3.c | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | * | 15 | * |
| 16 | * FIXME: do we need to handle cache stuff... | 16 | * FIXME: do we need to handle cache stuff... |
| 17 | */ | 17 | */ |
| 18 | static void __attribute__((naked)) | 18 | static void __naked |
| 19 | v3_copy_user_page(void *kto, const void *kfrom) | 19 | v3_copy_user_page(void *kto, const void *kfrom) |
| 20 | { | 20 | { |
| 21 | asm("\n\ | 21 | asm("\n\ |
diff --git a/arch/arm/mm/copypage-v4mc.c b/arch/arm/mm/copypage-v4mc.c index 1601698b9800..7370a7142b04 100644 --- a/arch/arm/mm/copypage-v4mc.c +++ b/arch/arm/mm/copypage-v4mc.c | |||
| @@ -44,7 +44,7 @@ static DEFINE_SPINLOCK(minicache_lock); | |||
| 44 | * instruction. If your processor does not supply this, you have to write your | 44 | * instruction. If your processor does not supply this, you have to write your |
| 45 | * own copy_user_highpage that does the right thing. | 45 | * own copy_user_highpage that does the right thing. |
| 46 | */ | 46 | */ |
| 47 | static void __attribute__((naked)) | 47 | static void __naked |
| 48 | mc_copy_user_page(void *from, void *to) | 48 | mc_copy_user_page(void *from, void *to) |
| 49 | { | 49 | { |
| 50 | asm volatile( | 50 | asm volatile( |
diff --git a/arch/arm/mm/copypage-v4wb.c b/arch/arm/mm/copypage-v4wb.c index 3ec93dab7656..9ab098414227 100644 --- a/arch/arm/mm/copypage-v4wb.c +++ b/arch/arm/mm/copypage-v4wb.c | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | * instruction. If your processor does not supply this, you have to write your | 22 | * instruction. If your processor does not supply this, you have to write your |
| 23 | * own copy_user_highpage that does the right thing. | 23 | * own copy_user_highpage that does the right thing. |
| 24 | */ | 24 | */ |
| 25 | static void __attribute__((naked)) | 25 | static void __naked |
| 26 | v4wb_copy_user_page(void *kto, const void *kfrom) | 26 | v4wb_copy_user_page(void *kto, const void *kfrom) |
| 27 | { | 27 | { |
| 28 | asm("\ | 28 | asm("\ |
diff --git a/arch/arm/mm/copypage-v4wt.c b/arch/arm/mm/copypage-v4wt.c index 0f1188efae45..300efafd6643 100644 --- a/arch/arm/mm/copypage-v4wt.c +++ b/arch/arm/mm/copypage-v4wt.c | |||
| @@ -20,7 +20,7 @@ | |||
| 20 | * dirty data in the cache. However, we do have to ensure that | 20 | * dirty data in the cache. However, we do have to ensure that |
| 21 | * subsequent reads are up to date. | 21 | * subsequent reads are up to date. |
| 22 | */ | 22 | */ |
| 23 | static void __attribute__((naked)) | 23 | static void __naked |
| 24 | v4wt_copy_user_page(void *kto, const void *kfrom) | 24 | v4wt_copy_user_page(void *kto, const void *kfrom) |
| 25 | { | 25 | { |
| 26 | asm("\ | 26 | asm("\ |
diff --git a/arch/arm/mm/copypage-xsc3.c b/arch/arm/mm/copypage-xsc3.c index 39a994542cad..bc4525f5ab23 100644 --- a/arch/arm/mm/copypage-xsc3.c +++ b/arch/arm/mm/copypage-xsc3.c | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | * if we eventually end up using our copied page. | 29 | * if we eventually end up using our copied page. |
| 30 | * | 30 | * |
| 31 | */ | 31 | */ |
| 32 | static void __attribute__((naked)) | 32 | static void __naked |
| 33 | xsc3_mc_copy_user_page(void *kto, const void *kfrom) | 33 | xsc3_mc_copy_user_page(void *kto, const void *kfrom) |
| 34 | { | 34 | { |
| 35 | asm("\ | 35 | asm("\ |
diff --git a/arch/arm/mm/copypage-xscale.c b/arch/arm/mm/copypage-xscale.c index d18f2397ee2d..76824d3e966a 100644 --- a/arch/arm/mm/copypage-xscale.c +++ b/arch/arm/mm/copypage-xscale.c | |||
| @@ -42,7 +42,7 @@ static DEFINE_SPINLOCK(minicache_lock); | |||
| 42 | * Dcache aliasing issue. The writes will be forwarded to the write buffer, | 42 | * Dcache aliasing issue. The writes will be forwarded to the write buffer, |
| 43 | * and merged as appropriate. | 43 | * and merged as appropriate. |
| 44 | */ | 44 | */ |
| 45 | static void __attribute__((naked)) | 45 | static void __naked |
| 46 | mc_copy_user_page(void *from, void *to) | 46 | mc_copy_user_page(void *from, void *to) |
| 47 | { | 47 | { |
| 48 | /* | 48 | /* |
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 310e479309ef..f1ef5613ccd4 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
| @@ -490,26 +490,30 @@ core_initcall(consistent_init); | |||
| 490 | */ | 490 | */ |
| 491 | void dma_cache_maint(const void *start, size_t size, int direction) | 491 | void dma_cache_maint(const void *start, size_t size, int direction) |
| 492 | { | 492 | { |
| 493 | const void *end = start + size; | 493 | void (*inner_op)(const void *, const void *); |
| 494 | void (*outer_op)(unsigned long, unsigned long); | ||
| 494 | 495 | ||
| 495 | BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(end - 1)); | 496 | BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(start + size - 1)); |
| 496 | 497 | ||
| 497 | switch (direction) { | 498 | switch (direction) { |
| 498 | case DMA_FROM_DEVICE: /* invalidate only */ | 499 | case DMA_FROM_DEVICE: /* invalidate only */ |
| 499 | dmac_inv_range(start, end); | 500 | inner_op = dmac_inv_range; |
| 500 | outer_inv_range(__pa(start), __pa(end)); | 501 | outer_op = outer_inv_range; |
| 501 | break; | 502 | break; |
| 502 | case DMA_TO_DEVICE: /* writeback only */ | 503 | case DMA_TO_DEVICE: /* writeback only */ |
| 503 | dmac_clean_range(start, end); | 504 | inner_op = dmac_clean_range; |
| 504 | outer_clean_range(__pa(start), __pa(end)); | 505 | outer_op = outer_clean_range; |
| 505 | break; | 506 | break; |
| 506 | case DMA_BIDIRECTIONAL: /* writeback and invalidate */ | 507 | case DMA_BIDIRECTIONAL: /* writeback and invalidate */ |
| 507 | dmac_flush_range(start, end); | 508 | inner_op = dmac_flush_range; |
| 508 | outer_flush_range(__pa(start), __pa(end)); | 509 | outer_op = outer_flush_range; |
| 509 | break; | 510 | break; |
| 510 | default: | 511 | default: |
| 511 | BUG(); | 512 | BUG(); |
| 512 | } | 513 | } |
| 514 | |||
| 515 | inner_op(start, start + size); | ||
| 516 | outer_op(__pa(start), __pa(start) + size); | ||
| 513 | } | 517 | } |
| 514 | EXPORT_SYMBOL(dma_cache_maint); | 518 | EXPORT_SYMBOL(dma_cache_maint); |
| 515 | 519 | ||
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 34df4d9d03a6..80fd3b69ae1f 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
| @@ -382,7 +382,7 @@ void __init bootmem_init(void) | |||
| 382 | for_each_node(node) | 382 | for_each_node(node) |
| 383 | bootmem_free_node(node, mi); | 383 | bootmem_free_node(node, mi); |
| 384 | 384 | ||
| 385 | high_memory = __va(memend_pfn << PAGE_SHIFT); | 385 | high_memory = __va((memend_pfn << PAGE_SHIFT) - 1) + 1; |
| 386 | 386 | ||
| 387 | /* | 387 | /* |
| 388 | * This doesn't seem to be used by the Linux memory manager any | 388 | * This doesn't seem to be used by the Linux memory manager any |
diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c index 5358fcc7f61e..f7457fea6de8 100644 --- a/arch/arm/mm/mmap.c +++ b/arch/arm/mm/mmap.c | |||
| @@ -124,7 +124,7 @@ int valid_phys_addr_range(unsigned long addr, size_t size) | |||
| 124 | { | 124 | { |
| 125 | if (addr < PHYS_OFFSET) | 125 | if (addr < PHYS_OFFSET) |
| 126 | return 0; | 126 | return 0; |
| 127 | if (addr + size > __pa(high_memory)) | 127 | if (addr + size >= __pa(high_memory - 1)) |
| 128 | return 0; | 128 | return 0; |
| 129 | 129 | ||
| 130 | return 1; | 130 | return 1; |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 9b36c5cb5e9f..d4d082c5c2d4 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
| @@ -693,7 +693,8 @@ static void __init sanity_check_meminfo(void) | |||
| 693 | * Check whether this memory bank would entirely overlap | 693 | * Check whether this memory bank would entirely overlap |
| 694 | * the vmalloc area. | 694 | * the vmalloc area. |
| 695 | */ | 695 | */ |
| 696 | if (__va(bank->start) >= VMALLOC_MIN) { | 696 | if (__va(bank->start) >= VMALLOC_MIN || |
| 697 | __va(bank->start) < PAGE_OFFSET) { | ||
| 697 | printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx " | 698 | printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx " |
| 698 | "(vmalloc region overlap).\n", | 699 | "(vmalloc region overlap).\n", |
| 699 | bank->start, bank->start + bank->size - 1); | 700 | bank->start, bank->start + bank->size - 1); |
diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile index deaff58878a2..04a100cfb8e5 100644 --- a/arch/arm/plat-omap/Makefile +++ b/arch/arm/plat-omap/Makefile | |||
| @@ -18,7 +18,8 @@ obj-$(CONFIG_CPU_FREQ) += cpu-omap.o | |||
| 18 | obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o | 18 | obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o |
| 19 | obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o | 19 | obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o |
| 20 | obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o | 20 | obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o |
| 21 | obj-$(CONFIG_I2C_OMAP) += i2c.o | 21 | i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o |
| 22 | obj-y += $(i2c-omap-m) $(i2c-omap-y) | ||
| 22 | 23 | ||
| 23 | # OMAP mailbox framework | 24 | # OMAP mailbox framework |
| 24 | obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o | 25 | obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o |
diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index 0843b8882f93..6825fbb5a056 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c | |||
| @@ -200,20 +200,16 @@ static struct clocksource clocksource_32k = { | |||
| 200 | }; | 200 | }; |
| 201 | 201 | ||
| 202 | /* | 202 | /* |
| 203 | * Rounds down to nearest nsec. | ||
| 204 | */ | ||
| 205 | unsigned long long omap_32k_ticks_to_nsecs(unsigned long ticks_32k) | ||
| 206 | { | ||
| 207 | return cyc2ns(&clocksource_32k, ticks_32k); | ||
| 208 | } | ||
| 209 | |||
| 210 | /* | ||
| 211 | * Returns current time from boot in nsecs. It's OK for this to wrap | 203 | * Returns current time from boot in nsecs. It's OK for this to wrap |
| 212 | * around for now, as it's just a relative time stamp. | 204 | * around for now, as it's just a relative time stamp. |
| 213 | */ | 205 | */ |
| 214 | unsigned long long sched_clock(void) | 206 | unsigned long long sched_clock(void) |
| 215 | { | 207 | { |
| 216 | return omap_32k_ticks_to_nsecs(omap_32k_read()); | 208 | unsigned long long ret; |
| 209 | |||
| 210 | ret = (unsigned long long)omap_32k_read(); | ||
| 211 | ret = (ret * clocksource_32k.mult_orig) >> clocksource_32k.shift; | ||
| 212 | return ret; | ||
| 217 | } | 213 | } |
| 218 | 214 | ||
| 219 | static int __init omap_init_clocksource_32k(void) | 215 | static int __init omap_init_clocksource_32k(void) |
diff --git a/arch/arm/plat-omap/include/mach/common.h b/arch/arm/plat-omap/include/mach/common.h index ef70e2b0f054..e746ec7e785e 100644 --- a/arch/arm/plat-omap/include/mach/common.h +++ b/arch/arm/plat-omap/include/mach/common.h | |||
| @@ -35,7 +35,7 @@ extern void omap_map_common_io(void); | |||
| 35 | extern struct sys_timer omap_timer; | 35 | extern struct sys_timer omap_timer; |
| 36 | extern void omap_serial_init(void); | 36 | extern void omap_serial_init(void); |
| 37 | extern void omap_serial_enable_clocks(int enable); | 37 | extern void omap_serial_enable_clocks(int enable); |
| 38 | #ifdef CONFIG_I2C_OMAP | 38 | #if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE) |
| 39 | extern int omap_register_i2c_bus(int bus_id, u32 clkrate, | 39 | extern int omap_register_i2c_bus(int bus_id, u32 clkrate, |
| 40 | struct i2c_board_info const *info, | 40 | struct i2c_board_info const *info, |
| 41 | unsigned len); | 41 | unsigned len); |
diff --git a/arch/arm/plat-omap/include/mach/pm.h b/arch/arm/plat-omap/include/mach/pm.h index 2a9c27ad4c37..37e2f0f38b46 100644 --- a/arch/arm/plat-omap/include/mach/pm.h +++ b/arch/arm/plat-omap/include/mach/pm.h | |||
| @@ -108,7 +108,7 @@ | |||
| 108 | !defined(CONFIG_ARCH_OMAP15XX) && \ | 108 | !defined(CONFIG_ARCH_OMAP15XX) && \ |
| 109 | !defined(CONFIG_ARCH_OMAP16XX) && \ | 109 | !defined(CONFIG_ARCH_OMAP16XX) && \ |
| 110 | !defined(CONFIG_ARCH_OMAP24XX) | 110 | !defined(CONFIG_ARCH_OMAP24XX) |
| 111 | #error "Power management for this processor not implemented yet" | 111 | #warning "Power management for this processor not implemented yet" |
| 112 | #endif | 112 | #endif |
| 113 | 113 | ||
| 114 | #ifndef __ASSEMBLER__ | 114 | #ifndef __ASSEMBLER__ |
diff --git a/arch/arm/plat-orion/gpio.c b/arch/arm/plat-orion/gpio.c index 967186425ca1..0d12c2164766 100644 --- a/arch/arm/plat-orion/gpio.c +++ b/arch/arm/plat-orion/gpio.c | |||
| @@ -265,51 +265,36 @@ EXPORT_SYMBOL(orion_gpio_set_blink); | |||
| 265 | * polarity LEVEL mask | 265 | * polarity LEVEL mask |
| 266 | * | 266 | * |
| 267 | ****************************************************************************/ | 267 | ****************************************************************************/ |
| 268 | static void gpio_irq_edge_ack(u32 irq) | ||
| 269 | { | ||
| 270 | int pin = irq_to_gpio(irq); | ||
| 271 | |||
| 272 | writel(~(1 << (pin & 31)), GPIO_EDGE_CAUSE(pin)); | ||
| 273 | } | ||
| 274 | |||
| 275 | static void gpio_irq_edge_mask(u32 irq) | ||
| 276 | { | ||
| 277 | int pin = irq_to_gpio(irq); | ||
| 278 | u32 u; | ||
| 279 | |||
| 280 | u = readl(GPIO_EDGE_MASK(pin)); | ||
| 281 | u &= ~(1 << (pin & 31)); | ||
| 282 | writel(u, GPIO_EDGE_MASK(pin)); | ||
| 283 | } | ||
| 284 | 268 | ||
| 285 | static void gpio_irq_edge_unmask(u32 irq) | 269 | static void gpio_irq_ack(u32 irq) |
| 286 | { | 270 | { |
| 287 | int pin = irq_to_gpio(irq); | 271 | int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK; |
| 288 | u32 u; | 272 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { |
| 289 | 273 | int pin = irq_to_gpio(irq); | |
| 290 | u = readl(GPIO_EDGE_MASK(pin)); | 274 | writel(~(1 << (pin & 31)), GPIO_EDGE_CAUSE(pin)); |
| 291 | u |= 1 << (pin & 31); | 275 | } |
| 292 | writel(u, GPIO_EDGE_MASK(pin)); | ||
| 293 | } | 276 | } |
| 294 | 277 | ||
| 295 | static void gpio_irq_level_mask(u32 irq) | 278 | static void gpio_irq_mask(u32 irq) |
| 296 | { | 279 | { |
| 297 | int pin = irq_to_gpio(irq); | 280 | int pin = irq_to_gpio(irq); |
| 298 | u32 u; | 281 | int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK; |
| 299 | 282 | u32 reg = (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) ? | |
| 300 | u = readl(GPIO_LEVEL_MASK(pin)); | 283 | GPIO_EDGE_MASK(pin) : GPIO_LEVEL_MASK(pin); |
| 284 | u32 u = readl(reg); | ||
| 301 | u &= ~(1 << (pin & 31)); | 285 | u &= ~(1 << (pin & 31)); |
| 302 | writel(u, GPIO_LEVEL_MASK(pin)); | 286 | writel(u, reg); |
| 303 | } | 287 | } |
| 304 | 288 | ||
| 305 | static void gpio_irq_level_unmask(u32 irq) | 289 | static void gpio_irq_unmask(u32 irq) |
| 306 | { | 290 | { |
| 307 | int pin = irq_to_gpio(irq); | 291 | int pin = irq_to_gpio(irq); |
| 308 | u32 u; | 292 | int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK; |
| 309 | 293 | u32 reg = (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) ? | |
| 310 | u = readl(GPIO_LEVEL_MASK(pin)); | 294 | GPIO_EDGE_MASK(pin) : GPIO_LEVEL_MASK(pin); |
| 295 | u32 u = readl(reg); | ||
| 311 | u |= 1 << (pin & 31); | 296 | u |= 1 << (pin & 31); |
| 312 | writel(u, GPIO_LEVEL_MASK(pin)); | 297 | writel(u, reg); |
| 313 | } | 298 | } |
| 314 | 299 | ||
| 315 | static int gpio_irq_set_type(u32 irq, u32 type) | 300 | static int gpio_irq_set_type(u32 irq, u32 type) |
| @@ -331,9 +316,9 @@ static int gpio_irq_set_type(u32 irq, u32 type) | |||
| 331 | * Set edge/level type. | 316 | * Set edge/level type. |
| 332 | */ | 317 | */ |
| 333 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { | 318 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { |
| 334 | desc->chip = &orion_gpio_irq_edge_chip; | 319 | desc->handle_irq = handle_edge_irq; |
| 335 | } else if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { | 320 | } else if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { |
| 336 | desc->chip = &orion_gpio_irq_level_chip; | 321 | desc->handle_irq = handle_level_irq; |
| 337 | } else { | 322 | } else { |
| 338 | printk(KERN_ERR "failed to set irq=%d (type=%d)\n", irq, type); | 323 | printk(KERN_ERR "failed to set irq=%d (type=%d)\n", irq, type); |
| 339 | return -EINVAL; | 324 | return -EINVAL; |
| @@ -371,19 +356,11 @@ static int gpio_irq_set_type(u32 irq, u32 type) | |||
| 371 | return 0; | 356 | return 0; |
| 372 | } | 357 | } |
| 373 | 358 | ||
| 374 | struct irq_chip orion_gpio_irq_edge_chip = { | 359 | struct irq_chip orion_gpio_irq_chip = { |
| 375 | .name = "orion_gpio_irq_edge", | 360 | .name = "orion_gpio", |
| 376 | .ack = gpio_irq_edge_ack, | 361 | .ack = gpio_irq_ack, |
| 377 | .mask = gpio_irq_edge_mask, | 362 | .mask = gpio_irq_mask, |
| 378 | .unmask = gpio_irq_edge_unmask, | 363 | .unmask = gpio_irq_unmask, |
| 379 | .set_type = gpio_irq_set_type, | ||
| 380 | }; | ||
| 381 | |||
| 382 | struct irq_chip orion_gpio_irq_level_chip = { | ||
| 383 | .name = "orion_gpio_irq_level", | ||
| 384 | .mask = gpio_irq_level_mask, | ||
| 385 | .mask_ack = gpio_irq_level_mask, | ||
| 386 | .unmask = gpio_irq_level_unmask, | ||
| 387 | .set_type = gpio_irq_set_type, | 364 | .set_type = gpio_irq_set_type, |
| 388 | }; | 365 | }; |
| 389 | 366 | ||
diff --git a/arch/arm/plat-orion/include/plat/gpio.h b/arch/arm/plat-orion/include/plat/gpio.h index 54deaf274b52..ec743e82c876 100644 --- a/arch/arm/plat-orion/include/plat/gpio.h +++ b/arch/arm/plat-orion/include/plat/gpio.h | |||
| @@ -31,8 +31,7 @@ void orion_gpio_set_blink(unsigned pin, int blink); | |||
| 31 | /* | 31 | /* |
| 32 | * GPIO interrupt handling. | 32 | * GPIO interrupt handling. |
| 33 | */ | 33 | */ |
| 34 | extern struct irq_chip orion_gpio_irq_edge_chip; | 34 | extern struct irq_chip orion_gpio_irq_chip; |
| 35 | extern struct irq_chip orion_gpio_irq_level_chip; | ||
| 36 | void orion_gpio_irq_handler(int irqoff); | 35 | void orion_gpio_irq_handler(int irqoff); |
| 37 | 36 | ||
| 38 | 37 | ||
diff --git a/arch/arm/plat-s3c64xx/clock.c b/arch/arm/plat-s3c64xx/clock.c index 136c982c68e1..ad1b9682c9c3 100644 --- a/arch/arm/plat-s3c64xx/clock.c +++ b/arch/arm/plat-s3c64xx/clock.c | |||
| @@ -248,7 +248,7 @@ static struct clk *clks[] __initdata = { | |||
| 248 | &clk_48m, | 248 | &clk_48m, |
| 249 | }; | 249 | }; |
| 250 | 250 | ||
| 251 | void s3c64xx_register_clocks(void) | 251 | void __init s3c64xx_register_clocks(void) |
| 252 | { | 252 | { |
| 253 | struct clk *clkp; | 253 | struct clk *clkp; |
| 254 | int ret; | 254 | int ret; |
diff --git a/arch/arm/plat-s3c64xx/gpiolib.c b/arch/arm/plat-s3c64xx/gpiolib.c index cc62941d7b5c..ee9188add8fb 100644 --- a/arch/arm/plat-s3c64xx/gpiolib.c +++ b/arch/arm/plat-s3c64xx/gpiolib.c | |||
| @@ -417,4 +417,4 @@ static __init int s3c64xx_gpiolib_init(void) | |||
| 417 | return 0; | 417 | return 0; |
| 418 | } | 418 | } |
| 419 | 419 | ||
| 420 | arch_initcall(s3c64xx_gpiolib_init); | 420 | core_initcall(s3c64xx_gpiolib_init); |
diff --git a/arch/arm/plat-s3c64xx/include/plat/irqs.h b/arch/arm/plat-s3c64xx/include/plat/irqs.h index 2846f550b727..f865bf4d709e 100644 --- a/arch/arm/plat-s3c64xx/include/plat/irqs.h +++ b/arch/arm/plat-s3c64xx/include/plat/irqs.h | |||
| @@ -117,7 +117,7 @@ | |||
| 117 | #define IRQ_ONENAND1 S3C64XX_IRQ_VIC1(12) | 117 | #define IRQ_ONENAND1 S3C64XX_IRQ_VIC1(12) |
| 118 | #define IRQ_NFC S3C64XX_IRQ_VIC1(13) | 118 | #define IRQ_NFC S3C64XX_IRQ_VIC1(13) |
| 119 | #define IRQ_CFCON S3C64XX_IRQ_VIC1(14) | 119 | #define IRQ_CFCON S3C64XX_IRQ_VIC1(14) |
| 120 | #define IRQ_UHOST S3C64XX_IRQ_VIC1(15) | 120 | #define IRQ_USBH S3C64XX_IRQ_VIC1(15) |
| 121 | #define IRQ_SPI0 S3C64XX_IRQ_VIC1(16) | 121 | #define IRQ_SPI0 S3C64XX_IRQ_VIC1(16) |
| 122 | #define IRQ_SPI1 S3C64XX_IRQ_VIC1(17) | 122 | #define IRQ_SPI1 S3C64XX_IRQ_VIC1(17) |
| 123 | #define IRQ_IIC S3C64XX_IRQ_VIC1(18) | 123 | #define IRQ_IIC S3C64XX_IRQ_VIC1(18) |
diff --git a/arch/arm/plat-s3c64xx/irq-eint.c b/arch/arm/plat-s3c64xx/irq-eint.c index 1f7cc0067f5c..cf524826c93a 100644 --- a/arch/arm/plat-s3c64xx/irq-eint.c +++ b/arch/arm/plat-s3c64xx/irq-eint.c | |||
| @@ -14,12 +14,15 @@ | |||
| 14 | 14 | ||
| 15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
| 16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
| 17 | #include <linux/gpio.h> | ||
| 17 | #include <linux/irq.h> | 18 | #include <linux/irq.h> |
| 18 | #include <linux/io.h> | 19 | #include <linux/io.h> |
| 19 | 20 | ||
| 20 | #include <asm/hardware/vic.h> | 21 | #include <asm/hardware/vic.h> |
| 21 | 22 | ||
| 22 | #include <plat/regs-irqtype.h> | 23 | #include <plat/regs-irqtype.h> |
| 24 | #include <plat/regs-gpio.h> | ||
| 25 | #include <plat/gpio-cfg.h> | ||
| 23 | 26 | ||
| 24 | #include <mach/map.h> | 27 | #include <mach/map.h> |
| 25 | #include <plat/cpu.h> | 28 | #include <plat/cpu.h> |
| @@ -55,7 +58,7 @@ static void s3c_irq_eint_unmask(unsigned int irq) | |||
| 55 | u32 mask; | 58 | u32 mask; |
| 56 | 59 | ||
| 57 | mask = __raw_readl(S3C64XX_EINT0MASK); | 60 | mask = __raw_readl(S3C64XX_EINT0MASK); |
| 58 | mask |= eint_irq_to_bit(irq); | 61 | mask &= ~eint_irq_to_bit(irq); |
| 59 | __raw_writel(mask, S3C64XX_EINT0MASK); | 62 | __raw_writel(mask, S3C64XX_EINT0MASK); |
| 60 | } | 63 | } |
| 61 | 64 | ||
| @@ -74,6 +77,7 @@ static void s3c_irq_eint_maskack(unsigned int irq) | |||
| 74 | static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type) | 77 | static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type) |
| 75 | { | 78 | { |
| 76 | int offs = eint_offset(irq); | 79 | int offs = eint_offset(irq); |
| 80 | int pin; | ||
| 77 | int shift; | 81 | int shift; |
| 78 | u32 ctrl, mask; | 82 | u32 ctrl, mask; |
| 79 | u32 newvalue = 0; | 83 | u32 newvalue = 0; |
| @@ -125,6 +129,15 @@ static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type) | |||
| 125 | ctrl |= newvalue << shift; | 129 | ctrl |= newvalue << shift; |
| 126 | __raw_writel(ctrl, reg); | 130 | __raw_writel(ctrl, reg); |
| 127 | 131 | ||
| 132 | /* set the GPIO pin appropriately */ | ||
| 133 | |||
| 134 | if (offs < 23) | ||
| 135 | pin = S3C64XX_GPN(offs); | ||
| 136 | else | ||
| 137 | pin = S3C64XX_GPM(offs - 23); | ||
| 138 | |||
| 139 | s3c_gpio_cfgpin(pin, S3C_GPIO_SFN(2)); | ||
| 140 | |||
| 128 | return 0; | 141 | return 0; |
| 129 | } | 142 | } |
| 130 | 143 | ||
| @@ -181,7 +194,7 @@ static void s3c_irq_demux_eint20_27(unsigned int irq, struct irq_desc *desc) | |||
| 181 | s3c_irq_demux_eint(20, 27); | 194 | s3c_irq_demux_eint(20, 27); |
| 182 | } | 195 | } |
| 183 | 196 | ||
| 184 | int __init s3c64xx_init_irq_eint(void) | 197 | static int __init s3c64xx_init_irq_eint(void) |
| 185 | { | 198 | { |
| 186 | int irq; | 199 | int irq; |
| 187 | 200 | ||
diff --git a/arch/arm/plat-s3c64xx/irq.c b/arch/arm/plat-s3c64xx/irq.c index a94f1d5e819d..f22edf7c2d2d 100644 --- a/arch/arm/plat-s3c64xx/irq.c +++ b/arch/arm/plat-s3c64xx/irq.c | |||
| @@ -207,7 +207,7 @@ static struct irq_chip s3c_irq_uart = { | |||
| 207 | 207 | ||
| 208 | static void __init s3c64xx_uart_irq(struct uart_irq *uirq) | 208 | static void __init s3c64xx_uart_irq(struct uart_irq *uirq) |
| 209 | { | 209 | { |
| 210 | void *reg_base = uirq->regs; | 210 | void __iomem *reg_base = uirq->regs; |
| 211 | unsigned int irq; | 211 | unsigned int irq; |
| 212 | int offs; | 212 | int offs; |
| 213 | 213 | ||
diff --git a/arch/arm/plat-s3c64xx/s3c6400-clock.c b/arch/arm/plat-s3c64xx/s3c6400-clock.c index 8d9a0cada668..05b17528041e 100644 --- a/arch/arm/plat-s3c64xx/s3c6400-clock.c +++ b/arch/arm/plat-s3c64xx/s3c6400-clock.c | |||
| @@ -36,7 +36,7 @@ | |||
| 36 | * ext_xtal_mux for want of an actual name from the manual. | 36 | * ext_xtal_mux for want of an actual name from the manual. |
| 37 | */ | 37 | */ |
| 38 | 38 | ||
| 39 | struct clk clk_ext_xtal_mux = { | 39 | static struct clk clk_ext_xtal_mux = { |
| 40 | .name = "ext_xtal", | 40 | .name = "ext_xtal", |
| 41 | .id = -1, | 41 | .id = -1, |
| 42 | }; | 42 | }; |
| @@ -63,7 +63,7 @@ struct clksrc_clk { | |||
| 63 | void __iomem *reg_divider; | 63 | void __iomem *reg_divider; |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| 66 | struct clk clk_fout_apll = { | 66 | static struct clk clk_fout_apll = { |
| 67 | .name = "fout_apll", | 67 | .name = "fout_apll", |
| 68 | .id = -1, | 68 | .id = -1, |
| 69 | }; | 69 | }; |
| @@ -78,7 +78,7 @@ static struct clk_sources clk_src_apll = { | |||
| 78 | .nr_sources = ARRAY_SIZE(clk_src_apll_list), | 78 | .nr_sources = ARRAY_SIZE(clk_src_apll_list), |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | struct clksrc_clk clk_mout_apll = { | 81 | static struct clksrc_clk clk_mout_apll = { |
| 82 | .clk = { | 82 | .clk = { |
| 83 | .name = "mout_apll", | 83 | .name = "mout_apll", |
| 84 | .id = -1, | 84 | .id = -1, |
| @@ -88,7 +88,7 @@ struct clksrc_clk clk_mout_apll = { | |||
| 88 | .sources = &clk_src_apll, | 88 | .sources = &clk_src_apll, |
| 89 | }; | 89 | }; |
| 90 | 90 | ||
| 91 | struct clk clk_fout_epll = { | 91 | static struct clk clk_fout_epll = { |
| 92 | .name = "fout_epll", | 92 | .name = "fout_epll", |
| 93 | .id = -1, | 93 | .id = -1, |
| 94 | }; | 94 | }; |
| @@ -103,7 +103,7 @@ static struct clk_sources clk_src_epll = { | |||
| 103 | .nr_sources = ARRAY_SIZE(clk_src_epll_list), | 103 | .nr_sources = ARRAY_SIZE(clk_src_epll_list), |
| 104 | }; | 104 | }; |
| 105 | 105 | ||
| 106 | struct clksrc_clk clk_mout_epll = { | 106 | static struct clksrc_clk clk_mout_epll = { |
| 107 | .clk = { | 107 | .clk = { |
| 108 | .name = "mout_epll", | 108 | .name = "mout_epll", |
| 109 | .id = -1, | 109 | .id = -1, |
| @@ -123,7 +123,7 @@ static struct clk_sources clk_src_mpll = { | |||
| 123 | .nr_sources = ARRAY_SIZE(clk_src_mpll_list), | 123 | .nr_sources = ARRAY_SIZE(clk_src_mpll_list), |
| 124 | }; | 124 | }; |
| 125 | 125 | ||
| 126 | struct clksrc_clk clk_mout_mpll = { | 126 | static struct clksrc_clk clk_mout_mpll = { |
| 127 | .clk = { | 127 | .clk = { |
| 128 | .name = "mout_mpll", | 128 | .name = "mout_mpll", |
| 129 | .id = -1, | 129 | .id = -1, |
| @@ -145,7 +145,7 @@ static unsigned long s3c64xx_clk_doutmpll_get_rate(struct clk *clk) | |||
| 145 | return rate; | 145 | return rate; |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | struct clk clk_dout_mpll = { | 148 | static struct clk clk_dout_mpll = { |
| 149 | .name = "dout_mpll", | 149 | .name = "dout_mpll", |
| 150 | .id = -1, | 150 | .id = -1, |
| 151 | .parent = &clk_mout_mpll.clk, | 151 | .parent = &clk_mout_mpll.clk, |
| @@ -189,10 +189,10 @@ static struct clk_sources clkset_uart = { | |||
| 189 | }; | 189 | }; |
| 190 | 190 | ||
| 191 | static struct clk *clkset_uhost_list[] = { | 191 | static struct clk *clkset_uhost_list[] = { |
| 192 | &clk_48m, | ||
| 192 | &clk_mout_epll.clk, | 193 | &clk_mout_epll.clk, |
| 193 | &clk_dout_mpll, | 194 | &clk_dout_mpll, |
| 194 | &clk_fin_epll, | 195 | &clk_fin_epll, |
| 195 | &clk_48m, | ||
| 196 | }; | 196 | }; |
| 197 | 197 | ||
| 198 | static struct clk_sources clkset_uhost = { | 198 | static struct clk_sources clkset_uhost = { |
| @@ -239,10 +239,12 @@ static int s3c64xx_setrate_clksrc(struct clk *clk, unsigned long rate) | |||
| 239 | 239 | ||
| 240 | rate = clk_round_rate(clk, rate); | 240 | rate = clk_round_rate(clk, rate); |
| 241 | div = clk_get_rate(clk->parent) / rate; | 241 | div = clk_get_rate(clk->parent) / rate; |
| 242 | if (div > 16) | ||
| 243 | return -EINVAL; | ||
| 242 | 244 | ||
| 243 | val = __raw_readl(reg); | 245 | val = __raw_readl(reg); |
| 244 | val &= ~sclk->mask; | 246 | val &= ~(0xf << sclk->shift); |
| 245 | val |= (rate - 1) << sclk->shift; | 247 | val |= (div - 1) << sclk->shift; |
| 246 | __raw_writel(val, reg); | 248 | __raw_writel(val, reg); |
| 247 | 249 | ||
| 248 | return 0; | 250 | return 0; |
| @@ -351,7 +353,7 @@ static struct clksrc_clk clk_mmc2 = { | |||
| 351 | 353 | ||
| 352 | static struct clksrc_clk clk_usbhost = { | 354 | static struct clksrc_clk clk_usbhost = { |
| 353 | .clk = { | 355 | .clk = { |
| 354 | .name = "usb-host-bus", | 356 | .name = "usb-bus-host", |
| 355 | .id = -1, | 357 | .id = -1, |
| 356 | .ctrlbit = S3C_CLKCON_SCLK_UHOST, | 358 | .ctrlbit = S3C_CLKCON_SCLK_UHOST, |
| 357 | .enable = s3c64xx_sclk_ctrl, | 359 | .enable = s3c64xx_sclk_ctrl, |
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index fd23c0e9e698..b4211d8b2ac7 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | # | 12 | # |
| 13 | # http://www.arm.linux.org.uk/developer/machines/?action=new | 13 | # http://www.arm.linux.org.uk/developer/machines/?action=new |
| 14 | # | 14 | # |
| 15 | # Last update: Sun Nov 30 16:39:36 2008 | 15 | # Last update: Thu Mar 12 18:01:45 2009 |
| 16 | # | 16 | # |
| 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number | 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number |
| 18 | # | 18 | # |
| @@ -1811,7 +1811,7 @@ pilz_pmi5 MACH_PILZ_PMI5 PILZ_PMI5 1820 | |||
| 1811 | jade MACH_JADE JADE 1821 | 1811 | jade MACH_JADE JADE 1821 |
| 1812 | ks8695_softplc MACH_KS8695_SOFTPLC KS8695_SOFTPLC 1822 | 1812 | ks8695_softplc MACH_KS8695_SOFTPLC KS8695_SOFTPLC 1822 |
| 1813 | gprisc3 MACH_GPRISC3 GPRISC3 1823 | 1813 | gprisc3 MACH_GPRISC3 GPRISC3 1823 |
| 1814 | stamp9260 MACH_STAMP9260 STAMP9260 1824 | 1814 | stamp9g20 MACH_STAMP9G20 STAMP9G20 1824 |
| 1815 | smdk6430 MACH_SMDK6430 SMDK6430 1825 | 1815 | smdk6430 MACH_SMDK6430 SMDK6430 1825 |
| 1816 | smdkc100 MACH_SMDKC100 SMDKC100 1826 | 1816 | smdkc100 MACH_SMDKC100 SMDKC100 1826 |
| 1817 | tavorevb MACH_TAVOREVB TAVOREVB 1827 | 1817 | tavorevb MACH_TAVOREVB TAVOREVB 1827 |
| @@ -1993,4 +1993,134 @@ spark MACH_SPARK SPARK 2002 | |||
| 1993 | benzina MACH_BENZINA BENZINA 2003 | 1993 | benzina MACH_BENZINA BENZINA 2003 |
| 1994 | blaze MACH_BLAZE BLAZE 2004 | 1994 | blaze MACH_BLAZE BLAZE 2004 |
| 1995 | linkstation_ls_hgl MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL 2005 | 1995 | linkstation_ls_hgl MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL 2005 |
| 1996 | htcvenus MACH_HTCVENUS HTCVENUS 2006 | 1996 | htckovsky MACH_HTCVENUS HTCVENUS 2006 |
| 1997 | sony_prs505 MACH_SONY_PRS505 SONY_PRS505 2007 | ||
| 1998 | hanlin_v3 MACH_HANLIN_V3 HANLIN_V3 2008 | ||
| 1999 | sapphira MACH_SAPPHIRA SAPPHIRA 2009 | ||
| 2000 | dack_sda_01 MACH_DACK_SDA_01 DACK_SDA_01 2010 | ||
| 2001 | armbox MACH_ARMBOX ARMBOX 2011 | ||
| 2002 | harris_rvp MACH_HARRIS_RVP HARRIS_RVP 2012 | ||
| 2003 | ribaldo MACH_RIBALDO RIBALDO 2013 | ||
| 2004 | agora MACH_AGORA AGORA 2014 | ||
| 2005 | omap3_mini MACH_OMAP3_MINI OMAP3_MINI 2015 | ||
| 2006 | a9sam6432_b MACH_A9SAM6432_B A9SAM6432_B 2016 | ||
| 2007 | usg2410 MACH_USG2410 USG2410 2017 | ||
| 2008 | pc72052_i10_revb MACH_PC72052_I10_REVB PC72052_I10_REVB 2018 | ||
| 2009 | mx35_exm32 MACH_MX35_EXM32 MX35_EXM32 2019 | ||
| 2010 | topas910 MACH_TOPAS910 TOPAS910 2020 | ||
| 2011 | hyena MACH_HYENA HYENA 2021 | ||
| 2012 | pospax MACH_POSPAX POSPAX 2022 | ||
| 2013 | hdl_gx MACH_HDL_GX HDL_GX 2023 | ||
| 2014 | ctera_4bay MACH_CTERA_4BAY CTERA_4BAY 2024 | ||
| 2015 | ctera_plug_c MACH_CTERA_PLUG_C CTERA_PLUG_C 2025 | ||
| 2016 | crwea_plug_i MACH_CRWEA_PLUG_I CRWEA_PLUG_I 2026 | ||
| 2017 | egauge2 MACH_EGAUGE2 EGAUGE2 2027 | ||
| 2018 | didj MACH_DIDJ DIDJ 2028 | ||
| 2019 | m_s3c2443 MACH_MEISTER MEISTER 2029 | ||
| 2020 | htcblackstone MACH_HTCBLACKSTONE HTCBLACKSTONE 2030 | ||
| 2021 | cpuat9g20 MACH_CPUAT9G20 CPUAT9G20 2031 | ||
| 2022 | smdk6440 MACH_SMDK6440 SMDK6440 2032 | ||
| 2023 | omap_35xx_mvp MACH_OMAP_35XX_MVP OMAP_35XX_MVP 2033 | ||
| 2024 | ctera_plug_i MACH_CTERA_PLUG_I CTERA_PLUG_I 2034 | ||
| 2025 | pvg610_100 MACH_PVG610 PVG610 2035 | ||
| 2026 | hprw6815 MACH_HPRW6815 HPRW6815 2036 | ||
| 2027 | omap3_oswald MACH_OMAP3_OSWALD OMAP3_OSWALD 2037 | ||
| 2028 | nas4220b MACH_NAS4220B NAS4220B 2038 | ||
| 2029 | htcraphael_cdma MACH_HTCRAPHAEL_CDMA HTCRAPHAEL_CDMA 2039 | ||
| 2030 | htcdiamond_cdma MACH_HTCDIAMOND_CDMA HTCDIAMOND_CDMA 2040 | ||
| 2031 | scaler MACH_SCALER SCALER 2041 | ||
| 2032 | zylonite2 MACH_ZYLONITE2 ZYLONITE2 2042 | ||
| 2033 | aspenite MACH_ASPENITE ASPENITE 2043 | ||
| 2034 | teton MACH_TETON TETON 2044 | ||
| 2035 | ttc_dkb MACH_TTC_DKB TTC_DKB 2045 | ||
| 2036 | bishop2 MACH_BISHOP2 BISHOP2 2046 | ||
| 2037 | ippv5 MACH_IPPV5 IPPV5 2047 | ||
| 2038 | farm926 MACH_FARM926 FARM926 2048 | ||
| 2039 | mmccpu MACH_MMCCPU MMCCPU 2049 | ||
| 2040 | sgmsfl MACH_SGMSFL SGMSFL 2050 | ||
| 2041 | tt8000 MACH_TT8000 TT8000 2051 | ||
| 2042 | zrn4300lp MACH_ZRN4300LP ZRN4300LP 2052 | ||
| 2043 | mptc MACH_MPTC MPTC 2053 | ||
| 2044 | h6051 MACH_H6051 H6051 2054 | ||
| 2045 | pvg610_101 MACH_PVG610_101 PVG610_101 2055 | ||
| 2046 | stamp9261_pc_evb MACH_STAMP9261_PC_EVB STAMP9261_PC_EVB 2056 | ||
| 2047 | pelco_odysseus MACH_PELCO_ODYSSEUS PELCO_ODYSSEUS 2057 | ||
| 2048 | tny_a9260 MACH_TNY_A9260 TNY_A9260 2058 | ||
| 2049 | tny_a9g20 MACH_TNY_A9G20 TNY_A9G20 2059 | ||
| 2050 | aesop_mp2530f MACH_AESOP_MP2530F AESOP_MP2530F 2060 | ||
| 2051 | dx900 MACH_DX900 DX900 2061 | ||
| 2052 | cpodc2 MACH_CPODC2 CPODC2 2062 | ||
| 2053 | tilt_8925 MACH_TILT_8925 TILT_8925 2063 | ||
| 2054 | davinci_dm357_evm MACH_DAVINCI_DM357_EVM DAVINCI_DM357_EVM 2064 | ||
| 2055 | swordfish MACH_SWORDFISH SWORDFISH 2065 | ||
| 2056 | corvus MACH_CORVUS CORVUS 2066 | ||
| 2057 | taurus MACH_TAURUS TAURUS 2067 | ||
| 2058 | axm MACH_AXM AXM 2068 | ||
| 2059 | axc MACH_AXC AXC 2069 | ||
| 2060 | baby MACH_BABY BABY 2070 | ||
| 2061 | mp200 MACH_MP200 MP200 2071 | ||
| 2062 | pcm043 MACH_PCM043 PCM043 2072 | ||
| 2063 | hanlin_v3c MACH_HANLIN_V3C HANLIN_V3C 2073 | ||
| 2064 | kbk9g20 MACH_KBK9G20 KBK9G20 2074 | ||
| 2065 | adsturbog5 MACH_ADSTURBOG5 ADSTURBOG5 2075 | ||
| 2066 | avenger_lite1 MACH_AVENGER_LITE1 AVENGER_LITE1 2076 | ||
| 2067 | suc82x MACH_SUC SUC 2077 | ||
| 2068 | at91sam7s256 MACH_AT91SAM7S256 AT91SAM7S256 2078 | ||
| 2069 | mendoza MACH_MENDOZA MENDOZA 2079 | ||
| 2070 | kira MACH_KIRA KIRA 2080 | ||
| 2071 | mx1hbm MACH_MX1HBM MX1HBM 2081 | ||
| 2072 | quatro43xx MACH_QUATRO43XX QUATRO43XX 2082 | ||
| 2073 | quatro4230 MACH_QUATRO4230 QUATRO4230 2083 | ||
| 2074 | nsb400 MACH_NSB400 NSB400 2084 | ||
| 2075 | drp255 MACH_DRP255 DRP255 2085 | ||
| 2076 | thoth MACH_THOTH THOTH 2086 | ||
| 2077 | firestone MACH_FIRESTONE FIRESTONE 2087 | ||
| 2078 | asusp750 MACH_ASUSP750 ASUSP750 2088 | ||
| 2079 | ctera_dl MACH_CTERA_DL CTERA_DL 2089 | ||
| 2080 | socr MACH_SOCR SOCR 2090 | ||
| 2081 | htcoxygen MACH_HTCOXYGEN HTCOXYGEN 2091 | ||
| 2082 | heroc MACH_HEROC HEROC 2092 | ||
| 2083 | zeno6800 MACH_ZENO6800 ZENO6800 2093 | ||
| 2084 | sc2mcs MACH_SC2MCS SC2MCS 2094 | ||
| 2085 | gene100 MACH_GENE100 GENE100 2095 | ||
| 2086 | as353x MACH_AS353X AS353X 2096 | ||
| 2087 | sheevaplug MACH_SHEEVAPLUG SHEEVAPLUG 2097 | ||
| 2088 | at91sam9g20 MACH_AT91SAM9G20 AT91SAM9G20 2098 | ||
| 2089 | mv88f6192gtw_fe MACH_MV88F6192GTW_FE MV88F6192GTW_FE 2099 | ||
| 2090 | cc9200 MACH_CC9200 CC9200 2100 | ||
| 2091 | sm9200 MACH_SM9200 SM9200 2101 | ||
| 2092 | tp9200 MACH_TP9200 TP9200 2102 | ||
| 2093 | snapperdv MACH_SNAPPERDV SNAPPERDV 2103 | ||
| 2094 | avengers_lite MACH_AVENGERS_LITE AVENGERS_LITE 2104 | ||
| 2095 | avengers_lite1 MACH_AVENGERS_LITE1 AVENGERS_LITE1 2105 | ||
| 2096 | omap3axon MACH_OMAP3AXON OMAP3AXON 2106 | ||
| 2097 | ma8xx MACH_MA8XX MA8XX 2107 | ||
| 2098 | mp201ek MACH_MP201EK MP201EK 2108 | ||
| 2099 | davinci_tux MACH_DAVINCI_TUX DAVINCI_TUX 2109 | ||
| 2100 | mpa1600 MACH_MPA1600 MPA1600 2110 | ||
| 2101 | pelco_troy MACH_PELCO_TROY PELCO_TROY 2111 | ||
| 2102 | nsb667 MACH_NSB667 NSB667 2112 | ||
| 2103 | rovers5_4mpix MACH_ROVERS5_4MPIX ROVERS5_4MPIX 2113 | ||
| 2104 | twocom MACH_TWOCOM TWOCOM 2114 | ||
| 2105 | ubisys_p9_rcu3r2 MACH_UBISYS_P9_RCU3R2 UBISYS_P9_RCU3R2 2115 | ||
| 2106 | hero_espresso MACH_HERO_ESPRESSO HERO_ESPRESSO 2116 | ||
| 2107 | afeusb MACH_AFEUSB AFEUSB 2117 | ||
| 2108 | t830 MACH_T830 T830 2118 | ||
| 2109 | spd8020_cc MACH_SPD8020_CC SPD8020_CC 2119 | ||
| 2110 | om_3d7k MACH_OM_3D7K OM_3D7K 2120 | ||
| 2111 | picocom2 MACH_PICOCOM2 PICOCOM2 2121 | ||
| 2112 | uwg4mx27 MACH_UWG4MX27 UWG4MX27 2122 | ||
| 2113 | uwg4mx31 MACH_UWG4MX31 UWG4MX31 2123 | ||
| 2114 | cherry MACH_CHERRY CHERRY 2124 | ||
| 2115 | mx51_babbage MACH_MX51_BABBAGE MX51_BABBAGE 2125 | ||
| 2116 | s3c2440turkiye MACH_S3C2440TURKIYE S3C2440TURKIYE 2126 | ||
| 2117 | tx37 MACH_TX37 TX37 2127 | ||
| 2118 | sbc2800_9g20 MACH_SBC2800_9G20 SBC2800_9G20 2128 | ||
| 2119 | benzglb MACH_BENZGLB BENZGLB 2129 | ||
| 2120 | benztd MACH_BENZTD BENZTD 2130 | ||
| 2121 | cartesio_plus MACH_CARTESIO_PLUS CARTESIO_PLUS 2131 | ||
| 2122 | solrad_g20 MACH_SOLRAD_G20 SOLRAD_G20 2132 | ||
| 2123 | mx27wallace MACH_MX27WALLACE MX27WALLACE 2133 | ||
| 2124 | fmzwebmodul MACH_FMZWEBMODUL FMZWEBMODUL 2134 | ||
| 2125 | rd78x00_masa MACH_RD78X00_MASA RD78X00_MASA 2135 | ||
| 2126 | smallogger MACH_SMALLOGGER SMALLOGGER 2136 | ||
