diff options
| -rw-r--r-- | arch/arm/Kconfig | 81 | ||||
| -rw-r--r-- | arch/arm/boot/compressed/decompress.c | 1 | ||||
| -rw-r--r-- | arch/arm/boot/compressed/head.S | 2 | ||||
| -rw-r--r-- | arch/arm/boot/compressed/misc.c | 1 | ||||
| -rw-r--r-- | arch/arm/include/asm/elf.h | 1 | ||||
| -rw-r--r-- | arch/arm/include/asm/pgtable-nommu.h | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/entry-header.S | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/kgdb.c | 13 | ||||
| -rw-r--r-- | arch/arm/kernel/perf_event.c | 5 | ||||
| -rw-r--r-- | arch/arm/kernel/smp.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-at91/board-sam9g20ek.c | 10 | ||||
| -rw-r--r-- | arch/arm/mach-rpc/include/mach/uncompress.h | 2 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/board-ap4evb.c | 32 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/board-g3evm.c | 122 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/board-g4evm.c | 57 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/clock-sh7367.c | 7 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/intc-sh7367.c | 46 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/intc-sh7372.c | 46 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/intc-sh7377.c | 36 | ||||
| -rw-r--r-- | drivers/mtd/nand/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/video/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/video/amba-clcd.c | 31 | ||||
| -rw-r--r-- | include/linux/amba/clcd.h | 33 |
23 files changed, 403 insertions, 134 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index cadfe2ee66a5..c5408bf1bf43 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -218,6 +218,10 @@ config MMU | |||
| 218 | Select if you want MMU-based virtualised addressing space | 218 | Select if you want MMU-based virtualised addressing space |
| 219 | support by paged memory management. If unsure, say 'Y'. | 219 | support by paged memory management. If unsure, say 'Y'. |
| 220 | 220 | ||
| 221 | # | ||
| 222 | # The "ARM system type" choice list is ordered alphabetically by option | ||
| 223 | # text. Please add new entries in the option alphabetic order. | ||
| 224 | # | ||
| 221 | choice | 225 | choice |
| 222 | prompt "ARM system type" | 226 | prompt "ARM system type" |
| 223 | default ARCH_VERSATILE | 227 | default ARCH_VERSATILE |
| @@ -274,6 +278,18 @@ config ARCH_AT91 | |||
| 274 | This enables support for systems based on the Atmel AT91RM9200, | 278 | This enables support for systems based on the Atmel AT91RM9200, |
| 275 | AT91SAM9 and AT91CAP9 processors. | 279 | AT91SAM9 and AT91CAP9 processors. |
| 276 | 280 | ||
| 281 | config ARCH_BCMRING | ||
| 282 | bool "Broadcom BCMRING" | ||
| 283 | depends on MMU | ||
| 284 | select CPU_V6 | ||
| 285 | select ARM_AMBA | ||
| 286 | select COMMON_CLKDEV | ||
| 287 | select GENERIC_TIME | ||
| 288 | select GENERIC_CLOCKEVENTS | ||
| 289 | select ARCH_WANT_OPTIONAL_GPIOLIB | ||
| 290 | help | ||
| 291 | Support for Broadcom's BCMRing platform. | ||
| 292 | |||
| 277 | config ARCH_CLPS711X | 293 | config ARCH_CLPS711X |
| 278 | bool "Cirrus Logic CLPS711x/EP721x-based" | 294 | bool "Cirrus Logic CLPS711x/EP721x-based" |
| 279 | select CPU_ARM720T | 295 | select CPU_ARM720T |
| @@ -359,20 +375,6 @@ config ARCH_H720X | |||
| 359 | help | 375 | help |
| 360 | This enables support for systems based on the Hynix HMS720x | 376 | This enables support for systems based on the Hynix HMS720x |
| 361 | 377 | ||
| 362 | config ARCH_NOMADIK | ||
| 363 | bool "STMicroelectronics Nomadik" | ||
| 364 | select ARM_AMBA | ||
| 365 | select ARM_VIC | ||
| 366 | select CPU_ARM926T | ||
| 367 | select HAVE_CLK | ||
| 368 | select COMMON_CLKDEV | ||
| 369 | select GENERIC_TIME | ||
| 370 | select GENERIC_CLOCKEVENTS | ||
| 371 | select GENERIC_GPIO | ||
| 372 | select ARCH_REQUIRE_GPIOLIB | ||
| 373 | help | ||
| 374 | Support for the Nomadik platform by ST-Ericsson | ||
| 375 | |||
| 376 | config ARCH_IOP13XX | 378 | config ARCH_IOP13XX |
| 377 | bool "IOP13xx-based" | 379 | bool "IOP13xx-based" |
| 378 | depends on MMU | 380 | depends on MMU |
| @@ -747,6 +749,30 @@ config ARCH_U300 | |||
| 747 | help | 749 | help |
| 748 | Support for ST-Ericsson U300 series mobile platforms. | 750 | Support for ST-Ericsson U300 series mobile platforms. |
| 749 | 751 | ||
| 752 | config ARCH_U8500 | ||
| 753 | bool "ST-Ericsson U8500 Series" | ||
| 754 | select CPU_V7 | ||
| 755 | select ARM_AMBA | ||
| 756 | select GENERIC_TIME | ||
| 757 | select GENERIC_CLOCKEVENTS | ||
| 758 | select COMMON_CLKDEV | ||
| 759 | help | ||
| 760 | Support for ST-Ericsson's Ux500 architecture | ||
| 761 | |||
| 762 | config ARCH_NOMADIK | ||
| 763 | bool "STMicroelectronics Nomadik" | ||
| 764 | select ARM_AMBA | ||
| 765 | select ARM_VIC | ||
| 766 | select CPU_ARM926T | ||
| 767 | select HAVE_CLK | ||
| 768 | select COMMON_CLKDEV | ||
| 769 | select GENERIC_TIME | ||
| 770 | select GENERIC_CLOCKEVENTS | ||
| 771 | select GENERIC_GPIO | ||
| 772 | select ARCH_REQUIRE_GPIOLIB | ||
| 773 | help | ||
| 774 | Support for the Nomadik platform by ST-Ericsson | ||
| 775 | |||
| 750 | config ARCH_DAVINCI | 776 | config ARCH_DAVINCI |
| 751 | bool "TI DaVinci" | 777 | bool "TI DaVinci" |
| 752 | select CPU_ARM926T | 778 | select CPU_ARM926T |
| @@ -775,30 +801,13 @@ config ARCH_OMAP | |||
| 775 | help | 801 | help |
| 776 | Support for TI's OMAP platform (OMAP1 and OMAP2). | 802 | Support for TI's OMAP platform (OMAP1 and OMAP2). |
| 777 | 803 | ||
| 778 | config ARCH_BCMRING | ||
| 779 | bool "Broadcom BCMRING" | ||
| 780 | depends on MMU | ||
| 781 | select CPU_V6 | ||
| 782 | select ARM_AMBA | ||
| 783 | select COMMON_CLKDEV | ||
| 784 | select GENERIC_TIME | ||
| 785 | select GENERIC_CLOCKEVENTS | ||
| 786 | select ARCH_WANT_OPTIONAL_GPIOLIB | ||
| 787 | help | ||
| 788 | Support for Broadcom's BCMRing platform. | ||
| 789 | |||
| 790 | config ARCH_U8500 | ||
| 791 | bool "ST-Ericsson U8500 Series" | ||
| 792 | select CPU_V7 | ||
| 793 | select ARM_AMBA | ||
| 794 | select GENERIC_TIME | ||
| 795 | select GENERIC_CLOCKEVENTS | ||
| 796 | select COMMON_CLKDEV | ||
| 797 | help | ||
| 798 | Support for ST-Ericsson's Ux500 architecture | ||
| 799 | |||
| 800 | endchoice | 804 | endchoice |
| 801 | 805 | ||
| 806 | # | ||
| 807 | # This is sorted alphabetically by mach-* pathname. However, plat-* | ||
| 808 | # Kconfigs may be included either alphabetically (according to the | ||
| 809 | # plat- suffix) or along side the corresponding mach-* source. | ||
| 810 | # | ||
| 802 | source "arch/arm/mach-aaec2000/Kconfig" | 811 | source "arch/arm/mach-aaec2000/Kconfig" |
| 803 | 812 | ||
| 804 | source "arch/arm/mach-at91/Kconfig" | 813 | source "arch/arm/mach-at91/Kconfig" |
diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c index 0da382f33157..9c097073ce4c 100644 --- a/arch/arm/boot/compressed/decompress.c +++ b/arch/arm/boot/compressed/decompress.c | |||
| @@ -11,6 +11,7 @@ extern unsigned long free_mem_end_ptr; | |||
| 11 | extern void error(char *); | 11 | extern void error(char *); |
| 12 | 12 | ||
| 13 | #define STATIC static | 13 | #define STATIC static |
| 14 | #define STATIC_RW_DATA /* non-static please */ | ||
| 14 | 15 | ||
| 15 | #define ARCH_HAS_DECOMP_WDOG | 16 | #define ARCH_HAS_DECOMP_WDOG |
| 16 | 17 | ||
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 535a91daaa53..0f23009170a1 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
| @@ -742,7 +742,7 @@ proc_types: | |||
| 742 | .word 0x000f0000 | 742 | .word 0x000f0000 |
| 743 | W(b) __armv4_mmu_cache_on | 743 | W(b) __armv4_mmu_cache_on |
| 744 | W(b) __armv4_mmu_cache_off | 744 | W(b) __armv4_mmu_cache_off |
| 745 | W(b) __armv4_mmu_cache_flush | 745 | W(b) __armv5tej_mmu_cache_flush |
| 746 | 746 | ||
| 747 | .word 0x0007b000 @ ARMv6 | 747 | .word 0x0007b000 @ ARMv6 |
| 748 | .word 0x000ff000 | 748 | .word 0x000ff000 |
diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c index d32bc71c1f78..d2b2ef41cd4f 100644 --- a/arch/arm/boot/compressed/misc.c +++ b/arch/arm/boot/compressed/misc.c | |||
| @@ -33,6 +33,7 @@ unsigned int __machine_arch_type; | |||
| 33 | #else | 33 | #else |
| 34 | 34 | ||
| 35 | static void putstr(const char *ptr); | 35 | static void putstr(const char *ptr); |
| 36 | extern void error(char *x); | ||
| 36 | 37 | ||
| 37 | #include <mach/uncompress.h> | 38 | #include <mach/uncompress.h> |
| 38 | 39 | ||
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h index a399bb5730f1..bff056489cc1 100644 --- a/arch/arm/include/asm/elf.h +++ b/arch/arm/include/asm/elf.h | |||
| @@ -98,6 +98,7 @@ extern int elf_check_arch(const struct elf32_hdr *); | |||
| 98 | extern int arm_elf_read_implies_exec(const struct elf32_hdr *, int); | 98 | extern int arm_elf_read_implies_exec(const struct elf32_hdr *, int); |
| 99 | #define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(&(ex), stk) | 99 | #define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(&(ex), stk) |
| 100 | 100 | ||
| 101 | struct task_struct; | ||
| 101 | int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs); | 102 | int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs); |
| 102 | #define ELF_CORE_COPY_TASK_REGS dump_task_regs | 103 | #define ELF_CORE_COPY_TASK_REGS dump_task_regs |
| 103 | 104 | ||
diff --git a/arch/arm/include/asm/pgtable-nommu.h b/arch/arm/include/asm/pgtable-nommu.h index 013cfcdc4839..ffc0e85775b4 100644 --- a/arch/arm/include/asm/pgtable-nommu.h +++ b/arch/arm/include/asm/pgtable-nommu.h | |||
| @@ -67,6 +67,7 @@ static inline int pte_file(pte_t pte) { return 0; } | |||
| 67 | */ | 67 | */ |
| 68 | #define pgprot_noncached(prot) __pgprot(0) | 68 | #define pgprot_noncached(prot) __pgprot(0) |
| 69 | #define pgprot_writecombine(prot) __pgprot(0) | 69 | #define pgprot_writecombine(prot) __pgprot(0) |
| 70 | #define pgprot_dmacoherent(prot) __pgprot(0) | ||
| 70 | 71 | ||
| 71 | 72 | ||
| 72 | /* | 73 | /* |
diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S index 7e9ed1eea40a..d93f976fb389 100644 --- a/arch/arm/kernel/entry-header.S +++ b/arch/arm/kernel/entry-header.S | |||
| @@ -102,6 +102,8 @@ | |||
| 102 | .else | 102 | .else |
| 103 | ldmdb sp, {r0 - lr}^ @ get calling r0 - lr | 103 | ldmdb sp, {r0 - lr}^ @ get calling r0 - lr |
| 104 | .endif | 104 | .endif |
| 105 | mov r0, r0 @ ARMv5T and earlier require a nop | ||
| 106 | @ after ldm {}^ | ||
| 105 | add sp, sp, #S_FRAME_SIZE - S_PC | 107 | add sp, sp, #S_FRAME_SIZE - S_PC |
| 106 | movs pc, lr @ return & move spsr_svc into cpsr | 108 | movs pc, lr @ return & move spsr_svc into cpsr |
| 107 | .endm | 109 | .endm |
diff --git a/arch/arm/kernel/kgdb.c b/arch/arm/kernel/kgdb.c index ba8ccfede964..a5b846b9895d 100644 --- a/arch/arm/kernel/kgdb.c +++ b/arch/arm/kernel/kgdb.c | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | * Authors: George Davis <davis_g@mvista.com> | 9 | * Authors: George Davis <davis_g@mvista.com> |
| 10 | * Deepak Saxena <dsaxena@plexity.net> | 10 | * Deepak Saxena <dsaxena@plexity.net> |
| 11 | */ | 11 | */ |
| 12 | #include <linux/irq.h> | ||
| 12 | #include <linux/kgdb.h> | 13 | #include <linux/kgdb.h> |
| 13 | #include <asm/traps.h> | 14 | #include <asm/traps.h> |
| 14 | 15 | ||
| @@ -158,6 +159,18 @@ static struct undef_hook kgdb_compiled_brkpt_hook = { | |||
| 158 | .fn = kgdb_compiled_brk_fn | 159 | .fn = kgdb_compiled_brk_fn |
| 159 | }; | 160 | }; |
| 160 | 161 | ||
| 162 | static void kgdb_call_nmi_hook(void *ignored) | ||
| 163 | { | ||
| 164 | kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs()); | ||
| 165 | } | ||
| 166 | |||
| 167 | void kgdb_roundup_cpus(unsigned long flags) | ||
| 168 | { | ||
| 169 | local_irq_enable(); | ||
| 170 | smp_call_function(kgdb_call_nmi_hook, NULL, 0); | ||
| 171 | local_irq_disable(); | ||
| 172 | } | ||
| 173 | |||
| 161 | /** | 174 | /** |
| 162 | * kgdb_arch_init - Perform any architecture specific initalization. | 175 | * kgdb_arch_init - Perform any architecture specific initalization. |
| 163 | * | 176 | * |
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index 3875d99cc40f..9e70f2053f9a 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c | |||
| @@ -332,7 +332,8 @@ armpmu_reserve_hardware(void) | |||
| 332 | 332 | ||
| 333 | for (i = 0; i < pmu_irqs->num_irqs; ++i) { | 333 | for (i = 0; i < pmu_irqs->num_irqs; ++i) { |
| 334 | err = request_irq(pmu_irqs->irqs[i], armpmu->handle_irq, | 334 | err = request_irq(pmu_irqs->irqs[i], armpmu->handle_irq, |
| 335 | IRQF_DISABLED, "armpmu", NULL); | 335 | IRQF_DISABLED | IRQF_NOBALANCING, |
| 336 | "armpmu", NULL); | ||
| 336 | if (err) { | 337 | if (err) { |
| 337 | pr_warning("unable to request IRQ%d for ARM " | 338 | pr_warning("unable to request IRQ%d for ARM " |
| 338 | "perf counters\n", pmu_irqs->irqs[i]); | 339 | "perf counters\n", pmu_irqs->irqs[i]); |
| @@ -1624,7 +1625,7 @@ enum armv7_counters { | |||
| 1624 | /* | 1625 | /* |
| 1625 | * EVTSEL: Event selection reg | 1626 | * EVTSEL: Event selection reg |
| 1626 | */ | 1627 | */ |
| 1627 | #define ARMV7_EVTSEL_MASK 0x7f /* Mask for writable bits */ | 1628 | #define ARMV7_EVTSEL_MASK 0xff /* Mask for writable bits */ |
| 1628 | 1629 | ||
| 1629 | /* | 1630 | /* |
| 1630 | * SELECT: Counter selection reg | 1631 | * SELECT: Counter selection reg |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 57162af53dc9..577543f3857f 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
| @@ -99,6 +99,7 @@ int __cpuinit __cpu_up(unsigned int cpu) | |||
| 99 | *pmd = __pmd((PHYS_OFFSET & PGDIR_MASK) | | 99 | *pmd = __pmd((PHYS_OFFSET & PGDIR_MASK) | |
| 100 | PMD_TYPE_SECT | PMD_SECT_AP_WRITE); | 100 | PMD_TYPE_SECT | PMD_SECT_AP_WRITE); |
| 101 | flush_pmd_entry(pmd); | 101 | flush_pmd_entry(pmd); |
| 102 | outer_clean_range(__pa(pmd), __pa(pmd + 1)); | ||
| 102 | 103 | ||
| 103 | /* | 104 | /* |
| 104 | * We need to tell the secondary core where to find | 105 | * We need to tell the secondary core where to find |
| @@ -106,7 +107,8 @@ int __cpuinit __cpu_up(unsigned int cpu) | |||
| 106 | */ | 107 | */ |
| 107 | secondary_data.stack = task_stack_page(idle) + THREAD_START_SP; | 108 | secondary_data.stack = task_stack_page(idle) + THREAD_START_SP; |
| 108 | secondary_data.pgdir = virt_to_phys(pgd); | 109 | secondary_data.pgdir = virt_to_phys(pgd); |
| 109 | wmb(); | 110 | __cpuc_flush_dcache_area(&secondary_data, sizeof(secondary_data)); |
| 111 | outer_clean_range(__pa(&secondary_data), __pa(&secondary_data + 1)); | ||
| 110 | 112 | ||
| 111 | /* | 113 | /* |
| 112 | * Now bring the CPU into our world. | 114 | * Now bring the CPU into our world. |
diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index 29cf83177484..c11fd47aec5d 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c | |||
| @@ -271,10 +271,12 @@ static void __init ek_add_device_buttons(void) {} | |||
| 271 | 271 | ||
| 272 | 272 | ||
| 273 | static struct i2c_board_info __initdata ek_i2c_devices[] = { | 273 | static struct i2c_board_info __initdata ek_i2c_devices[] = { |
| 274 | { | 274 | { |
| 275 | I2C_BOARD_INFO("24c512", 0x50), | 275 | I2C_BOARD_INFO("24c512", 0x50) |
| 276 | I2C_BOARD_INFO("wm8731", 0x1b), | 276 | }, |
| 277 | }, | 277 | { |
| 278 | I2C_BOARD_INFO("wm8731", 0x1b) | ||
| 279 | }, | ||
| 278 | }; | 280 | }; |
| 279 | 281 | ||
| 280 | 282 | ||
diff --git a/arch/arm/mach-rpc/include/mach/uncompress.h b/arch/arm/mach-rpc/include/mach/uncompress.h index d5862368c4f2..8c9e2c7161c6 100644 --- a/arch/arm/mach-rpc/include/mach/uncompress.h +++ b/arch/arm/mach-rpc/include/mach/uncompress.h | |||
| @@ -109,8 +109,6 @@ static inline void flush(void) | |||
| 109 | { | 109 | { |
| 110 | } | 110 | } |
| 111 | 111 | ||
| 112 | static void error(char *x); | ||
| 113 | |||
| 114 | /* | 112 | /* |
| 115 | * Setup for decompression | 113 | * Setup for decompression |
| 116 | */ | 114 | */ |
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index a0463d926447..1c2ec96ce261 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
| @@ -206,10 +206,32 @@ static struct platform_device keysc_device = { | |||
| 206 | }, | 206 | }, |
| 207 | }; | 207 | }; |
| 208 | 208 | ||
| 209 | /* SDHI0 */ | ||
| 210 | static struct resource sdhi0_resources[] = { | ||
| 211 | [0] = { | ||
| 212 | .name = "SDHI0", | ||
| 213 | .start = 0xe6850000, | ||
| 214 | .end = 0xe68501ff, | ||
| 215 | .flags = IORESOURCE_MEM, | ||
| 216 | }, | ||
| 217 | [1] = { | ||
| 218 | .start = 96, | ||
| 219 | .flags = IORESOURCE_IRQ, | ||
| 220 | }, | ||
| 221 | }; | ||
| 222 | |||
| 223 | static struct platform_device sdhi0_device = { | ||
| 224 | .name = "sh_mobile_sdhi", | ||
| 225 | .num_resources = ARRAY_SIZE(sdhi0_resources), | ||
| 226 | .resource = sdhi0_resources, | ||
| 227 | .id = 0, | ||
| 228 | }; | ||
| 229 | |||
| 209 | static struct platform_device *ap4evb_devices[] __initdata = { | 230 | static struct platform_device *ap4evb_devices[] __initdata = { |
| 210 | &nor_flash_device, | 231 | &nor_flash_device, |
| 211 | &smc911x_device, | 232 | &smc911x_device, |
| 212 | &keysc_device, | 233 | &keysc_device, |
| 234 | &sdhi0_device, | ||
| 213 | }; | 235 | }; |
| 214 | 236 | ||
| 215 | static struct map_desc ap4evb_io_desc[] __initdata = { | 237 | static struct map_desc ap4evb_io_desc[] __initdata = { |
| @@ -286,6 +308,16 @@ static void __init ap4evb_init(void) | |||
| 286 | gpio_request(GPIO_FN_KEYIN3_133, NULL); | 308 | gpio_request(GPIO_FN_KEYIN3_133, NULL); |
| 287 | gpio_request(GPIO_FN_KEYIN4, NULL); | 309 | gpio_request(GPIO_FN_KEYIN4, NULL); |
| 288 | 310 | ||
| 311 | /* SDHI0 */ | ||
| 312 | gpio_request(GPIO_FN_SDHICD0, NULL); | ||
| 313 | gpio_request(GPIO_FN_SDHIWP0, NULL); | ||
| 314 | gpio_request(GPIO_FN_SDHICMD0, NULL); | ||
| 315 | gpio_request(GPIO_FN_SDHICLK0, NULL); | ||
| 316 | gpio_request(GPIO_FN_SDHID0_3, NULL); | ||
| 317 | gpio_request(GPIO_FN_SDHID0_2, NULL); | ||
| 318 | gpio_request(GPIO_FN_SDHID0_1, NULL); | ||
| 319 | gpio_request(GPIO_FN_SDHID0_0, NULL); | ||
| 320 | |||
| 289 | sh7372_add_standard_devices(); | 321 | sh7372_add_standard_devices(); |
| 290 | 322 | ||
| 291 | platform_add_devices(ap4evb_devices, ARRAY_SIZE(ap4evb_devices)); | 323 | platform_add_devices(ap4evb_devices, ARRAY_SIZE(ap4evb_devices)); |
diff --git a/arch/arm/mach-shmobile/board-g3evm.c b/arch/arm/mach-shmobile/board-g3evm.c index f36c9a94d326..9247503296c4 100644 --- a/arch/arm/mach-shmobile/board-g3evm.c +++ b/arch/arm/mach-shmobile/board-g3evm.c | |||
| @@ -26,9 +26,12 @@ | |||
| 26 | #include <linux/mtd/mtd.h> | 26 | #include <linux/mtd/mtd.h> |
| 27 | #include <linux/mtd/partitions.h> | 27 | #include <linux/mtd/partitions.h> |
| 28 | #include <linux/mtd/physmap.h> | 28 | #include <linux/mtd/physmap.h> |
| 29 | #include <linux/mtd/sh_flctl.h> | ||
| 29 | #include <linux/usb/r8a66597.h> | 30 | #include <linux/usb/r8a66597.h> |
| 30 | #include <linux/io.h> | 31 | #include <linux/io.h> |
| 31 | #include <linux/gpio.h> | 32 | #include <linux/gpio.h> |
| 33 | #include <linux/input.h> | ||
| 34 | #include <linux/input/sh_keysc.h> | ||
| 32 | #include <mach/sh7367.h> | 35 | #include <mach/sh7367.h> |
| 33 | #include <mach/common.h> | 36 | #include <mach/common.h> |
| 34 | #include <asm/mach-types.h> | 37 | #include <asm/mach-types.h> |
| @@ -127,9 +130,90 @@ static struct platform_device usb_host_device = { | |||
| 127 | .resource = usb_host_resources, | 130 | .resource = usb_host_resources, |
| 128 | }; | 131 | }; |
| 129 | 132 | ||
| 133 | /* KEYSC */ | ||
| 134 | static struct sh_keysc_info keysc_info = { | ||
| 135 | .mode = SH_KEYSC_MODE_5, | ||
| 136 | .scan_timing = 3, | ||
| 137 | .delay = 100, | ||
| 138 | .keycodes = { | ||
| 139 | KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, | ||
| 140 | KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, | ||
| 141 | KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, | ||
| 142 | KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_HOME, KEY_SLEEP, | ||
| 143 | KEY_WAKEUP, KEY_COFFEE, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, | ||
| 144 | KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_STOP, KEY_COMPUTER, | ||
| 145 | }, | ||
| 146 | }; | ||
| 147 | |||
| 148 | static struct resource keysc_resources[] = { | ||
| 149 | [0] = { | ||
| 150 | .name = "KEYSC", | ||
| 151 | .start = 0xe61b0000, | ||
| 152 | .end = 0xe61b000f, | ||
| 153 | .flags = IORESOURCE_MEM, | ||
| 154 | }, | ||
| 155 | [1] = { | ||
| 156 | .start = 79, | ||
| 157 | .flags = IORESOURCE_IRQ, | ||
| 158 | }, | ||
| 159 | }; | ||
| 160 | |||
| 161 | static struct platform_device keysc_device = { | ||
| 162 | .name = "sh_keysc", | ||
| 163 | .num_resources = ARRAY_SIZE(keysc_resources), | ||
| 164 | .resource = keysc_resources, | ||
| 165 | .dev = { | ||
| 166 | .platform_data = &keysc_info, | ||
| 167 | }, | ||
| 168 | }; | ||
| 169 | |||
| 170 | static struct mtd_partition nand_partition_info[] = { | ||
| 171 | { | ||
| 172 | .name = "system", | ||
| 173 | .offset = 0, | ||
| 174 | .size = 64 * 1024 * 1024, | ||
| 175 | }, | ||
| 176 | { | ||
| 177 | .name = "userdata", | ||
| 178 | .offset = MTDPART_OFS_APPEND, | ||
| 179 | .size = 128 * 1024 * 1024, | ||
| 180 | }, | ||
| 181 | { | ||
| 182 | .name = "cache", | ||
| 183 | .offset = MTDPART_OFS_APPEND, | ||
| 184 | .size = 64 * 1024 * 1024, | ||
| 185 | }, | ||
| 186 | }; | ||
| 187 | |||
| 188 | static struct resource nand_flash_resources[] = { | ||
| 189 | [0] = { | ||
| 190 | .start = 0xe6a30000, | ||
| 191 | .end = 0xe6a3009b, | ||
| 192 | .flags = IORESOURCE_MEM, | ||
| 193 | } | ||
| 194 | }; | ||
| 195 | |||
| 196 | static struct sh_flctl_platform_data nand_flash_data = { | ||
| 197 | .parts = nand_partition_info, | ||
| 198 | .nr_parts = ARRAY_SIZE(nand_partition_info), | ||
| 199 | .flcmncr_val = QTSEL_E | FCKSEL_E | TYPESEL_SET | NANWF_E | ||
| 200 | | SHBUSSEL | SEL_16BIT, | ||
| 201 | }; | ||
| 202 | |||
| 203 | static struct platform_device nand_flash_device = { | ||
| 204 | .name = "sh_flctl", | ||
| 205 | .resource = nand_flash_resources, | ||
| 206 | .num_resources = ARRAY_SIZE(nand_flash_resources), | ||
| 207 | .dev = { | ||
| 208 | .platform_data = &nand_flash_data, | ||
| 209 | }, | ||
| 210 | }; | ||
| 211 | |||
| 130 | static struct platform_device *g3evm_devices[] __initdata = { | 212 | static struct platform_device *g3evm_devices[] __initdata = { |
| 131 | &nor_flash_device, | 213 | &nor_flash_device, |
| 132 | &usb_host_device, | 214 | &usb_host_device, |
| 215 | &keysc_device, | ||
| 216 | &nand_flash_device, | ||
| 133 | }; | 217 | }; |
| 134 | 218 | ||
| 135 | static struct map_desc g3evm_io_desc[] __initdata = { | 219 | static struct map_desc g3evm_io_desc[] __initdata = { |
| @@ -196,6 +280,44 @@ static void __init g3evm_init(void) | |||
| 196 | __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ | 280 | __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ |
| 197 | __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ | 281 | __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ |
| 198 | 282 | ||
| 283 | /* KEYSC @ CN7 */ | ||
| 284 | gpio_request(GPIO_FN_PORT42_KEYOUT0, NULL); | ||
| 285 | gpio_request(GPIO_FN_PORT43_KEYOUT1, NULL); | ||
| 286 | gpio_request(GPIO_FN_PORT44_KEYOUT2, NULL); | ||
| 287 | gpio_request(GPIO_FN_PORT45_KEYOUT3, NULL); | ||
| 288 | gpio_request(GPIO_FN_PORT46_KEYOUT4, NULL); | ||
| 289 | gpio_request(GPIO_FN_PORT47_KEYOUT5, NULL); | ||
| 290 | gpio_request(GPIO_FN_PORT48_KEYIN0_PU, NULL); | ||
| 291 | gpio_request(GPIO_FN_PORT49_KEYIN1_PU, NULL); | ||
| 292 | gpio_request(GPIO_FN_PORT50_KEYIN2_PU, NULL); | ||
| 293 | gpio_request(GPIO_FN_PORT55_KEYIN3_PU, NULL); | ||
| 294 | gpio_request(GPIO_FN_PORT56_KEYIN4_PU, NULL); | ||
| 295 | gpio_request(GPIO_FN_PORT57_KEYIN5_PU, NULL); | ||
| 296 | gpio_request(GPIO_FN_PORT58_KEYIN6_PU, NULL); | ||
| 297 | |||
| 298 | /* FLCTL */ | ||
| 299 | gpio_request(GPIO_FN_FCE0, NULL); | ||
| 300 | gpio_request(GPIO_FN_D0_ED0_NAF0, NULL); | ||
| 301 | gpio_request(GPIO_FN_D1_ED1_NAF1, NULL); | ||
| 302 | gpio_request(GPIO_FN_D2_ED2_NAF2, NULL); | ||
| 303 | gpio_request(GPIO_FN_D3_ED3_NAF3, NULL); | ||
| 304 | gpio_request(GPIO_FN_D4_ED4_NAF4, NULL); | ||
| 305 | gpio_request(GPIO_FN_D5_ED5_NAF5, NULL); | ||
| 306 | gpio_request(GPIO_FN_D6_ED6_NAF6, NULL); | ||
| 307 | gpio_request(GPIO_FN_D7_ED7_NAF7, NULL); | ||
| 308 | gpio_request(GPIO_FN_D8_ED8_NAF8, NULL); | ||
| 309 | gpio_request(GPIO_FN_D9_ED9_NAF9, NULL); | ||
| 310 | gpio_request(GPIO_FN_D10_ED10_NAF10, NULL); | ||
| 311 | gpio_request(GPIO_FN_D11_ED11_NAF11, NULL); | ||
| 312 | gpio_request(GPIO_FN_D12_ED12_NAF12, NULL); | ||
| 313 | gpio_request(GPIO_FN_D13_ED13_NAF13, NULL); | ||
| 314 | gpio_request(GPIO_FN_D14_ED14_NAF14, NULL); | ||
| 315 | gpio_request(GPIO_FN_D15_ED15_NAF15, NULL); | ||
| 316 | gpio_request(GPIO_FN_WE0_XWR0_FWE, NULL); | ||
| 317 | gpio_request(GPIO_FN_FRB, NULL); | ||
| 318 | /* FOE, FCDE, FSC on dedicated pins */ | ||
| 319 | __raw_writel(__raw_readl(0xe6158048) & ~(1 << 15), 0xe6158048); | ||
| 320 | |||
| 199 | sh7367_add_standard_devices(); | 321 | sh7367_add_standard_devices(); |
| 200 | 322 | ||
| 201 | platform_add_devices(g3evm_devices, ARRAY_SIZE(g3evm_devices)); | 323 | platform_add_devices(g3evm_devices, ARRAY_SIZE(g3evm_devices)); |
diff --git a/arch/arm/mach-shmobile/board-g4evm.c b/arch/arm/mach-shmobile/board-g4evm.c index 5acd623f93e7..10673a90be52 100644 --- a/arch/arm/mach-shmobile/board-g4evm.c +++ b/arch/arm/mach-shmobile/board-g4evm.c | |||
| @@ -28,6 +28,8 @@ | |||
| 28 | #include <linux/mtd/physmap.h> | 28 | #include <linux/mtd/physmap.h> |
| 29 | #include <linux/usb/r8a66597.h> | 29 | #include <linux/usb/r8a66597.h> |
| 30 | #include <linux/io.h> | 30 | #include <linux/io.h> |
| 31 | #include <linux/input.h> | ||
| 32 | #include <linux/input/sh_keysc.h> | ||
| 31 | #include <linux/gpio.h> | 33 | #include <linux/gpio.h> |
| 32 | #include <mach/sh7377.h> | 34 | #include <mach/sh7377.h> |
| 33 | #include <mach/common.h> | 35 | #include <mach/common.h> |
| @@ -128,9 +130,49 @@ static struct platform_device usb_host_device = { | |||
| 128 | .resource = usb_host_resources, | 130 | .resource = usb_host_resources, |
| 129 | }; | 131 | }; |
| 130 | 132 | ||
| 133 | /* KEYSC */ | ||
| 134 | static struct sh_keysc_info keysc_info = { | ||
| 135 | .mode = SH_KEYSC_MODE_5, | ||
| 136 | .scan_timing = 3, | ||
| 137 | .delay = 100, | ||
| 138 | .keycodes = { | ||
| 139 | KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, | ||
| 140 | KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, | ||
| 141 | KEY_M, KEY_N, KEY_U, KEY_P, KEY_Q, KEY_R, | ||
| 142 | KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, | ||
| 143 | KEY_Y, KEY_Z, KEY_HOME, KEY_SLEEP, KEY_WAKEUP, KEY_COFFEE, | ||
| 144 | KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, | ||
| 145 | KEY_6, KEY_7, KEY_8, KEY_9, KEY_STOP, KEY_COMPUTER, | ||
| 146 | }, | ||
| 147 | }; | ||
| 148 | |||
| 149 | static struct resource keysc_resources[] = { | ||
| 150 | [0] = { | ||
| 151 | .name = "KEYSC", | ||
| 152 | .start = 0xe61b0000, | ||
| 153 | .end = 0xe61b000f, | ||
| 154 | .flags = IORESOURCE_MEM, | ||
| 155 | }, | ||
| 156 | [1] = { | ||
| 157 | .start = 79, | ||
| 158 | .flags = IORESOURCE_IRQ, | ||
| 159 | }, | ||
| 160 | }; | ||
| 161 | |||
| 162 | static struct platform_device keysc_device = { | ||
| 163 | .name = "sh_keysc", | ||
| 164 | .id = 0, /* keysc0 clock */ | ||
| 165 | .num_resources = ARRAY_SIZE(keysc_resources), | ||
| 166 | .resource = keysc_resources, | ||
| 167 | .dev = { | ||
| 168 | .platform_data = &keysc_info, | ||
| 169 | }, | ||
| 170 | }; | ||
| 171 | |||
| 131 | static struct platform_device *g4evm_devices[] __initdata = { | 172 | static struct platform_device *g4evm_devices[] __initdata = { |
| 132 | &nor_flash_device, | 173 | &nor_flash_device, |
| 133 | &usb_host_device, | 174 | &usb_host_device, |
| 175 | &keysc_device, | ||
| 134 | }; | 176 | }; |
| 135 | 177 | ||
| 136 | static struct map_desc g4evm_io_desc[] __initdata = { | 178 | static struct map_desc g4evm_io_desc[] __initdata = { |
| @@ -196,6 +238,21 @@ static void __init g4evm_init(void) | |||
| 196 | __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ | 238 | __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ |
| 197 | __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ | 239 | __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ |
| 198 | 240 | ||
| 241 | /* KEYSC @ CN31 */ | ||
| 242 | gpio_request(GPIO_FN_PORT60_KEYOUT5, NULL); | ||
| 243 | gpio_request(GPIO_FN_PORT61_KEYOUT4, NULL); | ||
| 244 | gpio_request(GPIO_FN_PORT62_KEYOUT3, NULL); | ||
| 245 | gpio_request(GPIO_FN_PORT63_KEYOUT2, NULL); | ||
| 246 | gpio_request(GPIO_FN_PORT64_KEYOUT1, NULL); | ||
| 247 | gpio_request(GPIO_FN_PORT65_KEYOUT0, NULL); | ||
| 248 | gpio_request(GPIO_FN_PORT66_KEYIN0_PU, NULL); | ||
| 249 | gpio_request(GPIO_FN_PORT67_KEYIN1_PU, NULL); | ||
| 250 | gpio_request(GPIO_FN_PORT68_KEYIN2_PU, NULL); | ||
| 251 | gpio_request(GPIO_FN_PORT69_KEYIN3_PU, NULL); | ||
| 252 | gpio_request(GPIO_FN_PORT70_KEYIN4_PU, NULL); | ||
| 253 | gpio_request(GPIO_FN_PORT71_KEYIN5_PU, NULL); | ||
| 254 | gpio_request(GPIO_FN_PORT72_KEYIN6_PU, NULL); | ||
| 255 | |||
| 199 | sh7377_add_standard_devices(); | 256 | sh7377_add_standard_devices(); |
| 200 | 257 | ||
| 201 | platform_add_devices(g4evm_devices, ARRAY_SIZE(g4evm_devices)); | 258 | platform_add_devices(g4evm_devices, ARRAY_SIZE(g4evm_devices)); |
diff --git a/arch/arm/mach-shmobile/clock-sh7367.c b/arch/arm/mach-shmobile/clock-sh7367.c index 58bd54e1113a..bb940c6e4e6c 100644 --- a/arch/arm/mach-shmobile/clock-sh7367.c +++ b/arch/arm/mach-shmobile/clock-sh7367.c | |||
| @@ -75,6 +75,11 @@ static struct clk usb0_clk = { | |||
| 75 | .name = "usb0", | 75 | .name = "usb0", |
| 76 | }; | 76 | }; |
| 77 | 77 | ||
| 78 | /* a static keysc0 clk for now - enough to get sh_keysc working */ | ||
| 79 | static struct clk keysc0_clk = { | ||
| 80 | .name = "keysc0", | ||
| 81 | }; | ||
| 82 | |||
| 78 | static struct clk_lookup lookups[] = { | 83 | static struct clk_lookup lookups[] = { |
| 79 | { | 84 | { |
| 80 | .clk = &peripheral_clk, | 85 | .clk = &peripheral_clk, |
| @@ -82,6 +87,8 @@ static struct clk_lookup lookups[] = { | |||
| 82 | .clk = &r_clk, | 87 | .clk = &r_clk, |
| 83 | }, { | 88 | }, { |
| 84 | .clk = &usb0_clk, | 89 | .clk = &usb0_clk, |
| 90 | }, { | ||
| 91 | .clk = &keysc0_clk, | ||
| 85 | } | 92 | } |
| 86 | }; | 93 | }; |
| 87 | 94 | ||
diff --git a/arch/arm/mach-shmobile/intc-sh7367.c b/arch/arm/mach-shmobile/intc-sh7367.c index 6a547b47aabb..5ff70cadfc32 100644 --- a/arch/arm/mach-shmobile/intc-sh7367.c +++ b/arch/arm/mach-shmobile/intc-sh7367.c | |||
| @@ -27,6 +27,8 @@ | |||
| 27 | 27 | ||
| 28 | enum { | 28 | enum { |
| 29 | UNUSED_INTCA = 0, | 29 | UNUSED_INTCA = 0, |
| 30 | ENABLED, | ||
| 31 | DISABLED, | ||
| 30 | 32 | ||
| 31 | /* interrupt sources INTCA */ | 33 | /* interrupt sources INTCA */ |
| 32 | IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A, | 34 | IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A, |
| @@ -46,8 +48,8 @@ enum { | |||
| 46 | MSIOF2, MSIOF1, | 48 | MSIOF2, MSIOF1, |
| 47 | SCIFA4, SCIFA5, SCIFB, | 49 | SCIFA4, SCIFA5, SCIFB, |
| 48 | FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I, | 50 | FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I, |
| 49 | SDHI0_SDHI0I0, SDHI0_SDHI0I1, SDHI0_SDHI0I2, SDHI0_SDHI0I3, | 51 | SDHI0, |
| 50 | SDHI1_SDHI1I0, SDHI1_SDHI1I1, SDHI1_SDHI1I2, SDHI1_SDHI1I3, | 52 | SDHI1, |
| 51 | MSU_MSU, MSU_MSU2, | 53 | MSU_MSU, MSU_MSU2, |
| 52 | IREM, | 54 | IREM, |
| 53 | SIU, | 55 | SIU, |
| @@ -59,7 +61,7 @@ enum { | |||
| 59 | TTI20, | 61 | TTI20, |
| 60 | MISTY, | 62 | MISTY, |
| 61 | DDM, | 63 | DDM, |
| 62 | SDHI2_SDHI2I0, SDHI2_SDHI2I1, SDHI2_SDHI2I2, SDHI2_SDHI2I3, | 64 | SDHI2, |
| 63 | RWDT0, RWDT1, | 65 | RWDT0, RWDT1, |
| 64 | DMAC_1_DEI0, DMAC_1_DEI1, DMAC_1_DEI2, DMAC_1_DEI3, | 66 | DMAC_1_DEI0, DMAC_1_DEI1, DMAC_1_DEI2, DMAC_1_DEI3, |
| 65 | DMAC_2_DEI4, DMAC_2_DEI5, DMAC_2_DADERR, | 67 | DMAC_2_DEI4, DMAC_2_DEI5, DMAC_2_DADERR, |
| @@ -70,7 +72,7 @@ enum { | |||
| 70 | 72 | ||
| 71 | /* interrupt groups INTCA */ | 73 | /* interrupt groups INTCA */ |
| 72 | DMAC_1, DMAC_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, | 74 | DMAC_1, DMAC_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, |
| 73 | ETM11, ARM11, USBHS, FLCTL, IIC1, SDHI0, SDHI1, SDHI2, | 75 | ETM11, ARM11, USBHS, FLCTL, IIC1 |
| 74 | }; | 76 | }; |
| 75 | 77 | ||
| 76 | static struct intc_vect intca_vectors[] = { | 78 | static struct intc_vect intca_vectors[] = { |
| @@ -105,10 +107,10 @@ static struct intc_vect intca_vectors[] = { | |||
| 105 | INTC_VECT(SCIFB, 0x0d60), | 107 | INTC_VECT(SCIFB, 0x0d60), |
| 106 | INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0), | 108 | INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0), |
| 107 | INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0), | 109 | INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0), |
| 108 | INTC_VECT(SDHI0_SDHI0I0, 0x0e00), INTC_VECT(SDHI0_SDHI0I1, 0x0e20), | 110 | INTC_VECT(SDHI0, 0x0e00), INTC_VECT(SDHI0, 0x0e20), |
| 109 | INTC_VECT(SDHI0_SDHI0I2, 0x0e40), INTC_VECT(SDHI0_SDHI0I3, 0x0e60), | 111 | INTC_VECT(SDHI0, 0x0e40), INTC_VECT(SDHI0, 0x0e60), |
| 110 | INTC_VECT(SDHI1_SDHI1I0, 0x0e80), INTC_VECT(SDHI1_SDHI1I1, 0x0ea0), | 112 | INTC_VECT(SDHI1, 0x0e80), INTC_VECT(SDHI1, 0x0ea0), |
| 111 | INTC_VECT(SDHI1_SDHI1I2, 0x0ec0), INTC_VECT(SDHI1_SDHI1I3, 0x0ee0), | 113 | INTC_VECT(SDHI1, 0x0ec0), INTC_VECT(SDHI1, 0x0ee0), |
| 112 | INTC_VECT(MSU_MSU, 0x0f20), INTC_VECT(MSU_MSU2, 0x0f40), | 114 | INTC_VECT(MSU_MSU, 0x0f20), INTC_VECT(MSU_MSU2, 0x0f40), |
| 113 | INTC_VECT(IREM, 0x0f60), | 115 | INTC_VECT(IREM, 0x0f60), |
| 114 | INTC_VECT(SIU, 0x0fa0), | 116 | INTC_VECT(SIU, 0x0fa0), |
| @@ -122,8 +124,8 @@ static struct intc_vect intca_vectors[] = { | |||
| 122 | INTC_VECT(TTI20, 0x1100), | 124 | INTC_VECT(TTI20, 0x1100), |
| 123 | INTC_VECT(MISTY, 0x1120), | 125 | INTC_VECT(MISTY, 0x1120), |
| 124 | INTC_VECT(DDM, 0x1140), | 126 | INTC_VECT(DDM, 0x1140), |
| 125 | INTC_VECT(SDHI2_SDHI2I0, 0x1200), INTC_VECT(SDHI2_SDHI2I1, 0x1220), | 127 | INTC_VECT(SDHI2, 0x1200), INTC_VECT(SDHI2, 0x1220), |
| 126 | INTC_VECT(SDHI2_SDHI2I2, 0x1240), INTC_VECT(SDHI2_SDHI2I3, 0x1260), | 128 | INTC_VECT(SDHI2, 0x1240), INTC_VECT(SDHI2, 0x1260), |
| 127 | INTC_VECT(RWDT0, 0x1280), INTC_VECT(RWDT1, 0x12a0), | 129 | INTC_VECT(RWDT0, 0x1280), INTC_VECT(RWDT1, 0x12a0), |
| 128 | INTC_VECT(DMAC_1_DEI0, 0x2000), INTC_VECT(DMAC_1_DEI1, 0x2020), | 130 | INTC_VECT(DMAC_1_DEI0, 0x2000), INTC_VECT(DMAC_1_DEI1, 0x2020), |
| 129 | INTC_VECT(DMAC_1_DEI2, 0x2040), INTC_VECT(DMAC_1_DEI3, 0x2060), | 131 | INTC_VECT(DMAC_1_DEI2, 0x2040), INTC_VECT(DMAC_1_DEI3, 0x2060), |
| @@ -158,12 +160,6 @@ static struct intc_group intca_groups[] __initdata = { | |||
| 158 | INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI, | 160 | INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI, |
| 159 | FLCTL_FLTREQ0I, FLCTL_FLTREQ1I), | 161 | FLCTL_FLTREQ0I, FLCTL_FLTREQ1I), |
| 160 | INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1), | 162 | INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1), |
| 161 | INTC_GROUP(SDHI0, SDHI0_SDHI0I0, SDHI0_SDHI0I1, | ||
| 162 | SDHI0_SDHI0I2, SDHI0_SDHI0I3), | ||
| 163 | INTC_GROUP(SDHI1, SDHI1_SDHI1I0, SDHI1_SDHI1I1, | ||
| 164 | SDHI1_SDHI1I2, SDHI1_SDHI1I3), | ||
| 165 | INTC_GROUP(SDHI2, SDHI2_SDHI2I0, SDHI2_SDHI2I1, | ||
| 166 | SDHI2_SDHI2I2, SDHI2_SDHI2I3), | ||
| 167 | }; | 163 | }; |
| 168 | 164 | ||
| 169 | static struct intc_mask_reg intca_mask_registers[] = { | 165 | static struct intc_mask_reg intca_mask_registers[] = { |
| @@ -193,10 +189,10 @@ static struct intc_mask_reg intca_mask_registers[] = { | |||
| 193 | { SCIFB, SCIFA5, SCIFA4, MSIOF1, | 189 | { SCIFB, SCIFA5, SCIFA4, MSIOF1, |
| 194 | 0, 0, MSIOF2, 0 } }, | 190 | 0, 0, MSIOF2, 0 } }, |
| 195 | { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */ | 191 | { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */ |
| 196 | { SDHI0_SDHI0I3, SDHI0_SDHI0I2, SDHI0_SDHI0I1, SDHI0_SDHI0I0, | 192 | { DISABLED, DISABLED, ENABLED, ENABLED, |
| 197 | FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } }, | 193 | FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } }, |
| 198 | { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */ | 194 | { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */ |
| 199 | { SDHI1_SDHI1I3, SDHI1_SDHI1I2, SDHI1_SDHI1I1, SDHI1_SDHI1I0, | 195 | { DISABLED, DISABLED, ENABLED, ENABLED, |
| 200 | TTI20, USBDMAC_USHDMI, SPU, SIU } }, | 196 | TTI20, USBDMAC_USHDMI, SPU, SIU } }, |
| 201 | { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */ | 197 | { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */ |
| 202 | { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10, | 198 | { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10, |
| @@ -211,7 +207,7 @@ static struct intc_mask_reg intca_mask_registers[] = { | |||
| 211 | { 0, 0, TPU0, TPU1, | 207 | { 0, 0, TPU0, TPU1, |
| 212 | TPU2, TPU3, TPU4, 0 } }, | 208 | TPU2, TPU3, TPU4, 0 } }, |
| 213 | { 0xe69400b4, 0xe69400f4, 8, /* IMR13A / IMCR13A */ | 209 | { 0xe69400b4, 0xe69400f4, 8, /* IMR13A / IMCR13A */ |
| 214 | { SDHI2_SDHI2I3, SDHI2_SDHI2I2, SDHI2_SDHI2I1, SDHI2_SDHI2I0, | 210 | { DISABLED, DISABLED, ENABLED, ENABLED, |
| 215 | MISTY, CMT3, RWDT1, RWDT0 } }, | 211 | MISTY, CMT3, RWDT1, RWDT0 } }, |
| 216 | }; | 212 | }; |
| 217 | 213 | ||
| @@ -258,10 +254,14 @@ static struct intc_mask_reg intca_ack_registers[] __initdata = { | |||
| 258 | { IRQ8A, IRQ9A, IRQ10A, IRQ11A, IRQ12A, IRQ13A, IRQ14A, IRQ15A } }, | 254 | { IRQ8A, IRQ9A, IRQ10A, IRQ11A, IRQ12A, IRQ13A, IRQ14A, IRQ15A } }, |
| 259 | }; | 255 | }; |
| 260 | 256 | ||
| 261 | static DECLARE_INTC_DESC_ACK(intca_desc, "sh7367-intca", | 257 | static struct intc_desc intca_desc __initdata = { |
| 262 | intca_vectors, intca_groups, | 258 | .name = "sh7367-intca", |
| 263 | intca_mask_registers, intca_prio_registers, | 259 | .force_enable = ENABLED, |
| 264 | intca_sense_registers, intca_ack_registers); | 260 | .force_disable = DISABLED, |
| 261 | .hw = INTC_HW_DESC(intca_vectors, intca_groups, | ||
| 262 | intca_mask_registers, intca_prio_registers, | ||
| 263 | intca_sense_registers, intca_ack_registers), | ||
| 264 | }; | ||
| 265 | 265 | ||
| 266 | void __init sh7367_init_irq(void) | 266 | void __init sh7367_init_irq(void) |
| 267 | { | 267 | { |
diff --git a/arch/arm/mach-shmobile/intc-sh7372.c b/arch/arm/mach-shmobile/intc-sh7372.c index c57a923f97a6..3ce9d9bd5899 100644 --- a/arch/arm/mach-shmobile/intc-sh7372.c +++ b/arch/arm/mach-shmobile/intc-sh7372.c | |||
| @@ -27,6 +27,8 @@ | |||
| 27 | 27 | ||
| 28 | enum { | 28 | enum { |
| 29 | UNUSED_INTCA = 0, | 29 | UNUSED_INTCA = 0, |
| 30 | ENABLED, | ||
| 31 | DISABLED, | ||
| 30 | 32 | ||
| 31 | /* interrupt sources INTCA */ | 33 | /* interrupt sources INTCA */ |
| 32 | IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A, | 34 | IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A, |
| @@ -47,14 +49,14 @@ enum { | |||
| 47 | MSIOF2, MSIOF1, | 49 | MSIOF2, MSIOF1, |
| 48 | SCIFA4, SCIFA5, SCIFB, | 50 | SCIFA4, SCIFA5, SCIFB, |
| 49 | FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I, | 51 | FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I, |
| 50 | SDHI0_SDHI0I0, SDHI0_SDHI0I1, SDHI0_SDHI0I2, SDHI0_SDHI0I3, | 52 | SDHI0, |
| 51 | SDHI1_SDHI1I0, SDHI1_SDHI1I1, SDHI1_SDHI1I2, | 53 | SDHI1, |
| 52 | IRREM, | 54 | IRREM, |
| 53 | IRDA, | 55 | IRDA, |
| 54 | TPU0, | 56 | TPU0, |
| 55 | TTI20, | 57 | TTI20, |
| 56 | DDM, | 58 | DDM, |
| 57 | SDHI2_SDHI2I0, SDHI2_SDHI2I1, SDHI2_SDHI2I2, SDHI2_SDHI2I3, | 59 | SDHI2, |
| 58 | RWDT0, | 60 | RWDT0, |
| 59 | DMAC1_1_DEI0, DMAC1_1_DEI1, DMAC1_1_DEI2, DMAC1_1_DEI3, | 61 | DMAC1_1_DEI0, DMAC1_1_DEI1, DMAC1_1_DEI2, DMAC1_1_DEI3, |
| 60 | DMAC1_2_DEI4, DMAC1_2_DEI5, DMAC1_2_DADERR, | 62 | DMAC1_2_DEI4, DMAC1_2_DEI5, DMAC1_2_DADERR, |
| @@ -82,7 +84,7 @@ enum { | |||
| 82 | 84 | ||
| 83 | /* interrupt groups INTCA */ | 85 | /* interrupt groups INTCA */ |
| 84 | DMAC1_1, DMAC1_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, SHWYSTAT, | 86 | DMAC1_1, DMAC1_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, SHWYSTAT, |
| 85 | AP_ARM1, AP_ARM2, SPU2, FLCTL, IIC1, SDHI0, SDHI1, SDHI2 | 87 | AP_ARM1, AP_ARM2, SPU2, FLCTL, IIC1 |
| 86 | }; | 88 | }; |
| 87 | 89 | ||
| 88 | static struct intc_vect intca_vectors[] __initdata = { | 90 | static struct intc_vect intca_vectors[] __initdata = { |
| @@ -123,17 +125,17 @@ static struct intc_vect intca_vectors[] __initdata = { | |||
| 123 | INTC_VECT(SCIFB, 0x0d60), | 125 | INTC_VECT(SCIFB, 0x0d60), |
| 124 | INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0), | 126 | INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0), |
| 125 | INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0), | 127 | INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0), |
| 126 | INTC_VECT(SDHI0_SDHI0I0, 0x0e00), INTC_VECT(SDHI0_SDHI0I1, 0x0e20), | 128 | INTC_VECT(SDHI0, 0x0e00), INTC_VECT(SDHI0, 0x0e20), |
| 127 | INTC_VECT(SDHI0_SDHI0I2, 0x0e40), INTC_VECT(SDHI0_SDHI0I3, 0x0e60), | 129 | INTC_VECT(SDHI0, 0x0e40), INTC_VECT(SDHI0, 0x0e60), |
| 128 | INTC_VECT(SDHI1_SDHI1I0, 0x0e80), INTC_VECT(SDHI1_SDHI1I1, 0x0ea0), | 130 | INTC_VECT(SDHI1, 0x0e80), INTC_VECT(SDHI1, 0x0ea0), |
| 129 | INTC_VECT(SDHI1_SDHI1I2, 0x0ec0), | 131 | INTC_VECT(SDHI1, 0x0ec0), |
| 130 | INTC_VECT(IRREM, 0x0f60), | 132 | INTC_VECT(IRREM, 0x0f60), |
| 131 | INTC_VECT(IRDA, 0x0480), | 133 | INTC_VECT(IRDA, 0x0480), |
| 132 | INTC_VECT(TPU0, 0x04a0), | 134 | INTC_VECT(TPU0, 0x04a0), |
| 133 | INTC_VECT(TTI20, 0x1100), | 135 | INTC_VECT(TTI20, 0x1100), |
| 134 | INTC_VECT(DDM, 0x1140), | 136 | INTC_VECT(DDM, 0x1140), |
| 135 | INTC_VECT(SDHI2_SDHI2I0, 0x1200), INTC_VECT(SDHI2_SDHI2I1, 0x1220), | 137 | INTC_VECT(SDHI2, 0x1200), INTC_VECT(SDHI2, 0x1220), |
| 136 | INTC_VECT(SDHI2_SDHI2I2, 0x1240), INTC_VECT(SDHI2_SDHI2I3, 0x1260), | 138 | INTC_VECT(SDHI2, 0x1240), INTC_VECT(SDHI2, 0x1260), |
| 137 | INTC_VECT(RWDT0, 0x1280), | 139 | INTC_VECT(RWDT0, 0x1280), |
| 138 | INTC_VECT(DMAC1_1_DEI0, 0x2000), INTC_VECT(DMAC1_1_DEI1, 0x2020), | 140 | INTC_VECT(DMAC1_1_DEI0, 0x2000), INTC_VECT(DMAC1_1_DEI1, 0x2020), |
| 139 | INTC_VECT(DMAC1_1_DEI2, 0x2040), INTC_VECT(DMAC1_1_DEI3, 0x2060), | 141 | INTC_VECT(DMAC1_1_DEI2, 0x2040), INTC_VECT(DMAC1_1_DEI3, 0x2060), |
| @@ -193,12 +195,6 @@ static struct intc_group intca_groups[] __initdata = { | |||
| 193 | INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI, | 195 | INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI, |
| 194 | FLCTL_FLTREQ0I, FLCTL_FLTREQ1I), | 196 | FLCTL_FLTREQ0I, FLCTL_FLTREQ1I), |
| 195 | INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1), | 197 | INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1), |
| 196 | INTC_GROUP(SDHI0, SDHI0_SDHI0I0, SDHI0_SDHI0I1, | ||
| 197 | SDHI0_SDHI0I2, SDHI0_SDHI0I3), | ||
| 198 | INTC_GROUP(SDHI1, SDHI1_SDHI1I0, SDHI1_SDHI1I1, | ||
| 199 | SDHI1_SDHI1I2), | ||
| 200 | INTC_GROUP(SDHI2, SDHI2_SDHI2I0, SDHI2_SDHI2I1, | ||
| 201 | SDHI2_SDHI2I2, SDHI2_SDHI2I3), | ||
| 202 | INTC_GROUP(SHWYSTAT, SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM), | 198 | INTC_GROUP(SHWYSTAT, SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM), |
| 203 | }; | 199 | }; |
| 204 | 200 | ||
| @@ -234,10 +230,10 @@ static struct intc_mask_reg intca_mask_registers[] __initdata = { | |||
| 234 | { SCIFB, SCIFA5, SCIFA4, MSIOF1, | 230 | { SCIFB, SCIFA5, SCIFA4, MSIOF1, |
| 235 | 0, 0, MSIOF2, 0 } }, | 231 | 0, 0, MSIOF2, 0 } }, |
| 236 | { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */ | 232 | { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */ |
| 237 | { SDHI0_SDHI0I3, SDHI0_SDHI0I2, SDHI0_SDHI0I1, SDHI0_SDHI0I0, | 233 | { DISABLED, DISABLED, ENABLED, ENABLED, |
| 238 | FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } }, | 234 | FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } }, |
| 239 | { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */ | 235 | { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */ |
| 240 | { 0, SDHI1_SDHI1I2, SDHI1_SDHI1I1, SDHI1_SDHI1I0, | 236 | { 0, DISABLED, ENABLED, ENABLED, |
| 241 | TTI20, USBHSDMAC0_USHDMI, 0, 0 } }, | 237 | TTI20, USBHSDMAC0_USHDMI, 0, 0 } }, |
| 242 | { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */ | 238 | { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */ |
| 243 | { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10, | 239 | { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10, |
| @@ -252,7 +248,7 @@ static struct intc_mask_reg intca_mask_registers[] __initdata = { | |||
| 252 | { 0, 0, TPU0, 0, | 248 | { 0, 0, TPU0, 0, |
| 253 | 0, 0, 0, 0 } }, | 249 | 0, 0, 0, 0 } }, |
| 254 | { 0xe69400b4, 0xe69400f4, 8, /* IMR13A / IMCR13A */ | 250 | { 0xe69400b4, 0xe69400f4, 8, /* IMR13A / IMCR13A */ |
| 255 | { SDHI2_SDHI2I3, SDHI2_SDHI2I2, SDHI2_SDHI2I1, SDHI2_SDHI2I0, | 251 | { DISABLED, DISABLED, ENABLED, ENABLED, |
| 256 | 0, CMT3, 0, RWDT0 } }, | 252 | 0, CMT3, 0, RWDT0 } }, |
| 257 | { 0xe6950080, 0xe69500c0, 8, /* IMR0A3 / IMCR0A3 */ | 253 | { 0xe6950080, 0xe69500c0, 8, /* IMR0A3 / IMCR0A3 */ |
| 258 | { SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM, 0, | 254 | { SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM, 0, |
| @@ -358,10 +354,14 @@ static struct intc_mask_reg intca_ack_registers[] __initdata = { | |||
| 358 | { IRQ24A, IRQ25A, IRQ26A, IRQ27A, IRQ28A, IRQ29A, IRQ30A, IRQ31A } }, | 354 | { IRQ24A, IRQ25A, IRQ26A, IRQ27A, IRQ28A, IRQ29A, IRQ30A, IRQ31A } }, |
| 359 | }; | 355 | }; |
| 360 | 356 | ||
| 361 | static DECLARE_INTC_DESC_ACK(intca_desc, "sh7372-intca", | 357 | static struct intc_desc intca_desc __initdata = { |
| 362 | intca_vectors, intca_groups, | 358 | .name = "sh7372-intca", |
| 363 | intca_mask_registers, intca_prio_registers, | 359 | .force_enable = ENABLED, |
| 364 | intca_sense_registers, intca_ack_registers); | 360 | .force_disable = DISABLED, |
| 361 | .hw = INTC_HW_DESC(intca_vectors, intca_groups, | ||
| 362 | intca_mask_registers, intca_prio_registers, | ||
| 363 | intca_sense_registers, intca_ack_registers), | ||
| 364 | }; | ||
| 365 | 365 | ||
| 366 | void __init sh7372_init_irq(void) | 366 | void __init sh7372_init_irq(void) |
| 367 | { | 367 | { |
diff --git a/arch/arm/mach-shmobile/intc-sh7377.c b/arch/arm/mach-shmobile/intc-sh7377.c index 125021cfba5c..5c781e2d1897 100644 --- a/arch/arm/mach-shmobile/intc-sh7377.c +++ b/arch/arm/mach-shmobile/intc-sh7377.c | |||
| @@ -27,6 +27,8 @@ | |||
| 27 | 27 | ||
| 28 | enum { | 28 | enum { |
| 29 | UNUSED_INTCA = 0, | 29 | UNUSED_INTCA = 0, |
| 30 | ENABLED, | ||
| 31 | DISABLED, | ||
| 30 | 32 | ||
| 31 | /* interrupt sources INTCA */ | 33 | /* interrupt sources INTCA */ |
| 32 | IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A, | 34 | IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A, |
| @@ -49,8 +51,8 @@ enum { | |||
| 49 | MSIOF2, MSIOF1, | 51 | MSIOF2, MSIOF1, |
| 50 | SCIFA4, SCIFA5, SCIFB, | 52 | SCIFA4, SCIFA5, SCIFB, |
| 51 | FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I, | 53 | FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I, |
| 52 | SDHI0_SDHI0I0, SDHI0_SDHI0I1, SDHI0_SDHI0I2, SDHI0_SDHI0I3, | 54 | SDHI0, |
| 53 | SDHI1_SDHI1I0, SDHI1_SDHI1I1, SDHI1_SDHI1I2, SDHI1_SDHI1I3, | 55 | SDHI1, |
| 54 | MSU_MSU, MSU_MSU2, | 56 | MSU_MSU, MSU_MSU2, |
| 55 | IRREM, | 57 | IRREM, |
| 56 | MSUG, | 58 | MSUG, |
| @@ -84,7 +86,7 @@ enum { | |||
| 84 | 86 | ||
| 85 | /* interrupt groups INTCA */ | 87 | /* interrupt groups INTCA */ |
| 86 | DMAC_1, DMAC_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, SHWYSTAT, | 88 | DMAC_1, DMAC_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, SHWYSTAT, |
| 87 | AP_ARM1, AP_ARM2, USBHS, SPU2, FLCTL, IIC1, SDHI0, SDHI1, | 89 | AP_ARM1, AP_ARM2, USBHS, SPU2, FLCTL, IIC1, |
| 88 | ICUSB, ICUDMC | 90 | ICUSB, ICUDMC |
| 89 | }; | 91 | }; |
| 90 | 92 | ||
| @@ -128,10 +130,10 @@ static struct intc_vect intca_vectors[] = { | |||
| 128 | INTC_VECT(SCIFB, 0x0d60), | 130 | INTC_VECT(SCIFB, 0x0d60), |
| 129 | INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0), | 131 | INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0), |
| 130 | INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0), | 132 | INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0), |
| 131 | INTC_VECT(SDHI0_SDHI0I0, 0x0e00), INTC_VECT(SDHI0_SDHI0I1, 0x0e20), | 133 | INTC_VECT(SDHI0, 0x0e00), INTC_VECT(SDHI0, 0x0e20), |
| 132 | INTC_VECT(SDHI0_SDHI0I2, 0x0e40), INTC_VECT(SDHI0_SDHI0I3, 0x0e60), | 134 | INTC_VECT(SDHI0, 0x0e40), INTC_VECT(SDHI0, 0x0e60), |
| 133 | INTC_VECT(SDHI1_SDHI1I0, 0x0e80), INTC_VECT(SDHI1_SDHI1I1, 0x0ea0), | 135 | INTC_VECT(SDHI1, 0x0e80), INTC_VECT(SDHI1, 0x0ea0), |
| 134 | INTC_VECT(SDHI1_SDHI1I2, 0x0ec0), INTC_VECT(SDHI1_SDHI1I3, 0x0ee0), | 136 | INTC_VECT(SDHI1, 0x0ec0), INTC_VECT(SDHI1, 0x0ee0), |
| 135 | INTC_VECT(MSU_MSU, 0x0f20), INTC_VECT(MSU_MSU2, 0x0f40), | 137 | INTC_VECT(MSU_MSU, 0x0f20), INTC_VECT(MSU_MSU2, 0x0f40), |
| 136 | INTC_VECT(IRREM, 0x0f60), | 138 | INTC_VECT(IRREM, 0x0f60), |
| 137 | INTC_VECT(MSUG, 0x0fa0), | 139 | INTC_VECT(MSUG, 0x0fa0), |
| @@ -195,10 +197,6 @@ static struct intc_group intca_groups[] __initdata = { | |||
| 195 | INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI, | 197 | INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI, |
| 196 | FLCTL_FLTREQ0I, FLCTL_FLTREQ1I), | 198 | FLCTL_FLTREQ0I, FLCTL_FLTREQ1I), |
| 197 | INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1), | 199 | INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1), |
| 198 | INTC_GROUP(SDHI0, SDHI0_SDHI0I0, SDHI0_SDHI0I1, | ||
| 199 | SDHI0_SDHI0I2, SDHI0_SDHI0I3), | ||
| 200 | INTC_GROUP(SDHI1, SDHI1_SDHI1I0, SDHI1_SDHI1I1, | ||
| 201 | SDHI1_SDHI1I2, SDHI1_SDHI1I3), | ||
| 202 | INTC_GROUP(SHWYSTAT, SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM), | 200 | INTC_GROUP(SHWYSTAT, SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM), |
| 203 | INTC_GROUP(ICUSB, ICUSB_ICUSB0, ICUSB_ICUSB1), | 201 | INTC_GROUP(ICUSB, ICUSB_ICUSB0, ICUSB_ICUSB1), |
| 204 | INTC_GROUP(ICUDMC, ICUDMC_ICUDMC1, ICUDMC_ICUDMC2), | 202 | INTC_GROUP(ICUDMC, ICUDMC_ICUDMC1, ICUDMC_ICUDMC2), |
| @@ -236,10 +234,10 @@ static struct intc_mask_reg intca_mask_registers[] = { | |||
| 236 | { SCIFB, SCIFA5, SCIFA4, MSIOF1, | 234 | { SCIFB, SCIFA5, SCIFA4, MSIOF1, |
| 237 | 0, 0, MSIOF2, 0 } }, | 235 | 0, 0, MSIOF2, 0 } }, |
| 238 | { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */ | 236 | { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */ |
| 239 | { SDHI0_SDHI0I3, SDHI0_SDHI0I2, SDHI0_SDHI0I1, SDHI0_SDHI0I0, | 237 | { DISABLED, DISABLED, ENABLED, ENABLED, |
| 240 | FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } }, | 238 | FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } }, |
| 241 | { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */ | 239 | { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */ |
| 242 | { SDHI1_SDHI1I3, SDHI1_SDHI1I2, SDHI1_SDHI1I1, SDHI1_SDHI1I0, | 240 | { DISABLED, DISABLED, ENABLED, ENABLED, |
| 243 | TTI20, USBDMAC_USHDMI, 0, MSUG } }, | 241 | TTI20, USBDMAC_USHDMI, 0, MSUG } }, |
| 244 | { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */ | 242 | { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */ |
| 245 | { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10, | 243 | { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10, |
| @@ -339,10 +337,14 @@ static struct intc_mask_reg intca_ack_registers[] __initdata = { | |||
| 339 | { IRQ24A, IRQ25A, IRQ26A, IRQ27A, IRQ28A, IRQ29A, IRQ30A, IRQ31A } }, | 337 | { IRQ24A, IRQ25A, IRQ26A, IRQ27A, IRQ28A, IRQ29A, IRQ30A, IRQ31A } }, |
| 340 | }; | 338 | }; |
| 341 | 339 | ||
| 342 | static DECLARE_INTC_DESC_ACK(intca_desc, "sh7377-intca", | 340 | static struct intc_desc intca_desc __initdata = { |
| 343 | intca_vectors, intca_groups, | 341 | .name = "sh7377-intca", |
| 344 | intca_mask_registers, intca_prio_registers, | 342 | .force_enable = ENABLED, |
| 345 | intca_sense_registers, intca_ack_registers); | 343 | .force_disable = DISABLED, |
| 344 | .hw = INTC_HW_DESC(intca_vectors, intca_groups, | ||
| 345 | intca_mask_registers, intca_prio_registers, | ||
| 346 | intca_sense_registers, intca_ack_registers), | ||
| 347 | }; | ||
| 346 | 348 | ||
| 347 | void __init sh7377_init_irq(void) | 349 | void __init sh7377_init_irq(void) |
| 348 | { | 350 | { |
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig index 1157d5679e66..42e5ea49e975 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig | |||
| @@ -457,7 +457,7 @@ config MTD_NAND_NOMADIK | |||
| 457 | 457 | ||
| 458 | config MTD_NAND_SH_FLCTL | 458 | config MTD_NAND_SH_FLCTL |
| 459 | tristate "Support for NAND on Renesas SuperH FLCTL" | 459 | tristate "Support for NAND on Renesas SuperH FLCTL" |
| 460 | depends on MTD_NAND && SUPERH | 460 | depends on MTD_NAND && (SUPERH || ARCH_SHMOBILE) |
| 461 | help | 461 | help |
| 462 | Several Renesas SuperH CPU has FLCTL. This option enables support | 462 | Several Renesas SuperH CPU has FLCTL. This option enables support |
| 463 | for NAND Flash using FLCTL. | 463 | for NAND Flash using FLCTL. |
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index feaff4f04b58..6e16244f3ed1 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
| @@ -1881,7 +1881,7 @@ config FB_W100 | |||
| 1881 | 1881 | ||
| 1882 | config FB_SH_MOBILE_LCDC | 1882 | config FB_SH_MOBILE_LCDC |
| 1883 | tristate "SuperH Mobile LCDC framebuffer support" | 1883 | tristate "SuperH Mobile LCDC framebuffer support" |
| 1884 | depends on FB && SUPERH && HAVE_CLK | 1884 | depends on FB && (SUPERH || ARCH_SHMOBILE) && HAVE_CLK |
| 1885 | select FB_SYS_FILLRECT | 1885 | select FB_SYS_FILLRECT |
| 1886 | select FB_SYS_COPYAREA | 1886 | select FB_SYS_COPYAREA |
| 1887 | select FB_SYS_IMAGEBLIT | 1887 | select FB_SYS_IMAGEBLIT |
diff --git a/drivers/video/amba-clcd.c b/drivers/video/amba-clcd.c index a21efcd10b78..afe21e6eb544 100644 --- a/drivers/video/amba-clcd.c +++ b/drivers/video/amba-clcd.c | |||
| @@ -65,16 +65,16 @@ static void clcdfb_disable(struct clcd_fb *fb) | |||
| 65 | if (fb->board->disable) | 65 | if (fb->board->disable) |
| 66 | fb->board->disable(fb); | 66 | fb->board->disable(fb); |
| 67 | 67 | ||
| 68 | val = readl(fb->regs + CLCD_CNTL); | 68 | val = readl(fb->regs + fb->off_cntl); |
| 69 | if (val & CNTL_LCDPWR) { | 69 | if (val & CNTL_LCDPWR) { |
| 70 | val &= ~CNTL_LCDPWR; | 70 | val &= ~CNTL_LCDPWR; |
| 71 | writel(val, fb->regs + CLCD_CNTL); | 71 | writel(val, fb->regs + fb->off_cntl); |
| 72 | 72 | ||
| 73 | clcdfb_sleep(20); | 73 | clcdfb_sleep(20); |
| 74 | } | 74 | } |
| 75 | if (val & CNTL_LCDEN) { | 75 | if (val & CNTL_LCDEN) { |
| 76 | val &= ~CNTL_LCDEN; | 76 | val &= ~CNTL_LCDEN; |
| 77 | writel(val, fb->regs + CLCD_CNTL); | 77 | writel(val, fb->regs + fb->off_cntl); |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | /* | 80 | /* |
| @@ -94,7 +94,7 @@ static void clcdfb_enable(struct clcd_fb *fb, u32 cntl) | |||
| 94 | * Bring up by first enabling.. | 94 | * Bring up by first enabling.. |
| 95 | */ | 95 | */ |
| 96 | cntl |= CNTL_LCDEN; | 96 | cntl |= CNTL_LCDEN; |
| 97 | writel(cntl, fb->regs + CLCD_CNTL); | 97 | writel(cntl, fb->regs + fb->off_cntl); |
| 98 | 98 | ||
| 99 | clcdfb_sleep(20); | 99 | clcdfb_sleep(20); |
| 100 | 100 | ||
| @@ -102,7 +102,7 @@ static void clcdfb_enable(struct clcd_fb *fb, u32 cntl) | |||
| 102 | * and now apply power. | 102 | * and now apply power. |
| 103 | */ | 103 | */ |
| 104 | cntl |= CNTL_LCDPWR; | 104 | cntl |= CNTL_LCDPWR; |
| 105 | writel(cntl, fb->regs + CLCD_CNTL); | 105 | writel(cntl, fb->regs + fb->off_cntl); |
| 106 | 106 | ||
| 107 | /* | 107 | /* |
| 108 | * finally, enable the interface. | 108 | * finally, enable the interface. |
| @@ -233,7 +233,7 @@ static int clcdfb_set_par(struct fb_info *info) | |||
| 233 | readl(fb->regs + CLCD_TIM0), readl(fb->regs + CLCD_TIM1), | 233 | readl(fb->regs + CLCD_TIM0), readl(fb->regs + CLCD_TIM1), |
| 234 | readl(fb->regs + CLCD_TIM2), readl(fb->regs + CLCD_TIM3), | 234 | readl(fb->regs + CLCD_TIM2), readl(fb->regs + CLCD_TIM3), |
| 235 | readl(fb->regs + CLCD_UBAS), readl(fb->regs + CLCD_LBAS), | 235 | readl(fb->regs + CLCD_UBAS), readl(fb->regs + CLCD_LBAS), |
| 236 | readl(fb->regs + CLCD_IENB), readl(fb->regs + CLCD_CNTL)); | 236 | readl(fb->regs + fb->off_ienb), readl(fb->regs + fb->off_cntl)); |
| 237 | #endif | 237 | #endif |
| 238 | 238 | ||
| 239 | return 0; | 239 | return 0; |
| @@ -345,6 +345,23 @@ static int clcdfb_register(struct clcd_fb *fb) | |||
| 345 | { | 345 | { |
| 346 | int ret; | 346 | int ret; |
| 347 | 347 | ||
| 348 | /* | ||
| 349 | * ARM PL111 always has IENB at 0x1c; it's only PL110 | ||
| 350 | * which is reversed on some platforms. | ||
| 351 | */ | ||
| 352 | if (amba_manf(fb->dev) == 0x41 && amba_part(fb->dev) == 0x111) { | ||
| 353 | fb->off_ienb = CLCD_PL111_IENB; | ||
| 354 | fb->off_cntl = CLCD_PL111_CNTL; | ||
| 355 | } else { | ||
| 356 | #ifdef CONFIG_ARCH_VERSATILE | ||
| 357 | fb->off_ienb = CLCD_PL111_IENB; | ||
| 358 | fb->off_cntl = CLCD_PL111_CNTL; | ||
| 359 | #else | ||
| 360 | fb->off_ienb = CLCD_PL110_IENB; | ||
| 361 | fb->off_cntl = CLCD_PL110_CNTL; | ||
| 362 | #endif | ||
| 363 | } | ||
| 364 | |||
| 348 | fb->clk = clk_get(&fb->dev->dev, NULL); | 365 | fb->clk = clk_get(&fb->dev->dev, NULL); |
| 349 | if (IS_ERR(fb->clk)) { | 366 | if (IS_ERR(fb->clk)) { |
| 350 | ret = PTR_ERR(fb->clk); | 367 | ret = PTR_ERR(fb->clk); |
| @@ -416,7 +433,7 @@ static int clcdfb_register(struct clcd_fb *fb) | |||
| 416 | /* | 433 | /* |
| 417 | * Ensure interrupts are disabled. | 434 | * Ensure interrupts are disabled. |
| 418 | */ | 435 | */ |
| 419 | writel(0, fb->regs + CLCD_IENB); | 436 | writel(0, fb->regs + fb->off_ienb); |
| 420 | 437 | ||
| 421 | fb_set_var(&fb->fb, &fb->fb.var); | 438 | fb_set_var(&fb->fb, &fb->fb.var); |
| 422 | 439 | ||
diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h index 29c0448265cf..ca16c3801a1e 100644 --- a/include/linux/amba/clcd.h +++ b/include/linux/amba/clcd.h | |||
| @@ -21,22 +21,21 @@ | |||
| 21 | #define CLCD_UBAS 0x00000010 | 21 | #define CLCD_UBAS 0x00000010 |
| 22 | #define CLCD_LBAS 0x00000014 | 22 | #define CLCD_LBAS 0x00000014 |
| 23 | 23 | ||
| 24 | #if !defined(CONFIG_ARCH_VERSATILE) && !defined(CONFIG_ARCH_REALVIEW) | 24 | #define CLCD_PL110_IENB 0x00000018 |
| 25 | #define CLCD_IENB 0x00000018 | 25 | #define CLCD_PL110_CNTL 0x0000001c |
| 26 | #define CLCD_CNTL 0x0000001c | 26 | #define CLCD_PL110_STAT 0x00000020 |
| 27 | #else | 27 | #define CLCD_PL110_INTR 0x00000024 |
| 28 | /* | 28 | #define CLCD_PL110_UCUR 0x00000028 |
| 29 | * Someone rearranged these two registers on the Versatile | 29 | #define CLCD_PL110_LCUR 0x0000002C |
| 30 | * platform... | 30 | |
| 31 | */ | 31 | #define CLCD_PL111_CNTL 0x00000018 |
| 32 | #define CLCD_IENB 0x0000001c | 32 | #define CLCD_PL111_IENB 0x0000001c |
| 33 | #define CLCD_CNTL 0x00000018 | 33 | #define CLCD_PL111_RIS 0x00000020 |
| 34 | #endif | 34 | #define CLCD_PL111_MIS 0x00000024 |
| 35 | 35 | #define CLCD_PL111_ICR 0x00000028 | |
| 36 | #define CLCD_STAT 0x00000020 | 36 | #define CLCD_PL111_UCUR 0x0000002c |
| 37 | #define CLCD_INTR 0x00000024 | 37 | #define CLCD_PL111_LCUR 0x00000030 |
| 38 | #define CLCD_UCUR 0x00000028 | 38 | |
| 39 | #define CLCD_LCUR 0x0000002C | ||
| 40 | #define CLCD_PALL 0x00000200 | 39 | #define CLCD_PALL 0x00000200 |
| 41 | #define CLCD_PALETTE 0x00000200 | 40 | #define CLCD_PALETTE 0x00000200 |
| 42 | 41 | ||
| @@ -147,6 +146,8 @@ struct clcd_fb { | |||
| 147 | struct clcd_board *board; | 146 | struct clcd_board *board; |
| 148 | void *board_data; | 147 | void *board_data; |
| 149 | void __iomem *regs; | 148 | void __iomem *regs; |
| 149 | u16 off_ienb; | ||
| 150 | u16 off_cntl; | ||
| 150 | u32 clcd_cntl; | 151 | u32 clcd_cntl; |
| 151 | u32 cmap[16]; | 152 | u32 cmap[16]; |
| 152 | }; | 153 | }; |
