diff options
281 files changed, 13865 insertions, 4716 deletions
diff --git a/Documentation/bcache.txt b/Documentation/bcache.txt index 77db8809bd96..b3a7e7d384f6 100644 --- a/Documentation/bcache.txt +++ b/Documentation/bcache.txt | |||
@@ -319,7 +319,10 @@ cache<0..n> | |||
319 | Symlink to each of the cache devices comprising this cache set. | 319 | Symlink to each of the cache devices comprising this cache set. |
320 | 320 | ||
321 | cache_available_percent | 321 | cache_available_percent |
322 | Percentage of cache device free. | 322 | Percentage of cache device which doesn't contain dirty data, and could |
323 | potentially be used for writeback. This doesn't mean this space isn't used | ||
324 | for clean cached data; the unused statistic (in priority_stats) is typically | ||
325 | much lower. | ||
323 | 326 | ||
324 | clear_stats | 327 | clear_stats |
325 | Clears the statistics associated with this cache | 328 | Clears the statistics associated with this cache |
@@ -423,8 +426,11 @@ nbuckets | |||
423 | Total buckets in this cache | 426 | Total buckets in this cache |
424 | 427 | ||
425 | priority_stats | 428 | priority_stats |
426 | Statistics about how recently data in the cache has been accessed. This can | 429 | Statistics about how recently data in the cache has been accessed. |
427 | reveal your working set size. | 430 | This can reveal your working set size. Unused is the percentage of |
431 | the cache that doesn't contain any data. Metadata is bcache's | ||
432 | metadata overhead. Average is the average priority of cache buckets. | ||
433 | Next is a list of quantiles with the priority threshold of each. | ||
428 | 434 | ||
429 | written | 435 | written |
430 | Sum of all data that has been written to the cache; comparison with | 436 | Sum of all data that has been written to the cache; comparison with |
diff --git a/Documentation/devices.txt b/Documentation/devices.txt index 08f01e79c41a..b9015912bca6 100644 --- a/Documentation/devices.txt +++ b/Documentation/devices.txt | |||
@@ -498,12 +498,8 @@ Your cooperation is appreciated. | |||
498 | 498 | ||
499 | Each device type has 5 bits (32 minors). | 499 | Each device type has 5 bits (32 minors). |
500 | 500 | ||
501 | 13 block 8-bit MFM/RLL/IDE controller | 501 | 13 block Previously used for the XT disk (/dev/xdN) |
502 | 0 = /dev/xda First XT disk whole disk | 502 | Deleted in kernel v3.9. |
503 | 64 = /dev/xdb Second XT disk whole disk | ||
504 | |||
505 | Partitions are handled in the same way as IDE disks | ||
506 | (see major number 3). | ||
507 | 503 | ||
508 | 14 char Open Sound System (OSS) | 504 | 14 char Open Sound System (OSS) |
509 | 0 = /dev/mixer Mixer control | 505 | 0 = /dev/mixer Mixer control |
diff --git a/Documentation/devicetree/bindings/rtc/atmel,at91rm9200-rtc.txt b/Documentation/devicetree/bindings/rtc/atmel,at91rm9200-rtc.txt index 2a3feabd3b22..34c1505774bf 100644 --- a/Documentation/devicetree/bindings/rtc/atmel,at91rm9200-rtc.txt +++ b/Documentation/devicetree/bindings/rtc/atmel,at91rm9200-rtc.txt | |||
@@ -1,7 +1,7 @@ | |||
1 | Atmel AT91RM9200 Real Time Clock | 1 | Atmel AT91RM9200 Real Time Clock |
2 | 2 | ||
3 | Required properties: | 3 | Required properties: |
4 | - compatible: should be: "atmel,at91rm9200-rtc" | 4 | - compatible: should be: "atmel,at91rm9200-rtc" or "atmel,at91sam9x5-rtc" |
5 | - reg: physical base address of the controller and length of memory mapped | 5 | - reg: physical base address of the controller and length of memory mapped |
6 | region. | 6 | region. |
7 | - interrupts: rtc alarm/event interrupt | 7 | - interrupts: rtc alarm/event interrupt |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 6e3b18a8afc6..2fe6e767b3d6 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -3351,9 +3351,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
3351 | plus one apbt timer for broadcast timer. | 3351 | plus one apbt timer for broadcast timer. |
3352 | x86_mrst_timer=apbt_only | lapic_and_apbt | 3352 | x86_mrst_timer=apbt_only | lapic_and_apbt |
3353 | 3353 | ||
3354 | xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. | ||
3355 | xd_geo= See header of drivers/block/xd.c. | ||
3356 | |||
3357 | xen_emul_unplug= [HW,X86,XEN] | 3354 | xen_emul_unplug= [HW,X86,XEN] |
3358 | Unplug Xen emulated devices | 3355 | Unplug Xen emulated devices |
3359 | Format: [unplug0,][unplug1] | 3356 | Format: [unplug0,][unplug1] |
diff --git a/Documentation/m68k/kernel-options.txt b/Documentation/m68k/kernel-options.txt index 97d45f276fe6..eaf32a1fd0b1 100644 --- a/Documentation/m68k/kernel-options.txt +++ b/Documentation/m68k/kernel-options.txt | |||
@@ -80,8 +80,6 @@ Valid names are: | |||
80 | /dev/sdd: -> 0x0830 (forth SCSI disk) | 80 | /dev/sdd: -> 0x0830 (forth SCSI disk) |
81 | /dev/sde: -> 0x0840 (fifth SCSI disk) | 81 | /dev/sde: -> 0x0840 (fifth SCSI disk) |
82 | /dev/fd : -> 0x0200 (floppy disk) | 82 | /dev/fd : -> 0x0200 (floppy disk) |
83 | /dev/xda: -> 0x0c00 (first XT disk, unused in Linux/m68k) | ||
84 | /dev/xdb: -> 0x0c40 (second XT disk, unused in Linux/m68k) | ||
85 | 83 | ||
86 | The name must be followed by a decimal number, that stands for the | 84 | The name must be followed by a decimal number, that stands for the |
87 | partition number. Internally, the value of the number is just | 85 | partition number. Internally, the value of the number is just |
diff --git a/MAINTAINERS b/MAINTAINERS index 250dc970c62d..5be702cc8449 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -5766,7 +5766,7 @@ M: Matthew Wilcox <willy@linux.intel.com> | |||
5766 | L: linux-nvme@lists.infradead.org | 5766 | L: linux-nvme@lists.infradead.org |
5767 | T: git git://git.infradead.org/users/willy/linux-nvme.git | 5767 | T: git git://git.infradead.org/users/willy/linux-nvme.git |
5768 | S: Supported | 5768 | S: Supported |
5769 | F: drivers/block/nvme.c | 5769 | F: drivers/block/nvme* |
5770 | F: include/linux/nvme.h | 5770 | F: include/linux/nvme.h |
5771 | 5771 | ||
5772 | OMAP SUPPORT | 5772 | OMAP SUPPORT |
@@ -7624,7 +7624,7 @@ F: drivers/clk/spear/ | |||
7624 | SPI SUBSYSTEM | 7624 | SPI SUBSYSTEM |
7625 | M: Mark Brown <broonie@kernel.org> | 7625 | M: Mark Brown <broonie@kernel.org> |
7626 | M: Grant Likely <grant.likely@linaro.org> | 7626 | M: Grant Likely <grant.likely@linaro.org> |
7627 | L: spi-devel-general@lists.sourceforge.net | 7627 | L: linux-spi@vger.kernel.org |
7628 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git | 7628 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git |
7629 | Q: http://patchwork.kernel.org/project/spi-devel-general/list/ | 7629 | Q: http://patchwork.kernel.org/project/spi-devel-general/list/ |
7630 | S: Maintained | 7630 | S: Maintained |
@@ -9004,7 +9004,7 @@ S: Maintained | |||
9004 | F: drivers/net/wireless/wl3501* | 9004 | F: drivers/net/wireless/wl3501* |
9005 | 9005 | ||
9006 | WM97XX TOUCHSCREEN DRIVERS | 9006 | WM97XX TOUCHSCREEN DRIVERS |
9007 | M: Mark Brown <broonie@opensource.wolfsonmicro.com> | 9007 | M: Mark Brown <broonie@kernel.org> |
9008 | M: Liam Girdwood <lrg@slimlogic.co.uk> | 9008 | M: Liam Girdwood <lrg@slimlogic.co.uk> |
9009 | L: linux-input@vger.kernel.org | 9009 | L: linux-input@vger.kernel.org |
9010 | T: git git://opensource.wolfsonmicro.com/linux-2.6-touch | 9010 | T: git git://opensource.wolfsonmicro.com/linux-2.6-touch |
@@ -9014,7 +9014,6 @@ F: drivers/input/touchscreen/*wm97* | |||
9014 | F: include/linux/wm97xx.h | 9014 | F: include/linux/wm97xx.h |
9015 | 9015 | ||
9016 | WOLFSON MICROELECTRONICS DRIVERS | 9016 | WOLFSON MICROELECTRONICS DRIVERS |
9017 | M: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
9018 | L: patches@opensource.wolfsonmicro.com | 9017 | L: patches@opensource.wolfsonmicro.com |
9019 | T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc | 9018 | T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc |
9020 | T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus | 9019 | T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus |
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 3 | 1 | VERSION = 3 |
2 | PATCHLEVEL = 10 | 2 | PATCHLEVEL = 10 |
3 | SUBLEVEL = 0 | 3 | SUBLEVEL = 0 |
4 | EXTRAVERSION = -rc5 | 4 | EXTRAVERSION = -rc6 |
5 | NAME = Unicycling Gorilla | 5 | NAME = Unicycling Gorilla |
6 | 6 | ||
7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 49d993cee512..dfb4fee1f552 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -645,7 +645,7 @@ config ARCH_SHMOBILE | |||
645 | select MULTI_IRQ_HANDLER | 645 | select MULTI_IRQ_HANDLER |
646 | select NEED_MACH_MEMORY_H | 646 | select NEED_MACH_MEMORY_H |
647 | select NO_IOPORT | 647 | select NO_IOPORT |
648 | select PINCTRL if ARCH_WANT_OPTIONAL_GPIOLIB | 648 | select PINCTRL |
649 | select PM_GENERIC_DOMAINS if PM | 649 | select PM_GENERIC_DOMAINS if PM |
650 | select SPARSE_IRQ | 650 | select SPARSE_IRQ |
651 | help | 651 | help |
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 3580d57ea218..79e9bdbfc491 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile | |||
@@ -124,7 +124,7 @@ KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS)) | |||
124 | endif | 124 | endif |
125 | 125 | ||
126 | ccflags-y := -fpic -mno-single-pic-base -fno-builtin -I$(obj) | 126 | ccflags-y := -fpic -mno-single-pic-base -fno-builtin -I$(obj) |
127 | asflags-y := -Wa,-march=all -DZIMAGE | 127 | asflags-y := -DZIMAGE |
128 | 128 | ||
129 | # Supply kernel BSS size to the decompressor via a linker symbol. | 129 | # Supply kernel BSS size to the decompressor via a linker symbol. |
130 | KBSS_SZ = $(shell $(CROSS_COMPILE)size $(obj)/../../../../vmlinux | \ | 130 | KBSS_SZ = $(shell $(CROSS_COMPILE)size $(obj)/../../../../vmlinux | \ |
diff --git a/arch/arm/boot/compressed/debug.S b/arch/arm/boot/compressed/debug.S index 6e8382d5b7a4..5392ee63338f 100644 --- a/arch/arm/boot/compressed/debug.S +++ b/arch/arm/boot/compressed/debug.S | |||
@@ -1,6 +1,8 @@ | |||
1 | #include <linux/linkage.h> | 1 | #include <linux/linkage.h> |
2 | #include <asm/assembler.h> | 2 | #include <asm/assembler.h> |
3 | 3 | ||
4 | #ifndef CONFIG_DEBUG_SEMIHOSTING | ||
5 | |||
4 | #include CONFIG_DEBUG_LL_INCLUDE | 6 | #include CONFIG_DEBUG_LL_INCLUDE |
5 | 7 | ||
6 | ENTRY(putc) | 8 | ENTRY(putc) |
@@ -10,3 +12,29 @@ ENTRY(putc) | |||
10 | busyuart r3, r1 | 12 | busyuart r3, r1 |
11 | mov pc, lr | 13 | mov pc, lr |
12 | ENDPROC(putc) | 14 | ENDPROC(putc) |
15 | |||
16 | #else | ||
17 | |||
18 | ENTRY(putc) | ||
19 | adr r1, 1f | ||
20 | ldmia r1, {r2, r3} | ||
21 | add r2, r2, r1 | ||
22 | ldr r1, [r2, r3] | ||
23 | strb r0, [r1] | ||
24 | mov r0, #0x03 @ SYS_WRITEC | ||
25 | ARM( svc #0x123456 ) | ||
26 | THUMB( svc #0xab ) | ||
27 | mov pc, lr | ||
28 | .align 2 | ||
29 | 1: .word _GLOBAL_OFFSET_TABLE_ - . | ||
30 | .word semi_writec_buf(GOT) | ||
31 | ENDPROC(putc) | ||
32 | |||
33 | .bss | ||
34 | .global semi_writec_buf | ||
35 | .type semi_writec_buf, %object | ||
36 | semi_writec_buf: | ||
37 | .space 4 | ||
38 | .size semi_writec_buf, 4 | ||
39 | |||
40 | #endif | ||
diff --git a/arch/arm/boot/compressed/head-sa1100.S b/arch/arm/boot/compressed/head-sa1100.S index 6179d94dd5c6..3115e313d9f6 100644 --- a/arch/arm/boot/compressed/head-sa1100.S +++ b/arch/arm/boot/compressed/head-sa1100.S | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <asm/mach-types.h> | 11 | #include <asm/mach-types.h> |
12 | 12 | ||
13 | .section ".start", "ax" | 13 | .section ".start", "ax" |
14 | .arch armv4 | ||
14 | 15 | ||
15 | __SA1100_start: | 16 | __SA1100_start: |
16 | 17 | ||
diff --git a/arch/arm/boot/compressed/head-shark.S b/arch/arm/boot/compressed/head-shark.S index 089c560e07f1..92b56897ed64 100644 --- a/arch/arm/boot/compressed/head-shark.S +++ b/arch/arm/boot/compressed/head-shark.S | |||
@@ -18,6 +18,7 @@ | |||
18 | 18 | ||
19 | .section ".start", "ax" | 19 | .section ".start", "ax" |
20 | 20 | ||
21 | .arch armv4 | ||
21 | b __beginning | 22 | b __beginning |
22 | 23 | ||
23 | __ofw_data: .long 0 @ the number of memory blocks | 24 | __ofw_data: .long 0 @ the number of memory blocks |
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index fe4d9c3ad761..032a8d987148 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/linkage.h> | 11 | #include <linux/linkage.h> |
12 | #include <asm/assembler.h> | 12 | #include <asm/assembler.h> |
13 | 13 | ||
14 | .arch armv7-a | ||
14 | /* | 15 | /* |
15 | * Debugging stuff | 16 | * Debugging stuff |
16 | * | 17 | * |
@@ -805,8 +806,8 @@ call_cache_fn: adr r12, proc_types | |||
805 | .align 2 | 806 | .align 2 |
806 | .type proc_types,#object | 807 | .type proc_types,#object |
807 | proc_types: | 808 | proc_types: |
808 | .word 0x00000000 @ old ARM ID | 809 | .word 0x41000000 @ old ARM ID |
809 | .word 0x0000f000 | 810 | .word 0xff00f000 |
810 | mov pc, lr | 811 | mov pc, lr |
811 | THUMB( nop ) | 812 | THUMB( nop ) |
812 | mov pc, lr | 813 | mov pc, lr |
diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi index 1460d9b88adf..8e1248f01fab 100644 --- a/arch/arm/boot/dts/am33xx.dtsi +++ b/arch/arm/boot/dts/am33xx.dtsi | |||
@@ -409,8 +409,8 @@ | |||
409 | ti,hwmods = "gpmc"; | 409 | ti,hwmods = "gpmc"; |
410 | reg = <0x50000000 0x2000>; | 410 | reg = <0x50000000 0x2000>; |
411 | interrupts = <100>; | 411 | interrupts = <100>; |
412 | num-cs = <7>; | 412 | gpmc,num-cs = <7>; |
413 | num-waitpins = <2>; | 413 | gpmc,num-waitpins = <2>; |
414 | #address-cells = <2>; | 414 | #address-cells = <2>; |
415 | #size-cells = <1>; | 415 | #size-cells = <1>; |
416 | status = "disabled"; | 416 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/armada-xp-gp.dts b/arch/arm/boot/dts/armada-xp-gp.dts index 3ee63d128e27..76db557adbe7 100644 --- a/arch/arm/boot/dts/armada-xp-gp.dts +++ b/arch/arm/boot/dts/armada-xp-gp.dts | |||
@@ -39,8 +39,9 @@ | |||
39 | }; | 39 | }; |
40 | 40 | ||
41 | soc { | 41 | soc { |
42 | ranges = <0 0 0xd0000000 0x100000 | 42 | ranges = <0 0 0xd0000000 0x100000 /* Internal registers 1MiB */ |
43 | 0xf0000000 0 0xf0000000 0x1000000>; | 43 | 0xe0000000 0 0xe0000000 0x8100000 /* PCIe */ |
44 | 0xf0000000 0 0xf0000000 0x1000000 /* Device Bus, NOR 16MiB */>; | ||
44 | 45 | ||
45 | internal-regs { | 46 | internal-regs { |
46 | serial@12000 { | 47 | serial@12000 { |
diff --git a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts index 46b785064dd8..fdea75c73411 100644 --- a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts +++ b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts | |||
@@ -27,8 +27,9 @@ | |||
27 | }; | 27 | }; |
28 | 28 | ||
29 | soc { | 29 | soc { |
30 | ranges = <0 0 0xd0000000 0x100000 | 30 | ranges = <0 0 0xd0000000 0x100000 /* Internal registers 1MiB */ |
31 | 0xf0000000 0 0xf0000000 0x8000000>; | 31 | 0xe0000000 0 0xe0000000 0x8100000 /* PCIe */ |
32 | 0xf0000000 0 0xf0000000 0x8000000 /* Device Bus, NOR 128MiB */>; | ||
32 | 33 | ||
33 | internal-regs { | 34 | internal-regs { |
34 | serial@12000 { | 35 | serial@12000 { |
diff --git a/arch/arm/boot/dts/omap4-panda-common.dtsi b/arch/arm/boot/dts/omap4-panda-common.dtsi index 03bd60deb52b..eeb734e25709 100644 --- a/arch/arm/boot/dts/omap4-panda-common.dtsi +++ b/arch/arm/boot/dts/omap4-panda-common.dtsi | |||
@@ -56,9 +56,23 @@ | |||
56 | }; | 56 | }; |
57 | }; | 57 | }; |
58 | 58 | ||
59 | &omap4_pmx_wkup { | ||
60 | pinctrl-names = "default"; | ||
61 | pinctrl-0 = < | ||
62 | &twl6030_wkup_pins | ||
63 | >; | ||
64 | |||
65 | twl6030_wkup_pins: pinmux_twl6030_wkup_pins { | ||
66 | pinctrl-single,pins = < | ||
67 | 0x14 0x2 /* fref_clk0_out.sys_drm_msecure OUTPUT | MODE2 */ | ||
68 | >; | ||
69 | }; | ||
70 | }; | ||
71 | |||
59 | &omap4_pmx_core { | 72 | &omap4_pmx_core { |
60 | pinctrl-names = "default"; | 73 | pinctrl-names = "default"; |
61 | pinctrl-0 = < | 74 | pinctrl-0 = < |
75 | &twl6030_pins | ||
62 | &twl6040_pins | 76 | &twl6040_pins |
63 | &mcpdm_pins | 77 | &mcpdm_pins |
64 | &mcbsp1_pins | 78 | &mcbsp1_pins |
@@ -66,6 +80,12 @@ | |||
66 | &tpd12s015_pins | 80 | &tpd12s015_pins |
67 | >; | 81 | >; |
68 | 82 | ||
83 | twl6030_pins: pinmux_twl6030_pins { | ||
84 | pinctrl-single,pins = < | ||
85 | 0x15e 0x4118 /* sys_nirq1.sys_nirq1 OMAP_WAKEUP_EN | INPUT_PULLUP | MODE0 */ | ||
86 | >; | ||
87 | }; | ||
88 | |||
69 | twl6040_pins: pinmux_twl6040_pins { | 89 | twl6040_pins: pinmux_twl6040_pins { |
70 | pinctrl-single,pins = < | 90 | pinctrl-single,pins = < |
71 | 0xe0 0x3 /* hdq_sio.gpio_127 OUTPUT | MODE3 */ | 91 | 0xe0 0x3 /* hdq_sio.gpio_127 OUTPUT | MODE3 */ |
diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts index a35d9cd58063..98505a2ef162 100644 --- a/arch/arm/boot/dts/omap4-sdp.dts +++ b/arch/arm/boot/dts/omap4-sdp.dts | |||
@@ -142,9 +142,23 @@ | |||
142 | }; | 142 | }; |
143 | }; | 143 | }; |
144 | 144 | ||
145 | &omap4_pmx_wkup { | ||
146 | pinctrl-names = "default"; | ||
147 | pinctrl-0 = < | ||
148 | &twl6030_wkup_pins | ||
149 | >; | ||
150 | |||
151 | twl6030_wkup_pins: pinmux_twl6030_wkup_pins { | ||
152 | pinctrl-single,pins = < | ||
153 | 0x14 0x2 /* fref_clk0_out.sys_drm_msecure OUTPUT | MODE2 */ | ||
154 | >; | ||
155 | }; | ||
156 | }; | ||
157 | |||
145 | &omap4_pmx_core { | 158 | &omap4_pmx_core { |
146 | pinctrl-names = "default"; | 159 | pinctrl-names = "default"; |
147 | pinctrl-0 = < | 160 | pinctrl-0 = < |
161 | &twl6030_pins | ||
148 | &twl6040_pins | 162 | &twl6040_pins |
149 | &mcpdm_pins | 163 | &mcpdm_pins |
150 | &dmic_pins | 164 | &dmic_pins |
@@ -179,6 +193,12 @@ | |||
179 | >; | 193 | >; |
180 | }; | 194 | }; |
181 | 195 | ||
196 | twl6030_pins: pinmux_twl6030_pins { | ||
197 | pinctrl-single,pins = < | ||
198 | 0x15e 0x4118 /* sys_nirq1.sys_nirq1 OMAP_WAKEUP_EN | INPUT_PULLUP | MODE0 */ | ||
199 | >; | ||
200 | }; | ||
201 | |||
182 | twl6040_pins: pinmux_twl6040_pins { | 202 | twl6040_pins: pinmux_twl6040_pins { |
183 | pinctrl-single,pins = < | 203 | pinctrl-single,pins = < |
184 | 0xe0 0x3 /* hdq_sio.gpio_127 OUTPUT | MODE3 */ | 204 | 0xe0 0x3 /* hdq_sio.gpio_127 OUTPUT | MODE3 */ |
diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi index 3dd7ff825828..635cae283011 100644 --- a/arch/arm/boot/dts/omap5.dtsi +++ b/arch/arm/boot/dts/omap5.dtsi | |||
@@ -538,6 +538,7 @@ | |||
538 | interrupts = <0 41 0x4>; | 538 | interrupts = <0 41 0x4>; |
539 | ti,hwmods = "timer5"; | 539 | ti,hwmods = "timer5"; |
540 | ti,timer-dsp; | 540 | ti,timer-dsp; |
541 | ti,timer-pwm; | ||
541 | }; | 542 | }; |
542 | 543 | ||
543 | timer6: timer@4013a000 { | 544 | timer6: timer@4013a000 { |
@@ -574,6 +575,7 @@ | |||
574 | reg = <0x4803e000 0x80>; | 575 | reg = <0x4803e000 0x80>; |
575 | interrupts = <0 45 0x4>; | 576 | interrupts = <0 45 0x4>; |
576 | ti,hwmods = "timer9"; | 577 | ti,hwmods = "timer9"; |
578 | ti,timer-pwm; | ||
577 | }; | 579 | }; |
578 | 580 | ||
579 | timer10: timer@48086000 { | 581 | timer10: timer@48086000 { |
@@ -581,6 +583,7 @@ | |||
581 | reg = <0x48086000 0x80>; | 583 | reg = <0x48086000 0x80>; |
582 | interrupts = <0 46 0x4>; | 584 | interrupts = <0 46 0x4>; |
583 | ti,hwmods = "timer10"; | 585 | ti,hwmods = "timer10"; |
586 | ti,timer-pwm; | ||
584 | }; | 587 | }; |
585 | 588 | ||
586 | timer11: timer@48088000 { | 589 | timer11: timer@48088000 { |
diff --git a/arch/arm/include/asm/percpu.h b/arch/arm/include/asm/percpu.h index 968c0a14e0a3..209e6504922e 100644 --- a/arch/arm/include/asm/percpu.h +++ b/arch/arm/include/asm/percpu.h | |||
@@ -30,8 +30,15 @@ static inline void set_my_cpu_offset(unsigned long off) | |||
30 | static inline unsigned long __my_cpu_offset(void) | 30 | static inline unsigned long __my_cpu_offset(void) |
31 | { | 31 | { |
32 | unsigned long off; | 32 | unsigned long off; |
33 | /* Read TPIDRPRW */ | 33 | register unsigned long *sp asm ("sp"); |
34 | asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off) : : "memory"); | 34 | |
35 | /* | ||
36 | * Read TPIDRPRW. | ||
37 | * We want to allow caching the value, so avoid using volatile and | ||
38 | * instead use a fake stack read to hazard against barrier(). | ||
39 | */ | ||
40 | asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off) : "Q" (*sp)); | ||
41 | |||
35 | return off; | 42 | return off; |
36 | } | 43 | } |
37 | #define __my_cpu_offset __my_cpu_offset() | 44 | #define __my_cpu_offset __my_cpu_offset() |
diff --git a/arch/arm/kernel/topology.c b/arch/arm/kernel/topology.c index f10316b4ecdc..c5a59546a256 100644 --- a/arch/arm/kernel/topology.c +++ b/arch/arm/kernel/topology.c | |||
@@ -13,6 +13,7 @@ | |||
13 | 13 | ||
14 | #include <linux/cpu.h> | 14 | #include <linux/cpu.h> |
15 | #include <linux/cpumask.h> | 15 | #include <linux/cpumask.h> |
16 | #include <linux/export.h> | ||
16 | #include <linux/init.h> | 17 | #include <linux/init.h> |
17 | #include <linux/percpu.h> | 18 | #include <linux/percpu.h> |
18 | #include <linux/node.h> | 19 | #include <linux/node.h> |
@@ -200,6 +201,7 @@ static inline void update_cpu_power(unsigned int cpuid, unsigned int mpidr) {} | |||
200 | * cpu topology table | 201 | * cpu topology table |
201 | */ | 202 | */ |
202 | struct cputopo_arm cpu_topology[NR_CPUS]; | 203 | struct cputopo_arm cpu_topology[NR_CPUS]; |
204 | EXPORT_SYMBOL_GPL(cpu_topology); | ||
203 | 205 | ||
204 | const struct cpumask *cpu_coregroup_mask(int cpu) | 206 | const struct cpumask *cpu_coregroup_mask(int cpu) |
205 | { | 207 | { |
diff --git a/arch/arm/mach-kirkwood/mpp.c b/arch/arm/mach-kirkwood/mpp.c index 827cde42414f..e96fd71abd76 100644 --- a/arch/arm/mach-kirkwood/mpp.c +++ b/arch/arm/mach-kirkwood/mpp.c | |||
@@ -22,9 +22,10 @@ static unsigned int __init kirkwood_variant(void) | |||
22 | 22 | ||
23 | kirkwood_pcie_id(&dev, &rev); | 23 | kirkwood_pcie_id(&dev, &rev); |
24 | 24 | ||
25 | if ((dev == MV88F6281_DEV_ID && rev >= MV88F6281_REV_A0) || | 25 | if (dev == MV88F6281_DEV_ID && rev >= MV88F6281_REV_A0) |
26 | (dev == MV88F6282_DEV_ID)) | ||
27 | return MPP_F6281_MASK; | 26 | return MPP_F6281_MASK; |
27 | if (dev == MV88F6282_DEV_ID) | ||
28 | return MPP_F6282_MASK; | ||
28 | if (dev == MV88F6192_DEV_ID && rev >= MV88F6192_REV_A0) | 29 | if (dev == MV88F6192_DEV_ID && rev >= MV88F6192_REV_A0) |
29 | return MPP_F6192_MASK; | 30 | return MPP_F6192_MASK; |
30 | if (dev == MV88F6180_DEV_ID) | 31 | if (dev == MV88F6180_DEV_ID) |
diff --git a/arch/arm/mach-omap2/clock36xx.c b/arch/arm/mach-omap2/clock36xx.c index 8f3bf4e50908..bbd6a3f717e6 100644 --- a/arch/arm/mach-omap2/clock36xx.c +++ b/arch/arm/mach-omap2/clock36xx.c | |||
@@ -20,11 +20,12 @@ | |||
20 | 20 | ||
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
23 | #include <linux/clk-provider.h> | ||
23 | #include <linux/io.h> | 24 | #include <linux/io.h> |
24 | 25 | ||
25 | #include "clock.h" | 26 | #include "clock.h" |
26 | #include "clock36xx.h" | 27 | #include "clock36xx.h" |
27 | 28 | #define to_clk_divider(_hw) container_of(_hw, struct clk_divider, hw) | |
28 | 29 | ||
29 | /** | 30 | /** |
30 | * omap36xx_pwrdn_clk_enable_with_hsdiv_restore - enable clocks suffering | 31 | * omap36xx_pwrdn_clk_enable_with_hsdiv_restore - enable clocks suffering |
@@ -39,29 +40,28 @@ | |||
39 | */ | 40 | */ |
40 | int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk) | 41 | int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk) |
41 | { | 42 | { |
42 | struct clk_hw_omap *parent; | 43 | struct clk_divider *parent; |
43 | struct clk_hw *parent_hw; | 44 | struct clk_hw *parent_hw; |
44 | u32 dummy_v, orig_v, clksel_shift; | 45 | u32 dummy_v, orig_v; |
45 | int ret; | 46 | int ret; |
46 | 47 | ||
47 | /* Clear PWRDN bit of HSDIVIDER */ | 48 | /* Clear PWRDN bit of HSDIVIDER */ |
48 | ret = omap2_dflt_clk_enable(clk); | 49 | ret = omap2_dflt_clk_enable(clk); |
49 | 50 | ||
50 | parent_hw = __clk_get_hw(__clk_get_parent(clk->clk)); | 51 | parent_hw = __clk_get_hw(__clk_get_parent(clk->clk)); |
51 | parent = to_clk_hw_omap(parent_hw); | 52 | parent = to_clk_divider(parent_hw); |
52 | 53 | ||
53 | /* Restore the dividers */ | 54 | /* Restore the dividers */ |
54 | if (!ret) { | 55 | if (!ret) { |
55 | clksel_shift = __ffs(parent->clksel_mask); | 56 | orig_v = __raw_readl(parent->reg); |
56 | orig_v = __raw_readl(parent->clksel_reg); | ||
57 | dummy_v = orig_v; | 57 | dummy_v = orig_v; |
58 | 58 | ||
59 | /* Write any other value different from the Read value */ | 59 | /* Write any other value different from the Read value */ |
60 | dummy_v ^= (1 << clksel_shift); | 60 | dummy_v ^= (1 << parent->shift); |
61 | __raw_writel(dummy_v, parent->clksel_reg); | 61 | __raw_writel(dummy_v, parent->reg); |
62 | 62 | ||
63 | /* Write the original divider */ | 63 | /* Write the original divider */ |
64 | __raw_writel(orig_v, parent->clksel_reg); | 64 | __raw_writel(orig_v, parent->reg); |
65 | } | 65 | } |
66 | 66 | ||
67 | return ret; | 67 | return ret; |
diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c index 075f7cc51026..69337af748cc 100644 --- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c | |||
@@ -2007,6 +2007,13 @@ static struct omap_hwmod am33xx_uart1_hwmod = { | |||
2007 | }, | 2007 | }, |
2008 | }; | 2008 | }; |
2009 | 2009 | ||
2010 | /* uart2 */ | ||
2011 | static struct omap_hwmod_dma_info uart2_edma_reqs[] = { | ||
2012 | { .name = "tx", .dma_req = 28, }, | ||
2013 | { .name = "rx", .dma_req = 29, }, | ||
2014 | { .dma_req = -1 } | ||
2015 | }; | ||
2016 | |||
2010 | static struct omap_hwmod_irq_info am33xx_uart2_irqs[] = { | 2017 | static struct omap_hwmod_irq_info am33xx_uart2_irqs[] = { |
2011 | { .irq = 73 + OMAP_INTC_START, }, | 2018 | { .irq = 73 + OMAP_INTC_START, }, |
2012 | { .irq = -1 }, | 2019 | { .irq = -1 }, |
@@ -2018,7 +2025,7 @@ static struct omap_hwmod am33xx_uart2_hwmod = { | |||
2018 | .clkdm_name = "l4ls_clkdm", | 2025 | .clkdm_name = "l4ls_clkdm", |
2019 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 2026 | .flags = HWMOD_SWSUP_SIDLE_ACT, |
2020 | .mpu_irqs = am33xx_uart2_irqs, | 2027 | .mpu_irqs = am33xx_uart2_irqs, |
2021 | .sdma_reqs = uart1_edma_reqs, | 2028 | .sdma_reqs = uart2_edma_reqs, |
2022 | .main_clk = "dpll_per_m2_div4_ck", | 2029 | .main_clk = "dpll_per_m2_div4_ck", |
2023 | .prcm = { | 2030 | .prcm = { |
2024 | .omap4 = { | 2031 | .omap4 = { |
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index c01859398b54..5a2d8034c8de 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -546,8 +546,10 @@ static void __init prcm_setup_regs(void) | |||
546 | /* Clear any pending PRCM interrupts */ | 546 | /* Clear any pending PRCM interrupts */ |
547 | omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); | 547 | omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); |
548 | 548 | ||
549 | if (omap3_has_iva()) | 549 | /* |
550 | omap3_iva_idle(); | 550 | * We need to idle iva2_pwrdm even on am3703 with no iva2. |
551 | */ | ||
552 | omap3_iva_idle(); | ||
551 | 553 | ||
552 | omap3_d2d_idle(); | 554 | omap3_d2d_idle(); |
553 | } | 555 | } |
diff --git a/arch/arm/mach-prima2/pm.c b/arch/arm/mach-prima2/pm.c index 9936c180bf01..8f595c0cc8d9 100644 --- a/arch/arm/mach-prima2/pm.c +++ b/arch/arm/mach-prima2/pm.c | |||
@@ -101,8 +101,10 @@ static int __init sirfsoc_of_pwrc_init(void) | |||
101 | struct device_node *np; | 101 | struct device_node *np; |
102 | 102 | ||
103 | np = of_find_matching_node(NULL, pwrc_ids); | 103 | np = of_find_matching_node(NULL, pwrc_ids); |
104 | if (!np) | 104 | if (!np) { |
105 | panic("unable to find compatible pwrc node in dtb\n"); | 105 | pr_err("unable to find compatible sirf pwrc node in dtb\n"); |
106 | return -ENOENT; | ||
107 | } | ||
106 | 108 | ||
107 | /* | 109 | /* |
108 | * pwrc behind rtciobrg is not located in memory space | 110 | * pwrc behind rtciobrg is not located in memory space |
diff --git a/arch/arm/mach-prima2/rstc.c b/arch/arm/mach-prima2/rstc.c index 435019ca0a48..d5e0cbc934c0 100644 --- a/arch/arm/mach-prima2/rstc.c +++ b/arch/arm/mach-prima2/rstc.c | |||
@@ -28,8 +28,10 @@ static int __init sirfsoc_of_rstc_init(void) | |||
28 | struct device_node *np; | 28 | struct device_node *np; |
29 | 29 | ||
30 | np = of_find_matching_node(NULL, rstc_ids); | 30 | np = of_find_matching_node(NULL, rstc_ids); |
31 | if (!np) | 31 | if (!np) { |
32 | panic("unable to find compatible rstc node in dtb\n"); | 32 | pr_err("unable to find compatible sirf rstc node in dtb\n"); |
33 | return -ENOENT; | ||
34 | } | ||
33 | 35 | ||
34 | sirfsoc_rstc_base = of_iomap(np, 0); | 36 | sirfsoc_rstc_base = of_iomap(np, 0); |
35 | if (!sirfsoc_rstc_base) | 37 | if (!sirfsoc_rstc_base) |
diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig index 1a517e2fe449..5414402938a5 100644 --- a/arch/arm/mach-shmobile/Kconfig +++ b/arch/arm/mach-shmobile/Kconfig | |||
@@ -36,7 +36,8 @@ config ARCH_R8A7740 | |||
36 | select RENESAS_INTC_IRQPIN | 36 | select RENESAS_INTC_IRQPIN |
37 | 37 | ||
38 | config ARCH_R8A7778 | 38 | config ARCH_R8A7778 |
39 | bool "R-Car M1 (R8A77780)" | 39 | bool "R-Car M1A (R8A77781)" |
40 | select ARCH_WANT_OPTIONAL_GPIOLIB | ||
40 | select CPU_V7 | 41 | select CPU_V7 |
41 | select SH_CLK_CPG | 42 | select SH_CLK_CPG |
42 | select ARM_GIC | 43 | select ARM_GIC |
@@ -169,6 +170,8 @@ config MACH_KZM9D | |||
169 | config MACH_KZM9G | 170 | config MACH_KZM9G |
170 | bool "KZM-A9-GT board" | 171 | bool "KZM-A9-GT board" |
171 | depends on ARCH_SH73A0 | 172 | depends on ARCH_SH73A0 |
173 | select ARCH_HAS_CPUFREQ | ||
174 | select ARCH_HAS_OPP | ||
172 | select ARCH_REQUIRE_GPIOLIB | 175 | select ARCH_REQUIRE_GPIOLIB |
173 | select REGULATOR_FIXED_VOLTAGE if REGULATOR | 176 | select REGULATOR_FIXED_VOLTAGE if REGULATOR |
174 | select SND_SOC_AK4642 if SND_SIMPLE_CARD | 177 | select SND_SOC_AK4642 if SND_SIMPLE_CARD |
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index 45f78cadec1d..297bf5eec5ab 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
@@ -1026,10 +1026,8 @@ out: | |||
1026 | 1026 | ||
1027 | /* TouchScreen */ | 1027 | /* TouchScreen */ |
1028 | #ifdef CONFIG_AP4EVB_QHD | 1028 | #ifdef CONFIG_AP4EVB_QHD |
1029 | # define GPIO_TSC_IRQ GPIO_FN_IRQ28_123 | ||
1030 | # define GPIO_TSC_PORT 123 | 1029 | # define GPIO_TSC_PORT 123 |
1031 | #else /* WVGA */ | 1030 | #else /* WVGA */ |
1032 | # define GPIO_TSC_IRQ GPIO_FN_IRQ7_40 | ||
1033 | # define GPIO_TSC_PORT 40 | 1031 | # define GPIO_TSC_PORT 40 |
1034 | #endif | 1032 | #endif |
1035 | 1033 | ||
@@ -1037,22 +1035,12 @@ out: | |||
1037 | #define IRQ7 evt2irq(0x02e0) /* IRQ7A */ | 1035 | #define IRQ7 evt2irq(0x02e0) /* IRQ7A */ |
1038 | static int ts_get_pendown_state(void) | 1036 | static int ts_get_pendown_state(void) |
1039 | { | 1037 | { |
1040 | int val; | 1038 | return !gpio_get_value(GPIO_TSC_PORT); |
1041 | |||
1042 | gpio_free(GPIO_TSC_IRQ); | ||
1043 | |||
1044 | gpio_request_one(GPIO_TSC_PORT, GPIOF_IN, NULL); | ||
1045 | |||
1046 | val = gpio_get_value(GPIO_TSC_PORT); | ||
1047 | |||
1048 | gpio_request(GPIO_TSC_IRQ, NULL); | ||
1049 | |||
1050 | return !val; | ||
1051 | } | 1039 | } |
1052 | 1040 | ||
1053 | static int ts_init(void) | 1041 | static int ts_init(void) |
1054 | { | 1042 | { |
1055 | gpio_request(GPIO_TSC_IRQ, NULL); | 1043 | gpio_request_one(GPIO_TSC_PORT, GPIOF_IN, NULL); |
1056 | 1044 | ||
1057 | return 0; | 1045 | return 0; |
1058 | } | 1046 | } |
@@ -1086,11 +1074,42 @@ static struct i2c_board_info i2c1_devices[] = { | |||
1086 | 1074 | ||
1087 | 1075 | ||
1088 | static const struct pinctrl_map ap4evb_pinctrl_map[] = { | 1076 | static const struct pinctrl_map ap4evb_pinctrl_map[] = { |
1077 | /* CEU */ | ||
1078 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372", | ||
1079 | "ceu_clk_0", "ceu"), | ||
1080 | /* FSIA (AK4643) */ | ||
1081 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372", | ||
1082 | "fsia_sclk_in", "fsia"), | ||
1083 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372", | ||
1084 | "fsia_data_in", "fsia"), | ||
1085 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372", | ||
1086 | "fsia_data_out", "fsia"), | ||
1087 | /* FSIB (HDMI) */ | ||
1088 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-sh7372", | ||
1089 | "fsib_mclk_in", "fsib"), | ||
1090 | /* HDMI */ | ||
1091 | PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-sh7372", | ||
1092 | "hdmi", "hdmi"), | ||
1093 | /* KEYSC */ | ||
1094 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc", "pfc-sh7372", | ||
1095 | "keysc_in04_0", "keysc"), | ||
1096 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc", "pfc-sh7372", | ||
1097 | "keysc_out5", "keysc"), | ||
1098 | #ifndef CONFIG_AP4EVB_QHD | ||
1099 | /* LCDC */ | ||
1100 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372", | ||
1101 | "lcd_data18", "lcd"), | ||
1102 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372", | ||
1103 | "lcd_sync", "lcd"), | ||
1104 | #endif | ||
1089 | /* MMCIF */ | 1105 | /* MMCIF */ |
1090 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372", | 1106 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372", |
1091 | "mmc0_data8_0", "mmc0"), | 1107 | "mmc0_data8_0", "mmc0"), |
1092 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372", | 1108 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372", |
1093 | "mmc0_ctrl_0", "mmc0"), | 1109 | "mmc0_ctrl_0", "mmc0"), |
1110 | /* SCIFA0 */ | ||
1111 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-sh7372", | ||
1112 | "scifa0_data", "scifa0"), | ||
1094 | /* SDHI0 */ | 1113 | /* SDHI0 */ |
1095 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372", | 1114 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372", |
1096 | "sdhi0_data4", "sdhi0"), | 1115 | "sdhi0_data4", "sdhi0"), |
@@ -1105,6 +1124,26 @@ static const struct pinctrl_map ap4evb_pinctrl_map[] = { | |||
1105 | "sdhi1_data4", "sdhi1"), | 1124 | "sdhi1_data4", "sdhi1"), |
1106 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372", | 1125 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372", |
1107 | "sdhi1_ctrl", "sdhi1"), | 1126 | "sdhi1_ctrl", "sdhi1"), |
1127 | /* SMSC911X */ | ||
1128 | PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372", | ||
1129 | "bsc_cs5a", "bsc"), | ||
1130 | PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372", | ||
1131 | "intc_irq6_0", "intc"), | ||
1132 | /* TSC2007 */ | ||
1133 | #ifdef CONFIG_AP4EVB_QHD | ||
1134 | PIN_MAP_MUX_GROUP_DEFAULT("1-0048", "pfc-sh7372", | ||
1135 | "intc_irq28_0", "intc"), | ||
1136 | #else /* WVGA */ | ||
1137 | PIN_MAP_MUX_GROUP_DEFAULT("1-0048", "pfc-sh7372", | ||
1138 | "intc_irq7_0", "intc"), | ||
1139 | #endif | ||
1140 | /* USBHS1 */ | ||
1141 | PIN_MAP_MUX_GROUP_DEFAULT("r8a66597_hcd.1", "pfc-sh7372", | ||
1142 | "usb1_vbus", "usb1"), | ||
1143 | PIN_MAP_MUX_GROUP_DEFAULT("r8a66597_hcd.1", "pfc-sh7372", | ||
1144 | "usb1_otg_id_0", "usb1"), | ||
1145 | PIN_MAP_MUX_GROUP_DEFAULT("r8a66597_hcd.1", "pfc-sh7372", | ||
1146 | "usb1_otg_ctrl_0", "usb1"), | ||
1108 | }; | 1147 | }; |
1109 | 1148 | ||
1110 | #define GPIO_PORT9CR IOMEM(0xE6051009) | 1149 | #define GPIO_PORT9CR IOMEM(0xE6051009) |
@@ -1137,36 +1176,16 @@ static void __init ap4evb_init(void) | |||
1137 | ARRAY_SIZE(ap4evb_pinctrl_map)); | 1176 | ARRAY_SIZE(ap4evb_pinctrl_map)); |
1138 | sh7372_pinmux_init(); | 1177 | sh7372_pinmux_init(); |
1139 | 1178 | ||
1140 | /* enable SCIFA0 */ | ||
1141 | gpio_request(GPIO_FN_SCIFA0_TXD, NULL); | ||
1142 | gpio_request(GPIO_FN_SCIFA0_RXD, NULL); | ||
1143 | |||
1144 | /* enable SMSC911X */ | ||
1145 | gpio_request(GPIO_FN_CS5A, NULL); | ||
1146 | gpio_request(GPIO_FN_IRQ6_39, NULL); | ||
1147 | |||
1148 | /* enable Debug switch (S6) */ | 1179 | /* enable Debug switch (S6) */ |
1149 | gpio_request_one(32, GPIOF_IN | GPIOF_EXPORT, NULL); | 1180 | gpio_request_one(32, GPIOF_IN | GPIOF_EXPORT, NULL); |
1150 | gpio_request_one(33, GPIOF_IN | GPIOF_EXPORT, NULL); | 1181 | gpio_request_one(33, GPIOF_IN | GPIOF_EXPORT, NULL); |
1151 | gpio_request_one(34, GPIOF_IN | GPIOF_EXPORT, NULL); | 1182 | gpio_request_one(34, GPIOF_IN | GPIOF_EXPORT, NULL); |
1152 | gpio_request_one(35, GPIOF_IN | GPIOF_EXPORT, NULL); | 1183 | gpio_request_one(35, GPIOF_IN | GPIOF_EXPORT, NULL); |
1153 | 1184 | ||
1154 | /* USB enable */ | ||
1155 | gpio_request(GPIO_FN_VBUS0_1, NULL); | ||
1156 | gpio_request(GPIO_FN_IDIN_1_18, NULL); | ||
1157 | gpio_request(GPIO_FN_PWEN_1_115, NULL); | ||
1158 | gpio_request(GPIO_FN_OVCN_1_114, NULL); | ||
1159 | gpio_request(GPIO_FN_EXTLP_1, NULL); | ||
1160 | gpio_request(GPIO_FN_OVCN2_1, NULL); | ||
1161 | |||
1162 | /* setup USB phy */ | 1185 | /* setup USB phy */ |
1163 | __raw_writew(0x8a0a, IOMEM(0xE6058130)); /* USBCR4 */ | 1186 | __raw_writew(0x8a0a, IOMEM(0xE6058130)); /* USBCR4 */ |
1164 | 1187 | ||
1165 | /* enable FSI2 port A (ak4643) */ | 1188 | /* FSI2 port A (ak4643) */ |
1166 | gpio_request(GPIO_FN_FSIAIBT, NULL); | ||
1167 | gpio_request(GPIO_FN_FSIAILR, NULL); | ||
1168 | gpio_request(GPIO_FN_FSIAISLD, NULL); | ||
1169 | gpio_request(GPIO_FN_FSIAOSLD, NULL); | ||
1170 | gpio_request_one(161, GPIOF_OUT_INIT_LOW, NULL); /* slave */ | 1189 | gpio_request_one(161, GPIOF_OUT_INIT_LOW, NULL); /* slave */ |
1171 | 1190 | ||
1172 | gpio_request(9, NULL); | 1191 | gpio_request(9, NULL); |
@@ -1177,8 +1196,7 @@ static void __init ap4evb_init(void) | |||
1177 | /* card detect pin for MMC slot (CN7) */ | 1196 | /* card detect pin for MMC slot (CN7) */ |
1178 | gpio_request_one(41, GPIOF_IN, NULL); | 1197 | gpio_request_one(41, GPIOF_IN, NULL); |
1179 | 1198 | ||
1180 | /* setup FSI2 port B (HDMI) */ | 1199 | /* FSI2 port B (HDMI) */ |
1181 | gpio_request(GPIO_FN_FSIBCK, NULL); | ||
1182 | __raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */ | 1200 | __raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */ |
1183 | 1201 | ||
1184 | /* set SPU2 clock to 119.6 MHz */ | 1202 | /* set SPU2 clock to 119.6 MHz */ |
@@ -1208,18 +1226,6 @@ static void __init ap4evb_init(void) | |||
1208 | * IRQ28 for Touch Panel, set dip switches S3, S43 as OFF, ON. | 1226 | * IRQ28 for Touch Panel, set dip switches S3, S43 as OFF, ON. |
1209 | */ | 1227 | */ |
1210 | 1228 | ||
1211 | /* enable KEYSC */ | ||
1212 | gpio_request(GPIO_FN_KEYOUT0, NULL); | ||
1213 | gpio_request(GPIO_FN_KEYOUT1, NULL); | ||
1214 | gpio_request(GPIO_FN_KEYOUT2, NULL); | ||
1215 | gpio_request(GPIO_FN_KEYOUT3, NULL); | ||
1216 | gpio_request(GPIO_FN_KEYOUT4, NULL); | ||
1217 | gpio_request(GPIO_FN_KEYIN0_136, NULL); | ||
1218 | gpio_request(GPIO_FN_KEYIN1_135, NULL); | ||
1219 | gpio_request(GPIO_FN_KEYIN2_134, NULL); | ||
1220 | gpio_request(GPIO_FN_KEYIN3_133, NULL); | ||
1221 | gpio_request(GPIO_FN_KEYIN4, NULL); | ||
1222 | |||
1223 | /* enable TouchScreen */ | 1229 | /* enable TouchScreen */ |
1224 | irq_set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW); | 1230 | irq_set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW); |
1225 | 1231 | ||
@@ -1241,28 +1247,6 @@ static void __init ap4evb_init(void) | |||
1241 | * For WVGA Panel (18-bit RGB, CONFIG_AP4EVB_WVGA=y) and | 1247 | * For WVGA Panel (18-bit RGB, CONFIG_AP4EVB_WVGA=y) and |
1242 | * IRQ7 for Touch Panel, set dip switches S3, S43 to ON, OFF. | 1248 | * IRQ7 for Touch Panel, set dip switches S3, S43 to ON, OFF. |
1243 | */ | 1249 | */ |
1244 | |||
1245 | gpio_request(GPIO_FN_LCDD17, NULL); | ||
1246 | gpio_request(GPIO_FN_LCDD16, NULL); | ||
1247 | gpio_request(GPIO_FN_LCDD15, NULL); | ||
1248 | gpio_request(GPIO_FN_LCDD14, NULL); | ||
1249 | gpio_request(GPIO_FN_LCDD13, NULL); | ||
1250 | gpio_request(GPIO_FN_LCDD12, NULL); | ||
1251 | gpio_request(GPIO_FN_LCDD11, NULL); | ||
1252 | gpio_request(GPIO_FN_LCDD10, NULL); | ||
1253 | gpio_request(GPIO_FN_LCDD9, NULL); | ||
1254 | gpio_request(GPIO_FN_LCDD8, NULL); | ||
1255 | gpio_request(GPIO_FN_LCDD7, NULL); | ||
1256 | gpio_request(GPIO_FN_LCDD6, NULL); | ||
1257 | gpio_request(GPIO_FN_LCDD5, NULL); | ||
1258 | gpio_request(GPIO_FN_LCDD4, NULL); | ||
1259 | gpio_request(GPIO_FN_LCDD3, NULL); | ||
1260 | gpio_request(GPIO_FN_LCDD2, NULL); | ||
1261 | gpio_request(GPIO_FN_LCDD1, NULL); | ||
1262 | gpio_request(GPIO_FN_LCDD0, NULL); | ||
1263 | gpio_request(GPIO_FN_LCDDISP, NULL); | ||
1264 | gpio_request(GPIO_FN_LCDDCK, NULL); | ||
1265 | |||
1266 | gpio_request_one(189, GPIOF_OUT_INIT_HIGH, NULL); /* backlight */ | 1250 | gpio_request_one(189, GPIOF_OUT_INIT_HIGH, NULL); /* backlight */ |
1267 | gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */ | 1251 | gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */ |
1268 | 1252 | ||
@@ -1288,8 +1272,6 @@ static void __init ap4evb_init(void) | |||
1288 | */ | 1272 | */ |
1289 | 1273 | ||
1290 | /* MIPI-CSI stuff */ | 1274 | /* MIPI-CSI stuff */ |
1291 | gpio_request(GPIO_FN_VIO_CKO, NULL); | ||
1292 | |||
1293 | clk = clk_get(NULL, "vck1_clk"); | 1275 | clk = clk_get(NULL, "vck1_clk"); |
1294 | if (!IS_ERR(clk)) { | 1276 | if (!IS_ERR(clk)) { |
1295 | clk_set_rate(clk, clk_round_rate(clk, 13000000)); | 1277 | clk_set_rate(clk, clk_round_rate(clk, 13000000)); |
@@ -1299,10 +1281,6 @@ static void __init ap4evb_init(void) | |||
1299 | 1281 | ||
1300 | sh7372_add_standard_devices(); | 1282 | sh7372_add_standard_devices(); |
1301 | 1283 | ||
1302 | /* HDMI */ | ||
1303 | gpio_request(GPIO_FN_HDMI_HPD, NULL); | ||
1304 | gpio_request(GPIO_FN_HDMI_CEC, NULL); | ||
1305 | |||
1306 | /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */ | 1284 | /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */ |
1307 | #define SRCR4 IOMEM(0xe61580bc) | 1285 | #define SRCR4 IOMEM(0xe61580bc) |
1308 | srcr4 = __raw_readl(SRCR4); | 1286 | srcr4 = __raw_readl(SRCR4); |
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index b85b2882dbd0..44a621505eeb 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c | |||
@@ -584,7 +584,7 @@ static struct regulator_init_data vcc_sdhi0_init_data = { | |||
584 | static struct fixed_voltage_config vcc_sdhi0_info = { | 584 | static struct fixed_voltage_config vcc_sdhi0_info = { |
585 | .supply_name = "SDHI0 Vcc", | 585 | .supply_name = "SDHI0 Vcc", |
586 | .microvolts = 3300000, | 586 | .microvolts = 3300000, |
587 | .gpio = GPIO_PORT75, | 587 | .gpio = 75, |
588 | .enable_high = 1, | 588 | .enable_high = 1, |
589 | .init_data = &vcc_sdhi0_init_data, | 589 | .init_data = &vcc_sdhi0_init_data, |
590 | }; | 590 | }; |
@@ -615,7 +615,7 @@ static struct regulator_init_data vccq_sdhi0_init_data = { | |||
615 | }; | 615 | }; |
616 | 616 | ||
617 | static struct gpio vccq_sdhi0_gpios[] = { | 617 | static struct gpio vccq_sdhi0_gpios[] = { |
618 | {GPIO_PORT17, GPIOF_OUT_INIT_LOW, "vccq-sdhi0" }, | 618 | {17, GPIOF_OUT_INIT_LOW, "vccq-sdhi0" }, |
619 | }; | 619 | }; |
620 | 620 | ||
621 | static struct gpio_regulator_state vccq_sdhi0_states[] = { | 621 | static struct gpio_regulator_state vccq_sdhi0_states[] = { |
@@ -626,7 +626,7 @@ static struct gpio_regulator_state vccq_sdhi0_states[] = { | |||
626 | static struct gpio_regulator_config vccq_sdhi0_info = { | 626 | static struct gpio_regulator_config vccq_sdhi0_info = { |
627 | .supply_name = "vqmmc", | 627 | .supply_name = "vqmmc", |
628 | 628 | ||
629 | .enable_gpio = GPIO_PORT74, | 629 | .enable_gpio = 74, |
630 | .enable_high = 1, | 630 | .enable_high = 1, |
631 | .enabled_at_boot = 0, | 631 | .enabled_at_boot = 0, |
632 | 632 | ||
@@ -664,7 +664,7 @@ static struct regulator_init_data vcc_sdhi1_init_data = { | |||
664 | static struct fixed_voltage_config vcc_sdhi1_info = { | 664 | static struct fixed_voltage_config vcc_sdhi1_info = { |
665 | .supply_name = "SDHI1 Vcc", | 665 | .supply_name = "SDHI1 Vcc", |
666 | .microvolts = 3300000, | 666 | .microvolts = 3300000, |
667 | .gpio = GPIO_PORT16, | 667 | .gpio = 16, |
668 | .enable_high = 1, | 668 | .enable_high = 1, |
669 | .init_data = &vcc_sdhi1_init_data, | 669 | .init_data = &vcc_sdhi1_init_data, |
670 | }; | 670 | }; |
@@ -693,7 +693,7 @@ static struct sh_mobile_sdhi_info sdhi0_info = { | |||
693 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | | 693 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | |
694 | MMC_CAP_POWER_OFF_CARD, | 694 | MMC_CAP_POWER_OFF_CARD, |
695 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, | 695 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, |
696 | .cd_gpio = GPIO_PORT167, | 696 | .cd_gpio = 167, |
697 | }; | 697 | }; |
698 | 698 | ||
699 | static struct resource sdhi0_resources[] = { | 699 | static struct resource sdhi0_resources[] = { |
@@ -736,7 +736,7 @@ static struct sh_mobile_sdhi_info sdhi1_info = { | |||
736 | MMC_CAP_POWER_OFF_CARD, | 736 | MMC_CAP_POWER_OFF_CARD, |
737 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, | 737 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, |
738 | /* Port72 cannot generate IRQs, will be used in polling mode. */ | 738 | /* Port72 cannot generate IRQs, will be used in polling mode. */ |
739 | .cd_gpio = GPIO_PORT72, | 739 | .cd_gpio = 72, |
740 | }; | 740 | }; |
741 | 741 | ||
742 | static struct resource sdhi1_resources[] = { | 742 | static struct resource sdhi1_resources[] = { |
@@ -1046,6 +1046,35 @@ static struct platform_device *eva_devices[] __initdata = { | |||
1046 | }; | 1046 | }; |
1047 | 1047 | ||
1048 | static const struct pinctrl_map eva_pinctrl_map[] = { | 1048 | static const struct pinctrl_map eva_pinctrl_map[] = { |
1049 | /* CEU0 */ | ||
1050 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740", | ||
1051 | "ceu0_data_0_7", "ceu0"), | ||
1052 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740", | ||
1053 | "ceu0_clk_0", "ceu0"), | ||
1054 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740", | ||
1055 | "ceu0_sync", "ceu0"), | ||
1056 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740", | ||
1057 | "ceu0_field", "ceu0"), | ||
1058 | /* FSIA */ | ||
1059 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740", | ||
1060 | "fsia_sclk_in", "fsia"), | ||
1061 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740", | ||
1062 | "fsia_mclk_out", "fsia"), | ||
1063 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740", | ||
1064 | "fsia_data_in_1", "fsia"), | ||
1065 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740", | ||
1066 | "fsia_data_out_0", "fsia"), | ||
1067 | /* FSIB */ | ||
1068 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740", | ||
1069 | "fsib_mclk_in", "fsib"), | ||
1070 | /* GETHER */ | ||
1071 | PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740", | ||
1072 | "gether_mii", "gether"), | ||
1073 | PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740", | ||
1074 | "gether_int", "gether"), | ||
1075 | /* HDMI */ | ||
1076 | PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740", | ||
1077 | "hdmi", "hdmi"), | ||
1049 | /* LCD0 */ | 1078 | /* LCD0 */ |
1050 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-r8a7740", | 1079 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-r8a7740", |
1051 | "lcd0_data24_0", "lcd0"), | 1080 | "lcd0_data24_0", "lcd0"), |
@@ -1058,6 +1087,9 @@ static const struct pinctrl_map eva_pinctrl_map[] = { | |||
1058 | "mmc0_data8_1", "mmc0"), | 1087 | "mmc0_data8_1", "mmc0"), |
1059 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-r8a7740", | 1088 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-r8a7740", |
1060 | "mmc0_ctrl_1", "mmc0"), | 1089 | "mmc0_ctrl_1", "mmc0"), |
1090 | /* SCIFA1 */ | ||
1091 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.1", "pfc-r8a7740", | ||
1092 | "scifa1_data", "scifa1"), | ||
1061 | /* SDHI0 */ | 1093 | /* SDHI0 */ |
1062 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7740", | 1094 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7740", |
1063 | "sdhi0_data4", "sdhi0"), | 1095 | "sdhi0_data4", "sdhi0"), |
@@ -1065,6 +1097,12 @@ static const struct pinctrl_map eva_pinctrl_map[] = { | |||
1065 | "sdhi0_ctrl", "sdhi0"), | 1097 | "sdhi0_ctrl", "sdhi0"), |
1066 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7740", | 1098 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7740", |
1067 | "sdhi0_wp", "sdhi0"), | 1099 | "sdhi0_wp", "sdhi0"), |
1100 | /* ST1232 */ | ||
1101 | PIN_MAP_MUX_GROUP_DEFAULT("0-0055", "pfc-r8a7740", | ||
1102 | "intc_irq10", "intc"), | ||
1103 | /* USBHS */ | ||
1104 | PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs", "pfc-r8a7740", | ||
1105 | "intc_irq7_1", "intc"), | ||
1068 | }; | 1106 | }; |
1069 | 1107 | ||
1070 | static void __init eva_clock_init(void) | 1108 | static void __init eva_clock_init(void) |
@@ -1119,40 +1157,14 @@ static void __init eva_init(void) | |||
1119 | r8a7740_pinmux_init(); | 1157 | r8a7740_pinmux_init(); |
1120 | r8a7740_meram_workaround(); | 1158 | r8a7740_meram_workaround(); |
1121 | 1159 | ||
1122 | /* SCIFA1 */ | ||
1123 | gpio_request(GPIO_FN_SCIFA1_RXD, NULL); | ||
1124 | gpio_request(GPIO_FN_SCIFA1_TXD, NULL); | ||
1125 | |||
1126 | /* LCDC0 */ | 1160 | /* LCDC0 */ |
1127 | gpio_request(GPIO_FN_LCDC0_SELECT, NULL); | ||
1128 | |||
1129 | gpio_request_one(61, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */ | 1161 | gpio_request_one(61, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */ |
1130 | gpio_request_one(202, GPIOF_OUT_INIT_LOW, NULL); /* LCD0_LED_CONT */ | 1162 | gpio_request_one(202, GPIOF_OUT_INIT_LOW, NULL); /* LCD0_LED_CONT */ |
1131 | 1163 | ||
1132 | /* Touchscreen */ | 1164 | /* Touchscreen */ |
1133 | gpio_request(GPIO_FN_IRQ10, NULL); /* TP_INT */ | 1165 | gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */ |
1134 | 1166 | ||
1135 | /* GETHER */ | 1167 | /* GETHER */ |
1136 | gpio_request(GPIO_FN_ET_CRS, NULL); | ||
1137 | gpio_request(GPIO_FN_ET_MDC, NULL); | ||
1138 | gpio_request(GPIO_FN_ET_MDIO, NULL); | ||
1139 | gpio_request(GPIO_FN_ET_TX_ER, NULL); | ||
1140 | gpio_request(GPIO_FN_ET_RX_ER, NULL); | ||
1141 | gpio_request(GPIO_FN_ET_ERXD0, NULL); | ||
1142 | gpio_request(GPIO_FN_ET_ERXD1, NULL); | ||
1143 | gpio_request(GPIO_FN_ET_ERXD2, NULL); | ||
1144 | gpio_request(GPIO_FN_ET_ERXD3, NULL); | ||
1145 | gpio_request(GPIO_FN_ET_TX_CLK, NULL); | ||
1146 | gpio_request(GPIO_FN_ET_TX_EN, NULL); | ||
1147 | gpio_request(GPIO_FN_ET_ETXD0, NULL); | ||
1148 | gpio_request(GPIO_FN_ET_ETXD1, NULL); | ||
1149 | gpio_request(GPIO_FN_ET_ETXD2, NULL); | ||
1150 | gpio_request(GPIO_FN_ET_ETXD3, NULL); | ||
1151 | gpio_request(GPIO_FN_ET_PHY_INT, NULL); | ||
1152 | gpio_request(GPIO_FN_ET_COL, NULL); | ||
1153 | gpio_request(GPIO_FN_ET_RX_DV, NULL); | ||
1154 | gpio_request(GPIO_FN_ET_RX_CLK, NULL); | ||
1155 | |||
1156 | gpio_request_one(18, GPIOF_OUT_INIT_HIGH, NULL); /* PHY_RST */ | 1168 | gpio_request_one(18, GPIOF_OUT_INIT_HIGH, NULL); /* PHY_RST */ |
1157 | 1169 | ||
1158 | /* USB */ | 1170 | /* USB */ |
@@ -1163,34 +1175,17 @@ static void __init eva_init(void) | |||
1163 | } else { | 1175 | } else { |
1164 | /* USB Func */ | 1176 | /* USB Func */ |
1165 | /* | 1177 | /* |
1166 | * A1 chip has 2 IRQ7 pin and it was controled by MSEL register. | 1178 | * The USBHS interrupt handlers needs to read the IRQ pin value |
1167 | * OTOH, usbhs interrupt needs its value (HI/LOW) to decide | 1179 | * (HI/LOW) to diffentiate USB connection and disconnection |
1168 | * USB connection/disconnection (usbhsf_get_vbus()). | 1180 | * events (usbhsf_get_vbus()). We thus need to select both the |
1169 | * This means we needs to select GPIO_FN_IRQ7_PORT209 first, | 1181 | * intc_irq7_1 pin group and GPIO 209 here. |
1170 | * and select GPIO 209 here | ||
1171 | */ | 1182 | */ |
1172 | gpio_request(GPIO_FN_IRQ7_PORT209, NULL); | ||
1173 | gpio_request_one(209, GPIOF_IN, NULL); | 1183 | gpio_request_one(209, GPIOF_IN, NULL); |
1174 | 1184 | ||
1175 | platform_device_register(&usbhsf_device); | 1185 | platform_device_register(&usbhsf_device); |
1176 | usb = &usbhsf_device; | 1186 | usb = &usbhsf_device; |
1177 | } | 1187 | } |
1178 | 1188 | ||
1179 | /* CEU0 */ | ||
1180 | gpio_request(GPIO_FN_VIO0_D7, NULL); | ||
1181 | gpio_request(GPIO_FN_VIO0_D6, NULL); | ||
1182 | gpio_request(GPIO_FN_VIO0_D5, NULL); | ||
1183 | gpio_request(GPIO_FN_VIO0_D4, NULL); | ||
1184 | gpio_request(GPIO_FN_VIO0_D3, NULL); | ||
1185 | gpio_request(GPIO_FN_VIO0_D2, NULL); | ||
1186 | gpio_request(GPIO_FN_VIO0_D1, NULL); | ||
1187 | gpio_request(GPIO_FN_VIO0_D0, NULL); | ||
1188 | gpio_request(GPIO_FN_VIO0_CLK, NULL); | ||
1189 | gpio_request(GPIO_FN_VIO0_HD, NULL); | ||
1190 | gpio_request(GPIO_FN_VIO0_VD, NULL); | ||
1191 | gpio_request(GPIO_FN_VIO0_FIELD, NULL); | ||
1192 | gpio_request(GPIO_FN_VIO_CKO, NULL); | ||
1193 | |||
1194 | /* CON1/CON15 Camera */ | 1189 | /* CON1/CON15 Camera */ |
1195 | gpio_request_one(173, GPIOF_OUT_INIT_LOW, NULL); /* STANDBY */ | 1190 | gpio_request_one(173, GPIOF_OUT_INIT_LOW, NULL); /* STANDBY */ |
1196 | gpio_request_one(172, GPIOF_OUT_INIT_HIGH, NULL); /* RST */ | 1191 | gpio_request_one(172, GPIOF_OUT_INIT_HIGH, NULL); /* RST */ |
@@ -1198,24 +1193,11 @@ static void __init eva_init(void) | |||
1198 | gpio_request_one(158, GPIOF_OUT_INIT_LOW, NULL); /* CAM_PON */ | 1193 | gpio_request_one(158, GPIOF_OUT_INIT_LOW, NULL); /* CAM_PON */ |
1199 | 1194 | ||
1200 | /* FSI-WM8978 */ | 1195 | /* FSI-WM8978 */ |
1201 | gpio_request(GPIO_FN_FSIAIBT, NULL); | ||
1202 | gpio_request(GPIO_FN_FSIAILR, NULL); | ||
1203 | gpio_request(GPIO_FN_FSIAOMC, NULL); | ||
1204 | gpio_request(GPIO_FN_FSIAOSLD, NULL); | ||
1205 | gpio_request(GPIO_FN_FSIAISLD_PORT5, NULL); | ||
1206 | |||
1207 | gpio_request(7, NULL); | 1196 | gpio_request(7, NULL); |
1208 | gpio_request(8, NULL); | 1197 | gpio_request(8, NULL); |
1209 | gpio_direction_none(GPIO_PORT7CR); /* FSIAOBT needs no direction */ | 1198 | gpio_direction_none(GPIO_PORT7CR); /* FSIAOBT needs no direction */ |
1210 | gpio_direction_none(GPIO_PORT8CR); /* FSIAOLR needs no direction */ | 1199 | gpio_direction_none(GPIO_PORT8CR); /* FSIAOLR needs no direction */ |
1211 | 1200 | ||
1212 | /* FSI-HDMI */ | ||
1213 | gpio_request(GPIO_FN_FSIBCK, NULL); | ||
1214 | |||
1215 | /* HDMI */ | ||
1216 | gpio_request(GPIO_FN_HDMI_HPD, NULL); | ||
1217 | gpio_request(GPIO_FN_HDMI_CEC, NULL); | ||
1218 | |||
1219 | /* | 1201 | /* |
1220 | * CAUTION | 1202 | * CAUTION |
1221 | * | 1203 | * |
diff --git a/arch/arm/mach-shmobile/board-bockw.c b/arch/arm/mach-shmobile/board-bockw.c index 38e5e50fb318..dac4365c5158 100644 --- a/arch/arm/mach-shmobile/board-bockw.c +++ b/arch/arm/mach-shmobile/board-bockw.c | |||
@@ -18,6 +18,7 @@ | |||
18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <linux/pinctrl/machine.h> | ||
21 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
22 | #include <linux/smsc911x.h> | 23 | #include <linux/smsc911x.h> |
23 | #include <mach/common.h> | 24 | #include <mach/common.h> |
@@ -37,6 +38,14 @@ static struct resource smsc911x_resources[] = { | |||
37 | DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */ | 38 | DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */ |
38 | }; | 39 | }; |
39 | 40 | ||
41 | static const struct pinctrl_map bockw_pinctrl_map[] = { | ||
42 | /* SCIF0 */ | ||
43 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778", | ||
44 | "scif0_data_a", "scif0"), | ||
45 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778", | ||
46 | "scif0_ctrl", "scif0"), | ||
47 | }; | ||
48 | |||
40 | #define IRQ0MR 0x30 | 49 | #define IRQ0MR 0x30 |
41 | static void __init bockw_init(void) | 50 | static void __init bockw_init(void) |
42 | { | 51 | { |
@@ -46,6 +55,10 @@ static void __init bockw_init(void) | |||
46 | r8a7778_init_irq_extpin(1); | 55 | r8a7778_init_irq_extpin(1); |
47 | r8a7778_add_standard_devices(); | 56 | r8a7778_add_standard_devices(); |
48 | 57 | ||
58 | pinctrl_register_mappings(bockw_pinctrl_map, | ||
59 | ARRAY_SIZE(bockw_pinctrl_map)); | ||
60 | r8a7778_pinmux_init(); | ||
61 | |||
49 | fpga = ioremap_nocache(0x18200000, SZ_1M); | 62 | fpga = ioremap_nocache(0x18200000, SZ_1M); |
50 | if (fpga) { | 63 | if (fpga) { |
51 | /* | 64 | /* |
diff --git a/arch/arm/mach-shmobile/board-bonito.c b/arch/arm/mach-shmobile/board-bonito.c index 70d992c540ae..b373e9ced573 100644 --- a/arch/arm/mach-shmobile/board-bonito.c +++ b/arch/arm/mach-shmobile/board-bonito.c | |||
@@ -331,12 +331,6 @@ static struct platform_device smsc_device = { | |||
331 | }; | 331 | }; |
332 | 332 | ||
333 | /* | 333 | /* |
334 | * core board devices | ||
335 | */ | ||
336 | static struct platform_device *bonito_core_devices[] __initdata = { | ||
337 | }; | ||
338 | |||
339 | /* | ||
340 | * base board devices | 334 | * base board devices |
341 | */ | 335 | */ |
342 | static struct platform_device *bonito_base_devices[] __initdata = { | 336 | static struct platform_device *bonito_base_devices[] __initdata = { |
@@ -375,12 +369,37 @@ static void __init bonito_map_io(void) | |||
375 | #define VCCQ1CR IOMEM(0xE6058140) | 369 | #define VCCQ1CR IOMEM(0xE6058140) |
376 | #define VCCQ1LCDCR IOMEM(0xE6058186) | 370 | #define VCCQ1LCDCR IOMEM(0xE6058186) |
377 | 371 | ||
372 | /* | ||
373 | * HACK: The FPGA mappings should be associated with the FPGA device, but we | ||
374 | * don't have one at the moment. Associate them with the PFC device to make | ||
375 | * sure they will be applied. | ||
376 | */ | ||
377 | static const struct pinctrl_map fpga_pinctrl_map[] = { | ||
378 | /* FPGA */ | ||
379 | PIN_MAP_MUX_GROUP_DEFAULT("pfc-r8a7740", "pfc-r8a7740", | ||
380 | "bsc_cs5a_0", "bsc"), | ||
381 | PIN_MAP_MUX_GROUP_DEFAULT("pfc-r8a7740", "pfc-r8a7740", | ||
382 | "bsc_cs5b", "bsc"), | ||
383 | PIN_MAP_MUX_GROUP_DEFAULT("pfc-r8a7740", "pfc-r8a7740", | ||
384 | "bsc_cs6a", "bsc"), | ||
385 | PIN_MAP_MUX_GROUP_DEFAULT("pfc-r8a7740", "pfc-r8a7740", | ||
386 | "intc_irq10", "intc"), | ||
387 | }; | ||
388 | |||
389 | static const struct pinctrl_map scifa5_pinctrl_map[] = { | ||
390 | /* SCIFA5 */ | ||
391 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.5", "pfc-r8a7740", | ||
392 | "scifa5_data_2", "scifa5"), | ||
393 | }; | ||
394 | |||
378 | static void __init bonito_init(void) | 395 | static void __init bonito_init(void) |
379 | { | 396 | { |
380 | u16 val; | 397 | u16 val; |
381 | 398 | ||
382 | regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); | 399 | regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); |
383 | 400 | ||
401 | pinctrl_register_mappings(fpga_pinctrl_map, | ||
402 | ARRAY_SIZE(fpga_pinctrl_map)); | ||
384 | r8a7740_pinmux_init(); | 403 | r8a7740_pinmux_init(); |
385 | bonito_fpga_init(); | 404 | bonito_fpga_init(); |
386 | 405 | ||
@@ -397,9 +416,6 @@ static void __init bonito_init(void) | |||
397 | 416 | ||
398 | r8a7740_add_standard_devices(); | 417 | r8a7740_add_standard_devices(); |
399 | 418 | ||
400 | platform_add_devices(bonito_core_devices, | ||
401 | ARRAY_SIZE(bonito_core_devices)); | ||
402 | |||
403 | /* | 419 | /* |
404 | * base board settings | 420 | * base board settings |
405 | */ | 421 | */ |
@@ -409,14 +425,6 @@ static void __init bonito_init(void) | |||
409 | u16 bsw3; | 425 | u16 bsw3; |
410 | u16 bsw4; | 426 | u16 bsw4; |
411 | 427 | ||
412 | /* | ||
413 | * FPGA | ||
414 | */ | ||
415 | gpio_request(GPIO_FN_CS5B, NULL); | ||
416 | gpio_request(GPIO_FN_CS6A, NULL); | ||
417 | gpio_request(GPIO_FN_CS5A_PORT105, NULL); | ||
418 | gpio_request(GPIO_FN_IRQ10, NULL); | ||
419 | |||
420 | val = bonito_fpga_read(BVERR); | 428 | val = bonito_fpga_read(BVERR); |
421 | pr_info("bonito version: cpu %02x, base %02x\n", | 429 | pr_info("bonito version: cpu %02x, base %02x\n", |
422 | ((val >> 8) & 0xFF), | 430 | ((val >> 8) & 0xFF), |
@@ -432,8 +440,8 @@ static void __init bonito_init(void) | |||
432 | if (BIT_OFF(bsw2, 1) && /* S38.3 = ON */ | 440 | if (BIT_OFF(bsw2, 1) && /* S38.3 = ON */ |
433 | BIT_OFF(bsw3, 9) && /* S39.6 = ON */ | 441 | BIT_OFF(bsw3, 9) && /* S39.6 = ON */ |
434 | BIT_OFF(bsw4, 4)) { /* S43.1 = ON */ | 442 | BIT_OFF(bsw4, 4)) { /* S43.1 = ON */ |
435 | gpio_request(GPIO_FN_SCIFA5_TXD_PORT91, NULL); | 443 | pinctrl_register_mappings(scifa5_pinctrl_map, |
436 | gpio_request(GPIO_FN_SCIFA5_RXD_PORT92, NULL); | 444 | ARRAY_SIZE(scifa5_pinctrl_map)); |
437 | } | 445 | } |
438 | 446 | ||
439 | /* | 447 | /* |
@@ -443,7 +451,6 @@ static void __init bonito_init(void) | |||
443 | BIT_ON(bsw2, 2)) { /* S38.2 = OFF */ | 451 | BIT_ON(bsw2, 2)) { /* S38.2 = OFF */ |
444 | pinctrl_register_mappings(lcdc0_pinctrl_map, | 452 | pinctrl_register_mappings(lcdc0_pinctrl_map, |
445 | ARRAY_SIZE(lcdc0_pinctrl_map)); | 453 | ARRAY_SIZE(lcdc0_pinctrl_map)); |
446 | gpio_request(GPIO_FN_LCDC0_SELECT, NULL); | ||
447 | 454 | ||
448 | gpio_request_one(61, GPIOF_OUT_INIT_HIGH, | 455 | gpio_request_one(61, GPIOF_OUT_INIT_HIGH, |
449 | NULL); /* LCDDON */ | 456 | NULL); /* LCDDON */ |
diff --git a/arch/arm/mach-shmobile/board-kzm9g-reference.c b/arch/arm/mach-shmobile/board-kzm9g-reference.c index aefa50d385b7..44055fe8a45c 100644 --- a/arch/arm/mach-shmobile/board-kzm9g-reference.c +++ b/arch/arm/mach-shmobile/board-kzm9g-reference.c | |||
@@ -79,7 +79,6 @@ static void __init kzm_init(void) | |||
79 | sh73a0_pinmux_init(); | 79 | sh73a0_pinmux_init(); |
80 | 80 | ||
81 | /* enable SD */ | 81 | /* enable SD */ |
82 | gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL); | ||
83 | gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */ | 82 | gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */ |
84 | 83 | ||
85 | gpio_request_one(14, GPIOF_OUT_INIT_HIGH, NULL); /* power */ | 84 | gpio_request_one(14, GPIOF_OUT_INIT_HIGH, NULL); /* power */ |
diff --git a/arch/arm/mach-shmobile/board-kzm9g.c b/arch/arm/mach-shmobile/board-kzm9g.c index e6b775a10aad..1fdf05cb6da1 100644 --- a/arch/arm/mach-shmobile/board-kzm9g.c +++ b/arch/arm/mach-shmobile/board-kzm9g.c | |||
@@ -663,13 +663,13 @@ static unsigned long pin_pullup_conf[] = { | |||
663 | 663 | ||
664 | static const struct pinctrl_map kzm_pinctrl_map[] = { | 664 | static const struct pinctrl_map kzm_pinctrl_map[] = { |
665 | /* FSIA (AK4648) */ | 665 | /* FSIA (AK4648) */ |
666 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0", | 666 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0", |
667 | "fsia_mclk_in", "fsia"), | 667 | "fsia_mclk_in", "fsia"), |
668 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0", | 668 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0", |
669 | "fsia_sclk_in", "fsia"), | 669 | "fsia_sclk_in", "fsia"), |
670 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0", | 670 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0", |
671 | "fsia_data_in", "fsia"), | 671 | "fsia_data_in", "fsia"), |
672 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0", | 672 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0", |
673 | "fsia_data_out", "fsia"), | 673 | "fsia_data_out", "fsia"), |
674 | /* I2C3 */ | 674 | /* I2C3 */ |
675 | PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.3", "pfc-sh73a0", | 675 | PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.3", "pfc-sh73a0", |
@@ -788,9 +788,6 @@ static void __init kzm_init(void) | |||
788 | /* Touchscreen */ | 788 | /* Touchscreen */ |
789 | gpio_request_one(223, GPIOF_IN, NULL); /* IRQ8 */ | 789 | gpio_request_one(223, GPIOF_IN, NULL); /* IRQ8 */ |
790 | 790 | ||
791 | /* enable SD */ | ||
792 | gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL); | ||
793 | |||
794 | #ifdef CONFIG_CACHE_L2X0 | 791 | #ifdef CONFIG_CACHE_L2X0 |
795 | /* Early BRESP enable, Shared attribute override enable, 64K*8way */ | 792 | /* Early BRESP enable, Shared attribute override enable, 64K*8way */ |
796 | l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff); | 793 | l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff); |
diff --git a/arch/arm/mach-shmobile/board-lager.c b/arch/arm/mach-shmobile/board-lager.c index f587187a8603..6114edd0a977 100644 --- a/arch/arm/mach-shmobile/board-lager.c +++ b/arch/arm/mach-shmobile/board-lager.c | |||
@@ -21,15 +21,30 @@ | |||
21 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
22 | #include <linux/irqchip.h> | 22 | #include <linux/irqchip.h> |
23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
24 | #include <linux/pinctrl/machine.h> | ||
24 | #include <linux/platform_device.h> | 25 | #include <linux/platform_device.h> |
25 | #include <mach/common.h> | 26 | #include <mach/common.h> |
26 | #include <mach/r8a7790.h> | 27 | #include <mach/r8a7790.h> |
27 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
28 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
29 | 30 | ||
31 | static const struct pinctrl_map lager_pinctrl_map[] = { | ||
32 | /* SCIF0 (CN19: DEBUG SERIAL0) */ | ||
33 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.6", "pfc-r8a7790", | ||
34 | "scif0_data", "scif0"), | ||
35 | /* SCIF1 (CN20: DEBUG SERIAL1) */ | ||
36 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.7", "pfc-r8a7790", | ||
37 | "scif1_data", "scif1"), | ||
38 | }; | ||
39 | |||
30 | static void __init lager_add_standard_devices(void) | 40 | static void __init lager_add_standard_devices(void) |
31 | { | 41 | { |
32 | r8a7790_clock_init(); | 42 | r8a7790_clock_init(); |
43 | |||
44 | pinctrl_register_mappings(lager_pinctrl_map, | ||
45 | ARRAY_SIZE(lager_pinctrl_map)); | ||
46 | r8a7790_pinmux_init(); | ||
47 | |||
33 | r8a7790_add_standard_devices(); | 48 | r8a7790_add_standard_devices(); |
34 | } | 49 | } |
35 | 50 | ||
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index fa3407da682a..85f51a849a50 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
@@ -1309,6 +1309,49 @@ static struct i2c_board_info i2c1_devices[] = { | |||
1309 | }; | 1309 | }; |
1310 | 1310 | ||
1311 | static const struct pinctrl_map mackerel_pinctrl_map[] = { | 1311 | static const struct pinctrl_map mackerel_pinctrl_map[] = { |
1312 | /* ADXL34X */ | ||
1313 | PIN_MAP_MUX_GROUP_DEFAULT("1-0053", "pfc-sh7372", | ||
1314 | "intc_irq21", "intc"), | ||
1315 | /* CEU */ | ||
1316 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372", | ||
1317 | "ceu_data_0_7", "ceu"), | ||
1318 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372", | ||
1319 | "ceu_clk_0", "ceu"), | ||
1320 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372", | ||
1321 | "ceu_sync", "ceu"), | ||
1322 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372", | ||
1323 | "ceu_field", "ceu"), | ||
1324 | /* FLCTL */ | ||
1325 | PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372", | ||
1326 | "flctl_data", "flctl"), | ||
1327 | PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372", | ||
1328 | "flctl_ce0", "flctl"), | ||
1329 | PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372", | ||
1330 | "flctl_ctrl", "flctl"), | ||
1331 | /* FSIA (AK4643) */ | ||
1332 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372", | ||
1333 | "fsia_sclk_in", "fsia"), | ||
1334 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372", | ||
1335 | "fsia_data_in", "fsia"), | ||
1336 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372", | ||
1337 | "fsia_data_out", "fsia"), | ||
1338 | /* FSIB (HDMI) */ | ||
1339 | PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-sh7372", | ||
1340 | "fsib_mclk_in", "fsib"), | ||
1341 | /* HDMI */ | ||
1342 | PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-sh7372", | ||
1343 | "hdmi", "hdmi"), | ||
1344 | /* LCDC */ | ||
1345 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372", | ||
1346 | "lcd_data24", "lcd"), | ||
1347 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372", | ||
1348 | "lcd_sync", "lcd"), | ||
1349 | /* SCIFA0 */ | ||
1350 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-sh7372", | ||
1351 | "scifa0_data", "scifa0"), | ||
1352 | /* SCIFA2 (GT-720F GPS module) */ | ||
1353 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "pfc-sh7372", | ||
1354 | "scifa2_data", "scifa2"), | ||
1312 | /* SDHI0 */ | 1355 | /* SDHI0 */ |
1313 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372", | 1356 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372", |
1314 | "sdhi0_data4", "sdhi0"), | 1357 | "sdhi0_data4", "sdhi0"), |
@@ -1316,6 +1359,8 @@ static const struct pinctrl_map mackerel_pinctrl_map[] = { | |||
1316 | "sdhi0_ctrl", "sdhi0"), | 1359 | "sdhi0_ctrl", "sdhi0"), |
1317 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372", | 1360 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372", |
1318 | "sdhi0_wp", "sdhi0"), | 1361 | "sdhi0_wp", "sdhi0"), |
1362 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372", | ||
1363 | "intc_irq26_1", "intc"), | ||
1319 | /* SDHI1 */ | 1364 | /* SDHI1 */ |
1320 | #if !IS_ENABLED(CONFIG_MMC_SH_MMCIF) | 1365 | #if !IS_ENABLED(CONFIG_MMC_SH_MMCIF) |
1321 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372", | 1366 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372", |
@@ -1334,6 +1379,25 @@ static const struct pinctrl_map mackerel_pinctrl_map[] = { | |||
1334 | "sdhi2_data4", "sdhi2"), | 1379 | "sdhi2_data4", "sdhi2"), |
1335 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh7372", | 1380 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh7372", |
1336 | "sdhi2_ctrl", "sdhi2"), | 1381 | "sdhi2_ctrl", "sdhi2"), |
1382 | /* SMSC911X */ | ||
1383 | PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372", | ||
1384 | "bsc_cs5a", "bsc"), | ||
1385 | PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372", | ||
1386 | "intc_irq6_0", "intc"), | ||
1387 | /* ST1232 */ | ||
1388 | PIN_MAP_MUX_GROUP_DEFAULT("0-0055", "pfc-sh7372", | ||
1389 | "intc_irq7_0", "intc"), | ||
1390 | /* TCA6416 */ | ||
1391 | PIN_MAP_MUX_GROUP_DEFAULT("0-0020", "pfc-sh7372", | ||
1392 | "intc_irq9_0", "intc"), | ||
1393 | /* USBHS0 */ | ||
1394 | PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.0", "pfc-sh7372", | ||
1395 | "usb0_vbus", "usb0"), | ||
1396 | /* USBHS1 */ | ||
1397 | PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.1", "pfc-sh7372", | ||
1398 | "usb1_vbus", "usb1"), | ||
1399 | PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.1", "pfc-sh7372", | ||
1400 | "usb1_otg_id_0", "usb1"), | ||
1337 | }; | 1401 | }; |
1338 | 1402 | ||
1339 | #define GPIO_PORT9CR IOMEM(0xE6051009) | 1403 | #define GPIO_PORT9CR IOMEM(0xE6051009) |
@@ -1377,61 +1441,18 @@ static void __init mackerel_init(void) | |||
1377 | ARRAY_SIZE(mackerel_pinctrl_map)); | 1441 | ARRAY_SIZE(mackerel_pinctrl_map)); |
1378 | sh7372_pinmux_init(); | 1442 | sh7372_pinmux_init(); |
1379 | 1443 | ||
1380 | /* enable SCIFA0 */ | ||
1381 | gpio_request(GPIO_FN_SCIFA0_TXD, NULL); | ||
1382 | gpio_request(GPIO_FN_SCIFA0_RXD, NULL); | ||
1383 | |||
1384 | /* enable SMSC911X */ | ||
1385 | gpio_request(GPIO_FN_CS5A, NULL); | ||
1386 | gpio_request(GPIO_FN_IRQ6_39, NULL); | ||
1387 | |||
1388 | /* LCDC */ | ||
1389 | gpio_request(GPIO_FN_LCDD23, NULL); | ||
1390 | gpio_request(GPIO_FN_LCDD22, NULL); | ||
1391 | gpio_request(GPIO_FN_LCDD21, NULL); | ||
1392 | gpio_request(GPIO_FN_LCDD20, NULL); | ||
1393 | gpio_request(GPIO_FN_LCDD19, NULL); | ||
1394 | gpio_request(GPIO_FN_LCDD18, NULL); | ||
1395 | gpio_request(GPIO_FN_LCDD17, NULL); | ||
1396 | gpio_request(GPIO_FN_LCDD16, NULL); | ||
1397 | gpio_request(GPIO_FN_LCDD15, NULL); | ||
1398 | gpio_request(GPIO_FN_LCDD14, NULL); | ||
1399 | gpio_request(GPIO_FN_LCDD13, NULL); | ||
1400 | gpio_request(GPIO_FN_LCDD12, NULL); | ||
1401 | gpio_request(GPIO_FN_LCDD11, NULL); | ||
1402 | gpio_request(GPIO_FN_LCDD10, NULL); | ||
1403 | gpio_request(GPIO_FN_LCDD9, NULL); | ||
1404 | gpio_request(GPIO_FN_LCDD8, NULL); | ||
1405 | gpio_request(GPIO_FN_LCDD7, NULL); | ||
1406 | gpio_request(GPIO_FN_LCDD6, NULL); | ||
1407 | gpio_request(GPIO_FN_LCDD5, NULL); | ||
1408 | gpio_request(GPIO_FN_LCDD4, NULL); | ||
1409 | gpio_request(GPIO_FN_LCDD3, NULL); | ||
1410 | gpio_request(GPIO_FN_LCDD2, NULL); | ||
1411 | gpio_request(GPIO_FN_LCDD1, NULL); | ||
1412 | gpio_request(GPIO_FN_LCDD0, NULL); | ||
1413 | gpio_request(GPIO_FN_LCDDISP, NULL); | ||
1414 | gpio_request(GPIO_FN_LCDDCK, NULL); | ||
1415 | |||
1416 | /* backlight, off by default */ | 1444 | /* backlight, off by default */ |
1417 | gpio_request_one(31, GPIOF_OUT_INIT_LOW, NULL); | 1445 | gpio_request_one(31, GPIOF_OUT_INIT_LOW, NULL); |
1418 | 1446 | ||
1419 | gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */ | 1447 | gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */ |
1420 | 1448 | ||
1421 | /* USBHS0 */ | 1449 | /* USBHS0 */ |
1422 | gpio_request(GPIO_FN_VBUS0_0, NULL); | ||
1423 | gpio_request_pulldown(GPIO_PORT168CR); /* VBUS0_0 pull down */ | 1450 | gpio_request_pulldown(GPIO_PORT168CR); /* VBUS0_0 pull down */ |
1424 | 1451 | ||
1425 | /* USBHS1 */ | 1452 | /* USBHS1 */ |
1426 | gpio_request(GPIO_FN_VBUS0_1, NULL); | ||
1427 | gpio_request_pulldown(GPIO_PORT167CR); /* VBUS0_1 pull down */ | 1453 | gpio_request_pulldown(GPIO_PORT167CR); /* VBUS0_1 pull down */ |
1428 | gpio_request(GPIO_FN_IDIN_1_113, NULL); | ||
1429 | 1454 | ||
1430 | /* enable FSI2 port A (ak4643) */ | 1455 | /* FSI2 port A (ak4643) */ |
1431 | gpio_request(GPIO_FN_FSIAIBT, NULL); | ||
1432 | gpio_request(GPIO_FN_FSIAILR, NULL); | ||
1433 | gpio_request(GPIO_FN_FSIAISLD, NULL); | ||
1434 | gpio_request(GPIO_FN_FSIAOSLD, NULL); | ||
1435 | gpio_request_one(161, GPIOF_OUT_INIT_LOW, NULL); /* slave */ | 1456 | gpio_request_one(161, GPIOF_OUT_INIT_LOW, NULL); /* slave */ |
1436 | 1457 | ||
1437 | gpio_request(9, NULL); | 1458 | gpio_request(9, NULL); |
@@ -1441,8 +1462,7 @@ static void __init mackerel_init(void) | |||
1441 | 1462 | ||
1442 | intc_set_priority(IRQ_FSI, 3); /* irq priority FSI(3) > SMSC911X(2) */ | 1463 | intc_set_priority(IRQ_FSI, 3); /* irq priority FSI(3) > SMSC911X(2) */ |
1443 | 1464 | ||
1444 | /* setup FSI2 port B (HDMI) */ | 1465 | /* FSI2 port B (HDMI) */ |
1445 | gpio_request(GPIO_FN_FSIBCK, NULL); | ||
1446 | __raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */ | 1466 | __raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */ |
1447 | 1467 | ||
1448 | /* set SPU2 clock to 119.6 MHz */ | 1468 | /* set SPU2 clock to 119.6 MHz */ |
@@ -1452,68 +1472,15 @@ static void __init mackerel_init(void) | |||
1452 | clk_put(clk); | 1472 | clk_put(clk); |
1453 | } | 1473 | } |
1454 | 1474 | ||
1455 | /* enable Keypad */ | 1475 | /* Keypad */ |
1456 | gpio_request(GPIO_FN_IRQ9_42, NULL); | ||
1457 | irq_set_irq_type(IRQ9, IRQ_TYPE_LEVEL_HIGH); | 1476 | irq_set_irq_type(IRQ9, IRQ_TYPE_LEVEL_HIGH); |
1458 | 1477 | ||
1459 | /* enable Touchscreen */ | 1478 | /* Touchscreen */ |
1460 | gpio_request(GPIO_FN_IRQ7_40, NULL); | ||
1461 | irq_set_irq_type(IRQ7, IRQ_TYPE_LEVEL_LOW); | 1479 | irq_set_irq_type(IRQ7, IRQ_TYPE_LEVEL_LOW); |
1462 | 1480 | ||
1463 | /* enable Accelerometer */ | 1481 | /* Accelerometer */ |
1464 | gpio_request(GPIO_FN_IRQ21, NULL); | ||
1465 | irq_set_irq_type(IRQ21, IRQ_TYPE_LEVEL_HIGH); | 1482 | irq_set_irq_type(IRQ21, IRQ_TYPE_LEVEL_HIGH); |
1466 | 1483 | ||
1467 | /* SDHI0 PORT172 card-detect IRQ26 */ | ||
1468 | gpio_request(GPIO_FN_IRQ26_172, NULL); | ||
1469 | |||
1470 | /* FLCTL */ | ||
1471 | gpio_request(GPIO_FN_D0_NAF0, NULL); | ||
1472 | gpio_request(GPIO_FN_D1_NAF1, NULL); | ||
1473 | gpio_request(GPIO_FN_D2_NAF2, NULL); | ||
1474 | gpio_request(GPIO_FN_D3_NAF3, NULL); | ||
1475 | gpio_request(GPIO_FN_D4_NAF4, NULL); | ||
1476 | gpio_request(GPIO_FN_D5_NAF5, NULL); | ||
1477 | gpio_request(GPIO_FN_D6_NAF6, NULL); | ||
1478 | gpio_request(GPIO_FN_D7_NAF7, NULL); | ||
1479 | gpio_request(GPIO_FN_D8_NAF8, NULL); | ||
1480 | gpio_request(GPIO_FN_D9_NAF9, NULL); | ||
1481 | gpio_request(GPIO_FN_D10_NAF10, NULL); | ||
1482 | gpio_request(GPIO_FN_D11_NAF11, NULL); | ||
1483 | gpio_request(GPIO_FN_D12_NAF12, NULL); | ||
1484 | gpio_request(GPIO_FN_D13_NAF13, NULL); | ||
1485 | gpio_request(GPIO_FN_D14_NAF14, NULL); | ||
1486 | gpio_request(GPIO_FN_D15_NAF15, NULL); | ||
1487 | gpio_request(GPIO_FN_FCE0, NULL); | ||
1488 | gpio_request(GPIO_FN_WE0_FWE, NULL); | ||
1489 | gpio_request(GPIO_FN_FRB, NULL); | ||
1490 | gpio_request(GPIO_FN_A4_FOE, NULL); | ||
1491 | gpio_request(GPIO_FN_A5_FCDE, NULL); | ||
1492 | gpio_request(GPIO_FN_RD_FSC, NULL); | ||
1493 | |||
1494 | /* enable GPS module (GT-720F) */ | ||
1495 | gpio_request(GPIO_FN_SCIFA2_TXD1, NULL); | ||
1496 | gpio_request(GPIO_FN_SCIFA2_RXD1, NULL); | ||
1497 | |||
1498 | /* CEU */ | ||
1499 | gpio_request(GPIO_FN_VIO_CLK, NULL); | ||
1500 | gpio_request(GPIO_FN_VIO_VD, NULL); | ||
1501 | gpio_request(GPIO_FN_VIO_HD, NULL); | ||
1502 | gpio_request(GPIO_FN_VIO_FIELD, NULL); | ||
1503 | gpio_request(GPIO_FN_VIO_CKO, NULL); | ||
1504 | gpio_request(GPIO_FN_VIO_D7, NULL); | ||
1505 | gpio_request(GPIO_FN_VIO_D6, NULL); | ||
1506 | gpio_request(GPIO_FN_VIO_D5, NULL); | ||
1507 | gpio_request(GPIO_FN_VIO_D4, NULL); | ||
1508 | gpio_request(GPIO_FN_VIO_D3, NULL); | ||
1509 | gpio_request(GPIO_FN_VIO_D2, NULL); | ||
1510 | gpio_request(GPIO_FN_VIO_D1, NULL); | ||
1511 | gpio_request(GPIO_FN_VIO_D0, NULL); | ||
1512 | |||
1513 | /* HDMI */ | ||
1514 | gpio_request(GPIO_FN_HDMI_HPD, NULL); | ||
1515 | gpio_request(GPIO_FN_HDMI_CEC, NULL); | ||
1516 | |||
1517 | /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */ | 1484 | /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */ |
1518 | srcr4 = __raw_readl(SRCR4); | 1485 | srcr4 = __raw_readl(SRCR4); |
1519 | __raw_writel(srcr4 | (1 << 13), SRCR4); | 1486 | __raw_writel(srcr4 | (1 << 13), SRCR4); |
diff --git a/arch/arm/mach-shmobile/board-marzen.c b/arch/arm/mach-shmobile/board-marzen.c index b9594e911ce7..9112faef923b 100644 --- a/arch/arm/mach-shmobile/board-marzen.c +++ b/arch/arm/mach-shmobile/board-marzen.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/leds.h> | 28 | #include <linux/leds.h> |
29 | #include <linux/dma-mapping.h> | 29 | #include <linux/dma-mapping.h> |
30 | #include <linux/pinctrl/machine.h> | 30 | #include <linux/pinctrl/machine.h> |
31 | #include <linux/platform_data/gpio-rcar.h> | ||
31 | #include <linux/regulator/fixed.h> | 32 | #include <linux/regulator/fixed.h> |
32 | #include <linux/regulator/machine.h> | 33 | #include <linux/regulator/machine.h> |
33 | #include <linux/smsc911x.h> | 34 | #include <linux/smsc911x.h> |
@@ -173,15 +174,15 @@ static struct platform_device usb_phy_device = { | |||
173 | static struct gpio_led marzen_leds[] = { | 174 | static struct gpio_led marzen_leds[] = { |
174 | { | 175 | { |
175 | .name = "led2", | 176 | .name = "led2", |
176 | .gpio = 157, | 177 | .gpio = RCAR_GP_PIN(4, 29), |
177 | .default_state = LEDS_GPIO_DEFSTATE_ON, | 178 | .default_state = LEDS_GPIO_DEFSTATE_ON, |
178 | }, { | 179 | }, { |
179 | .name = "led3", | 180 | .name = "led3", |
180 | .gpio = 158, | 181 | .gpio = RCAR_GP_PIN(4, 30), |
181 | .default_state = LEDS_GPIO_DEFSTATE_ON, | 182 | .default_state = LEDS_GPIO_DEFSTATE_ON, |
182 | }, { | 183 | }, { |
183 | .name = "led4", | 184 | .name = "led4", |
184 | .gpio = 159, | 185 | .gpio = RCAR_GP_PIN(4, 31), |
185 | .default_state = LEDS_GPIO_DEFSTATE_ON, | 186 | .default_state = LEDS_GPIO_DEFSTATE_ON, |
186 | }, | 187 | }, |
187 | }; | 188 | }; |
diff --git a/arch/arm/mach-shmobile/clock-r8a73a4.c b/arch/arm/mach-shmobile/clock-r8a73a4.c index e710c00c3822..f6227bb10aca 100644 --- a/arch/arm/mach-shmobile/clock-r8a73a4.c +++ b/arch/arm/mach-shmobile/clock-r8a73a4.c | |||
@@ -22,15 +22,43 @@ | |||
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/sh_clk.h> | 23 | #include <linux/sh_clk.h> |
24 | #include <linux/clkdev.h> | 24 | #include <linux/clkdev.h> |
25 | #include <mach/clock.h> | ||
25 | #include <mach/common.h> | 26 | #include <mach/common.h> |
26 | 27 | ||
27 | #define CPG_BASE 0xe6150000 | 28 | #define CPG_BASE 0xe6150000 |
28 | #define CPG_LEN 0x270 | 29 | #define CPG_LEN 0x270 |
29 | 30 | ||
30 | #define MPCKCR 0xe6150080 | ||
31 | #define SMSTPCR2 0xe6150138 | 31 | #define SMSTPCR2 0xe6150138 |
32 | #define SMSTPCR5 0xe6150144 | 32 | #define SMSTPCR5 0xe6150144 |
33 | 33 | ||
34 | #define FRQCRA 0xE6150000 | ||
35 | #define FRQCRB 0xE6150004 | ||
36 | #define VCLKCR1 0xE6150008 | ||
37 | #define VCLKCR2 0xE615000C | ||
38 | #define VCLKCR3 0xE615001C | ||
39 | #define VCLKCR4 0xE6150014 | ||
40 | #define VCLKCR5 0xE6150034 | ||
41 | #define ZBCKCR 0xE6150010 | ||
42 | #define SD0CKCR 0xE6150074 | ||
43 | #define SD1CKCR 0xE6150078 | ||
44 | #define SD2CKCR 0xE615007C | ||
45 | #define MMC0CKCR 0xE6150240 | ||
46 | #define MMC1CKCR 0xE6150244 | ||
47 | #define FSIACKCR 0xE6150018 | ||
48 | #define FSIBCKCR 0xE6150090 | ||
49 | #define MPCKCR 0xe6150080 | ||
50 | #define SPUVCKCR 0xE6150094 | ||
51 | #define HSICKCR 0xE615026C | ||
52 | #define M4CKCR 0xE6150098 | ||
53 | #define PLLECR 0xE61500D0 | ||
54 | #define PLL1CR 0xE6150028 | ||
55 | #define PLL2CR 0xE615002C | ||
56 | #define PLL2SCR 0xE61501F4 | ||
57 | #define PLL2HCR 0xE61501E4 | ||
58 | #define CKSCR 0xE61500C0 | ||
59 | |||
60 | #define CPG_MAP(o) ((o - CPG_BASE) + cpg_mapping.base) | ||
61 | |||
34 | static struct clk_mapping cpg_mapping = { | 62 | static struct clk_mapping cpg_mapping = { |
35 | .phys = CPG_BASE, | 63 | .phys = CPG_BASE, |
36 | .len = CPG_LEN, | 64 | .len = CPG_LEN, |
@@ -51,29 +79,326 @@ static struct clk extal2_clk = { | |||
51 | .mapping = &cpg_mapping, | 79 | .mapping = &cpg_mapping, |
52 | }; | 80 | }; |
53 | 81 | ||
82 | static struct sh_clk_ops followparent_clk_ops = { | ||
83 | .recalc = followparent_recalc, | ||
84 | }; | ||
85 | |||
86 | static struct clk main_clk = { | ||
87 | /* .parent will be set r8a73a4_clock_init */ | ||
88 | .ops = &followparent_clk_ops, | ||
89 | }; | ||
90 | |||
91 | SH_CLK_RATIO(div2, 1, 2); | ||
92 | SH_CLK_RATIO(div4, 1, 4); | ||
93 | |||
94 | SH_FIXED_RATIO_CLK(main_div2_clk, main_clk, div2); | ||
95 | SH_FIXED_RATIO_CLK(extal1_div2_clk, extal1_clk, div2); | ||
96 | SH_FIXED_RATIO_CLK(extal2_div2_clk, extal2_clk, div2); | ||
97 | SH_FIXED_RATIO_CLK(extal2_div4_clk, extal2_clk, div4); | ||
98 | |||
99 | /* External FSIACK/FSIBCK clock */ | ||
100 | static struct clk fsiack_clk = { | ||
101 | }; | ||
102 | |||
103 | static struct clk fsibck_clk = { | ||
104 | }; | ||
105 | |||
106 | /* | ||
107 | * PLL clocks | ||
108 | */ | ||
109 | static struct clk *pll_parent_main[] = { | ||
110 | [0] = &main_clk, | ||
111 | [1] = &main_div2_clk | ||
112 | }; | ||
113 | |||
114 | static struct clk *pll_parent_main_extal[8] = { | ||
115 | [0] = &main_div2_clk, | ||
116 | [1] = &extal2_div2_clk, | ||
117 | [3] = &extal2_div4_clk, | ||
118 | [4] = &main_clk, | ||
119 | [5] = &extal2_clk, | ||
120 | }; | ||
121 | |||
122 | static unsigned long pll_recalc(struct clk *clk) | ||
123 | { | ||
124 | unsigned long mult = 1; | ||
125 | |||
126 | if (ioread32(CPG_MAP(PLLECR)) & (1 << clk->enable_bit)) | ||
127 | mult = (((ioread32(clk->mapped_reg) >> 24) & 0x7f) + 1); | ||
128 | |||
129 | return clk->parent->rate * mult; | ||
130 | } | ||
131 | |||
132 | static int pll_set_parent(struct clk *clk, struct clk *parent) | ||
133 | { | ||
134 | u32 val; | ||
135 | int i, ret; | ||
136 | |||
137 | if (!clk->parent_table || !clk->parent_num) | ||
138 | return -EINVAL; | ||
139 | |||
140 | /* Search the parent */ | ||
141 | for (i = 0; i < clk->parent_num; i++) | ||
142 | if (clk->parent_table[i] == parent) | ||
143 | break; | ||
144 | |||
145 | if (i == clk->parent_num) | ||
146 | return -ENODEV; | ||
147 | |||
148 | ret = clk_reparent(clk, parent); | ||
149 | if (ret < 0) | ||
150 | return ret; | ||
151 | |||
152 | val = ioread32(clk->mapped_reg) & | ||
153 | ~(((1 << clk->src_width) - 1) << clk->src_shift); | ||
154 | |||
155 | iowrite32(val | i << clk->src_shift, clk->mapped_reg); | ||
156 | |||
157 | return 0; | ||
158 | } | ||
159 | |||
160 | static struct sh_clk_ops pll_clk_ops = { | ||
161 | .recalc = pll_recalc, | ||
162 | .set_parent = pll_set_parent, | ||
163 | }; | ||
164 | |||
165 | #define PLL_CLOCK(name, p, pt, w, s, reg, e) \ | ||
166 | static struct clk name = { \ | ||
167 | .ops = &pll_clk_ops, \ | ||
168 | .flags = CLK_ENABLE_ON_INIT, \ | ||
169 | .parent = p, \ | ||
170 | .parent_table = pt, \ | ||
171 | .parent_num = ARRAY_SIZE(pt), \ | ||
172 | .src_width = w, \ | ||
173 | .src_shift = s, \ | ||
174 | .enable_reg = (void __iomem *)reg, \ | ||
175 | .enable_bit = e, \ | ||
176 | .mapping = &cpg_mapping, \ | ||
177 | } | ||
178 | |||
179 | PLL_CLOCK(pll1_clk, &main_clk, pll_parent_main, 1, 7, PLL1CR, 1); | ||
180 | PLL_CLOCK(pll2_clk, &main_div2_clk, pll_parent_main_extal, 3, 5, PLL2CR, 2); | ||
181 | PLL_CLOCK(pll2s_clk, &main_div2_clk, pll_parent_main_extal, 3, 5, PLL2SCR, 4); | ||
182 | PLL_CLOCK(pll2h_clk, &main_div2_clk, pll_parent_main_extal, 3, 5, PLL2HCR, 5); | ||
183 | |||
184 | SH_FIXED_RATIO_CLK(pll1_div2_clk, pll1_clk, div2); | ||
185 | |||
54 | static struct clk *main_clks[] = { | 186 | static struct clk *main_clks[] = { |
55 | &extalr_clk, | 187 | &extalr_clk, |
56 | &extal1_clk, | 188 | &extal1_clk, |
189 | &extal1_div2_clk, | ||
57 | &extal2_clk, | 190 | &extal2_clk, |
191 | &extal2_div2_clk, | ||
192 | &extal2_div4_clk, | ||
193 | &main_clk, | ||
194 | &main_div2_clk, | ||
195 | &fsiack_clk, | ||
196 | &fsibck_clk, | ||
197 | &pll1_clk, | ||
198 | &pll1_div2_clk, | ||
199 | &pll2_clk, | ||
200 | &pll2s_clk, | ||
201 | &pll2h_clk, | ||
202 | }; | ||
203 | |||
204 | /* DIV4 */ | ||
205 | static void div4_kick(struct clk *clk) | ||
206 | { | ||
207 | unsigned long value; | ||
208 | |||
209 | /* set KICK bit in FRQCRB to update hardware setting */ | ||
210 | value = ioread32(CPG_MAP(FRQCRB)); | ||
211 | value |= (1 << 31); | ||
212 | iowrite32(value, CPG_MAP(FRQCRB)); | ||
213 | } | ||
214 | |||
215 | static int divisors[] = { 2, 3, 4, 6, 8, 12, 16, 18, 24, 0, 36, 48, 10}; | ||
216 | |||
217 | static struct clk_div_mult_table div4_div_mult_table = { | ||
218 | .divisors = divisors, | ||
219 | .nr_divisors = ARRAY_SIZE(divisors), | ||
220 | }; | ||
221 | |||
222 | static struct clk_div4_table div4_table = { | ||
223 | .div_mult_table = &div4_div_mult_table, | ||
224 | .kick = div4_kick, | ||
225 | }; | ||
226 | |||
227 | enum { | ||
228 | DIV4_I, DIV4_M3, DIV4_B, DIV4_M1, DIV4_M2, | ||
229 | DIV4_ZX, DIV4_ZS, DIV4_HP, | ||
230 | DIV4_NR }; | ||
231 | |||
232 | static struct clk div4_clks[DIV4_NR] = { | ||
233 | [DIV4_I] = SH_CLK_DIV4(&pll1_clk, FRQCRA, 20, 0x0dff, CLK_ENABLE_ON_INIT), | ||
234 | [DIV4_M3] = SH_CLK_DIV4(&pll1_clk, FRQCRA, 12, 0x1dff, CLK_ENABLE_ON_INIT), | ||
235 | [DIV4_B] = SH_CLK_DIV4(&pll1_clk, FRQCRA, 8, 0x0dff, CLK_ENABLE_ON_INIT), | ||
236 | [DIV4_M1] = SH_CLK_DIV4(&pll1_clk, FRQCRA, 4, 0x1dff, 0), | ||
237 | [DIV4_M2] = SH_CLK_DIV4(&pll1_clk, FRQCRA, 0, 0x1dff, 0), | ||
238 | [DIV4_ZX] = SH_CLK_DIV4(&pll1_clk, FRQCRB, 12, 0x0dff, 0), | ||
239 | [DIV4_ZS] = SH_CLK_DIV4(&pll1_clk, FRQCRB, 8, 0x0dff, 0), | ||
240 | [DIV4_HP] = SH_CLK_DIV4(&pll1_clk, FRQCRB, 4, 0x0dff, 0), | ||
58 | }; | 241 | }; |
59 | 242 | ||
60 | enum { | 243 | enum { |
244 | DIV6_ZB, | ||
245 | DIV6_SDHI0, DIV6_SDHI1, DIV6_SDHI2, | ||
246 | DIV6_MMC0, DIV6_MMC1, | ||
247 | DIV6_VCK1, DIV6_VCK2, DIV6_VCK3, DIV6_VCK4, DIV6_VCK5, | ||
248 | DIV6_FSIA, DIV6_FSIB, | ||
249 | DIV6_MP, DIV6_M4, DIV6_HSI, DIV6_SPUV, | ||
250 | DIV6_NR }; | ||
251 | |||
252 | static struct clk *div6_parents[8] = { | ||
253 | [0] = &pll1_div2_clk, | ||
254 | [1] = &pll2s_clk, | ||
255 | [3] = &extal2_clk, | ||
256 | [4] = &main_div2_clk, | ||
257 | [6] = &extalr_clk, | ||
258 | }; | ||
259 | |||
260 | static struct clk *fsia_parents[4] = { | ||
261 | [0] = &pll1_div2_clk, | ||
262 | [1] = &pll2s_clk, | ||
263 | [2] = &fsiack_clk, | ||
264 | }; | ||
265 | |||
266 | static struct clk *fsib_parents[4] = { | ||
267 | [0] = &pll1_div2_clk, | ||
268 | [1] = &pll2s_clk, | ||
269 | [2] = &fsibck_clk, | ||
270 | }; | ||
271 | |||
272 | static struct clk *mp_parents[4] = { | ||
273 | [0] = &pll1_div2_clk, | ||
274 | [1] = &pll2s_clk, | ||
275 | [2] = &extal2_clk, | ||
276 | [3] = &extal2_clk, | ||
277 | }; | ||
278 | |||
279 | static struct clk *m4_parents[2] = { | ||
280 | [0] = &pll2s_clk, | ||
281 | }; | ||
282 | |||
283 | static struct clk *hsi_parents[4] = { | ||
284 | [0] = &pll2h_clk, | ||
285 | [1] = &pll1_div2_clk, | ||
286 | [3] = &pll2s_clk, | ||
287 | }; | ||
288 | |||
289 | /*** FIXME *** | ||
290 | * SH_CLK_DIV6_EXT() macro doesn't care .mapping | ||
291 | * but, it is necessary on R-Car (= ioremap() base CPG) | ||
292 | * The difference between | ||
293 | * SH_CLK_DIV6_EXT() <--> SH_CLK_MAP_DIV6_EXT() | ||
294 | * is only .mapping | ||
295 | */ | ||
296 | #define SH_CLK_MAP_DIV6_EXT(_reg, _flags, _parents, \ | ||
297 | _num_parents, _src_shift, _src_width) \ | ||
298 | { \ | ||
299 | .enable_reg = (void __iomem *)_reg, \ | ||
300 | .enable_bit = 0, /* unused */ \ | ||
301 | .flags = _flags | CLK_MASK_DIV_ON_DISABLE, \ | ||
302 | .div_mask = SH_CLK_DIV6_MSK, \ | ||
303 | .parent_table = _parents, \ | ||
304 | .parent_num = _num_parents, \ | ||
305 | .src_shift = _src_shift, \ | ||
306 | .src_width = _src_width, \ | ||
307 | .mapping = &cpg_mapping, \ | ||
308 | } | ||
309 | |||
310 | static struct clk div6_clks[DIV6_NR] = { | ||
311 | [DIV6_ZB] = SH_CLK_MAP_DIV6_EXT(ZBCKCR, CLK_ENABLE_ON_INIT, | ||
312 | div6_parents, 2, 7, 1), | ||
313 | [DIV6_SDHI0] = SH_CLK_MAP_DIV6_EXT(SD0CKCR, 0, | ||
314 | div6_parents, 2, 6, 2), | ||
315 | [DIV6_SDHI1] = SH_CLK_MAP_DIV6_EXT(SD1CKCR, 0, | ||
316 | div6_parents, 2, 6, 2), | ||
317 | [DIV6_SDHI2] = SH_CLK_MAP_DIV6_EXT(SD2CKCR, 0, | ||
318 | div6_parents, 2, 6, 2), | ||
319 | [DIV6_MMC0] = SH_CLK_MAP_DIV6_EXT(MMC0CKCR, 0, | ||
320 | div6_parents, 2, 6, 2), | ||
321 | [DIV6_MMC1] = SH_CLK_MAP_DIV6_EXT(MMC1CKCR, 0, | ||
322 | div6_parents, 2, 6, 2), | ||
323 | [DIV6_VCK1] = SH_CLK_MAP_DIV6_EXT(VCLKCR1, 0, /* didn't care bit[6-7] */ | ||
324 | div6_parents, ARRAY_SIZE(div6_parents), 12, 3), | ||
325 | [DIV6_VCK2] = SH_CLK_MAP_DIV6_EXT(VCLKCR2, 0, /* didn't care bit[6-7] */ | ||
326 | div6_parents, ARRAY_SIZE(div6_parents), 12, 3), | ||
327 | [DIV6_VCK3] = SH_CLK_MAP_DIV6_EXT(VCLKCR3, 0, /* didn't care bit[6-7] */ | ||
328 | div6_parents, ARRAY_SIZE(div6_parents), 12, 3), | ||
329 | [DIV6_VCK4] = SH_CLK_MAP_DIV6_EXT(VCLKCR4, 0, /* didn't care bit[6-7] */ | ||
330 | div6_parents, ARRAY_SIZE(div6_parents), 12, 3), | ||
331 | [DIV6_VCK5] = SH_CLK_MAP_DIV6_EXT(VCLKCR5, 0, /* didn't care bit[6-7] */ | ||
332 | div6_parents, ARRAY_SIZE(div6_parents), 12, 3), | ||
333 | [DIV6_FSIA] = SH_CLK_MAP_DIV6_EXT(FSIACKCR, 0, | ||
334 | fsia_parents, ARRAY_SIZE(fsia_parents), 6, 2), | ||
335 | [DIV6_FSIB] = SH_CLK_MAP_DIV6_EXT(FSIBCKCR, 0, | ||
336 | fsib_parents, ARRAY_SIZE(fsib_parents), 6, 2), | ||
337 | [DIV6_MP] = SH_CLK_MAP_DIV6_EXT(MPCKCR, 0, /* it needs bit[9-11] control */ | ||
338 | mp_parents, ARRAY_SIZE(mp_parents), 6, 2), | ||
339 | /* pll2s will be selected always for M4 */ | ||
340 | [DIV6_M4] = SH_CLK_MAP_DIV6_EXT(M4CKCR, 0, /* it needs bit[9] control */ | ||
341 | m4_parents, ARRAY_SIZE(m4_parents), 6, 1), | ||
342 | [DIV6_HSI] = SH_CLK_MAP_DIV6_EXT(HSICKCR, 0, /* it needs bit[9] control */ | ||
343 | hsi_parents, ARRAY_SIZE(hsi_parents), 6, 2), | ||
344 | [DIV6_SPUV] = SH_CLK_MAP_DIV6_EXT(SPUVCKCR, 0, | ||
345 | mp_parents, ARRAY_SIZE(mp_parents), 6, 2), | ||
346 | }; | ||
347 | |||
348 | /* MSTP */ | ||
349 | enum { | ||
61 | MSTP217, MSTP216, MSTP207, MSTP206, MSTP204, MSTP203, | 350 | MSTP217, MSTP216, MSTP207, MSTP206, MSTP204, MSTP203, |
62 | MSTP522, | 351 | MSTP522, |
63 | MSTP_NR | 352 | MSTP_NR |
64 | }; | 353 | }; |
65 | 354 | ||
66 | static struct clk mstp_clks[MSTP_NR] = { | 355 | static struct clk mstp_clks[MSTP_NR] = { |
67 | [MSTP204] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 4, 0), /* SCIFA0 */ | 356 | [MSTP204] = SH_CLK_MSTP32(&div6_clks[DIV6_MP], SMSTPCR2, 4, 0), /* SCIFA0 */ |
68 | [MSTP203] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 3, 0), /* SCIFA1 */ | 357 | [MSTP203] = SH_CLK_MSTP32(&div6_clks[DIV6_MP], SMSTPCR2, 3, 0), /* SCIFA1 */ |
69 | [MSTP206] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 6, 0), /* SCIFB0 */ | 358 | [MSTP206] = SH_CLK_MSTP32(&div6_clks[DIV6_MP], SMSTPCR2, 6, 0), /* SCIFB0 */ |
70 | [MSTP207] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 7, 0), /* SCIFB1 */ | 359 | [MSTP207] = SH_CLK_MSTP32(&div6_clks[DIV6_MP], SMSTPCR2, 7, 0), /* SCIFB1 */ |
71 | [MSTP216] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 16, 0), /* SCIFB2 */ | 360 | [MSTP216] = SH_CLK_MSTP32(&div6_clks[DIV6_MP], SMSTPCR2, 16, 0), /* SCIFB2 */ |
72 | [MSTP217] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 17, 0), /* SCIFB3 */ | 361 | [MSTP217] = SH_CLK_MSTP32(&div6_clks[DIV6_MP], SMSTPCR2, 17, 0), /* SCIFB3 */ |
73 | [MSTP522] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR5, 22, 0), /* Thermal */ | 362 | [MSTP522] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR5, 22, 0), /* Thermal */ |
74 | }; | 363 | }; |
75 | 364 | ||
76 | static struct clk_lookup lookups[] = { | 365 | static struct clk_lookup lookups[] = { |
366 | /* main clock */ | ||
367 | CLKDEV_CON_ID("extal1", &extal1_clk), | ||
368 | CLKDEV_CON_ID("extal1_div2", &extal1_div2_clk), | ||
369 | CLKDEV_CON_ID("extal2", &extal2_clk), | ||
370 | CLKDEV_CON_ID("extal2_div2", &extal2_div2_clk), | ||
371 | CLKDEV_CON_ID("extal2_div4", &extal2_div4_clk), | ||
372 | CLKDEV_CON_ID("fsiack", &fsiack_clk), | ||
373 | CLKDEV_CON_ID("fsibck", &fsibck_clk), | ||
374 | |||
375 | /* pll clock */ | ||
376 | CLKDEV_CON_ID("pll1", &pll1_clk), | ||
377 | CLKDEV_CON_ID("pll1_div2", &pll1_div2_clk), | ||
378 | CLKDEV_CON_ID("pll2", &pll2_clk), | ||
379 | CLKDEV_CON_ID("pll2s", &pll2s_clk), | ||
380 | CLKDEV_CON_ID("pll2h", &pll2h_clk), | ||
381 | |||
382 | /* DIV6 */ | ||
383 | CLKDEV_CON_ID("zb", &div6_clks[DIV6_ZB]), | ||
384 | CLKDEV_CON_ID("sdhi0", &div6_clks[DIV6_SDHI0]), | ||
385 | CLKDEV_CON_ID("sdhi1", &div6_clks[DIV6_SDHI1]), | ||
386 | CLKDEV_CON_ID("sdhi2", &div6_clks[DIV6_SDHI2]), | ||
387 | CLKDEV_CON_ID("mmc0", &div6_clks[DIV6_MMC0]), | ||
388 | CLKDEV_CON_ID("mmc1", &div6_clks[DIV6_MMC1]), | ||
389 | CLKDEV_CON_ID("vck1", &div6_clks[DIV6_VCK1]), | ||
390 | CLKDEV_CON_ID("vck2", &div6_clks[DIV6_VCK2]), | ||
391 | CLKDEV_CON_ID("vck3", &div6_clks[DIV6_VCK3]), | ||
392 | CLKDEV_CON_ID("vck4", &div6_clks[DIV6_VCK4]), | ||
393 | CLKDEV_CON_ID("vck5", &div6_clks[DIV6_VCK5]), | ||
394 | CLKDEV_CON_ID("fsia", &div6_clks[DIV6_FSIA]), | ||
395 | CLKDEV_CON_ID("fsib", &div6_clks[DIV6_FSIB]), | ||
396 | CLKDEV_CON_ID("mp", &div6_clks[DIV6_MP]), | ||
397 | CLKDEV_CON_ID("m4", &div6_clks[DIV6_M4]), | ||
398 | CLKDEV_CON_ID("hsi", &div6_clks[DIV6_HSI]), | ||
399 | CLKDEV_CON_ID("spuv", &div6_clks[DIV6_SPUV]), | ||
400 | |||
401 | /* MSTP */ | ||
77 | CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP204]), | 402 | CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP204]), |
78 | CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP203]), | 403 | CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP203]), |
79 | CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[MSTP206]), | 404 | CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[MSTP206]), |
@@ -88,22 +413,40 @@ static struct clk_lookup lookups[] = { | |||
88 | 413 | ||
89 | void __init r8a73a4_clock_init(void) | 414 | void __init r8a73a4_clock_init(void) |
90 | { | 415 | { |
91 | void __iomem *cpg_base, *reg; | 416 | void __iomem *reg; |
92 | int k, ret = 0; | 417 | int k, ret = 0; |
418 | u32 ckscr; | ||
419 | |||
420 | reg = ioremap_nocache(CKSCR, PAGE_SIZE); | ||
421 | BUG_ON(!reg); | ||
422 | ckscr = ioread32(reg); | ||
423 | iounmap(reg); | ||
93 | 424 | ||
94 | /* fix MPCLK to EXTAL2 for now. | 425 | switch ((ckscr >> 28) & 0x3) { |
95 | * this is needed until more detailed clock topology is supported | 426 | case 0: |
96 | */ | 427 | main_clk.parent = &extal1_clk; |
97 | cpg_base = ioremap_nocache(CPG_BASE, CPG_LEN); | 428 | break; |
98 | BUG_ON(!cpg_base); | 429 | case 1: |
99 | reg = cpg_base + (MPCKCR - CPG_BASE); | 430 | main_clk.parent = &extal1_div2_clk; |
100 | iowrite32(ioread32(reg) | 1 << 7 | 0x0c, reg); /* set CKSEL */ | 431 | break; |
101 | iounmap(cpg_base); | 432 | case 2: |
433 | main_clk.parent = &extal2_clk; | ||
434 | break; | ||
435 | case 3: | ||
436 | main_clk.parent = &extal2_div2_clk; | ||
437 | break; | ||
438 | } | ||
102 | 439 | ||
103 | for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) | 440 | for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) |
104 | ret = clk_register(main_clks[k]); | 441 | ret = clk_register(main_clks[k]); |
105 | 442 | ||
106 | if (!ret) | 443 | if (!ret) |
444 | ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table); | ||
445 | |||
446 | if (!ret) | ||
447 | ret = sh_clk_div6_reparent_register(div6_clks, DIV6_NR); | ||
448 | |||
449 | if (!ret) | ||
107 | ret = sh_clk_mstp_register(mstp_clks, MSTP_NR); | 450 | ret = sh_clk_mstp_register(mstp_clks, MSTP_NR); |
108 | 451 | ||
109 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 452 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
diff --git a/arch/arm/mach-shmobile/clock-r8a7740.c b/arch/arm/mach-shmobile/clock-r8a7740.c index c0d39aa6de50..7fd32d604e34 100644 --- a/arch/arm/mach-shmobile/clock-r8a7740.c +++ b/arch/arm/mach-shmobile/clock-r8a7740.c | |||
@@ -266,7 +266,7 @@ static struct clk fsiack_clk = { | |||
266 | static struct clk fsibck_clk = { | 266 | static struct clk fsibck_clk = { |
267 | }; | 267 | }; |
268 | 268 | ||
269 | struct clk *main_clks[] = { | 269 | static struct clk *main_clks[] = { |
270 | &extalr_clk, | 270 | &extalr_clk, |
271 | &extal1_clk, | 271 | &extal1_clk, |
272 | &extal2_clk, | 272 | &extal2_clk, |
@@ -317,7 +317,7 @@ enum { | |||
317 | DIV4_NR | 317 | DIV4_NR |
318 | }; | 318 | }; |
319 | 319 | ||
320 | struct clk div4_clks[DIV4_NR] = { | 320 | static struct clk div4_clks[DIV4_NR] = { |
321 | [DIV4_I] = SH_CLK_DIV4(&pllc1_clk, FRQCRA, 20, 0x6fff, CLK_ENABLE_ON_INIT), | 321 | [DIV4_I] = SH_CLK_DIV4(&pllc1_clk, FRQCRA, 20, 0x6fff, CLK_ENABLE_ON_INIT), |
322 | [DIV4_ZG] = SH_CLK_DIV4(&pllc1_clk, FRQCRA, 16, 0x6fff, CLK_ENABLE_ON_INIT), | 322 | [DIV4_ZG] = SH_CLK_DIV4(&pllc1_clk, FRQCRA, 16, 0x6fff, CLK_ENABLE_ON_INIT), |
323 | [DIV4_B] = SH_CLK_DIV4(&pllc1_clk, FRQCRA, 8, 0x6fff, CLK_ENABLE_ON_INIT), | 323 | [DIV4_B] = SH_CLK_DIV4(&pllc1_clk, FRQCRA, 8, 0x6fff, CLK_ENABLE_ON_INIT), |
@@ -461,7 +461,7 @@ enum { | |||
461 | 461 | ||
462 | MSTP329, MSTP328, MSTP323, MSTP320, | 462 | MSTP329, MSTP328, MSTP323, MSTP320, |
463 | MSTP314, MSTP313, MSTP312, | 463 | MSTP314, MSTP313, MSTP312, |
464 | MSTP309, | 464 | MSTP309, MSTP304, |
465 | 465 | ||
466 | MSTP416, MSTP415, MSTP407, MSTP406, | 466 | MSTP416, MSTP415, MSTP407, MSTP406, |
467 | 467 | ||
@@ -499,6 +499,7 @@ static struct clk mstp_clks[MSTP_NR] = { | |||
499 | [MSTP313] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR3, 13, 0), /* SDHI1 */ | 499 | [MSTP313] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR3, 13, 0), /* SDHI1 */ |
500 | [MSTP312] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMC */ | 500 | [MSTP312] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMC */ |
501 | [MSTP309] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR3, 9, 0), /* GEther */ | 501 | [MSTP309] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR3, 9, 0), /* GEther */ |
502 | [MSTP304] = SH_CLK_MSTP32(&div4_clks[DIV4_CP], SMSTPCR3, 4, 0), /* TPU0 */ | ||
502 | 503 | ||
503 | [MSTP416] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR4, 16, 0), /* USBHOST */ | 504 | [MSTP416] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR4, 16, 0), /* USBHOST */ |
504 | [MSTP415] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR4, 15, 0), /* SDHI2 */ | 505 | [MSTP415] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR4, 15, 0), /* SDHI2 */ |
@@ -551,6 +552,7 @@ static struct clk_lookup lookups[] = { | |||
551 | CLKDEV_DEV_ID("sh_tmu.4", &mstp_clks[MSTP111]), | 552 | CLKDEV_DEV_ID("sh_tmu.4", &mstp_clks[MSTP111]), |
552 | CLKDEV_DEV_ID("sh_tmu.5", &mstp_clks[MSTP111]), | 553 | CLKDEV_DEV_ID("sh_tmu.5", &mstp_clks[MSTP111]), |
553 | CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP116]), | 554 | CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP116]), |
555 | CLKDEV_DEV_ID("fff20000.i2c", &mstp_clks[MSTP116]), | ||
554 | CLKDEV_DEV_ID("sh_mobile_lcdc_fb.1", &mstp_clks[MSTP117]), | 556 | CLKDEV_DEV_ID("sh_mobile_lcdc_fb.1", &mstp_clks[MSTP117]), |
555 | CLKDEV_DEV_ID("sh_tmu.0", &mstp_clks[MSTP125]), | 557 | CLKDEV_DEV_ID("sh_tmu.0", &mstp_clks[MSTP125]), |
556 | CLKDEV_DEV_ID("sh_tmu.1", &mstp_clks[MSTP125]), | 558 | CLKDEV_DEV_ID("sh_tmu.1", &mstp_clks[MSTP125]), |
@@ -584,6 +586,7 @@ static struct clk_lookup lookups[] = { | |||
584 | CLKDEV_DEV_ID("sh_cmt.10", &mstp_clks[MSTP329]), | 586 | CLKDEV_DEV_ID("sh_cmt.10", &mstp_clks[MSTP329]), |
585 | CLKDEV_DEV_ID("sh_fsi2", &mstp_clks[MSTP328]), | 587 | CLKDEV_DEV_ID("sh_fsi2", &mstp_clks[MSTP328]), |
586 | CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP323]), | 588 | CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP323]), |
589 | CLKDEV_DEV_ID("e6c20000.i2c", &mstp_clks[MSTP323]), | ||
587 | CLKDEV_DEV_ID("renesas_usbhs", &mstp_clks[MSTP320]), | 590 | CLKDEV_DEV_ID("renesas_usbhs", &mstp_clks[MSTP320]), |
588 | CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]), | 591 | CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]), |
589 | CLKDEV_DEV_ID("e6850000.sdhi", &mstp_clks[MSTP314]), | 592 | CLKDEV_DEV_ID("e6850000.sdhi", &mstp_clks[MSTP314]), |
@@ -592,6 +595,8 @@ static struct clk_lookup lookups[] = { | |||
592 | CLKDEV_DEV_ID("sh_mmcif", &mstp_clks[MSTP312]), | 595 | CLKDEV_DEV_ID("sh_mmcif", &mstp_clks[MSTP312]), |
593 | CLKDEV_DEV_ID("e6bd0000.mmcif", &mstp_clks[MSTP312]), | 596 | CLKDEV_DEV_ID("e6bd0000.mmcif", &mstp_clks[MSTP312]), |
594 | CLKDEV_DEV_ID("sh-eth", &mstp_clks[MSTP309]), | 597 | CLKDEV_DEV_ID("sh-eth", &mstp_clks[MSTP309]), |
598 | CLKDEV_DEV_ID("e9a00000.sh-eth", &mstp_clks[MSTP309]), | ||
599 | CLKDEV_DEV_ID("renesas_tpu_pwm", &mstp_clks[MSTP304]), | ||
595 | 600 | ||
596 | CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP415]), | 601 | CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP415]), |
597 | CLKDEV_DEV_ID("e6870000.sdhi", &mstp_clks[MSTP415]), | 602 | CLKDEV_DEV_ID("e6870000.sdhi", &mstp_clks[MSTP415]), |
diff --git a/arch/arm/mach-shmobile/clock-r8a7778.c b/arch/arm/mach-shmobile/clock-r8a7778.c index cd6855290b1f..b251e4d0924d 100644 --- a/arch/arm/mach-shmobile/clock-r8a7778.c +++ b/arch/arm/mach-shmobile/clock-r8a7778.c | |||
@@ -23,9 +23,23 @@ | |||
23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 | */ | 24 | */ |
25 | 25 | ||
26 | /* | ||
27 | * MD MD MD MD PLLA PLLB EXTAL clki clkz | ||
28 | * 19 18 12 11 (HMz) (MHz) (MHz) | ||
29 | *---------------------------------------------------------------------------- | ||
30 | * 1 0 0 0 x21 x21 38.00 800 800 | ||
31 | * 1 0 0 1 x24 x24 33.33 800 800 | ||
32 | * 1 0 1 0 x28 x28 28.50 800 800 | ||
33 | * 1 0 1 1 x32 x32 25.00 800 800 | ||
34 | * 1 1 0 1 x24 x21 33.33 800 700 | ||
35 | * 1 1 1 0 x28 x21 28.50 800 600 | ||
36 | * 1 1 1 1 x32 x24 25.00 800 600 | ||
37 | */ | ||
38 | |||
26 | #include <linux/io.h> | 39 | #include <linux/io.h> |
27 | #include <linux/sh_clk.h> | 40 | #include <linux/sh_clk.h> |
28 | #include <linux/clkdev.h> | 41 | #include <linux/clkdev.h> |
42 | #include <mach/clock.h> | ||
29 | #include <mach/common.h> | 43 | #include <mach/common.h> |
30 | 44 | ||
31 | #define MSTPCR0 IOMEM(0xffc80030) | 45 | #define MSTPCR0 IOMEM(0xffc80030) |
@@ -37,6 +51,9 @@ | |||
37 | #define MSTPCR4 IOMEM(0xffc80050) | 51 | #define MSTPCR4 IOMEM(0xffc80050) |
38 | #define MSTPCR5 IOMEM(0xffc80054) | 52 | #define MSTPCR5 IOMEM(0xffc80054) |
39 | #define MSTPCR6 IOMEM(0xffc80058) | 53 | #define MSTPCR6 IOMEM(0xffc80058) |
54 | #define MODEMR 0xFFCC0020 | ||
55 | |||
56 | #define MD(nr) BIT(nr) | ||
40 | 57 | ||
41 | /* ioremap() through clock mapping mandatory to avoid | 58 | /* ioremap() through clock mapping mandatory to avoid |
42 | * collision with ARM coherent DMA virtual memory range. | 59 | * collision with ARM coherent DMA virtual memory range. |
@@ -47,36 +64,71 @@ static struct clk_mapping cpg_mapping = { | |||
47 | .len = 0x80, | 64 | .len = 0x80, |
48 | }; | 65 | }; |
49 | 66 | ||
50 | static struct clk clkp = { | 67 | static struct clk extal_clk = { |
51 | .rate = 62500000, /* FIXME: shortcut */ | 68 | /* .rate will be updated on r8a7778_clock_init() */ |
52 | .flags = CLK_ENABLE_ON_INIT, | ||
53 | .mapping = &cpg_mapping, | 69 | .mapping = &cpg_mapping, |
54 | }; | 70 | }; |
55 | 71 | ||
72 | /* | ||
73 | * clock ratio of these clock will be updated | ||
74 | * on r8a7778_clock_init() | ||
75 | */ | ||
76 | SH_FIXED_RATIO_CLK_SET(plla_clk, extal_clk, 1, 1); | ||
77 | SH_FIXED_RATIO_CLK_SET(pllb_clk, extal_clk, 1, 1); | ||
78 | SH_FIXED_RATIO_CLK_SET(i_clk, plla_clk, 1, 1); | ||
79 | SH_FIXED_RATIO_CLK_SET(s_clk, plla_clk, 1, 1); | ||
80 | SH_FIXED_RATIO_CLK_SET(s1_clk, plla_clk, 1, 1); | ||
81 | SH_FIXED_RATIO_CLK_SET(s3_clk, plla_clk, 1, 1); | ||
82 | SH_FIXED_RATIO_CLK_SET(s4_clk, plla_clk, 1, 1); | ||
83 | SH_FIXED_RATIO_CLK_SET(b_clk, plla_clk, 1, 1); | ||
84 | SH_FIXED_RATIO_CLK_SET(out_clk, plla_clk, 1, 1); | ||
85 | SH_FIXED_RATIO_CLK_SET(p_clk, plla_clk, 1, 1); | ||
86 | SH_FIXED_RATIO_CLK_SET(g_clk, plla_clk, 1, 1); | ||
87 | SH_FIXED_RATIO_CLK_SET(z_clk, pllb_clk, 1, 1); | ||
88 | |||
56 | static struct clk *main_clks[] = { | 89 | static struct clk *main_clks[] = { |
57 | &clkp, | 90 | &extal_clk, |
91 | &plla_clk, | ||
92 | &pllb_clk, | ||
93 | &i_clk, | ||
94 | &s_clk, | ||
95 | &s1_clk, | ||
96 | &s3_clk, | ||
97 | &s4_clk, | ||
98 | &b_clk, | ||
99 | &out_clk, | ||
100 | &p_clk, | ||
101 | &g_clk, | ||
102 | &z_clk, | ||
58 | }; | 103 | }; |
59 | 104 | ||
60 | enum { | 105 | enum { |
106 | MSTP323, MSTP322, MSTP321, | ||
61 | MSTP114, | 107 | MSTP114, |
62 | MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021, | 108 | MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021, |
63 | MSTP016, MSTP015, | 109 | MSTP016, MSTP015, |
64 | MSTP_NR }; | 110 | MSTP_NR }; |
65 | 111 | ||
66 | static struct clk mstp_clks[MSTP_NR] = { | 112 | static struct clk mstp_clks[MSTP_NR] = { |
67 | [MSTP114] = SH_CLK_MSTP32(&clkp, MSTPCR1, 14, 0), /* Ether */ | 113 | [MSTP323] = SH_CLK_MSTP32(&p_clk, MSTPCR3, 23, 0), /* SDHI0 */ |
68 | [MSTP026] = SH_CLK_MSTP32(&clkp, MSTPCR0, 26, 0), /* SCIF0 */ | 114 | [MSTP322] = SH_CLK_MSTP32(&p_clk, MSTPCR3, 22, 0), /* SDHI1 */ |
69 | [MSTP025] = SH_CLK_MSTP32(&clkp, MSTPCR0, 25, 0), /* SCIF1 */ | 115 | [MSTP321] = SH_CLK_MSTP32(&p_clk, MSTPCR3, 21, 0), /* SDHI2 */ |
70 | [MSTP024] = SH_CLK_MSTP32(&clkp, MSTPCR0, 24, 0), /* SCIF2 */ | 116 | [MSTP114] = SH_CLK_MSTP32(&p_clk, MSTPCR1, 14, 0), /* Ether */ |
71 | [MSTP023] = SH_CLK_MSTP32(&clkp, MSTPCR0, 23, 0), /* SCIF3 */ | 117 | [MSTP026] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 26, 0), /* SCIF0 */ |
72 | [MSTP022] = SH_CLK_MSTP32(&clkp, MSTPCR0, 22, 0), /* SCIF4 */ | 118 | [MSTP025] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 25, 0), /* SCIF1 */ |
73 | [MSTP021] = SH_CLK_MSTP32(&clkp, MSTPCR0, 21, 0), /* SCIF5 */ | 119 | [MSTP024] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 24, 0), /* SCIF2 */ |
74 | [MSTP016] = SH_CLK_MSTP32(&clkp, MSTPCR0, 16, 0), /* TMU0 */ | 120 | [MSTP023] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 23, 0), /* SCIF3 */ |
75 | [MSTP015] = SH_CLK_MSTP32(&clkp, MSTPCR0, 15, 0), /* TMU1 */ | 121 | [MSTP022] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 22, 0), /* SCIF4 */ |
122 | [MSTP021] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 21, 0), /* SCIF5 */ | ||
123 | [MSTP016] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 16, 0), /* TMU0 */ | ||
124 | [MSTP015] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 15, 0), /* TMU1 */ | ||
76 | }; | 125 | }; |
77 | 126 | ||
78 | static struct clk_lookup lookups[] = { | 127 | static struct clk_lookup lookups[] = { |
79 | /* MSTP32 clocks */ | 128 | /* MSTP32 clocks */ |
129 | CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP323]), /* SDHI0 */ | ||
130 | CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP322]), /* SDHI1 */ | ||
131 | CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP321]), /* SDHI2 */ | ||
80 | CLKDEV_DEV_ID("sh-eth", &mstp_clks[MSTP114]), /* Ether */ | 132 | CLKDEV_DEV_ID("sh-eth", &mstp_clks[MSTP114]), /* Ether */ |
81 | CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP026]), /* SCIF0 */ | 133 | CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP026]), /* SCIF0 */ |
82 | CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP025]), /* SCIF1 */ | 134 | CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP025]), /* SCIF1 */ |
@@ -90,8 +142,86 @@ static struct clk_lookup lookups[] = { | |||
90 | 142 | ||
91 | void __init r8a7778_clock_init(void) | 143 | void __init r8a7778_clock_init(void) |
92 | { | 144 | { |
145 | void __iomem *modemr = ioremap_nocache(MODEMR, PAGE_SIZE); | ||
146 | u32 mode; | ||
93 | int k, ret = 0; | 147 | int k, ret = 0; |
94 | 148 | ||
149 | BUG_ON(!modemr); | ||
150 | mode = ioread32(modemr); | ||
151 | iounmap(modemr); | ||
152 | |||
153 | switch (mode & (MD(19) | MD(18) | MD(12) | MD(11))) { | ||
154 | case MD(19): | ||
155 | extal_clk.rate = 38000000; | ||
156 | SH_CLK_SET_RATIO(&plla_clk_ratio, 21, 1); | ||
157 | SH_CLK_SET_RATIO(&pllb_clk_ratio, 21, 1); | ||
158 | break; | ||
159 | case MD(19) | MD(11): | ||
160 | extal_clk.rate = 33333333; | ||
161 | SH_CLK_SET_RATIO(&plla_clk_ratio, 24, 1); | ||
162 | SH_CLK_SET_RATIO(&pllb_clk_ratio, 24, 1); | ||
163 | break; | ||
164 | case MD(19) | MD(12): | ||
165 | extal_clk.rate = 28500000; | ||
166 | SH_CLK_SET_RATIO(&plla_clk_ratio, 28, 1); | ||
167 | SH_CLK_SET_RATIO(&pllb_clk_ratio, 28, 1); | ||
168 | break; | ||
169 | case MD(19) | MD(12) | MD(11): | ||
170 | extal_clk.rate = 25000000; | ||
171 | SH_CLK_SET_RATIO(&plla_clk_ratio, 32, 1); | ||
172 | SH_CLK_SET_RATIO(&pllb_clk_ratio, 32, 1); | ||
173 | break; | ||
174 | case MD(19) | MD(18) | MD(11): | ||
175 | extal_clk.rate = 33333333; | ||
176 | SH_CLK_SET_RATIO(&plla_clk_ratio, 24, 1); | ||
177 | SH_CLK_SET_RATIO(&pllb_clk_ratio, 21, 1); | ||
178 | break; | ||
179 | case MD(19) | MD(18) | MD(12): | ||
180 | extal_clk.rate = 28500000; | ||
181 | SH_CLK_SET_RATIO(&plla_clk_ratio, 28, 1); | ||
182 | SH_CLK_SET_RATIO(&pllb_clk_ratio, 21, 1); | ||
183 | break; | ||
184 | case MD(19) | MD(18) | MD(12) | MD(11): | ||
185 | extal_clk.rate = 25000000; | ||
186 | SH_CLK_SET_RATIO(&plla_clk_ratio, 32, 1); | ||
187 | SH_CLK_SET_RATIO(&pllb_clk_ratio, 24, 1); | ||
188 | break; | ||
189 | default: | ||
190 | BUG(); | ||
191 | } | ||
192 | |||
193 | if (mode & MD(1)) { | ||
194 | SH_CLK_SET_RATIO(&i_clk_ratio, 1, 1); | ||
195 | SH_CLK_SET_RATIO(&s_clk_ratio, 1, 3); | ||
196 | SH_CLK_SET_RATIO(&s1_clk_ratio, 1, 6); | ||
197 | SH_CLK_SET_RATIO(&s3_clk_ratio, 1, 4); | ||
198 | SH_CLK_SET_RATIO(&s4_clk_ratio, 1, 8); | ||
199 | SH_CLK_SET_RATIO(&p_clk_ratio, 1, 12); | ||
200 | SH_CLK_SET_RATIO(&g_clk_ratio, 1, 12); | ||
201 | if (mode & MD(2)) { | ||
202 | SH_CLK_SET_RATIO(&b_clk_ratio, 1, 18); | ||
203 | SH_CLK_SET_RATIO(&out_clk_ratio, 1, 18); | ||
204 | } else { | ||
205 | SH_CLK_SET_RATIO(&b_clk_ratio, 1, 12); | ||
206 | SH_CLK_SET_RATIO(&out_clk_ratio, 1, 12); | ||
207 | } | ||
208 | } else { | ||
209 | SH_CLK_SET_RATIO(&i_clk_ratio, 1, 1); | ||
210 | SH_CLK_SET_RATIO(&s_clk_ratio, 1, 4); | ||
211 | SH_CLK_SET_RATIO(&s1_clk_ratio, 1, 8); | ||
212 | SH_CLK_SET_RATIO(&s3_clk_ratio, 1, 4); | ||
213 | SH_CLK_SET_RATIO(&s4_clk_ratio, 1, 8); | ||
214 | SH_CLK_SET_RATIO(&p_clk_ratio, 1, 16); | ||
215 | SH_CLK_SET_RATIO(&g_clk_ratio, 1, 12); | ||
216 | if (mode & MD(2)) { | ||
217 | SH_CLK_SET_RATIO(&b_clk_ratio, 1, 16); | ||
218 | SH_CLK_SET_RATIO(&out_clk_ratio, 1, 16); | ||
219 | } else { | ||
220 | SH_CLK_SET_RATIO(&b_clk_ratio, 1, 12); | ||
221 | SH_CLK_SET_RATIO(&out_clk_ratio, 1, 12); | ||
222 | } | ||
223 | } | ||
224 | |||
95 | for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) | 225 | for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) |
96 | ret = clk_register(main_clks[k]); | 226 | ret = clk_register(main_clks[k]); |
97 | 227 | ||
diff --git a/arch/arm/mach-shmobile/clock-r8a7779.c b/arch/arm/mach-shmobile/clock-r8a7779.c index 31d5cd4d9787..9daeb8c37483 100644 --- a/arch/arm/mach-shmobile/clock-r8a7779.c +++ b/arch/arm/mach-shmobile/clock-r8a7779.c | |||
@@ -112,7 +112,7 @@ static struct clk *main_clks[] = { | |||
112 | }; | 112 | }; |
113 | 113 | ||
114 | enum { MSTP323, MSTP322, MSTP321, MSTP320, | 114 | enum { MSTP323, MSTP322, MSTP321, MSTP320, |
115 | MSTP115, MSTP114, | 115 | MSTP116, MSTP115, MSTP114, |
116 | MSTP103, MSTP101, MSTP100, | 116 | MSTP103, MSTP101, MSTP100, |
117 | MSTP030, | 117 | MSTP030, |
118 | MSTP029, MSTP028, MSTP027, MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021, | 118 | MSTP029, MSTP028, MSTP027, MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021, |
@@ -125,6 +125,7 @@ static struct clk mstp_clks[MSTP_NR] = { | |||
125 | [MSTP322] = SH_CLK_MSTP32(&clkp_clk, MSTPCR3, 22, 0), /* SDHI1 */ | 125 | [MSTP322] = SH_CLK_MSTP32(&clkp_clk, MSTPCR3, 22, 0), /* SDHI1 */ |
126 | [MSTP321] = SH_CLK_MSTP32(&clkp_clk, MSTPCR3, 21, 0), /* SDHI2 */ | 126 | [MSTP321] = SH_CLK_MSTP32(&clkp_clk, MSTPCR3, 21, 0), /* SDHI2 */ |
127 | [MSTP320] = SH_CLK_MSTP32(&clkp_clk, MSTPCR3, 20, 0), /* SDHI3 */ | 127 | [MSTP320] = SH_CLK_MSTP32(&clkp_clk, MSTPCR3, 20, 0), /* SDHI3 */ |
128 | [MSTP116] = SH_CLK_MSTP32(&clkp_clk, MSTPCR1, 16, 0), /* PCIe */ | ||
128 | [MSTP115] = SH_CLK_MSTP32(&clkp_clk, MSTPCR1, 15, 0), /* SATA */ | 129 | [MSTP115] = SH_CLK_MSTP32(&clkp_clk, MSTPCR1, 15, 0), /* SATA */ |
129 | [MSTP114] = SH_CLK_MSTP32(&clkp_clk, MSTPCR1, 14, 0), /* Ether */ | 130 | [MSTP114] = SH_CLK_MSTP32(&clkp_clk, MSTPCR1, 14, 0), /* Ether */ |
130 | [MSTP103] = SH_CLK_MSTP32(&clks_clk, MSTPCR1, 3, 0), /* DU */ | 131 | [MSTP103] = SH_CLK_MSTP32(&clks_clk, MSTPCR1, 3, 0), /* DU */ |
@@ -161,6 +162,7 @@ static struct clk_lookup lookups[] = { | |||
161 | CLKDEV_CON_ID("peripheral_clk", &clkp_clk), | 162 | CLKDEV_CON_ID("peripheral_clk", &clkp_clk), |
162 | 163 | ||
163 | /* MSTP32 clocks */ | 164 | /* MSTP32 clocks */ |
165 | CLKDEV_DEV_ID("rcar-pcie", &mstp_clks[MSTP116]), /* PCIe */ | ||
164 | CLKDEV_DEV_ID("sata_rcar", &mstp_clks[MSTP115]), /* SATA */ | 166 | CLKDEV_DEV_ID("sata_rcar", &mstp_clks[MSTP115]), /* SATA */ |
165 | CLKDEV_DEV_ID("fc600000.sata", &mstp_clks[MSTP115]), /* SATA w/DT */ | 167 | CLKDEV_DEV_ID("fc600000.sata", &mstp_clks[MSTP115]), /* SATA w/DT */ |
166 | CLKDEV_DEV_ID("sh-eth", &mstp_clks[MSTP114]), /* Ether */ | 168 | CLKDEV_DEV_ID("sh-eth", &mstp_clks[MSTP114]), /* Ether */ |
diff --git a/arch/arm/mach-shmobile/clock-r8a7790.c b/arch/arm/mach-shmobile/clock-r8a7790.c index bad9bf2e34d6..b393592edc83 100644 --- a/arch/arm/mach-shmobile/clock-r8a7790.c +++ b/arch/arm/mach-shmobile/clock-r8a7790.c | |||
@@ -22,39 +22,174 @@ | |||
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/sh_clk.h> | 23 | #include <linux/sh_clk.h> |
24 | #include <linux/clkdev.h> | 24 | #include <linux/clkdev.h> |
25 | #include <mach/clock.h> | ||
25 | #include <mach/common.h> | 26 | #include <mach/common.h> |
26 | 27 | ||
28 | /* | ||
29 | * MD EXTAL PLL0 PLL1 PLL3 | ||
30 | * 14 13 19 (MHz) *1 *1 | ||
31 | *--------------------------------------------------- | ||
32 | * 0 0 0 15 x 1 x172/2 x208/2 x106 | ||
33 | * 0 0 1 15 x 1 x172/2 x208/2 x88 | ||
34 | * 0 1 0 20 x 1 x130/2 x156/2 x80 | ||
35 | * 0 1 1 20 x 1 x130/2 x156/2 x66 | ||
36 | * 1 0 0 26 / 2 x200/2 x240/2 x122 | ||
37 | * 1 0 1 26 / 2 x200/2 x240/2 x102 | ||
38 | * 1 1 0 30 / 2 x172/2 x208/2 x106 | ||
39 | * 1 1 1 30 / 2 x172/2 x208/2 x88 | ||
40 | * | ||
41 | * *1 : Table 7.6 indicates VCO ouput (PLLx = VCO/2) | ||
42 | * see "p1 / 2" on R8A7790_CLOCK_ROOT() below | ||
43 | */ | ||
44 | |||
45 | #define MD(nr) (1 << nr) | ||
46 | |||
27 | #define CPG_BASE 0xe6150000 | 47 | #define CPG_BASE 0xe6150000 |
28 | #define CPG_LEN 0x1000 | 48 | #define CPG_LEN 0x1000 |
29 | 49 | ||
30 | #define SMSTPCR2 0xe6150138 | 50 | #define SMSTPCR2 0xe6150138 |
51 | #define SMSTPCR3 0xe615013c | ||
31 | #define SMSTPCR7 0xe615014c | 52 | #define SMSTPCR7 0xe615014c |
32 | 53 | ||
54 | #define MODEMR 0xE6160060 | ||
55 | #define SDCKCR 0xE6150074 | ||
56 | #define SD2CKCR 0xE6150078 | ||
57 | #define SD3CKCR 0xE615007C | ||
58 | #define MMC0CKCR 0xE6150240 | ||
59 | #define MMC1CKCR 0xE6150244 | ||
60 | #define SSPCKCR 0xE6150248 | ||
61 | #define SSPRSCKCR 0xE615024C | ||
62 | |||
33 | static struct clk_mapping cpg_mapping = { | 63 | static struct clk_mapping cpg_mapping = { |
34 | .phys = CPG_BASE, | 64 | .phys = CPG_BASE, |
35 | .len = CPG_LEN, | 65 | .len = CPG_LEN, |
36 | }; | 66 | }; |
37 | 67 | ||
38 | static struct clk p_clk = { | 68 | static struct clk extal_clk = { |
39 | .rate = 65000000, /* shortcut for now */ | 69 | /* .rate will be updated on r8a7790_clock_init() */ |
40 | .mapping = &cpg_mapping, | 70 | .mapping = &cpg_mapping, |
41 | }; | 71 | }; |
42 | 72 | ||
43 | static struct clk mp_clk = { | 73 | static struct sh_clk_ops followparent_clk_ops = { |
44 | .rate = 52000000, /* shortcut for now */ | 74 | .recalc = followparent_recalc, |
45 | .mapping = &cpg_mapping, | 75 | }; |
76 | |||
77 | static struct clk main_clk = { | ||
78 | /* .parent will be set r8a73a4_clock_init */ | ||
79 | .ops = &followparent_clk_ops, | ||
46 | }; | 80 | }; |
47 | 81 | ||
82 | /* | ||
83 | * clock ratio of these clock will be updated | ||
84 | * on r8a7790_clock_init() | ||
85 | */ | ||
86 | SH_FIXED_RATIO_CLK_SET(pll1_clk, main_clk, 1, 1); | ||
87 | SH_FIXED_RATIO_CLK_SET(pll3_clk, main_clk, 1, 1); | ||
88 | SH_FIXED_RATIO_CLK_SET(lb_clk, pll1_clk, 1, 1); | ||
89 | SH_FIXED_RATIO_CLK_SET(qspi_clk, pll1_clk, 1, 1); | ||
90 | |||
91 | /* fixed ratio clock */ | ||
92 | SH_FIXED_RATIO_CLK_SET(extal_div2_clk, extal_clk, 1, 2); | ||
93 | SH_FIXED_RATIO_CLK_SET(cp_clk, extal_clk, 1, 2); | ||
94 | |||
95 | SH_FIXED_RATIO_CLK_SET(pll1_div2_clk, pll1_clk, 1, 2); | ||
96 | SH_FIXED_RATIO_CLK_SET(zg_clk, pll1_clk, 1, 3); | ||
97 | SH_FIXED_RATIO_CLK_SET(zx_clk, pll1_clk, 1, 3); | ||
98 | SH_FIXED_RATIO_CLK_SET(zs_clk, pll1_clk, 1, 6); | ||
99 | SH_FIXED_RATIO_CLK_SET(hp_clk, pll1_clk, 1, 12); | ||
100 | SH_FIXED_RATIO_CLK_SET(i_clk, pll1_clk, 1, 2); | ||
101 | SH_FIXED_RATIO_CLK_SET(b_clk, pll1_clk, 1, 12); | ||
102 | SH_FIXED_RATIO_CLK_SET(p_clk, pll1_clk, 1, 24); | ||
103 | SH_FIXED_RATIO_CLK_SET(cl_clk, pll1_clk, 1, 48); | ||
104 | SH_FIXED_RATIO_CLK_SET(m2_clk, pll1_clk, 1, 8); | ||
105 | SH_FIXED_RATIO_CLK_SET(imp_clk, pll1_clk, 1, 4); | ||
106 | SH_FIXED_RATIO_CLK_SET(rclk_clk, pll1_clk, 1, (48 * 1024)); | ||
107 | SH_FIXED_RATIO_CLK_SET(oscclk_clk, pll1_clk, 1, (12 * 1024)); | ||
108 | |||
109 | SH_FIXED_RATIO_CLK_SET(zb3_clk, pll3_clk, 1, 4); | ||
110 | SH_FIXED_RATIO_CLK_SET(zb3d2_clk, pll3_clk, 1, 8); | ||
111 | SH_FIXED_RATIO_CLK_SET(ddr_clk, pll3_clk, 1, 8); | ||
112 | SH_FIXED_RATIO_CLK_SET(mp_clk, pll1_div2_clk, 1, 15); | ||
113 | |||
48 | static struct clk *main_clks[] = { | 114 | static struct clk *main_clks[] = { |
115 | &extal_clk, | ||
116 | &extal_div2_clk, | ||
117 | &main_clk, | ||
118 | &pll1_clk, | ||
119 | &pll1_div2_clk, | ||
120 | &pll3_clk, | ||
121 | &lb_clk, | ||
122 | &qspi_clk, | ||
123 | &zg_clk, | ||
124 | &zx_clk, | ||
125 | &zs_clk, | ||
126 | &hp_clk, | ||
127 | &i_clk, | ||
128 | &b_clk, | ||
49 | &p_clk, | 129 | &p_clk, |
130 | &cl_clk, | ||
131 | &m2_clk, | ||
132 | &imp_clk, | ||
133 | &rclk_clk, | ||
134 | &oscclk_clk, | ||
135 | &zb3_clk, | ||
136 | &zb3d2_clk, | ||
137 | &ddr_clk, | ||
50 | &mp_clk, | 138 | &mp_clk, |
139 | &cp_clk, | ||
140 | }; | ||
141 | |||
142 | /* SDHI (DIV4) clock */ | ||
143 | static int divisors[] = { 2, 3, 4, 6, 8, 12, 16, 18, 24, 0, 36, 48, 10 }; | ||
144 | |||
145 | static struct clk_div_mult_table div4_div_mult_table = { | ||
146 | .divisors = divisors, | ||
147 | .nr_divisors = ARRAY_SIZE(divisors), | ||
148 | }; | ||
149 | |||
150 | static struct clk_div4_table div4_table = { | ||
151 | .div_mult_table = &div4_div_mult_table, | ||
152 | }; | ||
153 | |||
154 | enum { | ||
155 | DIV4_SDH, DIV4_SD0, DIV4_SD1, DIV4_NR | ||
156 | }; | ||
157 | |||
158 | static struct clk div4_clks[DIV4_NR] = { | ||
159 | [DIV4_SDH] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 8, 0x0dff, CLK_ENABLE_ON_INIT), | ||
160 | [DIV4_SD0] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 4, 0x1de0, CLK_ENABLE_ON_INIT), | ||
161 | [DIV4_SD1] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 0, 0x1de0, CLK_ENABLE_ON_INIT), | ||
162 | }; | ||
163 | |||
164 | /* DIV6 clocks */ | ||
165 | enum { | ||
166 | DIV6_SD2, DIV6_SD3, | ||
167 | DIV6_MMC0, DIV6_MMC1, | ||
168 | DIV6_SSP, DIV6_SSPRS, | ||
169 | DIV6_NR | ||
170 | }; | ||
171 | |||
172 | static struct clk div6_clks[DIV6_NR] = { | ||
173 | [DIV6_SD2] = SH_CLK_DIV6(&pll1_div2_clk, SD2CKCR, 0), | ||
174 | [DIV6_SD3] = SH_CLK_DIV6(&pll1_div2_clk, SD3CKCR, 0), | ||
175 | [DIV6_MMC0] = SH_CLK_DIV6(&pll1_div2_clk, MMC0CKCR, 0), | ||
176 | [DIV6_MMC1] = SH_CLK_DIV6(&pll1_div2_clk, MMC1CKCR, 0), | ||
177 | [DIV6_SSP] = SH_CLK_DIV6(&pll1_div2_clk, SSPCKCR, 0), | ||
178 | [DIV6_SSPRS] = SH_CLK_DIV6(&pll1_div2_clk, SSPRSCKCR, 0), | ||
179 | }; | ||
180 | |||
181 | /* MSTP */ | ||
182 | enum { | ||
183 | MSTP721, MSTP720, | ||
184 | MSTP304, | ||
185 | MSTP216, MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, | ||
186 | MSTP_NR | ||
51 | }; | 187 | }; |
52 | 188 | ||
53 | enum { MSTP721, MSTP720, | ||
54 | MSTP216, MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP_NR }; | ||
55 | static struct clk mstp_clks[MSTP_NR] = { | 189 | static struct clk mstp_clks[MSTP_NR] = { |
56 | [MSTP721] = SH_CLK_MSTP32(&p_clk, SMSTPCR7, 21, 0), /* SCIF0 */ | 190 | [MSTP721] = SH_CLK_MSTP32(&p_clk, SMSTPCR7, 21, 0), /* SCIF0 */ |
57 | [MSTP720] = SH_CLK_MSTP32(&p_clk, SMSTPCR7, 20, 0), /* SCIF1 */ | 191 | [MSTP720] = SH_CLK_MSTP32(&p_clk, SMSTPCR7, 20, 0), /* SCIF1 */ |
192 | [MSTP304] = SH_CLK_MSTP32(&cp_clk, SMSTPCR3, 4, 0), /* TPU0 */ | ||
58 | [MSTP216] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 16, 0), /* SCIFB2 */ | 193 | [MSTP216] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 16, 0), /* SCIFB2 */ |
59 | [MSTP207] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 7, 0), /* SCIFB1 */ | 194 | [MSTP207] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 7, 0), /* SCIFB1 */ |
60 | [MSTP206] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 6, 0), /* SCIFB0 */ | 195 | [MSTP206] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 6, 0), /* SCIFB0 */ |
@@ -64,6 +199,48 @@ static struct clk mstp_clks[MSTP_NR] = { | |||
64 | }; | 199 | }; |
65 | 200 | ||
66 | static struct clk_lookup lookups[] = { | 201 | static struct clk_lookup lookups[] = { |
202 | |||
203 | /* main clocks */ | ||
204 | CLKDEV_CON_ID("extal", &extal_clk), | ||
205 | CLKDEV_CON_ID("extal_div2", &extal_div2_clk), | ||
206 | CLKDEV_CON_ID("main", &main_clk), | ||
207 | CLKDEV_CON_ID("pll1", &pll1_clk), | ||
208 | CLKDEV_CON_ID("pll1_div2", &pll1_div2_clk), | ||
209 | CLKDEV_CON_ID("pll3", &pll3_clk), | ||
210 | CLKDEV_CON_ID("zg", &zg_clk), | ||
211 | CLKDEV_CON_ID("zx", &zx_clk), | ||
212 | CLKDEV_CON_ID("zs", &zs_clk), | ||
213 | CLKDEV_CON_ID("hp", &hp_clk), | ||
214 | CLKDEV_CON_ID("i", &i_clk), | ||
215 | CLKDEV_CON_ID("b", &b_clk), | ||
216 | CLKDEV_CON_ID("lb", &lb_clk), | ||
217 | CLKDEV_CON_ID("p", &p_clk), | ||
218 | CLKDEV_CON_ID("cl", &cl_clk), | ||
219 | CLKDEV_CON_ID("m2", &m2_clk), | ||
220 | CLKDEV_CON_ID("imp", &imp_clk), | ||
221 | CLKDEV_CON_ID("rclk", &rclk_clk), | ||
222 | CLKDEV_CON_ID("oscclk", &oscclk_clk), | ||
223 | CLKDEV_CON_ID("zb3", &zb3_clk), | ||
224 | CLKDEV_CON_ID("zb3d2", &zb3d2_clk), | ||
225 | CLKDEV_CON_ID("ddr", &ddr_clk), | ||
226 | CLKDEV_CON_ID("mp", &mp_clk), | ||
227 | CLKDEV_CON_ID("qspi", &qspi_clk), | ||
228 | CLKDEV_CON_ID("cp", &cp_clk), | ||
229 | |||
230 | /* DIV4 */ | ||
231 | CLKDEV_CON_ID("sdh", &div4_clks[DIV4_SDH]), | ||
232 | CLKDEV_CON_ID("sd0", &div4_clks[DIV4_SD0]), | ||
233 | CLKDEV_CON_ID("sd1", &div4_clks[DIV4_SD1]), | ||
234 | |||
235 | /* DIV6 */ | ||
236 | CLKDEV_CON_ID("sd2", &div6_clks[DIV6_SD2]), | ||
237 | CLKDEV_CON_ID("sd3", &div6_clks[DIV6_SD3]), | ||
238 | CLKDEV_CON_ID("mmc0", &div6_clks[DIV6_MMC0]), | ||
239 | CLKDEV_CON_ID("mmc1", &div6_clks[DIV6_MMC1]), | ||
240 | CLKDEV_CON_ID("ssp", &div6_clks[DIV6_SSP]), | ||
241 | CLKDEV_CON_ID("ssprs", &div6_clks[DIV6_SSPRS]), | ||
242 | |||
243 | /* MSTP */ | ||
67 | CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP204]), | 244 | CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP204]), |
68 | CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP203]), | 245 | CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP203]), |
69 | CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[MSTP206]), | 246 | CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[MSTP206]), |
@@ -74,14 +251,61 @@ static struct clk_lookup lookups[] = { | |||
74 | CLKDEV_DEV_ID("sh-sci.7", &mstp_clks[MSTP720]), | 251 | CLKDEV_DEV_ID("sh-sci.7", &mstp_clks[MSTP720]), |
75 | }; | 252 | }; |
76 | 253 | ||
254 | #define R8A7790_CLOCK_ROOT(e, m, p0, p1, p30, p31) \ | ||
255 | extal_clk.rate = e * 1000 * 1000; \ | ||
256 | main_clk.parent = m; \ | ||
257 | SH_CLK_SET_RATIO(&pll1_clk_ratio, p1 / 2, 1); \ | ||
258 | if (mode & MD(19)) \ | ||
259 | SH_CLK_SET_RATIO(&pll3_clk_ratio, p31, 1); \ | ||
260 | else \ | ||
261 | SH_CLK_SET_RATIO(&pll3_clk_ratio, p30, 1) | ||
262 | |||
263 | |||
77 | void __init r8a7790_clock_init(void) | 264 | void __init r8a7790_clock_init(void) |
78 | { | 265 | { |
266 | void __iomem *modemr = ioremap_nocache(MODEMR, PAGE_SIZE); | ||
267 | u32 mode; | ||
79 | int k, ret = 0; | 268 | int k, ret = 0; |
80 | 269 | ||
270 | BUG_ON(!modemr); | ||
271 | mode = ioread32(modemr); | ||
272 | iounmap(modemr); | ||
273 | |||
274 | switch (mode & (MD(14) | MD(13))) { | ||
275 | case 0: | ||
276 | R8A7790_CLOCK_ROOT(15, &extal_clk, 172, 208, 106, 88); | ||
277 | break; | ||
278 | case MD(13): | ||
279 | R8A7790_CLOCK_ROOT(20, &extal_clk, 130, 156, 80, 66); | ||
280 | break; | ||
281 | case MD(14): | ||
282 | R8A7790_CLOCK_ROOT(26, &extal_div2_clk, 200, 240, 122, 102); | ||
283 | break; | ||
284 | case MD(13) | MD(14): | ||
285 | R8A7790_CLOCK_ROOT(30, &extal_div2_clk, 172, 208, 106, 88); | ||
286 | break; | ||
287 | } | ||
288 | |||
289 | if (mode & (MD(18))) | ||
290 | SH_CLK_SET_RATIO(&lb_clk_ratio, 1, 36); | ||
291 | else | ||
292 | SH_CLK_SET_RATIO(&lb_clk_ratio, 1, 24); | ||
293 | |||
294 | if ((mode & (MD(3) | MD(2) | MD(1))) == MD(2)) | ||
295 | SH_CLK_SET_RATIO(&qspi_clk_ratio, 1, 16); | ||
296 | else | ||
297 | SH_CLK_SET_RATIO(&qspi_clk_ratio, 1, 20); | ||
298 | |||
81 | for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) | 299 | for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) |
82 | ret = clk_register(main_clks[k]); | 300 | ret = clk_register(main_clks[k]); |
83 | 301 | ||
84 | if (!ret) | 302 | if (!ret) |
303 | ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table); | ||
304 | |||
305 | if (!ret) | ||
306 | ret = sh_clk_div6_register(div6_clks, DIV6_NR); | ||
307 | |||
308 | if (!ret) | ||
85 | ret = sh_clk_mstp_register(mstp_clks, MSTP_NR); | 309 | ret = sh_clk_mstp_register(mstp_clks, MSTP_NR); |
86 | 310 | ||
87 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 311 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
diff --git a/arch/arm/mach-shmobile/clock-sh73a0.c b/arch/arm/mach-shmobile/clock-sh73a0.c index 784fbaa4cc55..d9fd0336b910 100644 --- a/arch/arm/mach-shmobile/clock-sh73a0.c +++ b/arch/arm/mach-shmobile/clock-sh73a0.c | |||
@@ -228,6 +228,11 @@ enum { DIV4_I, DIV4_ZG, DIV4_M3, DIV4_B, DIV4_M1, DIV4_M2, | |||
228 | 228 | ||
229 | static struct clk div4_clks[DIV4_NR] = { | 229 | static struct clk div4_clks[DIV4_NR] = { |
230 | [DIV4_I] = DIV4(FRQCRA, 20, 0xdff, CLK_ENABLE_ON_INIT), | 230 | [DIV4_I] = DIV4(FRQCRA, 20, 0xdff, CLK_ENABLE_ON_INIT), |
231 | /* | ||
232 | * ZG clock is dividing PLL0 frequency to supply SGX. Make sure not to | ||
233 | * exceed maximum frequencies of 201.5MHz for VDD_DVFS=1.175 and | ||
234 | * 239.2MHz for VDD_DVFS=1.315V. | ||
235 | */ | ||
231 | [DIV4_ZG] = SH_CLK_DIV4(&pll0_clk, FRQCRA, 16, 0xd7f, CLK_ENABLE_ON_INIT), | 236 | [DIV4_ZG] = SH_CLK_DIV4(&pll0_clk, FRQCRA, 16, 0xd7f, CLK_ENABLE_ON_INIT), |
232 | [DIV4_M3] = DIV4(FRQCRA, 12, 0x1dff, CLK_ENABLE_ON_INIT), | 237 | [DIV4_M3] = DIV4(FRQCRA, 12, 0x1dff, CLK_ENABLE_ON_INIT), |
233 | [DIV4_B] = DIV4(FRQCRA, 8, 0xdff, CLK_ENABLE_ON_INIT), | 238 | [DIV4_B] = DIV4(FRQCRA, 8, 0xdff, CLK_ENABLE_ON_INIT), |
@@ -252,6 +257,101 @@ static struct clk twd_clk = { | |||
252 | .ops = &twd_clk_ops, | 257 | .ops = &twd_clk_ops, |
253 | }; | 258 | }; |
254 | 259 | ||
260 | static struct sh_clk_ops zclk_ops, kicker_ops; | ||
261 | static const struct sh_clk_ops *div4_clk_ops; | ||
262 | |||
263 | static int zclk_set_rate(struct clk *clk, unsigned long rate) | ||
264 | { | ||
265 | int ret; | ||
266 | |||
267 | if (!clk->parent || !__clk_get(clk->parent)) | ||
268 | return -ENODEV; | ||
269 | |||
270 | if (readl(FRQCRB) & (1 << 31)) | ||
271 | return -EBUSY; | ||
272 | |||
273 | if (rate == clk_get_rate(clk->parent)) { | ||
274 | /* 1:1 - switch off divider */ | ||
275 | __raw_writel(__raw_readl(FRQCRB) & ~(1 << 28), FRQCRB); | ||
276 | /* nullify the divider to prepare for the next time */ | ||
277 | ret = div4_clk_ops->set_rate(clk, rate / 2); | ||
278 | if (!ret) | ||
279 | ret = frqcr_kick(); | ||
280 | if (ret > 0) | ||
281 | ret = 0; | ||
282 | } else { | ||
283 | /* Enable the divider */ | ||
284 | __raw_writel(__raw_readl(FRQCRB) | (1 << 28), FRQCRB); | ||
285 | |||
286 | ret = frqcr_kick(); | ||
287 | if (ret >= 0) | ||
288 | /* | ||
289 | * set the divider - call the DIV4 method, it will kick | ||
290 | * FRQCRB too | ||
291 | */ | ||
292 | ret = div4_clk_ops->set_rate(clk, rate); | ||
293 | if (ret < 0) | ||
294 | goto esetrate; | ||
295 | } | ||
296 | |||
297 | esetrate: | ||
298 | __clk_put(clk->parent); | ||
299 | return ret; | ||
300 | } | ||
301 | |||
302 | static long zclk_round_rate(struct clk *clk, unsigned long rate) | ||
303 | { | ||
304 | unsigned long div_freq = div4_clk_ops->round_rate(clk, rate), | ||
305 | parent_freq = clk_get_rate(clk->parent); | ||
306 | |||
307 | if (rate > div_freq && abs(parent_freq - rate) < rate - div_freq) | ||
308 | return parent_freq; | ||
309 | |||
310 | return div_freq; | ||
311 | } | ||
312 | |||
313 | static unsigned long zclk_recalc(struct clk *clk) | ||
314 | { | ||
315 | /* | ||
316 | * Must recalculate frequencies in case PLL0 has been changed, even if | ||
317 | * the divisor is unused ATM! | ||
318 | */ | ||
319 | unsigned long div_freq = div4_clk_ops->recalc(clk); | ||
320 | |||
321 | if (__raw_readl(FRQCRB) & (1 << 28)) | ||
322 | return div_freq; | ||
323 | |||
324 | return clk_get_rate(clk->parent); | ||
325 | } | ||
326 | |||
327 | static int kicker_set_rate(struct clk *clk, unsigned long rate) | ||
328 | { | ||
329 | if (__raw_readl(FRQCRB) & (1 << 31)) | ||
330 | return -EBUSY; | ||
331 | |||
332 | return div4_clk_ops->set_rate(clk, rate); | ||
333 | } | ||
334 | |||
335 | static void div4_clk_extend(void) | ||
336 | { | ||
337 | int i; | ||
338 | |||
339 | div4_clk_ops = div4_clks[0].ops; | ||
340 | |||
341 | /* Add a kicker-busy check before changing the rate */ | ||
342 | kicker_ops = *div4_clk_ops; | ||
343 | /* We extend the DIV4 clock with a 1:1 pass-through case */ | ||
344 | zclk_ops = *div4_clk_ops; | ||
345 | |||
346 | kicker_ops.set_rate = kicker_set_rate; | ||
347 | zclk_ops.set_rate = zclk_set_rate; | ||
348 | zclk_ops.round_rate = zclk_round_rate; | ||
349 | zclk_ops.recalc = zclk_recalc; | ||
350 | |||
351 | for (i = 0; i < DIV4_NR; i++) | ||
352 | div4_clks[i].ops = i == DIV4_Z ? &zclk_ops : &kicker_ops; | ||
353 | } | ||
354 | |||
255 | enum { DIV6_VCK1, DIV6_VCK2, DIV6_VCK3, DIV6_ZB1, | 355 | enum { DIV6_VCK1, DIV6_VCK2, DIV6_VCK3, DIV6_ZB1, |
256 | DIV6_FLCTL, DIV6_SDHI0, DIV6_SDHI1, DIV6_SDHI2, | 356 | DIV6_FLCTL, DIV6_SDHI0, DIV6_SDHI1, DIV6_SDHI2, |
257 | DIV6_FSIA, DIV6_FSIB, DIV6_SUB, | 357 | DIV6_FSIA, DIV6_FSIB, DIV6_SUB, |
@@ -450,7 +550,7 @@ static struct clk *late_main_clks[] = { | |||
450 | }; | 550 | }; |
451 | 551 | ||
452 | enum { MSTP001, | 552 | enum { MSTP001, |
453 | MSTP129, MSTP128, MSTP127, MSTP126, MSTP125, MSTP118, MSTP116, MSTP100, | 553 | MSTP129, MSTP128, MSTP127, MSTP126, MSTP125, MSTP118, MSTP116, MSTP112, MSTP100, |
454 | MSTP219, MSTP218, MSTP217, | 554 | MSTP219, MSTP218, MSTP217, |
455 | MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200, | 555 | MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200, |
456 | MSTP331, MSTP329, MSTP328, MSTP325, MSTP323, MSTP322, | 556 | MSTP331, MSTP329, MSTP328, MSTP325, MSTP323, MSTP322, |
@@ -471,6 +571,7 @@ static struct clk mstp_clks[MSTP_NR] = { | |||
471 | [MSTP125] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR1, 25, 0), /* TMU0 */ | 571 | [MSTP125] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR1, 25, 0), /* TMU0 */ |
472 | [MSTP118] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 18, 0), /* DSITX0 */ | 572 | [MSTP118] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 18, 0), /* DSITX0 */ |
473 | [MSTP116] = MSTP(&div4_clks[DIV4_HP], SMSTPCR1, 16, 0), /* IIC0 */ | 573 | [MSTP116] = MSTP(&div4_clks[DIV4_HP], SMSTPCR1, 16, 0), /* IIC0 */ |
574 | [MSTP112] = MSTP(&div4_clks[DIV4_ZG], SMSTPCR1, 12, 0), /* SGX */ | ||
474 | [MSTP100] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 0, 0), /* LCDC0 */ | 575 | [MSTP100] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 0, 0), /* LCDC0 */ |
475 | [MSTP219] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 19, 0), /* SCIFA7 */ | 576 | [MSTP219] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 19, 0), /* SCIFA7 */ |
476 | [MSTP218] = MSTP(&div4_clks[DIV4_HP], SMSTPCR2, 18, 0), /* SY-DMAC */ | 577 | [MSTP218] = MSTP(&div4_clks[DIV4_HP], SMSTPCR2, 18, 0), /* SY-DMAC */ |
@@ -513,6 +614,9 @@ static struct clk_lookup lookups[] = { | |||
513 | CLKDEV_CON_ID("r_clk", &r_clk), | 614 | CLKDEV_CON_ID("r_clk", &r_clk), |
514 | CLKDEV_DEV_ID("smp_twd", &twd_clk), /* smp_twd */ | 615 | CLKDEV_DEV_ID("smp_twd", &twd_clk), /* smp_twd */ |
515 | 616 | ||
617 | /* DIV4 clocks */ | ||
618 | CLKDEV_DEV_ID("cpufreq-cpu0", &div4_clks[DIV4_Z]), | ||
619 | |||
516 | /* DIV6 clocks */ | 620 | /* DIV6 clocks */ |
517 | CLKDEV_CON_ID("vck1_clk", &div6_clks[DIV6_VCK1]), | 621 | CLKDEV_CON_ID("vck1_clk", &div6_clks[DIV6_VCK1]), |
518 | CLKDEV_CON_ID("vck2_clk", &div6_clks[DIV6_VCK2]), | 622 | CLKDEV_CON_ID("vck2_clk", &div6_clks[DIV6_VCK2]), |
@@ -604,8 +708,11 @@ void __init sh73a0_clock_init(void) | |||
604 | for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) | 708 | for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) |
605 | ret = clk_register(main_clks[k]); | 709 | ret = clk_register(main_clks[k]); |
606 | 710 | ||
607 | if (!ret) | 711 | if (!ret) { |
608 | ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table); | 712 | ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table); |
713 | if (!ret) | ||
714 | div4_clk_extend(); | ||
715 | } | ||
609 | 716 | ||
610 | if (!ret) | 717 | if (!ret) |
611 | ret = sh_clk_div6_reparent_register(div6_clks, DIV6_NR); | 718 | ret = sh_clk_div6_reparent_register(div6_clks, DIV6_NR); |
diff --git a/arch/arm/mach-shmobile/include/mach/clock.h b/arch/arm/mach-shmobile/include/mach/clock.h index 76ac61292e48..03e56074928c 100644 --- a/arch/arm/mach-shmobile/include/mach/clock.h +++ b/arch/arm/mach-shmobile/include/mach/clock.h | |||
@@ -24,16 +24,16 @@ struct clk name = { \ | |||
24 | } | 24 | } |
25 | 25 | ||
26 | #define SH_FIXED_RATIO_CLK(name, p, r) \ | 26 | #define SH_FIXED_RATIO_CLK(name, p, r) \ |
27 | static SH_FIXED_RATIO_CLKg(name, p, r); | 27 | static SH_FIXED_RATIO_CLKg(name, p, r) |
28 | 28 | ||
29 | #define SH_FIXED_RATIO_CLK_SET(name, p, m, d) \ | 29 | #define SH_FIXED_RATIO_CLK_SET(name, p, m, d) \ |
30 | SH_CLK_RATIO(name, m, d); \ | 30 | SH_CLK_RATIO(name, m, d); \ |
31 | SH_FIXED_RATIO_CLK(name, p, name); | 31 | SH_FIXED_RATIO_CLK(name, p, name) |
32 | 32 | ||
33 | #define SH_CLK_SET_RATIO(p, m, d) \ | 33 | #define SH_CLK_SET_RATIO(p, m, d) \ |
34 | { \ | 34 | do { \ |
35 | (p)->mul = m; \ | 35 | (p)->mul = m; \ |
36 | (p)->div = d; \ | 36 | (p)->div = d; \ |
37 | } | 37 | } while (0) |
38 | 38 | ||
39 | #endif | 39 | #endif |
diff --git a/arch/arm/mach-shmobile/include/mach/irqs.h b/arch/arm/mach-shmobile/include/mach/irqs.h index b2074e2acb15..d241bfd6926d 100644 --- a/arch/arm/mach-shmobile/include/mach/irqs.h +++ b/arch/arm/mach-shmobile/include/mach/irqs.h | |||
@@ -16,4 +16,9 @@ | |||
16 | #define IRQPIN_BASE 2000 | 16 | #define IRQPIN_BASE 2000 |
17 | #define irq_pin(nr) ((nr) + IRQPIN_BASE) | 17 | #define irq_pin(nr) ((nr) + IRQPIN_BASE) |
18 | 18 | ||
19 | /* GPIO IRQ */ | ||
20 | #define _GPIO_IRQ_BASE 2500 | ||
21 | #define GPIO_IRQ_BASE(x) (_GPIO_IRQ_BASE + (32 * x)) | ||
22 | #define GPIO_IRQ(x, y) (_GPIO_IRQ_BASE + (32 * x) + y) | ||
23 | |||
19 | #endif /* __ASM_MACH_IRQS_H */ | 24 | #endif /* __ASM_MACH_IRQS_H */ |
diff --git a/arch/arm/mach-shmobile/include/mach/r8a7740.h b/arch/arm/mach-shmobile/include/mach/r8a7740.h index abdc4d4efa28..9c9a66ccaf6f 100644 --- a/arch/arm/mach-shmobile/include/mach/r8a7740.h +++ b/arch/arm/mach-shmobile/include/mach/r8a7740.h | |||
@@ -28,494 +28,6 @@ | |||
28 | #define MD_CK1 (1 << 1) | 28 | #define MD_CK1 (1 << 1) |
29 | #define MD_CK0 (1 << 0) | 29 | #define MD_CK0 (1 << 0) |
30 | 30 | ||
31 | /* | ||
32 | * Pin Function Controller: | ||
33 | * GPIO_FN_xx - GPIO used to select pin function | ||
34 | * GPIO_PORTxx - GPIO mapped to real I/O pin on CPU | ||
35 | */ | ||
36 | enum { | ||
37 | /* PORT */ | ||
38 | GPIO_PORT0, GPIO_PORT1, GPIO_PORT2, GPIO_PORT3, GPIO_PORT4, | ||
39 | GPIO_PORT5, GPIO_PORT6, GPIO_PORT7, GPIO_PORT8, GPIO_PORT9, | ||
40 | |||
41 | GPIO_PORT10, GPIO_PORT11, GPIO_PORT12, GPIO_PORT13, GPIO_PORT14, | ||
42 | GPIO_PORT15, GPIO_PORT16, GPIO_PORT17, GPIO_PORT18, GPIO_PORT19, | ||
43 | |||
44 | GPIO_PORT20, GPIO_PORT21, GPIO_PORT22, GPIO_PORT23, GPIO_PORT24, | ||
45 | GPIO_PORT25, GPIO_PORT26, GPIO_PORT27, GPIO_PORT28, GPIO_PORT29, | ||
46 | |||
47 | GPIO_PORT30, GPIO_PORT31, GPIO_PORT32, GPIO_PORT33, GPIO_PORT34, | ||
48 | GPIO_PORT35, GPIO_PORT36, GPIO_PORT37, GPIO_PORT38, GPIO_PORT39, | ||
49 | |||
50 | GPIO_PORT40, GPIO_PORT41, GPIO_PORT42, GPIO_PORT43, GPIO_PORT44, | ||
51 | GPIO_PORT45, GPIO_PORT46, GPIO_PORT47, GPIO_PORT48, GPIO_PORT49, | ||
52 | |||
53 | GPIO_PORT50, GPIO_PORT51, GPIO_PORT52, GPIO_PORT53, GPIO_PORT54, | ||
54 | GPIO_PORT55, GPIO_PORT56, GPIO_PORT57, GPIO_PORT58, GPIO_PORT59, | ||
55 | |||
56 | GPIO_PORT60, GPIO_PORT61, GPIO_PORT62, GPIO_PORT63, GPIO_PORT64, | ||
57 | GPIO_PORT65, GPIO_PORT66, GPIO_PORT67, GPIO_PORT68, GPIO_PORT69, | ||
58 | |||
59 | GPIO_PORT70, GPIO_PORT71, GPIO_PORT72, GPIO_PORT73, GPIO_PORT74, | ||
60 | GPIO_PORT75, GPIO_PORT76, GPIO_PORT77, GPIO_PORT78, GPIO_PORT79, | ||
61 | |||
62 | GPIO_PORT80, GPIO_PORT81, GPIO_PORT82, GPIO_PORT83, GPIO_PORT84, | ||
63 | GPIO_PORT85, GPIO_PORT86, GPIO_PORT87, GPIO_PORT88, GPIO_PORT89, | ||
64 | |||
65 | GPIO_PORT90, GPIO_PORT91, GPIO_PORT92, GPIO_PORT93, GPIO_PORT94, | ||
66 | GPIO_PORT95, GPIO_PORT96, GPIO_PORT97, GPIO_PORT98, GPIO_PORT99, | ||
67 | |||
68 | GPIO_PORT100, GPIO_PORT101, GPIO_PORT102, GPIO_PORT103, GPIO_PORT104, | ||
69 | GPIO_PORT105, GPIO_PORT106, GPIO_PORT107, GPIO_PORT108, GPIO_PORT109, | ||
70 | |||
71 | GPIO_PORT110, GPIO_PORT111, GPIO_PORT112, GPIO_PORT113, GPIO_PORT114, | ||
72 | GPIO_PORT115, GPIO_PORT116, GPIO_PORT117, GPIO_PORT118, GPIO_PORT119, | ||
73 | |||
74 | GPIO_PORT120, GPIO_PORT121, GPIO_PORT122, GPIO_PORT123, GPIO_PORT124, | ||
75 | GPIO_PORT125, GPIO_PORT126, GPIO_PORT127, GPIO_PORT128, GPIO_PORT129, | ||
76 | |||
77 | GPIO_PORT130, GPIO_PORT131, GPIO_PORT132, GPIO_PORT133, GPIO_PORT134, | ||
78 | GPIO_PORT135, GPIO_PORT136, GPIO_PORT137, GPIO_PORT138, GPIO_PORT139, | ||
79 | |||
80 | GPIO_PORT140, GPIO_PORT141, GPIO_PORT142, GPIO_PORT143, GPIO_PORT144, | ||
81 | GPIO_PORT145, GPIO_PORT146, GPIO_PORT147, GPIO_PORT148, GPIO_PORT149, | ||
82 | |||
83 | GPIO_PORT150, GPIO_PORT151, GPIO_PORT152, GPIO_PORT153, GPIO_PORT154, | ||
84 | GPIO_PORT155, GPIO_PORT156, GPIO_PORT157, GPIO_PORT158, GPIO_PORT159, | ||
85 | |||
86 | GPIO_PORT160, GPIO_PORT161, GPIO_PORT162, GPIO_PORT163, GPIO_PORT164, | ||
87 | GPIO_PORT165, GPIO_PORT166, GPIO_PORT167, GPIO_PORT168, GPIO_PORT169, | ||
88 | |||
89 | GPIO_PORT170, GPIO_PORT171, GPIO_PORT172, GPIO_PORT173, GPIO_PORT174, | ||
90 | GPIO_PORT175, GPIO_PORT176, GPIO_PORT177, GPIO_PORT178, GPIO_PORT179, | ||
91 | |||
92 | GPIO_PORT180, GPIO_PORT181, GPIO_PORT182, GPIO_PORT183, GPIO_PORT184, | ||
93 | GPIO_PORT185, GPIO_PORT186, GPIO_PORT187, GPIO_PORT188, GPIO_PORT189, | ||
94 | |||
95 | GPIO_PORT190, GPIO_PORT191, GPIO_PORT192, GPIO_PORT193, GPIO_PORT194, | ||
96 | GPIO_PORT195, GPIO_PORT196, GPIO_PORT197, GPIO_PORT198, GPIO_PORT199, | ||
97 | |||
98 | GPIO_PORT200, GPIO_PORT201, GPIO_PORT202, GPIO_PORT203, GPIO_PORT204, | ||
99 | GPIO_PORT205, GPIO_PORT206, GPIO_PORT207, GPIO_PORT208, GPIO_PORT209, | ||
100 | |||
101 | GPIO_PORT210, GPIO_PORT211, | ||
102 | |||
103 | /* IRQ */ | ||
104 | GPIO_FN_IRQ0_PORT2, GPIO_FN_IRQ0_PORT13, | ||
105 | GPIO_FN_IRQ1, | ||
106 | GPIO_FN_IRQ2_PORT11, GPIO_FN_IRQ2_PORT12, | ||
107 | GPIO_FN_IRQ3_PORT10, GPIO_FN_IRQ3_PORT14, | ||
108 | GPIO_FN_IRQ4_PORT15, GPIO_FN_IRQ4_PORT172, | ||
109 | GPIO_FN_IRQ5_PORT0, GPIO_FN_IRQ5_PORT1, | ||
110 | GPIO_FN_IRQ6_PORT121, GPIO_FN_IRQ6_PORT173, | ||
111 | GPIO_FN_IRQ7_PORT120, GPIO_FN_IRQ7_PORT209, | ||
112 | GPIO_FN_IRQ8, | ||
113 | GPIO_FN_IRQ9_PORT118, GPIO_FN_IRQ9_PORT210, | ||
114 | GPIO_FN_IRQ10, | ||
115 | GPIO_FN_IRQ11, | ||
116 | GPIO_FN_IRQ12_PORT42, GPIO_FN_IRQ12_PORT97, | ||
117 | GPIO_FN_IRQ13_PORT64, GPIO_FN_IRQ13_PORT98, | ||
118 | GPIO_FN_IRQ14_PORT63, GPIO_FN_IRQ14_PORT99, | ||
119 | GPIO_FN_IRQ15_PORT62, GPIO_FN_IRQ15_PORT100, | ||
120 | GPIO_FN_IRQ16_PORT68, GPIO_FN_IRQ16_PORT211, | ||
121 | GPIO_FN_IRQ17, | ||
122 | GPIO_FN_IRQ18, | ||
123 | GPIO_FN_IRQ19, | ||
124 | GPIO_FN_IRQ20, | ||
125 | GPIO_FN_IRQ21, | ||
126 | GPIO_FN_IRQ22, | ||
127 | GPIO_FN_IRQ23, | ||
128 | GPIO_FN_IRQ24, | ||
129 | GPIO_FN_IRQ25, | ||
130 | GPIO_FN_IRQ26_PORT58, GPIO_FN_IRQ26_PORT81, | ||
131 | GPIO_FN_IRQ27_PORT57, GPIO_FN_IRQ27_PORT168, | ||
132 | GPIO_FN_IRQ28_PORT56, GPIO_FN_IRQ28_PORT169, | ||
133 | GPIO_FN_IRQ29_PORT50, GPIO_FN_IRQ29_PORT170, | ||
134 | GPIO_FN_IRQ30_PORT49, GPIO_FN_IRQ30_PORT171, | ||
135 | GPIO_FN_IRQ31_PORT41, GPIO_FN_IRQ31_PORT167, | ||
136 | |||
137 | /* Function */ | ||
138 | |||
139 | /* DBGT */ | ||
140 | GPIO_FN_DBGMDT2, GPIO_FN_DBGMDT1, GPIO_FN_DBGMDT0, | ||
141 | GPIO_FN_DBGMD10, GPIO_FN_DBGMD11, GPIO_FN_DBGMD20, | ||
142 | GPIO_FN_DBGMD21, | ||
143 | |||
144 | /* FSI-A */ | ||
145 | GPIO_FN_FSIAISLD_PORT0, /* FSIAISLD Port 0/5 */ | ||
146 | GPIO_FN_FSIAISLD_PORT5, | ||
147 | GPIO_FN_FSIASPDIF_PORT9, /* FSIASPDIF Port 9/18 */ | ||
148 | GPIO_FN_FSIASPDIF_PORT18, | ||
149 | GPIO_FN_FSIAOSLD1, GPIO_FN_FSIAOSLD2, | ||
150 | GPIO_FN_FSIAOLR, GPIO_FN_FSIAOBT, | ||
151 | GPIO_FN_FSIAOSLD, GPIO_FN_FSIAOMC, | ||
152 | GPIO_FN_FSIACK, GPIO_FN_FSIAILR, | ||
153 | GPIO_FN_FSIAIBT, | ||
154 | |||
155 | /* FSI-B */ | ||
156 | GPIO_FN_FSIBCK, | ||
157 | |||
158 | /* FMSI */ | ||
159 | GPIO_FN_FMSISLD_PORT1, /* FMSISLD Port 1/6 */ | ||
160 | GPIO_FN_FMSISLD_PORT6, | ||
161 | GPIO_FN_FMSIILR, GPIO_FN_FMSIIBT, | ||
162 | GPIO_FN_FMSIOLR, GPIO_FN_FMSIOBT, | ||
163 | GPIO_FN_FMSICK, GPIO_FN_FMSOILR, | ||
164 | GPIO_FN_FMSOIBT, GPIO_FN_FMSOOLR, | ||
165 | GPIO_FN_FMSOOBT, GPIO_FN_FMSOSLD, | ||
166 | GPIO_FN_FMSOCK, | ||
167 | |||
168 | /* SCIFA0 */ | ||
169 | GPIO_FN_SCIFA0_SCK, GPIO_FN_SCIFA0_CTS, | ||
170 | GPIO_FN_SCIFA0_RTS, GPIO_FN_SCIFA0_RXD, | ||
171 | GPIO_FN_SCIFA0_TXD, | ||
172 | |||
173 | /* SCIFA1 */ | ||
174 | GPIO_FN_SCIFA1_CTS, GPIO_FN_SCIFA1_SCK, | ||
175 | GPIO_FN_SCIFA1_RXD, GPIO_FN_SCIFA1_TXD, | ||
176 | GPIO_FN_SCIFA1_RTS, | ||
177 | |||
178 | /* SCIFA2 */ | ||
179 | GPIO_FN_SCIFA2_SCK_PORT22, /* SCIFA2_SCK Port 22/199 */ | ||
180 | GPIO_FN_SCIFA2_SCK_PORT199, | ||
181 | GPIO_FN_SCIFA2_RXD, GPIO_FN_SCIFA2_TXD, | ||
182 | GPIO_FN_SCIFA2_CTS, GPIO_FN_SCIFA2_RTS, | ||
183 | |||
184 | /* SCIFA3 */ | ||
185 | GPIO_FN_SCIFA3_RTS_PORT105, /* MSEL5CR_8_0 */ | ||
186 | GPIO_FN_SCIFA3_SCK_PORT116, | ||
187 | GPIO_FN_SCIFA3_CTS_PORT117, | ||
188 | GPIO_FN_SCIFA3_RXD_PORT174, | ||
189 | GPIO_FN_SCIFA3_TXD_PORT175, | ||
190 | |||
191 | GPIO_FN_SCIFA3_RTS_PORT161, /* MSEL5CR_8_1 */ | ||
192 | GPIO_FN_SCIFA3_SCK_PORT158, | ||
193 | GPIO_FN_SCIFA3_CTS_PORT162, | ||
194 | GPIO_FN_SCIFA3_RXD_PORT159, | ||
195 | GPIO_FN_SCIFA3_TXD_PORT160, | ||
196 | |||
197 | /* SCIFA4 */ | ||
198 | GPIO_FN_SCIFA4_RXD_PORT12, /* MSEL5CR[12:11] = 00 */ | ||
199 | GPIO_FN_SCIFA4_TXD_PORT13, | ||
200 | |||
201 | GPIO_FN_SCIFA4_RXD_PORT204, /* MSEL5CR[12:11] = 01 */ | ||
202 | GPIO_FN_SCIFA4_TXD_PORT203, | ||
203 | |||
204 | GPIO_FN_SCIFA4_RXD_PORT94, /* MSEL5CR[12:11] = 10 */ | ||
205 | GPIO_FN_SCIFA4_TXD_PORT93, | ||
206 | |||
207 | GPIO_FN_SCIFA4_SCK_PORT21, /* SCIFA4_SCK Port 21/205 */ | ||
208 | GPIO_FN_SCIFA4_SCK_PORT205, | ||
209 | |||
210 | /* SCIFA5 */ | ||
211 | GPIO_FN_SCIFA5_TXD_PORT20, /* MSEL5CR[15:14] = 00 */ | ||
212 | GPIO_FN_SCIFA5_RXD_PORT10, | ||
213 | |||
214 | GPIO_FN_SCIFA5_RXD_PORT207, /* MSEL5CR[15:14] = 01 */ | ||
215 | GPIO_FN_SCIFA5_TXD_PORT208, | ||
216 | |||
217 | GPIO_FN_SCIFA5_TXD_PORT91, /* MSEL5CR[15:14] = 10 */ | ||
218 | GPIO_FN_SCIFA5_RXD_PORT92, | ||
219 | |||
220 | GPIO_FN_SCIFA5_SCK_PORT23, /* SCIFA5_SCK Port 23/206 */ | ||
221 | GPIO_FN_SCIFA5_SCK_PORT206, | ||
222 | |||
223 | /* SCIFA6 */ | ||
224 | GPIO_FN_SCIFA6_SCK, GPIO_FN_SCIFA6_RXD, GPIO_FN_SCIFA6_TXD, | ||
225 | |||
226 | /* SCIFA7 */ | ||
227 | GPIO_FN_SCIFA7_TXD, GPIO_FN_SCIFA7_RXD, | ||
228 | |||
229 | /* SCIFAB */ | ||
230 | GPIO_FN_SCIFB_SCK_PORT190, /* MSEL5CR_17_0 */ | ||
231 | GPIO_FN_SCIFB_RXD_PORT191, | ||
232 | GPIO_FN_SCIFB_TXD_PORT192, | ||
233 | GPIO_FN_SCIFB_RTS_PORT186, | ||
234 | GPIO_FN_SCIFB_CTS_PORT187, | ||
235 | |||
236 | GPIO_FN_SCIFB_SCK_PORT2, /* MSEL5CR_17_1 */ | ||
237 | GPIO_FN_SCIFB_RXD_PORT3, | ||
238 | GPIO_FN_SCIFB_TXD_PORT4, | ||
239 | GPIO_FN_SCIFB_RTS_PORT172, | ||
240 | GPIO_FN_SCIFB_CTS_PORT173, | ||
241 | |||
242 | /* LCD0 */ | ||
243 | GPIO_FN_LCDC0_SELECT, | ||
244 | |||
245 | /* LCD1 */ | ||
246 | GPIO_FN_LCDC1_SELECT, | ||
247 | |||
248 | /* RSPI */ | ||
249 | GPIO_FN_RSPI_SSL0_A, GPIO_FN_RSPI_SSL1_A, | ||
250 | GPIO_FN_RSPI_SSL2_A, GPIO_FN_RSPI_SSL3_A, | ||
251 | GPIO_FN_RSPI_MOSI_A, GPIO_FN_RSPI_MISO_A, | ||
252 | GPIO_FN_RSPI_CK_A, | ||
253 | |||
254 | /* VIO CKO */ | ||
255 | GPIO_FN_VIO_CKO1, | ||
256 | GPIO_FN_VIO_CKO2, | ||
257 | GPIO_FN_VIO_CKO_1, | ||
258 | GPIO_FN_VIO_CKO, | ||
259 | |||
260 | /* VIO0 */ | ||
261 | GPIO_FN_VIO0_D0, GPIO_FN_VIO0_D1, GPIO_FN_VIO0_D2, | ||
262 | GPIO_FN_VIO0_D3, GPIO_FN_VIO0_D4, GPIO_FN_VIO0_D5, | ||
263 | GPIO_FN_VIO0_D6, GPIO_FN_VIO0_D7, GPIO_FN_VIO0_D8, | ||
264 | GPIO_FN_VIO0_D9, GPIO_FN_VIO0_D10, GPIO_FN_VIO0_D11, | ||
265 | GPIO_FN_VIO0_D12, GPIO_FN_VIO0_VD, GPIO_FN_VIO0_HD, | ||
266 | GPIO_FN_VIO0_CLK, GPIO_FN_VIO0_FIELD, | ||
267 | |||
268 | GPIO_FN_VIO0_D13_PORT26, /* MSEL5CR_27_0 */ | ||
269 | GPIO_FN_VIO0_D14_PORT25, | ||
270 | GPIO_FN_VIO0_D15_PORT24, | ||
271 | |||
272 | GPIO_FN_VIO0_D13_PORT22, /* MSEL5CR_27_1 */ | ||
273 | GPIO_FN_VIO0_D14_PORT95, | ||
274 | GPIO_FN_VIO0_D15_PORT96, | ||
275 | |||
276 | /* VIO1 */ | ||
277 | GPIO_FN_VIO1_D0, GPIO_FN_VIO1_D1, GPIO_FN_VIO1_D2, | ||
278 | GPIO_FN_VIO1_D3, GPIO_FN_VIO1_D4, GPIO_FN_VIO1_D5, | ||
279 | GPIO_FN_VIO1_D6, GPIO_FN_VIO1_D7, GPIO_FN_VIO1_VD, | ||
280 | GPIO_FN_VIO1_HD, GPIO_FN_VIO1_CLK, GPIO_FN_VIO1_FIELD, | ||
281 | |||
282 | /* TPU0 */ | ||
283 | GPIO_FN_TPU0TO0, GPIO_FN_TPU0TO1, | ||
284 | GPIO_FN_TPU0TO3, | ||
285 | GPIO_FN_TPU0TO2_PORT66, /* TPU0TO2 Port 66/202 */ | ||
286 | GPIO_FN_TPU0TO2_PORT202, | ||
287 | |||
288 | /* SSP1 0 */ | ||
289 | GPIO_FN_STP0_IPD0, GPIO_FN_STP0_IPD1, GPIO_FN_STP0_IPD2, | ||
290 | GPIO_FN_STP0_IPD3, GPIO_FN_STP0_IPD4, GPIO_FN_STP0_IPD5, | ||
291 | GPIO_FN_STP0_IPD6, GPIO_FN_STP0_IPD7, GPIO_FN_STP0_IPEN, | ||
292 | GPIO_FN_STP0_IPCLK, GPIO_FN_STP0_IPSYNC, | ||
293 | |||
294 | /* SSP1 1 */ | ||
295 | GPIO_FN_STP1_IPD1, GPIO_FN_STP1_IPD2, GPIO_FN_STP1_IPD3, | ||
296 | GPIO_FN_STP1_IPD4, GPIO_FN_STP1_IPD5, GPIO_FN_STP1_IPD6, | ||
297 | GPIO_FN_STP1_IPD7, GPIO_FN_STP1_IPCLK, GPIO_FN_STP1_IPSYNC, | ||
298 | |||
299 | GPIO_FN_STP1_IPD0_PORT186, /* MSEL5CR_23_0 */ | ||
300 | GPIO_FN_STP1_IPEN_PORT187, | ||
301 | |||
302 | GPIO_FN_STP1_IPD0_PORT194, /* MSEL5CR_23_1 */ | ||
303 | GPIO_FN_STP1_IPEN_PORT193, | ||
304 | |||
305 | /* SIM */ | ||
306 | GPIO_FN_SIM_RST, GPIO_FN_SIM_CLK, | ||
307 | GPIO_FN_SIM_D_PORT22, /* SIM_D Port 22/199 */ | ||
308 | GPIO_FN_SIM_D_PORT199, | ||
309 | |||
310 | /* MSIOF2 */ | ||
311 | GPIO_FN_MSIOF2_TXD, GPIO_FN_MSIOF2_RXD, GPIO_FN_MSIOF2_TSCK, | ||
312 | GPIO_FN_MSIOF2_SS2, GPIO_FN_MSIOF2_TSYNC, GPIO_FN_MSIOF2_SS1, | ||
313 | GPIO_FN_MSIOF2_MCK1, GPIO_FN_MSIOF2_MCK0, GPIO_FN_MSIOF2_RSYNC, | ||
314 | GPIO_FN_MSIOF2_RSCK, | ||
315 | |||
316 | /* KEYSC */ | ||
317 | GPIO_FN_KEYIN4, GPIO_FN_KEYIN5, | ||
318 | GPIO_FN_KEYIN6, GPIO_FN_KEYIN7, | ||
319 | GPIO_FN_KEYOUT0, GPIO_FN_KEYOUT1, GPIO_FN_KEYOUT2, | ||
320 | GPIO_FN_KEYOUT3, GPIO_FN_KEYOUT4, GPIO_FN_KEYOUT5, | ||
321 | GPIO_FN_KEYOUT6, GPIO_FN_KEYOUT7, | ||
322 | |||
323 | GPIO_FN_KEYIN0_PORT43, /* MSEL4CR_18_0 */ | ||
324 | GPIO_FN_KEYIN1_PORT44, | ||
325 | GPIO_FN_KEYIN2_PORT45, | ||
326 | GPIO_FN_KEYIN3_PORT46, | ||
327 | |||
328 | GPIO_FN_KEYIN0_PORT58, /* MSEL4CR_18_1 */ | ||
329 | GPIO_FN_KEYIN1_PORT57, | ||
330 | GPIO_FN_KEYIN2_PORT56, | ||
331 | GPIO_FN_KEYIN3_PORT55, | ||
332 | |||
333 | /* VOU */ | ||
334 | GPIO_FN_DV_D0, GPIO_FN_DV_D1, GPIO_FN_DV_D2, GPIO_FN_DV_D3, | ||
335 | GPIO_FN_DV_D4, GPIO_FN_DV_D5, GPIO_FN_DV_D6, GPIO_FN_DV_D7, | ||
336 | GPIO_FN_DV_D8, GPIO_FN_DV_D9, GPIO_FN_DV_D10, GPIO_FN_DV_D11, | ||
337 | GPIO_FN_DV_D12, GPIO_FN_DV_D13, GPIO_FN_DV_D14, GPIO_FN_DV_D15, | ||
338 | GPIO_FN_DV_CLK, | ||
339 | GPIO_FN_DV_VSYNC, | ||
340 | GPIO_FN_DV_HSYNC, | ||
341 | |||
342 | /* MEMC */ | ||
343 | GPIO_FN_MEMC_AD0, GPIO_FN_MEMC_AD1, GPIO_FN_MEMC_AD2, | ||
344 | GPIO_FN_MEMC_AD3, GPIO_FN_MEMC_AD4, GPIO_FN_MEMC_AD5, | ||
345 | GPIO_FN_MEMC_AD6, GPIO_FN_MEMC_AD7, GPIO_FN_MEMC_AD8, | ||
346 | GPIO_FN_MEMC_AD9, GPIO_FN_MEMC_AD10, GPIO_FN_MEMC_AD11, | ||
347 | GPIO_FN_MEMC_AD12, GPIO_FN_MEMC_AD13, GPIO_FN_MEMC_AD14, | ||
348 | GPIO_FN_MEMC_AD15, GPIO_FN_MEMC_CS0, GPIO_FN_MEMC_INT, | ||
349 | GPIO_FN_MEMC_NWE, GPIO_FN_MEMC_NOE, | ||
350 | |||
351 | GPIO_FN_MEMC_CS1, /* MSEL4CR_6_0 */ | ||
352 | GPIO_FN_MEMC_ADV, | ||
353 | GPIO_FN_MEMC_WAIT, | ||
354 | GPIO_FN_MEMC_BUSCLK, | ||
355 | |||
356 | GPIO_FN_MEMC_A1, /* MSEL4CR_6_1 */ | ||
357 | GPIO_FN_MEMC_DREQ0, | ||
358 | GPIO_FN_MEMC_DREQ1, | ||
359 | GPIO_FN_MEMC_A0, | ||
360 | |||
361 | /* MSIOF0 */ | ||
362 | GPIO_FN_MSIOF0_SS1, GPIO_FN_MSIOF0_SS2, | ||
363 | GPIO_FN_MSIOF0_RXD, GPIO_FN_MSIOF0_TXD, | ||
364 | GPIO_FN_MSIOF0_MCK0, GPIO_FN_MSIOF0_MCK1, | ||
365 | GPIO_FN_MSIOF0_RSYNC, GPIO_FN_MSIOF0_RSCK, | ||
366 | GPIO_FN_MSIOF0_TSCK, GPIO_FN_MSIOF0_TSYNC, | ||
367 | |||
368 | /* MSIOF1 */ | ||
369 | GPIO_FN_MSIOF1_RSCK, GPIO_FN_MSIOF1_RSYNC, | ||
370 | GPIO_FN_MSIOF1_MCK0, GPIO_FN_MSIOF1_MCK1, | ||
371 | |||
372 | GPIO_FN_MSIOF1_SS2_PORT116, GPIO_FN_MSIOF1_SS1_PORT117, | ||
373 | GPIO_FN_MSIOF1_RXD_PORT118, GPIO_FN_MSIOF1_TXD_PORT119, | ||
374 | GPIO_FN_MSIOF1_TSYNC_PORT120, | ||
375 | GPIO_FN_MSIOF1_TSCK_PORT121, /* MSEL4CR_10_0 */ | ||
376 | |||
377 | GPIO_FN_MSIOF1_SS1_PORT67, GPIO_FN_MSIOF1_TSCK_PORT72, | ||
378 | GPIO_FN_MSIOF1_TSYNC_PORT73, GPIO_FN_MSIOF1_TXD_PORT74, | ||
379 | GPIO_FN_MSIOF1_RXD_PORT75, | ||
380 | GPIO_FN_MSIOF1_SS2_PORT202, /* MSEL4CR_10_1 */ | ||
381 | |||
382 | /* GPIO */ | ||
383 | GPIO_FN_GPO0, GPIO_FN_GPI0, | ||
384 | GPIO_FN_GPO1, GPIO_FN_GPI1, | ||
385 | |||
386 | /* USB0 */ | ||
387 | GPIO_FN_USB0_OCI, GPIO_FN_USB0_PPON, GPIO_FN_VBUS, | ||
388 | |||
389 | /* USB1 */ | ||
390 | GPIO_FN_USB1_OCI, GPIO_FN_USB1_PPON, | ||
391 | |||
392 | /* BBIF1 */ | ||
393 | GPIO_FN_BBIF1_RXD, GPIO_FN_BBIF1_TXD, GPIO_FN_BBIF1_TSYNC, | ||
394 | GPIO_FN_BBIF1_TSCK, GPIO_FN_BBIF1_RSCK, GPIO_FN_BBIF1_RSYNC, | ||
395 | GPIO_FN_BBIF1_FLOW, GPIO_FN_BBIF1_RX_FLOW_N, | ||
396 | |||
397 | /* BBIF2 */ | ||
398 | GPIO_FN_BBIF2_TXD2_PORT5, /* MSEL5CR_0_0 */ | ||
399 | GPIO_FN_BBIF2_RXD2_PORT60, | ||
400 | GPIO_FN_BBIF2_TSYNC2_PORT6, | ||
401 | GPIO_FN_BBIF2_TSCK2_PORT59, | ||
402 | |||
403 | GPIO_FN_BBIF2_RXD2_PORT90, /* MSEL5CR_0_1 */ | ||
404 | GPIO_FN_BBIF2_TXD2_PORT183, | ||
405 | GPIO_FN_BBIF2_TSCK2_PORT89, | ||
406 | GPIO_FN_BBIF2_TSYNC2_PORT184, | ||
407 | |||
408 | /* BSC / FLCTL / PCMCIA */ | ||
409 | GPIO_FN_CS0, GPIO_FN_CS2, GPIO_FN_CS4, | ||
410 | GPIO_FN_CS5B, GPIO_FN_CS6A, | ||
411 | GPIO_FN_CS5A_PORT105, /* CS5A PORT 19/105 */ | ||
412 | GPIO_FN_CS5A_PORT19, | ||
413 | GPIO_FN_IOIS16, /* ? */ | ||
414 | |||
415 | GPIO_FN_A0, GPIO_FN_A1, GPIO_FN_A2, GPIO_FN_A3, | ||
416 | GPIO_FN_A4_FOE, /* share with FLCTL */ | ||
417 | GPIO_FN_A5_FCDE, /* share with FLCTL */ | ||
418 | GPIO_FN_A6, GPIO_FN_A7, GPIO_FN_A8, GPIO_FN_A9, | ||
419 | GPIO_FN_A10, GPIO_FN_A11, GPIO_FN_A12, GPIO_FN_A13, | ||
420 | GPIO_FN_A14, GPIO_FN_A15, GPIO_FN_A16, GPIO_FN_A17, | ||
421 | GPIO_FN_A18, GPIO_FN_A19, GPIO_FN_A20, GPIO_FN_A21, | ||
422 | GPIO_FN_A22, GPIO_FN_A23, GPIO_FN_A24, GPIO_FN_A25, | ||
423 | GPIO_FN_A26, | ||
424 | |||
425 | GPIO_FN_D0_NAF0, GPIO_FN_D1_NAF1, /* share with FLCTL */ | ||
426 | GPIO_FN_D2_NAF2, GPIO_FN_D3_NAF3, /* share with FLCTL */ | ||
427 | GPIO_FN_D4_NAF4, GPIO_FN_D5_NAF5, /* share with FLCTL */ | ||
428 | GPIO_FN_D6_NAF6, GPIO_FN_D7_NAF7, /* share with FLCTL */ | ||
429 | GPIO_FN_D8_NAF8, GPIO_FN_D9_NAF9, /* share with FLCTL */ | ||
430 | GPIO_FN_D10_NAF10, GPIO_FN_D11_NAF11, /* share with FLCTL */ | ||
431 | GPIO_FN_D12_NAF12, GPIO_FN_D13_NAF13, /* share with FLCTL */ | ||
432 | GPIO_FN_D14_NAF14, GPIO_FN_D15_NAF15, /* share with FLCTL */ | ||
433 | |||
434 | GPIO_FN_D16, GPIO_FN_D17, GPIO_FN_D18, GPIO_FN_D19, | ||
435 | GPIO_FN_D20, GPIO_FN_D21, GPIO_FN_D22, GPIO_FN_D23, | ||
436 | GPIO_FN_D24, GPIO_FN_D25, GPIO_FN_D26, GPIO_FN_D27, | ||
437 | GPIO_FN_D28, GPIO_FN_D29, GPIO_FN_D30, GPIO_FN_D31, | ||
438 | |||
439 | GPIO_FN_WE0_FWE, /* share with FLCTL */ | ||
440 | GPIO_FN_WE1, | ||
441 | GPIO_FN_WE2_ICIORD, /* share with PCMCIA */ | ||
442 | GPIO_FN_WE3_ICIOWR, /* share with PCMCIA */ | ||
443 | GPIO_FN_CKO, GPIO_FN_BS, GPIO_FN_RDWR, | ||
444 | GPIO_FN_RD_FSC, /* share with FLCTL */ | ||
445 | GPIO_FN_WAIT_PORT177, /* WAIT Port 90/177 */ | ||
446 | GPIO_FN_WAIT_PORT90, | ||
447 | |||
448 | GPIO_FN_FCE0, GPIO_FN_FCE1, GPIO_FN_FRB, /* FLCTL */ | ||
449 | |||
450 | /* IRDA */ | ||
451 | GPIO_FN_IRDA_FIRSEL, GPIO_FN_IRDA_IN, GPIO_FN_IRDA_OUT, | ||
452 | |||
453 | /* ATAPI */ | ||
454 | GPIO_FN_IDE_D0, GPIO_FN_IDE_D1, GPIO_FN_IDE_D2, | ||
455 | GPIO_FN_IDE_D3, GPIO_FN_IDE_D4, GPIO_FN_IDE_D5, | ||
456 | GPIO_FN_IDE_D6, GPIO_FN_IDE_D7, GPIO_FN_IDE_D8, | ||
457 | GPIO_FN_IDE_D9, GPIO_FN_IDE_D10, GPIO_FN_IDE_D11, | ||
458 | GPIO_FN_IDE_D12, GPIO_FN_IDE_D13, GPIO_FN_IDE_D14, | ||
459 | GPIO_FN_IDE_D15, GPIO_FN_IDE_A0, GPIO_FN_IDE_A1, | ||
460 | GPIO_FN_IDE_A2, GPIO_FN_IDE_CS0, GPIO_FN_IDE_CS1, | ||
461 | GPIO_FN_IDE_IOWR, GPIO_FN_IDE_IORD, GPIO_FN_IDE_IORDY, | ||
462 | GPIO_FN_IDE_INT, GPIO_FN_IDE_RST, GPIO_FN_IDE_DIRECTION, | ||
463 | GPIO_FN_IDE_EXBUF_ENB, GPIO_FN_IDE_IODACK, GPIO_FN_IDE_IODREQ, | ||
464 | |||
465 | /* RMII */ | ||
466 | GPIO_FN_RMII_CRS_DV, GPIO_FN_RMII_RX_ER, GPIO_FN_RMII_RXD0, | ||
467 | GPIO_FN_RMII_RXD1, GPIO_FN_RMII_TX_EN, GPIO_FN_RMII_TXD0, | ||
468 | GPIO_FN_RMII_MDC, GPIO_FN_RMII_TXD1, GPIO_FN_RMII_MDIO, | ||
469 | GPIO_FN_RMII_REF50CK, /* for RMII */ | ||
470 | GPIO_FN_RMII_REF125CK, /* for GMII */ | ||
471 | |||
472 | /* GEther */ | ||
473 | GPIO_FN_ET_TX_CLK, GPIO_FN_ET_TX_EN, GPIO_FN_ET_ETXD0, | ||
474 | GPIO_FN_ET_ETXD1, GPIO_FN_ET_ETXD2, GPIO_FN_ET_ETXD3, | ||
475 | GPIO_FN_ET_ETXD4, GPIO_FN_ET_ETXD5, /* for GEther */ | ||
476 | GPIO_FN_ET_ETXD6, GPIO_FN_ET_ETXD7, /* for GEther */ | ||
477 | GPIO_FN_ET_COL, GPIO_FN_ET_TX_ER, | ||
478 | GPIO_FN_ET_RX_CLK, GPIO_FN_ET_RX_DV, | ||
479 | GPIO_FN_ET_ERXD0, GPIO_FN_ET_ERXD1, | ||
480 | GPIO_FN_ET_ERXD2, GPIO_FN_ET_ERXD3, | ||
481 | GPIO_FN_ET_ERXD4, GPIO_FN_ET_ERXD5, /* for GEther */ | ||
482 | GPIO_FN_ET_ERXD6, GPIO_FN_ET_ERXD7, /* for GEther */ | ||
483 | GPIO_FN_ET_RX_ER, GPIO_FN_ET_CRS, | ||
484 | GPIO_FN_ET_MDC, GPIO_FN_ET_MDIO, | ||
485 | GPIO_FN_ET_LINK, GPIO_FN_ET_PHY_INT, | ||
486 | GPIO_FN_ET_WOL, GPIO_FN_ET_GTX_CLK, | ||
487 | |||
488 | /* DMA0 */ | ||
489 | GPIO_FN_DREQ0, GPIO_FN_DACK0, | ||
490 | |||
491 | /* DMA1 */ | ||
492 | GPIO_FN_DREQ1, GPIO_FN_DACK1, | ||
493 | |||
494 | /* SYSC */ | ||
495 | GPIO_FN_RESETOUTS, | ||
496 | GPIO_FN_RESETP_PULLUP, | ||
497 | GPIO_FN_RESETP_PLAIN, | ||
498 | |||
499 | /* HDMI */ | ||
500 | GPIO_FN_HDMI_HPD, | ||
501 | GPIO_FN_HDMI_CEC, | ||
502 | |||
503 | /* SDENC */ | ||
504 | GPIO_FN_SDENC_CPG, | ||
505 | GPIO_FN_SDENC_DV_CLKI, | ||
506 | |||
507 | /* IRREM */ | ||
508 | GPIO_FN_IROUT, | ||
509 | |||
510 | /* DEBUG */ | ||
511 | GPIO_FN_EDEBGREQ_PULLDOWN, | ||
512 | GPIO_FN_EDEBGREQ_PULLUP, | ||
513 | |||
514 | GPIO_FN_TRACEAUD_FROM_VIO, | ||
515 | GPIO_FN_TRACEAUD_FROM_LCDC0, | ||
516 | GPIO_FN_TRACEAUD_FROM_MEMC, | ||
517 | }; | ||
518 | |||
519 | /* DMA slave IDs */ | 31 | /* DMA slave IDs */ |
520 | enum { | 32 | enum { |
521 | SHDMA_SLAVE_INVALID, | 33 | SHDMA_SLAVE_INVALID, |
diff --git a/arch/arm/mach-shmobile/include/mach/r8a7778.h b/arch/arm/mach-shmobile/include/mach/r8a7778.h index 951149e6bcca..ae65b459483f 100644 --- a/arch/arm/mach-shmobile/include/mach/r8a7778.h +++ b/arch/arm/mach-shmobile/include/mach/r8a7778.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #ifndef __ASM_R8A7778_H__ | 18 | #ifndef __ASM_R8A7778_H__ |
19 | #define __ASM_R8A7778_H__ | 19 | #define __ASM_R8A7778_H__ |
20 | 20 | ||
21 | #include <linux/mmc/sh_mobile_sdhi.h> | ||
21 | #include <linux/sh_eth.h> | 22 | #include <linux/sh_eth.h> |
22 | 23 | ||
23 | extern void r8a7778_add_standard_devices(void); | 24 | extern void r8a7778_add_standard_devices(void); |
@@ -28,5 +29,7 @@ extern void r8a7778_init_irq(void); | |||
28 | extern void r8a7778_init_irq_dt(void); | 29 | extern void r8a7778_init_irq_dt(void); |
29 | extern void r8a7778_clock_init(void); | 30 | extern void r8a7778_clock_init(void); |
30 | extern void r8a7778_init_irq_extpin(int irlm); | 31 | extern void r8a7778_init_irq_extpin(int irlm); |
32 | extern void r8a7778_pinmux_init(void); | ||
33 | extern void r8a7778_sdhi_init(int id, struct sh_mobile_sdhi_info *info); | ||
31 | 34 | ||
32 | #endif /* __ASM_R8A7778_H__ */ | 35 | #endif /* __ASM_R8A7778_H__ */ |
diff --git a/arch/arm/mach-shmobile/include/mach/sh7372.h b/arch/arm/mach-shmobile/include/mach/sh7372.h index fd7cba024c39..e882717ca97f 100644 --- a/arch/arm/mach-shmobile/include/mach/sh7372.h +++ b/arch/arm/mach-shmobile/include/mach/sh7372.h | |||
@@ -15,397 +15,6 @@ | |||
15 | #include <linux/pm_domain.h> | 15 | #include <linux/pm_domain.h> |
16 | #include <mach/pm-rmobile.h> | 16 | #include <mach/pm-rmobile.h> |
17 | 17 | ||
18 | /* | ||
19 | * Pin Function Controller: | ||
20 | * GPIO_FN_xx - GPIO used to select pin function | ||
21 | * GPIO_PORTxx - GPIO mapped to real I/O pin on CPU | ||
22 | */ | ||
23 | enum { | ||
24 | /* PORT */ | ||
25 | GPIO_PORT0, GPIO_PORT1, GPIO_PORT2, GPIO_PORT3, GPIO_PORT4, | ||
26 | GPIO_PORT5, GPIO_PORT6, GPIO_PORT7, GPIO_PORT8, GPIO_PORT9, | ||
27 | |||
28 | GPIO_PORT10, GPIO_PORT11, GPIO_PORT12, GPIO_PORT13, GPIO_PORT14, | ||
29 | GPIO_PORT15, GPIO_PORT16, GPIO_PORT17, GPIO_PORT18, GPIO_PORT19, | ||
30 | |||
31 | GPIO_PORT20, GPIO_PORT21, GPIO_PORT22, GPIO_PORT23, GPIO_PORT24, | ||
32 | GPIO_PORT25, GPIO_PORT26, GPIO_PORT27, GPIO_PORT28, GPIO_PORT29, | ||
33 | |||
34 | GPIO_PORT30, GPIO_PORT31, GPIO_PORT32, GPIO_PORT33, GPIO_PORT34, | ||
35 | GPIO_PORT35, GPIO_PORT36, GPIO_PORT37, GPIO_PORT38, GPIO_PORT39, | ||
36 | |||
37 | GPIO_PORT40, GPIO_PORT41, GPIO_PORT42, GPIO_PORT43, GPIO_PORT44, | ||
38 | GPIO_PORT45, GPIO_PORT46, GPIO_PORT47, GPIO_PORT48, GPIO_PORT49, | ||
39 | |||
40 | GPIO_PORT50, GPIO_PORT51, GPIO_PORT52, GPIO_PORT53, GPIO_PORT54, | ||
41 | GPIO_PORT55, GPIO_PORT56, GPIO_PORT57, GPIO_PORT58, GPIO_PORT59, | ||
42 | |||
43 | GPIO_PORT60, GPIO_PORT61, GPIO_PORT62, GPIO_PORT63, GPIO_PORT64, | ||
44 | GPIO_PORT65, GPIO_PORT66, GPIO_PORT67, GPIO_PORT68, GPIO_PORT69, | ||
45 | |||
46 | GPIO_PORT70, GPIO_PORT71, GPIO_PORT72, GPIO_PORT73, GPIO_PORT74, | ||
47 | GPIO_PORT75, GPIO_PORT76, GPIO_PORT77, GPIO_PORT78, GPIO_PORT79, | ||
48 | |||
49 | GPIO_PORT80, GPIO_PORT81, GPIO_PORT82, GPIO_PORT83, GPIO_PORT84, | ||
50 | GPIO_PORT85, GPIO_PORT86, GPIO_PORT87, GPIO_PORT88, GPIO_PORT89, | ||
51 | |||
52 | GPIO_PORT90, GPIO_PORT91, GPIO_PORT92, GPIO_PORT93, GPIO_PORT94, | ||
53 | GPIO_PORT95, GPIO_PORT96, GPIO_PORT97, GPIO_PORT98, GPIO_PORT99, | ||
54 | |||
55 | GPIO_PORT100, GPIO_PORT101, GPIO_PORT102, GPIO_PORT103, GPIO_PORT104, | ||
56 | GPIO_PORT105, GPIO_PORT106, GPIO_PORT107, GPIO_PORT108, GPIO_PORT109, | ||
57 | |||
58 | GPIO_PORT110, GPIO_PORT111, GPIO_PORT112, GPIO_PORT113, GPIO_PORT114, | ||
59 | GPIO_PORT115, GPIO_PORT116, GPIO_PORT117, GPIO_PORT118, GPIO_PORT119, | ||
60 | |||
61 | GPIO_PORT120, GPIO_PORT121, GPIO_PORT122, GPIO_PORT123, GPIO_PORT124, | ||
62 | GPIO_PORT125, GPIO_PORT126, GPIO_PORT127, GPIO_PORT128, GPIO_PORT129, | ||
63 | |||
64 | GPIO_PORT130, GPIO_PORT131, GPIO_PORT132, GPIO_PORT133, GPIO_PORT134, | ||
65 | GPIO_PORT135, GPIO_PORT136, GPIO_PORT137, GPIO_PORT138, GPIO_PORT139, | ||
66 | |||
67 | GPIO_PORT140, GPIO_PORT141, GPIO_PORT142, GPIO_PORT143, GPIO_PORT144, | ||
68 | GPIO_PORT145, GPIO_PORT146, GPIO_PORT147, GPIO_PORT148, GPIO_PORT149, | ||
69 | |||
70 | GPIO_PORT150, GPIO_PORT151, GPIO_PORT152, GPIO_PORT153, GPIO_PORT154, | ||
71 | GPIO_PORT155, GPIO_PORT156, GPIO_PORT157, GPIO_PORT158, GPIO_PORT159, | ||
72 | |||
73 | GPIO_PORT160, GPIO_PORT161, GPIO_PORT162, GPIO_PORT163, GPIO_PORT164, | ||
74 | GPIO_PORT165, GPIO_PORT166, GPIO_PORT167, GPIO_PORT168, GPIO_PORT169, | ||
75 | |||
76 | GPIO_PORT170, GPIO_PORT171, GPIO_PORT172, GPIO_PORT173, GPIO_PORT174, | ||
77 | GPIO_PORT175, GPIO_PORT176, GPIO_PORT177, GPIO_PORT178, GPIO_PORT179, | ||
78 | |||
79 | GPIO_PORT180, GPIO_PORT181, GPIO_PORT182, GPIO_PORT183, GPIO_PORT184, | ||
80 | GPIO_PORT185, GPIO_PORT186, GPIO_PORT187, GPIO_PORT188, GPIO_PORT189, | ||
81 | |||
82 | GPIO_PORT190, | ||
83 | |||
84 | /* IRQ */ | ||
85 | GPIO_FN_IRQ0_6, /* PORT 6 */ | ||
86 | GPIO_FN_IRQ0_162, /* PORT 162 */ | ||
87 | GPIO_FN_IRQ1, /* PORT 12 */ | ||
88 | GPIO_FN_IRQ2_4, /* PORT 4 */ | ||
89 | GPIO_FN_IRQ2_5, /* PORT 5 */ | ||
90 | GPIO_FN_IRQ3_8, /* PORT 8 */ | ||
91 | GPIO_FN_IRQ3_16, /* PORT 16 */ | ||
92 | GPIO_FN_IRQ4_17, /* PORT 17 */ | ||
93 | GPIO_FN_IRQ4_163, /* PORT 163 */ | ||
94 | GPIO_FN_IRQ5, /* PORT 18 */ | ||
95 | GPIO_FN_IRQ6_39, /* PORT 39 */ | ||
96 | GPIO_FN_IRQ6_164, /* PORT 164 */ | ||
97 | GPIO_FN_IRQ7_40, /* PORT 40 */ | ||
98 | GPIO_FN_IRQ7_167, /* PORT 167 */ | ||
99 | GPIO_FN_IRQ8_41, /* PORT 41 */ | ||
100 | GPIO_FN_IRQ8_168, /* PORT 168 */ | ||
101 | GPIO_FN_IRQ9_42, /* PORT 42 */ | ||
102 | GPIO_FN_IRQ9_169, /* PORT 169 */ | ||
103 | GPIO_FN_IRQ10, /* PORT 65 */ | ||
104 | GPIO_FN_IRQ11, /* PORT 67 */ | ||
105 | GPIO_FN_IRQ12_80, /* PORT 80 */ | ||
106 | GPIO_FN_IRQ12_137, /* PORT 137 */ | ||
107 | GPIO_FN_IRQ13_81, /* PORT 81 */ | ||
108 | GPIO_FN_IRQ13_145, /* PORT 145 */ | ||
109 | GPIO_FN_IRQ14_82, /* PORT 82 */ | ||
110 | GPIO_FN_IRQ14_146, /* PORT 146 */ | ||
111 | GPIO_FN_IRQ15_83, /* PORT 83 */ | ||
112 | GPIO_FN_IRQ15_147, /* PORT 147 */ | ||
113 | GPIO_FN_IRQ16_84, /* PORT 84 */ | ||
114 | GPIO_FN_IRQ16_170, /* PORT 170 */ | ||
115 | GPIO_FN_IRQ17, /* PORT 85 */ | ||
116 | GPIO_FN_IRQ18, /* PORT 86 */ | ||
117 | GPIO_FN_IRQ19, /* PORT 87 */ | ||
118 | GPIO_FN_IRQ20, /* PORT 92 */ | ||
119 | GPIO_FN_IRQ21, /* PORT 93 */ | ||
120 | GPIO_FN_IRQ22, /* PORT 94 */ | ||
121 | GPIO_FN_IRQ23, /* PORT 95 */ | ||
122 | GPIO_FN_IRQ24, /* PORT 112 */ | ||
123 | GPIO_FN_IRQ25, /* PORT 119 */ | ||
124 | GPIO_FN_IRQ26_121, /* PORT 121 */ | ||
125 | GPIO_FN_IRQ26_172, /* PORT 172 */ | ||
126 | GPIO_FN_IRQ27_122, /* PORT 122 */ | ||
127 | GPIO_FN_IRQ27_180, /* PORT 180 */ | ||
128 | GPIO_FN_IRQ28_123, /* PORT 123 */ | ||
129 | GPIO_FN_IRQ28_181, /* PORT 181 */ | ||
130 | GPIO_FN_IRQ29_129, /* PORT 129 */ | ||
131 | GPIO_FN_IRQ29_182, /* PORT 182 */ | ||
132 | GPIO_FN_IRQ30_130, /* PORT 130 */ | ||
133 | GPIO_FN_IRQ30_183, /* PORT 183 */ | ||
134 | GPIO_FN_IRQ31_138, /* PORT 138 */ | ||
135 | GPIO_FN_IRQ31_184, /* PORT 184 */ | ||
136 | |||
137 | /* | ||
138 | * MSIOF0 (PORT 36, 37, 38, 39 | ||
139 | * 40, 41, 42, 43, 44, 45) | ||
140 | */ | ||
141 | GPIO_FN_MSIOF0_TSYNC, GPIO_FN_MSIOF0_TSCK, | ||
142 | GPIO_FN_MSIOF0_RXD, GPIO_FN_MSIOF0_RSCK, | ||
143 | GPIO_FN_MSIOF0_RSYNC, GPIO_FN_MSIOF0_MCK0, | ||
144 | GPIO_FN_MSIOF0_MCK1, GPIO_FN_MSIOF0_SS1, | ||
145 | GPIO_FN_MSIOF0_SS2, GPIO_FN_MSIOF0_TXD, | ||
146 | |||
147 | /* | ||
148 | * MSIOF1 (PORT 39, 40, 41, 42, 43, 44 | ||
149 | * 84, 85, 86, 87, 88, 89, 90, 91, 92, 93) | ||
150 | */ | ||
151 | GPIO_FN_MSIOF1_TSCK_39, GPIO_FN_MSIOF1_TSYNC_40, | ||
152 | GPIO_FN_MSIOF1_TSCK_88, GPIO_FN_MSIOF1_TSYNC_89, | ||
153 | GPIO_FN_MSIOF1_TXD_41, GPIO_FN_MSIOF1_RXD_42, | ||
154 | GPIO_FN_MSIOF1_TXD_90, GPIO_FN_MSIOF1_RXD_91, | ||
155 | GPIO_FN_MSIOF1_SS1_43, GPIO_FN_MSIOF1_SS2_44, | ||
156 | GPIO_FN_MSIOF1_SS1_92, GPIO_FN_MSIOF1_SS2_93, | ||
157 | GPIO_FN_MSIOF1_RSCK, GPIO_FN_MSIOF1_RSYNC, | ||
158 | GPIO_FN_MSIOF1_MCK0, GPIO_FN_MSIOF1_MCK1, | ||
159 | |||
160 | /* | ||
161 | * MSIOF2 (PORT 134, 135, 136, 137, 138, 139 | ||
162 | * 148, 149, 150, 151) | ||
163 | */ | ||
164 | GPIO_FN_MSIOF2_RSCK, GPIO_FN_MSIOF2_RSYNC, | ||
165 | GPIO_FN_MSIOF2_MCK0, GPIO_FN_MSIOF2_MCK1, | ||
166 | GPIO_FN_MSIOF2_SS1, GPIO_FN_MSIOF2_SS2, | ||
167 | GPIO_FN_MSIOF2_TSYNC, GPIO_FN_MSIOF2_TSCK, | ||
168 | GPIO_FN_MSIOF2_RXD, GPIO_FN_MSIOF2_TXD, | ||
169 | |||
170 | /* MSIOF3 (PORT 76, 77, 78, 79, 80, 81, 82, 83) */ | ||
171 | GPIO_FN_BBIF1_RXD, GPIO_FN_BBIF1_TSYNC, | ||
172 | GPIO_FN_BBIF1_TSCK, GPIO_FN_BBIF1_TXD, | ||
173 | GPIO_FN_BBIF1_RSCK, GPIO_FN_BBIF1_RSYNC, | ||
174 | GPIO_FN_BBIF1_FLOW, GPIO_FN_BB_RX_FLOW_N, | ||
175 | |||
176 | /* MSIOF4 (PORT 0, 1, 2, 3) */ | ||
177 | GPIO_FN_BBIF2_TSCK1, GPIO_FN_BBIF2_TSYNC1, | ||
178 | GPIO_FN_BBIF2_TXD1, GPIO_FN_BBIF2_RXD, | ||
179 | |||
180 | /* FSI (PORT 4, 5, 6, 7, 8, 9, 10, 11, 15) */ | ||
181 | GPIO_FN_FSIACK, GPIO_FN_FSIBCK, | ||
182 | GPIO_FN_FSIAILR, GPIO_FN_FSIAIBT, | ||
183 | GPIO_FN_FSIAISLD, GPIO_FN_FSIAOMC, | ||
184 | GPIO_FN_FSIAOLR, GPIO_FN_FSIAOBT, | ||
185 | GPIO_FN_FSIAOSLD, GPIO_FN_FSIASPDIF_11, | ||
186 | GPIO_FN_FSIASPDIF_15, | ||
187 | |||
188 | /* FMSI (PORT 12, 13, 14, 15, 16, 17, 18, 65) */ | ||
189 | GPIO_FN_FMSOCK, GPIO_FN_FMSOOLR, | ||
190 | GPIO_FN_FMSIOLR, GPIO_FN_FMSOOBT, | ||
191 | GPIO_FN_FMSIOBT, GPIO_FN_FMSOSLD, | ||
192 | GPIO_FN_FMSOILR, GPIO_FN_FMSIILR, | ||
193 | GPIO_FN_FMSOIBT, GPIO_FN_FMSIIBT, | ||
194 | GPIO_FN_FMSISLD, GPIO_FN_FMSICK, | ||
195 | |||
196 | /* SCIFA0 (PORT 152, 153, 156, 157, 158) */ | ||
197 | GPIO_FN_SCIFA0_TXD, GPIO_FN_SCIFA0_RXD, | ||
198 | GPIO_FN_SCIFA0_SCK, GPIO_FN_SCIFA0_RTS, | ||
199 | GPIO_FN_SCIFA0_CTS, | ||
200 | |||
201 | /* SCIFA1 (PORT 154, 155, 159, 160, 161) */ | ||
202 | GPIO_FN_SCIFA1_TXD, GPIO_FN_SCIFA1_RXD, | ||
203 | GPIO_FN_SCIFA1_SCK, GPIO_FN_SCIFA1_RTS, | ||
204 | GPIO_FN_SCIFA1_CTS, | ||
205 | |||
206 | /* SCIFA2 (PORT 94, 95, 96, 97, 98) */ | ||
207 | GPIO_FN_SCIFA2_CTS1, GPIO_FN_SCIFA2_RTS1, | ||
208 | GPIO_FN_SCIFA2_TXD1, GPIO_FN_SCIFA2_RXD1, | ||
209 | GPIO_FN_SCIFA2_SCK1, | ||
210 | |||
211 | /* SCIFA3 (PORT 43, 44, | ||
212 | 140, 141, 142, 143, 144) */ | ||
213 | GPIO_FN_SCIFA3_CTS_43, GPIO_FN_SCIFA3_CTS_140, | ||
214 | GPIO_FN_SCIFA3_RTS_44, GPIO_FN_SCIFA3_RTS_141, | ||
215 | GPIO_FN_SCIFA3_SCK, GPIO_FN_SCIFA3_TXD, | ||
216 | GPIO_FN_SCIFA3_RXD, | ||
217 | |||
218 | /* SCIFA4 (PORT 5, 6) */ | ||
219 | GPIO_FN_SCIFA4_RXD, GPIO_FN_SCIFA4_TXD, | ||
220 | |||
221 | /* SCIFA5 (PORT 8, 12) */ | ||
222 | GPIO_FN_SCIFA5_RXD, GPIO_FN_SCIFA5_TXD, | ||
223 | |||
224 | /* SCIFB (PORT 162, 163, 164, 165, 166) */ | ||
225 | GPIO_FN_SCIFB_SCK, GPIO_FN_SCIFB_RTS, | ||
226 | GPIO_FN_SCIFB_CTS, GPIO_FN_SCIFB_TXD, | ||
227 | GPIO_FN_SCIFB_RXD, | ||
228 | |||
229 | /* | ||
230 | * CEU (PORT 16, 17, | ||
231 | * 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, | ||
232 | * 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, | ||
233 | * 120) | ||
234 | */ | ||
235 | GPIO_FN_VIO_HD, GPIO_FN_VIO_CKO1, GPIO_FN_VIO_CKO2, | ||
236 | GPIO_FN_VIO_VD, GPIO_FN_VIO_CLK, GPIO_FN_VIO_FIELD, | ||
237 | GPIO_FN_VIO_CKO, | ||
238 | GPIO_FN_VIO_D0, GPIO_FN_VIO_D1, GPIO_FN_VIO_D2, | ||
239 | GPIO_FN_VIO_D3, GPIO_FN_VIO_D4, GPIO_FN_VIO_D5, | ||
240 | GPIO_FN_VIO_D6, GPIO_FN_VIO_D7, GPIO_FN_VIO_D8, | ||
241 | GPIO_FN_VIO_D9, GPIO_FN_VIO_D10, GPIO_FN_VIO_D11, | ||
242 | GPIO_FN_VIO_D12, GPIO_FN_VIO_D13, GPIO_FN_VIO_D14, | ||
243 | GPIO_FN_VIO_D15, | ||
244 | |||
245 | /* USB0 (PORT 113, 114, 115, 116, 117, 167) */ | ||
246 | GPIO_FN_IDIN_0, GPIO_FN_EXTLP_0, | ||
247 | GPIO_FN_OVCN2_0, GPIO_FN_PWEN_0, | ||
248 | GPIO_FN_OVCN_0, GPIO_FN_VBUS0_0, | ||
249 | |||
250 | /* USB1 (PORT 18, 113, 114, 115, 116, 117, 138, 162, 168) */ | ||
251 | GPIO_FN_IDIN_1_18, GPIO_FN_IDIN_1_113, | ||
252 | GPIO_FN_PWEN_1_115, GPIO_FN_PWEN_1_138, | ||
253 | GPIO_FN_OVCN_1_114, GPIO_FN_OVCN_1_162, | ||
254 | GPIO_FN_EXTLP_1, GPIO_FN_OVCN2_1, | ||
255 | GPIO_FN_VBUS0_1, | ||
256 | |||
257 | /* GPIO (PORT 41, 42, 43, 44) */ | ||
258 | GPIO_FN_GPI0, GPIO_FN_GPI1, GPIO_FN_GPO0, GPIO_FN_GPO1, | ||
259 | |||
260 | /* | ||
261 | * BSC (PORT 19, | ||
262 | * 20, 21, 22, 25, 26, 27, 28, 29, | ||
263 | * 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, | ||
264 | * 40, 41, 42, 43, 44, 45, | ||
265 | * 62, 63, 64, 65, 66, 67, | ||
266 | * 71, 72, 74, 75) | ||
267 | */ | ||
268 | GPIO_FN_BS, GPIO_FN_WE1, | ||
269 | GPIO_FN_CKO, GPIO_FN_WAIT, GPIO_FN_RDWR, | ||
270 | |||
271 | GPIO_FN_A0, GPIO_FN_A1, GPIO_FN_A2, GPIO_FN_A3, | ||
272 | GPIO_FN_A6, GPIO_FN_A7, GPIO_FN_A8, GPIO_FN_A9, | ||
273 | GPIO_FN_A10, GPIO_FN_A11, GPIO_FN_A12, GPIO_FN_A13, | ||
274 | GPIO_FN_A14, GPIO_FN_A15, GPIO_FN_A16, GPIO_FN_A17, | ||
275 | GPIO_FN_A18, GPIO_FN_A19, GPIO_FN_A20, GPIO_FN_A21, | ||
276 | GPIO_FN_A22, GPIO_FN_A23, GPIO_FN_A24, GPIO_FN_A25, | ||
277 | GPIO_FN_A26, | ||
278 | |||
279 | GPIO_FN_CS0, GPIO_FN_CS2, GPIO_FN_CS4, | ||
280 | GPIO_FN_CS5A, GPIO_FN_CS5B, GPIO_FN_CS6A, | ||
281 | |||
282 | /* | ||
283 | * BSC/FLCTL (PORT 23, 24, | ||
284 | * 46, 47, 48, 49, | ||
285 | * 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, | ||
286 | * 60, 61, 69, 70) | ||
287 | */ | ||
288 | GPIO_FN_RD_FSC, GPIO_FN_WE0_FWE, | ||
289 | GPIO_FN_A4_FOE, GPIO_FN_A5_FCDE, | ||
290 | GPIO_FN_D0_NAF0, GPIO_FN_D1_NAF1, GPIO_FN_D2_NAF2, | ||
291 | GPIO_FN_D3_NAF3, GPIO_FN_D4_NAF4, GPIO_FN_D5_NAF5, | ||
292 | GPIO_FN_D6_NAF6, GPIO_FN_D7_NAF7, GPIO_FN_D8_NAF8, | ||
293 | GPIO_FN_D9_NAF9, GPIO_FN_D10_NAF10, GPIO_FN_D11_NAF11, | ||
294 | GPIO_FN_D12_NAF12, GPIO_FN_D13_NAF13, GPIO_FN_D14_NAF14, | ||
295 | GPIO_FN_D15_NAF15, | ||
296 | |||
297 | /* SPU2 (PORT 65) */ | ||
298 | GPIO_FN_VINT_I, | ||
299 | |||
300 | /* FLCTL (PORT 66, 68, 73) */ | ||
301 | GPIO_FN_FCE1, GPIO_FN_FCE0, GPIO_FN_FRB, | ||
302 | |||
303 | /* HSI (PORT 76, 77, 78, 79, 80, 81, 82, 83) */ | ||
304 | GPIO_FN_GP_RX_FLAG, GPIO_FN_GP_RX_DATA, GPIO_FN_GP_TX_READY, | ||
305 | GPIO_FN_GP_RX_WAKE, GPIO_FN_MP_TX_FLAG, GPIO_FN_MP_TX_DATA, | ||
306 | GPIO_FN_MP_RX_READY, GPIO_FN_MP_TX_WAKE, | ||
307 | |||
308 | /* | ||
309 | * MFI (PORT 76, 77, 78, 79, | ||
310 | * 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, | ||
311 | * 90, 91, 92, 93, 94, 95, 96, 97, 98, 99) | ||
312 | */ | ||
313 | GPIO_FN_MFIv6, /* see MSEL4CR 6 */ | ||
314 | GPIO_FN_MFIv4, /* see MSEL4CR 6 */ | ||
315 | |||
316 | GPIO_FN_MEMC_CS0, GPIO_FN_MEMC_BUSCLK_MEMC_A0, | ||
317 | GPIO_FN_MEMC_CS1_MEMC_A1, GPIO_FN_MEMC_ADV_MEMC_DREQ0, | ||
318 | GPIO_FN_MEMC_WAIT_MEMC_DREQ1, GPIO_FN_MEMC_NOE, | ||
319 | GPIO_FN_MEMC_NWE, GPIO_FN_MEMC_INT, | ||
320 | |||
321 | GPIO_FN_MEMC_AD0, GPIO_FN_MEMC_AD1, GPIO_FN_MEMC_AD2, | ||
322 | GPIO_FN_MEMC_AD3, GPIO_FN_MEMC_AD4, GPIO_FN_MEMC_AD5, | ||
323 | GPIO_FN_MEMC_AD6, GPIO_FN_MEMC_AD7, GPIO_FN_MEMC_AD8, | ||
324 | GPIO_FN_MEMC_AD9, GPIO_FN_MEMC_AD10, GPIO_FN_MEMC_AD11, | ||
325 | GPIO_FN_MEMC_AD12, GPIO_FN_MEMC_AD13, GPIO_FN_MEMC_AD14, | ||
326 | GPIO_FN_MEMC_AD15, | ||
327 | |||
328 | /* SIM (PORT 94, 95, 98) */ | ||
329 | GPIO_FN_SIM_RST, GPIO_FN_SIM_CLK, GPIO_FN_SIM_D, | ||
330 | |||
331 | /* TPU (PORT 93, 99, 112, 160, 161) */ | ||
332 | GPIO_FN_TPU0TO0, GPIO_FN_TPU0TO1, | ||
333 | GPIO_FN_TPU0TO2_93, GPIO_FN_TPU0TO2_99, | ||
334 | GPIO_FN_TPU0TO3, | ||
335 | |||
336 | /* I2C2 (PORT 110, 111) */ | ||
337 | GPIO_FN_I2C_SCL2, GPIO_FN_I2C_SDA2, | ||
338 | |||
339 | /* I2C3(1) (PORT 114, 115) */ | ||
340 | GPIO_FN_I2C_SCL3, GPIO_FN_I2C_SDA3, | ||
341 | |||
342 | /* I2C3(2) (PORT 137, 145) */ | ||
343 | GPIO_FN_I2C_SCL3S, GPIO_FN_I2C_SDA3S, | ||
344 | |||
345 | /* I2C4(2) (PORT 116, 117) */ | ||
346 | GPIO_FN_I2C_SCL4, GPIO_FN_I2C_SDA4, | ||
347 | |||
348 | /* I2C4(2) (PORT 146, 147) */ | ||
349 | GPIO_FN_I2C_SCL4S, GPIO_FN_I2C_SDA4S, | ||
350 | |||
351 | /* | ||
352 | * KEYSC (PORT 121, 122, 123, 124, 125, 126, 127, 128, 129, | ||
353 | * 130, 131, 132, 133, 134, 135, 136) | ||
354 | */ | ||
355 | GPIO_FN_KEYOUT0, GPIO_FN_KEYIN0_121, GPIO_FN_KEYIN0_136, | ||
356 | GPIO_FN_KEYOUT1, GPIO_FN_KEYIN1_122, GPIO_FN_KEYIN1_135, | ||
357 | GPIO_FN_KEYOUT2, GPIO_FN_KEYIN2_123, GPIO_FN_KEYIN2_134, | ||
358 | GPIO_FN_KEYOUT3, GPIO_FN_KEYIN3_124, GPIO_FN_KEYIN3_133, | ||
359 | GPIO_FN_KEYOUT4, GPIO_FN_KEYIN4, | ||
360 | GPIO_FN_KEYOUT5, GPIO_FN_KEYIN5, | ||
361 | GPIO_FN_KEYOUT6, GPIO_FN_KEYIN6, | ||
362 | GPIO_FN_KEYOUT7, GPIO_FN_KEYIN7, | ||
363 | |||
364 | /* | ||
365 | * LCDC (PORT 121, 122, 123, 124, 125, 126, 127, 128, 129, | ||
366 | * 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, | ||
367 | * 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, | ||
368 | * 150, 151) | ||
369 | */ | ||
370 | GPIO_FN_LCDC0_SELECT, /* LCDC 0 */ | ||
371 | GPIO_FN_LCDC1_SELECT, /* LCDC 1 */ | ||
372 | GPIO_FN_LCDHSYN, GPIO_FN_LCDCS, GPIO_FN_LCDVSYN, | ||
373 | GPIO_FN_LCDDCK, GPIO_FN_LCDWR, GPIO_FN_LCDRD, | ||
374 | GPIO_FN_LCDDISP, GPIO_FN_LCDRS, GPIO_FN_LCDLCLK, | ||
375 | GPIO_FN_LCDDON, | ||
376 | |||
377 | GPIO_FN_LCDD0, GPIO_FN_LCDD1, GPIO_FN_LCDD2, GPIO_FN_LCDD3, | ||
378 | GPIO_FN_LCDD4, GPIO_FN_LCDD5, GPIO_FN_LCDD6, GPIO_FN_LCDD7, | ||
379 | GPIO_FN_LCDD8, GPIO_FN_LCDD9, GPIO_FN_LCDD10, GPIO_FN_LCDD11, | ||
380 | GPIO_FN_LCDD12, GPIO_FN_LCDD13, GPIO_FN_LCDD14, GPIO_FN_LCDD15, | ||
381 | GPIO_FN_LCDD16, GPIO_FN_LCDD17, GPIO_FN_LCDD18, GPIO_FN_LCDD19, | ||
382 | GPIO_FN_LCDD20, GPIO_FN_LCDD21, GPIO_FN_LCDD22, GPIO_FN_LCDD23, | ||
383 | |||
384 | /* IRDA (PORT 139, 140, 141, 142) */ | ||
385 | GPIO_FN_IRDA_OUT, GPIO_FN_IRDA_IN, GPIO_FN_IRDA_FIRSEL, | ||
386 | GPIO_FN_IROUT_139, GPIO_FN_IROUT_140, | ||
387 | |||
388 | /* TSIF1 (PORT 156, 157, 158, 159) */ | ||
389 | GPIO_FN_TS0_1SELECT, /* TSIF0 - 1 select */ | ||
390 | GPIO_FN_TS0_2SELECT, /* TSIF0 - 2 select */ | ||
391 | GPIO_FN_TS1_1SELECT, /* TSIF1 - 1 select */ | ||
392 | GPIO_FN_TS1_2SELECT, /* TSIF1 - 2 select */ | ||
393 | |||
394 | GPIO_FN_TS_SPSYNC1, GPIO_FN_TS_SDAT1, | ||
395 | GPIO_FN_TS_SDEN1, GPIO_FN_TS_SCK1, | ||
396 | |||
397 | /* TSIF2 (PORT 137, 145, 146, 147) */ | ||
398 | GPIO_FN_TS_SPSYNC2, GPIO_FN_TS_SDAT2, | ||
399 | GPIO_FN_TS_SDEN2, GPIO_FN_TS_SCK2, | ||
400 | |||
401 | /* HDMI (PORT 169, 170) */ | ||
402 | GPIO_FN_HDMI_HPD, GPIO_FN_HDMI_CEC, | ||
403 | |||
404 | /* SDENC see MSEL4CR 19 */ | ||
405 | GPIO_FN_SDENC_CPG, | ||
406 | GPIO_FN_SDENC_DV_CLKI, | ||
407 | }; | ||
408 | |||
409 | /* DMA slave IDs */ | 18 | /* DMA slave IDs */ |
410 | enum { | 19 | enum { |
411 | SHDMA_SLAVE_INVALID, | 20 | SHDMA_SLAVE_INVALID, |
diff --git a/arch/arm/mach-shmobile/setup-r8a7740.c b/arch/arm/mach-shmobile/setup-r8a7740.c index 326a4ab0bd5f..3a6b6fe7b6c0 100644 --- a/arch/arm/mach-shmobile/setup-r8a7740.c +++ b/arch/arm/mach-shmobile/setup-r8a7740.c | |||
@@ -70,29 +70,15 @@ void __init r8a7740_map_io(void) | |||
70 | } | 70 | } |
71 | 71 | ||
72 | /* PFC */ | 72 | /* PFC */ |
73 | static struct resource r8a7740_pfc_resources[] = { | 73 | static const struct resource pfc_resources[] = { |
74 | [0] = { | 74 | DEFINE_RES_MEM(0xe6050000, 0x8000), |
75 | .start = 0xe6050000, | 75 | DEFINE_RES_MEM(0xe605800c, 0x0020), |
76 | .end = 0xe6057fff, | ||
77 | .flags = IORESOURCE_MEM, | ||
78 | }, | ||
79 | [1] = { | ||
80 | .start = 0xe605800c, | ||
81 | .end = 0xe605802b, | ||
82 | .flags = IORESOURCE_MEM, | ||
83 | } | ||
84 | }; | ||
85 | |||
86 | static struct platform_device r8a7740_pfc_device = { | ||
87 | .name = "pfc-r8a7740", | ||
88 | .id = -1, | ||
89 | .resource = r8a7740_pfc_resources, | ||
90 | .num_resources = ARRAY_SIZE(r8a7740_pfc_resources), | ||
91 | }; | 76 | }; |
92 | 77 | ||
93 | void __init r8a7740_pinmux_init(void) | 78 | void __init r8a7740_pinmux_init(void) |
94 | { | 79 | { |
95 | platform_device_register(&r8a7740_pfc_device); | 80 | platform_device_register_simple("pfc-r8a7740", -1, pfc_resources, |
81 | ARRAY_SIZE(pfc_resources)); | ||
96 | } | 82 | } |
97 | 83 | ||
98 | static struct renesas_intc_irqpin_config irqpin0_platform_data = { | 84 | static struct renesas_intc_irqpin_config irqpin0_platform_data = { |
diff --git a/arch/arm/mach-shmobile/setup-r8a7778.c b/arch/arm/mach-shmobile/setup-r8a7778.c index 30b4a336308f..1b9b7f2a5016 100644 --- a/arch/arm/mach-shmobile/setup-r8a7778.c +++ b/arch/arm/mach-shmobile/setup-r8a7778.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/irqchip/arm-gic.h> | 24 | #include <linux/irqchip/arm-gic.h> |
25 | #include <linux/of.h> | 25 | #include <linux/of.h> |
26 | #include <linux/of_platform.h> | 26 | #include <linux/of_platform.h> |
27 | #include <linux/platform_data/gpio-rcar.h> | ||
27 | #include <linux/platform_data/irq-renesas-intc-irqpin.h> | 28 | #include <linux/platform_data/irq-renesas-intc-irqpin.h> |
28 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
29 | #include <linux/irqchip.h> | 30 | #include <linux/irqchip.h> |
@@ -80,12 +81,6 @@ static struct sh_timer_config sh_tmu1_platform_data = { | |||
80 | .clocksource_rating = 200, | 81 | .clocksource_rating = 200, |
81 | }; | 82 | }; |
82 | 83 | ||
83 | /* Ether */ | ||
84 | static struct resource ether_resources[] = { | ||
85 | DEFINE_RES_MEM(0xfde00000, 0x400), | ||
86 | DEFINE_RES_IRQ(gic_iid(0x89)), | ||
87 | }; | ||
88 | |||
89 | #define r8a7778_register_tmu(idx) \ | 84 | #define r8a7778_register_tmu(idx) \ |
90 | platform_device_register_resndata( \ | 85 | platform_device_register_resndata( \ |
91 | &platform_bus, "sh_tmu", idx, \ | 86 | &platform_bus, "sh_tmu", idx, \ |
@@ -94,6 +89,90 @@ static struct resource ether_resources[] = { | |||
94 | &sh_tmu##idx##_platform_data, \ | 89 | &sh_tmu##idx##_platform_data, \ |
95 | sizeof(sh_tmu##idx##_platform_data)) | 90 | sizeof(sh_tmu##idx##_platform_data)) |
96 | 91 | ||
92 | /* Ether */ | ||
93 | static struct resource ether_resources[] = { | ||
94 | DEFINE_RES_MEM(0xfde00000, 0x400), | ||
95 | DEFINE_RES_IRQ(gic_iid(0x89)), | ||
96 | }; | ||
97 | |||
98 | void __init r8a7778_add_ether_device(struct sh_eth_plat_data *pdata) | ||
99 | { | ||
100 | platform_device_register_resndata(&platform_bus, "sh_eth", -1, | ||
101 | ether_resources, | ||
102 | ARRAY_SIZE(ether_resources), | ||
103 | pdata, sizeof(*pdata)); | ||
104 | } | ||
105 | |||
106 | /* PFC/GPIO */ | ||
107 | static struct resource pfc_resources[] = { | ||
108 | DEFINE_RES_MEM(0xfffc0000, 0x118), | ||
109 | }; | ||
110 | |||
111 | #define R8A7778_GPIO(idx) \ | ||
112 | static struct resource r8a7778_gpio##idx##_resources[] = { \ | ||
113 | DEFINE_RES_MEM(0xffc40000 + 0x1000 * (idx), 0x30), \ | ||
114 | DEFINE_RES_IRQ(gic_iid(0x87)), \ | ||
115 | }; \ | ||
116 | \ | ||
117 | static struct gpio_rcar_config r8a7778_gpio##idx##_platform_data = { \ | ||
118 | .gpio_base = 32 * (idx), \ | ||
119 | .irq_base = GPIO_IRQ_BASE(idx), \ | ||
120 | .number_of_pins = 32, \ | ||
121 | .pctl_name = "pfc-r8a7778", \ | ||
122 | } | ||
123 | |||
124 | R8A7778_GPIO(0); | ||
125 | R8A7778_GPIO(1); | ||
126 | R8A7778_GPIO(2); | ||
127 | R8A7778_GPIO(3); | ||
128 | R8A7778_GPIO(4); | ||
129 | |||
130 | #define r8a7778_register_gpio(idx) \ | ||
131 | platform_device_register_resndata( \ | ||
132 | &platform_bus, "gpio_rcar", idx, \ | ||
133 | r8a7778_gpio##idx##_resources, \ | ||
134 | ARRAY_SIZE(r8a7778_gpio##idx##_resources), \ | ||
135 | &r8a7778_gpio##idx##_platform_data, \ | ||
136 | sizeof(r8a7778_gpio##idx##_platform_data)) | ||
137 | |||
138 | void __init r8a7778_pinmux_init(void) | ||
139 | { | ||
140 | platform_device_register_simple( | ||
141 | "pfc-r8a7778", -1, | ||
142 | pfc_resources, | ||
143 | ARRAY_SIZE(pfc_resources)); | ||
144 | |||
145 | r8a7778_register_gpio(0); | ||
146 | r8a7778_register_gpio(1); | ||
147 | r8a7778_register_gpio(2); | ||
148 | r8a7778_register_gpio(3); | ||
149 | r8a7778_register_gpio(4); | ||
150 | }; | ||
151 | |||
152 | /* SDHI */ | ||
153 | static struct resource sdhi_resources[] = { | ||
154 | /* SDHI0 */ | ||
155 | DEFINE_RES_MEM(0xFFE4C000, 0x100), | ||
156 | DEFINE_RES_IRQ(gic_iid(0x77)), | ||
157 | /* SDHI1 */ | ||
158 | DEFINE_RES_MEM(0xFFE4D000, 0x100), | ||
159 | DEFINE_RES_IRQ(gic_iid(0x78)), | ||
160 | /* SDHI2 */ | ||
161 | DEFINE_RES_MEM(0xFFE4F000, 0x100), | ||
162 | DEFINE_RES_IRQ(gic_iid(0x76)), | ||
163 | }; | ||
164 | |||
165 | void __init r8a7778_sdhi_init(int id, | ||
166 | struct sh_mobile_sdhi_info *info) | ||
167 | { | ||
168 | BUG_ON(id < 0 || id > 2); | ||
169 | |||
170 | platform_device_register_resndata( | ||
171 | &platform_bus, "sh_mobile_sdhi", id, | ||
172 | sdhi_resources + (2 * id), 2, | ||
173 | info, sizeof(*info)); | ||
174 | } | ||
175 | |||
97 | void __init r8a7778_add_standard_devices(void) | 176 | void __init r8a7778_add_standard_devices(void) |
98 | { | 177 | { |
99 | int i; | 178 | int i; |
@@ -118,14 +197,6 @@ void __init r8a7778_add_standard_devices(void) | |||
118 | r8a7778_register_tmu(1); | 197 | r8a7778_register_tmu(1); |
119 | } | 198 | } |
120 | 199 | ||
121 | void __init r8a7778_add_ether_device(struct sh_eth_plat_data *pdata) | ||
122 | { | ||
123 | platform_device_register_resndata(&platform_bus, "sh_eth", -1, | ||
124 | ether_resources, | ||
125 | ARRAY_SIZE(ether_resources), | ||
126 | pdata, sizeof(*pdata)); | ||
127 | } | ||
128 | |||
129 | static struct renesas_intc_irqpin_config irqpin_platform_data = { | 200 | static struct renesas_intc_irqpin_config irqpin_platform_data = { |
130 | .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */ | 201 | .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */ |
131 | .sense_bitfield_width = 2, | 202 | .sense_bitfield_width = 2, |
diff --git a/arch/arm/mach-shmobile/setup-r8a7779.c b/arch/arm/mach-shmobile/setup-r8a7779.c index b0b394842ea5..dbb13f289e79 100644 --- a/arch/arm/mach-shmobile/setup-r8a7779.c +++ b/arch/arm/mach-shmobile/setup-r8a7779.c | |||
@@ -65,11 +65,7 @@ void __init r8a7779_map_io(void) | |||
65 | } | 65 | } |
66 | 66 | ||
67 | static struct resource r8a7779_pfc_resources[] = { | 67 | static struct resource r8a7779_pfc_resources[] = { |
68 | [0] = { | 68 | DEFINE_RES_MEM(0xfffc0000, 0x023c), |
69 | .start = 0xfffc0000, | ||
70 | .end = 0xfffc023b, | ||
71 | .flags = IORESOURCE_MEM, | ||
72 | }, | ||
73 | }; | 69 | }; |
74 | 70 | ||
75 | static struct platform_device r8a7779_pfc_device = { | 71 | static struct platform_device r8a7779_pfc_device = { |
@@ -81,15 +77,8 @@ static struct platform_device r8a7779_pfc_device = { | |||
81 | 77 | ||
82 | #define R8A7779_GPIO(idx, npins) \ | 78 | #define R8A7779_GPIO(idx, npins) \ |
83 | static struct resource r8a7779_gpio##idx##_resources[] = { \ | 79 | static struct resource r8a7779_gpio##idx##_resources[] = { \ |
84 | [0] = { \ | 80 | DEFINE_RES_MEM(0xffc40000 + (0x1000 * (idx)), 0x002c), \ |
85 | .start = 0xffc40000 + 0x1000 * (idx), \ | 81 | DEFINE_RES_IRQ(gic_iid(0xad + (idx))), \ |
86 | .end = 0xffc4002b + 0x1000 * (idx), \ | ||
87 | .flags = IORESOURCE_MEM, \ | ||
88 | }, \ | ||
89 | [1] = { \ | ||
90 | .start = gic_iid(0xad + (idx)), \ | ||
91 | .flags = IORESOURCE_IRQ, \ | ||
92 | } \ | ||
93 | }; \ | 82 | }; \ |
94 | \ | 83 | \ |
95 | static struct gpio_rcar_config r8a7779_gpio##idx##_platform_data = { \ | 84 | static struct gpio_rcar_config r8a7779_gpio##idx##_platform_data = { \ |
diff --git a/arch/arm/mach-shmobile/setup-r8a7790.c b/arch/arm/mach-shmobile/setup-r8a7790.c index 49de2d56f86d..196bd7325df0 100644 --- a/arch/arm/mach-shmobile/setup-r8a7790.c +++ b/arch/arm/mach-shmobile/setup-r8a7790.c | |||
@@ -23,21 +23,55 @@ | |||
23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
24 | #include <linux/of_platform.h> | 24 | #include <linux/of_platform.h> |
25 | #include <linux/serial_sci.h> | 25 | #include <linux/serial_sci.h> |
26 | #include <linux/platform_data/gpio-rcar.h> | ||
26 | #include <linux/platform_data/irq-renesas-irqc.h> | 27 | #include <linux/platform_data/irq-renesas-irqc.h> |
27 | #include <mach/common.h> | 28 | #include <mach/common.h> |
28 | #include <mach/irqs.h> | 29 | #include <mach/irqs.h> |
29 | #include <mach/r8a7790.h> | 30 | #include <mach/r8a7790.h> |
30 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
31 | 32 | ||
32 | static const struct resource pfc_resources[] = { | 33 | static struct resource pfc_resources[] __initdata = { |
33 | DEFINE_RES_MEM(0xe6060000, 0x250), | 34 | DEFINE_RES_MEM(0xe6060000, 0x250), |
34 | DEFINE_RES_MEM(0xe6050000, 0x5050), | ||
35 | }; | 35 | }; |
36 | 36 | ||
37 | #define R8A7790_GPIO(idx) \ | ||
38 | static struct resource r8a7790_gpio##idx##_resources[] __initdata = { \ | ||
39 | DEFINE_RES_MEM(0xe6050000 + 0x1000 * (idx), 0x50), \ | ||
40 | DEFINE_RES_IRQ(gic_spi(4 + (idx))), \ | ||
41 | }; \ | ||
42 | \ | ||
43 | static struct gpio_rcar_config r8a7790_gpio##idx##_platform_data __initdata = { \ | ||
44 | .gpio_base = 32 * (idx), \ | ||
45 | .irq_base = 0, \ | ||
46 | .number_of_pins = 32, \ | ||
47 | .pctl_name = "pfc-r8a7790", \ | ||
48 | .has_both_edge_trigger = 1, \ | ||
49 | }; \ | ||
50 | |||
51 | R8A7790_GPIO(0); | ||
52 | R8A7790_GPIO(1); | ||
53 | R8A7790_GPIO(2); | ||
54 | R8A7790_GPIO(3); | ||
55 | R8A7790_GPIO(4); | ||
56 | R8A7790_GPIO(5); | ||
57 | |||
58 | #define r8a7790_register_gpio(idx) \ | ||
59 | platform_device_register_resndata(&platform_bus, "gpio_rcar", idx, \ | ||
60 | r8a7790_gpio##idx##_resources, \ | ||
61 | ARRAY_SIZE(r8a7790_gpio##idx##_resources), \ | ||
62 | &r8a7790_gpio##idx##_platform_data, \ | ||
63 | sizeof(r8a7790_gpio##idx##_platform_data)) | ||
64 | |||
37 | void __init r8a7790_pinmux_init(void) | 65 | void __init r8a7790_pinmux_init(void) |
38 | { | 66 | { |
39 | platform_device_register_simple("pfc-r8a7790", -1, pfc_resources, | 67 | platform_device_register_simple("pfc-r8a7790", -1, pfc_resources, |
40 | ARRAY_SIZE(pfc_resources)); | 68 | ARRAY_SIZE(pfc_resources)); |
69 | r8a7790_register_gpio(0); | ||
70 | r8a7790_register_gpio(1); | ||
71 | r8a7790_register_gpio(2); | ||
72 | r8a7790_register_gpio(3); | ||
73 | r8a7790_register_gpio(4); | ||
74 | r8a7790_register_gpio(5); | ||
41 | } | 75 | } |
42 | 76 | ||
43 | #define SCIF_COMMON(scif_type, baseaddr, irq) \ | 77 | #define SCIF_COMMON(scif_type, baseaddr, irq) \ |
@@ -69,7 +103,7 @@ void __init r8a7790_pinmux_init(void) | |||
69 | 103 | ||
70 | enum { SCIFA0, SCIFA1, SCIFB0, SCIFB1, SCIFB2, SCIFA2, SCIF0, SCIF1 }; | 104 | enum { SCIFA0, SCIFA1, SCIFB0, SCIFB1, SCIFB2, SCIFA2, SCIF0, SCIF1 }; |
71 | 105 | ||
72 | static const struct plat_sci_port scif[] = { | 106 | static struct plat_sci_port scif[] __initdata = { |
73 | SCIFA_DATA(SCIFA0, 0xe6c40000, gic_spi(144)), /* SCIFA0 */ | 107 | SCIFA_DATA(SCIFA0, 0xe6c40000, gic_spi(144)), /* SCIFA0 */ |
74 | SCIFA_DATA(SCIFA1, 0xe6c50000, gic_spi(145)), /* SCIFA1 */ | 108 | SCIFA_DATA(SCIFA1, 0xe6c50000, gic_spi(145)), /* SCIFA1 */ |
75 | SCIFB_DATA(SCIFB0, 0xe6c20000, gic_spi(148)), /* SCIFB0 */ | 109 | SCIFB_DATA(SCIFB0, 0xe6c20000, gic_spi(148)), /* SCIFB0 */ |
@@ -86,11 +120,11 @@ static inline void r8a7790_register_scif(int idx) | |||
86 | sizeof(struct plat_sci_port)); | 120 | sizeof(struct plat_sci_port)); |
87 | } | 121 | } |
88 | 122 | ||
89 | static struct renesas_irqc_config irqc0_data = { | 123 | static struct renesas_irqc_config irqc0_data __initdata = { |
90 | .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */ | 124 | .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */ |
91 | }; | 125 | }; |
92 | 126 | ||
93 | static struct resource irqc0_resources[] = { | 127 | static struct resource irqc0_resources[] __initdata = { |
94 | DEFINE_RES_MEM(0xe61c0000, 0x200), /* IRQC Event Detector Block_0 */ | 128 | DEFINE_RES_MEM(0xe61c0000, 0x200), /* IRQC Event Detector Block_0 */ |
95 | DEFINE_RES_IRQ(gic_spi(0)), /* IRQ0 */ | 129 | DEFINE_RES_IRQ(gic_spi(0)), /* IRQ0 */ |
96 | DEFINE_RES_IRQ(gic_spi(1)), /* IRQ1 */ | 130 | DEFINE_RES_IRQ(gic_spi(1)), /* IRQ1 */ |
diff --git a/arch/arm/mach-shmobile/setup-sh73a0.c b/arch/arm/mach-shmobile/setup-sh73a0.c index 9696f3646864..96e7ca1e4e11 100644 --- a/arch/arm/mach-shmobile/setup-sh73a0.c +++ b/arch/arm/mach-shmobile/setup-sh73a0.c | |||
@@ -288,12 +288,7 @@ static struct sh_timer_config tmu00_platform_data = { | |||
288 | }; | 288 | }; |
289 | 289 | ||
290 | static struct resource tmu00_resources[] = { | 290 | static struct resource tmu00_resources[] = { |
291 | [0] = { | 291 | [0] = DEFINE_RES_MEM_NAMED(0xfff60008, 0xc, "TMU00"), |
292 | .name = "TMU00", | ||
293 | .start = 0xfff60008, | ||
294 | .end = 0xfff60013, | ||
295 | .flags = IORESOURCE_MEM, | ||
296 | }, | ||
297 | [1] = { | 292 | [1] = { |
298 | .start = intcs_evt2irq(0x0e80), /* TMU0_TUNI00 */ | 293 | .start = intcs_evt2irq(0x0e80), /* TMU0_TUNI00 */ |
299 | .flags = IORESOURCE_IRQ, | 294 | .flags = IORESOURCE_IRQ, |
@@ -318,12 +313,7 @@ static struct sh_timer_config tmu01_platform_data = { | |||
318 | }; | 313 | }; |
319 | 314 | ||
320 | static struct resource tmu01_resources[] = { | 315 | static struct resource tmu01_resources[] = { |
321 | [0] = { | 316 | [0] = DEFINE_RES_MEM_NAMED(0xfff60014, 0xc, "TMU00"), |
322 | .name = "TMU01", | ||
323 | .start = 0xfff60014, | ||
324 | .end = 0xfff6001f, | ||
325 | .flags = IORESOURCE_MEM, | ||
326 | }, | ||
327 | [1] = { | 317 | [1] = { |
328 | .start = intcs_evt2irq(0x0ea0), /* TMU0_TUNI01 */ | 318 | .start = intcs_evt2irq(0x0ea0), /* TMU0_TUNI01 */ |
329 | .flags = IORESOURCE_IRQ, | 319 | .flags = IORESOURCE_IRQ, |
@@ -341,12 +331,7 @@ static struct platform_device tmu01_device = { | |||
341 | }; | 331 | }; |
342 | 332 | ||
343 | static struct resource i2c0_resources[] = { | 333 | static struct resource i2c0_resources[] = { |
344 | [0] = { | 334 | [0] = DEFINE_RES_MEM_NAMED(0xe6820000, 0x426, "IIC0"), |
345 | .name = "IIC0", | ||
346 | .start = 0xe6820000, | ||
347 | .end = 0xe6820425 - 1, | ||
348 | .flags = IORESOURCE_MEM, | ||
349 | }, | ||
350 | [1] = { | 335 | [1] = { |
351 | .start = gic_spi(167), | 336 | .start = gic_spi(167), |
352 | .end = gic_spi(170), | 337 | .end = gic_spi(170), |
@@ -355,12 +340,7 @@ static struct resource i2c0_resources[] = { | |||
355 | }; | 340 | }; |
356 | 341 | ||
357 | static struct resource i2c1_resources[] = { | 342 | static struct resource i2c1_resources[] = { |
358 | [0] = { | 343 | [0] = DEFINE_RES_MEM_NAMED(0xe6822000, 0x426, "IIC1"), |
359 | .name = "IIC1", | ||
360 | .start = 0xe6822000, | ||
361 | .end = 0xe6822425 - 1, | ||
362 | .flags = IORESOURCE_MEM, | ||
363 | }, | ||
364 | [1] = { | 344 | [1] = { |
365 | .start = gic_spi(51), | 345 | .start = gic_spi(51), |
366 | .end = gic_spi(54), | 346 | .end = gic_spi(54), |
@@ -369,12 +349,7 @@ static struct resource i2c1_resources[] = { | |||
369 | }; | 349 | }; |
370 | 350 | ||
371 | static struct resource i2c2_resources[] = { | 351 | static struct resource i2c2_resources[] = { |
372 | [0] = { | 352 | [0] = DEFINE_RES_MEM_NAMED(0xe6824000, 0x426, "IIC2"), |
373 | .name = "IIC2", | ||
374 | .start = 0xe6824000, | ||
375 | .end = 0xe6824425 - 1, | ||
376 | .flags = IORESOURCE_MEM, | ||
377 | }, | ||
378 | [1] = { | 353 | [1] = { |
379 | .start = gic_spi(171), | 354 | .start = gic_spi(171), |
380 | .end = gic_spi(174), | 355 | .end = gic_spi(174), |
@@ -383,12 +358,7 @@ static struct resource i2c2_resources[] = { | |||
383 | }; | 358 | }; |
384 | 359 | ||
385 | static struct resource i2c3_resources[] = { | 360 | static struct resource i2c3_resources[] = { |
386 | [0] = { | 361 | [0] = DEFINE_RES_MEM_NAMED(0xe6826000, 0x426, "IIC3"), |
387 | .name = "IIC3", | ||
388 | .start = 0xe6826000, | ||
389 | .end = 0xe6826425 - 1, | ||
390 | .flags = IORESOURCE_MEM, | ||
391 | }, | ||
392 | [1] = { | 362 | [1] = { |
393 | .start = gic_spi(183), | 363 | .start = gic_spi(183), |
394 | .end = gic_spi(186), | 364 | .end = gic_spi(186), |
@@ -397,12 +367,7 @@ static struct resource i2c3_resources[] = { | |||
397 | }; | 367 | }; |
398 | 368 | ||
399 | static struct resource i2c4_resources[] = { | 369 | static struct resource i2c4_resources[] = { |
400 | [0] = { | 370 | [0] = DEFINE_RES_MEM_NAMED(0xe6828000, 0x426, "IIC4"), |
401 | .name = "IIC4", | ||
402 | .start = 0xe6828000, | ||
403 | .end = 0xe6828425 - 1, | ||
404 | .flags = IORESOURCE_MEM, | ||
405 | }, | ||
406 | [1] = { | 371 | [1] = { |
407 | .start = gic_spi(187), | 372 | .start = gic_spi(187), |
408 | .end = gic_spi(190), | 373 | .end = gic_spi(190), |
@@ -623,12 +588,7 @@ static struct sh_dmae_pdata sh73a0_dmae_platform_data = { | |||
623 | }; | 588 | }; |
624 | 589 | ||
625 | static struct resource sh73a0_dmae_resources[] = { | 590 | static struct resource sh73a0_dmae_resources[] = { |
626 | { | 591 | DEFINE_RES_MEM(0xfe000020, 0x89e0), |
627 | /* Registers including DMAOR and channels including DMARSx */ | ||
628 | .start = 0xfe000020, | ||
629 | .end = 0xfe008a00 - 1, | ||
630 | .flags = IORESOURCE_MEM, | ||
631 | }, | ||
632 | { | 592 | { |
633 | .name = "error_irq", | 593 | .name = "error_irq", |
634 | .start = gic_spi(129), | 594 | .start = gic_spi(129), |
@@ -727,18 +687,10 @@ static struct sh_dmae_pdata sh73a0_mpdma_platform_data = { | |||
727 | 687 | ||
728 | /* Resource order important! */ | 688 | /* Resource order important! */ |
729 | static struct resource sh73a0_mpdma_resources[] = { | 689 | static struct resource sh73a0_mpdma_resources[] = { |
730 | { | 690 | /* Channel registers and DMAOR */ |
731 | /* Channel registers and DMAOR */ | 691 | DEFINE_RES_MEM(0xec618020, 0x270), |
732 | .start = 0xec618020, | 692 | /* DMARSx */ |
733 | .end = 0xec61828f, | 693 | DEFINE_RES_MEM(0xec619000, 0xc), |
734 | .flags = IORESOURCE_MEM, | ||
735 | }, | ||
736 | { | ||
737 | /* DMARSx */ | ||
738 | .start = 0xec619000, | ||
739 | .end = 0xec61900b, | ||
740 | .flags = IORESOURCE_MEM, | ||
741 | }, | ||
742 | { | 694 | { |
743 | .name = "error_irq", | 695 | .name = "error_irq", |
744 | .start = gic_spi(181), | 696 | .start = gic_spi(181), |
@@ -785,12 +737,7 @@ static struct platform_device pmu_device = { | |||
785 | 737 | ||
786 | /* an IPMMU module for ICB */ | 738 | /* an IPMMU module for ICB */ |
787 | static struct resource ipmmu_resources[] = { | 739 | static struct resource ipmmu_resources[] = { |
788 | [0] = { | 740 | DEFINE_RES_MEM_NAMED(0xfe951000, 0x100, "IPMMU"), |
789 | .name = "IPMMU", | ||
790 | .start = 0xfe951000, | ||
791 | .end = 0xfe9510ff, | ||
792 | .flags = IORESOURCE_MEM, | ||
793 | }, | ||
794 | }; | 741 | }; |
795 | 742 | ||
796 | static const char * const ipmmu_dev_names[] = { | 743 | static const char * const ipmmu_dev_names[] = { |
@@ -982,11 +929,17 @@ void __init sh73a0_add_standard_devices(void) | |||
982 | ARRAY_SIZE(sh73a0_late_devices)); | 929 | ARRAY_SIZE(sh73a0_late_devices)); |
983 | } | 930 | } |
984 | 931 | ||
932 | void __init sh73a0_init_delay(void) | ||
933 | { | ||
934 | shmobile_setup_delay(1196, 44, 46); /* Cortex-A9 @ 1196MHz */ | ||
935 | } | ||
936 | |||
985 | /* do nothing for !CONFIG_SMP or !CONFIG_HAVE_TWD */ | 937 | /* do nothing for !CONFIG_SMP or !CONFIG_HAVE_TWD */ |
986 | void __init __weak sh73a0_register_twd(void) { } | 938 | void __init __weak sh73a0_register_twd(void) { } |
987 | 939 | ||
988 | void __init sh73a0_earlytimer_init(void) | 940 | void __init sh73a0_earlytimer_init(void) |
989 | { | 941 | { |
942 | sh73a0_init_delay(); | ||
990 | sh73a0_clock_init(); | 943 | sh73a0_clock_init(); |
991 | shmobile_earlytimer_init(); | 944 | shmobile_earlytimer_init(); |
992 | sh73a0_register_twd(); | 945 | sh73a0_register_twd(); |
@@ -1005,17 +958,14 @@ void __init sh73a0_add_early_devices(void) | |||
1005 | 958 | ||
1006 | #ifdef CONFIG_USE_OF | 959 | #ifdef CONFIG_USE_OF |
1007 | 960 | ||
1008 | void __init sh73a0_init_delay(void) | ||
1009 | { | ||
1010 | shmobile_setup_delay(1196, 44, 46); /* Cortex-A9 @ 1196MHz */ | ||
1011 | } | ||
1012 | |||
1013 | static const struct of_dev_auxdata sh73a0_auxdata_lookup[] __initconst = { | 961 | static const struct of_dev_auxdata sh73a0_auxdata_lookup[] __initconst = { |
1014 | {}, | 962 | {}, |
1015 | }; | 963 | }; |
1016 | 964 | ||
1017 | void __init sh73a0_add_standard_devices_dt(void) | 965 | void __init sh73a0_add_standard_devices_dt(void) |
1018 | { | 966 | { |
967 | struct platform_device_info devinfo = { .name = "cpufreq-cpu0", .id = -1, }; | ||
968 | |||
1019 | /* clocks are setup late during boot in the case of DT */ | 969 | /* clocks are setup late during boot in the case of DT */ |
1020 | sh73a0_clock_init(); | 970 | sh73a0_clock_init(); |
1021 | 971 | ||
@@ -1023,6 +973,9 @@ void __init sh73a0_add_standard_devices_dt(void) | |||
1023 | ARRAY_SIZE(sh73a0_devices_dt)); | 973 | ARRAY_SIZE(sh73a0_devices_dt)); |
1024 | of_platform_populate(NULL, of_default_bus_match_table, | 974 | of_platform_populate(NULL, of_default_bus_match_table, |
1025 | sh73a0_auxdata_lookup, NULL); | 975 | sh73a0_auxdata_lookup, NULL); |
976 | |||
977 | /* Instantiate cpufreq-cpu0 */ | ||
978 | platform_device_register_full(&devinfo); | ||
1026 | } | 979 | } |
1027 | 980 | ||
1028 | static const char *sh73a0_boards_compat_dt[] __initdata = { | 981 | static const char *sh73a0_boards_compat_dt[] __initdata = { |
diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c index 53210ec4e8ec..bd7124c87fea 100644 --- a/arch/arm/plat-samsung/pm.c +++ b/arch/arm/plat-samsung/pm.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/suspend.h> | 16 | #include <linux/suspend.h> |
17 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
18 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
19 | #include <linux/of.h> | ||
19 | #include <linux/serial_core.h> | 20 | #include <linux/serial_core.h> |
20 | #include <linux/io.h> | 21 | #include <linux/io.h> |
21 | 22 | ||
@@ -261,7 +262,8 @@ static int s3c_pm_enter(suspend_state_t state) | |||
261 | * require a full power-cycle) | 262 | * require a full power-cycle) |
262 | */ | 263 | */ |
263 | 264 | ||
264 | if (!any_allowed(s3c_irqwake_intmask, s3c_irqwake_intallow) && | 265 | if (!of_have_populated_dt() && |
266 | !any_allowed(s3c_irqwake_intmask, s3c_irqwake_intallow) && | ||
265 | !any_allowed(s3c_irqwake_eintmask, s3c_irqwake_eintallow)) { | 267 | !any_allowed(s3c_irqwake_eintmask, s3c_irqwake_eintallow)) { |
266 | printk(KERN_ERR "%s: No wake-up sources!\n", __func__); | 268 | printk(KERN_ERR "%s: No wake-up sources!\n", __func__); |
267 | printk(KERN_ERR "%s: Aborting sleep\n", __func__); | 269 | printk(KERN_ERR "%s: Aborting sleep\n", __func__); |
@@ -270,8 +272,11 @@ static int s3c_pm_enter(suspend_state_t state) | |||
270 | 272 | ||
271 | /* save all necessary core registers not covered by the drivers */ | 273 | /* save all necessary core registers not covered by the drivers */ |
272 | 274 | ||
273 | samsung_pm_save_gpios(); | 275 | if (!of_have_populated_dt()) { |
274 | samsung_pm_saved_gpios(); | 276 | samsung_pm_save_gpios(); |
277 | samsung_pm_saved_gpios(); | ||
278 | } | ||
279 | |||
275 | s3c_pm_save_uarts(); | 280 | s3c_pm_save_uarts(); |
276 | s3c_pm_save_core(); | 281 | s3c_pm_save_core(); |
277 | 282 | ||
@@ -310,8 +315,11 @@ static int s3c_pm_enter(suspend_state_t state) | |||
310 | 315 | ||
311 | s3c_pm_restore_core(); | 316 | s3c_pm_restore_core(); |
312 | s3c_pm_restore_uarts(); | 317 | s3c_pm_restore_uarts(); |
313 | samsung_pm_restore_gpios(); | 318 | |
314 | s3c_pm_restored_gpios(); | 319 | if (!of_have_populated_dt()) { |
320 | samsung_pm_restore_gpios(); | ||
321 | s3c_pm_restored_gpios(); | ||
322 | } | ||
315 | 323 | ||
316 | s3c_pm_debug_init(); | 324 | s3c_pm_debug_init(); |
317 | 325 | ||
diff --git a/arch/mips/include/asm/mmu_context.h b/arch/mips/include/asm/mmu_context.h index 820116067c10..516e6e9a5594 100644 --- a/arch/mips/include/asm/mmu_context.h +++ b/arch/mips/include/asm/mmu_context.h | |||
@@ -117,7 +117,7 @@ get_new_mmu_context(struct mm_struct *mm, unsigned long cpu) | |||
117 | if (! ((asid += ASID_INC) & ASID_MASK) ) { | 117 | if (! ((asid += ASID_INC) & ASID_MASK) ) { |
118 | if (cpu_has_vtag_icache) | 118 | if (cpu_has_vtag_icache) |
119 | flush_icache_all(); | 119 | flush_icache_all(); |
120 | #ifdef CONFIG_VIRTUALIZATION | 120 | #ifdef CONFIG_KVM |
121 | kvm_local_flush_tlb_all(); /* start new asid cycle */ | 121 | kvm_local_flush_tlb_all(); /* start new asid cycle */ |
122 | #else | 122 | #else |
123 | local_flush_tlb_all(); /* start new asid cycle */ | 123 | local_flush_tlb_all(); /* start new asid cycle */ |
diff --git a/arch/mips/include/uapi/asm/kvm.h b/arch/mips/include/uapi/asm/kvm.h index 3f424f5217da..f09ff5ae2059 100644 --- a/arch/mips/include/uapi/asm/kvm.h +++ b/arch/mips/include/uapi/asm/kvm.h | |||
@@ -58,56 +58,53 @@ struct kvm_fpu { | |||
58 | * bits[2..0] - Register 'sel' index. | 58 | * bits[2..0] - Register 'sel' index. |
59 | * bits[7..3] - Register 'rd' index. | 59 | * bits[7..3] - Register 'rd' index. |
60 | * bits[15..8] - Must be zero. | 60 | * bits[15..8] - Must be zero. |
61 | * bits[63..16] - 1 -> CP0 registers. | 61 | * bits[31..16] - 1 -> CP0 registers. |
62 | * bits[51..32] - Must be zero. | ||
63 | * bits[63..52] - As per linux/kvm.h | ||
62 | * | 64 | * |
63 | * Other sets registers may be added in the future. Each set would | 65 | * Other sets registers may be added in the future. Each set would |
64 | * have its own identifier in bits[63..16]. | 66 | * have its own identifier in bits[31..16]. |
65 | * | ||
66 | * The addr field of struct kvm_one_reg must point to an aligned | ||
67 | * 64-bit wide location. For registers that are narrower than | ||
68 | * 64-bits, the value is stored in the low order bits of the location, | ||
69 | * and sign extended to 64-bits. | ||
70 | * | 67 | * |
71 | * The registers defined in struct kvm_regs are also accessible, the | 68 | * The registers defined in struct kvm_regs are also accessible, the |
72 | * id values for these are below. | 69 | * id values for these are below. |
73 | */ | 70 | */ |
74 | 71 | ||
75 | #define KVM_REG_MIPS_R0 0 | 72 | #define KVM_REG_MIPS_R0 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 0) |
76 | #define KVM_REG_MIPS_R1 1 | 73 | #define KVM_REG_MIPS_R1 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 1) |
77 | #define KVM_REG_MIPS_R2 2 | 74 | #define KVM_REG_MIPS_R2 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 2) |
78 | #define KVM_REG_MIPS_R3 3 | 75 | #define KVM_REG_MIPS_R3 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 3) |
79 | #define KVM_REG_MIPS_R4 4 | 76 | #define KVM_REG_MIPS_R4 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 4) |
80 | #define KVM_REG_MIPS_R5 5 | 77 | #define KVM_REG_MIPS_R5 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 5) |
81 | #define KVM_REG_MIPS_R6 6 | 78 | #define KVM_REG_MIPS_R6 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 6) |
82 | #define KVM_REG_MIPS_R7 7 | 79 | #define KVM_REG_MIPS_R7 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 7) |
83 | #define KVM_REG_MIPS_R8 8 | 80 | #define KVM_REG_MIPS_R8 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 8) |
84 | #define KVM_REG_MIPS_R9 9 | 81 | #define KVM_REG_MIPS_R9 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 9) |
85 | #define KVM_REG_MIPS_R10 10 | 82 | #define KVM_REG_MIPS_R10 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 10) |
86 | #define KVM_REG_MIPS_R11 11 | 83 | #define KVM_REG_MIPS_R11 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 11) |
87 | #define KVM_REG_MIPS_R12 12 | 84 | #define KVM_REG_MIPS_R12 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 12) |
88 | #define KVM_REG_MIPS_R13 13 | 85 | #define KVM_REG_MIPS_R13 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 13) |
89 | #define KVM_REG_MIPS_R14 14 | 86 | #define KVM_REG_MIPS_R14 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 14) |
90 | #define KVM_REG_MIPS_R15 15 | 87 | #define KVM_REG_MIPS_R15 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 15) |
91 | #define KVM_REG_MIPS_R16 16 | 88 | #define KVM_REG_MIPS_R16 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 16) |
92 | #define KVM_REG_MIPS_R17 17 | 89 | #define KVM_REG_MIPS_R17 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 17) |
93 | #define KVM_REG_MIPS_R18 18 | 90 | #define KVM_REG_MIPS_R18 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 18) |
94 | #define KVM_REG_MIPS_R19 19 | 91 | #define KVM_REG_MIPS_R19 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 19) |
95 | #define KVM_REG_MIPS_R20 20 | 92 | #define KVM_REG_MIPS_R20 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 20) |
96 | #define KVM_REG_MIPS_R21 21 | 93 | #define KVM_REG_MIPS_R21 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 21) |
97 | #define KVM_REG_MIPS_R22 22 | 94 | #define KVM_REG_MIPS_R22 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 22) |
98 | #define KVM_REG_MIPS_R23 23 | 95 | #define KVM_REG_MIPS_R23 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 23) |
99 | #define KVM_REG_MIPS_R24 24 | 96 | #define KVM_REG_MIPS_R24 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 24) |
100 | #define KVM_REG_MIPS_R25 25 | 97 | #define KVM_REG_MIPS_R25 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 25) |
101 | #define KVM_REG_MIPS_R26 26 | 98 | #define KVM_REG_MIPS_R26 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 26) |
102 | #define KVM_REG_MIPS_R27 27 | 99 | #define KVM_REG_MIPS_R27 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 27) |
103 | #define KVM_REG_MIPS_R28 28 | 100 | #define KVM_REG_MIPS_R28 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 28) |
104 | #define KVM_REG_MIPS_R29 29 | 101 | #define KVM_REG_MIPS_R29 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 29) |
105 | #define KVM_REG_MIPS_R30 30 | 102 | #define KVM_REG_MIPS_R30 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 30) |
106 | #define KVM_REG_MIPS_R31 31 | 103 | #define KVM_REG_MIPS_R31 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 31) |
107 | 104 | ||
108 | #define KVM_REG_MIPS_HI 32 | 105 | #define KVM_REG_MIPS_HI (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 32) |
109 | #define KVM_REG_MIPS_LO 33 | 106 | #define KVM_REG_MIPS_LO (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 33) |
110 | #define KVM_REG_MIPS_PC 34 | 107 | #define KVM_REG_MIPS_PC (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 34) |
111 | 108 | ||
112 | /* | 109 | /* |
113 | * KVM MIPS specific structures and definitions | 110 | * KVM MIPS specific structures and definitions |
diff --git a/arch/mips/kernel/ftrace.c b/arch/mips/kernel/ftrace.c index cf5509f13dd5..dba90ec0dc38 100644 --- a/arch/mips/kernel/ftrace.c +++ b/arch/mips/kernel/ftrace.c | |||
@@ -25,12 +25,16 @@ | |||
25 | #define MCOUNT_OFFSET_INSNS 4 | 25 | #define MCOUNT_OFFSET_INSNS 4 |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
29 | |||
28 | /* Arch override because MIPS doesn't need to run this from stop_machine() */ | 30 | /* Arch override because MIPS doesn't need to run this from stop_machine() */ |
29 | void arch_ftrace_update_code(int command) | 31 | void arch_ftrace_update_code(int command) |
30 | { | 32 | { |
31 | ftrace_modify_all_code(command); | 33 | ftrace_modify_all_code(command); |
32 | } | 34 | } |
33 | 35 | ||
36 | #endif | ||
37 | |||
34 | /* | 38 | /* |
35 | * Check if the address is in kernel space | 39 | * Check if the address is in kernel space |
36 | * | 40 | * |
diff --git a/arch/mips/kernel/idle.c b/arch/mips/kernel/idle.c index 3b09b888afa9..0c655deeea4a 100644 --- a/arch/mips/kernel/idle.c +++ b/arch/mips/kernel/idle.c | |||
@@ -93,26 +93,27 @@ static void rm7k_wait_irqoff(void) | |||
93 | } | 93 | } |
94 | 94 | ||
95 | /* | 95 | /* |
96 | * The Au1xxx wait is available only if using 32khz counter or | 96 | * Au1 'wait' is only useful when the 32kHz counter is used as timer, |
97 | * external timer source, but specifically not CP0 Counter. | 97 | * since coreclock (and the cp0 counter) stops upon executing it. Only an |
98 | * alchemy/common/time.c may override cpu_wait! | 98 | * interrupt can wake it, so they must be enabled before entering idle modes. |
99 | */ | 99 | */ |
100 | static void au1k_wait(void) | 100 | static void au1k_wait(void) |
101 | { | 101 | { |
102 | unsigned long c0status = read_c0_status() | 1; /* irqs on */ | ||
103 | |||
102 | __asm__( | 104 | __asm__( |
103 | " .set mips3 \n" | 105 | " .set mips3 \n" |
104 | " cache 0x14, 0(%0) \n" | 106 | " cache 0x14, 0(%0) \n" |
105 | " cache 0x14, 32(%0) \n" | 107 | " cache 0x14, 32(%0) \n" |
106 | " sync \n" | 108 | " sync \n" |
107 | " nop \n" | 109 | " mtc0 %1, $12 \n" /* wr c0status */ |
108 | " wait \n" | 110 | " wait \n" |
109 | " nop \n" | 111 | " nop \n" |
110 | " nop \n" | 112 | " nop \n" |
111 | " nop \n" | 113 | " nop \n" |
112 | " nop \n" | 114 | " nop \n" |
113 | " .set mips0 \n" | 115 | " .set mips0 \n" |
114 | : : "r" (au1k_wait)); | 116 | : : "r" (au1k_wait), "r" (c0status)); |
115 | local_irq_enable(); | ||
116 | } | 117 | } |
117 | 118 | ||
118 | static int __initdata nowait; | 119 | static int __initdata nowait; |
diff --git a/arch/mips/kvm/kvm_mips.c b/arch/mips/kvm/kvm_mips.c index d934b017f479..dd203e59e6fd 100644 --- a/arch/mips/kvm/kvm_mips.c +++ b/arch/mips/kvm/kvm_mips.c | |||
@@ -485,29 +485,35 @@ kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, | |||
485 | return -ENOIOCTLCMD; | 485 | return -ENOIOCTLCMD; |
486 | } | 486 | } |
487 | 487 | ||
488 | #define KVM_REG_MIPS_CP0_INDEX (0x10000 + 8 * 0 + 0) | 488 | #define MIPS_CP0_32(_R, _S) \ |
489 | #define KVM_REG_MIPS_CP0_ENTRYLO0 (0x10000 + 8 * 2 + 0) | 489 | (KVM_REG_MIPS | KVM_REG_SIZE_U32 | 0x10000 | (8 * (_R) + (_S))) |
490 | #define KVM_REG_MIPS_CP0_ENTRYLO1 (0x10000 + 8 * 3 + 0) | 490 | |
491 | #define KVM_REG_MIPS_CP0_CONTEXT (0x10000 + 8 * 4 + 0) | 491 | #define MIPS_CP0_64(_R, _S) \ |
492 | #define KVM_REG_MIPS_CP0_USERLOCAL (0x10000 + 8 * 4 + 2) | 492 | (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 0x10000 | (8 * (_R) + (_S))) |
493 | #define KVM_REG_MIPS_CP0_PAGEMASK (0x10000 + 8 * 5 + 0) | 493 | |
494 | #define KVM_REG_MIPS_CP0_PAGEGRAIN (0x10000 + 8 * 5 + 1) | 494 | #define KVM_REG_MIPS_CP0_INDEX MIPS_CP0_32(0, 0) |
495 | #define KVM_REG_MIPS_CP0_WIRED (0x10000 + 8 * 6 + 0) | 495 | #define KVM_REG_MIPS_CP0_ENTRYLO0 MIPS_CP0_64(2, 0) |
496 | #define KVM_REG_MIPS_CP0_HWRENA (0x10000 + 8 * 7 + 0) | 496 | #define KVM_REG_MIPS_CP0_ENTRYLO1 MIPS_CP0_64(3, 0) |
497 | #define KVM_REG_MIPS_CP0_BADVADDR (0x10000 + 8 * 8 + 0) | 497 | #define KVM_REG_MIPS_CP0_CONTEXT MIPS_CP0_64(4, 0) |
498 | #define KVM_REG_MIPS_CP0_COUNT (0x10000 + 8 * 9 + 0) | 498 | #define KVM_REG_MIPS_CP0_USERLOCAL MIPS_CP0_64(4, 2) |
499 | #define KVM_REG_MIPS_CP0_ENTRYHI (0x10000 + 8 * 10 + 0) | 499 | #define KVM_REG_MIPS_CP0_PAGEMASK MIPS_CP0_32(5, 0) |
500 | #define KVM_REG_MIPS_CP0_COMPARE (0x10000 + 8 * 11 + 0) | 500 | #define KVM_REG_MIPS_CP0_PAGEGRAIN MIPS_CP0_32(5, 1) |
501 | #define KVM_REG_MIPS_CP0_STATUS (0x10000 + 8 * 12 + 0) | 501 | #define KVM_REG_MIPS_CP0_WIRED MIPS_CP0_32(6, 0) |
502 | #define KVM_REG_MIPS_CP0_CAUSE (0x10000 + 8 * 13 + 0) | 502 | #define KVM_REG_MIPS_CP0_HWRENA MIPS_CP0_32(7, 0) |
503 | #define KVM_REG_MIPS_CP0_EBASE (0x10000 + 8 * 15 + 1) | 503 | #define KVM_REG_MIPS_CP0_BADVADDR MIPS_CP0_64(8, 0) |
504 | #define KVM_REG_MIPS_CP0_CONFIG (0x10000 + 8 * 16 + 0) | 504 | #define KVM_REG_MIPS_CP0_COUNT MIPS_CP0_32(9, 0) |
505 | #define KVM_REG_MIPS_CP0_CONFIG1 (0x10000 + 8 * 16 + 1) | 505 | #define KVM_REG_MIPS_CP0_ENTRYHI MIPS_CP0_64(10, 0) |
506 | #define KVM_REG_MIPS_CP0_CONFIG2 (0x10000 + 8 * 16 + 2) | 506 | #define KVM_REG_MIPS_CP0_COMPARE MIPS_CP0_32(11, 0) |
507 | #define KVM_REG_MIPS_CP0_CONFIG3 (0x10000 + 8 * 16 + 3) | 507 | #define KVM_REG_MIPS_CP0_STATUS MIPS_CP0_32(12, 0) |
508 | #define KVM_REG_MIPS_CP0_CONFIG7 (0x10000 + 8 * 16 + 7) | 508 | #define KVM_REG_MIPS_CP0_CAUSE MIPS_CP0_32(13, 0) |
509 | #define KVM_REG_MIPS_CP0_XCONTEXT (0x10000 + 8 * 20 + 0) | 509 | #define KVM_REG_MIPS_CP0_EBASE MIPS_CP0_64(15, 1) |
510 | #define KVM_REG_MIPS_CP0_ERROREPC (0x10000 + 8 * 30 + 0) | 510 | #define KVM_REG_MIPS_CP0_CONFIG MIPS_CP0_32(16, 0) |
511 | #define KVM_REG_MIPS_CP0_CONFIG1 MIPS_CP0_32(16, 1) | ||
512 | #define KVM_REG_MIPS_CP0_CONFIG2 MIPS_CP0_32(16, 2) | ||
513 | #define KVM_REG_MIPS_CP0_CONFIG3 MIPS_CP0_32(16, 3) | ||
514 | #define KVM_REG_MIPS_CP0_CONFIG7 MIPS_CP0_32(16, 7) | ||
515 | #define KVM_REG_MIPS_CP0_XCONTEXT MIPS_CP0_64(20, 0) | ||
516 | #define KVM_REG_MIPS_CP0_ERROREPC MIPS_CP0_64(30, 0) | ||
511 | 517 | ||
512 | static u64 kvm_mips_get_one_regs[] = { | 518 | static u64 kvm_mips_get_one_regs[] = { |
513 | KVM_REG_MIPS_R0, | 519 | KVM_REG_MIPS_R0, |
@@ -567,8 +573,6 @@ static u64 kvm_mips_get_one_regs[] = { | |||
567 | static int kvm_mips_get_reg(struct kvm_vcpu *vcpu, | 573 | static int kvm_mips_get_reg(struct kvm_vcpu *vcpu, |
568 | const struct kvm_one_reg *reg) | 574 | const struct kvm_one_reg *reg) |
569 | { | 575 | { |
570 | u64 __user *uaddr = (u64 __user *)(long)reg->addr; | ||
571 | |||
572 | struct mips_coproc *cop0 = vcpu->arch.cop0; | 576 | struct mips_coproc *cop0 = vcpu->arch.cop0; |
573 | s64 v; | 577 | s64 v; |
574 | 578 | ||
@@ -631,18 +635,39 @@ static int kvm_mips_get_reg(struct kvm_vcpu *vcpu, | |||
631 | default: | 635 | default: |
632 | return -EINVAL; | 636 | return -EINVAL; |
633 | } | 637 | } |
634 | return put_user(v, uaddr); | 638 | if ((reg->id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U64) { |
639 | u64 __user *uaddr64 = (u64 __user *)(long)reg->addr; | ||
640 | return put_user(v, uaddr64); | ||
641 | } else if ((reg->id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U32) { | ||
642 | u32 __user *uaddr32 = (u32 __user *)(long)reg->addr; | ||
643 | u32 v32 = (u32)v; | ||
644 | return put_user(v32, uaddr32); | ||
645 | } else { | ||
646 | return -EINVAL; | ||
647 | } | ||
635 | } | 648 | } |
636 | 649 | ||
637 | static int kvm_mips_set_reg(struct kvm_vcpu *vcpu, | 650 | static int kvm_mips_set_reg(struct kvm_vcpu *vcpu, |
638 | const struct kvm_one_reg *reg) | 651 | const struct kvm_one_reg *reg) |
639 | { | 652 | { |
640 | u64 __user *uaddr = (u64 __user *)(long)reg->addr; | ||
641 | struct mips_coproc *cop0 = vcpu->arch.cop0; | 653 | struct mips_coproc *cop0 = vcpu->arch.cop0; |
642 | u64 v; | 654 | u64 v; |
643 | 655 | ||
644 | if (get_user(v, uaddr) != 0) | 656 | if ((reg->id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U64) { |
645 | return -EFAULT; | 657 | u64 __user *uaddr64 = (u64 __user *)(long)reg->addr; |
658 | |||
659 | if (get_user(v, uaddr64) != 0) | ||
660 | return -EFAULT; | ||
661 | } else if ((reg->id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U32) { | ||
662 | u32 __user *uaddr32 = (u32 __user *)(long)reg->addr; | ||
663 | s32 v32; | ||
664 | |||
665 | if (get_user(v32, uaddr32) != 0) | ||
666 | return -EFAULT; | ||
667 | v = (s64)v32; | ||
668 | } else { | ||
669 | return -EINVAL; | ||
670 | } | ||
646 | 671 | ||
647 | switch (reg->id) { | 672 | switch (reg->id) { |
648 | case KVM_REG_MIPS_R0: | 673 | case KVM_REG_MIPS_R0: |
diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h index 26807e5aff51..6f3887d884d2 100644 --- a/arch/powerpc/include/asm/cputable.h +++ b/arch/powerpc/include/asm/cputable.h | |||
@@ -176,6 +176,7 @@ extern const char *powerpc_base_platform; | |||
176 | #define CPU_FTR_CFAR LONG_ASM_CONST(0x0100000000000000) | 176 | #define CPU_FTR_CFAR LONG_ASM_CONST(0x0100000000000000) |
177 | #define CPU_FTR_HAS_PPR LONG_ASM_CONST(0x0200000000000000) | 177 | #define CPU_FTR_HAS_PPR LONG_ASM_CONST(0x0200000000000000) |
178 | #define CPU_FTR_DAWR LONG_ASM_CONST(0x0400000000000000) | 178 | #define CPU_FTR_DAWR LONG_ASM_CONST(0x0400000000000000) |
179 | #define CPU_FTR_DABRX LONG_ASM_CONST(0x0800000000000000) | ||
179 | 180 | ||
180 | #ifndef __ASSEMBLY__ | 181 | #ifndef __ASSEMBLY__ |
181 | 182 | ||
@@ -394,19 +395,20 @@ extern const char *powerpc_base_platform; | |||
394 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_201 | \ | 395 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_201 | \ |
395 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA | \ | 396 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA | \ |
396 | CPU_FTR_CP_USE_DCBTZ | CPU_FTR_STCX_CHECKS_ADDRESS | \ | 397 | CPU_FTR_CP_USE_DCBTZ | CPU_FTR_STCX_CHECKS_ADDRESS | \ |
397 | CPU_FTR_HVMODE) | 398 | CPU_FTR_HVMODE | CPU_FTR_DABRX) |
398 | #define CPU_FTRS_POWER5 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ | 399 | #define CPU_FTRS_POWER5 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
399 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | 400 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
400 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 401 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
401 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_PURR | \ | 402 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_PURR | \ |
402 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB) | 403 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_DABRX) |
403 | #define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ | 404 | #define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
404 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | 405 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
405 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 406 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
406 | CPU_FTR_COHERENT_ICACHE | \ | 407 | CPU_FTR_COHERENT_ICACHE | \ |
407 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ | 408 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ |
408 | CPU_FTR_DSCR | CPU_FTR_UNALIGNED_LD_STD | \ | 409 | CPU_FTR_DSCR | CPU_FTR_UNALIGNED_LD_STD | \ |
409 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_CFAR) | 410 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_CFAR | \ |
411 | CPU_FTR_DABRX) | ||
410 | #define CPU_FTRS_POWER7 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ | 412 | #define CPU_FTRS_POWER7 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
411 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ | 413 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ |
412 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 414 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
@@ -415,7 +417,7 @@ extern const char *powerpc_base_platform; | |||
415 | CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_ASYM_SMT | \ | 417 | CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_ASYM_SMT | \ |
416 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ | 418 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
417 | CPU_FTR_ICSWX | CPU_FTR_CFAR | CPU_FTR_HVMODE | \ | 419 | CPU_FTR_ICSWX | CPU_FTR_CFAR | CPU_FTR_HVMODE | \ |
418 | CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR) | 420 | CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR | CPU_FTR_DABRX) |
419 | #define CPU_FTRS_POWER8 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ | 421 | #define CPU_FTRS_POWER8 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
420 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ | 422 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ |
421 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 423 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
@@ -430,14 +432,15 @@ extern const char *powerpc_base_platform; | |||
430 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ | 432 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
431 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 433 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
432 | CPU_FTR_PAUSE_ZERO | CPU_FTR_CELL_TB_BUG | CPU_FTR_CP_USE_DCBTZ | \ | 434 | CPU_FTR_PAUSE_ZERO | CPU_FTR_CELL_TB_BUG | CPU_FTR_CP_USE_DCBTZ | \ |
433 | CPU_FTR_UNALIGNED_LD_STD) | 435 | CPU_FTR_UNALIGNED_LD_STD | CPU_FTR_DABRX) |
434 | #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ | 436 | #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
435 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP | \ | 437 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP | \ |
436 | CPU_FTR_PURR | CPU_FTR_REAL_LE) | 438 | CPU_FTR_PURR | CPU_FTR_REAL_LE | CPU_FTR_DABRX) |
437 | #define CPU_FTRS_COMPATIBLE (CPU_FTR_USE_TB | CPU_FTR_PPCAS_ARCH_V2) | 439 | #define CPU_FTRS_COMPATIBLE (CPU_FTR_USE_TB | CPU_FTR_PPCAS_ARCH_V2) |
438 | 440 | ||
439 | #define CPU_FTRS_A2 (CPU_FTR_USE_TB | CPU_FTR_SMT | CPU_FTR_DBELL | \ | 441 | #define CPU_FTRS_A2 (CPU_FTR_USE_TB | CPU_FTR_SMT | CPU_FTR_DBELL | \ |
440 | CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN | CPU_FTR_ICSWX) | 442 | CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN | \ |
443 | CPU_FTR_ICSWX | CPU_FTR_DABRX ) | ||
441 | 444 | ||
442 | #ifdef __powerpc64__ | 445 | #ifdef __powerpc64__ |
443 | #ifdef CONFIG_PPC_BOOK3E | 446 | #ifdef CONFIG_PPC_BOOK3E |
diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h index 8e5fae8beaf6..46793b58a761 100644 --- a/arch/powerpc/include/asm/exception-64s.h +++ b/arch/powerpc/include/asm/exception-64s.h | |||
@@ -513,7 +513,7 @@ label##_common: \ | |||
513 | */ | 513 | */ |
514 | #define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr) \ | 514 | #define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr) \ |
515 | EXCEPTION_COMMON(trap, label, hdlr, ret_from_except_lite, \ | 515 | EXCEPTION_COMMON(trap, label, hdlr, ret_from_except_lite, \ |
516 | FINISH_NAP;RUNLATCH_ON;DISABLE_INTS) | 516 | FINISH_NAP;DISABLE_INTS;RUNLATCH_ON) |
517 | 517 | ||
518 | /* | 518 | /* |
519 | * When the idle code in power4_idle puts the CPU into NAP mode, | 519 | * When the idle code in power4_idle puts the CPU into NAP mode, |
diff --git a/arch/powerpc/include/asm/kvm_asm.h b/arch/powerpc/include/asm/kvm_asm.h index b9dd382cb349..851bac7afa4b 100644 --- a/arch/powerpc/include/asm/kvm_asm.h +++ b/arch/powerpc/include/asm/kvm_asm.h | |||
@@ -54,8 +54,16 @@ | |||
54 | #define BOOKE_INTERRUPT_DEBUG 15 | 54 | #define BOOKE_INTERRUPT_DEBUG 15 |
55 | 55 | ||
56 | /* E500 */ | 56 | /* E500 */ |
57 | #define BOOKE_INTERRUPT_SPE_UNAVAIL 32 | 57 | #define BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL 32 |
58 | #define BOOKE_INTERRUPT_SPE_FP_DATA 33 | 58 | #define BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST 33 |
59 | /* | ||
60 | * TODO: Unify 32-bit and 64-bit kernel exception handlers to use same defines | ||
61 | */ | ||
62 | #define BOOKE_INTERRUPT_SPE_UNAVAIL BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL | ||
63 | #define BOOKE_INTERRUPT_SPE_FP_DATA BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST | ||
64 | #define BOOKE_INTERRUPT_ALTIVEC_UNAVAIL BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL | ||
65 | #define BOOKE_INTERRUPT_ALTIVEC_ASSIST \ | ||
66 | BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST | ||
59 | #define BOOKE_INTERRUPT_SPE_FP_ROUND 34 | 67 | #define BOOKE_INTERRUPT_SPE_FP_ROUND 34 |
60 | #define BOOKE_INTERRUPT_PERFORMANCE_MONITOR 35 | 68 | #define BOOKE_INTERRUPT_PERFORMANCE_MONITOR 35 |
61 | #define BOOKE_INTERRUPT_DOORBELL 36 | 69 | #define BOOKE_INTERRUPT_DOORBELL 36 |
@@ -67,10 +75,6 @@ | |||
67 | #define BOOKE_INTERRUPT_HV_SYSCALL 40 | 75 | #define BOOKE_INTERRUPT_HV_SYSCALL 40 |
68 | #define BOOKE_INTERRUPT_HV_PRIV 41 | 76 | #define BOOKE_INTERRUPT_HV_PRIV 41 |
69 | 77 | ||
70 | /* altivec */ | ||
71 | #define BOOKE_INTERRUPT_ALTIVEC_UNAVAIL 42 | ||
72 | #define BOOKE_INTERRUPT_ALTIVEC_ASSIST 43 | ||
73 | |||
74 | /* book3s */ | 78 | /* book3s */ |
75 | 79 | ||
76 | #define BOOK3S_INTERRUPT_SYSTEM_RESET 0x100 | 80 | #define BOOK3S_INTERRUPT_SYSTEM_RESET 0x100 |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 1f0937d7d4b5..2a45d0f04385 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -452,8 +452,8 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
452 | .mmu_features = MMU_FTRS_POWER8, | 452 | .mmu_features = MMU_FTRS_POWER8, |
453 | .icache_bsize = 128, | 453 | .icache_bsize = 128, |
454 | .dcache_bsize = 128, | 454 | .dcache_bsize = 128, |
455 | .oprofile_type = PPC_OPROFILE_POWER4, | 455 | .oprofile_type = PPC_OPROFILE_INVALID, |
456 | .oprofile_cpu_type = 0, | 456 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", |
457 | .cpu_setup = __setup_cpu_power8, | 457 | .cpu_setup = __setup_cpu_power8, |
458 | .cpu_restore = __restore_cpu_power8, | 458 | .cpu_restore = __restore_cpu_power8, |
459 | .platform = "power8", | 459 | .platform = "power8", |
@@ -506,8 +506,8 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
506 | .dcache_bsize = 128, | 506 | .dcache_bsize = 128, |
507 | .num_pmcs = 6, | 507 | .num_pmcs = 6, |
508 | .pmc_type = PPC_PMC_IBM, | 508 | .pmc_type = PPC_PMC_IBM, |
509 | .oprofile_cpu_type = 0, | 509 | .oprofile_cpu_type = "ppc64/power8", |
510 | .oprofile_type = PPC_OPROFILE_POWER4, | 510 | .oprofile_type = PPC_OPROFILE_INVALID, |
511 | .cpu_setup = __setup_cpu_power8, | 511 | .cpu_setup = __setup_cpu_power8, |
512 | .cpu_restore = __restore_cpu_power8, | 512 | .cpu_restore = __restore_cpu_power8, |
513 | .platform = "power8", | 513 | .platform = "power8", |
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 246b11c4fe7e..8741c854e03d 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
@@ -465,20 +465,6 @@ BEGIN_FTR_SECTION | |||
465 | std r0, THREAD_EBBHR(r3) | 465 | std r0, THREAD_EBBHR(r3) |
466 | mfspr r0, SPRN_EBBRR | 466 | mfspr r0, SPRN_EBBRR |
467 | std r0, THREAD_EBBRR(r3) | 467 | std r0, THREAD_EBBRR(r3) |
468 | |||
469 | /* PMU registers made user read/(write) by EBB */ | ||
470 | mfspr r0, SPRN_SIAR | ||
471 | std r0, THREAD_SIAR(r3) | ||
472 | mfspr r0, SPRN_SDAR | ||
473 | std r0, THREAD_SDAR(r3) | ||
474 | mfspr r0, SPRN_SIER | ||
475 | std r0, THREAD_SIER(r3) | ||
476 | mfspr r0, SPRN_MMCR0 | ||
477 | std r0, THREAD_MMCR0(r3) | ||
478 | mfspr r0, SPRN_MMCR2 | ||
479 | std r0, THREAD_MMCR2(r3) | ||
480 | mfspr r0, SPRN_MMCRA | ||
481 | std r0, THREAD_MMCRA(r3) | ||
482 | END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) | 468 | END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) |
483 | #endif | 469 | #endif |
484 | 470 | ||
@@ -581,20 +567,6 @@ BEGIN_FTR_SECTION | |||
581 | ld r0, THREAD_EBBRR(r4) | 567 | ld r0, THREAD_EBBRR(r4) |
582 | mtspr SPRN_EBBRR, r0 | 568 | mtspr SPRN_EBBRR, r0 |
583 | 569 | ||
584 | /* PMU registers made user read/(write) by EBB */ | ||
585 | ld r0, THREAD_SIAR(r4) | ||
586 | mtspr SPRN_SIAR, r0 | ||
587 | ld r0, THREAD_SDAR(r4) | ||
588 | mtspr SPRN_SDAR, r0 | ||
589 | ld r0, THREAD_SIER(r4) | ||
590 | mtspr SPRN_SIER, r0 | ||
591 | ld r0, THREAD_MMCR0(r4) | ||
592 | mtspr SPRN_MMCR0, r0 | ||
593 | ld r0, THREAD_MMCR2(r4) | ||
594 | mtspr SPRN_MMCR2, r0 | ||
595 | ld r0, THREAD_MMCRA(r4) | ||
596 | mtspr SPRN_MMCRA, r0 | ||
597 | |||
598 | ld r0,THREAD_TAR(r4) | 570 | ld r0,THREAD_TAR(r4) |
599 | mtspr SPRN_TAR,r0 | 571 | mtspr SPRN_TAR,r0 |
600 | END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) | 572 | END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) |
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index e6eba1bf61ad..40e4a17c8ba0 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -454,38 +454,14 @@ BEGIN_FTR_SECTION | |||
454 | xori r10,r10,(MSR_FE0|MSR_FE1) | 454 | xori r10,r10,(MSR_FE0|MSR_FE1) |
455 | mtmsrd r10 | 455 | mtmsrd r10 |
456 | sync | 456 | sync |
457 | fmr 0,0 | 457 | |
458 | fmr 1,1 | 458 | #define FMR2(n) fmr (n), (n) ; fmr n+1, n+1 |
459 | fmr 2,2 | 459 | #define FMR4(n) FMR2(n) ; FMR2(n+2) |
460 | fmr 3,3 | 460 | #define FMR8(n) FMR4(n) ; FMR4(n+4) |
461 | fmr 4,4 | 461 | #define FMR16(n) FMR8(n) ; FMR8(n+8) |
462 | fmr 5,5 | 462 | #define FMR32(n) FMR16(n) ; FMR16(n+16) |
463 | fmr 6,6 | 463 | FMR32(0) |
464 | fmr 7,7 | 464 | |
465 | fmr 8,8 | ||
466 | fmr 9,9 | ||
467 | fmr 10,10 | ||
468 | fmr 11,11 | ||
469 | fmr 12,12 | ||
470 | fmr 13,13 | ||
471 | fmr 14,14 | ||
472 | fmr 15,15 | ||
473 | fmr 16,16 | ||
474 | fmr 17,17 | ||
475 | fmr 18,18 | ||
476 | fmr 19,19 | ||
477 | fmr 20,20 | ||
478 | fmr 21,21 | ||
479 | fmr 22,22 | ||
480 | fmr 23,23 | ||
481 | fmr 24,24 | ||
482 | fmr 25,25 | ||
483 | fmr 26,26 | ||
484 | fmr 27,27 | ||
485 | fmr 28,28 | ||
486 | fmr 29,29 | ||
487 | fmr 30,30 | ||
488 | fmr 31,31 | ||
489 | FTR_SECTION_ELSE | 465 | FTR_SECTION_ELSE |
490 | /* | 466 | /* |
491 | * To denormalise we need to move a copy of the register to itself. | 467 | * To denormalise we need to move a copy of the register to itself. |
@@ -495,39 +471,25 @@ FTR_SECTION_ELSE | |||
495 | oris r10,r10,MSR_VSX@h | 471 | oris r10,r10,MSR_VSX@h |
496 | mtmsrd r10 | 472 | mtmsrd r10 |
497 | sync | 473 | sync |
498 | XVCPSGNDP(0,0,0) | 474 | |
499 | XVCPSGNDP(1,1,1) | 475 | #define XVCPSGNDP2(n) XVCPSGNDP(n,n,n) ; XVCPSGNDP(n+1,n+1,n+1) |
500 | XVCPSGNDP(2,2,2) | 476 | #define XVCPSGNDP4(n) XVCPSGNDP2(n) ; XVCPSGNDP2(n+2) |
501 | XVCPSGNDP(3,3,3) | 477 | #define XVCPSGNDP8(n) XVCPSGNDP4(n) ; XVCPSGNDP4(n+4) |
502 | XVCPSGNDP(4,4,4) | 478 | #define XVCPSGNDP16(n) XVCPSGNDP8(n) ; XVCPSGNDP8(n+8) |
503 | XVCPSGNDP(5,5,5) | 479 | #define XVCPSGNDP32(n) XVCPSGNDP16(n) ; XVCPSGNDP16(n+16) |
504 | XVCPSGNDP(6,6,6) | 480 | XVCPSGNDP32(0) |
505 | XVCPSGNDP(7,7,7) | 481 | |
506 | XVCPSGNDP(8,8,8) | ||
507 | XVCPSGNDP(9,9,9) | ||
508 | XVCPSGNDP(10,10,10) | ||
509 | XVCPSGNDP(11,11,11) | ||
510 | XVCPSGNDP(12,12,12) | ||
511 | XVCPSGNDP(13,13,13) | ||
512 | XVCPSGNDP(14,14,14) | ||
513 | XVCPSGNDP(15,15,15) | ||
514 | XVCPSGNDP(16,16,16) | ||
515 | XVCPSGNDP(17,17,17) | ||
516 | XVCPSGNDP(18,18,18) | ||
517 | XVCPSGNDP(19,19,19) | ||
518 | XVCPSGNDP(20,20,20) | ||
519 | XVCPSGNDP(21,21,21) | ||
520 | XVCPSGNDP(22,22,22) | ||
521 | XVCPSGNDP(23,23,23) | ||
522 | XVCPSGNDP(24,24,24) | ||
523 | XVCPSGNDP(25,25,25) | ||
524 | XVCPSGNDP(26,26,26) | ||
525 | XVCPSGNDP(27,27,27) | ||
526 | XVCPSGNDP(28,28,28) | ||
527 | XVCPSGNDP(29,29,29) | ||
528 | XVCPSGNDP(30,30,30) | ||
529 | XVCPSGNDP(31,31,31) | ||
530 | ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_206) | 482 | ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_206) |
483 | |||
484 | BEGIN_FTR_SECTION | ||
485 | b denorm_done | ||
486 | END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) | ||
487 | /* | ||
488 | * To denormalise we need to move a copy of the register to itself. | ||
489 | * For POWER8 we need to do that for all 64 VSX registers | ||
490 | */ | ||
491 | XVCPSGNDP32(32) | ||
492 | denorm_done: | ||
531 | mtspr SPRN_HSRR0,r11 | 493 | mtspr SPRN_HSRR0,r11 |
532 | mtcrf 0x80,r9 | 494 | mtcrf 0x80,r9 |
533 | ld r9,PACA_EXGEN+EX_R9(r13) | 495 | ld r9,PACA_EXGEN+EX_R9(r13) |
@@ -721,7 +683,7 @@ machine_check_common: | |||
721 | STD_EXCEPTION_COMMON(0xb00, trap_0b, .unknown_exception) | 683 | STD_EXCEPTION_COMMON(0xb00, trap_0b, .unknown_exception) |
722 | STD_EXCEPTION_COMMON(0xd00, single_step, .single_step_exception) | 684 | STD_EXCEPTION_COMMON(0xd00, single_step, .single_step_exception) |
723 | STD_EXCEPTION_COMMON(0xe00, trap_0e, .unknown_exception) | 685 | STD_EXCEPTION_COMMON(0xe00, trap_0e, .unknown_exception) |
724 | STD_EXCEPTION_COMMON(0xe40, emulation_assist, .program_check_exception) | 686 | STD_EXCEPTION_COMMON(0xe40, emulation_assist, .emulation_assist_interrupt) |
725 | STD_EXCEPTION_COMMON(0xe60, hmi_exception, .unknown_exception) | 687 | STD_EXCEPTION_COMMON(0xe60, hmi_exception, .unknown_exception) |
726 | #ifdef CONFIG_PPC_DOORBELL | 688 | #ifdef CONFIG_PPC_DOORBELL |
727 | STD_EXCEPTION_COMMON_ASYNC(0xe80, h_doorbell, .doorbell_exception) | 689 | STD_EXCEPTION_COMMON_ASYNC(0xe80, h_doorbell, .doorbell_exception) |
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 5cbcf4d5a808..ea185e0b3cae 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
@@ -162,7 +162,7 @@ notrace unsigned int __check_irq_replay(void) | |||
162 | * in case we also had a rollover while hard disabled | 162 | * in case we also had a rollover while hard disabled |
163 | */ | 163 | */ |
164 | local_paca->irq_happened &= ~PACA_IRQ_DEC; | 164 | local_paca->irq_happened &= ~PACA_IRQ_DEC; |
165 | if (decrementer_check_overflow()) | 165 | if ((happened & PACA_IRQ_DEC) || decrementer_check_overflow()) |
166 | return 0x900; | 166 | return 0x900; |
167 | 167 | ||
168 | /* Finally check if an external interrupt happened */ | 168 | /* Finally check if an external interrupt happened */ |
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 7f2273cc3c7d..eabeec991016 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
@@ -827,6 +827,7 @@ static void pcibios_fixup_resources(struct pci_dev *dev) | |||
827 | } | 827 | } |
828 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { | 828 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { |
829 | struct resource *res = dev->resource + i; | 829 | struct resource *res = dev->resource + i; |
830 | struct pci_bus_region reg; | ||
830 | if (!res->flags) | 831 | if (!res->flags) |
831 | continue; | 832 | continue; |
832 | 833 | ||
@@ -835,8 +836,9 @@ static void pcibios_fixup_resources(struct pci_dev *dev) | |||
835 | * at 0 as unset as well, except if PCI_PROBE_ONLY is also set | 836 | * at 0 as unset as well, except if PCI_PROBE_ONLY is also set |
836 | * since in that case, we don't want to re-assign anything | 837 | * since in that case, we don't want to re-assign anything |
837 | */ | 838 | */ |
839 | pcibios_resource_to_bus(dev, ®, res); | ||
838 | if (pci_has_flag(PCI_REASSIGN_ALL_RSRC) || | 840 | if (pci_has_flag(PCI_REASSIGN_ALL_RSRC) || |
839 | (res->start == 0 && !pci_has_flag(PCI_PROBE_ONLY))) { | 841 | (reg.start == 0 && !pci_has_flag(PCI_PROBE_ONLY))) { |
840 | /* Only print message if not re-assigning */ | 842 | /* Only print message if not re-assigning */ |
841 | if (!pci_has_flag(PCI_REASSIGN_ALL_RSRC)) | 843 | if (!pci_has_flag(PCI_REASSIGN_ALL_RSRC)) |
842 | pr_debug("PCI:%s Resource %d %016llx-%016llx [%x] " | 844 | pr_debug("PCI:%s Resource %d %016llx-%016llx [%x] " |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index a902723fdc69..076d1242507a 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -399,7 +399,8 @@ static inline int __set_dabr(unsigned long dabr, unsigned long dabrx) | |||
399 | static inline int __set_dabr(unsigned long dabr, unsigned long dabrx) | 399 | static inline int __set_dabr(unsigned long dabr, unsigned long dabrx) |
400 | { | 400 | { |
401 | mtspr(SPRN_DABR, dabr); | 401 | mtspr(SPRN_DABR, dabr); |
402 | mtspr(SPRN_DABRX, dabrx); | 402 | if (cpu_has_feature(CPU_FTR_DABRX)) |
403 | mtspr(SPRN_DABRX, dabrx); | ||
403 | return 0; | 404 | return 0; |
404 | } | 405 | } |
405 | #else | 406 | #else |
@@ -1368,7 +1369,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) | |||
1368 | 1369 | ||
1369 | #ifdef CONFIG_PPC64 | 1370 | #ifdef CONFIG_PPC64 |
1370 | /* Called with hard IRQs off */ | 1371 | /* Called with hard IRQs off */ |
1371 | void __ppc64_runlatch_on(void) | 1372 | void notrace __ppc64_runlatch_on(void) |
1372 | { | 1373 | { |
1373 | struct thread_info *ti = current_thread_info(); | 1374 | struct thread_info *ti = current_thread_info(); |
1374 | unsigned long ctrl; | 1375 | unsigned long ctrl; |
@@ -1381,7 +1382,7 @@ void __ppc64_runlatch_on(void) | |||
1381 | } | 1382 | } |
1382 | 1383 | ||
1383 | /* Called with hard IRQs off */ | 1384 | /* Called with hard IRQs off */ |
1384 | void __ppc64_runlatch_off(void) | 1385 | void notrace __ppc64_runlatch_off(void) |
1385 | { | 1386 | { |
1386 | struct thread_info *ti = current_thread_info(); | 1387 | struct thread_info *ti = current_thread_info(); |
1387 | unsigned long ctrl; | 1388 | unsigned long ctrl; |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index f18c79c324ef..c0e5caf8ccc7 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -1165,6 +1165,16 @@ bail: | |||
1165 | exception_exit(prev_state); | 1165 | exception_exit(prev_state); |
1166 | } | 1166 | } |
1167 | 1167 | ||
1168 | /* | ||
1169 | * This occurs when running in hypervisor mode on POWER6 or later | ||
1170 | * and an illegal instruction is encountered. | ||
1171 | */ | ||
1172 | void __kprobes emulation_assist_interrupt(struct pt_regs *regs) | ||
1173 | { | ||
1174 | regs->msr |= REASON_ILLEGAL; | ||
1175 | program_check_exception(regs); | ||
1176 | } | ||
1177 | |||
1168 | void alignment_exception(struct pt_regs *regs) | 1178 | void alignment_exception(struct pt_regs *regs) |
1169 | { | 1179 | { |
1170 | enum ctx_state prev_state = exception_enter(); | 1180 | enum ctx_state prev_state = exception_enter(); |
diff --git a/arch/powerpc/kvm/44x_tlb.c b/arch/powerpc/kvm/44x_tlb.c index 5dd3ab469976..ed0385448148 100644 --- a/arch/powerpc/kvm/44x_tlb.c +++ b/arch/powerpc/kvm/44x_tlb.c | |||
@@ -441,6 +441,7 @@ int kvmppc_44x_emul_tlbwe(struct kvm_vcpu *vcpu, u8 ra, u8 rs, u8 ws) | |||
441 | struct kvmppc_vcpu_44x *vcpu_44x = to_44x(vcpu); | 441 | struct kvmppc_vcpu_44x *vcpu_44x = to_44x(vcpu); |
442 | struct kvmppc_44x_tlbe *tlbe; | 442 | struct kvmppc_44x_tlbe *tlbe; |
443 | unsigned int gtlb_index; | 443 | unsigned int gtlb_index; |
444 | int idx; | ||
444 | 445 | ||
445 | gtlb_index = kvmppc_get_gpr(vcpu, ra); | 446 | gtlb_index = kvmppc_get_gpr(vcpu, ra); |
446 | if (gtlb_index >= KVM44x_GUEST_TLB_SIZE) { | 447 | if (gtlb_index >= KVM44x_GUEST_TLB_SIZE) { |
@@ -473,6 +474,8 @@ int kvmppc_44x_emul_tlbwe(struct kvm_vcpu *vcpu, u8 ra, u8 rs, u8 ws) | |||
473 | return EMULATE_FAIL; | 474 | return EMULATE_FAIL; |
474 | } | 475 | } |
475 | 476 | ||
477 | idx = srcu_read_lock(&vcpu->kvm->srcu); | ||
478 | |||
476 | if (tlbe_is_host_safe(vcpu, tlbe)) { | 479 | if (tlbe_is_host_safe(vcpu, tlbe)) { |
477 | gva_t eaddr; | 480 | gva_t eaddr; |
478 | gpa_t gpaddr; | 481 | gpa_t gpaddr; |
@@ -489,6 +492,8 @@ int kvmppc_44x_emul_tlbwe(struct kvm_vcpu *vcpu, u8 ra, u8 rs, u8 ws) | |||
489 | kvmppc_mmu_map(vcpu, eaddr, gpaddr, gtlb_index); | 492 | kvmppc_mmu_map(vcpu, eaddr, gpaddr, gtlb_index); |
490 | } | 493 | } |
491 | 494 | ||
495 | srcu_read_unlock(&vcpu->kvm->srcu, idx); | ||
496 | |||
492 | trace_kvm_gtlb_write(gtlb_index, tlbe->tid, tlbe->word0, tlbe->word1, | 497 | trace_kvm_gtlb_write(gtlb_index, tlbe->tid, tlbe->word0, tlbe->word1, |
493 | tlbe->word2); | 498 | tlbe->word2); |
494 | 499 | ||
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index 1020119226db..5cd7ad0c1176 100644 --- a/arch/powerpc/kvm/booke.c +++ b/arch/powerpc/kvm/booke.c | |||
@@ -832,6 +832,18 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
832 | { | 832 | { |
833 | int r = RESUME_HOST; | 833 | int r = RESUME_HOST; |
834 | int s; | 834 | int s; |
835 | int idx; | ||
836 | |||
837 | #ifdef CONFIG_PPC64 | ||
838 | WARN_ON(local_paca->irq_happened != 0); | ||
839 | #endif | ||
840 | |||
841 | /* | ||
842 | * We enter with interrupts disabled in hardware, but | ||
843 | * we need to call hard_irq_disable anyway to ensure that | ||
844 | * the software state is kept in sync. | ||
845 | */ | ||
846 | hard_irq_disable(); | ||
835 | 847 | ||
836 | /* update before a new last_exit_type is rewritten */ | 848 | /* update before a new last_exit_type is rewritten */ |
837 | kvmppc_update_timing_stats(vcpu); | 849 | kvmppc_update_timing_stats(vcpu); |
@@ -1053,6 +1065,8 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
1053 | break; | 1065 | break; |
1054 | } | 1066 | } |
1055 | 1067 | ||
1068 | idx = srcu_read_lock(&vcpu->kvm->srcu); | ||
1069 | |||
1056 | gpaddr = kvmppc_mmu_xlate(vcpu, gtlb_index, eaddr); | 1070 | gpaddr = kvmppc_mmu_xlate(vcpu, gtlb_index, eaddr); |
1057 | gfn = gpaddr >> PAGE_SHIFT; | 1071 | gfn = gpaddr >> PAGE_SHIFT; |
1058 | 1072 | ||
@@ -1075,6 +1089,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
1075 | kvmppc_account_exit(vcpu, MMIO_EXITS); | 1089 | kvmppc_account_exit(vcpu, MMIO_EXITS); |
1076 | } | 1090 | } |
1077 | 1091 | ||
1092 | srcu_read_unlock(&vcpu->kvm->srcu, idx); | ||
1078 | break; | 1093 | break; |
1079 | } | 1094 | } |
1080 | 1095 | ||
@@ -1098,6 +1113,8 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
1098 | 1113 | ||
1099 | kvmppc_account_exit(vcpu, ITLB_VIRT_MISS_EXITS); | 1114 | kvmppc_account_exit(vcpu, ITLB_VIRT_MISS_EXITS); |
1100 | 1115 | ||
1116 | idx = srcu_read_lock(&vcpu->kvm->srcu); | ||
1117 | |||
1101 | gpaddr = kvmppc_mmu_xlate(vcpu, gtlb_index, eaddr); | 1118 | gpaddr = kvmppc_mmu_xlate(vcpu, gtlb_index, eaddr); |
1102 | gfn = gpaddr >> PAGE_SHIFT; | 1119 | gfn = gpaddr >> PAGE_SHIFT; |
1103 | 1120 | ||
@@ -1114,6 +1131,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
1114 | kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_MACHINE_CHECK); | 1131 | kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_MACHINE_CHECK); |
1115 | } | 1132 | } |
1116 | 1133 | ||
1134 | srcu_read_unlock(&vcpu->kvm->srcu, idx); | ||
1117 | break; | 1135 | break; |
1118 | } | 1136 | } |
1119 | 1137 | ||
diff --git a/arch/powerpc/kvm/e500_mmu.c b/arch/powerpc/kvm/e500_mmu.c index c41a5a96b558..6d6f153b6c1d 100644 --- a/arch/powerpc/kvm/e500_mmu.c +++ b/arch/powerpc/kvm/e500_mmu.c | |||
@@ -396,6 +396,7 @@ int kvmppc_e500_emul_tlbwe(struct kvm_vcpu *vcpu) | |||
396 | struct kvm_book3e_206_tlb_entry *gtlbe; | 396 | struct kvm_book3e_206_tlb_entry *gtlbe; |
397 | int tlbsel, esel; | 397 | int tlbsel, esel; |
398 | int recal = 0; | 398 | int recal = 0; |
399 | int idx; | ||
399 | 400 | ||
400 | tlbsel = get_tlb_tlbsel(vcpu); | 401 | tlbsel = get_tlb_tlbsel(vcpu); |
401 | esel = get_tlb_esel(vcpu, tlbsel); | 402 | esel = get_tlb_esel(vcpu, tlbsel); |
@@ -430,6 +431,8 @@ int kvmppc_e500_emul_tlbwe(struct kvm_vcpu *vcpu) | |||
430 | kvmppc_set_tlb1map_range(vcpu, gtlbe); | 431 | kvmppc_set_tlb1map_range(vcpu, gtlbe); |
431 | } | 432 | } |
432 | 433 | ||
434 | idx = srcu_read_lock(&vcpu->kvm->srcu); | ||
435 | |||
433 | /* Invalidate shadow mappings for the about-to-be-clobbered TLBE. */ | 436 | /* Invalidate shadow mappings for the about-to-be-clobbered TLBE. */ |
434 | if (tlbe_is_host_safe(vcpu, gtlbe)) { | 437 | if (tlbe_is_host_safe(vcpu, gtlbe)) { |
435 | u64 eaddr = get_tlb_eaddr(gtlbe); | 438 | u64 eaddr = get_tlb_eaddr(gtlbe); |
@@ -444,6 +447,8 @@ int kvmppc_e500_emul_tlbwe(struct kvm_vcpu *vcpu) | |||
444 | kvmppc_mmu_map(vcpu, eaddr, raddr, index_of(tlbsel, esel)); | 447 | kvmppc_mmu_map(vcpu, eaddr, raddr, index_of(tlbsel, esel)); |
445 | } | 448 | } |
446 | 449 | ||
450 | srcu_read_unlock(&vcpu->kvm->srcu, idx); | ||
451 | |||
447 | kvmppc_set_exit_type(vcpu, EMULATED_TLBWE_EXITS); | 452 | kvmppc_set_exit_type(vcpu, EMULATED_TLBWE_EXITS); |
448 | return EMULATE_DONE; | 453 | return EMULATE_DONE; |
449 | } | 454 | } |
diff --git a/arch/powerpc/kvm/e500mc.c b/arch/powerpc/kvm/e500mc.c index 753cc99eff2b..19c8379575f7 100644 --- a/arch/powerpc/kvm/e500mc.c +++ b/arch/powerpc/kvm/e500mc.c | |||
@@ -177,8 +177,6 @@ int kvmppc_core_check_processor_compat(void) | |||
177 | r = 0; | 177 | r = 0; |
178 | else if (strcmp(cur_cpu_spec->cpu_name, "e5500") == 0) | 178 | else if (strcmp(cur_cpu_spec->cpu_name, "e5500") == 0) |
179 | r = 0; | 179 | r = 0; |
180 | else if (strcmp(cur_cpu_spec->cpu_name, "e6500") == 0) | ||
181 | r = 0; | ||
182 | else | 180 | else |
183 | r = -ENOTSUPP; | 181 | r = -ENOTSUPP; |
184 | 182 | ||
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 845c867444e6..29c6482890c8 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c | |||
@@ -1758,7 +1758,7 @@ static void perf_event_interrupt(struct pt_regs *regs) | |||
1758 | } | 1758 | } |
1759 | } | 1759 | } |
1760 | } | 1760 | } |
1761 | if ((!found) && printk_ratelimit()) | 1761 | if (!found && !nmi && printk_ratelimit()) |
1762 | printk(KERN_WARNING "Can't find PMC that caused IRQ\n"); | 1762 | printk(KERN_WARNING "Can't find PMC that caused IRQ\n"); |
1763 | 1763 | ||
1764 | /* | 1764 | /* |
diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c index 19506f935737..b456b157d33d 100644 --- a/arch/powerpc/platforms/pseries/eeh_pseries.c +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c | |||
@@ -83,7 +83,11 @@ static int pseries_eeh_init(void) | |||
83 | ibm_configure_pe = rtas_token("ibm,configure-pe"); | 83 | ibm_configure_pe = rtas_token("ibm,configure-pe"); |
84 | ibm_configure_bridge = rtas_token("ibm,configure-bridge"); | 84 | ibm_configure_bridge = rtas_token("ibm,configure-bridge"); |
85 | 85 | ||
86 | /* necessary sanity check */ | 86 | /* |
87 | * Necessary sanity check. We needn't check "get-config-addr-info" | ||
88 | * and its variant since the old firmware probably support address | ||
89 | * of domain/bus/slot/function for EEH RTAS operations. | ||
90 | */ | ||
87 | if (ibm_set_eeh_option == RTAS_UNKNOWN_SERVICE) { | 91 | if (ibm_set_eeh_option == RTAS_UNKNOWN_SERVICE) { |
88 | pr_warning("%s: RTAS service <ibm,set-eeh-option> invalid\n", | 92 | pr_warning("%s: RTAS service <ibm,set-eeh-option> invalid\n", |
89 | __func__); | 93 | __func__); |
@@ -102,12 +106,6 @@ static int pseries_eeh_init(void) | |||
102 | pr_warning("%s: RTAS service <ibm,slot-error-detail> invalid\n", | 106 | pr_warning("%s: RTAS service <ibm,slot-error-detail> invalid\n", |
103 | __func__); | 107 | __func__); |
104 | return -EINVAL; | 108 | return -EINVAL; |
105 | } else if (ibm_get_config_addr_info2 == RTAS_UNKNOWN_SERVICE && | ||
106 | ibm_get_config_addr_info == RTAS_UNKNOWN_SERVICE) { | ||
107 | pr_warning("%s: RTAS service <ibm,get-config-addr-info2> and " | ||
108 | "<ibm,get-config-addr-info> invalid\n", | ||
109 | __func__); | ||
110 | return -EINVAL; | ||
111 | } else if (ibm_configure_pe == RTAS_UNKNOWN_SERVICE && | 109 | } else if (ibm_configure_pe == RTAS_UNKNOWN_SERVICE && |
112 | ibm_configure_bridge == RTAS_UNKNOWN_SERVICE) { | 110 | ibm_configure_bridge == RTAS_UNKNOWN_SERVICE) { |
113 | pr_warning("%s: RTAS service <ibm,configure-pe> and " | 111 | pr_warning("%s: RTAS service <ibm,configure-pe> and " |
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index ac01463038f1..e8b6e5b8932c 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h | |||
@@ -623,7 +623,7 @@ static inline pgste_t pgste_get_lock(pte_t *ptep) | |||
623 | " csg %0,%1,%2\n" | 623 | " csg %0,%1,%2\n" |
624 | " jl 0b\n" | 624 | " jl 0b\n" |
625 | : "=&d" (old), "=&d" (new), "=Q" (ptep[PTRS_PER_PTE]) | 625 | : "=&d" (old), "=&d" (new), "=Q" (ptep[PTRS_PER_PTE]) |
626 | : "Q" (ptep[PTRS_PER_PTE]) : "cc"); | 626 | : "Q" (ptep[PTRS_PER_PTE]) : "cc", "memory"); |
627 | #endif | 627 | #endif |
628 | return __pgste(new); | 628 | return __pgste(new); |
629 | } | 629 | } |
@@ -635,11 +635,19 @@ static inline void pgste_set_unlock(pte_t *ptep, pgste_t pgste) | |||
635 | " nihh %1,0xff7f\n" /* clear RCP_PCL_BIT */ | 635 | " nihh %1,0xff7f\n" /* clear RCP_PCL_BIT */ |
636 | " stg %1,%0\n" | 636 | " stg %1,%0\n" |
637 | : "=Q" (ptep[PTRS_PER_PTE]) | 637 | : "=Q" (ptep[PTRS_PER_PTE]) |
638 | : "d" (pgste_val(pgste)), "Q" (ptep[PTRS_PER_PTE]) : "cc"); | 638 | : "d" (pgste_val(pgste)), "Q" (ptep[PTRS_PER_PTE]) |
639 | : "cc", "memory"); | ||
639 | preempt_enable(); | 640 | preempt_enable(); |
640 | #endif | 641 | #endif |
641 | } | 642 | } |
642 | 643 | ||
644 | static inline void pgste_set(pte_t *ptep, pgste_t pgste) | ||
645 | { | ||
646 | #ifdef CONFIG_PGSTE | ||
647 | *(pgste_t *)(ptep + PTRS_PER_PTE) = pgste; | ||
648 | #endif | ||
649 | } | ||
650 | |||
643 | static inline pgste_t pgste_update_all(pte_t *ptep, pgste_t pgste) | 651 | static inline pgste_t pgste_update_all(pte_t *ptep, pgste_t pgste) |
644 | { | 652 | { |
645 | #ifdef CONFIG_PGSTE | 653 | #ifdef CONFIG_PGSTE |
@@ -704,17 +712,19 @@ static inline void pgste_set_key(pte_t *ptep, pgste_t pgste, pte_t entry) | |||
704 | { | 712 | { |
705 | #ifdef CONFIG_PGSTE | 713 | #ifdef CONFIG_PGSTE |
706 | unsigned long address; | 714 | unsigned long address; |
707 | unsigned long okey, nkey; | 715 | unsigned long nkey; |
708 | 716 | ||
709 | if (pte_val(entry) & _PAGE_INVALID) | 717 | if (pte_val(entry) & _PAGE_INVALID) |
710 | return; | 718 | return; |
719 | VM_BUG_ON(!(pte_val(*ptep) & _PAGE_INVALID)); | ||
711 | address = pte_val(entry) & PAGE_MASK; | 720 | address = pte_val(entry) & PAGE_MASK; |
712 | okey = nkey = page_get_storage_key(address); | 721 | /* |
713 | nkey &= ~(_PAGE_ACC_BITS | _PAGE_FP_BIT); | 722 | * Set page access key and fetch protection bit from pgste. |
714 | /* Set page access key and fetch protection bit from pgste */ | 723 | * The guest C/R information is still in the PGSTE, set real |
715 | nkey |= (pgste_val(pgste) & (RCP_ACC_BITS | RCP_FP_BIT)) >> 56; | 724 | * key C/R to 0. |
716 | if (okey != nkey) | 725 | */ |
717 | page_set_storage_key(address, nkey, 0); | 726 | nkey = (pgste_val(pgste) & (RCP_ACC_BITS | RCP_FP_BIT)) >> 56; |
727 | page_set_storage_key(address, nkey, 0); | ||
718 | #endif | 728 | #endif |
719 | } | 729 | } |
720 | 730 | ||
@@ -1099,8 +1109,10 @@ static inline pte_t ptep_modify_prot_start(struct mm_struct *mm, | |||
1099 | if (!mm_exclusive(mm)) | 1109 | if (!mm_exclusive(mm)) |
1100 | __ptep_ipte(address, ptep); | 1110 | __ptep_ipte(address, ptep); |
1101 | 1111 | ||
1102 | if (mm_has_pgste(mm)) | 1112 | if (mm_has_pgste(mm)) { |
1103 | pgste = pgste_update_all(&pte, pgste); | 1113 | pgste = pgste_update_all(&pte, pgste); |
1114 | pgste_set(ptep, pgste); | ||
1115 | } | ||
1104 | return pte; | 1116 | return pte; |
1105 | } | 1117 | } |
1106 | 1118 | ||
diff --git a/arch/s390/kernel/dumpstack.c b/arch/s390/kernel/dumpstack.c index 298297477257..87acc38f73c6 100644 --- a/arch/s390/kernel/dumpstack.c +++ b/arch/s390/kernel/dumpstack.c | |||
@@ -74,6 +74,8 @@ __show_trace(unsigned long sp, unsigned long low, unsigned long high) | |||
74 | 74 | ||
75 | static void show_trace(struct task_struct *task, unsigned long *stack) | 75 | static void show_trace(struct task_struct *task, unsigned long *stack) |
76 | { | 76 | { |
77 | const unsigned long frame_size = | ||
78 | STACK_FRAME_OVERHEAD + sizeof(struct pt_regs); | ||
77 | register unsigned long __r15 asm ("15"); | 79 | register unsigned long __r15 asm ("15"); |
78 | unsigned long sp; | 80 | unsigned long sp; |
79 | 81 | ||
@@ -82,11 +84,13 @@ static void show_trace(struct task_struct *task, unsigned long *stack) | |||
82 | sp = task ? task->thread.ksp : __r15; | 84 | sp = task ? task->thread.ksp : __r15; |
83 | printk("Call Trace:\n"); | 85 | printk("Call Trace:\n"); |
84 | #ifdef CONFIG_CHECK_STACK | 86 | #ifdef CONFIG_CHECK_STACK |
85 | sp = __show_trace(sp, S390_lowcore.panic_stack - 4096, | 87 | sp = __show_trace(sp, |
86 | S390_lowcore.panic_stack); | 88 | S390_lowcore.panic_stack + frame_size - 4096, |
89 | S390_lowcore.panic_stack + frame_size); | ||
87 | #endif | 90 | #endif |
88 | sp = __show_trace(sp, S390_lowcore.async_stack - ASYNC_SIZE, | 91 | sp = __show_trace(sp, |
89 | S390_lowcore.async_stack); | 92 | S390_lowcore.async_stack + frame_size - ASYNC_SIZE, |
93 | S390_lowcore.async_stack + frame_size); | ||
90 | if (task) | 94 | if (task) |
91 | __show_trace(sp, (unsigned long) task_stack_page(task), | 95 | __show_trace(sp, (unsigned long) task_stack_page(task), |
92 | (unsigned long) task_stack_page(task) + THREAD_SIZE); | 96 | (unsigned long) task_stack_page(task) + THREAD_SIZE); |
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c index f7fb58903f6a..408e866ae548 100644 --- a/arch/s390/kernel/irq.c +++ b/arch/s390/kernel/irq.c | |||
@@ -311,3 +311,67 @@ void measurement_alert_subclass_unregister(void) | |||
311 | spin_unlock(&ma_subclass_lock); | 311 | spin_unlock(&ma_subclass_lock); |
312 | } | 312 | } |
313 | EXPORT_SYMBOL(measurement_alert_subclass_unregister); | 313 | EXPORT_SYMBOL(measurement_alert_subclass_unregister); |
314 | |||
315 | void synchronize_irq(unsigned int irq) | ||
316 | { | ||
317 | /* | ||
318 | * Not needed, the handler is protected by a lock and IRQs that occur | ||
319 | * after the handler is deleted are just NOPs. | ||
320 | */ | ||
321 | } | ||
322 | EXPORT_SYMBOL_GPL(synchronize_irq); | ||
323 | |||
324 | #ifndef CONFIG_PCI | ||
325 | |||
326 | /* Only PCI devices have dynamically-defined IRQ handlers */ | ||
327 | |||
328 | int request_irq(unsigned int irq, irq_handler_t handler, | ||
329 | unsigned long irqflags, const char *devname, void *dev_id) | ||
330 | { | ||
331 | return -EINVAL; | ||
332 | } | ||
333 | EXPORT_SYMBOL_GPL(request_irq); | ||
334 | |||
335 | void free_irq(unsigned int irq, void *dev_id) | ||
336 | { | ||
337 | WARN_ON(1); | ||
338 | } | ||
339 | EXPORT_SYMBOL_GPL(free_irq); | ||
340 | |||
341 | void enable_irq(unsigned int irq) | ||
342 | { | ||
343 | WARN_ON(1); | ||
344 | } | ||
345 | EXPORT_SYMBOL_GPL(enable_irq); | ||
346 | |||
347 | void disable_irq(unsigned int irq) | ||
348 | { | ||
349 | WARN_ON(1); | ||
350 | } | ||
351 | EXPORT_SYMBOL_GPL(disable_irq); | ||
352 | |||
353 | #endif /* !CONFIG_PCI */ | ||
354 | |||
355 | void disable_irq_nosync(unsigned int irq) | ||
356 | { | ||
357 | disable_irq(irq); | ||
358 | } | ||
359 | EXPORT_SYMBOL_GPL(disable_irq_nosync); | ||
360 | |||
361 | unsigned long probe_irq_on(void) | ||
362 | { | ||
363 | return 0; | ||
364 | } | ||
365 | EXPORT_SYMBOL_GPL(probe_irq_on); | ||
366 | |||
367 | int probe_irq_off(unsigned long val) | ||
368 | { | ||
369 | return 0; | ||
370 | } | ||
371 | EXPORT_SYMBOL_GPL(probe_irq_off); | ||
372 | |||
373 | unsigned int probe_irq_mask(unsigned long val) | ||
374 | { | ||
375 | return val; | ||
376 | } | ||
377 | EXPORT_SYMBOL_GPL(probe_irq_mask); | ||
diff --git a/arch/s390/kernel/sclp.S b/arch/s390/kernel/sclp.S index b6506ee32a36..29bd7bec4176 100644 --- a/arch/s390/kernel/sclp.S +++ b/arch/s390/kernel/sclp.S | |||
@@ -225,7 +225,7 @@ _sclp_print: | |||
225 | ahi %r2,1 | 225 | ahi %r2,1 |
226 | ltr %r0,%r0 # end of string? | 226 | ltr %r0,%r0 # end of string? |
227 | jz .LfinalizemtoS4 | 227 | jz .LfinalizemtoS4 |
228 | chi %r0,0x15 # end of line (NL)? | 228 | chi %r0,0x0a # end of line (NL)? |
229 | jz .LfinalizemtoS4 | 229 | jz .LfinalizemtoS4 |
230 | stc %r0,0(%r6,%r7) # copy to mto | 230 | stc %r0,0(%r6,%r7) # copy to mto |
231 | la %r11,0(%r6,%r7) | 231 | la %r11,0(%r6,%r7) |
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c index e6f15b5d8b7d..f1e5be85d592 100644 --- a/arch/s390/pci/pci.c +++ b/arch/s390/pci/pci.c | |||
@@ -302,15 +302,6 @@ static int zpci_cfg_store(struct zpci_dev *zdev, int offset, u32 val, u8 len) | |||
302 | return rc; | 302 | return rc; |
303 | } | 303 | } |
304 | 304 | ||
305 | void synchronize_irq(unsigned int irq) | ||
306 | { | ||
307 | /* | ||
308 | * Not needed, the handler is protected by a lock and IRQs that occur | ||
309 | * after the handler is deleted are just NOPs. | ||
310 | */ | ||
311 | } | ||
312 | EXPORT_SYMBOL_GPL(synchronize_irq); | ||
313 | |||
314 | void enable_irq(unsigned int irq) | 305 | void enable_irq(unsigned int irq) |
315 | { | 306 | { |
316 | struct msi_desc *msi = irq_get_msi_desc(irq); | 307 | struct msi_desc *msi = irq_get_msi_desc(irq); |
@@ -327,30 +318,6 @@ void disable_irq(unsigned int irq) | |||
327 | } | 318 | } |
328 | EXPORT_SYMBOL_GPL(disable_irq); | 319 | EXPORT_SYMBOL_GPL(disable_irq); |
329 | 320 | ||
330 | void disable_irq_nosync(unsigned int irq) | ||
331 | { | ||
332 | disable_irq(irq); | ||
333 | } | ||
334 | EXPORT_SYMBOL_GPL(disable_irq_nosync); | ||
335 | |||
336 | unsigned long probe_irq_on(void) | ||
337 | { | ||
338 | return 0; | ||
339 | } | ||
340 | EXPORT_SYMBOL_GPL(probe_irq_on); | ||
341 | |||
342 | int probe_irq_off(unsigned long val) | ||
343 | { | ||
344 | return 0; | ||
345 | } | ||
346 | EXPORT_SYMBOL_GPL(probe_irq_off); | ||
347 | |||
348 | unsigned int probe_irq_mask(unsigned long val) | ||
349 | { | ||
350 | return val; | ||
351 | } | ||
352 | EXPORT_SYMBOL_GPL(probe_irq_mask); | ||
353 | |||
354 | void pcibios_fixup_bus(struct pci_bus *bus) | 321 | void pcibios_fixup_bus(struct pci_bus *bus) |
355 | { | 322 | { |
356 | } | 323 | } |
diff --git a/arch/sparc/kernel/prom_common.c b/arch/sparc/kernel/prom_common.c index 9f20566b0773..79cc0d1a477d 100644 --- a/arch/sparc/kernel/prom_common.c +++ b/arch/sparc/kernel/prom_common.c | |||
@@ -54,6 +54,7 @@ EXPORT_SYMBOL(of_set_property_mutex); | |||
54 | int of_set_property(struct device_node *dp, const char *name, void *val, int len) | 54 | int of_set_property(struct device_node *dp, const char *name, void *val, int len) |
55 | { | 55 | { |
56 | struct property **prevp; | 56 | struct property **prevp; |
57 | unsigned long flags; | ||
57 | void *new_val; | 58 | void *new_val; |
58 | int err; | 59 | int err; |
59 | 60 | ||
@@ -64,7 +65,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len | |||
64 | err = -ENODEV; | 65 | err = -ENODEV; |
65 | 66 | ||
66 | mutex_lock(&of_set_property_mutex); | 67 | mutex_lock(&of_set_property_mutex); |
67 | raw_spin_lock(&devtree_lock); | 68 | raw_spin_lock_irqsave(&devtree_lock, flags); |
68 | prevp = &dp->properties; | 69 | prevp = &dp->properties; |
69 | while (*prevp) { | 70 | while (*prevp) { |
70 | struct property *prop = *prevp; | 71 | struct property *prop = *prevp; |
@@ -91,7 +92,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len | |||
91 | } | 92 | } |
92 | prevp = &(*prevp)->next; | 93 | prevp = &(*prevp)->next; |
93 | } | 94 | } |
94 | raw_spin_unlock(&devtree_lock); | 95 | raw_spin_unlock_irqrestore(&devtree_lock, flags); |
95 | mutex_unlock(&of_set_property_mutex); | 96 | mutex_unlock(&of_set_property_mutex); |
96 | 97 | ||
97 | /* XXX Upate procfs if necessary... */ | 98 | /* XXX Upate procfs if necessary... */ |
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c index 35ee62fccf98..c205035a6b96 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c | |||
@@ -251,51 +251,6 @@ static void find_bits(unsigned long mask, u8 *pos, u8 *size) | |||
251 | *size = len; | 251 | *size = len; |
252 | } | 252 | } |
253 | 253 | ||
254 | static efi_status_t setup_efi_vars(struct boot_params *params) | ||
255 | { | ||
256 | struct setup_data *data; | ||
257 | struct efi_var_bootdata *efidata; | ||
258 | u64 store_size, remaining_size, var_size; | ||
259 | efi_status_t status; | ||
260 | |||
261 | if (sys_table->runtime->hdr.revision < EFI_2_00_SYSTEM_TABLE_REVISION) | ||
262 | return EFI_UNSUPPORTED; | ||
263 | |||
264 | data = (struct setup_data *)(unsigned long)params->hdr.setup_data; | ||
265 | |||
266 | while (data && data->next) | ||
267 | data = (struct setup_data *)(unsigned long)data->next; | ||
268 | |||
269 | status = efi_call_phys4((void *)sys_table->runtime->query_variable_info, | ||
270 | EFI_VARIABLE_NON_VOLATILE | | ||
271 | EFI_VARIABLE_BOOTSERVICE_ACCESS | | ||
272 | EFI_VARIABLE_RUNTIME_ACCESS, &store_size, | ||
273 | &remaining_size, &var_size); | ||
274 | |||
275 | if (status != EFI_SUCCESS) | ||
276 | return status; | ||
277 | |||
278 | status = efi_call_phys3(sys_table->boottime->allocate_pool, | ||
279 | EFI_LOADER_DATA, sizeof(*efidata), &efidata); | ||
280 | |||
281 | if (status != EFI_SUCCESS) | ||
282 | return status; | ||
283 | |||
284 | efidata->data.type = SETUP_EFI_VARS; | ||
285 | efidata->data.len = sizeof(struct efi_var_bootdata) - | ||
286 | sizeof(struct setup_data); | ||
287 | efidata->data.next = 0; | ||
288 | efidata->store_size = store_size; | ||
289 | efidata->remaining_size = remaining_size; | ||
290 | efidata->max_var_size = var_size; | ||
291 | |||
292 | if (data) | ||
293 | data->next = (unsigned long)efidata; | ||
294 | else | ||
295 | params->hdr.setup_data = (unsigned long)efidata; | ||
296 | |||
297 | } | ||
298 | |||
299 | static efi_status_t setup_efi_pci(struct boot_params *params) | 254 | static efi_status_t setup_efi_pci(struct boot_params *params) |
300 | { | 255 | { |
301 | efi_pci_io_protocol *pci; | 256 | efi_pci_io_protocol *pci; |
@@ -1202,8 +1157,6 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table, | |||
1202 | 1157 | ||
1203 | setup_graphics(boot_params); | 1158 | setup_graphics(boot_params); |
1204 | 1159 | ||
1205 | setup_efi_vars(boot_params); | ||
1206 | |||
1207 | setup_efi_pci(boot_params); | 1160 | setup_efi_pci(boot_params); |
1208 | 1161 | ||
1209 | status = efi_call_phys3(sys_table->boottime->allocate_pool, | 1162 | status = efi_call_phys3(sys_table->boottime->allocate_pool, |
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h index 2fb5d5884e23..60c89f30c727 100644 --- a/arch/x86/include/asm/efi.h +++ b/arch/x86/include/asm/efi.h | |||
@@ -102,13 +102,6 @@ extern void efi_call_phys_epilog(void); | |||
102 | extern void efi_unmap_memmap(void); | 102 | extern void efi_unmap_memmap(void); |
103 | extern void efi_memory_uc(u64 addr, unsigned long size); | 103 | extern void efi_memory_uc(u64 addr, unsigned long size); |
104 | 104 | ||
105 | struct efi_var_bootdata { | ||
106 | struct setup_data data; | ||
107 | u64 store_size; | ||
108 | u64 remaining_size; | ||
109 | u64 max_var_size; | ||
110 | }; | ||
111 | |||
112 | #ifdef CONFIG_EFI | 105 | #ifdef CONFIG_EFI |
113 | 106 | ||
114 | static inline bool efi_is_native(void) | 107 | static inline bool efi_is_native(void) |
diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h index 08744242b8d2..c15ddaf90710 100644 --- a/arch/x86/include/uapi/asm/bootparam.h +++ b/arch/x86/include/uapi/asm/bootparam.h | |||
@@ -6,7 +6,6 @@ | |||
6 | #define SETUP_E820_EXT 1 | 6 | #define SETUP_E820_EXT 1 |
7 | #define SETUP_DTB 2 | 7 | #define SETUP_DTB 2 |
8 | #define SETUP_PCI 3 | 8 | #define SETUP_PCI 3 |
9 | #define SETUP_EFI_VARS 4 | ||
10 | 9 | ||
11 | /* ram_size flags */ | 10 | /* ram_size flags */ |
12 | #define RAMDISK_IMAGE_START_MASK 0x07FF | 11 | #define RAMDISK_IMAGE_START_MASK 0x07FF |
diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_kernel_64.S index 7a6f3b3be3cf..f2bb9c96720a 100644 --- a/arch/x86/kernel/relocate_kernel_64.S +++ b/arch/x86/kernel/relocate_kernel_64.S | |||
@@ -160,7 +160,7 @@ identity_mapped: | |||
160 | xorq %rbp, %rbp | 160 | xorq %rbp, %rbp |
161 | xorq %r8, %r8 | 161 | xorq %r8, %r8 |
162 | xorq %r9, %r9 | 162 | xorq %r9, %r9 |
163 | xorq %r10, %r9 | 163 | xorq %r10, %r10 |
164 | xorq %r11, %r11 | 164 | xorq %r11, %r11 |
165 | xorq %r12, %r12 | 165 | xorq %r12, %r12 |
166 | xorq %r13, %r13 | 166 | xorq %r13, %r13 |
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index eaac1743def7..1f34e9219775 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c | |||
@@ -277,6 +277,9 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range, | |||
277 | end_pfn = limit_pfn; | 277 | end_pfn = limit_pfn; |
278 | nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0); | 278 | nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0); |
279 | 279 | ||
280 | if (!after_bootmem) | ||
281 | adjust_range_page_size_mask(mr, nr_range); | ||
282 | |||
280 | /* try to merge same page size and continuous */ | 283 | /* try to merge same page size and continuous */ |
281 | for (i = 0; nr_range > 1 && i < nr_range - 1; i++) { | 284 | for (i = 0; nr_range > 1 && i < nr_range - 1; i++) { |
282 | unsigned long old_start; | 285 | unsigned long old_start; |
@@ -291,9 +294,6 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range, | |||
291 | nr_range--; | 294 | nr_range--; |
292 | } | 295 | } |
293 | 296 | ||
294 | if (!after_bootmem) | ||
295 | adjust_range_page_size_mask(mr, nr_range); | ||
296 | |||
297 | for (i = 0; i < nr_range; i++) | 297 | for (i = 0; i < nr_range; i++) |
298 | printk(KERN_DEBUG " [mem %#010lx-%#010lx] page %s\n", | 298 | printk(KERN_DEBUG " [mem %#010lx-%#010lx] page %s\n", |
299 | mr[i].start, mr[i].end - 1, | 299 | mr[i].start, mr[i].end - 1, |
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 82089d8b1954..5ae2eb09419e 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c | |||
@@ -42,7 +42,6 @@ | |||
42 | #include <linux/io.h> | 42 | #include <linux/io.h> |
43 | #include <linux/reboot.h> | 43 | #include <linux/reboot.h> |
44 | #include <linux/bcd.h> | 44 | #include <linux/bcd.h> |
45 | #include <linux/ucs2_string.h> | ||
46 | 45 | ||
47 | #include <asm/setup.h> | 46 | #include <asm/setup.h> |
48 | #include <asm/efi.h> | 47 | #include <asm/efi.h> |
@@ -54,12 +53,12 @@ | |||
54 | 53 | ||
55 | #define EFI_DEBUG 1 | 54 | #define EFI_DEBUG 1 |
56 | 55 | ||
57 | /* | 56 | #define EFI_MIN_RESERVE 5120 |
58 | * There's some additional metadata associated with each | 57 | |
59 | * variable. Intel's reference implementation is 60 bytes - bump that | 58 | #define EFI_DUMMY_GUID \ |
60 | * to account for potential alignment constraints | 59 | EFI_GUID(0x4424ac57, 0xbe4b, 0x47dd, 0x9e, 0x97, 0xed, 0x50, 0xf0, 0x9f, 0x92, 0xa9) |
61 | */ | 60 | |
62 | #define VAR_METADATA_SIZE 64 | 61 | static efi_char16_t efi_dummy_name[6] = { 'D', 'U', 'M', 'M', 'Y', 0 }; |
63 | 62 | ||
64 | struct efi __read_mostly efi = { | 63 | struct efi __read_mostly efi = { |
65 | .mps = EFI_INVALID_TABLE_ADDR, | 64 | .mps = EFI_INVALID_TABLE_ADDR, |
@@ -79,13 +78,6 @@ struct efi_memory_map memmap; | |||
79 | static struct efi efi_phys __initdata; | 78 | static struct efi efi_phys __initdata; |
80 | static efi_system_table_t efi_systab __initdata; | 79 | static efi_system_table_t efi_systab __initdata; |
81 | 80 | ||
82 | static u64 efi_var_store_size; | ||
83 | static u64 efi_var_remaining_size; | ||
84 | static u64 efi_var_max_var_size; | ||
85 | static u64 boot_used_size; | ||
86 | static u64 boot_var_size; | ||
87 | static u64 active_size; | ||
88 | |||
89 | unsigned long x86_efi_facility; | 81 | unsigned long x86_efi_facility; |
90 | 82 | ||
91 | /* | 83 | /* |
@@ -188,53 +180,8 @@ static efi_status_t virt_efi_get_next_variable(unsigned long *name_size, | |||
188 | efi_char16_t *name, | 180 | efi_char16_t *name, |
189 | efi_guid_t *vendor) | 181 | efi_guid_t *vendor) |
190 | { | 182 | { |
191 | efi_status_t status; | 183 | return efi_call_virt3(get_next_variable, |
192 | static bool finished = false; | 184 | name_size, name, vendor); |
193 | static u64 var_size; | ||
194 | |||
195 | status = efi_call_virt3(get_next_variable, | ||
196 | name_size, name, vendor); | ||
197 | |||
198 | if (status == EFI_NOT_FOUND) { | ||
199 | finished = true; | ||
200 | if (var_size < boot_used_size) { | ||
201 | boot_var_size = boot_used_size - var_size; | ||
202 | active_size += boot_var_size; | ||
203 | } else { | ||
204 | printk(KERN_WARNING FW_BUG "efi: Inconsistent initial sizes\n"); | ||
205 | } | ||
206 | } | ||
207 | |||
208 | if (boot_used_size && !finished) { | ||
209 | unsigned long size = 0; | ||
210 | u32 attr; | ||
211 | efi_status_t s; | ||
212 | void *tmp; | ||
213 | |||
214 | s = virt_efi_get_variable(name, vendor, &attr, &size, NULL); | ||
215 | |||
216 | if (s != EFI_BUFFER_TOO_SMALL || !size) | ||
217 | return status; | ||
218 | |||
219 | tmp = kmalloc(size, GFP_ATOMIC); | ||
220 | |||
221 | if (!tmp) | ||
222 | return status; | ||
223 | |||
224 | s = virt_efi_get_variable(name, vendor, &attr, &size, tmp); | ||
225 | |||
226 | if (s == EFI_SUCCESS && (attr & EFI_VARIABLE_NON_VOLATILE)) { | ||
227 | var_size += size; | ||
228 | var_size += ucs2_strsize(name, 1024); | ||
229 | active_size += size; | ||
230 | active_size += VAR_METADATA_SIZE; | ||
231 | active_size += ucs2_strsize(name, 1024); | ||
232 | } | ||
233 | |||
234 | kfree(tmp); | ||
235 | } | ||
236 | |||
237 | return status; | ||
238 | } | 185 | } |
239 | 186 | ||
240 | static efi_status_t virt_efi_set_variable(efi_char16_t *name, | 187 | static efi_status_t virt_efi_set_variable(efi_char16_t *name, |
@@ -243,34 +190,9 @@ static efi_status_t virt_efi_set_variable(efi_char16_t *name, | |||
243 | unsigned long data_size, | 190 | unsigned long data_size, |
244 | void *data) | 191 | void *data) |
245 | { | 192 | { |
246 | efi_status_t status; | 193 | return efi_call_virt5(set_variable, |
247 | u32 orig_attr = 0; | 194 | name, vendor, attr, |
248 | unsigned long orig_size = 0; | 195 | data_size, data); |
249 | |||
250 | status = virt_efi_get_variable(name, vendor, &orig_attr, &orig_size, | ||
251 | NULL); | ||
252 | |||
253 | if (status != EFI_BUFFER_TOO_SMALL) | ||
254 | orig_size = 0; | ||
255 | |||
256 | status = efi_call_virt5(set_variable, | ||
257 | name, vendor, attr, | ||
258 | data_size, data); | ||
259 | |||
260 | if (status == EFI_SUCCESS) { | ||
261 | if (orig_size) { | ||
262 | active_size -= orig_size; | ||
263 | active_size -= ucs2_strsize(name, 1024); | ||
264 | active_size -= VAR_METADATA_SIZE; | ||
265 | } | ||
266 | if (data_size) { | ||
267 | active_size += data_size; | ||
268 | active_size += ucs2_strsize(name, 1024); | ||
269 | active_size += VAR_METADATA_SIZE; | ||
270 | } | ||
271 | } | ||
272 | |||
273 | return status; | ||
274 | } | 196 | } |
275 | 197 | ||
276 | static efi_status_t virt_efi_query_variable_info(u32 attr, | 198 | static efi_status_t virt_efi_query_variable_info(u32 attr, |
@@ -786,9 +708,6 @@ void __init efi_init(void) | |||
786 | char vendor[100] = "unknown"; | 708 | char vendor[100] = "unknown"; |
787 | int i = 0; | 709 | int i = 0; |
788 | void *tmp; | 710 | void *tmp; |
789 | struct setup_data *data; | ||
790 | struct efi_var_bootdata *efi_var_data; | ||
791 | u64 pa_data; | ||
792 | 711 | ||
793 | #ifdef CONFIG_X86_32 | 712 | #ifdef CONFIG_X86_32 |
794 | if (boot_params.efi_info.efi_systab_hi || | 713 | if (boot_params.efi_info.efi_systab_hi || |
@@ -806,22 +725,6 @@ void __init efi_init(void) | |||
806 | if (efi_systab_init(efi_phys.systab)) | 725 | if (efi_systab_init(efi_phys.systab)) |
807 | return; | 726 | return; |
808 | 727 | ||
809 | pa_data = boot_params.hdr.setup_data; | ||
810 | while (pa_data) { | ||
811 | data = early_ioremap(pa_data, sizeof(*efi_var_data)); | ||
812 | if (data->type == SETUP_EFI_VARS) { | ||
813 | efi_var_data = (struct efi_var_bootdata *)data; | ||
814 | |||
815 | efi_var_store_size = efi_var_data->store_size; | ||
816 | efi_var_remaining_size = efi_var_data->remaining_size; | ||
817 | efi_var_max_var_size = efi_var_data->max_var_size; | ||
818 | } | ||
819 | pa_data = data->next; | ||
820 | early_iounmap(data, sizeof(*efi_var_data)); | ||
821 | } | ||
822 | |||
823 | boot_used_size = efi_var_store_size - efi_var_remaining_size; | ||
824 | |||
825 | set_bit(EFI_SYSTEM_TABLES, &x86_efi_facility); | 728 | set_bit(EFI_SYSTEM_TABLES, &x86_efi_facility); |
826 | 729 | ||
827 | /* | 730 | /* |
@@ -1085,6 +988,13 @@ void __init efi_enter_virtual_mode(void) | |||
1085 | runtime_code_page_mkexec(); | 988 | runtime_code_page_mkexec(); |
1086 | 989 | ||
1087 | kfree(new_memmap); | 990 | kfree(new_memmap); |
991 | |||
992 | /* clean DUMMY object */ | ||
993 | efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, | ||
994 | EFI_VARIABLE_NON_VOLATILE | | ||
995 | EFI_VARIABLE_BOOTSERVICE_ACCESS | | ||
996 | EFI_VARIABLE_RUNTIME_ACCESS, | ||
997 | 0, NULL); | ||
1088 | } | 998 | } |
1089 | 999 | ||
1090 | /* | 1000 | /* |
@@ -1136,33 +1046,65 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size) | |||
1136 | efi_status_t status; | 1046 | efi_status_t status; |
1137 | u64 storage_size, remaining_size, max_size; | 1047 | u64 storage_size, remaining_size, max_size; |
1138 | 1048 | ||
1049 | if (!(attributes & EFI_VARIABLE_NON_VOLATILE)) | ||
1050 | return 0; | ||
1051 | |||
1139 | status = efi.query_variable_info(attributes, &storage_size, | 1052 | status = efi.query_variable_info(attributes, &storage_size, |
1140 | &remaining_size, &max_size); | 1053 | &remaining_size, &max_size); |
1141 | if (status != EFI_SUCCESS) | 1054 | if (status != EFI_SUCCESS) |
1142 | return status; | 1055 | return status; |
1143 | 1056 | ||
1144 | if (!max_size && remaining_size > size) | ||
1145 | printk_once(KERN_ERR FW_BUG "Broken EFI implementation" | ||
1146 | " is returning MaxVariableSize=0\n"); | ||
1147 | /* | 1057 | /* |
1148 | * Some firmware implementations refuse to boot if there's insufficient | 1058 | * Some firmware implementations refuse to boot if there's insufficient |
1149 | * space in the variable store. We account for that by refusing the | 1059 | * space in the variable store. We account for that by refusing the |
1150 | * write if permitting it would reduce the available space to under | 1060 | * write if permitting it would reduce the available space to under |
1151 | * 50%. However, some firmware won't reclaim variable space until | 1061 | * 5KB. This figure was provided by Samsung, so should be safe. |
1152 | * after the used (not merely the actively used) space drops below | ||
1153 | * a threshold. We can approximate that case with the value calculated | ||
1154 | * above. If both the firmware and our calculations indicate that the | ||
1155 | * available space would drop below 50%, refuse the write. | ||
1156 | */ | 1062 | */ |
1063 | if ((remaining_size - size < EFI_MIN_RESERVE) && | ||
1064 | !efi_no_storage_paranoia) { | ||
1065 | |||
1066 | /* | ||
1067 | * Triggering garbage collection may require that the firmware | ||
1068 | * generate a real EFI_OUT_OF_RESOURCES error. We can force | ||
1069 | * that by attempting to use more space than is available. | ||
1070 | */ | ||
1071 | unsigned long dummy_size = remaining_size + 1024; | ||
1072 | void *dummy = kmalloc(dummy_size, GFP_ATOMIC); | ||
1073 | |||
1074 | status = efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, | ||
1075 | EFI_VARIABLE_NON_VOLATILE | | ||
1076 | EFI_VARIABLE_BOOTSERVICE_ACCESS | | ||
1077 | EFI_VARIABLE_RUNTIME_ACCESS, | ||
1078 | dummy_size, dummy); | ||
1079 | |||
1080 | if (status == EFI_SUCCESS) { | ||
1081 | /* | ||
1082 | * This should have failed, so if it didn't make sure | ||
1083 | * that we delete it... | ||
1084 | */ | ||
1085 | efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, | ||
1086 | EFI_VARIABLE_NON_VOLATILE | | ||
1087 | EFI_VARIABLE_BOOTSERVICE_ACCESS | | ||
1088 | EFI_VARIABLE_RUNTIME_ACCESS, | ||
1089 | 0, dummy); | ||
1090 | } | ||
1157 | 1091 | ||
1158 | if (!storage_size || size > remaining_size || | 1092 | /* |
1159 | (max_size && size > max_size)) | 1093 | * The runtime code may now have triggered a garbage collection |
1160 | return EFI_OUT_OF_RESOURCES; | 1094 | * run, so check the variable info again |
1095 | */ | ||
1096 | status = efi.query_variable_info(attributes, &storage_size, | ||
1097 | &remaining_size, &max_size); | ||
1161 | 1098 | ||
1162 | if (!efi_no_storage_paranoia && | 1099 | if (status != EFI_SUCCESS) |
1163 | ((active_size + size + VAR_METADATA_SIZE > storage_size / 2) && | 1100 | return status; |
1164 | (remaining_size - size < storage_size / 2))) | 1101 | |
1165 | return EFI_OUT_OF_RESOURCES; | 1102 | /* |
1103 | * There still isn't enough room, so return an error | ||
1104 | */ | ||
1105 | if (remaining_size - size < EFI_MIN_RESERVE) | ||
1106 | return EFI_OUT_OF_RESOURCES; | ||
1107 | } | ||
1166 | 1108 | ||
1167 | return EFI_SUCCESS; | 1109 | return EFI_SUCCESS; |
1168 | } | 1110 | } |
diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index 590be1090892..f7bab68a4b83 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c | |||
@@ -42,9 +42,6 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = { | |||
42 | "^(xen_irq_disable_direct_reloc$|" | 42 | "^(xen_irq_disable_direct_reloc$|" |
43 | "xen_save_fl_direct_reloc$|" | 43 | "xen_save_fl_direct_reloc$|" |
44 | "VDSO|" | 44 | "VDSO|" |
45 | #if ELF_BITS == 64 | ||
46 | "__vvar_page|" | ||
47 | #endif | ||
48 | "__crc_)", | 45 | "__crc_)", |
49 | 46 | ||
50 | /* | 47 | /* |
@@ -72,6 +69,7 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = { | |||
72 | "__per_cpu_load|" | 69 | "__per_cpu_load|" |
73 | "init_per_cpu__.*|" | 70 | "init_per_cpu__.*|" |
74 | "__end_rodata_hpage_align|" | 71 | "__end_rodata_hpage_align|" |
72 | "__vvar_page|" | ||
75 | #endif | 73 | #endif |
76 | "_end)$" | 74 | "_end)$" |
77 | }; | 75 | }; |
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index fb44426fe931..d99cae8147d1 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
18 | #include <linux/smp.h> | 18 | #include <linux/smp.h> |
19 | #include <linux/irq_work.h> | 19 | #include <linux/irq_work.h> |
20 | #include <linux/tick.h> | ||
20 | 21 | ||
21 | #include <asm/paravirt.h> | 22 | #include <asm/paravirt.h> |
22 | #include <asm/desc.h> | 23 | #include <asm/desc.h> |
@@ -447,6 +448,13 @@ static void __cpuinit xen_play_dead(void) /* used only with HOTPLUG_CPU */ | |||
447 | play_dead_common(); | 448 | play_dead_common(); |
448 | HYPERVISOR_vcpu_op(VCPUOP_down, smp_processor_id(), NULL); | 449 | HYPERVISOR_vcpu_op(VCPUOP_down, smp_processor_id(), NULL); |
449 | cpu_bringup(); | 450 | cpu_bringup(); |
451 | /* | ||
452 | * commit 4b0c0f294 (tick: Cleanup NOHZ per cpu data on cpu down) | ||
453 | * clears certain data that the cpu_idle loop (which called us | ||
454 | * and that we return from) expects. The only way to get that | ||
455 | * data back is to call: | ||
456 | */ | ||
457 | tick_nohz_idle_enter(); | ||
450 | } | 458 | } |
451 | 459 | ||
452 | #else /* !CONFIG_HOTPLUG_CPU */ | 460 | #else /* !CONFIG_HOTPLUG_CPU */ |
diff --git a/block/blk-core.c b/block/blk-core.c index 33c33bc99ddd..d5745b5833c9 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
@@ -3164,7 +3164,7 @@ void blk_post_runtime_resume(struct request_queue *q, int err) | |||
3164 | q->rpm_status = RPM_ACTIVE; | 3164 | q->rpm_status = RPM_ACTIVE; |
3165 | __blk_run_queue(q); | 3165 | __blk_run_queue(q); |
3166 | pm_runtime_mark_last_busy(q->dev); | 3166 | pm_runtime_mark_last_busy(q->dev); |
3167 | pm_runtime_autosuspend(q->dev); | 3167 | pm_request_autosuspend(q->dev); |
3168 | } else { | 3168 | } else { |
3169 | q->rpm_status = RPM_SUSPENDED; | 3169 | q->rpm_status = RPM_SUSPENDED; |
3170 | } | 3170 | } |
diff --git a/crypto/Kconfig b/crypto/Kconfig index 622d8a48cbe9..bf8148e74e73 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig | |||
@@ -823,6 +823,7 @@ config CRYPTO_BLOWFISH_X86_64 | |||
823 | config CRYPTO_BLOWFISH_AVX2_X86_64 | 823 | config CRYPTO_BLOWFISH_AVX2_X86_64 |
824 | tristate "Blowfish cipher algorithm (x86_64/AVX2)" | 824 | tristate "Blowfish cipher algorithm (x86_64/AVX2)" |
825 | depends on X86 && 64BIT | 825 | depends on X86 && 64BIT |
826 | depends on BROKEN | ||
826 | select CRYPTO_ALGAPI | 827 | select CRYPTO_ALGAPI |
827 | select CRYPTO_CRYPTD | 828 | select CRYPTO_CRYPTD |
828 | select CRYPTO_ABLK_HELPER_X86 | 829 | select CRYPTO_ABLK_HELPER_X86 |
@@ -1299,6 +1300,7 @@ config CRYPTO_TWOFISH_AVX_X86_64 | |||
1299 | config CRYPTO_TWOFISH_AVX2_X86_64 | 1300 | config CRYPTO_TWOFISH_AVX2_X86_64 |
1300 | tristate "Twofish cipher algorithm (x86_64/AVX2)" | 1301 | tristate "Twofish cipher algorithm (x86_64/AVX2)" |
1301 | depends on X86 && 64BIT | 1302 | depends on X86 && 64BIT |
1303 | depends on BROKEN | ||
1302 | select CRYPTO_ALGAPI | 1304 | select CRYPTO_ALGAPI |
1303 | select CRYPTO_CRYPTD | 1305 | select CRYPTO_CRYPTD |
1304 | select CRYPTO_ABLK_HELPER_X86 | 1306 | select CRYPTO_ABLK_HELPER_X86 |
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index 44225cb15f3a..b14ac46948c9 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c | |||
@@ -1017,11 +1017,8 @@ acpi_bus_driver_init(struct acpi_device *device, struct acpi_driver *driver) | |||
1017 | return -ENOSYS; | 1017 | return -ENOSYS; |
1018 | 1018 | ||
1019 | result = driver->ops.add(device); | 1019 | result = driver->ops.add(device); |
1020 | if (result) { | 1020 | if (result) |
1021 | device->driver = NULL; | ||
1022 | device->driver_data = NULL; | ||
1023 | return result; | 1021 | return result; |
1024 | } | ||
1025 | 1022 | ||
1026 | device->driver = driver; | 1023 | device->driver = driver; |
1027 | 1024 | ||
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index 5d7075d25700..440eadf2d32c 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c | |||
@@ -1722,6 +1722,9 @@ static int acpi_video_bus_add(struct acpi_device *device) | |||
1722 | int error; | 1722 | int error; |
1723 | acpi_status status; | 1723 | acpi_status status; |
1724 | 1724 | ||
1725 | if (device->handler) | ||
1726 | return -EINVAL; | ||
1727 | |||
1725 | status = acpi_walk_namespace(ACPI_TYPE_DEVICE, | 1728 | status = acpi_walk_namespace(ACPI_TYPE_DEVICE, |
1726 | device->parent->handle, 1, | 1729 | device->parent->handle, 1, |
1727 | acpi_video_bus_match, NULL, | 1730 | acpi_video_bus_match, NULL, |
diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c index aa0875f6f1b7..02f490bad30f 100644 --- a/drivers/base/regmap/regcache-rbtree.c +++ b/drivers/base/regmap/regcache-rbtree.c | |||
@@ -143,7 +143,7 @@ static int rbtree_show(struct seq_file *s, void *ignored) | |||
143 | int registers = 0; | 143 | int registers = 0; |
144 | int this_registers, average; | 144 | int this_registers, average; |
145 | 145 | ||
146 | map->lock(map); | 146 | map->lock(map->lock_arg); |
147 | 147 | ||
148 | mem_size = sizeof(*rbtree_ctx); | 148 | mem_size = sizeof(*rbtree_ctx); |
149 | mem_size += BITS_TO_LONGS(map->cache_present_nbits) * sizeof(long); | 149 | mem_size += BITS_TO_LONGS(map->cache_present_nbits) * sizeof(long); |
@@ -170,7 +170,7 @@ static int rbtree_show(struct seq_file *s, void *ignored) | |||
170 | seq_printf(s, "%d nodes, %d registers, average %d registers, used %zu bytes\n", | 170 | seq_printf(s, "%d nodes, %d registers, average %d registers, used %zu bytes\n", |
171 | nodes, registers, average, mem_size); | 171 | nodes, registers, average, mem_size); |
172 | 172 | ||
173 | map->unlock(map); | 173 | map->unlock(map->lock_arg); |
174 | 174 | ||
175 | return 0; | 175 | return 0; |
176 | } | 176 | } |
@@ -391,8 +391,6 @@ static int regcache_rbtree_sync(struct regmap *map, unsigned int min, | |||
391 | for (node = rb_first(&rbtree_ctx->root); node; node = rb_next(node)) { | 391 | for (node = rb_first(&rbtree_ctx->root); node; node = rb_next(node)) { |
392 | rbnode = rb_entry(node, struct regcache_rbtree_node, node); | 392 | rbnode = rb_entry(node, struct regcache_rbtree_node, node); |
393 | 393 | ||
394 | if (rbnode->base_reg < min) | ||
395 | continue; | ||
396 | if (rbnode->base_reg > max) | 394 | if (rbnode->base_reg > max) |
397 | break; | 395 | break; |
398 | if (rbnode->base_reg + rbnode->blklen < min) | 396 | if (rbnode->base_reg + rbnode->blklen < min) |
diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c index 75923f2396bd..507ee2da0f6e 100644 --- a/drivers/base/regmap/regcache.c +++ b/drivers/base/regmap/regcache.c | |||
@@ -270,7 +270,7 @@ int regcache_sync(struct regmap *map) | |||
270 | 270 | ||
271 | BUG_ON(!map->cache_ops || !map->cache_ops->sync); | 271 | BUG_ON(!map->cache_ops || !map->cache_ops->sync); |
272 | 272 | ||
273 | map->lock(map); | 273 | map->lock(map->lock_arg); |
274 | /* Remember the initial bypass state */ | 274 | /* Remember the initial bypass state */ |
275 | bypass = map->cache_bypass; | 275 | bypass = map->cache_bypass; |
276 | dev_dbg(map->dev, "Syncing %s cache\n", | 276 | dev_dbg(map->dev, "Syncing %s cache\n", |
@@ -306,7 +306,7 @@ out: | |||
306 | trace_regcache_sync(map->dev, name, "stop"); | 306 | trace_regcache_sync(map->dev, name, "stop"); |
307 | /* Restore the bypass state */ | 307 | /* Restore the bypass state */ |
308 | map->cache_bypass = bypass; | 308 | map->cache_bypass = bypass; |
309 | map->unlock(map); | 309 | map->unlock(map->lock_arg); |
310 | 310 | ||
311 | return ret; | 311 | return ret; |
312 | } | 312 | } |
@@ -333,7 +333,7 @@ int regcache_sync_region(struct regmap *map, unsigned int min, | |||
333 | 333 | ||
334 | BUG_ON(!map->cache_ops || !map->cache_ops->sync); | 334 | BUG_ON(!map->cache_ops || !map->cache_ops->sync); |
335 | 335 | ||
336 | map->lock(map); | 336 | map->lock(map->lock_arg); |
337 | 337 | ||
338 | /* Remember the initial bypass state */ | 338 | /* Remember the initial bypass state */ |
339 | bypass = map->cache_bypass; | 339 | bypass = map->cache_bypass; |
@@ -352,7 +352,7 @@ out: | |||
352 | trace_regcache_sync(map->dev, name, "stop region"); | 352 | trace_regcache_sync(map->dev, name, "stop region"); |
353 | /* Restore the bypass state */ | 353 | /* Restore the bypass state */ |
354 | map->cache_bypass = bypass; | 354 | map->cache_bypass = bypass; |
355 | map->unlock(map); | 355 | map->unlock(map->lock_arg); |
356 | 356 | ||
357 | return ret; | 357 | return ret; |
358 | } | 358 | } |
@@ -372,11 +372,11 @@ EXPORT_SYMBOL_GPL(regcache_sync_region); | |||
372 | */ | 372 | */ |
373 | void regcache_cache_only(struct regmap *map, bool enable) | 373 | void regcache_cache_only(struct regmap *map, bool enable) |
374 | { | 374 | { |
375 | map->lock(map); | 375 | map->lock(map->lock_arg); |
376 | WARN_ON(map->cache_bypass && enable); | 376 | WARN_ON(map->cache_bypass && enable); |
377 | map->cache_only = enable; | 377 | map->cache_only = enable; |
378 | trace_regmap_cache_only(map->dev, enable); | 378 | trace_regmap_cache_only(map->dev, enable); |
379 | map->unlock(map); | 379 | map->unlock(map->lock_arg); |
380 | } | 380 | } |
381 | EXPORT_SYMBOL_GPL(regcache_cache_only); | 381 | EXPORT_SYMBOL_GPL(regcache_cache_only); |
382 | 382 | ||
@@ -391,9 +391,9 @@ EXPORT_SYMBOL_GPL(regcache_cache_only); | |||
391 | */ | 391 | */ |
392 | void regcache_mark_dirty(struct regmap *map) | 392 | void regcache_mark_dirty(struct regmap *map) |
393 | { | 393 | { |
394 | map->lock(map); | 394 | map->lock(map->lock_arg); |
395 | map->cache_dirty = true; | 395 | map->cache_dirty = true; |
396 | map->unlock(map); | 396 | map->unlock(map->lock_arg); |
397 | } | 397 | } |
398 | EXPORT_SYMBOL_GPL(regcache_mark_dirty); | 398 | EXPORT_SYMBOL_GPL(regcache_mark_dirty); |
399 | 399 | ||
@@ -410,11 +410,11 @@ EXPORT_SYMBOL_GPL(regcache_mark_dirty); | |||
410 | */ | 410 | */ |
411 | void regcache_cache_bypass(struct regmap *map, bool enable) | 411 | void regcache_cache_bypass(struct regmap *map, bool enable) |
412 | { | 412 | { |
413 | map->lock(map); | 413 | map->lock(map->lock_arg); |
414 | WARN_ON(map->cache_only && enable); | 414 | WARN_ON(map->cache_only && enable); |
415 | map->cache_bypass = enable; | 415 | map->cache_bypass = enable; |
416 | trace_regmap_cache_bypass(map->dev, enable); | 416 | trace_regmap_cache_bypass(map->dev, enable); |
417 | map->unlock(map); | 417 | map->unlock(map->lock_arg); |
418 | } | 418 | } |
419 | EXPORT_SYMBOL_GPL(regcache_cache_bypass); | 419 | EXPORT_SYMBOL_GPL(regcache_cache_bypass); |
420 | 420 | ||
diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c index 23b701f5fd2f..975719bc3450 100644 --- a/drivers/base/regmap/regmap-debugfs.c +++ b/drivers/base/regmap/regmap-debugfs.c | |||
@@ -265,6 +265,7 @@ static ssize_t regmap_map_write_file(struct file *file, | |||
265 | char *start = buf; | 265 | char *start = buf; |
266 | unsigned long reg, value; | 266 | unsigned long reg, value; |
267 | struct regmap *map = file->private_data; | 267 | struct regmap *map = file->private_data; |
268 | int ret; | ||
268 | 269 | ||
269 | buf_size = min(count, (sizeof(buf)-1)); | 270 | buf_size = min(count, (sizeof(buf)-1)); |
270 | if (copy_from_user(buf, user_buf, buf_size)) | 271 | if (copy_from_user(buf, user_buf, buf_size)) |
@@ -282,7 +283,9 @@ static ssize_t regmap_map_write_file(struct file *file, | |||
282 | /* Userspace has been fiddling around behind the kernel's back */ | 283 | /* Userspace has been fiddling around behind the kernel's back */ |
283 | add_taint(TAINT_USER, LOCKDEP_NOW_UNRELIABLE); | 284 | add_taint(TAINT_USER, LOCKDEP_NOW_UNRELIABLE); |
284 | 285 | ||
285 | regmap_write(map, reg, value); | 286 | ret = regmap_write(map, reg, value); |
287 | if (ret < 0) | ||
288 | return ret; | ||
286 | return buf_size; | 289 | return buf_size; |
287 | } | 290 | } |
288 | #else | 291 | #else |
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index 6374dc103521..62b6c2cc80b5 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c | |||
@@ -168,8 +168,6 @@ static irqreturn_t do_cciss_msix_intr(int irq, void *dev_id); | |||
168 | static int cciss_open(struct block_device *bdev, fmode_t mode); | 168 | static int cciss_open(struct block_device *bdev, fmode_t mode); |
169 | static int cciss_unlocked_open(struct block_device *bdev, fmode_t mode); | 169 | static int cciss_unlocked_open(struct block_device *bdev, fmode_t mode); |
170 | static void cciss_release(struct gendisk *disk, fmode_t mode); | 170 | static void cciss_release(struct gendisk *disk, fmode_t mode); |
171 | static int do_ioctl(struct block_device *bdev, fmode_t mode, | ||
172 | unsigned int cmd, unsigned long arg); | ||
173 | static int cciss_ioctl(struct block_device *bdev, fmode_t mode, | 171 | static int cciss_ioctl(struct block_device *bdev, fmode_t mode, |
174 | unsigned int cmd, unsigned long arg); | 172 | unsigned int cmd, unsigned long arg); |
175 | static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo); | 173 | static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo); |
@@ -235,7 +233,7 @@ static const struct block_device_operations cciss_fops = { | |||
235 | .owner = THIS_MODULE, | 233 | .owner = THIS_MODULE, |
236 | .open = cciss_unlocked_open, | 234 | .open = cciss_unlocked_open, |
237 | .release = cciss_release, | 235 | .release = cciss_release, |
238 | .ioctl = do_ioctl, | 236 | .ioctl = cciss_ioctl, |
239 | .getgeo = cciss_getgeo, | 237 | .getgeo = cciss_getgeo, |
240 | #ifdef CONFIG_COMPAT | 238 | #ifdef CONFIG_COMPAT |
241 | .compat_ioctl = cciss_compat_ioctl, | 239 | .compat_ioctl = cciss_compat_ioctl, |
@@ -1143,16 +1141,6 @@ static void cciss_release(struct gendisk *disk, fmode_t mode) | |||
1143 | mutex_unlock(&cciss_mutex); | 1141 | mutex_unlock(&cciss_mutex); |
1144 | } | 1142 | } |
1145 | 1143 | ||
1146 | static int do_ioctl(struct block_device *bdev, fmode_t mode, | ||
1147 | unsigned cmd, unsigned long arg) | ||
1148 | { | ||
1149 | int ret; | ||
1150 | mutex_lock(&cciss_mutex); | ||
1151 | ret = cciss_ioctl(bdev, mode, cmd, arg); | ||
1152 | mutex_unlock(&cciss_mutex); | ||
1153 | return ret; | ||
1154 | } | ||
1155 | |||
1156 | #ifdef CONFIG_COMPAT | 1144 | #ifdef CONFIG_COMPAT |
1157 | 1145 | ||
1158 | static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode, | 1146 | static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode, |
@@ -1179,7 +1167,7 @@ static int cciss_compat_ioctl(struct block_device *bdev, fmode_t mode, | |||
1179 | case CCISS_REGNEWD: | 1167 | case CCISS_REGNEWD: |
1180 | case CCISS_RESCANDISK: | 1168 | case CCISS_RESCANDISK: |
1181 | case CCISS_GETLUNINFO: | 1169 | case CCISS_GETLUNINFO: |
1182 | return do_ioctl(bdev, mode, cmd, arg); | 1170 | return cciss_ioctl(bdev, mode, cmd, arg); |
1183 | 1171 | ||
1184 | case CCISS_PASSTHRU32: | 1172 | case CCISS_PASSTHRU32: |
1185 | return cciss_ioctl32_passthru(bdev, mode, cmd, arg); | 1173 | return cciss_ioctl32_passthru(bdev, mode, cmd, arg); |
@@ -1219,7 +1207,7 @@ static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode, | |||
1219 | if (err) | 1207 | if (err) |
1220 | return -EFAULT; | 1208 | return -EFAULT; |
1221 | 1209 | ||
1222 | err = do_ioctl(bdev, mode, CCISS_PASSTHRU, (unsigned long)p); | 1210 | err = cciss_ioctl(bdev, mode, CCISS_PASSTHRU, (unsigned long)p); |
1223 | if (err) | 1211 | if (err) |
1224 | return err; | 1212 | return err; |
1225 | err |= | 1213 | err |= |
@@ -1261,7 +1249,7 @@ static int cciss_ioctl32_big_passthru(struct block_device *bdev, fmode_t mode, | |||
1261 | if (err) | 1249 | if (err) |
1262 | return -EFAULT; | 1250 | return -EFAULT; |
1263 | 1251 | ||
1264 | err = do_ioctl(bdev, mode, CCISS_BIG_PASSTHRU, (unsigned long)p); | 1252 | err = cciss_ioctl(bdev, mode, CCISS_BIG_PASSTHRU, (unsigned long)p); |
1265 | if (err) | 1253 | if (err) |
1266 | return err; | 1254 | return err; |
1267 | err |= | 1255 | err |= |
@@ -1311,11 +1299,14 @@ static int cciss_getpciinfo(ctlr_info_t *h, void __user *argp) | |||
1311 | static int cciss_getintinfo(ctlr_info_t *h, void __user *argp) | 1299 | static int cciss_getintinfo(ctlr_info_t *h, void __user *argp) |
1312 | { | 1300 | { |
1313 | cciss_coalint_struct intinfo; | 1301 | cciss_coalint_struct intinfo; |
1302 | unsigned long flags; | ||
1314 | 1303 | ||
1315 | if (!argp) | 1304 | if (!argp) |
1316 | return -EINVAL; | 1305 | return -EINVAL; |
1306 | spin_lock_irqsave(&h->lock, flags); | ||
1317 | intinfo.delay = readl(&h->cfgtable->HostWrite.CoalIntDelay); | 1307 | intinfo.delay = readl(&h->cfgtable->HostWrite.CoalIntDelay); |
1318 | intinfo.count = readl(&h->cfgtable->HostWrite.CoalIntCount); | 1308 | intinfo.count = readl(&h->cfgtable->HostWrite.CoalIntCount); |
1309 | spin_unlock_irqrestore(&h->lock, flags); | ||
1319 | if (copy_to_user | 1310 | if (copy_to_user |
1320 | (argp, &intinfo, sizeof(cciss_coalint_struct))) | 1311 | (argp, &intinfo, sizeof(cciss_coalint_struct))) |
1321 | return -EFAULT; | 1312 | return -EFAULT; |
@@ -1356,12 +1347,15 @@ static int cciss_setintinfo(ctlr_info_t *h, void __user *argp) | |||
1356 | static int cciss_getnodename(ctlr_info_t *h, void __user *argp) | 1347 | static int cciss_getnodename(ctlr_info_t *h, void __user *argp) |
1357 | { | 1348 | { |
1358 | NodeName_type NodeName; | 1349 | NodeName_type NodeName; |
1350 | unsigned long flags; | ||
1359 | int i; | 1351 | int i; |
1360 | 1352 | ||
1361 | if (!argp) | 1353 | if (!argp) |
1362 | return -EINVAL; | 1354 | return -EINVAL; |
1355 | spin_lock_irqsave(&h->lock, flags); | ||
1363 | for (i = 0; i < 16; i++) | 1356 | for (i = 0; i < 16; i++) |
1364 | NodeName[i] = readb(&h->cfgtable->ServerName[i]); | 1357 | NodeName[i] = readb(&h->cfgtable->ServerName[i]); |
1358 | spin_unlock_irqrestore(&h->lock, flags); | ||
1365 | if (copy_to_user(argp, NodeName, sizeof(NodeName_type))) | 1359 | if (copy_to_user(argp, NodeName, sizeof(NodeName_type))) |
1366 | return -EFAULT; | 1360 | return -EFAULT; |
1367 | return 0; | 1361 | return 0; |
@@ -1398,10 +1392,13 @@ static int cciss_setnodename(ctlr_info_t *h, void __user *argp) | |||
1398 | static int cciss_getheartbeat(ctlr_info_t *h, void __user *argp) | 1392 | static int cciss_getheartbeat(ctlr_info_t *h, void __user *argp) |
1399 | { | 1393 | { |
1400 | Heartbeat_type heartbeat; | 1394 | Heartbeat_type heartbeat; |
1395 | unsigned long flags; | ||
1401 | 1396 | ||
1402 | if (!argp) | 1397 | if (!argp) |
1403 | return -EINVAL; | 1398 | return -EINVAL; |
1399 | spin_lock_irqsave(&h->lock, flags); | ||
1404 | heartbeat = readl(&h->cfgtable->HeartBeat); | 1400 | heartbeat = readl(&h->cfgtable->HeartBeat); |
1401 | spin_unlock_irqrestore(&h->lock, flags); | ||
1405 | if (copy_to_user(argp, &heartbeat, sizeof(Heartbeat_type))) | 1402 | if (copy_to_user(argp, &heartbeat, sizeof(Heartbeat_type))) |
1406 | return -EFAULT; | 1403 | return -EFAULT; |
1407 | return 0; | 1404 | return 0; |
@@ -1410,10 +1407,13 @@ static int cciss_getheartbeat(ctlr_info_t *h, void __user *argp) | |||
1410 | static int cciss_getbustypes(ctlr_info_t *h, void __user *argp) | 1407 | static int cciss_getbustypes(ctlr_info_t *h, void __user *argp) |
1411 | { | 1408 | { |
1412 | BusTypes_type BusTypes; | 1409 | BusTypes_type BusTypes; |
1410 | unsigned long flags; | ||
1413 | 1411 | ||
1414 | if (!argp) | 1412 | if (!argp) |
1415 | return -EINVAL; | 1413 | return -EINVAL; |
1414 | spin_lock_irqsave(&h->lock, flags); | ||
1416 | BusTypes = readl(&h->cfgtable->BusTypes); | 1415 | BusTypes = readl(&h->cfgtable->BusTypes); |
1416 | spin_unlock_irqrestore(&h->lock, flags); | ||
1417 | if (copy_to_user(argp, &BusTypes, sizeof(BusTypes_type))) | 1417 | if (copy_to_user(argp, &BusTypes, sizeof(BusTypes_type))) |
1418 | return -EFAULT; | 1418 | return -EFAULT; |
1419 | return 0; | 1419 | return 0; |
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c index 847107ef0cce..20dd52a2f92f 100644 --- a/drivers/block/mtip32xx/mtip32xx.c +++ b/drivers/block/mtip32xx/mtip32xx.c | |||
@@ -3002,7 +3002,8 @@ static int mtip_hw_debugfs_init(struct driver_data *dd) | |||
3002 | 3002 | ||
3003 | static void mtip_hw_debugfs_exit(struct driver_data *dd) | 3003 | static void mtip_hw_debugfs_exit(struct driver_data *dd) |
3004 | { | 3004 | { |
3005 | debugfs_remove_recursive(dd->dfs_node); | 3005 | if (dd->dfs_node) |
3006 | debugfs_remove_recursive(dd->dfs_node); | ||
3006 | } | 3007 | } |
3007 | 3008 | ||
3008 | 3009 | ||
@@ -3863,7 +3864,7 @@ static void mtip_make_request(struct request_queue *queue, struct bio *bio) | |||
3863 | struct driver_data *dd = queue->queuedata; | 3864 | struct driver_data *dd = queue->queuedata; |
3864 | struct scatterlist *sg; | 3865 | struct scatterlist *sg; |
3865 | struct bio_vec *bvec; | 3866 | struct bio_vec *bvec; |
3866 | int nents = 0; | 3867 | int i, nents = 0; |
3867 | int tag = 0, unaligned = 0; | 3868 | int tag = 0, unaligned = 0; |
3868 | 3869 | ||
3869 | if (unlikely(dd->dd_flag & MTIP_DDF_STOP_IO)) { | 3870 | if (unlikely(dd->dd_flag & MTIP_DDF_STOP_IO)) { |
@@ -3921,11 +3922,12 @@ static void mtip_make_request(struct request_queue *queue, struct bio *bio) | |||
3921 | } | 3922 | } |
3922 | 3923 | ||
3923 | /* Create the scatter list for this bio. */ | 3924 | /* Create the scatter list for this bio. */ |
3924 | bio_for_each_segment(bvec, bio, nents) { | 3925 | bio_for_each_segment(bvec, bio, i) { |
3925 | sg_set_page(&sg[nents], | 3926 | sg_set_page(&sg[nents], |
3926 | bvec->bv_page, | 3927 | bvec->bv_page, |
3927 | bvec->bv_len, | 3928 | bvec->bv_len, |
3928 | bvec->bv_offset); | 3929 | bvec->bv_offset); |
3930 | nents++; | ||
3929 | } | 3931 | } |
3930 | 3932 | ||
3931 | /* Issue the read/write. */ | 3933 | /* Issue the read/write. */ |
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c index 8efdfaa44a59..ce79a590b45b 100644 --- a/drivers/block/nvme-core.c +++ b/drivers/block/nvme-core.c | |||
@@ -629,7 +629,7 @@ static int nvme_submit_bio_queue(struct nvme_queue *nvmeq, struct nvme_ns *ns, | |||
629 | struct nvme_command *cmnd; | 629 | struct nvme_command *cmnd; |
630 | struct nvme_iod *iod; | 630 | struct nvme_iod *iod; |
631 | enum dma_data_direction dma_dir; | 631 | enum dma_data_direction dma_dir; |
632 | int cmdid, length, result = -ENOMEM; | 632 | int cmdid, length, result; |
633 | u16 control; | 633 | u16 control; |
634 | u32 dsmgmt; | 634 | u32 dsmgmt; |
635 | int psegs = bio_phys_segments(ns->queue, bio); | 635 | int psegs = bio_phys_segments(ns->queue, bio); |
@@ -640,6 +640,7 @@ static int nvme_submit_bio_queue(struct nvme_queue *nvmeq, struct nvme_ns *ns, | |||
640 | return result; | 640 | return result; |
641 | } | 641 | } |
642 | 642 | ||
643 | result = -ENOMEM; | ||
643 | iod = nvme_alloc_iod(psegs, bio->bi_size, GFP_ATOMIC); | 644 | iod = nvme_alloc_iod(psegs, bio->bi_size, GFP_ATOMIC); |
644 | if (!iod) | 645 | if (!iod) |
645 | goto nomem; | 646 | goto nomem; |
@@ -977,6 +978,8 @@ static void nvme_cancel_ios(struct nvme_queue *nvmeq, bool timeout) | |||
977 | 978 | ||
978 | if (timeout && !time_after(now, info[cmdid].timeout)) | 979 | if (timeout && !time_after(now, info[cmdid].timeout)) |
979 | continue; | 980 | continue; |
981 | if (info[cmdid].ctx == CMD_CTX_CANCELLED) | ||
982 | continue; | ||
980 | dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d\n", cmdid); | 983 | dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d\n", cmdid); |
981 | ctx = cancel_cmdid(nvmeq, cmdid, &fn); | 984 | ctx = cancel_cmdid(nvmeq, cmdid, &fn); |
982 | fn(nvmeq->dev, ctx, &cqe); | 985 | fn(nvmeq->dev, ctx, &cqe); |
@@ -1206,7 +1209,7 @@ struct nvme_iod *nvme_map_user_pages(struct nvme_dev *dev, int write, | |||
1206 | 1209 | ||
1207 | if (addr & 3) | 1210 | if (addr & 3) |
1208 | return ERR_PTR(-EINVAL); | 1211 | return ERR_PTR(-EINVAL); |
1209 | if (!length) | 1212 | if (!length || length > INT_MAX - PAGE_SIZE) |
1210 | return ERR_PTR(-EINVAL); | 1213 | return ERR_PTR(-EINVAL); |
1211 | 1214 | ||
1212 | offset = offset_in_page(addr); | 1215 | offset = offset_in_page(addr); |
@@ -1227,7 +1230,8 @@ struct nvme_iod *nvme_map_user_pages(struct nvme_dev *dev, int write, | |||
1227 | sg_init_table(sg, count); | 1230 | sg_init_table(sg, count); |
1228 | for (i = 0; i < count; i++) { | 1231 | for (i = 0; i < count; i++) { |
1229 | sg_set_page(&sg[i], pages[i], | 1232 | sg_set_page(&sg[i], pages[i], |
1230 | min_t(int, length, PAGE_SIZE - offset), offset); | 1233 | min_t(unsigned, length, PAGE_SIZE - offset), |
1234 | offset); | ||
1231 | length -= (PAGE_SIZE - offset); | 1235 | length -= (PAGE_SIZE - offset); |
1232 | offset = 0; | 1236 | offset = 0; |
1233 | } | 1237 | } |
@@ -1435,7 +1439,7 @@ static int nvme_user_admin_cmd(struct nvme_dev *dev, | |||
1435 | nvme_free_iod(dev, iod); | 1439 | nvme_free_iod(dev, iod); |
1436 | } | 1440 | } |
1437 | 1441 | ||
1438 | if (!status && copy_to_user(&ucmd->result, &cmd.result, | 1442 | if ((status >= 0) && copy_to_user(&ucmd->result, &cmd.result, |
1439 | sizeof(cmd.result))) | 1443 | sizeof(cmd.result))) |
1440 | status = -EFAULT; | 1444 | status = -EFAULT; |
1441 | 1445 | ||
@@ -1633,7 +1637,8 @@ static int set_queue_count(struct nvme_dev *dev, int count) | |||
1633 | 1637 | ||
1634 | static int nvme_setup_io_queues(struct nvme_dev *dev) | 1638 | static int nvme_setup_io_queues(struct nvme_dev *dev) |
1635 | { | 1639 | { |
1636 | int result, cpu, i, nr_io_queues, db_bar_size, q_depth; | 1640 | struct pci_dev *pdev = dev->pci_dev; |
1641 | int result, cpu, i, nr_io_queues, db_bar_size, q_depth, q_count; | ||
1637 | 1642 | ||
1638 | nr_io_queues = num_online_cpus(); | 1643 | nr_io_queues = num_online_cpus(); |
1639 | result = set_queue_count(dev, nr_io_queues); | 1644 | result = set_queue_count(dev, nr_io_queues); |
@@ -1642,14 +1647,14 @@ static int nvme_setup_io_queues(struct nvme_dev *dev) | |||
1642 | if (result < nr_io_queues) | 1647 | if (result < nr_io_queues) |
1643 | nr_io_queues = result; | 1648 | nr_io_queues = result; |
1644 | 1649 | ||
1650 | q_count = nr_io_queues; | ||
1645 | /* Deregister the admin queue's interrupt */ | 1651 | /* Deregister the admin queue's interrupt */ |
1646 | free_irq(dev->entry[0].vector, dev->queues[0]); | 1652 | free_irq(dev->entry[0].vector, dev->queues[0]); |
1647 | 1653 | ||
1648 | db_bar_size = 4096 + ((nr_io_queues + 1) << (dev->db_stride + 3)); | 1654 | db_bar_size = 4096 + ((nr_io_queues + 1) << (dev->db_stride + 3)); |
1649 | if (db_bar_size > 8192) { | 1655 | if (db_bar_size > 8192) { |
1650 | iounmap(dev->bar); | 1656 | iounmap(dev->bar); |
1651 | dev->bar = ioremap(pci_resource_start(dev->pci_dev, 0), | 1657 | dev->bar = ioremap(pci_resource_start(pdev, 0), db_bar_size); |
1652 | db_bar_size); | ||
1653 | dev->dbs = ((void __iomem *)dev->bar) + 4096; | 1658 | dev->dbs = ((void __iomem *)dev->bar) + 4096; |
1654 | dev->queues[0]->q_db = dev->dbs; | 1659 | dev->queues[0]->q_db = dev->dbs; |
1655 | } | 1660 | } |
@@ -1657,19 +1662,36 @@ static int nvme_setup_io_queues(struct nvme_dev *dev) | |||
1657 | for (i = 0; i < nr_io_queues; i++) | 1662 | for (i = 0; i < nr_io_queues; i++) |
1658 | dev->entry[i].entry = i; | 1663 | dev->entry[i].entry = i; |
1659 | for (;;) { | 1664 | for (;;) { |
1660 | result = pci_enable_msix(dev->pci_dev, dev->entry, | 1665 | result = pci_enable_msix(pdev, dev->entry, nr_io_queues); |
1661 | nr_io_queues); | ||
1662 | if (result == 0) { | 1666 | if (result == 0) { |
1663 | break; | 1667 | break; |
1664 | } else if (result > 0) { | 1668 | } else if (result > 0) { |
1665 | nr_io_queues = result; | 1669 | nr_io_queues = result; |
1666 | continue; | 1670 | continue; |
1667 | } else { | 1671 | } else { |
1668 | nr_io_queues = 1; | 1672 | nr_io_queues = 0; |
1669 | break; | 1673 | break; |
1670 | } | 1674 | } |
1671 | } | 1675 | } |
1672 | 1676 | ||
1677 | if (nr_io_queues == 0) { | ||
1678 | nr_io_queues = q_count; | ||
1679 | for (;;) { | ||
1680 | result = pci_enable_msi_block(pdev, nr_io_queues); | ||
1681 | if (result == 0) { | ||
1682 | for (i = 0; i < nr_io_queues; i++) | ||
1683 | dev->entry[i].vector = i + pdev->irq; | ||
1684 | break; | ||
1685 | } else if (result > 0) { | ||
1686 | nr_io_queues = result; | ||
1687 | continue; | ||
1688 | } else { | ||
1689 | nr_io_queues = 1; | ||
1690 | break; | ||
1691 | } | ||
1692 | } | ||
1693 | } | ||
1694 | |||
1673 | result = queue_request_irq(dev, dev->queues[0], "nvme admin"); | 1695 | result = queue_request_irq(dev, dev->queues[0], "nvme admin"); |
1674 | /* XXX: handle failure here */ | 1696 | /* XXX: handle failure here */ |
1675 | 1697 | ||
@@ -1850,7 +1872,10 @@ static void nvme_free_dev(struct kref *kref) | |||
1850 | { | 1872 | { |
1851 | struct nvme_dev *dev = container_of(kref, struct nvme_dev, kref); | 1873 | struct nvme_dev *dev = container_of(kref, struct nvme_dev, kref); |
1852 | nvme_dev_remove(dev); | 1874 | nvme_dev_remove(dev); |
1853 | pci_disable_msix(dev->pci_dev); | 1875 | if (dev->pci_dev->msi_enabled) |
1876 | pci_disable_msi(dev->pci_dev); | ||
1877 | else if (dev->pci_dev->msix_enabled) | ||
1878 | pci_disable_msix(dev->pci_dev); | ||
1854 | iounmap(dev->bar); | 1879 | iounmap(dev->bar); |
1855 | nvme_release_instance(dev); | 1880 | nvme_release_instance(dev); |
1856 | nvme_release_prp_pools(dev); | 1881 | nvme_release_prp_pools(dev); |
@@ -1923,8 +1948,14 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1923 | INIT_LIST_HEAD(&dev->namespaces); | 1948 | INIT_LIST_HEAD(&dev->namespaces); |
1924 | dev->pci_dev = pdev; | 1949 | dev->pci_dev = pdev; |
1925 | pci_set_drvdata(pdev, dev); | 1950 | pci_set_drvdata(pdev, dev); |
1926 | dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)); | 1951 | |
1927 | dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64)); | 1952 | if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) |
1953 | dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64)); | ||
1954 | else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) | ||
1955 | dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); | ||
1956 | else | ||
1957 | goto disable; | ||
1958 | |||
1928 | result = nvme_set_instance(dev); | 1959 | result = nvme_set_instance(dev); |
1929 | if (result) | 1960 | if (result) |
1930 | goto disable; | 1961 | goto disable; |
@@ -1977,7 +2008,10 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1977 | unmap: | 2008 | unmap: |
1978 | iounmap(dev->bar); | 2009 | iounmap(dev->bar); |
1979 | disable_msix: | 2010 | disable_msix: |
1980 | pci_disable_msix(pdev); | 2011 | if (dev->pci_dev->msi_enabled) |
2012 | pci_disable_msi(dev->pci_dev); | ||
2013 | else if (dev->pci_dev->msix_enabled) | ||
2014 | pci_disable_msix(dev->pci_dev); | ||
1981 | nvme_release_instance(dev); | 2015 | nvme_release_instance(dev); |
1982 | nvme_release_prp_pools(dev); | 2016 | nvme_release_prp_pools(dev); |
1983 | disable: | 2017 | disable: |
diff --git a/drivers/block/nvme-scsi.c b/drivers/block/nvme-scsi.c index fed54b039893..102de2f52b5c 100644 --- a/drivers/block/nvme-scsi.c +++ b/drivers/block/nvme-scsi.c | |||
@@ -44,7 +44,6 @@ | |||
44 | #include <linux/sched.h> | 44 | #include <linux/sched.h> |
45 | #include <linux/slab.h> | 45 | #include <linux/slab.h> |
46 | #include <linux/types.h> | 46 | #include <linux/types.h> |
47 | #include <linux/version.h> | ||
48 | #include <scsi/sg.h> | 47 | #include <scsi/sg.h> |
49 | #include <scsi/scsi.h> | 48 | #include <scsi/scsi.h> |
50 | 49 | ||
@@ -1654,7 +1653,7 @@ static void nvme_trans_modesel_save_bd(struct nvme_ns *ns, u8 *parm_list, | |||
1654 | } | 1653 | } |
1655 | } | 1654 | } |
1656 | 1655 | ||
1657 | static u16 nvme_trans_modesel_get_mp(struct nvme_ns *ns, struct sg_io_hdr *hdr, | 1656 | static int nvme_trans_modesel_get_mp(struct nvme_ns *ns, struct sg_io_hdr *hdr, |
1658 | u8 *mode_page, u8 page_code) | 1657 | u8 *mode_page, u8 page_code) |
1659 | { | 1658 | { |
1660 | int res = SNTI_TRANSLATION_SUCCESS; | 1659 | int res = SNTI_TRANSLATION_SUCCESS; |
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c index 3c08983e600a..f5d0ea11d9fd 100644 --- a/drivers/block/pktcdvd.c +++ b/drivers/block/pktcdvd.c | |||
@@ -83,7 +83,8 @@ | |||
83 | 83 | ||
84 | #define MAX_SPEED 0xffff | 84 | #define MAX_SPEED 0xffff |
85 | 85 | ||
86 | #define ZONE(sector, pd) (((sector) + (pd)->offset) & ~((pd)->settings.size - 1)) | 86 | #define ZONE(sector, pd) (((sector) + (pd)->offset) & \ |
87 | ~(sector_t)((pd)->settings.size - 1)) | ||
87 | 88 | ||
88 | static DEFINE_MUTEX(pktcdvd_mutex); | 89 | static DEFINE_MUTEX(pktcdvd_mutex); |
89 | static struct pktcdvd_device *pkt_devs[MAX_WRITERS]; | 90 | static struct pktcdvd_device *pkt_devs[MAX_WRITERS]; |
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index d6d314027b5d..3063452e55da 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -519,8 +519,8 @@ static const struct block_device_operations rbd_bd_ops = { | |||
519 | }; | 519 | }; |
520 | 520 | ||
521 | /* | 521 | /* |
522 | * Initialize an rbd client instance. | 522 | * Initialize an rbd client instance. Success or not, this function |
523 | * We own *ceph_opts. | 523 | * consumes ceph_opts. |
524 | */ | 524 | */ |
525 | static struct rbd_client *rbd_client_create(struct ceph_options *ceph_opts) | 525 | static struct rbd_client *rbd_client_create(struct ceph_options *ceph_opts) |
526 | { | 526 | { |
@@ -675,7 +675,8 @@ static int parse_rbd_opts_token(char *c, void *private) | |||
675 | 675 | ||
676 | /* | 676 | /* |
677 | * Get a ceph client with specific addr and configuration, if one does | 677 | * Get a ceph client with specific addr and configuration, if one does |
678 | * not exist create it. | 678 | * not exist create it. Either way, ceph_opts is consumed by this |
679 | * function. | ||
679 | */ | 680 | */ |
680 | static struct rbd_client *rbd_get_client(struct ceph_options *ceph_opts) | 681 | static struct rbd_client *rbd_get_client(struct ceph_options *ceph_opts) |
681 | { | 682 | { |
@@ -4697,8 +4698,10 @@ out: | |||
4697 | return ret; | 4698 | return ret; |
4698 | } | 4699 | } |
4699 | 4700 | ||
4700 | /* Undo whatever state changes are made by v1 or v2 image probe */ | 4701 | /* |
4701 | 4702 | * Undo whatever state changes are made by v1 or v2 header info | |
4703 | * call. | ||
4704 | */ | ||
4702 | static void rbd_dev_unprobe(struct rbd_device *rbd_dev) | 4705 | static void rbd_dev_unprobe(struct rbd_device *rbd_dev) |
4703 | { | 4706 | { |
4704 | struct rbd_image_header *header; | 4707 | struct rbd_image_header *header; |
@@ -4902,9 +4905,10 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping) | |||
4902 | int tmp; | 4905 | int tmp; |
4903 | 4906 | ||
4904 | /* | 4907 | /* |
4905 | * Get the id from the image id object. If it's not a | 4908 | * Get the id from the image id object. Unless there's an |
4906 | * format 2 image, we'll get ENOENT back, and we'll assume | 4909 | * error, rbd_dev->spec->image_id will be filled in with |
4907 | * it's a format 1 image. | 4910 | * a dynamically-allocated string, and rbd_dev->image_format |
4911 | * will be set to either 1 or 2. | ||
4908 | */ | 4912 | */ |
4909 | ret = rbd_dev_image_id(rbd_dev); | 4913 | ret = rbd_dev_image_id(rbd_dev); |
4910 | if (ret) | 4914 | if (ret) |
@@ -4992,7 +4996,6 @@ static ssize_t rbd_add(struct bus_type *bus, | |||
4992 | rc = PTR_ERR(rbdc); | 4996 | rc = PTR_ERR(rbdc); |
4993 | goto err_out_args; | 4997 | goto err_out_args; |
4994 | } | 4998 | } |
4995 | ceph_opts = NULL; /* rbd_dev client now owns this */ | ||
4996 | 4999 | ||
4997 | /* pick the pool */ | 5000 | /* pick the pool */ |
4998 | osdc = &rbdc->client->osdc; | 5001 | osdc = &rbdc->client->osdc; |
@@ -5027,18 +5030,18 @@ static ssize_t rbd_add(struct bus_type *bus, | |||
5027 | rbd_dev->mapping.read_only = read_only; | 5030 | rbd_dev->mapping.read_only = read_only; |
5028 | 5031 | ||
5029 | rc = rbd_dev_device_setup(rbd_dev); | 5032 | rc = rbd_dev_device_setup(rbd_dev); |
5030 | if (!rc) | 5033 | if (rc) { |
5031 | return count; | 5034 | rbd_dev_image_release(rbd_dev); |
5035 | goto err_out_module; | ||
5036 | } | ||
5037 | |||
5038 | return count; | ||
5032 | 5039 | ||
5033 | rbd_dev_image_release(rbd_dev); | ||
5034 | err_out_rbd_dev: | 5040 | err_out_rbd_dev: |
5035 | rbd_dev_destroy(rbd_dev); | 5041 | rbd_dev_destroy(rbd_dev); |
5036 | err_out_client: | 5042 | err_out_client: |
5037 | rbd_put_client(rbdc); | 5043 | rbd_put_client(rbdc); |
5038 | err_out_args: | 5044 | err_out_args: |
5039 | if (ceph_opts) | ||
5040 | ceph_destroy_options(ceph_opts); | ||
5041 | kfree(rbd_opts); | ||
5042 | rbd_spec_put(spec); | 5045 | rbd_spec_put(spec); |
5043 | err_out_module: | 5046 | err_out_module: |
5044 | module_put(THIS_MODULE); | 5047 | module_put(THIS_MODULE); |
diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig index fdfd61a2d523..11a6104a1e4f 100644 --- a/drivers/bluetooth/Kconfig +++ b/drivers/bluetooth/Kconfig | |||
@@ -201,7 +201,7 @@ config BT_MRVL | |||
201 | The core driver to support Marvell Bluetooth devices. | 201 | The core driver to support Marvell Bluetooth devices. |
202 | 202 | ||
203 | This driver is required if you want to support | 203 | This driver is required if you want to support |
204 | Marvell Bluetooth devices, such as 8688/8787/8797. | 204 | Marvell Bluetooth devices, such as 8688/8787/8797/8897. |
205 | 205 | ||
206 | Say Y here to compile Marvell Bluetooth driver | 206 | Say Y here to compile Marvell Bluetooth driver |
207 | into the kernel or say M to compile it as module. | 207 | into the kernel or say M to compile it as module. |
@@ -214,7 +214,7 @@ config BT_MRVL_SDIO | |||
214 | The driver for Marvell Bluetooth chipsets with SDIO interface. | 214 | The driver for Marvell Bluetooth chipsets with SDIO interface. |
215 | 215 | ||
216 | This driver is required if you want to use Marvell Bluetooth | 216 | This driver is required if you want to use Marvell Bluetooth |
217 | devices with SDIO interface. Currently SD8688/SD8787/SD8797 | 217 | devices with SDIO interface. Currently SD8688/SD8787/SD8797/SD8897 |
218 | chipsets are supported. | 218 | chipsets are supported. |
219 | 219 | ||
220 | Say Y here to compile support for Marvell BT-over-SDIO driver | 220 | Say Y here to compile support for Marvell BT-over-SDIO driver |
diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c index c63488c54f4a..13693b7a0d5c 100644 --- a/drivers/bluetooth/btmrvl_sdio.c +++ b/drivers/bluetooth/btmrvl_sdio.c | |||
@@ -82,6 +82,23 @@ static const struct btmrvl_sdio_card_reg btmrvl_reg_87xx = { | |||
82 | .io_port_2 = 0x7a, | 82 | .io_port_2 = 0x7a, |
83 | }; | 83 | }; |
84 | 84 | ||
85 | static const struct btmrvl_sdio_card_reg btmrvl_reg_88xx = { | ||
86 | .cfg = 0x00, | ||
87 | .host_int_mask = 0x02, | ||
88 | .host_intstatus = 0x03, | ||
89 | .card_status = 0x50, | ||
90 | .sq_read_base_addr_a0 = 0x60, | ||
91 | .sq_read_base_addr_a1 = 0x61, | ||
92 | .card_revision = 0xbc, | ||
93 | .card_fw_status0 = 0xc0, | ||
94 | .card_fw_status1 = 0xc1, | ||
95 | .card_rx_len = 0xc2, | ||
96 | .card_rx_unit = 0xc3, | ||
97 | .io_port_0 = 0xd8, | ||
98 | .io_port_1 = 0xd9, | ||
99 | .io_port_2 = 0xda, | ||
100 | }; | ||
101 | |||
85 | static const struct btmrvl_sdio_device btmrvl_sdio_sd8688 = { | 102 | static const struct btmrvl_sdio_device btmrvl_sdio_sd8688 = { |
86 | .helper = "mrvl/sd8688_helper.bin", | 103 | .helper = "mrvl/sd8688_helper.bin", |
87 | .firmware = "mrvl/sd8688.bin", | 104 | .firmware = "mrvl/sd8688.bin", |
@@ -103,6 +120,13 @@ static const struct btmrvl_sdio_device btmrvl_sdio_sd8797 = { | |||
103 | .sd_blksz_fw_dl = 256, | 120 | .sd_blksz_fw_dl = 256, |
104 | }; | 121 | }; |
105 | 122 | ||
123 | static const struct btmrvl_sdio_device btmrvl_sdio_sd8897 = { | ||
124 | .helper = NULL, | ||
125 | .firmware = "mrvl/sd8897_uapsta.bin", | ||
126 | .reg = &btmrvl_reg_88xx, | ||
127 | .sd_blksz_fw_dl = 256, | ||
128 | }; | ||
129 | |||
106 | static const struct sdio_device_id btmrvl_sdio_ids[] = { | 130 | static const struct sdio_device_id btmrvl_sdio_ids[] = { |
107 | /* Marvell SD8688 Bluetooth device */ | 131 | /* Marvell SD8688 Bluetooth device */ |
108 | { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x9105), | 132 | { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x9105), |
@@ -116,6 +140,9 @@ static const struct sdio_device_id btmrvl_sdio_ids[] = { | |||
116 | /* Marvell SD8797 Bluetooth device */ | 140 | /* Marvell SD8797 Bluetooth device */ |
117 | { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x912A), | 141 | { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x912A), |
118 | .driver_data = (unsigned long) &btmrvl_sdio_sd8797 }, | 142 | .driver_data = (unsigned long) &btmrvl_sdio_sd8797 }, |
143 | /* Marvell SD8897 Bluetooth device */ | ||
144 | { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x912E), | ||
145 | .driver_data = (unsigned long) &btmrvl_sdio_sd8897 }, | ||
119 | 146 | ||
120 | { } /* Terminating entry */ | 147 | { } /* Terminating entry */ |
121 | }; | 148 | }; |
@@ -1194,3 +1221,4 @@ MODULE_FIRMWARE("mrvl/sd8688_helper.bin"); | |||
1194 | MODULE_FIRMWARE("mrvl/sd8688.bin"); | 1221 | MODULE_FIRMWARE("mrvl/sd8688.bin"); |
1195 | MODULE_FIRMWARE("mrvl/sd8787_uapsta.bin"); | 1222 | MODULE_FIRMWARE("mrvl/sd8787_uapsta.bin"); |
1196 | MODULE_FIRMWARE("mrvl/sd8797_uapsta.bin"); | 1223 | MODULE_FIRMWARE("mrvl/sd8797_uapsta.bin"); |
1224 | MODULE_FIRMWARE("mrvl/sd8897_uapsta.bin"); | ||
diff --git a/drivers/crypto/sahara.c b/drivers/crypto/sahara.c index a97bb6c1596c..c3dc1c04a5df 100644 --- a/drivers/crypto/sahara.c +++ b/drivers/crypto/sahara.c | |||
@@ -863,7 +863,7 @@ static struct of_device_id sahara_dt_ids[] = { | |||
863 | { .compatible = "fsl,imx27-sahara" }, | 863 | { .compatible = "fsl,imx27-sahara" }, |
864 | { /* sentinel */ } | 864 | { /* sentinel */ } |
865 | }; | 865 | }; |
866 | MODULE_DEVICE_TABLE(platform, sahara_dt_ids); | 866 | MODULE_DEVICE_TABLE(of, sahara_dt_ids); |
867 | 867 | ||
868 | static int sahara_probe(struct platform_device *pdev) | 868 | static int sahara_probe(struct platform_device *pdev) |
869 | { | 869 | { |
diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c index b4ca450947b8..d173d56dbb8c 100644 --- a/drivers/gpio/gpio-rcar.c +++ b/drivers/gpio/gpio-rcar.c | |||
@@ -49,6 +49,7 @@ struct gpio_rcar_priv { | |||
49 | #define POSNEG 0x20 | 49 | #define POSNEG 0x20 |
50 | #define EDGLEVEL 0x24 | 50 | #define EDGLEVEL 0x24 |
51 | #define FILONOFF 0x28 | 51 | #define FILONOFF 0x28 |
52 | #define BOTHEDGE 0x4c | ||
52 | 53 | ||
53 | static inline u32 gpio_rcar_read(struct gpio_rcar_priv *p, int offs) | 54 | static inline u32 gpio_rcar_read(struct gpio_rcar_priv *p, int offs) |
54 | { | 55 | { |
@@ -91,7 +92,8 @@ static void gpio_rcar_irq_enable(struct irq_data *d) | |||
91 | static void gpio_rcar_config_interrupt_input_mode(struct gpio_rcar_priv *p, | 92 | static void gpio_rcar_config_interrupt_input_mode(struct gpio_rcar_priv *p, |
92 | unsigned int hwirq, | 93 | unsigned int hwirq, |
93 | bool active_high_rising_edge, | 94 | bool active_high_rising_edge, |
94 | bool level_trigger) | 95 | bool level_trigger, |
96 | bool both) | ||
95 | { | 97 | { |
96 | unsigned long flags; | 98 | unsigned long flags; |
97 | 99 | ||
@@ -108,6 +110,10 @@ static void gpio_rcar_config_interrupt_input_mode(struct gpio_rcar_priv *p, | |||
108 | /* Configure edge or level trigger in EDGLEVEL */ | 110 | /* Configure edge or level trigger in EDGLEVEL */ |
109 | gpio_rcar_modify_bit(p, EDGLEVEL, hwirq, !level_trigger); | 111 | gpio_rcar_modify_bit(p, EDGLEVEL, hwirq, !level_trigger); |
110 | 112 | ||
113 | /* Select one edge or both edges in BOTHEDGE */ | ||
114 | if (p->config.has_both_edge_trigger) | ||
115 | gpio_rcar_modify_bit(p, BOTHEDGE, hwirq, both); | ||
116 | |||
111 | /* Select "Interrupt Input Mode" in IOINTSEL */ | 117 | /* Select "Interrupt Input Mode" in IOINTSEL */ |
112 | gpio_rcar_modify_bit(p, IOINTSEL, hwirq, true); | 118 | gpio_rcar_modify_bit(p, IOINTSEL, hwirq, true); |
113 | 119 | ||
@@ -127,16 +133,26 @@ static int gpio_rcar_irq_set_type(struct irq_data *d, unsigned int type) | |||
127 | 133 | ||
128 | switch (type & IRQ_TYPE_SENSE_MASK) { | 134 | switch (type & IRQ_TYPE_SENSE_MASK) { |
129 | case IRQ_TYPE_LEVEL_HIGH: | 135 | case IRQ_TYPE_LEVEL_HIGH: |
130 | gpio_rcar_config_interrupt_input_mode(p, hwirq, true, true); | 136 | gpio_rcar_config_interrupt_input_mode(p, hwirq, true, true, |
137 | false); | ||
131 | break; | 138 | break; |
132 | case IRQ_TYPE_LEVEL_LOW: | 139 | case IRQ_TYPE_LEVEL_LOW: |
133 | gpio_rcar_config_interrupt_input_mode(p, hwirq, false, true); | 140 | gpio_rcar_config_interrupt_input_mode(p, hwirq, false, true, |
141 | false); | ||
134 | break; | 142 | break; |
135 | case IRQ_TYPE_EDGE_RISING: | 143 | case IRQ_TYPE_EDGE_RISING: |
136 | gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false); | 144 | gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false, |
145 | false); | ||
137 | break; | 146 | break; |
138 | case IRQ_TYPE_EDGE_FALLING: | 147 | case IRQ_TYPE_EDGE_FALLING: |
139 | gpio_rcar_config_interrupt_input_mode(p, hwirq, false, false); | 148 | gpio_rcar_config_interrupt_input_mode(p, hwirq, false, false, |
149 | false); | ||
150 | break; | ||
151 | case IRQ_TYPE_EDGE_BOTH: | ||
152 | if (!p->config.has_both_edge_trigger) | ||
153 | return -EINVAL; | ||
154 | gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false, | ||
155 | true); | ||
140 | break; | 156 | break; |
141 | default: | 157 | default: |
142 | return -EINVAL; | 158 | return -EINVAL; |
@@ -333,7 +349,7 @@ static int gpio_rcar_probe(struct platform_device *pdev) | |||
333 | } | 349 | } |
334 | 350 | ||
335 | if (devm_request_irq(&pdev->dev, irq->start, | 351 | if (devm_request_irq(&pdev->dev, irq->start, |
336 | gpio_rcar_irq_handler, 0, name, p)) { | 352 | gpio_rcar_irq_handler, IRQF_SHARED, name, p)) { |
337 | dev_err(&pdev->dev, "failed to request IRQ\n"); | 353 | dev_err(&pdev->dev, "failed to request IRQ\n"); |
338 | ret = -ENOENT; | 354 | ret = -ENOENT; |
339 | goto err1; | 355 | goto err1; |
diff --git a/drivers/gpu/drm/gma500/cdv_intel_display.c b/drivers/gpu/drm/gma500/cdv_intel_display.c index 3cfd0931fbfb..82430ad8ba62 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_display.c +++ b/drivers/gpu/drm/gma500/cdv_intel_display.c | |||
@@ -1462,7 +1462,7 @@ static int cdv_intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
1462 | size_t addr = 0; | 1462 | size_t addr = 0; |
1463 | struct gtt_range *gt; | 1463 | struct gtt_range *gt; |
1464 | struct drm_gem_object *obj; | 1464 | struct drm_gem_object *obj; |
1465 | int ret; | 1465 | int ret = 0; |
1466 | 1466 | ||
1467 | /* if we want to turn of the cursor ignore width and height */ | 1467 | /* if we want to turn of the cursor ignore width and height */ |
1468 | if (!handle) { | 1468 | if (!handle) { |
@@ -1499,7 +1499,8 @@ static int cdv_intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
1499 | 1499 | ||
1500 | if (obj->size < width * height * 4) { | 1500 | if (obj->size < width * height * 4) { |
1501 | dev_dbg(dev->dev, "buffer is to small\n"); | 1501 | dev_dbg(dev->dev, "buffer is to small\n"); |
1502 | return -ENOMEM; | 1502 | ret = -ENOMEM; |
1503 | goto unref_cursor; | ||
1503 | } | 1504 | } |
1504 | 1505 | ||
1505 | gt = container_of(obj, struct gtt_range, gem); | 1506 | gt = container_of(obj, struct gtt_range, gem); |
@@ -1508,7 +1509,7 @@ static int cdv_intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
1508 | ret = psb_gtt_pin(gt); | 1509 | ret = psb_gtt_pin(gt); |
1509 | if (ret) { | 1510 | if (ret) { |
1510 | dev_err(dev->dev, "Can not pin down handle 0x%x\n", handle); | 1511 | dev_err(dev->dev, "Can not pin down handle 0x%x\n", handle); |
1511 | return ret; | 1512 | goto unref_cursor; |
1512 | } | 1513 | } |
1513 | 1514 | ||
1514 | addr = gt->offset; /* Or resource.start ??? */ | 1515 | addr = gt->offset; /* Or resource.start ??? */ |
@@ -1532,9 +1533,14 @@ static int cdv_intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
1532 | struct gtt_range, gem); | 1533 | struct gtt_range, gem); |
1533 | psb_gtt_unpin(gt); | 1534 | psb_gtt_unpin(gt); |
1534 | drm_gem_object_unreference(psb_intel_crtc->cursor_obj); | 1535 | drm_gem_object_unreference(psb_intel_crtc->cursor_obj); |
1535 | psb_intel_crtc->cursor_obj = obj; | ||
1536 | } | 1536 | } |
1537 | return 0; | 1537 | |
1538 | psb_intel_crtc->cursor_obj = obj; | ||
1539 | return ret; | ||
1540 | |||
1541 | unref_cursor: | ||
1542 | drm_gem_object_unreference(obj); | ||
1543 | return ret; | ||
1538 | } | 1544 | } |
1539 | 1545 | ||
1540 | static int cdv_intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) | 1546 | static int cdv_intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) |
@@ -1750,6 +1756,19 @@ static void cdv_intel_crtc_destroy(struct drm_crtc *crtc) | |||
1750 | kfree(psb_intel_crtc); | 1756 | kfree(psb_intel_crtc); |
1751 | } | 1757 | } |
1752 | 1758 | ||
1759 | static void cdv_intel_crtc_disable(struct drm_crtc *crtc) | ||
1760 | { | ||
1761 | struct gtt_range *gt; | ||
1762 | struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; | ||
1763 | |||
1764 | crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF); | ||
1765 | |||
1766 | if (crtc->fb) { | ||
1767 | gt = to_psb_fb(crtc->fb)->gtt; | ||
1768 | psb_gtt_unpin(gt); | ||
1769 | } | ||
1770 | } | ||
1771 | |||
1753 | const struct drm_crtc_helper_funcs cdv_intel_helper_funcs = { | 1772 | const struct drm_crtc_helper_funcs cdv_intel_helper_funcs = { |
1754 | .dpms = cdv_intel_crtc_dpms, | 1773 | .dpms = cdv_intel_crtc_dpms, |
1755 | .mode_fixup = cdv_intel_crtc_mode_fixup, | 1774 | .mode_fixup = cdv_intel_crtc_mode_fixup, |
@@ -1757,6 +1776,7 @@ const struct drm_crtc_helper_funcs cdv_intel_helper_funcs = { | |||
1757 | .mode_set_base = cdv_intel_pipe_set_base, | 1776 | .mode_set_base = cdv_intel_pipe_set_base, |
1758 | .prepare = cdv_intel_crtc_prepare, | 1777 | .prepare = cdv_intel_crtc_prepare, |
1759 | .commit = cdv_intel_crtc_commit, | 1778 | .commit = cdv_intel_crtc_commit, |
1779 | .disable = cdv_intel_crtc_disable, | ||
1760 | }; | 1780 | }; |
1761 | 1781 | ||
1762 | const struct drm_crtc_funcs cdv_intel_crtc_funcs = { | 1782 | const struct drm_crtc_funcs cdv_intel_crtc_funcs = { |
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c index 1534e220097a..8b1b6d923abe 100644 --- a/drivers/gpu/drm/gma500/framebuffer.c +++ b/drivers/gpu/drm/gma500/framebuffer.c | |||
@@ -121,8 +121,8 @@ static int psbfb_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
121 | unsigned long address; | 121 | unsigned long address; |
122 | int ret; | 122 | int ret; |
123 | unsigned long pfn; | 123 | unsigned long pfn; |
124 | /* FIXME: assumes fb at stolen base which may not be true */ | 124 | unsigned long phys_addr = (unsigned long)dev_priv->stolen_base + |
125 | unsigned long phys_addr = (unsigned long)dev_priv->stolen_base; | 125 | psbfb->gtt->offset; |
126 | 126 | ||
127 | page_num = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; | 127 | page_num = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; |
128 | address = (unsigned long)vmf->virtual_address - (vmf->pgoff << PAGE_SHIFT); | 128 | address = (unsigned long)vmf->virtual_address - (vmf->pgoff << PAGE_SHIFT); |
diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c index 6e8f42b61ff6..6666493789d1 100644 --- a/drivers/gpu/drm/gma500/psb_intel_display.c +++ b/drivers/gpu/drm/gma500/psb_intel_display.c | |||
@@ -843,7 +843,7 @@ static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
843 | struct gtt_range *cursor_gt = psb_intel_crtc->cursor_gt; | 843 | struct gtt_range *cursor_gt = psb_intel_crtc->cursor_gt; |
844 | struct drm_gem_object *obj; | 844 | struct drm_gem_object *obj; |
845 | void *tmp_dst, *tmp_src; | 845 | void *tmp_dst, *tmp_src; |
846 | int ret, i, cursor_pages; | 846 | int ret = 0, i, cursor_pages; |
847 | 847 | ||
848 | /* if we want to turn of the cursor ignore width and height */ | 848 | /* if we want to turn of the cursor ignore width and height */ |
849 | if (!handle) { | 849 | if (!handle) { |
@@ -880,7 +880,8 @@ static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
880 | 880 | ||
881 | if (obj->size < width * height * 4) { | 881 | if (obj->size < width * height * 4) { |
882 | dev_dbg(dev->dev, "buffer is to small\n"); | 882 | dev_dbg(dev->dev, "buffer is to small\n"); |
883 | return -ENOMEM; | 883 | ret = -ENOMEM; |
884 | goto unref_cursor; | ||
884 | } | 885 | } |
885 | 886 | ||
886 | gt = container_of(obj, struct gtt_range, gem); | 887 | gt = container_of(obj, struct gtt_range, gem); |
@@ -889,13 +890,14 @@ static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
889 | ret = psb_gtt_pin(gt); | 890 | ret = psb_gtt_pin(gt); |
890 | if (ret) { | 891 | if (ret) { |
891 | dev_err(dev->dev, "Can not pin down handle 0x%x\n", handle); | 892 | dev_err(dev->dev, "Can not pin down handle 0x%x\n", handle); |
892 | return ret; | 893 | goto unref_cursor; |
893 | } | 894 | } |
894 | 895 | ||
895 | if (dev_priv->ops->cursor_needs_phys) { | 896 | if (dev_priv->ops->cursor_needs_phys) { |
896 | if (cursor_gt == NULL) { | 897 | if (cursor_gt == NULL) { |
897 | dev_err(dev->dev, "No hardware cursor mem available"); | 898 | dev_err(dev->dev, "No hardware cursor mem available"); |
898 | return -ENOMEM; | 899 | ret = -ENOMEM; |
900 | goto unref_cursor; | ||
899 | } | 901 | } |
900 | 902 | ||
901 | /* Prevent overflow */ | 903 | /* Prevent overflow */ |
@@ -936,9 +938,14 @@ static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
936 | struct gtt_range, gem); | 938 | struct gtt_range, gem); |
937 | psb_gtt_unpin(gt); | 939 | psb_gtt_unpin(gt); |
938 | drm_gem_object_unreference(psb_intel_crtc->cursor_obj); | 940 | drm_gem_object_unreference(psb_intel_crtc->cursor_obj); |
939 | psb_intel_crtc->cursor_obj = obj; | ||
940 | } | 941 | } |
941 | return 0; | 942 | |
943 | psb_intel_crtc->cursor_obj = obj; | ||
944 | return ret; | ||
945 | |||
946 | unref_cursor: | ||
947 | drm_gem_object_unreference(obj); | ||
948 | return ret; | ||
942 | } | 949 | } |
943 | 950 | ||
944 | static int psb_intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) | 951 | static int psb_intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) |
@@ -1150,6 +1157,19 @@ static void psb_intel_crtc_destroy(struct drm_crtc *crtc) | |||
1150 | kfree(psb_intel_crtc); | 1157 | kfree(psb_intel_crtc); |
1151 | } | 1158 | } |
1152 | 1159 | ||
1160 | static void psb_intel_crtc_disable(struct drm_crtc *crtc) | ||
1161 | { | ||
1162 | struct gtt_range *gt; | ||
1163 | struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; | ||
1164 | |||
1165 | crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF); | ||
1166 | |||
1167 | if (crtc->fb) { | ||
1168 | gt = to_psb_fb(crtc->fb)->gtt; | ||
1169 | psb_gtt_unpin(gt); | ||
1170 | } | ||
1171 | } | ||
1172 | |||
1153 | const struct drm_crtc_helper_funcs psb_intel_helper_funcs = { | 1173 | const struct drm_crtc_helper_funcs psb_intel_helper_funcs = { |
1154 | .dpms = psb_intel_crtc_dpms, | 1174 | .dpms = psb_intel_crtc_dpms, |
1155 | .mode_fixup = psb_intel_crtc_mode_fixup, | 1175 | .mode_fixup = psb_intel_crtc_mode_fixup, |
@@ -1157,6 +1177,7 @@ const struct drm_crtc_helper_funcs psb_intel_helper_funcs = { | |||
1157 | .mode_set_base = psb_intel_pipe_set_base, | 1177 | .mode_set_base = psb_intel_pipe_set_base, |
1158 | .prepare = psb_intel_crtc_prepare, | 1178 | .prepare = psb_intel_crtc_prepare, |
1159 | .commit = psb_intel_crtc_commit, | 1179 | .commit = psb_intel_crtc_commit, |
1180 | .disable = psb_intel_crtc_disable, | ||
1160 | }; | 1181 | }; |
1161 | 1182 | ||
1162 | const struct drm_crtc_funcs psb_intel_crtc_funcs = { | 1183 | const struct drm_crtc_funcs psb_intel_crtc_funcs = { |
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 4c47b449b775..d4ea6c265ce1 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c | |||
@@ -1777,10 +1777,13 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) | |||
1777 | * arranged in priority order. | 1777 | * arranged in priority order. |
1778 | */ | 1778 | */ |
1779 | intel_ddc_get_modes(connector, &intel_sdvo->ddc); | 1779 | intel_ddc_get_modes(connector, &intel_sdvo->ddc); |
1780 | if (list_empty(&connector->probed_modes) == false) | ||
1781 | goto end; | ||
1782 | 1780 | ||
1783 | /* Fetch modes from VBT */ | 1781 | /* |
1782 | * Fetch modes from VBT. For SDVO prefer the VBT mode since some | ||
1783 | * SDVO->LVDS transcoders can't cope with the EDID mode. Since | ||
1784 | * drm_mode_probed_add adds the mode at the head of the list we add it | ||
1785 | * last. | ||
1786 | */ | ||
1784 | if (dev_priv->sdvo_lvds_vbt_mode != NULL) { | 1787 | if (dev_priv->sdvo_lvds_vbt_mode != NULL) { |
1785 | newmode = drm_mode_duplicate(connector->dev, | 1788 | newmode = drm_mode_duplicate(connector->dev, |
1786 | dev_priv->sdvo_lvds_vbt_mode); | 1789 | dev_priv->sdvo_lvds_vbt_mode); |
@@ -1792,7 +1795,6 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) | |||
1792 | } | 1795 | } |
1793 | } | 1796 | } |
1794 | 1797 | ||
1795 | end: | ||
1796 | list_for_each_entry(newmode, &connector->probed_modes, head) { | 1798 | list_for_each_entry(newmode, &connector->probed_modes, head) { |
1797 | if (newmode->type & DRM_MODE_TYPE_PREFERRED) { | 1799 | if (newmode->type & DRM_MODE_TYPE_PREFERRED) { |
1798 | intel_sdvo->sdvo_lvds_fixed_mode = | 1800 | intel_sdvo->sdvo_lvds_fixed_mode = |
@@ -2790,12 +2792,6 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob) | |||
2790 | SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915; | 2792 | SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915; |
2791 | } | 2793 | } |
2792 | 2794 | ||
2793 | /* Only enable the hotplug irq if we need it, to work around noisy | ||
2794 | * hotplug lines. | ||
2795 | */ | ||
2796 | if (intel_sdvo->hotplug_active) | ||
2797 | intel_encoder->hpd_pin = HPD_SDVO_B ? HPD_SDVO_B : HPD_SDVO_C; | ||
2798 | |||
2799 | intel_encoder->compute_config = intel_sdvo_compute_config; | 2795 | intel_encoder->compute_config = intel_sdvo_compute_config; |
2800 | intel_encoder->disable = intel_disable_sdvo; | 2796 | intel_encoder->disable = intel_disable_sdvo; |
2801 | intel_encoder->mode_set = intel_sdvo_mode_set; | 2797 | intel_encoder->mode_set = intel_sdvo_mode_set; |
@@ -2814,6 +2810,14 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob) | |||
2814 | goto err_output; | 2810 | goto err_output; |
2815 | } | 2811 | } |
2816 | 2812 | ||
2813 | /* Only enable the hotplug irq if we need it, to work around noisy | ||
2814 | * hotplug lines. | ||
2815 | */ | ||
2816 | if (intel_sdvo->hotplug_active) { | ||
2817 | intel_encoder->hpd_pin = | ||
2818 | intel_sdvo->is_sdvob ? HPD_SDVO_B : HPD_SDVO_C; | ||
2819 | } | ||
2820 | |||
2817 | /* | 2821 | /* |
2818 | * Cloning SDVO with anything is often impossible, since the SDVO | 2822 | * Cloning SDVO with anything is often impossible, since the SDVO |
2819 | * encoder can request a special input timing mode. And even if that's | 2823 | * encoder can request a special input timing mode. And even if that's |
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index dc3ae5c56f56..d39a5cede0b0 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c | |||
@@ -264,9 +264,12 @@ static struct mt_class mt_classes[] = { | |||
264 | static void mt_free_input_name(struct hid_input *hi) | 264 | static void mt_free_input_name(struct hid_input *hi) |
265 | { | 265 | { |
266 | struct hid_device *hdev = hi->report->device; | 266 | struct hid_device *hdev = hi->report->device; |
267 | const char *name = hi->input->name; | ||
267 | 268 | ||
268 | if (hi->input->name != hdev->name) | 269 | if (name != hdev->name) { |
269 | kfree(hi->input->name); | 270 | hi->input->name = hdev->name; |
271 | kfree(name); | ||
272 | } | ||
270 | } | 273 | } |
271 | 274 | ||
272 | static ssize_t mt_show_quirks(struct device *dev, | 275 | static ssize_t mt_show_quirks(struct device *dev, |
@@ -1040,11 +1043,11 @@ static void mt_remove(struct hid_device *hdev) | |||
1040 | struct hid_input *hi; | 1043 | struct hid_input *hi; |
1041 | 1044 | ||
1042 | sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group); | 1045 | sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group); |
1043 | hid_hw_stop(hdev); | ||
1044 | |||
1045 | list_for_each_entry(hi, &hdev->inputs, list) | 1046 | list_for_each_entry(hi, &hdev->inputs, list) |
1046 | mt_free_input_name(hi); | 1047 | mt_free_input_name(hi); |
1047 | 1048 | ||
1049 | hid_hw_stop(hdev); | ||
1050 | |||
1048 | kfree(td); | 1051 | kfree(td); |
1049 | hid_set_drvdata(hdev, NULL); | 1052 | hid_set_drvdata(hdev, NULL); |
1050 | } | 1053 | } |
diff --git a/drivers/hwmon/adm1021.c b/drivers/hwmon/adm1021.c index 7e76922a4ba9..f920619cd6da 100644 --- a/drivers/hwmon/adm1021.c +++ b/drivers/hwmon/adm1021.c | |||
@@ -331,26 +331,68 @@ static int adm1021_detect(struct i2c_client *client, | |||
331 | man_id = i2c_smbus_read_byte_data(client, ADM1021_REG_MAN_ID); | 331 | man_id = i2c_smbus_read_byte_data(client, ADM1021_REG_MAN_ID); |
332 | dev_id = i2c_smbus_read_byte_data(client, ADM1021_REG_DEV_ID); | 332 | dev_id = i2c_smbus_read_byte_data(client, ADM1021_REG_DEV_ID); |
333 | 333 | ||
334 | if (man_id < 0 || dev_id < 0) | ||
335 | return -ENODEV; | ||
336 | |||
334 | if (man_id == 0x4d && dev_id == 0x01) | 337 | if (man_id == 0x4d && dev_id == 0x01) |
335 | type_name = "max1617a"; | 338 | type_name = "max1617a"; |
336 | else if (man_id == 0x41) { | 339 | else if (man_id == 0x41) { |
337 | if ((dev_id & 0xF0) == 0x30) | 340 | if ((dev_id & 0xF0) == 0x30) |
338 | type_name = "adm1023"; | 341 | type_name = "adm1023"; |
339 | else | 342 | else if ((dev_id & 0xF0) == 0x00) |
340 | type_name = "adm1021"; | 343 | type_name = "adm1021"; |
344 | else | ||
345 | return -ENODEV; | ||
341 | } else if (man_id == 0x49) | 346 | } else if (man_id == 0x49) |
342 | type_name = "thmc10"; | 347 | type_name = "thmc10"; |
343 | else if (man_id == 0x23) | 348 | else if (man_id == 0x23) |
344 | type_name = "gl523sm"; | 349 | type_name = "gl523sm"; |
345 | else if (man_id == 0x54) | 350 | else if (man_id == 0x54) |
346 | type_name = "mc1066"; | 351 | type_name = "mc1066"; |
347 | /* LM84 Mfr ID in a different place, and it has more unused bits */ | 352 | else { |
348 | else if (conv_rate == 0x00 | 353 | int lte, rte, lhi, rhi, llo, rlo; |
349 | && (config & 0x7F) == 0x00 | 354 | |
350 | && (status & 0xAB) == 0x00) | 355 | /* extra checks for LM84 and MAX1617 to avoid misdetections */ |
351 | type_name = "lm84"; | 356 | |
352 | else | 357 | llo = i2c_smbus_read_byte_data(client, ADM1021_REG_THYST_R(0)); |
353 | type_name = "max1617"; | 358 | rlo = i2c_smbus_read_byte_data(client, ADM1021_REG_THYST_R(1)); |
359 | |||
360 | /* fail if any of the additional register reads failed */ | ||
361 | if (llo < 0 || rlo < 0) | ||
362 | return -ENODEV; | ||
363 | |||
364 | lte = i2c_smbus_read_byte_data(client, ADM1021_REG_TEMP(0)); | ||
365 | rte = i2c_smbus_read_byte_data(client, ADM1021_REG_TEMP(1)); | ||
366 | lhi = i2c_smbus_read_byte_data(client, ADM1021_REG_TOS_R(0)); | ||
367 | rhi = i2c_smbus_read_byte_data(client, ADM1021_REG_TOS_R(1)); | ||
368 | |||
369 | /* | ||
370 | * Fail for negative temperatures and negative high limits. | ||
371 | * This check also catches read errors on the tested registers. | ||
372 | */ | ||
373 | if ((s8)lte < 0 || (s8)rte < 0 || (s8)lhi < 0 || (s8)rhi < 0) | ||
374 | return -ENODEV; | ||
375 | |||
376 | /* fail if all registers hold the same value */ | ||
377 | if (lte == rte && lte == lhi && lte == rhi && lte == llo | ||
378 | && lte == rlo) | ||
379 | return -ENODEV; | ||
380 | |||
381 | /* | ||
382 | * LM84 Mfr ID is in a different place, | ||
383 | * and it has more unused bits. | ||
384 | */ | ||
385 | if (conv_rate == 0x00 | ||
386 | && (config & 0x7F) == 0x00 | ||
387 | && (status & 0xAB) == 0x00) { | ||
388 | type_name = "lm84"; | ||
389 | } else { | ||
390 | /* fail if low limits are larger than high limits */ | ||
391 | if ((s8)llo > lhi || (s8)rlo > rhi) | ||
392 | return -ENODEV; | ||
393 | type_name = "max1617"; | ||
394 | } | ||
395 | } | ||
354 | 396 | ||
355 | pr_debug("Detected chip %s at adapter %d, address 0x%02x.\n", | 397 | pr_debug("Detected chip %s at adapter %d, address 0x%02x.\n", |
356 | type_name, i2c_adapter_id(adapter), client->addr); | 398 | type_name, i2c_adapter_id(adapter), client->addr); |
diff --git a/drivers/md/bcache/Kconfig b/drivers/md/bcache/Kconfig index 05c220d05e23..f950c9d29f3e 100644 --- a/drivers/md/bcache/Kconfig +++ b/drivers/md/bcache/Kconfig | |||
@@ -1,7 +1,6 @@ | |||
1 | 1 | ||
2 | config BCACHE | 2 | config BCACHE |
3 | tristate "Block device as cache" | 3 | tristate "Block device as cache" |
4 | select CLOSURES | ||
5 | ---help--- | 4 | ---help--- |
6 | Allows a block device to be used as cache for other devices; uses | 5 | Allows a block device to be used as cache for other devices; uses |
7 | a btree for indexing and the layout is optimized for SSDs. | 6 | a btree for indexing and the layout is optimized for SSDs. |
diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h index 340146d7c17f..d3e15b42a4ab 100644 --- a/drivers/md/bcache/bcache.h +++ b/drivers/md/bcache/bcache.h | |||
@@ -1241,7 +1241,7 @@ void bch_cache_set_stop(struct cache_set *); | |||
1241 | struct cache_set *bch_cache_set_alloc(struct cache_sb *); | 1241 | struct cache_set *bch_cache_set_alloc(struct cache_sb *); |
1242 | void bch_btree_cache_free(struct cache_set *); | 1242 | void bch_btree_cache_free(struct cache_set *); |
1243 | int bch_btree_cache_alloc(struct cache_set *); | 1243 | int bch_btree_cache_alloc(struct cache_set *); |
1244 | void bch_writeback_init_cached_dev(struct cached_dev *); | 1244 | void bch_cached_dev_writeback_init(struct cached_dev *); |
1245 | void bch_moving_init_cache_set(struct cache_set *); | 1245 | void bch_moving_init_cache_set(struct cache_set *); |
1246 | 1246 | ||
1247 | void bch_cache_allocator_exit(struct cache *ca); | 1247 | void bch_cache_allocator_exit(struct cache *ca); |
diff --git a/drivers/md/bcache/stats.c b/drivers/md/bcache/stats.c index 64e679449c2a..b8730e714d69 100644 --- a/drivers/md/bcache/stats.c +++ b/drivers/md/bcache/stats.c | |||
@@ -93,24 +93,6 @@ static struct attribute *bch_stats_files[] = { | |||
93 | }; | 93 | }; |
94 | static KTYPE(bch_stats); | 94 | static KTYPE(bch_stats); |
95 | 95 | ||
96 | static void scale_accounting(unsigned long data); | ||
97 | |||
98 | void bch_cache_accounting_init(struct cache_accounting *acc, | ||
99 | struct closure *parent) | ||
100 | { | ||
101 | kobject_init(&acc->total.kobj, &bch_stats_ktype); | ||
102 | kobject_init(&acc->five_minute.kobj, &bch_stats_ktype); | ||
103 | kobject_init(&acc->hour.kobj, &bch_stats_ktype); | ||
104 | kobject_init(&acc->day.kobj, &bch_stats_ktype); | ||
105 | |||
106 | closure_init(&acc->cl, parent); | ||
107 | init_timer(&acc->timer); | ||
108 | acc->timer.expires = jiffies + accounting_delay; | ||
109 | acc->timer.data = (unsigned long) acc; | ||
110 | acc->timer.function = scale_accounting; | ||
111 | add_timer(&acc->timer); | ||
112 | } | ||
113 | |||
114 | int bch_cache_accounting_add_kobjs(struct cache_accounting *acc, | 96 | int bch_cache_accounting_add_kobjs(struct cache_accounting *acc, |
115 | struct kobject *parent) | 97 | struct kobject *parent) |
116 | { | 98 | { |
@@ -244,3 +226,19 @@ void bch_mark_sectors_bypassed(struct search *s, int sectors) | |||
244 | atomic_add(sectors, &dc->accounting.collector.sectors_bypassed); | 226 | atomic_add(sectors, &dc->accounting.collector.sectors_bypassed); |
245 | atomic_add(sectors, &s->op.c->accounting.collector.sectors_bypassed); | 227 | atomic_add(sectors, &s->op.c->accounting.collector.sectors_bypassed); |
246 | } | 228 | } |
229 | |||
230 | void bch_cache_accounting_init(struct cache_accounting *acc, | ||
231 | struct closure *parent) | ||
232 | { | ||
233 | kobject_init(&acc->total.kobj, &bch_stats_ktype); | ||
234 | kobject_init(&acc->five_minute.kobj, &bch_stats_ktype); | ||
235 | kobject_init(&acc->hour.kobj, &bch_stats_ktype); | ||
236 | kobject_init(&acc->day.kobj, &bch_stats_ktype); | ||
237 | |||
238 | closure_init(&acc->cl, parent); | ||
239 | init_timer(&acc->timer); | ||
240 | acc->timer.expires = jiffies + accounting_delay; | ||
241 | acc->timer.data = (unsigned long) acc; | ||
242 | acc->timer.function = scale_accounting; | ||
243 | add_timer(&acc->timer); | ||
244 | } | ||
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index c8046bc4aa57..f88e2b653a3f 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c | |||
@@ -634,11 +634,10 @@ static int open_dev(struct block_device *b, fmode_t mode) | |||
634 | return 0; | 634 | return 0; |
635 | } | 635 | } |
636 | 636 | ||
637 | static int release_dev(struct gendisk *b, fmode_t mode) | 637 | static void release_dev(struct gendisk *b, fmode_t mode) |
638 | { | 638 | { |
639 | struct bcache_device *d = b->private_data; | 639 | struct bcache_device *d = b->private_data; |
640 | closure_put(&d->cl); | 640 | closure_put(&d->cl); |
641 | return 0; | ||
642 | } | 641 | } |
643 | 642 | ||
644 | static int ioctl_dev(struct block_device *b, fmode_t mode, | 643 | static int ioctl_dev(struct block_device *b, fmode_t mode, |
@@ -732,8 +731,7 @@ static void bcache_device_free(struct bcache_device *d) | |||
732 | 731 | ||
733 | if (d->c) | 732 | if (d->c) |
734 | bcache_device_detach(d); | 733 | bcache_device_detach(d); |
735 | 734 | if (d->disk && d->disk->flags & GENHD_FL_UP) | |
736 | if (d->disk) | ||
737 | del_gendisk(d->disk); | 735 | del_gendisk(d->disk); |
738 | if (d->disk && d->disk->queue) | 736 | if (d->disk && d->disk->queue) |
739 | blk_cleanup_queue(d->disk->queue); | 737 | blk_cleanup_queue(d->disk->queue); |
@@ -756,12 +754,9 @@ static int bcache_device_init(struct bcache_device *d, unsigned block_size) | |||
756 | if (!(d->bio_split = bioset_create(4, offsetof(struct bbio, bio))) || | 754 | if (!(d->bio_split = bioset_create(4, offsetof(struct bbio, bio))) || |
757 | !(d->unaligned_bvec = mempool_create_kmalloc_pool(1, | 755 | !(d->unaligned_bvec = mempool_create_kmalloc_pool(1, |
758 | sizeof(struct bio_vec) * BIO_MAX_PAGES)) || | 756 | sizeof(struct bio_vec) * BIO_MAX_PAGES)) || |
759 | bio_split_pool_init(&d->bio_split_hook)) | 757 | bio_split_pool_init(&d->bio_split_hook) || |
760 | 758 | !(d->disk = alloc_disk(1)) || | |
761 | return -ENOMEM; | 759 | !(q = blk_alloc_queue(GFP_KERNEL))) |
762 | |||
763 | d->disk = alloc_disk(1); | ||
764 | if (!d->disk) | ||
765 | return -ENOMEM; | 760 | return -ENOMEM; |
766 | 761 | ||
767 | snprintf(d->disk->disk_name, DISK_NAME_LEN, "bcache%i", bcache_minor); | 762 | snprintf(d->disk->disk_name, DISK_NAME_LEN, "bcache%i", bcache_minor); |
@@ -771,10 +766,6 @@ static int bcache_device_init(struct bcache_device *d, unsigned block_size) | |||
771 | d->disk->fops = &bcache_ops; | 766 | d->disk->fops = &bcache_ops; |
772 | d->disk->private_data = d; | 767 | d->disk->private_data = d; |
773 | 768 | ||
774 | q = blk_alloc_queue(GFP_KERNEL); | ||
775 | if (!q) | ||
776 | return -ENOMEM; | ||
777 | |||
778 | blk_queue_make_request(q, NULL); | 769 | blk_queue_make_request(q, NULL); |
779 | d->disk->queue = q; | 770 | d->disk->queue = q; |
780 | q->queuedata = d; | 771 | q->queuedata = d; |
@@ -999,14 +990,17 @@ static void cached_dev_free(struct closure *cl) | |||
999 | 990 | ||
1000 | mutex_lock(&bch_register_lock); | 991 | mutex_lock(&bch_register_lock); |
1001 | 992 | ||
1002 | bd_unlink_disk_holder(dc->bdev, dc->disk.disk); | 993 | if (atomic_read(&dc->running)) |
994 | bd_unlink_disk_holder(dc->bdev, dc->disk.disk); | ||
1003 | bcache_device_free(&dc->disk); | 995 | bcache_device_free(&dc->disk); |
1004 | list_del(&dc->list); | 996 | list_del(&dc->list); |
1005 | 997 | ||
1006 | mutex_unlock(&bch_register_lock); | 998 | mutex_unlock(&bch_register_lock); |
1007 | 999 | ||
1008 | if (!IS_ERR_OR_NULL(dc->bdev)) { | 1000 | if (!IS_ERR_OR_NULL(dc->bdev)) { |
1009 | blk_sync_queue(bdev_get_queue(dc->bdev)); | 1001 | if (dc->bdev->bd_disk) |
1002 | blk_sync_queue(bdev_get_queue(dc->bdev)); | ||
1003 | |||
1010 | blkdev_put(dc->bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); | 1004 | blkdev_put(dc->bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); |
1011 | } | 1005 | } |
1012 | 1006 | ||
@@ -1028,73 +1022,67 @@ static void cached_dev_flush(struct closure *cl) | |||
1028 | 1022 | ||
1029 | static int cached_dev_init(struct cached_dev *dc, unsigned block_size) | 1023 | static int cached_dev_init(struct cached_dev *dc, unsigned block_size) |
1030 | { | 1024 | { |
1031 | int err; | 1025 | int ret; |
1032 | struct io *io; | 1026 | struct io *io; |
1033 | 1027 | struct request_queue *q = bdev_get_queue(dc->bdev); | |
1034 | closure_init(&dc->disk.cl, NULL); | ||
1035 | set_closure_fn(&dc->disk.cl, cached_dev_flush, system_wq); | ||
1036 | 1028 | ||
1037 | __module_get(THIS_MODULE); | 1029 | __module_get(THIS_MODULE); |
1038 | INIT_LIST_HEAD(&dc->list); | 1030 | INIT_LIST_HEAD(&dc->list); |
1031 | closure_init(&dc->disk.cl, NULL); | ||
1032 | set_closure_fn(&dc->disk.cl, cached_dev_flush, system_wq); | ||
1039 | kobject_init(&dc->disk.kobj, &bch_cached_dev_ktype); | 1033 | kobject_init(&dc->disk.kobj, &bch_cached_dev_ktype); |
1040 | |||
1041 | bch_cache_accounting_init(&dc->accounting, &dc->disk.cl); | ||
1042 | |||
1043 | err = bcache_device_init(&dc->disk, block_size); | ||
1044 | if (err) | ||
1045 | goto err; | ||
1046 | |||
1047 | spin_lock_init(&dc->io_lock); | ||
1048 | closure_init_unlocked(&dc->sb_write); | ||
1049 | INIT_WORK(&dc->detach, cached_dev_detach_finish); | 1034 | INIT_WORK(&dc->detach, cached_dev_detach_finish); |
1035 | closure_init_unlocked(&dc->sb_write); | ||
1036 | INIT_LIST_HEAD(&dc->io_lru); | ||
1037 | spin_lock_init(&dc->io_lock); | ||
1038 | bch_cache_accounting_init(&dc->accounting, &dc->disk.cl); | ||
1050 | 1039 | ||
1051 | dc->sequential_merge = true; | 1040 | dc->sequential_merge = true; |
1052 | dc->sequential_cutoff = 4 << 20; | 1041 | dc->sequential_cutoff = 4 << 20; |
1053 | 1042 | ||
1054 | INIT_LIST_HEAD(&dc->io_lru); | ||
1055 | dc->sb_bio.bi_max_vecs = 1; | ||
1056 | dc->sb_bio.bi_io_vec = dc->sb_bio.bi_inline_vecs; | ||
1057 | |||
1058 | for (io = dc->io; io < dc->io + RECENT_IO; io++) { | 1043 | for (io = dc->io; io < dc->io + RECENT_IO; io++) { |
1059 | list_add(&io->lru, &dc->io_lru); | 1044 | list_add(&io->lru, &dc->io_lru); |
1060 | hlist_add_head(&io->hash, dc->io_hash + RECENT_IO); | 1045 | hlist_add_head(&io->hash, dc->io_hash + RECENT_IO); |
1061 | } | 1046 | } |
1062 | 1047 | ||
1063 | bch_writeback_init_cached_dev(dc); | 1048 | ret = bcache_device_init(&dc->disk, block_size); |
1049 | if (ret) | ||
1050 | return ret; | ||
1051 | |||
1052 | set_capacity(dc->disk.disk, | ||
1053 | dc->bdev->bd_part->nr_sects - dc->sb.data_offset); | ||
1054 | |||
1055 | dc->disk.disk->queue->backing_dev_info.ra_pages = | ||
1056 | max(dc->disk.disk->queue->backing_dev_info.ra_pages, | ||
1057 | q->backing_dev_info.ra_pages); | ||
1058 | |||
1059 | bch_cached_dev_request_init(dc); | ||
1060 | bch_cached_dev_writeback_init(dc); | ||
1064 | return 0; | 1061 | return 0; |
1065 | err: | ||
1066 | bcache_device_stop(&dc->disk); | ||
1067 | return err; | ||
1068 | } | 1062 | } |
1069 | 1063 | ||
1070 | /* Cached device - bcache superblock */ | 1064 | /* Cached device - bcache superblock */ |
1071 | 1065 | ||
1072 | static const char *register_bdev(struct cache_sb *sb, struct page *sb_page, | 1066 | static void register_bdev(struct cache_sb *sb, struct page *sb_page, |
1073 | struct block_device *bdev, | 1067 | struct block_device *bdev, |
1074 | struct cached_dev *dc) | 1068 | struct cached_dev *dc) |
1075 | { | 1069 | { |
1076 | char name[BDEVNAME_SIZE]; | 1070 | char name[BDEVNAME_SIZE]; |
1077 | const char *err = "cannot allocate memory"; | 1071 | const char *err = "cannot allocate memory"; |
1078 | struct gendisk *g; | ||
1079 | struct cache_set *c; | 1072 | struct cache_set *c; |
1080 | 1073 | ||
1081 | if (!dc || cached_dev_init(dc, sb->block_size << 9) != 0) | ||
1082 | return err; | ||
1083 | |||
1084 | memcpy(&dc->sb, sb, sizeof(struct cache_sb)); | 1074 | memcpy(&dc->sb, sb, sizeof(struct cache_sb)); |
1085 | dc->sb_bio.bi_io_vec[0].bv_page = sb_page; | ||
1086 | dc->bdev = bdev; | 1075 | dc->bdev = bdev; |
1087 | dc->bdev->bd_holder = dc; | 1076 | dc->bdev->bd_holder = dc; |
1088 | 1077 | ||
1089 | g = dc->disk.disk; | 1078 | bio_init(&dc->sb_bio); |
1090 | 1079 | dc->sb_bio.bi_max_vecs = 1; | |
1091 | set_capacity(g, dc->bdev->bd_part->nr_sects - dc->sb.data_offset); | 1080 | dc->sb_bio.bi_io_vec = dc->sb_bio.bi_inline_vecs; |
1092 | 1081 | dc->sb_bio.bi_io_vec[0].bv_page = sb_page; | |
1093 | g->queue->backing_dev_info.ra_pages = | 1082 | get_page(sb_page); |
1094 | max(g->queue->backing_dev_info.ra_pages, | ||
1095 | bdev->bd_queue->backing_dev_info.ra_pages); | ||
1096 | 1083 | ||
1097 | bch_cached_dev_request_init(dc); | 1084 | if (cached_dev_init(dc, sb->block_size << 9)) |
1085 | goto err; | ||
1098 | 1086 | ||
1099 | err = "error creating kobject"; | 1087 | err = "error creating kobject"; |
1100 | if (kobject_add(&dc->disk.kobj, &part_to_dev(bdev->bd_part)->kobj, | 1088 | if (kobject_add(&dc->disk.kobj, &part_to_dev(bdev->bd_part)->kobj, |
@@ -1103,6 +1091,8 @@ static const char *register_bdev(struct cache_sb *sb, struct page *sb_page, | |||
1103 | if (bch_cache_accounting_add_kobjs(&dc->accounting, &dc->disk.kobj)) | 1091 | if (bch_cache_accounting_add_kobjs(&dc->accounting, &dc->disk.kobj)) |
1104 | goto err; | 1092 | goto err; |
1105 | 1093 | ||
1094 | pr_info("registered backing device %s", bdevname(bdev, name)); | ||
1095 | |||
1106 | list_add(&dc->list, &uncached_devices); | 1096 | list_add(&dc->list, &uncached_devices); |
1107 | list_for_each_entry(c, &bch_cache_sets, list) | 1097 | list_for_each_entry(c, &bch_cache_sets, list) |
1108 | bch_cached_dev_attach(dc, c); | 1098 | bch_cached_dev_attach(dc, c); |
@@ -1111,15 +1101,10 @@ static const char *register_bdev(struct cache_sb *sb, struct page *sb_page, | |||
1111 | BDEV_STATE(&dc->sb) == BDEV_STATE_STALE) | 1101 | BDEV_STATE(&dc->sb) == BDEV_STATE_STALE) |
1112 | bch_cached_dev_run(dc); | 1102 | bch_cached_dev_run(dc); |
1113 | 1103 | ||
1114 | return NULL; | 1104 | return; |
1115 | err: | 1105 | err: |
1116 | kobject_put(&dc->disk.kobj); | ||
1117 | pr_notice("error opening %s: %s", bdevname(bdev, name), err); | 1106 | pr_notice("error opening %s: %s", bdevname(bdev, name), err); |
1118 | /* | 1107 | bcache_device_stop(&dc->disk); |
1119 | * Return NULL instead of an error because kobject_put() cleans | ||
1120 | * everything up | ||
1121 | */ | ||
1122 | return NULL; | ||
1123 | } | 1108 | } |
1124 | 1109 | ||
1125 | /* Flash only volumes */ | 1110 | /* Flash only volumes */ |
@@ -1717,20 +1702,11 @@ static int cache_alloc(struct cache_sb *sb, struct cache *ca) | |||
1717 | size_t free; | 1702 | size_t free; |
1718 | struct bucket *b; | 1703 | struct bucket *b; |
1719 | 1704 | ||
1720 | if (!ca) | ||
1721 | return -ENOMEM; | ||
1722 | |||
1723 | __module_get(THIS_MODULE); | 1705 | __module_get(THIS_MODULE); |
1724 | kobject_init(&ca->kobj, &bch_cache_ktype); | 1706 | kobject_init(&ca->kobj, &bch_cache_ktype); |
1725 | 1707 | ||
1726 | memcpy(&ca->sb, sb, sizeof(struct cache_sb)); | ||
1727 | |||
1728 | INIT_LIST_HEAD(&ca->discards); | 1708 | INIT_LIST_HEAD(&ca->discards); |
1729 | 1709 | ||
1730 | bio_init(&ca->sb_bio); | ||
1731 | ca->sb_bio.bi_max_vecs = 1; | ||
1732 | ca->sb_bio.bi_io_vec = ca->sb_bio.bi_inline_vecs; | ||
1733 | |||
1734 | bio_init(&ca->journal.bio); | 1710 | bio_init(&ca->journal.bio); |
1735 | ca->journal.bio.bi_max_vecs = 8; | 1711 | ca->journal.bio.bi_max_vecs = 8; |
1736 | ca->journal.bio.bi_io_vec = ca->journal.bio.bi_inline_vecs; | 1712 | ca->journal.bio.bi_io_vec = ca->journal.bio.bi_inline_vecs; |
@@ -1742,18 +1718,17 @@ static int cache_alloc(struct cache_sb *sb, struct cache *ca) | |||
1742 | !init_fifo(&ca->free_inc, free << 2, GFP_KERNEL) || | 1718 | !init_fifo(&ca->free_inc, free << 2, GFP_KERNEL) || |
1743 | !init_fifo(&ca->unused, free << 2, GFP_KERNEL) || | 1719 | !init_fifo(&ca->unused, free << 2, GFP_KERNEL) || |
1744 | !init_heap(&ca->heap, free << 3, GFP_KERNEL) || | 1720 | !init_heap(&ca->heap, free << 3, GFP_KERNEL) || |
1745 | !(ca->buckets = vmalloc(sizeof(struct bucket) * | 1721 | !(ca->buckets = vzalloc(sizeof(struct bucket) * |
1746 | ca->sb.nbuckets)) || | 1722 | ca->sb.nbuckets)) || |
1747 | !(ca->prio_buckets = kzalloc(sizeof(uint64_t) * prio_buckets(ca) * | 1723 | !(ca->prio_buckets = kzalloc(sizeof(uint64_t) * prio_buckets(ca) * |
1748 | 2, GFP_KERNEL)) || | 1724 | 2, GFP_KERNEL)) || |
1749 | !(ca->disk_buckets = alloc_bucket_pages(GFP_KERNEL, ca)) || | 1725 | !(ca->disk_buckets = alloc_bucket_pages(GFP_KERNEL, ca)) || |
1750 | !(ca->alloc_workqueue = alloc_workqueue("bch_allocator", 0, 1)) || | 1726 | !(ca->alloc_workqueue = alloc_workqueue("bch_allocator", 0, 1)) || |
1751 | bio_split_pool_init(&ca->bio_split_hook)) | 1727 | bio_split_pool_init(&ca->bio_split_hook)) |
1752 | goto err; | 1728 | return -ENOMEM; |
1753 | 1729 | ||
1754 | ca->prio_last_buckets = ca->prio_buckets + prio_buckets(ca); | 1730 | ca->prio_last_buckets = ca->prio_buckets + prio_buckets(ca); |
1755 | 1731 | ||
1756 | memset(ca->buckets, 0, ca->sb.nbuckets * sizeof(struct bucket)); | ||
1757 | for_each_bucket(b, ca) | 1732 | for_each_bucket(b, ca) |
1758 | atomic_set(&b->pin, 0); | 1733 | atomic_set(&b->pin, 0); |
1759 | 1734 | ||
@@ -1766,22 +1741,28 @@ err: | |||
1766 | return -ENOMEM; | 1741 | return -ENOMEM; |
1767 | } | 1742 | } |
1768 | 1743 | ||
1769 | static const char *register_cache(struct cache_sb *sb, struct page *sb_page, | 1744 | static void register_cache(struct cache_sb *sb, struct page *sb_page, |
1770 | struct block_device *bdev, struct cache *ca) | 1745 | struct block_device *bdev, struct cache *ca) |
1771 | { | 1746 | { |
1772 | char name[BDEVNAME_SIZE]; | 1747 | char name[BDEVNAME_SIZE]; |
1773 | const char *err = "cannot allocate memory"; | 1748 | const char *err = "cannot allocate memory"; |
1774 | 1749 | ||
1775 | if (cache_alloc(sb, ca) != 0) | 1750 | memcpy(&ca->sb, sb, sizeof(struct cache_sb)); |
1776 | return err; | ||
1777 | |||
1778 | ca->sb_bio.bi_io_vec[0].bv_page = sb_page; | ||
1779 | ca->bdev = bdev; | 1751 | ca->bdev = bdev; |
1780 | ca->bdev->bd_holder = ca; | 1752 | ca->bdev->bd_holder = ca; |
1781 | 1753 | ||
1754 | bio_init(&ca->sb_bio); | ||
1755 | ca->sb_bio.bi_max_vecs = 1; | ||
1756 | ca->sb_bio.bi_io_vec = ca->sb_bio.bi_inline_vecs; | ||
1757 | ca->sb_bio.bi_io_vec[0].bv_page = sb_page; | ||
1758 | get_page(sb_page); | ||
1759 | |||
1782 | if (blk_queue_discard(bdev_get_queue(ca->bdev))) | 1760 | if (blk_queue_discard(bdev_get_queue(ca->bdev))) |
1783 | ca->discard = CACHE_DISCARD(&ca->sb); | 1761 | ca->discard = CACHE_DISCARD(&ca->sb); |
1784 | 1762 | ||
1763 | if (cache_alloc(sb, ca) != 0) | ||
1764 | goto err; | ||
1765 | |||
1785 | err = "error creating kobject"; | 1766 | err = "error creating kobject"; |
1786 | if (kobject_add(&ca->kobj, &part_to_dev(bdev->bd_part)->kobj, "bcache")) | 1767 | if (kobject_add(&ca->kobj, &part_to_dev(bdev->bd_part)->kobj, "bcache")) |
1787 | goto err; | 1768 | goto err; |
@@ -1791,15 +1772,10 @@ static const char *register_cache(struct cache_sb *sb, struct page *sb_page, | |||
1791 | goto err; | 1772 | goto err; |
1792 | 1773 | ||
1793 | pr_info("registered cache device %s", bdevname(bdev, name)); | 1774 | pr_info("registered cache device %s", bdevname(bdev, name)); |
1794 | 1775 | return; | |
1795 | return NULL; | ||
1796 | err: | 1776 | err: |
1777 | pr_notice("error opening %s: %s", bdevname(bdev, name), err); | ||
1797 | kobject_put(&ca->kobj); | 1778 | kobject_put(&ca->kobj); |
1798 | pr_info("error opening %s: %s", bdevname(bdev, name), err); | ||
1799 | /* Return NULL instead of an error because kobject_put() cleans | ||
1800 | * everything up | ||
1801 | */ | ||
1802 | return NULL; | ||
1803 | } | 1779 | } |
1804 | 1780 | ||
1805 | /* Global interfaces/init */ | 1781 | /* Global interfaces/init */ |
@@ -1833,12 +1809,15 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr, | |||
1833 | bdev = blkdev_get_by_path(strim(path), | 1809 | bdev = blkdev_get_by_path(strim(path), |
1834 | FMODE_READ|FMODE_WRITE|FMODE_EXCL, | 1810 | FMODE_READ|FMODE_WRITE|FMODE_EXCL, |
1835 | sb); | 1811 | sb); |
1836 | if (bdev == ERR_PTR(-EBUSY)) | 1812 | if (IS_ERR(bdev)) { |
1837 | err = "device busy"; | 1813 | if (bdev == ERR_PTR(-EBUSY)) |
1838 | 1814 | err = "device busy"; | |
1839 | if (IS_ERR(bdev) || | ||
1840 | set_blocksize(bdev, 4096)) | ||
1841 | goto err; | 1815 | goto err; |
1816 | } | ||
1817 | |||
1818 | err = "failed to set blocksize"; | ||
1819 | if (set_blocksize(bdev, 4096)) | ||
1820 | goto err_close; | ||
1842 | 1821 | ||
1843 | err = read_super(sb, bdev, &sb_page); | 1822 | err = read_super(sb, bdev, &sb_page); |
1844 | if (err) | 1823 | if (err) |
@@ -1846,33 +1825,33 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr, | |||
1846 | 1825 | ||
1847 | if (SB_IS_BDEV(sb)) { | 1826 | if (SB_IS_BDEV(sb)) { |
1848 | struct cached_dev *dc = kzalloc(sizeof(*dc), GFP_KERNEL); | 1827 | struct cached_dev *dc = kzalloc(sizeof(*dc), GFP_KERNEL); |
1828 | if (!dc) | ||
1829 | goto err_close; | ||
1849 | 1830 | ||
1850 | err = register_bdev(sb, sb_page, bdev, dc); | 1831 | register_bdev(sb, sb_page, bdev, dc); |
1851 | } else { | 1832 | } else { |
1852 | struct cache *ca = kzalloc(sizeof(*ca), GFP_KERNEL); | 1833 | struct cache *ca = kzalloc(sizeof(*ca), GFP_KERNEL); |
1834 | if (!ca) | ||
1835 | goto err_close; | ||
1853 | 1836 | ||
1854 | err = register_cache(sb, sb_page, bdev, ca); | 1837 | register_cache(sb, sb_page, bdev, ca); |
1855 | } | 1838 | } |
1856 | 1839 | out: | |
1857 | if (err) { | 1840 | if (sb_page) |
1858 | /* register_(bdev|cache) will only return an error if they | ||
1859 | * didn't get far enough to create the kobject - if they did, | ||
1860 | * the kobject destructor will do this cleanup. | ||
1861 | */ | ||
1862 | put_page(sb_page); | 1841 | put_page(sb_page); |
1863 | err_close: | ||
1864 | blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); | ||
1865 | err: | ||
1866 | if (attr != &ksysfs_register_quiet) | ||
1867 | pr_info("error opening %s: %s", path, err); | ||
1868 | ret = -EINVAL; | ||
1869 | } | ||
1870 | |||
1871 | kfree(sb); | 1842 | kfree(sb); |
1872 | kfree(path); | 1843 | kfree(path); |
1873 | mutex_unlock(&bch_register_lock); | 1844 | mutex_unlock(&bch_register_lock); |
1874 | module_put(THIS_MODULE); | 1845 | module_put(THIS_MODULE); |
1875 | return ret; | 1846 | return ret; |
1847 | |||
1848 | err_close: | ||
1849 | blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); | ||
1850 | err: | ||
1851 | if (attr != &ksysfs_register_quiet) | ||
1852 | pr_info("error opening %s: %s", path, err); | ||
1853 | ret = -EINVAL; | ||
1854 | goto out; | ||
1876 | } | 1855 | } |
1877 | 1856 | ||
1878 | static int bcache_reboot(struct notifier_block *n, unsigned long code, void *x) | 1857 | static int bcache_reboot(struct notifier_block *n, unsigned long code, void *x) |
diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c index 93e7e31a4bd3..2714ed3991d1 100644 --- a/drivers/md/bcache/writeback.c +++ b/drivers/md/bcache/writeback.c | |||
@@ -375,7 +375,7 @@ err: | |||
375 | refill_dirty(cl); | 375 | refill_dirty(cl); |
376 | } | 376 | } |
377 | 377 | ||
378 | void bch_writeback_init_cached_dev(struct cached_dev *dc) | 378 | void bch_cached_dev_writeback_init(struct cached_dev *dc) |
379 | { | 379 | { |
380 | closure_init_unlocked(&dc->writeback); | 380 | closure_init_unlocked(&dc->writeback); |
381 | init_rwsem(&dc->writeback_lock); | 381 | init_rwsem(&dc->writeback_lock); |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 681d1099a2d5..9b82377a833b 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -5268,8 +5268,8 @@ static void md_clean(struct mddev *mddev) | |||
5268 | 5268 | ||
5269 | static void __md_stop_writes(struct mddev *mddev) | 5269 | static void __md_stop_writes(struct mddev *mddev) |
5270 | { | 5270 | { |
5271 | set_bit(MD_RECOVERY_FROZEN, &mddev->recovery); | ||
5271 | if (mddev->sync_thread) { | 5272 | if (mddev->sync_thread) { |
5272 | set_bit(MD_RECOVERY_FROZEN, &mddev->recovery); | ||
5273 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 5273 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
5274 | md_reap_sync_thread(mddev); | 5274 | md_reap_sync_thread(mddev); |
5275 | } | 5275 | } |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 55951182af73..6e17f8181c4b 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -417,7 +417,17 @@ static void raid1_end_write_request(struct bio *bio, int error) | |||
417 | 417 | ||
418 | r1_bio->bios[mirror] = NULL; | 418 | r1_bio->bios[mirror] = NULL; |
419 | to_put = bio; | 419 | to_put = bio; |
420 | set_bit(R1BIO_Uptodate, &r1_bio->state); | 420 | /* |
421 | * Do not set R1BIO_Uptodate if the current device is | ||
422 | * rebuilding or Faulty. This is because we cannot use | ||
423 | * such device for properly reading the data back (we could | ||
424 | * potentially use it, if the current write would have felt | ||
425 | * before rdev->recovery_offset, but for simplicity we don't | ||
426 | * check this here. | ||
427 | */ | ||
428 | if (test_bit(In_sync, &conf->mirrors[mirror].rdev->flags) && | ||
429 | !test_bit(Faulty, &conf->mirrors[mirror].rdev->flags)) | ||
430 | set_bit(R1BIO_Uptodate, &r1_bio->state); | ||
421 | 431 | ||
422 | /* Maybe we can clear some bad blocks. */ | 432 | /* Maybe we can clear some bad blocks. */ |
423 | if (is_badblock(conf->mirrors[mirror].rdev, | 433 | if (is_badblock(conf->mirrors[mirror].rdev, |
@@ -870,17 +880,17 @@ static void allow_barrier(struct r1conf *conf) | |||
870 | wake_up(&conf->wait_barrier); | 880 | wake_up(&conf->wait_barrier); |
871 | } | 881 | } |
872 | 882 | ||
873 | static void freeze_array(struct r1conf *conf) | 883 | static void freeze_array(struct r1conf *conf, int extra) |
874 | { | 884 | { |
875 | /* stop syncio and normal IO and wait for everything to | 885 | /* stop syncio and normal IO and wait for everything to |
876 | * go quite. | 886 | * go quite. |
877 | * We increment barrier and nr_waiting, and then | 887 | * We increment barrier and nr_waiting, and then |
878 | * wait until nr_pending match nr_queued+1 | 888 | * wait until nr_pending match nr_queued+extra |
879 | * This is called in the context of one normal IO request | 889 | * This is called in the context of one normal IO request |
880 | * that has failed. Thus any sync request that might be pending | 890 | * that has failed. Thus any sync request that might be pending |
881 | * will be blocked by nr_pending, and we need to wait for | 891 | * will be blocked by nr_pending, and we need to wait for |
882 | * pending IO requests to complete or be queued for re-try. | 892 | * pending IO requests to complete or be queued for re-try. |
883 | * Thus the number queued (nr_queued) plus this request (1) | 893 | * Thus the number queued (nr_queued) plus this request (extra) |
884 | * must match the number of pending IOs (nr_pending) before | 894 | * must match the number of pending IOs (nr_pending) before |
885 | * we continue. | 895 | * we continue. |
886 | */ | 896 | */ |
@@ -888,7 +898,7 @@ static void freeze_array(struct r1conf *conf) | |||
888 | conf->barrier++; | 898 | conf->barrier++; |
889 | conf->nr_waiting++; | 899 | conf->nr_waiting++; |
890 | wait_event_lock_irq_cmd(conf->wait_barrier, | 900 | wait_event_lock_irq_cmd(conf->wait_barrier, |
891 | conf->nr_pending == conf->nr_queued+1, | 901 | conf->nr_pending == conf->nr_queued+extra, |
892 | conf->resync_lock, | 902 | conf->resync_lock, |
893 | flush_pending_writes(conf)); | 903 | flush_pending_writes(conf)); |
894 | spin_unlock_irq(&conf->resync_lock); | 904 | spin_unlock_irq(&conf->resync_lock); |
@@ -1544,8 +1554,8 @@ static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev) | |||
1544 | * we wait for all outstanding requests to complete. | 1554 | * we wait for all outstanding requests to complete. |
1545 | */ | 1555 | */ |
1546 | synchronize_sched(); | 1556 | synchronize_sched(); |
1547 | raise_barrier(conf); | 1557 | freeze_array(conf, 0); |
1548 | lower_barrier(conf); | 1558 | unfreeze_array(conf); |
1549 | clear_bit(Unmerged, &rdev->flags); | 1559 | clear_bit(Unmerged, &rdev->flags); |
1550 | } | 1560 | } |
1551 | md_integrity_add_rdev(rdev, mddev); | 1561 | md_integrity_add_rdev(rdev, mddev); |
@@ -1595,11 +1605,11 @@ static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev) | |||
1595 | */ | 1605 | */ |
1596 | struct md_rdev *repl = | 1606 | struct md_rdev *repl = |
1597 | conf->mirrors[conf->raid_disks + number].rdev; | 1607 | conf->mirrors[conf->raid_disks + number].rdev; |
1598 | raise_barrier(conf); | 1608 | freeze_array(conf, 0); |
1599 | clear_bit(Replacement, &repl->flags); | 1609 | clear_bit(Replacement, &repl->flags); |
1600 | p->rdev = repl; | 1610 | p->rdev = repl; |
1601 | conf->mirrors[conf->raid_disks + number].rdev = NULL; | 1611 | conf->mirrors[conf->raid_disks + number].rdev = NULL; |
1602 | lower_barrier(conf); | 1612 | unfreeze_array(conf); |
1603 | clear_bit(WantReplacement, &rdev->flags); | 1613 | clear_bit(WantReplacement, &rdev->flags); |
1604 | } else | 1614 | } else |
1605 | clear_bit(WantReplacement, &rdev->flags); | 1615 | clear_bit(WantReplacement, &rdev->flags); |
@@ -2195,7 +2205,7 @@ static void handle_read_error(struct r1conf *conf, struct r1bio *r1_bio) | |||
2195 | * frozen | 2205 | * frozen |
2196 | */ | 2206 | */ |
2197 | if (mddev->ro == 0) { | 2207 | if (mddev->ro == 0) { |
2198 | freeze_array(conf); | 2208 | freeze_array(conf, 1); |
2199 | fix_read_error(conf, r1_bio->read_disk, | 2209 | fix_read_error(conf, r1_bio->read_disk, |
2200 | r1_bio->sector, r1_bio->sectors); | 2210 | r1_bio->sector, r1_bio->sectors); |
2201 | unfreeze_array(conf); | 2211 | unfreeze_array(conf); |
@@ -2780,8 +2790,8 @@ static int run(struct mddev *mddev) | |||
2780 | return PTR_ERR(conf); | 2790 | return PTR_ERR(conf); |
2781 | 2791 | ||
2782 | if (mddev->queue) | 2792 | if (mddev->queue) |
2783 | blk_queue_max_write_same_sectors(mddev->queue, | 2793 | blk_queue_max_write_same_sectors(mddev->queue, 0); |
2784 | mddev->chunk_sectors); | 2794 | |
2785 | rdev_for_each(rdev, mddev) { | 2795 | rdev_for_each(rdev, mddev) { |
2786 | if (!mddev->gendisk) | 2796 | if (!mddev->gendisk) |
2787 | continue; | 2797 | continue; |
@@ -2963,7 +2973,7 @@ static int raid1_reshape(struct mddev *mddev) | |||
2963 | return -ENOMEM; | 2973 | return -ENOMEM; |
2964 | } | 2974 | } |
2965 | 2975 | ||
2966 | raise_barrier(conf); | 2976 | freeze_array(conf, 0); |
2967 | 2977 | ||
2968 | /* ok, everything is stopped */ | 2978 | /* ok, everything is stopped */ |
2969 | oldpool = conf->r1bio_pool; | 2979 | oldpool = conf->r1bio_pool; |
@@ -2994,7 +3004,7 @@ static int raid1_reshape(struct mddev *mddev) | |||
2994 | conf->raid_disks = mddev->raid_disks = raid_disks; | 3004 | conf->raid_disks = mddev->raid_disks = raid_disks; |
2995 | mddev->delta_disks = 0; | 3005 | mddev->delta_disks = 0; |
2996 | 3006 | ||
2997 | lower_barrier(conf); | 3007 | unfreeze_array(conf); |
2998 | 3008 | ||
2999 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); | 3009 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); |
3000 | md_wakeup_thread(mddev->thread); | 3010 | md_wakeup_thread(mddev->thread); |
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 59d4daa5f4c7..6ddae2501b9a 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
@@ -490,7 +490,17 @@ static void raid10_end_write_request(struct bio *bio, int error) | |||
490 | sector_t first_bad; | 490 | sector_t first_bad; |
491 | int bad_sectors; | 491 | int bad_sectors; |
492 | 492 | ||
493 | set_bit(R10BIO_Uptodate, &r10_bio->state); | 493 | /* |
494 | * Do not set R10BIO_Uptodate if the current device is | ||
495 | * rebuilding or Faulty. This is because we cannot use | ||
496 | * such device for properly reading the data back (we could | ||
497 | * potentially use it, if the current write would have felt | ||
498 | * before rdev->recovery_offset, but for simplicity we don't | ||
499 | * check this here. | ||
500 | */ | ||
501 | if (test_bit(In_sync, &rdev->flags) && | ||
502 | !test_bit(Faulty, &rdev->flags)) | ||
503 | set_bit(R10BIO_Uptodate, &r10_bio->state); | ||
494 | 504 | ||
495 | /* Maybe we can clear some bad blocks. */ | 505 | /* Maybe we can clear some bad blocks. */ |
496 | if (is_badblock(rdev, | 506 | if (is_badblock(rdev, |
@@ -1055,17 +1065,17 @@ static void allow_barrier(struct r10conf *conf) | |||
1055 | wake_up(&conf->wait_barrier); | 1065 | wake_up(&conf->wait_barrier); |
1056 | } | 1066 | } |
1057 | 1067 | ||
1058 | static void freeze_array(struct r10conf *conf) | 1068 | static void freeze_array(struct r10conf *conf, int extra) |
1059 | { | 1069 | { |
1060 | /* stop syncio and normal IO and wait for everything to | 1070 | /* stop syncio and normal IO and wait for everything to |
1061 | * go quiet. | 1071 | * go quiet. |
1062 | * We increment barrier and nr_waiting, and then | 1072 | * We increment barrier and nr_waiting, and then |
1063 | * wait until nr_pending match nr_queued+1 | 1073 | * wait until nr_pending match nr_queued+extra |
1064 | * This is called in the context of one normal IO request | 1074 | * This is called in the context of one normal IO request |
1065 | * that has failed. Thus any sync request that might be pending | 1075 | * that has failed. Thus any sync request that might be pending |
1066 | * will be blocked by nr_pending, and we need to wait for | 1076 | * will be blocked by nr_pending, and we need to wait for |
1067 | * pending IO requests to complete or be queued for re-try. | 1077 | * pending IO requests to complete or be queued for re-try. |
1068 | * Thus the number queued (nr_queued) plus this request (1) | 1078 | * Thus the number queued (nr_queued) plus this request (extra) |
1069 | * must match the number of pending IOs (nr_pending) before | 1079 | * must match the number of pending IOs (nr_pending) before |
1070 | * we continue. | 1080 | * we continue. |
1071 | */ | 1081 | */ |
@@ -1073,7 +1083,7 @@ static void freeze_array(struct r10conf *conf) | |||
1073 | conf->barrier++; | 1083 | conf->barrier++; |
1074 | conf->nr_waiting++; | 1084 | conf->nr_waiting++; |
1075 | wait_event_lock_irq_cmd(conf->wait_barrier, | 1085 | wait_event_lock_irq_cmd(conf->wait_barrier, |
1076 | conf->nr_pending == conf->nr_queued+1, | 1086 | conf->nr_pending == conf->nr_queued+extra, |
1077 | conf->resync_lock, | 1087 | conf->resync_lock, |
1078 | flush_pending_writes(conf)); | 1088 | flush_pending_writes(conf)); |
1079 | 1089 | ||
@@ -1837,8 +1847,8 @@ static int raid10_add_disk(struct mddev *mddev, struct md_rdev *rdev) | |||
1837 | * we wait for all outstanding requests to complete. | 1847 | * we wait for all outstanding requests to complete. |
1838 | */ | 1848 | */ |
1839 | synchronize_sched(); | 1849 | synchronize_sched(); |
1840 | raise_barrier(conf, 0); | 1850 | freeze_array(conf, 0); |
1841 | lower_barrier(conf); | 1851 | unfreeze_array(conf); |
1842 | clear_bit(Unmerged, &rdev->flags); | 1852 | clear_bit(Unmerged, &rdev->flags); |
1843 | } | 1853 | } |
1844 | md_integrity_add_rdev(rdev, mddev); | 1854 | md_integrity_add_rdev(rdev, mddev); |
@@ -2612,7 +2622,7 @@ static void handle_read_error(struct mddev *mddev, struct r10bio *r10_bio) | |||
2612 | r10_bio->devs[slot].bio = NULL; | 2622 | r10_bio->devs[slot].bio = NULL; |
2613 | 2623 | ||
2614 | if (mddev->ro == 0) { | 2624 | if (mddev->ro == 0) { |
2615 | freeze_array(conf); | 2625 | freeze_array(conf, 1); |
2616 | fix_read_error(conf, mddev, r10_bio); | 2626 | fix_read_error(conf, mddev, r10_bio); |
2617 | unfreeze_array(conf); | 2627 | unfreeze_array(conf); |
2618 | } else | 2628 | } else |
@@ -3609,8 +3619,7 @@ static int run(struct mddev *mddev) | |||
3609 | if (mddev->queue) { | 3619 | if (mddev->queue) { |
3610 | blk_queue_max_discard_sectors(mddev->queue, | 3620 | blk_queue_max_discard_sectors(mddev->queue, |
3611 | mddev->chunk_sectors); | 3621 | mddev->chunk_sectors); |
3612 | blk_queue_max_write_same_sectors(mddev->queue, | 3622 | blk_queue_max_write_same_sectors(mddev->queue, 0); |
3613 | mddev->chunk_sectors); | ||
3614 | blk_queue_io_min(mddev->queue, chunk_size); | 3623 | blk_queue_io_min(mddev->queue, chunk_size); |
3615 | if (conf->geo.raid_disks % conf->geo.near_copies) | 3624 | if (conf->geo.raid_disks % conf->geo.near_copies) |
3616 | blk_queue_io_opt(mddev->queue, chunk_size * conf->geo.raid_disks); | 3625 | blk_queue_io_opt(mddev->queue, chunk_size * conf->geo.raid_disks); |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 9359828ffe26..05e4a105b9c7 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -664,6 +664,7 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s) | |||
664 | if (test_bit(R5_ReadNoMerge, &sh->dev[i].flags)) | 664 | if (test_bit(R5_ReadNoMerge, &sh->dev[i].flags)) |
665 | bi->bi_rw |= REQ_FLUSH; | 665 | bi->bi_rw |= REQ_FLUSH; |
666 | 666 | ||
667 | bi->bi_vcnt = 1; | ||
667 | bi->bi_io_vec[0].bv_len = STRIPE_SIZE; | 668 | bi->bi_io_vec[0].bv_len = STRIPE_SIZE; |
668 | bi->bi_io_vec[0].bv_offset = 0; | 669 | bi->bi_io_vec[0].bv_offset = 0; |
669 | bi->bi_size = STRIPE_SIZE; | 670 | bi->bi_size = STRIPE_SIZE; |
@@ -701,6 +702,7 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s) | |||
701 | else | 702 | else |
702 | rbi->bi_sector = (sh->sector | 703 | rbi->bi_sector = (sh->sector |
703 | + rrdev->data_offset); | 704 | + rrdev->data_offset); |
705 | rbi->bi_vcnt = 1; | ||
704 | rbi->bi_io_vec[0].bv_len = STRIPE_SIZE; | 706 | rbi->bi_io_vec[0].bv_len = STRIPE_SIZE; |
705 | rbi->bi_io_vec[0].bv_offset = 0; | 707 | rbi->bi_io_vec[0].bv_offset = 0; |
706 | rbi->bi_size = STRIPE_SIZE; | 708 | rbi->bi_size = STRIPE_SIZE; |
@@ -5464,7 +5466,7 @@ static int run(struct mddev *mddev) | |||
5464 | if (mddev->major_version == 0 && | 5466 | if (mddev->major_version == 0 && |
5465 | mddev->minor_version > 90) | 5467 | mddev->minor_version > 90) |
5466 | rdev->recovery_offset = reshape_offset; | 5468 | rdev->recovery_offset = reshape_offset; |
5467 | 5469 | ||
5468 | if (rdev->recovery_offset < reshape_offset) { | 5470 | if (rdev->recovery_offset < reshape_offset) { |
5469 | /* We need to check old and new layout */ | 5471 | /* We need to check old and new layout */ |
5470 | if (!only_parity(rdev->raid_disk, | 5472 | if (!only_parity(rdev->raid_disk, |
@@ -5587,6 +5589,8 @@ static int run(struct mddev *mddev) | |||
5587 | */ | 5589 | */ |
5588 | mddev->queue->limits.discard_zeroes_data = 0; | 5590 | mddev->queue->limits.discard_zeroes_data = 0; |
5589 | 5591 | ||
5592 | blk_queue_max_write_same_sectors(mddev->queue, 0); | ||
5593 | |||
5590 | rdev_for_each(rdev, mddev) { | 5594 | rdev_for_each(rdev, mddev) { |
5591 | disk_stack_limits(mddev->gendisk, rdev->bdev, | 5595 | disk_stack_limits(mddev->gendisk, rdev->bdev, |
5592 | rdev->data_offset << 9); | 5596 | rdev->data_offset << 9); |
diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c index 713d89fedc46..f580d30bb784 100644 --- a/drivers/misc/mei/init.c +++ b/drivers/misc/mei/init.c | |||
@@ -197,6 +197,8 @@ void mei_stop(struct mei_device *dev) | |||
197 | { | 197 | { |
198 | dev_dbg(&dev->pdev->dev, "stopping the device.\n"); | 198 | dev_dbg(&dev->pdev->dev, "stopping the device.\n"); |
199 | 199 | ||
200 | flush_scheduled_work(); | ||
201 | |||
200 | mutex_lock(&dev->device_lock); | 202 | mutex_lock(&dev->device_lock); |
201 | 203 | ||
202 | cancel_delayed_work(&dev->timer_work); | 204 | cancel_delayed_work(&dev->timer_work); |
@@ -210,8 +212,6 @@ void mei_stop(struct mei_device *dev) | |||
210 | 212 | ||
211 | mutex_unlock(&dev->device_lock); | 213 | mutex_unlock(&dev->device_lock); |
212 | 214 | ||
213 | flush_scheduled_work(); | ||
214 | |||
215 | mei_watchdog_unregister(dev); | 215 | mei_watchdog_unregister(dev); |
216 | } | 216 | } |
217 | EXPORT_SYMBOL_GPL(mei_stop); | 217 | EXPORT_SYMBOL_GPL(mei_stop); |
diff --git a/drivers/misc/mei/nfc.c b/drivers/misc/mei/nfc.c index 3adf8a70f26e..d0c6907dfd92 100644 --- a/drivers/misc/mei/nfc.c +++ b/drivers/misc/mei/nfc.c | |||
@@ -142,6 +142,8 @@ static void mei_nfc_free(struct mei_nfc_dev *ndev) | |||
142 | mei_cl_unlink(ndev->cl_info); | 142 | mei_cl_unlink(ndev->cl_info); |
143 | kfree(ndev->cl_info); | 143 | kfree(ndev->cl_info); |
144 | } | 144 | } |
145 | |||
146 | memset(ndev, 0, sizeof(struct mei_nfc_dev)); | ||
145 | } | 147 | } |
146 | 148 | ||
147 | static int mei_nfc_build_bus_name(struct mei_nfc_dev *ndev) | 149 | static int mei_nfc_build_bus_name(struct mei_nfc_dev *ndev) |
diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index a727464e9c3f..0f268329bd3a 100644 --- a/drivers/misc/mei/pci-me.c +++ b/drivers/misc/mei/pci-me.c | |||
@@ -325,6 +325,7 @@ static int mei_me_pci_resume(struct device *device) | |||
325 | 325 | ||
326 | mutex_lock(&dev->device_lock); | 326 | mutex_lock(&dev->device_lock); |
327 | dev->dev_state = MEI_DEV_POWER_UP; | 327 | dev->dev_state = MEI_DEV_POWER_UP; |
328 | mei_clear_interrupts(dev); | ||
328 | mei_reset(dev, 1); | 329 | mei_reset(dev, 1); |
329 | mutex_unlock(&dev->device_lock); | 330 | mutex_unlock(&dev->device_lock); |
330 | 331 | ||
diff --git a/drivers/misc/sgi-gru/grufile.c b/drivers/misc/sgi-gru/grufile.c index 44d273c5e19d..0535d1e0bc78 100644 --- a/drivers/misc/sgi-gru/grufile.c +++ b/drivers/misc/sgi-gru/grufile.c | |||
@@ -172,6 +172,7 @@ static long gru_get_config_info(unsigned long arg) | |||
172 | nodesperblade = 2; | 172 | nodesperblade = 2; |
173 | else | 173 | else |
174 | nodesperblade = 1; | 174 | nodesperblade = 1; |
175 | memset(&info, 0, sizeof(info)); | ||
175 | info.cpus = num_online_cpus(); | 176 | info.cpus = num_online_cpus(); |
176 | info.nodes = num_online_nodes(); | 177 | info.nodes = num_online_nodes(); |
177 | info.blades = info.nodes / nodesperblade; | 178 | info.blades = info.nodes / nodesperblade; |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 29b846cbfb48..02d9ae7d527e 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -764,8 +764,8 @@ static void bond_resend_igmp_join_requests(struct bonding *bond) | |||
764 | struct net_device *bond_dev, *vlan_dev, *upper_dev; | 764 | struct net_device *bond_dev, *vlan_dev, *upper_dev; |
765 | struct vlan_entry *vlan; | 765 | struct vlan_entry *vlan; |
766 | 766 | ||
767 | rcu_read_lock(); | ||
768 | read_lock(&bond->lock); | 767 | read_lock(&bond->lock); |
768 | rcu_read_lock(); | ||
769 | 769 | ||
770 | bond_dev = bond->dev; | 770 | bond_dev = bond->dev; |
771 | 771 | ||
@@ -787,12 +787,19 @@ static void bond_resend_igmp_join_requests(struct bonding *bond) | |||
787 | if (vlan_dev) | 787 | if (vlan_dev) |
788 | __bond_resend_igmp_join_requests(vlan_dev); | 788 | __bond_resend_igmp_join_requests(vlan_dev); |
789 | } | 789 | } |
790 | rcu_read_unlock(); | ||
790 | 791 | ||
791 | if (--bond->igmp_retrans > 0) | 792 | /* We use curr_slave_lock to protect against concurrent access to |
793 | * igmp_retrans from multiple running instances of this function and | ||
794 | * bond_change_active_slave | ||
795 | */ | ||
796 | write_lock_bh(&bond->curr_slave_lock); | ||
797 | if (bond->igmp_retrans > 1) { | ||
798 | bond->igmp_retrans--; | ||
792 | queue_delayed_work(bond->wq, &bond->mcast_work, HZ/5); | 799 | queue_delayed_work(bond->wq, &bond->mcast_work, HZ/5); |
793 | 800 | } | |
801 | write_unlock_bh(&bond->curr_slave_lock); | ||
794 | read_unlock(&bond->lock); | 802 | read_unlock(&bond->lock); |
795 | rcu_read_unlock(); | ||
796 | } | 803 | } |
797 | 804 | ||
798 | static void bond_resend_igmp_join_requests_delayed(struct work_struct *work) | 805 | static void bond_resend_igmp_join_requests_delayed(struct work_struct *work) |
@@ -1957,6 +1964,10 @@ err_free: | |||
1957 | 1964 | ||
1958 | err_undo_flags: | 1965 | err_undo_flags: |
1959 | bond_compute_features(bond); | 1966 | bond_compute_features(bond); |
1967 | /* Enslave of first slave has failed and we need to fix master's mac */ | ||
1968 | if (bond->slave_cnt == 0 && | ||
1969 | ether_addr_equal(bond_dev->dev_addr, slave_dev->dev_addr)) | ||
1970 | eth_hw_addr_random(bond_dev); | ||
1960 | 1971 | ||
1961 | return res; | 1972 | return res; |
1962 | } | 1973 | } |
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h index 2baec24388b1..f989e1529a29 100644 --- a/drivers/net/bonding/bonding.h +++ b/drivers/net/bonding/bonding.h | |||
@@ -225,7 +225,7 @@ struct bonding { | |||
225 | rwlock_t curr_slave_lock; | 225 | rwlock_t curr_slave_lock; |
226 | u8 send_peer_notif; | 226 | u8 send_peer_notif; |
227 | s8 setup_by_slave; | 227 | s8 setup_by_slave; |
228 | s8 igmp_retrans; | 228 | u8 igmp_retrans; |
229 | #ifdef CONFIG_PROC_FS | 229 | #ifdef CONFIG_PROC_FS |
230 | struct proc_dir_entry *proc_entry; | 230 | struct proc_dir_entry *proc_entry; |
231 | char proc_file_name[IFNAMSIZ]; | 231 | char proc_file_name[IFNAMSIZ]; |
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 0f493c8dc28b..c777b9013164 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -1800,6 +1800,9 @@ static int tg3_poll_fw(struct tg3 *tp) | |||
1800 | int i; | 1800 | int i; |
1801 | u32 val; | 1801 | u32 val; |
1802 | 1802 | ||
1803 | if (tg3_flag(tp, NO_FWARE_REPORTED)) | ||
1804 | return 0; | ||
1805 | |||
1803 | if (tg3_flag(tp, IS_SSB_CORE)) { | 1806 | if (tg3_flag(tp, IS_SSB_CORE)) { |
1804 | /* We don't use firmware. */ | 1807 | /* We don't use firmware. */ |
1805 | return 0; | 1808 | return 0; |
@@ -10404,6 +10407,13 @@ static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) | |||
10404 | */ | 10407 | */ |
10405 | static int tg3_init_hw(struct tg3 *tp, bool reset_phy) | 10408 | static int tg3_init_hw(struct tg3 *tp, bool reset_phy) |
10406 | { | 10409 | { |
10410 | /* Chip may have been just powered on. If so, the boot code may still | ||
10411 | * be running initialization. Wait for it to finish to avoid races in | ||
10412 | * accessing the hardware. | ||
10413 | */ | ||
10414 | tg3_enable_register_access(tp); | ||
10415 | tg3_poll_fw(tp); | ||
10416 | |||
10407 | tg3_switch_clocks(tp); | 10417 | tg3_switch_clocks(tp); |
10408 | 10418 | ||
10409 | tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); | 10419 | tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); |
diff --git a/drivers/net/ethernet/dec/tulip/interrupt.c b/drivers/net/ethernet/dec/tulip/interrupt.c index 28a5e425fecf..92306b320840 100644 --- a/drivers/net/ethernet/dec/tulip/interrupt.c +++ b/drivers/net/ethernet/dec/tulip/interrupt.c | |||
@@ -76,6 +76,12 @@ int tulip_refill_rx(struct net_device *dev) | |||
76 | 76 | ||
77 | mapping = pci_map_single(tp->pdev, skb->data, PKT_BUF_SZ, | 77 | mapping = pci_map_single(tp->pdev, skb->data, PKT_BUF_SZ, |
78 | PCI_DMA_FROMDEVICE); | 78 | PCI_DMA_FROMDEVICE); |
79 | if (dma_mapping_error(&tp->pdev->dev, mapping)) { | ||
80 | dev_kfree_skb(skb); | ||
81 | tp->rx_buffers[entry].skb = NULL; | ||
82 | break; | ||
83 | } | ||
84 | |||
79 | tp->rx_buffers[entry].mapping = mapping; | 85 | tp->rx_buffers[entry].mapping = mapping; |
80 | 86 | ||
81 | tp->rx_ring[entry].buffer1 = cpu_to_le32(mapping); | 87 | tp->rx_ring[entry].buffer1 = cpu_to_le32(mapping); |
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 8bc1b21b1c79..a0b4be51f0d1 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
@@ -4262,6 +4262,9 @@ static int be_probe(struct pci_dev *pdev, const struct pci_device_id *pdev_id) | |||
4262 | netdev->features |= NETIF_F_HIGHDMA; | 4262 | netdev->features |= NETIF_F_HIGHDMA; |
4263 | } else { | 4263 | } else { |
4264 | status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); | 4264 | status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); |
4265 | if (!status) | ||
4266 | status = dma_set_coherent_mask(&pdev->dev, | ||
4267 | DMA_BIT_MASK(32)); | ||
4265 | if (status) { | 4268 | if (status) { |
4266 | dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); | 4269 | dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); |
4267 | goto free_netdev; | 4270 | goto free_netdev; |
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c index 42e9dd05c936..5e3982fc5398 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c | |||
@@ -897,8 +897,8 @@ static int sh_eth_check_reset(struct net_device *ndev) | |||
897 | mdelay(1); | 897 | mdelay(1); |
898 | cnt--; | 898 | cnt--; |
899 | } | 899 | } |
900 | if (cnt < 0) { | 900 | if (cnt <= 0) { |
901 | pr_err("Device reset fail\n"); | 901 | pr_err("Device reset failed\n"); |
902 | ret = -ETIMEDOUT; | 902 | ret = -ETIMEDOUT; |
903 | } | 903 | } |
904 | return ret; | 904 | return ret; |
@@ -1401,16 +1401,23 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status) | |||
1401 | desc_status = edmac_to_cpu(mdp, rxdesc->status); | 1401 | desc_status = edmac_to_cpu(mdp, rxdesc->status); |
1402 | pkt_len = rxdesc->frame_length; | 1402 | pkt_len = rxdesc->frame_length; |
1403 | 1403 | ||
1404 | #if defined(CONFIG_ARCH_R8A7740) | ||
1405 | desc_status >>= 16; | ||
1406 | #endif | ||
1407 | |||
1408 | if (--boguscnt < 0) | 1404 | if (--boguscnt < 0) |
1409 | break; | 1405 | break; |
1410 | 1406 | ||
1411 | if (!(desc_status & RDFEND)) | 1407 | if (!(desc_status & RDFEND)) |
1412 | ndev->stats.rx_length_errors++; | 1408 | ndev->stats.rx_length_errors++; |
1413 | 1409 | ||
1410 | #if defined(CONFIG_ARCH_R8A7740) | ||
1411 | /* | ||
1412 | * In case of almost all GETHER/ETHERs, the Receive Frame State | ||
1413 | * (RFS) bits in the Receive Descriptor 0 are from bit 9 to | ||
1414 | * bit 0. However, in case of the R8A7740's GETHER, the RFS | ||
1415 | * bits are from bit 25 to bit 16. So, the driver needs right | ||
1416 | * shifting by 16. | ||
1417 | */ | ||
1418 | desc_status >>= 16; | ||
1419 | #endif | ||
1420 | |||
1414 | if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 | | 1421 | if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 | |
1415 | RD_RFS5 | RD_RFS6 | RD_RFS10)) { | 1422 | RD_RFS5 | RD_RFS6 | RD_RFS10)) { |
1416 | ndev->stats.rx_errors++; | 1423 | ndev->stats.rx_errors++; |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 618446ae1ec1..ee919ca8b8a0 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
@@ -1899,7 +1899,7 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1899 | 1899 | ||
1900 | #ifdef STMMAC_XMIT_DEBUG | 1900 | #ifdef STMMAC_XMIT_DEBUG |
1901 | if (netif_msg_pktdata(priv)) { | 1901 | if (netif_msg_pktdata(priv)) { |
1902 | pr_info("%s: curr %d dirty=%d entry=%d, first=%p, nfrags=%d" | 1902 | pr_info("%s: curr %d dirty=%d entry=%d, first=%p, nfrags=%d", |
1903 | __func__, (priv->cur_tx % txsize), | 1903 | __func__, (priv->cur_tx % txsize), |
1904 | (priv->dirty_tx % txsize), entry, first, nfrags); | 1904 | (priv->dirty_tx % txsize), entry, first, nfrags); |
1905 | if (priv->extend_desc) | 1905 | if (priv->extend_desc) |
diff --git a/drivers/net/ethernet/ti/davinci_mdio.c b/drivers/net/ethernet/ti/davinci_mdio.c index 12aec173564c..c47f0dbcebb5 100644 --- a/drivers/net/ethernet/ti/davinci_mdio.c +++ b/drivers/net/ethernet/ti/davinci_mdio.c | |||
@@ -449,10 +449,9 @@ static int davinci_mdio_suspend(struct device *dev) | |||
449 | __raw_writel(ctrl, &data->regs->control); | 449 | __raw_writel(ctrl, &data->regs->control); |
450 | wait_for_idle(data); | 450 | wait_for_idle(data); |
451 | 451 | ||
452 | pm_runtime_put_sync(data->dev); | ||
453 | |||
454 | data->suspended = true; | 452 | data->suspended = true; |
455 | spin_unlock(&data->lock); | 453 | spin_unlock(&data->lock); |
454 | pm_runtime_put_sync(data->dev); | ||
456 | 455 | ||
457 | return 0; | 456 | return 0; |
458 | } | 457 | } |
@@ -460,15 +459,12 @@ static int davinci_mdio_suspend(struct device *dev) | |||
460 | static int davinci_mdio_resume(struct device *dev) | 459 | static int davinci_mdio_resume(struct device *dev) |
461 | { | 460 | { |
462 | struct davinci_mdio_data *data = dev_get_drvdata(dev); | 461 | struct davinci_mdio_data *data = dev_get_drvdata(dev); |
463 | u32 ctrl; | ||
464 | 462 | ||
465 | spin_lock(&data->lock); | ||
466 | pm_runtime_get_sync(data->dev); | 463 | pm_runtime_get_sync(data->dev); |
467 | 464 | ||
465 | spin_lock(&data->lock); | ||
468 | /* restart the scan state machine */ | 466 | /* restart the scan state machine */ |
469 | ctrl = __raw_readl(&data->regs->control); | 467 | __davinci_mdio_reset(data); |
470 | ctrl |= CONTROL_ENABLE; | ||
471 | __raw_writel(ctrl, &data->regs->control); | ||
472 | 468 | ||
473 | data->suspended = false; | 469 | data->suspended = false; |
474 | spin_unlock(&data->lock); | 470 | spin_unlock(&data->lock); |
@@ -477,8 +473,8 @@ static int davinci_mdio_resume(struct device *dev) | |||
477 | } | 473 | } |
478 | 474 | ||
479 | static const struct dev_pm_ops davinci_mdio_pm_ops = { | 475 | static const struct dev_pm_ops davinci_mdio_pm_ops = { |
480 | .suspend = davinci_mdio_suspend, | 476 | .suspend_late = davinci_mdio_suspend, |
481 | .resume = davinci_mdio_resume, | 477 | .resume_early = davinci_mdio_resume, |
482 | }; | 478 | }; |
483 | 479 | ||
484 | static const struct of_device_id davinci_mdio_of_mtable[] = { | 480 | static const struct of_device_id davinci_mdio_of_mtable[] = { |
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 1c502bb0c916..6e91931a1c2c 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -853,18 +853,24 @@ static int macvlan_changelink(struct net_device *dev, | |||
853 | struct nlattr *tb[], struct nlattr *data[]) | 853 | struct nlattr *tb[], struct nlattr *data[]) |
854 | { | 854 | { |
855 | struct macvlan_dev *vlan = netdev_priv(dev); | 855 | struct macvlan_dev *vlan = netdev_priv(dev); |
856 | if (data && data[IFLA_MACVLAN_MODE]) | 856 | |
857 | vlan->mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); | ||
858 | if (data && data[IFLA_MACVLAN_FLAGS]) { | 857 | if (data && data[IFLA_MACVLAN_FLAGS]) { |
859 | __u16 flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]); | 858 | __u16 flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]); |
860 | bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC; | 859 | bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC; |
861 | 860 | if (vlan->port->passthru && promisc) { | |
862 | if (promisc && (flags & MACVLAN_FLAG_NOPROMISC)) | 861 | int err; |
863 | dev_set_promiscuity(vlan->lowerdev, -1); | 862 | |
864 | else if (promisc && !(flags & MACVLAN_FLAG_NOPROMISC)) | 863 | if (flags & MACVLAN_FLAG_NOPROMISC) |
865 | dev_set_promiscuity(vlan->lowerdev, 1); | 864 | err = dev_set_promiscuity(vlan->lowerdev, -1); |
865 | else | ||
866 | err = dev_set_promiscuity(vlan->lowerdev, 1); | ||
867 | if (err < 0) | ||
868 | return err; | ||
869 | } | ||
866 | vlan->flags = flags; | 870 | vlan->flags = flags; |
867 | } | 871 | } |
872 | if (data && data[IFLA_MACVLAN_MODE]) | ||
873 | vlan->mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); | ||
868 | return 0; | 874 | return 0; |
869 | } | 875 | } |
870 | 876 | ||
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index d016a76ad44b..b3051052f3ad 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -1092,8 +1092,8 @@ static int team_port_add(struct team *team, struct net_device *port_dev) | |||
1092 | } | 1092 | } |
1093 | 1093 | ||
1094 | port->index = -1; | 1094 | port->index = -1; |
1095 | team_port_enable(team, port); | ||
1096 | list_add_tail_rcu(&port->list, &team->port_list); | 1095 | list_add_tail_rcu(&port->list, &team->port_list); |
1096 | team_port_enable(team, port); | ||
1097 | __team_compute_features(team); | 1097 | __team_compute_features(team); |
1098 | __team_port_change_port_added(port, !!netif_carrier_ok(port_dev)); | 1098 | __team_port_change_port_added(port, !!netif_carrier_ok(port_dev)); |
1099 | __team_options_change_check(team); | 1099 | __team_options_change_check(team); |
diff --git a/drivers/net/team/team_mode_random.c b/drivers/net/team/team_mode_random.c index 5ca14d463ba7..7f032e211343 100644 --- a/drivers/net/team/team_mode_random.c +++ b/drivers/net/team/team_mode_random.c | |||
@@ -28,6 +28,8 @@ static bool rnd_transmit(struct team *team, struct sk_buff *skb) | |||
28 | 28 | ||
29 | port_index = random_N(team->en_port_count); | 29 | port_index = random_N(team->en_port_count); |
30 | port = team_get_port_by_index_rcu(team, port_index); | 30 | port = team_get_port_by_index_rcu(team, port_index); |
31 | if (unlikely(!port)) | ||
32 | goto drop; | ||
31 | port = team_get_first_port_txable_rcu(team, port); | 33 | port = team_get_first_port_txable_rcu(team, port); |
32 | if (unlikely(!port)) | 34 | if (unlikely(!port)) |
33 | goto drop; | 35 | goto drop; |
diff --git a/drivers/net/team/team_mode_roundrobin.c b/drivers/net/team/team_mode_roundrobin.c index d268e4de781b..472623f8ce3d 100644 --- a/drivers/net/team/team_mode_roundrobin.c +++ b/drivers/net/team/team_mode_roundrobin.c | |||
@@ -32,6 +32,8 @@ static bool rr_transmit(struct team *team, struct sk_buff *skb) | |||
32 | 32 | ||
33 | port_index = rr_priv(team)->sent_packets++ % team->en_port_count; | 33 | port_index = rr_priv(team)->sent_packets++ % team->en_port_count; |
34 | port = team_get_port_by_index_rcu(team, port_index); | 34 | port = team_get_port_by_index_rcu(team, port_index); |
35 | if (unlikely(!port)) | ||
36 | goto drop; | ||
35 | port = team_get_first_port_txable_rcu(team, port); | 37 | port = team_get_first_port_txable_rcu(team, port); |
36 | if (unlikely(!port)) | 38 | if (unlikely(!port)) |
37 | goto drop; | 39 | goto drop; |
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 89776c592151..bfa9bb48e42d 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
@@ -352,7 +352,7 @@ static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb) | |||
352 | u32 numqueues = 0; | 352 | u32 numqueues = 0; |
353 | 353 | ||
354 | rcu_read_lock(); | 354 | rcu_read_lock(); |
355 | numqueues = tun->numqueues; | 355 | numqueues = ACCESS_ONCE(tun->numqueues); |
356 | 356 | ||
357 | txq = skb_get_rxhash(skb); | 357 | txq = skb_get_rxhash(skb); |
358 | if (txq) { | 358 | if (txq) { |
@@ -2159,6 +2159,8 @@ static int tun_chr_open(struct inode *inode, struct file * file) | |||
2159 | set_bit(SOCK_EXTERNALLY_ALLOCATED, &tfile->socket.flags); | 2159 | set_bit(SOCK_EXTERNALLY_ALLOCATED, &tfile->socket.flags); |
2160 | INIT_LIST_HEAD(&tfile->next); | 2160 | INIT_LIST_HEAD(&tfile->next); |
2161 | 2161 | ||
2162 | sock_set_flag(&tfile->sk, SOCK_ZEROCOPY); | ||
2163 | |||
2162 | return 0; | 2164 | return 0; |
2163 | } | 2165 | } |
2164 | 2166 | ||
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 078795fe6e31..04ee044dde51 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c | |||
@@ -627,6 +627,12 @@ static const struct usb_device_id products [] = { | |||
627 | .driver_info = 0, | 627 | .driver_info = 0, |
628 | }, | 628 | }, |
629 | 629 | ||
630 | /* Huawei E1820 - handled by qmi_wwan */ | ||
631 | { | ||
632 | USB_DEVICE_INTERFACE_NUMBER(HUAWEI_VENDOR_ID, 0x14ac, 1), | ||
633 | .driver_info = 0, | ||
634 | }, | ||
635 | |||
630 | /* Realtek RTL8152 Based USB 2.0 Ethernet Adapters */ | 636 | /* Realtek RTL8152 Based USB 2.0 Ethernet Adapters */ |
631 | #if defined(CONFIG_USB_RTL8152) || defined(CONFIG_USB_RTL8152_MODULE) | 637 | #if defined(CONFIG_USB_RTL8152) || defined(CONFIG_USB_RTL8152_MODULE) |
632 | { | 638 | { |
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index 86adfa0a912e..d095d0d3056b 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c | |||
@@ -519,6 +519,7 @@ static const struct usb_device_id products[] = { | |||
519 | /* 3. Combined interface devices matching on interface number */ | 519 | /* 3. Combined interface devices matching on interface number */ |
520 | {QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */ | 520 | {QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */ |
521 | {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */ | 521 | {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */ |
522 | {QMI_FIXED_INTF(0x12d1, 0x14ac, 1)}, /* Huawei E1820 */ | ||
522 | {QMI_FIXED_INTF(0x19d2, 0x0002, 1)}, | 523 | {QMI_FIXED_INTF(0x19d2, 0x0002, 1)}, |
523 | {QMI_FIXED_INTF(0x19d2, 0x0012, 1)}, | 524 | {QMI_FIXED_INTF(0x19d2, 0x0012, 1)}, |
524 | {QMI_FIXED_INTF(0x19d2, 0x0017, 3)}, | 525 | {QMI_FIXED_INTF(0x19d2, 0x0017, 3)}, |
diff --git a/drivers/net/wireless/ath/ath9k/Kconfig b/drivers/net/wireless/ath/ath9k/Kconfig index f3dc124c60c7..3c2cbc9d6295 100644 --- a/drivers/net/wireless/ath/ath9k/Kconfig +++ b/drivers/net/wireless/ath/ath9k/Kconfig | |||
@@ -92,13 +92,17 @@ config ATH9K_MAC_DEBUG | |||
92 | This option enables collection of statistics for Rx/Tx status | 92 | This option enables collection of statistics for Rx/Tx status |
93 | data and some other MAC related statistics | 93 | data and some other MAC related statistics |
94 | 94 | ||
95 | config ATH9K_RATE_CONTROL | 95 | config ATH9K_LEGACY_RATE_CONTROL |
96 | bool "Atheros ath9k rate control" | 96 | bool "Atheros ath9k rate control" |
97 | depends on ATH9K | 97 | depends on ATH9K |
98 | default y | 98 | default n |
99 | ---help--- | 99 | ---help--- |
100 | Say Y, if you want to use the ath9k specific rate control | 100 | Say Y, if you want to use the ath9k specific rate control |
101 | module instead of minstrel_ht. | 101 | module instead of minstrel_ht. Be warned that there are various |
102 | issues with the ath9k RC and minstrel is a more robust algorithm. | ||
103 | Note that even if this option is selected, "ath9k_rate_control" | ||
104 | has to be passed to mac80211 using the module parameter, | ||
105 | ieee80211_default_rc_algo. | ||
102 | 106 | ||
103 | config ATH9K_HTC | 107 | config ATH9K_HTC |
104 | tristate "Atheros HTC based wireless cards support" | 108 | tristate "Atheros HTC based wireless cards support" |
diff --git a/drivers/net/wireless/ath/ath9k/Makefile b/drivers/net/wireless/ath/ath9k/Makefile index 2ad8f9474ba1..75ee9e7704ce 100644 --- a/drivers/net/wireless/ath/ath9k/Makefile +++ b/drivers/net/wireless/ath/ath9k/Makefile | |||
@@ -8,7 +8,7 @@ ath9k-y += beacon.o \ | |||
8 | antenna.o | 8 | antenna.o |
9 | 9 | ||
10 | ath9k-$(CONFIG_ATH9K_BTCOEX_SUPPORT) += mci.o | 10 | ath9k-$(CONFIG_ATH9K_BTCOEX_SUPPORT) += mci.o |
11 | ath9k-$(CONFIG_ATH9K_RATE_CONTROL) += rc.o | 11 | ath9k-$(CONFIG_ATH9K_LEGACY_RATE_CONTROL) += rc.o |
12 | ath9k-$(CONFIG_ATH9K_PCI) += pci.o | 12 | ath9k-$(CONFIG_ATH9K_PCI) += pci.o |
13 | ath9k-$(CONFIG_ATH9K_AHB) += ahb.o | 13 | ath9k-$(CONFIG_ATH9K_AHB) += ahb.o |
14 | ath9k-$(CONFIG_ATH9K_DEBUGFS) += debug.o | 14 | ath9k-$(CONFIG_ATH9K_DEBUGFS) += debug.o |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h index db5ffada2217..7546b9a7dcbf 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h | |||
@@ -958,11 +958,11 @@ static const u32 ar9300Common_rx_gain_table_2p2[][2] = { | |||
958 | {0x0000a074, 0x00000000}, | 958 | {0x0000a074, 0x00000000}, |
959 | {0x0000a078, 0x00000000}, | 959 | {0x0000a078, 0x00000000}, |
960 | {0x0000a07c, 0x00000000}, | 960 | {0x0000a07c, 0x00000000}, |
961 | {0x0000a080, 0x1a1a1a1a}, | 961 | {0x0000a080, 0x22222229}, |
962 | {0x0000a084, 0x1a1a1a1a}, | 962 | {0x0000a084, 0x1d1d1d1d}, |
963 | {0x0000a088, 0x1a1a1a1a}, | 963 | {0x0000a088, 0x1d1d1d1d}, |
964 | {0x0000a08c, 0x1a1a1a1a}, | 964 | {0x0000a08c, 0x1d1d1d1d}, |
965 | {0x0000a090, 0x171a1a1a}, | 965 | {0x0000a090, 0x171d1d1d}, |
966 | {0x0000a094, 0x11111717}, | 966 | {0x0000a094, 0x11111717}, |
967 | {0x0000a098, 0x00030311}, | 967 | {0x0000a098, 0x00030311}, |
968 | {0x0000a09c, 0x00000000}, | 968 | {0x0000a09c, 0x00000000}, |
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c index aba415103f94..2ba494567777 100644 --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c | |||
@@ -787,8 +787,7 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) | |||
787 | hw->wiphy->iface_combinations = if_comb; | 787 | hw->wiphy->iface_combinations = if_comb; |
788 | hw->wiphy->n_iface_combinations = ARRAY_SIZE(if_comb); | 788 | hw->wiphy->n_iface_combinations = ARRAY_SIZE(if_comb); |
789 | 789 | ||
790 | if (AR_SREV_5416(sc->sc_ah)) | 790 | hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; |
791 | hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; | ||
792 | 791 | ||
793 | hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; | 792 | hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; |
794 | hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS; | 793 | hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS; |
@@ -830,10 +829,6 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) | |||
830 | sc->ant_rx = hw->wiphy->available_antennas_rx; | 829 | sc->ant_rx = hw->wiphy->available_antennas_rx; |
831 | sc->ant_tx = hw->wiphy->available_antennas_tx; | 830 | sc->ant_tx = hw->wiphy->available_antennas_tx; |
832 | 831 | ||
833 | #ifdef CONFIG_ATH9K_RATE_CONTROL | ||
834 | hw->rate_control_algorithm = "ath9k_rate_control"; | ||
835 | #endif | ||
836 | |||
837 | if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ) | 832 | if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ) |
838 | hw->wiphy->bands[IEEE80211_BAND_2GHZ] = | 833 | hw->wiphy->bands[IEEE80211_BAND_2GHZ] = |
839 | &sc->sbands[IEEE80211_BAND_2GHZ]; | 834 | &sc->sbands[IEEE80211_BAND_2GHZ]; |
diff --git a/drivers/net/wireless/ath/ath9k/rc.h b/drivers/net/wireless/ath/ath9k/rc.h index 267dbfcfaa96..b9a87383cb43 100644 --- a/drivers/net/wireless/ath/ath9k/rc.h +++ b/drivers/net/wireless/ath/ath9k/rc.h | |||
@@ -231,7 +231,7 @@ static inline void ath_debug_stat_retries(struct ath_rate_priv *rc, int rix, | |||
231 | } | 231 | } |
232 | #endif | 232 | #endif |
233 | 233 | ||
234 | #ifdef CONFIG_ATH9K_RATE_CONTROL | 234 | #ifdef CONFIG_ATH9K_LEGACY_RATE_CONTROL |
235 | int ath_rate_control_register(void); | 235 | int ath_rate_control_register(void); |
236 | void ath_rate_control_unregister(void); | 236 | void ath_rate_control_unregister(void); |
237 | #else | 237 | #else |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 6dd07e2ec595..a95b77ab360e 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -2458,7 +2458,7 @@ static void b43_request_firmware(struct work_struct *work) | |||
2458 | for (i = 0; i < B43_NR_FWTYPES; i++) { | 2458 | for (i = 0; i < B43_NR_FWTYPES; i++) { |
2459 | errmsg = ctx->errors[i]; | 2459 | errmsg = ctx->errors[i]; |
2460 | if (strlen(errmsg)) | 2460 | if (strlen(errmsg)) |
2461 | b43err(dev->wl, errmsg); | 2461 | b43err(dev->wl, "%s", errmsg); |
2462 | } | 2462 | } |
2463 | b43_print_fw_helptext(dev->wl, 1); | 2463 | b43_print_fw_helptext(dev->wl, 1); |
2464 | goto out; | 2464 | goto out; |
diff --git a/drivers/net/wireless/iwlegacy/common.h b/drivers/net/wireless/iwlegacy/common.h index f8246f2d88f9..4caaf52986a4 100644 --- a/drivers/net/wireless/iwlegacy/common.h +++ b/drivers/net/wireless/iwlegacy/common.h | |||
@@ -1832,16 +1832,16 @@ u32 il_usecs_to_beacons(struct il_priv *il, u32 usec, u32 beacon_interval); | |||
1832 | __le32 il_add_beacon_time(struct il_priv *il, u32 base, u32 addon, | 1832 | __le32 il_add_beacon_time(struct il_priv *il, u32 base, u32 addon, |
1833 | u32 beacon_interval); | 1833 | u32 beacon_interval); |
1834 | 1834 | ||
1835 | #ifdef CONFIG_PM | 1835 | #ifdef CONFIG_PM_SLEEP |
1836 | extern const struct dev_pm_ops il_pm_ops; | 1836 | extern const struct dev_pm_ops il_pm_ops; |
1837 | 1837 | ||
1838 | #define IL_LEGACY_PM_OPS (&il_pm_ops) | 1838 | #define IL_LEGACY_PM_OPS (&il_pm_ops) |
1839 | 1839 | ||
1840 | #else /* !CONFIG_PM */ | 1840 | #else /* !CONFIG_PM_SLEEP */ |
1841 | 1841 | ||
1842 | #define IL_LEGACY_PM_OPS NULL | 1842 | #define IL_LEGACY_PM_OPS NULL |
1843 | 1843 | ||
1844 | #endif /* !CONFIG_PM */ | 1844 | #endif /* !CONFIG_PM_SLEEP */ |
1845 | 1845 | ||
1846 | /***************************************************** | 1846 | /***************************************************** |
1847 | * Error Handling Debugging | 1847 | * Error Handling Debugging |
diff --git a/drivers/net/wireless/mwifiex/debugfs.c b/drivers/net/wireless/mwifiex/debugfs.c index 753b5682d53f..a5f9875cfd6e 100644 --- a/drivers/net/wireless/mwifiex/debugfs.c +++ b/drivers/net/wireless/mwifiex/debugfs.c | |||
@@ -26,10 +26,17 @@ | |||
26 | static struct dentry *mwifiex_dfs_dir; | 26 | static struct dentry *mwifiex_dfs_dir; |
27 | 27 | ||
28 | static char *bss_modes[] = { | 28 | static char *bss_modes[] = { |
29 | "Unknown", | 29 | "UNSPECIFIED", |
30 | "Ad-hoc", | 30 | "ADHOC", |
31 | "Managed", | 31 | "STATION", |
32 | "Auto" | 32 | "AP", |
33 | "AP_VLAN", | ||
34 | "WDS", | ||
35 | "MONITOR", | ||
36 | "MESH_POINT", | ||
37 | "P2P_CLIENT", | ||
38 | "P2P_GO", | ||
39 | "P2P_DEVICE", | ||
33 | }; | 40 | }; |
34 | 41 | ||
35 | /* size/addr for mwifiex_debug_info */ | 42 | /* size/addr for mwifiex_debug_info */ |
@@ -200,7 +207,12 @@ mwifiex_info_read(struct file *file, char __user *ubuf, | |||
200 | p += sprintf(p, "driver_version = %s", fmt); | 207 | p += sprintf(p, "driver_version = %s", fmt); |
201 | p += sprintf(p, "\nverext = %s", priv->version_str); | 208 | p += sprintf(p, "\nverext = %s", priv->version_str); |
202 | p += sprintf(p, "\ninterface_name=\"%s\"\n", netdev->name); | 209 | p += sprintf(p, "\ninterface_name=\"%s\"\n", netdev->name); |
203 | p += sprintf(p, "bss_mode=\"%s\"\n", bss_modes[info.bss_mode]); | 210 | |
211 | if (info.bss_mode >= ARRAY_SIZE(bss_modes)) | ||
212 | p += sprintf(p, "bss_mode=\"%d\"\n", info.bss_mode); | ||
213 | else | ||
214 | p += sprintf(p, "bss_mode=\"%s\"\n", bss_modes[info.bss_mode]); | ||
215 | |||
204 | p += sprintf(p, "media_state=\"%s\"\n", | 216 | p += sprintf(p, "media_state=\"%s\"\n", |
205 | (!priv->media_connected ? "Disconnected" : "Connected")); | 217 | (!priv->media_connected ? "Disconnected" : "Connected")); |
206 | p += sprintf(p, "mac_address=\"%pM\"\n", netdev->dev_addr); | 218 | p += sprintf(p, "mac_address=\"%pM\"\n", netdev->dev_addr); |
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c index 999ffc12578b..c97e9d327331 100644 --- a/drivers/net/wireless/rtlwifi/pci.c +++ b/drivers/net/wireless/rtlwifi/pci.c | |||
@@ -764,6 +764,7 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) | |||
764 | "can't alloc skb for rx\n"); | 764 | "can't alloc skb for rx\n"); |
765 | goto done; | 765 | goto done; |
766 | } | 766 | } |
767 | kmemleak_not_leak(new_skb); | ||
767 | 768 | ||
768 | pci_unmap_single(rtlpci->pdev, | 769 | pci_unmap_single(rtlpci->pdev, |
769 | *((dma_addr_t *) skb->cb), | 770 | *((dma_addr_t *) skb->cb), |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c index 3d0498e69c8c..189ba124a8c6 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c | |||
@@ -1973,26 +1973,35 @@ void rtl92cu_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) | |||
1973 | } | 1973 | } |
1974 | } | 1974 | } |
1975 | 1975 | ||
1976 | void rtl92cu_update_hal_rate_table(struct ieee80211_hw *hw, | 1976 | static void rtl92cu_update_hal_rate_table(struct ieee80211_hw *hw, |
1977 | struct ieee80211_sta *sta, | 1977 | struct ieee80211_sta *sta) |
1978 | u8 rssi_level) | ||
1979 | { | 1978 | { |
1980 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 1979 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
1981 | struct rtl_phy *rtlphy = &(rtlpriv->phy); | 1980 | struct rtl_phy *rtlphy = &(rtlpriv->phy); |
1982 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); | 1981 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); |
1983 | u32 ratr_value = (u32) mac->basic_rates; | 1982 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); |
1984 | u8 *mcsrate = mac->mcs; | 1983 | u32 ratr_value; |
1985 | u8 ratr_index = 0; | 1984 | u8 ratr_index = 0; |
1986 | u8 nmode = mac->ht_enable; | 1985 | u8 nmode = mac->ht_enable; |
1987 | u8 mimo_ps = 1; | 1986 | u8 mimo_ps = IEEE80211_SMPS_OFF; |
1988 | u16 shortgi_rate = 0; | 1987 | u16 shortgi_rate; |
1989 | u32 tmp_ratr_value = 0; | 1988 | u32 tmp_ratr_value; |
1990 | u8 curtxbw_40mhz = mac->bw_40; | 1989 | u8 curtxbw_40mhz = mac->bw_40; |
1991 | u8 curshortgi_40mhz = mac->sgi_40; | 1990 | u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? |
1992 | u8 curshortgi_20mhz = mac->sgi_20; | 1991 | 1 : 0; |
1992 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? | ||
1993 | 1 : 0; | ||
1993 | enum wireless_mode wirelessmode = mac->mode; | 1994 | enum wireless_mode wirelessmode = mac->mode; |
1994 | 1995 | ||
1995 | ratr_value |= ((*(u16 *) (mcsrate))) << 12; | 1996 | if (rtlhal->current_bandtype == BAND_ON_5G) |
1997 | ratr_value = sta->supp_rates[1] << 4; | ||
1998 | else | ||
1999 | ratr_value = sta->supp_rates[0]; | ||
2000 | if (mac->opmode == NL80211_IFTYPE_ADHOC) | ||
2001 | ratr_value = 0xfff; | ||
2002 | |||
2003 | ratr_value |= (sta->ht_cap.mcs.rx_mask[1] << 20 | | ||
2004 | sta->ht_cap.mcs.rx_mask[0] << 12); | ||
1996 | switch (wirelessmode) { | 2005 | switch (wirelessmode) { |
1997 | case WIRELESS_MODE_B: | 2006 | case WIRELESS_MODE_B: |
1998 | if (ratr_value & 0x0000000c) | 2007 | if (ratr_value & 0x0000000c) |
@@ -2006,7 +2015,7 @@ void rtl92cu_update_hal_rate_table(struct ieee80211_hw *hw, | |||
2006 | case WIRELESS_MODE_N_24G: | 2015 | case WIRELESS_MODE_N_24G: |
2007 | case WIRELESS_MODE_N_5G: | 2016 | case WIRELESS_MODE_N_5G: |
2008 | nmode = 1; | 2017 | nmode = 1; |
2009 | if (mimo_ps == 0) { | 2018 | if (mimo_ps == IEEE80211_SMPS_STATIC) { |
2010 | ratr_value &= 0x0007F005; | 2019 | ratr_value &= 0x0007F005; |
2011 | } else { | 2020 | } else { |
2012 | u32 ratr_mask; | 2021 | u32 ratr_mask; |
@@ -2016,8 +2025,7 @@ void rtl92cu_update_hal_rate_table(struct ieee80211_hw *hw, | |||
2016 | ratr_mask = 0x000ff005; | 2025 | ratr_mask = 0x000ff005; |
2017 | else | 2026 | else |
2018 | ratr_mask = 0x0f0ff005; | 2027 | ratr_mask = 0x0f0ff005; |
2019 | if (curtxbw_40mhz) | 2028 | |
2020 | ratr_mask |= 0x00000010; | ||
2021 | ratr_value &= ratr_mask; | 2029 | ratr_value &= ratr_mask; |
2022 | } | 2030 | } |
2023 | break; | 2031 | break; |
@@ -2026,41 +2034,74 @@ void rtl92cu_update_hal_rate_table(struct ieee80211_hw *hw, | |||
2026 | ratr_value &= 0x000ff0ff; | 2034 | ratr_value &= 0x000ff0ff; |
2027 | else | 2035 | else |
2028 | ratr_value &= 0x0f0ff0ff; | 2036 | ratr_value &= 0x0f0ff0ff; |
2037 | |||
2029 | break; | 2038 | break; |
2030 | } | 2039 | } |
2040 | |||
2031 | ratr_value &= 0x0FFFFFFF; | 2041 | ratr_value &= 0x0FFFFFFF; |
2032 | if (nmode && ((curtxbw_40mhz && curshortgi_40mhz) || | 2042 | |
2033 | (!curtxbw_40mhz && curshortgi_20mhz))) { | 2043 | if (nmode && ((curtxbw_40mhz && |
2044 | curshortgi_40mhz) || (!curtxbw_40mhz && | ||
2045 | curshortgi_20mhz))) { | ||
2046 | |||
2034 | ratr_value |= 0x10000000; | 2047 | ratr_value |= 0x10000000; |
2035 | tmp_ratr_value = (ratr_value >> 12); | 2048 | tmp_ratr_value = (ratr_value >> 12); |
2049 | |||
2036 | for (shortgi_rate = 15; shortgi_rate > 0; shortgi_rate--) { | 2050 | for (shortgi_rate = 15; shortgi_rate > 0; shortgi_rate--) { |
2037 | if ((1 << shortgi_rate) & tmp_ratr_value) | 2051 | if ((1 << shortgi_rate) & tmp_ratr_value) |
2038 | break; | 2052 | break; |
2039 | } | 2053 | } |
2054 | |||
2040 | shortgi_rate = (shortgi_rate << 12) | (shortgi_rate << 8) | | 2055 | shortgi_rate = (shortgi_rate << 12) | (shortgi_rate << 8) | |
2041 | (shortgi_rate << 4) | (shortgi_rate); | 2056 | (shortgi_rate << 4) | (shortgi_rate); |
2042 | } | 2057 | } |
2058 | |||
2043 | rtl_write_dword(rtlpriv, REG_ARFR0 + ratr_index * 4, ratr_value); | 2059 | rtl_write_dword(rtlpriv, REG_ARFR0 + ratr_index * 4, ratr_value); |
2060 | |||
2061 | RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG, "%x\n", | ||
2062 | rtl_read_dword(rtlpriv, REG_ARFR0)); | ||
2044 | } | 2063 | } |
2045 | 2064 | ||
2046 | void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw, u8 rssi_level) | 2065 | static void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw, |
2066 | struct ieee80211_sta *sta, | ||
2067 | u8 rssi_level) | ||
2047 | { | 2068 | { |
2048 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 2069 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
2049 | struct rtl_phy *rtlphy = &(rtlpriv->phy); | 2070 | struct rtl_phy *rtlphy = &(rtlpriv->phy); |
2050 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); | 2071 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); |
2051 | u32 ratr_bitmap = (u32) mac->basic_rates; | 2072 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); |
2052 | u8 *p_mcsrate = mac->mcs; | 2073 | struct rtl_sta_info *sta_entry = NULL; |
2053 | u8 ratr_index = 0; | 2074 | u32 ratr_bitmap; |
2054 | u8 curtxbw_40mhz = mac->bw_40; | 2075 | u8 ratr_index; |
2055 | u8 curshortgi_40mhz = mac->sgi_40; | 2076 | u8 curtxbw_40mhz = (sta->bandwidth >= IEEE80211_STA_RX_BW_40) ? 1 : 0; |
2056 | u8 curshortgi_20mhz = mac->sgi_20; | 2077 | u8 curshortgi_40mhz = curtxbw_40mhz && |
2057 | enum wireless_mode wirelessmode = mac->mode; | 2078 | (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? |
2079 | 1 : 0; | ||
2080 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? | ||
2081 | 1 : 0; | ||
2082 | enum wireless_mode wirelessmode = 0; | ||
2058 | bool shortgi = false; | 2083 | bool shortgi = false; |
2059 | u8 rate_mask[5]; | 2084 | u8 rate_mask[5]; |
2060 | u8 macid = 0; | 2085 | u8 macid = 0; |
2061 | u8 mimops = 1; | 2086 | u8 mimo_ps = IEEE80211_SMPS_OFF; |
2062 | 2087 | ||
2063 | ratr_bitmap |= (p_mcsrate[1] << 20) | (p_mcsrate[0] << 12); | 2088 | sta_entry = (struct rtl_sta_info *) sta->drv_priv; |
2089 | wirelessmode = sta_entry->wireless_mode; | ||
2090 | if (mac->opmode == NL80211_IFTYPE_STATION || | ||
2091 | mac->opmode == NL80211_IFTYPE_MESH_POINT) | ||
2092 | curtxbw_40mhz = mac->bw_40; | ||
2093 | else if (mac->opmode == NL80211_IFTYPE_AP || | ||
2094 | mac->opmode == NL80211_IFTYPE_ADHOC) | ||
2095 | macid = sta->aid + 1; | ||
2096 | |||
2097 | if (rtlhal->current_bandtype == BAND_ON_5G) | ||
2098 | ratr_bitmap = sta->supp_rates[1] << 4; | ||
2099 | else | ||
2100 | ratr_bitmap = sta->supp_rates[0]; | ||
2101 | if (mac->opmode == NL80211_IFTYPE_ADHOC) | ||
2102 | ratr_bitmap = 0xfff; | ||
2103 | ratr_bitmap |= (sta->ht_cap.mcs.rx_mask[1] << 20 | | ||
2104 | sta->ht_cap.mcs.rx_mask[0] << 12); | ||
2064 | switch (wirelessmode) { | 2105 | switch (wirelessmode) { |
2065 | case WIRELESS_MODE_B: | 2106 | case WIRELESS_MODE_B: |
2066 | ratr_index = RATR_INX_WIRELESS_B; | 2107 | ratr_index = RATR_INX_WIRELESS_B; |
@@ -2071,6 +2112,7 @@ void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw, u8 rssi_level) | |||
2071 | break; | 2112 | break; |
2072 | case WIRELESS_MODE_G: | 2113 | case WIRELESS_MODE_G: |
2073 | ratr_index = RATR_INX_WIRELESS_GB; | 2114 | ratr_index = RATR_INX_WIRELESS_GB; |
2115 | |||
2074 | if (rssi_level == 1) | 2116 | if (rssi_level == 1) |
2075 | ratr_bitmap &= 0x00000f00; | 2117 | ratr_bitmap &= 0x00000f00; |
2076 | else if (rssi_level == 2) | 2118 | else if (rssi_level == 2) |
@@ -2085,7 +2127,8 @@ void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw, u8 rssi_level) | |||
2085 | case WIRELESS_MODE_N_24G: | 2127 | case WIRELESS_MODE_N_24G: |
2086 | case WIRELESS_MODE_N_5G: | 2128 | case WIRELESS_MODE_N_5G: |
2087 | ratr_index = RATR_INX_WIRELESS_NGB; | 2129 | ratr_index = RATR_INX_WIRELESS_NGB; |
2088 | if (mimops == 0) { | 2130 | |
2131 | if (mimo_ps == IEEE80211_SMPS_STATIC) { | ||
2089 | if (rssi_level == 1) | 2132 | if (rssi_level == 1) |
2090 | ratr_bitmap &= 0x00070000; | 2133 | ratr_bitmap &= 0x00070000; |
2091 | else if (rssi_level == 2) | 2134 | else if (rssi_level == 2) |
@@ -2128,8 +2171,10 @@ void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw, u8 rssi_level) | |||
2128 | } | 2171 | } |
2129 | } | 2172 | } |
2130 | } | 2173 | } |
2174 | |||
2131 | if ((curtxbw_40mhz && curshortgi_40mhz) || | 2175 | if ((curtxbw_40mhz && curshortgi_40mhz) || |
2132 | (!curtxbw_40mhz && curshortgi_20mhz)) { | 2176 | (!curtxbw_40mhz && curshortgi_20mhz)) { |
2177 | |||
2133 | if (macid == 0) | 2178 | if (macid == 0) |
2134 | shortgi = true; | 2179 | shortgi = true; |
2135 | else if (macid == 1) | 2180 | else if (macid == 1) |
@@ -2138,21 +2183,42 @@ void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw, u8 rssi_level) | |||
2138 | break; | 2183 | break; |
2139 | default: | 2184 | default: |
2140 | ratr_index = RATR_INX_WIRELESS_NGB; | 2185 | ratr_index = RATR_INX_WIRELESS_NGB; |
2186 | |||
2141 | if (rtlphy->rf_type == RF_1T2R) | 2187 | if (rtlphy->rf_type == RF_1T2R) |
2142 | ratr_bitmap &= 0x000ff0ff; | 2188 | ratr_bitmap &= 0x000ff0ff; |
2143 | else | 2189 | else |
2144 | ratr_bitmap &= 0x0f0ff0ff; | 2190 | ratr_bitmap &= 0x0f0ff0ff; |
2145 | break; | 2191 | break; |
2146 | } | 2192 | } |
2147 | RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG, "ratr_bitmap :%x\n", | 2193 | sta_entry->ratr_index = ratr_index; |
2148 | ratr_bitmap); | 2194 | |
2149 | *(u32 *)&rate_mask = ((ratr_bitmap & 0x0fffffff) | | 2195 | RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG, |
2150 | ratr_index << 28); | 2196 | "ratr_bitmap :%x\n", ratr_bitmap); |
2197 | *(u32 *)&rate_mask = (ratr_bitmap & 0x0fffffff) | | ||
2198 | (ratr_index << 28); | ||
2151 | rate_mask[4] = macid | (shortgi ? 0x20 : 0x00) | 0x80; | 2199 | rate_mask[4] = macid | (shortgi ? 0x20 : 0x00) | 0x80; |
2152 | RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG, | 2200 | RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG, |
2153 | "Rate_index:%x, ratr_val:%x, %5phC\n", | 2201 | "Rate_index:%x, ratr_val:%x, %5phC\n", |
2154 | ratr_index, ratr_bitmap, rate_mask); | 2202 | ratr_index, ratr_bitmap, rate_mask); |
2155 | rtl92c_fill_h2c_cmd(hw, H2C_RA_MASK, 5, rate_mask); | 2203 | memcpy(rtlpriv->rate_mask, rate_mask, 5); |
2204 | /* rtl92c_fill_h2c_cmd() does USB I/O and will result in a | ||
2205 | * "scheduled while atomic" if called directly */ | ||
2206 | schedule_work(&rtlpriv->works.fill_h2c_cmd); | ||
2207 | |||
2208 | if (macid != 0) | ||
2209 | sta_entry->ratr_index = ratr_index; | ||
2210 | } | ||
2211 | |||
2212 | void rtl92cu_update_hal_rate_tbl(struct ieee80211_hw *hw, | ||
2213 | struct ieee80211_sta *sta, | ||
2214 | u8 rssi_level) | ||
2215 | { | ||
2216 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
2217 | |||
2218 | if (rtlpriv->dm.useramask) | ||
2219 | rtl92cu_update_hal_rate_mask(hw, sta, rssi_level); | ||
2220 | else | ||
2221 | rtl92cu_update_hal_rate_table(hw, sta); | ||
2156 | } | 2222 | } |
2157 | 2223 | ||
2158 | void rtl92cu_update_channel_access_setting(struct ieee80211_hw *hw) | 2224 | void rtl92cu_update_channel_access_setting(struct ieee80211_hw *hw) |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.h b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.h index f41a3aa4a26f..8e3ec1e25644 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.h +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.h | |||
@@ -98,10 +98,6 @@ void rtl92cu_update_interrupt_mask(struct ieee80211_hw *hw, | |||
98 | u32 add_msr, u32 rm_msr); | 98 | u32 add_msr, u32 rm_msr); |
99 | void rtl92cu_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val); | 99 | void rtl92cu_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val); |
100 | void rtl92cu_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val); | 100 | void rtl92cu_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val); |
101 | void rtl92cu_update_hal_rate_table(struct ieee80211_hw *hw, | ||
102 | struct ieee80211_sta *sta, | ||
103 | u8 rssi_level); | ||
104 | void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw, u8 rssi_level); | ||
105 | 101 | ||
106 | void rtl92cu_update_channel_access_setting(struct ieee80211_hw *hw); | 102 | void rtl92cu_update_channel_access_setting(struct ieee80211_hw *hw); |
107 | bool rtl92cu_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 * valid); | 103 | bool rtl92cu_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 * valid); |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c index 85b6bdb163c0..da4f587199ee 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c | |||
@@ -289,14 +289,30 @@ void rtl92c_set_key(struct ieee80211_hw *hw, u32 key_index, | |||
289 | macaddr = cam_const_broad; | 289 | macaddr = cam_const_broad; |
290 | entry_id = key_index; | 290 | entry_id = key_index; |
291 | } else { | 291 | } else { |
292 | if (mac->opmode == NL80211_IFTYPE_AP || | ||
293 | mac->opmode == NL80211_IFTYPE_MESH_POINT) { | ||
294 | entry_id = rtl_cam_get_free_entry(hw, | ||
295 | p_macaddr); | ||
296 | if (entry_id >= TOTAL_CAM_ENTRY) { | ||
297 | RT_TRACE(rtlpriv, COMP_SEC, | ||
298 | DBG_EMERG, | ||
299 | "Can not find free hw security cam entry\n"); | ||
300 | return; | ||
301 | } | ||
302 | } else { | ||
303 | entry_id = CAM_PAIRWISE_KEY_POSITION; | ||
304 | } | ||
305 | |||
292 | key_index = PAIRWISE_KEYIDX; | 306 | key_index = PAIRWISE_KEYIDX; |
293 | entry_id = CAM_PAIRWISE_KEY_POSITION; | ||
294 | is_pairwise = true; | 307 | is_pairwise = true; |
295 | } | 308 | } |
296 | } | 309 | } |
297 | if (rtlpriv->sec.key_len[key_index] == 0) { | 310 | if (rtlpriv->sec.key_len[key_index] == 0) { |
298 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, | 311 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, |
299 | "delete one entry\n"); | 312 | "delete one entry\n"); |
313 | if (mac->opmode == NL80211_IFTYPE_AP || | ||
314 | mac->opmode == NL80211_IFTYPE_MESH_POINT) | ||
315 | rtl_cam_del_entry(hw, p_macaddr); | ||
300 | rtl_cam_delete_one_entry(hw, p_macaddr, entry_id); | 316 | rtl_cam_delete_one_entry(hw, p_macaddr, entry_id); |
301 | } else { | 317 | } else { |
302 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 318 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c index 938b1e670b93..826f085c29dd 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | |||
@@ -106,8 +106,7 @@ static struct rtl_hal_ops rtl8192cu_hal_ops = { | |||
106 | .update_interrupt_mask = rtl92cu_update_interrupt_mask, | 106 | .update_interrupt_mask = rtl92cu_update_interrupt_mask, |
107 | .get_hw_reg = rtl92cu_get_hw_reg, | 107 | .get_hw_reg = rtl92cu_get_hw_reg, |
108 | .set_hw_reg = rtl92cu_set_hw_reg, | 108 | .set_hw_reg = rtl92cu_set_hw_reg, |
109 | .update_rate_tbl = rtl92cu_update_hal_rate_table, | 109 | .update_rate_tbl = rtl92cu_update_hal_rate_tbl, |
110 | .update_rate_mask = rtl92cu_update_hal_rate_mask, | ||
111 | .fill_tx_desc = rtl92cu_tx_fill_desc, | 110 | .fill_tx_desc = rtl92cu_tx_fill_desc, |
112 | .fill_fake_txdesc = rtl92cu_fill_fake_txdesc, | 111 | .fill_fake_txdesc = rtl92cu_fill_fake_txdesc, |
113 | .fill_tx_cmddesc = rtl92cu_tx_fill_cmddesc, | 112 | .fill_tx_cmddesc = rtl92cu_tx_fill_cmddesc, |
@@ -137,6 +136,7 @@ static struct rtl_hal_ops rtl8192cu_hal_ops = { | |||
137 | .phy_lc_calibrate = _rtl92cu_phy_lc_calibrate, | 136 | .phy_lc_calibrate = _rtl92cu_phy_lc_calibrate, |
138 | .phy_set_bw_mode_callback = rtl92cu_phy_set_bw_mode_callback, | 137 | .phy_set_bw_mode_callback = rtl92cu_phy_set_bw_mode_callback, |
139 | .dm_dynamic_txpower = rtl92cu_dm_dynamic_txpower, | 138 | .dm_dynamic_txpower = rtl92cu_dm_dynamic_txpower, |
139 | .fill_h2c_cmd = rtl92c_fill_h2c_cmd, | ||
140 | }; | 140 | }; |
141 | 141 | ||
142 | static struct rtl_mod_params rtl92cu_mod_params = { | 142 | static struct rtl_mod_params rtl92cu_mod_params = { |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.h b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.h index a1310abd0d54..262e1e4c6e5b 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.h +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.h | |||
@@ -49,5 +49,8 @@ bool rtl92cu_phy_set_rf_power_state(struct ieee80211_hw *hw, | |||
49 | u32 rtl92cu_phy_query_rf_reg(struct ieee80211_hw *hw, | 49 | u32 rtl92cu_phy_query_rf_reg(struct ieee80211_hw *hw, |
50 | enum radio_path rfpath, u32 regaddr, u32 bitmask); | 50 | enum radio_path rfpath, u32 regaddr, u32 bitmask); |
51 | void rtl92cu_phy_set_bw_mode_callback(struct ieee80211_hw *hw); | 51 | void rtl92cu_phy_set_bw_mode_callback(struct ieee80211_hw *hw); |
52 | void rtl92cu_update_hal_rate_tbl(struct ieee80211_hw *hw, | ||
53 | struct ieee80211_sta *sta, | ||
54 | u8 rssi_level); | ||
52 | 55 | ||
53 | #endif | 56 | #endif |
diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c index 76732b0cd221..a3532e077871 100644 --- a/drivers/net/wireless/rtlwifi/usb.c +++ b/drivers/net/wireless/rtlwifi/usb.c | |||
@@ -824,6 +824,7 @@ static void rtl_usb_stop(struct ieee80211_hw *hw) | |||
824 | 824 | ||
825 | /* should after adapter start and interrupt enable. */ | 825 | /* should after adapter start and interrupt enable. */ |
826 | set_hal_stop(rtlhal); | 826 | set_hal_stop(rtlhal); |
827 | cancel_work_sync(&rtlpriv->works.fill_h2c_cmd); | ||
827 | /* Enable software */ | 828 | /* Enable software */ |
828 | SET_USB_STOP(rtlusb); | 829 | SET_USB_STOP(rtlusb); |
829 | rtl_usb_deinit(hw); | 830 | rtl_usb_deinit(hw); |
@@ -1026,6 +1027,16 @@ static bool rtl_usb_tx_chk_waitq_insert(struct ieee80211_hw *hw, | |||
1026 | return false; | 1027 | return false; |
1027 | } | 1028 | } |
1028 | 1029 | ||
1030 | static void rtl_fill_h2c_cmd_work_callback(struct work_struct *work) | ||
1031 | { | ||
1032 | struct rtl_works *rtlworks = | ||
1033 | container_of(work, struct rtl_works, fill_h2c_cmd); | ||
1034 | struct ieee80211_hw *hw = rtlworks->hw; | ||
1035 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
1036 | |||
1037 | rtlpriv->cfg->ops->fill_h2c_cmd(hw, H2C_RA_MASK, 5, rtlpriv->rate_mask); | ||
1038 | } | ||
1039 | |||
1029 | static struct rtl_intf_ops rtl_usb_ops = { | 1040 | static struct rtl_intf_ops rtl_usb_ops = { |
1030 | .adapter_start = rtl_usb_start, | 1041 | .adapter_start = rtl_usb_start, |
1031 | .adapter_stop = rtl_usb_stop, | 1042 | .adapter_stop = rtl_usb_stop, |
@@ -1057,6 +1068,8 @@ int rtl_usb_probe(struct usb_interface *intf, | |||
1057 | 1068 | ||
1058 | /* this spin lock must be initialized early */ | 1069 | /* this spin lock must be initialized early */ |
1059 | spin_lock_init(&rtlpriv->locks.usb_lock); | 1070 | spin_lock_init(&rtlpriv->locks.usb_lock); |
1071 | INIT_WORK(&rtlpriv->works.fill_h2c_cmd, | ||
1072 | rtl_fill_h2c_cmd_work_callback); | ||
1060 | 1073 | ||
1061 | rtlpriv->usb_data_index = 0; | 1074 | rtlpriv->usb_data_index = 0; |
1062 | init_completion(&rtlpriv->firmware_loading_complete); | 1075 | init_completion(&rtlpriv->firmware_loading_complete); |
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h index 44328baa6389..cc03e7c87cbe 100644 --- a/drivers/net/wireless/rtlwifi/wifi.h +++ b/drivers/net/wireless/rtlwifi/wifi.h | |||
@@ -1736,6 +1736,8 @@ struct rtl_hal_ops { | |||
1736 | void (*bt_wifi_media_status_notify) (struct ieee80211_hw *hw, | 1736 | void (*bt_wifi_media_status_notify) (struct ieee80211_hw *hw, |
1737 | bool mstate); | 1737 | bool mstate); |
1738 | void (*bt_coex_off_before_lps) (struct ieee80211_hw *hw); | 1738 | void (*bt_coex_off_before_lps) (struct ieee80211_hw *hw); |
1739 | void (*fill_h2c_cmd) (struct ieee80211_hw *hw, u8 element_id, | ||
1740 | u32 cmd_len, u8 *p_cmdbuffer); | ||
1739 | }; | 1741 | }; |
1740 | 1742 | ||
1741 | struct rtl_intf_ops { | 1743 | struct rtl_intf_ops { |
@@ -1869,6 +1871,7 @@ struct rtl_works { | |||
1869 | struct delayed_work fwevt_wq; | 1871 | struct delayed_work fwevt_wq; |
1870 | 1872 | ||
1871 | struct work_struct lps_change_work; | 1873 | struct work_struct lps_change_work; |
1874 | struct work_struct fill_h2c_cmd; | ||
1872 | }; | 1875 | }; |
1873 | 1876 | ||
1874 | struct rtl_debug { | 1877 | struct rtl_debug { |
@@ -2048,6 +2051,7 @@ struct rtl_priv { | |||
2048 | }; | 2051 | }; |
2049 | }; | 2052 | }; |
2050 | bool enter_ps; /* true when entering PS */ | 2053 | bool enter_ps; /* true when entering PS */ |
2054 | u8 rate_mask[5]; | ||
2051 | 2055 | ||
2052 | /*This must be the last item so | 2056 | /*This must be the last item so |
2053 | that it points to the data allocated | 2057 | that it points to the data allocated |
diff --git a/drivers/net/wireless/ti/wl12xx/scan.c b/drivers/net/wireless/ti/wl12xx/scan.c index affdb3ec6225..4a0bbb13806b 100644 --- a/drivers/net/wireless/ti/wl12xx/scan.c +++ b/drivers/net/wireless/ti/wl12xx/scan.c | |||
@@ -310,7 +310,7 @@ static void wl12xx_adjust_channels(struct wl1271_cmd_sched_scan_config *cmd, | |||
310 | memcpy(cmd->channels_2, cmd_channels->channels_2, | 310 | memcpy(cmd->channels_2, cmd_channels->channels_2, |
311 | sizeof(cmd->channels_2)); | 311 | sizeof(cmd->channels_2)); |
312 | memcpy(cmd->channels_5, cmd_channels->channels_5, | 312 | memcpy(cmd->channels_5, cmd_channels->channels_5, |
313 | sizeof(cmd->channels_2)); | 313 | sizeof(cmd->channels_5)); |
314 | /* channels_4 are not supported, so no need to copy them */ | 314 | /* channels_4 are not supported, so no need to copy them */ |
315 | } | 315 | } |
316 | 316 | ||
diff --git a/drivers/net/wireless/ti/wl12xx/wl12xx.h b/drivers/net/wireless/ti/wl12xx/wl12xx.h index 222d03540200..9e5484a73667 100644 --- a/drivers/net/wireless/ti/wl12xx/wl12xx.h +++ b/drivers/net/wireless/ti/wl12xx/wl12xx.h | |||
@@ -36,12 +36,12 @@ | |||
36 | #define WL127X_IFTYPE_SR_VER 3 | 36 | #define WL127X_IFTYPE_SR_VER 3 |
37 | #define WL127X_MAJOR_SR_VER 10 | 37 | #define WL127X_MAJOR_SR_VER 10 |
38 | #define WL127X_SUBTYPE_SR_VER WLCORE_FW_VER_IGNORE | 38 | #define WL127X_SUBTYPE_SR_VER WLCORE_FW_VER_IGNORE |
39 | #define WL127X_MINOR_SR_VER 115 | 39 | #define WL127X_MINOR_SR_VER 133 |
40 | /* minimum multi-role FW version for wl127x */ | 40 | /* minimum multi-role FW version for wl127x */ |
41 | #define WL127X_IFTYPE_MR_VER 5 | 41 | #define WL127X_IFTYPE_MR_VER 5 |
42 | #define WL127X_MAJOR_MR_VER 7 | 42 | #define WL127X_MAJOR_MR_VER 7 |
43 | #define WL127X_SUBTYPE_MR_VER WLCORE_FW_VER_IGNORE | 43 | #define WL127X_SUBTYPE_MR_VER WLCORE_FW_VER_IGNORE |
44 | #define WL127X_MINOR_MR_VER 115 | 44 | #define WL127X_MINOR_MR_VER 42 |
45 | 45 | ||
46 | /* FW chip version for wl128x */ | 46 | /* FW chip version for wl128x */ |
47 | #define WL128X_CHIP_VER 7 | 47 | #define WL128X_CHIP_VER 7 |
@@ -49,7 +49,7 @@ | |||
49 | #define WL128X_IFTYPE_SR_VER 3 | 49 | #define WL128X_IFTYPE_SR_VER 3 |
50 | #define WL128X_MAJOR_SR_VER 10 | 50 | #define WL128X_MAJOR_SR_VER 10 |
51 | #define WL128X_SUBTYPE_SR_VER WLCORE_FW_VER_IGNORE | 51 | #define WL128X_SUBTYPE_SR_VER WLCORE_FW_VER_IGNORE |
52 | #define WL128X_MINOR_SR_VER 115 | 52 | #define WL128X_MINOR_SR_VER 133 |
53 | /* minimum multi-role FW version for wl128x */ | 53 | /* minimum multi-role FW version for wl128x */ |
54 | #define WL128X_IFTYPE_MR_VER 5 | 54 | #define WL128X_IFTYPE_MR_VER 5 |
55 | #define WL128X_MAJOR_MR_VER 7 | 55 | #define WL128X_MAJOR_MR_VER 7 |
diff --git a/drivers/net/wireless/ti/wl18xx/scan.c b/drivers/net/wireless/ti/wl18xx/scan.c index 09d944505ac0..2b642f8c9266 100644 --- a/drivers/net/wireless/ti/wl18xx/scan.c +++ b/drivers/net/wireless/ti/wl18xx/scan.c | |||
@@ -34,7 +34,7 @@ static void wl18xx_adjust_channels(struct wl18xx_cmd_scan_params *cmd, | |||
34 | memcpy(cmd->channels_2, cmd_channels->channels_2, | 34 | memcpy(cmd->channels_2, cmd_channels->channels_2, |
35 | sizeof(cmd->channels_2)); | 35 | sizeof(cmd->channels_2)); |
36 | memcpy(cmd->channels_5, cmd_channels->channels_5, | 36 | memcpy(cmd->channels_5, cmd_channels->channels_5, |
37 | sizeof(cmd->channels_2)); | 37 | sizeof(cmd->channels_5)); |
38 | /* channels_4 are not supported, so no need to copy them */ | 38 | /* channels_4 are not supported, so no need to copy them */ |
39 | } | 39 | } |
40 | 40 | ||
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c index 37984e6d4e99..8c20935d72c9 100644 --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c | |||
@@ -662,7 +662,7 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk) | |||
662 | { | 662 | { |
663 | struct xenvif *vif = NULL, *tmp; | 663 | struct xenvif *vif = NULL, *tmp; |
664 | s8 status; | 664 | s8 status; |
665 | u16 irq, flags; | 665 | u16 flags; |
666 | struct xen_netif_rx_response *resp; | 666 | struct xen_netif_rx_response *resp; |
667 | struct sk_buff_head rxq; | 667 | struct sk_buff_head rxq; |
668 | struct sk_buff *skb; | 668 | struct sk_buff *skb; |
@@ -771,13 +771,13 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk) | |||
771 | sco->meta_slots_used); | 771 | sco->meta_slots_used); |
772 | 772 | ||
773 | RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->rx, ret); | 773 | RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->rx, ret); |
774 | irq = vif->irq; | ||
775 | if (ret && list_empty(&vif->notify_list)) | ||
776 | list_add_tail(&vif->notify_list, ¬ify); | ||
777 | 774 | ||
778 | xenvif_notify_tx_completion(vif); | 775 | xenvif_notify_tx_completion(vif); |
779 | 776 | ||
780 | xenvif_put(vif); | 777 | if (ret && list_empty(&vif->notify_list)) |
778 | list_add_tail(&vif->notify_list, ¬ify); | ||
779 | else | ||
780 | xenvif_put(vif); | ||
781 | npo.meta_cons += sco->meta_slots_used; | 781 | npo.meta_cons += sco->meta_slots_used; |
782 | dev_kfree_skb(skb); | 782 | dev_kfree_skb(skb); |
783 | } | 783 | } |
@@ -785,6 +785,7 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk) | |||
785 | list_for_each_entry_safe(vif, tmp, ¬ify, notify_list) { | 785 | list_for_each_entry_safe(vif, tmp, ¬ify, notify_list) { |
786 | notify_remote_via_irq(vif->irq); | 786 | notify_remote_via_irq(vif->irq); |
787 | list_del_init(&vif->notify_list); | 787 | list_del_init(&vif->notify_list); |
788 | xenvif_put(vif); | ||
788 | } | 789 | } |
789 | 790 | ||
790 | /* More work to do? */ | 791 | /* More work to do? */ |
diff --git a/drivers/of/base.c b/drivers/of/base.c index f53b992f060a..a6f584a7f4a1 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c | |||
@@ -192,14 +192,15 @@ EXPORT_SYMBOL(of_find_property); | |||
192 | struct device_node *of_find_all_nodes(struct device_node *prev) | 192 | struct device_node *of_find_all_nodes(struct device_node *prev) |
193 | { | 193 | { |
194 | struct device_node *np; | 194 | struct device_node *np; |
195 | unsigned long flags; | ||
195 | 196 | ||
196 | raw_spin_lock(&devtree_lock); | 197 | raw_spin_lock_irqsave(&devtree_lock, flags); |
197 | np = prev ? prev->allnext : of_allnodes; | 198 | np = prev ? prev->allnext : of_allnodes; |
198 | for (; np != NULL; np = np->allnext) | 199 | for (; np != NULL; np = np->allnext) |
199 | if (of_node_get(np)) | 200 | if (of_node_get(np)) |
200 | break; | 201 | break; |
201 | of_node_put(prev); | 202 | of_node_put(prev); |
202 | raw_spin_unlock(&devtree_lock); | 203 | raw_spin_unlock_irqrestore(&devtree_lock, flags); |
203 | return np; | 204 | return np; |
204 | } | 205 | } |
205 | EXPORT_SYMBOL(of_find_all_nodes); | 206 | EXPORT_SYMBOL(of_find_all_nodes); |
@@ -421,8 +422,9 @@ struct device_node *of_get_next_available_child(const struct device_node *node, | |||
421 | struct device_node *prev) | 422 | struct device_node *prev) |
422 | { | 423 | { |
423 | struct device_node *next; | 424 | struct device_node *next; |
425 | unsigned long flags; | ||
424 | 426 | ||
425 | raw_spin_lock(&devtree_lock); | 427 | raw_spin_lock_irqsave(&devtree_lock, flags); |
426 | next = prev ? prev->sibling : node->child; | 428 | next = prev ? prev->sibling : node->child; |
427 | for (; next; next = next->sibling) { | 429 | for (; next; next = next->sibling) { |
428 | if (!__of_device_is_available(next)) | 430 | if (!__of_device_is_available(next)) |
@@ -431,7 +433,7 @@ struct device_node *of_get_next_available_child(const struct device_node *node, | |||
431 | break; | 433 | break; |
432 | } | 434 | } |
433 | of_node_put(prev); | 435 | of_node_put(prev); |
434 | raw_spin_unlock(&devtree_lock); | 436 | raw_spin_unlock_irqrestore(&devtree_lock, flags); |
435 | return next; | 437 | return next; |
436 | } | 438 | } |
437 | EXPORT_SYMBOL(of_get_next_available_child); | 439 | EXPORT_SYMBOL(of_get_next_available_child); |
@@ -735,13 +737,14 @@ EXPORT_SYMBOL_GPL(of_modalias_node); | |||
735 | struct device_node *of_find_node_by_phandle(phandle handle) | 737 | struct device_node *of_find_node_by_phandle(phandle handle) |
736 | { | 738 | { |
737 | struct device_node *np; | 739 | struct device_node *np; |
740 | unsigned long flags; | ||
738 | 741 | ||
739 | raw_spin_lock(&devtree_lock); | 742 | raw_spin_lock_irqsave(&devtree_lock, flags); |
740 | for (np = of_allnodes; np; np = np->allnext) | 743 | for (np = of_allnodes; np; np = np->allnext) |
741 | if (np->phandle == handle) | 744 | if (np->phandle == handle) |
742 | break; | 745 | break; |
743 | of_node_get(np); | 746 | of_node_get(np); |
744 | raw_spin_unlock(&devtree_lock); | 747 | raw_spin_unlock_irqrestore(&devtree_lock, flags); |
745 | return np; | 748 | return np; |
746 | } | 749 | } |
747 | EXPORT_SYMBOL(of_find_node_by_phandle); | 750 | EXPORT_SYMBOL(of_find_node_by_phandle); |
diff --git a/drivers/pinctrl/sh-pfc/Kconfig b/drivers/pinctrl/sh-pfc/Kconfig index f8a2ae413c7f..636a882b406e 100644 --- a/drivers/pinctrl/sh-pfc/Kconfig +++ b/drivers/pinctrl/sh-pfc/Kconfig | |||
@@ -5,8 +5,6 @@ | |||
5 | if ARCH_SHMOBILE || SUPERH | 5 | if ARCH_SHMOBILE || SUPERH |
6 | 6 | ||
7 | config PINCTRL_SH_PFC | 7 | config PINCTRL_SH_PFC |
8 | # XXX move off the gpio dependency | ||
9 | depends on GPIOLIB | ||
10 | select GPIO_SH_PFC if ARCH_REQUIRE_GPIOLIB | 8 | select GPIO_SH_PFC if ARCH_REQUIRE_GPIOLIB |
11 | select PINMUX | 9 | select PINMUX |
12 | select PINCONF | 10 | select PINCONF |
@@ -32,11 +30,21 @@ config PINCTRL_PFC_R8A7740 | |||
32 | depends on ARCH_R8A7740 | 30 | depends on ARCH_R8A7740 |
33 | select PINCTRL_SH_PFC | 31 | select PINCTRL_SH_PFC |
34 | 32 | ||
33 | config PINCTRL_PFC_R8A7778 | ||
34 | def_bool y | ||
35 | depends on ARCH_R8A7778 | ||
36 | select PINCTRL_SH_PFC | ||
37 | |||
35 | config PINCTRL_PFC_R8A7779 | 38 | config PINCTRL_PFC_R8A7779 |
36 | def_bool y | 39 | def_bool y |
37 | depends on ARCH_R8A7779 | 40 | depends on ARCH_R8A7779 |
38 | select PINCTRL_SH_PFC | 41 | select PINCTRL_SH_PFC |
39 | 42 | ||
43 | config PINCTRL_PFC_R8A7790 | ||
44 | def_bool y | ||
45 | depends on ARCH_R8A7790 | ||
46 | select PINCTRL_SH_PFC | ||
47 | |||
40 | config PINCTRL_PFC_SH7203 | 48 | config PINCTRL_PFC_SH7203 |
41 | def_bool y | 49 | def_bool y |
42 | depends on CPU_SUBTYPE_SH7203 | 50 | depends on CPU_SUBTYPE_SH7203 |
@@ -64,6 +72,7 @@ config PINCTRL_PFC_SH73A0 | |||
64 | def_bool y | 72 | def_bool y |
65 | depends on ARCH_SH73A0 | 73 | depends on ARCH_SH73A0 |
66 | select PINCTRL_SH_PFC | 74 | select PINCTRL_SH_PFC |
75 | select REGULATOR | ||
67 | 76 | ||
68 | config PINCTRL_PFC_SH7720 | 77 | config PINCTRL_PFC_SH7720 |
69 | def_bool y | 78 | def_bool y |
diff --git a/drivers/pinctrl/sh-pfc/Makefile b/drivers/pinctrl/sh-pfc/Makefile index 211cd8e98a8a..5e0c222c12d7 100644 --- a/drivers/pinctrl/sh-pfc/Makefile +++ b/drivers/pinctrl/sh-pfc/Makefile | |||
@@ -5,7 +5,9 @@ endif | |||
5 | obj-$(CONFIG_PINCTRL_SH_PFC) += sh-pfc.o | 5 | obj-$(CONFIG_PINCTRL_SH_PFC) += sh-pfc.o |
6 | obj-$(CONFIG_PINCTRL_PFC_R8A73A4) += pfc-r8a73a4.o | 6 | obj-$(CONFIG_PINCTRL_PFC_R8A73A4) += pfc-r8a73a4.o |
7 | obj-$(CONFIG_PINCTRL_PFC_R8A7740) += pfc-r8a7740.o | 7 | obj-$(CONFIG_PINCTRL_PFC_R8A7740) += pfc-r8a7740.o |
8 | obj-$(CONFIG_PINCTRL_PFC_R8A7778) += pfc-r8a7778.o | ||
8 | obj-$(CONFIG_PINCTRL_PFC_R8A7779) += pfc-r8a7779.o | 9 | obj-$(CONFIG_PINCTRL_PFC_R8A7779) += pfc-r8a7779.o |
10 | obj-$(CONFIG_PINCTRL_PFC_R8A7790) += pfc-r8a7790.o | ||
9 | obj-$(CONFIG_PINCTRL_PFC_SH7203) += pfc-sh7203.o | 11 | obj-$(CONFIG_PINCTRL_PFC_SH7203) += pfc-sh7203.o |
10 | obj-$(CONFIG_PINCTRL_PFC_SH7264) += pfc-sh7264.o | 12 | obj-$(CONFIG_PINCTRL_PFC_SH7264) += pfc-sh7264.o |
11 | obj-$(CONFIG_PINCTRL_PFC_SH7269) += pfc-sh7269.o | 13 | obj-$(CONFIG_PINCTRL_PFC_SH7269) += pfc-sh7269.o |
diff --git a/drivers/pinctrl/sh-pfc/core.c b/drivers/pinctrl/sh-pfc/core.c index b551336924a5..3b2fd43ff294 100644 --- a/drivers/pinctrl/sh-pfc/core.c +++ b/drivers/pinctrl/sh-pfc/core.c | |||
@@ -372,6 +372,12 @@ static int sh_pfc_probe(struct platform_device *pdev) | |||
372 | 372 | ||
373 | spin_lock_init(&pfc->lock); | 373 | spin_lock_init(&pfc->lock); |
374 | 374 | ||
375 | if (info->ops && info->ops->init) { | ||
376 | ret = info->ops->init(pfc); | ||
377 | if (ret < 0) | ||
378 | return ret; | ||
379 | } | ||
380 | |||
375 | pinctrl_provide_dummies(); | 381 | pinctrl_provide_dummies(); |
376 | 382 | ||
377 | /* | 383 | /* |
@@ -379,7 +385,7 @@ static int sh_pfc_probe(struct platform_device *pdev) | |||
379 | */ | 385 | */ |
380 | ret = sh_pfc_register_pinctrl(pfc); | 386 | ret = sh_pfc_register_pinctrl(pfc); |
381 | if (unlikely(ret != 0)) | 387 | if (unlikely(ret != 0)) |
382 | return ret; | 388 | goto error; |
383 | 389 | ||
384 | #ifdef CONFIG_GPIO_SH_PFC | 390 | #ifdef CONFIG_GPIO_SH_PFC |
385 | /* | 391 | /* |
@@ -401,6 +407,11 @@ static int sh_pfc_probe(struct platform_device *pdev) | |||
401 | dev_info(pfc->dev, "%s support registered\n", info->name); | 407 | dev_info(pfc->dev, "%s support registered\n", info->name); |
402 | 408 | ||
403 | return 0; | 409 | return 0; |
410 | |||
411 | error: | ||
412 | if (info->ops && info->ops->exit) | ||
413 | info->ops->exit(pfc); | ||
414 | return ret; | ||
404 | } | 415 | } |
405 | 416 | ||
406 | static int sh_pfc_remove(struct platform_device *pdev) | 417 | static int sh_pfc_remove(struct platform_device *pdev) |
@@ -412,6 +423,9 @@ static int sh_pfc_remove(struct platform_device *pdev) | |||
412 | #endif | 423 | #endif |
413 | sh_pfc_unregister_pinctrl(pfc); | 424 | sh_pfc_unregister_pinctrl(pfc); |
414 | 425 | ||
426 | if (pfc->info->ops && pfc->info->ops->exit) | ||
427 | pfc->info->ops->exit(pfc); | ||
428 | |||
415 | platform_set_drvdata(pdev, NULL); | 429 | platform_set_drvdata(pdev, NULL); |
416 | 430 | ||
417 | return 0; | 431 | return 0; |
@@ -424,9 +438,15 @@ static const struct platform_device_id sh_pfc_id_table[] = { | |||
424 | #ifdef CONFIG_PINCTRL_PFC_R8A7740 | 438 | #ifdef CONFIG_PINCTRL_PFC_R8A7740 |
425 | { "pfc-r8a7740", (kernel_ulong_t)&r8a7740_pinmux_info }, | 439 | { "pfc-r8a7740", (kernel_ulong_t)&r8a7740_pinmux_info }, |
426 | #endif | 440 | #endif |
441 | #ifdef CONFIG_PINCTRL_PFC_R8A7778 | ||
442 | { "pfc-r8a7778", (kernel_ulong_t)&r8a7778_pinmux_info }, | ||
443 | #endif | ||
427 | #ifdef CONFIG_PINCTRL_PFC_R8A7779 | 444 | #ifdef CONFIG_PINCTRL_PFC_R8A7779 |
428 | { "pfc-r8a7779", (kernel_ulong_t)&r8a7779_pinmux_info }, | 445 | { "pfc-r8a7779", (kernel_ulong_t)&r8a7779_pinmux_info }, |
429 | #endif | 446 | #endif |
447 | #ifdef CONFIG_PINCTRL_PFC_R8A7790 | ||
448 | { "pfc-r8a7790", (kernel_ulong_t)&r8a7790_pinmux_info }, | ||
449 | #endif | ||
430 | #ifdef CONFIG_PINCTRL_PFC_SH7203 | 450 | #ifdef CONFIG_PINCTRL_PFC_SH7203 |
431 | { "pfc-sh7203", (kernel_ulong_t)&sh7203_pinmux_info }, | 451 | { "pfc-sh7203", (kernel_ulong_t)&sh7203_pinmux_info }, |
432 | #endif | 452 | #endif |
diff --git a/drivers/pinctrl/sh-pfc/core.h b/drivers/pinctrl/sh-pfc/core.h index 89cb4289d761..f02ba1dde3a0 100644 --- a/drivers/pinctrl/sh-pfc/core.h +++ b/drivers/pinctrl/sh-pfc/core.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #define __SH_PFC_CORE_H__ | 11 | #define __SH_PFC_CORE_H__ |
12 | 12 | ||
13 | #include <linux/compiler.h> | 13 | #include <linux/compiler.h> |
14 | #include <linux/spinlock.h> | ||
14 | #include <linux/types.h> | 15 | #include <linux/types.h> |
15 | 16 | ||
16 | #include "sh_pfc.h" | 17 | #include "sh_pfc.h" |
@@ -27,6 +28,7 @@ struct sh_pfc_pinctrl; | |||
27 | struct sh_pfc { | 28 | struct sh_pfc { |
28 | struct device *dev; | 29 | struct device *dev; |
29 | const struct sh_pfc_soc_info *info; | 30 | const struct sh_pfc_soc_info *info; |
31 | void *soc_data; | ||
30 | spinlock_t lock; | 32 | spinlock_t lock; |
31 | 33 | ||
32 | unsigned int num_windows; | 34 | unsigned int num_windows; |
@@ -56,7 +58,9 @@ int sh_pfc_config_mux(struct sh_pfc *pfc, unsigned mark, int pinmux_type); | |||
56 | 58 | ||
57 | extern const struct sh_pfc_soc_info r8a73a4_pinmux_info; | 59 | extern const struct sh_pfc_soc_info r8a73a4_pinmux_info; |
58 | extern const struct sh_pfc_soc_info r8a7740_pinmux_info; | 60 | extern const struct sh_pfc_soc_info r8a7740_pinmux_info; |
61 | extern const struct sh_pfc_soc_info r8a7778_pinmux_info; | ||
59 | extern const struct sh_pfc_soc_info r8a7779_pinmux_info; | 62 | extern const struct sh_pfc_soc_info r8a7779_pinmux_info; |
63 | extern const struct sh_pfc_soc_info r8a7790_pinmux_info; | ||
60 | extern const struct sh_pfc_soc_info sh7203_pinmux_info; | 64 | extern const struct sh_pfc_soc_info sh7203_pinmux_info; |
61 | extern const struct sh_pfc_soc_info sh7264_pinmux_info; | 65 | extern const struct sh_pfc_soc_info sh7264_pinmux_info; |
62 | extern const struct sh_pfc_soc_info sh7269_pinmux_info; | 66 | extern const struct sh_pfc_soc_info sh7269_pinmux_info; |
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7740.c b/drivers/pinctrl/sh-pfc/pfc-r8a7740.c index bbd87d29bfd0..f6ea47c433b3 100644 --- a/drivers/pinctrl/sh-pfc/pfc-r8a7740.c +++ b/drivers/pinctrl/sh-pfc/pfc-r8a7740.c | |||
@@ -18,10 +18,14 @@ | |||
18 | * along with this program; if not, write to the Free Software | 18 | * along with this program; if not, write to the Free Software |
19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
20 | */ | 20 | */ |
21 | #include <linux/io.h> | ||
21 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/pinctrl/pinconf-generic.h> | ||
24 | |||
22 | #include <mach/r8a7740.h> | 25 | #include <mach/r8a7740.h> |
23 | #include <mach/irqs.h> | 26 | #include <mach/irqs.h> |
24 | 27 | ||
28 | #include "core.h" | ||
25 | #include "sh_pfc.h" | 29 | #include "sh_pfc.h" |
26 | 30 | ||
27 | #define CPU_ALL_PORT(fn, pfx, sfx) \ | 31 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
@@ -30,6 +34,29 @@ | |||
30 | PORT_10(fn, pfx##20, sfx), \ | 34 | PORT_10(fn, pfx##20, sfx), \ |
31 | PORT_1(fn, pfx##210, sfx), PORT_1(fn, pfx##211, sfx) | 35 | PORT_1(fn, pfx##210, sfx), PORT_1(fn, pfx##211, sfx) |
32 | 36 | ||
37 | #undef _GPIO_PORT | ||
38 | #define _GPIO_PORT(gpio, sfx) \ | ||
39 | [gpio] = { \ | ||
40 | .name = __stringify(PORT##gpio), \ | ||
41 | .enum_id = PORT##gpio##_DATA, \ | ||
42 | } | ||
43 | |||
44 | #define IRQC_PIN_MUX(irq, pin) \ | ||
45 | static const unsigned int intc_irq##irq##_pins[] = { \ | ||
46 | pin, \ | ||
47 | }; \ | ||
48 | static const unsigned int intc_irq##irq##_mux[] = { \ | ||
49 | IRQ##irq##_MARK, \ | ||
50 | } | ||
51 | |||
52 | #define IRQC_PINS_MUX(irq, idx, pin) \ | ||
53 | static const unsigned int intc_irq##irq##_##idx##_pins[] = { \ | ||
54 | pin, \ | ||
55 | }; \ | ||
56 | static const unsigned int intc_irq##irq##_##idx##_mux[] = { \ | ||
57 | IRQ##irq##_PORT##pin##_MARK, \ | ||
58 | } | ||
59 | |||
33 | enum { | 60 | enum { |
34 | PINMUX_RESERVED = 0, | 61 | PINMUX_RESERVED = 0, |
35 | 62 | ||
@@ -43,16 +70,6 @@ enum { | |||
43 | PORT_ALL(IN), | 70 | PORT_ALL(IN), |
44 | PINMUX_INPUT_END, | 71 | PINMUX_INPUT_END, |
45 | 72 | ||
46 | /* PORT0_IN_PU -> PORT211_IN_PU */ | ||
47 | PINMUX_INPUT_PULLUP_BEGIN, | ||
48 | PORT_ALL(IN_PU), | ||
49 | PINMUX_INPUT_PULLUP_END, | ||
50 | |||
51 | /* PORT0_IN_PD -> PORT211_IN_PD */ | ||
52 | PINMUX_INPUT_PULLDOWN_BEGIN, | ||
53 | PORT_ALL(IN_PD), | ||
54 | PINMUX_INPUT_PULLDOWN_END, | ||
55 | |||
56 | /* PORT0_OUT -> PORT211_OUT */ | 73 | /* PORT0_OUT -> PORT211_OUT */ |
57 | PINMUX_OUTPUT_BEGIN, | 74 | PINMUX_OUTPUT_BEGIN, |
58 | PORT_ALL(OUT), | 75 | PORT_ALL(OUT), |
@@ -261,8 +278,6 @@ enum { | |||
261 | SCIFB_CTS_PORT173_MARK, | 278 | SCIFB_CTS_PORT173_MARK, |
262 | 279 | ||
263 | /* LCD0 */ | 280 | /* LCD0 */ |
264 | LCDC0_SELECT_MARK, | ||
265 | |||
266 | LCD0_D0_MARK, LCD0_D1_MARK, LCD0_D2_MARK, LCD0_D3_MARK, | 281 | LCD0_D0_MARK, LCD0_D1_MARK, LCD0_D2_MARK, LCD0_D3_MARK, |
267 | LCD0_D4_MARK, LCD0_D5_MARK, LCD0_D6_MARK, LCD0_D7_MARK, | 282 | LCD0_D4_MARK, LCD0_D5_MARK, LCD0_D6_MARK, LCD0_D7_MARK, |
268 | LCD0_D8_MARK, LCD0_D9_MARK, LCD0_D10_MARK, LCD0_D11_MARK, | 283 | LCD0_D8_MARK, LCD0_D9_MARK, LCD0_D10_MARK, LCD0_D11_MARK, |
@@ -285,8 +300,6 @@ enum { | |||
285 | LCD0_LCLK_PORT102_MARK, | 300 | LCD0_LCLK_PORT102_MARK, |
286 | 301 | ||
287 | /* LCD1 */ | 302 | /* LCD1 */ |
288 | LCDC1_SELECT_MARK, | ||
289 | |||
290 | LCD1_D0_MARK, LCD1_D1_MARK, LCD1_D2_MARK, LCD1_D3_MARK, | 303 | LCD1_D0_MARK, LCD1_D1_MARK, LCD1_D2_MARK, LCD1_D3_MARK, |
291 | LCD1_D4_MARK, LCD1_D5_MARK, LCD1_D6_MARK, LCD1_D7_MARK, | 304 | LCD1_D4_MARK, LCD1_D5_MARK, LCD1_D6_MARK, LCD1_D7_MARK, |
292 | LCD1_D8_MARK, LCD1_D9_MARK, LCD1_D10_MARK, LCD1_D11_MARK, | 305 | LCD1_D8_MARK, LCD1_D9_MARK, LCD1_D10_MARK, LCD1_D11_MARK, |
@@ -577,137 +590,11 @@ enum { | |||
577 | PINMUX_MARK_END, | 590 | PINMUX_MARK_END, |
578 | }; | 591 | }; |
579 | 592 | ||
593 | #define _PORT_DATA(pfx, sfx) PORT_DATA_IO(pfx) | ||
594 | #define PINMUX_DATA_GP_ALL() CPU_ALL_PORT(_PORT_DATA, , unused) | ||
595 | |||
580 | static const pinmux_enum_t pinmux_data[] = { | 596 | static const pinmux_enum_t pinmux_data[] = { |
581 | /* specify valid pin states for each pin in GPIO mode */ | 597 | PINMUX_DATA_GP_ALL(), |
582 | |||
583 | /* I/O and Pull U/D */ | ||
584 | PORT_DATA_IO_PD(0), PORT_DATA_IO_PD(1), | ||
585 | PORT_DATA_IO_PD(2), PORT_DATA_IO_PD(3), | ||
586 | PORT_DATA_IO_PD(4), PORT_DATA_IO_PD(5), | ||
587 | PORT_DATA_IO_PD(6), PORT_DATA_IO(7), | ||
588 | PORT_DATA_IO(8), PORT_DATA_IO(9), | ||
589 | |||
590 | PORT_DATA_IO_PD(10), PORT_DATA_IO_PD(11), | ||
591 | PORT_DATA_IO_PD(12), PORT_DATA_IO_PU_PD(13), | ||
592 | PORT_DATA_IO_PD(14), PORT_DATA_IO_PD(15), | ||
593 | PORT_DATA_IO_PD(16), PORT_DATA_IO_PD(17), | ||
594 | PORT_DATA_IO(18), PORT_DATA_IO_PU(19), | ||
595 | |||
596 | PORT_DATA_IO_PU_PD(20), PORT_DATA_IO_PD(21), | ||
597 | PORT_DATA_IO_PU_PD(22), PORT_DATA_IO(23), | ||
598 | PORT_DATA_IO_PU(24), PORT_DATA_IO_PU(25), | ||
599 | PORT_DATA_IO_PU(26), PORT_DATA_IO_PU(27), | ||
600 | PORT_DATA_IO_PU(28), PORT_DATA_IO_PU(29), | ||
601 | |||
602 | PORT_DATA_IO_PU(30), PORT_DATA_IO_PD(31), | ||
603 | PORT_DATA_IO_PD(32), PORT_DATA_IO_PD(33), | ||
604 | PORT_DATA_IO_PD(34), PORT_DATA_IO_PU(35), | ||
605 | PORT_DATA_IO_PU(36), PORT_DATA_IO_PD(37), | ||
606 | PORT_DATA_IO_PU(38), PORT_DATA_IO_PD(39), | ||
607 | |||
608 | PORT_DATA_IO_PU_PD(40), PORT_DATA_IO_PD(41), | ||
609 | PORT_DATA_IO_PD(42), PORT_DATA_IO_PU_PD(43), | ||
610 | PORT_DATA_IO_PU_PD(44), PORT_DATA_IO_PU_PD(45), | ||
611 | PORT_DATA_IO_PU_PD(46), PORT_DATA_IO_PU_PD(47), | ||
612 | PORT_DATA_IO_PU_PD(48), PORT_DATA_IO_PU_PD(49), | ||
613 | |||
614 | PORT_DATA_IO_PU_PD(50), PORT_DATA_IO_PD(51), | ||
615 | PORT_DATA_IO_PD(52), PORT_DATA_IO_PD(53), | ||
616 | PORT_DATA_IO_PD(54), PORT_DATA_IO_PU_PD(55), | ||
617 | PORT_DATA_IO_PU_PD(56), PORT_DATA_IO_PU_PD(57), | ||
618 | PORT_DATA_IO_PU_PD(58), PORT_DATA_IO_PU_PD(59), | ||
619 | |||
620 | PORT_DATA_IO_PU_PD(60), PORT_DATA_IO_PD(61), | ||
621 | PORT_DATA_IO_PD(62), PORT_DATA_IO_PD(63), | ||
622 | PORT_DATA_IO_PD(64), PORT_DATA_IO_PD(65), | ||
623 | PORT_DATA_IO_PU_PD(66), PORT_DATA_IO_PU_PD(67), | ||
624 | PORT_DATA_IO_PU_PD(68), PORT_DATA_IO_PU_PD(69), | ||
625 | |||
626 | PORT_DATA_IO_PU_PD(70), PORT_DATA_IO_PU_PD(71), | ||
627 | PORT_DATA_IO_PU_PD(72), PORT_DATA_IO_PU_PD(73), | ||
628 | PORT_DATA_IO_PU_PD(74), PORT_DATA_IO_PU_PD(75), | ||
629 | PORT_DATA_IO_PU_PD(76), PORT_DATA_IO_PU_PD(77), | ||
630 | PORT_DATA_IO_PU_PD(78), PORT_DATA_IO_PU_PD(79), | ||
631 | |||
632 | PORT_DATA_IO_PU_PD(80), PORT_DATA_IO_PU_PD(81), | ||
633 | PORT_DATA_IO(82), PORT_DATA_IO_PU_PD(83), | ||
634 | PORT_DATA_IO(84), PORT_DATA_IO_PD(85), | ||
635 | PORT_DATA_IO_PD(86), PORT_DATA_IO_PD(87), | ||
636 | PORT_DATA_IO_PD(88), PORT_DATA_IO_PD(89), | ||
637 | |||
638 | PORT_DATA_IO_PD(90), PORT_DATA_IO_PU_PD(91), | ||
639 | PORT_DATA_IO_PU_PD(92), PORT_DATA_IO_PU_PD(93), | ||
640 | PORT_DATA_IO_PU_PD(94), PORT_DATA_IO_PU_PD(95), | ||
641 | PORT_DATA_IO_PU_PD(96), PORT_DATA_IO_PU_PD(97), | ||
642 | PORT_DATA_IO_PU_PD(98), PORT_DATA_IO_PU_PD(99), | ||
643 | |||
644 | PORT_DATA_IO_PU_PD(100), PORT_DATA_IO(101), | ||
645 | PORT_DATA_IO_PU(102), PORT_DATA_IO_PU_PD(103), | ||
646 | PORT_DATA_IO_PU(104), PORT_DATA_IO_PU(105), | ||
647 | PORT_DATA_IO_PU_PD(106), PORT_DATA_IO(107), | ||
648 | PORT_DATA_IO(108), PORT_DATA_IO(109), | ||
649 | |||
650 | PORT_DATA_IO(110), PORT_DATA_IO(111), | ||
651 | PORT_DATA_IO(112), PORT_DATA_IO(113), | ||
652 | PORT_DATA_IO_PU_PD(114), PORT_DATA_IO(115), | ||
653 | PORT_DATA_IO_PD(116), PORT_DATA_IO_PD(117), | ||
654 | PORT_DATA_IO_PD(118), PORT_DATA_IO_PD(119), | ||
655 | |||
656 | PORT_DATA_IO_PD(120), PORT_DATA_IO_PD(121), | ||
657 | PORT_DATA_IO_PD(122), PORT_DATA_IO_PD(123), | ||
658 | PORT_DATA_IO_PD(124), PORT_DATA_IO(125), | ||
659 | PORT_DATA_IO(126), PORT_DATA_IO(127), | ||
660 | PORT_DATA_IO(128), PORT_DATA_IO(129), | ||
661 | |||
662 | PORT_DATA_IO(130), PORT_DATA_IO(131), | ||
663 | PORT_DATA_IO(132), PORT_DATA_IO(133), | ||
664 | PORT_DATA_IO(134), PORT_DATA_IO(135), | ||
665 | PORT_DATA_IO(136), PORT_DATA_IO(137), | ||
666 | PORT_DATA_IO(138), PORT_DATA_IO(139), | ||
667 | |||
668 | PORT_DATA_IO(140), PORT_DATA_IO(141), | ||
669 | PORT_DATA_IO_PU(142), PORT_DATA_IO_PU(143), | ||
670 | PORT_DATA_IO_PU(144), PORT_DATA_IO_PU(145), | ||
671 | PORT_DATA_IO_PU(146), PORT_DATA_IO_PU(147), | ||
672 | PORT_DATA_IO_PU(148), PORT_DATA_IO_PU(149), | ||
673 | |||
674 | PORT_DATA_IO_PU(150), PORT_DATA_IO_PU(151), | ||
675 | PORT_DATA_IO_PU(152), PORT_DATA_IO_PU(153), | ||
676 | PORT_DATA_IO_PU(154), PORT_DATA_IO_PU(155), | ||
677 | PORT_DATA_IO_PU(156), PORT_DATA_IO_PU(157), | ||
678 | PORT_DATA_IO_PD(158), PORT_DATA_IO_PD(159), | ||
679 | |||
680 | PORT_DATA_IO_PU_PD(160), PORT_DATA_IO_PD(161), | ||
681 | PORT_DATA_IO_PD(162), PORT_DATA_IO_PD(163), | ||
682 | PORT_DATA_IO_PD(164), PORT_DATA_IO_PD(165), | ||
683 | PORT_DATA_IO_PU(166), PORT_DATA_IO_PU(167), | ||
684 | PORT_DATA_IO_PU(168), PORT_DATA_IO_PU(169), | ||
685 | |||
686 | PORT_DATA_IO_PU(170), PORT_DATA_IO_PU(171), | ||
687 | PORT_DATA_IO_PD(172), PORT_DATA_IO_PD(173), | ||
688 | PORT_DATA_IO_PD(174), PORT_DATA_IO_PD(175), | ||
689 | PORT_DATA_IO_PU(176), PORT_DATA_IO_PU_PD(177), | ||
690 | PORT_DATA_IO_PU(178), PORT_DATA_IO_PD(179), | ||
691 | |||
692 | PORT_DATA_IO_PD(180), PORT_DATA_IO_PU(181), | ||
693 | PORT_DATA_IO_PU(182), PORT_DATA_IO(183), | ||
694 | PORT_DATA_IO_PD(184), PORT_DATA_IO_PD(185), | ||
695 | PORT_DATA_IO_PD(186), PORT_DATA_IO_PD(187), | ||
696 | PORT_DATA_IO_PD(188), PORT_DATA_IO_PD(189), | ||
697 | |||
698 | PORT_DATA_IO_PD(190), PORT_DATA_IO_PD(191), | ||
699 | PORT_DATA_IO_PD(192), PORT_DATA_IO_PU_PD(193), | ||
700 | PORT_DATA_IO_PU_PD(194), PORT_DATA_IO_PD(195), | ||
701 | PORT_DATA_IO_PU_PD(196), PORT_DATA_IO_PD(197), | ||
702 | PORT_DATA_IO_PU_PD(198), PORT_DATA_IO_PU_PD(199), | ||
703 | |||
704 | PORT_DATA_IO_PU_PD(200), PORT_DATA_IO_PU(201), | ||
705 | PORT_DATA_IO_PU_PD(202), PORT_DATA_IO(203), | ||
706 | PORT_DATA_IO_PU_PD(204), PORT_DATA_IO_PU_PD(205), | ||
707 | PORT_DATA_IO_PU_PD(206), PORT_DATA_IO_PU_PD(207), | ||
708 | PORT_DATA_IO_PU_PD(208), PORT_DATA_IO_PD(209), | ||
709 | |||
710 | PORT_DATA_IO_PD(210), PORT_DATA_IO_PD(211), | ||
711 | 598 | ||
712 | /* Port0 */ | 599 | /* Port0 */ |
713 | PINMUX_DATA(DBGMDT2_MARK, PORT0_FN1), | 600 | PINMUX_DATA(DBGMDT2_MARK, PORT0_FN1), |
@@ -986,7 +873,7 @@ static const pinmux_enum_t pinmux_data[] = { | |||
986 | PINMUX_DATA(IRQ27_PORT57_MARK, PORT57_FN0, MSEL1CR_27_1), | 873 | PINMUX_DATA(IRQ27_PORT57_MARK, PORT57_FN0, MSEL1CR_27_1), |
987 | 874 | ||
988 | /* Port58 */ | 875 | /* Port58 */ |
989 | PINMUX_DATA(LCD0_D0_MARK, PORT58_FN1), | 876 | PINMUX_DATA(LCD0_D0_MARK, PORT58_FN1, MSEL3CR_6_0), |
990 | PINMUX_DATA(KEYOUT7_MARK, PORT58_FN3), | 877 | PINMUX_DATA(KEYOUT7_MARK, PORT58_FN3), |
991 | PINMUX_DATA(KEYIN0_PORT58_MARK, PORT58_FN4, MSEL4CR_18_1), | 878 | PINMUX_DATA(KEYIN0_PORT58_MARK, PORT58_FN4, MSEL4CR_18_1), |
992 | PINMUX_DATA(DV_D0_MARK, PORT58_FN6), | 879 | PINMUX_DATA(DV_D0_MARK, PORT58_FN6), |
@@ -1633,10 +1520,6 @@ static const pinmux_enum_t pinmux_data[] = { | |||
1633 | PINMUX_DATA(IRQ16_PORT211_MARK, PORT211_FN0, MSEL1CR_16_1), | 1520 | PINMUX_DATA(IRQ16_PORT211_MARK, PORT211_FN0, MSEL1CR_16_1), |
1634 | PINMUX_DATA(HDMI_CEC_MARK, PORT211_FN1), | 1521 | PINMUX_DATA(HDMI_CEC_MARK, PORT211_FN1), |
1635 | 1522 | ||
1636 | /* LCDC select */ | ||
1637 | PINMUX_DATA(LCDC0_SELECT_MARK, MSEL3CR_6_0), | ||
1638 | PINMUX_DATA(LCDC1_SELECT_MARK, MSEL3CR_6_1), | ||
1639 | |||
1640 | /* SDENC */ | 1523 | /* SDENC */ |
1641 | PINMUX_DATA(SDENC_CPG_MARK, MSEL4CR_19_0), | 1524 | PINMUX_DATA(SDENC_CPG_MARK, MSEL4CR_19_0), |
1642 | PINMUX_DATA(SDENC_DV_CLKI_MARK, MSEL4CR_19_1), | 1525 | PINMUX_DATA(SDENC_DV_CLKI_MARK, MSEL4CR_19_1), |
@@ -1654,9 +1537,565 @@ static const pinmux_enum_t pinmux_data[] = { | |||
1654 | PINMUX_DATA(TRACEAUD_FROM_MEMC_MARK, MSEL5CR_30_1, MSEL5CR_29_0), | 1537 | PINMUX_DATA(TRACEAUD_FROM_MEMC_MARK, MSEL5CR_30_1, MSEL5CR_29_0), |
1655 | }; | 1538 | }; |
1656 | 1539 | ||
1540 | #define R8A7740_PIN(pin, cfgs) \ | ||
1541 | { \ | ||
1542 | .name = __stringify(PORT##pin), \ | ||
1543 | .enum_id = PORT##pin##_DATA, \ | ||
1544 | .configs = cfgs, \ | ||
1545 | } | ||
1546 | |||
1547 | #define __I (SH_PFC_PIN_CFG_INPUT) | ||
1548 | #define __O (SH_PFC_PIN_CFG_OUTPUT) | ||
1549 | #define __IO (SH_PFC_PIN_CFG_INPUT | SH_PFC_PIN_CFG_OUTPUT) | ||
1550 | #define __PD (SH_PFC_PIN_CFG_PULL_DOWN) | ||
1551 | #define __PU (SH_PFC_PIN_CFG_PULL_UP) | ||
1552 | #define __PUD (SH_PFC_PIN_CFG_PULL_DOWN | SH_PFC_PIN_CFG_PULL_UP) | ||
1553 | |||
1554 | #define R8A7740_PIN_I_PD(pin) R8A7740_PIN(pin, __I | __PD) | ||
1555 | #define R8A7740_PIN_I_PU(pin) R8A7740_PIN(pin, __I | __PU) | ||
1556 | #define R8A7740_PIN_I_PU_PD(pin) R8A7740_PIN(pin, __I | __PUD) | ||
1557 | #define R8A7740_PIN_IO(pin) R8A7740_PIN(pin, __IO) | ||
1558 | #define R8A7740_PIN_IO_PD(pin) R8A7740_PIN(pin, __IO | __PD) | ||
1559 | #define R8A7740_PIN_IO_PU(pin) R8A7740_PIN(pin, __IO | __PU) | ||
1560 | #define R8A7740_PIN_IO_PU_PD(pin) R8A7740_PIN(pin, __IO | __PUD) | ||
1561 | #define R8A7740_PIN_O(pin) R8A7740_PIN(pin, __O) | ||
1562 | #define R8A7740_PIN_O_PU_PD(pin) R8A7740_PIN(pin, __O | __PUD) | ||
1563 | |||
1657 | static struct sh_pfc_pin pinmux_pins[] = { | 1564 | static struct sh_pfc_pin pinmux_pins[] = { |
1658 | GPIO_PORT_ALL(), | 1565 | /* Table 56-1 (I/O and Pull U/D) */ |
1566 | R8A7740_PIN_IO_PD(0), R8A7740_PIN_IO_PD(1), | ||
1567 | R8A7740_PIN_IO_PD(2), R8A7740_PIN_IO_PD(3), | ||
1568 | R8A7740_PIN_IO_PD(4), R8A7740_PIN_IO_PD(5), | ||
1569 | R8A7740_PIN_IO_PD(6), R8A7740_PIN_IO(7), | ||
1570 | R8A7740_PIN_IO(8), R8A7740_PIN_IO(9), | ||
1571 | R8A7740_PIN_IO_PD(10), R8A7740_PIN_IO_PD(11), | ||
1572 | R8A7740_PIN_IO_PD(12), R8A7740_PIN_IO_PU_PD(13), | ||
1573 | R8A7740_PIN_IO_PD(14), R8A7740_PIN_IO_PD(15), | ||
1574 | R8A7740_PIN_IO_PD(16), R8A7740_PIN_IO_PD(17), | ||
1575 | R8A7740_PIN_IO(18), R8A7740_PIN_IO_PU(19), | ||
1576 | R8A7740_PIN_IO_PU_PD(20), R8A7740_PIN_IO_PD(21), | ||
1577 | R8A7740_PIN_IO_PU_PD(22), R8A7740_PIN_IO(23), | ||
1578 | R8A7740_PIN_IO_PU(24), R8A7740_PIN_IO_PU(25), | ||
1579 | R8A7740_PIN_IO_PU(26), R8A7740_PIN_IO_PU(27), | ||
1580 | R8A7740_PIN_IO_PU(28), R8A7740_PIN_IO_PU(29), | ||
1581 | R8A7740_PIN_IO_PU(30), R8A7740_PIN_IO_PD(31), | ||
1582 | R8A7740_PIN_IO_PD(32), R8A7740_PIN_IO_PD(33), | ||
1583 | R8A7740_PIN_IO_PD(34), R8A7740_PIN_IO_PU(35), | ||
1584 | R8A7740_PIN_IO_PU(36), R8A7740_PIN_IO_PD(37), | ||
1585 | R8A7740_PIN_IO_PU(38), R8A7740_PIN_IO_PD(39), | ||
1586 | R8A7740_PIN_IO_PU_PD(40), R8A7740_PIN_IO_PD(41), | ||
1587 | R8A7740_PIN_IO_PD(42), R8A7740_PIN_IO_PU_PD(43), | ||
1588 | R8A7740_PIN_IO_PU_PD(44), R8A7740_PIN_IO_PU_PD(45), | ||
1589 | R8A7740_PIN_IO_PU_PD(46), R8A7740_PIN_IO_PU_PD(47), | ||
1590 | R8A7740_PIN_IO_PU_PD(48), R8A7740_PIN_IO_PU_PD(49), | ||
1591 | R8A7740_PIN_IO_PU_PD(50), R8A7740_PIN_IO_PD(51), | ||
1592 | R8A7740_PIN_IO_PD(52), R8A7740_PIN_IO_PD(53), | ||
1593 | R8A7740_PIN_IO_PD(54), R8A7740_PIN_IO_PU_PD(55), | ||
1594 | R8A7740_PIN_IO_PU_PD(56), R8A7740_PIN_IO_PU_PD(57), | ||
1595 | R8A7740_PIN_IO_PU_PD(58), R8A7740_PIN_IO_PU_PD(59), | ||
1596 | R8A7740_PIN_IO_PU_PD(60), R8A7740_PIN_IO_PD(61), | ||
1597 | R8A7740_PIN_IO_PD(62), R8A7740_PIN_IO_PD(63), | ||
1598 | R8A7740_PIN_IO_PD(64), R8A7740_PIN_IO_PD(65), | ||
1599 | R8A7740_PIN_IO_PU_PD(66), R8A7740_PIN_IO_PU_PD(67), | ||
1600 | R8A7740_PIN_IO_PU_PD(68), R8A7740_PIN_IO_PU_PD(69), | ||
1601 | R8A7740_PIN_IO_PU_PD(70), R8A7740_PIN_IO_PU_PD(71), | ||
1602 | R8A7740_PIN_IO_PU_PD(72), R8A7740_PIN_IO_PU_PD(73), | ||
1603 | R8A7740_PIN_IO_PU_PD(74), R8A7740_PIN_IO_PU_PD(75), | ||
1604 | R8A7740_PIN_IO_PU_PD(76), R8A7740_PIN_IO_PU_PD(77), | ||
1605 | R8A7740_PIN_IO_PU_PD(78), R8A7740_PIN_IO_PU_PD(79), | ||
1606 | R8A7740_PIN_IO_PU_PD(80), R8A7740_PIN_IO_PU_PD(81), | ||
1607 | R8A7740_PIN_IO(82), R8A7740_PIN_IO_PU_PD(83), | ||
1608 | R8A7740_PIN_IO(84), R8A7740_PIN_IO_PD(85), | ||
1609 | R8A7740_PIN_IO_PD(86), R8A7740_PIN_IO_PD(87), | ||
1610 | R8A7740_PIN_IO_PD(88), R8A7740_PIN_IO_PD(89), | ||
1611 | R8A7740_PIN_IO_PD(90), R8A7740_PIN_IO_PU_PD(91), | ||
1612 | R8A7740_PIN_IO_PU_PD(92), R8A7740_PIN_IO_PU_PD(93), | ||
1613 | R8A7740_PIN_IO_PU_PD(94), R8A7740_PIN_IO_PU_PD(95), | ||
1614 | R8A7740_PIN_IO_PU_PD(96), R8A7740_PIN_IO_PU_PD(97), | ||
1615 | R8A7740_PIN_IO_PU_PD(98), R8A7740_PIN_IO_PU_PD(99), | ||
1616 | R8A7740_PIN_IO_PU_PD(100), R8A7740_PIN_IO(101), | ||
1617 | R8A7740_PIN_IO_PU(102), R8A7740_PIN_IO_PU_PD(103), | ||
1618 | R8A7740_PIN_IO_PU(104), R8A7740_PIN_IO_PU(105), | ||
1619 | R8A7740_PIN_IO_PU_PD(106), R8A7740_PIN_IO(107), | ||
1620 | R8A7740_PIN_IO(108), R8A7740_PIN_IO(109), | ||
1621 | R8A7740_PIN_IO(110), R8A7740_PIN_IO(111), | ||
1622 | R8A7740_PIN_IO(112), R8A7740_PIN_IO(113), | ||
1623 | R8A7740_PIN_IO_PU_PD(114), R8A7740_PIN_IO(115), | ||
1624 | R8A7740_PIN_IO_PD(116), R8A7740_PIN_IO_PD(117), | ||
1625 | R8A7740_PIN_IO_PD(118), R8A7740_PIN_IO_PD(119), | ||
1626 | R8A7740_PIN_IO_PD(120), R8A7740_PIN_IO_PD(121), | ||
1627 | R8A7740_PIN_IO_PD(122), R8A7740_PIN_IO_PD(123), | ||
1628 | R8A7740_PIN_IO_PD(124), R8A7740_PIN_IO(125), | ||
1629 | R8A7740_PIN_IO(126), R8A7740_PIN_IO(127), | ||
1630 | R8A7740_PIN_IO(128), R8A7740_PIN_IO(129), | ||
1631 | R8A7740_PIN_IO(130), R8A7740_PIN_IO(131), | ||
1632 | R8A7740_PIN_IO(132), R8A7740_PIN_IO(133), | ||
1633 | R8A7740_PIN_IO(134), R8A7740_PIN_IO(135), | ||
1634 | R8A7740_PIN_IO(136), R8A7740_PIN_IO(137), | ||
1635 | R8A7740_PIN_IO(138), R8A7740_PIN_IO(139), | ||
1636 | R8A7740_PIN_IO(140), R8A7740_PIN_IO(141), | ||
1637 | R8A7740_PIN_IO_PU(142), R8A7740_PIN_IO_PU(143), | ||
1638 | R8A7740_PIN_IO_PU(144), R8A7740_PIN_IO_PU(145), | ||
1639 | R8A7740_PIN_IO_PU(146), R8A7740_PIN_IO_PU(147), | ||
1640 | R8A7740_PIN_IO_PU(148), R8A7740_PIN_IO_PU(149), | ||
1641 | R8A7740_PIN_IO_PU(150), R8A7740_PIN_IO_PU(151), | ||
1642 | R8A7740_PIN_IO_PU(152), R8A7740_PIN_IO_PU(153), | ||
1643 | R8A7740_PIN_IO_PU(154), R8A7740_PIN_IO_PU(155), | ||
1644 | R8A7740_PIN_IO_PU(156), R8A7740_PIN_IO_PU(157), | ||
1645 | R8A7740_PIN_IO_PD(158), R8A7740_PIN_IO_PD(159), | ||
1646 | R8A7740_PIN_IO_PU_PD(160), R8A7740_PIN_IO_PD(161), | ||
1647 | R8A7740_PIN_IO_PD(162), R8A7740_PIN_IO_PD(163), | ||
1648 | R8A7740_PIN_IO_PD(164), R8A7740_PIN_IO_PD(165), | ||
1649 | R8A7740_PIN_IO_PU(166), R8A7740_PIN_IO_PU(167), | ||
1650 | R8A7740_PIN_IO_PU(168), R8A7740_PIN_IO_PU(169), | ||
1651 | R8A7740_PIN_IO_PU(170), R8A7740_PIN_IO_PU(171), | ||
1652 | R8A7740_PIN_IO_PD(172), R8A7740_PIN_IO_PD(173), | ||
1653 | R8A7740_PIN_IO_PD(174), R8A7740_PIN_IO_PD(175), | ||
1654 | R8A7740_PIN_IO_PU(176), R8A7740_PIN_IO_PU_PD(177), | ||
1655 | R8A7740_PIN_IO_PU(178), R8A7740_PIN_IO_PD(179), | ||
1656 | R8A7740_PIN_IO_PD(180), R8A7740_PIN_IO_PU(181), | ||
1657 | R8A7740_PIN_IO_PU(182), R8A7740_PIN_IO(183), | ||
1658 | R8A7740_PIN_IO_PD(184), R8A7740_PIN_IO_PD(185), | ||
1659 | R8A7740_PIN_IO_PD(186), R8A7740_PIN_IO_PD(187), | ||
1660 | R8A7740_PIN_IO_PD(188), R8A7740_PIN_IO_PD(189), | ||
1661 | R8A7740_PIN_IO_PD(190), R8A7740_PIN_IO_PD(191), | ||
1662 | R8A7740_PIN_IO_PD(192), R8A7740_PIN_IO_PU_PD(193), | ||
1663 | R8A7740_PIN_IO_PU_PD(194), R8A7740_PIN_IO_PD(195), | ||
1664 | R8A7740_PIN_IO_PU_PD(196), R8A7740_PIN_IO_PD(197), | ||
1665 | R8A7740_PIN_IO_PU_PD(198), R8A7740_PIN_IO_PU_PD(199), | ||
1666 | R8A7740_PIN_IO_PU_PD(200), R8A7740_PIN_IO_PU(201), | ||
1667 | R8A7740_PIN_IO_PU_PD(202), R8A7740_PIN_IO(203), | ||
1668 | R8A7740_PIN_IO_PU_PD(204), R8A7740_PIN_IO_PU_PD(205), | ||
1669 | R8A7740_PIN_IO_PU_PD(206), R8A7740_PIN_IO_PU_PD(207), | ||
1670 | R8A7740_PIN_IO_PU_PD(208), R8A7740_PIN_IO_PD(209), | ||
1671 | R8A7740_PIN_IO_PD(210), R8A7740_PIN_IO_PD(211), | ||
1672 | }; | ||
1673 | |||
1674 | /* - BSC -------------------------------------------------------------------- */ | ||
1675 | static const unsigned int bsc_data8_pins[] = { | ||
1676 | /* D[0:7] */ | ||
1677 | 157, 156, 155, 154, 153, 152, 151, 150, | ||
1678 | }; | ||
1679 | static const unsigned int bsc_data8_mux[] = { | ||
1680 | D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK, | ||
1681 | D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK, | ||
1682 | }; | ||
1683 | static const unsigned int bsc_data16_pins[] = { | ||
1684 | /* D[0:15] */ | ||
1685 | 157, 156, 155, 154, 153, 152, 151, 150, | ||
1686 | 149, 148, 147, 146, 145, 144, 143, 142, | ||
1687 | }; | ||
1688 | static const unsigned int bsc_data16_mux[] = { | ||
1689 | D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK, | ||
1690 | D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK, | ||
1691 | D8_NAF8_MARK, D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK, | ||
1692 | D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, D15_NAF15_MARK, | ||
1693 | }; | ||
1694 | static const unsigned int bsc_data32_pins[] = { | ||
1695 | /* D[0:31] */ | ||
1696 | 157, 156, 155, 154, 153, 152, 151, 150, | ||
1697 | 149, 148, 147, 146, 145, 144, 143, 142, | ||
1698 | 171, 170, 169, 168, 167, 166, 173, 172, | ||
1699 | 165, 164, 163, 162, 161, 160, 159, 158, | ||
1700 | }; | ||
1701 | static const unsigned int bsc_data32_mux[] = { | ||
1702 | D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK, | ||
1703 | D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK, | ||
1704 | D8_NAF8_MARK, D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK, | ||
1705 | D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, D15_NAF15_MARK, | ||
1706 | D16_MARK, D17_MARK, D18_MARK, D19_MARK, | ||
1707 | D20_MARK, D21_MARK, D22_MARK, D23_MARK, | ||
1708 | D24_MARK, D25_MARK, D26_MARK, D27_MARK, | ||
1709 | D28_MARK, D29_MARK, D30_MARK, D31_MARK, | ||
1710 | }; | ||
1711 | static const unsigned int bsc_cs0_pins[] = { | ||
1712 | /* CS */ | ||
1713 | 109, | ||
1714 | }; | ||
1715 | static const unsigned int bsc_cs0_mux[] = { | ||
1716 | CS0_MARK, | ||
1717 | }; | ||
1718 | static const unsigned int bsc_cs2_pins[] = { | ||
1719 | /* CS */ | ||
1720 | 110, | ||
1721 | }; | ||
1722 | static const unsigned int bsc_cs2_mux[] = { | ||
1723 | CS2_MARK, | ||
1724 | }; | ||
1725 | static const unsigned int bsc_cs4_pins[] = { | ||
1726 | /* CS */ | ||
1727 | 111, | ||
1728 | }; | ||
1729 | static const unsigned int bsc_cs4_mux[] = { | ||
1730 | CS4_MARK, | ||
1731 | }; | ||
1732 | static const unsigned int bsc_cs5a_0_pins[] = { | ||
1733 | /* CS */ | ||
1734 | 105, | ||
1735 | }; | ||
1736 | static const unsigned int bsc_cs5a_0_mux[] = { | ||
1737 | CS5A_PORT105_MARK, | ||
1738 | }; | ||
1739 | static const unsigned int bsc_cs5a_1_pins[] = { | ||
1740 | /* CS */ | ||
1741 | 19, | ||
1742 | }; | ||
1743 | static const unsigned int bsc_cs5a_1_mux[] = { | ||
1744 | CS5A_PORT19_MARK, | ||
1745 | }; | ||
1746 | static const unsigned int bsc_cs5b_pins[] = { | ||
1747 | /* CS */ | ||
1748 | 103, | ||
1749 | }; | ||
1750 | static const unsigned int bsc_cs5b_mux[] = { | ||
1751 | CS5B_MARK, | ||
1752 | }; | ||
1753 | static const unsigned int bsc_cs6a_pins[] = { | ||
1754 | /* CS */ | ||
1755 | 104, | ||
1756 | }; | ||
1757 | static const unsigned int bsc_cs6a_mux[] = { | ||
1758 | CS6A_MARK, | ||
1759 | }; | ||
1760 | static const unsigned int bsc_rd_we8_pins[] = { | ||
1761 | /* RD, WE[0] */ | ||
1762 | 115, 113, | ||
1763 | }; | ||
1764 | static const unsigned int bsc_rd_we8_mux[] = { | ||
1765 | RD_FSC_MARK, WE0_FWE_MARK, | ||
1766 | }; | ||
1767 | static const unsigned int bsc_rd_we16_pins[] = { | ||
1768 | /* RD, WE[0:1] */ | ||
1769 | 115, 113, 112, | ||
1770 | }; | ||
1771 | static const unsigned int bsc_rd_we16_mux[] = { | ||
1772 | RD_FSC_MARK, WE0_FWE_MARK, WE1_MARK, | ||
1773 | }; | ||
1774 | static const unsigned int bsc_rd_we32_pins[] = { | ||
1775 | /* RD, WE[0:3] */ | ||
1776 | 115, 113, 112, 108, 107, | ||
1777 | }; | ||
1778 | static const unsigned int bsc_rd_we32_mux[] = { | ||
1779 | RD_FSC_MARK, WE0_FWE_MARK, WE1_MARK, WE2_ICIORD_MARK, WE3_ICIOWR_MARK, | ||
1780 | }; | ||
1781 | static const unsigned int bsc_bs_pins[] = { | ||
1782 | /* BS */ | ||
1783 | 175, | ||
1784 | }; | ||
1785 | static const unsigned int bsc_bs_mux[] = { | ||
1786 | BS_MARK, | ||
1787 | }; | ||
1788 | static const unsigned int bsc_rdwr_pins[] = { | ||
1789 | /* RDWR */ | ||
1790 | 114, | ||
1791 | }; | ||
1792 | static const unsigned int bsc_rdwr_mux[] = { | ||
1793 | RDWR_MARK, | ||
1794 | }; | ||
1795 | /* - CEU0 ------------------------------------------------------------------- */ | ||
1796 | static const unsigned int ceu0_data_0_7_pins[] = { | ||
1797 | /* D[0:7] */ | ||
1798 | 34, 33, 32, 31, 30, 29, 28, 27, | ||
1799 | }; | ||
1800 | static const unsigned int ceu0_data_0_7_mux[] = { | ||
1801 | VIO0_D0_MARK, VIO0_D1_MARK, VIO0_D2_MARK, VIO0_D3_MARK, | ||
1802 | VIO0_D4_MARK, VIO0_D5_MARK, VIO0_D6_MARK, VIO0_D7_MARK, | ||
1803 | }; | ||
1804 | static const unsigned int ceu0_data_8_15_0_pins[] = { | ||
1805 | /* D[8:15] */ | ||
1806 | 182, 181, 180, 179, 178, 26, 25, 24, | ||
1807 | }; | ||
1808 | static const unsigned int ceu0_data_8_15_0_mux[] = { | ||
1809 | VIO0_D8_MARK, VIO0_D9_MARK, VIO0_D10_MARK, VIO0_D11_MARK, | ||
1810 | VIO0_D12_MARK, VIO0_D13_PORT26_MARK, VIO0_D14_PORT25_MARK, | ||
1811 | VIO0_D15_PORT24_MARK, | ||
1812 | }; | ||
1813 | static const unsigned int ceu0_data_8_15_1_pins[] = { | ||
1814 | /* D[8:15] */ | ||
1815 | 182, 181, 180, 179, 178, 22, 95, 96, | ||
1816 | }; | ||
1817 | static const unsigned int ceu0_data_8_15_1_mux[] = { | ||
1818 | VIO0_D8_MARK, VIO0_D9_MARK, VIO0_D10_MARK, VIO0_D11_MARK, | ||
1819 | VIO0_D12_MARK, VIO0_D13_PORT22_MARK, VIO0_D14_PORT95_MARK, | ||
1820 | VIO0_D15_PORT96_MARK, | ||
1821 | }; | ||
1822 | static const unsigned int ceu0_clk_0_pins[] = { | ||
1823 | /* CKO */ | ||
1824 | 36, | ||
1825 | }; | ||
1826 | static const unsigned int ceu0_clk_0_mux[] = { | ||
1827 | VIO_CKO_MARK, | ||
1828 | }; | ||
1829 | static const unsigned int ceu0_clk_1_pins[] = { | ||
1830 | /* CKO */ | ||
1831 | 14, | ||
1832 | }; | ||
1833 | static const unsigned int ceu0_clk_1_mux[] = { | ||
1834 | VIO_CKO1_MARK, | ||
1835 | }; | ||
1836 | static const unsigned int ceu0_clk_2_pins[] = { | ||
1837 | /* CKO */ | ||
1838 | 15, | ||
1839 | }; | ||
1840 | static const unsigned int ceu0_clk_2_mux[] = { | ||
1841 | VIO_CKO2_MARK, | ||
1842 | }; | ||
1843 | static const unsigned int ceu0_sync_pins[] = { | ||
1844 | /* CLK, VD, HD */ | ||
1845 | 35, 39, 37, | ||
1846 | }; | ||
1847 | static const unsigned int ceu0_sync_mux[] = { | ||
1848 | VIO0_CLK_MARK, VIO0_VD_MARK, VIO0_HD_MARK, | ||
1849 | }; | ||
1850 | static const unsigned int ceu0_field_pins[] = { | ||
1851 | /* FIELD */ | ||
1852 | 38, | ||
1853 | }; | ||
1854 | static const unsigned int ceu0_field_mux[] = { | ||
1855 | VIO0_FIELD_MARK, | ||
1856 | }; | ||
1857 | /* - CEU1 ------------------------------------------------------------------- */ | ||
1858 | static const unsigned int ceu1_data_pins[] = { | ||
1859 | /* D[0:7] */ | ||
1860 | 182, 181, 180, 179, 178, 26, 25, 24, | ||
1861 | }; | ||
1862 | static const unsigned int ceu1_data_mux[] = { | ||
1863 | VIO1_D0_MARK, VIO1_D1_MARK, VIO1_D2_MARK, VIO1_D3_MARK, | ||
1864 | VIO1_D4_MARK, VIO1_D5_MARK, VIO1_D6_MARK, VIO1_D7_MARK, | ||
1865 | }; | ||
1866 | static const unsigned int ceu1_clk_pins[] = { | ||
1867 | /* CKO */ | ||
1868 | 23, | ||
1869 | }; | ||
1870 | static const unsigned int ceu1_clk_mux[] = { | ||
1871 | VIO_CKO_1_MARK, | ||
1872 | }; | ||
1873 | static const unsigned int ceu1_sync_pins[] = { | ||
1874 | /* CLK, VD, HD */ | ||
1875 | 197, 198, 160, | ||
1876 | }; | ||
1877 | static const unsigned int ceu1_sync_mux[] = { | ||
1878 | VIO1_CLK_MARK, VIO1_VD_MARK, VIO1_HD_MARK, | ||
1879 | }; | ||
1880 | static const unsigned int ceu1_field_pins[] = { | ||
1881 | /* FIELD */ | ||
1882 | 21, | ||
1883 | }; | ||
1884 | static const unsigned int ceu1_field_mux[] = { | ||
1885 | VIO1_FIELD_MARK, | ||
1886 | }; | ||
1887 | /* - FSIA ------------------------------------------------------------------- */ | ||
1888 | static const unsigned int fsia_mclk_in_pins[] = { | ||
1889 | /* CK */ | ||
1890 | 11, | ||
1891 | }; | ||
1892 | static const unsigned int fsia_mclk_in_mux[] = { | ||
1893 | FSIACK_MARK, | ||
1894 | }; | ||
1895 | static const unsigned int fsia_mclk_out_pins[] = { | ||
1896 | /* OMC */ | ||
1897 | 10, | ||
1898 | }; | ||
1899 | static const unsigned int fsia_mclk_out_mux[] = { | ||
1900 | FSIAOMC_MARK, | ||
1901 | }; | ||
1902 | static const unsigned int fsia_sclk_in_pins[] = { | ||
1903 | /* ILR, IBT */ | ||
1904 | 12, 13, | ||
1905 | }; | ||
1906 | static const unsigned int fsia_sclk_in_mux[] = { | ||
1907 | FSIAILR_MARK, FSIAIBT_MARK, | ||
1908 | }; | ||
1909 | static const unsigned int fsia_sclk_out_pins[] = { | ||
1910 | /* OLR, OBT */ | ||
1911 | 7, 8, | ||
1912 | }; | ||
1913 | static const unsigned int fsia_sclk_out_mux[] = { | ||
1914 | FSIAOLR_MARK, FSIAOBT_MARK, | ||
1915 | }; | ||
1916 | static const unsigned int fsia_data_in_0_pins[] = { | ||
1917 | /* ISLD */ | ||
1918 | 0, | ||
1659 | }; | 1919 | }; |
1920 | static const unsigned int fsia_data_in_0_mux[] = { | ||
1921 | FSIAISLD_PORT0_MARK, | ||
1922 | }; | ||
1923 | static const unsigned int fsia_data_in_1_pins[] = { | ||
1924 | /* ISLD */ | ||
1925 | 5, | ||
1926 | }; | ||
1927 | static const unsigned int fsia_data_in_1_mux[] = { | ||
1928 | FSIAISLD_PORT5_MARK, | ||
1929 | }; | ||
1930 | static const unsigned int fsia_data_out_0_pins[] = { | ||
1931 | /* OSLD */ | ||
1932 | 9, | ||
1933 | }; | ||
1934 | static const unsigned int fsia_data_out_0_mux[] = { | ||
1935 | FSIAOSLD_MARK, | ||
1936 | }; | ||
1937 | static const unsigned int fsia_data_out_1_pins[] = { | ||
1938 | /* OSLD */ | ||
1939 | 0, | ||
1940 | }; | ||
1941 | static const unsigned int fsia_data_out_1_mux[] = { | ||
1942 | FSIAOSLD1_MARK, | ||
1943 | }; | ||
1944 | static const unsigned int fsia_data_out_2_pins[] = { | ||
1945 | /* OSLD */ | ||
1946 | 1, | ||
1947 | }; | ||
1948 | static const unsigned int fsia_data_out_2_mux[] = { | ||
1949 | FSIAOSLD2_MARK, | ||
1950 | }; | ||
1951 | static const unsigned int fsia_spdif_0_pins[] = { | ||
1952 | /* SPDIF */ | ||
1953 | 9, | ||
1954 | }; | ||
1955 | static const unsigned int fsia_spdif_0_mux[] = { | ||
1956 | FSIASPDIF_PORT9_MARK, | ||
1957 | }; | ||
1958 | static const unsigned int fsia_spdif_1_pins[] = { | ||
1959 | /* SPDIF */ | ||
1960 | 18, | ||
1961 | }; | ||
1962 | static const unsigned int fsia_spdif_1_mux[] = { | ||
1963 | FSIASPDIF_PORT18_MARK, | ||
1964 | }; | ||
1965 | /* - FSIB ------------------------------------------------------------------- */ | ||
1966 | static const unsigned int fsib_mclk_in_pins[] = { | ||
1967 | /* CK */ | ||
1968 | 11, | ||
1969 | }; | ||
1970 | static const unsigned int fsib_mclk_in_mux[] = { | ||
1971 | FSIBCK_MARK, | ||
1972 | }; | ||
1973 | /* - GETHER ----------------------------------------------------------------- */ | ||
1974 | static const unsigned int gether_rmii_pins[] = { | ||
1975 | /* RXD[0:1], RX_ER, CRS_DV, TXD[0:1], TX_EN, REF_CLK, MDC, MDIO */ | ||
1976 | 195, 196, 194, 193, 200, 201, 199, 159, 202, 208, | ||
1977 | }; | ||
1978 | static const unsigned int gether_rmii_mux[] = { | ||
1979 | RMII_RXD0_MARK, RMII_RXD1_MARK, RMII_RX_ER_MARK, RMII_CRS_DV_MARK, | ||
1980 | RMII_TXD0_MARK, RMII_TXD1_MARK, RMII_TX_EN_MARK, RMII_REF50CK_MARK, | ||
1981 | RMII_MDC_MARK, RMII_MDIO_MARK, | ||
1982 | }; | ||
1983 | static const unsigned int gether_mii_pins[] = { | ||
1984 | /* RXD[0:3], RX_CLK, RX_DV, RX_ER | ||
1985 | * TXD[0:3], TX_CLK, TX_EN, TX_ER | ||
1986 | * CRS, COL, MDC, MDIO, | ||
1987 | */ | ||
1988 | 185, 186, 187, 188, 174, 161, 204, | ||
1989 | 171, 170, 169, 168, 184, 183, 203, | ||
1990 | 205, 163, 206, 207, | ||
1991 | }; | ||
1992 | static const unsigned int gether_mii_mux[] = { | ||
1993 | ET_ERXD0_MARK, ET_ERXD1_MARK, ET_ERXD2_MARK, ET_ERXD3_MARK, | ||
1994 | ET_RX_CLK_MARK, ET_RX_DV_MARK, ET_RX_ER_MARK, | ||
1995 | ET_ETXD0_MARK, ET_ETXD1_MARK, ET_ETXD2_MARK, ET_ETXD3_MARK, | ||
1996 | ET_TX_CLK_MARK, ET_TX_EN_MARK, ET_TX_ER_MARK, | ||
1997 | ET_CRS_MARK, ET_COL_MARK, ET_MDC_MARK, ET_MDIO_MARK, | ||
1998 | }; | ||
1999 | static const unsigned int gether_gmii_pins[] = { | ||
2000 | /* RXD[0:7], RX_CLK, RX_DV, RX_ER | ||
2001 | * TXD[0:7], GTX_CLK, TX_CLK, TX_EN, TX_ER | ||
2002 | * CRS, COL, MDC, MDIO, REF125CK_MARK, | ||
2003 | */ | ||
2004 | 185, 186, 187, 188, 189, 190, 191, 192, 174, 161, 204, | ||
2005 | 171, 170, 169, 168, 167, 166, 173, 172, 176, 184, 183, 203, | ||
2006 | 205, 163, 206, 207, | ||
2007 | }; | ||
2008 | static const unsigned int gether_gmii_mux[] = { | ||
2009 | ET_ERXD0_MARK, ET_ERXD1_MARK, ET_ERXD2_MARK, ET_ERXD3_MARK, | ||
2010 | ET_ERXD4_MARK, ET_ERXD5_MARK, ET_ERXD6_MARK, ET_ERXD7_MARK, | ||
2011 | ET_RX_CLK_MARK, ET_RX_DV_MARK, ET_RX_ER_MARK, | ||
2012 | ET_ETXD0_MARK, ET_ETXD1_MARK, ET_ETXD2_MARK, ET_ETXD3_MARK, | ||
2013 | ET_ETXD4_MARK, ET_ETXD5_MARK, ET_ETXD6_MARK, ET_ETXD7_MARK, | ||
2014 | ET_GTX_CLK_MARK, ET_TX_CLK_MARK, ET_TX_EN_MARK, ET_TX_ER_MARK, | ||
2015 | ET_CRS_MARK, ET_COL_MARK, ET_MDC_MARK, ET_MDIO_MARK, | ||
2016 | RMII_REF125CK_MARK, | ||
2017 | }; | ||
2018 | static const unsigned int gether_int_pins[] = { | ||
2019 | /* PHY_INT */ | ||
2020 | 164, | ||
2021 | }; | ||
2022 | static const unsigned int gether_int_mux[] = { | ||
2023 | ET_PHY_INT_MARK, | ||
2024 | }; | ||
2025 | static const unsigned int gether_link_pins[] = { | ||
2026 | /* LINK */ | ||
2027 | 177, | ||
2028 | }; | ||
2029 | static const unsigned int gether_link_mux[] = { | ||
2030 | ET_LINK_MARK, | ||
2031 | }; | ||
2032 | static const unsigned int gether_wol_pins[] = { | ||
2033 | /* WOL */ | ||
2034 | 175, | ||
2035 | }; | ||
2036 | static const unsigned int gether_wol_mux[] = { | ||
2037 | ET_WOL_MARK, | ||
2038 | }; | ||
2039 | /* - HDMI ------------------------------------------------------------------- */ | ||
2040 | static const unsigned int hdmi_pins[] = { | ||
2041 | /* HPD, CEC */ | ||
2042 | 210, 211, | ||
2043 | }; | ||
2044 | static const unsigned int hdmi_mux[] = { | ||
2045 | HDMI_HPD_MARK, HDMI_CEC_MARK, | ||
2046 | }; | ||
2047 | /* - INTC ------------------------------------------------------------------- */ | ||
2048 | IRQC_PINS_MUX(0, 0, 2); | ||
2049 | IRQC_PINS_MUX(0, 1, 13); | ||
2050 | IRQC_PIN_MUX(1, 20); | ||
2051 | IRQC_PINS_MUX(2, 0, 11); | ||
2052 | IRQC_PINS_MUX(2, 1, 12); | ||
2053 | IRQC_PINS_MUX(3, 0, 10); | ||
2054 | IRQC_PINS_MUX(3, 1, 14); | ||
2055 | IRQC_PINS_MUX(4, 0, 15); | ||
2056 | IRQC_PINS_MUX(4, 1, 172); | ||
2057 | IRQC_PINS_MUX(5, 0, 0); | ||
2058 | IRQC_PINS_MUX(5, 1, 1); | ||
2059 | IRQC_PINS_MUX(6, 0, 121); | ||
2060 | IRQC_PINS_MUX(6, 1, 173); | ||
2061 | IRQC_PINS_MUX(7, 0, 120); | ||
2062 | IRQC_PINS_MUX(7, 1, 209); | ||
2063 | IRQC_PIN_MUX(8, 119); | ||
2064 | IRQC_PINS_MUX(9, 0, 118); | ||
2065 | IRQC_PINS_MUX(9, 1, 210); | ||
2066 | IRQC_PIN_MUX(10, 19); | ||
2067 | IRQC_PIN_MUX(11, 104); | ||
2068 | IRQC_PINS_MUX(12, 0, 42); | ||
2069 | IRQC_PINS_MUX(12, 1, 97); | ||
2070 | IRQC_PINS_MUX(13, 0, 64); | ||
2071 | IRQC_PINS_MUX(13, 1, 98); | ||
2072 | IRQC_PINS_MUX(14, 0, 63); | ||
2073 | IRQC_PINS_MUX(14, 1, 99); | ||
2074 | IRQC_PINS_MUX(15, 0, 62); | ||
2075 | IRQC_PINS_MUX(15, 1, 100); | ||
2076 | IRQC_PINS_MUX(16, 0, 68); | ||
2077 | IRQC_PINS_MUX(16, 1, 211); | ||
2078 | IRQC_PIN_MUX(17, 69); | ||
2079 | IRQC_PIN_MUX(18, 70); | ||
2080 | IRQC_PIN_MUX(19, 71); | ||
2081 | IRQC_PIN_MUX(20, 67); | ||
2082 | IRQC_PIN_MUX(21, 202); | ||
2083 | IRQC_PIN_MUX(22, 95); | ||
2084 | IRQC_PIN_MUX(23, 96); | ||
2085 | IRQC_PIN_MUX(24, 180); | ||
2086 | IRQC_PIN_MUX(25, 38); | ||
2087 | IRQC_PINS_MUX(26, 0, 58); | ||
2088 | IRQC_PINS_MUX(26, 1, 81); | ||
2089 | IRQC_PINS_MUX(27, 0, 57); | ||
2090 | IRQC_PINS_MUX(27, 1, 168); | ||
2091 | IRQC_PINS_MUX(28, 0, 56); | ||
2092 | IRQC_PINS_MUX(28, 1, 169); | ||
2093 | IRQC_PINS_MUX(29, 0, 50); | ||
2094 | IRQC_PINS_MUX(29, 1, 170); | ||
2095 | IRQC_PINS_MUX(30, 0, 49); | ||
2096 | IRQC_PINS_MUX(30, 1, 171); | ||
2097 | IRQC_PINS_MUX(31, 0, 41); | ||
2098 | IRQC_PINS_MUX(31, 1, 167); | ||
1660 | 2099 | ||
1661 | /* - LCD0 ------------------------------------------------------------------- */ | 2100 | /* - LCD0 ------------------------------------------------------------------- */ |
1662 | static const unsigned int lcd0_data8_pins[] = { | 2101 | static const unsigned int lcd0_data8_pins[] = { |
@@ -1930,6 +2369,260 @@ static const unsigned int mmc0_ctrl_1_pins[] = { | |||
1930 | static const unsigned int mmc0_ctrl_1_mux[] = { | 2369 | static const unsigned int mmc0_ctrl_1_mux[] = { |
1931 | MMC1_CMD_PORT104_MARK, MMC1_CLK_PORT103_MARK, | 2370 | MMC1_CMD_PORT104_MARK, MMC1_CLK_PORT103_MARK, |
1932 | }; | 2371 | }; |
2372 | /* - SCIFA0 ----------------------------------------------------------------- */ | ||
2373 | static const unsigned int scifa0_data_pins[] = { | ||
2374 | /* RXD, TXD */ | ||
2375 | 197, 198, | ||
2376 | }; | ||
2377 | static const unsigned int scifa0_data_mux[] = { | ||
2378 | SCIFA0_RXD_MARK, SCIFA0_TXD_MARK, | ||
2379 | }; | ||
2380 | static const unsigned int scifa0_clk_pins[] = { | ||
2381 | /* SCK */ | ||
2382 | 188, | ||
2383 | }; | ||
2384 | static const unsigned int scifa0_clk_mux[] = { | ||
2385 | SCIFA0_SCK_MARK, | ||
2386 | }; | ||
2387 | static const unsigned int scifa0_ctrl_pins[] = { | ||
2388 | /* RTS, CTS */ | ||
2389 | 194, 193, | ||
2390 | }; | ||
2391 | static const unsigned int scifa0_ctrl_mux[] = { | ||
2392 | SCIFA0_RTS_MARK, SCIFA0_CTS_MARK, | ||
2393 | }; | ||
2394 | /* - SCIFA1 ----------------------------------------------------------------- */ | ||
2395 | static const unsigned int scifa1_data_pins[] = { | ||
2396 | /* RXD, TXD */ | ||
2397 | 195, 196, | ||
2398 | }; | ||
2399 | static const unsigned int scifa1_data_mux[] = { | ||
2400 | SCIFA1_RXD_MARK, SCIFA1_TXD_MARK, | ||
2401 | }; | ||
2402 | static const unsigned int scifa1_clk_pins[] = { | ||
2403 | /* SCK */ | ||
2404 | 185, | ||
2405 | }; | ||
2406 | static const unsigned int scifa1_clk_mux[] = { | ||
2407 | SCIFA1_SCK_MARK, | ||
2408 | }; | ||
2409 | static const unsigned int scifa1_ctrl_pins[] = { | ||
2410 | /* RTS, CTS */ | ||
2411 | 23, 21, | ||
2412 | }; | ||
2413 | static const unsigned int scifa1_ctrl_mux[] = { | ||
2414 | SCIFA1_RTS_MARK, SCIFA1_CTS_MARK, | ||
2415 | }; | ||
2416 | /* - SCIFA2 ----------------------------------------------------------------- */ | ||
2417 | static const unsigned int scifa2_data_pins[] = { | ||
2418 | /* RXD, TXD */ | ||
2419 | 200, 201, | ||
2420 | }; | ||
2421 | static const unsigned int scifa2_data_mux[] = { | ||
2422 | SCIFA2_RXD_MARK, SCIFA2_TXD_MARK, | ||
2423 | }; | ||
2424 | static const unsigned int scifa2_clk_0_pins[] = { | ||
2425 | /* SCK */ | ||
2426 | 22, | ||
2427 | }; | ||
2428 | static const unsigned int scifa2_clk_0_mux[] = { | ||
2429 | SCIFA2_SCK_PORT22_MARK, | ||
2430 | }; | ||
2431 | static const unsigned int scifa2_clk_1_pins[] = { | ||
2432 | /* SCK */ | ||
2433 | 199, | ||
2434 | }; | ||
2435 | static const unsigned int scifa2_clk_1_mux[] = { | ||
2436 | SCIFA2_SCK_PORT199_MARK, | ||
2437 | }; | ||
2438 | static const unsigned int scifa2_ctrl_pins[] = { | ||
2439 | /* RTS, CTS */ | ||
2440 | 96, 95, | ||
2441 | }; | ||
2442 | static const unsigned int scifa2_ctrl_mux[] = { | ||
2443 | SCIFA2_RTS_MARK, SCIFA2_CTS_MARK, | ||
2444 | }; | ||
2445 | /* - SCIFA3 ----------------------------------------------------------------- */ | ||
2446 | static const unsigned int scifa3_data_0_pins[] = { | ||
2447 | /* RXD, TXD */ | ||
2448 | 174, 175, | ||
2449 | }; | ||
2450 | static const unsigned int scifa3_data_0_mux[] = { | ||
2451 | SCIFA3_RXD_PORT174_MARK, SCIFA3_TXD_PORT175_MARK, | ||
2452 | }; | ||
2453 | static const unsigned int scifa3_clk_0_pins[] = { | ||
2454 | /* SCK */ | ||
2455 | 116, | ||
2456 | }; | ||
2457 | static const unsigned int scifa3_clk_0_mux[] = { | ||
2458 | SCIFA3_SCK_PORT116_MARK, | ||
2459 | }; | ||
2460 | static const unsigned int scifa3_ctrl_0_pins[] = { | ||
2461 | /* RTS, CTS */ | ||
2462 | 105, 117, | ||
2463 | }; | ||
2464 | static const unsigned int scifa3_ctrl_0_mux[] = { | ||
2465 | SCIFA3_RTS_PORT105_MARK, SCIFA3_CTS_PORT117_MARK, | ||
2466 | }; | ||
2467 | static const unsigned int scifa3_data_1_pins[] = { | ||
2468 | /* RXD, TXD */ | ||
2469 | 159, 160, | ||
2470 | }; | ||
2471 | static const unsigned int scifa3_data_1_mux[] = { | ||
2472 | SCIFA3_RXD_PORT159_MARK, SCIFA3_TXD_PORT160_MARK, | ||
2473 | }; | ||
2474 | static const unsigned int scifa3_clk_1_pins[] = { | ||
2475 | /* SCK */ | ||
2476 | 158, | ||
2477 | }; | ||
2478 | static const unsigned int scifa3_clk_1_mux[] = { | ||
2479 | SCIFA3_SCK_PORT158_MARK, | ||
2480 | }; | ||
2481 | static const unsigned int scifa3_ctrl_1_pins[] = { | ||
2482 | /* RTS, CTS */ | ||
2483 | 161, 162, | ||
2484 | }; | ||
2485 | static const unsigned int scifa3_ctrl_1_mux[] = { | ||
2486 | SCIFA3_RTS_PORT161_MARK, SCIFA3_CTS_PORT162_MARK, | ||
2487 | }; | ||
2488 | /* - SCIFA4 ----------------------------------------------------------------- */ | ||
2489 | static const unsigned int scifa4_data_0_pins[] = { | ||
2490 | /* RXD, TXD */ | ||
2491 | 12, 13, | ||
2492 | }; | ||
2493 | static const unsigned int scifa4_data_0_mux[] = { | ||
2494 | SCIFA4_RXD_PORT12_MARK, SCIFA4_TXD_PORT13_MARK, | ||
2495 | }; | ||
2496 | static const unsigned int scifa4_data_1_pins[] = { | ||
2497 | /* RXD, TXD */ | ||
2498 | 204, 203, | ||
2499 | }; | ||
2500 | static const unsigned int scifa4_data_1_mux[] = { | ||
2501 | SCIFA4_RXD_PORT204_MARK, SCIFA4_TXD_PORT203_MARK, | ||
2502 | }; | ||
2503 | static const unsigned int scifa4_data_2_pins[] = { | ||
2504 | /* RXD, TXD */ | ||
2505 | 94, 93, | ||
2506 | }; | ||
2507 | static const unsigned int scifa4_data_2_mux[] = { | ||
2508 | SCIFA4_RXD_PORT94_MARK, SCIFA4_TXD_PORT93_MARK, | ||
2509 | }; | ||
2510 | static const unsigned int scifa4_clk_0_pins[] = { | ||
2511 | /* SCK */ | ||
2512 | 21, | ||
2513 | }; | ||
2514 | static const unsigned int scifa4_clk_0_mux[] = { | ||
2515 | SCIFA4_SCK_PORT21_MARK, | ||
2516 | }; | ||
2517 | static const unsigned int scifa4_clk_1_pins[] = { | ||
2518 | /* SCK */ | ||
2519 | 205, | ||
2520 | }; | ||
2521 | static const unsigned int scifa4_clk_1_mux[] = { | ||
2522 | SCIFA4_SCK_PORT205_MARK, | ||
2523 | }; | ||
2524 | /* - SCIFA5 ----------------------------------------------------------------- */ | ||
2525 | static const unsigned int scifa5_data_0_pins[] = { | ||
2526 | /* RXD, TXD */ | ||
2527 | 10, 20, | ||
2528 | }; | ||
2529 | static const unsigned int scifa5_data_0_mux[] = { | ||
2530 | SCIFA5_RXD_PORT10_MARK, SCIFA5_TXD_PORT20_MARK, | ||
2531 | }; | ||
2532 | static const unsigned int scifa5_data_1_pins[] = { | ||
2533 | /* RXD, TXD */ | ||
2534 | 207, 208, | ||
2535 | }; | ||
2536 | static const unsigned int scifa5_data_1_mux[] = { | ||
2537 | SCIFA5_RXD_PORT207_MARK, SCIFA5_TXD_PORT208_MARK, | ||
2538 | }; | ||
2539 | static const unsigned int scifa5_data_2_pins[] = { | ||
2540 | /* RXD, TXD */ | ||
2541 | 92, 91, | ||
2542 | }; | ||
2543 | static const unsigned int scifa5_data_2_mux[] = { | ||
2544 | SCIFA5_RXD_PORT92_MARK, SCIFA5_TXD_PORT91_MARK, | ||
2545 | }; | ||
2546 | static const unsigned int scifa5_clk_0_pins[] = { | ||
2547 | /* SCK */ | ||
2548 | 23, | ||
2549 | }; | ||
2550 | static const unsigned int scifa5_clk_0_mux[] = { | ||
2551 | SCIFA5_SCK_PORT23_MARK, | ||
2552 | }; | ||
2553 | static const unsigned int scifa5_clk_1_pins[] = { | ||
2554 | /* SCK */ | ||
2555 | 206, | ||
2556 | }; | ||
2557 | static const unsigned int scifa5_clk_1_mux[] = { | ||
2558 | SCIFA5_SCK_PORT206_MARK, | ||
2559 | }; | ||
2560 | /* - SCIFA6 ----------------------------------------------------------------- */ | ||
2561 | static const unsigned int scifa6_data_pins[] = { | ||
2562 | /* RXD, TXD */ | ||
2563 | 25, 26, | ||
2564 | }; | ||
2565 | static const unsigned int scifa6_data_mux[] = { | ||
2566 | SCIFA6_RXD_MARK, SCIFA6_TXD_MARK, | ||
2567 | }; | ||
2568 | static const unsigned int scifa6_clk_pins[] = { | ||
2569 | /* SCK */ | ||
2570 | 24, | ||
2571 | }; | ||
2572 | static const unsigned int scifa6_clk_mux[] = { | ||
2573 | SCIFA6_SCK_MARK, | ||
2574 | }; | ||
2575 | /* - SCIFA7 ----------------------------------------------------------------- */ | ||
2576 | static const unsigned int scifa7_data_pins[] = { | ||
2577 | /* RXD, TXD */ | ||
2578 | 0, 1, | ||
2579 | }; | ||
2580 | static const unsigned int scifa7_data_mux[] = { | ||
2581 | SCIFA7_RXD_MARK, SCIFA7_TXD_MARK, | ||
2582 | }; | ||
2583 | /* - SCIFB ------------------------------------------------------------------ */ | ||
2584 | static const unsigned int scifb_data_0_pins[] = { | ||
2585 | /* RXD, TXD */ | ||
2586 | 191, 192, | ||
2587 | }; | ||
2588 | static const unsigned int scifb_data_0_mux[] = { | ||
2589 | SCIFB_RXD_PORT191_MARK, SCIFB_TXD_PORT192_MARK, | ||
2590 | }; | ||
2591 | static const unsigned int scifb_clk_0_pins[] = { | ||
2592 | /* SCK */ | ||
2593 | 190, | ||
2594 | }; | ||
2595 | static const unsigned int scifb_clk_0_mux[] = { | ||
2596 | SCIFB_SCK_PORT190_MARK, | ||
2597 | }; | ||
2598 | static const unsigned int scifb_ctrl_0_pins[] = { | ||
2599 | /* RTS, CTS */ | ||
2600 | 186, 187, | ||
2601 | }; | ||
2602 | static const unsigned int scifb_ctrl_0_mux[] = { | ||
2603 | SCIFB_RTS_PORT186_MARK, SCIFB_CTS_PORT187_MARK, | ||
2604 | }; | ||
2605 | static const unsigned int scifb_data_1_pins[] = { | ||
2606 | /* RXD, TXD */ | ||
2607 | 3, 4, | ||
2608 | }; | ||
2609 | static const unsigned int scifb_data_1_mux[] = { | ||
2610 | SCIFB_RXD_PORT3_MARK, SCIFB_TXD_PORT4_MARK, | ||
2611 | }; | ||
2612 | static const unsigned int scifb_clk_1_pins[] = { | ||
2613 | /* SCK */ | ||
2614 | 2, | ||
2615 | }; | ||
2616 | static const unsigned int scifb_clk_1_mux[] = { | ||
2617 | SCIFB_SCK_PORT2_MARK, | ||
2618 | }; | ||
2619 | static const unsigned int scifb_ctrl_1_pins[] = { | ||
2620 | /* RTS, CTS */ | ||
2621 | 172, 173, | ||
2622 | }; | ||
2623 | static const unsigned int scifb_ctrl_1_mux[] = { | ||
2624 | SCIFB_RTS_PORT172_MARK, SCIFB_CTS_PORT173_MARK, | ||
2625 | }; | ||
1933 | /* - SDHI0 ------------------------------------------------------------------ */ | 2626 | /* - SDHI0 ------------------------------------------------------------------ */ |
1934 | static const unsigned int sdhi0_data1_pins[] = { | 2627 | static const unsigned int sdhi0_data1_pins[] = { |
1935 | /* D0 */ | 2628 | /* D0 */ |
@@ -2052,8 +2745,141 @@ static const unsigned int sdhi2_wp_1_pins[] = { | |||
2052 | static const unsigned int sdhi2_wp_1_mux[] = { | 2745 | static const unsigned int sdhi2_wp_1_mux[] = { |
2053 | SDHI2_WP_PORT25_MARK, | 2746 | SDHI2_WP_PORT25_MARK, |
2054 | }; | 2747 | }; |
2748 | /* - TPU0 ------------------------------------------------------------------- */ | ||
2749 | static const unsigned int tpu0_to0_pins[] = { | ||
2750 | /* TO */ | ||
2751 | 23, | ||
2752 | }; | ||
2753 | static const unsigned int tpu0_to0_mux[] = { | ||
2754 | TPU0TO0_MARK, | ||
2755 | }; | ||
2756 | static const unsigned int tpu0_to1_pins[] = { | ||
2757 | /* TO */ | ||
2758 | 21, | ||
2759 | }; | ||
2760 | static const unsigned int tpu0_to1_mux[] = { | ||
2761 | TPU0TO1_MARK, | ||
2762 | }; | ||
2763 | static const unsigned int tpu0_to2_0_pins[] = { | ||
2764 | /* TO */ | ||
2765 | 66, | ||
2766 | }; | ||
2767 | static const unsigned int tpu0_to2_0_mux[] = { | ||
2768 | TPU0TO2_PORT66_MARK, | ||
2769 | }; | ||
2770 | static const unsigned int tpu0_to2_1_pins[] = { | ||
2771 | /* TO */ | ||
2772 | 202, | ||
2773 | }; | ||
2774 | static const unsigned int tpu0_to2_1_mux[] = { | ||
2775 | TPU0TO2_PORT202_MARK, | ||
2776 | }; | ||
2777 | static const unsigned int tpu0_to3_pins[] = { | ||
2778 | /* TO */ | ||
2779 | 180, | ||
2780 | }; | ||
2781 | static const unsigned int tpu0_to3_mux[] = { | ||
2782 | TPU0TO3_MARK, | ||
2783 | }; | ||
2055 | 2784 | ||
2056 | static const struct sh_pfc_pin_group pinmux_groups[] = { | 2785 | static const struct sh_pfc_pin_group pinmux_groups[] = { |
2786 | SH_PFC_PIN_GROUP(bsc_data8), | ||
2787 | SH_PFC_PIN_GROUP(bsc_data16), | ||
2788 | SH_PFC_PIN_GROUP(bsc_data32), | ||
2789 | SH_PFC_PIN_GROUP(bsc_cs0), | ||
2790 | SH_PFC_PIN_GROUP(bsc_cs2), | ||
2791 | SH_PFC_PIN_GROUP(bsc_cs4), | ||
2792 | SH_PFC_PIN_GROUP(bsc_cs5a_0), | ||
2793 | SH_PFC_PIN_GROUP(bsc_cs5a_1), | ||
2794 | SH_PFC_PIN_GROUP(bsc_cs5b), | ||
2795 | SH_PFC_PIN_GROUP(bsc_cs6a), | ||
2796 | SH_PFC_PIN_GROUP(bsc_rd_we8), | ||
2797 | SH_PFC_PIN_GROUP(bsc_rd_we16), | ||
2798 | SH_PFC_PIN_GROUP(bsc_rd_we32), | ||
2799 | SH_PFC_PIN_GROUP(bsc_bs), | ||
2800 | SH_PFC_PIN_GROUP(bsc_rdwr), | ||
2801 | SH_PFC_PIN_GROUP(ceu0_data_0_7), | ||
2802 | SH_PFC_PIN_GROUP(ceu0_data_8_15_0), | ||
2803 | SH_PFC_PIN_GROUP(ceu0_data_8_15_1), | ||
2804 | SH_PFC_PIN_GROUP(ceu0_clk_0), | ||
2805 | SH_PFC_PIN_GROUP(ceu0_clk_1), | ||
2806 | SH_PFC_PIN_GROUP(ceu0_clk_2), | ||
2807 | SH_PFC_PIN_GROUP(ceu0_sync), | ||
2808 | SH_PFC_PIN_GROUP(ceu0_field), | ||
2809 | SH_PFC_PIN_GROUP(ceu1_data), | ||
2810 | SH_PFC_PIN_GROUP(ceu1_clk), | ||
2811 | SH_PFC_PIN_GROUP(ceu1_sync), | ||
2812 | SH_PFC_PIN_GROUP(ceu1_field), | ||
2813 | SH_PFC_PIN_GROUP(fsia_mclk_in), | ||
2814 | SH_PFC_PIN_GROUP(fsia_mclk_out), | ||
2815 | SH_PFC_PIN_GROUP(fsia_sclk_in), | ||
2816 | SH_PFC_PIN_GROUP(fsia_sclk_out), | ||
2817 | SH_PFC_PIN_GROUP(fsia_data_in_0), | ||
2818 | SH_PFC_PIN_GROUP(fsia_data_in_1), | ||
2819 | SH_PFC_PIN_GROUP(fsia_data_out_0), | ||
2820 | SH_PFC_PIN_GROUP(fsia_data_out_1), | ||
2821 | SH_PFC_PIN_GROUP(fsia_data_out_2), | ||
2822 | SH_PFC_PIN_GROUP(fsia_spdif_0), | ||
2823 | SH_PFC_PIN_GROUP(fsia_spdif_1), | ||
2824 | SH_PFC_PIN_GROUP(fsib_mclk_in), | ||
2825 | SH_PFC_PIN_GROUP(gether_rmii), | ||
2826 | SH_PFC_PIN_GROUP(gether_mii), | ||
2827 | SH_PFC_PIN_GROUP(gether_gmii), | ||
2828 | SH_PFC_PIN_GROUP(gether_int), | ||
2829 | SH_PFC_PIN_GROUP(gether_link), | ||
2830 | SH_PFC_PIN_GROUP(gether_wol), | ||
2831 | SH_PFC_PIN_GROUP(hdmi), | ||
2832 | SH_PFC_PIN_GROUP(intc_irq0_0), | ||
2833 | SH_PFC_PIN_GROUP(intc_irq0_1), | ||
2834 | SH_PFC_PIN_GROUP(intc_irq1), | ||
2835 | SH_PFC_PIN_GROUP(intc_irq2_0), | ||
2836 | SH_PFC_PIN_GROUP(intc_irq2_1), | ||
2837 | SH_PFC_PIN_GROUP(intc_irq3_0), | ||
2838 | SH_PFC_PIN_GROUP(intc_irq3_1), | ||
2839 | SH_PFC_PIN_GROUP(intc_irq4_0), | ||
2840 | SH_PFC_PIN_GROUP(intc_irq4_1), | ||
2841 | SH_PFC_PIN_GROUP(intc_irq5_0), | ||
2842 | SH_PFC_PIN_GROUP(intc_irq5_1), | ||
2843 | SH_PFC_PIN_GROUP(intc_irq6_0), | ||
2844 | SH_PFC_PIN_GROUP(intc_irq6_1), | ||
2845 | SH_PFC_PIN_GROUP(intc_irq7_0), | ||
2846 | SH_PFC_PIN_GROUP(intc_irq7_1), | ||
2847 | SH_PFC_PIN_GROUP(intc_irq8), | ||
2848 | SH_PFC_PIN_GROUP(intc_irq9_0), | ||
2849 | SH_PFC_PIN_GROUP(intc_irq9_1), | ||
2850 | SH_PFC_PIN_GROUP(intc_irq10), | ||
2851 | SH_PFC_PIN_GROUP(intc_irq11), | ||
2852 | SH_PFC_PIN_GROUP(intc_irq12_0), | ||
2853 | SH_PFC_PIN_GROUP(intc_irq12_1), | ||
2854 | SH_PFC_PIN_GROUP(intc_irq13_0), | ||
2855 | SH_PFC_PIN_GROUP(intc_irq13_1), | ||
2856 | SH_PFC_PIN_GROUP(intc_irq14_0), | ||
2857 | SH_PFC_PIN_GROUP(intc_irq14_1), | ||
2858 | SH_PFC_PIN_GROUP(intc_irq15_0), | ||
2859 | SH_PFC_PIN_GROUP(intc_irq15_1), | ||
2860 | SH_PFC_PIN_GROUP(intc_irq16_0), | ||
2861 | SH_PFC_PIN_GROUP(intc_irq16_1), | ||
2862 | SH_PFC_PIN_GROUP(intc_irq17), | ||
2863 | SH_PFC_PIN_GROUP(intc_irq18), | ||
2864 | SH_PFC_PIN_GROUP(intc_irq19), | ||
2865 | SH_PFC_PIN_GROUP(intc_irq20), | ||
2866 | SH_PFC_PIN_GROUP(intc_irq21), | ||
2867 | SH_PFC_PIN_GROUP(intc_irq22), | ||
2868 | SH_PFC_PIN_GROUP(intc_irq23), | ||
2869 | SH_PFC_PIN_GROUP(intc_irq24), | ||
2870 | SH_PFC_PIN_GROUP(intc_irq25), | ||
2871 | SH_PFC_PIN_GROUP(intc_irq26_0), | ||
2872 | SH_PFC_PIN_GROUP(intc_irq26_1), | ||
2873 | SH_PFC_PIN_GROUP(intc_irq27_0), | ||
2874 | SH_PFC_PIN_GROUP(intc_irq27_1), | ||
2875 | SH_PFC_PIN_GROUP(intc_irq28_0), | ||
2876 | SH_PFC_PIN_GROUP(intc_irq28_1), | ||
2877 | SH_PFC_PIN_GROUP(intc_irq29_0), | ||
2878 | SH_PFC_PIN_GROUP(intc_irq29_1), | ||
2879 | SH_PFC_PIN_GROUP(intc_irq30_0), | ||
2880 | SH_PFC_PIN_GROUP(intc_irq30_1), | ||
2881 | SH_PFC_PIN_GROUP(intc_irq31_0), | ||
2882 | SH_PFC_PIN_GROUP(intc_irq31_1), | ||
2057 | SH_PFC_PIN_GROUP(lcd0_data8), | 2883 | SH_PFC_PIN_GROUP(lcd0_data8), |
2058 | SH_PFC_PIN_GROUP(lcd0_data9), | 2884 | SH_PFC_PIN_GROUP(lcd0_data9), |
2059 | SH_PFC_PIN_GROUP(lcd0_data12), | 2885 | SH_PFC_PIN_GROUP(lcd0_data12), |
@@ -2084,6 +2910,41 @@ static const struct sh_pfc_pin_group pinmux_groups[] = { | |||
2084 | SH_PFC_PIN_GROUP(mmc0_data4_1), | 2910 | SH_PFC_PIN_GROUP(mmc0_data4_1), |
2085 | SH_PFC_PIN_GROUP(mmc0_data8_1), | 2911 | SH_PFC_PIN_GROUP(mmc0_data8_1), |
2086 | SH_PFC_PIN_GROUP(mmc0_ctrl_1), | 2912 | SH_PFC_PIN_GROUP(mmc0_ctrl_1), |
2913 | SH_PFC_PIN_GROUP(scifa0_data), | ||
2914 | SH_PFC_PIN_GROUP(scifa0_clk), | ||
2915 | SH_PFC_PIN_GROUP(scifa0_ctrl), | ||
2916 | SH_PFC_PIN_GROUP(scifa1_data), | ||
2917 | SH_PFC_PIN_GROUP(scifa1_clk), | ||
2918 | SH_PFC_PIN_GROUP(scifa1_ctrl), | ||
2919 | SH_PFC_PIN_GROUP(scifa2_data), | ||
2920 | SH_PFC_PIN_GROUP(scifa2_clk_0), | ||
2921 | SH_PFC_PIN_GROUP(scifa2_clk_1), | ||
2922 | SH_PFC_PIN_GROUP(scifa2_ctrl), | ||
2923 | SH_PFC_PIN_GROUP(scifa3_data_0), | ||
2924 | SH_PFC_PIN_GROUP(scifa3_clk_0), | ||
2925 | SH_PFC_PIN_GROUP(scifa3_ctrl_0), | ||
2926 | SH_PFC_PIN_GROUP(scifa3_data_1), | ||
2927 | SH_PFC_PIN_GROUP(scifa3_clk_1), | ||
2928 | SH_PFC_PIN_GROUP(scifa3_ctrl_1), | ||
2929 | SH_PFC_PIN_GROUP(scifa4_data_0), | ||
2930 | SH_PFC_PIN_GROUP(scifa4_data_1), | ||
2931 | SH_PFC_PIN_GROUP(scifa4_data_2), | ||
2932 | SH_PFC_PIN_GROUP(scifa4_clk_0), | ||
2933 | SH_PFC_PIN_GROUP(scifa4_clk_1), | ||
2934 | SH_PFC_PIN_GROUP(scifa5_data_0), | ||
2935 | SH_PFC_PIN_GROUP(scifa5_data_1), | ||
2936 | SH_PFC_PIN_GROUP(scifa5_data_2), | ||
2937 | SH_PFC_PIN_GROUP(scifa5_clk_0), | ||
2938 | SH_PFC_PIN_GROUP(scifa5_clk_1), | ||
2939 | SH_PFC_PIN_GROUP(scifa6_data), | ||
2940 | SH_PFC_PIN_GROUP(scifa6_clk), | ||
2941 | SH_PFC_PIN_GROUP(scifa7_data), | ||
2942 | SH_PFC_PIN_GROUP(scifb_data_0), | ||
2943 | SH_PFC_PIN_GROUP(scifb_clk_0), | ||
2944 | SH_PFC_PIN_GROUP(scifb_ctrl_0), | ||
2945 | SH_PFC_PIN_GROUP(scifb_data_1), | ||
2946 | SH_PFC_PIN_GROUP(scifb_clk_1), | ||
2947 | SH_PFC_PIN_GROUP(scifb_ctrl_1), | ||
2087 | SH_PFC_PIN_GROUP(sdhi0_data1), | 2948 | SH_PFC_PIN_GROUP(sdhi0_data1), |
2088 | SH_PFC_PIN_GROUP(sdhi0_data4), | 2949 | SH_PFC_PIN_GROUP(sdhi0_data4), |
2089 | SH_PFC_PIN_GROUP(sdhi0_ctrl), | 2950 | SH_PFC_PIN_GROUP(sdhi0_ctrl), |
@@ -2101,6 +2962,132 @@ static const struct sh_pfc_pin_group pinmux_groups[] = { | |||
2101 | SH_PFC_PIN_GROUP(sdhi2_wp_0), | 2962 | SH_PFC_PIN_GROUP(sdhi2_wp_0), |
2102 | SH_PFC_PIN_GROUP(sdhi2_cd_1), | 2963 | SH_PFC_PIN_GROUP(sdhi2_cd_1), |
2103 | SH_PFC_PIN_GROUP(sdhi2_wp_1), | 2964 | SH_PFC_PIN_GROUP(sdhi2_wp_1), |
2965 | SH_PFC_PIN_GROUP(tpu0_to0), | ||
2966 | SH_PFC_PIN_GROUP(tpu0_to1), | ||
2967 | SH_PFC_PIN_GROUP(tpu0_to2_0), | ||
2968 | SH_PFC_PIN_GROUP(tpu0_to2_1), | ||
2969 | SH_PFC_PIN_GROUP(tpu0_to3), | ||
2970 | }; | ||
2971 | |||
2972 | static const char * const bsc_groups[] = { | ||
2973 | "bsc_data8", | ||
2974 | "bsc_data16", | ||
2975 | "bsc_data32", | ||
2976 | "bsc_cs0", | ||
2977 | "bsc_cs2", | ||
2978 | "bsc_cs4", | ||
2979 | "bsc_cs5a_0", | ||
2980 | "bsc_cs5a_1", | ||
2981 | "bsc_cs5b", | ||
2982 | "bsc_cs6a", | ||
2983 | "bsc_rd_we8", | ||
2984 | "bsc_rd_we16", | ||
2985 | "bsc_rd_we32", | ||
2986 | "bsc_bs", | ||
2987 | "bsc_rdwr", | ||
2988 | }; | ||
2989 | |||
2990 | static const char * const ceu0_groups[] = { | ||
2991 | "ceu0_data_0_7", | ||
2992 | "ceu0_data_8_15_0", | ||
2993 | "ceu0_data_8_15_1", | ||
2994 | "ceu0_clk_0", | ||
2995 | "ceu0_clk_1", | ||
2996 | "ceu0_clk_2", | ||
2997 | "ceu0_sync", | ||
2998 | "ceu0_field", | ||
2999 | }; | ||
3000 | |||
3001 | static const char * const ceu1_groups[] = { | ||
3002 | "ceu1_data", | ||
3003 | "ceu1_clk", | ||
3004 | "ceu1_sync", | ||
3005 | "ceu1_field", | ||
3006 | }; | ||
3007 | |||
3008 | static const char * const fsia_groups[] = { | ||
3009 | "fsia_mclk_in", | ||
3010 | "fsia_mclk_out", | ||
3011 | "fsia_sclk_in", | ||
3012 | "fsia_sclk_out", | ||
3013 | "fsia_data_in_0", | ||
3014 | "fsia_data_in_1", | ||
3015 | "fsia_data_out_0", | ||
3016 | "fsia_data_out_1", | ||
3017 | "fsia_data_out_2", | ||
3018 | "fsia_spdif_0", | ||
3019 | "fsia_spdif_1", | ||
3020 | }; | ||
3021 | |||
3022 | static const char * const fsib_groups[] = { | ||
3023 | "fsib_mclk_in", | ||
3024 | }; | ||
3025 | |||
3026 | static const char * const gether_groups[] = { | ||
3027 | "gether_rmii", | ||
3028 | "gether_mii", | ||
3029 | "gether_gmii", | ||
3030 | "gether_int", | ||
3031 | "gether_link", | ||
3032 | "gether_wol", | ||
3033 | }; | ||
3034 | |||
3035 | static const char * const hdmi_groups[] = { | ||
3036 | "hdmi", | ||
3037 | }; | ||
3038 | |||
3039 | static const char * const intc_groups[] = { | ||
3040 | "intc_irq0_0", | ||
3041 | "intc_irq0_1", | ||
3042 | "intc_irq1", | ||
3043 | "intc_irq2_0", | ||
3044 | "intc_irq2_1", | ||
3045 | "intc_irq3_0", | ||
3046 | "intc_irq3_1", | ||
3047 | "intc_irq4_0", | ||
3048 | "intc_irq4_1", | ||
3049 | "intc_irq5_0", | ||
3050 | "intc_irq5_1", | ||
3051 | "intc_irq6_0", | ||
3052 | "intc_irq6_1", | ||
3053 | "intc_irq7_0", | ||
3054 | "intc_irq7_1", | ||
3055 | "intc_irq8", | ||
3056 | "intc_irq9_0", | ||
3057 | "intc_irq9_1", | ||
3058 | "intc_irq10", | ||
3059 | "intc_irq11", | ||
3060 | "intc_irq12_0", | ||
3061 | "intc_irq12_1", | ||
3062 | "intc_irq13_0", | ||
3063 | "intc_irq13_1", | ||
3064 | "intc_irq14_0", | ||
3065 | "intc_irq14_1", | ||
3066 | "intc_irq15_0", | ||
3067 | "intc_irq15_1", | ||
3068 | "intc_irq16_0", | ||
3069 | "intc_irq16_1", | ||
3070 | "intc_irq17", | ||
3071 | "intc_irq18", | ||
3072 | "intc_irq19", | ||
3073 | "intc_irq20", | ||
3074 | "intc_irq21", | ||
3075 | "intc_irq22", | ||
3076 | "intc_irq23", | ||
3077 | "intc_irq24", | ||
3078 | "intc_irq25", | ||
3079 | "intc_irq26_0", | ||
3080 | "intc_irq26_1", | ||
3081 | "intc_irq27_0", | ||
3082 | "intc_irq27_1", | ||
3083 | "intc_irq28_0", | ||
3084 | "intc_irq28_1", | ||
3085 | "intc_irq29_0", | ||
3086 | "intc_irq29_1", | ||
3087 | "intc_irq30_0", | ||
3088 | "intc_irq30_1", | ||
3089 | "intc_irq31_0", | ||
3090 | "intc_irq31_1", | ||
2104 | }; | 3091 | }; |
2105 | 3092 | ||
2106 | static const char * const lcd0_groups[] = { | 3093 | static const char * const lcd0_groups[] = { |
@@ -2142,6 +3129,68 @@ static const char * const mmc0_groups[] = { | |||
2142 | "mmc0_ctrl_1", | 3129 | "mmc0_ctrl_1", |
2143 | }; | 3130 | }; |
2144 | 3131 | ||
3132 | static const char * const scifa0_groups[] = { | ||
3133 | "scifa0_data", | ||
3134 | "scifa0_clk", | ||
3135 | "scifa0_ctrl", | ||
3136 | }; | ||
3137 | |||
3138 | static const char * const scifa1_groups[] = { | ||
3139 | "scifa1_data", | ||
3140 | "scifa1_clk", | ||
3141 | "scifa1_ctrl", | ||
3142 | }; | ||
3143 | |||
3144 | static const char * const scifa2_groups[] = { | ||
3145 | "scifa2_data", | ||
3146 | "scifa2_clk_0", | ||
3147 | "scifa2_clk_1", | ||
3148 | "scifa2_ctrl", | ||
3149 | }; | ||
3150 | |||
3151 | static const char * const scifa3_groups[] = { | ||
3152 | "scifa3_data_0", | ||
3153 | "scifa3_clk_0", | ||
3154 | "scifa3_ctrl_0", | ||
3155 | "scifa3_data_1", | ||
3156 | "scifa3_clk_1", | ||
3157 | "scifa3_ctrl_1", | ||
3158 | }; | ||
3159 | |||
3160 | static const char * const scifa4_groups[] = { | ||
3161 | "scifa4_data_0", | ||
3162 | "scifa4_data_1", | ||
3163 | "scifa4_data_2", | ||
3164 | "scifa4_clk_0", | ||
3165 | "scifa4_clk_1", | ||
3166 | }; | ||
3167 | |||
3168 | static const char * const scifa5_groups[] = { | ||
3169 | "scifa5_data_0", | ||
3170 | "scifa5_data_1", | ||
3171 | "scifa5_data_2", | ||
3172 | "scifa5_clk_0", | ||
3173 | "scifa5_clk_1", | ||
3174 | }; | ||
3175 | |||
3176 | static const char * const scifa6_groups[] = { | ||
3177 | "scifa6_data", | ||
3178 | "scifa6_clk", | ||
3179 | }; | ||
3180 | |||
3181 | static const char * const scifa7_groups[] = { | ||
3182 | "scifa7_data", | ||
3183 | }; | ||
3184 | |||
3185 | static const char * const scifb_groups[] = { | ||
3186 | "scifb_data_0", | ||
3187 | "scifb_clk_0", | ||
3188 | "scifb_ctrl_0", | ||
3189 | "scifb_data_1", | ||
3190 | "scifb_clk_1", | ||
3191 | "scifb_ctrl_1", | ||
3192 | }; | ||
3193 | |||
2145 | static const char * const sdhi0_groups[] = { | 3194 | static const char * const sdhi0_groups[] = { |
2146 | "sdhi0_data1", | 3195 | "sdhi0_data1", |
2147 | "sdhi0_data4", | 3196 | "sdhi0_data4", |
@@ -2168,412 +3217,51 @@ static const char * const sdhi2_groups[] = { | |||
2168 | "sdhi2_wp_1", | 3217 | "sdhi2_wp_1", |
2169 | }; | 3218 | }; |
2170 | 3219 | ||
3220 | static const char * const tpu0_groups[] = { | ||
3221 | "tpu0_to0", | ||
3222 | "tpu0_to1", | ||
3223 | "tpu0_to2_0", | ||
3224 | "tpu0_to2_1", | ||
3225 | "tpu0_to3", | ||
3226 | }; | ||
3227 | |||
2171 | static const struct sh_pfc_function pinmux_functions[] = { | 3228 | static const struct sh_pfc_function pinmux_functions[] = { |
3229 | SH_PFC_FUNCTION(bsc), | ||
3230 | SH_PFC_FUNCTION(ceu0), | ||
3231 | SH_PFC_FUNCTION(ceu1), | ||
3232 | SH_PFC_FUNCTION(fsia), | ||
3233 | SH_PFC_FUNCTION(fsib), | ||
3234 | SH_PFC_FUNCTION(gether), | ||
3235 | SH_PFC_FUNCTION(hdmi), | ||
3236 | SH_PFC_FUNCTION(intc), | ||
2172 | SH_PFC_FUNCTION(lcd0), | 3237 | SH_PFC_FUNCTION(lcd0), |
2173 | SH_PFC_FUNCTION(lcd1), | 3238 | SH_PFC_FUNCTION(lcd1), |
2174 | SH_PFC_FUNCTION(mmc0), | 3239 | SH_PFC_FUNCTION(mmc0), |
3240 | SH_PFC_FUNCTION(scifa0), | ||
3241 | SH_PFC_FUNCTION(scifa1), | ||
3242 | SH_PFC_FUNCTION(scifa2), | ||
3243 | SH_PFC_FUNCTION(scifa3), | ||
3244 | SH_PFC_FUNCTION(scifa4), | ||
3245 | SH_PFC_FUNCTION(scifa5), | ||
3246 | SH_PFC_FUNCTION(scifa6), | ||
3247 | SH_PFC_FUNCTION(scifa7), | ||
3248 | SH_PFC_FUNCTION(scifb), | ||
2175 | SH_PFC_FUNCTION(sdhi0), | 3249 | SH_PFC_FUNCTION(sdhi0), |
2176 | SH_PFC_FUNCTION(sdhi1), | 3250 | SH_PFC_FUNCTION(sdhi1), |
2177 | SH_PFC_FUNCTION(sdhi2), | 3251 | SH_PFC_FUNCTION(sdhi2), |
3252 | SH_PFC_FUNCTION(tpu0), | ||
2178 | }; | 3253 | }; |
2179 | 3254 | ||
2180 | #define PINMUX_FN_BASE ARRAY_SIZE(pinmux_pins) | 3255 | #undef PORTCR |
2181 | 3256 | #define PORTCR(nr, reg) \ | |
2182 | static const struct pinmux_func pinmux_func_gpios[] = { | 3257 | { \ |
2183 | /* IRQ */ | 3258 | PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ |
2184 | GPIO_FN(IRQ0_PORT2), GPIO_FN(IRQ0_PORT13), | 3259 | _PCRH(PORT##nr##_IN, 0, 0, PORT##nr##_OUT), \ |
2185 | GPIO_FN(IRQ1), | 3260 | PORT##nr##_FN0, PORT##nr##_FN1, \ |
2186 | GPIO_FN(IRQ2_PORT11), GPIO_FN(IRQ2_PORT12), | 3261 | PORT##nr##_FN2, PORT##nr##_FN3, \ |
2187 | GPIO_FN(IRQ3_PORT10), GPIO_FN(IRQ3_PORT14), | 3262 | PORT##nr##_FN4, PORT##nr##_FN5, \ |
2188 | GPIO_FN(IRQ4_PORT15), GPIO_FN(IRQ4_PORT172), | 3263 | PORT##nr##_FN6, PORT##nr##_FN7 } \ |
2189 | GPIO_FN(IRQ5_PORT0), GPIO_FN(IRQ5_PORT1), | 3264 | } |
2190 | GPIO_FN(IRQ6_PORT121), GPIO_FN(IRQ6_PORT173), | ||
2191 | GPIO_FN(IRQ7_PORT120), GPIO_FN(IRQ7_PORT209), | ||
2192 | GPIO_FN(IRQ8), | ||
2193 | GPIO_FN(IRQ9_PORT118), GPIO_FN(IRQ9_PORT210), | ||
2194 | GPIO_FN(IRQ10), | ||
2195 | GPIO_FN(IRQ11), | ||
2196 | GPIO_FN(IRQ12_PORT42), GPIO_FN(IRQ12_PORT97), | ||
2197 | GPIO_FN(IRQ13_PORT64), GPIO_FN(IRQ13_PORT98), | ||
2198 | GPIO_FN(IRQ14_PORT63), GPIO_FN(IRQ14_PORT99), | ||
2199 | GPIO_FN(IRQ15_PORT62), GPIO_FN(IRQ15_PORT100), | ||
2200 | GPIO_FN(IRQ16_PORT68), GPIO_FN(IRQ16_PORT211), | ||
2201 | GPIO_FN(IRQ17), | ||
2202 | GPIO_FN(IRQ18), | ||
2203 | GPIO_FN(IRQ19), | ||
2204 | GPIO_FN(IRQ20), | ||
2205 | GPIO_FN(IRQ21), | ||
2206 | GPIO_FN(IRQ22), | ||
2207 | GPIO_FN(IRQ23), | ||
2208 | GPIO_FN(IRQ24), | ||
2209 | GPIO_FN(IRQ25), | ||
2210 | GPIO_FN(IRQ26_PORT58), GPIO_FN(IRQ26_PORT81), | ||
2211 | GPIO_FN(IRQ27_PORT57), GPIO_FN(IRQ27_PORT168), | ||
2212 | GPIO_FN(IRQ28_PORT56), GPIO_FN(IRQ28_PORT169), | ||
2213 | GPIO_FN(IRQ29_PORT50), GPIO_FN(IRQ29_PORT170), | ||
2214 | GPIO_FN(IRQ30_PORT49), GPIO_FN(IRQ30_PORT171), | ||
2215 | GPIO_FN(IRQ31_PORT41), GPIO_FN(IRQ31_PORT167), | ||
2216 | |||
2217 | /* Function */ | ||
2218 | |||
2219 | /* DBGT */ | ||
2220 | GPIO_FN(DBGMDT2), GPIO_FN(DBGMDT1), GPIO_FN(DBGMDT0), | ||
2221 | GPIO_FN(DBGMD10), GPIO_FN(DBGMD11), GPIO_FN(DBGMD20), | ||
2222 | GPIO_FN(DBGMD21), | ||
2223 | |||
2224 | /* FSI-A */ | ||
2225 | GPIO_FN(FSIAISLD_PORT0), /* FSIAISLD Port 0/5 */ | ||
2226 | GPIO_FN(FSIAISLD_PORT5), | ||
2227 | GPIO_FN(FSIASPDIF_PORT9), /* FSIASPDIF Port 9/18 */ | ||
2228 | GPIO_FN(FSIASPDIF_PORT18), | ||
2229 | GPIO_FN(FSIAOSLD1), GPIO_FN(FSIAOSLD2), GPIO_FN(FSIAOLR), | ||
2230 | GPIO_FN(FSIAOBT), GPIO_FN(FSIAOSLD), GPIO_FN(FSIAOMC), | ||
2231 | GPIO_FN(FSIACK), GPIO_FN(FSIAILR), GPIO_FN(FSIAIBT), | ||
2232 | |||
2233 | /* FSI-B */ | ||
2234 | GPIO_FN(FSIBCK), | ||
2235 | |||
2236 | /* FMSI */ | ||
2237 | GPIO_FN(FMSISLD_PORT1), /* FMSISLD Port 1/6 */ | ||
2238 | GPIO_FN(FMSISLD_PORT6), | ||
2239 | GPIO_FN(FMSIILR), GPIO_FN(FMSIIBT), GPIO_FN(FMSIOLR), | ||
2240 | GPIO_FN(FMSIOBT), GPIO_FN(FMSICK), GPIO_FN(FMSOILR), | ||
2241 | GPIO_FN(FMSOIBT), GPIO_FN(FMSOOLR), GPIO_FN(FMSOOBT), | ||
2242 | GPIO_FN(FMSOSLD), GPIO_FN(FMSOCK), | ||
2243 | |||
2244 | /* SCIFA0 */ | ||
2245 | GPIO_FN(SCIFA0_SCK), GPIO_FN(SCIFA0_CTS), GPIO_FN(SCIFA0_RTS), | ||
2246 | GPIO_FN(SCIFA0_RXD), GPIO_FN(SCIFA0_TXD), | ||
2247 | |||
2248 | /* SCIFA1 */ | ||
2249 | GPIO_FN(SCIFA1_CTS), GPIO_FN(SCIFA1_SCK), | ||
2250 | GPIO_FN(SCIFA1_RXD), GPIO_FN(SCIFA1_TXD), GPIO_FN(SCIFA1_RTS), | ||
2251 | |||
2252 | /* SCIFA2 */ | ||
2253 | GPIO_FN(SCIFA2_SCK_PORT22), /* SCIFA2_SCK Port 22/199 */ | ||
2254 | GPIO_FN(SCIFA2_SCK_PORT199), | ||
2255 | GPIO_FN(SCIFA2_RXD), GPIO_FN(SCIFA2_TXD), | ||
2256 | GPIO_FN(SCIFA2_CTS), GPIO_FN(SCIFA2_RTS), | ||
2257 | |||
2258 | /* SCIFA3 */ | ||
2259 | GPIO_FN(SCIFA3_RTS_PORT105), /* MSEL5CR_8_0 */ | ||
2260 | GPIO_FN(SCIFA3_SCK_PORT116), | ||
2261 | GPIO_FN(SCIFA3_CTS_PORT117), | ||
2262 | GPIO_FN(SCIFA3_RXD_PORT174), | ||
2263 | GPIO_FN(SCIFA3_TXD_PORT175), | ||
2264 | |||
2265 | GPIO_FN(SCIFA3_RTS_PORT161), /* MSEL5CR_8_1 */ | ||
2266 | GPIO_FN(SCIFA3_SCK_PORT158), | ||
2267 | GPIO_FN(SCIFA3_CTS_PORT162), | ||
2268 | GPIO_FN(SCIFA3_RXD_PORT159), | ||
2269 | GPIO_FN(SCIFA3_TXD_PORT160), | ||
2270 | |||
2271 | /* SCIFA4 */ | ||
2272 | GPIO_FN(SCIFA4_RXD_PORT12), /* MSEL5CR[12:11] = 00 */ | ||
2273 | GPIO_FN(SCIFA4_TXD_PORT13), | ||
2274 | |||
2275 | GPIO_FN(SCIFA4_RXD_PORT204), /* MSEL5CR[12:11] = 01 */ | ||
2276 | GPIO_FN(SCIFA4_TXD_PORT203), | ||
2277 | |||
2278 | GPIO_FN(SCIFA4_RXD_PORT94), /* MSEL5CR[12:11] = 10 */ | ||
2279 | GPIO_FN(SCIFA4_TXD_PORT93), | ||
2280 | |||
2281 | GPIO_FN(SCIFA4_SCK_PORT21), /* SCIFA4_SCK Port 21/205 */ | ||
2282 | GPIO_FN(SCIFA4_SCK_PORT205), | ||
2283 | |||
2284 | /* SCIFA5 */ | ||
2285 | GPIO_FN(SCIFA5_TXD_PORT20), /* MSEL5CR[15:14] = 00 */ | ||
2286 | GPIO_FN(SCIFA5_RXD_PORT10), | ||
2287 | |||
2288 | GPIO_FN(SCIFA5_RXD_PORT207), /* MSEL5CR[15:14] = 01 */ | ||
2289 | GPIO_FN(SCIFA5_TXD_PORT208), | ||
2290 | |||
2291 | GPIO_FN(SCIFA5_TXD_PORT91), /* MSEL5CR[15:14] = 10 */ | ||
2292 | GPIO_FN(SCIFA5_RXD_PORT92), | ||
2293 | |||
2294 | GPIO_FN(SCIFA5_SCK_PORT23), /* SCIFA5_SCK Port 23/206 */ | ||
2295 | GPIO_FN(SCIFA5_SCK_PORT206), | ||
2296 | |||
2297 | /* SCIFA6 */ | ||
2298 | GPIO_FN(SCIFA6_SCK), GPIO_FN(SCIFA6_RXD), GPIO_FN(SCIFA6_TXD), | ||
2299 | |||
2300 | /* SCIFA7 */ | ||
2301 | GPIO_FN(SCIFA7_TXD), GPIO_FN(SCIFA7_RXD), | ||
2302 | |||
2303 | /* SCIFAB */ | ||
2304 | GPIO_FN(SCIFB_SCK_PORT190), /* MSEL5CR_17_0 */ | ||
2305 | GPIO_FN(SCIFB_RXD_PORT191), | ||
2306 | GPIO_FN(SCIFB_TXD_PORT192), | ||
2307 | GPIO_FN(SCIFB_RTS_PORT186), | ||
2308 | GPIO_FN(SCIFB_CTS_PORT187), | ||
2309 | |||
2310 | GPIO_FN(SCIFB_SCK_PORT2), /* MSEL5CR_17_1 */ | ||
2311 | GPIO_FN(SCIFB_RXD_PORT3), | ||
2312 | GPIO_FN(SCIFB_TXD_PORT4), | ||
2313 | GPIO_FN(SCIFB_RTS_PORT172), | ||
2314 | GPIO_FN(SCIFB_CTS_PORT173), | ||
2315 | |||
2316 | /* RSPI */ | ||
2317 | GPIO_FN(RSPI_SSL0_A), GPIO_FN(RSPI_SSL1_A), GPIO_FN(RSPI_SSL2_A), | ||
2318 | GPIO_FN(RSPI_SSL3_A), GPIO_FN(RSPI_CK_A), GPIO_FN(RSPI_MOSI_A), | ||
2319 | GPIO_FN(RSPI_MISO_A), | ||
2320 | |||
2321 | /* VIO CKO */ | ||
2322 | GPIO_FN(VIO_CKO1), | ||
2323 | GPIO_FN(VIO_CKO2), | ||
2324 | GPIO_FN(VIO_CKO_1), | ||
2325 | GPIO_FN(VIO_CKO), | ||
2326 | |||
2327 | /* VIO0 */ | ||
2328 | GPIO_FN(VIO0_D0), GPIO_FN(VIO0_D1), GPIO_FN(VIO0_D2), | ||
2329 | GPIO_FN(VIO0_D3), GPIO_FN(VIO0_D4), GPIO_FN(VIO0_D5), | ||
2330 | GPIO_FN(VIO0_D6), GPIO_FN(VIO0_D7), GPIO_FN(VIO0_D8), | ||
2331 | GPIO_FN(VIO0_D9), GPIO_FN(VIO0_D10), GPIO_FN(VIO0_D11), | ||
2332 | GPIO_FN(VIO0_D12), GPIO_FN(VIO0_VD), GPIO_FN(VIO0_HD), | ||
2333 | GPIO_FN(VIO0_CLK), GPIO_FN(VIO0_FIELD), | ||
2334 | |||
2335 | GPIO_FN(VIO0_D13_PORT26), /* MSEL5CR_27_0 */ | ||
2336 | GPIO_FN(VIO0_D14_PORT25), | ||
2337 | GPIO_FN(VIO0_D15_PORT24), | ||
2338 | |||
2339 | GPIO_FN(VIO0_D13_PORT22), /* MSEL5CR_27_1 */ | ||
2340 | GPIO_FN(VIO0_D14_PORT95), | ||
2341 | GPIO_FN(VIO0_D15_PORT96), | ||
2342 | |||
2343 | /* VIO1 */ | ||
2344 | GPIO_FN(VIO1_D0), GPIO_FN(VIO1_D1), GPIO_FN(VIO1_D2), | ||
2345 | GPIO_FN(VIO1_D3), GPIO_FN(VIO1_D4), GPIO_FN(VIO1_D5), | ||
2346 | GPIO_FN(VIO1_D6), GPIO_FN(VIO1_D7), GPIO_FN(VIO1_VD), | ||
2347 | GPIO_FN(VIO1_HD), GPIO_FN(VIO1_CLK), GPIO_FN(VIO1_FIELD), | ||
2348 | |||
2349 | /* TPU0 */ | ||
2350 | GPIO_FN(TPU0TO0), GPIO_FN(TPU0TO1), GPIO_FN(TPU0TO3), | ||
2351 | GPIO_FN(TPU0TO2_PORT66), /* TPU0TO2 Port 66/202 */ | ||
2352 | GPIO_FN(TPU0TO2_PORT202), | ||
2353 | |||
2354 | /* SSP1 0 */ | ||
2355 | GPIO_FN(STP0_IPD0), GPIO_FN(STP0_IPD1), GPIO_FN(STP0_IPD2), | ||
2356 | GPIO_FN(STP0_IPD3), GPIO_FN(STP0_IPD4), GPIO_FN(STP0_IPD5), | ||
2357 | GPIO_FN(STP0_IPD6), GPIO_FN(STP0_IPD7), GPIO_FN(STP0_IPEN), | ||
2358 | GPIO_FN(STP0_IPCLK), GPIO_FN(STP0_IPSYNC), | ||
2359 | |||
2360 | /* SSP1 1 */ | ||
2361 | GPIO_FN(STP1_IPD1), GPIO_FN(STP1_IPD2), GPIO_FN(STP1_IPD3), | ||
2362 | GPIO_FN(STP1_IPD4), GPIO_FN(STP1_IPD5), GPIO_FN(STP1_IPD6), | ||
2363 | GPIO_FN(STP1_IPD7), GPIO_FN(STP1_IPCLK), GPIO_FN(STP1_IPSYNC), | ||
2364 | |||
2365 | GPIO_FN(STP1_IPD0_PORT186), /* MSEL5CR_23_0 */ | ||
2366 | GPIO_FN(STP1_IPEN_PORT187), | ||
2367 | |||
2368 | GPIO_FN(STP1_IPD0_PORT194), /* MSEL5CR_23_1 */ | ||
2369 | GPIO_FN(STP1_IPEN_PORT193), | ||
2370 | |||
2371 | /* SIM */ | ||
2372 | GPIO_FN(SIM_RST), GPIO_FN(SIM_CLK), | ||
2373 | GPIO_FN(SIM_D_PORT22), /* SIM_D Port 22/199 */ | ||
2374 | GPIO_FN(SIM_D_PORT199), | ||
2375 | |||
2376 | /* MSIOF2 */ | ||
2377 | GPIO_FN(MSIOF2_TXD), GPIO_FN(MSIOF2_RXD), GPIO_FN(MSIOF2_TSCK), | ||
2378 | GPIO_FN(MSIOF2_SS2), GPIO_FN(MSIOF2_TSYNC), GPIO_FN(MSIOF2_SS1), | ||
2379 | GPIO_FN(MSIOF2_MCK1), GPIO_FN(MSIOF2_MCK0), GPIO_FN(MSIOF2_RSYNC), | ||
2380 | GPIO_FN(MSIOF2_RSCK), | ||
2381 | |||
2382 | /* KEYSC */ | ||
2383 | GPIO_FN(KEYIN4), GPIO_FN(KEYIN5), | ||
2384 | GPIO_FN(KEYIN6), GPIO_FN(KEYIN7), | ||
2385 | GPIO_FN(KEYOUT0), GPIO_FN(KEYOUT1), GPIO_FN(KEYOUT2), | ||
2386 | GPIO_FN(KEYOUT3), GPIO_FN(KEYOUT4), GPIO_FN(KEYOUT5), | ||
2387 | GPIO_FN(KEYOUT6), GPIO_FN(KEYOUT7), | ||
2388 | |||
2389 | GPIO_FN(KEYIN0_PORT43), /* MSEL4CR_18_0 */ | ||
2390 | GPIO_FN(KEYIN1_PORT44), | ||
2391 | GPIO_FN(KEYIN2_PORT45), | ||
2392 | GPIO_FN(KEYIN3_PORT46), | ||
2393 | |||
2394 | GPIO_FN(KEYIN0_PORT58), /* MSEL4CR_18_1 */ | ||
2395 | GPIO_FN(KEYIN1_PORT57), | ||
2396 | GPIO_FN(KEYIN2_PORT56), | ||
2397 | GPIO_FN(KEYIN3_PORT55), | ||
2398 | |||
2399 | /* VOU */ | ||
2400 | GPIO_FN(DV_D0), GPIO_FN(DV_D1), GPIO_FN(DV_D2), | ||
2401 | GPIO_FN(DV_D3), GPIO_FN(DV_D4), GPIO_FN(DV_D5), | ||
2402 | GPIO_FN(DV_D6), GPIO_FN(DV_D7), GPIO_FN(DV_D8), | ||
2403 | GPIO_FN(DV_D9), GPIO_FN(DV_D10), GPIO_FN(DV_D11), | ||
2404 | GPIO_FN(DV_D12), GPIO_FN(DV_D13), GPIO_FN(DV_D14), | ||
2405 | GPIO_FN(DV_D15), GPIO_FN(DV_CLK), | ||
2406 | GPIO_FN(DV_VSYNC), GPIO_FN(DV_HSYNC), | ||
2407 | |||
2408 | /* MEMC */ | ||
2409 | GPIO_FN(MEMC_AD0), GPIO_FN(MEMC_AD1), GPIO_FN(MEMC_AD2), | ||
2410 | GPIO_FN(MEMC_AD3), GPIO_FN(MEMC_AD4), GPIO_FN(MEMC_AD5), | ||
2411 | GPIO_FN(MEMC_AD6), GPIO_FN(MEMC_AD7), GPIO_FN(MEMC_AD8), | ||
2412 | GPIO_FN(MEMC_AD9), GPIO_FN(MEMC_AD10), GPIO_FN(MEMC_AD11), | ||
2413 | GPIO_FN(MEMC_AD12), GPIO_FN(MEMC_AD13), GPIO_FN(MEMC_AD14), | ||
2414 | GPIO_FN(MEMC_AD15), GPIO_FN(MEMC_CS0), GPIO_FN(MEMC_INT), | ||
2415 | GPIO_FN(MEMC_NWE), GPIO_FN(MEMC_NOE), GPIO_FN(MEMC_CS1), | ||
2416 | GPIO_FN(MEMC_A1), GPIO_FN(MEMC_ADV), GPIO_FN(MEMC_DREQ0), | ||
2417 | GPIO_FN(MEMC_WAIT), GPIO_FN(MEMC_DREQ1), GPIO_FN(MEMC_BUSCLK), | ||
2418 | GPIO_FN(MEMC_A0), | ||
2419 | |||
2420 | /* MSIOF0 */ | ||
2421 | GPIO_FN(MSIOF0_SS1), GPIO_FN(MSIOF0_SS2), GPIO_FN(MSIOF0_RXD), | ||
2422 | GPIO_FN(MSIOF0_TXD), GPIO_FN(MSIOF0_MCK0), GPIO_FN(MSIOF0_MCK1), | ||
2423 | GPIO_FN(MSIOF0_RSYNC), GPIO_FN(MSIOF0_RSCK), GPIO_FN(MSIOF0_TSCK), | ||
2424 | GPIO_FN(MSIOF0_TSYNC), | ||
2425 | |||
2426 | /* MSIOF1 */ | ||
2427 | GPIO_FN(MSIOF1_RSCK), GPIO_FN(MSIOF1_RSYNC), | ||
2428 | GPIO_FN(MSIOF1_MCK0), GPIO_FN(MSIOF1_MCK1), | ||
2429 | |||
2430 | GPIO_FN(MSIOF1_SS2_PORT116), GPIO_FN(MSIOF1_SS1_PORT117), | ||
2431 | GPIO_FN(MSIOF1_RXD_PORT118), GPIO_FN(MSIOF1_TXD_PORT119), | ||
2432 | GPIO_FN(MSIOF1_TSYNC_PORT120), | ||
2433 | GPIO_FN(MSIOF1_TSCK_PORT121), /* MSEL4CR_10_0 */ | ||
2434 | |||
2435 | GPIO_FN(MSIOF1_SS1_PORT67), GPIO_FN(MSIOF1_TSCK_PORT72), | ||
2436 | GPIO_FN(MSIOF1_TSYNC_PORT73), GPIO_FN(MSIOF1_TXD_PORT74), | ||
2437 | GPIO_FN(MSIOF1_RXD_PORT75), | ||
2438 | GPIO_FN(MSIOF1_SS2_PORT202), /* MSEL4CR_10_1 */ | ||
2439 | |||
2440 | /* GPIO */ | ||
2441 | GPIO_FN(GPO0), GPIO_FN(GPI0), | ||
2442 | GPIO_FN(GPO1), GPIO_FN(GPI1), | ||
2443 | |||
2444 | /* USB0 */ | ||
2445 | GPIO_FN(USB0_OCI), GPIO_FN(USB0_PPON), GPIO_FN(VBUS), | ||
2446 | |||
2447 | /* USB1 */ | ||
2448 | GPIO_FN(USB1_OCI), GPIO_FN(USB1_PPON), | ||
2449 | |||
2450 | /* BBIF1 */ | ||
2451 | GPIO_FN(BBIF1_RXD), GPIO_FN(BBIF1_TXD), GPIO_FN(BBIF1_TSYNC), | ||
2452 | GPIO_FN(BBIF1_TSCK), GPIO_FN(BBIF1_RSCK), GPIO_FN(BBIF1_RSYNC), | ||
2453 | GPIO_FN(BBIF1_FLOW), GPIO_FN(BBIF1_RX_FLOW_N), | ||
2454 | |||
2455 | /* BBIF2 */ | ||
2456 | GPIO_FN(BBIF2_TXD2_PORT5), /* MSEL5CR_0_0 */ | ||
2457 | GPIO_FN(BBIF2_RXD2_PORT60), | ||
2458 | GPIO_FN(BBIF2_TSYNC2_PORT6), | ||
2459 | GPIO_FN(BBIF2_TSCK2_PORT59), | ||
2460 | |||
2461 | GPIO_FN(BBIF2_RXD2_PORT90), /* MSEL5CR_0_1 */ | ||
2462 | GPIO_FN(BBIF2_TXD2_PORT183), | ||
2463 | GPIO_FN(BBIF2_TSCK2_PORT89), | ||
2464 | GPIO_FN(BBIF2_TSYNC2_PORT184), | ||
2465 | |||
2466 | /* BSC / FLCTL / PCMCIA */ | ||
2467 | GPIO_FN(CS0), GPIO_FN(CS2), GPIO_FN(CS4), | ||
2468 | GPIO_FN(CS5B), GPIO_FN(CS6A), | ||
2469 | GPIO_FN(CS5A_PORT105), /* CS5A PORT 19/105 */ | ||
2470 | GPIO_FN(CS5A_PORT19), | ||
2471 | GPIO_FN(IOIS16), /* ? */ | ||
2472 | |||
2473 | GPIO_FN(A0), GPIO_FN(A1), GPIO_FN(A2), GPIO_FN(A3), | ||
2474 | GPIO_FN(A4_FOE), GPIO_FN(A5_FCDE), /* share with FLCTL */ | ||
2475 | GPIO_FN(A6), GPIO_FN(A7), GPIO_FN(A8), GPIO_FN(A9), | ||
2476 | GPIO_FN(A10), GPIO_FN(A11), GPIO_FN(A12), GPIO_FN(A13), | ||
2477 | GPIO_FN(A14), GPIO_FN(A15), GPIO_FN(A16), GPIO_FN(A17), | ||
2478 | GPIO_FN(A18), GPIO_FN(A19), GPIO_FN(A20), GPIO_FN(A21), | ||
2479 | GPIO_FN(A22), GPIO_FN(A23), GPIO_FN(A24), GPIO_FN(A25), | ||
2480 | GPIO_FN(A26), | ||
2481 | |||
2482 | GPIO_FN(D0_NAF0), GPIO_FN(D1_NAF1), /* share with FLCTL */ | ||
2483 | GPIO_FN(D2_NAF2), GPIO_FN(D3_NAF3), /* share with FLCTL */ | ||
2484 | GPIO_FN(D4_NAF4), GPIO_FN(D5_NAF5), /* share with FLCTL */ | ||
2485 | GPIO_FN(D6_NAF6), GPIO_FN(D7_NAF7), /* share with FLCTL */ | ||
2486 | GPIO_FN(D8_NAF8), GPIO_FN(D9_NAF9), /* share with FLCTL */ | ||
2487 | GPIO_FN(D10_NAF10), GPIO_FN(D11_NAF11), /* share with FLCTL */ | ||
2488 | GPIO_FN(D12_NAF12), GPIO_FN(D13_NAF13), /* share with FLCTL */ | ||
2489 | GPIO_FN(D14_NAF14), GPIO_FN(D15_NAF15), /* share with FLCTL */ | ||
2490 | GPIO_FN(D16), GPIO_FN(D17), GPIO_FN(D18), GPIO_FN(D19), | ||
2491 | GPIO_FN(D20), GPIO_FN(D21), GPIO_FN(D22), GPIO_FN(D23), | ||
2492 | GPIO_FN(D24), GPIO_FN(D25), GPIO_FN(D26), GPIO_FN(D27), | ||
2493 | GPIO_FN(D28), GPIO_FN(D29), GPIO_FN(D30), GPIO_FN(D31), | ||
2494 | |||
2495 | GPIO_FN(WE0_FWE), /* share with FLCTL */ | ||
2496 | GPIO_FN(WE1), | ||
2497 | GPIO_FN(WE2_ICIORD), /* share with PCMCIA */ | ||
2498 | GPIO_FN(WE3_ICIOWR), /* share with PCMCIA */ | ||
2499 | GPIO_FN(CKO), GPIO_FN(BS), GPIO_FN(RDWR), | ||
2500 | GPIO_FN(RD_FSC), /* share with FLCTL */ | ||
2501 | GPIO_FN(WAIT_PORT177), /* WAIT Port 90/177 */ | ||
2502 | GPIO_FN(WAIT_PORT90), | ||
2503 | |||
2504 | GPIO_FN(FCE0), GPIO_FN(FCE1), GPIO_FN(FRB), /* FLCTL */ | ||
2505 | |||
2506 | /* IRDA */ | ||
2507 | GPIO_FN(IRDA_FIRSEL), GPIO_FN(IRDA_IN), GPIO_FN(IRDA_OUT), | ||
2508 | |||
2509 | /* ATAPI */ | ||
2510 | GPIO_FN(IDE_D0), GPIO_FN(IDE_D1), GPIO_FN(IDE_D2), | ||
2511 | GPIO_FN(IDE_D3), GPIO_FN(IDE_D4), GPIO_FN(IDE_D5), | ||
2512 | GPIO_FN(IDE_D6), GPIO_FN(IDE_D7), GPIO_FN(IDE_D8), | ||
2513 | GPIO_FN(IDE_D9), GPIO_FN(IDE_D10), GPIO_FN(IDE_D11), | ||
2514 | GPIO_FN(IDE_D12), GPIO_FN(IDE_D13), GPIO_FN(IDE_D14), | ||
2515 | GPIO_FN(IDE_D15), GPIO_FN(IDE_A0), GPIO_FN(IDE_A1), | ||
2516 | GPIO_FN(IDE_A2), GPIO_FN(IDE_CS0), GPIO_FN(IDE_CS1), | ||
2517 | GPIO_FN(IDE_IOWR), GPIO_FN(IDE_IORD), GPIO_FN(IDE_IORDY), | ||
2518 | GPIO_FN(IDE_INT), GPIO_FN(IDE_RST), GPIO_FN(IDE_DIRECTION), | ||
2519 | GPIO_FN(IDE_EXBUF_ENB), GPIO_FN(IDE_IODACK), GPIO_FN(IDE_IODREQ), | ||
2520 | |||
2521 | /* RMII */ | ||
2522 | GPIO_FN(RMII_CRS_DV), GPIO_FN(RMII_RX_ER), GPIO_FN(RMII_RXD0), | ||
2523 | GPIO_FN(RMII_RXD1), GPIO_FN(RMII_TX_EN), GPIO_FN(RMII_TXD0), | ||
2524 | GPIO_FN(RMII_MDC), GPIO_FN(RMII_TXD1), GPIO_FN(RMII_MDIO), | ||
2525 | GPIO_FN(RMII_REF50CK), GPIO_FN(RMII_REF125CK), /* for GMII */ | ||
2526 | |||
2527 | /* GEther */ | ||
2528 | GPIO_FN(ET_TX_CLK), GPIO_FN(ET_TX_EN), GPIO_FN(ET_ETXD0), | ||
2529 | GPIO_FN(ET_ETXD1), GPIO_FN(ET_ETXD2), GPIO_FN(ET_ETXD3), | ||
2530 | GPIO_FN(ET_ETXD4), GPIO_FN(ET_ETXD5), /* for GEther */ | ||
2531 | GPIO_FN(ET_ETXD6), GPIO_FN(ET_ETXD7), /* for GEther */ | ||
2532 | GPIO_FN(ET_COL), GPIO_FN(ET_TX_ER), GPIO_FN(ET_RX_CLK), | ||
2533 | GPIO_FN(ET_RX_DV), GPIO_FN(ET_ERXD0), GPIO_FN(ET_ERXD1), | ||
2534 | GPIO_FN(ET_ERXD2), GPIO_FN(ET_ERXD3), | ||
2535 | GPIO_FN(ET_ERXD4), GPIO_FN(ET_ERXD5), /* for GEther */ | ||
2536 | GPIO_FN(ET_ERXD6), GPIO_FN(ET_ERXD7), /* for GEther */ | ||
2537 | GPIO_FN(ET_RX_ER), GPIO_FN(ET_CRS), GPIO_FN(ET_MDC), | ||
2538 | GPIO_FN(ET_MDIO), GPIO_FN(ET_LINK), GPIO_FN(ET_PHY_INT), | ||
2539 | GPIO_FN(ET_WOL), GPIO_FN(ET_GTX_CLK), | ||
2540 | |||
2541 | /* DMA0 */ | ||
2542 | GPIO_FN(DREQ0), GPIO_FN(DACK0), | ||
2543 | |||
2544 | /* DMA1 */ | ||
2545 | GPIO_FN(DREQ1), GPIO_FN(DACK1), | ||
2546 | |||
2547 | /* SYSC */ | ||
2548 | GPIO_FN(RESETOUTS), | ||
2549 | |||
2550 | /* IRREM */ | ||
2551 | GPIO_FN(IROUT), | ||
2552 | |||
2553 | /* LCDC */ | ||
2554 | GPIO_FN(LCDC0_SELECT), | ||
2555 | GPIO_FN(LCDC1_SELECT), | ||
2556 | |||
2557 | /* SDENC */ | ||
2558 | GPIO_FN(SDENC_CPG), | ||
2559 | GPIO_FN(SDENC_DV_CLKI), | ||
2560 | |||
2561 | /* HDMI */ | ||
2562 | GPIO_FN(HDMI_HPD), | ||
2563 | GPIO_FN(HDMI_CEC), | ||
2564 | |||
2565 | /* SYSC */ | ||
2566 | GPIO_FN(RESETP_PULLUP), | ||
2567 | GPIO_FN(RESETP_PLAIN), | ||
2568 | |||
2569 | /* DEBUG */ | ||
2570 | GPIO_FN(EDEBGREQ_PULLDOWN), | ||
2571 | GPIO_FN(EDEBGREQ_PULLUP), | ||
2572 | |||
2573 | GPIO_FN(TRACEAUD_FROM_VIO), | ||
2574 | GPIO_FN(TRACEAUD_FROM_LCDC0), | ||
2575 | GPIO_FN(TRACEAUD_FROM_MEMC), | ||
2576 | }; | ||
2577 | 3265 | ||
2578 | static const struct pinmux_cfg_reg pinmux_config_regs[] = { | 3266 | static const struct pinmux_cfg_reg pinmux_config_regs[] = { |
2579 | PORTCR(0, 0xe6050000), /* PORT0CR */ | 3267 | PORTCR(0, 0xe6050000), /* PORT0CR */ |
@@ -2994,48 +3682,114 @@ static const struct pinmux_data_reg pinmux_data_regs[] = { | |||
2994 | }; | 3682 | }; |
2995 | 3683 | ||
2996 | static const struct pinmux_irq pinmux_irqs[] = { | 3684 | static const struct pinmux_irq pinmux_irqs[] = { |
2997 | PINMUX_IRQ(irq_pin(0), GPIO_PORT2, GPIO_PORT13), /* IRQ0A */ | 3685 | PINMUX_IRQ(irq_pin(0), 2, 13), /* IRQ0A */ |
2998 | PINMUX_IRQ(irq_pin(1), GPIO_PORT20), /* IRQ1A */ | 3686 | PINMUX_IRQ(irq_pin(1), 20), /* IRQ1A */ |
2999 | PINMUX_IRQ(irq_pin(2), GPIO_PORT11, GPIO_PORT12), /* IRQ2A */ | 3687 | PINMUX_IRQ(irq_pin(2), 11, 12), /* IRQ2A */ |
3000 | PINMUX_IRQ(irq_pin(3), GPIO_PORT10, GPIO_PORT14), /* IRQ3A */ | 3688 | PINMUX_IRQ(irq_pin(3), 10, 14), /* IRQ3A */ |
3001 | PINMUX_IRQ(irq_pin(4), GPIO_PORT15, GPIO_PORT172),/* IRQ4A */ | 3689 | PINMUX_IRQ(irq_pin(4), 15, 172), /* IRQ4A */ |
3002 | PINMUX_IRQ(irq_pin(5), GPIO_PORT0, GPIO_PORT1), /* IRQ5A */ | 3690 | PINMUX_IRQ(irq_pin(5), 0, 1), /* IRQ5A */ |
3003 | PINMUX_IRQ(irq_pin(6), GPIO_PORT121, GPIO_PORT173),/* IRQ6A */ | 3691 | PINMUX_IRQ(irq_pin(6), 121, 173), /* IRQ6A */ |
3004 | PINMUX_IRQ(irq_pin(7), GPIO_PORT120, GPIO_PORT209),/* IRQ7A */ | 3692 | PINMUX_IRQ(irq_pin(7), 120, 209), /* IRQ7A */ |
3005 | PINMUX_IRQ(irq_pin(8), GPIO_PORT119), /* IRQ8A */ | 3693 | PINMUX_IRQ(irq_pin(8), 119), /* IRQ8A */ |
3006 | PINMUX_IRQ(irq_pin(9), GPIO_PORT118, GPIO_PORT210),/* IRQ9A */ | 3694 | PINMUX_IRQ(irq_pin(9), 118, 210), /* IRQ9A */ |
3007 | PINMUX_IRQ(irq_pin(10), GPIO_PORT19), /* IRQ10A */ | 3695 | PINMUX_IRQ(irq_pin(10), 19), /* IRQ10A */ |
3008 | PINMUX_IRQ(irq_pin(11), GPIO_PORT104), /* IRQ11A */ | 3696 | PINMUX_IRQ(irq_pin(11), 104), /* IRQ11A */ |
3009 | PINMUX_IRQ(irq_pin(12), GPIO_PORT42, GPIO_PORT97), /* IRQ12A */ | 3697 | PINMUX_IRQ(irq_pin(12), 42, 97), /* IRQ12A */ |
3010 | PINMUX_IRQ(irq_pin(13), GPIO_PORT64, GPIO_PORT98), /* IRQ13A */ | 3698 | PINMUX_IRQ(irq_pin(13), 64, 98), /* IRQ13A */ |
3011 | PINMUX_IRQ(irq_pin(14), GPIO_PORT63, GPIO_PORT99), /* IRQ14A */ | 3699 | PINMUX_IRQ(irq_pin(14), 63, 99), /* IRQ14A */ |
3012 | PINMUX_IRQ(irq_pin(15), GPIO_PORT62, GPIO_PORT100),/* IRQ15A */ | 3700 | PINMUX_IRQ(irq_pin(15), 62, 100), /* IRQ15A */ |
3013 | PINMUX_IRQ(irq_pin(16), GPIO_PORT68, GPIO_PORT211),/* IRQ16A */ | 3701 | PINMUX_IRQ(irq_pin(16), 68, 211), /* IRQ16A */ |
3014 | PINMUX_IRQ(irq_pin(17), GPIO_PORT69), /* IRQ17A */ | 3702 | PINMUX_IRQ(irq_pin(17), 69), /* IRQ17A */ |
3015 | PINMUX_IRQ(irq_pin(18), GPIO_PORT70), /* IRQ18A */ | 3703 | PINMUX_IRQ(irq_pin(18), 70), /* IRQ18A */ |
3016 | PINMUX_IRQ(irq_pin(19), GPIO_PORT71), /* IRQ19A */ | 3704 | PINMUX_IRQ(irq_pin(19), 71), /* IRQ19A */ |
3017 | PINMUX_IRQ(irq_pin(20), GPIO_PORT67), /* IRQ20A */ | 3705 | PINMUX_IRQ(irq_pin(20), 67), /* IRQ20A */ |
3018 | PINMUX_IRQ(irq_pin(21), GPIO_PORT202), /* IRQ21A */ | 3706 | PINMUX_IRQ(irq_pin(21), 202), /* IRQ21A */ |
3019 | PINMUX_IRQ(irq_pin(22), GPIO_PORT95), /* IRQ22A */ | 3707 | PINMUX_IRQ(irq_pin(22), 95), /* IRQ22A */ |
3020 | PINMUX_IRQ(irq_pin(23), GPIO_PORT96), /* IRQ23A */ | 3708 | PINMUX_IRQ(irq_pin(23), 96), /* IRQ23A */ |
3021 | PINMUX_IRQ(irq_pin(24), GPIO_PORT180), /* IRQ24A */ | 3709 | PINMUX_IRQ(irq_pin(24), 180), /* IRQ24A */ |
3022 | PINMUX_IRQ(irq_pin(25), GPIO_PORT38), /* IRQ25A */ | 3710 | PINMUX_IRQ(irq_pin(25), 38), /* IRQ25A */ |
3023 | PINMUX_IRQ(irq_pin(26), GPIO_PORT58, GPIO_PORT81), /* IRQ26A */ | 3711 | PINMUX_IRQ(irq_pin(26), 58, 81), /* IRQ26A */ |
3024 | PINMUX_IRQ(irq_pin(27), GPIO_PORT57, GPIO_PORT168),/* IRQ27A */ | 3712 | PINMUX_IRQ(irq_pin(27), 57, 168), /* IRQ27A */ |
3025 | PINMUX_IRQ(irq_pin(28), GPIO_PORT56, GPIO_PORT169),/* IRQ28A */ | 3713 | PINMUX_IRQ(irq_pin(28), 56, 169), /* IRQ28A */ |
3026 | PINMUX_IRQ(irq_pin(29), GPIO_PORT50, GPIO_PORT170),/* IRQ29A */ | 3714 | PINMUX_IRQ(irq_pin(29), 50, 170), /* IRQ29A */ |
3027 | PINMUX_IRQ(irq_pin(30), GPIO_PORT49, GPIO_PORT171),/* IRQ30A */ | 3715 | PINMUX_IRQ(irq_pin(30), 49, 171), /* IRQ30A */ |
3028 | PINMUX_IRQ(irq_pin(31), GPIO_PORT41, GPIO_PORT167),/* IRQ31A */ | 3716 | PINMUX_IRQ(irq_pin(31), 41, 167), /* IRQ31A */ |
3717 | }; | ||
3718 | |||
3719 | #define PORTnCR_PULMD_OFF (0 << 6) | ||
3720 | #define PORTnCR_PULMD_DOWN (2 << 6) | ||
3721 | #define PORTnCR_PULMD_UP (3 << 6) | ||
3722 | #define PORTnCR_PULMD_MASK (3 << 6) | ||
3723 | |||
3724 | struct r8a7740_portcr_group { | ||
3725 | unsigned int end_pin; | ||
3726 | unsigned int offset; | ||
3727 | }; | ||
3728 | |||
3729 | static const struct r8a7740_portcr_group r8a7740_portcr_offsets[] = { | ||
3730 | { 83, 0x0000 }, { 114, 0x1000 }, { 209, 0x2000 }, { 211, 0x3000 }, | ||
3731 | }; | ||
3732 | |||
3733 | static void __iomem *r8a7740_pinmux_portcr(struct sh_pfc *pfc, unsigned int pin) | ||
3734 | { | ||
3735 | unsigned int i; | ||
3736 | |||
3737 | for (i = 0; i < ARRAY_SIZE(r8a7740_portcr_offsets); ++i) { | ||
3738 | const struct r8a7740_portcr_group *group = | ||
3739 | &r8a7740_portcr_offsets[i]; | ||
3740 | |||
3741 | if (i <= group->end_pin) | ||
3742 | return pfc->window->virt + group->offset + pin; | ||
3743 | } | ||
3744 | |||
3745 | return NULL; | ||
3746 | } | ||
3747 | |||
3748 | static unsigned int r8a7740_pinmux_get_bias(struct sh_pfc *pfc, unsigned int pin) | ||
3749 | { | ||
3750 | void __iomem *addr = r8a7740_pinmux_portcr(pfc, pin); | ||
3751 | u32 value = ioread8(addr) & PORTnCR_PULMD_MASK; | ||
3752 | |||
3753 | switch (value) { | ||
3754 | case PORTnCR_PULMD_UP: | ||
3755 | return PIN_CONFIG_BIAS_PULL_UP; | ||
3756 | case PORTnCR_PULMD_DOWN: | ||
3757 | return PIN_CONFIG_BIAS_PULL_DOWN; | ||
3758 | case PORTnCR_PULMD_OFF: | ||
3759 | default: | ||
3760 | return PIN_CONFIG_BIAS_DISABLE; | ||
3761 | } | ||
3762 | } | ||
3763 | |||
3764 | static void r8a7740_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin, | ||
3765 | unsigned int bias) | ||
3766 | { | ||
3767 | void __iomem *addr = r8a7740_pinmux_portcr(pfc, pin); | ||
3768 | u32 value = ioread8(addr) & ~PORTnCR_PULMD_MASK; | ||
3769 | |||
3770 | switch (bias) { | ||
3771 | case PIN_CONFIG_BIAS_PULL_UP: | ||
3772 | value |= PORTnCR_PULMD_UP; | ||
3773 | break; | ||
3774 | case PIN_CONFIG_BIAS_PULL_DOWN: | ||
3775 | value |= PORTnCR_PULMD_DOWN; | ||
3776 | break; | ||
3777 | } | ||
3778 | |||
3779 | iowrite8(value, addr); | ||
3780 | } | ||
3781 | |||
3782 | static const struct sh_pfc_soc_operations r8a7740_pinmux_ops = { | ||
3783 | .get_bias = r8a7740_pinmux_get_bias, | ||
3784 | .set_bias = r8a7740_pinmux_set_bias, | ||
3029 | }; | 3785 | }; |
3030 | 3786 | ||
3031 | const struct sh_pfc_soc_info r8a7740_pinmux_info = { | 3787 | const struct sh_pfc_soc_info r8a7740_pinmux_info = { |
3032 | .name = "r8a7740_pfc", | 3788 | .name = "r8a7740_pfc", |
3789 | .ops = &r8a7740_pinmux_ops, | ||
3790 | |||
3033 | .input = { PINMUX_INPUT_BEGIN, | 3791 | .input = { PINMUX_INPUT_BEGIN, |
3034 | PINMUX_INPUT_END }, | 3792 | PINMUX_INPUT_END }, |
3035 | .input_pu = { PINMUX_INPUT_PULLUP_BEGIN, | ||
3036 | PINMUX_INPUT_PULLUP_END }, | ||
3037 | .input_pd = { PINMUX_INPUT_PULLDOWN_BEGIN, | ||
3038 | PINMUX_INPUT_PULLDOWN_END }, | ||
3039 | .output = { PINMUX_OUTPUT_BEGIN, | 3793 | .output = { PINMUX_OUTPUT_BEGIN, |
3040 | PINMUX_OUTPUT_END }, | 3794 | PINMUX_OUTPUT_END }, |
3041 | .function = { PINMUX_FUNCTION_BEGIN, | 3795 | .function = { PINMUX_FUNCTION_BEGIN, |
@@ -3048,9 +3802,6 @@ const struct sh_pfc_soc_info r8a7740_pinmux_info = { | |||
3048 | .functions = pinmux_functions, | 3802 | .functions = pinmux_functions, |
3049 | .nr_functions = ARRAY_SIZE(pinmux_functions), | 3803 | .nr_functions = ARRAY_SIZE(pinmux_functions), |
3050 | 3804 | ||
3051 | .func_gpios = pinmux_func_gpios, | ||
3052 | .nr_func_gpios = ARRAY_SIZE(pinmux_func_gpios), | ||
3053 | |||
3054 | .cfg_regs = pinmux_config_regs, | 3805 | .cfg_regs = pinmux_config_regs, |
3055 | .data_regs = pinmux_data_regs, | 3806 | .data_regs = pinmux_data_regs, |
3056 | 3807 | ||
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7778.c b/drivers/pinctrl/sh-pfc/pfc-r8a7778.c new file mode 100644 index 000000000000..1dcbabcd7b3c --- /dev/null +++ b/drivers/pinctrl/sh-pfc/pfc-r8a7778.c | |||
@@ -0,0 +1,2783 @@ | |||
1 | /* | ||
2 | * r8a7778 processor support - PFC hardware block | ||
3 | * | ||
4 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
5 | * Copyright (C) 2013 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | ||
6 | * Copyright (C) 2013 Cogent Embedded, Inc. | ||
7 | * | ||
8 | * based on | ||
9 | * Copyright (C) 2011 Renesas Solutions Corp. | ||
10 | * Copyright (C) 2011 Magnus Damm | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or modify | ||
13 | * it under the terms of the GNU General Public License as published by | ||
14 | * the Free Software Foundation; version 2 of the License. | ||
15 | * | ||
16 | * This program is distributed in the hope that it will be useful, | ||
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
19 | * GNU General Public License for more details. | ||
20 | */ | ||
21 | |||
22 | #include <linux/platform_data/gpio-rcar.h> | ||
23 | #include <linux/kernel.h> | ||
24 | #include "sh_pfc.h" | ||
25 | |||
26 | #define PORT_GP_1(bank, pin, fn, sfx) fn(bank, pin, GP_##bank##_##pin, sfx) | ||
27 | |||
28 | #define PORT_GP_32(bank, fn, sfx) \ | ||
29 | PORT_GP_1(bank, 0, fn, sfx), PORT_GP_1(bank, 1, fn, sfx), \ | ||
30 | PORT_GP_1(bank, 2, fn, sfx), PORT_GP_1(bank, 3, fn, sfx), \ | ||
31 | PORT_GP_1(bank, 4, fn, sfx), PORT_GP_1(bank, 5, fn, sfx), \ | ||
32 | PORT_GP_1(bank, 6, fn, sfx), PORT_GP_1(bank, 7, fn, sfx), \ | ||
33 | PORT_GP_1(bank, 8, fn, sfx), PORT_GP_1(bank, 9, fn, sfx), \ | ||
34 | PORT_GP_1(bank, 10, fn, sfx), PORT_GP_1(bank, 11, fn, sfx), \ | ||
35 | PORT_GP_1(bank, 12, fn, sfx), PORT_GP_1(bank, 13, fn, sfx), \ | ||
36 | PORT_GP_1(bank, 14, fn, sfx), PORT_GP_1(bank, 15, fn, sfx), \ | ||
37 | PORT_GP_1(bank, 16, fn, sfx), PORT_GP_1(bank, 17, fn, sfx), \ | ||
38 | PORT_GP_1(bank, 18, fn, sfx), PORT_GP_1(bank, 19, fn, sfx), \ | ||
39 | PORT_GP_1(bank, 20, fn, sfx), PORT_GP_1(bank, 21, fn, sfx), \ | ||
40 | PORT_GP_1(bank, 22, fn, sfx), PORT_GP_1(bank, 23, fn, sfx), \ | ||
41 | PORT_GP_1(bank, 24, fn, sfx), PORT_GP_1(bank, 25, fn, sfx), \ | ||
42 | PORT_GP_1(bank, 26, fn, sfx), PORT_GP_1(bank, 27, fn, sfx), \ | ||
43 | PORT_GP_1(bank, 28, fn, sfx), PORT_GP_1(bank, 29, fn, sfx), \ | ||
44 | PORT_GP_1(bank, 30, fn, sfx), PORT_GP_1(bank, 31, fn, sfx) | ||
45 | |||
46 | #define PORT_GP_27(bank, fn, sfx) \ | ||
47 | PORT_GP_1(bank, 0, fn, sfx), PORT_GP_1(bank, 1, fn, sfx), \ | ||
48 | PORT_GP_1(bank, 2, fn, sfx), PORT_GP_1(bank, 3, fn, sfx), \ | ||
49 | PORT_GP_1(bank, 4, fn, sfx), PORT_GP_1(bank, 5, fn, sfx), \ | ||
50 | PORT_GP_1(bank, 6, fn, sfx), PORT_GP_1(bank, 7, fn, sfx), \ | ||
51 | PORT_GP_1(bank, 8, fn, sfx), PORT_GP_1(bank, 9, fn, sfx), \ | ||
52 | PORT_GP_1(bank, 10, fn, sfx), PORT_GP_1(bank, 11, fn, sfx), \ | ||
53 | PORT_GP_1(bank, 12, fn, sfx), PORT_GP_1(bank, 13, fn, sfx), \ | ||
54 | PORT_GP_1(bank, 14, fn, sfx), PORT_GP_1(bank, 15, fn, sfx), \ | ||
55 | PORT_GP_1(bank, 16, fn, sfx), PORT_GP_1(bank, 17, fn, sfx), \ | ||
56 | PORT_GP_1(bank, 18, fn, sfx), PORT_GP_1(bank, 19, fn, sfx), \ | ||
57 | PORT_GP_1(bank, 20, fn, sfx), PORT_GP_1(bank, 21, fn, sfx), \ | ||
58 | PORT_GP_1(bank, 22, fn, sfx), PORT_GP_1(bank, 23, fn, sfx), \ | ||
59 | PORT_GP_1(bank, 24, fn, sfx), PORT_GP_1(bank, 25, fn, sfx), \ | ||
60 | PORT_GP_1(bank, 26, fn, sfx) | ||
61 | |||
62 | #define CPU_ALL_PORT(fn, sfx) \ | ||
63 | PORT_GP_32(0, fn, sfx), \ | ||
64 | PORT_GP_32(1, fn, sfx), \ | ||
65 | PORT_GP_32(2, fn, sfx), \ | ||
66 | PORT_GP_32(3, fn, sfx), \ | ||
67 | PORT_GP_27(4, fn, sfx) | ||
68 | |||
69 | #define _GP_PORT_ALL(bank, pin, name, sfx) name##_##sfx | ||
70 | |||
71 | #define _GP_GPIO(bank, pin, _name, sfx) \ | ||
72 | [RCAR_GP_PIN(bank, pin)] = { \ | ||
73 | .name = __stringify(_name), \ | ||
74 | .enum_id = _name##_DATA, \ | ||
75 | } | ||
76 | |||
77 | #define _GP_DATA(bank, pin, name, sfx) \ | ||
78 | PINMUX_DATA(name##_DATA, name##_FN) | ||
79 | |||
80 | #define GP_ALL(str) CPU_ALL_PORT(_GP_PORT_ALL, str) | ||
81 | #define PINMUX_GPIO_GP_ALL() CPU_ALL_PORT(_GP_GPIO, unused) | ||
82 | #define PINMUX_DATA_GP_ALL() CPU_ALL_PORT(_GP_DATA, unused) | ||
83 | |||
84 | #define PINMUX_IPSR_NOGP(ispr, fn) PINMUX_DATA(fn##_MARK, FN_##fn) | ||
85 | #define PINMUX_IPSR_DATA(ipsr, fn) PINMUX_DATA(fn##_MARK, FN_##fn, FN_##ipsr) | ||
86 | #define PINMUX_IPSR_MSEL(ipsr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##fn, FN_##ipsr, FN_##ms) | ||
87 | #define PINMUX_IPSR_NOGM(ispr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##fn, FN_##ms) | ||
88 | |||
89 | enum { | ||
90 | PINMUX_RESERVED = 0, | ||
91 | |||
92 | PINMUX_DATA_BEGIN, | ||
93 | GP_ALL(DATA), /* GP_0_0_DATA -> GP_4_26_DATA */ | ||
94 | PINMUX_DATA_END, | ||
95 | |||
96 | PINMUX_FUNCTION_BEGIN, | ||
97 | GP_ALL(FN), /* GP_0_0_FN -> GP_4_26_FN */ | ||
98 | |||
99 | /* GPSR0 */ | ||
100 | FN_IP0_1_0, FN_PENC0, FN_PENC1, FN_IP0_4_2, | ||
101 | FN_IP0_7_5, FN_IP0_11_8, FN_IP0_14_12, FN_A1, | ||
102 | FN_A2, FN_A3, FN_IP0_15, FN_IP0_16, | ||
103 | FN_IP0_17, FN_IP0_18, FN_IP0_19, FN_IP0_20, | ||
104 | FN_IP0_21, FN_IP0_22, FN_IP0_23, FN_IP0_24, | ||
105 | FN_IP0_25, FN_IP0_26, FN_IP0_27, FN_IP0_28, | ||
106 | FN_IP0_29, FN_IP0_30, FN_IP1_0, FN_IP1_1, | ||
107 | FN_IP1_4_2, FN_IP1_7_5, FN_IP1_10_8, FN_IP1_14_11, | ||
108 | |||
109 | /* GPSR1 */ | ||
110 | FN_IP1_23_21, FN_WE0, FN_IP1_24, FN_IP1_27_25, | ||
111 | FN_IP1_29_28, FN_IP2_2_0, FN_IP2_5_3, FN_IP2_8_6, | ||
112 | FN_IP2_11_9, FN_IP2_13_12, FN_IP2_16_14, FN_IP2_17, | ||
113 | FN_IP2_30, FN_IP2_31, FN_IP3_1_0, FN_IP3_4_2, | ||
114 | FN_IP3_7_5, FN_IP3_9_8, FN_IP3_12_10, FN_IP3_15_13, | ||
115 | FN_IP3_18_16, FN_IP3_20_19, FN_IP3_23_21, FN_IP3_26_24, | ||
116 | FN_IP3_27, FN_IP3_28, FN_IP3_29, FN_IP3_30, | ||
117 | FN_IP3_31, FN_IP4_0, FN_IP4_3_1, FN_IP4_6_4, | ||
118 | |||
119 | /* GPSR2 */ | ||
120 | FN_IP4_7, FN_IP4_8, FN_IP4_10_9, FN_IP4_12_11, | ||
121 | FN_IP4_14_13, FN_IP4_16_15, FN_IP4_20_17, FN_IP4_24_21, | ||
122 | FN_IP4_26_25, FN_IP4_28_27, FN_IP4_30_29, FN_IP5_1_0, | ||
123 | FN_IP5_3_2, FN_IP5_5_4, FN_IP5_6, FN_IP5_7, | ||
124 | FN_IP5_9_8, FN_IP5_11_10, FN_IP5_12, FN_IP5_14_13, | ||
125 | FN_IP5_17_15, FN_IP5_20_18, FN_AUDIO_CLKA, FN_AUDIO_CLKB, | ||
126 | FN_IP5_22_21, FN_IP5_25_23, FN_IP5_28_26, FN_IP5_30_29, | ||
127 | FN_IP6_1_0, FN_IP6_4_2, FN_IP6_6_5, FN_IP6_7, | ||
128 | |||
129 | /* GPSR3 */ | ||
130 | FN_IP6_8, FN_IP6_9, FN_SSI_SCK34, FN_IP6_10, | ||
131 | FN_IP6_12_11, FN_IP6_13, FN_IP6_15_14, FN_IP6_16, | ||
132 | FN_IP6_18_17, FN_IP6_20_19, FN_IP6_21, FN_IP6_23_22, | ||
133 | FN_IP6_25_24, FN_IP6_27_26, FN_IP6_29_28, FN_IP6_31_30, | ||
134 | FN_IP7_1_0, FN_IP7_3_2, FN_IP7_5_4, FN_IP7_8_6, | ||
135 | FN_IP7_11_9, FN_IP7_14_12, FN_IP7_17_15, FN_IP7_20_18, | ||
136 | FN_IP7_21, FN_IP7_24_22, FN_IP7_28_25, FN_IP7_31_29, | ||
137 | FN_IP8_2_0, FN_IP8_5_3, FN_IP8_8_6, FN_IP8_10_9, | ||
138 | |||
139 | /* GPSR4 */ | ||
140 | FN_IP8_13_11, FN_IP8_15_14, FN_IP8_18_16, FN_IP8_21_19, | ||
141 | FN_IP8_23_22, FN_IP8_26_24, FN_IP8_29_27, FN_IP9_2_0, | ||
142 | FN_IP9_5_3, FN_IP9_8_6, FN_IP9_11_9, FN_IP9_14_12, | ||
143 | FN_IP9_17_15, FN_IP9_20_18, FN_IP9_23_21, FN_IP9_26_24, | ||
144 | FN_IP9_29_27, FN_IP10_2_0, FN_IP10_5_3, FN_IP10_8_6, | ||
145 | FN_IP10_12_9, FN_IP10_15_13, FN_IP10_18_16, FN_IP10_21_19, | ||
146 | FN_IP10_24_22, FN_AVS1, FN_AVS2, | ||
147 | |||
148 | /* IPSR0 */ | ||
149 | FN_PRESETOUT, FN_PWM1, FN_AUDATA0, FN_ARM_TRACEDATA_0, | ||
150 | FN_GPSCLK_C, FN_USB_OVC0, FN_TX2_E, FN_SDA2_B, | ||
151 | FN_AUDATA1, FN_ARM_TRACEDATA_1, FN_GPSIN_C, | ||
152 | FN_USB_OVC1, FN_RX2_E, FN_SCL2_B, FN_SD1_DAT2_A, | ||
153 | FN_MMC_D2, FN_BS, FN_ATADIR0_A, FN_SDSELF_A, | ||
154 | FN_PWM4_B, FN_SD1_DAT3_A, FN_MMC_D3, FN_A0, | ||
155 | FN_ATAG0_A, FN_REMOCON_B, FN_A4, FN_A5, | ||
156 | FN_A6, FN_A7, FN_A8, FN_A9, | ||
157 | FN_A10, FN_A11, FN_A12, FN_A13, | ||
158 | FN_A14, FN_A15, FN_A16, FN_A17, | ||
159 | FN_A18, FN_A19, | ||
160 | |||
161 | /* IPSR1 */ | ||
162 | FN_A20, FN_HSPI_CS1_B, FN_A21, FN_HSPI_CLK1_B, | ||
163 | FN_A22, FN_HRTS0_B, FN_RX2_B, FN_DREQ2_A, | ||
164 | FN_A23, FN_HTX0_B, FN_TX2_B, FN_DACK2_A, | ||
165 | FN_TS_SDEN0_A, FN_SD1_CD_A, FN_MMC_D6, FN_A24, | ||
166 | FN_DREQ1_A, FN_HRX0_B, FN_TS_SPSYNC0_A, | ||
167 | FN_SD1_WP_A, FN_MMC_D7, FN_A25, FN_DACK1_A, | ||
168 | FN_HCTS0_B, FN_RX3_C, FN_TS_SDAT0_A, FN_CLKOUT, | ||
169 | FN_HSPI_TX1_B, FN_PWM0_B, FN_CS0, FN_HSPI_RX1_B, | ||
170 | FN_SSI_SCK1_B, FN_ATAG0_B, FN_CS1_A26, FN_SDA2_A, | ||
171 | FN_SCK2_B, FN_MMC_D5, FN_ATADIR0_B, FN_RD_WR, | ||
172 | FN_WE1, FN_ATAWR0_B, FN_SSI_WS1_B, FN_EX_CS0, | ||
173 | FN_SCL2_A, FN_TX3_C, FN_TS_SCK0_A, FN_EX_CS1, | ||
174 | FN_MMC_D4, | ||
175 | |||
176 | /* IPSR2 */ | ||
177 | FN_SD1_CLK_A, FN_MMC_CLK, FN_ATACS00, FN_EX_CS2, | ||
178 | FN_SD1_CMD_A, FN_MMC_CMD, FN_ATACS10, FN_EX_CS3, | ||
179 | FN_SD1_DAT0_A, FN_MMC_D0, FN_ATARD0, FN_EX_CS4, | ||
180 | FN_EX_WAIT1_A, FN_SD1_DAT1_A, FN_MMC_D1, FN_ATAWR0_A, | ||
181 | FN_EX_CS5, FN_EX_WAIT2_A, FN_DREQ0_A, FN_RX3_A, | ||
182 | FN_DACK0, FN_TX3_A, FN_DRACK0, FN_EX_WAIT0, | ||
183 | FN_PWM0_C, FN_D0, FN_D1, FN_D2, | ||
184 | FN_D3, FN_D4, FN_D5, FN_D6, | ||
185 | FN_D7, FN_D8, FN_D9, FN_D10, | ||
186 | FN_D11, FN_RD_WR_B, FN_IRQ0, FN_MLB_CLK, | ||
187 | FN_IRQ1_A, | ||
188 | |||
189 | /* IPSR3 */ | ||
190 | FN_MLB_SIG, FN_RX5_B, FN_SDA3_A, FN_IRQ2_A, | ||
191 | FN_MLB_DAT, FN_TX5_B, FN_SCL3_A, FN_IRQ3_A, | ||
192 | FN_SDSELF_B, FN_SD1_CMD_B, FN_SCIF_CLK, FN_AUDIO_CLKOUT_B, | ||
193 | FN_CAN_CLK_B, FN_SDA3_B, FN_SD1_CLK_B, FN_HTX0_A, | ||
194 | FN_TX0_A, FN_SD1_DAT0_B, FN_HRX0_A, FN_RX0_A, | ||
195 | FN_SD1_DAT1_B, FN_HSCK0, FN_SCK0, FN_SCL3_B, | ||
196 | FN_SD1_DAT2_B, FN_HCTS0_A, FN_CTS0, FN_SD1_DAT3_B, | ||
197 | FN_HRTS0_A, FN_RTS0, FN_SSI_SCK4, FN_DU0_DR0, | ||
198 | FN_LCDOUT0, FN_AUDATA2, FN_ARM_TRACEDATA_2, | ||
199 | FN_SDA3_C, FN_ADICHS1, FN_TS_SDEN0_B, FN_SSI_WS4, | ||
200 | FN_DU0_DR1, FN_LCDOUT1, FN_AUDATA3, FN_ARM_TRACEDATA_3, | ||
201 | FN_SCL3_C, FN_ADICHS2, FN_TS_SPSYNC0_B, | ||
202 | FN_DU0_DR2, FN_LCDOUT2, FN_DU0_DR3, FN_LCDOUT3, | ||
203 | FN_DU0_DR4, FN_LCDOUT4, FN_DU0_DR5, FN_LCDOUT5, | ||
204 | FN_DU0_DR6, FN_LCDOUT6, | ||
205 | |||
206 | /* IPSR4 */ | ||
207 | FN_DU0_DR7, FN_LCDOUT7, FN_DU0_DG0, FN_LCDOUT8, | ||
208 | FN_AUDATA4, FN_ARM_TRACEDATA_4, FN_TX1_D, | ||
209 | FN_CAN0_TX_A, FN_ADICHS0, FN_DU0_DG1, FN_LCDOUT9, | ||
210 | FN_AUDATA5, FN_ARM_TRACEDATA_5, FN_RX1_D, | ||
211 | FN_CAN0_RX_A, FN_ADIDATA, FN_DU0_DG2, FN_LCDOUT10, | ||
212 | FN_DU0_DG3, FN_LCDOUT11, FN_DU0_DG4, FN_LCDOUT12, | ||
213 | FN_RX0_B, FN_DU0_DG5, FN_LCDOUT13, FN_TX0_B, | ||
214 | FN_DU0_DG6, FN_LCDOUT14, FN_RX4_A, FN_DU0_DG7, | ||
215 | FN_LCDOUT15, FN_TX4_A, FN_SSI_SCK2_B, FN_VI0_R0_B, | ||
216 | FN_DU0_DB0, FN_LCDOUT16, FN_AUDATA6, FN_ARM_TRACEDATA_6, | ||
217 | FN_GPSCLK_A, FN_PWM0_A, FN_ADICLK, FN_TS_SDAT0_B, | ||
218 | FN_AUDIO_CLKC, FN_VI0_R1_B, FN_DU0_DB1, FN_LCDOUT17, | ||
219 | FN_AUDATA7, FN_ARM_TRACEDATA_7, FN_GPSIN_A, | ||
220 | FN_ADICS_SAMP, FN_TS_SCK0_B, FN_VI0_R2_B, FN_DU0_DB2, | ||
221 | FN_LCDOUT18, FN_VI0_R3_B, FN_DU0_DB3, FN_LCDOUT19, | ||
222 | FN_VI0_R4_B, FN_DU0_DB4, FN_LCDOUT20, | ||
223 | |||
224 | /* IPSR5 */ | ||
225 | FN_VI0_R5_B, FN_DU0_DB5, FN_LCDOUT21, FN_VI1_DATA10_B, | ||
226 | FN_DU0_DB6, FN_LCDOUT22, FN_VI1_DATA11_B, | ||
227 | FN_DU0_DB7, FN_LCDOUT23, FN_DU0_DOTCLKIN, | ||
228 | FN_QSTVA_QVS, FN_DU0_DOTCLKO_UT0, FN_QCLK, | ||
229 | FN_DU0_DOTCLKO_UT1, FN_QSTVB_QVE, FN_AUDIO_CLKOUT_A, | ||
230 | FN_REMOCON_C, FN_SSI_WS2_B, FN_DU0_EXHSYNC_DU0_HSYNC, | ||
231 | FN_QSTH_QHS, FN_DU0_EXVSYNC_DU0_VSYNC, FN_QSTB_QHE, | ||
232 | FN_DU0_EXODDF_DU0_ODDF_DISP_CDE, | ||
233 | FN_QCPV_QDE, FN_FMCLK_D, FN_SSI_SCK1_A, FN_DU0_DISP, | ||
234 | FN_QPOLA, FN_AUDCK, FN_ARM_TRACECLK, | ||
235 | FN_BPFCLK_D, FN_SSI_WS1_A, FN_DU0_CDE, FN_QPOLB, | ||
236 | FN_AUDSYNC, FN_ARM_TRACECTL, FN_FMIN_D, | ||
237 | FN_SD1_CD_B, FN_SSI_SCK78, FN_HSPI_RX0_B, FN_TX1_B, | ||
238 | FN_SD1_WP_B, FN_SSI_WS78, FN_HSPI_CLK0_B, FN_RX1_B, | ||
239 | FN_CAN_CLK_D, FN_SSI_SDATA8, FN_SSI_SCK2_A, FN_HSPI_CS0_B, | ||
240 | FN_TX2_A, FN_CAN0_TX_B, FN_SSI_SDATA7, FN_HSPI_TX0_B, | ||
241 | FN_RX2_A, FN_CAN0_RX_B, | ||
242 | |||
243 | /* IPSR6 */ | ||
244 | FN_SSI_SCK6, FN_HSPI_RX2_A, FN_FMCLK_B, FN_CAN1_TX_B, | ||
245 | FN_SSI_WS6, FN_HSPI_CLK2_A, FN_BPFCLK_B, FN_CAN1_RX_B, | ||
246 | FN_SSI_SDATA6, FN_HSPI_TX2_A, FN_FMIN_B, FN_SSI_SCK5, | ||
247 | FN_RX4_C, FN_SSI_WS5, FN_TX4_C, FN_SSI_SDATA5, | ||
248 | FN_RX0_D, FN_SSI_WS34, FN_ARM_TRACEDATA_8, | ||
249 | FN_SSI_SDATA4, FN_SSI_WS2_A, FN_ARM_TRACEDATA_9, | ||
250 | FN_SSI_SDATA3, FN_ARM_TRACEDATA_10, | ||
251 | FN_SSI_SCK012, FN_ARM_TRACEDATA_11, | ||
252 | FN_TX0_D, FN_SSI_WS012, FN_ARM_TRACEDATA_12, | ||
253 | FN_SSI_SDATA2, FN_HSPI_CS2_A, FN_ARM_TRACEDATA_13, | ||
254 | FN_SDA1_A, FN_SSI_SDATA1, FN_ARM_TRACEDATA_14, | ||
255 | FN_SCL1_A, FN_SCK2_A, FN_SSI_SDATA0, | ||
256 | FN_ARM_TRACEDATA_15, | ||
257 | FN_SD0_CLK, FN_SUB_TDO, FN_SD0_CMD, FN_SUB_TRST, | ||
258 | FN_SD0_DAT0, FN_SUB_TMS, FN_SD0_DAT1, FN_SUB_TCK, | ||
259 | FN_SD0_DAT2, FN_SUB_TDI, | ||
260 | |||
261 | /* IPSR7 */ | ||
262 | FN_SD0_DAT3, FN_IRQ1_B, FN_SD0_CD, FN_TX5_A, | ||
263 | FN_SD0_WP, FN_RX5_A, FN_VI1_CLKENB, FN_HSPI_CLK0_A, | ||
264 | FN_HTX1_A, FN_RTS1_C, FN_VI1_FIELD, FN_HSPI_CS0_A, | ||
265 | FN_HRX1_A, FN_SCK1_C, FN_VI1_HSYNC, FN_HSPI_RX0_A, | ||
266 | FN_HRTS1_A, FN_FMCLK_A, FN_RX1_C, FN_VI1_VSYNC, | ||
267 | FN_HSPI_TX0, FN_HCTS1_A, FN_BPFCLK_A, FN_TX1_C, | ||
268 | FN_TCLK0, FN_HSCK1_A, FN_FMIN_A, FN_IRQ2_C, | ||
269 | FN_CTS1_C, FN_SPEEDIN, FN_VI0_CLK, FN_CAN_CLK_A, | ||
270 | FN_VI0_CLKENB, FN_SD2_DAT2_B, FN_VI1_DATA0, FN_DU1_DG6, | ||
271 | FN_HSPI_RX1_A, FN_RX4_B, FN_VI0_FIELD, FN_SD2_DAT3_B, | ||
272 | FN_VI0_R3_C, FN_VI1_DATA1, FN_DU1_DG7, FN_HSPI_CLK1_A, | ||
273 | FN_TX4_B, FN_VI0_HSYNC, FN_SD2_CD_B, FN_VI1_DATA2, | ||
274 | FN_DU1_DR2, FN_HSPI_CS1_A, FN_RX3_B, | ||
275 | |||
276 | /* IPSR8 */ | ||
277 | FN_VI0_VSYNC, FN_SD2_WP_B, FN_VI1_DATA3, FN_DU1_DR3, | ||
278 | FN_HSPI_TX1_A, FN_TX3_B, FN_VI0_DATA0_VI0_B0, | ||
279 | FN_DU1_DG2, FN_IRQ2_B, FN_RX3_D, FN_VI0_DATA1_VI0_B1, | ||
280 | FN_DU1_DG3, FN_IRQ3_B, FN_TX3_D, FN_VI0_DATA2_VI0_B2, | ||
281 | FN_DU1_DG4, FN_RX0_C, FN_VI0_DATA3_VI0_B3, | ||
282 | FN_DU1_DG5, FN_TX1_A, FN_TX0_C, FN_VI0_DATA4_VI0_B4, | ||
283 | FN_DU1_DB2, FN_RX1_A, FN_VI0_DATA5_VI0_B5, | ||
284 | FN_DU1_DB3, FN_SCK1_A, FN_PWM4, FN_HSCK1_B, | ||
285 | FN_VI0_DATA6_VI0_G0, FN_DU1_DB4, FN_CTS1_A, | ||
286 | FN_PWM5, FN_VI0_DATA7_VI0_G1, FN_DU1_DB5, | ||
287 | FN_RTS1_A, FN_VI0_G2, FN_SD2_CLK_B, FN_VI1_DATA4, | ||
288 | FN_DU1_DR4, FN_HTX1_B, FN_VI0_G3, FN_SD2_CMD_B, | ||
289 | FN_VI1_DATA5, FN_DU1_DR5, FN_HRX1_B, | ||
290 | |||
291 | /* IPSR9 */ | ||
292 | FN_VI0_G4, FN_SD2_DAT0_B, FN_VI1_DATA6, FN_DU1_DR6, | ||
293 | FN_HRTS1_B, FN_VI0_G5, FN_SD2_DAT1_B, FN_VI1_DATA7, | ||
294 | FN_DU1_DR7, FN_HCTS1_B, FN_VI0_R0_A, FN_VI1_CLK, | ||
295 | FN_ETH_REF_CLK, FN_DU1_DOTCLKIN, FN_VI0_R1_A, | ||
296 | FN_VI1_DATA8, FN_DU1_DB6, FN_ETH_TXD0, FN_PWM2, | ||
297 | FN_TCLK1, FN_VI0_R2_A, FN_VI1_DATA9, FN_DU1_DB7, | ||
298 | FN_ETH_TXD1, FN_PWM3, FN_VI0_R3_A, FN_ETH_CRS_DV, | ||
299 | FN_IECLK, FN_SCK2_C, FN_VI0_R4_A, FN_ETH_TX_EN, | ||
300 | FN_IETX, FN_TX2_C, FN_VI0_R5_A, FN_ETH_RX_ER, | ||
301 | FN_FMCLK_C, FN_IERX, FN_RX2_C, FN_VI1_DATA10_A, | ||
302 | FN_DU1_DOTCLKOUT, FN_ETH_RXD0, FN_BPFCLK_C, | ||
303 | FN_TX2_D, FN_SDA2_C, FN_VI1_DATA11_A, | ||
304 | FN_DU1_EXHSYNC_DU1_HSYNC, FN_ETH_RXD1, FN_FMIN_C, | ||
305 | FN_RX2_D, FN_SCL2_C, | ||
306 | |||
307 | /* IPSR10 */ | ||
308 | FN_SD2_CLK_A, FN_DU1_EXVSYNC_DU1_VSYNC, FN_ATARD1, | ||
309 | FN_ETH_MDC, FN_SDA1_B, FN_SD2_CMD_A, | ||
310 | FN_DU1_EXODDF_DU1_ODDF_DISP_CDE, FN_ATAWR1, | ||
311 | FN_ETH_MDIO, FN_SCL1_B, FN_SD2_DAT0_A, FN_DU1_DISP, | ||
312 | FN_ATACS01, FN_DREQ1_B, FN_ETH_LINK, FN_CAN1_RX_A, | ||
313 | FN_SD2_DAT1_A, FN_DU1_CDE, FN_ATACS11, FN_DACK1_B, | ||
314 | FN_ETH_MAGIC, FN_CAN1_TX_A, FN_PWM6, FN_SD2_DAT2_A, | ||
315 | FN_VI1_DATA12, FN_DREQ2_B, FN_ATADIR1, FN_HSPI_CLK2_B, | ||
316 | FN_GPSCLK_B, FN_SD2_DAT3_A, FN_VI1_DATA13, FN_DACK2_B, | ||
317 | FN_ATAG1, FN_HSPI_CS2_B, FN_GPSIN_B, FN_SD2_CD_A, | ||
318 | FN_VI1_DATA14, FN_EX_WAIT1_B, FN_DREQ0_B, FN_HSPI_RX2_B, | ||
319 | FN_REMOCON_A, FN_SD2_WP_A, FN_VI1_DATA15, FN_EX_WAIT2_B, | ||
320 | FN_DACK0_B, FN_HSPI_TX2_B, FN_CAN_CLK_C, | ||
321 | |||
322 | /* SEL */ | ||
323 | FN_SEL_SCIF5_A, FN_SEL_SCIF5_B, | ||
324 | FN_SEL_SCIF4_A, FN_SEL_SCIF4_B, FN_SEL_SCIF4_C, | ||
325 | FN_SEL_SCIF3_A, FN_SEL_SCIF3_B, FN_SEL_SCIF3_C, FN_SEL_SCIF3_D, | ||
326 | FN_SEL_SCIF2_A, FN_SEL_SCIF2_B, FN_SEL_SCIF2_C, FN_SEL_SCIF2_D, FN_SEL_SCIF2_E, | ||
327 | FN_SEL_SCIF1_A, FN_SEL_SCIF1_B, FN_SEL_SCIF1_C, FN_SEL_SCIF1_D, | ||
328 | FN_SEL_SCIF0_A, FN_SEL_SCIF0_B, FN_SEL_SCIF0_C, FN_SEL_SCIF0_D, | ||
329 | FN_SEL_SSI2_A, FN_SEL_SSI2_B, | ||
330 | FN_SEL_SSI1_A, FN_SEL_SSI1_B, | ||
331 | FN_SEL_VI1_A, FN_SEL_VI1_B, | ||
332 | FN_SEL_VI0_A, FN_SEL_VI0_B, FN_SEL_VI0_C, FN_SEL_VI0_D, | ||
333 | FN_SEL_SD2_A, FN_SEL_SD2_B, | ||
334 | FN_SEL_SD1_A, FN_SEL_SD1_B, | ||
335 | FN_SEL_IRQ3_A, FN_SEL_IRQ3_B, | ||
336 | FN_SEL_IRQ2_A, FN_SEL_IRQ2_B, FN_SEL_IRQ2_C, | ||
337 | FN_SEL_IRQ1_A, FN_SEL_IRQ1_B, | ||
338 | FN_SEL_DREQ2_A, FN_SEL_DREQ2_B, | ||
339 | FN_SEL_DREQ1_A, FN_SEL_DREQ1_B, | ||
340 | FN_SEL_DREQ0_A, FN_SEL_DREQ0_B, | ||
341 | FN_SEL_WAIT2_A, FN_SEL_WAIT2_B, | ||
342 | FN_SEL_WAIT1_A, FN_SEL_WAIT1_B, | ||
343 | FN_SEL_CAN1_A, FN_SEL_CAN1_B, | ||
344 | FN_SEL_CAN0_A, FN_SEL_CAN0_B, | ||
345 | FN_SEL_CANCLK_A, FN_SEL_CANCLK_B, | ||
346 | FN_SEL_CANCLK_C, FN_SEL_CANCLK_D, | ||
347 | FN_SEL_HSCIF1_A, FN_SEL_HSCIF1_B, | ||
348 | FN_SEL_HSCIF0_A, FN_SEL_HSCIF0_B, | ||
349 | FN_SEL_REMOCON_A, FN_SEL_REMOCON_B, FN_SEL_REMOCON_C, | ||
350 | FN_SEL_FM_A, FN_SEL_FM_B, FN_SEL_FM_C, FN_SEL_FM_D, | ||
351 | FN_SEL_GPS_A, FN_SEL_GPS_B, FN_SEL_GPS_C, | ||
352 | FN_SEL_TSIF0_A, FN_SEL_TSIF0_B, | ||
353 | FN_SEL_HSPI2_A, FN_SEL_HSPI2_B, | ||
354 | FN_SEL_HSPI1_A, FN_SEL_HSPI1_B, | ||
355 | FN_SEL_HSPI0_A, FN_SEL_HSPI0_B, | ||
356 | FN_SEL_I2C3_A, FN_SEL_I2C3_B, FN_SEL_I2C3_C, | ||
357 | FN_SEL_I2C2_A, FN_SEL_I2C2_B, FN_SEL_I2C2_C, | ||
358 | FN_SEL_I2C1_A, FN_SEL_I2C1_B, | ||
359 | PINMUX_FUNCTION_END, | ||
360 | |||
361 | PINMUX_MARK_BEGIN, | ||
362 | |||
363 | /* GPSR0 */ | ||
364 | PENC0_MARK, PENC1_MARK, A1_MARK, A2_MARK, A3_MARK, | ||
365 | |||
366 | /* GPSR1 */ | ||
367 | WE0_MARK, | ||
368 | |||
369 | /* GPSR2 */ | ||
370 | AUDIO_CLKA_MARK, | ||
371 | AUDIO_CLKB_MARK, | ||
372 | |||
373 | /* GPSR3 */ | ||
374 | SSI_SCK34_MARK, | ||
375 | |||
376 | /* GPSR4 */ | ||
377 | AVS1_MARK, | ||
378 | AVS2_MARK, | ||
379 | |||
380 | VI0_R0_C_MARK, /* see sel_vi0 */ | ||
381 | VI0_R1_C_MARK, /* see sel_vi0 */ | ||
382 | VI0_R2_C_MARK, /* see sel_vi0 */ | ||
383 | /* VI0_R3_C_MARK, */ | ||
384 | VI0_R4_C_MARK, /* see sel_vi0 */ | ||
385 | VI0_R5_C_MARK, /* see sel_vi0 */ | ||
386 | |||
387 | VI0_R0_D_MARK, /* see sel_vi0 */ | ||
388 | VI0_R1_D_MARK, /* see sel_vi0 */ | ||
389 | VI0_R2_D_MARK, /* see sel_vi0 */ | ||
390 | VI0_R3_D_MARK, /* see sel_vi0 */ | ||
391 | VI0_R4_D_MARK, /* see sel_vi0 */ | ||
392 | VI0_R5_D_MARK, /* see sel_vi0 */ | ||
393 | |||
394 | /* IPSR0 */ | ||
395 | PRESETOUT_MARK, PWM1_MARK, AUDATA0_MARK, | ||
396 | ARM_TRACEDATA_0_MARK, GPSCLK_C_MARK, USB_OVC0_MARK, | ||
397 | TX2_E_MARK, SDA2_B_MARK, AUDATA1_MARK, ARM_TRACEDATA_1_MARK, | ||
398 | GPSIN_C_MARK, USB_OVC1_MARK, RX2_E_MARK, SCL2_B_MARK, | ||
399 | SD1_DAT2_A_MARK, MMC_D2_MARK, BS_MARK, | ||
400 | ATADIR0_A_MARK, SDSELF_A_MARK, PWM4_B_MARK, SD1_DAT3_A_MARK, | ||
401 | MMC_D3_MARK, A0_MARK, ATAG0_A_MARK, REMOCON_B_MARK, | ||
402 | A4_MARK, A5_MARK, A6_MARK, A7_MARK, | ||
403 | A8_MARK, A9_MARK, A10_MARK, A11_MARK, | ||
404 | A12_MARK, A13_MARK, A14_MARK, A15_MARK, | ||
405 | A16_MARK, A17_MARK, A18_MARK, A19_MARK, | ||
406 | |||
407 | /* IPSR1 */ | ||
408 | A20_MARK, HSPI_CS1_B_MARK, A21_MARK, | ||
409 | HSPI_CLK1_B_MARK, A22_MARK, HRTS0_B_MARK, | ||
410 | RX2_B_MARK, DREQ2_A_MARK, A23_MARK, HTX0_B_MARK, | ||
411 | TX2_B_MARK, DACK2_A_MARK, TS_SDEN0_A_MARK, | ||
412 | SD1_CD_A_MARK, MMC_D6_MARK, A24_MARK, DREQ1_A_MARK, | ||
413 | HRX0_B_MARK, TS_SPSYNC0_A_MARK, SD1_WP_A_MARK, | ||
414 | MMC_D7_MARK, A25_MARK, DACK1_A_MARK, HCTS0_B_MARK, | ||
415 | RX3_C_MARK, TS_SDAT0_A_MARK, CLKOUT_MARK, | ||
416 | HSPI_TX1_B_MARK, PWM0_B_MARK, CS0_MARK, | ||
417 | HSPI_RX1_B_MARK, SSI_SCK1_B_MARK, | ||
418 | ATAG0_B_MARK, CS1_A26_MARK, SDA2_A_MARK, SCK2_B_MARK, | ||
419 | MMC_D5_MARK, ATADIR0_B_MARK, RD_WR_MARK, WE1_MARK, | ||
420 | ATAWR0_B_MARK, SSI_WS1_B_MARK, EX_CS0_MARK, SCL2_A_MARK, | ||
421 | TX3_C_MARK, TS_SCK0_A_MARK, EX_CS1_MARK, MMC_D4_MARK, | ||
422 | |||
423 | /* IPSR2 */ | ||
424 | SD1_CLK_A_MARK, MMC_CLK_MARK, ATACS00_MARK, EX_CS2_MARK, | ||
425 | SD1_CMD_A_MARK, MMC_CMD_MARK, ATACS10_MARK, EX_CS3_MARK, | ||
426 | SD1_DAT0_A_MARK, MMC_D0_MARK, ATARD0_MARK, | ||
427 | EX_CS4_MARK, EX_WAIT1_A_MARK, SD1_DAT1_A_MARK, | ||
428 | MMC_D1_MARK, ATAWR0_A_MARK, EX_CS5_MARK, EX_WAIT2_A_MARK, | ||
429 | DREQ0_A_MARK, RX3_A_MARK, DACK0_MARK, TX3_A_MARK, | ||
430 | DRACK0_MARK, EX_WAIT0_MARK, PWM0_C_MARK, D0_MARK, | ||
431 | D1_MARK, D2_MARK, D3_MARK, D4_MARK, | ||
432 | D5_MARK, D6_MARK, D7_MARK, D8_MARK, | ||
433 | D9_MARK, D10_MARK, D11_MARK, RD_WR_B_MARK, | ||
434 | IRQ0_MARK, MLB_CLK_MARK, IRQ1_A_MARK, | ||
435 | |||
436 | /* IPSR3 */ | ||
437 | MLB_SIG_MARK, RX5_B_MARK, SDA3_A_MARK, IRQ2_A_MARK, | ||
438 | MLB_DAT_MARK, TX5_B_MARK, SCL3_A_MARK, IRQ3_A_MARK, | ||
439 | SDSELF_B_MARK, SD1_CMD_B_MARK, SCIF_CLK_MARK, AUDIO_CLKOUT_B_MARK, | ||
440 | CAN_CLK_B_MARK, SDA3_B_MARK, SD1_CLK_B_MARK, HTX0_A_MARK, | ||
441 | TX0_A_MARK, SD1_DAT0_B_MARK, HRX0_A_MARK, | ||
442 | RX0_A_MARK, SD1_DAT1_B_MARK, HSCK0_MARK, | ||
443 | SCK0_MARK, SCL3_B_MARK, SD1_DAT2_B_MARK, | ||
444 | HCTS0_A_MARK, CTS0_MARK, SD1_DAT3_B_MARK, | ||
445 | HRTS0_A_MARK, RTS0_MARK, SSI_SCK4_MARK, | ||
446 | DU0_DR0_MARK, LCDOUT0_MARK, AUDATA2_MARK, ARM_TRACEDATA_2_MARK, | ||
447 | SDA3_C_MARK, ADICHS1_MARK, TS_SDEN0_B_MARK, | ||
448 | SSI_WS4_MARK, DU0_DR1_MARK, LCDOUT1_MARK, AUDATA3_MARK, | ||
449 | ARM_TRACEDATA_3_MARK, SCL3_C_MARK, ADICHS2_MARK, | ||
450 | TS_SPSYNC0_B_MARK, DU0_DR2_MARK, LCDOUT2_MARK, | ||
451 | DU0_DR3_MARK, LCDOUT3_MARK, DU0_DR4_MARK, LCDOUT4_MARK, | ||
452 | DU0_DR5_MARK, LCDOUT5_MARK, DU0_DR6_MARK, LCDOUT6_MARK, | ||
453 | |||
454 | /* IPSR4 */ | ||
455 | DU0_DR7_MARK, LCDOUT7_MARK, DU0_DG0_MARK, LCDOUT8_MARK, | ||
456 | AUDATA4_MARK, ARM_TRACEDATA_4_MARK, | ||
457 | TX1_D_MARK, CAN0_TX_A_MARK, ADICHS0_MARK, DU0_DG1_MARK, | ||
458 | LCDOUT9_MARK, AUDATA5_MARK, ARM_TRACEDATA_5_MARK, | ||
459 | RX1_D_MARK, CAN0_RX_A_MARK, ADIDATA_MARK, DU0_DG2_MARK, | ||
460 | LCDOUT10_MARK, DU0_DG3_MARK, LCDOUT11_MARK, DU0_DG4_MARK, | ||
461 | LCDOUT12_MARK, RX0_B_MARK, DU0_DG5_MARK, LCDOUT13_MARK, | ||
462 | TX0_B_MARK, DU0_DG6_MARK, LCDOUT14_MARK, RX4_A_MARK, | ||
463 | DU0_DG7_MARK, LCDOUT15_MARK, TX4_A_MARK, SSI_SCK2_B_MARK, | ||
464 | VI0_R0_B_MARK, DU0_DB0_MARK, LCDOUT16_MARK, AUDATA6_MARK, | ||
465 | ARM_TRACEDATA_6_MARK, GPSCLK_A_MARK, PWM0_A_MARK, | ||
466 | ADICLK_MARK, TS_SDAT0_B_MARK, AUDIO_CLKC_MARK, | ||
467 | VI0_R1_B_MARK, DU0_DB1_MARK, LCDOUT17_MARK, AUDATA7_MARK, | ||
468 | ARM_TRACEDATA_7_MARK, GPSIN_A_MARK, ADICS_SAMP_MARK, | ||
469 | TS_SCK0_B_MARK, VI0_R2_B_MARK, DU0_DB2_MARK, LCDOUT18_MARK, | ||
470 | VI0_R3_B_MARK, DU0_DB3_MARK, LCDOUT19_MARK, VI0_R4_B_MARK, | ||
471 | DU0_DB4_MARK, LCDOUT20_MARK, | ||
472 | |||
473 | /* IPSR5 */ | ||
474 | VI0_R5_B_MARK, DU0_DB5_MARK, LCDOUT21_MARK, VI1_DATA10_B_MARK, | ||
475 | DU0_DB6_MARK, LCDOUT22_MARK, VI1_DATA11_B_MARK, | ||
476 | DU0_DB7_MARK, LCDOUT23_MARK, DU0_DOTCLKIN_MARK, | ||
477 | QSTVA_QVS_MARK, DU0_DOTCLKO_UT0_MARK, | ||
478 | QCLK_MARK, DU0_DOTCLKO_UT1_MARK, QSTVB_QVE_MARK, | ||
479 | AUDIO_CLKOUT_A_MARK, REMOCON_C_MARK, SSI_WS2_B_MARK, | ||
480 | DU0_EXHSYNC_DU0_HSYNC_MARK, QSTH_QHS_MARK, | ||
481 | DU0_EXVSYNC_DU0_VSYNC_MARK, QSTB_QHE_MARK, | ||
482 | DU0_EXODDF_DU0_ODDF_DISP_CDE_MARK, | ||
483 | QCPV_QDE_MARK, FMCLK_D_MARK, SSI_SCK1_A_MARK, | ||
484 | DU0_DISP_MARK, QPOLA_MARK, AUDCK_MARK, ARM_TRACECLK_MARK, | ||
485 | BPFCLK_D_MARK, SSI_WS1_A_MARK, DU0_CDE_MARK, QPOLB_MARK, | ||
486 | AUDSYNC_MARK, ARM_TRACECTL_MARK, FMIN_D_MARK, | ||
487 | SD1_CD_B_MARK, SSI_SCK78_MARK, HSPI_RX0_B_MARK, | ||
488 | TX1_B_MARK, SD1_WP_B_MARK, SSI_WS78_MARK, HSPI_CLK0_B_MARK, | ||
489 | RX1_B_MARK, CAN_CLK_D_MARK, SSI_SDATA8_MARK, | ||
490 | SSI_SCK2_A_MARK, HSPI_CS0_B_MARK, | ||
491 | TX2_A_MARK, CAN0_TX_B_MARK, SSI_SDATA7_MARK, | ||
492 | HSPI_TX0_B_MARK, RX2_A_MARK, CAN0_RX_B_MARK, | ||
493 | |||
494 | /* IPSR6 */ | ||
495 | SSI_SCK6_MARK, HSPI_RX2_A_MARK, FMCLK_B_MARK, | ||
496 | CAN1_TX_B_MARK, SSI_WS6_MARK, HSPI_CLK2_A_MARK, | ||
497 | BPFCLK_B_MARK, CAN1_RX_B_MARK, SSI_SDATA6_MARK, | ||
498 | HSPI_TX2_A_MARK, FMIN_B_MARK, SSI_SCK5_MARK, | ||
499 | RX4_C_MARK, SSI_WS5_MARK, TX4_C_MARK, SSI_SDATA5_MARK, | ||
500 | RX0_D_MARK, SSI_WS34_MARK, ARM_TRACEDATA_8_MARK, | ||
501 | SSI_SDATA4_MARK, SSI_WS2_A_MARK, ARM_TRACEDATA_9_MARK, | ||
502 | SSI_SDATA3_MARK, ARM_TRACEDATA_10_MARK, | ||
503 | SSI_SCK012_MARK, ARM_TRACEDATA_11_MARK, | ||
504 | TX0_D_MARK, SSI_WS012_MARK, ARM_TRACEDATA_12_MARK, | ||
505 | SSI_SDATA2_MARK, HSPI_CS2_A_MARK, | ||
506 | ARM_TRACEDATA_13_MARK, SDA1_A_MARK, SSI_SDATA1_MARK, | ||
507 | ARM_TRACEDATA_14_MARK, SCL1_A_MARK, SCK2_A_MARK, | ||
508 | SSI_SDATA0_MARK, ARM_TRACEDATA_15_MARK, | ||
509 | SD0_CLK_MARK, SUB_TDO_MARK, SD0_CMD_MARK, SUB_TRST_MARK, | ||
510 | SD0_DAT0_MARK, SUB_TMS_MARK, SD0_DAT1_MARK, SUB_TCK_MARK, | ||
511 | SD0_DAT2_MARK, SUB_TDI_MARK, | ||
512 | |||
513 | /* IPSR7 */ | ||
514 | SD0_DAT3_MARK, IRQ1_B_MARK, SD0_CD_MARK, TX5_A_MARK, | ||
515 | SD0_WP_MARK, RX5_A_MARK, VI1_CLKENB_MARK, | ||
516 | HSPI_CLK0_A_MARK, HTX1_A_MARK, RTS1_C_MARK, VI1_FIELD_MARK, | ||
517 | HSPI_CS0_A_MARK, HRX1_A_MARK, SCK1_C_MARK, VI1_HSYNC_MARK, | ||
518 | HSPI_RX0_A_MARK, HRTS1_A_MARK, FMCLK_A_MARK, RX1_C_MARK, | ||
519 | VI1_VSYNC_MARK, HSPI_TX0_MARK, HCTS1_A_MARK, BPFCLK_A_MARK, | ||
520 | TX1_C_MARK, TCLK0_MARK, HSCK1_A_MARK, FMIN_A_MARK, | ||
521 | IRQ2_C_MARK, CTS1_C_MARK, SPEEDIN_MARK, VI0_CLK_MARK, | ||
522 | CAN_CLK_A_MARK, VI0_CLKENB_MARK, SD2_DAT2_B_MARK, | ||
523 | VI1_DATA0_MARK, DU1_DG6_MARK, HSPI_RX1_A_MARK, | ||
524 | RX4_B_MARK, VI0_FIELD_MARK, SD2_DAT3_B_MARK, | ||
525 | VI0_R3_C_MARK, VI1_DATA1_MARK, DU1_DG7_MARK, HSPI_CLK1_A_MARK, | ||
526 | TX4_B_MARK, VI0_HSYNC_MARK, SD2_CD_B_MARK, VI1_DATA2_MARK, | ||
527 | DU1_DR2_MARK, HSPI_CS1_A_MARK, RX3_B_MARK, | ||
528 | |||
529 | /* IPSR8 */ | ||
530 | VI0_VSYNC_MARK, SD2_WP_B_MARK, VI1_DATA3_MARK, DU1_DR3_MARK, | ||
531 | HSPI_TX1_A_MARK, TX3_B_MARK, VI0_DATA0_VI0_B0_MARK, | ||
532 | DU1_DG2_MARK, IRQ2_B_MARK, RX3_D_MARK, VI0_DATA1_VI0_B1_MARK, | ||
533 | DU1_DG3_MARK, IRQ3_B_MARK, TX3_D_MARK, VI0_DATA2_VI0_B2_MARK, | ||
534 | DU1_DG4_MARK, RX0_C_MARK, VI0_DATA3_VI0_B3_MARK, | ||
535 | DU1_DG5_MARK, TX1_A_MARK, TX0_C_MARK, VI0_DATA4_VI0_B4_MARK, | ||
536 | DU1_DB2_MARK, RX1_A_MARK, VI0_DATA5_VI0_B5_MARK, | ||
537 | DU1_DB3_MARK, SCK1_A_MARK, PWM4_MARK, HSCK1_B_MARK, | ||
538 | VI0_DATA6_VI0_G0_MARK, DU1_DB4_MARK, CTS1_A_MARK, | ||
539 | PWM5_MARK, VI0_DATA7_VI0_G1_MARK, DU1_DB5_MARK, | ||
540 | RTS1_A_MARK, VI0_G2_MARK, SD2_CLK_B_MARK, VI1_DATA4_MARK, | ||
541 | DU1_DR4_MARK, HTX1_B_MARK, VI0_G3_MARK, SD2_CMD_B_MARK, | ||
542 | VI1_DATA5_MARK, DU1_DR5_MARK, HRX1_B_MARK, | ||
543 | |||
544 | /* IPSR9 */ | ||
545 | VI0_G4_MARK, SD2_DAT0_B_MARK, VI1_DATA6_MARK, | ||
546 | DU1_DR6_MARK, HRTS1_B_MARK, VI0_G5_MARK, SD2_DAT1_B_MARK, | ||
547 | VI1_DATA7_MARK, DU1_DR7_MARK, HCTS1_B_MARK, VI0_R0_A_MARK, | ||
548 | VI1_CLK_MARK, ETH_REF_CLK_MARK, DU1_DOTCLKIN_MARK, | ||
549 | VI0_R1_A_MARK, VI1_DATA8_MARK, DU1_DB6_MARK, ETH_TXD0_MARK, | ||
550 | PWM2_MARK, TCLK1_MARK, VI0_R2_A_MARK, VI1_DATA9_MARK, | ||
551 | DU1_DB7_MARK, ETH_TXD1_MARK, PWM3_MARK, VI0_R3_A_MARK, | ||
552 | ETH_CRS_DV_MARK, IECLK_MARK, SCK2_C_MARK, | ||
553 | VI0_R4_A_MARK, ETH_TX_EN_MARK, IETX_MARK, | ||
554 | TX2_C_MARK, VI0_R5_A_MARK, ETH_RX_ER_MARK, FMCLK_C_MARK, | ||
555 | IERX_MARK, RX2_C_MARK, VI1_DATA10_A_MARK, | ||
556 | DU1_DOTCLKOUT_MARK, ETH_RXD0_MARK, | ||
557 | BPFCLK_C_MARK, TX2_D_MARK, SDA2_C_MARK, VI1_DATA11_A_MARK, | ||
558 | DU1_EXHSYNC_DU1_HSYNC_MARK, ETH_RXD1_MARK, FMIN_C_MARK, | ||
559 | RX2_D_MARK, SCL2_C_MARK, | ||
560 | |||
561 | /* IPSR10 */ | ||
562 | SD2_CLK_A_MARK, DU1_EXVSYNC_DU1_VSYNC_MARK, ATARD1_MARK, | ||
563 | ETH_MDC_MARK, SDA1_B_MARK, SD2_CMD_A_MARK, | ||
564 | DU1_EXODDF_DU1_ODDF_DISP_CDE_MARK, ATAWR1_MARK, | ||
565 | ETH_MDIO_MARK, SCL1_B_MARK, SD2_DAT0_A_MARK, | ||
566 | DU1_DISP_MARK, ATACS01_MARK, DREQ1_B_MARK, ETH_LINK_MARK, | ||
567 | CAN1_RX_A_MARK, SD2_DAT1_A_MARK, DU1_CDE_MARK, | ||
568 | ATACS11_MARK, DACK1_B_MARK, ETH_MAGIC_MARK, CAN1_TX_A_MARK, | ||
569 | PWM6_MARK, SD2_DAT2_A_MARK, VI1_DATA12_MARK, | ||
570 | DREQ2_B_MARK, ATADIR1_MARK, HSPI_CLK2_B_MARK, | ||
571 | GPSCLK_B_MARK, SD2_DAT3_A_MARK, VI1_DATA13_MARK, | ||
572 | DACK2_B_MARK, ATAG1_MARK, HSPI_CS2_B_MARK, | ||
573 | GPSIN_B_MARK, SD2_CD_A_MARK, VI1_DATA14_MARK, | ||
574 | EX_WAIT1_B_MARK, DREQ0_B_MARK, HSPI_RX2_B_MARK, | ||
575 | REMOCON_A_MARK, SD2_WP_A_MARK, VI1_DATA15_MARK, | ||
576 | EX_WAIT2_B_MARK, DACK0_B_MARK, | ||
577 | HSPI_TX2_B_MARK, CAN_CLK_C_MARK, | ||
578 | |||
579 | PINMUX_MARK_END, | ||
580 | }; | ||
581 | |||
582 | static const pinmux_enum_t pinmux_data[] = { | ||
583 | PINMUX_DATA_GP_ALL(), /* PINMUX_DATA(GP_M_N_DATA, GP_M_N_FN...), */ | ||
584 | |||
585 | PINMUX_DATA(PENC0_MARK, FN_PENC0), | ||
586 | PINMUX_DATA(PENC1_MARK, FN_PENC1), | ||
587 | PINMUX_DATA(A1_MARK, FN_A1), | ||
588 | PINMUX_DATA(A2_MARK, FN_A2), | ||
589 | PINMUX_DATA(A3_MARK, FN_A3), | ||
590 | PINMUX_DATA(WE0_MARK, FN_WE0), | ||
591 | PINMUX_DATA(AUDIO_CLKA_MARK, FN_AUDIO_CLKA), | ||
592 | PINMUX_DATA(AUDIO_CLKB_MARK, FN_AUDIO_CLKB), | ||
593 | PINMUX_DATA(SSI_SCK34_MARK, FN_SSI_SCK34), | ||
594 | PINMUX_DATA(AVS1_MARK, FN_AVS1), | ||
595 | PINMUX_DATA(AVS2_MARK, FN_AVS2), | ||
596 | |||
597 | /* IPSR0 */ | ||
598 | PINMUX_IPSR_DATA(IP0_1_0, PRESETOUT), | ||
599 | PINMUX_IPSR_DATA(IP0_1_0, PWM1), | ||
600 | |||
601 | PINMUX_IPSR_DATA(IP0_4_2, AUDATA0), | ||
602 | PINMUX_IPSR_DATA(IP0_4_2, ARM_TRACEDATA_0), | ||
603 | PINMUX_IPSR_MSEL(IP0_4_2, GPSCLK_C, SEL_GPS_C), | ||
604 | PINMUX_IPSR_DATA(IP0_4_2, USB_OVC0), | ||
605 | PINMUX_IPSR_DATA(IP0_4_2, TX2_E), | ||
606 | PINMUX_IPSR_MSEL(IP0_4_2, SDA2_B, SEL_I2C2_B), | ||
607 | |||
608 | PINMUX_IPSR_DATA(IP0_7_5, AUDATA1), | ||
609 | PINMUX_IPSR_DATA(IP0_7_5, ARM_TRACEDATA_1), | ||
610 | PINMUX_IPSR_MSEL(IP0_7_5, GPSIN_C, SEL_GPS_C), | ||
611 | PINMUX_IPSR_DATA(IP0_7_5, USB_OVC1), | ||
612 | PINMUX_IPSR_MSEL(IP0_7_5, RX2_E, SEL_SCIF2_E), | ||
613 | PINMUX_IPSR_MSEL(IP0_7_5, SCL2_B, SEL_I2C2_B), | ||
614 | |||
615 | PINMUX_IPSR_MSEL(IP0_11_8, SD1_DAT2_A, SEL_SD1_A), | ||
616 | PINMUX_IPSR_DATA(IP0_11_8, MMC_D2), | ||
617 | PINMUX_IPSR_DATA(IP0_11_8, BS), | ||
618 | PINMUX_IPSR_DATA(IP0_11_8, ATADIR0_A), | ||
619 | PINMUX_IPSR_DATA(IP0_11_8, SDSELF_A), | ||
620 | PINMUX_IPSR_DATA(IP0_11_8, PWM4_B), | ||
621 | |||
622 | PINMUX_IPSR_MSEL(IP0_14_12, SD1_DAT3_A, SEL_SD1_A), | ||
623 | PINMUX_IPSR_DATA(IP0_14_12, MMC_D3), | ||
624 | PINMUX_IPSR_DATA(IP0_14_12, A0), | ||
625 | PINMUX_IPSR_DATA(IP0_14_12, ATAG0_A), | ||
626 | PINMUX_IPSR_MSEL(IP0_14_12, REMOCON_B, SEL_REMOCON_B), | ||
627 | |||
628 | PINMUX_IPSR_DATA(IP0_15, A4), | ||
629 | PINMUX_IPSR_DATA(IP0_16, A5), | ||
630 | PINMUX_IPSR_DATA(IP0_17, A6), | ||
631 | PINMUX_IPSR_DATA(IP0_18, A7), | ||
632 | PINMUX_IPSR_DATA(IP0_19, A8), | ||
633 | PINMUX_IPSR_DATA(IP0_20, A9), | ||
634 | PINMUX_IPSR_DATA(IP0_21, A10), | ||
635 | PINMUX_IPSR_DATA(IP0_22, A11), | ||
636 | PINMUX_IPSR_DATA(IP0_23, A12), | ||
637 | PINMUX_IPSR_DATA(IP0_24, A13), | ||
638 | PINMUX_IPSR_DATA(IP0_25, A14), | ||
639 | PINMUX_IPSR_DATA(IP0_26, A15), | ||
640 | PINMUX_IPSR_DATA(IP0_27, A16), | ||
641 | PINMUX_IPSR_DATA(IP0_28, A17), | ||
642 | PINMUX_IPSR_DATA(IP0_29, A18), | ||
643 | PINMUX_IPSR_DATA(IP0_30, A19), | ||
644 | |||
645 | /* IPSR1 */ | ||
646 | PINMUX_IPSR_DATA(IP1_0, A20), | ||
647 | PINMUX_IPSR_MSEL(IP1_0, HSPI_CS1_B, SEL_HSPI1_B), | ||
648 | |||
649 | PINMUX_IPSR_DATA(IP1_1, A21), | ||
650 | PINMUX_IPSR_MSEL(IP1_1, HSPI_CLK1_B, SEL_HSPI1_B), | ||
651 | |||
652 | PINMUX_IPSR_DATA(IP1_4_2, A22), | ||
653 | PINMUX_IPSR_MSEL(IP1_4_2, HRTS0_B, SEL_HSCIF0_B), | ||
654 | PINMUX_IPSR_MSEL(IP1_4_2, RX2_B, SEL_SCIF2_B), | ||
655 | PINMUX_IPSR_MSEL(IP1_4_2, DREQ2_A, SEL_DREQ2_A), | ||
656 | |||
657 | PINMUX_IPSR_DATA(IP1_7_5, A23), | ||
658 | PINMUX_IPSR_DATA(IP1_7_5, HTX0_B), | ||
659 | PINMUX_IPSR_DATA(IP1_7_5, TX2_B), | ||
660 | PINMUX_IPSR_DATA(IP1_7_5, DACK2_A), | ||
661 | PINMUX_IPSR_MSEL(IP1_7_5, TS_SDEN0_A, SEL_TSIF0_A), | ||
662 | |||
663 | PINMUX_IPSR_MSEL(IP1_10_8, SD1_CD_A, SEL_SD1_A), | ||
664 | PINMUX_IPSR_DATA(IP1_10_8, MMC_D6), | ||
665 | PINMUX_IPSR_DATA(IP1_10_8, A24), | ||
666 | PINMUX_IPSR_MSEL(IP1_10_8, DREQ1_A, SEL_DREQ1_A), | ||
667 | PINMUX_IPSR_MSEL(IP1_10_8, HRX0_B, SEL_HSCIF0_B), | ||
668 | PINMUX_IPSR_MSEL(IP1_10_8, TS_SPSYNC0_A, SEL_TSIF0_A), | ||
669 | |||
670 | PINMUX_IPSR_MSEL(IP1_14_11, SD1_WP_A, SEL_SD1_A), | ||
671 | PINMUX_IPSR_DATA(IP1_14_11, MMC_D7), | ||
672 | PINMUX_IPSR_DATA(IP1_14_11, A25), | ||
673 | PINMUX_IPSR_DATA(IP1_14_11, DACK1_A), | ||
674 | PINMUX_IPSR_MSEL(IP1_14_11, HCTS0_B, SEL_HSCIF0_B), | ||
675 | PINMUX_IPSR_MSEL(IP1_14_11, RX3_C, SEL_SCIF3_C), | ||
676 | PINMUX_IPSR_MSEL(IP1_14_11, TS_SDAT0_A, SEL_TSIF0_A), | ||
677 | |||
678 | PINMUX_IPSR_NOGP(IP1_16_15, CLKOUT), | ||
679 | PINMUX_IPSR_NOGP(IP1_16_15, HSPI_TX1_B), | ||
680 | PINMUX_IPSR_NOGP(IP1_16_15, PWM0_B), | ||
681 | |||
682 | PINMUX_IPSR_NOGP(IP1_17, CS0), | ||
683 | PINMUX_IPSR_NOGM(IP1_17, HSPI_RX1_B, SEL_HSPI1_B), | ||
684 | |||
685 | PINMUX_IPSR_NOGM(IP1_20_18, SSI_SCK1_B, SEL_SSI1_B), | ||
686 | PINMUX_IPSR_NOGP(IP1_20_18, ATAG0_B), | ||
687 | PINMUX_IPSR_NOGP(IP1_20_18, CS1_A26), | ||
688 | PINMUX_IPSR_NOGM(IP1_20_18, SDA2_A, SEL_I2C2_A), | ||
689 | PINMUX_IPSR_NOGM(IP1_20_18, SCK2_B, SEL_SCIF2_B), | ||
690 | |||
691 | PINMUX_IPSR_DATA(IP1_23_21, MMC_D5), | ||
692 | PINMUX_IPSR_DATA(IP1_23_21, ATADIR0_B), | ||
693 | PINMUX_IPSR_DATA(IP1_23_21, RD_WR), | ||
694 | |||
695 | PINMUX_IPSR_DATA(IP1_24, WE1), | ||
696 | PINMUX_IPSR_DATA(IP1_24, ATAWR0_B), | ||
697 | |||
698 | PINMUX_IPSR_MSEL(IP1_27_25, SSI_WS1_B, SEL_SSI1_B), | ||
699 | PINMUX_IPSR_DATA(IP1_27_25, EX_CS0), | ||
700 | PINMUX_IPSR_MSEL(IP1_27_25, SCL2_A, SEL_I2C2_A), | ||
701 | PINMUX_IPSR_DATA(IP1_27_25, TX3_C), | ||
702 | PINMUX_IPSR_MSEL(IP1_27_25, TS_SCK0_A, SEL_TSIF0_A), | ||
703 | |||
704 | PINMUX_IPSR_DATA(IP1_29_28, EX_CS1), | ||
705 | PINMUX_IPSR_DATA(IP1_29_28, MMC_D4), | ||
706 | |||
707 | /* IPSR2 */ | ||
708 | PINMUX_IPSR_DATA(IP2_2_0, SD1_CLK_A), | ||
709 | PINMUX_IPSR_DATA(IP2_2_0, MMC_CLK), | ||
710 | PINMUX_IPSR_DATA(IP2_2_0, ATACS00), | ||
711 | PINMUX_IPSR_DATA(IP2_2_0, EX_CS2), | ||
712 | |||
713 | PINMUX_IPSR_MSEL(IP2_5_3, SD1_CMD_A, SEL_SD1_A), | ||
714 | PINMUX_IPSR_DATA(IP2_5_3, MMC_CMD), | ||
715 | PINMUX_IPSR_DATA(IP2_5_3, ATACS10), | ||
716 | PINMUX_IPSR_DATA(IP2_5_3, EX_CS3), | ||
717 | |||
718 | PINMUX_IPSR_MSEL(IP2_8_6, SD1_DAT0_A, SEL_SD1_A), | ||
719 | PINMUX_IPSR_DATA(IP2_8_6, MMC_D0), | ||
720 | PINMUX_IPSR_DATA(IP2_8_6, ATARD0), | ||
721 | PINMUX_IPSR_DATA(IP2_8_6, EX_CS4), | ||
722 | PINMUX_IPSR_MSEL(IP2_8_6, EX_WAIT1_A, SEL_WAIT1_A), | ||
723 | |||
724 | PINMUX_IPSR_MSEL(IP2_11_9, SD1_DAT1_A, SEL_SD1_A), | ||
725 | PINMUX_IPSR_DATA(IP2_11_9, MMC_D1), | ||
726 | PINMUX_IPSR_DATA(IP2_11_9, ATAWR0_A), | ||
727 | PINMUX_IPSR_DATA(IP2_11_9, EX_CS5), | ||
728 | PINMUX_IPSR_MSEL(IP2_11_9, EX_WAIT2_A, SEL_WAIT2_A), | ||
729 | |||
730 | PINMUX_IPSR_MSEL(IP2_13_12, DREQ0_A, SEL_DREQ0_A), | ||
731 | PINMUX_IPSR_MSEL(IP2_13_12, RX3_A, SEL_SCIF3_A), | ||
732 | |||
733 | PINMUX_IPSR_DATA(IP2_16_14, DACK0), | ||
734 | PINMUX_IPSR_DATA(IP2_16_14, TX3_A), | ||
735 | PINMUX_IPSR_DATA(IP2_16_14, DRACK0), | ||
736 | |||
737 | PINMUX_IPSR_DATA(IP2_17, EX_WAIT0), | ||
738 | PINMUX_IPSR_DATA(IP2_17, PWM0_C), | ||
739 | |||
740 | PINMUX_IPSR_NOGP(IP2_18, D0), | ||
741 | PINMUX_IPSR_NOGP(IP2_19, D1), | ||
742 | PINMUX_IPSR_NOGP(IP2_20, D2), | ||
743 | PINMUX_IPSR_NOGP(IP2_21, D3), | ||
744 | PINMUX_IPSR_NOGP(IP2_22, D4), | ||
745 | PINMUX_IPSR_NOGP(IP2_23, D5), | ||
746 | PINMUX_IPSR_NOGP(IP2_24, D6), | ||
747 | PINMUX_IPSR_NOGP(IP2_25, D7), | ||
748 | PINMUX_IPSR_NOGP(IP2_26, D8), | ||
749 | PINMUX_IPSR_NOGP(IP2_27, D9), | ||
750 | PINMUX_IPSR_NOGP(IP2_28, D10), | ||
751 | PINMUX_IPSR_NOGP(IP2_29, D11), | ||
752 | |||
753 | PINMUX_IPSR_DATA(IP2_30, RD_WR_B), | ||
754 | PINMUX_IPSR_DATA(IP2_30, IRQ0), | ||
755 | |||
756 | PINMUX_IPSR_DATA(IP2_31, MLB_CLK), | ||
757 | PINMUX_IPSR_MSEL(IP2_31, IRQ1_A, SEL_IRQ1_A), | ||
758 | |||
759 | /* IPSR3 */ | ||
760 | PINMUX_IPSR_DATA(IP3_1_0, MLB_SIG), | ||
761 | PINMUX_IPSR_MSEL(IP3_1_0, RX5_B, SEL_SCIF5_B), | ||
762 | PINMUX_IPSR_MSEL(IP3_1_0, SDA3_A, SEL_I2C3_A), | ||
763 | PINMUX_IPSR_MSEL(IP3_1_0, IRQ2_A, SEL_IRQ2_A), | ||
764 | |||
765 | PINMUX_IPSR_DATA(IP3_4_2, MLB_DAT), | ||
766 | PINMUX_IPSR_DATA(IP3_4_2, TX5_B), | ||
767 | PINMUX_IPSR_MSEL(IP3_4_2, SCL3_A, SEL_I2C3_A), | ||
768 | PINMUX_IPSR_MSEL(IP3_4_2, IRQ3_A, SEL_IRQ3_A), | ||
769 | PINMUX_IPSR_DATA(IP3_4_2, SDSELF_B), | ||
770 | |||
771 | PINMUX_IPSR_MSEL(IP3_7_5, SD1_CMD_B, SEL_SD1_B), | ||
772 | PINMUX_IPSR_DATA(IP3_7_5, SCIF_CLK), | ||
773 | PINMUX_IPSR_DATA(IP3_7_5, AUDIO_CLKOUT_B), | ||
774 | PINMUX_IPSR_MSEL(IP3_7_5, CAN_CLK_B, SEL_CANCLK_B), | ||
775 | PINMUX_IPSR_MSEL(IP3_7_5, SDA3_B, SEL_I2C3_B), | ||
776 | |||
777 | PINMUX_IPSR_DATA(IP3_9_8, SD1_CLK_B), | ||
778 | PINMUX_IPSR_DATA(IP3_9_8, HTX0_A), | ||
779 | PINMUX_IPSR_DATA(IP3_9_8, TX0_A), | ||
780 | |||
781 | PINMUX_IPSR_MSEL(IP3_12_10, SD1_DAT0_B, SEL_SD1_B), | ||
782 | PINMUX_IPSR_MSEL(IP3_12_10, HRX0_A, SEL_HSCIF0_A), | ||
783 | PINMUX_IPSR_MSEL(IP3_12_10, RX0_A, SEL_SCIF0_A), | ||
784 | |||
785 | PINMUX_IPSR_MSEL(IP3_15_13, SD1_DAT1_B, SEL_SD1_B), | ||
786 | PINMUX_IPSR_MSEL(IP3_15_13, HSCK0, SEL_HSCIF0_A), | ||
787 | PINMUX_IPSR_DATA(IP3_15_13, SCK0), | ||
788 | PINMUX_IPSR_MSEL(IP3_15_13, SCL3_B, SEL_I2C3_B), | ||
789 | |||
790 | PINMUX_IPSR_MSEL(IP3_18_16, SD1_DAT2_B, SEL_SD1_B), | ||
791 | PINMUX_IPSR_MSEL(IP3_18_16, HCTS0_A, SEL_HSCIF0_A), | ||
792 | PINMUX_IPSR_DATA(IP3_18_16, CTS0), | ||
793 | |||
794 | PINMUX_IPSR_MSEL(IP3_20_19, SD1_DAT3_B, SEL_SD1_B), | ||
795 | PINMUX_IPSR_MSEL(IP3_20_19, HRTS0_A, SEL_HSCIF0_A), | ||
796 | PINMUX_IPSR_DATA(IP3_20_19, RTS0), | ||
797 | |||
798 | PINMUX_IPSR_DATA(IP3_23_21, SSI_SCK4), | ||
799 | PINMUX_IPSR_DATA(IP3_23_21, DU0_DR0), | ||
800 | PINMUX_IPSR_DATA(IP3_23_21, LCDOUT0), | ||
801 | PINMUX_IPSR_DATA(IP3_23_21, AUDATA2), | ||
802 | PINMUX_IPSR_DATA(IP3_23_21, ARM_TRACEDATA_2), | ||
803 | PINMUX_IPSR_MSEL(IP3_23_21, SDA3_C, SEL_I2C3_C), | ||
804 | PINMUX_IPSR_DATA(IP3_23_21, ADICHS1), | ||
805 | PINMUX_IPSR_MSEL(IP3_23_21, TS_SDEN0_B, SEL_TSIF0_B), | ||
806 | |||
807 | PINMUX_IPSR_DATA(IP3_26_24, SSI_WS4), | ||
808 | PINMUX_IPSR_DATA(IP3_26_24, DU0_DR1), | ||
809 | PINMUX_IPSR_DATA(IP3_26_24, LCDOUT1), | ||
810 | PINMUX_IPSR_DATA(IP3_26_24, AUDATA3), | ||
811 | PINMUX_IPSR_DATA(IP3_26_24, ARM_TRACEDATA_3), | ||
812 | PINMUX_IPSR_MSEL(IP3_26_24, SCL3_C, SEL_I2C3_C), | ||
813 | PINMUX_IPSR_DATA(IP3_26_24, ADICHS2), | ||
814 | PINMUX_IPSR_MSEL(IP3_26_24, TS_SPSYNC0_B, SEL_TSIF0_B), | ||
815 | |||
816 | PINMUX_IPSR_DATA(IP3_27, DU0_DR2), | ||
817 | PINMUX_IPSR_DATA(IP3_27, LCDOUT2), | ||
818 | |||
819 | PINMUX_IPSR_DATA(IP3_28, DU0_DR3), | ||
820 | PINMUX_IPSR_DATA(IP3_28, LCDOUT3), | ||
821 | |||
822 | PINMUX_IPSR_DATA(IP3_29, DU0_DR4), | ||
823 | PINMUX_IPSR_DATA(IP3_29, LCDOUT4), | ||
824 | |||
825 | PINMUX_IPSR_DATA(IP3_30, DU0_DR5), | ||
826 | PINMUX_IPSR_DATA(IP3_30, LCDOUT5), | ||
827 | |||
828 | PINMUX_IPSR_DATA(IP3_31, DU0_DR6), | ||
829 | PINMUX_IPSR_DATA(IP3_31, LCDOUT6), | ||
830 | |||
831 | /* IPSR4 */ | ||
832 | PINMUX_IPSR_DATA(IP4_0, DU0_DR7), | ||
833 | PINMUX_IPSR_DATA(IP4_0, LCDOUT7), | ||
834 | |||
835 | PINMUX_IPSR_DATA(IP4_3_1, DU0_DG0), | ||
836 | PINMUX_IPSR_DATA(IP4_3_1, LCDOUT8), | ||
837 | PINMUX_IPSR_DATA(IP4_3_1, AUDATA4), | ||
838 | PINMUX_IPSR_DATA(IP4_3_1, ARM_TRACEDATA_4), | ||
839 | PINMUX_IPSR_DATA(IP4_3_1, TX1_D), | ||
840 | PINMUX_IPSR_DATA(IP4_3_1, CAN0_TX_A), | ||
841 | PINMUX_IPSR_DATA(IP4_3_1, ADICHS0), | ||
842 | |||
843 | PINMUX_IPSR_DATA(IP4_6_4, DU0_DG1), | ||
844 | PINMUX_IPSR_DATA(IP4_6_4, LCDOUT9), | ||
845 | PINMUX_IPSR_DATA(IP4_6_4, AUDATA5), | ||
846 | PINMUX_IPSR_DATA(IP4_6_4, ARM_TRACEDATA_5), | ||
847 | PINMUX_IPSR_MSEL(IP4_6_4, RX1_D, SEL_SCIF1_D), | ||
848 | PINMUX_IPSR_MSEL(IP4_6_4, CAN0_RX_A, SEL_CAN0_A), | ||
849 | PINMUX_IPSR_DATA(IP4_6_4, ADIDATA), | ||
850 | |||
851 | PINMUX_IPSR_DATA(IP4_7, DU0_DG2), | ||
852 | PINMUX_IPSR_DATA(IP4_7, LCDOUT10), | ||
853 | |||
854 | PINMUX_IPSR_DATA(IP4_8, DU0_DG3), | ||
855 | PINMUX_IPSR_DATA(IP4_8, LCDOUT11), | ||
856 | |||
857 | PINMUX_IPSR_DATA(IP4_10_9, DU0_DG4), | ||
858 | PINMUX_IPSR_DATA(IP4_10_9, LCDOUT12), | ||
859 | PINMUX_IPSR_MSEL(IP4_10_9, RX0_B, SEL_SCIF0_B), | ||
860 | |||
861 | PINMUX_IPSR_DATA(IP4_12_11, DU0_DG5), | ||
862 | PINMUX_IPSR_DATA(IP4_12_11, LCDOUT13), | ||
863 | PINMUX_IPSR_DATA(IP4_12_11, TX0_B), | ||
864 | |||
865 | PINMUX_IPSR_DATA(IP4_14_13, DU0_DG6), | ||
866 | PINMUX_IPSR_DATA(IP4_14_13, LCDOUT14), | ||
867 | PINMUX_IPSR_MSEL(IP4_14_13, RX4_A, SEL_SCIF4_A), | ||
868 | |||
869 | PINMUX_IPSR_DATA(IP4_16_15, DU0_DG7), | ||
870 | PINMUX_IPSR_DATA(IP4_16_15, LCDOUT15), | ||
871 | PINMUX_IPSR_DATA(IP4_16_15, TX4_A), | ||
872 | |||
873 | PINMUX_IPSR_MSEL(IP4_20_17, SSI_SCK2_B, SEL_SSI2_B), | ||
874 | PINMUX_DATA(VI0_R0_B_MARK, FN_IP4_20_17, FN_VI0_R0_B, FN_SEL_VI0_B), /* see sel_vi0 */ | ||
875 | PINMUX_DATA(VI0_R0_D_MARK, FN_IP4_20_17, FN_VI0_R0_B, FN_SEL_VI0_D), /* see sel_vi0 */ | ||
876 | PINMUX_IPSR_DATA(IP4_20_17, DU0_DB0), | ||
877 | PINMUX_IPSR_DATA(IP4_20_17, LCDOUT16), | ||
878 | PINMUX_IPSR_DATA(IP4_20_17, AUDATA6), | ||
879 | PINMUX_IPSR_DATA(IP4_20_17, ARM_TRACEDATA_6), | ||
880 | PINMUX_IPSR_MSEL(IP4_20_17, GPSCLK_A, SEL_GPS_A), | ||
881 | PINMUX_IPSR_DATA(IP4_20_17, PWM0_A), | ||
882 | PINMUX_IPSR_DATA(IP4_20_17, ADICLK), | ||
883 | PINMUX_IPSR_MSEL(IP4_20_17, TS_SDAT0_B, SEL_TSIF0_B), | ||
884 | |||
885 | PINMUX_IPSR_DATA(IP4_24_21, AUDIO_CLKC), | ||
886 | PINMUX_DATA(VI0_R1_B_MARK, FN_IP4_24_21, FN_VI0_R1_B, FN_SEL_VI0_B), /* see sel_vi0 */ | ||
887 | PINMUX_DATA(VI0_R1_D_MARK, FN_IP4_24_21, FN_VI0_R1_B, FN_SEL_VI0_D), /* see sel_vi0 */ | ||
888 | PINMUX_IPSR_DATA(IP4_24_21, DU0_DB1), | ||
889 | PINMUX_IPSR_DATA(IP4_24_21, LCDOUT17), | ||
890 | PINMUX_IPSR_DATA(IP4_24_21, AUDATA7), | ||
891 | PINMUX_IPSR_DATA(IP4_24_21, ARM_TRACEDATA_7), | ||
892 | PINMUX_IPSR_MSEL(IP4_24_21, GPSIN_A, SEL_GPS_A), | ||
893 | PINMUX_IPSR_DATA(IP4_24_21, ADICS_SAMP), | ||
894 | PINMUX_IPSR_MSEL(IP4_24_21, TS_SCK0_B, SEL_TSIF0_B), | ||
895 | |||
896 | PINMUX_DATA(VI0_R2_B_MARK, FN_IP4_26_25, FN_VI0_R2_B, FN_SEL_VI0_B), /* see sel_vi0 */ | ||
897 | PINMUX_DATA(VI0_R2_D_MARK, FN_IP4_26_25, FN_VI0_R2_B, FN_SEL_VI0_D), /* see sel_vi0 */ | ||
898 | PINMUX_IPSR_DATA(IP4_26_25, DU0_DB2), | ||
899 | PINMUX_IPSR_DATA(IP4_26_25, LCDOUT18), | ||
900 | |||
901 | PINMUX_IPSR_MSEL(IP4_28_27, VI0_R3_B, SEL_VI0_B), | ||
902 | PINMUX_IPSR_DATA(IP4_28_27, DU0_DB3), | ||
903 | PINMUX_IPSR_DATA(IP4_28_27, LCDOUT19), | ||
904 | |||
905 | PINMUX_DATA(VI0_R4_B_MARK, FN_IP4_30_29, FN_VI0_R4_B, FN_SEL_VI0_B), /* see sel_vi0 */ | ||
906 | PINMUX_DATA(VI0_R4_D_MARK, FN_IP4_30_29, FN_VI0_R4_B, FN_SEL_VI0_D), /* see sel_vi0 */ | ||
907 | PINMUX_IPSR_DATA(IP4_30_29, DU0_DB4), | ||
908 | PINMUX_IPSR_DATA(IP4_30_29, LCDOUT20), | ||
909 | |||
910 | /* IPSR5 */ | ||
911 | PINMUX_DATA(VI0_R5_B_MARK, FN_IP5_1_0, FN_VI0_R5_B, FN_SEL_VI0_B), /* see sel_vi0 */ | ||
912 | PINMUX_DATA(VI0_R5_D_MARK, FN_IP5_1_0, FN_VI0_R5_B, FN_SEL_VI0_D), /* see sel_vi0 */ | ||
913 | PINMUX_IPSR_DATA(IP5_1_0, DU0_DB5), | ||
914 | PINMUX_IPSR_DATA(IP5_1_0, LCDOUT21), | ||
915 | |||
916 | PINMUX_IPSR_MSEL(IP5_3_2, VI1_DATA10_B, SEL_VI1_B), | ||
917 | PINMUX_IPSR_DATA(IP5_3_2, DU0_DB6), | ||
918 | PINMUX_IPSR_DATA(IP5_3_2, LCDOUT22), | ||
919 | |||
920 | PINMUX_IPSR_MSEL(IP5_5_4, VI1_DATA11_B, SEL_VI1_B), | ||
921 | PINMUX_IPSR_DATA(IP5_5_4, DU0_DB7), | ||
922 | PINMUX_IPSR_DATA(IP5_5_4, LCDOUT23), | ||
923 | |||
924 | PINMUX_IPSR_DATA(IP5_6, DU0_DOTCLKIN), | ||
925 | PINMUX_IPSR_DATA(IP5_6, QSTVA_QVS), | ||
926 | |||
927 | PINMUX_IPSR_DATA(IP5_7, DU0_DOTCLKO_UT0), | ||
928 | PINMUX_IPSR_DATA(IP5_7, QCLK), | ||
929 | |||
930 | PINMUX_IPSR_DATA(IP5_9_8, DU0_DOTCLKO_UT1), | ||
931 | PINMUX_IPSR_DATA(IP5_9_8, QSTVB_QVE), | ||
932 | PINMUX_IPSR_DATA(IP5_9_8, AUDIO_CLKOUT_A), | ||
933 | PINMUX_IPSR_MSEL(IP5_9_8, REMOCON_C, SEL_REMOCON_C), | ||
934 | |||
935 | PINMUX_IPSR_MSEL(IP5_11_10, SSI_WS2_B, SEL_SSI2_B), | ||
936 | PINMUX_IPSR_DATA(IP5_11_10, DU0_EXHSYNC_DU0_HSYNC), | ||
937 | PINMUX_IPSR_DATA(IP5_11_10, QSTH_QHS), | ||
938 | |||
939 | PINMUX_IPSR_DATA(IP5_12, DU0_EXVSYNC_DU0_VSYNC), | ||
940 | PINMUX_IPSR_DATA(IP5_12, QSTB_QHE), | ||
941 | |||
942 | PINMUX_IPSR_DATA(IP5_14_13, DU0_EXODDF_DU0_ODDF_DISP_CDE), | ||
943 | PINMUX_IPSR_DATA(IP5_14_13, QCPV_QDE), | ||
944 | PINMUX_IPSR_MSEL(IP5_14_13, FMCLK_D, SEL_FM_D), | ||
945 | |||
946 | PINMUX_IPSR_MSEL(IP5_17_15, SSI_SCK1_A, SEL_SSI1_A), | ||
947 | PINMUX_IPSR_DATA(IP5_17_15, DU0_DISP), | ||
948 | PINMUX_IPSR_DATA(IP5_17_15, QPOLA), | ||
949 | PINMUX_IPSR_DATA(IP5_17_15, AUDCK), | ||
950 | PINMUX_IPSR_DATA(IP5_17_15, ARM_TRACECLK), | ||
951 | PINMUX_IPSR_DATA(IP5_17_15, BPFCLK_D), | ||
952 | |||
953 | PINMUX_IPSR_MSEL(IP5_20_18, SSI_WS1_A, SEL_SSI1_A), | ||
954 | PINMUX_IPSR_DATA(IP5_20_18, DU0_CDE), | ||
955 | PINMUX_IPSR_DATA(IP5_20_18, QPOLB), | ||
956 | PINMUX_IPSR_DATA(IP5_20_18, AUDSYNC), | ||
957 | PINMUX_IPSR_DATA(IP5_20_18, ARM_TRACECTL), | ||
958 | PINMUX_IPSR_MSEL(IP5_20_18, FMIN_D, SEL_FM_D), | ||
959 | |||
960 | PINMUX_IPSR_MSEL(IP5_22_21, SD1_CD_B, SEL_SD1_B), | ||
961 | PINMUX_IPSR_DATA(IP5_22_21, SSI_SCK78), | ||
962 | PINMUX_IPSR_MSEL(IP5_22_21, HSPI_RX0_B, SEL_HSPI0_B), | ||
963 | PINMUX_IPSR_DATA(IP5_22_21, TX1_B), | ||
964 | |||
965 | PINMUX_IPSR_MSEL(IP5_25_23, SD1_WP_B, SEL_SD1_B), | ||
966 | PINMUX_IPSR_DATA(IP5_25_23, SSI_WS78), | ||
967 | PINMUX_IPSR_MSEL(IP5_25_23, HSPI_CLK0_B, SEL_HSPI0_B), | ||
968 | PINMUX_IPSR_MSEL(IP5_25_23, RX1_B, SEL_SCIF1_B), | ||
969 | PINMUX_IPSR_MSEL(IP5_25_23, CAN_CLK_D, SEL_CANCLK_D), | ||
970 | |||
971 | PINMUX_IPSR_DATA(IP5_28_26, SSI_SDATA8), | ||
972 | PINMUX_IPSR_MSEL(IP5_28_26, SSI_SCK2_A, SEL_SSI2_A), | ||
973 | PINMUX_IPSR_MSEL(IP5_28_26, HSPI_CS0_B, SEL_HSPI0_B), | ||
974 | PINMUX_IPSR_DATA(IP5_28_26, TX2_A), | ||
975 | PINMUX_IPSR_DATA(IP5_28_26, CAN0_TX_B), | ||
976 | |||
977 | PINMUX_IPSR_DATA(IP5_30_29, SSI_SDATA7), | ||
978 | PINMUX_IPSR_DATA(IP5_30_29, HSPI_TX0_B), | ||
979 | PINMUX_IPSR_MSEL(IP5_30_29, RX2_A, SEL_SCIF2_A), | ||
980 | PINMUX_IPSR_MSEL(IP5_30_29, CAN0_RX_B, SEL_CAN0_B), | ||
981 | |||
982 | /* IPSR6 */ | ||
983 | PINMUX_IPSR_DATA(IP6_1_0, SSI_SCK6), | ||
984 | PINMUX_IPSR_MSEL(IP6_1_0, HSPI_RX2_A, SEL_HSPI2_A), | ||
985 | PINMUX_IPSR_MSEL(IP6_1_0, FMCLK_B, SEL_FM_B), | ||
986 | PINMUX_IPSR_DATA(IP6_1_0, CAN1_TX_B), | ||
987 | |||
988 | PINMUX_IPSR_DATA(IP6_4_2, SSI_WS6), | ||
989 | PINMUX_IPSR_MSEL(IP6_4_2, HSPI_CLK2_A, SEL_HSPI2_A), | ||
990 | PINMUX_IPSR_DATA(IP6_4_2, BPFCLK_B), | ||
991 | PINMUX_IPSR_MSEL(IP6_4_2, CAN1_RX_B, SEL_CAN1_B), | ||
992 | |||
993 | PINMUX_IPSR_DATA(IP6_6_5, SSI_SDATA6), | ||
994 | PINMUX_IPSR_DATA(IP6_6_5, HSPI_TX2_A), | ||
995 | PINMUX_IPSR_MSEL(IP6_6_5, FMIN_B, SEL_FM_B), | ||
996 | |||
997 | PINMUX_IPSR_DATA(IP6_7, SSI_SCK5), | ||
998 | PINMUX_IPSR_MSEL(IP6_7, RX4_C, SEL_SCIF4_C), | ||
999 | |||
1000 | PINMUX_IPSR_DATA(IP6_8, SSI_WS5), | ||
1001 | PINMUX_IPSR_DATA(IP6_8, TX4_C), | ||
1002 | |||
1003 | PINMUX_IPSR_DATA(IP6_9, SSI_SDATA5), | ||
1004 | PINMUX_IPSR_MSEL(IP6_9, RX0_D, SEL_SCIF0_D), | ||
1005 | |||
1006 | PINMUX_IPSR_DATA(IP6_10, SSI_WS34), | ||
1007 | PINMUX_IPSR_DATA(IP6_10, ARM_TRACEDATA_8), | ||
1008 | |||
1009 | PINMUX_IPSR_DATA(IP6_12_11, SSI_SDATA4), | ||
1010 | PINMUX_IPSR_MSEL(IP6_12_11, SSI_WS2_A, SEL_SSI2_A), | ||
1011 | PINMUX_IPSR_DATA(IP6_12_11, ARM_TRACEDATA_9), | ||
1012 | |||
1013 | PINMUX_IPSR_DATA(IP6_13, SSI_SDATA3), | ||
1014 | PINMUX_IPSR_DATA(IP6_13, ARM_TRACEDATA_10), | ||
1015 | |||
1016 | PINMUX_IPSR_DATA(IP6_15_14, SSI_SCK012), | ||
1017 | PINMUX_IPSR_DATA(IP6_15_14, ARM_TRACEDATA_11), | ||
1018 | PINMUX_IPSR_DATA(IP6_15_14, TX0_D), | ||
1019 | |||
1020 | PINMUX_IPSR_DATA(IP6_16, SSI_WS012), | ||
1021 | PINMUX_IPSR_DATA(IP6_16, ARM_TRACEDATA_12), | ||
1022 | |||
1023 | PINMUX_IPSR_DATA(IP6_18_17, SSI_SDATA2), | ||
1024 | PINMUX_IPSR_MSEL(IP6_18_17, HSPI_CS2_A, SEL_HSPI2_A), | ||
1025 | PINMUX_IPSR_DATA(IP6_18_17, ARM_TRACEDATA_13), | ||
1026 | PINMUX_IPSR_MSEL(IP6_18_17, SDA1_A, SEL_I2C1_A), | ||
1027 | |||
1028 | PINMUX_IPSR_DATA(IP6_20_19, SSI_SDATA1), | ||
1029 | PINMUX_IPSR_DATA(IP6_20_19, ARM_TRACEDATA_14), | ||
1030 | PINMUX_IPSR_MSEL(IP6_20_19, SCL1_A, SEL_I2C1_A), | ||
1031 | PINMUX_IPSR_MSEL(IP6_20_19, SCK2_A, SEL_SCIF2_A), | ||
1032 | |||
1033 | PINMUX_IPSR_DATA(IP6_21, SSI_SDATA0), | ||
1034 | PINMUX_IPSR_DATA(IP6_21, ARM_TRACEDATA_15), | ||
1035 | |||
1036 | PINMUX_IPSR_DATA(IP6_23_22, SD0_CLK), | ||
1037 | PINMUX_IPSR_DATA(IP6_23_22, SUB_TDO), | ||
1038 | |||
1039 | PINMUX_IPSR_DATA(IP6_25_24, SD0_CMD), | ||
1040 | PINMUX_IPSR_DATA(IP6_25_24, SUB_TRST), | ||
1041 | |||
1042 | PINMUX_IPSR_DATA(IP6_27_26, SD0_DAT0), | ||
1043 | PINMUX_IPSR_DATA(IP6_27_26, SUB_TMS), | ||
1044 | |||
1045 | PINMUX_IPSR_DATA(IP6_29_28, SD0_DAT1), | ||
1046 | PINMUX_IPSR_DATA(IP6_29_28, SUB_TCK), | ||
1047 | |||
1048 | PINMUX_IPSR_DATA(IP6_31_30, SD0_DAT2), | ||
1049 | PINMUX_IPSR_DATA(IP6_31_30, SUB_TDI), | ||
1050 | |||
1051 | /* IPSR7 */ | ||
1052 | PINMUX_IPSR_DATA(IP7_1_0, SD0_DAT3), | ||
1053 | PINMUX_IPSR_MSEL(IP7_1_0, IRQ1_B, SEL_IRQ1_B), | ||
1054 | |||
1055 | PINMUX_IPSR_DATA(IP7_3_2, SD0_CD), | ||
1056 | PINMUX_IPSR_DATA(IP7_3_2, TX5_A), | ||
1057 | |||
1058 | PINMUX_IPSR_DATA(IP7_5_4, SD0_WP), | ||
1059 | PINMUX_IPSR_MSEL(IP7_5_4, RX5_A, SEL_SCIF5_A), | ||
1060 | |||
1061 | PINMUX_IPSR_DATA(IP7_8_6, VI1_CLKENB), | ||
1062 | PINMUX_IPSR_MSEL(IP7_8_6, HSPI_CLK0_A, SEL_HSPI0_A), | ||
1063 | PINMUX_IPSR_DATA(IP7_8_6, HTX1_A), | ||
1064 | PINMUX_IPSR_MSEL(IP7_8_6, RTS1_C, SEL_SCIF1_C), | ||
1065 | |||
1066 | PINMUX_IPSR_DATA(IP7_11_9, VI1_FIELD), | ||
1067 | PINMUX_IPSR_MSEL(IP7_11_9, HSPI_CS0_A, SEL_HSPI0_A), | ||
1068 | PINMUX_IPSR_MSEL(IP7_11_9, HRX1_A, SEL_HSCIF1_A), | ||
1069 | PINMUX_IPSR_MSEL(IP7_11_9, SCK1_C, SEL_SCIF1_C), | ||
1070 | |||
1071 | PINMUX_IPSR_DATA(IP7_14_12, VI1_HSYNC), | ||
1072 | PINMUX_IPSR_MSEL(IP7_14_12, HSPI_RX0_A, SEL_HSPI0_A), | ||
1073 | PINMUX_IPSR_MSEL(IP7_14_12, HRTS1_A, SEL_HSCIF1_A), | ||
1074 | PINMUX_IPSR_MSEL(IP7_14_12, FMCLK_A, SEL_FM_A), | ||
1075 | PINMUX_IPSR_MSEL(IP7_14_12, RX1_C, SEL_SCIF1_C), | ||
1076 | |||
1077 | PINMUX_IPSR_DATA(IP7_17_15, VI1_VSYNC), | ||
1078 | PINMUX_IPSR_DATA(IP7_17_15, HSPI_TX0), | ||
1079 | PINMUX_IPSR_MSEL(IP7_17_15, HCTS1_A, SEL_HSCIF1_A), | ||
1080 | PINMUX_IPSR_DATA(IP7_17_15, BPFCLK_A), | ||
1081 | PINMUX_IPSR_DATA(IP7_17_15, TX1_C), | ||
1082 | |||
1083 | PINMUX_IPSR_DATA(IP7_20_18, TCLK0), | ||
1084 | PINMUX_IPSR_MSEL(IP7_20_18, HSCK1_A, SEL_HSCIF1_A), | ||
1085 | PINMUX_IPSR_MSEL(IP7_20_18, FMIN_A, SEL_FM_A), | ||
1086 | PINMUX_IPSR_MSEL(IP7_20_18, IRQ2_C, SEL_IRQ2_C), | ||
1087 | PINMUX_IPSR_MSEL(IP7_20_18, CTS1_C, SEL_SCIF1_C), | ||
1088 | PINMUX_IPSR_DATA(IP7_20_18, SPEEDIN), | ||
1089 | |||
1090 | PINMUX_IPSR_DATA(IP7_21, VI0_CLK), | ||
1091 | PINMUX_IPSR_MSEL(IP7_21, CAN_CLK_A, SEL_CANCLK_A), | ||
1092 | |||
1093 | PINMUX_IPSR_DATA(IP7_24_22, VI0_CLKENB), | ||
1094 | PINMUX_IPSR_MSEL(IP7_24_22, SD2_DAT2_B, SEL_SD2_B), | ||
1095 | PINMUX_IPSR_DATA(IP7_24_22, VI1_DATA0), | ||
1096 | PINMUX_IPSR_DATA(IP7_24_22, DU1_DG6), | ||
1097 | PINMUX_IPSR_MSEL(IP7_24_22, HSPI_RX1_A, SEL_HSPI1_A), | ||
1098 | PINMUX_IPSR_MSEL(IP7_24_22, RX4_B, SEL_SCIF4_B), | ||
1099 | |||
1100 | PINMUX_IPSR_DATA(IP7_28_25, VI0_FIELD), | ||
1101 | PINMUX_IPSR_MSEL(IP7_28_25, SD2_DAT3_B, SEL_SD2_B), | ||
1102 | PINMUX_DATA(VI0_R3_C_MARK, FN_IP7_28_25, FN_VI0_R3_C, FN_SEL_VI0_C), /* see sel_vi0 */ | ||
1103 | PINMUX_DATA(VI0_R3_D_MARK, FN_IP7_28_25, FN_VI0_R3_C, FN_SEL_VI0_D), /* see sel_vi0 */ | ||
1104 | PINMUX_IPSR_DATA(IP7_28_25, VI1_DATA1), | ||
1105 | PINMUX_IPSR_DATA(IP7_28_25, DU1_DG7), | ||
1106 | PINMUX_IPSR_MSEL(IP7_28_25, HSPI_CLK1_A, SEL_HSPI1_A), | ||
1107 | PINMUX_IPSR_DATA(IP7_28_25, TX4_B), | ||
1108 | |||
1109 | PINMUX_IPSR_DATA(IP7_31_29, VI0_HSYNC), | ||
1110 | PINMUX_IPSR_MSEL(IP7_31_29, SD2_CD_B, SEL_SD2_B), | ||
1111 | PINMUX_IPSR_DATA(IP7_31_29, VI1_DATA2), | ||
1112 | PINMUX_IPSR_DATA(IP7_31_29, DU1_DR2), | ||
1113 | PINMUX_IPSR_MSEL(IP7_31_29, HSPI_CS1_A, SEL_HSPI1_A), | ||
1114 | PINMUX_IPSR_MSEL(IP7_31_29, RX3_B, SEL_SCIF3_B), | ||
1115 | |||
1116 | /* IPSR8 */ | ||
1117 | PINMUX_IPSR_DATA(IP8_2_0, VI0_VSYNC), | ||
1118 | PINMUX_IPSR_MSEL(IP8_2_0, SD2_WP_B, SEL_SD2_B), | ||
1119 | PINMUX_IPSR_DATA(IP8_2_0, VI1_DATA3), | ||
1120 | PINMUX_IPSR_DATA(IP8_2_0, DU1_DR3), | ||
1121 | PINMUX_IPSR_DATA(IP8_2_0, HSPI_TX1_A), | ||
1122 | PINMUX_IPSR_DATA(IP8_2_0, TX3_B), | ||
1123 | |||
1124 | PINMUX_IPSR_DATA(IP8_5_3, VI0_DATA0_VI0_B0), | ||
1125 | PINMUX_IPSR_DATA(IP8_5_3, DU1_DG2), | ||
1126 | PINMUX_IPSR_MSEL(IP8_5_3, IRQ2_B, SEL_IRQ2_B), | ||
1127 | PINMUX_IPSR_MSEL(IP8_5_3, RX3_D, SEL_SCIF3_D), | ||
1128 | |||
1129 | PINMUX_IPSR_DATA(IP8_8_6, VI0_DATA1_VI0_B1), | ||
1130 | PINMUX_IPSR_DATA(IP8_8_6, DU1_DG3), | ||
1131 | PINMUX_IPSR_MSEL(IP8_8_6, IRQ3_B, SEL_IRQ3_B), | ||
1132 | PINMUX_IPSR_DATA(IP8_8_6, TX3_D), | ||
1133 | |||
1134 | PINMUX_IPSR_DATA(IP8_10_9, VI0_DATA2_VI0_B2), | ||
1135 | PINMUX_IPSR_DATA(IP8_10_9, DU1_DG4), | ||
1136 | PINMUX_IPSR_MSEL(IP8_10_9, RX0_C, SEL_SCIF0_C), | ||
1137 | |||
1138 | PINMUX_IPSR_DATA(IP8_13_11, VI0_DATA3_VI0_B3), | ||
1139 | PINMUX_IPSR_DATA(IP8_13_11, DU1_DG5), | ||
1140 | PINMUX_IPSR_DATA(IP8_13_11, TX1_A), | ||
1141 | PINMUX_IPSR_DATA(IP8_13_11, TX0_C), | ||
1142 | |||
1143 | PINMUX_IPSR_DATA(IP8_15_14, VI0_DATA4_VI0_B4), | ||
1144 | PINMUX_IPSR_DATA(IP8_15_14, DU1_DB2), | ||
1145 | PINMUX_IPSR_MSEL(IP8_15_14, RX1_A, SEL_SCIF1_A), | ||
1146 | |||
1147 | PINMUX_IPSR_DATA(IP8_18_16, VI0_DATA5_VI0_B5), | ||
1148 | PINMUX_IPSR_DATA(IP8_18_16, DU1_DB3), | ||
1149 | PINMUX_IPSR_MSEL(IP8_18_16, SCK1_A, SEL_SCIF1_A), | ||
1150 | PINMUX_IPSR_DATA(IP8_18_16, PWM4), | ||
1151 | PINMUX_IPSR_MSEL(IP8_18_16, HSCK1_B, SEL_HSCIF1_B), | ||
1152 | |||
1153 | PINMUX_IPSR_DATA(IP8_21_19, VI0_DATA6_VI0_G0), | ||
1154 | PINMUX_IPSR_DATA(IP8_21_19, DU1_DB4), | ||
1155 | PINMUX_IPSR_MSEL(IP8_21_19, CTS1_A, SEL_SCIF1_A), | ||
1156 | PINMUX_IPSR_DATA(IP8_21_19, PWM5), | ||
1157 | |||
1158 | PINMUX_IPSR_DATA(IP8_23_22, VI0_DATA7_VI0_G1), | ||
1159 | PINMUX_IPSR_DATA(IP8_23_22, DU1_DB5), | ||
1160 | PINMUX_IPSR_MSEL(IP8_23_22, RTS1_A, SEL_SCIF1_A), | ||
1161 | |||
1162 | PINMUX_IPSR_DATA(IP8_26_24, VI0_G2), | ||
1163 | PINMUX_IPSR_DATA(IP8_26_24, SD2_CLK_B), | ||
1164 | PINMUX_IPSR_DATA(IP8_26_24, VI1_DATA4), | ||
1165 | PINMUX_IPSR_DATA(IP8_26_24, DU1_DR4), | ||
1166 | PINMUX_IPSR_DATA(IP8_26_24, HTX1_B), | ||
1167 | |||
1168 | PINMUX_IPSR_DATA(IP8_29_27, VI0_G3), | ||
1169 | PINMUX_IPSR_MSEL(IP8_29_27, SD2_CMD_B, SEL_SD2_B), | ||
1170 | PINMUX_IPSR_DATA(IP8_29_27, VI1_DATA5), | ||
1171 | PINMUX_IPSR_DATA(IP8_29_27, DU1_DR5), | ||
1172 | PINMUX_IPSR_MSEL(IP8_29_27, HRX1_B, SEL_HSCIF1_B), | ||
1173 | |||
1174 | /* IPSR9 */ | ||
1175 | PINMUX_IPSR_DATA(IP9_2_0, VI0_G4), | ||
1176 | PINMUX_IPSR_MSEL(IP9_2_0, SD2_DAT0_B, SEL_SD2_B), | ||
1177 | PINMUX_IPSR_DATA(IP9_2_0, VI1_DATA6), | ||
1178 | PINMUX_IPSR_DATA(IP9_2_0, DU1_DR6), | ||
1179 | PINMUX_IPSR_MSEL(IP9_2_0, HRTS1_B, SEL_HSCIF1_B), | ||
1180 | |||
1181 | PINMUX_IPSR_DATA(IP9_5_3, VI0_G5), | ||
1182 | PINMUX_IPSR_MSEL(IP9_5_3, SD2_DAT1_B, SEL_SD2_B), | ||
1183 | PINMUX_IPSR_DATA(IP9_5_3, VI1_DATA7), | ||
1184 | PINMUX_IPSR_DATA(IP9_5_3, DU1_DR7), | ||
1185 | PINMUX_IPSR_MSEL(IP9_5_3, HCTS1_B, SEL_HSCIF1_B), | ||
1186 | |||
1187 | PINMUX_DATA(VI0_R0_A_MARK, FN_IP9_8_6, FN_VI0_R0_A, FN_SEL_VI0_A), /* see sel_vi0 */ | ||
1188 | PINMUX_DATA(VI0_R0_C_MARK, FN_IP9_8_6, FN_VI0_R0_A, FN_SEL_VI0_C), /* see sel_vi0 */ | ||
1189 | PINMUX_IPSR_DATA(IP9_8_6, VI1_CLK), | ||
1190 | PINMUX_IPSR_DATA(IP9_8_6, ETH_REF_CLK), | ||
1191 | PINMUX_IPSR_DATA(IP9_8_6, DU1_DOTCLKIN), | ||
1192 | |||
1193 | PINMUX_DATA(VI0_R1_A_MARK, FN_IP9_11_9, FN_VI0_R1_A, FN_SEL_VI0_A), /* see sel_vi0 */ | ||
1194 | PINMUX_DATA(VI0_R1_C_MARK, FN_IP9_11_9, FN_VI0_R1_A, FN_SEL_VI0_C), /* see sel_vi0 */ | ||
1195 | PINMUX_IPSR_DATA(IP9_11_9, VI1_DATA8), | ||
1196 | PINMUX_IPSR_DATA(IP9_11_9, DU1_DB6), | ||
1197 | PINMUX_IPSR_DATA(IP9_11_9, ETH_TXD0), | ||
1198 | PINMUX_IPSR_DATA(IP9_11_9, PWM2), | ||
1199 | PINMUX_IPSR_DATA(IP9_11_9, TCLK1), | ||
1200 | |||
1201 | PINMUX_DATA(VI0_R2_A_MARK, FN_IP9_14_12, FN_VI0_R2_A, FN_SEL_VI0_A), /* see sel_vi0 */ | ||
1202 | PINMUX_DATA(VI0_R2_C_MARK, FN_IP9_14_12, FN_VI0_R2_A, FN_SEL_VI0_C), /* see sel_vi0 */ | ||
1203 | PINMUX_IPSR_DATA(IP9_14_12, VI1_DATA9), | ||
1204 | PINMUX_IPSR_DATA(IP9_14_12, DU1_DB7), | ||
1205 | PINMUX_IPSR_DATA(IP9_14_12, ETH_TXD1), | ||
1206 | PINMUX_IPSR_DATA(IP9_14_12, PWM3), | ||
1207 | |||
1208 | PINMUX_IPSR_MSEL(IP9_17_15, VI0_R3_A, SEL_VI0_A), | ||
1209 | PINMUX_IPSR_DATA(IP9_17_15, ETH_CRS_DV), | ||
1210 | PINMUX_IPSR_DATA(IP9_17_15, IECLK), | ||
1211 | PINMUX_IPSR_MSEL(IP9_17_15, SCK2_C, SEL_SCIF2_C), | ||
1212 | |||
1213 | PINMUX_DATA(VI0_R4_A_MARK, FN_IP9_20_18, FN_VI0_R4_A, FN_SEL_VI0_A), /* see sel_vi0 */ | ||
1214 | PINMUX_DATA(VI0_R3_C_MARK, FN_IP9_20_18, FN_VI0_R4_A, FN_SEL_VI0_C), /* see sel_vi0 */ | ||
1215 | PINMUX_IPSR_DATA(IP9_20_18, ETH_TX_EN), | ||
1216 | PINMUX_IPSR_DATA(IP9_20_18, IETX), | ||
1217 | PINMUX_IPSR_DATA(IP9_20_18, TX2_C), | ||
1218 | |||
1219 | PINMUX_DATA(VI0_R5_A_MARK, FN_IP9_23_21, FN_VI0_R5_A, FN_SEL_VI0_A), /* see sel_vi0 */ | ||
1220 | PINMUX_DATA(VI0_R5_C_MARK, FN_IP9_23_21, FN_VI0_R5_A, FN_SEL_VI0_C), /* see sel_vi0 */ | ||
1221 | PINMUX_IPSR_DATA(IP9_23_21, ETH_RX_ER), | ||
1222 | PINMUX_IPSR_MSEL(IP9_23_21, FMCLK_C, SEL_FM_C), | ||
1223 | PINMUX_IPSR_DATA(IP9_23_21, IERX), | ||
1224 | PINMUX_IPSR_MSEL(IP9_23_21, RX2_C, SEL_SCIF2_C), | ||
1225 | |||
1226 | PINMUX_IPSR_MSEL(IP9_26_24, VI1_DATA10_A, SEL_VI1_A), | ||
1227 | PINMUX_IPSR_DATA(IP9_26_24, DU1_DOTCLKOUT), | ||
1228 | PINMUX_IPSR_DATA(IP9_26_24, ETH_RXD0), | ||
1229 | PINMUX_IPSR_DATA(IP9_26_24, BPFCLK_C), | ||
1230 | PINMUX_IPSR_DATA(IP9_26_24, TX2_D), | ||
1231 | PINMUX_IPSR_MSEL(IP9_26_24, SDA2_C, SEL_I2C2_C), | ||
1232 | |||
1233 | PINMUX_IPSR_MSEL(IP9_29_27, VI1_DATA11_A, SEL_VI1_A), | ||
1234 | PINMUX_IPSR_DATA(IP9_29_27, DU1_EXHSYNC_DU1_HSYNC), | ||
1235 | PINMUX_IPSR_DATA(IP9_29_27, ETH_RXD1), | ||
1236 | PINMUX_IPSR_MSEL(IP9_29_27, FMIN_C, SEL_FM_C), | ||
1237 | PINMUX_IPSR_MSEL(IP9_29_27, RX2_D, SEL_SCIF2_D), | ||
1238 | PINMUX_IPSR_MSEL(IP9_29_27, SCL2_C, SEL_I2C2_C), | ||
1239 | |||
1240 | /* IPSR10 */ | ||
1241 | PINMUX_IPSR_DATA(IP10_2_0, SD2_CLK_A), | ||
1242 | PINMUX_IPSR_DATA(IP10_2_0, DU1_EXVSYNC_DU1_VSYNC), | ||
1243 | PINMUX_IPSR_DATA(IP10_2_0, ATARD1), | ||
1244 | PINMUX_IPSR_DATA(IP10_2_0, ETH_MDC), | ||
1245 | PINMUX_IPSR_MSEL(IP10_2_0, SDA1_B, SEL_I2C1_B), | ||
1246 | |||
1247 | PINMUX_IPSR_MSEL(IP10_5_3, SD2_CMD_A, SEL_SD2_A), | ||
1248 | PINMUX_IPSR_DATA(IP10_5_3, DU1_EXODDF_DU1_ODDF_DISP_CDE), | ||
1249 | PINMUX_IPSR_DATA(IP10_5_3, ATAWR1), | ||
1250 | PINMUX_IPSR_DATA(IP10_5_3, ETH_MDIO), | ||
1251 | PINMUX_IPSR_MSEL(IP10_5_3, SCL1_B, SEL_I2C1_B), | ||
1252 | |||
1253 | PINMUX_IPSR_MSEL(IP10_8_6, SD2_DAT0_A, SEL_SD2_A), | ||
1254 | PINMUX_IPSR_DATA(IP10_8_6, DU1_DISP), | ||
1255 | PINMUX_IPSR_DATA(IP10_8_6, ATACS01), | ||
1256 | PINMUX_IPSR_MSEL(IP10_8_6, DREQ1_B, SEL_DREQ1_B), | ||
1257 | PINMUX_IPSR_DATA(IP10_8_6, ETH_LINK), | ||
1258 | PINMUX_IPSR_MSEL(IP10_8_6, CAN1_RX_A, SEL_CAN1_A), | ||
1259 | |||
1260 | PINMUX_IPSR_MSEL(IP10_12_9, SD2_DAT1_A, SEL_SD2_A), | ||
1261 | PINMUX_IPSR_DATA(IP10_12_9, DU1_CDE), | ||
1262 | PINMUX_IPSR_DATA(IP10_12_9, ATACS11), | ||
1263 | PINMUX_IPSR_DATA(IP10_12_9, DACK1_B), | ||
1264 | PINMUX_IPSR_DATA(IP10_12_9, ETH_MAGIC), | ||
1265 | PINMUX_IPSR_DATA(IP10_12_9, CAN1_TX_A), | ||
1266 | PINMUX_IPSR_DATA(IP10_12_9, PWM6), | ||
1267 | |||
1268 | PINMUX_IPSR_MSEL(IP10_15_13, SD2_DAT2_A, SEL_SD2_A), | ||
1269 | PINMUX_IPSR_DATA(IP10_15_13, VI1_DATA12), | ||
1270 | PINMUX_IPSR_MSEL(IP10_15_13, DREQ2_B, SEL_DREQ2_B), | ||
1271 | PINMUX_IPSR_DATA(IP10_15_13, ATADIR1), | ||
1272 | PINMUX_IPSR_MSEL(IP10_15_13, HSPI_CLK2_B, SEL_HSPI2_B), | ||
1273 | PINMUX_IPSR_MSEL(IP10_15_13, GPSCLK_B, SEL_GPS_B), | ||
1274 | |||
1275 | PINMUX_IPSR_MSEL(IP10_18_16, SD2_DAT3_A, SEL_SD2_A), | ||
1276 | PINMUX_IPSR_DATA(IP10_18_16, VI1_DATA13), | ||
1277 | PINMUX_IPSR_DATA(IP10_18_16, DACK2_B), | ||
1278 | PINMUX_IPSR_DATA(IP10_18_16, ATAG1), | ||
1279 | PINMUX_IPSR_MSEL(IP10_18_16, HSPI_CS2_B, SEL_HSPI2_B), | ||
1280 | PINMUX_IPSR_MSEL(IP10_18_16, GPSIN_B, SEL_GPS_B), | ||
1281 | |||
1282 | PINMUX_IPSR_MSEL(IP10_21_19, SD2_CD_A, SEL_SD2_A), | ||
1283 | PINMUX_IPSR_DATA(IP10_21_19, VI1_DATA14), | ||
1284 | PINMUX_IPSR_MSEL(IP10_21_19, EX_WAIT1_B, SEL_WAIT1_B), | ||
1285 | PINMUX_IPSR_MSEL(IP10_21_19, DREQ0_B, SEL_DREQ0_B), | ||
1286 | PINMUX_IPSR_MSEL(IP10_21_19, HSPI_RX2_B, SEL_HSPI2_B), | ||
1287 | PINMUX_IPSR_MSEL(IP10_21_19, REMOCON_A, SEL_REMOCON_A), | ||
1288 | |||
1289 | PINMUX_IPSR_MSEL(IP10_24_22, SD2_WP_A, SEL_SD2_A), | ||
1290 | PINMUX_IPSR_DATA(IP10_24_22, VI1_DATA15), | ||
1291 | PINMUX_IPSR_MSEL(IP10_24_22, EX_WAIT2_B, SEL_WAIT2_B), | ||
1292 | PINMUX_IPSR_DATA(IP10_24_22, DACK0_B), | ||
1293 | PINMUX_IPSR_DATA(IP10_24_22, HSPI_TX2_B), | ||
1294 | PINMUX_IPSR_MSEL(IP10_24_22, CAN_CLK_C, SEL_CANCLK_C), | ||
1295 | }; | ||
1296 | |||
1297 | static struct sh_pfc_pin pinmux_pins[] = { | ||
1298 | PINMUX_GPIO_GP_ALL(), | ||
1299 | }; | ||
1300 | |||
1301 | /* Pin numbers for pins without a corresponding GPIO port number are computed | ||
1302 | * from the row and column numbers with a 1000 offset to avoid collisions with | ||
1303 | * GPIO port numbers. | ||
1304 | */ | ||
1305 | #define PIN_NUMBER(row, col) (1000+((row)-1)*25+(col)-1) | ||
1306 | |||
1307 | /* - macro */ | ||
1308 | #define SH_PFC_PINS(name, args...) \ | ||
1309 | static const unsigned int name ##_pins[] = { args } | ||
1310 | #define SH_PFC_MUX1(name, arg1) \ | ||
1311 | static const unsigned int name ##_mux[] = { arg1##_MARK } | ||
1312 | #define SH_PFC_MUX2(name, arg1, arg2) \ | ||
1313 | static const unsigned int name ##_mux[] = { arg1##_MARK, arg2##_MARK, } | ||
1314 | #define SH_PFC_MUX3(name, arg1, arg2, arg3) \ | ||
1315 | static const unsigned int name ##_mux[] = { arg1##_MARK, arg2##_MARK, \ | ||
1316 | arg3##_MARK } | ||
1317 | #define SH_PFC_MUX4(name, arg1, arg2, arg3, arg4) \ | ||
1318 | static const unsigned int name ##_mux[] = { arg1##_MARK, arg2##_MARK, \ | ||
1319 | arg3##_MARK, arg4##_MARK } | ||
1320 | #define SH_PFC_MUX8(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \ | ||
1321 | static const unsigned int name ##_mux[] = { arg1##_MARK, arg2##_MARK, \ | ||
1322 | arg3##_MARK, arg4##_MARK, \ | ||
1323 | arg5##_MARK, arg6##_MARK, \ | ||
1324 | arg7##_MARK, arg8##_MARK, } | ||
1325 | |||
1326 | /* - Ether ------------------------------------------------------------------ */ | ||
1327 | SH_PFC_PINS(ether_rmii, RCAR_GP_PIN(4, 10), RCAR_GP_PIN(4, 11), | ||
1328 | RCAR_GP_PIN(4, 13), RCAR_GP_PIN(4, 9), | ||
1329 | RCAR_GP_PIN(4, 15), RCAR_GP_PIN(4, 16), | ||
1330 | RCAR_GP_PIN(4, 12), RCAR_GP_PIN(4, 14), | ||
1331 | RCAR_GP_PIN(4, 18), RCAR_GP_PIN(4, 17)); | ||
1332 | static const unsigned int ether_rmii_mux[] = { | ||
1333 | ETH_TXD0_MARK, ETH_TXD1_MARK, ETH_TX_EN_MARK, ETH_REF_CLK_MARK, | ||
1334 | ETH_RXD0_MARK, ETH_RXD1_MARK, ETH_CRS_DV_MARK, ETH_RX_ER_MARK, | ||
1335 | ETH_MDIO_MARK, ETH_MDC_MARK, | ||
1336 | }; | ||
1337 | SH_PFC_PINS(ether_link, RCAR_GP_PIN(4, 19)); | ||
1338 | SH_PFC_MUX1(ether_link, ETH_LINK); | ||
1339 | SH_PFC_PINS(ether_magic, RCAR_GP_PIN(4, 20)); | ||
1340 | SH_PFC_MUX1(ether_magic, ETH_MAGIC); | ||
1341 | |||
1342 | /* - SCIF macro ------------------------------------------------------------- */ | ||
1343 | #define SCIF_PFC_PIN(name, args...) SH_PFC_PINS(name, args) | ||
1344 | #define SCIF_PFC_DAT(name, tx, rx) SH_PFC_MUX2(name, tx, rx) | ||
1345 | #define SCIF_PFC_CTR(name, cts, rts) SH_PFC_MUX2(name, cts, rts) | ||
1346 | #define SCIF_PFC_CLK(name, sck) SH_PFC_MUX1(name, sck) | ||
1347 | |||
1348 | /* - HSCIF0 ----------------------------------------------------------------- */ | ||
1349 | SCIF_PFC_PIN(hscif0_data_a, RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 18)); | ||
1350 | SCIF_PFC_DAT(hscif0_data_a, HTX0_A, HRX0_A); | ||
1351 | SCIF_PFC_PIN(hscif0_data_b, RCAR_GP_PIN(0, 29), RCAR_GP_PIN(0, 30)); | ||
1352 | SCIF_PFC_DAT(hscif0_data_b, HTX0_B, HRX0_B); | ||
1353 | SCIF_PFC_PIN(hscif0_ctrl_a, RCAR_GP_PIN(1, 20), RCAR_GP_PIN(1, 21)); | ||
1354 | SCIF_PFC_CTR(hscif0_ctrl_a, HCTS0_A, HRTS0_A); | ||
1355 | SCIF_PFC_PIN(hscif0_ctrl_b, RCAR_GP_PIN(0, 31), RCAR_GP_PIN(0, 28)); | ||
1356 | SCIF_PFC_CTR(hscif0_ctrl_b, HCTS0_B, HRTS0_B); | ||
1357 | SCIF_PFC_PIN(hscif0_clk, RCAR_GP_PIN(1, 19)); | ||
1358 | SCIF_PFC_CLK(hscif0_clk, HSCK0); | ||
1359 | |||
1360 | /* - HSCIF1 ----------------------------------------------------------------- */ | ||
1361 | SCIF_PFC_PIN(hscif1_data_a, RCAR_GP_PIN(3, 19), RCAR_GP_PIN(3, 20)); | ||
1362 | SCIF_PFC_DAT(hscif1_data_a, HTX1_A, HRX1_A); | ||
1363 | SCIF_PFC_PIN(hscif1_data_b, RCAR_GP_PIN(4, 5), RCAR_GP_PIN(4, 6)); | ||
1364 | SCIF_PFC_DAT(hscif1_data_b, HTX1_B, HRX1_B); | ||
1365 | SCIF_PFC_PIN(hscif1_ctrl_a, RCAR_GP_PIN(3, 22), RCAR_GP_PIN(3, 21)); | ||
1366 | SCIF_PFC_CTR(hscif1_ctrl_a, HCTS1_A, HRTS1_A); | ||
1367 | SCIF_PFC_PIN(hscif1_ctrl_b, RCAR_GP_PIN(4, 8), RCAR_GP_PIN(4, 7)); | ||
1368 | SCIF_PFC_CTR(hscif1_ctrl_b, HCTS1_B, HRTS1_B); | ||
1369 | SCIF_PFC_PIN(hscif1_clk_a, RCAR_GP_PIN(3, 23)); | ||
1370 | SCIF_PFC_CLK(hscif1_clk_a, HSCK1_A); | ||
1371 | SCIF_PFC_PIN(hscif1_clk_b, RCAR_GP_PIN(4, 2)); | ||
1372 | SCIF_PFC_CLK(hscif1_clk_b, HSCK1_B); | ||
1373 | |||
1374 | /* - HSPI macro --------------------------------------------------------------*/ | ||
1375 | #define HSPI_PFC_PIN(name, args...) SH_PFC_PINS(name, args) | ||
1376 | #define HSPI_PFC_DAT(name, clk, cs, rx, tx) SH_PFC_MUX4(name, clk, cs, rx, tx) | ||
1377 | |||
1378 | /* - HSPI0 -------------------------------------------------------------------*/ | ||
1379 | HSPI_PFC_PIN(hspi0_a, RCAR_GP_PIN(3, 19), RCAR_GP_PIN(3, 20), | ||
1380 | RCAR_GP_PIN(3, 21), RCAR_GP_PIN(3, 22)); | ||
1381 | HSPI_PFC_DAT(hspi0_a, HSPI_CLK0_A, HSPI_CS0_A, | ||
1382 | HSPI_RX0_A, HSPI_TX0); | ||
1383 | |||
1384 | HSPI_PFC_PIN(hspi0_b, RCAR_GP_PIN(2, 25), RCAR_GP_PIN(2, 26), | ||
1385 | RCAR_GP_PIN(2, 24), RCAR_GP_PIN(2, 27)); | ||
1386 | HSPI_PFC_DAT(hspi0_b, HSPI_CLK0_B, HSPI_CS0_B, | ||
1387 | HSPI_RX0_B, HSPI_TX0_B); | ||
1388 | |||
1389 | /* - HSPI1 -------------------------------------------------------------------*/ | ||
1390 | HSPI_PFC_PIN(hspi1_a, RCAR_GP_PIN(3, 26), RCAR_GP_PIN(3, 27), | ||
1391 | RCAR_GP_PIN(3, 25), RCAR_GP_PIN(3, 28)); | ||
1392 | HSPI_PFC_DAT(hspi1_a, HSPI_CLK1_A, HSPI_CS1_A, | ||
1393 | HSPI_RX1_A, HSPI_TX1_A); | ||
1394 | |||
1395 | HSPI_PFC_PIN(hspi1_b, RCAR_GP_PIN(0, 27), RCAR_GP_PIN(0, 26), | ||
1396 | PIN_NUMBER(20, 1), PIN_NUMBER(25, 2)); | ||
1397 | HSPI_PFC_DAT(hspi1_b, HSPI_CLK1_B, HSPI_CS1_B, | ||
1398 | HSPI_RX1_B, HSPI_TX1_B); | ||
1399 | |||
1400 | /* - HSPI2 -------------------------------------------------------------------*/ | ||
1401 | HSPI_PFC_PIN(hspi2_a, RCAR_GP_PIN(2, 29), RCAR_GP_PIN(3, 8), | ||
1402 | RCAR_GP_PIN(2, 28), RCAR_GP_PIN(2, 30)); | ||
1403 | HSPI_PFC_DAT(hspi2_a, HSPI_CLK2_A, HSPI_CS2_A, | ||
1404 | HSPI_RX2_A, HSPI_TX2_A); | ||
1405 | |||
1406 | HSPI_PFC_PIN(hspi2_b, RCAR_GP_PIN(4, 21), RCAR_GP_PIN(4, 22), | ||
1407 | RCAR_GP_PIN(4, 23), RCAR_GP_PIN(4, 24)); | ||
1408 | HSPI_PFC_DAT(hspi2_b, HSPI_CLK2_B, HSPI_CS2_B, | ||
1409 | HSPI_RX2_B, HSPI_TX2_B); | ||
1410 | |||
1411 | /* - I2C macro ------------------------------------------------------------- */ | ||
1412 | #define I2C_PFC_PIN(name, args...) SH_PFC_PINS(name, args) | ||
1413 | #define I2C_PFC_MUX(name, sda, scl) SH_PFC_MUX2(name, sda, scl) | ||
1414 | |||
1415 | /* - I2C1 ------------------------------------------------------------------ */ | ||
1416 | I2C_PFC_PIN(i2c1_a, RCAR_GP_PIN(3, 8), RCAR_GP_PIN(3, 9)); | ||
1417 | I2C_PFC_MUX(i2c1_a, SDA1_A, SCL1_A); | ||
1418 | I2C_PFC_PIN(i2c1_b, RCAR_GP_PIN(4, 17), RCAR_GP_PIN(4, 18)); | ||
1419 | I2C_PFC_MUX(i2c1_b, SDA1_B, SCL1_B); | ||
1420 | |||
1421 | /* - I2C2 ------------------------------------------------------------------ */ | ||
1422 | I2C_PFC_PIN(i2c2_a, PIN_NUMBER(3, 20), RCAR_GP_PIN(1, 3)); | ||
1423 | I2C_PFC_MUX(i2c2_a, SDA2_A, SCL2_A); | ||
1424 | I2C_PFC_PIN(i2c2_b, RCAR_GP_PIN(0, 3), RCAR_GP_PIN(0, 4)); | ||
1425 | I2C_PFC_MUX(i2c2_b, SDA2_B, SCL2_B); | ||
1426 | I2C_PFC_PIN(i2c2_c, RCAR_GP_PIN(4, 15), RCAR_GP_PIN(4, 16)); | ||
1427 | I2C_PFC_MUX(i2c2_c, SDA2_C, SCL2_C); | ||
1428 | |||
1429 | /* - I2C3 ------------------------------------------------------------------ */ | ||
1430 | I2C_PFC_PIN(i2c3_a, RCAR_GP_PIN(1, 14), RCAR_GP_PIN(1, 15)); | ||
1431 | I2C_PFC_MUX(i2c3_a, SDA3_A, SCL3_A); | ||
1432 | I2C_PFC_PIN(i2c3_b, RCAR_GP_PIN(1, 16), RCAR_GP_PIN(1, 19)); | ||
1433 | I2C_PFC_MUX(i2c3_b, SDA3_B, SCL3_B); | ||
1434 | I2C_PFC_PIN(i2c3_c, RCAR_GP_PIN(1, 22), RCAR_GP_PIN(1, 23)); | ||
1435 | I2C_PFC_MUX(i2c3_c, SDA3_C, SCL3_C); | ||
1436 | |||
1437 | /* - MMC macro -------------------------------------------------------------- */ | ||
1438 | #define MMC_PFC_PINS(name, args...) SH_PFC_PINS(name, args) | ||
1439 | #define MMC_PFC_CTRL(name, clk, cmd) SH_PFC_MUX2(name, clk, cmd) | ||
1440 | #define MMC_PFC_DAT1(name, d0) SH_PFC_MUX1(name, d0) | ||
1441 | #define MMC_PFC_DAT4(name, d0, d1, d2, d3) SH_PFC_MUX4(name, d0, d1, d2, d3) | ||
1442 | #define MMC_PFC_DAT8(name, d0, d1, d2, d3, d4, d5, d6, d7) \ | ||
1443 | SH_PFC_MUX8(name, d0, d1, d2, d3, d4, d5, d6, d7) | ||
1444 | |||
1445 | /* - MMC -------------------------------------------------------------------- */ | ||
1446 | MMC_PFC_PINS(mmc_ctrl, RCAR_GP_PIN(1, 5), RCAR_GP_PIN(1, 6)); | ||
1447 | MMC_PFC_CTRL(mmc_ctrl, MMC_CLK, MMC_CMD); | ||
1448 | MMC_PFC_PINS(mmc_data1, RCAR_GP_PIN(1, 7)); | ||
1449 | MMC_PFC_DAT1(mmc_data1, MMC_D0); | ||
1450 | MMC_PFC_PINS(mmc_data4, RCAR_GP_PIN(1, 7), RCAR_GP_PIN(2, 8), | ||
1451 | RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 6)); | ||
1452 | MMC_PFC_DAT4(mmc_data4, MMC_D0, MMC_D1, | ||
1453 | MMC_D2, MMC_D3); | ||
1454 | MMC_PFC_PINS(mmc_data8, RCAR_GP_PIN(1, 7), RCAR_GP_PIN(2, 8), | ||
1455 | RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 6), | ||
1456 | RCAR_GP_PIN(1, 4), RCAR_GP_PIN(1, 0), | ||
1457 | RCAR_GP_PIN(0, 30), RCAR_GP_PIN(0, 31)); | ||
1458 | MMC_PFC_DAT8(mmc_data8, MMC_D0, MMC_D1, | ||
1459 | MMC_D2, MMC_D3, | ||
1460 | MMC_D4, MMC_D5, | ||
1461 | MMC_D6, MMC_D7); | ||
1462 | |||
1463 | /* - SCIF CLOCK ------------------------------------------------------------- */ | ||
1464 | SCIF_PFC_PIN(scif_clk, RCAR_GP_PIN(1, 16)); | ||
1465 | SCIF_PFC_CLK(scif_clk, SCIF_CLK); | ||
1466 | |||
1467 | /* - SCIF0 ------------------------------------------------------------------ */ | ||
1468 | SCIF_PFC_PIN(scif0_data_a, RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 18)); | ||
1469 | SCIF_PFC_DAT(scif0_data_a, TX0_A, RX0_A); | ||
1470 | SCIF_PFC_PIN(scif0_data_b, RCAR_GP_PIN(2, 3), RCAR_GP_PIN(2, 2)); | ||
1471 | SCIF_PFC_DAT(scif0_data_b, TX0_B, RX0_B); | ||
1472 | SCIF_PFC_PIN(scif0_data_c, RCAR_GP_PIN(4, 0), RCAR_GP_PIN(3, 31)); | ||
1473 | SCIF_PFC_DAT(scif0_data_c, TX0_C, RX0_C); | ||
1474 | SCIF_PFC_PIN(scif0_data_d, RCAR_GP_PIN(3, 6), RCAR_GP_PIN(3, 1)); | ||
1475 | SCIF_PFC_DAT(scif0_data_d, TX0_D, RX0_D); | ||
1476 | SCIF_PFC_PIN(scif0_ctrl, RCAR_GP_PIN(1, 20), RCAR_GP_PIN(1, 21)); | ||
1477 | SCIF_PFC_CTR(scif0_ctrl, CTS0, RTS0); | ||
1478 | SCIF_PFC_PIN(scif0_clk, RCAR_GP_PIN(1, 19)); | ||
1479 | SCIF_PFC_CLK(scif0_clk, SCK0); | ||
1480 | |||
1481 | /* - SCIF1 ------------------------------------------------------------------ */ | ||
1482 | SCIF_PFC_PIN(scif1_data_a, RCAR_GP_PIN(4, 0), RCAR_GP_PIN(4, 1)); | ||
1483 | SCIF_PFC_DAT(scif1_data_a, TX1_A, RX1_A); | ||
1484 | SCIF_PFC_PIN(scif1_data_b, RCAR_GP_PIN(2, 24), RCAR_GP_PIN(2, 25)); | ||
1485 | SCIF_PFC_DAT(scif1_data_b, TX1_B, RX1_B); | ||
1486 | SCIF_PFC_PIN(scif1_data_c, RCAR_GP_PIN(3, 22), RCAR_GP_PIN(3, 21)); | ||
1487 | SCIF_PFC_DAT(scif1_data_c, TX1_C, RX1_C); | ||
1488 | SCIF_PFC_PIN(scif1_data_d, RCAR_GP_PIN(1, 30), RCAR_GP_PIN(1, 31)); | ||
1489 | SCIF_PFC_DAT(scif1_data_d, TX1_D, RX1_D); | ||
1490 | SCIF_PFC_PIN(scif1_ctrl_a, RCAR_GP_PIN(4, 3), RCAR_GP_PIN(4, 4)); | ||
1491 | SCIF_PFC_CTR(scif1_ctrl_a, CTS1_A, RTS1_A); | ||
1492 | SCIF_PFC_PIN(scif1_ctrl_c, RCAR_GP_PIN(3, 23), RCAR_GP_PIN(3, 19)); | ||
1493 | SCIF_PFC_CTR(scif1_ctrl_c, CTS1_C, RTS1_C); | ||
1494 | SCIF_PFC_PIN(scif1_clk_a, RCAR_GP_PIN(4, 2)); | ||
1495 | SCIF_PFC_CLK(scif1_clk_a, SCK1_A); | ||
1496 | SCIF_PFC_PIN(scif1_clk_c, RCAR_GP_PIN(3, 20)); | ||
1497 | SCIF_PFC_CLK(scif1_clk_c, SCK1_C); | ||
1498 | |||
1499 | /* - SCIF2 ------------------------------------------------------------------ */ | ||
1500 | SCIF_PFC_PIN(scif2_data_a, RCAR_GP_PIN(2, 26), RCAR_GP_PIN(2, 27)); | ||
1501 | SCIF_PFC_DAT(scif2_data_a, TX2_A, RX2_A); | ||
1502 | SCIF_PFC_PIN(scif2_data_b, RCAR_GP_PIN(0, 29), RCAR_GP_PIN(0, 28)); | ||
1503 | SCIF_PFC_DAT(scif2_data_b, TX2_B, RX2_B); | ||
1504 | SCIF_PFC_PIN(scif2_data_c, RCAR_GP_PIN(4, 13), RCAR_GP_PIN(4, 14)); | ||
1505 | SCIF_PFC_DAT(scif2_data_c, TX2_C, RX2_C); | ||
1506 | SCIF_PFC_PIN(scif2_data_d, RCAR_GP_PIN(4, 15), RCAR_GP_PIN(4, 16)); | ||
1507 | SCIF_PFC_DAT(scif2_data_d, TX2_D, RX2_D); | ||
1508 | SCIF_PFC_PIN(scif2_data_e, RCAR_GP_PIN(0, 3), RCAR_GP_PIN(0, 4)); | ||
1509 | SCIF_PFC_DAT(scif2_data_e, TX2_E, RX2_E); | ||
1510 | SCIF_PFC_PIN(scif2_clk_a, RCAR_GP_PIN(3, 9)); | ||
1511 | SCIF_PFC_CLK(scif2_clk_a, SCK2_A); | ||
1512 | SCIF_PFC_PIN(scif2_clk_b, PIN_NUMBER(3, 20)); | ||
1513 | SCIF_PFC_CLK(scif2_clk_b, SCK2_B); | ||
1514 | SCIF_PFC_PIN(scif2_clk_c, RCAR_GP_PIN(4, 12)); | ||
1515 | SCIF_PFC_CLK(scif2_clk_c, SCK2_C); | ||
1516 | |||
1517 | /* - SCIF3 ------------------------------------------------------------------ */ | ||
1518 | SCIF_PFC_PIN(scif3_data_a, RCAR_GP_PIN(1, 10), RCAR_GP_PIN(1, 9)); | ||
1519 | SCIF_PFC_DAT(scif3_data_a, TX3_A, RX3_A); | ||
1520 | SCIF_PFC_PIN(scif3_data_b, RCAR_GP_PIN(3, 28), RCAR_GP_PIN(3, 27)); | ||
1521 | SCIF_PFC_DAT(scif3_data_b, TX3_B, RX3_B); | ||
1522 | SCIF_PFC_PIN(scif3_data_c, RCAR_GP_PIN(1, 3), RCAR_GP_PIN(0, 31)); | ||
1523 | SCIF_PFC_DAT(scif3_data_c, TX3_C, RX3_C); | ||
1524 | SCIF_PFC_PIN(scif3_data_d, RCAR_GP_PIN(3, 30), RCAR_GP_PIN(3, 29)); | ||
1525 | SCIF_PFC_DAT(scif3_data_d, TX3_D, RX3_D); | ||
1526 | |||
1527 | /* - SCIF4 ------------------------------------------------------------------ */ | ||
1528 | SCIF_PFC_PIN(scif4_data_a, RCAR_GP_PIN(2, 5), RCAR_GP_PIN(2, 4)); | ||
1529 | SCIF_PFC_DAT(scif4_data_a, TX4_A, RX4_A); | ||
1530 | SCIF_PFC_PIN(scif4_data_b, RCAR_GP_PIN(3, 26), RCAR_GP_PIN(3, 25)); | ||
1531 | SCIF_PFC_DAT(scif4_data_b, TX4_B, RX4_B); | ||
1532 | SCIF_PFC_PIN(scif4_data_c, RCAR_GP_PIN(3, 0), RCAR_GP_PIN(2, 31)); | ||
1533 | SCIF_PFC_DAT(scif4_data_c, TX4_C, RX4_C); | ||
1534 | |||
1535 | /* - SCIF5 ------------------------------------------------------------------ */ | ||
1536 | SCIF_PFC_PIN(scif5_data_a, RCAR_GP_PIN(3, 17), RCAR_GP_PIN(3, 18)); | ||
1537 | SCIF_PFC_DAT(scif5_data_a, TX5_A, RX5_A); | ||
1538 | SCIF_PFC_PIN(scif5_data_b, RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 14)); | ||
1539 | SCIF_PFC_DAT(scif5_data_b, TX5_B, RX5_B); | ||
1540 | |||
1541 | /* - SDHI macro ------------------------------------------------------------- */ | ||
1542 | #define SDHI_PFC_PINS(name, args...) SH_PFC_PINS(name, args) | ||
1543 | #define SDHI_PFC_DAT1(name, d0) SH_PFC_MUX1(name, d0) | ||
1544 | #define SDHI_PFC_DAT4(name, d0, d1, d2, d3) SH_PFC_MUX4(name, d0, d1, d2, d3) | ||
1545 | #define SDHI_PFC_CTRL(name, clk, cmd) SH_PFC_MUX2(name, clk, cmd) | ||
1546 | #define SDHI_PFC_CDPN(name, cd) SH_PFC_MUX1(name, cd) | ||
1547 | #define SDHI_PFC_WPPN(name, wp) SH_PFC_MUX1(name, wp) | ||
1548 | |||
1549 | /* - SDHI0 ------------------------------------------------------------------ */ | ||
1550 | SDHI_PFC_PINS(sdhi0_cd, RCAR_GP_PIN(3, 17)); | ||
1551 | SDHI_PFC_CDPN(sdhi0_cd, SD0_CD); | ||
1552 | SDHI_PFC_PINS(sdhi0_ctrl, RCAR_GP_PIN(3, 11), RCAR_GP_PIN(3, 12)); | ||
1553 | SDHI_PFC_CTRL(sdhi0_ctrl, SD0_CLK, SD0_CMD); | ||
1554 | SDHI_PFC_PINS(sdhi0_data1, RCAR_GP_PIN(3, 13)); | ||
1555 | SDHI_PFC_DAT1(sdhi0_data1, SD0_DAT0); | ||
1556 | SDHI_PFC_PINS(sdhi0_data4, RCAR_GP_PIN(3, 13), RCAR_GP_PIN(3, 14), | ||
1557 | RCAR_GP_PIN(3, 15), RCAR_GP_PIN(3, 16)); | ||
1558 | SDHI_PFC_DAT4(sdhi0_data4, SD0_DAT0, SD0_DAT1, | ||
1559 | SD0_DAT2, SD0_DAT3); | ||
1560 | SDHI_PFC_PINS(sdhi0_wp, RCAR_GP_PIN(3, 18)); | ||
1561 | SDHI_PFC_WPPN(sdhi0_wp, SD0_WP); | ||
1562 | |||
1563 | /* - SDHI1 ------------------------------------------------------------------ */ | ||
1564 | SDHI_PFC_PINS(sdhi1_cd_a, RCAR_GP_PIN(0, 30)); | ||
1565 | SDHI_PFC_CDPN(sdhi1_cd_a, SD1_CD_A); | ||
1566 | SDHI_PFC_PINS(sdhi1_cd_b, RCAR_GP_PIN(2, 24)); | ||
1567 | SDHI_PFC_CDPN(sdhi1_cd_b, SD1_CD_B); | ||
1568 | SDHI_PFC_PINS(sdhi1_ctrl_a, RCAR_GP_PIN(1, 5), RCAR_GP_PIN(1, 6)); | ||
1569 | SDHI_PFC_CTRL(sdhi1_ctrl_a, SD1_CLK_A, SD1_CMD_A); | ||
1570 | SDHI_PFC_PINS(sdhi1_ctrl_b, RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 16)); | ||
1571 | SDHI_PFC_CTRL(sdhi1_ctrl_b, SD1_CLK_B, SD1_CMD_B); | ||
1572 | SDHI_PFC_PINS(sdhi1_data1_a, RCAR_GP_PIN(1, 7)); | ||
1573 | SDHI_PFC_DAT1(sdhi1_data1_a, SD1_DAT0_A); | ||
1574 | SDHI_PFC_PINS(sdhi1_data1_b, RCAR_GP_PIN(1, 18)); | ||
1575 | SDHI_PFC_DAT1(sdhi1_data1_b, SD1_DAT0_B); | ||
1576 | SDHI_PFC_PINS(sdhi1_data4_a, RCAR_GP_PIN(1, 7), RCAR_GP_PIN(1, 8), | ||
1577 | RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 6)); | ||
1578 | SDHI_PFC_DAT4(sdhi1_data4_a, SD1_DAT0_A, SD1_DAT1_A, | ||
1579 | SD1_DAT2_A, SD1_DAT3_A); | ||
1580 | SDHI_PFC_PINS(sdhi1_data4_b, RCAR_GP_PIN(1, 18), RCAR_GP_PIN(1, 19), | ||
1581 | RCAR_GP_PIN(1, 20), RCAR_GP_PIN(1, 21)); | ||
1582 | SDHI_PFC_DAT4(sdhi1_data4_b, SD1_DAT0_B, SD1_DAT1_B, | ||
1583 | SD1_DAT2_B, SD1_DAT3_B); | ||
1584 | SDHI_PFC_PINS(sdhi1_wp_a, RCAR_GP_PIN(0, 31)); | ||
1585 | SDHI_PFC_WPPN(sdhi1_wp_a, SD1_WP_A); | ||
1586 | SDHI_PFC_PINS(sdhi1_wp_b, RCAR_GP_PIN(2, 25)); | ||
1587 | SDHI_PFC_WPPN(sdhi1_wp_b, SD1_WP_B); | ||
1588 | |||
1589 | /* - SDH2 ------------------------------------------------------------------- */ | ||
1590 | SDHI_PFC_PINS(sdhi2_cd_a, RCAR_GP_PIN(4, 23)); | ||
1591 | SDHI_PFC_CDPN(sdhi2_cd_a, SD2_CD_A); | ||
1592 | SDHI_PFC_PINS(sdhi2_cd_b, RCAR_GP_PIN(3, 27)); | ||
1593 | SDHI_PFC_CDPN(sdhi2_cd_b, SD2_CD_B); | ||
1594 | SDHI_PFC_PINS(sdhi2_ctrl_a, RCAR_GP_PIN(4, 17), RCAR_GP_PIN(4, 18)); | ||
1595 | SDHI_PFC_CTRL(sdhi2_ctrl_a, SD2_CLK_A, SD2_CMD_A); | ||
1596 | SDHI_PFC_PINS(sdhi2_ctrl_b, RCAR_GP_PIN(4, 5), RCAR_GP_PIN(4, 6)); | ||
1597 | SDHI_PFC_CTRL(sdhi2_ctrl_b, SD2_CLK_B, SD2_CMD_B); | ||
1598 | SDHI_PFC_PINS(sdhi2_data1_a, RCAR_GP_PIN(4, 19)); | ||
1599 | SDHI_PFC_DAT1(sdhi2_data1_a, SD2_DAT0_A); | ||
1600 | SDHI_PFC_PINS(sdhi2_data1_b, RCAR_GP_PIN(4, 7)); | ||
1601 | SDHI_PFC_DAT1(sdhi2_data1_b, SD2_DAT0_B); | ||
1602 | SDHI_PFC_PINS(sdhi2_data4_a, RCAR_GP_PIN(4, 19), RCAR_GP_PIN(4, 20), | ||
1603 | RCAR_GP_PIN(4, 21), RCAR_GP_PIN(4, 22)); | ||
1604 | SDHI_PFC_DAT4(sdhi2_data4_a, SD2_DAT0_A, SD2_DAT1_A, | ||
1605 | SD2_DAT2_A, SD2_DAT3_A); | ||
1606 | SDHI_PFC_PINS(sdhi2_data4_b, RCAR_GP_PIN(4, 7), RCAR_GP_PIN(4, 8), | ||
1607 | RCAR_GP_PIN(3, 25), RCAR_GP_PIN(3, 26)); | ||
1608 | SDHI_PFC_DAT4(sdhi2_data4_b, SD2_DAT0_B, SD2_DAT1_B, | ||
1609 | SD2_DAT2_B, SD2_DAT3_B); | ||
1610 | SDHI_PFC_PINS(sdhi2_wp_a, RCAR_GP_PIN(4, 24)); | ||
1611 | SDHI_PFC_WPPN(sdhi2_wp_a, SD2_WP_A); | ||
1612 | SDHI_PFC_PINS(sdhi2_wp_b, RCAR_GP_PIN(3, 28)); | ||
1613 | SDHI_PFC_WPPN(sdhi2_wp_b, SD2_WP_B); | ||
1614 | |||
1615 | /* - USB0 ------------------------------------------------------------------- */ | ||
1616 | SH_PFC_PINS(usb0, RCAR_GP_PIN(0, 1)); | ||
1617 | SH_PFC_MUX1(usb0, PENC0); | ||
1618 | SH_PFC_PINS(usb0_ovc, RCAR_GP_PIN(0, 3)); | ||
1619 | SH_PFC_MUX1(usb0_ovc, USB_OVC0); | ||
1620 | |||
1621 | /* - USB1 ------------------------------------------------------------------- */ | ||
1622 | SH_PFC_PINS(usb1, RCAR_GP_PIN(0, 2)); | ||
1623 | SH_PFC_MUX1(usb1, PENC1); | ||
1624 | SH_PFC_PINS(usb1_ovc, RCAR_GP_PIN(0, 4)); | ||
1625 | SH_PFC_MUX1(usb1_ovc, USB_OVC1); | ||
1626 | |||
1627 | /* - VIN macros ------------------------------------------------------------- */ | ||
1628 | #define VIN_PFC_PINS(name, args...) SH_PFC_PINS(name, args) | ||
1629 | #define VIN_PFC_DAT8(name, d0, d1, d2, d3, d4, d5, d6, d7) \ | ||
1630 | SH_PFC_MUX8(name, d0, d1, d2, d3, d4, d5, d6, d7) | ||
1631 | #define VIN_PFC_CLK(name, clk) SH_PFC_MUX1(name, clk) | ||
1632 | #define VIN_PFC_SYNC(name, hsync, vsync) SH_PFC_MUX2(name, hsync, vsync) | ||
1633 | |||
1634 | /* - VIN0 ------------------------------------------------------------------- */ | ||
1635 | VIN_PFC_PINS(vin0_data8, RCAR_GP_PIN(3, 29), RCAR_GP_PIN(3, 30), | ||
1636 | RCAR_GP_PIN(3, 31), RCAR_GP_PIN(4, 0), | ||
1637 | RCAR_GP_PIN(4, 1), RCAR_GP_PIN(4, 2), | ||
1638 | RCAR_GP_PIN(4, 3), RCAR_GP_PIN(4, 4)); | ||
1639 | VIN_PFC_DAT8(vin0_data8, VI0_DATA0_VI0_B0, VI0_DATA1_VI0_B1, | ||
1640 | VI0_DATA2_VI0_B2, VI0_DATA3_VI0_B3, | ||
1641 | VI0_DATA4_VI0_B4, VI0_DATA5_VI0_B5, | ||
1642 | VI0_DATA6_VI0_G0, VI0_DATA7_VI0_G1); | ||
1643 | VIN_PFC_PINS(vin0_clk, RCAR_GP_PIN(3, 24)); | ||
1644 | VIN_PFC_CLK(vin0_clk, VI0_CLK); | ||
1645 | VIN_PFC_PINS(vin0_sync, RCAR_GP_PIN(3, 27), RCAR_GP_PIN(3, 28)); | ||
1646 | VIN_PFC_SYNC(vin0_sync, VI0_HSYNC, VI0_VSYNC); | ||
1647 | /* - VIN1 ------------------------------------------------------------------- */ | ||
1648 | VIN_PFC_PINS(vin1_data8, RCAR_GP_PIN(3, 25), RCAR_GP_PIN(3, 26), | ||
1649 | RCAR_GP_PIN(3, 27), RCAR_GP_PIN(3, 28), | ||
1650 | RCAR_GP_PIN(4, 5), RCAR_GP_PIN(4, 6), | ||
1651 | RCAR_GP_PIN(4, 7), RCAR_GP_PIN(4, 8)); | ||
1652 | VIN_PFC_DAT8(vin1_data8, VI1_DATA0, VI1_DATA1, | ||
1653 | VI1_DATA2, VI1_DATA3, | ||
1654 | VI1_DATA4, VI1_DATA5, | ||
1655 | VI1_DATA6, VI1_DATA7); | ||
1656 | VIN_PFC_PINS(vin1_clk, RCAR_GP_PIN(4, 9)); | ||
1657 | VIN_PFC_CLK(vin1_clk, VI1_CLK); | ||
1658 | VIN_PFC_PINS(vin1_sync, RCAR_GP_PIN(3, 21), RCAR_GP_PIN(3, 22)); | ||
1659 | VIN_PFC_SYNC(vin1_sync, VI1_HSYNC, VI1_VSYNC); | ||
1660 | |||
1661 | static const struct sh_pfc_pin_group pinmux_groups[] = { | ||
1662 | SH_PFC_PIN_GROUP(ether_rmii), | ||
1663 | SH_PFC_PIN_GROUP(ether_link), | ||
1664 | SH_PFC_PIN_GROUP(ether_magic), | ||
1665 | SH_PFC_PIN_GROUP(hscif0_data_a), | ||
1666 | SH_PFC_PIN_GROUP(hscif0_data_b), | ||
1667 | SH_PFC_PIN_GROUP(hscif0_ctrl_a), | ||
1668 | SH_PFC_PIN_GROUP(hscif0_ctrl_b), | ||
1669 | SH_PFC_PIN_GROUP(hscif0_clk), | ||
1670 | SH_PFC_PIN_GROUP(hscif1_data_a), | ||
1671 | SH_PFC_PIN_GROUP(hscif1_data_b), | ||
1672 | SH_PFC_PIN_GROUP(hscif1_ctrl_a), | ||
1673 | SH_PFC_PIN_GROUP(hscif1_ctrl_b), | ||
1674 | SH_PFC_PIN_GROUP(hscif1_clk_a), | ||
1675 | SH_PFC_PIN_GROUP(hscif1_clk_b), | ||
1676 | SH_PFC_PIN_GROUP(hspi0_a), | ||
1677 | SH_PFC_PIN_GROUP(hspi0_b), | ||
1678 | SH_PFC_PIN_GROUP(hspi1_a), | ||
1679 | SH_PFC_PIN_GROUP(hspi1_b), | ||
1680 | SH_PFC_PIN_GROUP(hspi2_a), | ||
1681 | SH_PFC_PIN_GROUP(hspi2_b), | ||
1682 | SH_PFC_PIN_GROUP(i2c1_a), | ||
1683 | SH_PFC_PIN_GROUP(i2c1_b), | ||
1684 | SH_PFC_PIN_GROUP(i2c2_a), | ||
1685 | SH_PFC_PIN_GROUP(i2c2_b), | ||
1686 | SH_PFC_PIN_GROUP(i2c2_c), | ||
1687 | SH_PFC_PIN_GROUP(i2c3_a), | ||
1688 | SH_PFC_PIN_GROUP(i2c3_b), | ||
1689 | SH_PFC_PIN_GROUP(i2c3_c), | ||
1690 | SH_PFC_PIN_GROUP(mmc_ctrl), | ||
1691 | SH_PFC_PIN_GROUP(mmc_data1), | ||
1692 | SH_PFC_PIN_GROUP(mmc_data4), | ||
1693 | SH_PFC_PIN_GROUP(mmc_data8), | ||
1694 | SH_PFC_PIN_GROUP(scif_clk), | ||
1695 | SH_PFC_PIN_GROUP(scif0_data_a), | ||
1696 | SH_PFC_PIN_GROUP(scif0_data_b), | ||
1697 | SH_PFC_PIN_GROUP(scif0_data_c), | ||
1698 | SH_PFC_PIN_GROUP(scif0_data_d), | ||
1699 | SH_PFC_PIN_GROUP(scif0_ctrl), | ||
1700 | SH_PFC_PIN_GROUP(scif0_clk), | ||
1701 | SH_PFC_PIN_GROUP(scif1_data_a), | ||
1702 | SH_PFC_PIN_GROUP(scif1_data_b), | ||
1703 | SH_PFC_PIN_GROUP(scif1_data_c), | ||
1704 | SH_PFC_PIN_GROUP(scif1_data_d), | ||
1705 | SH_PFC_PIN_GROUP(scif1_ctrl_a), | ||
1706 | SH_PFC_PIN_GROUP(scif1_ctrl_c), | ||
1707 | SH_PFC_PIN_GROUP(scif1_clk_a), | ||
1708 | SH_PFC_PIN_GROUP(scif1_clk_c), | ||
1709 | SH_PFC_PIN_GROUP(scif2_data_a), | ||
1710 | SH_PFC_PIN_GROUP(scif2_data_b), | ||
1711 | SH_PFC_PIN_GROUP(scif2_data_c), | ||
1712 | SH_PFC_PIN_GROUP(scif2_data_d), | ||
1713 | SH_PFC_PIN_GROUP(scif2_data_e), | ||
1714 | SH_PFC_PIN_GROUP(scif2_clk_a), | ||
1715 | SH_PFC_PIN_GROUP(scif2_clk_b), | ||
1716 | SH_PFC_PIN_GROUP(scif2_clk_c), | ||
1717 | SH_PFC_PIN_GROUP(scif3_data_a), | ||
1718 | SH_PFC_PIN_GROUP(scif3_data_b), | ||
1719 | SH_PFC_PIN_GROUP(scif3_data_c), | ||
1720 | SH_PFC_PIN_GROUP(scif3_data_d), | ||
1721 | SH_PFC_PIN_GROUP(scif4_data_a), | ||
1722 | SH_PFC_PIN_GROUP(scif4_data_b), | ||
1723 | SH_PFC_PIN_GROUP(scif4_data_c), | ||
1724 | SH_PFC_PIN_GROUP(scif5_data_a), | ||
1725 | SH_PFC_PIN_GROUP(scif5_data_b), | ||
1726 | SH_PFC_PIN_GROUP(sdhi0_cd), | ||
1727 | SH_PFC_PIN_GROUP(sdhi0_ctrl), | ||
1728 | SH_PFC_PIN_GROUP(sdhi0_data1), | ||
1729 | SH_PFC_PIN_GROUP(sdhi0_data4), | ||
1730 | SH_PFC_PIN_GROUP(sdhi0_wp), | ||
1731 | SH_PFC_PIN_GROUP(sdhi1_cd_a), | ||
1732 | SH_PFC_PIN_GROUP(sdhi1_cd_b), | ||
1733 | SH_PFC_PIN_GROUP(sdhi1_ctrl_a), | ||
1734 | SH_PFC_PIN_GROUP(sdhi1_ctrl_b), | ||
1735 | SH_PFC_PIN_GROUP(sdhi1_data1_a), | ||
1736 | SH_PFC_PIN_GROUP(sdhi1_data1_b), | ||
1737 | SH_PFC_PIN_GROUP(sdhi1_data4_a), | ||
1738 | SH_PFC_PIN_GROUP(sdhi1_data4_b), | ||
1739 | SH_PFC_PIN_GROUP(sdhi1_wp_a), | ||
1740 | SH_PFC_PIN_GROUP(sdhi1_wp_b), | ||
1741 | SH_PFC_PIN_GROUP(sdhi2_cd_a), | ||
1742 | SH_PFC_PIN_GROUP(sdhi2_cd_b), | ||
1743 | SH_PFC_PIN_GROUP(sdhi2_ctrl_a), | ||
1744 | SH_PFC_PIN_GROUP(sdhi2_ctrl_b), | ||
1745 | SH_PFC_PIN_GROUP(sdhi2_data1_a), | ||
1746 | SH_PFC_PIN_GROUP(sdhi2_data1_b), | ||
1747 | SH_PFC_PIN_GROUP(sdhi2_data4_a), | ||
1748 | SH_PFC_PIN_GROUP(sdhi2_data4_b), | ||
1749 | SH_PFC_PIN_GROUP(sdhi2_wp_a), | ||
1750 | SH_PFC_PIN_GROUP(sdhi2_wp_b), | ||
1751 | SH_PFC_PIN_GROUP(usb0), | ||
1752 | SH_PFC_PIN_GROUP(usb0_ovc), | ||
1753 | SH_PFC_PIN_GROUP(usb1), | ||
1754 | SH_PFC_PIN_GROUP(usb1_ovc), | ||
1755 | SH_PFC_PIN_GROUP(vin0_data8), | ||
1756 | SH_PFC_PIN_GROUP(vin0_clk), | ||
1757 | SH_PFC_PIN_GROUP(vin0_sync), | ||
1758 | SH_PFC_PIN_GROUP(vin1_data8), | ||
1759 | SH_PFC_PIN_GROUP(vin1_clk), | ||
1760 | SH_PFC_PIN_GROUP(vin1_sync), | ||
1761 | }; | ||
1762 | |||
1763 | static const char * const ether_groups[] = { | ||
1764 | "ether_rmii", | ||
1765 | "ether_link", | ||
1766 | "ether_magic", | ||
1767 | }; | ||
1768 | |||
1769 | static const char * const hscif0_groups[] = { | ||
1770 | "hscif0_data_a", | ||
1771 | "hscif0_data_b", | ||
1772 | "hscif0_ctrl_a", | ||
1773 | "hscif0_ctrl_b", | ||
1774 | "hscif0_clk", | ||
1775 | }; | ||
1776 | |||
1777 | static const char * const hscif1_groups[] = { | ||
1778 | "hscif1_data_a", | ||
1779 | "hscif1_data_b", | ||
1780 | "hscif1_ctrl_a", | ||
1781 | "hscif1_ctrl_b", | ||
1782 | "hscif1_clk_a", | ||
1783 | "hscif1_clk_b", | ||
1784 | }; | ||
1785 | |||
1786 | static const char * const hspi0_groups[] = { | ||
1787 | "hspi0_a", | ||
1788 | "hspi0_b", | ||
1789 | }; | ||
1790 | |||
1791 | static const char * const hspi1_groups[] = { | ||
1792 | "hspi1_a", | ||
1793 | "hspi1_b", | ||
1794 | }; | ||
1795 | |||
1796 | static const char * const hspi2_groups[] = { | ||
1797 | "hspi2_a", | ||
1798 | "hspi2_b", | ||
1799 | }; | ||
1800 | |||
1801 | static const char * const i2c1_groups[] = { | ||
1802 | "i2c1_a", | ||
1803 | "i2c1_b", | ||
1804 | }; | ||
1805 | |||
1806 | static const char * const i2c2_groups[] = { | ||
1807 | "i2c2_a", | ||
1808 | "i2c2_b", | ||
1809 | "i2c2_c", | ||
1810 | }; | ||
1811 | |||
1812 | static const char * const i2c3_groups[] = { | ||
1813 | "i2c3_a", | ||
1814 | "i2c3_b", | ||
1815 | "i2c3_c", | ||
1816 | }; | ||
1817 | |||
1818 | static const char * const mmc_groups[] = { | ||
1819 | "mmc_ctrl", | ||
1820 | "mmc_data1", | ||
1821 | "mmc_data4", | ||
1822 | "mmc_data8", | ||
1823 | }; | ||
1824 | |||
1825 | static const char * const scif_clk_groups[] = { | ||
1826 | "scif_clk", | ||
1827 | }; | ||
1828 | |||
1829 | static const char * const scif0_groups[] = { | ||
1830 | "scif0_data_a", | ||
1831 | "scif0_data_b", | ||
1832 | "scif0_data_c", | ||
1833 | "scif0_data_d", | ||
1834 | "scif0_ctrl", | ||
1835 | "scif0_clk", | ||
1836 | }; | ||
1837 | |||
1838 | static const char * const scif1_groups[] = { | ||
1839 | "scif1_data_a", | ||
1840 | "scif1_data_b", | ||
1841 | "scif1_data_c", | ||
1842 | "scif1_data_d", | ||
1843 | "scif1_ctrl_a", | ||
1844 | "scif1_ctrl_c", | ||
1845 | "scif1_clk_a", | ||
1846 | "scif1_clk_c", | ||
1847 | }; | ||
1848 | |||
1849 | static const char * const scif2_groups[] = { | ||
1850 | "scif2_data_a", | ||
1851 | "scif2_data_b", | ||
1852 | "scif2_data_c", | ||
1853 | "scif2_data_d", | ||
1854 | "scif2_data_e", | ||
1855 | "scif2_clk_a", | ||
1856 | "scif2_clk_b", | ||
1857 | "scif2_clk_c", | ||
1858 | }; | ||
1859 | |||
1860 | static const char * const scif3_groups[] = { | ||
1861 | "scif3_data_a", | ||
1862 | "scif3_data_b", | ||
1863 | "scif3_data_c", | ||
1864 | "scif3_data_d", | ||
1865 | }; | ||
1866 | |||
1867 | static const char * const scif4_groups[] = { | ||
1868 | "scif4_data_a", | ||
1869 | "scif4_data_b", | ||
1870 | "scif4_data_c", | ||
1871 | }; | ||
1872 | |||
1873 | static const char * const scif5_groups[] = { | ||
1874 | "scif5_data_a", | ||
1875 | "scif5_data_b", | ||
1876 | }; | ||
1877 | |||
1878 | |||
1879 | static const char * const sdhi0_groups[] = { | ||
1880 | "sdhi0_cd", | ||
1881 | "sdhi0_ctrl", | ||
1882 | "sdhi0_data1", | ||
1883 | "sdhi0_data4", | ||
1884 | "sdhi0_wp", | ||
1885 | }; | ||
1886 | |||
1887 | static const char * const sdhi1_groups[] = { | ||
1888 | "sdhi1_cd_a", | ||
1889 | "sdhi1_cd_b", | ||
1890 | "sdhi1_ctrl_a", | ||
1891 | "sdhi1_ctrl_b", | ||
1892 | "sdhi1_data1_a", | ||
1893 | "sdhi1_data1_b", | ||
1894 | "sdhi1_data4_a", | ||
1895 | "sdhi1_data4_b", | ||
1896 | "sdhi1_wp_a", | ||
1897 | "sdhi1_wp_b", | ||
1898 | }; | ||
1899 | |||
1900 | static const char * const sdhi2_groups[] = { | ||
1901 | "sdhi2_cd_a", | ||
1902 | "sdhi2_cd_b", | ||
1903 | "sdhi2_ctrl_a", | ||
1904 | "sdhi2_ctrl_b", | ||
1905 | "sdhi2_data1_a", | ||
1906 | "sdhi2_data1_b", | ||
1907 | "sdhi2_data4_a", | ||
1908 | "sdhi2_data4_b", | ||
1909 | "sdhi2_wp_a", | ||
1910 | "sdhi2_wp_b", | ||
1911 | }; | ||
1912 | |||
1913 | static const char * const usb0_groups[] = { | ||
1914 | "usb0", | ||
1915 | "usb0_ovc", | ||
1916 | }; | ||
1917 | |||
1918 | static const char * const usb1_groups[] = { | ||
1919 | "usb1", | ||
1920 | "usb1_ovc", | ||
1921 | }; | ||
1922 | |||
1923 | static const char * const vin0_groups[] = { | ||
1924 | "vin0_data8", | ||
1925 | "vin0_clk", | ||
1926 | "vin0_sync", | ||
1927 | }; | ||
1928 | |||
1929 | static const char * const vin1_groups[] = { | ||
1930 | "vin1_data8", | ||
1931 | "vin1_clk", | ||
1932 | "vin1_sync", | ||
1933 | }; | ||
1934 | |||
1935 | static const struct sh_pfc_function pinmux_functions[] = { | ||
1936 | SH_PFC_FUNCTION(ether), | ||
1937 | SH_PFC_FUNCTION(hscif0), | ||
1938 | SH_PFC_FUNCTION(hscif1), | ||
1939 | SH_PFC_FUNCTION(hspi0), | ||
1940 | SH_PFC_FUNCTION(hspi1), | ||
1941 | SH_PFC_FUNCTION(hspi2), | ||
1942 | SH_PFC_FUNCTION(i2c1), | ||
1943 | SH_PFC_FUNCTION(i2c2), | ||
1944 | SH_PFC_FUNCTION(i2c3), | ||
1945 | SH_PFC_FUNCTION(mmc), | ||
1946 | SH_PFC_FUNCTION(scif_clk), | ||
1947 | SH_PFC_FUNCTION(scif0), | ||
1948 | SH_PFC_FUNCTION(scif1), | ||
1949 | SH_PFC_FUNCTION(scif2), | ||
1950 | SH_PFC_FUNCTION(scif3), | ||
1951 | SH_PFC_FUNCTION(scif4), | ||
1952 | SH_PFC_FUNCTION(scif5), | ||
1953 | SH_PFC_FUNCTION(sdhi0), | ||
1954 | SH_PFC_FUNCTION(sdhi1), | ||
1955 | SH_PFC_FUNCTION(sdhi2), | ||
1956 | SH_PFC_FUNCTION(usb0), | ||
1957 | SH_PFC_FUNCTION(usb1), | ||
1958 | SH_PFC_FUNCTION(vin0), | ||
1959 | SH_PFC_FUNCTION(vin1), | ||
1960 | }; | ||
1961 | |||
1962 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | ||
1963 | { PINMUX_CFG_REG("GPSR0", 0xfffc0004, 32, 1) { | ||
1964 | GP_0_31_FN, FN_IP1_14_11, | ||
1965 | GP_0_30_FN, FN_IP1_10_8, | ||
1966 | GP_0_29_FN, FN_IP1_7_5, | ||
1967 | GP_0_28_FN, FN_IP1_4_2, | ||
1968 | GP_0_27_FN, FN_IP1_1, | ||
1969 | GP_0_26_FN, FN_IP1_0, | ||
1970 | GP_0_25_FN, FN_IP0_30, | ||
1971 | GP_0_24_FN, FN_IP0_29, | ||
1972 | GP_0_23_FN, FN_IP0_28, | ||
1973 | GP_0_22_FN, FN_IP0_27, | ||
1974 | GP_0_21_FN, FN_IP0_26, | ||
1975 | GP_0_20_FN, FN_IP0_25, | ||
1976 | GP_0_19_FN, FN_IP0_24, | ||
1977 | GP_0_18_FN, FN_IP0_23, | ||
1978 | GP_0_17_FN, FN_IP0_22, | ||
1979 | GP_0_16_FN, FN_IP0_21, | ||
1980 | GP_0_15_FN, FN_IP0_20, | ||
1981 | GP_0_14_FN, FN_IP0_19, | ||
1982 | GP_0_13_FN, FN_IP0_18, | ||
1983 | GP_0_12_FN, FN_IP0_17, | ||
1984 | GP_0_11_FN, FN_IP0_16, | ||
1985 | GP_0_10_FN, FN_IP0_15, | ||
1986 | GP_0_9_FN, FN_A3, | ||
1987 | GP_0_8_FN, FN_A2, | ||
1988 | GP_0_7_FN, FN_A1, | ||
1989 | GP_0_6_FN, FN_IP0_14_12, | ||
1990 | GP_0_5_FN, FN_IP0_11_8, | ||
1991 | GP_0_4_FN, FN_IP0_7_5, | ||
1992 | GP_0_3_FN, FN_IP0_4_2, | ||
1993 | GP_0_2_FN, FN_PENC1, | ||
1994 | GP_0_1_FN, FN_PENC0, | ||
1995 | GP_0_0_FN, FN_IP0_1_0 } | ||
1996 | }, | ||
1997 | { PINMUX_CFG_REG("GPSR1", 0xfffc0008, 32, 1) { | ||
1998 | GP_1_31_FN, FN_IP4_6_4, | ||
1999 | GP_1_30_FN, FN_IP4_3_1, | ||
2000 | GP_1_29_FN, FN_IP4_0, | ||
2001 | GP_1_28_FN, FN_IP3_31, | ||
2002 | GP_1_27_FN, FN_IP3_30, | ||
2003 | GP_1_26_FN, FN_IP3_29, | ||
2004 | GP_1_25_FN, FN_IP3_28, | ||
2005 | GP_1_24_FN, FN_IP3_27, | ||
2006 | GP_1_23_FN, FN_IP3_26_24, | ||
2007 | GP_1_22_FN, FN_IP3_23_21, | ||
2008 | GP_1_21_FN, FN_IP3_20_19, | ||
2009 | GP_1_20_FN, FN_IP3_18_16, | ||
2010 | GP_1_19_FN, FN_IP3_15_13, | ||
2011 | GP_1_18_FN, FN_IP3_12_10, | ||
2012 | GP_1_17_FN, FN_IP3_9_8, | ||
2013 | GP_1_16_FN, FN_IP3_7_5, | ||
2014 | GP_1_15_FN, FN_IP3_4_2, | ||
2015 | GP_1_14_FN, FN_IP3_1_0, | ||
2016 | GP_1_13_FN, FN_IP2_31, | ||
2017 | GP_1_12_FN, FN_IP2_30, | ||
2018 | GP_1_11_FN, FN_IP2_17, | ||
2019 | GP_1_10_FN, FN_IP2_16_14, | ||
2020 | GP_1_9_FN, FN_IP2_13_12, | ||
2021 | GP_1_8_FN, FN_IP2_11_9, | ||
2022 | GP_1_7_FN, FN_IP2_8_6, | ||
2023 | GP_1_6_FN, FN_IP2_5_3, | ||
2024 | GP_1_5_FN, FN_IP2_2_0, | ||
2025 | GP_1_4_FN, FN_IP1_29_28, | ||
2026 | GP_1_3_FN, FN_IP1_27_25, | ||
2027 | GP_1_2_FN, FN_IP1_24, | ||
2028 | GP_1_1_FN, FN_WE0, | ||
2029 | GP_1_0_FN, FN_IP1_23_21 } | ||
2030 | }, | ||
2031 | { PINMUX_CFG_REG("GPSR2", 0xfffc000c, 32, 1) { | ||
2032 | GP_2_31_FN, FN_IP6_7, | ||
2033 | GP_2_30_FN, FN_IP6_6_5, | ||
2034 | GP_2_29_FN, FN_IP6_4_2, | ||
2035 | GP_2_28_FN, FN_IP6_1_0, | ||
2036 | GP_2_27_FN, FN_IP5_30_29, | ||
2037 | GP_2_26_FN, FN_IP5_28_26, | ||
2038 | GP_2_25_FN, FN_IP5_25_23, | ||
2039 | GP_2_24_FN, FN_IP5_22_21, | ||
2040 | GP_2_23_FN, FN_AUDIO_CLKB, | ||
2041 | GP_2_22_FN, FN_AUDIO_CLKA, | ||
2042 | GP_2_21_FN, FN_IP5_20_18, | ||
2043 | GP_2_20_FN, FN_IP5_17_15, | ||
2044 | GP_2_19_FN, FN_IP5_14_13, | ||
2045 | GP_2_18_FN, FN_IP5_12, | ||
2046 | GP_2_17_FN, FN_IP5_11_10, | ||
2047 | GP_2_16_FN, FN_IP5_9_8, | ||
2048 | GP_2_15_FN, FN_IP5_7, | ||
2049 | GP_2_14_FN, FN_IP5_6, | ||
2050 | GP_2_13_FN, FN_IP5_5_4, | ||
2051 | GP_2_12_FN, FN_IP5_3_2, | ||
2052 | GP_2_11_FN, FN_IP5_1_0, | ||
2053 | GP_2_10_FN, FN_IP4_30_29, | ||
2054 | GP_2_9_FN, FN_IP4_28_27, | ||
2055 | GP_2_8_FN, FN_IP4_26_25, | ||
2056 | GP_2_7_FN, FN_IP4_24_21, | ||
2057 | GP_2_6_FN, FN_IP4_20_17, | ||
2058 | GP_2_5_FN, FN_IP4_16_15, | ||
2059 | GP_2_4_FN, FN_IP4_14_13, | ||
2060 | GP_2_3_FN, FN_IP4_12_11, | ||
2061 | GP_2_2_FN, FN_IP4_10_9, | ||
2062 | GP_2_1_FN, FN_IP4_8, | ||
2063 | GP_2_0_FN, FN_IP4_7 } | ||
2064 | }, | ||
2065 | { PINMUX_CFG_REG("GPSR3", 0xfffc0010, 32, 1) { | ||
2066 | GP_3_31_FN, FN_IP8_10_9, | ||
2067 | GP_3_30_FN, FN_IP8_8_6, | ||
2068 | GP_3_29_FN, FN_IP8_5_3, | ||
2069 | GP_3_28_FN, FN_IP8_2_0, | ||
2070 | GP_3_27_FN, FN_IP7_31_29, | ||
2071 | GP_3_26_FN, FN_IP7_28_25, | ||
2072 | GP_3_25_FN, FN_IP7_24_22, | ||
2073 | GP_3_24_FN, FN_IP7_21, | ||
2074 | GP_3_23_FN, FN_IP7_20_18, | ||
2075 | GP_3_22_FN, FN_IP7_17_15, | ||
2076 | GP_3_21_FN, FN_IP7_14_12, | ||
2077 | GP_3_20_FN, FN_IP7_11_9, | ||
2078 | GP_3_19_FN, FN_IP7_8_6, | ||
2079 | GP_3_18_FN, FN_IP7_5_4, | ||
2080 | GP_3_17_FN, FN_IP7_3_2, | ||
2081 | GP_3_16_FN, FN_IP7_1_0, | ||
2082 | GP_3_15_FN, FN_IP6_31_30, | ||
2083 | GP_3_14_FN, FN_IP6_29_28, | ||
2084 | GP_3_13_FN, FN_IP6_27_26, | ||
2085 | GP_3_12_FN, FN_IP6_25_24, | ||
2086 | GP_3_11_FN, FN_IP6_23_22, | ||
2087 | GP_3_10_FN, FN_IP6_21, | ||
2088 | GP_3_9_FN, FN_IP6_20_19, | ||
2089 | GP_3_8_FN, FN_IP6_18_17, | ||
2090 | GP_3_7_FN, FN_IP6_16, | ||
2091 | GP_3_6_FN, FN_IP6_15_14, | ||
2092 | GP_3_5_FN, FN_IP6_13, | ||
2093 | GP_3_4_FN, FN_IP6_12_11, | ||
2094 | GP_3_3_FN, FN_IP6_10, | ||
2095 | GP_3_2_FN, FN_SSI_SCK34, | ||
2096 | GP_3_1_FN, FN_IP6_9, | ||
2097 | GP_3_0_FN, FN_IP6_8 } | ||
2098 | }, | ||
2099 | { PINMUX_CFG_REG("GPSR4", 0xfffc0014, 32, 1) { | ||
2100 | 0, 0, | ||
2101 | 0, 0, | ||
2102 | 0, 0, | ||
2103 | 0, 0, | ||
2104 | 0, 0, | ||
2105 | GP_4_26_FN, FN_AVS2, | ||
2106 | GP_4_25_FN, FN_AVS1, | ||
2107 | GP_4_24_FN, FN_IP10_24_22, | ||
2108 | GP_4_23_FN, FN_IP10_21_19, | ||
2109 | GP_4_22_FN, FN_IP10_18_16, | ||
2110 | GP_4_21_FN, FN_IP10_15_13, | ||
2111 | GP_4_20_FN, FN_IP10_12_9, | ||
2112 | GP_4_19_FN, FN_IP10_8_6, | ||
2113 | GP_4_18_FN, FN_IP10_5_3, | ||
2114 | GP_4_17_FN, FN_IP10_2_0, | ||
2115 | GP_4_16_FN, FN_IP9_29_27, | ||
2116 | GP_4_15_FN, FN_IP9_26_24, | ||
2117 | GP_4_14_FN, FN_IP9_23_21, | ||
2118 | GP_4_13_FN, FN_IP9_20_18, | ||
2119 | GP_4_12_FN, FN_IP9_17_15, | ||
2120 | GP_4_11_FN, FN_IP9_14_12, | ||
2121 | GP_4_10_FN, FN_IP9_11_9, | ||
2122 | GP_4_9_FN, FN_IP9_8_6, | ||
2123 | GP_4_8_FN, FN_IP9_5_3, | ||
2124 | GP_4_7_FN, FN_IP9_2_0, | ||
2125 | GP_4_6_FN, FN_IP8_29_27, | ||
2126 | GP_4_5_FN, FN_IP8_26_24, | ||
2127 | GP_4_4_FN, FN_IP8_23_22, | ||
2128 | GP_4_3_FN, FN_IP8_21_19, | ||
2129 | GP_4_2_FN, FN_IP8_18_16, | ||
2130 | GP_4_1_FN, FN_IP8_15_14, | ||
2131 | GP_4_0_FN, FN_IP8_13_11 } | ||
2132 | }, | ||
2133 | |||
2134 | { PINMUX_CFG_REG_VAR("IPSR0", 0xfffc0020, 32, | ||
2135 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | ||
2136 | 1, 1, 1, 1, 1, 1, 3, 4, 3, 3, 2) { | ||
2137 | /* IP0_31 [1] */ | ||
2138 | 0, 0, | ||
2139 | /* IP0_30 [1] */ | ||
2140 | FN_A19, 0, | ||
2141 | /* IP0_29 [1] */ | ||
2142 | FN_A18, 0, | ||
2143 | /* IP0_28 [1] */ | ||
2144 | FN_A17, 0, | ||
2145 | /* IP0_27 [1] */ | ||
2146 | FN_A16, 0, | ||
2147 | /* IP0_26 [1] */ | ||
2148 | FN_A15, 0, | ||
2149 | /* IP0_25 [1] */ | ||
2150 | FN_A14, 0, | ||
2151 | /* IP0_24 [1] */ | ||
2152 | FN_A13, 0, | ||
2153 | /* IP0_23 [1] */ | ||
2154 | FN_A12, 0, | ||
2155 | /* IP0_22 [1] */ | ||
2156 | FN_A11, 0, | ||
2157 | /* IP0_21 [1] */ | ||
2158 | FN_A10, 0, | ||
2159 | /* IP0_20 [1] */ | ||
2160 | FN_A9, 0, | ||
2161 | /* IP0_19 [1] */ | ||
2162 | FN_A8, 0, | ||
2163 | /* IP0_18 [1] */ | ||
2164 | FN_A7, 0, | ||
2165 | /* IP0_17 [1] */ | ||
2166 | FN_A6, 0, | ||
2167 | /* IP0_16 [1] */ | ||
2168 | FN_A5, 0, | ||
2169 | /* IP0_15 [1] */ | ||
2170 | FN_A4, 0, | ||
2171 | /* IP0_14_12 [3] */ | ||
2172 | FN_SD1_DAT3_A, FN_MMC_D3, 0, FN_A0, | ||
2173 | FN_ATAG0_A, 0, FN_REMOCON_B, 0, | ||
2174 | /* IP0_11_8 [4] */ | ||
2175 | FN_SD1_DAT2_A, FN_MMC_D2, 0, FN_BS, | ||
2176 | FN_ATADIR0_A, 0, FN_SDSELF_B, 0, | ||
2177 | FN_PWM4_B, 0, 0, 0, | ||
2178 | 0, 0, 0, 0, | ||
2179 | /* IP0_7_5 [3] */ | ||
2180 | FN_AUDATA1, FN_ARM_TRACEDATA_1, FN_GPSIN_C, FN_USB_OVC1, | ||
2181 | FN_RX2_E, FN_SCL2_B, 0, 0, | ||
2182 | /* IP0_4_2 [3] */ | ||
2183 | FN_AUDATA0, FN_ARM_TRACEDATA_0, FN_GPSCLK_C, FN_USB_OVC0, | ||
2184 | FN_TX2_E, FN_SDA2_B, 0, 0, | ||
2185 | /* IP0_1_0 [2] */ | ||
2186 | FN_PRESETOUT, 0, FN_PWM1, 0, | ||
2187 | } | ||
2188 | }, | ||
2189 | { PINMUX_CFG_REG_VAR("IPSR1", 0xfffc0024, 32, | ||
2190 | 1, 1, 2, 3, 1, 3, 3, 1, 2, 4, 3, 3, 3, 1, 1) { | ||
2191 | /* IP1_31 [1] */ | ||
2192 | 0, 0, | ||
2193 | /* IP1_30 [1] */ | ||
2194 | 0, 0, | ||
2195 | /* IP1_29_28 [2] */ | ||
2196 | FN_EX_CS1, FN_MMC_D4, 0, 0, | ||
2197 | /* IP1_27_25 [3] */ | ||
2198 | FN_SSI_WS1_B, FN_EX_CS0, FN_SCL2_A, FN_TX3_C, | ||
2199 | FN_TS_SCK0_A, 0, 0, 0, | ||
2200 | /* IP1_24 [1] */ | ||
2201 | FN_WE1, FN_ATAWR0_B, | ||
2202 | /* IP1_23_21 [3] */ | ||
2203 | FN_MMC_D5, FN_ATADIR0_B, 0, FN_RD_WR, | ||
2204 | 0, 0, 0, 0, | ||
2205 | /* IP1_20_18 [3] */ | ||
2206 | FN_SSI_SCK1_B, FN_ATAG0_B, FN_CS1_A26, FN_SDA2_A, | ||
2207 | FN_SCK2_B, 0, 0, 0, | ||
2208 | /* IP1_17 [1] */ | ||
2209 | FN_CS0, FN_HSPI_RX1_B, | ||
2210 | /* IP1_16_15 [2] */ | ||
2211 | FN_CLKOUT, FN_HSPI_TX1_B, FN_PWM0_B, 0, | ||
2212 | /* IP1_14_11 [4] */ | ||
2213 | FN_SD1_WP_A, FN_MMC_D7, 0, FN_A25, | ||
2214 | FN_DACK1_A, 0, FN_HCTS0_B, FN_RX3_C, | ||
2215 | FN_TS_SDAT0_A, 0, 0, 0, | ||
2216 | 0, 0, 0, 0, | ||
2217 | /* IP1_10_8 [3] */ | ||
2218 | FN_SD1_CLK_B, FN_MMC_D6, 0, FN_A24, | ||
2219 | FN_DREQ1_A, 0, FN_HRX0_B, FN_TS_SPSYNC0_A, | ||
2220 | /* IP1_7_5 [3] */ | ||
2221 | FN_A23, FN_HTX0_B, FN_TX2_B, FN_DACK2_A, | ||
2222 | FN_TS_SDEN0_A, 0, 0, 0, | ||
2223 | /* IP1_4_2 [3] */ | ||
2224 | FN_A22, FN_HRTS0_B, FN_RX2_B, FN_DREQ2_A, | ||
2225 | 0, 0, 0, 0, | ||
2226 | /* IP1_1 [1] */ | ||
2227 | FN_A21, FN_HSPI_CLK1_B, | ||
2228 | /* IP1_0 [1] */ | ||
2229 | FN_A20, FN_HSPI_CS1_B, | ||
2230 | } | ||
2231 | }, | ||
2232 | { PINMUX_CFG_REG_VAR("IPSR2", 0xfffc0028, 32, | ||
2233 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | ||
2234 | 1, 1, 1, 1, 3, 2, 3, 3, 3, 3) { | ||
2235 | /* IP2_31 [1] */ | ||
2236 | FN_MLB_CLK, FN_IRQ1_A, | ||
2237 | /* IP2_30 [1] */ | ||
2238 | FN_RD_WR_B, FN_IRQ0, | ||
2239 | /* IP2_29 [1] */ | ||
2240 | FN_D11, 0, | ||
2241 | /* IP2_28 [1] */ | ||
2242 | FN_D10, 0, | ||
2243 | /* IP2_27 [1] */ | ||
2244 | FN_D9, 0, | ||
2245 | /* IP2_26 [1] */ | ||
2246 | FN_D8, 0, | ||
2247 | /* IP2_25 [1] */ | ||
2248 | FN_D7, 0, | ||
2249 | /* IP2_24 [1] */ | ||
2250 | FN_D6, 0, | ||
2251 | /* IP2_23 [1] */ | ||
2252 | FN_D5, 0, | ||
2253 | /* IP2_22 [1] */ | ||
2254 | FN_D4, 0, | ||
2255 | /* IP2_21 [1] */ | ||
2256 | FN_D3, 0, | ||
2257 | /* IP2_20 [1] */ | ||
2258 | FN_D2, 0, | ||
2259 | /* IP2_19 [1] */ | ||
2260 | FN_D1, 0, | ||
2261 | /* IP2_18 [1] */ | ||
2262 | FN_D0, 0, | ||
2263 | /* IP2_17 [1] */ | ||
2264 | FN_EX_WAIT0, FN_PWM0_C, | ||
2265 | /* IP2_16_14 [3] */ | ||
2266 | FN_DACK0, 0, 0, FN_TX3_A, | ||
2267 | FN_DRACK0, 0, 0, 0, | ||
2268 | /* IP2_13_12 [2] */ | ||
2269 | FN_DREQ0_A, 0, 0, FN_RX3_A, | ||
2270 | /* IP2_11_9 [3] */ | ||
2271 | FN_SD1_DAT1_A, FN_MMC_D1, 0, FN_ATAWR0_A, | ||
2272 | FN_EX_CS5, FN_EX_WAIT2_A, 0, 0, | ||
2273 | /* IP2_8_6 [3] */ | ||
2274 | FN_SD1_DAT0_A, FN_MMC_D0, 0, FN_ATARD0, | ||
2275 | FN_EX_CS4, FN_EX_WAIT1_A, 0, 0, | ||
2276 | /* IP2_5_3 [3] */ | ||
2277 | FN_SD1_CMD_A, FN_MMC_CMD, 0, FN_ATACS10, | ||
2278 | FN_EX_CS3, 0, 0, 0, | ||
2279 | /* IP2_2_0 [3] */ | ||
2280 | FN_SD1_CLK_A, FN_MMC_CLK, 0, FN_ATACS00, | ||
2281 | FN_EX_CS2, 0, 0, 0, | ||
2282 | } | ||
2283 | }, | ||
2284 | { PINMUX_CFG_REG_VAR("IPSR3", 0xfffc002c, 32, | ||
2285 | 1, 1, 1, 1, 1, 3, 3, 2, | ||
2286 | 3, 3, 3, 2, 3, 3, 2) { | ||
2287 | /* IP3_31 [1] */ | ||
2288 | FN_DU0_DR6, FN_LCDOUT6, | ||
2289 | /* IP3_30 [1] */ | ||
2290 | FN_DU0_DR5, FN_LCDOUT5, | ||
2291 | /* IP3_29 [1] */ | ||
2292 | FN_DU0_DR4, FN_LCDOUT4, | ||
2293 | /* IP3_28 [1] */ | ||
2294 | FN_DU0_DR3, FN_LCDOUT3, | ||
2295 | /* IP3_27 [1] */ | ||
2296 | FN_DU0_DR2, FN_LCDOUT2, | ||
2297 | /* IP3_26_24 [3] */ | ||
2298 | FN_SSI_WS4, FN_DU0_DR1, FN_LCDOUT1, FN_AUDATA3, | ||
2299 | FN_ARM_TRACEDATA_3, FN_SCL3_C, FN_ADICHS2, FN_TS_SPSYNC0_B, | ||
2300 | /* IP3_23_21 [3] */ | ||
2301 | FN_SSI_SCK4, FN_DU0_DR0, FN_LCDOUT0, FN_AUDATA2, | ||
2302 | FN_ARM_TRACEDATA_2, FN_SDA3_C, FN_ADICHS1, FN_TS_SDEN0_B, | ||
2303 | /* IP3_20_19 [2] */ | ||
2304 | FN_SD1_DAT3_B, FN_HRTS0_A, FN_RTS0, 0, | ||
2305 | /* IP3_18_16 [3] */ | ||
2306 | FN_SD1_DAT2_B, FN_HCTS0_A, FN_CTS0, 0, | ||
2307 | 0, 0, 0, 0, | ||
2308 | /* IP3_15_13 [3] */ | ||
2309 | FN_SD1_DAT1_B, FN_HSCK0, FN_SCK0, FN_SCL3_B, | ||
2310 | 0, 0, 0, 0, | ||
2311 | /* IP3_12_10 [3] */ | ||
2312 | FN_SD1_DAT0_B, FN_HRX0_A, FN_RX0_A, 0, | ||
2313 | 0, 0, 0, 0, | ||
2314 | /* IP3_9_8 [2] */ | ||
2315 | FN_SD1_CLK_B, FN_HTX0_A, FN_TX0_A, 0, | ||
2316 | /* IP3_7_5 [3] */ | ||
2317 | FN_SD1_CMD_B, FN_SCIF_CLK, FN_AUDIO_CLKOUT_B, FN_CAN_CLK_B, | ||
2318 | FN_SDA3_B, 0, 0, 0, | ||
2319 | /* IP3_4_2 [3] */ | ||
2320 | FN_MLB_DAT, FN_TX5_B, FN_SCL3_A, FN_IRQ3_A, | ||
2321 | FN_SDSELF_B, 0, 0, 0, | ||
2322 | /* IP3_1_0 [2] */ | ||
2323 | FN_MLB_SIG, FN_RX5_B, FN_SDA3_A, FN_IRQ2_A, | ||
2324 | } | ||
2325 | }, | ||
2326 | { PINMUX_CFG_REG_VAR("IPSR4", 0xfffc0030, 32, | ||
2327 | 1, 2, 2, 2, 4, 4, 2, 2, 2, 2, 1, 1, 3, 3, 1) { | ||
2328 | /* IP4_31 [1] */ | ||
2329 | 0, 0, | ||
2330 | /* IP4_30_29 [2] */ | ||
2331 | FN_VI0_R4_B, FN_DU0_DB4, FN_LCDOUT20, 0, | ||
2332 | /* IP4_28_27 [2] */ | ||
2333 | FN_VI0_R3_B, FN_DU0_DB3, FN_LCDOUT19, 0, | ||
2334 | /* IP4_26_25 [2] */ | ||
2335 | FN_VI0_R2_B, FN_DU0_DB2, FN_LCDOUT18, 0, | ||
2336 | /* IP4_24_21 [4] */ | ||
2337 | FN_AUDIO_CLKC, FN_VI0_R1_B, FN_DU0_DB1, FN_LCDOUT17, | ||
2338 | FN_AUDATA7, FN_ARM_TRACEDATA_7, FN_GPSIN_A, 0, | ||
2339 | FN_ADICS_SAMP, FN_TS_SCK0_B, 0, 0, | ||
2340 | 0, 0, 0, 0, | ||
2341 | /* IP4_20_17 [4] */ | ||
2342 | FN_SSI_SCK2_B, FN_VI0_R0_B, FN_DU0_DB0, FN_LCDOUT16, | ||
2343 | FN_AUDATA6, FN_ARM_TRACEDATA_6, FN_GPSCLK_A, FN_PWM0_A, | ||
2344 | FN_ADICLK, FN_TS_SDAT0_B, 0, 0, | ||
2345 | 0, 0, 0, 0, | ||
2346 | /* IP4_16_15 [2] */ | ||
2347 | FN_DU0_DG7, FN_LCDOUT15, FN_TX4_A, 0, | ||
2348 | /* IP4_14_13 [2] */ | ||
2349 | FN_DU0_DG6, FN_LCDOUT14, FN_RX4_A, 0, | ||
2350 | /* IP4_12_11 [2] */ | ||
2351 | FN_DU0_DG5, FN_LCDOUT13, FN_TX0_B, 0, | ||
2352 | /* IP4_10_9 [2] */ | ||
2353 | FN_DU0_DG4, FN_LCDOUT12, FN_RX0_B, 0, | ||
2354 | /* IP4_8 [1] */ | ||
2355 | FN_DU0_DG3, FN_LCDOUT11, | ||
2356 | /* IP4_7 [1] */ | ||
2357 | FN_DU0_DG2, FN_LCDOUT10, | ||
2358 | /* IP4_6_4 [3] */ | ||
2359 | FN_DU0_DG1, FN_LCDOUT9, FN_AUDATA5, FN_ARM_TRACEDATA_5, | ||
2360 | FN_RX1_D, FN_CAN0_RX_A, FN_ADIDATA, 0, | ||
2361 | /* IP4_3_1 [3] */ | ||
2362 | FN_DU0_DG0, FN_LCDOUT8, FN_AUDATA4, FN_ARM_TRACEDATA_4, | ||
2363 | FN_TX1_D, FN_CAN0_TX_A, FN_ADICHS0, 0, | ||
2364 | /* IP4_0 [1] */ | ||
2365 | FN_DU0_DR7, FN_LCDOUT7, | ||
2366 | } | ||
2367 | }, | ||
2368 | { PINMUX_CFG_REG_VAR("IPSR5", 0xfffc0034, 32, | ||
2369 | 1, 2, 3, 3, 2, 3, 3, 2, 1, 2, 2, 1, 1, 2, 2, 2) { | ||
2370 | |||
2371 | /* IP5_31 [1] */ | ||
2372 | 0, 0, | ||
2373 | /* IP5_30_29 [2] */ | ||
2374 | FN_SSI_SDATA7, FN_HSPI_TX0_B, FN_RX2_A, FN_CAN0_RX_B, | ||
2375 | /* IP5_28_26 [3] */ | ||
2376 | FN_SSI_SDATA8, FN_SSI_SCK2_A, FN_HSPI_CS0_B, FN_TX2_A, | ||
2377 | FN_CAN0_TX_B, 0, 0, 0, | ||
2378 | /* IP5_25_23 [3] */ | ||
2379 | FN_SD1_WP_B, FN_SSI_WS78, FN_HSPI_CLK0_B, FN_RX1_B, | ||
2380 | FN_CAN_CLK_D, 0, 0, 0, | ||
2381 | /* IP5_22_21 [2] */ | ||
2382 | FN_SD1_CD_B, FN_SSI_SCK78, FN_HSPI_RX0_B, FN_TX1_B, | ||
2383 | /* IP5_20_18 [3] */ | ||
2384 | FN_SSI_WS1_A, FN_DU0_CDE, FN_QPOLB, FN_AUDSYNC, | ||
2385 | FN_ARM_TRACECTL, FN_FMIN_D, 0, 0, | ||
2386 | /* IP5_17_15 [3] */ | ||
2387 | FN_SSI_SCK1_A, FN_DU0_DISP, FN_QPOLA, FN_AUDCK, | ||
2388 | FN_ARM_TRACECLK, FN_BPFCLK_D, 0, 0, | ||
2389 | /* IP5_14_13 [2] */ | ||
2390 | FN_DU0_EXODDF_DU0_ODDF_DISP_CDE, FN_QCPV_QDE, | ||
2391 | FN_FMCLK_D, 0, | ||
2392 | /* IP5_12 [1] */ | ||
2393 | FN_DU0_EXVSYNC_DU0_VSYNC, FN_QSTB_QHE, | ||
2394 | /* IP5_11_10 [2] */ | ||
2395 | FN_SSI_WS2_B, FN_DU0_EXHSYNC_DU0_HSYNC, | ||
2396 | FN_QSTH_QHS, 0, | ||
2397 | /* IP5_9_8 [2] */ | ||
2398 | FN_DU0_DOTCLKO_UT1, FN_QSTVB_QVE, | ||
2399 | FN_AUDIO_CLKOUT_A, FN_REMOCON_C, | ||
2400 | /* IP5_7 [1] */ | ||
2401 | FN_DU0_DOTCLKO_UT0, FN_QCLK, | ||
2402 | /* IP5_6 [1] */ | ||
2403 | FN_DU0_DOTCLKIN, FN_QSTVA_QVS, | ||
2404 | /* IP5_5_4 [2] */ | ||
2405 | FN_VI1_DATA11_B, FN_DU0_DB7, FN_LCDOUT23, 0, | ||
2406 | /* IP5_3_2 [2] */ | ||
2407 | FN_VI1_DATA10_B, FN_DU0_DB6, FN_LCDOUT22, 0, | ||
2408 | /* IP5_1_0 [2] */ | ||
2409 | FN_VI0_R5_B, FN_DU0_DB5, FN_LCDOUT21, 0, | ||
2410 | } | ||
2411 | }, | ||
2412 | { PINMUX_CFG_REG_VAR("IPSR6", 0xfffc0038, 32, | ||
2413 | 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, | ||
2414 | 1, 2, 1, 1, 1, 1, 2, 3, 2) { | ||
2415 | /* IP6_31_30 [2] */ | ||
2416 | FN_SD0_DAT2, 0, FN_SUB_TDI, 0, | ||
2417 | /* IP6_29_28 [2] */ | ||
2418 | FN_SD0_DAT1, 0, FN_SUB_TCK, 0, | ||
2419 | /* IP6_27_26 [2] */ | ||
2420 | FN_SD0_DAT0, 0, FN_SUB_TMS, 0, | ||
2421 | /* IP6_25_24 [2] */ | ||
2422 | FN_SD0_CMD, 0, FN_SUB_TRST, 0, | ||
2423 | /* IP6_23_22 [2] */ | ||
2424 | FN_SD0_CLK, 0, FN_SUB_TDO, 0, | ||
2425 | /* IP6_21 [1] */ | ||
2426 | FN_SSI_SDATA0, FN_ARM_TRACEDATA_15, | ||
2427 | /* IP6_20_19 [2] */ | ||
2428 | FN_SSI_SDATA1, FN_ARM_TRACEDATA_14, | ||
2429 | FN_SCL1_A, FN_SCK2_A, | ||
2430 | /* IP6_18_17 [2] */ | ||
2431 | FN_SSI_SDATA2, FN_HSPI_CS2_A, | ||
2432 | FN_ARM_TRACEDATA_13, FN_SDA1_A, | ||
2433 | /* IP6_16 [1] */ | ||
2434 | FN_SSI_WS012, FN_ARM_TRACEDATA_12, | ||
2435 | /* IP6_15_14 [2] */ | ||
2436 | FN_SSI_SCK012, FN_ARM_TRACEDATA_11, | ||
2437 | FN_TX0_D, 0, | ||
2438 | /* IP6_13 [1] */ | ||
2439 | FN_SSI_SDATA3, FN_ARM_TRACEDATA_10, | ||
2440 | /* IP6_12_11 [2] */ | ||
2441 | FN_SSI_SDATA4, FN_SSI_WS2_A, | ||
2442 | FN_ARM_TRACEDATA_9, 0, | ||
2443 | /* IP6_10 [1] */ | ||
2444 | FN_SSI_WS34, FN_ARM_TRACEDATA_8, | ||
2445 | /* IP6_9 [1] */ | ||
2446 | FN_SSI_SDATA5, FN_RX0_D, | ||
2447 | /* IP6_8 [1] */ | ||
2448 | FN_SSI_WS5, FN_TX4_C, | ||
2449 | /* IP6_7 [1] */ | ||
2450 | FN_SSI_SCK5, FN_RX4_C, | ||
2451 | /* IP6_6_5 [2] */ | ||
2452 | FN_SSI_SDATA6, FN_HSPI_TX2_A, | ||
2453 | FN_FMIN_B, 0, | ||
2454 | /* IP6_4_2 [3] */ | ||
2455 | FN_SSI_WS6, FN_HSPI_CLK2_A, | ||
2456 | FN_BPFCLK_B, FN_CAN1_RX_B, | ||
2457 | 0, 0, 0, 0, | ||
2458 | /* IP6_1_0 [2] */ | ||
2459 | FN_SSI_SCK6, FN_HSPI_RX2_A, | ||
2460 | FN_FMCLK_B, FN_CAN1_TX_B, | ||
2461 | } | ||
2462 | }, | ||
2463 | { PINMUX_CFG_REG_VAR("IPSR7", 0xfffc003c, 32, | ||
2464 | 3, 4, 3, 1, 3, 3, 3, 3, 3, 2, 2, 2) { | ||
2465 | |||
2466 | /* IP7_31_29 [3] */ | ||
2467 | FN_VI0_HSYNC, FN_SD2_CD_B, FN_VI1_DATA2, FN_DU1_DR2, | ||
2468 | 0, FN_HSPI_CS1_A, FN_RX3_B, 0, | ||
2469 | /* IP7_28_25 [4] */ | ||
2470 | FN_VI0_FIELD, FN_SD2_DAT3_B, FN_VI0_R3_C, FN_VI1_DATA1, | ||
2471 | FN_DU1_DG7, 0, FN_HSPI_CLK1_A, FN_TX4_B, | ||
2472 | 0, 0, 0, 0, | ||
2473 | 0, 0, 0, 0, | ||
2474 | /* IP7_24_22 [3] */ | ||
2475 | FN_VI0_CLKENB, FN_SD2_DAT2_B, FN_VI1_DATA0, FN_DU1_DG6, | ||
2476 | 0, FN_HSPI_RX1_A, FN_RX4_B, 0, | ||
2477 | /* IP7_21 [1] */ | ||
2478 | FN_VI0_CLK, FN_CAN_CLK_A, | ||
2479 | /* IP7_20_18 [3] */ | ||
2480 | FN_TCLK0, FN_HSCK1_A, FN_FMIN_A, 0, | ||
2481 | FN_IRQ2_C, FN_CTS1_C, FN_SPEEDIN, 0, | ||
2482 | /* IP7_17_15 [3] */ | ||
2483 | FN_VI1_VSYNC, FN_HSPI_TX0, FN_HCTS1_A, FN_BPFCLK_A, | ||
2484 | 0, FN_TX1_C, 0, 0, | ||
2485 | /* IP7_14_12 [3] */ | ||
2486 | FN_VI1_HSYNC, FN_HSPI_RX0_A, FN_HRTS1_A, FN_FMCLK_A, | ||
2487 | 0, FN_RX1_C, 0, 0, | ||
2488 | /* IP7_11_9 [3] */ | ||
2489 | FN_VI1_FIELD, FN_HSPI_CS0_A, FN_HRX1_A, 0, | ||
2490 | FN_SCK1_C, 0, 0, 0, | ||
2491 | /* IP7_8_6 [3] */ | ||
2492 | FN_VI1_CLKENB, FN_HSPI_CLK0_A, FN_HTX1_A, 0, | ||
2493 | FN_RTS1_C, 0, 0, 0, | ||
2494 | /* IP7_5_4 [2] */ | ||
2495 | FN_SD0_WP, 0, FN_RX5_A, 0, | ||
2496 | /* IP7_3_2 [2] */ | ||
2497 | FN_SD0_CD, 0, FN_TX5_A, 0, | ||
2498 | /* IP7_1_0 [2] */ | ||
2499 | FN_SD0_DAT3, 0, FN_IRQ1_B, 0, | ||
2500 | } | ||
2501 | }, | ||
2502 | { PINMUX_CFG_REG_VAR("IPSR8", 0xfffc0040, 32, | ||
2503 | 1, 1, 3, 3, 2, 3, 3, 2, 3, 2, 3, 3, 3) { | ||
2504 | /* IP8_31 [1] */ | ||
2505 | 0, 0, | ||
2506 | /* IP8_30 [1] */ | ||
2507 | 0, 0, | ||
2508 | /* IP8_29_27 [3] */ | ||
2509 | FN_VI0_G3, FN_SD2_CMD_B, FN_VI1_DATA5, FN_DU1_DR5, | ||
2510 | 0, FN_HRX1_B, 0, 0, | ||
2511 | /* IP8_26_24 [3] */ | ||
2512 | FN_VI0_G2, FN_SD2_CLK_B, FN_VI1_DATA4, FN_DU1_DR4, | ||
2513 | 0, FN_HTX1_B, 0, 0, | ||
2514 | /* IP8_23_22 [2] */ | ||
2515 | FN_VI0_DATA7_VI0_G1, FN_DU1_DB5, | ||
2516 | FN_RTS1_A, 0, | ||
2517 | /* IP8_21_19 [3] */ | ||
2518 | FN_VI0_DATA6_VI0_G0, FN_DU1_DB4, | ||
2519 | FN_CTS1_A, FN_PWM5, | ||
2520 | 0, 0, 0, 0, | ||
2521 | /* IP8_18_16 [3] */ | ||
2522 | FN_VI0_DATA5_VI0_B5, FN_DU1_DB3, FN_SCK1_A, FN_PWM4, | ||
2523 | 0, FN_HSCK1_B, 0, 0, | ||
2524 | /* IP8_15_14 [2] */ | ||
2525 | FN_VI0_DATA4_VI0_B4, FN_DU1_DB2, FN_RX1_A, 0, | ||
2526 | /* IP8_13_11 [3] */ | ||
2527 | FN_VI0_DATA3_VI0_B3, FN_DU1_DG5, FN_TX1_A, FN_TX0_C, | ||
2528 | 0, 0, 0, 0, | ||
2529 | /* IP8_10_9 [2] */ | ||
2530 | FN_VI0_DATA2_VI0_B2, FN_DU1_DG4, FN_RX0_C, 0, | ||
2531 | /* IP8_8_6 [3] */ | ||
2532 | FN_VI0_DATA1_VI0_B1, FN_DU1_DG3, FN_IRQ3_B, FN_TX3_D, | ||
2533 | 0, 0, 0, 0, | ||
2534 | /* IP8_5_3 [3] */ | ||
2535 | FN_VI0_DATA0_VI0_B0, FN_DU1_DG2, FN_IRQ2_B, FN_RX3_D, | ||
2536 | 0, 0, 0, 0, | ||
2537 | /* IP8_2_0 [3] */ | ||
2538 | FN_VI0_VSYNC, FN_SD2_WP_B, FN_VI1_DATA3, FN_DU1_DR3, | ||
2539 | 0, FN_HSPI_TX1_A, FN_TX3_B, 0, | ||
2540 | } | ||
2541 | }, | ||
2542 | { PINMUX_CFG_REG_VAR("IPSR9", 0xfffc0044, 32, | ||
2543 | 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) { | ||
2544 | /* IP9_31 [1] */ | ||
2545 | 0, 0, | ||
2546 | /* IP9_30 [1] */ | ||
2547 | 0, 0, | ||
2548 | /* IP9_29_27 [3] */ | ||
2549 | FN_VI1_DATA11_A, FN_DU1_EXHSYNC_DU1_HSYNC, | ||
2550 | FN_ETH_RXD1, FN_FMIN_C, | ||
2551 | 0, FN_RX2_D, | ||
2552 | FN_SCL2_C, 0, | ||
2553 | /* IP9_26_24 [3] */ | ||
2554 | FN_VI1_DATA10_A, FN_DU1_DOTCLKOUT, | ||
2555 | FN_ETH_RXD0, FN_BPFCLK_C, | ||
2556 | 0, FN_TX2_D, | ||
2557 | FN_SDA2_C, 0, | ||
2558 | /* IP9_23_21 [3] */ | ||
2559 | FN_VI0_R5_A, 0, FN_ETH_RX_ER, FN_FMCLK_C, | ||
2560 | FN_IERX, FN_RX2_C, 0, 0, | ||
2561 | /* IP9_20_18 [3] */ | ||
2562 | FN_VI0_R4_A, FN_ETH_TX_EN, 0, 0, | ||
2563 | FN_IETX, FN_TX2_C, 0, 0, | ||
2564 | /* IP9_17_15 [3] */ | ||
2565 | FN_VI0_R3_A, FN_ETH_CRS_DV, 0, FN_IECLK, | ||
2566 | FN_SCK2_C, 0, 0, 0, | ||
2567 | /* IP9_14_12 [3] */ | ||
2568 | FN_VI0_R2_A, FN_VI1_DATA9, FN_DU1_DB7, FN_ETH_TXD1, | ||
2569 | 0, FN_PWM3, 0, 0, | ||
2570 | /* IP9_11_9 [3] */ | ||
2571 | FN_VI0_R1_A, FN_VI1_DATA8, FN_DU1_DB6, FN_ETH_TXD0, | ||
2572 | 0, FN_PWM2, FN_TCLK1, 0, | ||
2573 | /* IP9_8_6 [3] */ | ||
2574 | FN_VI0_R0_A, FN_VI1_CLK, FN_ETH_REF_CLK, FN_DU1_DOTCLKIN, | ||
2575 | 0, 0, 0, 0, | ||
2576 | /* IP9_5_3 [3] */ | ||
2577 | FN_VI0_G5, FN_SD2_DAT1_B, FN_VI1_DATA7, FN_DU1_DR7, | ||
2578 | 0, FN_HCTS1_B, 0, 0, | ||
2579 | /* IP9_2_0 [3] */ | ||
2580 | FN_VI0_G4, FN_SD2_DAT0_B, FN_VI1_DATA6, FN_DU1_DR6, | ||
2581 | 0, FN_HRTS1_B, 0, 0, | ||
2582 | } | ||
2583 | }, | ||
2584 | { PINMUX_CFG_REG_VAR("IPSR10", 0xfffc0048, 32, | ||
2585 | 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 4, 3, 3, 3) { | ||
2586 | |||
2587 | /* IP10_31 [1] */ | ||
2588 | 0, 0, | ||
2589 | /* IP10_30 [1] */ | ||
2590 | 0, 0, | ||
2591 | /* IP10_29 [1] */ | ||
2592 | 0, 0, | ||
2593 | /* IP10_28 [1] */ | ||
2594 | 0, 0, | ||
2595 | /* IP10_27 [1] */ | ||
2596 | 0, 0, | ||
2597 | /* IP10_26 [1] */ | ||
2598 | 0, 0, | ||
2599 | /* IP10_25 [1] */ | ||
2600 | 0, 0, | ||
2601 | /* IP10_24_22 [3] */ | ||
2602 | FN_SD2_WP_A, FN_VI1_DATA15, FN_EX_WAIT2_B, FN_DACK0_B, | ||
2603 | FN_HSPI_TX2_B, FN_CAN_CLK_C, 0, 0, | ||
2604 | /* IP10_21_19 [3] */ | ||
2605 | FN_SD2_CD_A, FN_VI1_DATA14, FN_EX_WAIT1_B, FN_DREQ0_B, | ||
2606 | FN_HSPI_RX2_B, FN_REMOCON_A, 0, 0, | ||
2607 | /* IP10_18_16 [3] */ | ||
2608 | FN_SD2_DAT3_A, FN_VI1_DATA13, FN_DACK2_B, FN_ATAG1, | ||
2609 | FN_HSPI_CS2_B, FN_GPSIN_B, 0, 0, | ||
2610 | /* IP10_15_13 [3] */ | ||
2611 | FN_SD2_DAT2_A, FN_VI1_DATA12, FN_DREQ2_B, FN_ATADIR1, | ||
2612 | FN_HSPI_CLK2_B, FN_GPSCLK_B, 0, 0, | ||
2613 | /* IP10_12_9 [4] */ | ||
2614 | FN_SD2_DAT1_A, FN_DU1_CDE, FN_ATACS11, FN_DACK1_B, | ||
2615 | FN_ETH_MAGIC, FN_CAN1_TX_A, 0, FN_PWM6, | ||
2616 | 0, 0, 0, 0, | ||
2617 | 0, 0, 0, 0, | ||
2618 | /* IP10_8_6 [3] */ | ||
2619 | FN_SD2_DAT0_A, FN_DU1_DISP, FN_ATACS01, FN_DREQ1_B, | ||
2620 | FN_ETH_LINK, FN_CAN1_RX_A, 0, 0, | ||
2621 | /* IP10_5_3 [3] */ | ||
2622 | FN_SD2_CMD_A, FN_DU1_EXODDF_DU1_ODDF_DISP_CDE, | ||
2623 | FN_ATAWR1, FN_ETH_MDIO, | ||
2624 | FN_SCL1_B, 0, | ||
2625 | 0, 0, | ||
2626 | /* IP10_2_0 [3] */ | ||
2627 | FN_SD2_CLK_A, FN_DU1_EXVSYNC_DU1_VSYNC, | ||
2628 | FN_ATARD1, FN_ETH_MDC, | ||
2629 | FN_SDA1_B, 0, | ||
2630 | 0, 0, | ||
2631 | } | ||
2632 | }, | ||
2633 | { PINMUX_CFG_REG_VAR("MOD_SEL0", 0xfffc0050, 32, | ||
2634 | 1, 1, 2, 2, 3, 2, 2, 1, 1, 1, 1, 2, | ||
2635 | 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1) { | ||
2636 | |||
2637 | /* SEL 31 [1] */ | ||
2638 | 0, 0, | ||
2639 | /* SEL_30 (SCIF5) [1] */ | ||
2640 | FN_SEL_SCIF5_A, FN_SEL_SCIF5_B, | ||
2641 | /* SEL_29_28 (SCIF4) [2] */ | ||
2642 | FN_SEL_SCIF4_A, FN_SEL_SCIF4_B, | ||
2643 | FN_SEL_SCIF4_C, 0, | ||
2644 | /* SEL_27_26 (SCIF3) [2] */ | ||
2645 | FN_SEL_SCIF3_A, FN_SEL_SCIF3_B, | ||
2646 | FN_SEL_SCIF3_C, FN_SEL_SCIF3_D, | ||
2647 | /* SEL_25_23 (SCIF2) [3] */ | ||
2648 | FN_SEL_SCIF2_A, FN_SEL_SCIF2_B, | ||
2649 | FN_SEL_SCIF2_C, FN_SEL_SCIF2_D, | ||
2650 | FN_SEL_SCIF2_E, 0, | ||
2651 | 0, 0, | ||
2652 | /* SEL_22_21 (SCIF1) [2] */ | ||
2653 | FN_SEL_SCIF1_A, FN_SEL_SCIF1_B, | ||
2654 | FN_SEL_SCIF1_C, FN_SEL_SCIF1_D, | ||
2655 | /* SEL_20_19 (SCIF0) [2] */ | ||
2656 | FN_SEL_SCIF0_A, FN_SEL_SCIF0_B, | ||
2657 | FN_SEL_SCIF0_C, FN_SEL_SCIF0_D, | ||
2658 | /* SEL_18 [1] */ | ||
2659 | 0, 0, | ||
2660 | /* SEL_17 (SSI2) [1] */ | ||
2661 | FN_SEL_SSI2_A, FN_SEL_SSI2_B, | ||
2662 | /* SEL_16 (SSI1) [1] */ | ||
2663 | FN_SEL_SSI1_A, FN_SEL_SSI1_B, | ||
2664 | /* SEL_15 (VI1) [1] */ | ||
2665 | FN_SEL_VI1_A, FN_SEL_VI1_B, | ||
2666 | /* SEL_14_13 (VI0) [2] */ | ||
2667 | FN_SEL_VI0_A, FN_SEL_VI0_B, | ||
2668 | FN_SEL_VI0_C, FN_SEL_VI0_D, | ||
2669 | /* SEL_12 [1] */ | ||
2670 | 0, 0, | ||
2671 | /* SEL_11 (SD2) [1] */ | ||
2672 | FN_SEL_SD2_A, FN_SEL_SD2_B, | ||
2673 | /* SEL_10 (SD1) [1] */ | ||
2674 | FN_SEL_SD1_A, FN_SEL_SD1_B, | ||
2675 | /* SEL_9 (IRQ3) [1] */ | ||
2676 | FN_SEL_IRQ3_A, FN_SEL_IRQ3_B, | ||
2677 | /* SEL_8_7 (IRQ2) [2] */ | ||
2678 | FN_SEL_IRQ2_A, FN_SEL_IRQ2_B, | ||
2679 | FN_SEL_IRQ2_C, 0, | ||
2680 | /* SEL_6 (IRQ1) [1] */ | ||
2681 | FN_SEL_IRQ1_A, FN_SEL_IRQ1_B, | ||
2682 | /* SEL_5 [1] */ | ||
2683 | 0, 0, | ||
2684 | /* SEL_4 (DREQ2) [1] */ | ||
2685 | FN_SEL_DREQ2_A, FN_SEL_DREQ2_B, | ||
2686 | /* SEL_3 (DREQ1) [1] */ | ||
2687 | FN_SEL_DREQ1_A, FN_SEL_DREQ1_B, | ||
2688 | /* SEL_2 (DREQ0) [1] */ | ||
2689 | FN_SEL_DREQ0_A, FN_SEL_DREQ0_B, | ||
2690 | /* SEL_1 (WAIT2) [1] */ | ||
2691 | FN_SEL_WAIT2_A, FN_SEL_WAIT2_B, | ||
2692 | /* SEL_0 (WAIT1) [1] */ | ||
2693 | FN_SEL_WAIT1_A, FN_SEL_WAIT1_B, | ||
2694 | } | ||
2695 | }, | ||
2696 | { PINMUX_CFG_REG_VAR("MOD_SEL1", 0xfffc0054, 32, | ||
2697 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, | ||
2698 | 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1) { | ||
2699 | |||
2700 | /* SEL_31 [1] */ | ||
2701 | 0, 0, | ||
2702 | /* SEL_30 [1] */ | ||
2703 | 0, 0, | ||
2704 | /* SEL_29 [1] */ | ||
2705 | 0, 0, | ||
2706 | /* SEL_28 [1] */ | ||
2707 | 0, 0, | ||
2708 | /* SEL_27 (CAN1) [1] */ | ||
2709 | FN_SEL_CAN1_A, FN_SEL_CAN1_B, | ||
2710 | /* SEL_26 (CAN0) [1] */ | ||
2711 | FN_SEL_CAN0_A, FN_SEL_CAN0_B, | ||
2712 | /* SEL_25_24 (CANCLK) [2] */ | ||
2713 | FN_SEL_CANCLK_A, FN_SEL_CANCLK_B, | ||
2714 | FN_SEL_CANCLK_C, FN_SEL_CANCLK_D, | ||
2715 | /* SEL_23 (HSCIF1) [1] */ | ||
2716 | FN_SEL_HSCIF1_A, FN_SEL_HSCIF1_B, | ||
2717 | /* SEL_22 (HSCIF0) [1] */ | ||
2718 | FN_SEL_HSCIF0_A, FN_SEL_HSCIF0_B, | ||
2719 | /* SEL_21 [1] */ | ||
2720 | 0, 0, | ||
2721 | /* SEL_20 [1] */ | ||
2722 | 0, 0, | ||
2723 | /* SEL_19 [1] */ | ||
2724 | 0, 0, | ||
2725 | /* SEL_18 [1] */ | ||
2726 | 0, 0, | ||
2727 | /* SEL_17 [1] */ | ||
2728 | 0, 0, | ||
2729 | /* SEL_16 [1] */ | ||
2730 | 0, 0, | ||
2731 | /* SEL_15 [1] */ | ||
2732 | 0, 0, | ||
2733 | /* SEL_14_13 (REMOCON) [2] */ | ||
2734 | FN_SEL_REMOCON_A, FN_SEL_REMOCON_B, | ||
2735 | FN_SEL_REMOCON_C, 0, | ||
2736 | /* SEL_12_11 (FM) [2] */ | ||
2737 | FN_SEL_FM_A, FN_SEL_FM_B, | ||
2738 | FN_SEL_FM_C, FN_SEL_FM_D, | ||
2739 | /* SEL_10_9 (GPS) [2] */ | ||
2740 | FN_SEL_GPS_A, FN_SEL_GPS_B, | ||
2741 | FN_SEL_GPS_C, 0, | ||
2742 | /* SEL_8 (TSIF0) [1] */ | ||
2743 | FN_SEL_TSIF0_A, FN_SEL_TSIF0_B, | ||
2744 | /* SEL_7 (HSPI2) [1] */ | ||
2745 | FN_SEL_HSPI2_A, FN_SEL_HSPI2_B, | ||
2746 | /* SEL_6 (HSPI1) [1] */ | ||
2747 | FN_SEL_HSPI1_A, FN_SEL_HSPI1_B, | ||
2748 | /* SEL_5 (HSPI0) [1] */ | ||
2749 | FN_SEL_HSPI0_A, FN_SEL_HSPI0_B, | ||
2750 | /* SEL_4_3 (I2C3) [2] */ | ||
2751 | FN_SEL_I2C3_A, FN_SEL_I2C3_B, | ||
2752 | FN_SEL_I2C3_C, 0, | ||
2753 | /* SEL_2_1 (I2C2) [2] */ | ||
2754 | FN_SEL_I2C2_A, FN_SEL_I2C2_B, | ||
2755 | FN_SEL_I2C2_C, 0, | ||
2756 | /* SEL_0 (I2C1) [1] */ | ||
2757 | FN_SEL_I2C1_A, FN_SEL_I2C1_B, | ||
2758 | } | ||
2759 | }, | ||
2760 | { }, | ||
2761 | }; | ||
2762 | |||
2763 | const struct sh_pfc_soc_info r8a7778_pinmux_info = { | ||
2764 | .name = "r8a7778_pfc", | ||
2765 | |||
2766 | .unlock_reg = 0xfffc0000, /* PMMR */ | ||
2767 | |||
2768 | .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, | ||
2769 | |||
2770 | .pins = pinmux_pins, | ||
2771 | .nr_pins = ARRAY_SIZE(pinmux_pins), | ||
2772 | |||
2773 | .groups = pinmux_groups, | ||
2774 | .nr_groups = ARRAY_SIZE(pinmux_groups), | ||
2775 | |||
2776 | .functions = pinmux_functions, | ||
2777 | .nr_functions = ARRAY_SIZE(pinmux_functions), | ||
2778 | |||
2779 | .cfg_regs = pinmux_config_regs, | ||
2780 | |||
2781 | .gpio_data = pinmux_data, | ||
2782 | .gpio_data_size = ARRAY_SIZE(pinmux_data), | ||
2783 | }; | ||
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7779.c b/drivers/pinctrl/sh-pfc/pfc-r8a7779.c index 8cd90e7e945a..8e22ca6c1044 100644 --- a/drivers/pinctrl/sh-pfc/pfc-r8a7779.c +++ b/drivers/pinctrl/sh-pfc/pfc-r8a7779.c | |||
@@ -1,8 +1,9 @@ | |||
1 | /* | 1 | /* |
2 | * r8a7779 processor support - PFC hardware block | 2 | * r8a7779 processor support - PFC hardware block |
3 | * | 3 | * |
4 | * Copyright (C) 2011 Renesas Solutions Corp. | 4 | * Copyright (C) 2011, 2013 Renesas Solutions Corp. |
5 | * Copyright (C) 2011 Magnus Damm | 5 | * Copyright (C) 2011 Magnus Damm |
6 | * Copyright (C) 2013 Cogent Embedded, Inc. | ||
6 | * | 7 | * |
7 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
@@ -19,6 +20,7 @@ | |||
19 | */ | 20 | */ |
20 | 21 | ||
21 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/platform_data/gpio-rcar.h> | ||
22 | 24 | ||
23 | #include "sh_pfc.h" | 25 | #include "sh_pfc.h" |
24 | 26 | ||
@@ -79,7 +81,7 @@ | |||
79 | #define _GP_PORT_ALL(bank, pin, name, sfx) name##_##sfx | 81 | #define _GP_PORT_ALL(bank, pin, name, sfx) name##_##sfx |
80 | 82 | ||
81 | #define _GP_GPIO(bank, pin, _name, sfx) \ | 83 | #define _GP_GPIO(bank, pin, _name, sfx) \ |
82 | [(bank * 32) + pin] = { \ | 84 | [RCAR_GP_PIN(bank, pin)] = { \ |
83 | .name = __stringify(_name), \ | 85 | .name = __stringify(_name), \ |
84 | .enum_id = _name##_DATA, \ | 86 | .enum_id = _name##_DATA, \ |
85 | } | 87 | } |
@@ -1472,9 +1474,12 @@ static struct sh_pfc_pin pinmux_pins[] = { | |||
1472 | /* - DU0 -------------------------------------------------------------------- */ | 1474 | /* - DU0 -------------------------------------------------------------------- */ |
1473 | static const unsigned int du0_rgb666_pins[] = { | 1475 | static const unsigned int du0_rgb666_pins[] = { |
1474 | /* R[7:2], G[7:2], B[7:2] */ | 1476 | /* R[7:2], G[7:2], B[7:2] */ |
1475 | 188, 187, 186, 185, 184, 183, | 1477 | RCAR_GP_PIN(5, 28), RCAR_GP_PIN(5, 27), RCAR_GP_PIN(5, 26), |
1476 | 194, 193, 192, 191, 190, 189, | 1478 | RCAR_GP_PIN(5, 25), RCAR_GP_PIN(5, 24), RCAR_GP_PIN(5, 23), |
1477 | 200, 199, 198, 197, 196, 195, | 1479 | RCAR_GP_PIN(6, 2), RCAR_GP_PIN(6, 1), RCAR_GP_PIN(6, 0), |
1480 | RCAR_GP_PIN(5, 31), RCAR_GP_PIN(5, 30), RCAR_GP_PIN(5, 29), | ||
1481 | RCAR_GP_PIN(6, 8), RCAR_GP_PIN(6, 7), RCAR_GP_PIN(6, 6), | ||
1482 | RCAR_GP_PIN(6, 5), RCAR_GP_PIN(6, 4), RCAR_GP_PIN(6, 3), | ||
1478 | }; | 1483 | }; |
1479 | static const unsigned int du0_rgb666_mux[] = { | 1484 | static const unsigned int du0_rgb666_mux[] = { |
1480 | DU0_DR7_MARK, DU0_DR6_MARK, DU0_DR5_MARK, DU0_DR4_MARK, | 1485 | DU0_DR7_MARK, DU0_DR6_MARK, DU0_DR5_MARK, DU0_DR4_MARK, |
@@ -1486,9 +1491,14 @@ static const unsigned int du0_rgb666_mux[] = { | |||
1486 | }; | 1491 | }; |
1487 | static const unsigned int du0_rgb888_pins[] = { | 1492 | static const unsigned int du0_rgb888_pins[] = { |
1488 | /* R[7:0], G[7:0], B[7:0] */ | 1493 | /* R[7:0], G[7:0], B[7:0] */ |
1489 | 188, 187, 186, 185, 184, 183, 24, 23, | 1494 | RCAR_GP_PIN(5, 28), RCAR_GP_PIN(5, 27), RCAR_GP_PIN(5, 26), |
1490 | 194, 193, 192, 191, 190, 189, 26, 25, | 1495 | RCAR_GP_PIN(5, 25), RCAR_GP_PIN(5, 24), RCAR_GP_PIN(5, 23), |
1491 | 200, 199, 198, 197, 196, 195, 28, 27, | 1496 | RCAR_GP_PIN(0, 24), RCAR_GP_PIN(0, 23), RCAR_GP_PIN(6, 2), |
1497 | RCAR_GP_PIN(6, 1), RCAR_GP_PIN(6, 0), RCAR_GP_PIN(5, 31), | ||
1498 | RCAR_GP_PIN(5, 30), RCAR_GP_PIN(5, 29), RCAR_GP_PIN(0, 26), | ||
1499 | RCAR_GP_PIN(0, 25), RCAR_GP_PIN(6, 8), RCAR_GP_PIN(6, 7), | ||
1500 | RCAR_GP_PIN(6, 6), RCAR_GP_PIN(6, 5), RCAR_GP_PIN(6, 4), | ||
1501 | RCAR_GP_PIN(6, 3), RCAR_GP_PIN(0, 28), RCAR_GP_PIN(0, 27), | ||
1492 | }; | 1502 | }; |
1493 | static const unsigned int du0_rgb888_mux[] = { | 1503 | static const unsigned int du0_rgb888_mux[] = { |
1494 | DU0_DR7_MARK, DU0_DR6_MARK, DU0_DR5_MARK, DU0_DR4_MARK, | 1504 | DU0_DR7_MARK, DU0_DR6_MARK, DU0_DR5_MARK, DU0_DR4_MARK, |
@@ -1500,28 +1510,28 @@ static const unsigned int du0_rgb888_mux[] = { | |||
1500 | }; | 1510 | }; |
1501 | static const unsigned int du0_clk_in_pins[] = { | 1511 | static const unsigned int du0_clk_in_pins[] = { |
1502 | /* CLKIN */ | 1512 | /* CLKIN */ |
1503 | 29, | 1513 | RCAR_GP_PIN(0, 29), |
1504 | }; | 1514 | }; |
1505 | static const unsigned int du0_clk_in_mux[] = { | 1515 | static const unsigned int du0_clk_in_mux[] = { |
1506 | DU0_DOTCLKIN_MARK, | 1516 | DU0_DOTCLKIN_MARK, |
1507 | }; | 1517 | }; |
1508 | static const unsigned int du0_clk_out_0_pins[] = { | 1518 | static const unsigned int du0_clk_out_0_pins[] = { |
1509 | /* CLKOUT */ | 1519 | /* CLKOUT */ |
1510 | 180, | 1520 | RCAR_GP_PIN(5, 20), |
1511 | }; | 1521 | }; |
1512 | static const unsigned int du0_clk_out_0_mux[] = { | 1522 | static const unsigned int du0_clk_out_0_mux[] = { |
1513 | DU0_DOTCLKOUT0_MARK, | 1523 | DU0_DOTCLKOUT0_MARK, |
1514 | }; | 1524 | }; |
1515 | static const unsigned int du0_clk_out_1_pins[] = { | 1525 | static const unsigned int du0_clk_out_1_pins[] = { |
1516 | /* CLKOUT */ | 1526 | /* CLKOUT */ |
1517 | 30, | 1527 | RCAR_GP_PIN(0, 30), |
1518 | }; | 1528 | }; |
1519 | static const unsigned int du0_clk_out_1_mux[] = { | 1529 | static const unsigned int du0_clk_out_1_mux[] = { |
1520 | DU0_DOTCLKOUT1_MARK, | 1530 | DU0_DOTCLKOUT1_MARK, |
1521 | }; | 1531 | }; |
1522 | static const unsigned int du0_sync_0_pins[] = { | 1532 | static const unsigned int du0_sync_0_pins[] = { |
1523 | /* VSYNC, HSYNC, DISP */ | 1533 | /* VSYNC, HSYNC, DISP */ |
1524 | 182, 181, 31, | 1534 | RCAR_GP_PIN(5, 22), RCAR_GP_PIN(5, 21), RCAR_GP_PIN(0, 31), |
1525 | }; | 1535 | }; |
1526 | static const unsigned int du0_sync_0_mux[] = { | 1536 | static const unsigned int du0_sync_0_mux[] = { |
1527 | DU0_EXHSYNC_DU0_HSYNC_MARK, DU0_EXVSYNC_DU0_VSYNC_MARK, | 1537 | DU0_EXHSYNC_DU0_HSYNC_MARK, DU0_EXVSYNC_DU0_VSYNC_MARK, |
@@ -1529,7 +1539,7 @@ static const unsigned int du0_sync_0_mux[] = { | |||
1529 | }; | 1539 | }; |
1530 | static const unsigned int du0_sync_1_pins[] = { | 1540 | static const unsigned int du0_sync_1_pins[] = { |
1531 | /* VSYNC, HSYNC, DISP */ | 1541 | /* VSYNC, HSYNC, DISP */ |
1532 | 182, 181, 32, | 1542 | RCAR_GP_PIN(5, 22), RCAR_GP_PIN(5, 21), RCAR_GP_PIN(1, 0), |
1533 | }; | 1543 | }; |
1534 | static const unsigned int du0_sync_1_mux[] = { | 1544 | static const unsigned int du0_sync_1_mux[] = { |
1535 | DU0_EXHSYNC_DU0_HSYNC_MARK, DU0_EXVSYNC_DU0_VSYNC_MARK, | 1545 | DU0_EXHSYNC_DU0_HSYNC_MARK, DU0_EXVSYNC_DU0_VSYNC_MARK, |
@@ -1537,14 +1547,14 @@ static const unsigned int du0_sync_1_mux[] = { | |||
1537 | }; | 1547 | }; |
1538 | static const unsigned int du0_oddf_pins[] = { | 1548 | static const unsigned int du0_oddf_pins[] = { |
1539 | /* ODDF */ | 1549 | /* ODDF */ |
1540 | 31, | 1550 | RCAR_GP_PIN(0, 31), |
1541 | }; | 1551 | }; |
1542 | static const unsigned int du0_oddf_mux[] = { | 1552 | static const unsigned int du0_oddf_mux[] = { |
1543 | DU0_EXODDF_DU0_ODDF_DISP_CDE_MARK | 1553 | DU0_EXODDF_DU0_ODDF_DISP_CDE_MARK |
1544 | }; | 1554 | }; |
1545 | static const unsigned int du0_cde_pins[] = { | 1555 | static const unsigned int du0_cde_pins[] = { |
1546 | /* CDE */ | 1556 | /* CDE */ |
1547 | 33, | 1557 | RCAR_GP_PIN(1, 1), |
1548 | }; | 1558 | }; |
1549 | static const unsigned int du0_cde_mux[] = { | 1559 | static const unsigned int du0_cde_mux[] = { |
1550 | DU0_CDE_MARK | 1560 | DU0_CDE_MARK |
@@ -1552,9 +1562,12 @@ static const unsigned int du0_cde_mux[] = { | |||
1552 | /* - DU1 -------------------------------------------------------------------- */ | 1562 | /* - DU1 -------------------------------------------------------------------- */ |
1553 | static const unsigned int du1_rgb666_pins[] = { | 1563 | static const unsigned int du1_rgb666_pins[] = { |
1554 | /* R[7:2], G[7:2], B[7:2] */ | 1564 | /* R[7:2], G[7:2], B[7:2] */ |
1555 | 41, 40, 39, 38, 37, 36, | 1565 | RCAR_GP_PIN(1, 9), RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 7), |
1556 | 49, 48, 47, 46, 45, 44, | 1566 | RCAR_GP_PIN(1, 6), RCAR_GP_PIN(1, 5), RCAR_GP_PIN(1, 4), |
1557 | 57, 56, 55, 54, 53, 52, | 1567 | RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 16), RCAR_GP_PIN(1, 15), |
1568 | RCAR_GP_PIN(1, 14), RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 12), | ||
1569 | RCAR_GP_PIN(1, 25), RCAR_GP_PIN(1, 24), RCAR_GP_PIN(1, 23), | ||
1570 | RCAR_GP_PIN(1, 22), RCAR_GP_PIN(1, 21), RCAR_GP_PIN(1, 20), | ||
1558 | }; | 1571 | }; |
1559 | static const unsigned int du1_rgb666_mux[] = { | 1572 | static const unsigned int du1_rgb666_mux[] = { |
1560 | DU1_DR7_MARK, DU1_DR6_MARK, DU1_DR5_MARK, DU1_DR4_MARK, | 1573 | DU1_DR7_MARK, DU1_DR6_MARK, DU1_DR5_MARK, DU1_DR4_MARK, |
@@ -1566,9 +1579,14 @@ static const unsigned int du1_rgb666_mux[] = { | |||
1566 | }; | 1579 | }; |
1567 | static const unsigned int du1_rgb888_pins[] = { | 1580 | static const unsigned int du1_rgb888_pins[] = { |
1568 | /* R[7:0], G[7:0], B[7:0] */ | 1581 | /* R[7:0], G[7:0], B[7:0] */ |
1569 | 41, 40, 39, 38, 37, 36, 35, 34, | 1582 | RCAR_GP_PIN(1, 9), RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 7), |
1570 | 49, 48, 47, 46, 45, 44, 43, 32, | 1583 | RCAR_GP_PIN(1, 6), RCAR_GP_PIN(1, 5), RCAR_GP_PIN(1, 4), |
1571 | 57, 56, 55, 54, 53, 52, 51, 50, | 1584 | RCAR_GP_PIN(1, 3), RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 17), |
1585 | RCAR_GP_PIN(1, 16), RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 14), | ||
1586 | RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 12), RCAR_GP_PIN(1, 11), | ||
1587 | RCAR_GP_PIN(1, 0), RCAR_GP_PIN(1, 25), RCAR_GP_PIN(1, 24), | ||
1588 | RCAR_GP_PIN(1, 23), RCAR_GP_PIN(1, 22), RCAR_GP_PIN(1, 21), | ||
1589 | RCAR_GP_PIN(1, 20), RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 18), | ||
1572 | }; | 1590 | }; |
1573 | static const unsigned int du1_rgb888_mux[] = { | 1591 | static const unsigned int du1_rgb888_mux[] = { |
1574 | DU1_DR7_MARK, DU1_DR6_MARK, DU1_DR5_MARK, DU1_DR4_MARK, | 1592 | DU1_DR7_MARK, DU1_DR6_MARK, DU1_DR5_MARK, DU1_DR4_MARK, |
@@ -1580,21 +1598,21 @@ static const unsigned int du1_rgb888_mux[] = { | |||
1580 | }; | 1598 | }; |
1581 | static const unsigned int du1_clk_in_pins[] = { | 1599 | static const unsigned int du1_clk_in_pins[] = { |
1582 | /* CLKIN */ | 1600 | /* CLKIN */ |
1583 | 58, | 1601 | RCAR_GP_PIN(1, 26), |
1584 | }; | 1602 | }; |
1585 | static const unsigned int du1_clk_in_mux[] = { | 1603 | static const unsigned int du1_clk_in_mux[] = { |
1586 | DU1_DOTCLKIN_MARK, | 1604 | DU1_DOTCLKIN_MARK, |
1587 | }; | 1605 | }; |
1588 | static const unsigned int du1_clk_out_pins[] = { | 1606 | static const unsigned int du1_clk_out_pins[] = { |
1589 | /* CLKOUT */ | 1607 | /* CLKOUT */ |
1590 | 59, | 1608 | RCAR_GP_PIN(1, 27), |
1591 | }; | 1609 | }; |
1592 | static const unsigned int du1_clk_out_mux[] = { | 1610 | static const unsigned int du1_clk_out_mux[] = { |
1593 | DU1_DOTCLKOUT_MARK, | 1611 | DU1_DOTCLKOUT_MARK, |
1594 | }; | 1612 | }; |
1595 | static const unsigned int du1_sync_0_pins[] = { | 1613 | static const unsigned int du1_sync_0_pins[] = { |
1596 | /* VSYNC, HSYNC, DISP */ | 1614 | /* VSYNC, HSYNC, DISP */ |
1597 | 61, 60, 62, | 1615 | RCAR_GP_PIN(1, 29), RCAR_GP_PIN(1, 28), RCAR_GP_PIN(1, 30), |
1598 | }; | 1616 | }; |
1599 | static const unsigned int du1_sync_0_mux[] = { | 1617 | static const unsigned int du1_sync_0_mux[] = { |
1600 | DU1_EXVSYNC_DU1_VSYNC_MARK, DU1_EXHSYNC_DU1_HSYNC_MARK, | 1618 | DU1_EXVSYNC_DU1_VSYNC_MARK, DU1_EXHSYNC_DU1_HSYNC_MARK, |
@@ -1602,7 +1620,7 @@ static const unsigned int du1_sync_0_mux[] = { | |||
1602 | }; | 1620 | }; |
1603 | static const unsigned int du1_sync_1_pins[] = { | 1621 | static const unsigned int du1_sync_1_pins[] = { |
1604 | /* VSYNC, HSYNC, DISP */ | 1622 | /* VSYNC, HSYNC, DISP */ |
1605 | 61, 60, 63, | 1623 | RCAR_GP_PIN(1, 29), RCAR_GP_PIN(1, 28), RCAR_GP_PIN(1, 31), |
1606 | }; | 1624 | }; |
1607 | static const unsigned int du1_sync_1_mux[] = { | 1625 | static const unsigned int du1_sync_1_mux[] = { |
1608 | DU1_EXVSYNC_DU1_VSYNC_MARK, DU1_EXHSYNC_DU1_HSYNC_MARK, | 1626 | DU1_EXVSYNC_DU1_VSYNC_MARK, DU1_EXHSYNC_DU1_HSYNC_MARK, |
@@ -1610,22 +1628,55 @@ static const unsigned int du1_sync_1_mux[] = { | |||
1610 | }; | 1628 | }; |
1611 | static const unsigned int du1_oddf_pins[] = { | 1629 | static const unsigned int du1_oddf_pins[] = { |
1612 | /* ODDF */ | 1630 | /* ODDF */ |
1613 | 62, | 1631 | RCAR_GP_PIN(1, 30), |
1614 | }; | 1632 | }; |
1615 | static const unsigned int du1_oddf_mux[] = { | 1633 | static const unsigned int du1_oddf_mux[] = { |
1616 | DU1_EXODDF_DU1_ODDF_DISP_CDE_MARK | 1634 | DU1_EXODDF_DU1_ODDF_DISP_CDE_MARK |
1617 | }; | 1635 | }; |
1618 | static const unsigned int du1_cde_pins[] = { | 1636 | static const unsigned int du1_cde_pins[] = { |
1619 | /* CDE */ | 1637 | /* CDE */ |
1620 | 64, | 1638 | RCAR_GP_PIN(2, 0), |
1621 | }; | 1639 | }; |
1622 | static const unsigned int du1_cde_mux[] = { | 1640 | static const unsigned int du1_cde_mux[] = { |
1623 | DU1_CDE_MARK | 1641 | DU1_CDE_MARK |
1624 | }; | 1642 | }; |
1643 | /* - Ether ------------------------------------------------------------------ */ | ||
1644 | static const unsigned int ether_rmii_pins[] = { | ||
1645 | /* | ||
1646 | * ETH_TXD0, ETH_TXD1, ETH_TX_EN, ETH_REFCLK, | ||
1647 | * ETH_RXD0, ETH_RXD1, ETH_CRS_DV, ETH_RX_ER, | ||
1648 | * ETH_MDIO, ETH_MDC | ||
1649 | */ | ||
1650 | RCAR_GP_PIN(2, 27), RCAR_GP_PIN(2, 16), RCAR_GP_PIN(2, 18), | ||
1651 | RCAR_GP_PIN(2, 26), | ||
1652 | RCAR_GP_PIN(2, 20), RCAR_GP_PIN(2, 21), RCAR_GP_PIN(2, 17), | ||
1653 | RCAR_GP_PIN(2, 19), | ||
1654 | RCAR_GP_PIN(2, 29), RCAR_GP_PIN(2, 28), | ||
1655 | }; | ||
1656 | static const unsigned int ether_rmii_mux[] = { | ||
1657 | ETH_TXD0_MARK, ETH_TXD1_MARK, ETH_TX_EN_MARK, ETH_REFCLK_MARK, | ||
1658 | ETH_RXD0_MARK, ETH_RXD1_MARK, ETH_CRS_DV_MARK, ETH_RX_ER_MARK, | ||
1659 | ETH_MDIO_MARK, ETH_MDC_MARK, | ||
1660 | }; | ||
1661 | static const unsigned int ether_link_pins[] = { | ||
1662 | /* ETH_LINK */ | ||
1663 | RCAR_GP_PIN(2, 24), | ||
1664 | }; | ||
1665 | static const unsigned int ether_link_mux[] = { | ||
1666 | ETH_LINK_MARK, | ||
1667 | }; | ||
1668 | static const unsigned int ether_magic_pins[] = { | ||
1669 | /* ETH_MAGIC */ | ||
1670 | RCAR_GP_PIN(2, 25), | ||
1671 | }; | ||
1672 | static const unsigned int ether_magic_mux[] = { | ||
1673 | ETH_MAGIC_MARK, | ||
1674 | }; | ||
1625 | /* - HSPI0 ------------------------------------------------------------------ */ | 1675 | /* - HSPI0 ------------------------------------------------------------------ */ |
1626 | static const unsigned int hspi0_pins[] = { | 1676 | static const unsigned int hspi0_pins[] = { |
1627 | /* CLK, CS, RX, TX */ | 1677 | /* CLK, CS, RX, TX */ |
1628 | 150, 151, 153, 152, | 1678 | RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 23), RCAR_GP_PIN(4, 25), |
1679 | RCAR_GP_PIN(4, 24), | ||
1629 | }; | 1680 | }; |
1630 | static const unsigned int hspi0_mux[] = { | 1681 | static const unsigned int hspi0_mux[] = { |
1631 | HSPI_CLK0_MARK, HSPI_CS0_MARK, HSPI_RX0_MARK, HSPI_TX0_MARK, | 1682 | HSPI_CLK0_MARK, HSPI_CS0_MARK, HSPI_RX0_MARK, HSPI_TX0_MARK, |
@@ -1633,28 +1684,32 @@ static const unsigned int hspi0_mux[] = { | |||
1633 | /* - HSPI1 ------------------------------------------------------------------ */ | 1684 | /* - HSPI1 ------------------------------------------------------------------ */ |
1634 | static const unsigned int hspi1_pins[] = { | 1685 | static const unsigned int hspi1_pins[] = { |
1635 | /* CLK, CS, RX, TX */ | 1686 | /* CLK, CS, RX, TX */ |
1636 | 63, 58, 64, 62, | 1687 | RCAR_GP_PIN(1, 31), RCAR_GP_PIN(1, 26), RCAR_GP_PIN(2, 0), |
1688 | RCAR_GP_PIN(1, 30), | ||
1637 | }; | 1689 | }; |
1638 | static const unsigned int hspi1_mux[] = { | 1690 | static const unsigned int hspi1_mux[] = { |
1639 | HSPI_CLK1_MARK, HSPI_CS1_MARK, HSPI_RX1_MARK, HSPI_TX1_MARK, | 1691 | HSPI_CLK1_MARK, HSPI_CS1_MARK, HSPI_RX1_MARK, HSPI_TX1_MARK, |
1640 | }; | 1692 | }; |
1641 | static const unsigned int hspi1_b_pins[] = { | 1693 | static const unsigned int hspi1_b_pins[] = { |
1642 | /* CLK, CS, RX, TX */ | 1694 | /* CLK, CS, RX, TX */ |
1643 | 90, 91, 93, 92, | 1695 | RCAR_GP_PIN(2, 26), RCAR_GP_PIN(2, 27), RCAR_GP_PIN(2, 29), |
1696 | RCAR_GP_PIN(2, 28), | ||
1644 | }; | 1697 | }; |
1645 | static const unsigned int hspi1_b_mux[] = { | 1698 | static const unsigned int hspi1_b_mux[] = { |
1646 | HSPI_CLK1_B_MARK, HSPI_CS1_B_MARK, HSPI_RX1_B_MARK, HSPI_TX1_B_MARK, | 1699 | HSPI_CLK1_B_MARK, HSPI_CS1_B_MARK, HSPI_RX1_B_MARK, HSPI_TX1_B_MARK, |
1647 | }; | 1700 | }; |
1648 | static const unsigned int hspi1_c_pins[] = { | 1701 | static const unsigned int hspi1_c_pins[] = { |
1649 | /* CLK, CS, RX, TX */ | 1702 | /* CLK, CS, RX, TX */ |
1650 | 141, 142, 144, 143, | 1703 | RCAR_GP_PIN(4, 13), RCAR_GP_PIN(4, 14), RCAR_GP_PIN(4, 16), |
1704 | RCAR_GP_PIN(4, 15), | ||
1651 | }; | 1705 | }; |
1652 | static const unsigned int hspi1_c_mux[] = { | 1706 | static const unsigned int hspi1_c_mux[] = { |
1653 | HSPI_CLK1_C_MARK, HSPI_CS1_C_MARK, HSPI_RX1_C_MARK, HSPI_TX1_C_MARK, | 1707 | HSPI_CLK1_C_MARK, HSPI_CS1_C_MARK, HSPI_RX1_C_MARK, HSPI_TX1_C_MARK, |
1654 | }; | 1708 | }; |
1655 | static const unsigned int hspi1_d_pins[] = { | 1709 | static const unsigned int hspi1_d_pins[] = { |
1656 | /* CLK, CS, RX, TX */ | 1710 | /* CLK, CS, RX, TX */ |
1657 | 101, 102, 104, 103, | 1711 | RCAR_GP_PIN(3, 5), RCAR_GP_PIN(3, 6), RCAR_GP_PIN(3, 8), |
1712 | RCAR_GP_PIN(3, 7), | ||
1658 | }; | 1713 | }; |
1659 | static const unsigned int hspi1_d_mux[] = { | 1714 | static const unsigned int hspi1_d_mux[] = { |
1660 | HSPI_CLK1_D_MARK, HSPI_CS1_D_MARK, HSPI_RX1_D_MARK, HSPI_TX1_D_MARK, | 1715 | HSPI_CLK1_D_MARK, HSPI_CS1_D_MARK, HSPI_RX1_D_MARK, HSPI_TX1_D_MARK, |
@@ -1662,14 +1717,16 @@ static const unsigned int hspi1_d_mux[] = { | |||
1662 | /* - HSPI2 ------------------------------------------------------------------ */ | 1717 | /* - HSPI2 ------------------------------------------------------------------ */ |
1663 | static const unsigned int hspi2_pins[] = { | 1718 | static const unsigned int hspi2_pins[] = { |
1664 | /* CLK, CS, RX, TX */ | 1719 | /* CLK, CS, RX, TX */ |
1665 | 9, 10, 11, 14, | 1720 | RCAR_GP_PIN(0, 9), RCAR_GP_PIN(0, 10), RCAR_GP_PIN(0, 11), |
1721 | RCAR_GP_PIN(0, 14), | ||
1666 | }; | 1722 | }; |
1667 | static const unsigned int hspi2_mux[] = { | 1723 | static const unsigned int hspi2_mux[] = { |
1668 | HSPI_CLK2_MARK, HSPI_CS2_MARK, HSPI_RX2_MARK, HSPI_TX2_MARK, | 1724 | HSPI_CLK2_MARK, HSPI_CS2_MARK, HSPI_RX2_MARK, HSPI_TX2_MARK, |
1669 | }; | 1725 | }; |
1670 | static const unsigned int hspi2_b_pins[] = { | 1726 | static const unsigned int hspi2_b_pins[] = { |
1671 | /* CLK, CS, RX, TX */ | 1727 | /* CLK, CS, RX, TX */ |
1672 | 7, 13, 8, 6, | 1728 | RCAR_GP_PIN(0, 7), RCAR_GP_PIN(0, 13), RCAR_GP_PIN(0, 8), |
1729 | RCAR_GP_PIN(0, 6), | ||
1673 | }; | 1730 | }; |
1674 | static const unsigned int hspi2_b_mux[] = { | 1731 | static const unsigned int hspi2_b_mux[] = { |
1675 | HSPI_CLK2_B_MARK, HSPI_CS2_B_MARK, HSPI_RX2_B_MARK, HSPI_TX2_B_MARK, | 1732 | HSPI_CLK2_B_MARK, HSPI_CS2_B_MARK, HSPI_RX2_B_MARK, HSPI_TX2_B_MARK, |
@@ -1677,56 +1734,56 @@ static const unsigned int hspi2_b_mux[] = { | |||
1677 | /* - INTC ------------------------------------------------------------------- */ | 1734 | /* - INTC ------------------------------------------------------------------- */ |
1678 | static const unsigned int intc_irq0_pins[] = { | 1735 | static const unsigned int intc_irq0_pins[] = { |
1679 | /* IRQ */ | 1736 | /* IRQ */ |
1680 | 78, | 1737 | RCAR_GP_PIN(2, 14), |
1681 | }; | 1738 | }; |
1682 | static const unsigned int intc_irq0_mux[] = { | 1739 | static const unsigned int intc_irq0_mux[] = { |
1683 | IRQ0_MARK, | 1740 | IRQ0_MARK, |
1684 | }; | 1741 | }; |
1685 | static const unsigned int intc_irq0_b_pins[] = { | 1742 | static const unsigned int intc_irq0_b_pins[] = { |
1686 | /* IRQ */ | 1743 | /* IRQ */ |
1687 | 141, | 1744 | RCAR_GP_PIN(4, 13), |
1688 | }; | 1745 | }; |
1689 | static const unsigned int intc_irq0_b_mux[] = { | 1746 | static const unsigned int intc_irq0_b_mux[] = { |
1690 | IRQ0_B_MARK, | 1747 | IRQ0_B_MARK, |
1691 | }; | 1748 | }; |
1692 | static const unsigned int intc_irq1_pins[] = { | 1749 | static const unsigned int intc_irq1_pins[] = { |
1693 | /* IRQ */ | 1750 | /* IRQ */ |
1694 | 79, | 1751 | RCAR_GP_PIN(2, 15), |
1695 | }; | 1752 | }; |
1696 | static const unsigned int intc_irq1_mux[] = { | 1753 | static const unsigned int intc_irq1_mux[] = { |
1697 | IRQ1_MARK, | 1754 | IRQ1_MARK, |
1698 | }; | 1755 | }; |
1699 | static const unsigned int intc_irq1_b_pins[] = { | 1756 | static const unsigned int intc_irq1_b_pins[] = { |
1700 | /* IRQ */ | 1757 | /* IRQ */ |
1701 | 142, | 1758 | RCAR_GP_PIN(4, 14), |
1702 | }; | 1759 | }; |
1703 | static const unsigned int intc_irq1_b_mux[] = { | 1760 | static const unsigned int intc_irq1_b_mux[] = { |
1704 | IRQ1_B_MARK, | 1761 | IRQ1_B_MARK, |
1705 | }; | 1762 | }; |
1706 | static const unsigned int intc_irq2_pins[] = { | 1763 | static const unsigned int intc_irq2_pins[] = { |
1707 | /* IRQ */ | 1764 | /* IRQ */ |
1708 | 88, | 1765 | RCAR_GP_PIN(2, 24), |
1709 | }; | 1766 | }; |
1710 | static const unsigned int intc_irq2_mux[] = { | 1767 | static const unsigned int intc_irq2_mux[] = { |
1711 | IRQ2_MARK, | 1768 | IRQ2_MARK, |
1712 | }; | 1769 | }; |
1713 | static const unsigned int intc_irq2_b_pins[] = { | 1770 | static const unsigned int intc_irq2_b_pins[] = { |
1714 | /* IRQ */ | 1771 | /* IRQ */ |
1715 | 143, | 1772 | RCAR_GP_PIN(4, 15), |
1716 | }; | 1773 | }; |
1717 | static const unsigned int intc_irq2_b_mux[] = { | 1774 | static const unsigned int intc_irq2_b_mux[] = { |
1718 | IRQ2_B_MARK, | 1775 | IRQ2_B_MARK, |
1719 | }; | 1776 | }; |
1720 | static const unsigned int intc_irq3_pins[] = { | 1777 | static const unsigned int intc_irq3_pins[] = { |
1721 | /* IRQ */ | 1778 | /* IRQ */ |
1722 | 89, | 1779 | RCAR_GP_PIN(2, 25), |
1723 | }; | 1780 | }; |
1724 | static const unsigned int intc_irq3_mux[] = { | 1781 | static const unsigned int intc_irq3_mux[] = { |
1725 | IRQ3_MARK, | 1782 | IRQ3_MARK, |
1726 | }; | 1783 | }; |
1727 | static const unsigned int intc_irq3_b_pins[] = { | 1784 | static const unsigned int intc_irq3_b_pins[] = { |
1728 | /* IRQ */ | 1785 | /* IRQ */ |
1729 | 144, | 1786 | RCAR_GP_PIN(4, 16), |
1730 | }; | 1787 | }; |
1731 | static const unsigned int intc_irq3_b_mux[] = { | 1788 | static const unsigned int intc_irq3_b_mux[] = { |
1732 | IRQ3_B_MARK, | 1789 | IRQ3_B_MARK, |
@@ -1734,56 +1791,56 @@ static const unsigned int intc_irq3_b_mux[] = { | |||
1734 | /* - LSBC ------------------------------------------------------------------- */ | 1791 | /* - LSBC ------------------------------------------------------------------- */ |
1735 | static const unsigned int lbsc_cs0_pins[] = { | 1792 | static const unsigned int lbsc_cs0_pins[] = { |
1736 | /* CS */ | 1793 | /* CS */ |
1737 | 13, | 1794 | RCAR_GP_PIN(0, 13), |
1738 | }; | 1795 | }; |
1739 | static const unsigned int lbsc_cs0_mux[] = { | 1796 | static const unsigned int lbsc_cs0_mux[] = { |
1740 | CS0_MARK, | 1797 | CS0_MARK, |
1741 | }; | 1798 | }; |
1742 | static const unsigned int lbsc_cs1_pins[] = { | 1799 | static const unsigned int lbsc_cs1_pins[] = { |
1743 | /* CS */ | 1800 | /* CS */ |
1744 | 14, | 1801 | RCAR_GP_PIN(0, 14), |
1745 | }; | 1802 | }; |
1746 | static const unsigned int lbsc_cs1_mux[] = { | 1803 | static const unsigned int lbsc_cs1_mux[] = { |
1747 | CS1_A26_MARK, | 1804 | CS1_A26_MARK, |
1748 | }; | 1805 | }; |
1749 | static const unsigned int lbsc_ex_cs0_pins[] = { | 1806 | static const unsigned int lbsc_ex_cs0_pins[] = { |
1750 | /* CS */ | 1807 | /* CS */ |
1751 | 15, | 1808 | RCAR_GP_PIN(0, 15), |
1752 | }; | 1809 | }; |
1753 | static const unsigned int lbsc_ex_cs0_mux[] = { | 1810 | static const unsigned int lbsc_ex_cs0_mux[] = { |
1754 | EX_CS0_MARK, | 1811 | EX_CS0_MARK, |
1755 | }; | 1812 | }; |
1756 | static const unsigned int lbsc_ex_cs1_pins[] = { | 1813 | static const unsigned int lbsc_ex_cs1_pins[] = { |
1757 | /* CS */ | 1814 | /* CS */ |
1758 | 16, | 1815 | RCAR_GP_PIN(0, 16), |
1759 | }; | 1816 | }; |
1760 | static const unsigned int lbsc_ex_cs1_mux[] = { | 1817 | static const unsigned int lbsc_ex_cs1_mux[] = { |
1761 | EX_CS1_MARK, | 1818 | EX_CS1_MARK, |
1762 | }; | 1819 | }; |
1763 | static const unsigned int lbsc_ex_cs2_pins[] = { | 1820 | static const unsigned int lbsc_ex_cs2_pins[] = { |
1764 | /* CS */ | 1821 | /* CS */ |
1765 | 17, | 1822 | RCAR_GP_PIN(0, 17), |
1766 | }; | 1823 | }; |
1767 | static const unsigned int lbsc_ex_cs2_mux[] = { | 1824 | static const unsigned int lbsc_ex_cs2_mux[] = { |
1768 | EX_CS2_MARK, | 1825 | EX_CS2_MARK, |
1769 | }; | 1826 | }; |
1770 | static const unsigned int lbsc_ex_cs3_pins[] = { | 1827 | static const unsigned int lbsc_ex_cs3_pins[] = { |
1771 | /* CS */ | 1828 | /* CS */ |
1772 | 18, | 1829 | RCAR_GP_PIN(0, 18), |
1773 | }; | 1830 | }; |
1774 | static const unsigned int lbsc_ex_cs3_mux[] = { | 1831 | static const unsigned int lbsc_ex_cs3_mux[] = { |
1775 | EX_CS3_MARK, | 1832 | EX_CS3_MARK, |
1776 | }; | 1833 | }; |
1777 | static const unsigned int lbsc_ex_cs4_pins[] = { | 1834 | static const unsigned int lbsc_ex_cs4_pins[] = { |
1778 | /* CS */ | 1835 | /* CS */ |
1779 | 19, | 1836 | RCAR_GP_PIN(0, 19), |
1780 | }; | 1837 | }; |
1781 | static const unsigned int lbsc_ex_cs4_mux[] = { | 1838 | static const unsigned int lbsc_ex_cs4_mux[] = { |
1782 | EX_CS4_MARK, | 1839 | EX_CS4_MARK, |
1783 | }; | 1840 | }; |
1784 | static const unsigned int lbsc_ex_cs5_pins[] = { | 1841 | static const unsigned int lbsc_ex_cs5_pins[] = { |
1785 | /* CS */ | 1842 | /* CS */ |
1786 | 20, | 1843 | RCAR_GP_PIN(0, 20), |
1787 | }; | 1844 | }; |
1788 | static const unsigned int lbsc_ex_cs5_mux[] = { | 1845 | static const unsigned int lbsc_ex_cs5_mux[] = { |
1789 | EX_CS5_MARK, | 1846 | EX_CS5_MARK, |
@@ -1791,21 +1848,24 @@ static const unsigned int lbsc_ex_cs5_mux[] = { | |||
1791 | /* - MMCIF ------------------------------------------------------------------ */ | 1848 | /* - MMCIF ------------------------------------------------------------------ */ |
1792 | static const unsigned int mmc0_data1_pins[] = { | 1849 | static const unsigned int mmc0_data1_pins[] = { |
1793 | /* D[0] */ | 1850 | /* D[0] */ |
1794 | 19, | 1851 | RCAR_GP_PIN(0, 19), |
1795 | }; | 1852 | }; |
1796 | static const unsigned int mmc0_data1_mux[] = { | 1853 | static const unsigned int mmc0_data1_mux[] = { |
1797 | MMC0_D0_MARK, | 1854 | MMC0_D0_MARK, |
1798 | }; | 1855 | }; |
1799 | static const unsigned int mmc0_data4_pins[] = { | 1856 | static const unsigned int mmc0_data4_pins[] = { |
1800 | /* D[0:3] */ | 1857 | /* D[0:3] */ |
1801 | 19, 20, 21, 2, | 1858 | RCAR_GP_PIN(0, 19), RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 21), |
1859 | RCAR_GP_PIN(0, 2), | ||
1802 | }; | 1860 | }; |
1803 | static const unsigned int mmc0_data4_mux[] = { | 1861 | static const unsigned int mmc0_data4_mux[] = { |
1804 | MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK, | 1862 | MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK, |
1805 | }; | 1863 | }; |
1806 | static const unsigned int mmc0_data8_pins[] = { | 1864 | static const unsigned int mmc0_data8_pins[] = { |
1807 | /* D[0:7] */ | 1865 | /* D[0:7] */ |
1808 | 19, 20, 21, 2, 10, 11, 15, 16, | 1866 | RCAR_GP_PIN(0, 19), RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 21), |
1867 | RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 10), RCAR_GP_PIN(0, 11), | ||
1868 | RCAR_GP_PIN(0, 15), RCAR_GP_PIN(0, 16), | ||
1809 | }; | 1869 | }; |
1810 | static const unsigned int mmc0_data8_mux[] = { | 1870 | static const unsigned int mmc0_data8_mux[] = { |
1811 | MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK, | 1871 | MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK, |
@@ -1813,28 +1873,31 @@ static const unsigned int mmc0_data8_mux[] = { | |||
1813 | }; | 1873 | }; |
1814 | static const unsigned int mmc0_ctrl_pins[] = { | 1874 | static const unsigned int mmc0_ctrl_pins[] = { |
1815 | /* CMD, CLK */ | 1875 | /* CMD, CLK */ |
1816 | 18, 17, | 1876 | RCAR_GP_PIN(0, 18), RCAR_GP_PIN(0, 17), |
1817 | }; | 1877 | }; |
1818 | static const unsigned int mmc0_ctrl_mux[] = { | 1878 | static const unsigned int mmc0_ctrl_mux[] = { |
1819 | MMC0_CMD_MARK, MMC0_CLK_MARK, | 1879 | MMC0_CMD_MARK, MMC0_CLK_MARK, |
1820 | }; | 1880 | }; |
1821 | static const unsigned int mmc1_data1_pins[] = { | 1881 | static const unsigned int mmc1_data1_pins[] = { |
1822 | /* D[0] */ | 1882 | /* D[0] */ |
1823 | 72, | 1883 | RCAR_GP_PIN(2, 8), |
1824 | }; | 1884 | }; |
1825 | static const unsigned int mmc1_data1_mux[] = { | 1885 | static const unsigned int mmc1_data1_mux[] = { |
1826 | MMC1_D0_MARK, | 1886 | MMC1_D0_MARK, |
1827 | }; | 1887 | }; |
1828 | static const unsigned int mmc1_data4_pins[] = { | 1888 | static const unsigned int mmc1_data4_pins[] = { |
1829 | /* D[0:3] */ | 1889 | /* D[0:3] */ |
1830 | 72, 73, 74, 75, | 1890 | RCAR_GP_PIN(2, 8), RCAR_GP_PIN(2, 9), RCAR_GP_PIN(2, 10), |
1891 | RCAR_GP_PIN(2, 11), | ||
1831 | }; | 1892 | }; |
1832 | static const unsigned int mmc1_data4_mux[] = { | 1893 | static const unsigned int mmc1_data4_mux[] = { |
1833 | MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK, | 1894 | MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK, |
1834 | }; | 1895 | }; |
1835 | static const unsigned int mmc1_data8_pins[] = { | 1896 | static const unsigned int mmc1_data8_pins[] = { |
1836 | /* D[0:7] */ | 1897 | /* D[0:7] */ |
1837 | 72, 73, 74, 75, 76, 77, 80, 81, | 1898 | RCAR_GP_PIN(2, 8), RCAR_GP_PIN(2, 9), RCAR_GP_PIN(2, 10), |
1899 | RCAR_GP_PIN(2, 11), RCAR_GP_PIN(2, 12), RCAR_GP_PIN(2, 13), | ||
1900 | RCAR_GP_PIN(2, 16), RCAR_GP_PIN(2, 17), | ||
1838 | }; | 1901 | }; |
1839 | static const unsigned int mmc1_data8_mux[] = { | 1902 | static const unsigned int mmc1_data8_mux[] = { |
1840 | MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK, | 1903 | MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK, |
@@ -1842,7 +1905,7 @@ static const unsigned int mmc1_data8_mux[] = { | |||
1842 | }; | 1905 | }; |
1843 | static const unsigned int mmc1_ctrl_pins[] = { | 1906 | static const unsigned int mmc1_ctrl_pins[] = { |
1844 | /* CMD, CLK */ | 1907 | /* CMD, CLK */ |
1845 | 68, 65, | 1908 | RCAR_GP_PIN(2, 4), RCAR_GP_PIN(2, 1), |
1846 | }; | 1909 | }; |
1847 | static const unsigned int mmc1_ctrl_mux[] = { | 1910 | static const unsigned int mmc1_ctrl_mux[] = { |
1848 | MMC1_CMD_MARK, MMC1_CLK_MARK, | 1911 | MMC1_CMD_MARK, MMC1_CLK_MARK, |
@@ -1850,84 +1913,84 @@ static const unsigned int mmc1_ctrl_mux[] = { | |||
1850 | /* - SCIF0 ------------------------------------------------------------------ */ | 1913 | /* - SCIF0 ------------------------------------------------------------------ */ |
1851 | static const unsigned int scif0_data_pins[] = { | 1914 | static const unsigned int scif0_data_pins[] = { |
1852 | /* RXD, TXD */ | 1915 | /* RXD, TXD */ |
1853 | 153, 152, | 1916 | RCAR_GP_PIN(4, 25), RCAR_GP_PIN(4, 24), |
1854 | }; | 1917 | }; |
1855 | static const unsigned int scif0_data_mux[] = { | 1918 | static const unsigned int scif0_data_mux[] = { |
1856 | RX0_MARK, TX0_MARK, | 1919 | RX0_MARK, TX0_MARK, |
1857 | }; | 1920 | }; |
1858 | static const unsigned int scif0_clk_pins[] = { | 1921 | static const unsigned int scif0_clk_pins[] = { |
1859 | /* SCK */ | 1922 | /* SCK */ |
1860 | 156, | 1923 | RCAR_GP_PIN(4, 28), |
1861 | }; | 1924 | }; |
1862 | static const unsigned int scif0_clk_mux[] = { | 1925 | static const unsigned int scif0_clk_mux[] = { |
1863 | SCK0_MARK, | 1926 | SCK0_MARK, |
1864 | }; | 1927 | }; |
1865 | static const unsigned int scif0_ctrl_pins[] = { | 1928 | static const unsigned int scif0_ctrl_pins[] = { |
1866 | /* RTS, CTS */ | 1929 | /* RTS, CTS */ |
1867 | 151, 150, | 1930 | RCAR_GP_PIN(4, 23), RCAR_GP_PIN(4, 22), |
1868 | }; | 1931 | }; |
1869 | static const unsigned int scif0_ctrl_mux[] = { | 1932 | static const unsigned int scif0_ctrl_mux[] = { |
1870 | RTS0_TANS_MARK, CTS0_MARK, | 1933 | RTS0_TANS_MARK, CTS0_MARK, |
1871 | }; | 1934 | }; |
1872 | static const unsigned int scif0_data_b_pins[] = { | 1935 | static const unsigned int scif0_data_b_pins[] = { |
1873 | /* RXD, TXD */ | 1936 | /* RXD, TXD */ |
1874 | 20, 19, | 1937 | RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 19), |
1875 | }; | 1938 | }; |
1876 | static const unsigned int scif0_data_b_mux[] = { | 1939 | static const unsigned int scif0_data_b_mux[] = { |
1877 | RX0_B_MARK, TX0_B_MARK, | 1940 | RX0_B_MARK, TX0_B_MARK, |
1878 | }; | 1941 | }; |
1879 | static const unsigned int scif0_clk_b_pins[] = { | 1942 | static const unsigned int scif0_clk_b_pins[] = { |
1880 | /* SCK */ | 1943 | /* SCK */ |
1881 | 33, | 1944 | RCAR_GP_PIN(1, 1), |
1882 | }; | 1945 | }; |
1883 | static const unsigned int scif0_clk_b_mux[] = { | 1946 | static const unsigned int scif0_clk_b_mux[] = { |
1884 | SCK0_B_MARK, | 1947 | SCK0_B_MARK, |
1885 | }; | 1948 | }; |
1886 | static const unsigned int scif0_ctrl_b_pins[] = { | 1949 | static const unsigned int scif0_ctrl_b_pins[] = { |
1887 | /* RTS, CTS */ | 1950 | /* RTS, CTS */ |
1888 | 18, 11, | 1951 | RCAR_GP_PIN(0, 18), RCAR_GP_PIN(0, 11), |
1889 | }; | 1952 | }; |
1890 | static const unsigned int scif0_ctrl_b_mux[] = { | 1953 | static const unsigned int scif0_ctrl_b_mux[] = { |
1891 | RTS0_B_TANS_B_MARK, CTS0_B_MARK, | 1954 | RTS0_B_TANS_B_MARK, CTS0_B_MARK, |
1892 | }; | 1955 | }; |
1893 | static const unsigned int scif0_data_c_pins[] = { | 1956 | static const unsigned int scif0_data_c_pins[] = { |
1894 | /* RXD, TXD */ | 1957 | /* RXD, TXD */ |
1895 | 146, 147, | 1958 | RCAR_GP_PIN(4, 18), RCAR_GP_PIN(4, 19), |
1896 | }; | 1959 | }; |
1897 | static const unsigned int scif0_data_c_mux[] = { | 1960 | static const unsigned int scif0_data_c_mux[] = { |
1898 | RX0_C_MARK, TX0_C_MARK, | 1961 | RX0_C_MARK, TX0_C_MARK, |
1899 | }; | 1962 | }; |
1900 | static const unsigned int scif0_clk_c_pins[] = { | 1963 | static const unsigned int scif0_clk_c_pins[] = { |
1901 | /* SCK */ | 1964 | /* SCK */ |
1902 | 145, | 1965 | RCAR_GP_PIN(4, 17), |
1903 | }; | 1966 | }; |
1904 | static const unsigned int scif0_clk_c_mux[] = { | 1967 | static const unsigned int scif0_clk_c_mux[] = { |
1905 | SCK0_C_MARK, | 1968 | SCK0_C_MARK, |
1906 | }; | 1969 | }; |
1907 | static const unsigned int scif0_ctrl_c_pins[] = { | 1970 | static const unsigned int scif0_ctrl_c_pins[] = { |
1908 | /* RTS, CTS */ | 1971 | /* RTS, CTS */ |
1909 | 149, 148, | 1972 | RCAR_GP_PIN(4, 21), RCAR_GP_PIN(4, 20), |
1910 | }; | 1973 | }; |
1911 | static const unsigned int scif0_ctrl_c_mux[] = { | 1974 | static const unsigned int scif0_ctrl_c_mux[] = { |
1912 | RTS0_C_TANS_C_MARK, CTS0_C_MARK, | 1975 | RTS0_C_TANS_C_MARK, CTS0_C_MARK, |
1913 | }; | 1976 | }; |
1914 | static const unsigned int scif0_data_d_pins[] = { | 1977 | static const unsigned int scif0_data_d_pins[] = { |
1915 | /* RXD, TXD */ | 1978 | /* RXD, TXD */ |
1916 | 43, 42, | 1979 | RCAR_GP_PIN(1, 11), RCAR_GP_PIN(1, 10), |
1917 | }; | 1980 | }; |
1918 | static const unsigned int scif0_data_d_mux[] = { | 1981 | static const unsigned int scif0_data_d_mux[] = { |
1919 | RX0_D_MARK, TX0_D_MARK, | 1982 | RX0_D_MARK, TX0_D_MARK, |
1920 | }; | 1983 | }; |
1921 | static const unsigned int scif0_clk_d_pins[] = { | 1984 | static const unsigned int scif0_clk_d_pins[] = { |
1922 | /* SCK */ | 1985 | /* SCK */ |
1923 | 50, | 1986 | RCAR_GP_PIN(1, 18), |
1924 | }; | 1987 | }; |
1925 | static const unsigned int scif0_clk_d_mux[] = { | 1988 | static const unsigned int scif0_clk_d_mux[] = { |
1926 | SCK0_D_MARK, | 1989 | SCK0_D_MARK, |
1927 | }; | 1990 | }; |
1928 | static const unsigned int scif0_ctrl_d_pins[] = { | 1991 | static const unsigned int scif0_ctrl_d_pins[] = { |
1929 | /* RTS, CTS */ | 1992 | /* RTS, CTS */ |
1930 | 51, 35, | 1993 | RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 3), |
1931 | }; | 1994 | }; |
1932 | static const unsigned int scif0_ctrl_d_mux[] = { | 1995 | static const unsigned int scif0_ctrl_d_mux[] = { |
1933 | RTS0_D_TANS_D_MARK, CTS0_D_MARK, | 1996 | RTS0_D_TANS_D_MARK, CTS0_D_MARK, |
@@ -1935,63 +1998,63 @@ static const unsigned int scif0_ctrl_d_mux[] = { | |||
1935 | /* - SCIF1 ------------------------------------------------------------------ */ | 1998 | /* - SCIF1 ------------------------------------------------------------------ */ |
1936 | static const unsigned int scif1_data_pins[] = { | 1999 | static const unsigned int scif1_data_pins[] = { |
1937 | /* RXD, TXD */ | 2000 | /* RXD, TXD */ |
1938 | 149, 148, | 2001 | RCAR_GP_PIN(4, 21), RCAR_GP_PIN(4, 20), |
1939 | }; | 2002 | }; |
1940 | static const unsigned int scif1_data_mux[] = { | 2003 | static const unsigned int scif1_data_mux[] = { |
1941 | RX1_MARK, TX1_MARK, | 2004 | RX1_MARK, TX1_MARK, |
1942 | }; | 2005 | }; |
1943 | static const unsigned int scif1_clk_pins[] = { | 2006 | static const unsigned int scif1_clk_pins[] = { |
1944 | /* SCK */ | 2007 | /* SCK */ |
1945 | 145, | 2008 | RCAR_GP_PIN(4, 17), |
1946 | }; | 2009 | }; |
1947 | static const unsigned int scif1_clk_mux[] = { | 2010 | static const unsigned int scif1_clk_mux[] = { |
1948 | SCK1_MARK, | 2011 | SCK1_MARK, |
1949 | }; | 2012 | }; |
1950 | static const unsigned int scif1_ctrl_pins[] = { | 2013 | static const unsigned int scif1_ctrl_pins[] = { |
1951 | /* RTS, CTS */ | 2014 | /* RTS, CTS */ |
1952 | 147, 146, | 2015 | RCAR_GP_PIN(4, 19), RCAR_GP_PIN(4, 18), |
1953 | }; | 2016 | }; |
1954 | static const unsigned int scif1_ctrl_mux[] = { | 2017 | static const unsigned int scif1_ctrl_mux[] = { |
1955 | RTS1_TANS_MARK, CTS1_MARK, | 2018 | RTS1_TANS_MARK, CTS1_MARK, |
1956 | }; | 2019 | }; |
1957 | static const unsigned int scif1_data_b_pins[] = { | 2020 | static const unsigned int scif1_data_b_pins[] = { |
1958 | /* RXD, TXD */ | 2021 | /* RXD, TXD */ |
1959 | 117, 114, | 2022 | RCAR_GP_PIN(3, 21), RCAR_GP_PIN(3, 18), |
1960 | }; | 2023 | }; |
1961 | static const unsigned int scif1_data_b_mux[] = { | 2024 | static const unsigned int scif1_data_b_mux[] = { |
1962 | RX1_B_MARK, TX1_B_MARK, | 2025 | RX1_B_MARK, TX1_B_MARK, |
1963 | }; | 2026 | }; |
1964 | static const unsigned int scif1_clk_b_pins[] = { | 2027 | static const unsigned int scif1_clk_b_pins[] = { |
1965 | /* SCK */ | 2028 | /* SCK */ |
1966 | 113, | 2029 | RCAR_GP_PIN(3, 17), |
1967 | }; | 2030 | }; |
1968 | static const unsigned int scif1_clk_b_mux[] = { | 2031 | static const unsigned int scif1_clk_b_mux[] = { |
1969 | SCK1_B_MARK, | 2032 | SCK1_B_MARK, |
1970 | }; | 2033 | }; |
1971 | static const unsigned int scif1_ctrl_b_pins[] = { | 2034 | static const unsigned int scif1_ctrl_b_pins[] = { |
1972 | /* RTS, CTS */ | 2035 | /* RTS, CTS */ |
1973 | 115, 116, | 2036 | RCAR_GP_PIN(3, 19), RCAR_GP_PIN(3, 20), |
1974 | }; | 2037 | }; |
1975 | static const unsigned int scif1_ctrl_b_mux[] = { | 2038 | static const unsigned int scif1_ctrl_b_mux[] = { |
1976 | RTS1_B_TANS_B_MARK, CTS1_B_MARK, | 2039 | RTS1_B_TANS_B_MARK, CTS1_B_MARK, |
1977 | }; | 2040 | }; |
1978 | static const unsigned int scif1_data_c_pins[] = { | 2041 | static const unsigned int scif1_data_c_pins[] = { |
1979 | /* RXD, TXD */ | 2042 | /* RXD, TXD */ |
1980 | 67, 66, | 2043 | RCAR_GP_PIN(2, 3), RCAR_GP_PIN(2, 2), |
1981 | }; | 2044 | }; |
1982 | static const unsigned int scif1_data_c_mux[] = { | 2045 | static const unsigned int scif1_data_c_mux[] = { |
1983 | RX1_C_MARK, TX1_C_MARK, | 2046 | RX1_C_MARK, TX1_C_MARK, |
1984 | }; | 2047 | }; |
1985 | static const unsigned int scif1_clk_c_pins[] = { | 2048 | static const unsigned int scif1_clk_c_pins[] = { |
1986 | /* SCK */ | 2049 | /* SCK */ |
1987 | 86, | 2050 | RCAR_GP_PIN(2, 22), |
1988 | }; | 2051 | }; |
1989 | static const unsigned int scif1_clk_c_mux[] = { | 2052 | static const unsigned int scif1_clk_c_mux[] = { |
1990 | SCK1_C_MARK, | 2053 | SCK1_C_MARK, |
1991 | }; | 2054 | }; |
1992 | static const unsigned int scif1_ctrl_c_pins[] = { | 2055 | static const unsigned int scif1_ctrl_c_pins[] = { |
1993 | /* RTS, CTS */ | 2056 | /* RTS, CTS */ |
1994 | 69, 68, | 2057 | RCAR_GP_PIN(2, 5), RCAR_GP_PIN(2, 4), |
1995 | }; | 2058 | }; |
1996 | static const unsigned int scif1_ctrl_c_mux[] = { | 2059 | static const unsigned int scif1_ctrl_c_mux[] = { |
1997 | RTS1_C_TANS_C_MARK, CTS1_C_MARK, | 2060 | RTS1_C_TANS_C_MARK, CTS1_C_MARK, |
@@ -1999,63 +2062,63 @@ static const unsigned int scif1_ctrl_c_mux[] = { | |||
1999 | /* - SCIF2 ------------------------------------------------------------------ */ | 2062 | /* - SCIF2 ------------------------------------------------------------------ */ |
2000 | static const unsigned int scif2_data_pins[] = { | 2063 | static const unsigned int scif2_data_pins[] = { |
2001 | /* RXD, TXD */ | 2064 | /* RXD, TXD */ |
2002 | 106, 105, | 2065 | RCAR_GP_PIN(3, 10), RCAR_GP_PIN(3, 9), |
2003 | }; | 2066 | }; |
2004 | static const unsigned int scif2_data_mux[] = { | 2067 | static const unsigned int scif2_data_mux[] = { |
2005 | RX2_MARK, TX2_MARK, | 2068 | RX2_MARK, TX2_MARK, |
2006 | }; | 2069 | }; |
2007 | static const unsigned int scif2_clk_pins[] = { | 2070 | static const unsigned int scif2_clk_pins[] = { |
2008 | /* SCK */ | 2071 | /* SCK */ |
2009 | 107, | 2072 | RCAR_GP_PIN(3, 11), |
2010 | }; | 2073 | }; |
2011 | static const unsigned int scif2_clk_mux[] = { | 2074 | static const unsigned int scif2_clk_mux[] = { |
2012 | SCK2_MARK, | 2075 | SCK2_MARK, |
2013 | }; | 2076 | }; |
2014 | static const unsigned int scif2_data_b_pins[] = { | 2077 | static const unsigned int scif2_data_b_pins[] = { |
2015 | /* RXD, TXD */ | 2078 | /* RXD, TXD */ |
2016 | 120, 119, | 2079 | RCAR_GP_PIN(3, 24), RCAR_GP_PIN(3, 23), |
2017 | }; | 2080 | }; |
2018 | static const unsigned int scif2_data_b_mux[] = { | 2081 | static const unsigned int scif2_data_b_mux[] = { |
2019 | RX2_B_MARK, TX2_B_MARK, | 2082 | RX2_B_MARK, TX2_B_MARK, |
2020 | }; | 2083 | }; |
2021 | static const unsigned int scif2_clk_b_pins[] = { | 2084 | static const unsigned int scif2_clk_b_pins[] = { |
2022 | /* SCK */ | 2085 | /* SCK */ |
2023 | 118, | 2086 | RCAR_GP_PIN(3, 22), |
2024 | }; | 2087 | }; |
2025 | static const unsigned int scif2_clk_b_mux[] = { | 2088 | static const unsigned int scif2_clk_b_mux[] = { |
2026 | SCK2_B_MARK, | 2089 | SCK2_B_MARK, |
2027 | }; | 2090 | }; |
2028 | static const unsigned int scif2_data_c_pins[] = { | 2091 | static const unsigned int scif2_data_c_pins[] = { |
2029 | /* RXD, TXD */ | 2092 | /* RXD, TXD */ |
2030 | 33, 31, | 2093 | RCAR_GP_PIN(1, 1), RCAR_GP_PIN(0, 31), |
2031 | }; | 2094 | }; |
2032 | static const unsigned int scif2_data_c_mux[] = { | 2095 | static const unsigned int scif2_data_c_mux[] = { |
2033 | RX2_C_MARK, TX2_C_MARK, | 2096 | RX2_C_MARK, TX2_C_MARK, |
2034 | }; | 2097 | }; |
2035 | static const unsigned int scif2_clk_c_pins[] = { | 2098 | static const unsigned int scif2_clk_c_pins[] = { |
2036 | /* SCK */ | 2099 | /* SCK */ |
2037 | 32, | 2100 | RCAR_GP_PIN(1, 0), |
2038 | }; | 2101 | }; |
2039 | static const unsigned int scif2_clk_c_mux[] = { | 2102 | static const unsigned int scif2_clk_c_mux[] = { |
2040 | SCK2_C_MARK, | 2103 | SCK2_C_MARK, |
2041 | }; | 2104 | }; |
2042 | static const unsigned int scif2_data_d_pins[] = { | 2105 | static const unsigned int scif2_data_d_pins[] = { |
2043 | /* RXD, TXD */ | 2106 | /* RXD, TXD */ |
2044 | 64, 62, | 2107 | RCAR_GP_PIN(2, 0), RCAR_GP_PIN(1, 30), |
2045 | }; | 2108 | }; |
2046 | static const unsigned int scif2_data_d_mux[] = { | 2109 | static const unsigned int scif2_data_d_mux[] = { |
2047 | RX2_D_MARK, TX2_D_MARK, | 2110 | RX2_D_MARK, TX2_D_MARK, |
2048 | }; | 2111 | }; |
2049 | static const unsigned int scif2_clk_d_pins[] = { | 2112 | static const unsigned int scif2_clk_d_pins[] = { |
2050 | /* SCK */ | 2113 | /* SCK */ |
2051 | 63, | 2114 | RCAR_GP_PIN(1, 31), |
2052 | }; | 2115 | }; |
2053 | static const unsigned int scif2_clk_d_mux[] = { | 2116 | static const unsigned int scif2_clk_d_mux[] = { |
2054 | SCK2_D_MARK, | 2117 | SCK2_D_MARK, |
2055 | }; | 2118 | }; |
2056 | static const unsigned int scif2_data_e_pins[] = { | 2119 | static const unsigned int scif2_data_e_pins[] = { |
2057 | /* RXD, TXD */ | 2120 | /* RXD, TXD */ |
2058 | 20, 19, | 2121 | RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 19), |
2059 | }; | 2122 | }; |
2060 | static const unsigned int scif2_data_e_mux[] = { | 2123 | static const unsigned int scif2_data_e_mux[] = { |
2061 | RX2_E_MARK, TX2_E_MARK, | 2124 | RX2_E_MARK, TX2_E_MARK, |
@@ -2063,14 +2126,14 @@ static const unsigned int scif2_data_e_mux[] = { | |||
2063 | /* - SCIF3 ------------------------------------------------------------------ */ | 2126 | /* - SCIF3 ------------------------------------------------------------------ */ |
2064 | static const unsigned int scif3_data_pins[] = { | 2127 | static const unsigned int scif3_data_pins[] = { |
2065 | /* RXD, TXD */ | 2128 | /* RXD, TXD */ |
2066 | 137, 136, | 2129 | RCAR_GP_PIN(4, 9), RCAR_GP_PIN(4, 8), |
2067 | }; | 2130 | }; |
2068 | static const unsigned int scif3_data_mux[] = { | 2131 | static const unsigned int scif3_data_mux[] = { |
2069 | RX3_IRDA_RX_MARK, TX3_IRDA_TX_MARK, | 2132 | RX3_IRDA_RX_MARK, TX3_IRDA_TX_MARK, |
2070 | }; | 2133 | }; |
2071 | static const unsigned int scif3_clk_pins[] = { | 2134 | static const unsigned int scif3_clk_pins[] = { |
2072 | /* SCK */ | 2135 | /* SCK */ |
2073 | 135, | 2136 | RCAR_GP_PIN(4, 7), |
2074 | }; | 2137 | }; |
2075 | static const unsigned int scif3_clk_mux[] = { | 2138 | static const unsigned int scif3_clk_mux[] = { |
2076 | SCK3_MARK, | 2139 | SCK3_MARK, |
@@ -2078,35 +2141,35 @@ static const unsigned int scif3_clk_mux[] = { | |||
2078 | 2141 | ||
2079 | static const unsigned int scif3_data_b_pins[] = { | 2142 | static const unsigned int scif3_data_b_pins[] = { |
2080 | /* RXD, TXD */ | 2143 | /* RXD, TXD */ |
2081 | 64, 62, | 2144 | RCAR_GP_PIN(2, 0), RCAR_GP_PIN(1, 30), |
2082 | }; | 2145 | }; |
2083 | static const unsigned int scif3_data_b_mux[] = { | 2146 | static const unsigned int scif3_data_b_mux[] = { |
2084 | RX3_B_IRDA_RX_B_MARK, TX3_B_IRDA_TX_B_MARK, | 2147 | RX3_B_IRDA_RX_B_MARK, TX3_B_IRDA_TX_B_MARK, |
2085 | }; | 2148 | }; |
2086 | static const unsigned int scif3_data_c_pins[] = { | 2149 | static const unsigned int scif3_data_c_pins[] = { |
2087 | /* RXD, TXD */ | 2150 | /* RXD, TXD */ |
2088 | 15, 12, | 2151 | RCAR_GP_PIN(0, 15), RCAR_GP_PIN(0, 12), |
2089 | }; | 2152 | }; |
2090 | static const unsigned int scif3_data_c_mux[] = { | 2153 | static const unsigned int scif3_data_c_mux[] = { |
2091 | RX3_C_IRDA_RX_C_MARK, TX3C_IRDA_TX_C_MARK, | 2154 | RX3_C_IRDA_RX_C_MARK, TX3C_IRDA_TX_C_MARK, |
2092 | }; | 2155 | }; |
2093 | static const unsigned int scif3_data_d_pins[] = { | 2156 | static const unsigned int scif3_data_d_pins[] = { |
2094 | /* RXD, TXD */ | 2157 | /* RXD, TXD */ |
2095 | 30, 29, | 2158 | RCAR_GP_PIN(0, 30), RCAR_GP_PIN(0, 29), |
2096 | }; | 2159 | }; |
2097 | static const unsigned int scif3_data_d_mux[] = { | 2160 | static const unsigned int scif3_data_d_mux[] = { |
2098 | RX3_D_IRDA_RX_D_MARK, TX3_D_IRDA_TX_D_MARK, | 2161 | RX3_D_IRDA_RX_D_MARK, TX3_D_IRDA_TX_D_MARK, |
2099 | }; | 2162 | }; |
2100 | static const unsigned int scif3_data_e_pins[] = { | 2163 | static const unsigned int scif3_data_e_pins[] = { |
2101 | /* RXD, TXD */ | 2164 | /* RXD, TXD */ |
2102 | 35, 34, | 2165 | RCAR_GP_PIN(1, 3), RCAR_GP_PIN(1, 2), |
2103 | }; | 2166 | }; |
2104 | static const unsigned int scif3_data_e_mux[] = { | 2167 | static const unsigned int scif3_data_e_mux[] = { |
2105 | RX3_E_IRDA_RX_E_MARK, TX3_E_IRDA_TX_E_MARK, | 2168 | RX3_E_IRDA_RX_E_MARK, TX3_E_IRDA_TX_E_MARK, |
2106 | }; | 2169 | }; |
2107 | static const unsigned int scif3_clk_e_pins[] = { | 2170 | static const unsigned int scif3_clk_e_pins[] = { |
2108 | /* SCK */ | 2171 | /* SCK */ |
2109 | 42, | 2172 | RCAR_GP_PIN(1, 10), |
2110 | }; | 2173 | }; |
2111 | static const unsigned int scif3_clk_e_mux[] = { | 2174 | static const unsigned int scif3_clk_e_mux[] = { |
2112 | SCK3_E_MARK, | 2175 | SCK3_E_MARK, |
@@ -2114,42 +2177,42 @@ static const unsigned int scif3_clk_e_mux[] = { | |||
2114 | /* - SCIF4 ------------------------------------------------------------------ */ | 2177 | /* - SCIF4 ------------------------------------------------------------------ */ |
2115 | static const unsigned int scif4_data_pins[] = { | 2178 | static const unsigned int scif4_data_pins[] = { |
2116 | /* RXD, TXD */ | 2179 | /* RXD, TXD */ |
2117 | 123, 122, | 2180 | RCAR_GP_PIN(3, 27), RCAR_GP_PIN(3, 26), |
2118 | }; | 2181 | }; |
2119 | static const unsigned int scif4_data_mux[] = { | 2182 | static const unsigned int scif4_data_mux[] = { |
2120 | RX4_MARK, TX4_MARK, | 2183 | RX4_MARK, TX4_MARK, |
2121 | }; | 2184 | }; |
2122 | static const unsigned int scif4_clk_pins[] = { | 2185 | static const unsigned int scif4_clk_pins[] = { |
2123 | /* SCK */ | 2186 | /* SCK */ |
2124 | 121, | 2187 | RCAR_GP_PIN(3, 25), |
2125 | }; | 2188 | }; |
2126 | static const unsigned int scif4_clk_mux[] = { | 2189 | static const unsigned int scif4_clk_mux[] = { |
2127 | SCK4_MARK, | 2190 | SCK4_MARK, |
2128 | }; | 2191 | }; |
2129 | static const unsigned int scif4_data_b_pins[] = { | 2192 | static const unsigned int scif4_data_b_pins[] = { |
2130 | /* RXD, TXD */ | 2193 | /* RXD, TXD */ |
2131 | 111, 110, | 2194 | RCAR_GP_PIN(3, 15), RCAR_GP_PIN(3, 14), |
2132 | }; | 2195 | }; |
2133 | static const unsigned int scif4_data_b_mux[] = { | 2196 | static const unsigned int scif4_data_b_mux[] = { |
2134 | RX4_B_MARK, TX4_B_MARK, | 2197 | RX4_B_MARK, TX4_B_MARK, |
2135 | }; | 2198 | }; |
2136 | static const unsigned int scif4_clk_b_pins[] = { | 2199 | static const unsigned int scif4_clk_b_pins[] = { |
2137 | /* SCK */ | 2200 | /* SCK */ |
2138 | 112, | 2201 | RCAR_GP_PIN(3, 16), |
2139 | }; | 2202 | }; |
2140 | static const unsigned int scif4_clk_b_mux[] = { | 2203 | static const unsigned int scif4_clk_b_mux[] = { |
2141 | SCK4_B_MARK, | 2204 | SCK4_B_MARK, |
2142 | }; | 2205 | }; |
2143 | static const unsigned int scif4_data_c_pins[] = { | 2206 | static const unsigned int scif4_data_c_pins[] = { |
2144 | /* RXD, TXD */ | 2207 | /* RXD, TXD */ |
2145 | 22, 21, | 2208 | RCAR_GP_PIN(0, 22), RCAR_GP_PIN(0, 21), |
2146 | }; | 2209 | }; |
2147 | static const unsigned int scif4_data_c_mux[] = { | 2210 | static const unsigned int scif4_data_c_mux[] = { |
2148 | RX4_C_MARK, TX4_C_MARK, | 2211 | RX4_C_MARK, TX4_C_MARK, |
2149 | }; | 2212 | }; |
2150 | static const unsigned int scif4_data_d_pins[] = { | 2213 | static const unsigned int scif4_data_d_pins[] = { |
2151 | /* RXD, TXD */ | 2214 | /* RXD, TXD */ |
2152 | 69, 68, | 2215 | RCAR_GP_PIN(2, 5), RCAR_GP_PIN(2, 4), |
2153 | }; | 2216 | }; |
2154 | static const unsigned int scif4_data_d_mux[] = { | 2217 | static const unsigned int scif4_data_d_mux[] = { |
2155 | RX4_D_MARK, TX4_D_MARK, | 2218 | RX4_D_MARK, TX4_D_MARK, |
@@ -2157,56 +2220,56 @@ static const unsigned int scif4_data_d_mux[] = { | |||
2157 | /* - SCIF5 ------------------------------------------------------------------ */ | 2220 | /* - SCIF5 ------------------------------------------------------------------ */ |
2158 | static const unsigned int scif5_data_pins[] = { | 2221 | static const unsigned int scif5_data_pins[] = { |
2159 | /* RXD, TXD */ | 2222 | /* RXD, TXD */ |
2160 | 51, 50, | 2223 | RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 18), |
2161 | }; | 2224 | }; |
2162 | static const unsigned int scif5_data_mux[] = { | 2225 | static const unsigned int scif5_data_mux[] = { |
2163 | RX5_MARK, TX5_MARK, | 2226 | RX5_MARK, TX5_MARK, |
2164 | }; | 2227 | }; |
2165 | static const unsigned int scif5_clk_pins[] = { | 2228 | static const unsigned int scif5_clk_pins[] = { |
2166 | /* SCK */ | 2229 | /* SCK */ |
2167 | 43, | 2230 | RCAR_GP_PIN(1, 11), |
2168 | }; | 2231 | }; |
2169 | static const unsigned int scif5_clk_mux[] = { | 2232 | static const unsigned int scif5_clk_mux[] = { |
2170 | SCK5_MARK, | 2233 | SCK5_MARK, |
2171 | }; | 2234 | }; |
2172 | static const unsigned int scif5_data_b_pins[] = { | 2235 | static const unsigned int scif5_data_b_pins[] = { |
2173 | /* RXD, TXD */ | 2236 | /* RXD, TXD */ |
2174 | 18, 11, | 2237 | RCAR_GP_PIN(0, 18), RCAR_GP_PIN(0, 11), |
2175 | }; | 2238 | }; |
2176 | static const unsigned int scif5_data_b_mux[] = { | 2239 | static const unsigned int scif5_data_b_mux[] = { |
2177 | RX5_B_MARK, TX5_B_MARK, | 2240 | RX5_B_MARK, TX5_B_MARK, |
2178 | }; | 2241 | }; |
2179 | static const unsigned int scif5_clk_b_pins[] = { | 2242 | static const unsigned int scif5_clk_b_pins[] = { |
2180 | /* SCK */ | 2243 | /* SCK */ |
2181 | 19, | 2244 | RCAR_GP_PIN(0, 19), |
2182 | }; | 2245 | }; |
2183 | static const unsigned int scif5_clk_b_mux[] = { | 2246 | static const unsigned int scif5_clk_b_mux[] = { |
2184 | SCK5_B_MARK, | 2247 | SCK5_B_MARK, |
2185 | }; | 2248 | }; |
2186 | static const unsigned int scif5_data_c_pins[] = { | 2249 | static const unsigned int scif5_data_c_pins[] = { |
2187 | /* RXD, TXD */ | 2250 | /* RXD, TXD */ |
2188 | 24, 23, | 2251 | RCAR_GP_PIN(0, 24), RCAR_GP_PIN(0, 23), |
2189 | }; | 2252 | }; |
2190 | static const unsigned int scif5_data_c_mux[] = { | 2253 | static const unsigned int scif5_data_c_mux[] = { |
2191 | RX5_C_MARK, TX5_C_MARK, | 2254 | RX5_C_MARK, TX5_C_MARK, |
2192 | }; | 2255 | }; |
2193 | static const unsigned int scif5_clk_c_pins[] = { | 2256 | static const unsigned int scif5_clk_c_pins[] = { |
2194 | /* SCK */ | 2257 | /* SCK */ |
2195 | 28, | 2258 | RCAR_GP_PIN(0, 28), |
2196 | }; | 2259 | }; |
2197 | static const unsigned int scif5_clk_c_mux[] = { | 2260 | static const unsigned int scif5_clk_c_mux[] = { |
2198 | SCK5_C_MARK, | 2261 | SCK5_C_MARK, |
2199 | }; | 2262 | }; |
2200 | static const unsigned int scif5_data_d_pins[] = { | 2263 | static const unsigned int scif5_data_d_pins[] = { |
2201 | /* RXD, TXD */ | 2264 | /* RXD, TXD */ |
2202 | 8, 6, | 2265 | RCAR_GP_PIN(0, 8), RCAR_GP_PIN(0, 6), |
2203 | }; | 2266 | }; |
2204 | static const unsigned int scif5_data_d_mux[] = { | 2267 | static const unsigned int scif5_data_d_mux[] = { |
2205 | RX5_D_MARK, TX5_D_MARK, | 2268 | RX5_D_MARK, TX5_D_MARK, |
2206 | }; | 2269 | }; |
2207 | static const unsigned int scif5_clk_d_pins[] = { | 2270 | static const unsigned int scif5_clk_d_pins[] = { |
2208 | /* SCK */ | 2271 | /* SCK */ |
2209 | 7, | 2272 | RCAR_GP_PIN(0, 7), |
2210 | }; | 2273 | }; |
2211 | static const unsigned int scif5_clk_d_mux[] = { | 2274 | static const unsigned int scif5_clk_d_mux[] = { |
2212 | SCK5_D_MARK, | 2275 | SCK5_D_MARK, |
@@ -2214,35 +2277,36 @@ static const unsigned int scif5_clk_d_mux[] = { | |||
2214 | /* - SDHI0 ------------------------------------------------------------------ */ | 2277 | /* - SDHI0 ------------------------------------------------------------------ */ |
2215 | static const unsigned int sdhi0_data1_pins[] = { | 2278 | static const unsigned int sdhi0_data1_pins[] = { |
2216 | /* D0 */ | 2279 | /* D0 */ |
2217 | 117, | 2280 | RCAR_GP_PIN(3, 21), |
2218 | }; | 2281 | }; |
2219 | static const unsigned int sdhi0_data1_mux[] = { | 2282 | static const unsigned int sdhi0_data1_mux[] = { |
2220 | SD0_DAT0_MARK, | 2283 | SD0_DAT0_MARK, |
2221 | }; | 2284 | }; |
2222 | static const unsigned int sdhi0_data4_pins[] = { | 2285 | static const unsigned int sdhi0_data4_pins[] = { |
2223 | /* D[0:3] */ | 2286 | /* D[0:3] */ |
2224 | 117, 118, 119, 120, | 2287 | RCAR_GP_PIN(3, 21), RCAR_GP_PIN(3, 22), RCAR_GP_PIN(3, 23), |
2288 | RCAR_GP_PIN(3, 24), | ||
2225 | }; | 2289 | }; |
2226 | static const unsigned int sdhi0_data4_mux[] = { | 2290 | static const unsigned int sdhi0_data4_mux[] = { |
2227 | SD0_DAT0_MARK, SD0_DAT1_MARK, SD0_DAT2_MARK, SD0_DAT3_MARK, | 2291 | SD0_DAT0_MARK, SD0_DAT1_MARK, SD0_DAT2_MARK, SD0_DAT3_MARK, |
2228 | }; | 2292 | }; |
2229 | static const unsigned int sdhi0_ctrl_pins[] = { | 2293 | static const unsigned int sdhi0_ctrl_pins[] = { |
2230 | /* CMD, CLK */ | 2294 | /* CMD, CLK */ |
2231 | 114, 113, | 2295 | RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 17), |
2232 | }; | 2296 | }; |
2233 | static const unsigned int sdhi0_ctrl_mux[] = { | 2297 | static const unsigned int sdhi0_ctrl_mux[] = { |
2234 | SD0_CMD_MARK, SD0_CLK_MARK, | 2298 | SD0_CMD_MARK, SD0_CLK_MARK, |
2235 | }; | 2299 | }; |
2236 | static const unsigned int sdhi0_cd_pins[] = { | 2300 | static const unsigned int sdhi0_cd_pins[] = { |
2237 | /* CD */ | 2301 | /* CD */ |
2238 | 115, | 2302 | RCAR_GP_PIN(3, 19), |
2239 | }; | 2303 | }; |
2240 | static const unsigned int sdhi0_cd_mux[] = { | 2304 | static const unsigned int sdhi0_cd_mux[] = { |
2241 | SD0_CD_MARK, | 2305 | SD0_CD_MARK, |
2242 | }; | 2306 | }; |
2243 | static const unsigned int sdhi0_wp_pins[] = { | 2307 | static const unsigned int sdhi0_wp_pins[] = { |
2244 | /* WP */ | 2308 | /* WP */ |
2245 | 116, | 2309 | RCAR_GP_PIN(3, 20), |
2246 | }; | 2310 | }; |
2247 | static const unsigned int sdhi0_wp_mux[] = { | 2311 | static const unsigned int sdhi0_wp_mux[] = { |
2248 | SD0_WP_MARK, | 2312 | SD0_WP_MARK, |
@@ -2250,35 +2314,36 @@ static const unsigned int sdhi0_wp_mux[] = { | |||
2250 | /* - SDHI1 ------------------------------------------------------------------ */ | 2314 | /* - SDHI1 ------------------------------------------------------------------ */ |
2251 | static const unsigned int sdhi1_data1_pins[] = { | 2315 | static const unsigned int sdhi1_data1_pins[] = { |
2252 | /* D0 */ | 2316 | /* D0 */ |
2253 | 19, | 2317 | RCAR_GP_PIN(0, 19), |
2254 | }; | 2318 | }; |
2255 | static const unsigned int sdhi1_data1_mux[] = { | 2319 | static const unsigned int sdhi1_data1_mux[] = { |
2256 | SD1_DAT0_MARK, | 2320 | SD1_DAT0_MARK, |
2257 | }; | 2321 | }; |
2258 | static const unsigned int sdhi1_data4_pins[] = { | 2322 | static const unsigned int sdhi1_data4_pins[] = { |
2259 | /* D[0:3] */ | 2323 | /* D[0:3] */ |
2260 | 19, 20, 21, 2, | 2324 | RCAR_GP_PIN(0, 19), RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 21), |
2325 | RCAR_GP_PIN(0, 2), | ||
2261 | }; | 2326 | }; |
2262 | static const unsigned int sdhi1_data4_mux[] = { | 2327 | static const unsigned int sdhi1_data4_mux[] = { |
2263 | SD1_DAT0_MARK, SD1_DAT1_MARK, SD1_DAT2_MARK, SD1_DAT3_MARK, | 2328 | SD1_DAT0_MARK, SD1_DAT1_MARK, SD1_DAT2_MARK, SD1_DAT3_MARK, |
2264 | }; | 2329 | }; |
2265 | static const unsigned int sdhi1_ctrl_pins[] = { | 2330 | static const unsigned int sdhi1_ctrl_pins[] = { |
2266 | /* CMD, CLK */ | 2331 | /* CMD, CLK */ |
2267 | 18, 17, | 2332 | RCAR_GP_PIN(0, 18), RCAR_GP_PIN(0, 17), |
2268 | }; | 2333 | }; |
2269 | static const unsigned int sdhi1_ctrl_mux[] = { | 2334 | static const unsigned int sdhi1_ctrl_mux[] = { |
2270 | SD1_CMD_MARK, SD1_CLK_MARK, | 2335 | SD1_CMD_MARK, SD1_CLK_MARK, |
2271 | }; | 2336 | }; |
2272 | static const unsigned int sdhi1_cd_pins[] = { | 2337 | static const unsigned int sdhi1_cd_pins[] = { |
2273 | /* CD */ | 2338 | /* CD */ |
2274 | 10, | 2339 | RCAR_GP_PIN(0, 10), |
2275 | }; | 2340 | }; |
2276 | static const unsigned int sdhi1_cd_mux[] = { | 2341 | static const unsigned int sdhi1_cd_mux[] = { |
2277 | SD1_CD_MARK, | 2342 | SD1_CD_MARK, |
2278 | }; | 2343 | }; |
2279 | static const unsigned int sdhi1_wp_pins[] = { | 2344 | static const unsigned int sdhi1_wp_pins[] = { |
2280 | /* WP */ | 2345 | /* WP */ |
2281 | 11, | 2346 | RCAR_GP_PIN(0, 11), |
2282 | }; | 2347 | }; |
2283 | static const unsigned int sdhi1_wp_mux[] = { | 2348 | static const unsigned int sdhi1_wp_mux[] = { |
2284 | SD1_WP_MARK, | 2349 | SD1_WP_MARK, |
@@ -2286,35 +2351,36 @@ static const unsigned int sdhi1_wp_mux[] = { | |||
2286 | /* - SDHI2 ------------------------------------------------------------------ */ | 2351 | /* - SDHI2 ------------------------------------------------------------------ */ |
2287 | static const unsigned int sdhi2_data1_pins[] = { | 2352 | static const unsigned int sdhi2_data1_pins[] = { |
2288 | /* D0 */ | 2353 | /* D0 */ |
2289 | 97, | 2354 | RCAR_GP_PIN(3, 1), |
2290 | }; | 2355 | }; |
2291 | static const unsigned int sdhi2_data1_mux[] = { | 2356 | static const unsigned int sdhi2_data1_mux[] = { |
2292 | SD2_DAT0_MARK, | 2357 | SD2_DAT0_MARK, |
2293 | }; | 2358 | }; |
2294 | static const unsigned int sdhi2_data4_pins[] = { | 2359 | static const unsigned int sdhi2_data4_pins[] = { |
2295 | /* D[0:3] */ | 2360 | /* D[0:3] */ |
2296 | 97, 98, 99, 100, | 2361 | RCAR_GP_PIN(3, 1), RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 3), |
2362 | RCAR_GP_PIN(3, 4), | ||
2297 | }; | 2363 | }; |
2298 | static const unsigned int sdhi2_data4_mux[] = { | 2364 | static const unsigned int sdhi2_data4_mux[] = { |
2299 | SD2_DAT0_MARK, SD2_DAT1_MARK, SD2_DAT2_MARK, SD2_DAT3_MARK, | 2365 | SD2_DAT0_MARK, SD2_DAT1_MARK, SD2_DAT2_MARK, SD2_DAT3_MARK, |
2300 | }; | 2366 | }; |
2301 | static const unsigned int sdhi2_ctrl_pins[] = { | 2367 | static const unsigned int sdhi2_ctrl_pins[] = { |
2302 | /* CMD, CLK */ | 2368 | /* CMD, CLK */ |
2303 | 102, 101, | 2369 | RCAR_GP_PIN(3, 6), RCAR_GP_PIN(3, 5), |
2304 | }; | 2370 | }; |
2305 | static const unsigned int sdhi2_ctrl_mux[] = { | 2371 | static const unsigned int sdhi2_ctrl_mux[] = { |
2306 | SD2_CMD_MARK, SD2_CLK_MARK, | 2372 | SD2_CMD_MARK, SD2_CLK_MARK, |
2307 | }; | 2373 | }; |
2308 | static const unsigned int sdhi2_cd_pins[] = { | 2374 | static const unsigned int sdhi2_cd_pins[] = { |
2309 | /* CD */ | 2375 | /* CD */ |
2310 | 103, | 2376 | RCAR_GP_PIN(3, 7), |
2311 | }; | 2377 | }; |
2312 | static const unsigned int sdhi2_cd_mux[] = { | 2378 | static const unsigned int sdhi2_cd_mux[] = { |
2313 | SD2_CD_MARK, | 2379 | SD2_CD_MARK, |
2314 | }; | 2380 | }; |
2315 | static const unsigned int sdhi2_wp_pins[] = { | 2381 | static const unsigned int sdhi2_wp_pins[] = { |
2316 | /* WP */ | 2382 | /* WP */ |
2317 | 104, | 2383 | RCAR_GP_PIN(3, 8), |
2318 | }; | 2384 | }; |
2319 | static const unsigned int sdhi2_wp_mux[] = { | 2385 | static const unsigned int sdhi2_wp_mux[] = { |
2320 | SD2_WP_MARK, | 2386 | SD2_WP_MARK, |
@@ -2322,35 +2388,36 @@ static const unsigned int sdhi2_wp_mux[] = { | |||
2322 | /* - SDHI3 ------------------------------------------------------------------ */ | 2388 | /* - SDHI3 ------------------------------------------------------------------ */ |
2323 | static const unsigned int sdhi3_data1_pins[] = { | 2389 | static const unsigned int sdhi3_data1_pins[] = { |
2324 | /* D0 */ | 2390 | /* D0 */ |
2325 | 50, | 2391 | RCAR_GP_PIN(1, 18), |
2326 | }; | 2392 | }; |
2327 | static const unsigned int sdhi3_data1_mux[] = { | 2393 | static const unsigned int sdhi3_data1_mux[] = { |
2328 | SD3_DAT0_MARK, | 2394 | SD3_DAT0_MARK, |
2329 | }; | 2395 | }; |
2330 | static const unsigned int sdhi3_data4_pins[] = { | 2396 | static const unsigned int sdhi3_data4_pins[] = { |
2331 | /* D[0:3] */ | 2397 | /* D[0:3] */ |
2332 | 50, 51, 52, 53, | 2398 | RCAR_GP_PIN(1, 18), RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 20), |
2399 | RCAR_GP_PIN(1, 21), | ||
2333 | }; | 2400 | }; |
2334 | static const unsigned int sdhi3_data4_mux[] = { | 2401 | static const unsigned int sdhi3_data4_mux[] = { |
2335 | SD3_DAT0_MARK, SD3_DAT1_MARK, SD3_DAT2_MARK, SD3_DAT3_MARK, | 2402 | SD3_DAT0_MARK, SD3_DAT1_MARK, SD3_DAT2_MARK, SD3_DAT3_MARK, |
2336 | }; | 2403 | }; |
2337 | static const unsigned int sdhi3_ctrl_pins[] = { | 2404 | static const unsigned int sdhi3_ctrl_pins[] = { |
2338 | /* CMD, CLK */ | 2405 | /* CMD, CLK */ |
2339 | 35, 34, | 2406 | RCAR_GP_PIN(1, 3), RCAR_GP_PIN(1, 2), |
2340 | }; | 2407 | }; |
2341 | static const unsigned int sdhi3_ctrl_mux[] = { | 2408 | static const unsigned int sdhi3_ctrl_mux[] = { |
2342 | SD3_CMD_MARK, SD3_CLK_MARK, | 2409 | SD3_CMD_MARK, SD3_CLK_MARK, |
2343 | }; | 2410 | }; |
2344 | static const unsigned int sdhi3_cd_pins[] = { | 2411 | static const unsigned int sdhi3_cd_pins[] = { |
2345 | /* CD */ | 2412 | /* CD */ |
2346 | 62, | 2413 | RCAR_GP_PIN(1, 30), |
2347 | }; | 2414 | }; |
2348 | static const unsigned int sdhi3_cd_mux[] = { | 2415 | static const unsigned int sdhi3_cd_mux[] = { |
2349 | SD3_CD_MARK, | 2416 | SD3_CD_MARK, |
2350 | }; | 2417 | }; |
2351 | static const unsigned int sdhi3_wp_pins[] = { | 2418 | static const unsigned int sdhi3_wp_pins[] = { |
2352 | /* WP */ | 2419 | /* WP */ |
2353 | 64, | 2420 | RCAR_GP_PIN(2, 0), |
2354 | }; | 2421 | }; |
2355 | static const unsigned int sdhi3_wp_mux[] = { | 2422 | static const unsigned int sdhi3_wp_mux[] = { |
2356 | SD3_WP_MARK, | 2423 | SD3_WP_MARK, |
@@ -2358,14 +2425,14 @@ static const unsigned int sdhi3_wp_mux[] = { | |||
2358 | /* - USB0 ------------------------------------------------------------------- */ | 2425 | /* - USB0 ------------------------------------------------------------------- */ |
2359 | static const unsigned int usb0_pins[] = { | 2426 | static const unsigned int usb0_pins[] = { |
2360 | /* PENC */ | 2427 | /* PENC */ |
2361 | 154, | 2428 | RCAR_GP_PIN(4, 26), |
2362 | }; | 2429 | }; |
2363 | static const unsigned int usb0_mux[] = { | 2430 | static const unsigned int usb0_mux[] = { |
2364 | USB_PENC0_MARK, | 2431 | USB_PENC0_MARK, |
2365 | }; | 2432 | }; |
2366 | static const unsigned int usb0_ovc_pins[] = { | 2433 | static const unsigned int usb0_ovc_pins[] = { |
2367 | /* USB_OVC */ | 2434 | /* USB_OVC */ |
2368 | 150 | 2435 | RCAR_GP_PIN(4, 22), |
2369 | }; | 2436 | }; |
2370 | static const unsigned int usb0_ovc_mux[] = { | 2437 | static const unsigned int usb0_ovc_mux[] = { |
2371 | USB_OVC0_MARK, | 2438 | USB_OVC0_MARK, |
@@ -2373,14 +2440,14 @@ static const unsigned int usb0_ovc_mux[] = { | |||
2373 | /* - USB1 ------------------------------------------------------------------- */ | 2440 | /* - USB1 ------------------------------------------------------------------- */ |
2374 | static const unsigned int usb1_pins[] = { | 2441 | static const unsigned int usb1_pins[] = { |
2375 | /* PENC */ | 2442 | /* PENC */ |
2376 | 155, | 2443 | RCAR_GP_PIN(4, 27), |
2377 | }; | 2444 | }; |
2378 | static const unsigned int usb1_mux[] = { | 2445 | static const unsigned int usb1_mux[] = { |
2379 | USB_PENC1_MARK, | 2446 | USB_PENC1_MARK, |
2380 | }; | 2447 | }; |
2381 | static const unsigned int usb1_ovc_pins[] = { | 2448 | static const unsigned int usb1_ovc_pins[] = { |
2382 | /* USB_OVC */ | 2449 | /* USB_OVC */ |
2383 | 152, | 2450 | RCAR_GP_PIN(4, 24), |
2384 | }; | 2451 | }; |
2385 | static const unsigned int usb1_ovc_mux[] = { | 2452 | static const unsigned int usb1_ovc_mux[] = { |
2386 | USB_OVC1_MARK, | 2453 | USB_OVC1_MARK, |
@@ -2388,18 +2455,122 @@ static const unsigned int usb1_ovc_mux[] = { | |||
2388 | /* - USB2 ------------------------------------------------------------------- */ | 2455 | /* - USB2 ------------------------------------------------------------------- */ |
2389 | static const unsigned int usb2_pins[] = { | 2456 | static const unsigned int usb2_pins[] = { |
2390 | /* PENC */ | 2457 | /* PENC */ |
2391 | 156, | 2458 | RCAR_GP_PIN(4, 28), |
2392 | }; | 2459 | }; |
2393 | static const unsigned int usb2_mux[] = { | 2460 | static const unsigned int usb2_mux[] = { |
2394 | USB_PENC2_MARK, | 2461 | USB_PENC2_MARK, |
2395 | }; | 2462 | }; |
2396 | static const unsigned int usb2_ovc_pins[] = { | 2463 | static const unsigned int usb2_ovc_pins[] = { |
2397 | /* USB_OVC */ | 2464 | /* USB_OVC */ |
2398 | 125, | 2465 | RCAR_GP_PIN(3, 29), |
2399 | }; | 2466 | }; |
2400 | static const unsigned int usb2_ovc_mux[] = { | 2467 | static const unsigned int usb2_ovc_mux[] = { |
2401 | USB_OVC2_MARK, | 2468 | USB_OVC2_MARK, |
2402 | }; | 2469 | }; |
2470 | /* - VIN0 ------------------------------------------------------------------- */ | ||
2471 | static const unsigned int vin0_data8_pins[] = { | ||
2472 | /* D[0:7] */ | ||
2473 | RCAR_GP_PIN(2, 6), RCAR_GP_PIN(2, 7), RCAR_GP_PIN(2, 8), | ||
2474 | RCAR_GP_PIN(2, 9), RCAR_GP_PIN(2, 10), RCAR_GP_PIN(2, 11), | ||
2475 | RCAR_GP_PIN(2, 12), RCAR_GP_PIN(2, 13), | ||
2476 | }; | ||
2477 | static const unsigned int vin0_data8_mux[] = { | ||
2478 | VI0_DATA0_VI0_B0_MARK, VI0_DATA1_VI0_B1_MARK, VI0_DATA2_VI0_B2_MARK, | ||
2479 | VI0_DATA3_VI0_B3_MARK, VI0_DATA4_VI0_B4_MARK, VI0_DATA5_VI0_B5_MARK, | ||
2480 | VI0_DATA6_VI0_B6_MARK, VI0_DATA7_VI0_B7_MARK, | ||
2481 | }; | ||
2482 | static const unsigned int vin0_clk_pins[] = { | ||
2483 | /* CLK */ | ||
2484 | RCAR_GP_PIN(2, 1), | ||
2485 | }; | ||
2486 | static const unsigned int vin0_clk_mux[] = { | ||
2487 | VI0_CLK_MARK, | ||
2488 | }; | ||
2489 | static const unsigned int vin0_sync_pins[] = { | ||
2490 | /* HSYNC, VSYNC */ | ||
2491 | RCAR_GP_PIN(2, 4), RCAR_GP_PIN(2, 5), | ||
2492 | }; | ||
2493 | static const unsigned int vin0_sync_mux[] = { | ||
2494 | VI0_HSYNC_MARK, VI0_VSYNC_MARK, | ||
2495 | }; | ||
2496 | /* - VIN1 ------------------------------------------------------------------- */ | ||
2497 | static const unsigned int vin1_data8_pins[] = { | ||
2498 | /* D[0:7] */ | ||
2499 | RCAR_GP_PIN(3, 1), RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 3), | ||
2500 | RCAR_GP_PIN(3, 4), RCAR_GP_PIN(3, 5), RCAR_GP_PIN(3, 6), | ||
2501 | RCAR_GP_PIN(3, 7), RCAR_GP_PIN(3, 8), | ||
2502 | }; | ||
2503 | static const unsigned int vin1_data8_mux[] = { | ||
2504 | VI1_DATA0_VI1_B0_MARK, VI1_DATA1_VI1_B1_MARK, VI1_DATA2_VI1_B2_MARK, | ||
2505 | VI1_DATA3_VI1_B3_MARK, VI1_DATA4_VI1_B4_MARK, VI1_DATA5_VI1_B5_MARK, | ||
2506 | VI1_DATA6_VI1_B6_MARK, VI1_DATA7_VI1_B7_MARK, | ||
2507 | }; | ||
2508 | static const unsigned int vin1_clk_pins[] = { | ||
2509 | /* CLK */ | ||
2510 | RCAR_GP_PIN(2, 30), | ||
2511 | }; | ||
2512 | static const unsigned int vin1_clk_mux[] = { | ||
2513 | VI1_CLK_MARK, | ||
2514 | }; | ||
2515 | static const unsigned int vin1_sync_pins[] = { | ||
2516 | /* HSYNC, VSYNC */ | ||
2517 | RCAR_GP_PIN(2, 31), RCAR_GP_PIN(3, 0), | ||
2518 | }; | ||
2519 | static const unsigned int vin1_sync_mux[] = { | ||
2520 | VI1_HSYNC_MARK, VI1_VSYNC_MARK, | ||
2521 | }; | ||
2522 | /* - VIN2 ------------------------------------------------------------------- */ | ||
2523 | static const unsigned int vin2_data8_pins[] = { | ||
2524 | /* D[0:7] */ | ||
2525 | RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 3), RCAR_GP_PIN(1, 10), | ||
2526 | RCAR_GP_PIN(1, 11), RCAR_GP_PIN(1, 18), RCAR_GP_PIN(1, 19), | ||
2527 | RCAR_GP_PIN(1, 31), RCAR_GP_PIN(2, 0), | ||
2528 | }; | ||
2529 | static const unsigned int vin2_data8_mux[] = { | ||
2530 | VI2_DATA0_VI2_B0_MARK, VI2_DATA1_VI2_B1_MARK, VI2_DATA2_VI2_B2_MARK, | ||
2531 | VI2_DATA3_VI2_B3_MARK, VI2_DATA4_VI2_B4_MARK, VI2_DATA5_VI2_B5_MARK, | ||
2532 | VI2_DATA6_VI2_B6_MARK, VI2_DATA7_VI2_B7_MARK, | ||
2533 | }; | ||
2534 | static const unsigned int vin2_clk_pins[] = { | ||
2535 | /* CLK */ | ||
2536 | RCAR_GP_PIN(1, 30), | ||
2537 | }; | ||
2538 | static const unsigned int vin2_clk_mux[] = { | ||
2539 | VI2_CLK_MARK, | ||
2540 | }; | ||
2541 | static const unsigned int vin2_sync_pins[] = { | ||
2542 | /* HSYNC, VSYNC */ | ||
2543 | RCAR_GP_PIN(1, 28), RCAR_GP_PIN(1, 29), | ||
2544 | }; | ||
2545 | static const unsigned int vin2_sync_mux[] = { | ||
2546 | VI2_HSYNC_MARK, VI2_VSYNC_MARK, | ||
2547 | }; | ||
2548 | /* - VIN3 ------------------------------------------------------------------- */ | ||
2549 | static const unsigned int vin3_data8_pins[] = { | ||
2550 | /* D[0:7] */ | ||
2551 | RCAR_GP_PIN(3, 9), RCAR_GP_PIN(3, 10), RCAR_GP_PIN(3, 11), | ||
2552 | RCAR_GP_PIN(3, 12), RCAR_GP_PIN(3, 13), RCAR_GP_PIN(3, 14), | ||
2553 | RCAR_GP_PIN(3, 15), RCAR_GP_PIN(3, 16), | ||
2554 | }; | ||
2555 | static const unsigned int vin3_data8_mux[] = { | ||
2556 | VI3_DATA0_MARK, VI3_DATA1_MARK, VI3_DATA2_MARK, | ||
2557 | VI3_DATA3_MARK, VI3_DATA4_MARK, VI3_DATA5_MARK, | ||
2558 | VI3_DATA6_MARK, VI3_DATA7_MARK, | ||
2559 | }; | ||
2560 | static const unsigned int vin3_clk_pins[] = { | ||
2561 | /* CLK */ | ||
2562 | RCAR_GP_PIN(2, 31), | ||
2563 | }; | ||
2564 | static const unsigned int vin3_clk_mux[] = { | ||
2565 | VI3_CLK_MARK, | ||
2566 | }; | ||
2567 | static const unsigned int vin3_sync_pins[] = { | ||
2568 | /* HSYNC, VSYNC */ | ||
2569 | RCAR_GP_PIN(1, 28), RCAR_GP_PIN(1, 29), | ||
2570 | }; | ||
2571 | static const unsigned int vin3_sync_mux[] = { | ||
2572 | VI3_HSYNC_MARK, VI3_VSYNC_MARK, | ||
2573 | }; | ||
2403 | 2574 | ||
2404 | static const struct sh_pfc_pin_group pinmux_groups[] = { | 2575 | static const struct sh_pfc_pin_group pinmux_groups[] = { |
2405 | SH_PFC_PIN_GROUP(du0_rgb666), | 2576 | SH_PFC_PIN_GROUP(du0_rgb666), |
@@ -2419,6 +2590,9 @@ static const struct sh_pfc_pin_group pinmux_groups[] = { | |||
2419 | SH_PFC_PIN_GROUP(du1_sync_1), | 2590 | SH_PFC_PIN_GROUP(du1_sync_1), |
2420 | SH_PFC_PIN_GROUP(du1_oddf), | 2591 | SH_PFC_PIN_GROUP(du1_oddf), |
2421 | SH_PFC_PIN_GROUP(du1_cde), | 2592 | SH_PFC_PIN_GROUP(du1_cde), |
2593 | SH_PFC_PIN_GROUP(ether_rmii), | ||
2594 | SH_PFC_PIN_GROUP(ether_link), | ||
2595 | SH_PFC_PIN_GROUP(ether_magic), | ||
2422 | SH_PFC_PIN_GROUP(hspi0), | 2596 | SH_PFC_PIN_GROUP(hspi0), |
2423 | SH_PFC_PIN_GROUP(hspi1), | 2597 | SH_PFC_PIN_GROUP(hspi1), |
2424 | SH_PFC_PIN_GROUP(hspi1_b), | 2598 | SH_PFC_PIN_GROUP(hspi1_b), |
@@ -2527,6 +2701,18 @@ static const struct sh_pfc_pin_group pinmux_groups[] = { | |||
2527 | SH_PFC_PIN_GROUP(usb1_ovc), | 2701 | SH_PFC_PIN_GROUP(usb1_ovc), |
2528 | SH_PFC_PIN_GROUP(usb2), | 2702 | SH_PFC_PIN_GROUP(usb2), |
2529 | SH_PFC_PIN_GROUP(usb2_ovc), | 2703 | SH_PFC_PIN_GROUP(usb2_ovc), |
2704 | SH_PFC_PIN_GROUP(vin0_data8), | ||
2705 | SH_PFC_PIN_GROUP(vin0_clk), | ||
2706 | SH_PFC_PIN_GROUP(vin0_sync), | ||
2707 | SH_PFC_PIN_GROUP(vin1_data8), | ||
2708 | SH_PFC_PIN_GROUP(vin1_clk), | ||
2709 | SH_PFC_PIN_GROUP(vin1_sync), | ||
2710 | SH_PFC_PIN_GROUP(vin2_data8), | ||
2711 | SH_PFC_PIN_GROUP(vin2_clk), | ||
2712 | SH_PFC_PIN_GROUP(vin2_sync), | ||
2713 | SH_PFC_PIN_GROUP(vin3_data8), | ||
2714 | SH_PFC_PIN_GROUP(vin3_clk), | ||
2715 | SH_PFC_PIN_GROUP(vin3_sync), | ||
2530 | }; | 2716 | }; |
2531 | 2717 | ||
2532 | static const char * const du0_groups[] = { | 2718 | static const char * const du0_groups[] = { |
@@ -2552,6 +2738,12 @@ static const char * const du1_groups[] = { | |||
2552 | "du1_cde", | 2738 | "du1_cde", |
2553 | }; | 2739 | }; |
2554 | 2740 | ||
2741 | static const char * const ether_groups[] = { | ||
2742 | "ether_rmii", | ||
2743 | "ether_link", | ||
2744 | "ether_magic", | ||
2745 | }; | ||
2746 | |||
2555 | static const char * const hspi0_groups[] = { | 2747 | static const char * const hspi0_groups[] = { |
2556 | "hspi0", | 2748 | "hspi0", |
2557 | }; | 2749 | }; |
@@ -2720,9 +2912,34 @@ static const char * const usb2_groups[] = { | |||
2720 | "usb2_ovc", | 2912 | "usb2_ovc", |
2721 | }; | 2913 | }; |
2722 | 2914 | ||
2915 | static const char * const vin0_groups[] = { | ||
2916 | "vin0_data8", | ||
2917 | "vin0_clk", | ||
2918 | "vin0_sync", | ||
2919 | }; | ||
2920 | |||
2921 | static const char * const vin1_groups[] = { | ||
2922 | "vin1_data8", | ||
2923 | "vin1_clk", | ||
2924 | "vin1_sync", | ||
2925 | }; | ||
2926 | |||
2927 | static const char * const vin2_groups[] = { | ||
2928 | "vin2_data8", | ||
2929 | "vin2_clk", | ||
2930 | "vin2_sync", | ||
2931 | }; | ||
2932 | |||
2933 | static const char * const vin3_groups[] = { | ||
2934 | "vin3_data8", | ||
2935 | "vin3_clk", | ||
2936 | "vin3_sync", | ||
2937 | }; | ||
2938 | |||
2723 | static const struct sh_pfc_function pinmux_functions[] = { | 2939 | static const struct sh_pfc_function pinmux_functions[] = { |
2724 | SH_PFC_FUNCTION(du0), | 2940 | SH_PFC_FUNCTION(du0), |
2725 | SH_PFC_FUNCTION(du1), | 2941 | SH_PFC_FUNCTION(du1), |
2942 | SH_PFC_FUNCTION(ether), | ||
2726 | SH_PFC_FUNCTION(hspi0), | 2943 | SH_PFC_FUNCTION(hspi0), |
2727 | SH_PFC_FUNCTION(hspi1), | 2944 | SH_PFC_FUNCTION(hspi1), |
2728 | SH_PFC_FUNCTION(hspi2), | 2945 | SH_PFC_FUNCTION(hspi2), |
@@ -2743,6 +2960,10 @@ static const struct sh_pfc_function pinmux_functions[] = { | |||
2743 | SH_PFC_FUNCTION(usb0), | 2960 | SH_PFC_FUNCTION(usb0), |
2744 | SH_PFC_FUNCTION(usb1), | 2961 | SH_PFC_FUNCTION(usb1), |
2745 | SH_PFC_FUNCTION(usb2), | 2962 | SH_PFC_FUNCTION(usb2), |
2963 | SH_PFC_FUNCTION(vin0), | ||
2964 | SH_PFC_FUNCTION(vin1), | ||
2965 | SH_PFC_FUNCTION(vin2), | ||
2966 | SH_PFC_FUNCTION(vin3), | ||
2746 | }; | 2967 | }; |
2747 | 2968 | ||
2748 | static const struct pinmux_cfg_reg pinmux_config_regs[] = { | 2969 | static const struct pinmux_cfg_reg pinmux_config_regs[] = { |
@@ -3547,7 +3768,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = { | |||
3547 | /* SEL_SCIF [2] */ | 3768 | /* SEL_SCIF [2] */ |
3548 | FN_SEL_SCIF_0, FN_SEL_SCIF_1, FN_SEL_SCIF_2, FN_SEL_SCIF_3, | 3769 | FN_SEL_SCIF_0, FN_SEL_SCIF_1, FN_SEL_SCIF_2, FN_SEL_SCIF_3, |
3549 | /* SEL_CANCLK [2] */ | 3770 | /* SEL_CANCLK [2] */ |
3550 | FN_SEL_CANCLK_0, FN_SEL_CANCLK_1, FN_SEL_CANCLK_2, | 3771 | FN_SEL_CANCLK_0, FN_SEL_CANCLK_1, FN_SEL_CANCLK_2, 0, |
3551 | /* SEL_CAN0 [1] */ | 3772 | /* SEL_CAN0 [1] */ |
3552 | FN_SEL_CAN0_0, FN_SEL_CAN0_1, | 3773 | FN_SEL_CAN0_0, FN_SEL_CAN0_1, |
3553 | /* SEL_HSCIF1 [1] */ | 3774 | /* SEL_HSCIF1 [1] */ |
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7790.c b/drivers/pinctrl/sh-pfc/pfc-r8a7790.c new file mode 100644 index 000000000000..85d77a417c0e --- /dev/null +++ b/drivers/pinctrl/sh-pfc/pfc-r8a7790.c | |||
@@ -0,0 +1,3835 @@ | |||
1 | /* | ||
2 | * R8A7790 processor support | ||
3 | * | ||
4 | * Copyright (C) 2013 Renesas Electronics Corporation | ||
5 | * Copyright (C) 2013 Magnus Damm | ||
6 | * Copyright (C) 2012 Renesas Solutions Corp. | ||
7 | * Copyright (C) 2012 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License as | ||
11 | * published by the Free Software Foundation; version 2 of the | ||
12 | * License. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
22 | */ | ||
23 | |||
24 | #include <linux/kernel.h> | ||
25 | #include <linux/platform_data/gpio-rcar.h> | ||
26 | |||
27 | #include "core.h" | ||
28 | #include "sh_pfc.h" | ||
29 | |||
30 | #define PORT_GP_1(bank, pin, fn, sfx) fn(bank, pin, GP_##bank##_##pin, sfx) | ||
31 | |||
32 | #define PORT_GP_32(bank, fn, sfx) \ | ||
33 | PORT_GP_1(bank, 0, fn, sfx), PORT_GP_1(bank, 1, fn, sfx), \ | ||
34 | PORT_GP_1(bank, 2, fn, sfx), PORT_GP_1(bank, 3, fn, sfx), \ | ||
35 | PORT_GP_1(bank, 4, fn, sfx), PORT_GP_1(bank, 5, fn, sfx), \ | ||
36 | PORT_GP_1(bank, 6, fn, sfx), PORT_GP_1(bank, 7, fn, sfx), \ | ||
37 | PORT_GP_1(bank, 8, fn, sfx), PORT_GP_1(bank, 9, fn, sfx), \ | ||
38 | PORT_GP_1(bank, 10, fn, sfx), PORT_GP_1(bank, 11, fn, sfx), \ | ||
39 | PORT_GP_1(bank, 12, fn, sfx), PORT_GP_1(bank, 13, fn, sfx), \ | ||
40 | PORT_GP_1(bank, 14, fn, sfx), PORT_GP_1(bank, 15, fn, sfx), \ | ||
41 | PORT_GP_1(bank, 16, fn, sfx), PORT_GP_1(bank, 17, fn, sfx), \ | ||
42 | PORT_GP_1(bank, 18, fn, sfx), PORT_GP_1(bank, 19, fn, sfx), \ | ||
43 | PORT_GP_1(bank, 20, fn, sfx), PORT_GP_1(bank, 21, fn, sfx), \ | ||
44 | PORT_GP_1(bank, 22, fn, sfx), PORT_GP_1(bank, 23, fn, sfx), \ | ||
45 | PORT_GP_1(bank, 24, fn, sfx), PORT_GP_1(bank, 25, fn, sfx), \ | ||
46 | PORT_GP_1(bank, 26, fn, sfx), PORT_GP_1(bank, 27, fn, sfx), \ | ||
47 | PORT_GP_1(bank, 28, fn, sfx), PORT_GP_1(bank, 29, fn, sfx), \ | ||
48 | PORT_GP_1(bank, 30, fn, sfx), PORT_GP_1(bank, 31, fn, sfx) | ||
49 | |||
50 | #define PORT_GP_32_REV(bank, fn, sfx) \ | ||
51 | PORT_GP_1(bank, 31, fn, sfx), PORT_GP_1(bank, 30, fn, sfx), \ | ||
52 | PORT_GP_1(bank, 29, fn, sfx), PORT_GP_1(bank, 28, fn, sfx), \ | ||
53 | PORT_GP_1(bank, 27, fn, sfx), PORT_GP_1(bank, 26, fn, sfx), \ | ||
54 | PORT_GP_1(bank, 25, fn, sfx), PORT_GP_1(bank, 24, fn, sfx), \ | ||
55 | PORT_GP_1(bank, 23, fn, sfx), PORT_GP_1(bank, 22, fn, sfx), \ | ||
56 | PORT_GP_1(bank, 21, fn, sfx), PORT_GP_1(bank, 20, fn, sfx), \ | ||
57 | PORT_GP_1(bank, 19, fn, sfx), PORT_GP_1(bank, 18, fn, sfx), \ | ||
58 | PORT_GP_1(bank, 17, fn, sfx), PORT_GP_1(bank, 16, fn, sfx), \ | ||
59 | PORT_GP_1(bank, 15, fn, sfx), PORT_GP_1(bank, 14, fn, sfx), \ | ||
60 | PORT_GP_1(bank, 13, fn, sfx), PORT_GP_1(bank, 12, fn, sfx), \ | ||
61 | PORT_GP_1(bank, 11, fn, sfx), PORT_GP_1(bank, 10, fn, sfx), \ | ||
62 | PORT_GP_1(bank, 9, fn, sfx), PORT_GP_1(bank, 8, fn, sfx), \ | ||
63 | PORT_GP_1(bank, 7, fn, sfx), PORT_GP_1(bank, 6, fn, sfx), \ | ||
64 | PORT_GP_1(bank, 5, fn, sfx), PORT_GP_1(bank, 4, fn, sfx), \ | ||
65 | PORT_GP_1(bank, 3, fn, sfx), PORT_GP_1(bank, 2, fn, sfx), \ | ||
66 | PORT_GP_1(bank, 1, fn, sfx), PORT_GP_1(bank, 0, fn, sfx) | ||
67 | |||
68 | #define CPU_ALL_PORT(fn, sfx) \ | ||
69 | PORT_GP_32(0, fn, sfx), \ | ||
70 | PORT_GP_32(1, fn, sfx), \ | ||
71 | PORT_GP_32(2, fn, sfx), \ | ||
72 | PORT_GP_32(3, fn, sfx), \ | ||
73 | PORT_GP_32(4, fn, sfx), \ | ||
74 | PORT_GP_32(5, fn, sfx) | ||
75 | |||
76 | #define _GP_PORT_ALL(bank, pin, name, sfx) name##_##sfx | ||
77 | |||
78 | #define _GP_GPIO(bank, pin, _name, sfx) \ | ||
79 | [(bank * 32) + pin] = { \ | ||
80 | .name = __stringify(_name), \ | ||
81 | .enum_id = _name##_DATA, \ | ||
82 | } | ||
83 | |||
84 | #define _GP_DATA(bank, pin, name, sfx) \ | ||
85 | PINMUX_DATA(name##_DATA, name##_FN) | ||
86 | |||
87 | #define GP_ALL(str) CPU_ALL_PORT(_GP_PORT_ALL, str) | ||
88 | #define PINMUX_GPIO_GP_ALL() CPU_ALL_PORT(_GP_GPIO, unused) | ||
89 | #define PINMUX_DATA_GP_ALL() CPU_ALL_PORT(_GP_DATA, unused) | ||
90 | |||
91 | #define PINMUX_IPSR_DATA(ipsr, fn) PINMUX_DATA(fn##_MARK, FN_##ipsr, FN_##fn) | ||
92 | #define PINMUX_IPSR_MODSEL_DATA(ipsr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##ms, \ | ||
93 | FN_##ipsr, FN_##fn) | ||
94 | |||
95 | enum { | ||
96 | PINMUX_RESERVED = 0, | ||
97 | |||
98 | PINMUX_DATA_BEGIN, | ||
99 | GP_ALL(DATA), | ||
100 | PINMUX_DATA_END, | ||
101 | |||
102 | PINMUX_FUNCTION_BEGIN, | ||
103 | GP_ALL(FN), | ||
104 | |||
105 | /* GPSR0 */ | ||
106 | FN_IP0_2_0, FN_IP0_5_3, FN_IP0_8_6, FN_IP0_11_9, FN_IP0_15_12, | ||
107 | FN_IP0_19_16, FN_IP0_22_20, FN_IP0_26_23, FN_IP0_30_27, | ||
108 | FN_IP1_3_0, FN_IP1_7_4, FN_IP1_11_8, FN_IP1_14_12, | ||
109 | FN_IP1_17_15, FN_IP1_21_18, FN_IP1_25_22, FN_IP1_27_26, | ||
110 | FN_IP1_29_28, FN_IP2_2_0, FN_IP2_5_3, FN_IP2_8_6, FN_IP2_11_9, | ||
111 | FN_IP2_14_12, FN_IP2_17_15, FN_IP2_21_18, FN_IP2_25_22, | ||
112 | FN_IP2_28_26, FN_IP3_3_0, FN_IP3_7_4, FN_IP3_11_8, | ||
113 | FN_IP3_14_12, FN_IP3_17_15, | ||
114 | |||
115 | /* GPSR1 */ | ||
116 | FN_IP3_19_18, FN_IP3_22_20, FN_IP3_25_23, FN_IP3_28_26, | ||
117 | FN_IP3_31_29, FN_IP4_2_0, FN_IP4_5_3, FN_IP4_8_6, FN_IP4_11_9, | ||
118 | FN_IP4_14_12, FN_IP4_17_15, FN_IP4_20_18, FN_IP4_23_21, | ||
119 | FN_IP4_26_24, FN_IP4_29_27, FN_IP5_2_0, FN_IP5_5_3, FN_IP5_9_6, | ||
120 | FN_IP5_12_10, FN_IP5_14_13, FN_IP5_17_15, FN_IP5_20_18, | ||
121 | FN_IP5_23_21, FN_IP5_26_24, FN_IP5_29_27, FN_IP6_2_0, | ||
122 | FN_IP6_5_3, FN_IP6_8_6, FN_IP6_10_9, FN_IP6_13_11, | ||
123 | |||
124 | /* GPSR2 */ | ||
125 | FN_IP7_28_27, FN_IP7_30_29, FN_IP8_1_0, FN_IP8_3_2, FN_IP8_5_4, | ||
126 | FN_IP8_7_6, FN_IP8_9_8, FN_IP8_11_10, FN_IP8_13_12, FN_IP8_15_14, | ||
127 | FN_IP8_17_16, FN_IP8_19_18, FN_IP8_21_20, FN_IP8_23_22, | ||
128 | FN_IP8_25_24, FN_IP8_26, FN_IP8_27, FN_VI1_DATA7_VI1_B7, | ||
129 | FN_IP6_16_14, FN_IP6_19_17, FN_IP6_22_20, FN_IP6_25_23, | ||
130 | FN_IP6_28_26, FN_IP6_31_29, FN_IP7_2_0, FN_IP7_5_3, FN_IP7_7_6, | ||
131 | FN_IP7_9_8, FN_IP7_12_10, FN_IP7_15_13, | ||
132 | |||
133 | /* GPSR3 */ | ||
134 | FN_IP8_28, FN_IP8_30_29, FN_IP9_1_0, FN_IP9_3_2, FN_IP9_5_4, | ||
135 | FN_IP9_7_6, FN_IP9_11_8, FN_IP9_15_12, FN_IP9_17_16, FN_IP9_19_18, | ||
136 | FN_IP9_21_20, FN_IP9_23_22, FN_IP9_25_24, FN_IP9_27_26, | ||
137 | FN_IP9_31_28, FN_IP10_3_0, FN_IP10_6_4, FN_IP10_10_7, FN_IP10_14_11, | ||
138 | FN_IP10_18_15, FN_IP10_22_19, FN_IP10_25_23, FN_IP10_29_26, | ||
139 | FN_IP11_3_0, FN_IP11_4, FN_IP11_6_5, FN_IP11_8_7, FN_IP11_10_9, | ||
140 | FN_IP11_12_11, FN_IP11_14_13, FN_IP11_17_15, FN_IP11_21_18, | ||
141 | |||
142 | /* GPSR4 */ | ||
143 | FN_IP11_23_22, FN_IP11_26_24, FN_IP11_29_27, FN_IP11_31_30, | ||
144 | FN_IP12_1_0, FN_IP12_3_2, FN_IP12_5_4, FN_IP12_7_6, FN_IP12_10_8, | ||
145 | FN_IP12_13_11, FN_IP12_16_14, FN_IP12_19_17, FN_IP12_22_20, | ||
146 | FN_IP12_24_23, FN_IP12_27_25, FN_IP12_30_28, FN_IP13_2_0, | ||
147 | FN_IP13_6_3, FN_IP13_9_7, FN_IP13_12_10, FN_IP13_15_13, | ||
148 | FN_IP13_18_16, FN_IP13_22_19, FN_IP13_25_23, FN_IP13_28_26, | ||
149 | FN_IP13_30_29, FN_IP14_2_0, FN_IP14_5_3, FN_IP14_8_6, FN_IP14_11_9, | ||
150 | FN_IP14_15_12, FN_IP14_18_16, | ||
151 | |||
152 | /* GPSR5 */ | ||
153 | FN_IP14_21_19, FN_IP14_24_22, FN_IP14_27_25, FN_IP14_30_28, | ||
154 | FN_IP15_2_0, FN_IP15_5_3, FN_IP15_8_6, FN_IP15_11_9, FN_IP15_13_12, | ||
155 | FN_IP15_15_14, FN_IP15_17_16, FN_IP15_19_18, FN_IP15_22_20, | ||
156 | FN_IP15_25_23, FN_IP15_27_26, FN_IP15_29_28, FN_IP16_2_0, | ||
157 | FN_IP16_5_3, FN_USB0_PWEN, FN_USB0_OVC_VBUS, FN_IP16_6, FN_IP16_7, | ||
158 | FN_USB2_PWEN, FN_USB2_OVC, FN_AVS1, FN_AVS2, FN_DU_DOTCLKIN0, | ||
159 | FN_IP7_26_25, FN_DU_DOTCLKIN2, FN_IP7_18_16, FN_IP7_21_19, FN_IP7_24_22, | ||
160 | |||
161 | /* IPSR0 */ | ||
162 | FN_D0, FN_MSIOF3_SCK_B, FN_VI3_DATA0, FN_VI0_G4, FN_VI0_G4_B, | ||
163 | FN_D1, FN_MSIOF3_SYNC_B, FN_VI3_DATA1, FN_VI0_G5, | ||
164 | FN_VI0_G5_B, FN_D2, FN_MSIOF3_RXD_B, FN_VI3_DATA2, | ||
165 | FN_VI0_G6, FN_VI0_G6_B, FN_D3, FN_MSIOF3_TXD_B, | ||
166 | FN_VI3_DATA3, FN_VI0_G7, FN_VI0_G7_B, FN_D4, | ||
167 | FN_SCIFB1_RXD_F, FN_SCIFB0_RXD_C, FN_VI3_DATA4, | ||
168 | FN_VI0_R0, FN_VI0_R0_B, FN_RX0_B, FN_D5, | ||
169 | FN_SCIFB1_TXD_F, FN_SCIFB0_TXD_C, FN_VI3_DATA5, | ||
170 | FN_VI0_R1, FN_VI0_R1_B, FN_TX0_B, FN_D6, | ||
171 | FN_SCL2_C, FN_VI3_DATA6, FN_VI0_R2, FN_VI0_R2_B, | ||
172 | FN_SCL2_CIS_C, FN_D7, FN_AD_DI_B, FN_SDA2_C, | ||
173 | FN_VI3_DATA7, FN_VI0_R3, FN_VI0_R3_B, FN_SDA2_CIS_C, | ||
174 | FN_D8, FN_SCIFA1_SCK_C, FN_AVB_TXD0, FN_MII_TXD0, | ||
175 | FN_VI0_G0, FN_VI0_G0_B, FN_VI2_DATA0_VI2_B0, | ||
176 | |||
177 | /* IPSR1 */ | ||
178 | FN_D9, FN_SCIFA1_RXD_C, FN_AVB_TXD1, FN_MII_TXD1, | ||
179 | FN_VI0_G1, FN_VI0_G1_B, FN_VI2_DATA1_VI2_B1, FN_D10, | ||
180 | FN_SCIFA1_TXD_C, FN_AVB_TXD2, FN_MII_TXD2, | ||
181 | FN_VI0_G2, FN_VI0_G2_B, FN_VI2_DATA2_VI2_B2, FN_D11, | ||
182 | FN_SCIFA1_CTS_N_C, FN_AVB_TXD3, FN_MII_TXD3, | ||
183 | FN_VI0_G3, FN_VI0_G3_B, FN_VI2_DATA3_VI2_B3, | ||
184 | FN_D12, FN_SCIFA1_RTS_N_C, FN_AVB_TXD4, | ||
185 | FN_VI0_HSYNC_N, FN_VI0_HSYNC_N_B, FN_VI2_DATA4_VI2_B4, | ||
186 | FN_D13, FN_AVB_TXD5, FN_VI0_VSYNC_N, | ||
187 | FN_VI0_VSYNC_N_B, FN_VI2_DATA5_VI2_B5, FN_D14, | ||
188 | FN_SCIFB1_RXD_C, FN_AVB_TXD6, FN_RX1_B, | ||
189 | FN_VI0_CLKENB, FN_VI0_CLKENB_B, FN_VI2_DATA6_VI2_B6, | ||
190 | FN_D15, FN_SCIFB1_TXD_C, FN_AVB_TXD7, FN_TX1_B, | ||
191 | FN_VI0_FIELD, FN_VI0_FIELD_B, FN_VI2_DATA7_VI2_B7, | ||
192 | FN_A0, FN_PWM3, FN_A1, FN_PWM4, | ||
193 | |||
194 | /* IPSR2 */ | ||
195 | FN_A2, FN_PWM5, FN_MSIOF1_SS1_B, FN_A3, | ||
196 | FN_PWM6, FN_MSIOF1_SS2_B, FN_A4, FN_MSIOF1_TXD_B, | ||
197 | FN_TPU0TO0, FN_A5, FN_SCIFA1_TXD_B, FN_TPU0TO1, | ||
198 | FN_A6, FN_SCIFA1_RTS_N_B, FN_TPU0TO2, FN_A7, | ||
199 | FN_SCIFA1_SCK_B, FN_AUDIO_CLKOUT_B, FN_TPU0TO3, | ||
200 | FN_A8, FN_SCIFA1_RXD_B, FN_SSI_SCK5_B, FN_VI0_R4, | ||
201 | FN_VI0_R4_B, FN_SCIFB2_RXD_C, FN_VI2_DATA0_VI2_B0_B, | ||
202 | FN_A9, FN_SCIFA1_CTS_N_B, FN_SSI_WS5_B, FN_VI0_R5, | ||
203 | FN_VI0_R5_B, FN_SCIFB2_TXD_C, FN_VI2_DATA1_VI2_B1_B, | ||
204 | FN_A10, FN_SSI_SDATA5_B, FN_MSIOF2_SYNC, FN_VI0_R6, | ||
205 | FN_VI0_R6_B, FN_VI2_DATA2_VI2_B2_B, | ||
206 | |||
207 | /* IPSR3 */ | ||
208 | FN_A11, FN_SCIFB2_CTS_N_B, FN_MSIOF2_SCK, FN_VI1_R0, | ||
209 | FN_VI1_R0_B, FN_VI2_G0, FN_VI2_DATA3_VI2_B3_B, | ||
210 | FN_A12, FN_SCIFB2_RXD_B, FN_MSIOF2_TXD, FN_VI1_R1, | ||
211 | FN_VI1_R1_B, FN_VI2_G1, FN_VI2_DATA4_VI2_B4_B, | ||
212 | FN_A13, FN_SCIFB2_RTS_N_B, FN_EX_WAIT2, | ||
213 | FN_MSIOF2_RXD, FN_VI1_R2, FN_VI1_R2_B, FN_VI2_G2, | ||
214 | FN_VI2_DATA5_VI2_B5_B, FN_A14, FN_SCIFB2_TXD_B, | ||
215 | FN_ATACS11_N, FN_MSIOF2_SS1, FN_A15, FN_SCIFB2_SCK_B, | ||
216 | FN_ATARD1_N, FN_MSIOF2_SS2, FN_A16, FN_ATAWR1_N, | ||
217 | FN_A17, FN_AD_DO_B, FN_ATADIR1_N, FN_A18, | ||
218 | FN_AD_CLK_B, FN_ATAG1_N, FN_A19, FN_AD_NCS_N_B, | ||
219 | FN_ATACS01_N, FN_EX_WAIT0_B, FN_A20, FN_SPCLK, | ||
220 | FN_VI1_R3, FN_VI1_R3_B, FN_VI2_G4, | ||
221 | |||
222 | /* IPSR4 */ | ||
223 | FN_A21, FN_MOSI_IO0, FN_VI1_R4, FN_VI1_R4_B, FN_VI2_G5, | ||
224 | FN_A22, FN_MISO_IO1, FN_VI1_R5, FN_VI1_R5_B, | ||
225 | FN_VI2_G6, FN_A23, FN_IO2, FN_VI1_G7, | ||
226 | FN_VI1_G7_B, FN_VI2_G7, FN_A24, FN_IO3, | ||
227 | FN_VI1_R7, FN_VI1_R7_B, FN_VI2_CLKENB, | ||
228 | FN_VI2_CLKENB_B, FN_A25, FN_SSL, FN_VI1_G6, | ||
229 | FN_VI1_G6_B, FN_VI2_FIELD, FN_VI2_FIELD_B, FN_CS0_N, | ||
230 | FN_VI1_R6, FN_VI1_R6_B, FN_VI2_G3, FN_MSIOF0_SS2_B, | ||
231 | FN_CS1_N_A26, FN_SPEEDIN, FN_VI0_R7, FN_VI0_R7_B, | ||
232 | FN_VI2_CLK, FN_VI2_CLK_B, FN_EX_CS0_N, FN_HRX1_B, | ||
233 | FN_VI1_G5, FN_VI1_G5_B, FN_VI2_R0, FN_HTX0_B, | ||
234 | FN_MSIOF0_SS1_B, FN_EX_CS1_N, FN_GPS_CLK, | ||
235 | FN_HCTS1_N_B, FN_VI1_FIELD, FN_VI1_FIELD_B, | ||
236 | FN_VI2_R1, FN_EX_CS2_N, FN_GPS_SIGN, FN_HRTS1_N_B, | ||
237 | FN_VI3_CLKENB, FN_VI1_G0, FN_VI1_G0_B, FN_VI2_R2, | ||
238 | |||
239 | /* IPSR5 */ | ||
240 | FN_EX_CS3_N, FN_GPS_MAG, FN_VI3_FIELD, FN_VI1_G1, FN_VI1_G1_B, | ||
241 | FN_VI2_R3, FN_EX_CS4_N, FN_MSIOF1_SCK_B, FN_VI3_HSYNC_N, | ||
242 | FN_VI2_HSYNC_N, FN_SCL1, FN_VI2_HSYNC_N_B, | ||
243 | FN_INTC_EN0_N, FN_SCL1_CIS, FN_EX_CS5_N, FN_CAN0_RX, | ||
244 | FN_MSIOF1_RXD_B, FN_VI3_VSYNC_N, FN_VI1_G2, | ||
245 | FN_VI1_G2_B, FN_VI2_R4, FN_SDA1, FN_INTC_EN1_N, | ||
246 | FN_SDA1_CIS, FN_BS_N, FN_IETX, FN_HTX1_B, | ||
247 | FN_CAN1_TX, FN_DRACK0, FN_IETX_C, FN_RD_N, | ||
248 | FN_CAN0_TX, FN_SCIFA0_SCK_B, FN_RD_WR_N, FN_VI1_G3, | ||
249 | FN_VI1_G3_B, FN_VI2_R5, FN_SCIFA0_RXD_B, | ||
250 | FN_INTC_IRQ4_N, FN_WE0_N, FN_IECLK, FN_CAN_CLK, | ||
251 | FN_VI2_VSYNC_N, FN_SCIFA0_TXD_B, FN_VI2_VSYNC_N_B, | ||
252 | FN_WE1_N, FN_IERX, FN_CAN1_RX, FN_VI1_G4, | ||
253 | FN_VI1_G4_B, FN_VI2_R6, FN_SCIFA0_CTS_N_B, | ||
254 | FN_IERX_C, FN_EX_WAIT0, FN_IRQ3, FN_INTC_IRQ3_N, | ||
255 | FN_VI3_CLK, FN_SCIFA0_RTS_N_B, FN_HRX0_B, | ||
256 | FN_MSIOF0_SCK_B, FN_DREQ0_N, FN_VI1_HSYNC_N, | ||
257 | FN_VI1_HSYNC_N_B, FN_VI2_R7, FN_SSI_SCK78_C, | ||
258 | FN_SSI_WS78_B, | ||
259 | |||
260 | /* IPSR6 */ | ||
261 | FN_DACK0, FN_IRQ0, FN_INTC_IRQ0_N, FN_SSI_SCK6_B, | ||
262 | FN_VI1_VSYNC_N, FN_VI1_VSYNC_N_B, FN_SSI_WS78_C, | ||
263 | FN_DREQ1_N, FN_VI1_CLKENB, FN_VI1_CLKENB_B, | ||
264 | FN_SSI_SDATA7_C, FN_SSI_SCK78_B, FN_DACK1, FN_IRQ1, | ||
265 | FN_INTC_IRQ1_N, FN_SSI_WS6_B, FN_SSI_SDATA8_C, | ||
266 | FN_DREQ2_N, FN_HSCK1_B, FN_HCTS0_N_B, | ||
267 | FN_MSIOF0_TXD_B, FN_DACK2, FN_IRQ2, FN_INTC_IRQ2_N, | ||
268 | FN_SSI_SDATA6_B, FN_HRTS0_N_B, FN_MSIOF0_RXD_B, | ||
269 | FN_ETH_CRS_DV, FN_RMII_CRS_DV, FN_STP_ISCLK_0_B, | ||
270 | FN_TS_SDEN0_D, FN_GLO_Q0_C, FN_SCL2_E, | ||
271 | FN_SCL2_CIS_E, FN_ETH_RX_ER, FN_RMII_RX_ER, | ||
272 | FN_STP_ISD_0_B, FN_TS_SPSYNC0_D, FN_GLO_Q1_C, | ||
273 | FN_SDA2_E, FN_SDA2_CIS_E, FN_ETH_RXD0, FN_RMII_RXD0, | ||
274 | FN_STP_ISEN_0_B, FN_TS_SDAT0_D, FN_GLO_I0_C, | ||
275 | FN_SCIFB1_SCK_G, FN_SCK1_E, FN_ETH_RXD1, | ||
276 | FN_RMII_RXD1, FN_HRX0_E, FN_STP_ISSYNC_0_B, | ||
277 | FN_TS_SCK0_D, FN_GLO_I1_C, FN_SCIFB1_RXD_G, | ||
278 | FN_RX1_E, FN_ETH_LINK, FN_RMII_LINK, FN_HTX0_E, | ||
279 | FN_STP_IVCXO27_0_B, FN_SCIFB1_TXD_G, FN_TX1_E, | ||
280 | FN_ETH_REF_CLK, FN_RMII_REF_CLK, FN_HCTS0_N_E, | ||
281 | FN_STP_IVCXO27_1_B, FN_HRX0_F, | ||
282 | |||
283 | /* IPSR7 */ | ||
284 | FN_ETH_MDIO, FN_RMII_MDIO, FN_HRTS0_N_E, | ||
285 | FN_SIM0_D_C, FN_HCTS0_N_F, FN_ETH_TXD1, | ||
286 | FN_RMII_TXD1, FN_HTX0_F, FN_BPFCLK_G, FN_RDS_CLK_F, | ||
287 | FN_ETH_TX_EN, FN_RMII_TX_EN, FN_SIM0_CLK_C, | ||
288 | FN_HRTS0_N_F, FN_ETH_MAGIC, FN_RMII_MAGIC, | ||
289 | FN_SIM0_RST_C, FN_ETH_TXD0, FN_RMII_TXD0, | ||
290 | FN_STP_ISCLK_1_B, FN_TS_SDEN1_C, FN_GLO_SCLK_C, | ||
291 | FN_ETH_MDC, FN_RMII_MDC, FN_STP_ISD_1_B, | ||
292 | FN_TS_SPSYNC1_C, FN_GLO_SDATA_C, FN_PWM0, | ||
293 | FN_SCIFA2_SCK_C, FN_STP_ISEN_1_B, FN_TS_SDAT1_C, | ||
294 | FN_GLO_SS_C, FN_PWM1, FN_SCIFA2_TXD_C, | ||
295 | FN_STP_ISSYNC_1_B, FN_TS_SCK1_C, FN_GLO_RFON_C, | ||
296 | FN_PCMOE_N, FN_PWM2, FN_PWMFSW0, FN_SCIFA2_RXD_C, | ||
297 | FN_PCMWE_N, FN_IECLK_C, FN_DU1_DOTCLKIN, | ||
298 | FN_AUDIO_CLKC, FN_AUDIO_CLKOUT_C, FN_VI0_CLK, | ||
299 | FN_ATACS00_N, FN_AVB_RXD1, FN_MII_RXD1, | ||
300 | FN_VI0_DATA0_VI0_B0, FN_ATACS10_N, FN_AVB_RXD2, | ||
301 | FN_MII_RXD2, | ||
302 | |||
303 | /* IPSR8 */ | ||
304 | FN_VI0_DATA1_VI0_B1, FN_ATARD0_N, FN_AVB_RXD3, | ||
305 | FN_MII_RXD3, FN_VI0_DATA2_VI0_B2, FN_ATAWR0_N, | ||
306 | FN_AVB_RXD4, FN_VI0_DATA3_VI0_B3, FN_ATADIR0_N, | ||
307 | FN_AVB_RXD5, FN_VI0_DATA4_VI0_B4, FN_ATAG0_N, | ||
308 | FN_AVB_RXD6, FN_VI0_DATA5_VI0_B5, FN_EX_WAIT1, | ||
309 | FN_AVB_RXD7, FN_VI0_DATA6_VI0_B6, FN_AVB_RX_ER, | ||
310 | FN_MII_RX_ER, FN_VI0_DATA7_VI0_B7, FN_AVB_RX_CLK, | ||
311 | FN_MII_RX_CLK, FN_VI1_CLK, FN_AVB_RX_DV, | ||
312 | FN_MII_RX_DV, FN_VI1_DATA0_VI1_B0, FN_SCIFA1_SCK_D, | ||
313 | FN_AVB_CRS, FN_MII_CRS, FN_VI1_DATA1_VI1_B1, | ||
314 | FN_SCIFA1_RXD_D, FN_AVB_MDC, FN_MII_MDC, | ||
315 | FN_VI1_DATA2_VI1_B2, FN_SCIFA1_TXD_D, FN_AVB_MDIO, | ||
316 | FN_MII_MDIO, FN_VI1_DATA3_VI1_B3, FN_SCIFA1_CTS_N_D, | ||
317 | FN_AVB_GTX_CLK, FN_VI1_DATA4_VI1_B4, FN_SCIFA1_RTS_N_D, | ||
318 | FN_AVB_MAGIC, FN_MII_MAGIC, FN_VI1_DATA5_VI1_B5, | ||
319 | FN_AVB_PHY_INT, FN_VI1_DATA6_VI1_B6, FN_AVB_GTXREFCLK, | ||
320 | FN_SD0_CLK, FN_VI1_DATA0_VI1_B0_B, FN_SD0_CMD, | ||
321 | FN_SCIFB1_SCK_B, FN_VI1_DATA1_VI1_B1_B, | ||
322 | |||
323 | /* IPSR9 */ | ||
324 | FN_SD0_DAT0, FN_SCIFB1_RXD_B, FN_VI1_DATA2_VI1_B2_B, | ||
325 | FN_SD0_DAT1, FN_SCIFB1_TXD_B, FN_VI1_DATA3_VI1_B3_B, | ||
326 | FN_SD0_DAT2, FN_SCIFB1_CTS_N_B, FN_VI1_DATA4_VI1_B4_B, | ||
327 | FN_SD0_DAT3, FN_SCIFB1_RTS_N_B, FN_VI1_DATA5_VI1_B5_B, | ||
328 | FN_SD0_CD, FN_MMC0_D6, FN_TS_SDEN0_B, FN_USB0_EXTP, | ||
329 | FN_GLO_SCLK, FN_VI1_DATA6_VI1_B6_B, FN_SCL1_B, | ||
330 | FN_SCL1_CIS_B, FN_VI2_DATA6_VI2_B6_B, FN_SD0_WP, | ||
331 | FN_MMC0_D7, FN_TS_SPSYNC0_B, FN_USB0_IDIN, | ||
332 | FN_GLO_SDATA, FN_VI1_DATA7_VI1_B7_B, FN_SDA1_B, | ||
333 | FN_SDA1_CIS_B, FN_VI2_DATA7_VI2_B7_B, FN_SD1_CLK, | ||
334 | FN_AVB_TX_EN, FN_MII_TX_EN, FN_SD1_CMD, | ||
335 | FN_AVB_TX_ER, FN_MII_TX_ER, FN_SCIFB0_SCK_B, | ||
336 | FN_SD1_DAT0, FN_AVB_TX_CLK, FN_MII_TX_CLK, | ||
337 | FN_SCIFB0_RXD_B, FN_SD1_DAT1, FN_AVB_LINK, | ||
338 | FN_MII_LINK, FN_SCIFB0_TXD_B, FN_SD1_DAT2, | ||
339 | FN_AVB_COL, FN_MII_COL, FN_SCIFB0_CTS_N_B, | ||
340 | FN_SD1_DAT3, FN_AVB_RXD0, FN_MII_RXD0, | ||
341 | FN_SCIFB0_RTS_N_B, FN_SD1_CD, FN_MMC1_D6, | ||
342 | FN_TS_SDEN1, FN_USB1_EXTP, FN_GLO_SS, FN_VI0_CLK_B, | ||
343 | FN_SCL2_D, FN_SCL2_CIS_D, FN_SIM0_CLK_B, | ||
344 | FN_VI3_CLK_B, | ||
345 | |||
346 | /* IPSR10 */ | ||
347 | FN_SD1_WP, FN_MMC1_D7, FN_TS_SPSYNC1, FN_USB1_IDIN, | ||
348 | FN_GLO_RFON, FN_VI1_CLK_B, FN_SDA2_D, FN_SDA2_CIS_D, | ||
349 | FN_SIM0_D_B, FN_SD2_CLK, FN_MMC0_CLK, FN_SIM0_CLK, | ||
350 | FN_VI0_DATA0_VI0_B0_B, FN_TS_SDEN0_C, FN_GLO_SCLK_B, | ||
351 | FN_VI3_DATA0_B, FN_SD2_CMD, FN_MMC0_CMD, FN_SIM0_D, | ||
352 | FN_VI0_DATA1_VI0_B1_B, FN_SCIFB1_SCK_E, FN_SCK1_D, | ||
353 | FN_TS_SPSYNC0_C, FN_GLO_SDATA_B, FN_VI3_DATA1_B, | ||
354 | FN_SD2_DAT0, FN_MMC0_D0, FN_FMCLK_B, | ||
355 | FN_VI0_DATA2_VI0_B2_B, FN_SCIFB1_RXD_E, FN_RX1_D, | ||
356 | FN_TS_SDAT0_C, FN_GLO_SS_B, FN_VI3_DATA2_B, | ||
357 | FN_SD2_DAT1, FN_MMC0_D1, FN_FMIN_B, FN_RDS_DATA, | ||
358 | FN_VI0_DATA3_VI0_B3_B, FN_SCIFB1_TXD_E, FN_TX1_D, | ||
359 | FN_TS_SCK0_C, FN_GLO_RFON_B, FN_VI3_DATA3_B, | ||
360 | FN_SD2_DAT2, FN_MMC0_D2, FN_BPFCLK_B, FN_RDS_CLK, | ||
361 | FN_VI0_DATA4_VI0_B4_B, FN_HRX0_D, FN_TS_SDEN1_B, | ||
362 | FN_GLO_Q0_B, FN_VI3_DATA4_B, FN_SD2_DAT3, | ||
363 | FN_MMC0_D3, FN_SIM0_RST, FN_VI0_DATA5_VI0_B5_B, | ||
364 | FN_HTX0_D, FN_TS_SPSYNC1_B, FN_GLO_Q1_B, | ||
365 | FN_VI3_DATA5_B, FN_SD2_CD, FN_MMC0_D4, | ||
366 | FN_TS_SDAT0_B, FN_USB2_EXTP, FN_GLO_I0, | ||
367 | FN_VI0_DATA6_VI0_B6_B, FN_HCTS0_N_D, FN_TS_SDAT1_B, | ||
368 | FN_GLO_I0_B, FN_VI3_DATA6_B, | ||
369 | |||
370 | /* IPSR11 */ | ||
371 | FN_SD2_WP, FN_MMC0_D5, FN_TS_SCK0_B, FN_USB2_IDIN, | ||
372 | FN_GLO_I1, FN_VI0_DATA7_VI0_B7_B, FN_HRTS0_N_D, | ||
373 | FN_TS_SCK1_B, FN_GLO_I1_B, FN_VI3_DATA7_B, | ||
374 | FN_SD3_CLK, FN_MMC1_CLK, FN_SD3_CMD, FN_MMC1_CMD, | ||
375 | FN_MTS_N, FN_SD3_DAT0, FN_MMC1_D0, FN_STM_N, | ||
376 | FN_SD3_DAT1, FN_MMC1_D1, FN_MDATA, FN_SD3_DAT2, | ||
377 | FN_MMC1_D2, FN_SDATA, FN_SD3_DAT3, FN_MMC1_D3, | ||
378 | FN_SCKZ, FN_SD3_CD, FN_MMC1_D4, FN_TS_SDAT1, | ||
379 | FN_VSP, FN_GLO_Q0, FN_SIM0_RST_B, FN_SD3_WP, | ||
380 | FN_MMC1_D5, FN_TS_SCK1, FN_GLO_Q1, FN_FMIN_C, | ||
381 | FN_RDS_DATA_B, FN_FMIN_E, FN_RDS_DATA_D, FN_FMIN_F, | ||
382 | FN_RDS_DATA_E, FN_MLB_CLK, FN_SCL2_B, FN_SCL2_CIS_B, | ||
383 | FN_MLB_SIG, FN_SCIFB1_RXD_D, FN_RX1_C, FN_SDA2_B, | ||
384 | FN_SDA2_CIS_B, FN_MLB_DAT, FN_SPV_EVEN, | ||
385 | FN_SCIFB1_TXD_D, FN_TX1_C, FN_BPFCLK_C, | ||
386 | FN_RDS_CLK_B, FN_SSI_SCK0129, FN_CAN_CLK_B, | ||
387 | FN_MOUT0, | ||
388 | |||
389 | /* IPSR12 */ | ||
390 | FN_SSI_WS0129, FN_CAN0_TX_B, FN_MOUT1, | ||
391 | FN_SSI_SDATA0, FN_CAN0_RX_B, FN_MOUT2, | ||
392 | FN_SSI_SDATA1, FN_CAN1_TX_B, FN_MOUT5, | ||
393 | FN_SSI_SDATA2, FN_CAN1_RX_B, FN_SSI_SCK1, FN_MOUT6, | ||
394 | FN_SSI_SCK34, FN_STP_OPWM_0, FN_SCIFB0_SCK, | ||
395 | FN_MSIOF1_SCK, FN_CAN_DEBUG_HW_TRIGGER, FN_SSI_WS34, | ||
396 | FN_STP_IVCXO27_0, FN_SCIFB0_RXD, FN_MSIOF1_SYNC, | ||
397 | FN_CAN_STEP0, FN_SSI_SDATA3, FN_STP_ISCLK_0, | ||
398 | FN_SCIFB0_TXD, FN_MSIOF1_SS1, FN_CAN_TXCLK, | ||
399 | FN_SSI_SCK4, FN_STP_ISD_0, FN_SCIFB0_CTS_N, | ||
400 | FN_MSIOF1_SS2, FN_SSI_SCK5_C, FN_CAN_DEBUGOUT0, | ||
401 | FN_SSI_WS4, FN_STP_ISEN_0, FN_SCIFB0_RTS_N, | ||
402 | FN_MSIOF1_TXD, FN_SSI_WS5_C, FN_CAN_DEBUGOUT1, | ||
403 | FN_SSI_SDATA4, FN_STP_ISSYNC_0, FN_MSIOF1_RXD, | ||
404 | FN_CAN_DEBUGOUT2, FN_SSI_SCK5, FN_SCIFB1_SCK, | ||
405 | FN_IERX_B, FN_DU2_EXHSYNC_DU2_HSYNC, FN_QSTH_QHS, | ||
406 | FN_CAN_DEBUGOUT3, FN_SSI_WS5, FN_SCIFB1_RXD, | ||
407 | FN_IECLK_B, FN_DU2_EXVSYNC_DU2_VSYNC, FN_QSTB_QHE, | ||
408 | FN_CAN_DEBUGOUT4, | ||
409 | |||
410 | /* IPSR13 */ | ||
411 | FN_SSI_SDATA5, FN_SCIFB1_TXD, FN_IETX_B, FN_DU2_DR2, | ||
412 | FN_LCDOUT2, FN_CAN_DEBUGOUT5, FN_SSI_SCK6, | ||
413 | FN_SCIFB1_CTS_N, FN_BPFCLK_D, FN_RDS_CLK_C, | ||
414 | FN_DU2_DR3, FN_LCDOUT3, FN_CAN_DEBUGOUT6, | ||
415 | FN_BPFCLK_F, FN_RDS_CLK_E, FN_SSI_WS6, | ||
416 | FN_SCIFB1_RTS_N, FN_CAN0_TX_D, FN_DU2_DR4, | ||
417 | FN_LCDOUT4, FN_CAN_DEBUGOUT7, FN_SSI_SDATA6, | ||
418 | FN_FMIN_D, FN_RDS_DATA_C, FN_DU2_DR5, FN_LCDOUT5, | ||
419 | FN_CAN_DEBUGOUT8, FN_SSI_SCK78, FN_STP_IVCXO27_1, | ||
420 | FN_SCK1, FN_SCIFA1_SCK, FN_DU2_DR6, FN_LCDOUT6, | ||
421 | FN_CAN_DEBUGOUT9, FN_SSI_WS78, FN_STP_ISCLK_1, | ||
422 | FN_SCIFB2_SCK, FN_SCIFA2_CTS_N, FN_DU2_DR7, | ||
423 | FN_LCDOUT7, FN_CAN_DEBUGOUT10, FN_SSI_SDATA7, | ||
424 | FN_STP_ISD_1, FN_SCIFB2_RXD, FN_SCIFA2_RTS_N, | ||
425 | FN_TCLK2, FN_QSTVA_QVS, FN_CAN_DEBUGOUT11, | ||
426 | FN_BPFCLK_E, FN_RDS_CLK_D, FN_SSI_SDATA7_B, | ||
427 | FN_FMIN_G, FN_RDS_DATA_F, FN_SSI_SDATA8, | ||
428 | FN_STP_ISEN_1, FN_SCIFB2_TXD, FN_CAN0_TX_C, | ||
429 | FN_CAN_DEBUGOUT12, FN_SSI_SDATA8_B, FN_SSI_SDATA9, | ||
430 | FN_STP_ISSYNC_1, FN_SCIFB2_CTS_N, FN_SSI_WS1, | ||
431 | FN_SSI_SDATA5_C, FN_CAN_DEBUGOUT13, FN_AUDIO_CLKA, | ||
432 | FN_SCIFB2_RTS_N, FN_CAN_DEBUGOUT14, | ||
433 | |||
434 | /* IPSR14 */ | ||
435 | FN_AUDIO_CLKB, FN_SCIF_CLK, FN_CAN0_RX_D, | ||
436 | FN_DVC_MUTE, FN_CAN0_RX_C, FN_CAN_DEBUGOUT15, | ||
437 | FN_REMOCON, FN_SCIFA0_SCK, FN_HSCK1, FN_SCK0, | ||
438 | FN_MSIOF3_SS2, FN_DU2_DG2, FN_LCDOUT10, FN_SDA1_C, | ||
439 | FN_SDA1_CIS_C, FN_SCIFA0_RXD, FN_HRX1, FN_RX0, | ||
440 | FN_DU2_DR0, FN_LCDOUT0, FN_SCIFA0_TXD, FN_HTX1, | ||
441 | FN_TX0, FN_DU2_DR1, FN_LCDOUT1, FN_SCIFA0_CTS_N, | ||
442 | FN_HCTS1_N, FN_CTS0_N, FN_MSIOF3_SYNC, FN_DU2_DG3, | ||
443 | FN_LCDOUT11, FN_PWM0_B, FN_SCL1_C, FN_SCL1_CIS_C, | ||
444 | FN_SCIFA0_RTS_N, FN_HRTS1_N, FN_RTS0_N_TANS, | ||
445 | FN_MSIOF3_SS1, FN_DU2_DG0, FN_LCDOUT8, FN_PWM1_B, | ||
446 | FN_SCIFA1_RXD, FN_AD_DI, FN_RX1, | ||
447 | FN_DU2_EXODDF_DU2_ODDF_DISP_CDE, FN_QCPV_QDE, | ||
448 | FN_SCIFA1_TXD, FN_AD_DO, FN_TX1, FN_DU2_DG1, | ||
449 | FN_LCDOUT9, FN_SCIFA1_CTS_N, FN_AD_CLK, | ||
450 | FN_CTS1_N, FN_MSIOF3_RXD, FN_DU0_DOTCLKOUT, FN_QCLK, | ||
451 | FN_SCIFA1_RTS_N, FN_AD_NCS_N, FN_RTS1_N_TANS, | ||
452 | FN_MSIOF3_TXD, FN_DU1_DOTCLKOUT, FN_QSTVB_QVE, | ||
453 | FN_HRTS0_N_C, | ||
454 | |||
455 | /* IPSR15 */ | ||
456 | FN_SCIFA2_SCK, FN_FMCLK, FN_MSIOF3_SCK, FN_DU2_DG7, | ||
457 | FN_LCDOUT15, FN_SCIF_CLK_B, FN_SCIFA2_RXD, FN_FMIN, | ||
458 | FN_DU2_DB0, FN_LCDOUT16, FN_SCL2, FN_SCL2_CIS, | ||
459 | FN_SCIFA2_TXD, FN_BPFCLK, FN_DU2_DB1, FN_LCDOUT17, | ||
460 | FN_SDA2, FN_SDA2_CIS, FN_HSCK0, FN_TS_SDEN0, | ||
461 | FN_DU2_DG4, FN_LCDOUT12, FN_HCTS0_N_C, FN_HRX0, | ||
462 | FN_DU2_DB2, FN_LCDOUT18, FN_HTX0, FN_DU2_DB3, | ||
463 | FN_LCDOUT19, FN_HCTS0_N, FN_SSI_SCK9, FN_DU2_DB4, | ||
464 | FN_LCDOUT20, FN_HRTS0_N, FN_SSI_WS9, FN_DU2_DB5, | ||
465 | FN_LCDOUT21, FN_MSIOF0_SCK, FN_TS_SDAT0, FN_ADICLK, | ||
466 | FN_DU2_DB6, FN_LCDOUT22, FN_MSIOF0_SYNC, FN_TS_SCK0, | ||
467 | FN_SSI_SCK2, FN_ADIDATA, FN_DU2_DB7, FN_LCDOUT23, | ||
468 | FN_SCIFA2_RXD_B, FN_MSIOF0_SS1, FN_ADICHS0, | ||
469 | FN_DU2_DG5, FN_LCDOUT13, FN_MSIOF0_TXD, FN_ADICHS1, | ||
470 | FN_DU2_DG6, FN_LCDOUT14, | ||
471 | |||
472 | /* IPSR16 */ | ||
473 | FN_MSIOF0_SS2, FN_AUDIO_CLKOUT, FN_ADICHS2, | ||
474 | FN_DU2_DISP, FN_QPOLA, FN_HTX0_C, FN_SCIFA2_TXD_B, | ||
475 | FN_MSIOF0_RXD, FN_TS_SPSYNC0, FN_SSI_WS2, | ||
476 | FN_ADICS_SAMP, FN_DU2_CDE, FN_QPOLB, FN_HRX0_C, | ||
477 | FN_USB1_PWEN, FN_AUDIO_CLKOUT_D, FN_USB1_OVC, | ||
478 | FN_TCLK1_B, | ||
479 | |||
480 | FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, FN_SEL_SCIF1_3, | ||
481 | FN_SEL_SCIF1_4, | ||
482 | FN_SEL_SCIFB_0, FN_SEL_SCIFB_1, FN_SEL_SCIFB_2, | ||
483 | FN_SEL_SCIFB2_0, FN_SEL_SCIFB2_1, FN_SEL_SCIFB2_2, | ||
484 | FN_SEL_SCIFB1_0, FN_SEL_SCIFB1_1, FN_SEL_SCIFB1_2, FN_SEL_SCIFB1_3, | ||
485 | FN_SEL_SCIFB1_4, | ||
486 | FN_SEL_SCIFB1_5, FN_SEL_SCIFB1_6, | ||
487 | FN_SEL_SCIFA1_0, FN_SEL_SCIFA1_1, FN_SEL_SCIFA1_2, FN_SEL_SCIFA1_3, | ||
488 | FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, | ||
489 | FN_SEL_SCFA_0, FN_SEL_SCFA_1, | ||
490 | FN_SEL_SOF1_0, FN_SEL_SOF1_1, | ||
491 | FN_SEL_SSI7_0, FN_SEL_SSI7_1, FN_SEL_SSI7_2, | ||
492 | FN_SEL_SSI6_0, FN_SEL_SSI6_1, | ||
493 | FN_SEL_SSI5_0, FN_SEL_SSI5_1, FN_SEL_SSI5_2, | ||
494 | FN_SEL_VI3_0, FN_SEL_VI3_1, | ||
495 | FN_SEL_VI2_0, FN_SEL_VI2_1, | ||
496 | FN_SEL_VI1_0, FN_SEL_VI1_1, | ||
497 | FN_SEL_VI0_0, FN_SEL_VI0_1, | ||
498 | FN_SEL_TSIF1_0, FN_SEL_TSIF1_1, FN_SEL_TSIF1_2, | ||
499 | FN_SEL_LBS_0, FN_SEL_LBS_1, | ||
500 | FN_SEL_TSIF0_0, FN_SEL_TSIF0_1, FN_SEL_TSIF0_2, FN_SEL_TSIF0_3, | ||
501 | FN_SEL_SOF3_0, FN_SEL_SOF3_1, | ||
502 | FN_SEL_SOF0_0, FN_SEL_SOF0_1, | ||
503 | |||
504 | FN_SEL_TMU1_0, FN_SEL_TMU1_1, | ||
505 | FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1, | ||
506 | FN_SEL_SCIFCLK_0, FN_SEL_SCIFCLK_1, | ||
507 | FN_SEL_CAN0_0, FN_SEL_CAN0_1, FN_SEL_CAN0_2, FN_SEL_CAN0_3, | ||
508 | FN_SEL_CANCLK_0, FN_SEL_CANCLK_1, | ||
509 | FN_SEL_SCIFA2_0, FN_SEL_SCIFA2_1, FN_SEL_SCIFA2_2, | ||
510 | FN_SEL_CAN1_0, FN_SEL_CAN1_1, | ||
511 | FN_SEL_ADI_0, FN_SEL_ADI_1, | ||
512 | FN_SEL_SSP_0, FN_SEL_SSP_1, | ||
513 | FN_SEL_FM_0, FN_SEL_FM_1, FN_SEL_FM_2, FN_SEL_FM_3, | ||
514 | FN_SEL_FM_4, FN_SEL_FM_5, FN_SEL_FM_6, | ||
515 | FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1, FN_SEL_HSCIF0_2, FN_SEL_HSCIF0_3, | ||
516 | FN_SEL_HSCIF0_4, FN_SEL_HSCIF0_5, | ||
517 | FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, | ||
518 | FN_SEL_RDS_0, FN_SEL_RDS_1, FN_SEL_RDS_2, | ||
519 | FN_SEL_RDS_3, FN_SEL_RDS_4, FN_SEL_RDS_5, | ||
520 | FN_SEL_SIM_0, FN_SEL_SIM_1, FN_SEL_SIM_2, | ||
521 | FN_SEL_SSI8_0, FN_SEL_SSI8_1, FN_SEL_SSI8_2, | ||
522 | |||
523 | FN_SEL_IICDVFS_0, FN_SEL_IICDVFS_1, | ||
524 | FN_SEL_IIC0_0, FN_SEL_IIC0_1, | ||
525 | FN_SEL_IEB_0, FN_SEL_IEB_1, FN_SEL_IEB_2, | ||
526 | FN_SEL_IIC2_0, FN_SEL_IIC2_1, FN_SEL_IIC2_2, FN_SEL_IIC2_3, | ||
527 | FN_SEL_IIC2_4, | ||
528 | FN_SEL_IIC1_0, FN_SEL_IIC1_1, FN_SEL_IIC1_2, | ||
529 | FN_SEL_I2C2_0, FN_SEL_I2C2_1, FN_SEL_I2C2_2, FN_SEL_I2C2_3, | ||
530 | FN_SEL_I2C2_4, | ||
531 | FN_SEL_I2C1_0, FN_SEL_I2C1_1, FN_SEL_I2C1_2, | ||
532 | PINMUX_FUNCTION_END, | ||
533 | |||
534 | PINMUX_MARK_BEGIN, | ||
535 | |||
536 | VI1_DATA7_VI1_B7_MARK, | ||
537 | |||
538 | USB0_PWEN_MARK, USB0_OVC_VBUS_MARK, | ||
539 | USB2_PWEN_MARK, USB2_OVC_MARK, AVS1_MARK, AVS2_MARK, | ||
540 | DU_DOTCLKIN0_MARK, DU_DOTCLKIN2_MARK, | ||
541 | |||
542 | D0_MARK, MSIOF3_SCK_B_MARK, VI3_DATA0_MARK, VI0_G4_MARK, VI0_G4_B_MARK, | ||
543 | D1_MARK, MSIOF3_SYNC_B_MARK, VI3_DATA1_MARK, VI0_G5_MARK, | ||
544 | VI0_G5_B_MARK, D2_MARK, MSIOF3_RXD_B_MARK, VI3_DATA2_MARK, | ||
545 | VI0_G6_MARK, VI0_G6_B_MARK, D3_MARK, MSIOF3_TXD_B_MARK, | ||
546 | VI3_DATA3_MARK, VI0_G7_MARK, VI0_G7_B_MARK, D4_MARK, | ||
547 | SCIFB1_RXD_F_MARK, SCIFB0_RXD_C_MARK, VI3_DATA4_MARK, | ||
548 | VI0_R0_MARK, VI0_R0_B_MARK, RX0_B_MARK, D5_MARK, | ||
549 | SCIFB1_TXD_F_MARK, SCIFB0_TXD_C_MARK, VI3_DATA5_MARK, | ||
550 | VI0_R1_MARK, VI0_R1_B_MARK, TX0_B_MARK, D6_MARK, | ||
551 | SCL2_C_MARK, VI3_DATA6_MARK, VI0_R2_MARK, VI0_R2_B_MARK, | ||
552 | SCL2_CIS_C_MARK, D7_MARK, AD_DI_B_MARK, SDA2_C_MARK, | ||
553 | VI3_DATA7_MARK, VI0_R3_MARK, VI0_R3_B_MARK, SDA2_CIS_C_MARK, | ||
554 | D8_MARK, SCIFA1_SCK_C_MARK, AVB_TXD0_MARK, MII_TXD0_MARK, | ||
555 | VI0_G0_MARK, VI0_G0_B_MARK, VI2_DATA0_VI2_B0_MARK, | ||
556 | |||
557 | D9_MARK, SCIFA1_RXD_C_MARK, AVB_TXD1_MARK, MII_TXD1_MARK, | ||
558 | VI0_G1_MARK, VI0_G1_B_MARK, VI2_DATA1_VI2_B1_MARK, D10_MARK, | ||
559 | SCIFA1_TXD_C_MARK, AVB_TXD2_MARK, MII_TXD2_MARK, | ||
560 | VI0_G2_MARK, VI0_G2_B_MARK, VI2_DATA2_VI2_B2_MARK, D11_MARK, | ||
561 | SCIFA1_CTS_N_C_MARK, AVB_TXD3_MARK, MII_TXD3_MARK, | ||
562 | VI0_G3_MARK, VI0_G3_B_MARK, VI2_DATA3_VI2_B3_MARK, | ||
563 | D12_MARK, SCIFA1_RTS_N_C_MARK, AVB_TXD4_MARK, | ||
564 | VI0_HSYNC_N_MARK, VI0_HSYNC_N_B_MARK, VI2_DATA4_VI2_B4_MARK, | ||
565 | D13_MARK, AVB_TXD5_MARK, VI0_VSYNC_N_MARK, | ||
566 | VI0_VSYNC_N_B_MARK, VI2_DATA5_VI2_B5_MARK, D14_MARK, | ||
567 | SCIFB1_RXD_C_MARK, AVB_TXD6_MARK, RX1_B_MARK, | ||
568 | VI0_CLKENB_MARK, VI0_CLKENB_B_MARK, VI2_DATA6_VI2_B6_MARK, | ||
569 | D15_MARK, SCIFB1_TXD_C_MARK, AVB_TXD7_MARK, TX1_B_MARK, | ||
570 | VI0_FIELD_MARK, VI0_FIELD_B_MARK, VI2_DATA7_VI2_B7_MARK, | ||
571 | A0_MARK, PWM3_MARK, A1_MARK, PWM4_MARK, | ||
572 | |||
573 | A2_MARK, PWM5_MARK, MSIOF1_SS1_B_MARK, A3_MARK, | ||
574 | PWM6_MARK, MSIOF1_SS2_B_MARK, A4_MARK, MSIOF1_TXD_B_MARK, | ||
575 | TPU0TO0_MARK, A5_MARK, SCIFA1_TXD_B_MARK, TPU0TO1_MARK, | ||
576 | A6_MARK, SCIFA1_RTS_N_B_MARK, TPU0TO2_MARK, A7_MARK, | ||
577 | SCIFA1_SCK_B_MARK, AUDIO_CLKOUT_B_MARK, TPU0TO3_MARK, | ||
578 | A8_MARK, SCIFA1_RXD_B_MARK, SSI_SCK5_B_MARK, VI0_R4_MARK, | ||
579 | VI0_R4_B_MARK, SCIFB2_RXD_C_MARK, VI2_DATA0_VI2_B0_B_MARK, | ||
580 | A9_MARK, SCIFA1_CTS_N_B_MARK, SSI_WS5_B_MARK, VI0_R5_MARK, | ||
581 | VI0_R5_B_MARK, SCIFB2_TXD_C_MARK, VI2_DATA1_VI2_B1_B_MARK, | ||
582 | A10_MARK, SSI_SDATA5_B_MARK, MSIOF2_SYNC_MARK, VI0_R6_MARK, | ||
583 | VI0_R6_B_MARK, VI2_DATA2_VI2_B2_B_MARK, | ||
584 | |||
585 | A11_MARK, SCIFB2_CTS_N_B_MARK, MSIOF2_SCK_MARK, VI1_R0_MARK, | ||
586 | VI1_R0_B_MARK, VI2_G0_MARK, VI2_DATA3_VI2_B3_B_MARK, | ||
587 | A12_MARK, SCIFB2_RXD_B_MARK, MSIOF2_TXD_MARK, VI1_R1_MARK, | ||
588 | VI1_R1_B_MARK, VI2_G1_MARK, VI2_DATA4_VI2_B4_B_MARK, | ||
589 | A13_MARK, SCIFB2_RTS_N_B_MARK, EX_WAIT2_MARK, | ||
590 | MSIOF2_RXD_MARK, VI1_R2_MARK, VI1_R2_B_MARK, VI2_G2_MARK, | ||
591 | VI2_DATA5_VI2_B5_B_MARK, A14_MARK, SCIFB2_TXD_B_MARK, | ||
592 | ATACS11_N_MARK, MSIOF2_SS1_MARK, A15_MARK, SCIFB2_SCK_B_MARK, | ||
593 | ATARD1_N_MARK, MSIOF2_SS2_MARK, A16_MARK, ATAWR1_N_MARK, | ||
594 | A17_MARK, AD_DO_B_MARK, ATADIR1_N_MARK, A18_MARK, | ||
595 | AD_CLK_B_MARK, ATAG1_N_MARK, A19_MARK, AD_NCS_N_B_MARK, | ||
596 | ATACS01_N_MARK, EX_WAIT0_B_MARK, A20_MARK, SPCLK_MARK, | ||
597 | VI1_R3_MARK, VI1_R3_B_MARK, VI2_G4_MARK, | ||
598 | |||
599 | A21_MARK, MOSI_IO0_MARK, VI1_R4_MARK, VI1_R4_B_MARK, VI2_G5_MARK, | ||
600 | A22_MARK, MISO_IO1_MARK, VI1_R5_MARK, VI1_R5_B_MARK, | ||
601 | VI2_G6_MARK, A23_MARK, IO2_MARK, VI1_G7_MARK, | ||
602 | VI1_G7_B_MARK, VI2_G7_MARK, A24_MARK, IO3_MARK, | ||
603 | VI1_R7_MARK, VI1_R7_B_MARK, VI2_CLKENB_MARK, | ||
604 | VI2_CLKENB_B_MARK, A25_MARK, SSL_MARK, VI1_G6_MARK, | ||
605 | VI1_G6_B_MARK, VI2_FIELD_MARK, VI2_FIELD_B_MARK, CS0_N_MARK, | ||
606 | VI1_R6_MARK, VI1_R6_B_MARK, VI2_G3_MARK, MSIOF0_SS2_B_MARK, | ||
607 | CS1_N_A26_MARK, SPEEDIN_MARK, VI0_R7_MARK, VI0_R7_B_MARK, | ||
608 | VI2_CLK_MARK, VI2_CLK_B_MARK, EX_CS0_N_MARK, HRX1_B_MARK, | ||
609 | VI1_G5_MARK, VI1_G5_B_MARK, VI2_R0_MARK, HTX0_B_MARK, | ||
610 | MSIOF0_SS1_B_MARK, EX_CS1_N_MARK, GPS_CLK_MARK, | ||
611 | HCTS1_N_B_MARK, VI1_FIELD_MARK, VI1_FIELD_B_MARK, | ||
612 | VI2_R1_MARK, EX_CS2_N_MARK, GPS_SIGN_MARK, HRTS1_N_B_MARK, | ||
613 | VI3_CLKENB_MARK, VI1_G0_MARK, VI1_G0_B_MARK, VI2_R2_MARK, | ||
614 | |||
615 | EX_CS3_N_MARK, GPS_MAG_MARK, VI3_FIELD_MARK, | ||
616 | VI1_G1_MARK, VI1_G1_B_MARK, VI2_R3_MARK, | ||
617 | EX_CS4_N_MARK, MSIOF1_SCK_B_MARK, VI3_HSYNC_N_MARK, | ||
618 | VI2_HSYNC_N_MARK, SCL1_MARK, VI2_HSYNC_N_B_MARK, | ||
619 | INTC_EN0_N_MARK, SCL1_CIS_MARK, EX_CS5_N_MARK, CAN0_RX_MARK, | ||
620 | MSIOF1_RXD_B_MARK, VI3_VSYNC_N_MARK, VI1_G2_MARK, | ||
621 | VI1_G2_B_MARK, VI2_R4_MARK, SDA1_MARK, INTC_EN1_N_MARK, | ||
622 | SDA1_CIS_MARK, BS_N_MARK, IETX_MARK, HTX1_B_MARK, | ||
623 | CAN1_TX_MARK, DRACK0_MARK, IETX_C_MARK, RD_N_MARK, | ||
624 | CAN0_TX_MARK, SCIFA0_SCK_B_MARK, RD_WR_N_MARK, VI1_G3_MARK, | ||
625 | VI1_G3_B_MARK, VI2_R5_MARK, SCIFA0_RXD_B_MARK, | ||
626 | INTC_IRQ4_N_MARK, WE0_N_MARK, IECLK_MARK, CAN_CLK_MARK, | ||
627 | VI2_VSYNC_N_MARK, SCIFA0_TXD_B_MARK, VI2_VSYNC_N_B_MARK, | ||
628 | WE1_N_MARK, IERX_MARK, CAN1_RX_MARK, VI1_G4_MARK, | ||
629 | VI1_G4_B_MARK, VI2_R6_MARK, SCIFA0_CTS_N_B_MARK, | ||
630 | IERX_C_MARK, EX_WAIT0_MARK, IRQ3_MARK, INTC_IRQ3_N_MARK, | ||
631 | VI3_CLK_MARK, SCIFA0_RTS_N_B_MARK, HRX0_B_MARK, | ||
632 | MSIOF0_SCK_B_MARK, DREQ0_N_MARK, VI1_HSYNC_N_MARK, | ||
633 | VI1_HSYNC_N_B_MARK, VI2_R7_MARK, SSI_SCK78_C_MARK, | ||
634 | SSI_WS78_B_MARK, | ||
635 | |||
636 | DACK0_MARK, IRQ0_MARK, INTC_IRQ0_N_MARK, SSI_SCK6_B_MARK, | ||
637 | VI1_VSYNC_N_MARK, VI1_VSYNC_N_B_MARK, SSI_WS78_C_MARK, | ||
638 | DREQ1_N_MARK, VI1_CLKENB_MARK, VI1_CLKENB_B_MARK, | ||
639 | SSI_SDATA7_C_MARK, SSI_SCK78_B_MARK, DACK1_MARK, IRQ1_MARK, | ||
640 | INTC_IRQ1_N_MARK, SSI_WS6_B_MARK, SSI_SDATA8_C_MARK, | ||
641 | DREQ2_N_MARK, HSCK1_B_MARK, HCTS0_N_B_MARK, | ||
642 | MSIOF0_TXD_B_MARK, DACK2_MARK, IRQ2_MARK, INTC_IRQ2_N_MARK, | ||
643 | SSI_SDATA6_B_MARK, HRTS0_N_B_MARK, MSIOF0_RXD_B_MARK, | ||
644 | ETH_CRS_DV_MARK, RMII_CRS_DV_MARK, STP_ISCLK_0_B_MARK, | ||
645 | TS_SDEN0_D_MARK, GLO_Q0_C_MARK, SCL2_E_MARK, | ||
646 | SCL2_CIS_E_MARK, ETH_RX_ER_MARK, RMII_RX_ER_MARK, | ||
647 | STP_ISD_0_B_MARK, TS_SPSYNC0_D_MARK, GLO_Q1_C_MARK, | ||
648 | SDA2_E_MARK, SDA2_CIS_E_MARK, ETH_RXD0_MARK, RMII_RXD0_MARK, | ||
649 | STP_ISEN_0_B_MARK, TS_SDAT0_D_MARK, GLO_I0_C_MARK, | ||
650 | SCIFB1_SCK_G_MARK, SCK1_E_MARK, ETH_RXD1_MARK, | ||
651 | RMII_RXD1_MARK, HRX0_E_MARK, STP_ISSYNC_0_B_MARK, | ||
652 | TS_SCK0_D_MARK, GLO_I1_C_MARK, SCIFB1_RXD_G_MARK, | ||
653 | RX1_E_MARK, ETH_LINK_MARK, RMII_LINK_MARK, HTX0_E_MARK, | ||
654 | STP_IVCXO27_0_B_MARK, SCIFB1_TXD_G_MARK, TX1_E_MARK, | ||
655 | ETH_REF_CLK_MARK, RMII_REF_CLK_MARK, HCTS0_N_E_MARK, | ||
656 | STP_IVCXO27_1_B_MARK, HRX0_F_MARK, | ||
657 | |||
658 | ETH_MDIO_MARK, RMII_MDIO_MARK, HRTS0_N_E_MARK, | ||
659 | SIM0_D_C_MARK, HCTS0_N_F_MARK, ETH_TXD1_MARK, | ||
660 | RMII_TXD1_MARK, HTX0_F_MARK, BPFCLK_G_MARK, RDS_CLK_F_MARK, | ||
661 | ETH_TX_EN_MARK, RMII_TX_EN_MARK, SIM0_CLK_C_MARK, | ||
662 | HRTS0_N_F_MARK, ETH_MAGIC_MARK, RMII_MAGIC_MARK, | ||
663 | SIM0_RST_C_MARK, ETH_TXD0_MARK, RMII_TXD0_MARK, | ||
664 | STP_ISCLK_1_B_MARK, TS_SDEN1_C_MARK, GLO_SCLK_C_MARK, | ||
665 | ETH_MDC_MARK, RMII_MDC_MARK, STP_ISD_1_B_MARK, | ||
666 | TS_SPSYNC1_C_MARK, GLO_SDATA_C_MARK, PWM0_MARK, | ||
667 | SCIFA2_SCK_C_MARK, STP_ISEN_1_B_MARK, TS_SDAT1_C_MARK, | ||
668 | GLO_SS_C_MARK, PWM1_MARK, SCIFA2_TXD_C_MARK, | ||
669 | STP_ISSYNC_1_B_MARK, TS_SCK1_C_MARK, GLO_RFON_C_MARK, | ||
670 | PCMOE_N_MARK, PWM2_MARK, PWMFSW0_MARK, SCIFA2_RXD_C_MARK, | ||
671 | PCMWE_N_MARK, IECLK_C_MARK, DU1_DOTCLKIN_MARK, | ||
672 | AUDIO_CLKC_MARK, AUDIO_CLKOUT_C_MARK, VI0_CLK_MARK, | ||
673 | ATACS00_N_MARK, AVB_RXD1_MARK, MII_RXD1_MARK, | ||
674 | VI0_DATA0_VI0_B0_MARK, ATACS10_N_MARK, AVB_RXD2_MARK, | ||
675 | MII_RXD2_MARK, | ||
676 | |||
677 | VI0_DATA1_VI0_B1_MARK, ATARD0_N_MARK, AVB_RXD3_MARK, | ||
678 | MII_RXD3_MARK, VI0_DATA2_VI0_B2_MARK, ATAWR0_N_MARK, | ||
679 | AVB_RXD4_MARK, VI0_DATA3_VI0_B3_MARK, ATADIR0_N_MARK, | ||
680 | AVB_RXD5_MARK, VI0_DATA4_VI0_B4_MARK, ATAG0_N_MARK, | ||
681 | AVB_RXD6_MARK, VI0_DATA5_VI0_B5_MARK, EX_WAIT1_MARK, | ||
682 | AVB_RXD7_MARK, VI0_DATA6_VI0_B6_MARK, AVB_RX_ER_MARK, | ||
683 | MII_RX_ER_MARK, VI0_DATA7_VI0_B7_MARK, AVB_RX_CLK_MARK, | ||
684 | MII_RX_CLK_MARK, VI1_CLK_MARK, AVB_RX_DV_MARK, | ||
685 | MII_RX_DV_MARK, VI1_DATA0_VI1_B0_MARK, SCIFA1_SCK_D_MARK, | ||
686 | AVB_CRS_MARK, MII_CRS_MARK, VI1_DATA1_VI1_B1_MARK, | ||
687 | SCIFA1_RXD_D_MARK, AVB_MDC_MARK, MII_MDC_MARK, | ||
688 | VI1_DATA2_VI1_B2_MARK, SCIFA1_TXD_D_MARK, AVB_MDIO_MARK, | ||
689 | MII_MDIO_MARK, VI1_DATA3_VI1_B3_MARK, SCIFA1_CTS_N_D_MARK, | ||
690 | AVB_GTX_CLK_MARK, VI1_DATA4_VI1_B4_MARK, SCIFA1_RTS_N_D_MARK, | ||
691 | AVB_MAGIC_MARK, MII_MAGIC_MARK, VI1_DATA5_VI1_B5_MARK, | ||
692 | AVB_PHY_INT_MARK, VI1_DATA6_VI1_B6_MARK, AVB_GTXREFCLK_MARK, | ||
693 | SD0_CLK_MARK, VI1_DATA0_VI1_B0_B_MARK, SD0_CMD_MARK, | ||
694 | SCIFB1_SCK_B_MARK, VI1_DATA1_VI1_B1_B_MARK, | ||
695 | |||
696 | SD0_DAT0_MARK, SCIFB1_RXD_B_MARK, VI1_DATA2_VI1_B2_B_MARK, | ||
697 | SD0_DAT1_MARK, SCIFB1_TXD_B_MARK, VI1_DATA3_VI1_B3_B_MARK, | ||
698 | SD0_DAT2_MARK, SCIFB1_CTS_N_B_MARK, VI1_DATA4_VI1_B4_B_MARK, | ||
699 | SD0_DAT3_MARK, SCIFB1_RTS_N_B_MARK, VI1_DATA5_VI1_B5_B_MARK, | ||
700 | SD0_CD_MARK, MMC0_D6_MARK, TS_SDEN0_B_MARK, USB0_EXTP_MARK, | ||
701 | GLO_SCLK_MARK, VI1_DATA6_VI1_B6_B_MARK, SCL1_B_MARK, | ||
702 | SCL1_CIS_B_MARK, VI2_DATA6_VI2_B6_B_MARK, SD0_WP_MARK, | ||
703 | MMC0_D7_MARK, TS_SPSYNC0_B_MARK, USB0_IDIN_MARK, | ||
704 | GLO_SDATA_MARK, VI1_DATA7_VI1_B7_B_MARK, SDA1_B_MARK, | ||
705 | SDA1_CIS_B_MARK, VI2_DATA7_VI2_B7_B_MARK, SD1_CLK_MARK, | ||
706 | AVB_TX_EN_MARK, MII_TX_EN_MARK, SD1_CMD_MARK, | ||
707 | AVB_TX_ER_MARK, MII_TX_ER_MARK, SCIFB0_SCK_B_MARK, | ||
708 | SD1_DAT0_MARK, AVB_TX_CLK_MARK, MII_TX_CLK_MARK, | ||
709 | SCIFB0_RXD_B_MARK, SD1_DAT1_MARK, AVB_LINK_MARK, | ||
710 | MII_LINK_MARK, SCIFB0_TXD_B_MARK, SD1_DAT2_MARK, | ||
711 | AVB_COL_MARK, MII_COL_MARK, SCIFB0_CTS_N_B_MARK, | ||
712 | SD1_DAT3_MARK, AVB_RXD0_MARK, MII_RXD0_MARK, | ||
713 | SCIFB0_RTS_N_B_MARK, SD1_CD_MARK, MMC1_D6_MARK, | ||
714 | TS_SDEN1_MARK, USB1_EXTP_MARK, GLO_SS_MARK, VI0_CLK_B_MARK, | ||
715 | SCL2_D_MARK, SCL2_CIS_D_MARK, SIM0_CLK_B_MARK, | ||
716 | VI3_CLK_B_MARK, | ||
717 | |||
718 | SD1_WP_MARK, MMC1_D7_MARK, TS_SPSYNC1_MARK, USB1_IDIN_MARK, | ||
719 | GLO_RFON_MARK, VI1_CLK_B_MARK, SDA2_D_MARK, SDA2_CIS_D_MARK, | ||
720 | SIM0_D_B_MARK, SD2_CLK_MARK, MMC0_CLK_MARK, SIM0_CLK_MARK, | ||
721 | VI0_DATA0_VI0_B0_B_MARK, TS_SDEN0_C_MARK, GLO_SCLK_B_MARK, | ||
722 | VI3_DATA0_B_MARK, SD2_CMD_MARK, MMC0_CMD_MARK, SIM0_D_MARK, | ||
723 | VI0_DATA1_VI0_B1_B_MARK, SCIFB1_SCK_E_MARK, SCK1_D_MARK, | ||
724 | TS_SPSYNC0_C_MARK, GLO_SDATA_B_MARK, VI3_DATA1_B_MARK, | ||
725 | SD2_DAT0_MARK, MMC0_D0_MARK, FMCLK_B_MARK, | ||
726 | VI0_DATA2_VI0_B2_B_MARK, SCIFB1_RXD_E_MARK, RX1_D_MARK, | ||
727 | TS_SDAT0_C_MARK, GLO_SS_B_MARK, VI3_DATA2_B_MARK, | ||
728 | SD2_DAT1_MARK, MMC0_D1_MARK, FMIN_B_MARK, RDS_DATA_MARK, | ||
729 | VI0_DATA3_VI0_B3_B_MARK, SCIFB1_TXD_E_MARK, TX1_D_MARK, | ||
730 | TS_SCK0_C_MARK, GLO_RFON_B_MARK, VI3_DATA3_B_MARK, | ||
731 | SD2_DAT2_MARK, MMC0_D2_MARK, BPFCLK_B_MARK, RDS_CLK_MARK, | ||
732 | VI0_DATA4_VI0_B4_B_MARK, HRX0_D_MARK, TS_SDEN1_B_MARK, | ||
733 | GLO_Q0_B_MARK, VI3_DATA4_B_MARK, SD2_DAT3_MARK, | ||
734 | MMC0_D3_MARK, SIM0_RST_MARK, VI0_DATA5_VI0_B5_B_MARK, | ||
735 | HTX0_D_MARK, TS_SPSYNC1_B_MARK, GLO_Q1_B_MARK, | ||
736 | VI3_DATA5_B_MARK, SD2_CD_MARK, MMC0_D4_MARK, | ||
737 | TS_SDAT0_B_MARK, USB2_EXTP_MARK, GLO_I0_MARK, | ||
738 | VI0_DATA6_VI0_B6_B_MARK, HCTS0_N_D_MARK, TS_SDAT1_B_MARK, | ||
739 | GLO_I0_B_MARK, VI3_DATA6_B_MARK, | ||
740 | |||
741 | SD2_WP_MARK, MMC0_D5_MARK, TS_SCK0_B_MARK, USB2_IDIN_MARK, | ||
742 | GLO_I1_MARK, VI0_DATA7_VI0_B7_B_MARK, HRTS0_N_D_MARK, | ||
743 | TS_SCK1_B_MARK, GLO_I1_B_MARK, VI3_DATA7_B_MARK, | ||
744 | SD3_CLK_MARK, MMC1_CLK_MARK, SD3_CMD_MARK, MMC1_CMD_MARK, | ||
745 | MTS_N_MARK, SD3_DAT0_MARK, MMC1_D0_MARK, STM_N_MARK, | ||
746 | SD3_DAT1_MARK, MMC1_D1_MARK, MDATA_MARK, SD3_DAT2_MARK, | ||
747 | MMC1_D2_MARK, SDATA_MARK, SD3_DAT3_MARK, MMC1_D3_MARK, | ||
748 | SCKZ_MARK, SD3_CD_MARK, MMC1_D4_MARK, TS_SDAT1_MARK, | ||
749 | VSP_MARK, GLO_Q0_MARK, SIM0_RST_B_MARK, SD3_WP_MARK, | ||
750 | MMC1_D5_MARK, TS_SCK1_MARK, GLO_Q1_MARK, FMIN_C_MARK, | ||
751 | RDS_DATA_B_MARK, FMIN_E_MARK, RDS_DATA_D_MARK, FMIN_F_MARK, | ||
752 | RDS_DATA_E_MARK, MLB_CLK_MARK, SCL2_B_MARK, SCL2_CIS_B_MARK, | ||
753 | MLB_SIG_MARK, SCIFB1_RXD_D_MARK, RX1_C_MARK, SDA2_B_MARK, | ||
754 | SDA2_CIS_B_MARK, MLB_DAT_MARK, SPV_EVEN_MARK, | ||
755 | SCIFB1_TXD_D_MARK, TX1_C_MARK, BPFCLK_C_MARK, | ||
756 | RDS_CLK_B_MARK, SSI_SCK0129_MARK, CAN_CLK_B_MARK, | ||
757 | MOUT0_MARK, | ||
758 | |||
759 | SSI_WS0129_MARK, CAN0_TX_B_MARK, MOUT1_MARK, | ||
760 | SSI_SDATA0_MARK, CAN0_RX_B_MARK, MOUT2_MARK, | ||
761 | SSI_SDATA1_MARK, CAN1_TX_B_MARK, MOUT5_MARK, | ||
762 | SSI_SDATA2_MARK, CAN1_RX_B_MARK, SSI_SCK1_MARK, MOUT6_MARK, | ||
763 | SSI_SCK34_MARK, STP_OPWM_0_MARK, SCIFB0_SCK_MARK, | ||
764 | MSIOF1_SCK_MARK, CAN_DEBUG_HW_TRIGGER_MARK, SSI_WS34_MARK, | ||
765 | STP_IVCXO27_0_MARK, SCIFB0_RXD_MARK, MSIOF1_SYNC_MARK, | ||
766 | CAN_STEP0_MARK, SSI_SDATA3_MARK, STP_ISCLK_0_MARK, | ||
767 | SCIFB0_TXD_MARK, MSIOF1_SS1_MARK, CAN_TXCLK_MARK, | ||
768 | SSI_SCK4_MARK, STP_ISD_0_MARK, SCIFB0_CTS_N_MARK, | ||
769 | MSIOF1_SS2_MARK, SSI_SCK5_C_MARK, CAN_DEBUGOUT0_MARK, | ||
770 | SSI_WS4_MARK, STP_ISEN_0_MARK, SCIFB0_RTS_N_MARK, | ||
771 | MSIOF1_TXD_MARK, SSI_WS5_C_MARK, CAN_DEBUGOUT1_MARK, | ||
772 | SSI_SDATA4_MARK, STP_ISSYNC_0_MARK, MSIOF1_RXD_MARK, | ||
773 | CAN_DEBUGOUT2_MARK, SSI_SCK5_MARK, SCIFB1_SCK_MARK, | ||
774 | IERX_B_MARK, DU2_EXHSYNC_DU2_HSYNC_MARK, QSTH_QHS_MARK, | ||
775 | CAN_DEBUGOUT3_MARK, SSI_WS5_MARK, SCIFB1_RXD_MARK, | ||
776 | IECLK_B_MARK, DU2_EXVSYNC_DU2_VSYNC_MARK, QSTB_QHE_MARK, | ||
777 | CAN_DEBUGOUT4_MARK, | ||
778 | |||
779 | SSI_SDATA5_MARK, SCIFB1_TXD_MARK, IETX_B_MARK, DU2_DR2_MARK, | ||
780 | LCDOUT2_MARK, CAN_DEBUGOUT5_MARK, SSI_SCK6_MARK, | ||
781 | SCIFB1_CTS_N_MARK, BPFCLK_D_MARK, RDS_CLK_C_MARK, | ||
782 | DU2_DR3_MARK, LCDOUT3_MARK, CAN_DEBUGOUT6_MARK, | ||
783 | BPFCLK_F_MARK, RDS_CLK_E_MARK, SSI_WS6_MARK, | ||
784 | SCIFB1_RTS_N_MARK, CAN0_TX_D_MARK, DU2_DR4_MARK, | ||
785 | LCDOUT4_MARK, CAN_DEBUGOUT7_MARK, SSI_SDATA6_MARK, | ||
786 | FMIN_D_MARK, RDS_DATA_C_MARK, DU2_DR5_MARK, LCDOUT5_MARK, | ||
787 | CAN_DEBUGOUT8_MARK, SSI_SCK78_MARK, STP_IVCXO27_1_MARK, | ||
788 | SCK1_MARK, SCIFA1_SCK_MARK, DU2_DR6_MARK, LCDOUT6_MARK, | ||
789 | CAN_DEBUGOUT9_MARK, SSI_WS78_MARK, STP_ISCLK_1_MARK, | ||
790 | SCIFB2_SCK_MARK, SCIFA2_CTS_N_MARK, DU2_DR7_MARK, | ||
791 | LCDOUT7_MARK, CAN_DEBUGOUT10_MARK, SSI_SDATA7_MARK, | ||
792 | STP_ISD_1_MARK, SCIFB2_RXD_MARK, SCIFA2_RTS_N_MARK, | ||
793 | TCLK2_MARK, QSTVA_QVS_MARK, CAN_DEBUGOUT11_MARK, | ||
794 | BPFCLK_E_MARK, RDS_CLK_D_MARK, SSI_SDATA7_B_MARK, | ||
795 | FMIN_G_MARK, RDS_DATA_F_MARK, SSI_SDATA8_MARK, | ||
796 | STP_ISEN_1_MARK, SCIFB2_TXD_MARK, CAN0_TX_C_MARK, | ||
797 | CAN_DEBUGOUT12_MARK, SSI_SDATA8_B_MARK, SSI_SDATA9_MARK, | ||
798 | STP_ISSYNC_1_MARK, SCIFB2_CTS_N_MARK, SSI_WS1_MARK, | ||
799 | SSI_SDATA5_C_MARK, CAN_DEBUGOUT13_MARK, AUDIO_CLKA_MARK, | ||
800 | SCIFB2_RTS_N_MARK, CAN_DEBUGOUT14_MARK, | ||
801 | |||
802 | AUDIO_CLKB_MARK, SCIF_CLK_MARK, CAN0_RX_D_MARK, | ||
803 | DVC_MUTE_MARK, CAN0_RX_C_MARK, CAN_DEBUGOUT15_MARK, | ||
804 | REMOCON_MARK, SCIFA0_SCK_MARK, HSCK1_MARK, SCK0_MARK, | ||
805 | MSIOF3_SS2_MARK, DU2_DG2_MARK, LCDOUT10_MARK, SDA1_C_MARK, | ||
806 | SDA1_CIS_C_MARK, SCIFA0_RXD_MARK, HRX1_MARK, RX0_MARK, | ||
807 | DU2_DR0_MARK, LCDOUT0_MARK, SCIFA0_TXD_MARK, HTX1_MARK, | ||
808 | TX0_MARK, DU2_DR1_MARK, LCDOUT1_MARK, SCIFA0_CTS_N_MARK, | ||
809 | HCTS1_N_MARK, CTS0_N_MARK, MSIOF3_SYNC_MARK, DU2_DG3_MARK, | ||
810 | LCDOUT11_MARK, PWM0_B_MARK, SCL1_C_MARK, SCL1_CIS_C_MARK, | ||
811 | SCIFA0_RTS_N_MARK, HRTS1_N_MARK, RTS0_N_TANS_MARK, | ||
812 | MSIOF3_SS1_MARK, DU2_DG0_MARK, LCDOUT8_MARK, PWM1_B_MARK, | ||
813 | SCIFA1_RXD_MARK, AD_DI_MARK, RX1_MARK, | ||
814 | DU2_EXODDF_DU2_ODDF_DISP_CDE_MARK, QCPV_QDE_MARK, | ||
815 | SCIFA1_TXD_MARK, AD_DO_MARK, TX1_MARK, DU2_DG1_MARK, | ||
816 | LCDOUT9_MARK, SCIFA1_CTS_N_MARK, AD_CLK_MARK, | ||
817 | CTS1_N_MARK, MSIOF3_RXD_MARK, DU0_DOTCLKOUT_MARK, QCLK_MARK, | ||
818 | SCIFA1_RTS_N_MARK, AD_NCS_N_MARK, RTS1_N_TANS_MARK, | ||
819 | MSIOF3_TXD_MARK, DU1_DOTCLKOUT_MARK, QSTVB_QVE_MARK, | ||
820 | HRTS0_N_C_MARK, | ||
821 | |||
822 | SCIFA2_SCK_MARK, FMCLK_MARK, MSIOF3_SCK_MARK, DU2_DG7_MARK, | ||
823 | LCDOUT15_MARK, SCIF_CLK_B_MARK, SCIFA2_RXD_MARK, FMIN_MARK, | ||
824 | DU2_DB0_MARK, LCDOUT16_MARK, SCL2_MARK, SCL2_CIS_MARK, | ||
825 | SCIFA2_TXD_MARK, BPFCLK_MARK, DU2_DB1_MARK, LCDOUT17_MARK, | ||
826 | SDA2_MARK, SDA2_CIS_MARK, HSCK0_MARK, TS_SDEN0_MARK, | ||
827 | DU2_DG4_MARK, LCDOUT12_MARK, HCTS0_N_C_MARK, HRX0_MARK, | ||
828 | DU2_DB2_MARK, LCDOUT18_MARK, HTX0_MARK, DU2_DB3_MARK, | ||
829 | LCDOUT19_MARK, HCTS0_N_MARK, SSI_SCK9_MARK, DU2_DB4_MARK, | ||
830 | LCDOUT20_MARK, HRTS0_N_MARK, SSI_WS9_MARK, DU2_DB5_MARK, | ||
831 | LCDOUT21_MARK, MSIOF0_SCK_MARK, TS_SDAT0_MARK, ADICLK_MARK, | ||
832 | DU2_DB6_MARK, LCDOUT22_MARK, MSIOF0_SYNC_MARK, TS_SCK0_MARK, | ||
833 | SSI_SCK2_MARK, ADIDATA_MARK, DU2_DB7_MARK, LCDOUT23_MARK, | ||
834 | SCIFA2_RXD_B_MARK, MSIOF0_SS1_MARK, ADICHS0_MARK, | ||
835 | DU2_DG5_MARK, LCDOUT13_MARK, MSIOF0_TXD_MARK, ADICHS1_MARK, | ||
836 | DU2_DG6_MARK, LCDOUT14_MARK, | ||
837 | |||
838 | MSIOF0_SS2_MARK, AUDIO_CLKOUT_MARK, ADICHS2_MARK, | ||
839 | DU2_DISP_MARK, QPOLA_MARK, HTX0_C_MARK, SCIFA2_TXD_B_MARK, | ||
840 | MSIOF0_RXD_MARK, TS_SPSYNC0_MARK, SSI_WS2_MARK, | ||
841 | ADICS_SAMP_MARK, DU2_CDE_MARK, QPOLB_MARK, HRX0_C_MARK, | ||
842 | USB1_PWEN_MARK, AUDIO_CLKOUT_D_MARK, USB1_OVC_MARK, | ||
843 | TCLK1_B_MARK, | ||
844 | PINMUX_MARK_END, | ||
845 | }; | ||
846 | |||
847 | static const pinmux_enum_t pinmux_data[] = { | ||
848 | PINMUX_DATA_GP_ALL(), /* PINMUX_DATA(GP_M_N_DATA, GP_M_N_FN...), */ | ||
849 | |||
850 | PINMUX_DATA(VI1_DATA7_VI1_B7_MARK, FN_VI1_DATA7_VI1_B7), | ||
851 | PINMUX_DATA(USB0_PWEN_MARK, FN_USB0_PWEN), | ||
852 | PINMUX_DATA(USB0_OVC_VBUS_MARK, FN_USB0_OVC_VBUS), | ||
853 | PINMUX_DATA(USB2_PWEN_MARK, FN_USB2_PWEN), | ||
854 | PINMUX_DATA(USB2_OVC_MARK, FN_USB2_OVC), | ||
855 | PINMUX_DATA(AVS1_MARK, FN_AVS1), | ||
856 | PINMUX_DATA(AVS2_MARK, FN_AVS2), | ||
857 | PINMUX_DATA(DU_DOTCLKIN0_MARK, FN_DU_DOTCLKIN0), | ||
858 | PINMUX_DATA(DU_DOTCLKIN2_MARK, FN_DU_DOTCLKIN2), | ||
859 | |||
860 | PINMUX_IPSR_DATA(IP0_2_0, D0), | ||
861 | PINMUX_IPSR_MODSEL_DATA(IP0_2_0, MSIOF3_SCK_B, SEL_SOF3_1), | ||
862 | PINMUX_IPSR_MODSEL_DATA(IP0_2_0, VI3_DATA0, SEL_VI3_0), | ||
863 | PINMUX_IPSR_MODSEL_DATA(IP0_2_0, VI0_G4, SEL_VI0_0), | ||
864 | PINMUX_IPSR_MODSEL_DATA(IP0_2_0, VI0_G4_B, SEL_VI0_1), | ||
865 | PINMUX_IPSR_DATA(IP0_5_3, D1), | ||
866 | PINMUX_IPSR_MODSEL_DATA(IP0_5_3, MSIOF3_SYNC_B, SEL_SOF3_1), | ||
867 | PINMUX_IPSR_MODSEL_DATA(IP0_5_3, VI3_DATA1, SEL_VI3_0), | ||
868 | PINMUX_IPSR_MODSEL_DATA(IP0_5_3, VI0_G5, SEL_VI0_0), | ||
869 | PINMUX_IPSR_MODSEL_DATA(IP0_5_3, VI0_G5_B, SEL_VI0_1), | ||
870 | PINMUX_IPSR_DATA(IP0_8_6, D2), | ||
871 | PINMUX_IPSR_MODSEL_DATA(IP0_8_6, MSIOF3_RXD_B, SEL_SOF3_1), | ||
872 | PINMUX_IPSR_MODSEL_DATA(IP0_8_6, VI3_DATA2, SEL_VI3_0), | ||
873 | PINMUX_IPSR_MODSEL_DATA(IP0_8_6, VI0_G6, SEL_VI0_0), | ||
874 | PINMUX_IPSR_MODSEL_DATA(IP0_8_6, VI0_G6_B, SEL_VI0_1), | ||
875 | PINMUX_IPSR_DATA(IP0_11_9, D3), | ||
876 | PINMUX_IPSR_MODSEL_DATA(IP0_11_9, MSIOF3_TXD_B, SEL_SOF3_1), | ||
877 | PINMUX_IPSR_MODSEL_DATA(IP0_11_9, VI3_DATA3, SEL_VI3_0), | ||
878 | PINMUX_IPSR_MODSEL_DATA(IP0_11_9, VI0_G7, SEL_VI0_0), | ||
879 | PINMUX_IPSR_MODSEL_DATA(IP0_11_9, VI0_G7_B, SEL_VI0_1), | ||
880 | PINMUX_IPSR_DATA(IP0_15_12, D4), | ||
881 | PINMUX_IPSR_MODSEL_DATA(IP0_15_12, SCIFB1_RXD_F, SEL_SCIFB1_5), | ||
882 | PINMUX_IPSR_MODSEL_DATA(IP0_15_12, SCIFB0_RXD_C, SEL_SCIFB_2), | ||
883 | PINMUX_IPSR_MODSEL_DATA(IP0_15_12, VI3_DATA4, SEL_VI3_0), | ||
884 | PINMUX_IPSR_MODSEL_DATA(IP0_15_12, VI0_R0, SEL_VI0_0), | ||
885 | PINMUX_IPSR_MODSEL_DATA(IP0_15_12, VI0_R0_B, SEL_VI0_1), | ||
886 | PINMUX_IPSR_MODSEL_DATA(IP0_15_12, RX0_B, SEL_SCIF0_1), | ||
887 | PINMUX_IPSR_DATA(IP0_19_16, D5), | ||
888 | PINMUX_IPSR_MODSEL_DATA(IP0_19_16, SCIFB1_TXD_F, SEL_SCIFB1_5), | ||
889 | PINMUX_IPSR_MODSEL_DATA(IP0_19_16, SCIFB0_TXD_C, SEL_SCIFB_2), | ||
890 | PINMUX_IPSR_MODSEL_DATA(IP0_19_16, VI3_DATA5, SEL_VI3_0), | ||
891 | PINMUX_IPSR_MODSEL_DATA(IP0_19_16, VI0_R1, SEL_VI0_0), | ||
892 | PINMUX_IPSR_MODSEL_DATA(IP0_19_16, VI0_R1_B, SEL_VI0_1), | ||
893 | PINMUX_IPSR_MODSEL_DATA(IP0_19_16, TX0_B, SEL_SCIF0_1), | ||
894 | PINMUX_IPSR_DATA(IP0_22_20, D6), | ||
895 | PINMUX_IPSR_MODSEL_DATA(IP0_22_20, SCL2_C, SEL_IIC2_2), | ||
896 | PINMUX_IPSR_MODSEL_DATA(IP0_22_20, VI3_DATA6, SEL_VI3_0), | ||
897 | PINMUX_IPSR_MODSEL_DATA(IP0_22_20, VI0_R2, SEL_VI0_0), | ||
898 | PINMUX_IPSR_MODSEL_DATA(IP0_22_20, VI0_R2_B, SEL_VI0_1), | ||
899 | PINMUX_IPSR_MODSEL_DATA(IP0_22_20, SCL2_CIS_C, SEL_I2C2_2), | ||
900 | PINMUX_IPSR_DATA(IP0_26_23, D7), | ||
901 | PINMUX_IPSR_MODSEL_DATA(IP0_26_23, AD_DI_B, SEL_ADI_1), | ||
902 | PINMUX_IPSR_MODSEL_DATA(IP0_26_23, SDA2_C, SEL_IIC2_2), | ||
903 | PINMUX_IPSR_MODSEL_DATA(IP0_26_23, VI3_DATA7, SEL_VI3_0), | ||
904 | PINMUX_IPSR_MODSEL_DATA(IP0_26_23, VI0_R3, SEL_VI0_0), | ||
905 | PINMUX_IPSR_MODSEL_DATA(IP0_26_23, VI0_R3_B, SEL_VI0_1), | ||
906 | PINMUX_IPSR_MODSEL_DATA(IP0_26_23, SDA2_CIS_C, SEL_I2C2_2), | ||
907 | PINMUX_IPSR_DATA(IP0_30_27, D8), | ||
908 | PINMUX_IPSR_MODSEL_DATA(IP0_30_27, SCIFA1_SCK_C, SEL_SCIFA1_2), | ||
909 | PINMUX_IPSR_DATA(IP0_30_27, AVB_TXD0), | ||
910 | PINMUX_IPSR_DATA(IP0_30_27, MII_TXD0), | ||
911 | PINMUX_IPSR_MODSEL_DATA(IP0_30_27, VI0_G0, SEL_VI0_0), | ||
912 | PINMUX_IPSR_MODSEL_DATA(IP0_30_27, VI0_G0_B, SEL_VI0_1), | ||
913 | PINMUX_IPSR_MODSEL_DATA(IP0_30_27, VI2_DATA0_VI2_B0, SEL_VI2_0), | ||
914 | |||
915 | PINMUX_IPSR_DATA(IP1_3_0, D9), | ||
916 | PINMUX_IPSR_MODSEL_DATA(IP1_3_0, SCIFA1_RXD_C, SEL_SCIFA1_2), | ||
917 | PINMUX_IPSR_DATA(IP1_3_0, AVB_TXD1), | ||
918 | PINMUX_IPSR_DATA(IP1_3_0, MII_TXD1), | ||
919 | PINMUX_IPSR_MODSEL_DATA(IP1_3_0, VI0_G1, SEL_VI0_0), | ||
920 | PINMUX_IPSR_MODSEL_DATA(IP1_3_0, VI0_G1_B, SEL_VI0_1), | ||
921 | PINMUX_IPSR_MODSEL_DATA(IP1_3_0, VI2_DATA1_VI2_B1, SEL_VI2_0), | ||
922 | PINMUX_IPSR_DATA(IP1_7_4, D10), | ||
923 | PINMUX_IPSR_MODSEL_DATA(IP1_7_4, SCIFA1_TXD_C, SEL_SCIFA1_2), | ||
924 | PINMUX_IPSR_DATA(IP1_7_4, AVB_TXD2), | ||
925 | PINMUX_IPSR_DATA(IP1_7_4, MII_TXD2), | ||
926 | PINMUX_IPSR_MODSEL_DATA(IP1_7_4, VI0_G2, SEL_VI0_0), | ||
927 | PINMUX_IPSR_MODSEL_DATA(IP1_7_4, VI0_G2_B, SEL_VI0_1), | ||
928 | PINMUX_IPSR_MODSEL_DATA(IP1_7_4, VI2_DATA2_VI2_B2, SEL_VI2_0), | ||
929 | PINMUX_IPSR_DATA(IP1_11_8, D11), | ||
930 | PINMUX_IPSR_MODSEL_DATA(IP1_11_8, SCIFA1_CTS_N_C, SEL_SCIFA1_2), | ||
931 | PINMUX_IPSR_DATA(IP1_11_8, AVB_TXD3), | ||
932 | PINMUX_IPSR_DATA(IP1_11_8, MII_TXD3), | ||
933 | PINMUX_IPSR_MODSEL_DATA(IP1_11_8, VI0_G3, SEL_VI0_0), | ||
934 | PINMUX_IPSR_MODSEL_DATA(IP1_11_8, VI0_G3_B, SEL_VI0_1), | ||
935 | PINMUX_IPSR_MODSEL_DATA(IP1_11_8, VI2_DATA3_VI2_B3, SEL_VI2_0), | ||
936 | PINMUX_IPSR_DATA(IP1_14_12, D12), | ||
937 | PINMUX_IPSR_MODSEL_DATA(IP1_14_12, SCIFA1_RTS_N_C, SEL_SCIFA1_2), | ||
938 | PINMUX_IPSR_DATA(IP1_14_12, AVB_TXD4), | ||
939 | PINMUX_IPSR_MODSEL_DATA(IP1_14_12, VI0_HSYNC_N, SEL_VI0_0), | ||
940 | PINMUX_IPSR_MODSEL_DATA(IP1_14_12, VI0_HSYNC_N_B, SEL_VI0_1), | ||
941 | PINMUX_IPSR_MODSEL_DATA(IP1_14_12, VI2_DATA4_VI2_B4, SEL_VI2_0), | ||
942 | PINMUX_IPSR_DATA(IP1_17_15, D13), | ||
943 | PINMUX_IPSR_MODSEL_DATA(IP1_17_15, AVB_TXD5, SEL_SCIFA1_2), | ||
944 | PINMUX_IPSR_MODSEL_DATA(IP1_17_15, VI0_VSYNC_N, SEL_VI0_0), | ||
945 | PINMUX_IPSR_MODSEL_DATA(IP1_17_15, VI0_VSYNC_N_B, SEL_VI0_1), | ||
946 | PINMUX_IPSR_MODSEL_DATA(IP1_17_15, VI2_DATA5_VI2_B5, SEL_VI2_0), | ||
947 | PINMUX_IPSR_DATA(IP1_21_18, D14), | ||
948 | PINMUX_IPSR_MODSEL_DATA(IP1_21_18, SCIFB1_RXD_C, SEL_SCIFB1_2), | ||
949 | PINMUX_IPSR_DATA(IP1_21_18, AVB_TXD6), | ||
950 | PINMUX_IPSR_MODSEL_DATA(IP1_21_18, RX1_B, SEL_SCIF1_1), | ||
951 | PINMUX_IPSR_MODSEL_DATA(IP1_21_18, VI0_CLKENB, SEL_VI0_0), | ||
952 | PINMUX_IPSR_MODSEL_DATA(IP1_21_18, VI0_CLKENB_B, SEL_VI0_1), | ||
953 | PINMUX_IPSR_MODSEL_DATA(IP1_21_18, VI2_DATA6_VI2_B6, SEL_VI2_0), | ||
954 | PINMUX_IPSR_DATA(IP1_25_22, D15), | ||
955 | PINMUX_IPSR_MODSEL_DATA(IP1_25_22, SCIFB1_TXD_C, SEL_SCIFB1_2), | ||
956 | PINMUX_IPSR_DATA(IP1_25_22, AVB_TXD7), | ||
957 | PINMUX_IPSR_MODSEL_DATA(IP1_25_22, TX1_B, SEL_SCIF1_1), | ||
958 | PINMUX_IPSR_MODSEL_DATA(IP1_25_22, VI0_FIELD, SEL_VI0_0), | ||
959 | PINMUX_IPSR_MODSEL_DATA(IP1_25_22, VI0_FIELD_B, SEL_VI0_1), | ||
960 | PINMUX_IPSR_MODSEL_DATA(IP1_25_22, VI2_DATA7_VI2_B7, SEL_VI2_0), | ||
961 | PINMUX_IPSR_DATA(IP1_27_26, A0), | ||
962 | PINMUX_IPSR_DATA(IP1_27_26, PWM3), | ||
963 | PINMUX_IPSR_DATA(IP1_29_28, A1), | ||
964 | PINMUX_IPSR_DATA(IP1_29_28, PWM4), | ||
965 | |||
966 | PINMUX_IPSR_DATA(IP2_2_0, A2), | ||
967 | PINMUX_IPSR_DATA(IP2_2_0, PWM5), | ||
968 | PINMUX_IPSR_MODSEL_DATA(IP2_2_0, MSIOF1_SS1_B, SEL_SOF1_1), | ||
969 | PINMUX_IPSR_DATA(IP2_5_3, A3), | ||
970 | PINMUX_IPSR_DATA(IP2_5_3, PWM6), | ||
971 | PINMUX_IPSR_MODSEL_DATA(IP2_5_3, MSIOF1_SS2_B, SEL_SOF1_1), | ||
972 | PINMUX_IPSR_DATA(IP2_8_6, A4), | ||
973 | PINMUX_IPSR_MODSEL_DATA(IP2_8_6, MSIOF1_TXD_B, SEL_SOF1_1), | ||
974 | PINMUX_IPSR_DATA(IP2_8_6, TPU0TO0), | ||
975 | PINMUX_IPSR_DATA(IP2_11_9, A5), | ||
976 | PINMUX_IPSR_MODSEL_DATA(IP2_11_9, SCIFA1_TXD_B, SEL_SCIFA1_1), | ||
977 | PINMUX_IPSR_DATA(IP2_11_9, TPU0TO1), | ||
978 | PINMUX_IPSR_DATA(IP2_14_12, A6), | ||
979 | PINMUX_IPSR_MODSEL_DATA(IP2_14_12, SCIFA1_RTS_N_B, SEL_SCIFA1_1), | ||
980 | PINMUX_IPSR_DATA(IP2_14_12, TPU0TO2), | ||
981 | PINMUX_IPSR_DATA(IP2_17_15, A7), | ||
982 | PINMUX_IPSR_MODSEL_DATA(IP2_17_15, SCIFA1_SCK_B, SEL_SCIFA1_1), | ||
983 | PINMUX_IPSR_DATA(IP2_17_15, AUDIO_CLKOUT_B), | ||
984 | PINMUX_IPSR_DATA(IP2_17_15, TPU0TO3), | ||
985 | PINMUX_IPSR_DATA(IP2_21_18, A8), | ||
986 | PINMUX_IPSR_MODSEL_DATA(IP2_21_18, SCIFA1_RXD_B, SEL_SCIFA1_1), | ||
987 | PINMUX_IPSR_MODSEL_DATA(IP2_21_18, SSI_SCK5_B, SEL_SSI5_1), | ||
988 | PINMUX_IPSR_MODSEL_DATA(IP2_21_18, VI0_R4, SEL_VI0_0), | ||
989 | PINMUX_IPSR_MODSEL_DATA(IP2_21_18, VI0_R4_B, SEL_VI0_1), | ||
990 | PINMUX_IPSR_MODSEL_DATA(IP2_21_18, SCIFB2_RXD_C, SEL_SCIFB2_2), | ||
991 | PINMUX_IPSR_MODSEL_DATA(IP2_21_18, VI2_DATA0_VI2_B0_B, SEL_VI2_1), | ||
992 | PINMUX_IPSR_DATA(IP2_25_22, A9), | ||
993 | PINMUX_IPSR_MODSEL_DATA(IP2_25_22, SCIFA1_CTS_N_B, SEL_SCIFA1_1), | ||
994 | PINMUX_IPSR_MODSEL_DATA(IP2_25_22, SSI_WS5_B, SEL_SSI5_1), | ||
995 | PINMUX_IPSR_MODSEL_DATA(IP2_25_22, VI0_R5, SEL_VI0_0), | ||
996 | PINMUX_IPSR_MODSEL_DATA(IP2_25_22, VI0_R5_B, SEL_VI0_1), | ||
997 | PINMUX_IPSR_MODSEL_DATA(IP2_25_22, SCIFB2_TXD_C, SEL_SCIFB2_2), | ||
998 | PINMUX_IPSR_MODSEL_DATA(IP2_25_22, VI2_DATA1_VI2_B1_B, SEL_VI2_1), | ||
999 | PINMUX_IPSR_DATA(IP2_28_26, A10), | ||
1000 | PINMUX_IPSR_MODSEL_DATA(IP2_28_26, SSI_SDATA5_B, SEL_SSI5_1), | ||
1001 | PINMUX_IPSR_DATA(IP2_28_26, MSIOF2_SYNC), | ||
1002 | PINMUX_IPSR_MODSEL_DATA(IP2_28_26, VI0_R6, SEL_VI0_0), | ||
1003 | PINMUX_IPSR_MODSEL_DATA(IP2_28_26, VI0_R6_B, SEL_VI0_1), | ||
1004 | PINMUX_IPSR_MODSEL_DATA(IP2_28_26, VI2_DATA2_VI2_B2_B, SEL_VI2_1), | ||
1005 | |||
1006 | PINMUX_IPSR_DATA(IP3_3_0, A11), | ||
1007 | PINMUX_IPSR_MODSEL_DATA(IP3_3_0, SCIFB2_CTS_N_B, SEL_SCIFB2_1), | ||
1008 | PINMUX_IPSR_DATA(IP3_3_0, MSIOF2_SCK), | ||
1009 | PINMUX_IPSR_MODSEL_DATA(IP3_3_0, VI1_R0, SEL_VI1_0), | ||
1010 | PINMUX_IPSR_MODSEL_DATA(IP3_3_0, VI1_R0_B, SEL_VI1_1), | ||
1011 | PINMUX_IPSR_DATA(IP3_3_0, VI2_G0), | ||
1012 | PINMUX_IPSR_DATA(IP3_3_0, VI2_DATA3_VI2_B3_B), | ||
1013 | PINMUX_IPSR_DATA(IP3_7_4, A12), | ||
1014 | PINMUX_IPSR_MODSEL_DATA(IP3_7_4, SCIFB2_RXD_B, SEL_SCIFB2_1), | ||
1015 | PINMUX_IPSR_DATA(IP3_7_4, MSIOF2_TXD), | ||
1016 | PINMUX_IPSR_MODSEL_DATA(IP3_7_4, VI1_R1, SEL_VI1_0), | ||
1017 | PINMUX_IPSR_MODSEL_DATA(IP3_7_4, VI1_R1_B, SEL_VI1_1), | ||
1018 | PINMUX_IPSR_DATA(IP3_7_4, VI2_G1), | ||
1019 | PINMUX_IPSR_DATA(IP3_7_4, VI2_DATA4_VI2_B4_B), | ||
1020 | PINMUX_IPSR_DATA(IP3_11_8, A13), | ||
1021 | PINMUX_IPSR_MODSEL_DATA(IP3_11_8, SCIFB2_RTS_N_B, SEL_SCIFB2_1), | ||
1022 | PINMUX_IPSR_DATA(IP3_11_8, EX_WAIT2), | ||
1023 | PINMUX_IPSR_DATA(IP3_11_8, MSIOF2_RXD), | ||
1024 | PINMUX_IPSR_MODSEL_DATA(IP3_11_8, VI1_R2, SEL_VI1_0), | ||
1025 | PINMUX_IPSR_MODSEL_DATA(IP3_11_8, VI1_R2_B, SEL_VI1_1), | ||
1026 | PINMUX_IPSR_DATA(IP3_11_8, VI2_G2), | ||
1027 | PINMUX_IPSR_MODSEL_DATA(IP3_11_8, VI2_DATA5_VI2_B5_B, SEL_VI2_0), | ||
1028 | PINMUX_IPSR_DATA(IP3_14_12, A14), | ||
1029 | PINMUX_IPSR_MODSEL_DATA(IP3_14_12, SCIFB2_TXD_B, SEL_SCIFB2_1), | ||
1030 | PINMUX_IPSR_DATA(IP3_14_12, ATACS11_N), | ||
1031 | PINMUX_IPSR_DATA(IP3_14_12, MSIOF2_SS1), | ||
1032 | PINMUX_IPSR_DATA(IP3_17_15, A15), | ||
1033 | PINMUX_IPSR_MODSEL_DATA(IP3_17_15, SCIFB2_SCK_B, SEL_SCIFB2_1), | ||
1034 | PINMUX_IPSR_DATA(IP3_17_15, ATARD1_N), | ||
1035 | PINMUX_IPSR_DATA(IP3_17_15, MSIOF2_SS2), | ||
1036 | PINMUX_IPSR_DATA(IP3_19_18, A16), | ||
1037 | PINMUX_IPSR_DATA(IP3_19_18, ATAWR1_N), | ||
1038 | PINMUX_IPSR_DATA(IP3_22_20, A17), | ||
1039 | PINMUX_IPSR_MODSEL_DATA(IP3_22_20, AD_DO_B, SEL_ADI_1), | ||
1040 | PINMUX_IPSR_DATA(IP3_22_20, ATADIR1_N), | ||
1041 | PINMUX_IPSR_DATA(IP3_25_23, A18), | ||
1042 | PINMUX_IPSR_MODSEL_DATA(IP3_25_23, AD_CLK_B, SEL_ADI_1), | ||
1043 | PINMUX_IPSR_DATA(IP3_25_23, ATAG1_N), | ||
1044 | PINMUX_IPSR_DATA(IP3_28_26, A19), | ||
1045 | PINMUX_IPSR_MODSEL_DATA(IP3_28_26, AD_NCS_N_B, SEL_ADI_1), | ||
1046 | PINMUX_IPSR_DATA(IP3_28_26, ATACS01_N), | ||
1047 | PINMUX_IPSR_MODSEL_DATA(IP3_28_26, EX_WAIT0_B, SEL_LBS_1), | ||
1048 | PINMUX_IPSR_DATA(IP3_31_29, A20), | ||
1049 | PINMUX_IPSR_DATA(IP3_31_29, SPCLK), | ||
1050 | PINMUX_IPSR_MODSEL_DATA(IP3_31_29, VI1_R3, SEL_VI1_0), | ||
1051 | PINMUX_IPSR_MODSEL_DATA(IP3_31_29, VI1_R3_B, SEL_VI1_1), | ||
1052 | PINMUX_IPSR_DATA(IP3_31_29, VI2_G4), | ||
1053 | |||
1054 | PINMUX_IPSR_DATA(IP4_2_0, A21), | ||
1055 | PINMUX_IPSR_DATA(IP4_2_0, MOSI_IO0), | ||
1056 | PINMUX_IPSR_MODSEL_DATA(IP4_2_0, VI1_R4, SEL_VI1_0), | ||
1057 | PINMUX_IPSR_MODSEL_DATA(IP4_2_0, VI1_R4_B, SEL_VI1_1), | ||
1058 | PINMUX_IPSR_DATA(IP4_2_0, VI2_G5), | ||
1059 | PINMUX_IPSR_DATA(IP4_5_3, A22), | ||
1060 | PINMUX_IPSR_DATA(IP4_5_3, MISO_IO1), | ||
1061 | PINMUX_IPSR_MODSEL_DATA(IP4_5_3, VI1_R5, SEL_VI1_0), | ||
1062 | PINMUX_IPSR_MODSEL_DATA(IP4_5_3, VI1_R5_B, SEL_VI1_1), | ||
1063 | PINMUX_IPSR_DATA(IP4_5_3, VI2_G6), | ||
1064 | PINMUX_IPSR_DATA(IP4_8_6, A23), | ||
1065 | PINMUX_IPSR_DATA(IP4_8_6, IO2), | ||
1066 | PINMUX_IPSR_MODSEL_DATA(IP4_8_6, VI1_G7, SEL_VI1_0), | ||
1067 | PINMUX_IPSR_MODSEL_DATA(IP4_8_6, VI1_G7_B, SEL_VI1_1), | ||
1068 | PINMUX_IPSR_DATA(IP4_8_6, VI2_G7), | ||
1069 | PINMUX_IPSR_DATA(IP4_11_9, A24), | ||
1070 | PINMUX_IPSR_DATA(IP4_11_9, IO3), | ||
1071 | PINMUX_IPSR_MODSEL_DATA(IP4_11_9, VI1_R7, SEL_VI1_0), | ||
1072 | PINMUX_IPSR_MODSEL_DATA(IP4_11_9, VI1_R7_B, SEL_VI1_1), | ||
1073 | PINMUX_IPSR_MODSEL_DATA(IP4_11_9, VI2_CLKENB, SEL_VI2_0), | ||
1074 | PINMUX_IPSR_MODSEL_DATA(IP4_11_9, VI2_CLKENB_B, SEL_VI2_1), | ||
1075 | PINMUX_IPSR_DATA(IP4_14_12, A25), | ||
1076 | PINMUX_IPSR_DATA(IP4_14_12, SSL), | ||
1077 | PINMUX_IPSR_MODSEL_DATA(IP4_14_12, VI1_G6, SEL_VI1_0), | ||
1078 | PINMUX_IPSR_MODSEL_DATA(IP4_14_12, VI1_G6_B, SEL_VI1_1), | ||
1079 | PINMUX_IPSR_MODSEL_DATA(IP4_14_12, VI2_FIELD, SEL_VI2_0), | ||
1080 | PINMUX_IPSR_MODSEL_DATA(IP4_14_12, VI2_FIELD_B, SEL_VI2_1), | ||
1081 | PINMUX_IPSR_DATA(IP4_17_15, CS0_N), | ||
1082 | PINMUX_IPSR_MODSEL_DATA(IP4_17_15, VI1_R6, SEL_VI1_0), | ||
1083 | PINMUX_IPSR_MODSEL_DATA(IP4_17_15, VI1_R6_B, SEL_VI1_1), | ||
1084 | PINMUX_IPSR_DATA(IP4_17_15, VI2_G3), | ||
1085 | PINMUX_IPSR_MODSEL_DATA(IP4_17_15, MSIOF0_SS2_B, SEL_SOF0_1), | ||
1086 | PINMUX_IPSR_DATA(IP4_20_18, CS1_N_A26), | ||
1087 | PINMUX_IPSR_DATA(IP4_20_18, SPEEDIN), | ||
1088 | PINMUX_IPSR_MODSEL_DATA(IP4_20_18, VI0_R7, SEL_VI0_0), | ||
1089 | PINMUX_IPSR_MODSEL_DATA(IP4_20_18, VI0_R7_B, SEL_VI0_1), | ||
1090 | PINMUX_IPSR_MODSEL_DATA(IP4_20_18, VI2_CLK, SEL_VI2_0), | ||
1091 | PINMUX_IPSR_MODSEL_DATA(IP4_20_18, VI2_CLK_B, SEL_VI2_1), | ||
1092 | PINMUX_IPSR_DATA(IP4_23_21, EX_CS0_N), | ||
1093 | PINMUX_IPSR_MODSEL_DATA(IP4_23_21, HRX1_B, SEL_HSCIF1_1), | ||
1094 | PINMUX_IPSR_MODSEL_DATA(IP4_23_21, VI1_G5, SEL_VI1_0), | ||
1095 | PINMUX_IPSR_MODSEL_DATA(IP4_23_21, VI1_G5_B, SEL_VI1_1), | ||
1096 | PINMUX_IPSR_DATA(IP4_23_21, VI2_R0), | ||
1097 | PINMUX_IPSR_MODSEL_DATA(IP4_23_21, HTX0_B, SEL_HSCIF0_1), | ||
1098 | PINMUX_IPSR_MODSEL_DATA(IP4_23_21, MSIOF0_SS1_B, SEL_SOF0_1), | ||
1099 | PINMUX_IPSR_DATA(IP4_26_24, EX_CS1_N), | ||
1100 | PINMUX_IPSR_DATA(IP4_26_24, GPS_CLK), | ||
1101 | PINMUX_IPSR_MODSEL_DATA(IP4_26_24, HCTS1_N_B, SEL_HSCIF1_1), | ||
1102 | PINMUX_IPSR_MODSEL_DATA(IP4_26_24, VI1_FIELD, SEL_VI1_0), | ||
1103 | PINMUX_IPSR_MODSEL_DATA(IP4_26_24, VI1_FIELD_B, SEL_VI1_1), | ||
1104 | PINMUX_IPSR_DATA(IP4_26_24, VI2_R1), | ||
1105 | PINMUX_IPSR_DATA(IP4_29_27, EX_CS2_N), | ||
1106 | PINMUX_IPSR_DATA(IP4_29_27, GPS_SIGN), | ||
1107 | PINMUX_IPSR_MODSEL_DATA(IP4_29_27, HRTS1_N_B, SEL_HSCIF1_1), | ||
1108 | PINMUX_IPSR_DATA(IP4_29_27, VI3_CLKENB), | ||
1109 | PINMUX_IPSR_MODSEL_DATA(IP4_29_27, VI1_G0, SEL_VI1_0), | ||
1110 | PINMUX_IPSR_MODSEL_DATA(IP4_29_27, VI1_G0_B, SEL_VI1_1), | ||
1111 | PINMUX_IPSR_DATA(IP4_29_27, VI2_R2), | ||
1112 | |||
1113 | PINMUX_IPSR_DATA(IP5_2_0, EX_CS3_N), | ||
1114 | PINMUX_IPSR_DATA(IP5_2_0, GPS_MAG), | ||
1115 | PINMUX_IPSR_DATA(IP5_2_0, VI3_FIELD), | ||
1116 | PINMUX_IPSR_MODSEL_DATA(IP5_2_0, VI1_G1, SEL_VI1_0), | ||
1117 | PINMUX_IPSR_MODSEL_DATA(IP5_2_0, VI1_G1_B, SEL_VI1_1), | ||
1118 | PINMUX_IPSR_DATA(IP5_2_0, VI2_R3), | ||
1119 | PINMUX_IPSR_MODSEL_DATA(IP5_5_3, EX_CS4_N, SEL_I2C1_0), | ||
1120 | PINMUX_IPSR_MODSEL_DATA(IP5_5_3, MSIOF1_SCK_B, SEL_SOF1_1), | ||
1121 | PINMUX_IPSR_DATA(IP5_5_3, VI3_HSYNC_N), | ||
1122 | PINMUX_IPSR_MODSEL_DATA(IP5_5_3, VI2_HSYNC_N, SEL_VI2_0), | ||
1123 | PINMUX_IPSR_MODSEL_DATA(IP5_5_3, SCL1, SEL_IIC1_0), | ||
1124 | PINMUX_IPSR_MODSEL_DATA(IP5_5_3, VI2_HSYNC_N_B, SEL_VI2_1), | ||
1125 | PINMUX_IPSR_DATA(IP5_5_3, INTC_EN0_N), | ||
1126 | PINMUX_IPSR_MODSEL_DATA(IP5_5_3, SCL1_CIS, SEL_I2C1_0), | ||
1127 | PINMUX_IPSR_DATA(IP5_9_6, EX_CS5_N), | ||
1128 | PINMUX_IPSR_MODSEL_DATA(IP5_9_6, CAN0_RX, SEL_CAN0_0), | ||
1129 | PINMUX_IPSR_MODSEL_DATA(IP5_9_6, MSIOF1_RXD_B, SEL_SOF1_1), | ||
1130 | PINMUX_IPSR_DATA(IP5_9_6, VI3_VSYNC_N), | ||
1131 | PINMUX_IPSR_MODSEL_DATA(IP5_9_6, VI1_G2, SEL_VI1_0), | ||
1132 | PINMUX_IPSR_MODSEL_DATA(IP5_9_6, VI1_G2_B, SEL_VI1_1), | ||
1133 | PINMUX_IPSR_DATA(IP5_9_6, VI2_R4), | ||
1134 | PINMUX_IPSR_MODSEL_DATA(IP5_9_6, SDA1, SEL_IIC1_0), | ||
1135 | PINMUX_IPSR_DATA(IP5_9_6, INTC_EN1_N), | ||
1136 | PINMUX_IPSR_MODSEL_DATA(IP5_9_6, SDA1_CIS, SEL_I2C1_0), | ||
1137 | PINMUX_IPSR_DATA(IP5_12_10, BS_N), | ||
1138 | PINMUX_IPSR_MODSEL_DATA(IP5_12_10, IETX, SEL_IEB_0), | ||
1139 | PINMUX_IPSR_MODSEL_DATA(IP5_12_10, HTX1_B, SEL_HSCIF1_1), | ||
1140 | PINMUX_IPSR_MODSEL_DATA(IP5_12_10, CAN1_TX, SEL_CAN1_0), | ||
1141 | PINMUX_IPSR_DATA(IP5_12_10, DRACK0), | ||
1142 | PINMUX_IPSR_MODSEL_DATA(IP5_12_10, IETX_C, SEL_IEB_2), | ||
1143 | PINMUX_IPSR_DATA(IP5_14_13, RD_N), | ||
1144 | PINMUX_IPSR_MODSEL_DATA(IP5_14_13, CAN0_TX, SEL_CAN0_0), | ||
1145 | PINMUX_IPSR_MODSEL_DATA(IP5_14_13, SCIFA0_SCK_B, SEL_SCFA_1), | ||
1146 | PINMUX_IPSR_DATA(IP5_17_15, RD_WR_N), | ||
1147 | PINMUX_IPSR_MODSEL_DATA(IP5_17_15, VI1_G3, SEL_VI1_0), | ||
1148 | PINMUX_IPSR_MODSEL_DATA(IP5_17_15, VI1_G3_B, SEL_VI1_1), | ||
1149 | PINMUX_IPSR_DATA(IP5_17_15, VI2_R5), | ||
1150 | PINMUX_IPSR_MODSEL_DATA(IP5_17_15, SCIFA0_RXD_B, SEL_SCFA_1), | ||
1151 | PINMUX_IPSR_DATA(IP5_17_15, INTC_IRQ4_N), | ||
1152 | PINMUX_IPSR_DATA(IP5_20_18, WE0_N), | ||
1153 | PINMUX_IPSR_MODSEL_DATA(IP5_20_18, IECLK, SEL_IEB_0), | ||
1154 | PINMUX_IPSR_MODSEL_DATA(IP5_20_18, CAN_CLK, SEL_CANCLK_0), | ||
1155 | PINMUX_IPSR_MODSEL_DATA(IP5_20_18, VI2_VSYNC_N, SEL_VI2_0), | ||
1156 | PINMUX_IPSR_MODSEL_DATA(IP5_20_18, SCIFA0_TXD_B, SEL_SCFA_1), | ||
1157 | PINMUX_IPSR_MODSEL_DATA(IP5_20_18, VI2_VSYNC_N_B, SEL_VI2_1), | ||
1158 | PINMUX_IPSR_DATA(IP5_23_21, WE1_N), | ||
1159 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, IERX, SEL_IEB_0), | ||
1160 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, CAN1_RX, SEL_CAN1_0), | ||
1161 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, VI1_G4, SEL_VI1_0), | ||
1162 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, VI1_G4_B, SEL_VI1_1), | ||
1163 | PINMUX_IPSR_DATA(IP5_23_21, VI2_R6), | ||
1164 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, SCIFA0_CTS_N_B, SEL_SCFA_1), | ||
1165 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, IERX_C, SEL_IEB_2), | ||
1166 | PINMUX_IPSR_DATA(IP5_26_24, EX_WAIT0), | ||
1167 | PINMUX_IPSR_DATA(IP5_26_24, IRQ3), | ||
1168 | PINMUX_IPSR_DATA(IP5_26_24, INTC_IRQ3_N), | ||
1169 | PINMUX_IPSR_MODSEL_DATA(IP5_26_24, VI3_CLK, SEL_VI3_0), | ||
1170 | PINMUX_IPSR_MODSEL_DATA(IP5_26_24, SCIFA0_RTS_N_B, SEL_SCFA_1), | ||
1171 | PINMUX_IPSR_MODSEL_DATA(IP5_26_24, HRX0_B, SEL_HSCIF0_1), | ||
1172 | PINMUX_IPSR_MODSEL_DATA(IP5_26_24, MSIOF0_SCK_B, SEL_SOF0_1), | ||
1173 | PINMUX_IPSR_DATA(IP5_29_27, DREQ0_N), | ||
1174 | PINMUX_IPSR_MODSEL_DATA(IP5_29_27, VI1_HSYNC_N, SEL_VI1_0), | ||
1175 | PINMUX_IPSR_MODSEL_DATA(IP5_29_27, VI1_HSYNC_N_B, SEL_VI1_1), | ||
1176 | PINMUX_IPSR_DATA(IP5_29_27, VI2_R7), | ||
1177 | PINMUX_IPSR_MODSEL_DATA(IP5_29_27, SSI_SCK78_C, SEL_SSI7_2), | ||
1178 | PINMUX_IPSR_MODSEL_DATA(IP5_29_27, SSI_WS78_B, SEL_SSI7_1), | ||
1179 | |||
1180 | PINMUX_IPSR_DATA(IP6_2_0, DACK0), | ||
1181 | PINMUX_IPSR_DATA(IP6_2_0, IRQ0), | ||
1182 | PINMUX_IPSR_DATA(IP6_2_0, INTC_IRQ0_N), | ||
1183 | PINMUX_IPSR_MODSEL_DATA(IP6_2_0, SSI_SCK6_B, SEL_SSI6_1), | ||
1184 | PINMUX_IPSR_MODSEL_DATA(IP6_2_0, VI1_VSYNC_N, SEL_VI1_0), | ||
1185 | PINMUX_IPSR_MODSEL_DATA(IP6_2_0, VI1_VSYNC_N_B, SEL_VI1_1), | ||
1186 | PINMUX_IPSR_MODSEL_DATA(IP6_2_0, SSI_WS78_C, SEL_SSI7_2), | ||
1187 | PINMUX_IPSR_DATA(IP6_5_3, DREQ1_N), | ||
1188 | PINMUX_IPSR_MODSEL_DATA(IP6_5_3, VI1_CLKENB, SEL_VI1_0), | ||
1189 | PINMUX_IPSR_MODSEL_DATA(IP6_5_3, VI1_CLKENB_B, SEL_VI1_1), | ||
1190 | PINMUX_IPSR_MODSEL_DATA(IP6_5_3, SSI_SDATA7_C, SEL_SSI7_2), | ||
1191 | PINMUX_IPSR_MODSEL_DATA(IP6_5_3, SSI_SCK78_B, SEL_SSI7_1), | ||
1192 | PINMUX_IPSR_DATA(IP6_8_6, DACK1), | ||
1193 | PINMUX_IPSR_DATA(IP6_8_6, IRQ1), | ||
1194 | PINMUX_IPSR_DATA(IP6_8_6, INTC_IRQ1_N), | ||
1195 | PINMUX_IPSR_MODSEL_DATA(IP6_8_6, SSI_WS6_B, SEL_SSI6_1), | ||
1196 | PINMUX_IPSR_MODSEL_DATA(IP6_8_6, SSI_SDATA8_C, SEL_SSI8_2), | ||
1197 | PINMUX_IPSR_DATA(IP6_10_9, DREQ2_N), | ||
1198 | PINMUX_IPSR_MODSEL_DATA(IP6_10_9, HSCK1_B, SEL_HSCIF1_1), | ||
1199 | PINMUX_IPSR_MODSEL_DATA(IP6_10_9, HCTS0_N_B, SEL_HSCIF0_1), | ||
1200 | PINMUX_IPSR_MODSEL_DATA(IP6_10_9, MSIOF0_TXD_B, SEL_SOF0_1), | ||
1201 | PINMUX_IPSR_DATA(IP6_13_11, DACK2), | ||
1202 | PINMUX_IPSR_DATA(IP6_13_11, IRQ2), | ||
1203 | PINMUX_IPSR_DATA(IP6_13_11, INTC_IRQ2_N), | ||
1204 | PINMUX_IPSR_MODSEL_DATA(IP6_13_11, SSI_SDATA6_B, SEL_SSI6_1), | ||
1205 | PINMUX_IPSR_MODSEL_DATA(IP6_13_11, HRTS0_N_B, SEL_HSCIF0_1), | ||
1206 | PINMUX_IPSR_MODSEL_DATA(IP6_13_11, MSIOF0_RXD_B, SEL_SOF0_1), | ||
1207 | PINMUX_IPSR_DATA(IP6_16_14, ETH_CRS_DV), | ||
1208 | PINMUX_IPSR_DATA(IP6_16_14, RMII_CRS_DV), | ||
1209 | PINMUX_IPSR_MODSEL_DATA(IP6_16_14, STP_ISCLK_0_B, SEL_SSP_1), | ||
1210 | PINMUX_IPSR_MODSEL_DATA(IP6_16_14, TS_SDEN0_D, SEL_TSIF0_3), | ||
1211 | PINMUX_IPSR_MODSEL_DATA(IP6_16_14, GLO_Q0_C, SEL_GPS_2), | ||
1212 | PINMUX_IPSR_MODSEL_DATA(IP6_16_14, SCL2_E, SEL_IIC2_4), | ||
1213 | PINMUX_IPSR_MODSEL_DATA(IP6_16_14, SCL2_CIS_E, SEL_I2C2_4), | ||
1214 | PINMUX_IPSR_DATA(IP6_19_17, ETH_RX_ER), | ||
1215 | PINMUX_IPSR_DATA(IP6_19_17, RMII_RX_ER), | ||
1216 | PINMUX_IPSR_MODSEL_DATA(IP6_19_17, STP_ISD_0_B, SEL_SSP_1), | ||
1217 | PINMUX_IPSR_MODSEL_DATA(IP6_19_17, TS_SPSYNC0_D, SEL_TSIF0_3), | ||
1218 | PINMUX_IPSR_MODSEL_DATA(IP6_19_17, GLO_Q1_C, SEL_GPS_2), | ||
1219 | PINMUX_IPSR_MODSEL_DATA(IP6_19_17, SDA2_E, SEL_IIC2_4), | ||
1220 | PINMUX_IPSR_MODSEL_DATA(IP6_19_17, SDA2_CIS_E, SEL_I2C2_4), | ||
1221 | PINMUX_IPSR_DATA(IP6_22_20, ETH_RXD0), | ||
1222 | PINMUX_IPSR_DATA(IP6_22_20, RMII_RXD0), | ||
1223 | PINMUX_IPSR_MODSEL_DATA(IP6_22_20, STP_ISEN_0_B, SEL_SSP_1), | ||
1224 | PINMUX_IPSR_MODSEL_DATA(IP6_22_20, TS_SDAT0_D, SEL_TSIF0_3), | ||
1225 | PINMUX_IPSR_MODSEL_DATA(IP6_22_20, GLO_I0_C, SEL_GPS_2), | ||
1226 | PINMUX_IPSR_MODSEL_DATA(IP6_22_20, SCIFB1_SCK_G, SEL_SCIFB1_6), | ||
1227 | PINMUX_IPSR_MODSEL_DATA(IP6_22_20, SCK1_E, SEL_SCIF1_4), | ||
1228 | PINMUX_IPSR_DATA(IP6_25_23, ETH_RXD1), | ||
1229 | PINMUX_IPSR_DATA(IP6_25_23, RMII_RXD1), | ||
1230 | PINMUX_IPSR_MODSEL_DATA(IP6_25_23, HRX0_E, SEL_HSCIF0_4), | ||
1231 | PINMUX_IPSR_MODSEL_DATA(IP6_25_23, STP_ISSYNC_0_B, SEL_SSP_1), | ||
1232 | PINMUX_IPSR_MODSEL_DATA(IP6_25_23, TS_SCK0_D, SEL_TSIF0_3), | ||
1233 | PINMUX_IPSR_MODSEL_DATA(IP6_25_23, GLO_I1_C, SEL_GPS_2), | ||
1234 | PINMUX_IPSR_MODSEL_DATA(IP6_25_23, SCIFB1_RXD_G, SEL_SCIFB1_6), | ||
1235 | PINMUX_IPSR_MODSEL_DATA(IP6_25_23, RX1_E, SEL_SCIF1_4), | ||
1236 | PINMUX_IPSR_DATA(IP6_28_26, ETH_LINK), | ||
1237 | PINMUX_IPSR_DATA(IP6_28_26, RMII_LINK), | ||
1238 | PINMUX_IPSR_MODSEL_DATA(IP6_28_26, HTX0_E, SEL_HSCIF0_4), | ||
1239 | PINMUX_IPSR_MODSEL_DATA(IP6_28_26, STP_IVCXO27_0_B, SEL_SSP_1), | ||
1240 | PINMUX_IPSR_MODSEL_DATA(IP6_28_26, SCIFB1_TXD_G, SEL_SCIFB1_6), | ||
1241 | PINMUX_IPSR_MODSEL_DATA(IP6_28_26, TX1_E, SEL_SCIF1_4), | ||
1242 | PINMUX_IPSR_DATA(IP6_31_29, ETH_REF_CLK), | ||
1243 | PINMUX_IPSR_DATA(IP6_31_29, RMII_REF_CLK), | ||
1244 | PINMUX_IPSR_MODSEL_DATA(IP6_31_29, HCTS0_N_E, SEL_HSCIF0_4), | ||
1245 | PINMUX_IPSR_MODSEL_DATA(IP6_31_29, STP_IVCXO27_1_B, SEL_SSP_1), | ||
1246 | PINMUX_IPSR_MODSEL_DATA(IP6_31_29, HRX0_F, SEL_HSCIF0_5), | ||
1247 | |||
1248 | PINMUX_IPSR_DATA(IP7_2_0, ETH_MDIO), | ||
1249 | PINMUX_IPSR_DATA(IP7_2_0, RMII_MDIO), | ||
1250 | PINMUX_IPSR_MODSEL_DATA(IP7_2_0, HRTS0_N_E, SEL_HSCIF0_4), | ||
1251 | PINMUX_IPSR_MODSEL_DATA(IP7_2_0, SIM0_D_C, SEL_SIM_2), | ||
1252 | PINMUX_IPSR_MODSEL_DATA(IP7_2_0, HCTS0_N_F, SEL_HSCIF0_5), | ||
1253 | PINMUX_IPSR_DATA(IP7_5_3, ETH_TXD1), | ||
1254 | PINMUX_IPSR_DATA(IP7_5_3, RMII_TXD1), | ||
1255 | PINMUX_IPSR_MODSEL_DATA(IP7_5_3, HTX0_F, SEL_HSCIF0_4), | ||
1256 | PINMUX_IPSR_MODSEL_DATA(IP7_5_3, BPFCLK_G, SEL_SIM_2), | ||
1257 | PINMUX_IPSR_MODSEL_DATA(IP7_5_3, RDS_CLK_F, SEL_HSCIF0_5), | ||
1258 | PINMUX_IPSR_DATA(IP7_7_6, ETH_TX_EN), | ||
1259 | PINMUX_IPSR_DATA(IP7_7_6, RMII_TX_EN), | ||
1260 | PINMUX_IPSR_MODSEL_DATA(IP7_7_6, SIM0_CLK_C, SEL_SIM_2), | ||
1261 | PINMUX_IPSR_MODSEL_DATA(IP7_7_6, HRTS0_N_F, SEL_HSCIF0_5), | ||
1262 | PINMUX_IPSR_DATA(IP7_9_8, ETH_MAGIC), | ||
1263 | PINMUX_IPSR_DATA(IP7_9_8, RMII_MAGIC), | ||
1264 | PINMUX_IPSR_MODSEL_DATA(IP7_9_8, SIM0_RST_C, SEL_SIM_2), | ||
1265 | PINMUX_IPSR_DATA(IP7_12_10, ETH_TXD0), | ||
1266 | PINMUX_IPSR_DATA(IP7_12_10, RMII_TXD0), | ||
1267 | PINMUX_IPSR_MODSEL_DATA(IP7_12_10, STP_ISCLK_1_B, SEL_SSP_1), | ||
1268 | PINMUX_IPSR_MODSEL_DATA(IP7_12_10, TS_SDEN1_C, SEL_TSIF1_2), | ||
1269 | PINMUX_IPSR_MODSEL_DATA(IP7_12_10, GLO_SCLK_C, SEL_GPS_2), | ||
1270 | PINMUX_IPSR_DATA(IP7_15_13, ETH_MDC), | ||
1271 | PINMUX_IPSR_DATA(IP7_15_13, RMII_MDC), | ||
1272 | PINMUX_IPSR_MODSEL_DATA(IP7_15_13, STP_ISD_1_B, SEL_SSP_1), | ||
1273 | PINMUX_IPSR_MODSEL_DATA(IP7_15_13, TS_SPSYNC1_C, SEL_TSIF1_2), | ||
1274 | PINMUX_IPSR_MODSEL_DATA(IP7_15_13, GLO_SDATA_C, SEL_GPS_2), | ||
1275 | PINMUX_IPSR_DATA(IP7_18_16, PWM0), | ||
1276 | PINMUX_IPSR_MODSEL_DATA(IP7_18_16, SCIFA2_SCK_C, SEL_SCIFA2_2), | ||
1277 | PINMUX_IPSR_MODSEL_DATA(IP7_18_16, STP_ISEN_1_B, SEL_SSP_1), | ||
1278 | PINMUX_IPSR_MODSEL_DATA(IP7_18_16, TS_SDAT1_C, SEL_TSIF1_2), | ||
1279 | PINMUX_IPSR_MODSEL_DATA(IP7_18_16, GLO_SS_C, SEL_GPS_2), | ||
1280 | PINMUX_IPSR_DATA(IP7_21_19, PWM1), | ||
1281 | PINMUX_IPSR_MODSEL_DATA(IP7_21_19, SCIFA2_TXD_C, SEL_SCIFA2_2), | ||
1282 | PINMUX_IPSR_MODSEL_DATA(IP7_21_19, STP_ISSYNC_1_B, SEL_SSP_1), | ||
1283 | PINMUX_IPSR_MODSEL_DATA(IP7_21_19, TS_SCK1_C, SEL_TSIF1_2), | ||
1284 | PINMUX_IPSR_MODSEL_DATA(IP7_21_19, GLO_RFON_C, SEL_GPS_2), | ||
1285 | PINMUX_IPSR_DATA(IP7_21_19, PCMOE_N), | ||
1286 | PINMUX_IPSR_DATA(IP7_24_22, PWM2), | ||
1287 | PINMUX_IPSR_DATA(IP7_24_22, PWMFSW0), | ||
1288 | PINMUX_IPSR_MODSEL_DATA(IP7_24_22, SCIFA2_RXD_C, SEL_SCIFA2_2), | ||
1289 | PINMUX_IPSR_DATA(IP7_24_22, PCMWE_N), | ||
1290 | PINMUX_IPSR_MODSEL_DATA(IP7_24_22, IECLK_C, SEL_IEB_2), | ||
1291 | PINMUX_IPSR_DATA(IP7_26_25, DU1_DOTCLKIN), | ||
1292 | PINMUX_IPSR_DATA(IP7_26_25, AUDIO_CLKC), | ||
1293 | PINMUX_IPSR_DATA(IP7_26_25, AUDIO_CLKOUT_C), | ||
1294 | PINMUX_IPSR_MODSEL_DATA(IP7_28_27, VI0_CLK, SEL_VI0_0), | ||
1295 | PINMUX_IPSR_DATA(IP7_28_27, ATACS00_N), | ||
1296 | PINMUX_IPSR_DATA(IP7_28_27, AVB_RXD1), | ||
1297 | PINMUX_IPSR_DATA(IP7_28_27, MII_RXD1), | ||
1298 | PINMUX_IPSR_MODSEL_DATA(IP7_30_29, VI0_DATA0_VI0_B0, SEL_VI0_0), | ||
1299 | PINMUX_IPSR_DATA(IP7_30_29, ATACS10_N), | ||
1300 | PINMUX_IPSR_DATA(IP7_30_29, AVB_RXD2), | ||
1301 | PINMUX_IPSR_DATA(IP7_30_29, MII_RXD2), | ||
1302 | |||
1303 | PINMUX_IPSR_MODSEL_DATA(IP8_1_0, VI0_DATA1_VI0_B1, SEL_VI0_0), | ||
1304 | PINMUX_IPSR_DATA(IP8_1_0, ATARD0_N), | ||
1305 | PINMUX_IPSR_DATA(IP8_1_0, AVB_RXD3), | ||
1306 | PINMUX_IPSR_DATA(IP8_1_0, MII_RXD3), | ||
1307 | PINMUX_IPSR_MODSEL_DATA(IP8_3_2, VI0_DATA2_VI0_B2, SEL_VI0_0), | ||
1308 | PINMUX_IPSR_DATA(IP8_3_2, ATAWR0_N), | ||
1309 | PINMUX_IPSR_DATA(IP8_3_2, AVB_RXD4), | ||
1310 | PINMUX_IPSR_MODSEL_DATA(IP8_5_4, VI0_DATA3_VI0_B3, SEL_VI0_0), | ||
1311 | PINMUX_IPSR_DATA(IP8_5_4, ATADIR0_N), | ||
1312 | PINMUX_IPSR_DATA(IP8_5_4, AVB_RXD5), | ||
1313 | PINMUX_IPSR_MODSEL_DATA(IP8_7_6, VI0_DATA4_VI0_B4, SEL_VI0_0), | ||
1314 | PINMUX_IPSR_DATA(IP8_7_6, ATAG0_N), | ||
1315 | PINMUX_IPSR_DATA(IP8_7_6, AVB_RXD6), | ||
1316 | PINMUX_IPSR_MODSEL_DATA(IP8_9_8, VI0_DATA5_VI0_B5, SEL_VI0_0), | ||
1317 | PINMUX_IPSR_DATA(IP8_9_8, EX_WAIT1), | ||
1318 | PINMUX_IPSR_DATA(IP8_9_8, AVB_RXD7), | ||
1319 | PINMUX_IPSR_MODSEL_DATA(IP8_11_10, VI0_DATA6_VI0_B6, SEL_VI0_0), | ||
1320 | PINMUX_IPSR_DATA(IP8_11_10, AVB_RX_ER), | ||
1321 | PINMUX_IPSR_DATA(IP8_11_10, MII_RX_ER), | ||
1322 | PINMUX_IPSR_MODSEL_DATA(IP8_13_12, VI0_DATA7_VI0_B7, SEL_VI0_0), | ||
1323 | PINMUX_IPSR_DATA(IP8_13_12, AVB_RX_CLK), | ||
1324 | PINMUX_IPSR_DATA(IP8_13_12, MII_RX_CLK), | ||
1325 | PINMUX_IPSR_MODSEL_DATA(IP8_15_14, VI1_CLK, SEL_VI1_0), | ||
1326 | PINMUX_IPSR_DATA(IP8_15_14, AVB_RX_DV), | ||
1327 | PINMUX_IPSR_DATA(IP8_15_14, MII_RX_DV), | ||
1328 | PINMUX_IPSR_MODSEL_DATA(IP8_17_16, VI1_DATA0_VI1_B0, SEL_VI1_0), | ||
1329 | PINMUX_IPSR_MODSEL_DATA(IP8_17_16, SCIFA1_SCK_D, SEL_SCIFA1_3), | ||
1330 | PINMUX_IPSR_DATA(IP8_17_16, AVB_CRS), | ||
1331 | PINMUX_IPSR_DATA(IP8_17_16, MII_CRS), | ||
1332 | PINMUX_IPSR_MODSEL_DATA(IP8_19_18, VI1_DATA1_VI1_B1, SEL_VI1_0), | ||
1333 | PINMUX_IPSR_MODSEL_DATA(IP8_19_18, SCIFA1_RXD_D, SEL_SCIFA1_3), | ||
1334 | PINMUX_IPSR_DATA(IP8_19_18, AVB_MDC), | ||
1335 | PINMUX_IPSR_DATA(IP8_19_18, MII_MDC), | ||
1336 | PINMUX_IPSR_MODSEL_DATA(IP8_21_20, VI1_DATA2_VI1_B2, SEL_VI1_0), | ||
1337 | PINMUX_IPSR_MODSEL_DATA(IP8_21_20, SCIFA1_TXD_D, SEL_SCIFA1_3), | ||
1338 | PINMUX_IPSR_DATA(IP8_21_20, AVB_MDIO), | ||
1339 | PINMUX_IPSR_DATA(IP8_21_20, MII_MDIO), | ||
1340 | PINMUX_IPSR_MODSEL_DATA(IP8_23_22, VI1_DATA3_VI1_B3, SEL_VI1_0), | ||
1341 | PINMUX_IPSR_MODSEL_DATA(IP8_23_22, SCIFA1_CTS_N_D, SEL_SCIFA1_3), | ||
1342 | PINMUX_IPSR_DATA(IP8_23_22, AVB_GTX_CLK), | ||
1343 | PINMUX_IPSR_MODSEL_DATA(IP8_25_24, VI1_DATA4_VI1_B4, SEL_VI1_0), | ||
1344 | PINMUX_IPSR_MODSEL_DATA(IP8_25_24, SCIFA1_RTS_N_D, SEL_SCIFA1_3), | ||
1345 | PINMUX_IPSR_DATA(IP8_25_24, AVB_MAGIC), | ||
1346 | PINMUX_IPSR_DATA(IP8_25_24, MII_MAGIC), | ||
1347 | PINMUX_IPSR_MODSEL_DATA(IP8_26, VI1_DATA5_VI1_B5, SEL_VI1_0), | ||
1348 | PINMUX_IPSR_MODSEL_DATA(IP8_26, AVB_PHY_INT, SEL_SCIFA1_3), | ||
1349 | PINMUX_IPSR_MODSEL_DATA(IP8_27, VI1_DATA6_VI1_B6, SEL_VI1_0), | ||
1350 | PINMUX_IPSR_DATA(IP8_27, AVB_GTXREFCLK), | ||
1351 | PINMUX_IPSR_DATA(IP8_28, SD0_CLK), | ||
1352 | PINMUX_IPSR_MODSEL_DATA(IP8_28, VI1_DATA0_VI1_B0_B, SEL_VI1_1), | ||
1353 | PINMUX_IPSR_DATA(IP8_30_29, SD0_CMD), | ||
1354 | PINMUX_IPSR_MODSEL_DATA(IP8_30_29, SCIFB1_SCK_B, SEL_SCIFB1_1), | ||
1355 | PINMUX_IPSR_MODSEL_DATA(IP8_30_29, VI1_DATA1_VI1_B1_B, SEL_VI1_1), | ||
1356 | |||
1357 | PINMUX_IPSR_DATA(IP9_1_0, SD0_DAT0), | ||
1358 | PINMUX_IPSR_MODSEL_DATA(IP9_1_0, SCIFB1_RXD_B, SEL_SCIFB1_1), | ||
1359 | PINMUX_IPSR_MODSEL_DATA(IP9_1_0, VI1_DATA2_VI1_B2_B, SEL_VI1_1), | ||
1360 | PINMUX_IPSR_DATA(IP9_3_2, SD0_DAT1), | ||
1361 | PINMUX_IPSR_MODSEL_DATA(IP9_3_2, SCIFB1_TXD_B, SEL_SCIFB1_1), | ||
1362 | PINMUX_IPSR_MODSEL_DATA(IP9_3_2, VI1_DATA3_VI1_B3_B, SEL_VI1_1), | ||
1363 | PINMUX_IPSR_DATA(IP9_5_4, SD0_DAT2), | ||
1364 | PINMUX_IPSR_MODSEL_DATA(IP9_5_4, SCIFB1_CTS_N_B, SEL_SCIFB1_1), | ||
1365 | PINMUX_IPSR_MODSEL_DATA(IP9_5_4, VI1_DATA4_VI1_B4_B, SEL_VI1_1), | ||
1366 | PINMUX_IPSR_DATA(IP9_7_6, SD0_DAT3), | ||
1367 | PINMUX_IPSR_MODSEL_DATA(IP9_7_6, SCIFB1_RTS_N_B, SEL_SCIFB1_1), | ||
1368 | PINMUX_IPSR_MODSEL_DATA(IP9_7_6, VI1_DATA5_VI1_B5_B, SEL_VI1_1), | ||
1369 | PINMUX_IPSR_DATA(IP9_11_8, SD0_CD), | ||
1370 | PINMUX_IPSR_DATA(IP9_11_8, MMC0_D6), | ||
1371 | PINMUX_IPSR_MODSEL_DATA(IP9_11_8, TS_SDEN0_B, SEL_TSIF0_1), | ||
1372 | PINMUX_IPSR_DATA(IP9_11_8, USB0_EXTP), | ||
1373 | PINMUX_IPSR_MODSEL_DATA(IP9_11_8, GLO_SCLK, SEL_GPS_0), | ||
1374 | PINMUX_IPSR_MODSEL_DATA(IP9_11_8, VI1_DATA6_VI1_B6_B, SEL_VI1_1), | ||
1375 | PINMUX_IPSR_MODSEL_DATA(IP9_11_8, SCL1_B, SEL_IIC1_1), | ||
1376 | PINMUX_IPSR_MODSEL_DATA(IP9_11_8, SCL1_CIS_B, SEL_I2C1_1), | ||
1377 | PINMUX_IPSR_MODSEL_DATA(IP9_11_8, VI2_DATA6_VI2_B6_B, SEL_VI2_1), | ||
1378 | PINMUX_IPSR_DATA(IP9_15_12, SD0_WP), | ||
1379 | PINMUX_IPSR_DATA(IP9_15_12, MMC0_D7), | ||
1380 | PINMUX_IPSR_MODSEL_DATA(IP9_15_12, TS_SPSYNC0_B, SEL_TSIF0_1), | ||
1381 | PINMUX_IPSR_DATA(IP9_15_12, USB0_IDIN), | ||
1382 | PINMUX_IPSR_MODSEL_DATA(IP9_15_12, GLO_SDATA, SEL_GPS_0), | ||
1383 | PINMUX_IPSR_MODSEL_DATA(IP9_15_12, VI1_DATA7_VI1_B7_B, SEL_VI1_1), | ||
1384 | PINMUX_IPSR_MODSEL_DATA(IP9_15_12, SDA1_B, SEL_IIC1_1), | ||
1385 | PINMUX_IPSR_MODSEL_DATA(IP9_15_12, SDA1_CIS_B, SEL_I2C1_1), | ||
1386 | PINMUX_IPSR_MODSEL_DATA(IP9_15_12, VI2_DATA7_VI2_B7_B, SEL_VI2_1), | ||
1387 | PINMUX_IPSR_DATA(IP9_17_16, SD1_CLK), | ||
1388 | PINMUX_IPSR_DATA(IP9_17_16, AVB_TX_EN), | ||
1389 | PINMUX_IPSR_DATA(IP9_17_16, MII_TX_EN), | ||
1390 | PINMUX_IPSR_DATA(IP9_19_18, SD1_CMD), | ||
1391 | PINMUX_IPSR_DATA(IP9_19_18, AVB_TX_ER), | ||
1392 | PINMUX_IPSR_DATA(IP9_19_18, MII_TX_ER), | ||
1393 | PINMUX_IPSR_MODSEL_DATA(IP9_19_18, SCIFB0_SCK_B, SEL_SCIFB_1), | ||
1394 | PINMUX_IPSR_DATA(IP9_21_20, SD1_DAT0), | ||
1395 | PINMUX_IPSR_DATA(IP9_21_20, AVB_TX_CLK), | ||
1396 | PINMUX_IPSR_DATA(IP9_21_20, MII_TX_CLK), | ||
1397 | PINMUX_IPSR_MODSEL_DATA(IP9_21_20, SCIFB0_RXD_B, SEL_SCIFB_1), | ||
1398 | PINMUX_IPSR_DATA(IP9_23_22, SD1_DAT1), | ||
1399 | PINMUX_IPSR_DATA(IP9_23_22, AVB_LINK), | ||
1400 | PINMUX_IPSR_DATA(IP9_23_22, MII_LINK), | ||
1401 | PINMUX_IPSR_MODSEL_DATA(IP9_23_22, SCIFB0_TXD_B, SEL_SCIFB_1), | ||
1402 | PINMUX_IPSR_DATA(IP9_25_24, SD1_DAT2), | ||
1403 | PINMUX_IPSR_DATA(IP9_25_24, AVB_COL), | ||
1404 | PINMUX_IPSR_DATA(IP9_25_24, MII_COL), | ||
1405 | PINMUX_IPSR_MODSEL_DATA(IP9_25_24, SCIFB0_CTS_N_B, SEL_SCIFB_1), | ||
1406 | PINMUX_IPSR_DATA(IP9_27_26, SD1_DAT3), | ||
1407 | PINMUX_IPSR_DATA(IP9_27_26, AVB_RXD0), | ||
1408 | PINMUX_IPSR_DATA(IP9_27_26, MII_RXD0), | ||
1409 | PINMUX_IPSR_MODSEL_DATA(IP9_27_26, SCIFB0_RTS_N_B, SEL_SCIFB_1), | ||
1410 | PINMUX_IPSR_DATA(IP9_31_28, SD1_CD), | ||
1411 | PINMUX_IPSR_DATA(IP9_31_28, MMC1_D6), | ||
1412 | PINMUX_IPSR_MODSEL_DATA(IP9_31_28, TS_SDEN1, SEL_TSIF1_0), | ||
1413 | PINMUX_IPSR_DATA(IP9_31_28, USB1_EXTP), | ||
1414 | PINMUX_IPSR_MODSEL_DATA(IP9_31_28, GLO_SS, SEL_GPS_0), | ||
1415 | PINMUX_IPSR_MODSEL_DATA(IP9_31_28, VI0_CLK_B, SEL_VI0_1), | ||
1416 | PINMUX_IPSR_MODSEL_DATA(IP9_31_28, SCL2_D, SEL_IIC2_3), | ||
1417 | PINMUX_IPSR_MODSEL_DATA(IP9_31_28, SCL2_CIS_D, SEL_I2C2_3), | ||
1418 | PINMUX_IPSR_MODSEL_DATA(IP9_31_28, SIM0_CLK_B, SEL_SIM_1), | ||
1419 | PINMUX_IPSR_MODSEL_DATA(IP9_31_28, VI3_CLK_B, SEL_VI3_1), | ||
1420 | |||
1421 | PINMUX_IPSR_DATA(IP10_3_0, SD1_WP), | ||
1422 | PINMUX_IPSR_DATA(IP10_3_0, MMC1_D7), | ||
1423 | PINMUX_IPSR_MODSEL_DATA(IP10_3_0, TS_SPSYNC1, SEL_TSIF1_0), | ||
1424 | PINMUX_IPSR_DATA(IP10_3_0, USB1_IDIN), | ||
1425 | PINMUX_IPSR_MODSEL_DATA(IP10_3_0, GLO_RFON, SEL_GPS_0), | ||
1426 | PINMUX_IPSR_MODSEL_DATA(IP10_3_0, VI1_CLK_B, SEL_VI1_1), | ||
1427 | PINMUX_IPSR_MODSEL_DATA(IP10_3_0, SDA2_D, SEL_IIC2_3), | ||
1428 | PINMUX_IPSR_MODSEL_DATA(IP10_3_0, SDA2_CIS_D, SEL_I2C2_3), | ||
1429 | PINMUX_IPSR_MODSEL_DATA(IP10_3_0, SIM0_D_B, SEL_SIM_1), | ||
1430 | PINMUX_IPSR_DATA(IP10_6_4, SD2_CLK), | ||
1431 | PINMUX_IPSR_DATA(IP10_6_4, MMC0_CLK), | ||
1432 | PINMUX_IPSR_MODSEL_DATA(IP10_6_4, SIM0_CLK, SEL_SIM_0), | ||
1433 | PINMUX_IPSR_MODSEL_DATA(IP10_6_4, VI0_DATA0_VI0_B0_B, SEL_VI0_1), | ||
1434 | PINMUX_IPSR_MODSEL_DATA(IP10_6_4, TS_SDEN0_C, SEL_TSIF0_2), | ||
1435 | PINMUX_IPSR_MODSEL_DATA(IP10_6_4, GLO_SCLK_B, SEL_GPS_1), | ||
1436 | PINMUX_IPSR_MODSEL_DATA(IP10_6_4, VI3_DATA0_B, SEL_VI3_1), | ||
1437 | PINMUX_IPSR_DATA(IP10_10_7, SD2_CMD), | ||
1438 | PINMUX_IPSR_DATA(IP10_10_7, MMC0_CMD), | ||
1439 | PINMUX_IPSR_MODSEL_DATA(IP10_10_7, SIM0_D, SEL_SIM_0), | ||
1440 | PINMUX_IPSR_MODSEL_DATA(IP10_10_7, VI0_DATA1_VI0_B1_B, SEL_VI0_1), | ||
1441 | PINMUX_IPSR_MODSEL_DATA(IP10_10_7, SCIFB1_SCK_E, SEL_SCIFB1_4), | ||
1442 | PINMUX_IPSR_MODSEL_DATA(IP10_10_7, SCK1_D, SEL_SCIF1_3), | ||
1443 | PINMUX_IPSR_MODSEL_DATA(IP10_10_7, TS_SPSYNC0_C, SEL_TSIF0_2), | ||
1444 | PINMUX_IPSR_MODSEL_DATA(IP10_10_7, GLO_SDATA_B, SEL_GPS_1), | ||
1445 | PINMUX_IPSR_MODSEL_DATA(IP10_10_7, VI3_DATA1_B, SEL_VI3_1), | ||
1446 | PINMUX_IPSR_DATA(IP10_14_11, SD2_DAT0), | ||
1447 | PINMUX_IPSR_DATA(IP10_14_11, MMC0_D0), | ||
1448 | PINMUX_IPSR_MODSEL_DATA(IP10_14_11, FMCLK_B, SEL_FM_1), | ||
1449 | PINMUX_IPSR_MODSEL_DATA(IP10_14_11, VI0_DATA2_VI0_B2_B, SEL_VI0_1), | ||
1450 | PINMUX_IPSR_MODSEL_DATA(IP10_14_11, SCIFB1_RXD_E, SEL_SCIFB1_4), | ||
1451 | PINMUX_IPSR_MODSEL_DATA(IP10_14_11, RX1_D, SEL_SCIF1_3), | ||
1452 | PINMUX_IPSR_MODSEL_DATA(IP10_14_11, TS_SDAT0_C, SEL_TSIF0_2), | ||
1453 | PINMUX_IPSR_MODSEL_DATA(IP10_14_11, GLO_SS_B, SEL_GPS_1), | ||
1454 | PINMUX_IPSR_MODSEL_DATA(IP10_14_11, VI3_DATA2_B, SEL_VI3_1), | ||
1455 | PINMUX_IPSR_DATA(IP10_18_15, SD2_DAT1), | ||
1456 | PINMUX_IPSR_DATA(IP10_18_15, MMC0_D1), | ||
1457 | PINMUX_IPSR_MODSEL_DATA(IP10_18_15, FMIN_B, SEL_FM_1), | ||
1458 | PINMUX_IPSR_MODSEL_DATA(IP10_18_15, RDS_DATA, SEL_RDS_0), | ||
1459 | PINMUX_IPSR_MODSEL_DATA(IP10_18_15, VI0_DATA3_VI0_B3_B, SEL_VI0_1), | ||
1460 | PINMUX_IPSR_MODSEL_DATA(IP10_18_15, SCIFB1_TXD_E, SEL_SCIFB1_4), | ||
1461 | PINMUX_IPSR_MODSEL_DATA(IP10_18_15, TX1_D, SEL_SCIF1_3), | ||
1462 | PINMUX_IPSR_MODSEL_DATA(IP10_18_15, TS_SCK0_C, SEL_TSIF0_2), | ||
1463 | PINMUX_IPSR_MODSEL_DATA(IP10_18_15, GLO_RFON_B, SEL_GPS_1), | ||
1464 | PINMUX_IPSR_MODSEL_DATA(IP10_18_15, VI3_DATA3_B, SEL_VI3_1), | ||
1465 | PINMUX_IPSR_DATA(IP10_22_19, SD2_DAT2), | ||
1466 | PINMUX_IPSR_DATA(IP10_22_19, MMC0_D2), | ||
1467 | PINMUX_IPSR_MODSEL_DATA(IP10_22_19, BPFCLK_B, SEL_FM_1), | ||
1468 | PINMUX_IPSR_MODSEL_DATA(IP10_22_19, RDS_CLK, SEL_RDS_0), | ||
1469 | PINMUX_IPSR_MODSEL_DATA(IP10_22_19, VI0_DATA4_VI0_B4_B, SEL_VI0_1), | ||
1470 | PINMUX_IPSR_MODSEL_DATA(IP10_22_19, HRX0_D, SEL_HSCIF0_3), | ||
1471 | PINMUX_IPSR_MODSEL_DATA(IP10_22_19, TS_SDEN1_B, SEL_TSIF1_1), | ||
1472 | PINMUX_IPSR_MODSEL_DATA(IP10_22_19, GLO_Q0_B, SEL_GPS_1), | ||
1473 | PINMUX_IPSR_MODSEL_DATA(IP10_22_19, VI3_DATA4_B, SEL_VI3_1), | ||
1474 | PINMUX_IPSR_DATA(IP10_25_23, SD2_DAT3), | ||
1475 | PINMUX_IPSR_DATA(IP10_25_23, MMC0_D3), | ||
1476 | PINMUX_IPSR_MODSEL_DATA(IP10_25_23, SIM0_RST, SEL_SIM_0), | ||
1477 | PINMUX_IPSR_MODSEL_DATA(IP10_25_23, VI0_DATA5_VI0_B5_B, SEL_VI0_1), | ||
1478 | PINMUX_IPSR_MODSEL_DATA(IP10_25_23, HTX0_D, SEL_HSCIF0_3), | ||
1479 | PINMUX_IPSR_MODSEL_DATA(IP10_25_23, TS_SPSYNC1_B, SEL_TSIF1_1), | ||
1480 | PINMUX_IPSR_MODSEL_DATA(IP10_25_23, GLO_Q1_B, SEL_GPS_1), | ||
1481 | PINMUX_IPSR_MODSEL_DATA(IP10_25_23, VI3_DATA5_B, SEL_VI3_1), | ||
1482 | PINMUX_IPSR_DATA(IP10_29_26, SD2_CD), | ||
1483 | PINMUX_IPSR_DATA(IP10_29_26, MMC0_D4), | ||
1484 | PINMUX_IPSR_MODSEL_DATA(IP10_29_26, TS_SDAT0_B, SEL_TSIF0_1), | ||
1485 | PINMUX_IPSR_DATA(IP10_29_26, USB2_EXTP), | ||
1486 | PINMUX_IPSR_MODSEL_DATA(IP10_29_26, GLO_I0, SEL_GPS_0), | ||
1487 | PINMUX_IPSR_MODSEL_DATA(IP10_29_26, VI0_DATA6_VI0_B6_B, SEL_VI0_1), | ||
1488 | PINMUX_IPSR_MODSEL_DATA(IP10_29_26, HCTS0_N_D, SEL_HSCIF0_3), | ||
1489 | PINMUX_IPSR_MODSEL_DATA(IP10_29_26, TS_SDAT1_B, SEL_TSIF1_1), | ||
1490 | PINMUX_IPSR_MODSEL_DATA(IP10_29_26, GLO_I0_B, SEL_GPS_1), | ||
1491 | PINMUX_IPSR_MODSEL_DATA(IP10_29_26, VI3_DATA6_B, SEL_VI3_1), | ||
1492 | |||
1493 | PINMUX_IPSR_DATA(IP11_3_0, SD2_WP), | ||
1494 | PINMUX_IPSR_DATA(IP11_3_0, MMC0_D5), | ||
1495 | PINMUX_IPSR_MODSEL_DATA(IP11_3_0, TS_SCK0_B, SEL_TSIF0_1), | ||
1496 | PINMUX_IPSR_DATA(IP11_3_0, USB2_IDIN), | ||
1497 | PINMUX_IPSR_MODSEL_DATA(IP11_3_0, GLO_I1, SEL_GPS_0), | ||
1498 | PINMUX_IPSR_MODSEL_DATA(IP11_3_0, VI0_DATA7_VI0_B7_B, SEL_VI0_1), | ||
1499 | PINMUX_IPSR_MODSEL_DATA(IP11_3_0, HRTS0_N_D, SEL_HSCIF0_3), | ||
1500 | PINMUX_IPSR_MODSEL_DATA(IP11_3_0, TS_SCK1_B, SEL_TSIF1_1), | ||
1501 | PINMUX_IPSR_MODSEL_DATA(IP11_3_0, GLO_I1_B, SEL_GPS_1), | ||
1502 | PINMUX_IPSR_MODSEL_DATA(IP11_3_0, VI3_DATA7_B, SEL_VI3_1), | ||
1503 | PINMUX_IPSR_DATA(IP11_4, SD3_CLK), | ||
1504 | PINMUX_IPSR_DATA(IP11_4, MMC1_CLK), | ||
1505 | PINMUX_IPSR_DATA(IP11_6_5, SD3_CMD), | ||
1506 | PINMUX_IPSR_DATA(IP11_6_5, MMC1_CMD), | ||
1507 | PINMUX_IPSR_DATA(IP11_6_5, MTS_N), | ||
1508 | PINMUX_IPSR_DATA(IP11_8_7, SD3_DAT0), | ||
1509 | PINMUX_IPSR_DATA(IP11_8_7, MMC1_D0), | ||
1510 | PINMUX_IPSR_DATA(IP11_8_7, STM_N), | ||
1511 | PINMUX_IPSR_DATA(IP11_10_9, SD3_DAT1), | ||
1512 | PINMUX_IPSR_DATA(IP11_10_9, MMC1_D1), | ||
1513 | PINMUX_IPSR_DATA(IP11_10_9, MDATA), | ||
1514 | PINMUX_IPSR_DATA(IP11_12_11, SD3_DAT2), | ||
1515 | PINMUX_IPSR_DATA(IP11_12_11, MMC1_D2), | ||
1516 | PINMUX_IPSR_DATA(IP11_12_11, SDATA), | ||
1517 | PINMUX_IPSR_DATA(IP11_14_13, SD3_DAT3), | ||
1518 | PINMUX_IPSR_DATA(IP11_14_13, MMC1_D3), | ||
1519 | PINMUX_IPSR_DATA(IP11_14_13, SCKZ), | ||
1520 | PINMUX_IPSR_DATA(IP11_17_15, SD3_CD), | ||
1521 | PINMUX_IPSR_DATA(IP11_17_15, MMC1_D4), | ||
1522 | PINMUX_IPSR_MODSEL_DATA(IP11_17_15, TS_SDAT1, SEL_TSIF1_0), | ||
1523 | PINMUX_IPSR_DATA(IP11_17_15, VSP), | ||
1524 | PINMUX_IPSR_MODSEL_DATA(IP11_17_15, GLO_Q0, SEL_GPS_0), | ||
1525 | PINMUX_IPSR_MODSEL_DATA(IP11_17_15, SIM0_RST_B, SEL_SIM_1), | ||
1526 | PINMUX_IPSR_DATA(IP11_21_18, SD3_WP), | ||
1527 | PINMUX_IPSR_DATA(IP11_21_18, MMC1_D5), | ||
1528 | PINMUX_IPSR_MODSEL_DATA(IP11_21_18, TS_SCK1, SEL_TSIF1_0), | ||
1529 | PINMUX_IPSR_MODSEL_DATA(IP11_21_18, GLO_Q1, SEL_GPS_0), | ||
1530 | PINMUX_IPSR_MODSEL_DATA(IP11_21_18, FMIN_C, SEL_FM_2), | ||
1531 | PINMUX_IPSR_MODSEL_DATA(IP11_21_18, RDS_DATA_B, SEL_RDS_1), | ||
1532 | PINMUX_IPSR_MODSEL_DATA(IP11_21_18, FMIN_E, SEL_FM_4), | ||
1533 | PINMUX_IPSR_MODSEL_DATA(IP11_21_18, RDS_DATA_D, SEL_RDS_3), | ||
1534 | PINMUX_IPSR_MODSEL_DATA(IP11_21_18, FMIN_F, SEL_FM_5), | ||
1535 | PINMUX_IPSR_MODSEL_DATA(IP11_21_18, RDS_DATA_E, SEL_RDS_4), | ||
1536 | PINMUX_IPSR_DATA(IP11_23_22, MLB_CLK), | ||
1537 | PINMUX_IPSR_MODSEL_DATA(IP11_23_22, SCL2_B, SEL_IIC2_1), | ||
1538 | PINMUX_IPSR_MODSEL_DATA(IP11_23_22, SCL2_CIS_B, SEL_I2C2_1), | ||
1539 | PINMUX_IPSR_DATA(IP11_26_24, MLB_SIG), | ||
1540 | PINMUX_IPSR_MODSEL_DATA(IP11_26_24, SCIFB1_RXD_D, SEL_SCIFB1_3), | ||
1541 | PINMUX_IPSR_MODSEL_DATA(IP11_26_24, RX1_C, SEL_SCIF1_2), | ||
1542 | PINMUX_IPSR_MODSEL_DATA(IP11_26_24, SDA2_B, SEL_IIC2_1), | ||
1543 | PINMUX_IPSR_MODSEL_DATA(IP11_26_24, SDA2_CIS_B, SEL_I2C2_1), | ||
1544 | PINMUX_IPSR_DATA(IP11_29_27, MLB_DAT), | ||
1545 | PINMUX_IPSR_DATA(IP11_29_27, SPV_EVEN), | ||
1546 | PINMUX_IPSR_MODSEL_DATA(IP11_29_27, SCIFB1_TXD_D, SEL_SCIFB1_3), | ||
1547 | PINMUX_IPSR_MODSEL_DATA(IP11_29_27, TX1_C, SEL_SCIF1_2), | ||
1548 | PINMUX_IPSR_MODSEL_DATA(IP11_29_27, BPFCLK_C, SEL_FM_2), | ||
1549 | PINMUX_IPSR_MODSEL_DATA(IP11_29_27, RDS_CLK_B, SEL_RDS_1), | ||
1550 | PINMUX_IPSR_DATA(IP11_31_30, SSI_SCK0129), | ||
1551 | PINMUX_IPSR_MODSEL_DATA(IP11_31_30, CAN_CLK_B, SEL_CANCLK_1), | ||
1552 | PINMUX_IPSR_DATA(IP11_31_30, MOUT0), | ||
1553 | |||
1554 | PINMUX_IPSR_DATA(IP12_1_0, SSI_WS0129), | ||
1555 | PINMUX_IPSR_MODSEL_DATA(IP12_1_0, CAN0_TX_B, SEL_CAN0_1), | ||
1556 | PINMUX_IPSR_DATA(IP12_1_0, MOUT1), | ||
1557 | PINMUX_IPSR_DATA(IP12_3_2, SSI_SDATA0), | ||
1558 | PINMUX_IPSR_MODSEL_DATA(IP12_3_2, CAN0_RX_B, SEL_CAN0_1), | ||
1559 | PINMUX_IPSR_DATA(IP12_3_2, MOUT2), | ||
1560 | PINMUX_IPSR_DATA(IP12_5_4, SSI_SDATA1), | ||
1561 | PINMUX_IPSR_MODSEL_DATA(IP12_5_4, CAN1_TX_B, SEL_CAN1_1), | ||
1562 | PINMUX_IPSR_DATA(IP12_5_4, MOUT5), | ||
1563 | PINMUX_IPSR_DATA(IP12_7_6, SSI_SDATA2), | ||
1564 | PINMUX_IPSR_MODSEL_DATA(IP12_7_6, CAN1_RX_B, SEL_CAN1_1), | ||
1565 | PINMUX_IPSR_MODSEL_DATA(IP12_7_6, CAN1_TX_B, SEL_CAN1_1), | ||
1566 | PINMUX_IPSR_DATA(IP12_7_6, MOUT6), | ||
1567 | PINMUX_IPSR_DATA(IP12_10_8, SSI_SCK34), | ||
1568 | PINMUX_IPSR_DATA(IP12_10_8, STP_OPWM_0), | ||
1569 | PINMUX_IPSR_MODSEL_DATA(IP12_10_8, SCIFB0_SCK, SEL_SCIFB_0), | ||
1570 | PINMUX_IPSR_MODSEL_DATA(IP12_10_8, MSIOF1_SCK, SEL_SOF1_0), | ||
1571 | PINMUX_IPSR_DATA(IP12_10_8, CAN_DEBUG_HW_TRIGGER), | ||
1572 | PINMUX_IPSR_DATA(IP12_13_11, SSI_WS34), | ||
1573 | PINMUX_IPSR_MODSEL_DATA(IP12_13_11, STP_IVCXO27_0, SEL_SSP_0), | ||
1574 | PINMUX_IPSR_MODSEL_DATA(IP12_13_11, SCIFB0_RXD, SEL_SCIFB_0), | ||
1575 | PINMUX_IPSR_DATA(IP12_13_11, MSIOF1_SYNC), | ||
1576 | PINMUX_IPSR_DATA(IP12_13_11, CAN_STEP0), | ||
1577 | PINMUX_IPSR_DATA(IP12_16_14, SSI_SDATA3), | ||
1578 | PINMUX_IPSR_MODSEL_DATA(IP12_16_14, STP_ISCLK_0, SEL_SSP_0), | ||
1579 | PINMUX_IPSR_MODSEL_DATA(IP12_16_14, SCIFB0_TXD, SEL_SCIFB_0), | ||
1580 | PINMUX_IPSR_MODSEL_DATA(IP12_16_14, MSIOF1_SS1, SEL_SOF1_0), | ||
1581 | PINMUX_IPSR_DATA(IP12_16_14, CAN_TXCLK), | ||
1582 | PINMUX_IPSR_DATA(IP12_19_17, SSI_SCK4), | ||
1583 | PINMUX_IPSR_MODSEL_DATA(IP12_19_17, STP_ISD_0, SEL_SSP_0), | ||
1584 | PINMUX_IPSR_MODSEL_DATA(IP12_19_17, SCIFB0_CTS_N, SEL_SCIFB_0), | ||
1585 | PINMUX_IPSR_MODSEL_DATA(IP12_19_17, MSIOF1_SS2, SEL_SOF1_0), | ||
1586 | PINMUX_IPSR_MODSEL_DATA(IP12_19_17, SSI_SCK5_C, SEL_SSI5_2), | ||
1587 | PINMUX_IPSR_DATA(IP12_19_17, CAN_DEBUGOUT0), | ||
1588 | PINMUX_IPSR_DATA(IP12_22_20, SSI_WS4), | ||
1589 | PINMUX_IPSR_MODSEL_DATA(IP12_22_20, STP_ISEN_0, SEL_SSP_0), | ||
1590 | PINMUX_IPSR_MODSEL_DATA(IP12_22_20, SCIFB0_RTS_N, SEL_SCIFB_0), | ||
1591 | PINMUX_IPSR_MODSEL_DATA(IP12_22_20, MSIOF1_TXD, SEL_SOF1_0), | ||
1592 | PINMUX_IPSR_MODSEL_DATA(IP12_22_20, SSI_WS5_C, SEL_SSI5_2), | ||
1593 | PINMUX_IPSR_DATA(IP12_22_20, CAN_DEBUGOUT1), | ||
1594 | PINMUX_IPSR_DATA(IP12_24_23, SSI_SDATA4), | ||
1595 | PINMUX_IPSR_MODSEL_DATA(IP12_24_23, STP_ISSYNC_0, SEL_SSP_0), | ||
1596 | PINMUX_IPSR_MODSEL_DATA(IP12_24_23, MSIOF1_RXD, SEL_SOF1_0), | ||
1597 | PINMUX_IPSR_DATA(IP12_24_23, CAN_DEBUGOUT2), | ||
1598 | PINMUX_IPSR_MODSEL_DATA(IP12_27_25, SSI_SCK5, SEL_SSI5_0), | ||
1599 | PINMUX_IPSR_MODSEL_DATA(IP12_27_25, SCIFB1_SCK, SEL_SCIFB1_0), | ||
1600 | PINMUX_IPSR_MODSEL_DATA(IP12_27_25, IERX_B, SEL_IEB_1), | ||
1601 | PINMUX_IPSR_DATA(IP12_27_25, DU2_EXHSYNC_DU2_HSYNC), | ||
1602 | PINMUX_IPSR_DATA(IP12_27_25, QSTH_QHS), | ||
1603 | PINMUX_IPSR_DATA(IP12_27_25, CAN_DEBUGOUT3), | ||
1604 | PINMUX_IPSR_MODSEL_DATA(IP12_30_28, SSI_WS5, SEL_SSI5_0), | ||
1605 | PINMUX_IPSR_MODSEL_DATA(IP12_30_28, SCIFB1_RXD, SEL_SCIFB1_0), | ||
1606 | PINMUX_IPSR_MODSEL_DATA(IP12_30_28, IECLK_B, SEL_IEB_1), | ||
1607 | PINMUX_IPSR_DATA(IP12_30_28, DU2_EXVSYNC_DU2_VSYNC), | ||
1608 | PINMUX_IPSR_DATA(IP12_30_28, QSTB_QHE), | ||
1609 | PINMUX_IPSR_DATA(IP12_30_28, CAN_DEBUGOUT4), | ||
1610 | |||
1611 | PINMUX_IPSR_MODSEL_DATA(IP13_2_0, SSI_SDATA5, SEL_SSI5_0), | ||
1612 | PINMUX_IPSR_MODSEL_DATA(IP13_2_0, SCIFB1_TXD, SEL_SCIFB1_0), | ||
1613 | PINMUX_IPSR_MODSEL_DATA(IP13_2_0, IETX_B, SEL_IEB_1), | ||
1614 | PINMUX_IPSR_DATA(IP13_2_0, DU2_DR2), | ||
1615 | PINMUX_IPSR_DATA(IP13_2_0, LCDOUT2), | ||
1616 | PINMUX_IPSR_DATA(IP13_2_0, CAN_DEBUGOUT5), | ||
1617 | PINMUX_IPSR_MODSEL_DATA(IP13_6_3, SSI_SCK6, SEL_SSI6_0), | ||
1618 | PINMUX_IPSR_MODSEL_DATA(IP13_6_3, SCIFB1_CTS_N, SEL_SCIFB1_0), | ||
1619 | PINMUX_IPSR_MODSEL_DATA(IP13_6_3, BPFCLK_D, SEL_FM_3), | ||
1620 | PINMUX_IPSR_MODSEL_DATA(IP13_6_3, RDS_CLK_C, SEL_RDS_2), | ||
1621 | PINMUX_IPSR_DATA(IP13_6_3, DU2_DR3), | ||
1622 | PINMUX_IPSR_DATA(IP13_6_3, LCDOUT3), | ||
1623 | PINMUX_IPSR_DATA(IP13_6_3, CAN_DEBUGOUT6), | ||
1624 | PINMUX_IPSR_MODSEL_DATA(IP13_6_3, BPFCLK_F, SEL_FM_5), | ||
1625 | PINMUX_IPSR_MODSEL_DATA(IP13_6_3, RDS_CLK_E, SEL_RDS_4), | ||
1626 | PINMUX_IPSR_MODSEL_DATA(IP13_9_7, SSI_WS6, SEL_SSI6_0), | ||
1627 | PINMUX_IPSR_MODSEL_DATA(IP13_9_7, SCIFB1_RTS_N, SEL_SCIFB1_0), | ||
1628 | PINMUX_IPSR_MODSEL_DATA(IP13_9_7, CAN0_TX_D, SEL_CAN0_3), | ||
1629 | PINMUX_IPSR_DATA(IP13_9_7, DU2_DR4), | ||
1630 | PINMUX_IPSR_DATA(IP13_9_7, LCDOUT4), | ||
1631 | PINMUX_IPSR_DATA(IP13_9_7, CAN_DEBUGOUT7), | ||
1632 | PINMUX_IPSR_MODSEL_DATA(IP13_12_10, SSI_SDATA6, SEL_SSI6_0), | ||
1633 | PINMUX_IPSR_MODSEL_DATA(IP13_12_10, FMIN_D, SEL_FM_3), | ||
1634 | PINMUX_IPSR_MODSEL_DATA(IP13_12_10, RDS_DATA_C, SEL_RDS_2), | ||
1635 | PINMUX_IPSR_DATA(IP13_12_10, DU2_DR5), | ||
1636 | PINMUX_IPSR_DATA(IP13_12_10, LCDOUT5), | ||
1637 | PINMUX_IPSR_DATA(IP13_12_10, CAN_DEBUGOUT8), | ||
1638 | PINMUX_IPSR_MODSEL_DATA(IP13_15_13, SSI_SCK78, SEL_SSI7_0), | ||
1639 | PINMUX_IPSR_MODSEL_DATA(IP13_15_13, STP_IVCXO27_1, SEL_SSP_0), | ||
1640 | PINMUX_IPSR_MODSEL_DATA(IP13_15_13, SCK1, SEL_SCIF1_0), | ||
1641 | PINMUX_IPSR_MODSEL_DATA(IP13_15_13, SCIFA1_SCK, SEL_SCIFA1_0), | ||
1642 | PINMUX_IPSR_DATA(IP13_15_13, DU2_DR6), | ||
1643 | PINMUX_IPSR_DATA(IP13_15_13, LCDOUT6), | ||
1644 | PINMUX_IPSR_DATA(IP13_15_13, CAN_DEBUGOUT9), | ||
1645 | PINMUX_IPSR_MODSEL_DATA(IP13_18_16, SSI_WS78, SEL_SSI7_0), | ||
1646 | PINMUX_IPSR_MODSEL_DATA(IP13_18_16, STP_ISCLK_1, SEL_SSP_0), | ||
1647 | PINMUX_IPSR_MODSEL_DATA(IP13_18_16, SCIFB2_SCK, SEL_SCIFB2_0), | ||
1648 | PINMUX_IPSR_DATA(IP13_18_16, SCIFA2_CTS_N), | ||
1649 | PINMUX_IPSR_DATA(IP13_18_16, DU2_DR7), | ||
1650 | PINMUX_IPSR_DATA(IP13_18_16, LCDOUT7), | ||
1651 | PINMUX_IPSR_DATA(IP13_18_16, CAN_DEBUGOUT10), | ||
1652 | PINMUX_IPSR_MODSEL_DATA(IP13_22_19, SSI_SDATA7, SEL_SSI7_0), | ||
1653 | PINMUX_IPSR_MODSEL_DATA(IP13_22_19, STP_ISD_1, SEL_SSP_0), | ||
1654 | PINMUX_IPSR_MODSEL_DATA(IP13_22_19, SCIFB2_RXD, SEL_SCIFB2_0), | ||
1655 | PINMUX_IPSR_DATA(IP13_22_19, SCIFA2_RTS_N), | ||
1656 | PINMUX_IPSR_DATA(IP13_22_19, TCLK2), | ||
1657 | PINMUX_IPSR_DATA(IP13_22_19, QSTVA_QVS), | ||
1658 | PINMUX_IPSR_DATA(IP13_22_19, CAN_DEBUGOUT11), | ||
1659 | PINMUX_IPSR_MODSEL_DATA(IP13_22_19, BPFCLK_E, SEL_FM_4), | ||
1660 | PINMUX_IPSR_MODSEL_DATA(IP13_22_19, RDS_CLK_D, SEL_RDS_3), | ||
1661 | PINMUX_IPSR_MODSEL_DATA(IP13_22_19, SSI_SDATA7_B, SEL_SSI7_1), | ||
1662 | PINMUX_IPSR_MODSEL_DATA(IP13_22_19, FMIN_G, SEL_FM_6), | ||
1663 | PINMUX_IPSR_MODSEL_DATA(IP13_22_19, RDS_DATA_F, SEL_RDS_5), | ||
1664 | PINMUX_IPSR_MODSEL_DATA(IP13_25_23, SSI_SDATA8, SEL_SSI8_0), | ||
1665 | PINMUX_IPSR_MODSEL_DATA(IP13_25_23, STP_ISEN_1, SEL_SSP_0), | ||
1666 | PINMUX_IPSR_MODSEL_DATA(IP13_25_23, SCIFB2_TXD, SEL_SCIFB2_0), | ||
1667 | PINMUX_IPSR_MODSEL_DATA(IP13_25_23, CAN0_TX_C, SEL_CAN0_2), | ||
1668 | PINMUX_IPSR_DATA(IP13_25_23, CAN_DEBUGOUT12), | ||
1669 | PINMUX_IPSR_MODSEL_DATA(IP13_25_23, SSI_SDATA8_B, SEL_SSI8_1), | ||
1670 | PINMUX_IPSR_DATA(IP13_28_26, SSI_SDATA9), | ||
1671 | PINMUX_IPSR_MODSEL_DATA(IP13_28_26, STP_ISSYNC_1, SEL_SSP_0), | ||
1672 | PINMUX_IPSR_MODSEL_DATA(IP13_28_26, SCIFB2_CTS_N, SEL_SCIFB2_0), | ||
1673 | PINMUX_IPSR_DATA(IP13_28_26, SSI_WS1), | ||
1674 | PINMUX_IPSR_MODSEL_DATA(IP13_28_26, SSI_SDATA5_C, SEL_SSI5_2), | ||
1675 | PINMUX_IPSR_DATA(IP13_28_26, CAN_DEBUGOUT13), | ||
1676 | PINMUX_IPSR_DATA(IP13_30_29, AUDIO_CLKA), | ||
1677 | PINMUX_IPSR_MODSEL_DATA(IP13_30_29, SCIFB2_RTS_N, SEL_SCIFB2_0), | ||
1678 | PINMUX_IPSR_DATA(IP13_30_29, CAN_DEBUGOUT14), | ||
1679 | |||
1680 | PINMUX_IPSR_DATA(IP14_2_0, AUDIO_CLKB), | ||
1681 | PINMUX_IPSR_MODSEL_DATA(IP14_2_0, SCIF_CLK, SEL_SCIFCLK_0), | ||
1682 | PINMUX_IPSR_MODSEL_DATA(IP14_2_0, CAN0_RX_D, SEL_CAN0_3), | ||
1683 | PINMUX_IPSR_DATA(IP14_2_0, DVC_MUTE), | ||
1684 | PINMUX_IPSR_MODSEL_DATA(IP14_2_0, CAN0_RX_C, SEL_CAN0_2), | ||
1685 | PINMUX_IPSR_DATA(IP14_2_0, CAN_DEBUGOUT15), | ||
1686 | PINMUX_IPSR_DATA(IP14_2_0, REMOCON), | ||
1687 | PINMUX_IPSR_MODSEL_DATA(IP14_5_3, SCIFA0_SCK, SEL_SCFA_0), | ||
1688 | PINMUX_IPSR_MODSEL_DATA(IP14_5_3, HSCK1, SEL_HSCIF1_0), | ||
1689 | PINMUX_IPSR_DATA(IP14_5_3, SCK0), | ||
1690 | PINMUX_IPSR_DATA(IP14_5_3, MSIOF3_SS2), | ||
1691 | PINMUX_IPSR_DATA(IP14_5_3, DU2_DG2), | ||
1692 | PINMUX_IPSR_DATA(IP14_5_3, LCDOUT10), | ||
1693 | PINMUX_IPSR_MODSEL_DATA(IP14_5_3, SDA1_C, SEL_IIC1_2), | ||
1694 | PINMUX_IPSR_MODSEL_DATA(IP14_5_3, SDA1_CIS_C, SEL_I2C1_2), | ||
1695 | PINMUX_IPSR_MODSEL_DATA(IP14_8_6, SCIFA0_RXD, SEL_SCFA_0), | ||
1696 | PINMUX_IPSR_MODSEL_DATA(IP14_8_6, HRX1, SEL_HSCIF1_0), | ||
1697 | PINMUX_IPSR_MODSEL_DATA(IP14_8_6, RX0, SEL_SCIF0_0), | ||
1698 | PINMUX_IPSR_DATA(IP14_8_6, DU2_DR0), | ||
1699 | PINMUX_IPSR_DATA(IP14_8_6, LCDOUT0), | ||
1700 | PINMUX_IPSR_MODSEL_DATA(IP14_11_9, SCIFA0_TXD, SEL_SCFA_0), | ||
1701 | PINMUX_IPSR_MODSEL_DATA(IP14_11_9, HTX1, SEL_HSCIF1_0), | ||
1702 | PINMUX_IPSR_MODSEL_DATA(IP14_11_9, TX0, SEL_SCIF0_0), | ||
1703 | PINMUX_IPSR_DATA(IP14_11_9, DU2_DR1), | ||
1704 | PINMUX_IPSR_DATA(IP14_11_9, LCDOUT1), | ||
1705 | PINMUX_IPSR_MODSEL_DATA(IP14_15_12, SCIFA0_CTS_N, SEL_SCFA_0), | ||
1706 | PINMUX_IPSR_MODSEL_DATA(IP14_15_12, HCTS1_N, SEL_HSCIF1_0), | ||
1707 | PINMUX_IPSR_MODSEL_DATA(IP14_15_12, CTS0_N, SEL_SCIF0_0), | ||
1708 | PINMUX_IPSR_MODSEL_DATA(IP14_15_12, MSIOF3_SYNC, SEL_SOF3_0), | ||
1709 | PINMUX_IPSR_DATA(IP14_15_12, DU2_DG3), | ||
1710 | PINMUX_IPSR_MODSEL_DATA(IP14_15_12, LCDOUT11, SEL_HSCIF1_0), | ||
1711 | PINMUX_IPSR_MODSEL_DATA(IP14_15_12, PWM0_B, SEL_SCIF0_0), | ||
1712 | PINMUX_IPSR_MODSEL_DATA(IP14_15_12, SCL1_C, SEL_IIC1_2), | ||
1713 | PINMUX_IPSR_MODSEL_DATA(IP14_15_12, SCL1_CIS_C, SEL_I2C1_2), | ||
1714 | PINMUX_IPSR_MODSEL_DATA(IP14_18_16, SCIFA0_RTS_N, SEL_SCFA_0), | ||
1715 | PINMUX_IPSR_MODSEL_DATA(IP14_18_16, HRTS1_N, SEL_HSCIF1_0), | ||
1716 | PINMUX_IPSR_DATA(IP14_18_16, RTS0_N_TANS), | ||
1717 | PINMUX_IPSR_DATA(IP14_18_16, MSIOF3_SS1), | ||
1718 | PINMUX_IPSR_DATA(IP14_18_16, DU2_DG0), | ||
1719 | PINMUX_IPSR_DATA(IP14_18_16, LCDOUT8), | ||
1720 | PINMUX_IPSR_DATA(IP14_18_16, PWM1_B), | ||
1721 | PINMUX_IPSR_MODSEL_DATA(IP14_21_19, SCIFA1_RXD, SEL_SCIFA1_0), | ||
1722 | PINMUX_IPSR_MODSEL_DATA(IP14_21_19, AD_DI, SEL_ADI_0), | ||
1723 | PINMUX_IPSR_MODSEL_DATA(IP14_21_19, RX1, SEL_SCIF1_0), | ||
1724 | PINMUX_IPSR_DATA(IP14_21_19, DU2_EXODDF_DU2_ODDF_DISP_CDE), | ||
1725 | PINMUX_IPSR_DATA(IP14_21_19, QCPV_QDE), | ||
1726 | PINMUX_IPSR_MODSEL_DATA(IP14_24_22, SCIFA1_TXD, SEL_SCIFA1_0), | ||
1727 | PINMUX_IPSR_MODSEL_DATA(IP14_24_22, AD_DO, SEL_ADI_0), | ||
1728 | PINMUX_IPSR_MODSEL_DATA(IP14_24_22, TX1, SEL_SCIF1_0), | ||
1729 | PINMUX_IPSR_DATA(IP14_24_22, DU2_DG1), | ||
1730 | PINMUX_IPSR_DATA(IP14_24_22, LCDOUT9), | ||
1731 | PINMUX_IPSR_MODSEL_DATA(IP14_27_25, SCIFA1_CTS_N, SEL_SCIFA1_0), | ||
1732 | PINMUX_IPSR_MODSEL_DATA(IP14_27_25, AD_CLK, SEL_ADI_0), | ||
1733 | PINMUX_IPSR_DATA(IP14_27_25, CTS1_N), | ||
1734 | PINMUX_IPSR_MODSEL_DATA(IP14_27_25, MSIOF3_RXD, SEL_SOF3_0), | ||
1735 | PINMUX_IPSR_DATA(IP14_27_25, DU0_DOTCLKOUT), | ||
1736 | PINMUX_IPSR_DATA(IP14_27_25, QCLK), | ||
1737 | PINMUX_IPSR_MODSEL_DATA(IP14_30_28, SCIFA1_RTS_N, SEL_SCIFA1_0), | ||
1738 | PINMUX_IPSR_MODSEL_DATA(IP14_30_28, AD_NCS_N, SEL_ADI_0), | ||
1739 | PINMUX_IPSR_DATA(IP14_30_28, RTS1_N_TANS), | ||
1740 | PINMUX_IPSR_MODSEL_DATA(IP14_30_28, MSIOF3_TXD, SEL_SOF3_0), | ||
1741 | PINMUX_IPSR_DATA(IP14_30_28, DU1_DOTCLKOUT), | ||
1742 | PINMUX_IPSR_DATA(IP14_30_28, QSTVB_QVE), | ||
1743 | PINMUX_IPSR_MODSEL_DATA(IP14_30_28, HRTS0_N_C, SEL_HSCIF0_2), | ||
1744 | |||
1745 | PINMUX_IPSR_MODSEL_DATA(IP15_2_0, SCIFA2_SCK, SEL_SCIFA2_0), | ||
1746 | PINMUX_IPSR_MODSEL_DATA(IP15_2_0, FMCLK, SEL_FM_0), | ||
1747 | PINMUX_IPSR_MODSEL_DATA(IP15_2_0, MSIOF3_SCK, SEL_SOF3_0), | ||
1748 | PINMUX_IPSR_DATA(IP15_2_0, DU2_DG7), | ||
1749 | PINMUX_IPSR_DATA(IP15_2_0, LCDOUT15), | ||
1750 | PINMUX_IPSR_MODSEL_DATA(IP15_2_0, SCIF_CLK_B, SEL_SCIFCLK_0), | ||
1751 | PINMUX_IPSR_MODSEL_DATA(IP15_5_3, SCIFA2_RXD, SEL_SCIFA2_0), | ||
1752 | PINMUX_IPSR_MODSEL_DATA(IP15_5_3, FMIN, SEL_FM_0), | ||
1753 | PINMUX_IPSR_DATA(IP15_5_3, DU2_DB0), | ||
1754 | PINMUX_IPSR_DATA(IP15_5_3, LCDOUT16), | ||
1755 | PINMUX_IPSR_MODSEL_DATA(IP15_5_3, SCL2, SEL_IIC2_0), | ||
1756 | PINMUX_IPSR_MODSEL_DATA(IP15_5_3, SCL2_CIS, SEL_I2C2_0), | ||
1757 | PINMUX_IPSR_MODSEL_DATA(IP15_8_6, SCIFA2_TXD, SEL_SCIFA2_0), | ||
1758 | PINMUX_IPSR_MODSEL_DATA(IP15_8_6, BPFCLK, SEL_FM_0), | ||
1759 | PINMUX_IPSR_DATA(IP15_8_6, DU2_DB1), | ||
1760 | PINMUX_IPSR_DATA(IP15_8_6, LCDOUT17), | ||
1761 | PINMUX_IPSR_MODSEL_DATA(IP15_8_6, SDA2, SEL_IIC2_0), | ||
1762 | PINMUX_IPSR_MODSEL_DATA(IP15_8_6, SDA2_CIS, SEL_I2C2_0), | ||
1763 | PINMUX_IPSR_DATA(IP15_11_9, HSCK0), | ||
1764 | PINMUX_IPSR_MODSEL_DATA(IP15_11_9, TS_SDEN0, SEL_TSIF0_0), | ||
1765 | PINMUX_IPSR_DATA(IP15_11_9, DU2_DG4), | ||
1766 | PINMUX_IPSR_DATA(IP15_11_9, LCDOUT12), | ||
1767 | PINMUX_IPSR_MODSEL_DATA(IP15_11_9, HCTS0_N_C, SEL_IIC2_0), | ||
1768 | PINMUX_IPSR_MODSEL_DATA(IP15_11_9, SDA2_CIS, SEL_I2C2_0), | ||
1769 | PINMUX_IPSR_MODSEL_DATA(IP15_13_12, HRX0, SEL_HSCIF0_0), | ||
1770 | PINMUX_IPSR_DATA(IP15_13_12, DU2_DB2), | ||
1771 | PINMUX_IPSR_DATA(IP15_13_12, LCDOUT18), | ||
1772 | PINMUX_IPSR_MODSEL_DATA(IP15_15_14, HTX0, SEL_HSCIF0_0), | ||
1773 | PINMUX_IPSR_DATA(IP15_15_14, DU2_DB3), | ||
1774 | PINMUX_IPSR_DATA(IP15_15_14, LCDOUT19), | ||
1775 | PINMUX_IPSR_MODSEL_DATA(IP15_17_16, HCTS0_N, SEL_HSCIF0_0), | ||
1776 | PINMUX_IPSR_DATA(IP15_17_16, SSI_SCK9), | ||
1777 | PINMUX_IPSR_DATA(IP15_17_16, DU2_DB4), | ||
1778 | PINMUX_IPSR_DATA(IP15_17_16, LCDOUT20), | ||
1779 | PINMUX_IPSR_MODSEL_DATA(IP15_19_18, HRTS0_N, SEL_HSCIF0_0), | ||
1780 | PINMUX_IPSR_DATA(IP15_19_18, SSI_WS9), | ||
1781 | PINMUX_IPSR_DATA(IP15_19_18, DU2_DB5), | ||
1782 | PINMUX_IPSR_DATA(IP15_19_18, LCDOUT21), | ||
1783 | PINMUX_IPSR_MODSEL_DATA(IP15_22_20, MSIOF0_SCK, SEL_SOF0_0), | ||
1784 | PINMUX_IPSR_MODSEL_DATA(IP15_22_20, TS_SDAT0, SEL_TSIF0_0), | ||
1785 | PINMUX_IPSR_DATA(IP15_22_20, ADICLK), | ||
1786 | PINMUX_IPSR_DATA(IP15_22_20, DU2_DB6), | ||
1787 | PINMUX_IPSR_DATA(IP15_22_20, LCDOUT22), | ||
1788 | PINMUX_IPSR_DATA(IP15_25_23, MSIOF0_SYNC), | ||
1789 | PINMUX_IPSR_MODSEL_DATA(IP15_25_23, TS_SCK0, SEL_TSIF0_0), | ||
1790 | PINMUX_IPSR_DATA(IP15_25_23, SSI_SCK2), | ||
1791 | PINMUX_IPSR_DATA(IP15_25_23, ADIDATA), | ||
1792 | PINMUX_IPSR_DATA(IP15_25_23, DU2_DB7), | ||
1793 | PINMUX_IPSR_DATA(IP15_25_23, LCDOUT23), | ||
1794 | PINMUX_IPSR_MODSEL_DATA(IP15_25_23, SCIFA2_RXD_B, SEL_SCIFA2_1), | ||
1795 | PINMUX_IPSR_MODSEL_DATA(IP15_27_26, MSIOF0_SS1, SEL_SOF0_0), | ||
1796 | PINMUX_IPSR_DATA(IP15_27_26, ADICHS0), | ||
1797 | PINMUX_IPSR_DATA(IP15_27_26, DU2_DG5), | ||
1798 | PINMUX_IPSR_DATA(IP15_27_26, LCDOUT13), | ||
1799 | PINMUX_IPSR_MODSEL_DATA(IP15_29_28, MSIOF0_TXD, SEL_SOF0_0), | ||
1800 | PINMUX_IPSR_DATA(IP15_29_28, ADICHS1), | ||
1801 | PINMUX_IPSR_DATA(IP15_29_28, DU2_DG6), | ||
1802 | PINMUX_IPSR_DATA(IP15_29_28, LCDOUT14), | ||
1803 | |||
1804 | PINMUX_IPSR_MODSEL_DATA(IP16_2_0, MSIOF0_SS2, SEL_SOF0_0), | ||
1805 | PINMUX_IPSR_DATA(IP16_2_0, AUDIO_CLKOUT), | ||
1806 | PINMUX_IPSR_DATA(IP16_2_0, ADICHS2), | ||
1807 | PINMUX_IPSR_DATA(IP16_2_0, DU2_DISP), | ||
1808 | PINMUX_IPSR_DATA(IP16_2_0, QPOLA), | ||
1809 | PINMUX_IPSR_MODSEL_DATA(IP16_2_0, HTX0_C, SEL_HSCIF0_2), | ||
1810 | PINMUX_IPSR_MODSEL_DATA(IP16_2_0, SCIFA2_TXD_B, SEL_SCIFA2_1), | ||
1811 | PINMUX_IPSR_MODSEL_DATA(IP16_5_3, MSIOF0_RXD, SEL_SOF0_0), | ||
1812 | PINMUX_IPSR_MODSEL_DATA(IP16_5_3, TS_SPSYNC0, SEL_TSIF0_0), | ||
1813 | PINMUX_IPSR_DATA(IP16_5_3, SSI_WS2), | ||
1814 | PINMUX_IPSR_DATA(IP16_5_3, ADICS_SAMP), | ||
1815 | PINMUX_IPSR_DATA(IP16_5_3, DU2_CDE), | ||
1816 | PINMUX_IPSR_DATA(IP16_5_3, QPOLB), | ||
1817 | PINMUX_IPSR_MODSEL_DATA(IP16_5_3, HRX0_C, SEL_HSCIF0_2), | ||
1818 | PINMUX_IPSR_DATA(IP16_6, USB1_PWEN), | ||
1819 | PINMUX_IPSR_DATA(IP16_6, AUDIO_CLKOUT_D), | ||
1820 | PINMUX_IPSR_DATA(IP16_7, USB1_OVC), | ||
1821 | PINMUX_IPSR_MODSEL_DATA(IP16_7, TCLK1_B, SEL_TMU1_1), | ||
1822 | }; | ||
1823 | |||
1824 | static struct sh_pfc_pin pinmux_pins[] = { | ||
1825 | PINMUX_GPIO_GP_ALL(), | ||
1826 | }; | ||
1827 | |||
1828 | /* - ETH -------------------------------------------------------------------- */ | ||
1829 | static const unsigned int eth_link_pins[] = { | ||
1830 | /* LINK */ | ||
1831 | RCAR_GP_PIN(2, 22), | ||
1832 | }; | ||
1833 | static const unsigned int eth_link_mux[] = { | ||
1834 | ETH_LINK_MARK, | ||
1835 | }; | ||
1836 | static const unsigned int eth_magic_pins[] = { | ||
1837 | /* MAGIC */ | ||
1838 | RCAR_GP_PIN(2, 27), | ||
1839 | }; | ||
1840 | static const unsigned int eth_magic_mux[] = { | ||
1841 | ETH_MAGIC_MARK, | ||
1842 | }; | ||
1843 | static const unsigned int eth_mdio_pins[] = { | ||
1844 | /* MDC, MDIO */ | ||
1845 | RCAR_GP_PIN(2, 29), RCAR_GP_PIN(2, 24), | ||
1846 | }; | ||
1847 | static const unsigned int eth_mdio_mux[] = { | ||
1848 | ETH_MDC_MARK, ETH_MDIO_MARK, | ||
1849 | }; | ||
1850 | static const unsigned int eth_rmii_pins[] = { | ||
1851 | /* RXD[0:1], RX_ER, CRS_DV, TXD[0:1], TX_EN, REF_CLK */ | ||
1852 | RCAR_GP_PIN(2, 20), RCAR_GP_PIN(2, 21), RCAR_GP_PIN(2, 19), | ||
1853 | RCAR_GP_PIN(2, 18), RCAR_GP_PIN(2, 28), RCAR_GP_PIN(2, 25), | ||
1854 | RCAR_GP_PIN(2, 26), RCAR_GP_PIN(2, 23), | ||
1855 | }; | ||
1856 | static const unsigned int eth_rmii_mux[] = { | ||
1857 | ETH_RXD0_MARK, ETH_RXD1_MARK, ETH_RX_ER_MARK, ETH_CRS_DV_MARK, | ||
1858 | ETH_TXD0_MARK, ETH_TXD1_MARK, ETH_TX_EN_MARK, ETH_REF_CLK_MARK, | ||
1859 | }; | ||
1860 | /* - INTC ------------------------------------------------------------------- */ | ||
1861 | static const unsigned int intc_irq0_pins[] = { | ||
1862 | /* IRQ */ | ||
1863 | RCAR_GP_PIN(1, 25), | ||
1864 | }; | ||
1865 | static const unsigned int intc_irq0_mux[] = { | ||
1866 | IRQ0_MARK, | ||
1867 | }; | ||
1868 | static const unsigned int intc_irq1_pins[] = { | ||
1869 | /* IRQ */ | ||
1870 | RCAR_GP_PIN(1, 27), | ||
1871 | }; | ||
1872 | static const unsigned int intc_irq1_mux[] = { | ||
1873 | IRQ1_MARK, | ||
1874 | }; | ||
1875 | static const unsigned int intc_irq2_pins[] = { | ||
1876 | /* IRQ */ | ||
1877 | RCAR_GP_PIN(1, 29), | ||
1878 | }; | ||
1879 | static const unsigned int intc_irq2_mux[] = { | ||
1880 | IRQ2_MARK, | ||
1881 | }; | ||
1882 | static const unsigned int intc_irq3_pins[] = { | ||
1883 | /* IRQ */ | ||
1884 | RCAR_GP_PIN(1, 23), | ||
1885 | }; | ||
1886 | static const unsigned int intc_irq3_mux[] = { | ||
1887 | IRQ3_MARK, | ||
1888 | }; | ||
1889 | /* - SCIF0 ----------------------------------------------------------------- */ | ||
1890 | static const unsigned int scif0_data_pins[] = { | ||
1891 | /* RX, TX */ | ||
1892 | RCAR_GP_PIN(4, 28), RCAR_GP_PIN(4, 29), | ||
1893 | }; | ||
1894 | static const unsigned int scif0_data_mux[] = { | ||
1895 | RX0_MARK, TX0_MARK, | ||
1896 | }; | ||
1897 | static const unsigned int scif0_clk_pins[] = { | ||
1898 | /* SCK */ | ||
1899 | RCAR_GP_PIN(4, 27), | ||
1900 | }; | ||
1901 | static const unsigned int scif0_clk_mux[] = { | ||
1902 | SCK0_MARK, | ||
1903 | }; | ||
1904 | static const unsigned int scif0_ctrl_pins[] = { | ||
1905 | /* RTS, CTS */ | ||
1906 | RCAR_GP_PIN(4, 31), RCAR_GP_PIN(4, 30), | ||
1907 | }; | ||
1908 | static const unsigned int scif0_ctrl_mux[] = { | ||
1909 | RTS0_N_TANS_MARK, CTS0_N_MARK, | ||
1910 | }; | ||
1911 | static const unsigned int scif0_data_b_pins[] = { | ||
1912 | /* RX, TX */ | ||
1913 | RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5), | ||
1914 | }; | ||
1915 | static const unsigned int scif0_data_b_mux[] = { | ||
1916 | RX0_B_MARK, TX0_B_MARK, | ||
1917 | }; | ||
1918 | /* - SCIF1 ----------------------------------------------------------------- */ | ||
1919 | static const unsigned int scif1_data_pins[] = { | ||
1920 | /* RX, TX */ | ||
1921 | RCAR_GP_PIN(5, 0), RCAR_GP_PIN(5, 1), | ||
1922 | }; | ||
1923 | static const unsigned int scif1_data_mux[] = { | ||
1924 | RX1_MARK, TX1_MARK, | ||
1925 | }; | ||
1926 | static const unsigned int scif1_clk_pins[] = { | ||
1927 | /* SCK */ | ||
1928 | RCAR_GP_PIN(4, 20), | ||
1929 | }; | ||
1930 | static const unsigned int scif1_clk_mux[] = { | ||
1931 | SCK1_MARK, | ||
1932 | }; | ||
1933 | static const unsigned int scif1_ctrl_pins[] = { | ||
1934 | /* RTS, CTS */ | ||
1935 | RCAR_GP_PIN(5, 3), RCAR_GP_PIN(5, 2), | ||
1936 | }; | ||
1937 | static const unsigned int scif1_ctrl_mux[] = { | ||
1938 | RTS1_N_TANS_MARK, CTS1_N_MARK, | ||
1939 | }; | ||
1940 | static const unsigned int scif1_data_b_pins[] = { | ||
1941 | /* RX, TX */ | ||
1942 | RCAR_GP_PIN(0, 14), RCAR_GP_PIN(0, 15), | ||
1943 | }; | ||
1944 | static const unsigned int scif1_data_b_mux[] = { | ||
1945 | RX1_B_MARK, TX1_B_MARK, | ||
1946 | }; | ||
1947 | static const unsigned int scif1_data_c_pins[] = { | ||
1948 | /* RX, TX */ | ||
1949 | RCAR_GP_PIN(4, 1), RCAR_GP_PIN(4, 2), | ||
1950 | }; | ||
1951 | static const unsigned int scif1_data_c_mux[] = { | ||
1952 | RX1_C_MARK, TX1_C_MARK, | ||
1953 | }; | ||
1954 | static const unsigned int scif1_data_d_pins[] = { | ||
1955 | /* RX, TX */ | ||
1956 | RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19), | ||
1957 | }; | ||
1958 | static const unsigned int scif1_data_d_mux[] = { | ||
1959 | RX1_D_MARK, TX1_D_MARK, | ||
1960 | }; | ||
1961 | static const unsigned int scif1_clk_d_pins[] = { | ||
1962 | /* SCK */ | ||
1963 | RCAR_GP_PIN(3, 17), | ||
1964 | }; | ||
1965 | static const unsigned int scif1_clk_d_mux[] = { | ||
1966 | SCK1_D_MARK, | ||
1967 | }; | ||
1968 | static const unsigned int scif1_data_e_pins[] = { | ||
1969 | /* RX, TX */ | ||
1970 | RCAR_GP_PIN(2, 21), RCAR_GP_PIN(2, 22), | ||
1971 | }; | ||
1972 | static const unsigned int scif1_data_e_mux[] = { | ||
1973 | RX1_E_MARK, TX1_E_MARK, | ||
1974 | }; | ||
1975 | static const unsigned int scif1_clk_e_pins[] = { | ||
1976 | /* SCK */ | ||
1977 | RCAR_GP_PIN(2, 20), | ||
1978 | }; | ||
1979 | static const unsigned int scif1_clk_e_mux[] = { | ||
1980 | SCK1_E_MARK, | ||
1981 | }; | ||
1982 | /* - SCIFA0 ----------------------------------------------------------------- */ | ||
1983 | static const unsigned int scifa0_data_pins[] = { | ||
1984 | /* RXD, TXD */ | ||
1985 | RCAR_GP_PIN(4, 28), RCAR_GP_PIN(4, 29), | ||
1986 | }; | ||
1987 | static const unsigned int scifa0_data_mux[] = { | ||
1988 | SCIFA0_RXD_MARK, SCIFA0_TXD_MARK, | ||
1989 | }; | ||
1990 | static const unsigned int scifa0_clk_pins[] = { | ||
1991 | /* SCK */ | ||
1992 | RCAR_GP_PIN(4, 27), | ||
1993 | }; | ||
1994 | static const unsigned int scifa0_clk_mux[] = { | ||
1995 | SCIFA0_SCK_MARK, | ||
1996 | }; | ||
1997 | static const unsigned int scifa0_ctrl_pins[] = { | ||
1998 | /* RTS, CTS */ | ||
1999 | RCAR_GP_PIN(4, 31), RCAR_GP_PIN(4, 30), | ||
2000 | }; | ||
2001 | static const unsigned int scifa0_ctrl_mux[] = { | ||
2002 | SCIFA0_RTS_N_MARK, SCIFA0_CTS_N_MARK, | ||
2003 | }; | ||
2004 | static const unsigned int scifa0_data_b_pins[] = { | ||
2005 | /* RXD, TXD */ | ||
2006 | RCAR_GP_PIN(1, 20), RCAR_GP_PIN(1, 21), | ||
2007 | }; | ||
2008 | static const unsigned int scifa0_data_b_mux[] = { | ||
2009 | SCIFA0_RXD_B_MARK, SCIFA0_TXD_B_MARK | ||
2010 | }; | ||
2011 | static const unsigned int scifa0_clk_b_pins[] = { | ||
2012 | /* SCK */ | ||
2013 | RCAR_GP_PIN(1, 19), | ||
2014 | }; | ||
2015 | static const unsigned int scifa0_clk_b_mux[] = { | ||
2016 | SCIFA0_SCK_B_MARK, | ||
2017 | }; | ||
2018 | static const unsigned int scifa0_ctrl_b_pins[] = { | ||
2019 | /* RTS, CTS */ | ||
2020 | RCAR_GP_PIN(1, 23), RCAR_GP_PIN(1, 22), | ||
2021 | }; | ||
2022 | static const unsigned int scifa0_ctrl_b_mux[] = { | ||
2023 | SCIFA0_RTS_N_B_MARK, SCIFA0_CTS_N_B_MARK, | ||
2024 | }; | ||
2025 | /* - SCIFA1 ----------------------------------------------------------------- */ | ||
2026 | static const unsigned int scifa1_data_pins[] = { | ||
2027 | /* RXD, TXD */ | ||
2028 | RCAR_GP_PIN(5, 0), RCAR_GP_PIN(5, 1), | ||
2029 | }; | ||
2030 | static const unsigned int scifa1_data_mux[] = { | ||
2031 | SCIFA1_RXD_MARK, SCIFA1_TXD_MARK, | ||
2032 | }; | ||
2033 | static const unsigned int scifa1_clk_pins[] = { | ||
2034 | /* SCK */ | ||
2035 | RCAR_GP_PIN(4, 20), | ||
2036 | }; | ||
2037 | static const unsigned int scifa1_clk_mux[] = { | ||
2038 | SCIFA1_SCK_MARK, | ||
2039 | }; | ||
2040 | static const unsigned int scifa1_ctrl_pins[] = { | ||
2041 | /* RTS, CTS */ | ||
2042 | RCAR_GP_PIN(5, 3), RCAR_GP_PIN(5, 2), | ||
2043 | }; | ||
2044 | static const unsigned int scifa1_ctrl_mux[] = { | ||
2045 | SCIFA1_RTS_N_MARK, SCIFA1_CTS_N_MARK, | ||
2046 | }; | ||
2047 | static const unsigned int scifa1_data_b_pins[] = { | ||
2048 | /* RXD, TXD */ | ||
2049 | RCAR_GP_PIN(0, 24), RCAR_GP_PIN(0, 21), | ||
2050 | }; | ||
2051 | static const unsigned int scifa1_data_b_mux[] = { | ||
2052 | SCIFA1_RXD_B_MARK, SCIFA1_TXD_B_MARK, | ||
2053 | }; | ||
2054 | static const unsigned int scifa1_clk_b_pins[] = { | ||
2055 | /* SCK */ | ||
2056 | RCAR_GP_PIN(0, 23), | ||
2057 | }; | ||
2058 | static const unsigned int scifa1_clk_b_mux[] = { | ||
2059 | SCIFA1_SCK_B_MARK, | ||
2060 | }; | ||
2061 | static const unsigned int scifa1_ctrl_b_pins[] = { | ||
2062 | /* RTS, CTS */ | ||
2063 | RCAR_GP_PIN(0, 22), RCAR_GP_PIN(0, 25), | ||
2064 | }; | ||
2065 | static const unsigned int scifa1_ctrl_b_mux[] = { | ||
2066 | SCIFA1_RTS_N_B_MARK, SCIFA1_CTS_N_B_MARK, | ||
2067 | }; | ||
2068 | static const unsigned int scifa1_data_c_pins[] = { | ||
2069 | /* RXD, TXD */ | ||
2070 | RCAR_GP_PIN(0, 9), RCAR_GP_PIN(0, 10), | ||
2071 | }; | ||
2072 | static const unsigned int scifa1_data_c_mux[] = { | ||
2073 | SCIFA1_RXD_C_MARK, SCIFA1_TXD_C_MARK, | ||
2074 | }; | ||
2075 | static const unsigned int scifa1_clk_c_pins[] = { | ||
2076 | /* SCK */ | ||
2077 | RCAR_GP_PIN(0, 8), | ||
2078 | }; | ||
2079 | static const unsigned int scifa1_clk_c_mux[] = { | ||
2080 | SCIFA1_SCK_C_MARK, | ||
2081 | }; | ||
2082 | static const unsigned int scifa1_ctrl_c_pins[] = { | ||
2083 | /* RTS, CTS */ | ||
2084 | RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 11), | ||
2085 | }; | ||
2086 | static const unsigned int scifa1_ctrl_c_mux[] = { | ||
2087 | SCIFA1_RTS_N_C_MARK, SCIFA1_CTS_N_C_MARK, | ||
2088 | }; | ||
2089 | static const unsigned int scifa1_data_d_pins[] = { | ||
2090 | /* RXD, TXD */ | ||
2091 | RCAR_GP_PIN(2, 11), RCAR_GP_PIN(2, 12), | ||
2092 | }; | ||
2093 | static const unsigned int scifa1_data_d_mux[] = { | ||
2094 | SCIFA1_RXD_D_MARK, SCIFA1_TXD_D_MARK, | ||
2095 | }; | ||
2096 | static const unsigned int scifa1_clk_d_pins[] = { | ||
2097 | /* SCK */ | ||
2098 | RCAR_GP_PIN(2, 10), | ||
2099 | }; | ||
2100 | static const unsigned int scifa1_clk_d_mux[] = { | ||
2101 | SCIFA1_SCK_D_MARK, | ||
2102 | }; | ||
2103 | static const unsigned int scifa1_ctrl_d_pins[] = { | ||
2104 | /* RTS, CTS */ | ||
2105 | RCAR_GP_PIN(2, 14), RCAR_GP_PIN(2, 13), | ||
2106 | }; | ||
2107 | static const unsigned int scifa1_ctrl_d_mux[] = { | ||
2108 | SCIFA1_RTS_N_D_MARK, SCIFA1_CTS_N_D_MARK, | ||
2109 | }; | ||
2110 | /* - SCIFA2 ----------------------------------------------------------------- */ | ||
2111 | static const unsigned int scifa2_data_pins[] = { | ||
2112 | /* RXD, TXD */ | ||
2113 | RCAR_GP_PIN(5, 5), RCAR_GP_PIN(5, 6), | ||
2114 | }; | ||
2115 | static const unsigned int scifa2_data_mux[] = { | ||
2116 | SCIFA2_RXD_MARK, SCIFA2_TXD_MARK, | ||
2117 | }; | ||
2118 | static const unsigned int scifa2_clk_pins[] = { | ||
2119 | /* SCK */ | ||
2120 | RCAR_GP_PIN(5, 4), | ||
2121 | }; | ||
2122 | static const unsigned int scifa2_clk_mux[] = { | ||
2123 | SCIFA2_SCK_MARK, | ||
2124 | }; | ||
2125 | static const unsigned int scifa2_ctrl_pins[] = { | ||
2126 | /* RTS, CTS */ | ||
2127 | RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 21), | ||
2128 | }; | ||
2129 | static const unsigned int scifa2_ctrl_mux[] = { | ||
2130 | SCIFA2_RTS_N_MARK, SCIFA2_CTS_N_MARK, | ||
2131 | }; | ||
2132 | static const unsigned int scifa2_data_b_pins[] = { | ||
2133 | /* RXD, TXD */ | ||
2134 | RCAR_GP_PIN(5, 13), RCAR_GP_PIN(5, 16), | ||
2135 | }; | ||
2136 | static const unsigned int scifa2_data_b_mux[] = { | ||
2137 | SCIFA2_RXD_B_MARK, SCIFA2_TXD_B_MARK, | ||
2138 | }; | ||
2139 | static const unsigned int scifa2_data_c_pins[] = { | ||
2140 | /* RXD, TXD */ | ||
2141 | RCAR_GP_PIN(5, 31), RCAR_GP_PIN(5, 30), | ||
2142 | }; | ||
2143 | static const unsigned int scifa2_data_c_mux[] = { | ||
2144 | SCIFA2_RXD_C_MARK, SCIFA2_TXD_C_MARK, | ||
2145 | }; | ||
2146 | static const unsigned int scifa2_clk_c_pins[] = { | ||
2147 | /* SCK */ | ||
2148 | RCAR_GP_PIN(5, 29), | ||
2149 | }; | ||
2150 | static const unsigned int scifa2_clk_c_mux[] = { | ||
2151 | SCIFA2_SCK_C_MARK, | ||
2152 | }; | ||
2153 | /* - SCIFB0 ----------------------------------------------------------------- */ | ||
2154 | static const unsigned int scifb0_data_pins[] = { | ||
2155 | /* RXD, TXD */ | ||
2156 | RCAR_GP_PIN(4, 9), RCAR_GP_PIN(4, 10), | ||
2157 | }; | ||
2158 | static const unsigned int scifb0_data_mux[] = { | ||
2159 | SCIFB0_RXD_MARK, SCIFB0_TXD_MARK, | ||
2160 | }; | ||
2161 | static const unsigned int scifb0_clk_pins[] = { | ||
2162 | /* SCK */ | ||
2163 | RCAR_GP_PIN(4, 8), | ||
2164 | }; | ||
2165 | static const unsigned int scifb0_clk_mux[] = { | ||
2166 | SCIFB0_SCK_MARK, | ||
2167 | }; | ||
2168 | static const unsigned int scifb0_ctrl_pins[] = { | ||
2169 | /* RTS, CTS */ | ||
2170 | RCAR_GP_PIN(4, 12), RCAR_GP_PIN(4, 11), | ||
2171 | }; | ||
2172 | static const unsigned int scifb0_ctrl_mux[] = { | ||
2173 | SCIFB0_RTS_N_MARK, SCIFB0_CTS_N_MARK, | ||
2174 | }; | ||
2175 | static const unsigned int scifb0_data_b_pins[] = { | ||
2176 | /* RXD, TXD */ | ||
2177 | RCAR_GP_PIN(3, 10), RCAR_GP_PIN(3, 11), | ||
2178 | }; | ||
2179 | static const unsigned int scifb0_data_b_mux[] = { | ||
2180 | SCIFB0_RXD_B_MARK, SCIFB0_TXD_B_MARK, | ||
2181 | }; | ||
2182 | static const unsigned int scifb0_clk_b_pins[] = { | ||
2183 | /* SCK */ | ||
2184 | RCAR_GP_PIN(3, 9), | ||
2185 | }; | ||
2186 | static const unsigned int scifb0_clk_b_mux[] = { | ||
2187 | SCIFB0_SCK_B_MARK, | ||
2188 | }; | ||
2189 | static const unsigned int scifb0_ctrl_b_pins[] = { | ||
2190 | /* RTS, CTS */ | ||
2191 | RCAR_GP_PIN(3, 13), RCAR_GP_PIN(3, 12), | ||
2192 | }; | ||
2193 | static const unsigned int scifb0_ctrl_b_mux[] = { | ||
2194 | SCIFB0_RTS_N_B_MARK, SCIFB0_CTS_N_B_MARK, | ||
2195 | }; | ||
2196 | static const unsigned int scifb0_data_c_pins[] = { | ||
2197 | /* RXD, TXD */ | ||
2198 | RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5), | ||
2199 | }; | ||
2200 | static const unsigned int scifb0_data_c_mux[] = { | ||
2201 | SCIFB0_RXD_C_MARK, SCIFB0_TXD_C_MARK, | ||
2202 | }; | ||
2203 | /* - SCIFB1 ----------------------------------------------------------------- */ | ||
2204 | static const unsigned int scifb1_data_pins[] = { | ||
2205 | /* RXD, TXD */ | ||
2206 | RCAR_GP_PIN(4, 15), RCAR_GP_PIN(4, 16), | ||
2207 | }; | ||
2208 | static const unsigned int scifb1_data_mux[] = { | ||
2209 | SCIFB1_RXD_MARK, SCIFB1_TXD_MARK, | ||
2210 | }; | ||
2211 | static const unsigned int scifb1_clk_pins[] = { | ||
2212 | /* SCK */ | ||
2213 | RCAR_GP_PIN(4, 14), | ||
2214 | }; | ||
2215 | static const unsigned int scifb1_clk_mux[] = { | ||
2216 | SCIFB1_SCK_MARK, | ||
2217 | }; | ||
2218 | static const unsigned int scifb1_ctrl_pins[] = { | ||
2219 | /* RTS, CTS */ | ||
2220 | RCAR_GP_PIN(4, 18), RCAR_GP_PIN(4, 17), | ||
2221 | }; | ||
2222 | static const unsigned int scifb1_ctrl_mux[] = { | ||
2223 | SCIFB1_RTS_N_MARK, SCIFB1_CTS_N_MARK, | ||
2224 | }; | ||
2225 | static const unsigned int scifb1_data_b_pins[] = { | ||
2226 | /* RXD, TXD */ | ||
2227 | RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 3), | ||
2228 | }; | ||
2229 | static const unsigned int scifb1_data_b_mux[] = { | ||
2230 | SCIFB1_RXD_B_MARK, SCIFB1_TXD_B_MARK, | ||
2231 | }; | ||
2232 | static const unsigned int scifb1_clk_b_pins[] = { | ||
2233 | /* SCK */ | ||
2234 | RCAR_GP_PIN(3, 1), | ||
2235 | }; | ||
2236 | static const unsigned int scifb1_clk_b_mux[] = { | ||
2237 | SCIFB1_SCK_B_MARK, | ||
2238 | }; | ||
2239 | static const unsigned int scifb1_ctrl_b_pins[] = { | ||
2240 | /* RTS, CTS */ | ||
2241 | RCAR_GP_PIN(3, 5), RCAR_GP_PIN(3, 4), | ||
2242 | }; | ||
2243 | static const unsigned int scifb1_ctrl_b_mux[] = { | ||
2244 | SCIFB1_RTS_N_B_MARK, SCIFB1_CTS_N_B_MARK, | ||
2245 | }; | ||
2246 | static const unsigned int scifb1_data_c_pins[] = { | ||
2247 | /* RXD, TXD */ | ||
2248 | RCAR_GP_PIN(0, 14), RCAR_GP_PIN(0, 15), | ||
2249 | }; | ||
2250 | static const unsigned int scifb1_data_c_mux[] = { | ||
2251 | SCIFB1_RXD_C_MARK, SCIFB1_TXD_C_MARK, | ||
2252 | }; | ||
2253 | static const unsigned int scifb1_data_d_pins[] = { | ||
2254 | /* RXD, TXD */ | ||
2255 | RCAR_GP_PIN(4, 1), RCAR_GP_PIN(4, 2), | ||
2256 | }; | ||
2257 | static const unsigned int scifb1_data_d_mux[] = { | ||
2258 | SCIFB1_RXD_D_MARK, SCIFB1_TXD_D_MARK, | ||
2259 | }; | ||
2260 | static const unsigned int scifb1_data_e_pins[] = { | ||
2261 | /* RXD, TXD */ | ||
2262 | RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19), | ||
2263 | }; | ||
2264 | static const unsigned int scifb1_data_e_mux[] = { | ||
2265 | SCIFB1_RXD_E_MARK, SCIFB1_TXD_E_MARK, | ||
2266 | }; | ||
2267 | static const unsigned int scifb1_clk_e_pins[] = { | ||
2268 | /* SCK */ | ||
2269 | RCAR_GP_PIN(3, 17), | ||
2270 | }; | ||
2271 | static const unsigned int scifb1_clk_e_mux[] = { | ||
2272 | SCIFB1_SCK_E_MARK, | ||
2273 | }; | ||
2274 | static const unsigned int scifb1_data_f_pins[] = { | ||
2275 | /* RXD, TXD */ | ||
2276 | RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5), | ||
2277 | }; | ||
2278 | static const unsigned int scifb1_data_f_mux[] = { | ||
2279 | SCIFB1_RXD_F_MARK, SCIFB1_TXD_F_MARK, | ||
2280 | }; | ||
2281 | static const unsigned int scifb1_data_g_pins[] = { | ||
2282 | /* RXD, TXD */ | ||
2283 | RCAR_GP_PIN(2, 21), RCAR_GP_PIN(2, 22), | ||
2284 | }; | ||
2285 | static const unsigned int scifb1_data_g_mux[] = { | ||
2286 | SCIFB1_RXD_G_MARK, SCIFB1_TXD_G_MARK, | ||
2287 | }; | ||
2288 | static const unsigned int scifb1_clk_g_pins[] = { | ||
2289 | /* SCK */ | ||
2290 | RCAR_GP_PIN(2, 20), | ||
2291 | }; | ||
2292 | static const unsigned int scifb1_clk_g_mux[] = { | ||
2293 | SCIFB1_SCK_G_MARK, | ||
2294 | }; | ||
2295 | /* - SCIFB2 ----------------------------------------------------------------- */ | ||
2296 | static const unsigned int scifb2_data_pins[] = { | ||
2297 | /* RXD, TXD */ | ||
2298 | RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 23), | ||
2299 | }; | ||
2300 | static const unsigned int scifb2_data_mux[] = { | ||
2301 | SCIFB2_RXD_MARK, SCIFB2_TXD_MARK, | ||
2302 | }; | ||
2303 | static const unsigned int scifb2_clk_pins[] = { | ||
2304 | /* SCK */ | ||
2305 | RCAR_GP_PIN(4, 21), | ||
2306 | }; | ||
2307 | static const unsigned int scifb2_clk_mux[] = { | ||
2308 | SCIFB2_SCK_MARK, | ||
2309 | }; | ||
2310 | static const unsigned int scifb2_ctrl_pins[] = { | ||
2311 | /* RTS, CTS */ | ||
2312 | RCAR_GP_PIN(4, 25), RCAR_GP_PIN(4, 24), | ||
2313 | }; | ||
2314 | static const unsigned int scifb2_ctrl_mux[] = { | ||
2315 | SCIFB2_RTS_N_MARK, SCIFB2_CTS_N_MARK, | ||
2316 | }; | ||
2317 | static const unsigned int scifb2_data_b_pins[] = { | ||
2318 | /* RXD, TXD */ | ||
2319 | RCAR_GP_PIN(0, 28), RCAR_GP_PIN(0, 30), | ||
2320 | }; | ||
2321 | static const unsigned int scifb2_data_b_mux[] = { | ||
2322 | SCIFB2_RXD_B_MARK, SCIFB2_TXD_B_MARK, | ||
2323 | }; | ||
2324 | static const unsigned int scifb2_clk_b_pins[] = { | ||
2325 | /* SCK */ | ||
2326 | RCAR_GP_PIN(0, 31), | ||
2327 | }; | ||
2328 | static const unsigned int scifb2_clk_b_mux[] = { | ||
2329 | SCIFB2_SCK_B_MARK, | ||
2330 | }; | ||
2331 | static const unsigned int scifb2_ctrl_b_pins[] = { | ||
2332 | /* RTS, CTS */ | ||
2333 | RCAR_GP_PIN(0, 29), RCAR_GP_PIN(0, 27), | ||
2334 | }; | ||
2335 | static const unsigned int scifb2_ctrl_b_mux[] = { | ||
2336 | SCIFB2_RTS_N_B_MARK, SCIFB2_CTS_N_B_MARK, | ||
2337 | }; | ||
2338 | static const unsigned int scifb2_data_c_pins[] = { | ||
2339 | /* RXD, TXD */ | ||
2340 | RCAR_GP_PIN(0, 24), RCAR_GP_PIN(0, 25), | ||
2341 | }; | ||
2342 | static const unsigned int scifb2_data_c_mux[] = { | ||
2343 | SCIFB2_RXD_C_MARK, SCIFB2_TXD_C_MARK, | ||
2344 | }; | ||
2345 | /* - TPU0 ------------------------------------------------------------------- */ | ||
2346 | static const unsigned int tpu0_to0_pins[] = { | ||
2347 | /* TO */ | ||
2348 | RCAR_GP_PIN(0, 20), | ||
2349 | }; | ||
2350 | static const unsigned int tpu0_to0_mux[] = { | ||
2351 | TPU0TO0_MARK, | ||
2352 | }; | ||
2353 | static const unsigned int tpu0_to1_pins[] = { | ||
2354 | /* TO */ | ||
2355 | RCAR_GP_PIN(0, 21), | ||
2356 | }; | ||
2357 | static const unsigned int tpu0_to1_mux[] = { | ||
2358 | TPU0TO1_MARK, | ||
2359 | }; | ||
2360 | static const unsigned int tpu0_to2_pins[] = { | ||
2361 | /* TO */ | ||
2362 | RCAR_GP_PIN(0, 22), | ||
2363 | }; | ||
2364 | static const unsigned int tpu0_to2_mux[] = { | ||
2365 | TPU0TO2_MARK, | ||
2366 | }; | ||
2367 | static const unsigned int tpu0_to3_pins[] = { | ||
2368 | /* TO */ | ||
2369 | RCAR_GP_PIN(0, 23), | ||
2370 | }; | ||
2371 | static const unsigned int tpu0_to3_mux[] = { | ||
2372 | TPU0TO3_MARK, | ||
2373 | }; | ||
2374 | |||
2375 | /* - MMCIF ------------------------------------------------------------------ */ | ||
2376 | static const unsigned int mmc0_data1_pins[] = { | ||
2377 | /* D[0] */ | ||
2378 | RCAR_GP_PIN(3, 18), | ||
2379 | }; | ||
2380 | static const unsigned int mmc0_data1_mux[] = { | ||
2381 | MMC0_D0_MARK, | ||
2382 | }; | ||
2383 | static const unsigned int mmc0_data4_pins[] = { | ||
2384 | /* D[0:3] */ | ||
2385 | RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19), | ||
2386 | RCAR_GP_PIN(3, 20), RCAR_GP_PIN(3, 21), | ||
2387 | }; | ||
2388 | static const unsigned int mmc0_data4_mux[] = { | ||
2389 | MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK, | ||
2390 | }; | ||
2391 | static const unsigned int mmc0_data8_pins[] = { | ||
2392 | /* D[0:7] */ | ||
2393 | RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19), | ||
2394 | RCAR_GP_PIN(3, 20), RCAR_GP_PIN(3, 21), | ||
2395 | RCAR_GP_PIN(3, 22), RCAR_GP_PIN(3, 23), | ||
2396 | RCAR_GP_PIN(3, 6), RCAR_GP_PIN(3, 7), | ||
2397 | }; | ||
2398 | static const unsigned int mmc0_data8_mux[] = { | ||
2399 | MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK, | ||
2400 | MMC0_D4_MARK, MMC0_D5_MARK, MMC0_D6_MARK, MMC0_D7_MARK, | ||
2401 | }; | ||
2402 | static const unsigned int mmc0_ctrl_pins[] = { | ||
2403 | /* CLK, CMD */ | ||
2404 | RCAR_GP_PIN(3, 16), RCAR_GP_PIN(3, 17), | ||
2405 | }; | ||
2406 | static const unsigned int mmc0_ctrl_mux[] = { | ||
2407 | MMC0_CLK_MARK, MMC0_CMD_MARK, | ||
2408 | }; | ||
2409 | |||
2410 | static const unsigned int mmc1_data1_pins[] = { | ||
2411 | /* D[0] */ | ||
2412 | RCAR_GP_PIN(3, 26), | ||
2413 | }; | ||
2414 | static const unsigned int mmc1_data1_mux[] = { | ||
2415 | MMC1_D0_MARK, | ||
2416 | }; | ||
2417 | static const unsigned int mmc1_data4_pins[] = { | ||
2418 | /* D[0:3] */ | ||
2419 | RCAR_GP_PIN(3, 26), RCAR_GP_PIN(3, 27), | ||
2420 | RCAR_GP_PIN(3, 28), RCAR_GP_PIN(3, 29), | ||
2421 | }; | ||
2422 | static const unsigned int mmc1_data4_mux[] = { | ||
2423 | MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK, | ||
2424 | }; | ||
2425 | static const unsigned int mmc1_data8_pins[] = { | ||
2426 | /* D[0:7] */ | ||
2427 | RCAR_GP_PIN(3, 26), RCAR_GP_PIN(3, 27), | ||
2428 | RCAR_GP_PIN(3, 28), RCAR_GP_PIN(3, 29), | ||
2429 | RCAR_GP_PIN(3, 30), RCAR_GP_PIN(3, 31), | ||
2430 | RCAR_GP_PIN(3, 13), RCAR_GP_PIN(3, 14), | ||
2431 | }; | ||
2432 | static const unsigned int mmc1_data8_mux[] = { | ||
2433 | MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK, | ||
2434 | MMC1_D4_MARK, MMC1_D5_MARK, MMC1_D6_MARK, MMC1_D7_MARK, | ||
2435 | }; | ||
2436 | static const unsigned int mmc1_ctrl_pins[] = { | ||
2437 | /* CLK, CMD */ | ||
2438 | RCAR_GP_PIN(3, 24), RCAR_GP_PIN(3, 25), | ||
2439 | }; | ||
2440 | static const unsigned int mmc1_ctrl_mux[] = { | ||
2441 | MMC1_CLK_MARK, MMC1_CMD_MARK, | ||
2442 | }; | ||
2443 | |||
2444 | /* - SDHI ------------------------------------------------------------------- */ | ||
2445 | static const unsigned int sdhi0_data1_pins[] = { | ||
2446 | /* D0 */ | ||
2447 | RCAR_GP_PIN(3, 2), | ||
2448 | }; | ||
2449 | static const unsigned int sdhi0_data1_mux[] = { | ||
2450 | SD0_DAT0_MARK, | ||
2451 | }; | ||
2452 | static const unsigned int sdhi0_data4_pins[] = { | ||
2453 | /* D[0:3] */ | ||
2454 | RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 3), RCAR_GP_PIN(3, 4), RCAR_GP_PIN(3, 5), | ||
2455 | }; | ||
2456 | static const unsigned int sdhi0_data4_mux[] = { | ||
2457 | SD0_DAT0_MARK, SD0_DAT1_MARK, SD0_DAT2_MARK, SD0_DAT3_MARK, | ||
2458 | }; | ||
2459 | static const unsigned int sdhi0_ctrl_pins[] = { | ||
2460 | /* CLK, CMD */ | ||
2461 | RCAR_GP_PIN(3, 0), RCAR_GP_PIN(3, 1), | ||
2462 | }; | ||
2463 | static const unsigned int sdhi0_ctrl_mux[] = { | ||
2464 | SD0_CLK_MARK, SD0_CMD_MARK, | ||
2465 | }; | ||
2466 | static const unsigned int sdhi0_cd_pins[] = { | ||
2467 | /* CD */ | ||
2468 | RCAR_GP_PIN(3, 6), | ||
2469 | }; | ||
2470 | static const unsigned int sdhi0_cd_mux[] = { | ||
2471 | SD0_CD_MARK, | ||
2472 | }; | ||
2473 | static const unsigned int sdhi0_wp_pins[] = { | ||
2474 | /* WP */ | ||
2475 | RCAR_GP_PIN(3, 7), | ||
2476 | }; | ||
2477 | static const unsigned int sdhi0_wp_mux[] = { | ||
2478 | SD0_WP_MARK, | ||
2479 | }; | ||
2480 | |||
2481 | static const unsigned int sdhi1_data1_pins[] = { | ||
2482 | /* D0 */ | ||
2483 | RCAR_GP_PIN(3, 10), | ||
2484 | }; | ||
2485 | static const unsigned int sdhi1_data1_mux[] = { | ||
2486 | SD1_DAT0_MARK, | ||
2487 | }; | ||
2488 | static const unsigned int sdhi1_data4_pins[] = { | ||
2489 | /* D[0:3] */ | ||
2490 | RCAR_GP_PIN(3, 10), RCAR_GP_PIN(3, 11), RCAR_GP_PIN(3, 12), RCAR_GP_PIN(3, 13), | ||
2491 | }; | ||
2492 | static const unsigned int sdhi1_data4_mux[] = { | ||
2493 | SD1_DAT0_MARK, SD1_DAT1_MARK, SD1_DAT2_MARK, SD1_DAT3_MARK, | ||
2494 | }; | ||
2495 | static const unsigned int sdhi1_ctrl_pins[] = { | ||
2496 | /* CLK, CMD */ | ||
2497 | RCAR_GP_PIN(3, 8), RCAR_GP_PIN(3, 9), | ||
2498 | }; | ||
2499 | static const unsigned int sdhi1_ctrl_mux[] = { | ||
2500 | SD1_CLK_MARK, SD1_CMD_MARK, | ||
2501 | }; | ||
2502 | static const unsigned int sdhi1_cd_pins[] = { | ||
2503 | /* CD */ | ||
2504 | RCAR_GP_PIN(3, 14), | ||
2505 | }; | ||
2506 | static const unsigned int sdhi1_cd_mux[] = { | ||
2507 | SD1_CD_MARK, | ||
2508 | }; | ||
2509 | static const unsigned int sdhi1_wp_pins[] = { | ||
2510 | /* WP */ | ||
2511 | RCAR_GP_PIN(3, 15), | ||
2512 | }; | ||
2513 | static const unsigned int sdhi1_wp_mux[] = { | ||
2514 | SD1_WP_MARK, | ||
2515 | }; | ||
2516 | |||
2517 | static const unsigned int sdhi2_data1_pins[] = { | ||
2518 | /* D0 */ | ||
2519 | RCAR_GP_PIN(3, 18), | ||
2520 | }; | ||
2521 | static const unsigned int sdhi2_data1_mux[] = { | ||
2522 | SD2_DAT0_MARK, | ||
2523 | }; | ||
2524 | static const unsigned int sdhi2_data4_pins[] = { | ||
2525 | /* D[0:3] */ | ||
2526 | RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19), RCAR_GP_PIN(3, 20), RCAR_GP_PIN(3, 21), | ||
2527 | }; | ||
2528 | static const unsigned int sdhi2_data4_mux[] = { | ||
2529 | SD2_DAT0_MARK, SD2_DAT1_MARK, SD2_DAT2_MARK, SD2_DAT3_MARK, | ||
2530 | }; | ||
2531 | static const unsigned int sdhi2_ctrl_pins[] = { | ||
2532 | /* CLK, CMD */ | ||
2533 | RCAR_GP_PIN(3, 16), RCAR_GP_PIN(3, 17), | ||
2534 | }; | ||
2535 | static const unsigned int sdhi2_ctrl_mux[] = { | ||
2536 | SD2_CLK_MARK, SD2_CMD_MARK, | ||
2537 | }; | ||
2538 | static const unsigned int sdhi2_cd_pins[] = { | ||
2539 | /* CD */ | ||
2540 | RCAR_GP_PIN(3, 22), | ||
2541 | }; | ||
2542 | static const unsigned int sdhi2_cd_mux[] = { | ||
2543 | SD2_CD_MARK, | ||
2544 | }; | ||
2545 | static const unsigned int sdhi2_wp_pins[] = { | ||
2546 | /* WP */ | ||
2547 | RCAR_GP_PIN(3, 23), | ||
2548 | }; | ||
2549 | static const unsigned int sdhi2_wp_mux[] = { | ||
2550 | SD2_WP_MARK, | ||
2551 | }; | ||
2552 | |||
2553 | static const unsigned int sdhi3_data1_pins[] = { | ||
2554 | /* D0 */ | ||
2555 | RCAR_GP_PIN(3, 26), | ||
2556 | }; | ||
2557 | static const unsigned int sdhi3_data1_mux[] = { | ||
2558 | SD3_DAT0_MARK, | ||
2559 | }; | ||
2560 | static const unsigned int sdhi3_data4_pins[] = { | ||
2561 | /* D[0:3] */ | ||
2562 | RCAR_GP_PIN(3, 26), RCAR_GP_PIN(3, 27), RCAR_GP_PIN(3, 28), RCAR_GP_PIN(3, 29), | ||
2563 | }; | ||
2564 | static const unsigned int sdhi3_data4_mux[] = { | ||
2565 | SD3_DAT0_MARK, SD3_DAT1_MARK, SD3_DAT2_MARK, SD3_DAT3_MARK, | ||
2566 | }; | ||
2567 | static const unsigned int sdhi3_ctrl_pins[] = { | ||
2568 | /* CLK, CMD */ | ||
2569 | RCAR_GP_PIN(3, 24), RCAR_GP_PIN(3, 25), | ||
2570 | }; | ||
2571 | static const unsigned int sdhi3_ctrl_mux[] = { | ||
2572 | SD3_CLK_MARK, SD3_CMD_MARK, | ||
2573 | }; | ||
2574 | static const unsigned int sdhi3_cd_pins[] = { | ||
2575 | /* CD */ | ||
2576 | RCAR_GP_PIN(3, 30), | ||
2577 | }; | ||
2578 | static const unsigned int sdhi3_cd_mux[] = { | ||
2579 | SD3_CD_MARK, | ||
2580 | }; | ||
2581 | static const unsigned int sdhi3_wp_pins[] = { | ||
2582 | /* WP */ | ||
2583 | RCAR_GP_PIN(3, 31), | ||
2584 | }; | ||
2585 | static const unsigned int sdhi3_wp_mux[] = { | ||
2586 | SD3_WP_MARK, | ||
2587 | }; | ||
2588 | |||
2589 | static const struct sh_pfc_pin_group pinmux_groups[] = { | ||
2590 | SH_PFC_PIN_GROUP(eth_link), | ||
2591 | SH_PFC_PIN_GROUP(eth_magic), | ||
2592 | SH_PFC_PIN_GROUP(eth_mdio), | ||
2593 | SH_PFC_PIN_GROUP(eth_rmii), | ||
2594 | SH_PFC_PIN_GROUP(intc_irq0), | ||
2595 | SH_PFC_PIN_GROUP(intc_irq1), | ||
2596 | SH_PFC_PIN_GROUP(intc_irq2), | ||
2597 | SH_PFC_PIN_GROUP(intc_irq3), | ||
2598 | SH_PFC_PIN_GROUP(scif0_data), | ||
2599 | SH_PFC_PIN_GROUP(scif0_clk), | ||
2600 | SH_PFC_PIN_GROUP(scif0_ctrl), | ||
2601 | SH_PFC_PIN_GROUP(scif0_data_b), | ||
2602 | SH_PFC_PIN_GROUP(scif1_data), | ||
2603 | SH_PFC_PIN_GROUP(scif1_clk), | ||
2604 | SH_PFC_PIN_GROUP(scif1_ctrl), | ||
2605 | SH_PFC_PIN_GROUP(scif1_data_b), | ||
2606 | SH_PFC_PIN_GROUP(scif1_data_c), | ||
2607 | SH_PFC_PIN_GROUP(scif1_data_d), | ||
2608 | SH_PFC_PIN_GROUP(scif1_clk_d), | ||
2609 | SH_PFC_PIN_GROUP(scif1_data_e), | ||
2610 | SH_PFC_PIN_GROUP(scif1_clk_e), | ||
2611 | SH_PFC_PIN_GROUP(scifa0_data), | ||
2612 | SH_PFC_PIN_GROUP(scifa0_clk), | ||
2613 | SH_PFC_PIN_GROUP(scifa0_ctrl), | ||
2614 | SH_PFC_PIN_GROUP(scifa0_data_b), | ||
2615 | SH_PFC_PIN_GROUP(scifa0_clk_b), | ||
2616 | SH_PFC_PIN_GROUP(scifa0_ctrl_b), | ||
2617 | SH_PFC_PIN_GROUP(scifa1_data), | ||
2618 | SH_PFC_PIN_GROUP(scifa1_clk), | ||
2619 | SH_PFC_PIN_GROUP(scifa1_ctrl), | ||
2620 | SH_PFC_PIN_GROUP(scifa1_data_b), | ||
2621 | SH_PFC_PIN_GROUP(scifa1_clk_b), | ||
2622 | SH_PFC_PIN_GROUP(scifa1_ctrl_b), | ||
2623 | SH_PFC_PIN_GROUP(scifa1_data_c), | ||
2624 | SH_PFC_PIN_GROUP(scifa1_clk_c), | ||
2625 | SH_PFC_PIN_GROUP(scifa1_ctrl_c), | ||
2626 | SH_PFC_PIN_GROUP(scifa1_data_d), | ||
2627 | SH_PFC_PIN_GROUP(scifa1_clk_d), | ||
2628 | SH_PFC_PIN_GROUP(scifa1_ctrl_d), | ||
2629 | SH_PFC_PIN_GROUP(scifa2_data), | ||
2630 | SH_PFC_PIN_GROUP(scifa2_clk), | ||
2631 | SH_PFC_PIN_GROUP(scifa2_ctrl), | ||
2632 | SH_PFC_PIN_GROUP(scifa2_data_b), | ||
2633 | SH_PFC_PIN_GROUP(scifa2_data_c), | ||
2634 | SH_PFC_PIN_GROUP(scifa2_clk_c), | ||
2635 | SH_PFC_PIN_GROUP(scifb0_data), | ||
2636 | SH_PFC_PIN_GROUP(scifb0_clk), | ||
2637 | SH_PFC_PIN_GROUP(scifb0_ctrl), | ||
2638 | SH_PFC_PIN_GROUP(scifb0_data_b), | ||
2639 | SH_PFC_PIN_GROUP(scifb0_clk_b), | ||
2640 | SH_PFC_PIN_GROUP(scifb0_ctrl_b), | ||
2641 | SH_PFC_PIN_GROUP(scifb0_data_c), | ||
2642 | SH_PFC_PIN_GROUP(scifb1_data), | ||
2643 | SH_PFC_PIN_GROUP(scifb1_clk), | ||
2644 | SH_PFC_PIN_GROUP(scifb1_ctrl), | ||
2645 | SH_PFC_PIN_GROUP(scifb1_data_b), | ||
2646 | SH_PFC_PIN_GROUP(scifb1_clk_b), | ||
2647 | SH_PFC_PIN_GROUP(scifb1_ctrl_b), | ||
2648 | SH_PFC_PIN_GROUP(scifb1_data_c), | ||
2649 | SH_PFC_PIN_GROUP(scifb1_data_d), | ||
2650 | SH_PFC_PIN_GROUP(scifb1_data_e), | ||
2651 | SH_PFC_PIN_GROUP(scifb1_clk_e), | ||
2652 | SH_PFC_PIN_GROUP(scifb1_data_f), | ||
2653 | SH_PFC_PIN_GROUP(scifb1_data_g), | ||
2654 | SH_PFC_PIN_GROUP(scifb1_clk_g), | ||
2655 | SH_PFC_PIN_GROUP(scifb2_data), | ||
2656 | SH_PFC_PIN_GROUP(scifb2_clk), | ||
2657 | SH_PFC_PIN_GROUP(scifb2_ctrl), | ||
2658 | SH_PFC_PIN_GROUP(scifb2_data_b), | ||
2659 | SH_PFC_PIN_GROUP(scifb2_clk_b), | ||
2660 | SH_PFC_PIN_GROUP(scifb2_ctrl_b), | ||
2661 | SH_PFC_PIN_GROUP(scifb2_data_c), | ||
2662 | SH_PFC_PIN_GROUP(tpu0_to0), | ||
2663 | SH_PFC_PIN_GROUP(tpu0_to1), | ||
2664 | SH_PFC_PIN_GROUP(tpu0_to2), | ||
2665 | SH_PFC_PIN_GROUP(tpu0_to3), | ||
2666 | SH_PFC_PIN_GROUP(mmc0_data1), | ||
2667 | SH_PFC_PIN_GROUP(mmc0_data4), | ||
2668 | SH_PFC_PIN_GROUP(mmc0_data8), | ||
2669 | SH_PFC_PIN_GROUP(mmc0_ctrl), | ||
2670 | SH_PFC_PIN_GROUP(mmc1_data1), | ||
2671 | SH_PFC_PIN_GROUP(mmc1_data4), | ||
2672 | SH_PFC_PIN_GROUP(mmc1_data8), | ||
2673 | SH_PFC_PIN_GROUP(mmc1_ctrl), | ||
2674 | SH_PFC_PIN_GROUP(sdhi0_data1), | ||
2675 | SH_PFC_PIN_GROUP(sdhi0_data4), | ||
2676 | SH_PFC_PIN_GROUP(sdhi0_ctrl), | ||
2677 | SH_PFC_PIN_GROUP(sdhi0_cd), | ||
2678 | SH_PFC_PIN_GROUP(sdhi0_wp), | ||
2679 | SH_PFC_PIN_GROUP(sdhi1_data1), | ||
2680 | SH_PFC_PIN_GROUP(sdhi1_data4), | ||
2681 | SH_PFC_PIN_GROUP(sdhi1_ctrl), | ||
2682 | SH_PFC_PIN_GROUP(sdhi1_cd), | ||
2683 | SH_PFC_PIN_GROUP(sdhi1_wp), | ||
2684 | SH_PFC_PIN_GROUP(sdhi2_data1), | ||
2685 | SH_PFC_PIN_GROUP(sdhi2_data4), | ||
2686 | SH_PFC_PIN_GROUP(sdhi2_ctrl), | ||
2687 | SH_PFC_PIN_GROUP(sdhi2_cd), | ||
2688 | SH_PFC_PIN_GROUP(sdhi2_wp), | ||
2689 | SH_PFC_PIN_GROUP(sdhi3_data1), | ||
2690 | SH_PFC_PIN_GROUP(sdhi3_data4), | ||
2691 | SH_PFC_PIN_GROUP(sdhi3_ctrl), | ||
2692 | SH_PFC_PIN_GROUP(sdhi3_cd), | ||
2693 | SH_PFC_PIN_GROUP(sdhi3_wp), | ||
2694 | }; | ||
2695 | |||
2696 | static const char * const eth_groups[] = { | ||
2697 | "eth_link", | ||
2698 | "eth_magic", | ||
2699 | "eth_mdio", | ||
2700 | "eth_rmii", | ||
2701 | }; | ||
2702 | |||
2703 | static const char * const intc_groups[] = { | ||
2704 | "intc_irq0", | ||
2705 | "intc_irq1", | ||
2706 | "intc_irq2", | ||
2707 | "intc_irq3", | ||
2708 | }; | ||
2709 | |||
2710 | static const char * const scif0_groups[] = { | ||
2711 | "scif0_data", | ||
2712 | "scif0_clk", | ||
2713 | "scif0_ctrl", | ||
2714 | "scif0_data_b", | ||
2715 | }; | ||
2716 | |||
2717 | static const char * const scif1_groups[] = { | ||
2718 | "scif1_data", | ||
2719 | "scif1_clk", | ||
2720 | "scif1_ctrl", | ||
2721 | "scif1_data_b", | ||
2722 | "scif1_data_c", | ||
2723 | "scif1_data_d", | ||
2724 | "scif1_clk_d", | ||
2725 | "scif1_data_e", | ||
2726 | "scif1_clk_e", | ||
2727 | }; | ||
2728 | |||
2729 | static const char * const scifa0_groups[] = { | ||
2730 | "scifa0_data", | ||
2731 | "scifa0_clk", | ||
2732 | "scifa0_ctrl", | ||
2733 | "scifa0_data_b", | ||
2734 | "scifa0_clk_b", | ||
2735 | "scifa0_ctrl_b", | ||
2736 | }; | ||
2737 | |||
2738 | static const char * const scifa1_groups[] = { | ||
2739 | "scifa1_data", | ||
2740 | "scifa1_clk", | ||
2741 | "scifa1_ctrl", | ||
2742 | "scifa1_data_b", | ||
2743 | "scifa1_clk_b", | ||
2744 | "scifa1_ctrl_b", | ||
2745 | "scifa1_data_c", | ||
2746 | "scifa1_clk_c", | ||
2747 | "scifa1_ctrl_c", | ||
2748 | "scifa1_data_d", | ||
2749 | "scifa1_clk_d", | ||
2750 | "scifa1_ctrl_d", | ||
2751 | }; | ||
2752 | |||
2753 | static const char * const scifa2_groups[] = { | ||
2754 | "scifa2_data", | ||
2755 | "scifa2_clk", | ||
2756 | "scifa2_ctrl", | ||
2757 | "scifa2_data_b", | ||
2758 | "scifa2_data_c", | ||
2759 | "scifa2_clk_c", | ||
2760 | }; | ||
2761 | |||
2762 | static const char * const scifb0_groups[] = { | ||
2763 | "scifb0_data", | ||
2764 | "scifb0_clk", | ||
2765 | "scifb0_ctrl", | ||
2766 | "scifb0_data_b", | ||
2767 | "scifb0_clk_b", | ||
2768 | "scifb0_ctrl_b", | ||
2769 | "scifb0_data_c", | ||
2770 | }; | ||
2771 | |||
2772 | static const char * const scifb1_groups[] = { | ||
2773 | "scifb1_data", | ||
2774 | "scifb1_clk", | ||
2775 | "scifb1_ctrl", | ||
2776 | "scifb1_data_b", | ||
2777 | "scifb1_clk_b", | ||
2778 | "scifb1_ctrl_b", | ||
2779 | "scifb1_data_c", | ||
2780 | "scifb1_data_d", | ||
2781 | "scifb1_data_e", | ||
2782 | "scifb1_clk_e", | ||
2783 | "scifb1_data_f", | ||
2784 | "scifb1_data_g", | ||
2785 | "scifb1_clk_g", | ||
2786 | }; | ||
2787 | |||
2788 | static const char * const scifb2_groups[] = { | ||
2789 | "scifb2_data", | ||
2790 | "scifb2_clk", | ||
2791 | "scifb2_ctrl", | ||
2792 | "scifb2_data_b", | ||
2793 | "scifb2_clk_b", | ||
2794 | "scifb2_ctrl_b", | ||
2795 | "scifb2_data_c", | ||
2796 | }; | ||
2797 | |||
2798 | static const char * const tpu0_groups[] = { | ||
2799 | "tpu0_to0", | ||
2800 | "tpu0_to1", | ||
2801 | "tpu0_to2", | ||
2802 | "tpu0_to3", | ||
2803 | }; | ||
2804 | |||
2805 | static const char * const mmc0_groups[] = { | ||
2806 | "mmc0_data1", | ||
2807 | "mmc0_data4", | ||
2808 | "mmc0_data8", | ||
2809 | "mmc0_ctrl", | ||
2810 | }; | ||
2811 | |||
2812 | static const char * const mmc1_groups[] = { | ||
2813 | "mmc1_data1", | ||
2814 | "mmc1_data4", | ||
2815 | "mmc1_data8", | ||
2816 | "mmc1_ctrl", | ||
2817 | }; | ||
2818 | |||
2819 | static const char * const sdhi0_groups[] = { | ||
2820 | "sdhi0_data1", | ||
2821 | "sdhi0_data4", | ||
2822 | "sdhi0_ctrl", | ||
2823 | "sdhi0_cd", | ||
2824 | "sdhi0_wp", | ||
2825 | }; | ||
2826 | |||
2827 | static const char * const sdhi1_groups[] = { | ||
2828 | "sdhi1_data1", | ||
2829 | "sdhi1_data4", | ||
2830 | "sdhi1_ctrl", | ||
2831 | "sdhi1_cd", | ||
2832 | "sdhi1_wp", | ||
2833 | }; | ||
2834 | |||
2835 | static const char * const sdhi2_groups[] = { | ||
2836 | "sdhi2_data1", | ||
2837 | "sdhi2_data4", | ||
2838 | "sdhi2_ctrl", | ||
2839 | "sdhi2_cd", | ||
2840 | "sdhi2_wp", | ||
2841 | }; | ||
2842 | |||
2843 | static const char * const sdhi3_groups[] = { | ||
2844 | "sdhi3_data1", | ||
2845 | "sdhi3_data4", | ||
2846 | "sdhi3_ctrl", | ||
2847 | "sdhi3_cd", | ||
2848 | "sdhi3_wp", | ||
2849 | }; | ||
2850 | |||
2851 | static const struct sh_pfc_function pinmux_functions[] = { | ||
2852 | SH_PFC_FUNCTION(eth), | ||
2853 | SH_PFC_FUNCTION(intc), | ||
2854 | SH_PFC_FUNCTION(scif0), | ||
2855 | SH_PFC_FUNCTION(scif1), | ||
2856 | SH_PFC_FUNCTION(scifa0), | ||
2857 | SH_PFC_FUNCTION(scifa1), | ||
2858 | SH_PFC_FUNCTION(scifa2), | ||
2859 | SH_PFC_FUNCTION(scifb0), | ||
2860 | SH_PFC_FUNCTION(scifb1), | ||
2861 | SH_PFC_FUNCTION(scifb2), | ||
2862 | SH_PFC_FUNCTION(tpu0), | ||
2863 | SH_PFC_FUNCTION(mmc0), | ||
2864 | SH_PFC_FUNCTION(mmc1), | ||
2865 | SH_PFC_FUNCTION(sdhi0), | ||
2866 | SH_PFC_FUNCTION(sdhi1), | ||
2867 | SH_PFC_FUNCTION(sdhi2), | ||
2868 | SH_PFC_FUNCTION(sdhi3), | ||
2869 | }; | ||
2870 | |||
2871 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | ||
2872 | { PINMUX_CFG_REG("GPSR0", 0xE6060004, 32, 1) { | ||
2873 | GP_0_31_FN, FN_IP3_17_15, | ||
2874 | GP_0_30_FN, FN_IP3_14_12, | ||
2875 | GP_0_29_FN, FN_IP3_11_8, | ||
2876 | GP_0_28_FN, FN_IP3_7_4, | ||
2877 | GP_0_27_FN, FN_IP3_3_0, | ||
2878 | GP_0_26_FN, FN_IP2_28_26, | ||
2879 | GP_0_25_FN, FN_IP2_25_22, | ||
2880 | GP_0_24_FN, FN_IP2_21_18, | ||
2881 | GP_0_23_FN, FN_IP2_17_15, | ||
2882 | GP_0_22_FN, FN_IP2_14_12, | ||
2883 | GP_0_21_FN, FN_IP2_11_9, | ||
2884 | GP_0_20_FN, FN_IP2_8_6, | ||
2885 | GP_0_19_FN, FN_IP2_5_3, | ||
2886 | GP_0_18_FN, FN_IP2_2_0, | ||
2887 | GP_0_17_FN, FN_IP1_29_28, | ||
2888 | GP_0_16_FN, FN_IP1_27_26, | ||
2889 | GP_0_15_FN, FN_IP1_25_22, | ||
2890 | GP_0_14_FN, FN_IP1_21_18, | ||
2891 | GP_0_13_FN, FN_IP1_17_15, | ||
2892 | GP_0_12_FN, FN_IP1_14_12, | ||
2893 | GP_0_11_FN, FN_IP1_11_8, | ||
2894 | GP_0_10_FN, FN_IP1_7_4, | ||
2895 | GP_0_9_FN, FN_IP1_3_0, | ||
2896 | GP_0_8_FN, FN_IP0_30_27, | ||
2897 | GP_0_7_FN, FN_IP0_26_23, | ||
2898 | GP_0_6_FN, FN_IP0_22_20, | ||
2899 | GP_0_5_FN, FN_IP0_19_16, | ||
2900 | GP_0_4_FN, FN_IP0_15_12, | ||
2901 | GP_0_3_FN, FN_IP0_11_9, | ||
2902 | GP_0_2_FN, FN_IP0_8_6, | ||
2903 | GP_0_1_FN, FN_IP0_5_3, | ||
2904 | GP_0_0_FN, FN_IP0_2_0 } | ||
2905 | }, | ||
2906 | { PINMUX_CFG_REG("GPSR1", 0xE6060008, 32, 1) { | ||
2907 | 0, 0, | ||
2908 | 0, 0, | ||
2909 | GP_1_29_FN, FN_IP6_13_11, | ||
2910 | GP_1_28_FN, FN_IP6_10_9, | ||
2911 | GP_1_27_FN, FN_IP6_8_6, | ||
2912 | GP_1_26_FN, FN_IP6_5_3, | ||
2913 | GP_1_25_FN, FN_IP6_2_0, | ||
2914 | GP_1_24_FN, FN_IP5_29_27, | ||
2915 | GP_1_23_FN, FN_IP5_26_24, | ||
2916 | GP_1_22_FN, FN_IP5_23_21, | ||
2917 | GP_1_21_FN, FN_IP5_20_18, | ||
2918 | GP_1_20_FN, FN_IP5_17_15, | ||
2919 | GP_1_19_FN, FN_IP5_14_13, | ||
2920 | GP_1_18_FN, FN_IP5_12_10, | ||
2921 | GP_1_17_FN, FN_IP5_9_6, | ||
2922 | GP_1_16_FN, FN_IP5_5_3, | ||
2923 | GP_1_15_FN, FN_IP5_2_0, | ||
2924 | GP_1_14_FN, FN_IP4_29_27, | ||
2925 | GP_1_13_FN, FN_IP4_26_24, | ||
2926 | GP_1_12_FN, FN_IP4_23_21, | ||
2927 | GP_1_11_FN, FN_IP4_20_18, | ||
2928 | GP_1_10_FN, FN_IP4_17_15, | ||
2929 | GP_1_9_FN, FN_IP4_14_12, | ||
2930 | GP_1_8_FN, FN_IP4_11_9, | ||
2931 | GP_1_7_FN, FN_IP4_8_6, | ||
2932 | GP_1_6_FN, FN_IP4_5_3, | ||
2933 | GP_1_5_FN, FN_IP4_2_0, | ||
2934 | GP_1_4_FN, FN_IP3_31_29, | ||
2935 | GP_1_3_FN, FN_IP3_28_26, | ||
2936 | GP_1_2_FN, FN_IP3_25_23, | ||
2937 | GP_1_1_FN, FN_IP3_22_20, | ||
2938 | GP_1_0_FN, FN_IP3_19_18, } | ||
2939 | }, | ||
2940 | { PINMUX_CFG_REG("GPSR2", 0xE606000C, 32, 1) { | ||
2941 | 0, 0, | ||
2942 | 0, 0, | ||
2943 | GP_2_29_FN, FN_IP7_15_13, | ||
2944 | GP_2_28_FN, FN_IP7_12_10, | ||
2945 | GP_2_27_FN, FN_IP7_9_8, | ||
2946 | GP_2_26_FN, FN_IP7_7_6, | ||
2947 | GP_2_25_FN, FN_IP7_5_3, | ||
2948 | GP_2_24_FN, FN_IP7_2_0, | ||
2949 | GP_2_23_FN, FN_IP6_31_29, | ||
2950 | GP_2_22_FN, FN_IP6_28_26, | ||
2951 | GP_2_21_FN, FN_IP6_25_23, | ||
2952 | GP_2_20_FN, FN_IP6_22_20, | ||
2953 | GP_2_19_FN, FN_IP6_19_17, | ||
2954 | GP_2_18_FN, FN_IP6_16_14, | ||
2955 | GP_2_17_FN, FN_VI1_DATA7_VI1_B7, | ||
2956 | GP_2_16_FN, FN_IP8_27, | ||
2957 | GP_2_15_FN, FN_IP8_26, | ||
2958 | GP_2_14_FN, FN_IP8_25_24, | ||
2959 | GP_2_13_FN, FN_IP8_23_22, | ||
2960 | GP_2_12_FN, FN_IP8_21_20, | ||
2961 | GP_2_11_FN, FN_IP8_19_18, | ||
2962 | GP_2_10_FN, FN_IP8_17_16, | ||
2963 | GP_2_9_FN, FN_IP8_15_14, | ||
2964 | GP_2_8_FN, FN_IP8_13_12, | ||
2965 | GP_2_7_FN, FN_IP8_11_10, | ||
2966 | GP_2_6_FN, FN_IP8_9_8, | ||
2967 | GP_2_5_FN, FN_IP8_7_6, | ||
2968 | GP_2_4_FN, FN_IP8_5_4, | ||
2969 | GP_2_3_FN, FN_IP8_3_2, | ||
2970 | GP_2_2_FN, FN_IP8_1_0, | ||
2971 | GP_2_1_FN, FN_IP7_30_29, | ||
2972 | GP_2_0_FN, FN_IP7_28_27 } | ||
2973 | }, | ||
2974 | { PINMUX_CFG_REG("GPSR3", 0xE6060010, 32, 1) { | ||
2975 | GP_3_31_FN, FN_IP11_21_18, | ||
2976 | GP_3_30_FN, FN_IP11_17_15, | ||
2977 | GP_3_29_FN, FN_IP11_14_13, | ||
2978 | GP_3_28_FN, FN_IP11_12_11, | ||
2979 | GP_3_27_FN, FN_IP11_10_9, | ||
2980 | GP_3_26_FN, FN_IP11_8_7, | ||
2981 | GP_3_25_FN, FN_IP11_6_5, | ||
2982 | GP_3_24_FN, FN_IP11_4, | ||
2983 | GP_3_23_FN, FN_IP11_3_0, | ||
2984 | GP_3_22_FN, FN_IP10_29_26, | ||
2985 | GP_3_21_FN, FN_IP10_25_23, | ||
2986 | GP_3_20_FN, FN_IP10_22_19, | ||
2987 | GP_3_19_FN, FN_IP10_18_15, | ||
2988 | GP_3_18_FN, FN_IP10_14_11, | ||
2989 | GP_3_17_FN, FN_IP10_10_7, | ||
2990 | GP_3_16_FN, FN_IP10_6_4, | ||
2991 | GP_3_15_FN, FN_IP10_3_0, | ||
2992 | GP_3_14_FN, FN_IP9_31_28, | ||
2993 | GP_3_13_FN, FN_IP9_27_26, | ||
2994 | GP_3_12_FN, FN_IP9_25_24, | ||
2995 | GP_3_11_FN, FN_IP9_23_22, | ||
2996 | GP_3_10_FN, FN_IP9_21_20, | ||
2997 | GP_3_9_FN, FN_IP9_19_18, | ||
2998 | GP_3_8_FN, FN_IP9_17_16, | ||
2999 | GP_3_7_FN, FN_IP9_15_12, | ||
3000 | GP_3_6_FN, FN_IP9_11_8, | ||
3001 | GP_3_5_FN, FN_IP9_7_6, | ||
3002 | GP_3_4_FN, FN_IP9_5_4, | ||
3003 | GP_3_3_FN, FN_IP9_3_2, | ||
3004 | GP_3_2_FN, FN_IP9_1_0, | ||
3005 | GP_3_1_FN, FN_IP8_30_29, | ||
3006 | GP_3_0_FN, FN_IP8_28 } | ||
3007 | }, | ||
3008 | { PINMUX_CFG_REG("GPSR4", 0xE6060014, 32, 1) { | ||
3009 | GP_4_31_FN, FN_IP14_18_16, | ||
3010 | GP_4_30_FN, FN_IP14_15_12, | ||
3011 | GP_4_29_FN, FN_IP14_11_9, | ||
3012 | GP_4_28_FN, FN_IP14_8_6, | ||
3013 | GP_4_27_FN, FN_IP14_5_3, | ||
3014 | GP_4_26_FN, FN_IP14_2_0, | ||
3015 | GP_4_25_FN, FN_IP13_30_29, | ||
3016 | GP_4_24_FN, FN_IP13_28_26, | ||
3017 | GP_4_23_FN, FN_IP13_25_23, | ||
3018 | GP_4_22_FN, FN_IP13_22_19, | ||
3019 | GP_4_21_FN, FN_IP13_18_16, | ||
3020 | GP_4_20_FN, FN_IP13_15_13, | ||
3021 | GP_4_19_FN, FN_IP13_12_10, | ||
3022 | GP_4_18_FN, FN_IP13_9_7, | ||
3023 | GP_4_17_FN, FN_IP13_6_3, | ||
3024 | GP_4_16_FN, FN_IP13_2_0, | ||
3025 | GP_4_15_FN, FN_IP12_30_28, | ||
3026 | GP_4_14_FN, FN_IP12_27_25, | ||
3027 | GP_4_13_FN, FN_IP12_24_23, | ||
3028 | GP_4_12_FN, FN_IP12_22_20, | ||
3029 | GP_4_11_FN, FN_IP12_19_17, | ||
3030 | GP_4_10_FN, FN_IP12_16_14, | ||
3031 | GP_4_9_FN, FN_IP12_13_11, | ||
3032 | GP_4_8_FN, FN_IP12_10_8, | ||
3033 | GP_4_7_FN, FN_IP12_7_6, | ||
3034 | GP_4_6_FN, FN_IP12_5_4, | ||
3035 | GP_4_5_FN, FN_IP12_3_2, | ||
3036 | GP_4_4_FN, FN_IP12_1_0, | ||
3037 | GP_4_3_FN, FN_IP11_31_30, | ||
3038 | GP_4_2_FN, FN_IP11_29_27, | ||
3039 | GP_4_1_FN, FN_IP11_26_24, | ||
3040 | GP_4_0_FN, FN_IP11_23_22 } | ||
3041 | }, | ||
3042 | { PINMUX_CFG_REG("GPSR5", 0xE6060018, 32, 1) { | ||
3043 | GP_5_31_FN, FN_IP7_24_22, | ||
3044 | GP_5_30_FN, FN_IP7_21_19, | ||
3045 | GP_5_29_FN, FN_IP7_18_16, | ||
3046 | GP_5_28_FN, FN_DU_DOTCLKIN2, | ||
3047 | GP_5_27_FN, FN_IP7_26_25, | ||
3048 | GP_5_26_FN, FN_DU_DOTCLKIN0, | ||
3049 | GP_5_25_FN, FN_AVS2, | ||
3050 | GP_5_24_FN, FN_AVS1, | ||
3051 | GP_5_23_FN, FN_USB2_OVC, | ||
3052 | GP_5_22_FN, FN_USB2_PWEN, | ||
3053 | GP_5_21_FN, FN_IP16_7, | ||
3054 | GP_5_20_FN, FN_IP16_6, | ||
3055 | GP_5_19_FN, FN_USB0_OVC_VBUS, | ||
3056 | GP_5_18_FN, FN_USB0_PWEN, | ||
3057 | GP_5_17_FN, FN_IP16_5_3, | ||
3058 | GP_5_16_FN, FN_IP16_2_0, | ||
3059 | GP_5_15_FN, FN_IP15_29_28, | ||
3060 | GP_5_14_FN, FN_IP15_27_26, | ||
3061 | GP_5_13_FN, FN_IP15_25_23, | ||
3062 | GP_5_12_FN, FN_IP15_22_20, | ||
3063 | GP_5_11_FN, FN_IP15_19_18, | ||
3064 | GP_5_10_FN, FN_IP15_17_16, | ||
3065 | GP_5_9_FN, FN_IP15_15_14, | ||
3066 | GP_5_8_FN, FN_IP15_13_12, | ||
3067 | GP_5_7_FN, FN_IP15_11_9, | ||
3068 | GP_5_6_FN, FN_IP15_8_6, | ||
3069 | GP_5_5_FN, FN_IP15_5_3, | ||
3070 | GP_5_4_FN, FN_IP15_2_0, | ||
3071 | GP_5_3_FN, FN_IP14_30_28, | ||
3072 | GP_5_2_FN, FN_IP14_27_25, | ||
3073 | GP_5_1_FN, FN_IP14_24_22, | ||
3074 | GP_5_0_FN, FN_IP14_21_19 } | ||
3075 | }, | ||
3076 | { PINMUX_CFG_REG_VAR("IPSR0", 0xE6060020, 32, | ||
3077 | 1, 4, 4, 3, 4, 4, 3, 3, 3, 3) { | ||
3078 | /* IP0_31 [1] */ | ||
3079 | 0, 0, | ||
3080 | /* IP0_30_27 [4] */ | ||
3081 | FN_D8, FN_SCIFA1_SCK_C, FN_AVB_TXD0, FN_MII_TXD0, | ||
3082 | FN_VI0_G0, FN_VI0_G0_B, FN_VI2_DATA0_VI2_B0, | ||
3083 | 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3084 | /* IP0_26_23 [4] */ | ||
3085 | FN_D7, FN_AD_DI_B, FN_SDA2_C, | ||
3086 | FN_VI3_DATA7, FN_VI0_R3, FN_VI0_R3_B, FN_SDA2_CIS_C, | ||
3087 | 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3088 | /* IP0_22_20 [3] */ | ||
3089 | FN_D6, FN_SCL2_C, FN_VI3_DATA6, FN_VI0_R2, FN_VI0_R2_B, | ||
3090 | FN_SCL2_CIS_C, 0, 0, | ||
3091 | /* IP0_19_16 [4] */ | ||
3092 | FN_D5, FN_SCIFB1_TXD_F, FN_SCIFB0_TXD_C, FN_VI3_DATA5, | ||
3093 | FN_VI0_R1, FN_VI0_R1_B, FN_TX0_B, | ||
3094 | 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3095 | /* IP0_15_12 [4] */ | ||
3096 | FN_D4, FN_SCIFB1_RXD_F, FN_SCIFB0_RXD_C, FN_VI3_DATA4, | ||
3097 | FN_VI0_R0, FN_VI0_R0_B, FN_RX0_B, | ||
3098 | 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3099 | /* IP0_11_9 [3] */ | ||
3100 | FN_D3, FN_MSIOF3_TXD_B, FN_VI3_DATA3, FN_VI0_G7, FN_VI0_G7_B, | ||
3101 | 0, 0, 0, | ||
3102 | /* IP0_8_6 [3] */ | ||
3103 | FN_D2, FN_MSIOF3_RXD_B, FN_VI3_DATA2, FN_VI0_G6, FN_VI0_G6_B, | ||
3104 | 0, 0, 0, | ||
3105 | /* IP0_5_3 [3] */ | ||
3106 | FN_D1, FN_MSIOF3_SYNC_B, FN_VI3_DATA1, FN_VI0_G5, FN_VI0_G5_B, | ||
3107 | 0, 0, 0, | ||
3108 | /* IP0_2_0 [3] */ | ||
3109 | FN_D0, FN_MSIOF3_SCK_B, FN_VI3_DATA0, FN_VI0_G4, FN_VI0_G4_B, | ||
3110 | 0, 0, 0, } | ||
3111 | }, | ||
3112 | { PINMUX_CFG_REG_VAR("IPSR1", 0xE6060024, 32, | ||
3113 | 2, 2, 2, 4, 4, 3, 3, 4, 4, 4) { | ||
3114 | /* IP1_31_30 [2] */ | ||
3115 | 0, 0, 0, 0, | ||
3116 | /* IP1_29_28 [2] */ | ||
3117 | FN_A1, FN_PWM4, 0, 0, | ||
3118 | /* IP1_27_26 [2] */ | ||
3119 | FN_A0, FN_PWM3, 0, 0, | ||
3120 | /* IP1_25_22 [4] */ | ||
3121 | FN_D15, FN_SCIFB1_TXD_C, FN_AVB_TXD7, FN_TX1_B, | ||
3122 | FN_VI0_FIELD, FN_VI0_FIELD_B, FN_VI2_DATA7_VI2_B7, | ||
3123 | 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3124 | /* IP1_21_18 [4] */ | ||
3125 | FN_D14, FN_SCIFB1_RXD_C, FN_AVB_TXD6, FN_RX1_B, | ||
3126 | FN_VI0_CLKENB, FN_VI0_CLKENB_B, FN_VI2_DATA6_VI2_B6, | ||
3127 | 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3128 | /* IP1_17_15 [3] */ | ||
3129 | FN_D13, FN_AVB_TXD5, FN_VI0_VSYNC_N, | ||
3130 | FN_VI0_VSYNC_N_B, FN_VI2_DATA5_VI2_B5, | ||
3131 | 0, 0, 0, | ||
3132 | /* IP1_14_12 [3] */ | ||
3133 | FN_D12, FN_SCIFA1_RTS_N_C, FN_AVB_TXD4, | ||
3134 | FN_VI0_HSYNC_N, FN_VI0_HSYNC_N_B, FN_VI2_DATA4_VI2_B4, | ||
3135 | 0, 0, | ||
3136 | /* IP1_11_8 [4] */ | ||
3137 | FN_D11, FN_SCIFA1_CTS_N_C, FN_AVB_TXD3, FN_MII_TXD3, | ||
3138 | FN_VI0_G3, FN_VI0_G3_B, FN_VI2_DATA3_VI2_B3, | ||
3139 | 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3140 | /* IP1_7_4 [4] */ | ||
3141 | FN_D10, FN_SCIFA1_TXD_C, FN_AVB_TXD2, FN_MII_TXD2, | ||
3142 | FN_VI0_G2, FN_VI0_G2_B, FN_VI2_DATA2_VI2_B2, | ||
3143 | 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3144 | /* IP1_3_0 [4] */ | ||
3145 | FN_D9, FN_SCIFA1_RXD_C, FN_AVB_TXD1, FN_MII_TXD1, | ||
3146 | FN_VI0_G1, FN_VI0_G1_B, FN_VI2_DATA1_VI2_B1, | ||
3147 | 0, 0, 0, 0, 0, 0, 0, 0, 0, } | ||
3148 | }, | ||
3149 | { PINMUX_CFG_REG_VAR("IPSR2", 0xE6060028, 32, | ||
3150 | 3, 3, 4, 4, 3, 3, 3, 3, 3, 3) { | ||
3151 | /* IP2_31_29 [3] */ | ||
3152 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3153 | /* IP2_28_26 [3] */ | ||
3154 | FN_A10, FN_SSI_SDATA5_B, FN_MSIOF2_SYNC, FN_VI0_R6, | ||
3155 | FN_VI0_R6_B, FN_VI2_DATA2_VI2_B2_B, 0, 0, | ||
3156 | /* IP2_25_22 [4] */ | ||
3157 | FN_A9, FN_SCIFA1_CTS_N_B, FN_SSI_WS5_B, FN_VI0_R5, | ||
3158 | FN_VI0_R5_B, FN_SCIFB2_TXD_C, 0, FN_VI2_DATA1_VI2_B1_B, | ||
3159 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3160 | /* IP2_21_18 [4] */ | ||
3161 | FN_A8, FN_SCIFA1_RXD_B, FN_SSI_SCK5_B, FN_VI0_R4, | ||
3162 | FN_VI0_R4_B, FN_SCIFB2_RXD_C, 0, FN_VI2_DATA0_VI2_B0_B, | ||
3163 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3164 | /* IP2_17_15 [3] */ | ||
3165 | FN_A7, FN_SCIFA1_SCK_B, FN_AUDIO_CLKOUT_B, FN_TPU0TO3, | ||
3166 | 0, 0, 0, 0, | ||
3167 | /* IP2_14_12 [3] */ | ||
3168 | FN_A6, FN_SCIFA1_RTS_N_B, FN_TPU0TO2, 0, 0, 0, 0, 0, | ||
3169 | /* IP2_11_9 [3] */ | ||
3170 | FN_A5, FN_SCIFA1_TXD_B, FN_TPU0TO1, 0, 0, 0, 0, 0, | ||
3171 | /* IP2_8_6 [3] */ | ||
3172 | FN_A4, FN_MSIOF1_TXD_B, FN_TPU0TO0, 0, 0, 0, 0, 0, | ||
3173 | /* IP2_5_3 [3] */ | ||
3174 | FN_A3, FN_PWM6, FN_MSIOF1_SS2_B, 0, 0, 0, 0, 0, | ||
3175 | /* IP2_2_0 [3] */ | ||
3176 | FN_A2, FN_PWM5, FN_MSIOF1_SS1_B, 0, 0, 0, 0, 0, } | ||
3177 | }, | ||
3178 | { PINMUX_CFG_REG_VAR("IPSR3", 0xE606002C, 32, | ||
3179 | 3, 3, 3, 3, 2, 3, 3, 4, 4, 4) { | ||
3180 | /* IP3_31_29 [3] */ | ||
3181 | FN_A20, FN_SPCLK, FN_VI1_R3, FN_VI1_R3_B, FN_VI2_G4, | ||
3182 | 0, 0, 0, | ||
3183 | /* IP3_28_26 [3] */ | ||
3184 | FN_A19, FN_AD_NCS_N_B, FN_ATACS01_N, FN_EX_WAIT0_B, | ||
3185 | 0, 0, 0, 0, | ||
3186 | /* IP3_25_23 [3] */ | ||
3187 | FN_A18, FN_AD_CLK_B, FN_ATAG1_N, 0, 0, 0, 0, 0, | ||
3188 | /* IP3_22_20 [3] */ | ||
3189 | FN_A17, FN_AD_DO_B, FN_ATADIR1_N, 0, 0, 0, 0, 0, | ||
3190 | /* IP3_19_18 [2] */ | ||
3191 | FN_A16, FN_ATAWR1_N, 0, 0, | ||
3192 | /* IP3_17_15 [3] */ | ||
3193 | FN_A15, FN_SCIFB2_SCK_B, FN_ATARD1_N, FN_MSIOF2_SS2, | ||
3194 | 0, 0, 0, 0, | ||
3195 | /* IP3_14_12 [3] */ | ||
3196 | FN_A14, FN_SCIFB2_TXD_B, FN_ATACS11_N, FN_MSIOF2_SS1, | ||
3197 | 0, 0, 0, 0, | ||
3198 | /* IP3_11_8 [4] */ | ||
3199 | FN_A13, FN_SCIFB2_RTS_N_B, FN_EX_WAIT2, | ||
3200 | FN_MSIOF2_RXD, FN_VI1_R2, FN_VI1_R2_B, FN_VI2_G2, | ||
3201 | FN_VI2_DATA5_VI2_B5_B, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3202 | /* IP3_7_4 [4] */ | ||
3203 | FN_A12, FN_SCIFB2_RXD_B, FN_MSIOF2_TXD, FN_VI1_R1, | ||
3204 | FN_VI1_R1_B, FN_VI2_G1, FN_VI2_DATA4_VI2_B4_B, | ||
3205 | 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
3206 | /* IP3_3_0 [4] */ | ||
3207 | FN_A11, FN_SCIFB2_CTS_N_B, FN_MSIOF2_SCK, FN_VI1_R0, | ||
3208 | FN_VI1_R0_B, FN_VI2_G0, FN_VI2_DATA3_VI2_B3_B, 0, | ||
3209 | 0, 0, 0, 0, 0, 0, 0, 0, } | ||
3210 | }, | ||
3211 | { PINMUX_CFG_REG_VAR("IPSR4", 0xE6060030, 32, | ||
3212 | 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) { | ||
3213 | /* IP4_31_30 [2] */ | ||
3214 | 0, 0, 0, 0, | ||
3215 | /* IP4_29_27 [3] */ | ||
3216 | FN_EX_CS2_N, FN_GPS_SIGN, FN_HRTS1_N_B, | ||
3217 | FN_VI3_CLKENB, FN_VI1_G0, FN_VI1_G0_B, FN_VI2_R2, 0, | ||
3218 | /* IP4_26_24 [3] */ | ||
3219 | FN_EX_CS1_N, FN_GPS_CLK, FN_HCTS1_N_B, FN_VI1_FIELD, | ||
3220 | FN_VI1_FIELD_B, FN_VI2_R1, 0, 0, | ||
3221 | /* IP4_23_21 [3] */ | ||
3222 | FN_EX_CS0_N, FN_HRX1_B, FN_VI1_G5, FN_VI1_G5_B, FN_VI2_R0, | ||
3223 | FN_HTX0_B, FN_MSIOF0_SS1_B, 0, | ||
3224 | /* IP4_20_18 [3] */ | ||
3225 | FN_CS1_N_A26, FN_SPEEDIN, FN_VI0_R7, FN_VI0_R7_B, | ||
3226 | FN_VI2_CLK, FN_VI2_CLK_B, 0, 0, | ||
3227 | /* IP4_17_15 [3] */ | ||
3228 | FN_CS0_N, FN_VI1_R6, FN_VI1_R6_B, FN_VI2_G3, FN_MSIOF0_SS2_B, | ||
3229 | 0, 0, 0, | ||
3230 | /* IP4_14_12 [3] */ | ||
3231 | FN_A25, FN_SSL, FN_VI1_G6, FN_VI1_G6_B, FN_VI2_FIELD, | ||
3232 | FN_VI2_FIELD_B, 0, 0, | ||
3233 | /* IP4_11_9 [3] */ | ||
3234 | FN_A24, FN_IO3, FN_VI1_R7, FN_VI1_R7_B, FN_VI2_CLKENB, | ||
3235 | FN_VI2_CLKENB_B, 0, 0, | ||
3236 | /* IP4_8_6 [3] */ | ||
3237 | FN_A23, FN_IO2, FN_VI1_G7, FN_VI1_G7_B, FN_VI2_G7, 0, 0, 0, | ||
3238 | /* IP4_5_3 [3] */ | ||
3239 | FN_A22, FN_MISO_IO1, FN_VI1_R5, FN_VI1_R5_B, FN_VI2_G6, 0, 0, 0, | ||
3240 | /* IP4_2_0 [3] */ | ||
3241 | FN_A21, FN_MOSI_IO0, FN_VI1_R4, FN_VI1_R4_B, FN_VI2_G5, 0, 0, 0, | ||
3242 | } | ||
3243 | }, | ||
3244 | { PINMUX_CFG_REG_VAR("IPSR5", 0xE6060034, 32, | ||
3245 | 2, 3, 3, 3, 3, 3, 2, 3, 4, 3, 3) { | ||
3246 | /* IP5_31_30 [2] */ | ||
3247 | 0, 0, 0, 0, | ||
3248 | /* IP5_29_27 [3] */ | ||
3249 | FN_DREQ0_N, FN_VI1_HSYNC_N, FN_VI1_HSYNC_N_B, FN_VI2_R7, | ||
3250 | FN_SSI_SCK78_C, FN_SSI_WS78_B, 0, 0, | ||
3251 | /* IP5_26_24 [3] */ | ||
3252 | FN_EX_WAIT0, FN_IRQ3, FN_INTC_IRQ3_N, | ||
3253 | FN_VI3_CLK, FN_SCIFA0_RTS_N_B, FN_HRX0_B, | ||
3254 | FN_MSIOF0_SCK_B, 0, | ||
3255 | /* IP5_23_21 [3] */ | ||
3256 | FN_WE1_N, FN_IERX, FN_CAN1_RX, FN_VI1_G4, | ||
3257 | FN_VI1_G4_B, FN_VI2_R6, FN_SCIFA0_CTS_N_B, | ||
3258 | FN_IERX_C, 0, | ||
3259 | /* IP5_20_18 [3] */ | ||
3260 | FN_WE0_N, FN_IECLK, FN_CAN_CLK, | ||
3261 | FN_VI2_VSYNC_N, FN_SCIFA0_TXD_B, FN_VI2_VSYNC_N_B, 0, 0, | ||
3262 | /* IP5_17_15 [3] */ | ||
3263 | FN_RD_WR_N, FN_VI1_G3, FN_VI1_G3_B, FN_VI2_R5, FN_SCIFA0_RXD_B, | ||
3264 | FN_INTC_IRQ4_N, 0, 0, | ||
3265 | /* IP5_14_13 [2] */ | ||
3266 | FN_RD_N, FN_CAN0_TX, FN_SCIFA0_SCK_B, 0, | ||
3267 | /* IP5_12_10 [3] */ | ||
3268 | FN_BS_N, FN_IETX, FN_HTX1_B, FN_CAN1_TX, FN_DRACK0, FN_IETX_C, | ||
3269 | 0, 0, | ||
3270 | /* IP5_9_6 [4] */ | ||
3271 | FN_EX_CS5_N, FN_CAN0_RX, FN_MSIOF1_RXD_B, FN_VI3_VSYNC_N, | ||
3272 | FN_VI1_G2, FN_VI1_G2_B, FN_VI2_R4, FN_SDA1, FN_INTC_EN1_N, | ||
3273 | FN_SDA1_CIS, 0, 0, 0, 0, 0, 0, | ||
3274 | /* IP5_5_3 [3] */ | ||
3275 | FN_EX_CS4_N, FN_MSIOF1_SCK_B, FN_VI3_HSYNC_N, | ||
3276 | FN_VI2_HSYNC_N, FN_SCL1, FN_VI2_HSYNC_N_B, | ||
3277 | FN_INTC_EN0_N, FN_SCL1_CIS, | ||
3278 | /* IP5_2_0 [3] */ | ||
3279 | FN_EX_CS3_N, FN_GPS_MAG, FN_VI3_FIELD, FN_VI1_G1, FN_VI1_G1_B, | ||
3280 | FN_VI2_R3, 0, 0, } | ||
3281 | }, | ||
3282 | { PINMUX_CFG_REG_VAR("IPSR6", 0xE6060038, 32, | ||
3283 | 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3) { | ||
3284 | /* IP6_31_29 [3] */ | ||
3285 | FN_ETH_REF_CLK, FN_RMII_REF_CLK, FN_HCTS0_N_E, | ||
3286 | FN_STP_IVCXO27_1_B, FN_HRX0_F, 0, 0, 0, | ||
3287 | /* IP6_28_26 [3] */ | ||
3288 | FN_ETH_LINK, FN_RMII_LINK, FN_HTX0_E, | ||
3289 | FN_STP_IVCXO27_0_B, FN_SCIFB1_TXD_G, FN_TX1_E, 0, 0, | ||
3290 | /* IP6_25_23 [3] */ | ||
3291 | FN_ETH_RXD1, FN_RMII_RXD1, FN_HRX0_E, FN_STP_ISSYNC_0_B, | ||
3292 | FN_TS_SCK0_D, FN_GLO_I1_C, FN_SCIFB1_RXD_G, FN_RX1_E, | ||
3293 | /* IP6_22_20 [3] */ | ||
3294 | FN_ETH_RXD0, FN_RMII_RXD0, FN_STP_ISEN_0_B, FN_TS_SDAT0_D, | ||
3295 | FN_GLO_I0_C, FN_SCIFB1_SCK_G, FN_SCK1_E, 0, | ||
3296 | /* IP6_19_17 [3] */ | ||
3297 | FN_ETH_RX_ER, FN_RMII_RX_ER, FN_STP_ISD_0_B, | ||
3298 | FN_TS_SPSYNC0_D, FN_GLO_Q1_C, FN_SDA2_E, FN_SDA2_CIS_E, 0, | ||
3299 | /* IP6_16_14 [3] */ | ||
3300 | FN_ETH_CRS_DV, FN_RMII_CRS_DV, FN_STP_ISCLK_0_B, | ||
3301 | FN_TS_SDEN0_D, FN_GLO_Q0_C, FN_SCL2_E, | ||
3302 | FN_SCL2_CIS_E, 0, | ||
3303 | /* IP6_13_11 [3] */ | ||
3304 | FN_DACK2, FN_IRQ2, FN_INTC_IRQ2_N, | ||
3305 | FN_SSI_SDATA6_B, FN_HRTS0_N_B, FN_MSIOF0_RXD_B, 0, 0, | ||
3306 | /* IP6_10_9 [2] */ | ||
3307 | FN_DREQ2_N, FN_HSCK1_B, FN_HCTS0_N_B, FN_MSIOF0_TXD_B, | ||
3308 | /* IP6_8_6 [3] */ | ||
3309 | FN_DACK1, FN_IRQ1, FN_INTC_IRQ1_N, FN_SSI_WS6_B, | ||
3310 | FN_SSI_SDATA8_C, 0, 0, 0, | ||
3311 | /* IP6_5_3 [3] */ | ||
3312 | FN_DREQ1_N, FN_VI1_CLKENB, FN_VI1_CLKENB_B, | ||
3313 | FN_SSI_SDATA7_C, FN_SSI_SCK78_B, 0, 0, 0, | ||
3314 | /* IP6_2_0 [3] */ | ||
3315 | FN_DACK0, FN_IRQ0, FN_INTC_IRQ0_N, FN_SSI_SCK6_B, | ||
3316 | FN_VI1_VSYNC_N, FN_VI1_VSYNC_N_B, FN_SSI_WS78_C, 0, } | ||
3317 | }, | ||
3318 | { PINMUX_CFG_REG_VAR("IPSR7", 0xE606003C, 32, | ||
3319 | 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 3, 3) { | ||
3320 | /* IP7_31 [1] */ | ||
3321 | 0, 0, | ||
3322 | /* IP7_30_29 [2] */ | ||
3323 | FN_VI0_DATA0_VI0_B0, FN_ATACS10_N, FN_AVB_RXD2, | ||
3324 | FN_MII_RXD2, | ||
3325 | /* IP7_28_27 [2] */ | ||
3326 | FN_VI0_CLK, FN_ATACS00_N, FN_AVB_RXD1, FN_MII_RXD1, | ||
3327 | /* IP7_26_25 [2] */ | ||
3328 | FN_DU1_DOTCLKIN, FN_AUDIO_CLKC, FN_AUDIO_CLKOUT_C, 0, | ||
3329 | /* IP7_24_22 [3] */ | ||
3330 | FN_PWM2, FN_PWMFSW0, FN_SCIFA2_RXD_C, FN_PCMWE_N, FN_IECLK_C, | ||
3331 | 0, 0, 0, | ||
3332 | /* IP7_21_19 [3] */ | ||
3333 | FN_PWM1, FN_SCIFA2_TXD_C, FN_STP_ISSYNC_1_B, FN_TS_SCK1_C, | ||
3334 | FN_GLO_RFON_C, FN_PCMOE_N, 0, 0, | ||
3335 | /* IP7_18_16 [3] */ | ||
3336 | FN_PWM0, FN_SCIFA2_SCK_C, FN_STP_ISEN_1_B, FN_TS_SDAT1_C, | ||
3337 | FN_GLO_SS_C, 0, 0, 0, | ||
3338 | /* IP7_15_13 [3] */ | ||
3339 | FN_ETH_MDC, FN_RMII_MDC, FN_STP_ISD_1_B, | ||
3340 | FN_TS_SPSYNC1_C, FN_GLO_SDATA_C, 0, 0, 0, | ||
3341 | /* IP7_12_10 [3] */ | ||
3342 | FN_ETH_TXD0, FN_RMII_TXD0, FN_STP_ISCLK_1_B, FN_TS_SDEN1_C, | ||
3343 | FN_GLO_SCLK_C, 0, 0, 0, | ||
3344 | /* IP7_9_8 [2] */ | ||
3345 | FN_ETH_MAGIC, FN_RMII_MAGIC, FN_SIM0_RST_C, 0, | ||
3346 | /* IP7_7_6 [2] */ | ||
3347 | FN_ETH_TX_EN, FN_RMII_TX_EN, FN_SIM0_CLK_C, FN_HRTS0_N_F, | ||
3348 | /* IP7_5_3 [3] */ | ||
3349 | FN_ETH_TXD1, FN_RMII_TXD1, FN_HTX0_F, FN_BPFCLK_G, FN_RDS_CLK_F, | ||
3350 | 0, 0, 0, | ||
3351 | /* IP7_2_0 [3] */ | ||
3352 | FN_ETH_MDIO, FN_RMII_MDIO, FN_HRTS0_N_E, | ||
3353 | FN_SIM0_D_C, FN_HCTS0_N_F, 0, 0, 0, } | ||
3354 | }, | ||
3355 | { PINMUX_CFG_REG_VAR("IPSR8", 0xE6060040, 32, | ||
3356 | 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, | ||
3357 | 2, 2, 2, 2, 2, 2, 2) { | ||
3358 | /* IP8_31 [1] */ | ||
3359 | 0, 0, | ||
3360 | /* IP8_30_29 [2] */ | ||
3361 | FN_SD0_CMD, FN_SCIFB1_SCK_B, FN_VI1_DATA1_VI1_B1_B, 0, | ||
3362 | /* IP8_28 [1] */ | ||
3363 | FN_SD0_CLK, FN_VI1_DATA0_VI1_B0_B, | ||
3364 | /* IP8_27 [1] */ | ||
3365 | FN_VI1_DATA6_VI1_B6, FN_AVB_GTXREFCLK, | ||
3366 | /* IP8_26 [1] */ | ||
3367 | FN_VI1_DATA5_VI1_B5, FN_AVB_PHY_INT, | ||
3368 | /* IP8_25_24 [2] */ | ||
3369 | FN_VI1_DATA4_VI1_B4, FN_SCIFA1_RTS_N_D, | ||
3370 | FN_AVB_MAGIC, FN_MII_MAGIC, | ||
3371 | /* IP8_23_22 [2] */ | ||
3372 | FN_VI1_DATA3_VI1_B3, FN_SCIFA1_CTS_N_D, FN_AVB_GTX_CLK, 0, | ||
3373 | /* IP8_21_20 [2] */ | ||
3374 | FN_VI1_DATA2_VI1_B2, FN_SCIFA1_TXD_D, FN_AVB_MDIO, | ||
3375 | FN_MII_MDIO, | ||
3376 | /* IP8_19_18 [2] */ | ||
3377 | FN_VI1_DATA1_VI1_B1, FN_SCIFA1_RXD_D, FN_AVB_MDC, FN_MII_MDC, | ||
3378 | /* IP8_17_16 [2] */ | ||
3379 | FN_VI1_DATA0_VI1_B0, FN_SCIFA1_SCK_D, FN_AVB_CRS, FN_MII_CRS, | ||
3380 | /* IP8_15_14 [2] */ | ||
3381 | FN_VI1_CLK, FN_AVB_RX_DV, FN_MII_RX_DV, 0, | ||
3382 | /* IP8_13_12 [2] */ | ||
3383 | FN_VI0_DATA7_VI0_B7, FN_AVB_RX_CLK, FN_MII_RX_CLK, 0, | ||
3384 | /* IP8_11_10 [2] */ | ||
3385 | FN_VI0_DATA6_VI0_B6, FN_AVB_RX_ER, FN_MII_RX_ER, 0, | ||
3386 | /* IP8_9_8 [2] */ | ||
3387 | FN_VI0_DATA5_VI0_B5, FN_EX_WAIT1, FN_AVB_RXD7, 0, | ||
3388 | /* IP8_7_6 [2] */ | ||
3389 | FN_VI0_DATA4_VI0_B4, FN_ATAG0_N, FN_AVB_RXD6, 0, | ||
3390 | /* IP8_5_4 [2] */ | ||
3391 | FN_VI0_DATA3_VI0_B3, FN_ATADIR0_N, FN_AVB_RXD5, 0, | ||
3392 | /* IP8_3_2 [2] */ | ||
3393 | FN_VI0_DATA2_VI0_B2, FN_ATAWR0_N, FN_AVB_RXD4, 0, | ||
3394 | /* IP8_1_0 [2] */ | ||
3395 | FN_VI0_DATA1_VI0_B1, FN_ATARD0_N, FN_AVB_RXD3, FN_MII_RXD3, } | ||
3396 | }, | ||
3397 | { PINMUX_CFG_REG_VAR("IPSR9", 0xE6060044, 32, | ||
3398 | 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2) { | ||
3399 | /* IP9_31_28 [4] */ | ||
3400 | FN_SD1_CD, FN_MMC1_D6, FN_TS_SDEN1, FN_USB1_EXTP, | ||
3401 | FN_GLO_SS, FN_VI0_CLK_B, FN_SCL2_D, FN_SCL2_CIS_D, | ||
3402 | FN_SIM0_CLK_B, FN_VI3_CLK_B, 0, 0, 0, 0, 0, 0, | ||
3403 | /* IP9_27_26 [2] */ | ||
3404 | FN_SD1_DAT3, FN_AVB_RXD0, FN_MII_RXD0, FN_SCIFB0_RTS_N_B, | ||
3405 | /* IP9_25_24 [2] */ | ||
3406 | FN_SD1_DAT2, FN_AVB_COL, FN_MII_COL, FN_SCIFB0_CTS_N_B, | ||
3407 | /* IP9_23_22 [2] */ | ||
3408 | FN_SD1_DAT1, FN_AVB_LINK, FN_MII_LINK, FN_SCIFB0_TXD_B, | ||
3409 | /* IP9_21_20 [2] */ | ||
3410 | FN_SD1_DAT0, FN_AVB_TX_CLK, FN_MII_TX_CLK, FN_SCIFB0_RXD_B, | ||
3411 | /* IP9_19_18 [2] */ | ||
3412 | FN_SD1_CMD, FN_AVB_TX_ER, FN_MII_TX_ER, FN_SCIFB0_SCK_B, | ||
3413 | /* IP9_17_16 [2] */ | ||
3414 | FN_SD1_CLK, FN_AVB_TX_EN, FN_MII_TX_EN, 0, | ||
3415 | /* IP9_15_12 [4] */ | ||
3416 | FN_SD0_WP, FN_MMC0_D7, FN_TS_SPSYNC0_B, FN_USB0_IDIN, | ||
3417 | FN_GLO_SDATA, FN_VI1_DATA7_VI1_B7_B, FN_SDA1_B, | ||
3418 | FN_SDA1_CIS_B, FN_VI2_DATA7_VI2_B7_B, 0, 0, 0, 0, 0, 0, 0, | ||
3419 | /* IP9_11_8 [4] */ | ||
3420 | FN_SD0_CD, FN_MMC0_D6, FN_TS_SDEN0_B, FN_USB0_EXTP, | ||
3421 | FN_GLO_SCLK, FN_VI1_DATA6_VI1_B6_B, FN_SCL1_B, | ||
3422 | FN_SCL1_CIS_B, FN_VI2_DATA6_VI2_B6_B, 0, 0, 0, 0, 0, 0, 0, | ||
3423 | /* IP9_7_6 [2] */ | ||
3424 | FN_SD0_DAT3, FN_SCIFB1_RTS_N_B, FN_VI1_DATA5_VI1_B5_B, 0, | ||
3425 | /* IP9_5_4 [2] */ | ||
3426 | FN_SD0_DAT2, FN_SCIFB1_CTS_N_B, FN_VI1_DATA4_VI1_B4_B, 0, | ||
3427 | /* IP9_3_2 [2] */ | ||
3428 | FN_SD0_DAT1, FN_SCIFB1_TXD_B, FN_VI1_DATA3_VI1_B3_B, 0, | ||
3429 | /* IP9_1_0 [2] */ | ||
3430 | FN_SD0_DAT0, FN_SCIFB1_RXD_B, FN_VI1_DATA2_VI1_B2_B, 0, } | ||
3431 | }, | ||
3432 | { PINMUX_CFG_REG_VAR("IPSR10", 0xE6060048, 32, | ||
3433 | 2, 4, 3, 4, 4, 4, 4, 3, 4) { | ||
3434 | /* IP10_31_30 [2] */ | ||
3435 | 0, 0, 0, 0, | ||
3436 | /* IP10_29_26 [4] */ | ||
3437 | FN_SD2_CD, FN_MMC0_D4, FN_TS_SDAT0_B, FN_USB2_EXTP, FN_GLO_I0, | ||
3438 | FN_VI0_DATA6_VI0_B6_B, FN_HCTS0_N_D, FN_TS_SDAT1_B, | ||
3439 | FN_GLO_I0_B, FN_VI3_DATA6_B, 0, 0, 0, 0, 0, 0, | ||
3440 | /* IP10_25_23 [3] */ | ||
3441 | FN_SD2_DAT3, FN_MMC0_D3, FN_SIM0_RST, FN_VI0_DATA5_VI0_B5_B, | ||
3442 | FN_HTX0_D, FN_TS_SPSYNC1_B, FN_GLO_Q1_B, FN_VI3_DATA5_B, | ||
3443 | /* IP10_22_19 [4] */ | ||
3444 | FN_SD2_DAT2, FN_MMC0_D2, FN_BPFCLK_B, FN_RDS_CLK, | ||
3445 | FN_VI0_DATA4_VI0_B4_B, FN_HRX0_D, FN_TS_SDEN1_B, | ||
3446 | FN_GLO_Q0_B, FN_VI3_DATA4_B, 0, 0, 0, 0, 0, 0, 0, | ||
3447 | /* IP10_18_15 [4] */ | ||
3448 | FN_SD2_DAT1, FN_MMC0_D1, FN_FMIN_B, FN_RDS_DATA, | ||
3449 | FN_VI0_DATA3_VI0_B3_B, FN_SCIFB1_TXD_E, FN_TX1_D, | ||
3450 | FN_TS_SCK0_C, FN_GLO_RFON_B, FN_VI3_DATA3_B, | ||
3451 | 0, 0, 0, 0, 0, 0, | ||
3452 | /* IP10_14_11 [4] */ | ||
3453 | FN_SD2_DAT0, FN_MMC0_D0, FN_FMCLK_B, | ||
3454 | FN_VI0_DATA2_VI0_B2_B, FN_SCIFB1_RXD_E, FN_RX1_D, | ||
3455 | FN_TS_SDAT0_C, FN_GLO_SS_B, FN_VI3_DATA2_B, | ||
3456 | 0, 0, 0, 0, 0, 0, 0, | ||
3457 | /* IP10_10_7 [4] */ | ||
3458 | FN_SD2_CMD, FN_MMC0_CMD, FN_SIM0_D, | ||
3459 | FN_VI0_DATA1_VI0_B1_B, FN_SCIFB1_SCK_E, FN_SCK1_D, | ||
3460 | FN_TS_SPSYNC0_C, FN_GLO_SDATA_B, FN_VI3_DATA1_B, | ||
3461 | 0, 0, 0, 0, 0, 0, 0, | ||
3462 | /* IP10_6_4 [3] */ | ||
3463 | FN_SD2_CLK, FN_MMC0_CLK, FN_SIM0_CLK, | ||
3464 | FN_VI0_DATA0_VI0_B0_B, FN_TS_SDEN0_C, FN_GLO_SCLK_B, | ||
3465 | FN_VI3_DATA0_B, 0, | ||
3466 | /* IP10_3_0 [4] */ | ||
3467 | FN_SD1_WP, FN_MMC1_D7, FN_TS_SPSYNC1, FN_USB1_IDIN, | ||
3468 | FN_GLO_RFON, FN_VI1_CLK_B, FN_SDA2_D, FN_SDA2_CIS_D, | ||
3469 | FN_SIM0_D_B, 0, 0, 0, 0, 0, 0, 0, } | ||
3470 | }, | ||
3471 | { PINMUX_CFG_REG_VAR("IPSR11", 0xE606004C, 32, | ||
3472 | 2, 3, 3, 2, 4, 3, 2, 2, 2, 2, 2, 1, 4) { | ||
3473 | /* IP11_31_30 [2] */ | ||
3474 | FN_SSI_SCK0129, FN_CAN_CLK_B, FN_MOUT0, 0, | ||
3475 | /* IP11_29_27 [3] */ | ||
3476 | FN_MLB_DAT, FN_SPV_EVEN, FN_SCIFB1_TXD_D, FN_TX1_C, FN_BPFCLK_C, | ||
3477 | FN_RDS_CLK_B, 0, 0, | ||
3478 | /* IP11_26_24 [3] */ | ||
3479 | FN_MLB_SIG, FN_SCIFB1_RXD_D, FN_RX1_C, FN_SDA2_B, FN_SDA2_CIS_B, | ||
3480 | 0, 0, 0, | ||
3481 | /* IP11_23_22 [2] */ | ||
3482 | FN_MLB_CLK, FN_SCL2_B, FN_SCL2_CIS_B, 0, | ||
3483 | /* IP11_21_18 [4] */ | ||
3484 | FN_SD3_WP, FN_MMC1_D5, FN_TS_SCK1, FN_GLO_Q1, FN_FMIN_C, | ||
3485 | FN_RDS_DATA_B, FN_FMIN_E, FN_RDS_DATA_D, FN_FMIN_F, | ||
3486 | FN_RDS_DATA_E, 0, 0, 0, 0, 0, 0, | ||
3487 | /* IP11_17_15 [3] */ | ||
3488 | FN_SD3_CD, FN_MMC1_D4, FN_TS_SDAT1, | ||
3489 | FN_VSP, FN_GLO_Q0, FN_SIM0_RST_B, 0, 0, | ||
3490 | /* IP11_14_13 [2] */ | ||
3491 | FN_SD3_DAT3, FN_MMC1_D3, FN_SCKZ, 0, | ||
3492 | /* IP11_12_11 [2] */ | ||
3493 | FN_SD3_DAT2, FN_MMC1_D2, FN_SDATA, 0, | ||
3494 | /* IP11_10_9 [2] */ | ||
3495 | FN_SD3_DAT1, FN_MMC1_D1, FN_MDATA, 0, | ||
3496 | /* IP11_8_7 [2] */ | ||
3497 | FN_SD3_DAT0, FN_MMC1_D0, FN_STM_N, 0, | ||
3498 | /* IP11_6_5 [2] */ | ||
3499 | FN_SD3_CMD, FN_MMC1_CMD, FN_MTS_N, 0, | ||
3500 | /* IP11_4 [1] */ | ||
3501 | FN_SD3_CLK, FN_MMC1_CLK, | ||
3502 | /* IP11_3_0 [4] */ | ||
3503 | FN_SD2_WP, FN_MMC0_D5, FN_TS_SCK0_B, FN_USB2_IDIN, | ||
3504 | FN_GLO_I1, FN_VI0_DATA7_VI0_B7_B, FN_HRTS0_N_D, | ||
3505 | FN_TS_SCK1_B, FN_GLO_I1_B, FN_VI3_DATA7_B, 0, 0, 0, 0, 0, 0, } | ||
3506 | }, | ||
3507 | { PINMUX_CFG_REG_VAR("IPSR12", 0xE6060050, 32, | ||
3508 | 1, 3, 3, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2) { | ||
3509 | /* IP12_31 [1] */ | ||
3510 | 0, 0, | ||
3511 | /* IP12_30_28 [3] */ | ||
3512 | FN_SSI_WS5, FN_SCIFB1_RXD, FN_IECLK_B, | ||
3513 | FN_DU2_EXVSYNC_DU2_VSYNC, FN_QSTB_QHE, | ||
3514 | FN_CAN_DEBUGOUT4, 0, 0, | ||
3515 | /* IP12_27_25 [3] */ | ||
3516 | FN_SSI_SCK5, FN_SCIFB1_SCK, | ||
3517 | FN_IERX_B, FN_DU2_EXHSYNC_DU2_HSYNC, FN_QSTH_QHS, | ||
3518 | FN_CAN_DEBUGOUT3, 0, 0, | ||
3519 | /* IP12_24_23 [2] */ | ||
3520 | FN_SSI_SDATA4, FN_STP_ISSYNC_0, FN_MSIOF1_RXD, | ||
3521 | FN_CAN_DEBUGOUT2, | ||
3522 | /* IP12_22_20 [3] */ | ||
3523 | FN_SSI_WS4, FN_STP_ISEN_0, FN_SCIFB0_RTS_N, | ||
3524 | FN_MSIOF1_TXD, FN_SSI_WS5_C, FN_CAN_DEBUGOUT1, 0, 0, | ||
3525 | /* IP12_19_17 [3] */ | ||
3526 | FN_SSI_SCK4, FN_STP_ISD_0, FN_SCIFB0_CTS_N, | ||
3527 | FN_MSIOF1_SS2, FN_SSI_SCK5_C, FN_CAN_DEBUGOUT0, 0, 0, | ||
3528 | /* IP12_16_14 [3] */ | ||
3529 | FN_SSI_SDATA3, FN_STP_ISCLK_0, | ||
3530 | FN_SCIFB0_TXD, FN_MSIOF1_SS1, FN_CAN_TXCLK, 0, 0, 0, | ||
3531 | /* IP12_13_11 [3] */ | ||
3532 | FN_SSI_WS34, FN_STP_IVCXO27_0, FN_SCIFB0_RXD, FN_MSIOF1_SYNC, | ||
3533 | FN_CAN_STEP0, 0, 0, 0, | ||
3534 | /* IP12_10_8 [3] */ | ||
3535 | FN_SSI_SCK34, FN_STP_OPWM_0, FN_SCIFB0_SCK, | ||
3536 | FN_MSIOF1_SCK, FN_CAN_DEBUG_HW_TRIGGER, 0, 0, 0, | ||
3537 | /* IP12_7_6 [2] */ | ||
3538 | FN_SSI_SDATA2, FN_CAN1_RX_B, FN_SSI_SCK1, FN_MOUT6, | ||
3539 | /* IP12_5_4 [2] */ | ||
3540 | FN_SSI_SDATA1, FN_CAN1_TX_B, FN_MOUT5, 0, | ||
3541 | /* IP12_3_2 [2] */ | ||
3542 | FN_SSI_SDATA0, FN_CAN0_RX_B, FN_MOUT2, 0, | ||
3543 | /* IP12_1_0 [2] */ | ||
3544 | FN_SSI_WS0129, FN_CAN0_TX_B, FN_MOUT1, 0, } | ||
3545 | }, | ||
3546 | { PINMUX_CFG_REG_VAR("IPSR13", 0xE6060054, 32, | ||
3547 | 1, 2, 3, 3, 4, 3, 3, 3, 3, 4, 3) { | ||
3548 | /* IP13_31 [1] */ | ||
3549 | 0, 0, | ||
3550 | /* IP13_30_29 [2] */ | ||
3551 | FN_AUDIO_CLKA, FN_SCIFB2_RTS_N, FN_CAN_DEBUGOUT14, 0, | ||
3552 | /* IP13_28_26 [3] */ | ||
3553 | FN_SSI_SDATA9, FN_STP_ISSYNC_1, FN_SCIFB2_CTS_N, FN_SSI_WS1, | ||
3554 | FN_SSI_SDATA5_C, FN_CAN_DEBUGOUT13, 0, 0, | ||
3555 | /* IP13_25_23 [3] */ | ||
3556 | FN_SSI_SDATA8, FN_STP_ISEN_1, FN_SCIFB2_TXD, FN_CAN0_TX_C, | ||
3557 | FN_CAN_DEBUGOUT12, FN_SSI_SDATA8_B, 0, 0, | ||
3558 | /* IP13_22_19 [4] */ | ||
3559 | FN_SSI_SDATA7, FN_STP_ISD_1, FN_SCIFB2_RXD, FN_SCIFA2_RTS_N, | ||
3560 | FN_TCLK2, FN_QSTVA_QVS, FN_CAN_DEBUGOUT11, FN_BPFCLK_E, | ||
3561 | FN_RDS_CLK_D, FN_SSI_SDATA7_B, FN_FMIN_G, FN_RDS_DATA_F, | ||
3562 | 0, 0, 0, 0, | ||
3563 | /* IP13_18_16 [3] */ | ||
3564 | FN_SSI_WS78, FN_STP_ISCLK_1, FN_SCIFB2_SCK, FN_SCIFA2_CTS_N, | ||
3565 | FN_DU2_DR7, FN_LCDOUT7, FN_CAN_DEBUGOUT10, 0, | ||
3566 | /* IP13_15_13 [3] */ | ||
3567 | FN_SSI_SCK78, FN_STP_IVCXO27_1, FN_SCK1, FN_SCIFA1_SCK, | ||
3568 | FN_DU2_DR6, FN_LCDOUT6, FN_CAN_DEBUGOUT9, 0, | ||
3569 | /* IP13_12_10 [3] */ | ||
3570 | FN_SSI_SDATA6, FN_FMIN_D, FN_RDS_DATA_C, FN_DU2_DR5, FN_LCDOUT5, | ||
3571 | FN_CAN_DEBUGOUT8, 0, 0, | ||
3572 | /* IP13_9_7 [3] */ | ||
3573 | FN_SSI_WS6, FN_SCIFB1_RTS_N, FN_CAN0_TX_D, FN_DU2_DR4, | ||
3574 | FN_LCDOUT4, FN_CAN_DEBUGOUT7, 0, 0, | ||
3575 | /* IP13_6_3 [4] */ | ||
3576 | FN_SSI_SCK6, FN_SCIFB1_CTS_N, FN_BPFCLK_D, FN_RDS_CLK_C, | ||
3577 | FN_DU2_DR3, FN_LCDOUT3, FN_CAN_DEBUGOUT6, | ||
3578 | FN_BPFCLK_F, FN_RDS_CLK_E, 0, 0, 0, 0, 0, 0, 0, | ||
3579 | /* IP13_2_0 [3] */ | ||
3580 | FN_SSI_SDATA5, FN_SCIFB1_TXD, FN_IETX_B, FN_DU2_DR2, | ||
3581 | FN_LCDOUT2, FN_CAN_DEBUGOUT5, 0, 0, } | ||
3582 | }, | ||
3583 | { PINMUX_CFG_REG_VAR("IPSR14", 0xE6060058, 32, | ||
3584 | 1, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3) { | ||
3585 | /* IP14_30 [1] */ | ||
3586 | 0, 0, | ||
3587 | /* IP14_30_28 [3] */ | ||
3588 | FN_SCIFA1_RTS_N, FN_AD_NCS_N, FN_RTS1_N_TANS, | ||
3589 | FN_MSIOF3_TXD, FN_DU1_DOTCLKOUT, FN_QSTVB_QVE, | ||
3590 | FN_HRTS0_N_C, 0, | ||
3591 | /* IP14_27_25 [3] */ | ||
3592 | FN_SCIFA1_CTS_N, FN_AD_CLK, FN_CTS1_N, FN_MSIOF3_RXD, | ||
3593 | FN_DU0_DOTCLKOUT, FN_QCLK, 0, 0, | ||
3594 | /* IP14_24_22 [3] */ | ||
3595 | FN_SCIFA1_TXD, FN_AD_DO, FN_TX1, FN_DU2_DG1, | ||
3596 | FN_LCDOUT9, 0, 0, 0, | ||
3597 | /* IP14_21_19 [3] */ | ||
3598 | FN_SCIFA1_RXD, FN_AD_DI, FN_RX1, | ||
3599 | FN_DU2_EXODDF_DU2_ODDF_DISP_CDE, FN_QCPV_QDE, 0, 0, 0, | ||
3600 | /* IP14_18_16 [3] */ | ||
3601 | FN_SCIFA0_RTS_N, FN_HRTS1_N, FN_RTS0_N_TANS, | ||
3602 | FN_MSIOF3_SS1, FN_DU2_DG0, FN_LCDOUT8, FN_PWM1_B, 0, | ||
3603 | /* IP14_15_12 [4] */ | ||
3604 | FN_SCIFA0_CTS_N, FN_HCTS1_N, FN_CTS0_N, FN_MSIOF3_SYNC, | ||
3605 | FN_DU2_DG3, FN_LCDOUT11, FN_PWM0_B, FN_SCL1_C, FN_SCL1_CIS_C, | ||
3606 | 0, 0, 0, 0, 0, 0, 0, | ||
3607 | /* IP14_11_9 [3] */ | ||
3608 | FN_SCIFA0_TXD, FN_HTX1, FN_TX0, FN_DU2_DR1, FN_LCDOUT1, | ||
3609 | 0, 0, 0, | ||
3610 | /* IP14_8_6 [3] */ | ||
3611 | FN_SCIFA0_RXD, FN_HRX1, FN_RX0, FN_DU2_DR0, FN_LCDOUT0, | ||
3612 | 0, 0, 0, | ||
3613 | /* IP14_5_3 [3] */ | ||
3614 | FN_SCIFA0_SCK, FN_HSCK1, FN_SCK0, FN_MSIOF3_SS2, FN_DU2_DG2, | ||
3615 | FN_LCDOUT10, FN_SDA1_C, FN_SDA1_CIS_C, | ||
3616 | /* IP14_2_0 [3] */ | ||
3617 | FN_AUDIO_CLKB, FN_SCIF_CLK, FN_CAN0_RX_D, | ||
3618 | FN_DVC_MUTE, FN_CAN0_RX_C, FN_CAN_DEBUGOUT15, | ||
3619 | FN_REMOCON, 0, } | ||
3620 | }, | ||
3621 | { PINMUX_CFG_REG_VAR("IPSR15", 0xE606005C, 32, | ||
3622 | 2, 2, 2, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3) { | ||
3623 | /* IP15_31_30 [2] */ | ||
3624 | 0, 0, 0, 0, | ||
3625 | /* IP15_29_28 [2] */ | ||
3626 | FN_MSIOF0_TXD, FN_ADICHS1, FN_DU2_DG6, FN_LCDOUT14, | ||
3627 | /* IP15_27_26 [2] */ | ||
3628 | FN_MSIOF0_SS1, FN_ADICHS0, FN_DU2_DG5, FN_LCDOUT13, | ||
3629 | /* IP15_25_23 [3] */ | ||
3630 | FN_MSIOF0_SYNC, FN_TS_SCK0, FN_SSI_SCK2, FN_ADIDATA, | ||
3631 | FN_DU2_DB7, FN_LCDOUT23, FN_SCIFA2_RXD_B, 0, | ||
3632 | /* IP15_22_20 [3] */ | ||
3633 | FN_MSIOF0_SCK, FN_TS_SDAT0, FN_ADICLK, | ||
3634 | FN_DU2_DB6, FN_LCDOUT22, 0, 0, 0, | ||
3635 | /* IP15_19_18 [2] */ | ||
3636 | FN_HRTS0_N, FN_SSI_WS9, FN_DU2_DB5, FN_LCDOUT21, | ||
3637 | /* IP15_17_16 [2] */ | ||
3638 | FN_HCTS0_N, FN_SSI_SCK9, FN_DU2_DB4, FN_LCDOUT20, | ||
3639 | /* IP15_15_14 [2] */ | ||
3640 | FN_HTX0, FN_DU2_DB3, FN_LCDOUT19, 0, | ||
3641 | /* IP15_13_12 [2] */ | ||
3642 | FN_HRX0, FN_DU2_DB2, FN_LCDOUT18, 0, | ||
3643 | /* IP15_11_9 [3] */ | ||
3644 | FN_HSCK0, FN_TS_SDEN0, FN_DU2_DG4, FN_LCDOUT12, FN_HCTS0_N_C, | ||
3645 | 0, 0, 0, | ||
3646 | /* IP15_8_6 [3] */ | ||
3647 | FN_SCIFA2_TXD, FN_BPFCLK, 0, FN_DU2_DB1, FN_LCDOUT17, | ||
3648 | FN_SDA2, FN_SDA2_CIS, 0, | ||
3649 | /* IP15_5_3 [3] */ | ||
3650 | FN_SCIFA2_RXD, FN_FMIN, 0, FN_DU2_DB0, FN_LCDOUT16, | ||
3651 | FN_SCL2, FN_SCL2_CIS, 0, | ||
3652 | /* IP15_2_0 [3] */ | ||
3653 | FN_SCIFA2_SCK, FN_FMCLK, 0, FN_MSIOF3_SCK, FN_DU2_DG7, | ||
3654 | FN_LCDOUT15, FN_SCIF_CLK_B, 0, } | ||
3655 | }, | ||
3656 | { PINMUX_CFG_REG_VAR("IPSR16", 0xE6060160, 32, | ||
3657 | 4, 4, 4, 4, 4, 4, 1, 1, 3, 3) { | ||
3658 | /* IP16_31_28 [4] */ | ||
3659 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3660 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3661 | /* IP16_27_24 [4] */ | ||
3662 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3663 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3664 | /* IP16_23_20 [4] */ | ||
3665 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3666 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3667 | /* IP16_19_16 [4] */ | ||
3668 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3669 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3670 | /* IP16_15_12 [4] */ | ||
3671 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3672 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3673 | /* IP16_11_8 [4] */ | ||
3674 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3675 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3676 | /* IP16_7 [1] */ | ||
3677 | FN_USB1_OVC, FN_TCLK1_B, | ||
3678 | /* IP16_6 [1] */ | ||
3679 | FN_USB1_PWEN, FN_AUDIO_CLKOUT_D, | ||
3680 | /* IP16_5_3 [3] */ | ||
3681 | FN_MSIOF0_RXD, FN_TS_SPSYNC0, FN_SSI_WS2, | ||
3682 | FN_ADICS_SAMP, FN_DU2_CDE, FN_QPOLB, FN_HRX0_C, 0, | ||
3683 | /* IP16_2_0 [3] */ | ||
3684 | FN_MSIOF0_SS2, FN_AUDIO_CLKOUT, FN_ADICHS2, | ||
3685 | FN_DU2_DISP, FN_QPOLA, FN_HTX0_C, FN_SCIFA2_TXD_B, 0, } | ||
3686 | }, | ||
3687 | { PINMUX_CFG_REG_VAR("MOD_SEL", 0xE6060090, 32, | ||
3688 | 3, 2, 2, 3, 2, 1, 1, 1, 2, 1, | ||
3689 | 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1) { | ||
3690 | /* SEL_SCIF1 [3] */ | ||
3691 | FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, FN_SEL_SCIF1_3, | ||
3692 | FN_SEL_SCIF1_4, 0, 0, 0, | ||
3693 | /* SEL_SCIFB [2] */ | ||
3694 | FN_SEL_SCIFB_0, FN_SEL_SCIFB_1, FN_SEL_SCIFB_2, 0, | ||
3695 | /* SEL_SCIFB2 [2] */ | ||
3696 | FN_SEL_SCIFB2_0, FN_SEL_SCIFB2_1, FN_SEL_SCIFB2_2, 0, | ||
3697 | /* SEL_SCIFB1 [3] */ | ||
3698 | FN_SEL_SCIFB1_0, FN_SEL_SCIFB1_1, FN_SEL_SCIFB1_2, | ||
3699 | FN_SEL_SCIFB1_3, FN_SEL_SCIFB1_4, FN_SEL_SCIFB1_5, | ||
3700 | FN_SEL_SCIFB1_6, 0, | ||
3701 | /* SEL_SCIFA1 [2] */ | ||
3702 | FN_SEL_SCIFA1_0, FN_SEL_SCIFA1_1, FN_SEL_SCIFA1_2, | ||
3703 | FN_SEL_SCIFA1_3, | ||
3704 | /* SEL_SCIF0 [1] */ | ||
3705 | FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, | ||
3706 | /* SEL_SCIFA [1] */ | ||
3707 | FN_SEL_SCFA_0, FN_SEL_SCFA_1, | ||
3708 | /* SEL_SOF1 [1] */ | ||
3709 | FN_SEL_SOF1_0, FN_SEL_SOF1_1, | ||
3710 | /* SEL_SSI7 [2] */ | ||
3711 | FN_SEL_SSI7_0, FN_SEL_SSI7_1, FN_SEL_SSI7_2, 0, | ||
3712 | /* SEL_SSI6 [1] */ | ||
3713 | FN_SEL_SSI6_0, FN_SEL_SSI6_1, | ||
3714 | /* SEL_SSI5 [2] */ | ||
3715 | FN_SEL_SSI5_0, FN_SEL_SSI5_1, FN_SEL_SSI5_2, 0, | ||
3716 | /* SEL_VI3 [1] */ | ||
3717 | FN_SEL_VI3_0, FN_SEL_VI3_1, | ||
3718 | /* SEL_VI2 [1] */ | ||
3719 | FN_SEL_VI2_0, FN_SEL_VI2_1, | ||
3720 | /* SEL_VI1 [1] */ | ||
3721 | FN_SEL_VI1_0, FN_SEL_VI1_1, | ||
3722 | /* SEL_VI0 [1] */ | ||
3723 | FN_SEL_VI0_0, FN_SEL_VI0_1, | ||
3724 | /* SEL_TSIF1 [2] */ | ||
3725 | FN_SEL_TSIF1_0, FN_SEL_TSIF1_1, FN_SEL_TSIF1_2, 0, | ||
3726 | /* RESERVED [1] */ | ||
3727 | 0, 0, | ||
3728 | /* SEL_LBS [1] */ | ||
3729 | FN_SEL_LBS_0, FN_SEL_LBS_1, | ||
3730 | /* SEL_TSIF0 [2] */ | ||
3731 | FN_SEL_TSIF0_0, FN_SEL_TSIF0_1, FN_SEL_TSIF0_2, FN_SEL_TSIF0_3, | ||
3732 | /* SEL_SOF3 [1] */ | ||
3733 | FN_SEL_SOF3_0, FN_SEL_SOF3_1, | ||
3734 | /* SEL_SOF0 [1] */ | ||
3735 | FN_SEL_SOF0_0, FN_SEL_SOF0_1, } | ||
3736 | }, | ||
3737 | { PINMUX_CFG_REG_VAR("MOD_SEL2", 0xE6060094, 32, | ||
3738 | 3, 1, 1, 1, 2, 1, 2, 1, 2, | ||
3739 | 1, 1, 1, 3, 3, 2, 3, 2, 2) { | ||
3740 | /* RESERVED [3] */ | ||
3741 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3742 | /* SEL_TMU1 [1] */ | ||
3743 | FN_SEL_TMU1_0, FN_SEL_TMU1_1, | ||
3744 | /* SEL_HSCIF1 [1] */ | ||
3745 | FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1, | ||
3746 | /* SEL_SCIFCLK [1] */ | ||
3747 | FN_SEL_SCIFCLK_0, FN_SEL_SCIFCLK_1, | ||
3748 | /* SEL_CAN0 [2] */ | ||
3749 | FN_SEL_CAN0_0, FN_SEL_CAN0_1, FN_SEL_CAN0_2, FN_SEL_CAN0_3, | ||
3750 | /* SEL_CANCLK [1] */ | ||
3751 | FN_SEL_CANCLK_0, FN_SEL_CANCLK_1, | ||
3752 | /* SEL_SCIFA2 [2] */ | ||
3753 | FN_SEL_SCIFA2_0, FN_SEL_SCIFA2_1, FN_SEL_SCIFA2_2, 0, | ||
3754 | /* SEL_CAN1 [1] */ | ||
3755 | FN_SEL_CAN1_0, FN_SEL_CAN1_1, | ||
3756 | /* RESERVED [2] */ | ||
3757 | 0, 0, 0, 0, | ||
3758 | /* RESERVED [1] (actually TX2, RX2 vs. TX2_B, RX2_B of SCIF2) */ | ||
3759 | 0, 0, | ||
3760 | /* SEL_ADI [1] */ | ||
3761 | FN_SEL_ADI_0, FN_SEL_ADI_1, | ||
3762 | /* SEL_SSP [1] */ | ||
3763 | FN_SEL_SSP_0, FN_SEL_SSP_1, | ||
3764 | /* SEL_FM [3] */ | ||
3765 | FN_SEL_FM_0, FN_SEL_FM_1, FN_SEL_FM_2, FN_SEL_FM_3, | ||
3766 | FN_SEL_FM_4, FN_SEL_FM_5, FN_SEL_FM_6, 0, | ||
3767 | /* SEL_HSCIF0 [3] */ | ||
3768 | FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1, FN_SEL_HSCIF0_2, | ||
3769 | FN_SEL_HSCIF0_3, FN_SEL_HSCIF0_4, FN_SEL_HSCIF0_5, 0, 0, | ||
3770 | /* SEL_GPS [2] */ | ||
3771 | FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, 0, | ||
3772 | /* SEL_RDS [3] */ | ||
3773 | FN_SEL_RDS_0, FN_SEL_RDS_1, FN_SEL_RDS_2, | ||
3774 | FN_SEL_RDS_3, FN_SEL_RDS_4, FN_SEL_RDS_5, 0, 0, | ||
3775 | /* SEL_SIM [2] */ | ||
3776 | FN_SEL_SIM_0, FN_SEL_SIM_1, FN_SEL_SIM_2, 0, | ||
3777 | /* SEL_SSI8 [2] */ | ||
3778 | FN_SEL_SSI8_0, FN_SEL_SSI8_1, FN_SEL_SSI8_2, 0, } | ||
3779 | }, | ||
3780 | { PINMUX_CFG_REG_VAR("MOD_SEL3", 0xE6060098, 32, | ||
3781 | 1, 1, 2, 4, 4, 2, 2, | ||
3782 | 4, 2, 3, 2, 3, 2) { | ||
3783 | /* SEL_IICDVFS [1] */ | ||
3784 | FN_SEL_IICDVFS_0, FN_SEL_IICDVFS_1, | ||
3785 | /* SEL_IIC0 [1] */ | ||
3786 | FN_SEL_IIC0_0, FN_SEL_IIC0_1, | ||
3787 | /* RESERVED [2] */ | ||
3788 | 0, 0, 0, 0, | ||
3789 | /* RESERVED [4] */ | ||
3790 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3791 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3792 | /* RESERVED [4] */ | ||
3793 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3794 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3795 | /* RESERVED [2] */ | ||
3796 | 0, 0, 0, 0, | ||
3797 | /* SEL_IEB [2] */ | ||
3798 | FN_SEL_IEB_0, FN_SEL_IEB_1, FN_SEL_IEB_2, 0, | ||
3799 | /* RESERVED [4] */ | ||
3800 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3801 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
3802 | /* RESERVED [2] */ | ||
3803 | 0, 0, 0, 0, | ||
3804 | /* SEL_IIC2 [3] */ | ||
3805 | FN_SEL_IIC2_0, FN_SEL_IIC2_1, FN_SEL_IIC2_2, FN_SEL_IIC2_3, | ||
3806 | FN_SEL_IIC2_4, 0, 0, 0, | ||
3807 | /* SEL_IIC1 [2] */ | ||
3808 | FN_SEL_IIC1_0, FN_SEL_IIC1_1, FN_SEL_IIC1_2, 0, | ||
3809 | /* SEL_I2C2 [3] */ | ||
3810 | FN_SEL_I2C2_0, FN_SEL_I2C2_1, FN_SEL_I2C2_2, FN_SEL_I2C2_3, | ||
3811 | FN_SEL_I2C2_4, 0, 0, 0, | ||
3812 | /* SEL_I2C1 [2] */ | ||
3813 | FN_SEL_I2C1_0, FN_SEL_I2C1_1, FN_SEL_I2C1_2, 0, } | ||
3814 | }, | ||
3815 | { }, | ||
3816 | }; | ||
3817 | |||
3818 | const struct sh_pfc_soc_info r8a7790_pinmux_info = { | ||
3819 | .name = "r8a77900_pfc", | ||
3820 | .unlock_reg = 0xe6060000, /* PMMR */ | ||
3821 | |||
3822 | .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, | ||
3823 | |||
3824 | .pins = pinmux_pins, | ||
3825 | .nr_pins = ARRAY_SIZE(pinmux_pins), | ||
3826 | .groups = pinmux_groups, | ||
3827 | .nr_groups = ARRAY_SIZE(pinmux_groups), | ||
3828 | .functions = pinmux_functions, | ||
3829 | .nr_functions = ARRAY_SIZE(pinmux_functions), | ||
3830 | |||
3831 | .cfg_regs = pinmux_config_regs, | ||
3832 | |||
3833 | .gpio_data = pinmux_data, | ||
3834 | .gpio_data_size = ARRAY_SIZE(pinmux_data), | ||
3835 | }; | ||
diff --git a/drivers/pinctrl/sh-pfc/pfc-sh7372.c b/drivers/pinctrl/sh-pfc/pfc-sh7372.c index df0ae21a5ac8..6dfb18772574 100644 --- a/drivers/pinctrl/sh-pfc/pfc-sh7372.c +++ b/drivers/pinctrl/sh-pfc/pfc-sh7372.c | |||
@@ -20,10 +20,14 @@ | |||
20 | * along with this program; if not, write to the Free Software | 20 | * along with this program; if not, write to the Free Software |
21 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 21 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
22 | */ | 22 | */ |
23 | #include <linux/io.h> | ||
23 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
25 | #include <linux/pinctrl/pinconf-generic.h> | ||
26 | |||
24 | #include <mach/irqs.h> | 27 | #include <mach/irqs.h> |
25 | #include <mach/sh7372.h> | 28 | #include <mach/sh7372.h> |
26 | 29 | ||
30 | #include "core.h" | ||
27 | #include "sh_pfc.h" | 31 | #include "sh_pfc.h" |
28 | 32 | ||
29 | #define CPU_ALL_PORT(fn, pfx, sfx) \ | 33 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
@@ -34,6 +38,35 @@ | |||
34 | PORT_10(fn, pfx##16, sfx), PORT_10(fn, pfx##17, sfx), \ | 38 | PORT_10(fn, pfx##16, sfx), PORT_10(fn, pfx##17, sfx), \ |
35 | PORT_10(fn, pfx##18, sfx), PORT_1(fn, pfx##190, sfx) | 39 | PORT_10(fn, pfx##18, sfx), PORT_1(fn, pfx##190, sfx) |
36 | 40 | ||
41 | #undef _GPIO_PORT | ||
42 | #define _GPIO_PORT(gpio, sfx) \ | ||
43 | [gpio] = { \ | ||
44 | .name = __stringify(PORT##gpio), \ | ||
45 | .enum_id = PORT##gpio##_DATA, \ | ||
46 | } | ||
47 | |||
48 | #define IRQC_PIN_MUX(irq, pin) \ | ||
49 | static const unsigned int intc_irq##irq##_pins[] = { \ | ||
50 | pin, \ | ||
51 | }; \ | ||
52 | static const unsigned int intc_irq##irq##_mux[] = { \ | ||
53 | IRQ##irq##_MARK, \ | ||
54 | } | ||
55 | |||
56 | #define IRQC_PINS_MUX(irq, pin0, pin1) \ | ||
57 | static const unsigned int intc_irq##irq##_0_pins[] = { \ | ||
58 | pin0, \ | ||
59 | }; \ | ||
60 | static const unsigned int intc_irq##irq##_0_mux[] = { \ | ||
61 | IRQ##irq##_##pin0##_MARK, \ | ||
62 | }; \ | ||
63 | static const unsigned int intc_irq##irq##_1_pins[] = { \ | ||
64 | pin1, \ | ||
65 | }; \ | ||
66 | static const unsigned int intc_irq##irq##_1_mux[] = { \ | ||
67 | IRQ##irq##_##pin1##_MARK, \ | ||
68 | } | ||
69 | |||
37 | enum { | 70 | enum { |
38 | PINMUX_RESERVED = 0, | 71 | PINMUX_RESERVED = 0, |
39 | 72 | ||
@@ -47,16 +80,6 @@ enum { | |||
47 | PORT_ALL(IN), | 80 | PORT_ALL(IN), |
48 | PINMUX_INPUT_END, | 81 | PINMUX_INPUT_END, |
49 | 82 | ||
50 | /* PORT0_IN_PU -> PORT190_IN_PU */ | ||
51 | PINMUX_INPUT_PULLUP_BEGIN, | ||
52 | PORT_ALL(IN_PU), | ||
53 | PINMUX_INPUT_PULLUP_END, | ||
54 | |||
55 | /* PORT0_IN_PD -> PORT190_IN_PD */ | ||
56 | PINMUX_INPUT_PULLDOWN_BEGIN, | ||
57 | PORT_ALL(IN_PD), | ||
58 | PINMUX_INPUT_PULLDOWN_END, | ||
59 | |||
60 | /* PORT0_OUT -> PORT190_OUT */ | 83 | /* PORT0_OUT -> PORT190_OUT */ |
61 | PINMUX_OUTPUT_BEGIN, | 84 | PINMUX_OUTPUT_BEGIN, |
62 | PORT_ALL(OUT), | 85 | PORT_ALL(OUT), |
@@ -368,124 +391,11 @@ enum { | |||
368 | PINMUX_MARK_END, | 391 | PINMUX_MARK_END, |
369 | }; | 392 | }; |
370 | 393 | ||
371 | static const pinmux_enum_t pinmux_data[] = { | 394 | #define _PORT_DATA(pfx, sfx) PORT_DATA_IO(pfx) |
395 | #define PINMUX_DATA_GP_ALL() CPU_ALL_PORT(_PORT_DATA, , unused) | ||
372 | 396 | ||
373 | /* specify valid pin states for each pin in GPIO mode */ | 397 | static const pinmux_enum_t pinmux_data[] = { |
374 | PORT_DATA_IO_PD(0), PORT_DATA_IO_PD(1), | 398 | PINMUX_DATA_GP_ALL(), |
375 | PORT_DATA_O(2), PORT_DATA_I_PD(3), | ||
376 | PORT_DATA_I_PD(4), PORT_DATA_I_PD(5), | ||
377 | PORT_DATA_IO_PU_PD(6), PORT_DATA_I_PD(7), | ||
378 | PORT_DATA_IO_PD(8), PORT_DATA_O(9), | ||
379 | |||
380 | PORT_DATA_O(10), PORT_DATA_O(11), | ||
381 | PORT_DATA_IO_PU_PD(12), PORT_DATA_IO_PD(13), | ||
382 | PORT_DATA_IO_PD(14), PORT_DATA_O(15), | ||
383 | PORT_DATA_IO_PD(16), PORT_DATA_IO_PD(17), | ||
384 | PORT_DATA_I_PD(18), PORT_DATA_IO(19), | ||
385 | |||
386 | PORT_DATA_IO(20), PORT_DATA_IO(21), | ||
387 | PORT_DATA_IO(22), PORT_DATA_IO(23), | ||
388 | PORT_DATA_IO(24), PORT_DATA_IO(25), | ||
389 | PORT_DATA_IO(26), PORT_DATA_IO(27), | ||
390 | PORT_DATA_IO(28), PORT_DATA_IO(29), | ||
391 | |||
392 | PORT_DATA_IO(30), PORT_DATA_IO(31), | ||
393 | PORT_DATA_IO(32), PORT_DATA_IO(33), | ||
394 | PORT_DATA_IO(34), PORT_DATA_IO(35), | ||
395 | PORT_DATA_IO(36), PORT_DATA_IO(37), | ||
396 | PORT_DATA_IO(38), PORT_DATA_IO(39), | ||
397 | |||
398 | PORT_DATA_IO(40), PORT_DATA_IO(41), | ||
399 | PORT_DATA_IO(42), PORT_DATA_IO(43), | ||
400 | PORT_DATA_IO(44), PORT_DATA_IO(45), | ||
401 | PORT_DATA_IO_PU(46), PORT_DATA_IO_PU(47), | ||
402 | PORT_DATA_IO_PU(48), PORT_DATA_IO_PU(49), | ||
403 | |||
404 | PORT_DATA_IO_PU(50), PORT_DATA_IO_PU(51), | ||
405 | PORT_DATA_IO_PU(52), PORT_DATA_IO_PU(53), | ||
406 | PORT_DATA_IO_PU(54), PORT_DATA_IO_PU(55), | ||
407 | PORT_DATA_IO_PU(56), PORT_DATA_IO_PU(57), | ||
408 | PORT_DATA_IO_PU(58), PORT_DATA_IO_PU(59), | ||
409 | |||
410 | PORT_DATA_IO_PU(60), PORT_DATA_IO_PU(61), | ||
411 | PORT_DATA_IO(62), PORT_DATA_O(63), | ||
412 | PORT_DATA_O(64), PORT_DATA_IO_PU(65), | ||
413 | PORT_DATA_O(66), PORT_DATA_IO_PU(67), /*66?*/ | ||
414 | PORT_DATA_O(68), PORT_DATA_IO(69), | ||
415 | |||
416 | PORT_DATA_IO(70), PORT_DATA_IO(71), | ||
417 | PORT_DATA_O(72), PORT_DATA_I_PU(73), | ||
418 | PORT_DATA_I_PU_PD(74), PORT_DATA_IO_PU_PD(75), | ||
419 | PORT_DATA_IO_PU_PD(76), PORT_DATA_IO_PU_PD(77), | ||
420 | PORT_DATA_IO_PU_PD(78), PORT_DATA_IO_PU_PD(79), | ||
421 | |||
422 | PORT_DATA_IO_PU_PD(80), PORT_DATA_IO_PU_PD(81), | ||
423 | PORT_DATA_IO_PU_PD(82), PORT_DATA_IO_PU_PD(83), | ||
424 | PORT_DATA_IO_PU_PD(84), PORT_DATA_IO_PU_PD(85), | ||
425 | PORT_DATA_IO_PU_PD(86), PORT_DATA_IO_PU_PD(87), | ||
426 | PORT_DATA_IO_PU_PD(88), PORT_DATA_IO_PU_PD(89), | ||
427 | |||
428 | PORT_DATA_IO_PU_PD(90), PORT_DATA_IO_PU_PD(91), | ||
429 | PORT_DATA_IO_PU_PD(92), PORT_DATA_IO_PU_PD(93), | ||
430 | PORT_DATA_IO_PU_PD(94), PORT_DATA_IO_PU_PD(95), | ||
431 | PORT_DATA_IO_PU(96), PORT_DATA_IO_PU_PD(97), | ||
432 | PORT_DATA_IO_PU_PD(98), PORT_DATA_O(99), /*99?*/ | ||
433 | |||
434 | PORT_DATA_IO_PD(100), PORT_DATA_IO_PD(101), | ||
435 | PORT_DATA_IO_PD(102), PORT_DATA_IO_PD(103), | ||
436 | PORT_DATA_IO_PD(104), PORT_DATA_IO_PD(105), | ||
437 | PORT_DATA_IO_PU(106), PORT_DATA_IO_PU(107), | ||
438 | PORT_DATA_IO_PU(108), PORT_DATA_IO_PU(109), | ||
439 | |||
440 | PORT_DATA_IO_PU(110), PORT_DATA_IO_PU(111), | ||
441 | PORT_DATA_IO_PD(112), PORT_DATA_IO_PD(113), | ||
442 | PORT_DATA_IO_PU(114), PORT_DATA_IO_PU(115), | ||
443 | PORT_DATA_IO_PU(116), PORT_DATA_IO_PU(117), | ||
444 | PORT_DATA_IO_PU(118), PORT_DATA_IO_PU(119), | ||
445 | |||
446 | PORT_DATA_IO_PU(120), PORT_DATA_IO_PD(121), | ||
447 | PORT_DATA_IO_PD(122), PORT_DATA_IO_PD(123), | ||
448 | PORT_DATA_IO_PD(124), PORT_DATA_IO_PD(125), | ||
449 | PORT_DATA_IO_PD(126), PORT_DATA_IO_PD(127), | ||
450 | PORT_DATA_IO_PD(128), PORT_DATA_IO_PU_PD(129), | ||
451 | |||
452 | PORT_DATA_IO_PU_PD(130), PORT_DATA_IO_PU_PD(131), | ||
453 | PORT_DATA_IO_PU_PD(132), PORT_DATA_IO_PU_PD(133), | ||
454 | PORT_DATA_IO_PU_PD(134), PORT_DATA_IO_PU_PD(135), | ||
455 | PORT_DATA_IO_PD(136), PORT_DATA_IO_PD(137), | ||
456 | PORT_DATA_IO_PD(138), PORT_DATA_IO_PD(139), | ||
457 | |||
458 | PORT_DATA_IO_PD(140), PORT_DATA_IO_PD(141), | ||
459 | PORT_DATA_IO_PD(142), PORT_DATA_IO_PU_PD(143), | ||
460 | PORT_DATA_IO_PD(144), PORT_DATA_IO_PD(145), | ||
461 | PORT_DATA_IO_PD(146), PORT_DATA_IO_PD(147), | ||
462 | PORT_DATA_IO_PD(148), PORT_DATA_IO_PD(149), | ||
463 | |||
464 | PORT_DATA_IO_PD(150), PORT_DATA_IO_PD(151), | ||
465 | PORT_DATA_IO_PU_PD(152), PORT_DATA_I_PD(153), | ||
466 | PORT_DATA_IO_PU_PD(154), PORT_DATA_I_PD(155), | ||
467 | PORT_DATA_IO_PD(156), PORT_DATA_IO_PD(157), | ||
468 | PORT_DATA_I_PD(158), PORT_DATA_IO_PD(159), | ||
469 | |||
470 | PORT_DATA_O(160), PORT_DATA_IO_PD(161), | ||
471 | PORT_DATA_IO_PD(162), PORT_DATA_IO_PD(163), | ||
472 | PORT_DATA_I_PD(164), PORT_DATA_IO_PD(165), | ||
473 | PORT_DATA_I_PD(166), PORT_DATA_I_PD(167), | ||
474 | PORT_DATA_I_PD(168), PORT_DATA_I_PD(169), | ||
475 | |||
476 | PORT_DATA_I_PD(170), PORT_DATA_O(171), | ||
477 | PORT_DATA_IO_PU_PD(172), PORT_DATA_IO_PU_PD(173), | ||
478 | PORT_DATA_IO_PU_PD(174), PORT_DATA_IO_PU_PD(175), | ||
479 | PORT_DATA_IO_PU_PD(176), PORT_DATA_IO_PU_PD(177), | ||
480 | PORT_DATA_IO_PU_PD(178), PORT_DATA_O(179), | ||
481 | |||
482 | PORT_DATA_IO_PU_PD(180), PORT_DATA_IO_PU_PD(181), | ||
483 | PORT_DATA_IO_PU_PD(182), PORT_DATA_IO_PU_PD(183), | ||
484 | PORT_DATA_IO_PU_PD(184), PORT_DATA_O(185), | ||
485 | PORT_DATA_IO_PU_PD(186), PORT_DATA_IO_PU_PD(187), | ||
486 | PORT_DATA_IO_PU_PD(188), PORT_DATA_IO_PU_PD(189), | ||
487 | |||
488 | PORT_DATA_IO_PU_PD(190), | ||
489 | 399 | ||
490 | /* IRQ */ | 400 | /* IRQ */ |
491 | PINMUX_DATA(IRQ0_6_MARK, PORT6_FN0, MSEL1CR_0_0), | 401 | PINMUX_DATA(IRQ0_6_MARK, PORT6_FN0, MSEL1CR_0_0), |
@@ -929,10 +839,582 @@ static const pinmux_enum_t pinmux_data[] = { | |||
929 | PINMUX_DATA(MFIv4_MARK, MSEL4CR_6_1), | 839 | PINMUX_DATA(MFIv4_MARK, MSEL4CR_6_1), |
930 | }; | 840 | }; |
931 | 841 | ||
842 | #define SH7372_PIN(pin, cfgs) \ | ||
843 | { \ | ||
844 | .name = __stringify(PORT##pin), \ | ||
845 | .enum_id = PORT##pin##_DATA, \ | ||
846 | .configs = cfgs, \ | ||
847 | } | ||
848 | |||
849 | #define __I (SH_PFC_PIN_CFG_INPUT) | ||
850 | #define __O (SH_PFC_PIN_CFG_OUTPUT) | ||
851 | #define __IO (SH_PFC_PIN_CFG_INPUT | SH_PFC_PIN_CFG_OUTPUT) | ||
852 | #define __PD (SH_PFC_PIN_CFG_PULL_DOWN) | ||
853 | #define __PU (SH_PFC_PIN_CFG_PULL_UP) | ||
854 | #define __PUD (SH_PFC_PIN_CFG_PULL_DOWN | SH_PFC_PIN_CFG_PULL_UP) | ||
855 | |||
856 | #define SH7372_PIN_I_PD(pin) SH7372_PIN(pin, __I | __PD) | ||
857 | #define SH7372_PIN_I_PU(pin) SH7372_PIN(pin, __I | __PU) | ||
858 | #define SH7372_PIN_I_PU_PD(pin) SH7372_PIN(pin, __I | __PUD) | ||
859 | #define SH7372_PIN_IO(pin) SH7372_PIN(pin, __IO) | ||
860 | #define SH7372_PIN_IO_PD(pin) SH7372_PIN(pin, __IO | __PD) | ||
861 | #define SH7372_PIN_IO_PU(pin) SH7372_PIN(pin, __IO | __PU) | ||
862 | #define SH7372_PIN_IO_PU_PD(pin) SH7372_PIN(pin, __IO | __PUD) | ||
863 | #define SH7372_PIN_O(pin) SH7372_PIN(pin, __O) | ||
864 | #define SH7372_PIN_O_PU_PD(pin) SH7372_PIN(pin, __O | __PUD) | ||
865 | |||
932 | static struct sh_pfc_pin pinmux_pins[] = { | 866 | static struct sh_pfc_pin pinmux_pins[] = { |
933 | GPIO_PORT_ALL(), | 867 | /* Table 57-1 (I/O and Pull U/D) */ |
868 | SH7372_PIN_IO_PD(0), SH7372_PIN_IO_PD(1), | ||
869 | SH7372_PIN_O(2), SH7372_PIN_I_PD(3), | ||
870 | SH7372_PIN_I_PD(4), SH7372_PIN_I_PD(5), | ||
871 | SH7372_PIN_IO_PU_PD(6), SH7372_PIN_I_PD(7), | ||
872 | SH7372_PIN_IO_PD(8), SH7372_PIN_O(9), | ||
873 | SH7372_PIN_O(10), SH7372_PIN_O(11), | ||
874 | SH7372_PIN_IO_PU_PD(12), SH7372_PIN_IO_PD(13), | ||
875 | SH7372_PIN_IO_PD(14), SH7372_PIN_O(15), | ||
876 | SH7372_PIN_IO_PD(16), SH7372_PIN_IO_PD(17), | ||
877 | SH7372_PIN_I_PD(18), SH7372_PIN_IO(19), | ||
878 | SH7372_PIN_IO(20), SH7372_PIN_IO(21), | ||
879 | SH7372_PIN_IO(22), SH7372_PIN_IO(23), | ||
880 | SH7372_PIN_IO(24), SH7372_PIN_IO(25), | ||
881 | SH7372_PIN_IO(26), SH7372_PIN_IO(27), | ||
882 | SH7372_PIN_IO(28), SH7372_PIN_IO(29), | ||
883 | SH7372_PIN_IO(30), SH7372_PIN_IO(31), | ||
884 | SH7372_PIN_IO(32), SH7372_PIN_IO(33), | ||
885 | SH7372_PIN_IO(34), SH7372_PIN_IO(35), | ||
886 | SH7372_PIN_IO(36), SH7372_PIN_IO(37), | ||
887 | SH7372_PIN_IO(38), SH7372_PIN_IO(39), | ||
888 | SH7372_PIN_IO(40), SH7372_PIN_IO(41), | ||
889 | SH7372_PIN_IO(42), SH7372_PIN_IO(43), | ||
890 | SH7372_PIN_IO(44), SH7372_PIN_IO(45), | ||
891 | SH7372_PIN_IO_PU(46), SH7372_PIN_IO_PU(47), | ||
892 | SH7372_PIN_IO_PU(48), SH7372_PIN_IO_PU(49), | ||
893 | SH7372_PIN_IO_PU(50), SH7372_PIN_IO_PU(51), | ||
894 | SH7372_PIN_IO_PU(52), SH7372_PIN_IO_PU(53), | ||
895 | SH7372_PIN_IO_PU(54), SH7372_PIN_IO_PU(55), | ||
896 | SH7372_PIN_IO_PU(56), SH7372_PIN_IO_PU(57), | ||
897 | SH7372_PIN_IO_PU(58), SH7372_PIN_IO_PU(59), | ||
898 | SH7372_PIN_IO_PU(60), SH7372_PIN_IO_PU(61), | ||
899 | SH7372_PIN_IO(62), SH7372_PIN_O(63), | ||
900 | SH7372_PIN_O(64), SH7372_PIN_IO_PU(65), | ||
901 | SH7372_PIN_O_PU_PD(66), SH7372_PIN_IO_PU(67), | ||
902 | SH7372_PIN_O(68), SH7372_PIN_IO(69), | ||
903 | SH7372_PIN_IO(70), SH7372_PIN_IO(71), | ||
904 | SH7372_PIN_O(72), SH7372_PIN_I_PU(73), | ||
905 | SH7372_PIN_I_PU_PD(74), SH7372_PIN_IO_PU_PD(75), | ||
906 | SH7372_PIN_IO_PU_PD(76), SH7372_PIN_IO_PU_PD(77), | ||
907 | SH7372_PIN_IO_PU_PD(78), SH7372_PIN_IO_PU_PD(79), | ||
908 | SH7372_PIN_IO_PU_PD(80), SH7372_PIN_IO_PU_PD(81), | ||
909 | SH7372_PIN_IO_PU_PD(82), SH7372_PIN_IO_PU_PD(83), | ||
910 | SH7372_PIN_IO_PU_PD(84), SH7372_PIN_IO_PU_PD(85), | ||
911 | SH7372_PIN_IO_PU_PD(86), SH7372_PIN_IO_PU_PD(87), | ||
912 | SH7372_PIN_IO_PU_PD(88), SH7372_PIN_IO_PU_PD(89), | ||
913 | SH7372_PIN_IO_PU_PD(90), SH7372_PIN_IO_PU_PD(91), | ||
914 | SH7372_PIN_IO_PU_PD(92), SH7372_PIN_IO_PU_PD(93), | ||
915 | SH7372_PIN_IO_PU_PD(94), SH7372_PIN_IO_PU_PD(95), | ||
916 | SH7372_PIN_IO_PU(96), SH7372_PIN_IO_PU_PD(97), | ||
917 | SH7372_PIN_IO_PU_PD(98), SH7372_PIN_O_PU_PD(99), | ||
918 | SH7372_PIN_IO_PD(100), SH7372_PIN_IO_PD(101), | ||
919 | SH7372_PIN_IO_PD(102), SH7372_PIN_IO_PD(103), | ||
920 | SH7372_PIN_IO_PD(104), SH7372_PIN_IO_PD(105), | ||
921 | SH7372_PIN_IO_PU(106), SH7372_PIN_IO_PU(107), | ||
922 | SH7372_PIN_IO_PU(108), SH7372_PIN_IO_PU(109), | ||
923 | SH7372_PIN_IO_PU(110), SH7372_PIN_IO_PU(111), | ||
924 | SH7372_PIN_IO_PD(112), SH7372_PIN_IO_PD(113), | ||
925 | SH7372_PIN_IO_PU(114), SH7372_PIN_IO_PU(115), | ||
926 | SH7372_PIN_IO_PU(116), SH7372_PIN_IO_PU(117), | ||
927 | SH7372_PIN_IO_PU(118), SH7372_PIN_IO_PU(119), | ||
928 | SH7372_PIN_IO_PU(120), SH7372_PIN_IO_PD(121), | ||
929 | SH7372_PIN_IO_PD(122), SH7372_PIN_IO_PD(123), | ||
930 | SH7372_PIN_IO_PD(124), SH7372_PIN_IO_PD(125), | ||
931 | SH7372_PIN_IO_PD(126), SH7372_PIN_IO_PD(127), | ||
932 | SH7372_PIN_IO_PD(128), SH7372_PIN_IO_PU_PD(129), | ||
933 | SH7372_PIN_IO_PU_PD(130), SH7372_PIN_IO_PU_PD(131), | ||
934 | SH7372_PIN_IO_PU_PD(132), SH7372_PIN_IO_PU_PD(133), | ||
935 | SH7372_PIN_IO_PU_PD(134), SH7372_PIN_IO_PU_PD(135), | ||
936 | SH7372_PIN_IO_PD(136), SH7372_PIN_IO_PD(137), | ||
937 | SH7372_PIN_IO_PD(138), SH7372_PIN_IO_PD(139), | ||
938 | SH7372_PIN_IO_PD(140), SH7372_PIN_IO_PD(141), | ||
939 | SH7372_PIN_IO_PD(142), SH7372_PIN_IO_PU_PD(143), | ||
940 | SH7372_PIN_IO_PD(144), SH7372_PIN_IO_PD(145), | ||
941 | SH7372_PIN_IO_PD(146), SH7372_PIN_IO_PD(147), | ||
942 | SH7372_PIN_IO_PD(148), SH7372_PIN_IO_PD(149), | ||
943 | SH7372_PIN_IO_PD(150), SH7372_PIN_IO_PD(151), | ||
944 | SH7372_PIN_IO_PU_PD(152), SH7372_PIN_I_PD(153), | ||
945 | SH7372_PIN_IO_PU_PD(154), SH7372_PIN_I_PD(155), | ||
946 | SH7372_PIN_IO_PD(156), SH7372_PIN_IO_PD(157), | ||
947 | SH7372_PIN_I_PD(158), SH7372_PIN_IO_PD(159), | ||
948 | SH7372_PIN_O(160), SH7372_PIN_IO_PD(161), | ||
949 | SH7372_PIN_IO_PD(162), SH7372_PIN_IO_PD(163), | ||
950 | SH7372_PIN_I_PD(164), SH7372_PIN_IO_PD(165), | ||
951 | SH7372_PIN_I_PD(166), SH7372_PIN_I_PD(167), | ||
952 | SH7372_PIN_I_PD(168), SH7372_PIN_I_PD(169), | ||
953 | SH7372_PIN_I_PD(170), SH7372_PIN_O(171), | ||
954 | SH7372_PIN_IO_PU_PD(172), SH7372_PIN_IO_PU_PD(173), | ||
955 | SH7372_PIN_IO_PU_PD(174), SH7372_PIN_IO_PU_PD(175), | ||
956 | SH7372_PIN_IO_PU_PD(176), SH7372_PIN_IO_PU_PD(177), | ||
957 | SH7372_PIN_IO_PU_PD(178), SH7372_PIN_O(179), | ||
958 | SH7372_PIN_IO_PU_PD(180), SH7372_PIN_IO_PU_PD(181), | ||
959 | SH7372_PIN_IO_PU_PD(182), SH7372_PIN_IO_PU_PD(183), | ||
960 | SH7372_PIN_IO_PU_PD(184), SH7372_PIN_O(185), | ||
961 | SH7372_PIN_IO_PU_PD(186), SH7372_PIN_IO_PU_PD(187), | ||
962 | SH7372_PIN_IO_PU_PD(188), SH7372_PIN_IO_PU_PD(189), | ||
963 | SH7372_PIN_IO_PU_PD(190), | ||
934 | }; | 964 | }; |
935 | 965 | ||
966 | /* - BSC -------------------------------------------------------------------- */ | ||
967 | static const unsigned int bsc_data8_pins[] = { | ||
968 | /* D[0:7] */ | ||
969 | 46, 47, 48, 49, 50, 51, 52, 53, | ||
970 | }; | ||
971 | static const unsigned int bsc_data8_mux[] = { | ||
972 | D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK, | ||
973 | D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK, | ||
974 | }; | ||
975 | static const unsigned int bsc_data16_pins[] = { | ||
976 | /* D[0:15] */ | ||
977 | 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, | ||
978 | }; | ||
979 | static const unsigned int bsc_data16_mux[] = { | ||
980 | D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK, | ||
981 | D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK, | ||
982 | D8_NAF8_MARK, D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK, | ||
983 | D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, D15_NAF15_MARK, | ||
984 | }; | ||
985 | static const unsigned int bsc_cs0_pins[] = { | ||
986 | /* CS */ | ||
987 | 62, | ||
988 | }; | ||
989 | static const unsigned int bsc_cs0_mux[] = { | ||
990 | CS0_MARK, | ||
991 | }; | ||
992 | static const unsigned int bsc_cs2_pins[] = { | ||
993 | /* CS */ | ||
994 | 63, | ||
995 | }; | ||
996 | static const unsigned int bsc_cs2_mux[] = { | ||
997 | CS2_MARK, | ||
998 | }; | ||
999 | static const unsigned int bsc_cs4_pins[] = { | ||
1000 | /* CS */ | ||
1001 | 64, | ||
1002 | }; | ||
1003 | static const unsigned int bsc_cs4_mux[] = { | ||
1004 | CS4_MARK, | ||
1005 | }; | ||
1006 | static const unsigned int bsc_cs5a_pins[] = { | ||
1007 | /* CS */ | ||
1008 | 65, | ||
1009 | }; | ||
1010 | static const unsigned int bsc_cs5a_mux[] = { | ||
1011 | CS5A_MARK, | ||
1012 | }; | ||
1013 | static const unsigned int bsc_cs5b_pins[] = { | ||
1014 | /* CS */ | ||
1015 | 66, | ||
1016 | }; | ||
1017 | static const unsigned int bsc_cs5b_mux[] = { | ||
1018 | CS5B_MARK, | ||
1019 | }; | ||
1020 | static const unsigned int bsc_cs6a_pins[] = { | ||
1021 | /* CS */ | ||
1022 | 67, | ||
1023 | }; | ||
1024 | static const unsigned int bsc_cs6a_mux[] = { | ||
1025 | CS6A_MARK, | ||
1026 | }; | ||
1027 | static const unsigned int bsc_rd_we8_pins[] = { | ||
1028 | /* RD, WE[0] */ | ||
1029 | 69, 70, | ||
1030 | }; | ||
1031 | static const unsigned int bsc_rd_we8_mux[] = { | ||
1032 | RD_FSC_MARK, WE0_FWE_MARK, | ||
1033 | }; | ||
1034 | static const unsigned int bsc_rd_we16_pins[] = { | ||
1035 | /* RD, WE[0:1] */ | ||
1036 | 69, 70, 71, | ||
1037 | }; | ||
1038 | static const unsigned int bsc_rd_we16_mux[] = { | ||
1039 | RD_FSC_MARK, WE0_FWE_MARK, WE1_MARK, | ||
1040 | }; | ||
1041 | static const unsigned int bsc_bs_pins[] = { | ||
1042 | /* BS */ | ||
1043 | 19, | ||
1044 | }; | ||
1045 | static const unsigned int bsc_bs_mux[] = { | ||
1046 | BS_MARK, | ||
1047 | }; | ||
1048 | static const unsigned int bsc_rdwr_pins[] = { | ||
1049 | /* RDWR */ | ||
1050 | 75, | ||
1051 | }; | ||
1052 | static const unsigned int bsc_rdwr_mux[] = { | ||
1053 | RDWR_MARK, | ||
1054 | }; | ||
1055 | static const unsigned int bsc_wait_pins[] = { | ||
1056 | /* WAIT */ | ||
1057 | 74, | ||
1058 | }; | ||
1059 | static const unsigned int bsc_wait_mux[] = { | ||
1060 | WAIT_MARK, | ||
1061 | }; | ||
1062 | /* - CEU -------------------------------------------------------------------- */ | ||
1063 | static const unsigned int ceu_data_0_7_pins[] = { | ||
1064 | /* D[0:7] */ | ||
1065 | 102, 103, 104, 105, 106, 107, 108, 109, | ||
1066 | }; | ||
1067 | static const unsigned int ceu_data_0_7_mux[] = { | ||
1068 | VIO_D0_MARK, VIO_D1_MARK, VIO_D2_MARK, VIO_D3_MARK, | ||
1069 | VIO_D4_MARK, VIO_D5_MARK, VIO_D6_MARK, VIO_D7_MARK, | ||
1070 | }; | ||
1071 | static const unsigned int ceu_data_8_15_pins[] = { | ||
1072 | /* D[8:15] */ | ||
1073 | 110, 111, 112, 113, 114, 115, 116, 117, | ||
1074 | }; | ||
1075 | static const unsigned int ceu_data_8_15_mux[] = { | ||
1076 | VIO_D8_MARK, VIO_D9_MARK, VIO_D10_MARK, VIO_D11_MARK, | ||
1077 | VIO_D12_MARK, VIO_D13_MARK, VIO_D14_MARK, VIO_D15_MARK, | ||
1078 | }; | ||
1079 | static const unsigned int ceu_clk_0_pins[] = { | ||
1080 | /* CKO */ | ||
1081 | 120, | ||
1082 | }; | ||
1083 | static const unsigned int ceu_clk_0_mux[] = { | ||
1084 | VIO_CKO_MARK, | ||
1085 | }; | ||
1086 | static const unsigned int ceu_clk_1_pins[] = { | ||
1087 | /* CKO */ | ||
1088 | 16, | ||
1089 | }; | ||
1090 | static const unsigned int ceu_clk_1_mux[] = { | ||
1091 | VIO_CKO1_MARK, | ||
1092 | }; | ||
1093 | static const unsigned int ceu_clk_2_pins[] = { | ||
1094 | /* CKO */ | ||
1095 | 17, | ||
1096 | }; | ||
1097 | static const unsigned int ceu_clk_2_mux[] = { | ||
1098 | VIO_CKO2_MARK, | ||
1099 | }; | ||
1100 | static const unsigned int ceu_sync_pins[] = { | ||
1101 | /* CLK, VD, HD */ | ||
1102 | 118, 100, 101, | ||
1103 | }; | ||
1104 | static const unsigned int ceu_sync_mux[] = { | ||
1105 | VIO_CLK_MARK, VIO_VD_MARK, VIO_HD_MARK, | ||
1106 | }; | ||
1107 | static const unsigned int ceu_field_pins[] = { | ||
1108 | /* FIELD */ | ||
1109 | 119, | ||
1110 | }; | ||
1111 | static const unsigned int ceu_field_mux[] = { | ||
1112 | VIO_FIELD_MARK, | ||
1113 | }; | ||
1114 | /* - FLCTL ------------------------------------------------------------------ */ | ||
1115 | static const unsigned int flctl_data_pins[] = { | ||
1116 | /* NAF[0:15] */ | ||
1117 | 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, | ||
1118 | }; | ||
1119 | static const unsigned int flctl_data_mux[] = { | ||
1120 | D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK, | ||
1121 | D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK, | ||
1122 | D8_NAF8_MARK, D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK, | ||
1123 | D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, D15_NAF15_MARK, | ||
1124 | }; | ||
1125 | static const unsigned int flctl_ce0_pins[] = { | ||
1126 | /* CE */ | ||
1127 | 68, | ||
1128 | }; | ||
1129 | static const unsigned int flctl_ce0_mux[] = { | ||
1130 | FCE0_MARK, | ||
1131 | }; | ||
1132 | static const unsigned int flctl_ce1_pins[] = { | ||
1133 | /* CE */ | ||
1134 | 66, | ||
1135 | }; | ||
1136 | static const unsigned int flctl_ce1_mux[] = { | ||
1137 | FCE1_MARK, | ||
1138 | }; | ||
1139 | static const unsigned int flctl_ctrl_pins[] = { | ||
1140 | /* FCDE, FOE, FSC, FWE, FRB */ | ||
1141 | 24, 23, 69, 70, 73, | ||
1142 | }; | ||
1143 | static const unsigned int flctl_ctrl_mux[] = { | ||
1144 | A5_FCDE_MARK, A4_FOE_MARK, RD_FSC_MARK, WE0_FWE_MARK, FRB_MARK, | ||
1145 | }; | ||
1146 | /* - FSIA ------------------------------------------------------------------- */ | ||
1147 | static const unsigned int fsia_mclk_in_pins[] = { | ||
1148 | /* CK */ | ||
1149 | 4, | ||
1150 | }; | ||
1151 | static const unsigned int fsia_mclk_in_mux[] = { | ||
1152 | FSIACK_MARK, | ||
1153 | }; | ||
1154 | static const unsigned int fsia_mclk_out_pins[] = { | ||
1155 | /* OMC */ | ||
1156 | 8, | ||
1157 | }; | ||
1158 | static const unsigned int fsia_mclk_out_mux[] = { | ||
1159 | FSIAOMC_MARK, | ||
1160 | }; | ||
1161 | static const unsigned int fsia_sclk_in_pins[] = { | ||
1162 | /* ILR, IBT */ | ||
1163 | 5, 6, | ||
1164 | }; | ||
1165 | static const unsigned int fsia_sclk_in_mux[] = { | ||
1166 | FSIAILR_MARK, FSIAIBT_MARK, | ||
1167 | }; | ||
1168 | static const unsigned int fsia_sclk_out_pins[] = { | ||
1169 | /* OLR, OBT */ | ||
1170 | 9, 10, | ||
1171 | }; | ||
1172 | static const unsigned int fsia_sclk_out_mux[] = { | ||
1173 | FSIAOLR_MARK, FSIAOBT_MARK, | ||
1174 | }; | ||
1175 | static const unsigned int fsia_data_in_pins[] = { | ||
1176 | /* ISLD */ | ||
1177 | 7, | ||
1178 | }; | ||
1179 | static const unsigned int fsia_data_in_mux[] = { | ||
1180 | FSIAISLD_MARK, | ||
1181 | }; | ||
1182 | static const unsigned int fsia_data_out_pins[] = { | ||
1183 | /* OSLD */ | ||
1184 | 11, | ||
1185 | }; | ||
1186 | static const unsigned int fsia_data_out_mux[] = { | ||
1187 | FSIAOSLD_MARK, | ||
1188 | }; | ||
1189 | static const unsigned int fsia_spdif_0_pins[] = { | ||
1190 | /* SPDIF */ | ||
1191 | 11, | ||
1192 | }; | ||
1193 | static const unsigned int fsia_spdif_0_mux[] = { | ||
1194 | FSIASPDIF_11_MARK, | ||
1195 | }; | ||
1196 | static const unsigned int fsia_spdif_1_pins[] = { | ||
1197 | /* SPDIF */ | ||
1198 | 15, | ||
1199 | }; | ||
1200 | static const unsigned int fsia_spdif_1_mux[] = { | ||
1201 | FSIASPDIF_15_MARK, | ||
1202 | }; | ||
1203 | /* - FSIB ------------------------------------------------------------------- */ | ||
1204 | static const unsigned int fsib_mclk_in_pins[] = { | ||
1205 | /* CK */ | ||
1206 | 4, | ||
1207 | }; | ||
1208 | static const unsigned int fsib_mclk_in_mux[] = { | ||
1209 | FSIBCK_MARK, | ||
1210 | }; | ||
1211 | /* - HDMI ------------------------------------------------------------------- */ | ||
1212 | static const unsigned int hdmi_pins[] = { | ||
1213 | /* HPD, CEC */ | ||
1214 | 169, 170, | ||
1215 | }; | ||
1216 | static const unsigned int hdmi_mux[] = { | ||
1217 | HDMI_HPD_MARK, HDMI_CEC_MARK, | ||
1218 | }; | ||
1219 | /* - INTC ------------------------------------------------------------------- */ | ||
1220 | IRQC_PINS_MUX(0, 6, 162); | ||
1221 | IRQC_PIN_MUX(1, 12); | ||
1222 | IRQC_PINS_MUX(2, 4, 5); | ||
1223 | IRQC_PINS_MUX(3, 8, 16); | ||
1224 | IRQC_PINS_MUX(4, 17, 163); | ||
1225 | IRQC_PIN_MUX(5, 18); | ||
1226 | IRQC_PINS_MUX(6, 39, 164); | ||
1227 | IRQC_PINS_MUX(7, 40, 167); | ||
1228 | IRQC_PINS_MUX(8, 41, 168); | ||
1229 | IRQC_PINS_MUX(9, 42, 169); | ||
1230 | IRQC_PIN_MUX(10, 65); | ||
1231 | IRQC_PIN_MUX(11, 67); | ||
1232 | IRQC_PINS_MUX(12, 80, 137); | ||
1233 | IRQC_PINS_MUX(13, 81, 145); | ||
1234 | IRQC_PINS_MUX(14, 82, 146); | ||
1235 | IRQC_PINS_MUX(15, 83, 147); | ||
1236 | IRQC_PINS_MUX(16, 84, 170); | ||
1237 | IRQC_PIN_MUX(17, 85); | ||
1238 | IRQC_PIN_MUX(18, 86); | ||
1239 | IRQC_PIN_MUX(19, 87); | ||
1240 | IRQC_PIN_MUX(20, 92); | ||
1241 | IRQC_PIN_MUX(21, 93); | ||
1242 | IRQC_PIN_MUX(22, 94); | ||
1243 | IRQC_PIN_MUX(23, 95); | ||
1244 | IRQC_PIN_MUX(24, 112); | ||
1245 | IRQC_PIN_MUX(25, 119); | ||
1246 | IRQC_PINS_MUX(26, 121, 172); | ||
1247 | IRQC_PINS_MUX(27, 122, 180); | ||
1248 | IRQC_PINS_MUX(28, 123, 181); | ||
1249 | IRQC_PINS_MUX(29, 129, 182); | ||
1250 | IRQC_PINS_MUX(30, 130, 183); | ||
1251 | IRQC_PINS_MUX(31, 138, 184); | ||
1252 | /* - KEYSC ------------------------------------------------------------------ */ | ||
1253 | static const unsigned int keysc_in04_0_pins[] = { | ||
1254 | /* KEYIN[0:4] */ | ||
1255 | 136, 135, 134, 133, 132, | ||
1256 | }; | ||
1257 | static const unsigned int keysc_in04_0_mux[] = { | ||
1258 | KEYIN0_136_MARK, KEYIN1_135_MARK, KEYIN2_134_MARK, KEYIN3_133_MARK, | ||
1259 | KEYIN4_MARK, | ||
1260 | }; | ||
1261 | static const unsigned int keysc_in04_1_pins[] = { | ||
1262 | /* KEYIN[0:4] */ | ||
1263 | 121, 122, 123, 124, 132, | ||
1264 | }; | ||
1265 | static const unsigned int keysc_in04_1_mux[] = { | ||
1266 | KEYIN0_121_MARK, KEYIN1_122_MARK, KEYIN2_123_MARK, KEYIN3_124_MARK, | ||
1267 | KEYIN4_MARK, | ||
1268 | }; | ||
1269 | static const unsigned int keysc_in5_pins[] = { | ||
1270 | /* KEYIN5 */ | ||
1271 | 131, | ||
1272 | }; | ||
1273 | static const unsigned int keysc_in5_mux[] = { | ||
1274 | KEYIN5_MARK, | ||
1275 | }; | ||
1276 | static const unsigned int keysc_in6_pins[] = { | ||
1277 | /* KEYIN6 */ | ||
1278 | 130, | ||
1279 | }; | ||
1280 | static const unsigned int keysc_in6_mux[] = { | ||
1281 | KEYIN6_MARK, | ||
1282 | }; | ||
1283 | static const unsigned int keysc_in7_pins[] = { | ||
1284 | /* KEYIN7 */ | ||
1285 | 129, | ||
1286 | }; | ||
1287 | static const unsigned int keysc_in7_mux[] = { | ||
1288 | KEYIN7_MARK, | ||
1289 | }; | ||
1290 | static const unsigned int keysc_out4_pins[] = { | ||
1291 | /* KEYOUT[0:3] */ | ||
1292 | 128, 127, 126, 125, | ||
1293 | }; | ||
1294 | static const unsigned int keysc_out4_mux[] = { | ||
1295 | KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK, | ||
1296 | }; | ||
1297 | static const unsigned int keysc_out5_pins[] = { | ||
1298 | /* KEYOUT[0:4] */ | ||
1299 | 128, 127, 126, 125, 124, | ||
1300 | }; | ||
1301 | static const unsigned int keysc_out5_mux[] = { | ||
1302 | KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK, | ||
1303 | KEYOUT4_MARK, | ||
1304 | }; | ||
1305 | static const unsigned int keysc_out6_pins[] = { | ||
1306 | /* KEYOUT[0:5] */ | ||
1307 | 128, 127, 126, 125, 124, 123, | ||
1308 | }; | ||
1309 | static const unsigned int keysc_out6_mux[] = { | ||
1310 | KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK, | ||
1311 | KEYOUT4_MARK, KEYOUT5_MARK, | ||
1312 | }; | ||
1313 | static const unsigned int keysc_out8_pins[] = { | ||
1314 | /* KEYOUT[0:7] */ | ||
1315 | 128, 127, 126, 125, 124, 123, 122, 121, | ||
1316 | }; | ||
1317 | static const unsigned int keysc_out8_mux[] = { | ||
1318 | KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK, | ||
1319 | KEYOUT4_MARK, KEYOUT5_MARK, KEYOUT6_MARK, KEYOUT7_MARK, | ||
1320 | }; | ||
1321 | /* - LCD -------------------------------------------------------------------- */ | ||
1322 | static const unsigned int lcd_data8_pins[] = { | ||
1323 | /* D[0:7] */ | ||
1324 | 121, 122, 123, 124, 125, 126, 127, 128, | ||
1325 | }; | ||
1326 | static const unsigned int lcd_data8_mux[] = { | ||
1327 | /* LCDC */ | ||
1328 | LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK, | ||
1329 | LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK, | ||
1330 | }; | ||
1331 | static const unsigned int lcd_data9_pins[] = { | ||
1332 | /* D[0:8] */ | ||
1333 | 121, 122, 123, 124, 125, 126, 127, 128, | ||
1334 | 129, | ||
1335 | 137, 138, 139, 140, 141, 142, 143, 144, | ||
1336 | }; | ||
1337 | static const unsigned int lcd_data9_mux[] = { | ||
1338 | LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK, | ||
1339 | LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK, | ||
1340 | LCDD8_MARK, | ||
1341 | }; | ||
1342 | static const unsigned int lcd_data12_pins[] = { | ||
1343 | /* D[0:11] */ | ||
1344 | 121, 122, 123, 124, 125, 126, 127, 128, | ||
1345 | 129, 130, 131, 132, | ||
1346 | }; | ||
1347 | static const unsigned int lcd_data12_mux[] = { | ||
1348 | LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK, | ||
1349 | LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK, | ||
1350 | LCDD8_MARK, LCDD9_MARK, LCDD10_MARK, LCDD11_MARK, | ||
1351 | }; | ||
1352 | static const unsigned int lcd_data16_pins[] = { | ||
1353 | /* D[0:15] */ | ||
1354 | 121, 122, 123, 124, 125, 126, 127, 128, | ||
1355 | 129, 130, 131, 132, 133, 134, 135, 136, | ||
1356 | }; | ||
1357 | static const unsigned int lcd_data16_mux[] = { | ||
1358 | LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK, | ||
1359 | LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK, | ||
1360 | LCDD8_MARK, LCDD9_MARK, LCDD10_MARK, LCDD11_MARK, | ||
1361 | LCDD12_MARK, LCDD13_MARK, LCDD14_MARK, LCDD15_MARK, | ||
1362 | }; | ||
1363 | static const unsigned int lcd_data18_pins[] = { | ||
1364 | /* D[0:17] */ | ||
1365 | 121, 122, 123, 124, 125, 126, 127, 128, | ||
1366 | 129, 130, 131, 132, 133, 134, 135, 136, | ||
1367 | 137, 138, | ||
1368 | }; | ||
1369 | static const unsigned int lcd_data18_mux[] = { | ||
1370 | LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK, | ||
1371 | LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK, | ||
1372 | LCDD8_MARK, LCDD9_MARK, LCDD10_MARK, LCDD11_MARK, | ||
1373 | LCDD12_MARK, LCDD13_MARK, LCDD14_MARK, LCDD15_MARK, | ||
1374 | LCDD16_MARK, LCDD17_MARK, | ||
1375 | }; | ||
1376 | static const unsigned int lcd_data24_pins[] = { | ||
1377 | /* D[0:23] */ | ||
1378 | 121, 122, 123, 124, 125, 126, 127, 128, | ||
1379 | 129, 130, 131, 132, 133, 134, 135, 136, | ||
1380 | 137, 138, 139, 140, 141, 142, 143, 144, | ||
1381 | }; | ||
1382 | static const unsigned int lcd_data24_mux[] = { | ||
1383 | LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK, | ||
1384 | LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK, | ||
1385 | LCDD8_MARK, LCDD9_MARK, LCDD10_MARK, LCDD11_MARK, | ||
1386 | LCDD12_MARK, LCDD13_MARK, LCDD14_MARK, LCDD15_MARK, | ||
1387 | LCDD16_MARK, LCDD17_MARK, LCDD18_MARK, LCDD19_MARK, | ||
1388 | LCDD20_MARK, LCDD21_MARK, LCDD22_MARK, LCDD23_MARK, | ||
1389 | }; | ||
1390 | static const unsigned int lcd_display_pins[] = { | ||
1391 | /* DON */ | ||
1392 | 151, | ||
1393 | }; | ||
1394 | static const unsigned int lcd_display_mux[] = { | ||
1395 | LCDDON_MARK, | ||
1396 | }; | ||
1397 | static const unsigned int lcd_lclk_pins[] = { | ||
1398 | /* LCLK */ | ||
1399 | 150, | ||
1400 | }; | ||
1401 | static const unsigned int lcd_lclk_mux[] = { | ||
1402 | LCDLCLK_MARK, | ||
1403 | }; | ||
1404 | static const unsigned int lcd_sync_pins[] = { | ||
1405 | /* VSYN, HSYN, DCK, DISP */ | ||
1406 | 146, 145, 147, 149, | ||
1407 | }; | ||
1408 | static const unsigned int lcd_sync_mux[] = { | ||
1409 | LCDVSYN_MARK, LCDHSYN_MARK, LCDDCK_MARK, LCDDISP_MARK, | ||
1410 | }; | ||
1411 | static const unsigned int lcd_sys_pins[] = { | ||
1412 | /* CS, WR, RD, RS */ | ||
1413 | 145, 147, 148, 149, | ||
1414 | }; | ||
1415 | static const unsigned int lcd_sys_mux[] = { | ||
1416 | LCDCS_MARK, LCDWR_MARK, LCDRD_MARK, LCDRS_MARK, | ||
1417 | }; | ||
936 | /* - MMCIF ------------------------------------------------------------------ */ | 1418 | /* - MMCIF ------------------------------------------------------------------ */ |
937 | static const unsigned int mmc0_data1_0_pins[] = { | 1419 | static const unsigned int mmc0_data1_0_pins[] = { |
938 | /* D[0] */ | 1420 | /* D[0] */ |
@@ -993,6 +1475,139 @@ static const unsigned int mmc0_ctrl_1_pins[] = { | |||
993 | static const unsigned int mmc0_ctrl_1_mux[] = { | 1475 | static const unsigned int mmc0_ctrl_1_mux[] = { |
994 | MMCCMD1_MARK, MMCCLK1_MARK, | 1476 | MMCCMD1_MARK, MMCCLK1_MARK, |
995 | }; | 1477 | }; |
1478 | /* - SCIFA0 ----------------------------------------------------------------- */ | ||
1479 | static const unsigned int scifa0_data_pins[] = { | ||
1480 | /* RXD, TXD */ | ||
1481 | 153, 152, | ||
1482 | }; | ||
1483 | static const unsigned int scifa0_data_mux[] = { | ||
1484 | SCIFA0_RXD_MARK, SCIFA0_TXD_MARK, | ||
1485 | }; | ||
1486 | static const unsigned int scifa0_clk_pins[] = { | ||
1487 | /* SCK */ | ||
1488 | 156, | ||
1489 | }; | ||
1490 | static const unsigned int scifa0_clk_mux[] = { | ||
1491 | SCIFA0_SCK_MARK, | ||
1492 | }; | ||
1493 | static const unsigned int scifa0_ctrl_pins[] = { | ||
1494 | /* RTS, CTS */ | ||
1495 | 157, 158, | ||
1496 | }; | ||
1497 | static const unsigned int scifa0_ctrl_mux[] = { | ||
1498 | SCIFA0_RTS_MARK, SCIFA0_CTS_MARK, | ||
1499 | }; | ||
1500 | /* - SCIFA1 ----------------------------------------------------------------- */ | ||
1501 | static const unsigned int scifa1_data_pins[] = { | ||
1502 | /* RXD, TXD */ | ||
1503 | 155, 154, | ||
1504 | }; | ||
1505 | static const unsigned int scifa1_data_mux[] = { | ||
1506 | SCIFA1_RXD_MARK, SCIFA1_TXD_MARK, | ||
1507 | }; | ||
1508 | static const unsigned int scifa1_clk_pins[] = { | ||
1509 | /* SCK */ | ||
1510 | 159, | ||
1511 | }; | ||
1512 | static const unsigned int scifa1_clk_mux[] = { | ||
1513 | SCIFA1_SCK_MARK, | ||
1514 | }; | ||
1515 | static const unsigned int scifa1_ctrl_pins[] = { | ||
1516 | /* RTS, CTS */ | ||
1517 | 160, 161, | ||
1518 | }; | ||
1519 | static const unsigned int scifa1_ctrl_mux[] = { | ||
1520 | SCIFA1_RTS_MARK, SCIFA1_CTS_MARK, | ||
1521 | }; | ||
1522 | /* - SCIFA2 ----------------------------------------------------------------- */ | ||
1523 | static const unsigned int scifa2_data_pins[] = { | ||
1524 | /* RXD, TXD */ | ||
1525 | 97, 96, | ||
1526 | }; | ||
1527 | static const unsigned int scifa2_data_mux[] = { | ||
1528 | SCIFA2_RXD1_MARK, SCIFA2_TXD1_MARK, | ||
1529 | }; | ||
1530 | static const unsigned int scifa2_clk_pins[] = { | ||
1531 | /* SCK */ | ||
1532 | 98, | ||
1533 | }; | ||
1534 | static const unsigned int scifa2_clk_mux[] = { | ||
1535 | SCIFA2_SCK1_MARK, | ||
1536 | }; | ||
1537 | static const unsigned int scifa2_ctrl_pins[] = { | ||
1538 | /* RTS, CTS */ | ||
1539 | 95, 94, | ||
1540 | }; | ||
1541 | static const unsigned int scifa2_ctrl_mux[] = { | ||
1542 | SCIFA2_RTS1_MARK, SCIFA2_CTS1_MARK, | ||
1543 | }; | ||
1544 | /* - SCIFA3 ----------------------------------------------------------------- */ | ||
1545 | static const unsigned int scifa3_data_pins[] = { | ||
1546 | /* RXD, TXD */ | ||
1547 | 144, 143, | ||
1548 | }; | ||
1549 | static const unsigned int scifa3_data_mux[] = { | ||
1550 | SCIFA3_RXD_MARK, SCIFA3_TXD_MARK, | ||
1551 | }; | ||
1552 | static const unsigned int scifa3_clk_pins[] = { | ||
1553 | /* SCK */ | ||
1554 | 142, | ||
1555 | }; | ||
1556 | static const unsigned int scifa3_clk_mux[] = { | ||
1557 | SCIFA3_SCK_MARK, | ||
1558 | }; | ||
1559 | static const unsigned int scifa3_ctrl_0_pins[] = { | ||
1560 | /* RTS, CTS */ | ||
1561 | 44, 43, | ||
1562 | }; | ||
1563 | static const unsigned int scifa3_ctrl_0_mux[] = { | ||
1564 | SCIFA3_RTS_44_MARK, SCIFA3_CTS_43_MARK, | ||
1565 | }; | ||
1566 | static const unsigned int scifa3_ctrl_1_pins[] = { | ||
1567 | /* RTS, CTS */ | ||
1568 | 141, 140, | ||
1569 | }; | ||
1570 | static const unsigned int scifa3_ctrl_1_mux[] = { | ||
1571 | SCIFA3_RTS_141_MARK, SCIFA3_CTS_140_MARK, | ||
1572 | }; | ||
1573 | /* - SCIFA4 ----------------------------------------------------------------- */ | ||
1574 | static const unsigned int scifa4_data_pins[] = { | ||
1575 | /* RXD, TXD */ | ||
1576 | 5, 6, | ||
1577 | }; | ||
1578 | static const unsigned int scifa4_data_mux[] = { | ||
1579 | SCIFA4_RXD_MARK, SCIFA4_TXD_MARK, | ||
1580 | }; | ||
1581 | /* - SCIFA5 ----------------------------------------------------------------- */ | ||
1582 | static const unsigned int scifa5_data_pins[] = { | ||
1583 | /* RXD, TXD */ | ||
1584 | 8, 12, | ||
1585 | }; | ||
1586 | static const unsigned int scifa5_data_mux[] = { | ||
1587 | SCIFA5_RXD_MARK, SCIFA5_TXD_MARK, | ||
1588 | }; | ||
1589 | /* - SCIFB ------------------------------------------------------------------ */ | ||
1590 | static const unsigned int scifb_data_pins[] = { | ||
1591 | /* RXD, TXD */ | ||
1592 | 166, 165, | ||
1593 | }; | ||
1594 | static const unsigned int scifb_data_mux[] = { | ||
1595 | SCIFB_RXD_MARK, SCIFB_TXD_MARK, | ||
1596 | }; | ||
1597 | static const unsigned int scifb_clk_pins[] = { | ||
1598 | /* SCK */ | ||
1599 | 162, | ||
1600 | }; | ||
1601 | static const unsigned int scifb_clk_mux[] = { | ||
1602 | SCIFB_SCK_MARK, | ||
1603 | }; | ||
1604 | static const unsigned int scifb_ctrl_pins[] = { | ||
1605 | /* RTS, CTS */ | ||
1606 | 163, 164, | ||
1607 | }; | ||
1608 | static const unsigned int scifb_ctrl_mux[] = { | ||
1609 | SCIFB_RTS_MARK, SCIFB_CTS_MARK, | ||
1610 | }; | ||
996 | /* - SDHI0 ------------------------------------------------------------------ */ | 1611 | /* - SDHI0 ------------------------------------------------------------------ */ |
997 | static const unsigned int sdhi0_data1_pins[] = { | 1612 | static const unsigned int sdhi0_data1_pins[] = { |
998 | /* D0 */ | 1613 | /* D0 */ |
@@ -1073,8 +1688,169 @@ static const unsigned int sdhi2_ctrl_pins[] = { | |||
1073 | static const unsigned int sdhi2_ctrl_mux[] = { | 1688 | static const unsigned int sdhi2_ctrl_mux[] = { |
1074 | SDHICMD2_MARK, SDHICLK2_MARK, | 1689 | SDHICMD2_MARK, SDHICLK2_MARK, |
1075 | }; | 1690 | }; |
1691 | /* - USB0 ------------------------------------------------------------------- */ | ||
1692 | static const unsigned int usb0_vbus_pins[] = { | ||
1693 | /* VBUS */ | ||
1694 | 167, | ||
1695 | }; | ||
1696 | static const unsigned int usb0_vbus_mux[] = { | ||
1697 | VBUS0_0_MARK, | ||
1698 | }; | ||
1699 | static const unsigned int usb0_otg_id_pins[] = { | ||
1700 | /* IDIN */ | ||
1701 | 113, | ||
1702 | }; | ||
1703 | static const unsigned int usb0_otg_id_mux[] = { | ||
1704 | IDIN_0_MARK, | ||
1705 | }; | ||
1706 | static const unsigned int usb0_otg_ctrl_pins[] = { | ||
1707 | /* PWEN, EXTLP, OVCN, OVCN2 */ | ||
1708 | 116, 114, 117, 115, | ||
1709 | }; | ||
1710 | static const unsigned int usb0_otg_ctrl_mux[] = { | ||
1711 | PWEN_0_MARK, EXTLP_0_MARK, OVCN_0_MARK, OVCN2_0_MARK, | ||
1712 | }; | ||
1713 | /* - USB1 ------------------------------------------------------------------- */ | ||
1714 | static const unsigned int usb1_vbus_pins[] = { | ||
1715 | /* VBUS */ | ||
1716 | 168, | ||
1717 | }; | ||
1718 | static const unsigned int usb1_vbus_mux[] = { | ||
1719 | VBUS0_1_MARK, | ||
1720 | }; | ||
1721 | static const unsigned int usb1_otg_id_0_pins[] = { | ||
1722 | /* IDIN */ | ||
1723 | 113, | ||
1724 | }; | ||
1725 | static const unsigned int usb1_otg_id_0_mux[] = { | ||
1726 | IDIN_1_113_MARK, | ||
1727 | }; | ||
1728 | static const unsigned int usb1_otg_id_1_pins[] = { | ||
1729 | /* IDIN */ | ||
1730 | 18, | ||
1731 | }; | ||
1732 | static const unsigned int usb1_otg_id_1_mux[] = { | ||
1733 | IDIN_1_18_MARK, | ||
1734 | }; | ||
1735 | static const unsigned int usb1_otg_ctrl_0_pins[] = { | ||
1736 | /* PWEN, EXTLP, OVCN, OVCN2 */ | ||
1737 | 115, 116, 114, 117, 113, | ||
1738 | }; | ||
1739 | static const unsigned int usb1_otg_ctrl_0_mux[] = { | ||
1740 | PWEN_1_115_MARK, EXTLP_1_MARK, OVCN_1_114_MARK, OVCN2_1_MARK, | ||
1741 | }; | ||
1742 | static const unsigned int usb1_otg_ctrl_1_pins[] = { | ||
1743 | /* PWEN, EXTLP, OVCN, OVCN2 */ | ||
1744 | 138, 116, 162, 117, 18, | ||
1745 | }; | ||
1746 | static const unsigned int usb1_otg_ctrl_1_mux[] = { | ||
1747 | PWEN_1_138_MARK, EXTLP_1_MARK, OVCN_1_162_MARK, OVCN2_1_MARK, | ||
1748 | }; | ||
1076 | 1749 | ||
1077 | static const struct sh_pfc_pin_group pinmux_groups[] = { | 1750 | static const struct sh_pfc_pin_group pinmux_groups[] = { |
1751 | SH_PFC_PIN_GROUP(bsc_data8), | ||
1752 | SH_PFC_PIN_GROUP(bsc_data16), | ||
1753 | SH_PFC_PIN_GROUP(bsc_cs0), | ||
1754 | SH_PFC_PIN_GROUP(bsc_cs2), | ||
1755 | SH_PFC_PIN_GROUP(bsc_cs4), | ||
1756 | SH_PFC_PIN_GROUP(bsc_cs5a), | ||
1757 | SH_PFC_PIN_GROUP(bsc_cs5b), | ||
1758 | SH_PFC_PIN_GROUP(bsc_cs6a), | ||
1759 | SH_PFC_PIN_GROUP(bsc_rd_we8), | ||
1760 | SH_PFC_PIN_GROUP(bsc_rd_we16), | ||
1761 | SH_PFC_PIN_GROUP(bsc_bs), | ||
1762 | SH_PFC_PIN_GROUP(bsc_rdwr), | ||
1763 | SH_PFC_PIN_GROUP(ceu_data_0_7), | ||
1764 | SH_PFC_PIN_GROUP(ceu_data_8_15), | ||
1765 | SH_PFC_PIN_GROUP(ceu_clk_0), | ||
1766 | SH_PFC_PIN_GROUP(ceu_clk_1), | ||
1767 | SH_PFC_PIN_GROUP(ceu_clk_2), | ||
1768 | SH_PFC_PIN_GROUP(ceu_sync), | ||
1769 | SH_PFC_PIN_GROUP(ceu_field), | ||
1770 | SH_PFC_PIN_GROUP(flctl_data), | ||
1771 | SH_PFC_PIN_GROUP(flctl_ce0), | ||
1772 | SH_PFC_PIN_GROUP(flctl_ce1), | ||
1773 | SH_PFC_PIN_GROUP(flctl_ctrl), | ||
1774 | SH_PFC_PIN_GROUP(fsia_mclk_in), | ||
1775 | SH_PFC_PIN_GROUP(fsia_mclk_out), | ||
1776 | SH_PFC_PIN_GROUP(fsia_sclk_in), | ||
1777 | SH_PFC_PIN_GROUP(fsia_sclk_out), | ||
1778 | SH_PFC_PIN_GROUP(fsia_data_in), | ||
1779 | SH_PFC_PIN_GROUP(fsia_data_out), | ||
1780 | SH_PFC_PIN_GROUP(fsia_spdif_0), | ||
1781 | SH_PFC_PIN_GROUP(fsia_spdif_1), | ||
1782 | SH_PFC_PIN_GROUP(fsib_mclk_in), | ||
1783 | SH_PFC_PIN_GROUP(hdmi), | ||
1784 | SH_PFC_PIN_GROUP(intc_irq0_0), | ||
1785 | SH_PFC_PIN_GROUP(intc_irq0_1), | ||
1786 | SH_PFC_PIN_GROUP(intc_irq1), | ||
1787 | SH_PFC_PIN_GROUP(intc_irq2_0), | ||
1788 | SH_PFC_PIN_GROUP(intc_irq2_1), | ||
1789 | SH_PFC_PIN_GROUP(intc_irq3_0), | ||
1790 | SH_PFC_PIN_GROUP(intc_irq3_1), | ||
1791 | SH_PFC_PIN_GROUP(intc_irq4_0), | ||
1792 | SH_PFC_PIN_GROUP(intc_irq4_1), | ||
1793 | SH_PFC_PIN_GROUP(intc_irq5), | ||
1794 | SH_PFC_PIN_GROUP(intc_irq6_0), | ||
1795 | SH_PFC_PIN_GROUP(intc_irq6_1), | ||
1796 | SH_PFC_PIN_GROUP(intc_irq7_0), | ||
1797 | SH_PFC_PIN_GROUP(intc_irq7_1), | ||
1798 | SH_PFC_PIN_GROUP(intc_irq8_0), | ||
1799 | SH_PFC_PIN_GROUP(intc_irq8_1), | ||
1800 | SH_PFC_PIN_GROUP(intc_irq9_0), | ||
1801 | SH_PFC_PIN_GROUP(intc_irq9_1), | ||
1802 | SH_PFC_PIN_GROUP(intc_irq10), | ||
1803 | SH_PFC_PIN_GROUP(intc_irq11), | ||
1804 | SH_PFC_PIN_GROUP(intc_irq12_0), | ||
1805 | SH_PFC_PIN_GROUP(intc_irq12_1), | ||
1806 | SH_PFC_PIN_GROUP(intc_irq13_0), | ||
1807 | SH_PFC_PIN_GROUP(intc_irq13_1), | ||
1808 | SH_PFC_PIN_GROUP(intc_irq14_0), | ||
1809 | SH_PFC_PIN_GROUP(intc_irq14_1), | ||
1810 | SH_PFC_PIN_GROUP(intc_irq15_0), | ||
1811 | SH_PFC_PIN_GROUP(intc_irq15_1), | ||
1812 | SH_PFC_PIN_GROUP(intc_irq16_0), | ||
1813 | SH_PFC_PIN_GROUP(intc_irq16_1), | ||
1814 | SH_PFC_PIN_GROUP(intc_irq17), | ||
1815 | SH_PFC_PIN_GROUP(intc_irq18), | ||
1816 | SH_PFC_PIN_GROUP(intc_irq19), | ||
1817 | SH_PFC_PIN_GROUP(intc_irq20), | ||
1818 | SH_PFC_PIN_GROUP(intc_irq21), | ||
1819 | SH_PFC_PIN_GROUP(intc_irq22), | ||
1820 | SH_PFC_PIN_GROUP(intc_irq23), | ||
1821 | SH_PFC_PIN_GROUP(intc_irq24), | ||
1822 | SH_PFC_PIN_GROUP(intc_irq25), | ||
1823 | SH_PFC_PIN_GROUP(intc_irq26_0), | ||
1824 | SH_PFC_PIN_GROUP(intc_irq26_1), | ||
1825 | SH_PFC_PIN_GROUP(intc_irq27_0), | ||
1826 | SH_PFC_PIN_GROUP(intc_irq27_1), | ||
1827 | SH_PFC_PIN_GROUP(intc_irq28_0), | ||
1828 | SH_PFC_PIN_GROUP(intc_irq28_1), | ||
1829 | SH_PFC_PIN_GROUP(intc_irq29_0), | ||
1830 | SH_PFC_PIN_GROUP(intc_irq29_1), | ||
1831 | SH_PFC_PIN_GROUP(intc_irq30_0), | ||
1832 | SH_PFC_PIN_GROUP(intc_irq30_1), | ||
1833 | SH_PFC_PIN_GROUP(intc_irq31_0), | ||
1834 | SH_PFC_PIN_GROUP(intc_irq31_1), | ||
1835 | SH_PFC_PIN_GROUP(keysc_in04_0), | ||
1836 | SH_PFC_PIN_GROUP(keysc_in04_1), | ||
1837 | SH_PFC_PIN_GROUP(keysc_in5), | ||
1838 | SH_PFC_PIN_GROUP(keysc_in6), | ||
1839 | SH_PFC_PIN_GROUP(keysc_in7), | ||
1840 | SH_PFC_PIN_GROUP(keysc_out4), | ||
1841 | SH_PFC_PIN_GROUP(keysc_out5), | ||
1842 | SH_PFC_PIN_GROUP(keysc_out6), | ||
1843 | SH_PFC_PIN_GROUP(keysc_out8), | ||
1844 | SH_PFC_PIN_GROUP(lcd_data8), | ||
1845 | SH_PFC_PIN_GROUP(lcd_data9), | ||
1846 | SH_PFC_PIN_GROUP(lcd_data12), | ||
1847 | SH_PFC_PIN_GROUP(lcd_data16), | ||
1848 | SH_PFC_PIN_GROUP(lcd_data18), | ||
1849 | SH_PFC_PIN_GROUP(lcd_data24), | ||
1850 | SH_PFC_PIN_GROUP(lcd_display), | ||
1851 | SH_PFC_PIN_GROUP(lcd_lclk), | ||
1852 | SH_PFC_PIN_GROUP(lcd_sync), | ||
1853 | SH_PFC_PIN_GROUP(lcd_sys), | ||
1078 | SH_PFC_PIN_GROUP(mmc0_data1_0), | 1854 | SH_PFC_PIN_GROUP(mmc0_data1_0), |
1079 | SH_PFC_PIN_GROUP(mmc0_data4_0), | 1855 | SH_PFC_PIN_GROUP(mmc0_data4_0), |
1080 | SH_PFC_PIN_GROUP(mmc0_data8_0), | 1856 | SH_PFC_PIN_GROUP(mmc0_data8_0), |
@@ -1083,6 +1859,24 @@ static const struct sh_pfc_pin_group pinmux_groups[] = { | |||
1083 | SH_PFC_PIN_GROUP(mmc0_data4_1), | 1859 | SH_PFC_PIN_GROUP(mmc0_data4_1), |
1084 | SH_PFC_PIN_GROUP(mmc0_data8_1), | 1860 | SH_PFC_PIN_GROUP(mmc0_data8_1), |
1085 | SH_PFC_PIN_GROUP(mmc0_ctrl_1), | 1861 | SH_PFC_PIN_GROUP(mmc0_ctrl_1), |
1862 | SH_PFC_PIN_GROUP(scifa0_data), | ||
1863 | SH_PFC_PIN_GROUP(scifa0_clk), | ||
1864 | SH_PFC_PIN_GROUP(scifa0_ctrl), | ||
1865 | SH_PFC_PIN_GROUP(scifa1_data), | ||
1866 | SH_PFC_PIN_GROUP(scifa1_clk), | ||
1867 | SH_PFC_PIN_GROUP(scifa1_ctrl), | ||
1868 | SH_PFC_PIN_GROUP(scifa2_data), | ||
1869 | SH_PFC_PIN_GROUP(scifa2_clk), | ||
1870 | SH_PFC_PIN_GROUP(scifa2_ctrl), | ||
1871 | SH_PFC_PIN_GROUP(scifa3_data), | ||
1872 | SH_PFC_PIN_GROUP(scifa3_clk), | ||
1873 | SH_PFC_PIN_GROUP(scifa3_ctrl_0), | ||
1874 | SH_PFC_PIN_GROUP(scifa3_ctrl_1), | ||
1875 | SH_PFC_PIN_GROUP(scifa4_data), | ||
1876 | SH_PFC_PIN_GROUP(scifa5_data), | ||
1877 | SH_PFC_PIN_GROUP(scifb_data), | ||
1878 | SH_PFC_PIN_GROUP(scifb_clk), | ||
1879 | SH_PFC_PIN_GROUP(scifb_ctrl), | ||
1086 | SH_PFC_PIN_GROUP(sdhi0_data1), | 1880 | SH_PFC_PIN_GROUP(sdhi0_data1), |
1087 | SH_PFC_PIN_GROUP(sdhi0_data4), | 1881 | SH_PFC_PIN_GROUP(sdhi0_data4), |
1088 | SH_PFC_PIN_GROUP(sdhi0_ctrl), | 1882 | SH_PFC_PIN_GROUP(sdhi0_ctrl), |
@@ -1094,6 +1888,144 @@ static const struct sh_pfc_pin_group pinmux_groups[] = { | |||
1094 | SH_PFC_PIN_GROUP(sdhi2_data1), | 1888 | SH_PFC_PIN_GROUP(sdhi2_data1), |
1095 | SH_PFC_PIN_GROUP(sdhi2_data4), | 1889 | SH_PFC_PIN_GROUP(sdhi2_data4), |
1096 | SH_PFC_PIN_GROUP(sdhi2_ctrl), | 1890 | SH_PFC_PIN_GROUP(sdhi2_ctrl), |
1891 | SH_PFC_PIN_GROUP(usb0_vbus), | ||
1892 | SH_PFC_PIN_GROUP(usb0_otg_id), | ||
1893 | SH_PFC_PIN_GROUP(usb0_otg_ctrl), | ||
1894 | SH_PFC_PIN_GROUP(usb1_vbus), | ||
1895 | SH_PFC_PIN_GROUP(usb1_otg_id_0), | ||
1896 | SH_PFC_PIN_GROUP(usb1_otg_id_1), | ||
1897 | SH_PFC_PIN_GROUP(usb1_otg_ctrl_0), | ||
1898 | SH_PFC_PIN_GROUP(usb1_otg_ctrl_1), | ||
1899 | }; | ||
1900 | |||
1901 | static const char * const bsc_groups[] = { | ||
1902 | "bsc_data8", | ||
1903 | "bsc_data16", | ||
1904 | "bsc_cs0", | ||
1905 | "bsc_cs2", | ||
1906 | "bsc_cs4", | ||
1907 | "bsc_cs5a", | ||
1908 | "bsc_cs5b", | ||
1909 | "bsc_cs6a", | ||
1910 | "bsc_rd_we8", | ||
1911 | "bsc_rd_we16", | ||
1912 | "bsc_bs", | ||
1913 | "bsc_rdwr", | ||
1914 | }; | ||
1915 | |||
1916 | static const char * const ceu_groups[] = { | ||
1917 | "ceu_data_0_7", | ||
1918 | "ceu_data_8_15", | ||
1919 | "ceu_clk_0", | ||
1920 | "ceu_clk_1", | ||
1921 | "ceu_clk_2", | ||
1922 | "ceu_sync", | ||
1923 | "ceu_field", | ||
1924 | }; | ||
1925 | |||
1926 | static const char * const flctl_groups[] = { | ||
1927 | "flctl_data", | ||
1928 | "flctl_ce0", | ||
1929 | "flctl_ce1", | ||
1930 | "flctl_ctrl", | ||
1931 | }; | ||
1932 | |||
1933 | static const char * const fsia_groups[] = { | ||
1934 | "fsia_mclk_in", | ||
1935 | "fsia_mclk_out", | ||
1936 | "fsia_sclk_in", | ||
1937 | "fsia_sclk_out", | ||
1938 | "fsia_data_in", | ||
1939 | "fsia_data_out", | ||
1940 | "fsia_spdif_0", | ||
1941 | "fsia_spdif_1", | ||
1942 | }; | ||
1943 | |||
1944 | static const char * const fsib_groups[] = { | ||
1945 | "fsib_mclk_in", | ||
1946 | }; | ||
1947 | |||
1948 | static const char * const hdmi_groups[] = { | ||
1949 | "hdmi", | ||
1950 | }; | ||
1951 | |||
1952 | static const char * const intc_groups[] = { | ||
1953 | "intc_irq0_0", | ||
1954 | "intc_irq0_1", | ||
1955 | "intc_irq1", | ||
1956 | "intc_irq2_0", | ||
1957 | "intc_irq2_1", | ||
1958 | "intc_irq3_0", | ||
1959 | "intc_irq3_1", | ||
1960 | "intc_irq4_0", | ||
1961 | "intc_irq4_1", | ||
1962 | "intc_irq5", | ||
1963 | "intc_irq6_0", | ||
1964 | "intc_irq6_1", | ||
1965 | "intc_irq7_0", | ||
1966 | "intc_irq7_1", | ||
1967 | "intc_irq8_0", | ||
1968 | "intc_irq8_1", | ||
1969 | "intc_irq9_0", | ||
1970 | "intc_irq9_1", | ||
1971 | "intc_irq10", | ||
1972 | "intc_irq11", | ||
1973 | "intc_irq12_0", | ||
1974 | "intc_irq12_1", | ||
1975 | "intc_irq13_0", | ||
1976 | "intc_irq13_1", | ||
1977 | "intc_irq14_0", | ||
1978 | "intc_irq14_1", | ||
1979 | "intc_irq15_0", | ||
1980 | "intc_irq15_1", | ||
1981 | "intc_irq16_0", | ||
1982 | "intc_irq16_1", | ||
1983 | "intc_irq17", | ||
1984 | "intc_irq18", | ||
1985 | "intc_irq19", | ||
1986 | "intc_irq20", | ||
1987 | "intc_irq21", | ||
1988 | "intc_irq22", | ||
1989 | "intc_irq23", | ||
1990 | "intc_irq24", | ||
1991 | "intc_irq25", | ||
1992 | "intc_irq26_0", | ||
1993 | "intc_irq26_1", | ||
1994 | "intc_irq27_0", | ||
1995 | "intc_irq27_1", | ||
1996 | "intc_irq28_0", | ||
1997 | "intc_irq28_1", | ||
1998 | "intc_irq29_0", | ||
1999 | "intc_irq29_1", | ||
2000 | "intc_irq30_0", | ||
2001 | "intc_irq30_1", | ||
2002 | "intc_irq31_0", | ||
2003 | "intc_irq31_1", | ||
2004 | }; | ||
2005 | |||
2006 | static const char * const keysc_groups[] = { | ||
2007 | "keysc_in04_0", | ||
2008 | "keysc_in04_1", | ||
2009 | "keysc_in5", | ||
2010 | "keysc_in6", | ||
2011 | "keysc_in7", | ||
2012 | "keysc_out4", | ||
2013 | "keysc_out5", | ||
2014 | "keysc_out6", | ||
2015 | "keysc_out8", | ||
2016 | }; | ||
2017 | |||
2018 | static const char * const lcd_groups[] = { | ||
2019 | "lcd_data8", | ||
2020 | "lcd_data9", | ||
2021 | "lcd_data12", | ||
2022 | "lcd_data16", | ||
2023 | "lcd_data18", | ||
2024 | "lcd_data24", | ||
2025 | "lcd_display", | ||
2026 | "lcd_lclk", | ||
2027 | "lcd_sync", | ||
2028 | "lcd_sys", | ||
1097 | }; | 2029 | }; |
1098 | 2030 | ||
1099 | static const char * const mmc0_groups[] = { | 2031 | static const char * const mmc0_groups[] = { |
@@ -1107,6 +2039,45 @@ static const char * const mmc0_groups[] = { | |||
1107 | "mmc0_ctrl_1", | 2039 | "mmc0_ctrl_1", |
1108 | }; | 2040 | }; |
1109 | 2041 | ||
2042 | static const char * const scifa0_groups[] = { | ||
2043 | "scifa0_data", | ||
2044 | "scifa0_clk", | ||
2045 | "scifa0_ctrl", | ||
2046 | }; | ||
2047 | |||
2048 | static const char * const scifa1_groups[] = { | ||
2049 | "scifa1_data", | ||
2050 | "scifa1_clk", | ||
2051 | "scifa1_ctrl", | ||
2052 | }; | ||
2053 | |||
2054 | static const char * const scifa2_groups[] = { | ||
2055 | "scifa2_data", | ||
2056 | "scifa2_clk", | ||
2057 | "scifa2_ctrl", | ||
2058 | }; | ||
2059 | |||
2060 | static const char * const scifa3_groups[] = { | ||
2061 | "scifa3_data", | ||
2062 | "scifa3_clk", | ||
2063 | "scifa3_ctrl_0", | ||
2064 | "scifa3_ctrl_1", | ||
2065 | }; | ||
2066 | |||
2067 | static const char * const scifa4_groups[] = { | ||
2068 | "scifa4_data", | ||
2069 | }; | ||
2070 | |||
2071 | static const char * const scifa5_groups[] = { | ||
2072 | "scifa5_data", | ||
2073 | }; | ||
2074 | |||
2075 | static const char * const scifb_groups[] = { | ||
2076 | "scifb_data", | ||
2077 | "scifb_clk", | ||
2078 | "scifb_ctrl", | ||
2079 | }; | ||
2080 | |||
1110 | static const char * const sdhi0_groups[] = { | 2081 | static const char * const sdhi0_groups[] = { |
1111 | "sdhi0_data1", | 2082 | "sdhi0_data1", |
1112 | "sdhi0_data4", | 2083 | "sdhi0_data4", |
@@ -1127,256 +2098,55 @@ static const char * const sdhi2_groups[] = { | |||
1127 | "sdhi2_ctrl", | 2098 | "sdhi2_ctrl", |
1128 | }; | 2099 | }; |
1129 | 2100 | ||
2101 | static const char * const usb0_groups[] = { | ||
2102 | "usb0_vbus", | ||
2103 | "usb0_otg_id", | ||
2104 | "usb0_otg_ctrl", | ||
2105 | }; | ||
2106 | |||
2107 | static const char * const usb1_groups[] = { | ||
2108 | "usb1_vbus", | ||
2109 | "usb1_otg_id_0", | ||
2110 | "usb1_otg_id_1", | ||
2111 | "usb1_otg_ctrl_0", | ||
2112 | "usb1_otg_ctrl_1", | ||
2113 | }; | ||
2114 | |||
1130 | static const struct sh_pfc_function pinmux_functions[] = { | 2115 | static const struct sh_pfc_function pinmux_functions[] = { |
2116 | SH_PFC_FUNCTION(bsc), | ||
2117 | SH_PFC_FUNCTION(ceu), | ||
2118 | SH_PFC_FUNCTION(flctl), | ||
2119 | SH_PFC_FUNCTION(fsia), | ||
2120 | SH_PFC_FUNCTION(fsib), | ||
2121 | SH_PFC_FUNCTION(hdmi), | ||
2122 | SH_PFC_FUNCTION(intc), | ||
2123 | SH_PFC_FUNCTION(keysc), | ||
2124 | SH_PFC_FUNCTION(lcd), | ||
1131 | SH_PFC_FUNCTION(mmc0), | 2125 | SH_PFC_FUNCTION(mmc0), |
2126 | SH_PFC_FUNCTION(scifa0), | ||
2127 | SH_PFC_FUNCTION(scifa1), | ||
2128 | SH_PFC_FUNCTION(scifa2), | ||
2129 | SH_PFC_FUNCTION(scifa3), | ||
2130 | SH_PFC_FUNCTION(scifa4), | ||
2131 | SH_PFC_FUNCTION(scifa5), | ||
2132 | SH_PFC_FUNCTION(scifb), | ||
1132 | SH_PFC_FUNCTION(sdhi0), | 2133 | SH_PFC_FUNCTION(sdhi0), |
1133 | SH_PFC_FUNCTION(sdhi1), | 2134 | SH_PFC_FUNCTION(sdhi1), |
1134 | SH_PFC_FUNCTION(sdhi2), | 2135 | SH_PFC_FUNCTION(sdhi2), |
2136 | SH_PFC_FUNCTION(usb0), | ||
2137 | SH_PFC_FUNCTION(usb1), | ||
1135 | }; | 2138 | }; |
1136 | 2139 | ||
1137 | #define PINMUX_FN_BASE ARRAY_SIZE(pinmux_pins) | 2140 | #undef PORTCR |
1138 | 2141 | #define PORTCR(nr, reg) \ | |
1139 | static const struct pinmux_func pinmux_func_gpios[] = { | 2142 | { \ |
1140 | /* IRQ */ | 2143 | PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ |
1141 | GPIO_FN(IRQ0_6), GPIO_FN(IRQ0_162), GPIO_FN(IRQ1), | 2144 | _PCRH(PORT##nr##_IN, 0, 0, PORT##nr##_OUT), \ |
1142 | GPIO_FN(IRQ2_4), GPIO_FN(IRQ2_5), GPIO_FN(IRQ3_8), | 2145 | PORT##nr##_FN0, PORT##nr##_FN1, \ |
1143 | GPIO_FN(IRQ3_16), GPIO_FN(IRQ4_17), GPIO_FN(IRQ4_163), | 2146 | PORT##nr##_FN2, PORT##nr##_FN3, \ |
1144 | GPIO_FN(IRQ5), GPIO_FN(IRQ6_39), GPIO_FN(IRQ6_164), | 2147 | PORT##nr##_FN4, PORT##nr##_FN5, \ |
1145 | GPIO_FN(IRQ7_40), GPIO_FN(IRQ7_167), GPIO_FN(IRQ8_41), | 2148 | PORT##nr##_FN6, PORT##nr##_FN7 } \ |
1146 | GPIO_FN(IRQ8_168), GPIO_FN(IRQ9_42), GPIO_FN(IRQ9_169), | 2149 | } |
1147 | GPIO_FN(IRQ10), GPIO_FN(IRQ11), GPIO_FN(IRQ12_80), | ||
1148 | GPIO_FN(IRQ12_137), GPIO_FN(IRQ13_81), GPIO_FN(IRQ13_145), | ||
1149 | GPIO_FN(IRQ14_82), GPIO_FN(IRQ14_146), GPIO_FN(IRQ15_83), | ||
1150 | GPIO_FN(IRQ15_147), GPIO_FN(IRQ16_84), GPIO_FN(IRQ16_170), | ||
1151 | GPIO_FN(IRQ17), GPIO_FN(IRQ18), GPIO_FN(IRQ19), | ||
1152 | GPIO_FN(IRQ20), GPIO_FN(IRQ21), GPIO_FN(IRQ22), | ||
1153 | GPIO_FN(IRQ23), GPIO_FN(IRQ24), GPIO_FN(IRQ25), | ||
1154 | GPIO_FN(IRQ26_121), GPIO_FN(IRQ26_172), GPIO_FN(IRQ27_122), | ||
1155 | GPIO_FN(IRQ27_180), GPIO_FN(IRQ28_123), GPIO_FN(IRQ28_181), | ||
1156 | GPIO_FN(IRQ29_129), GPIO_FN(IRQ29_182), GPIO_FN(IRQ30_130), | ||
1157 | GPIO_FN(IRQ30_183), GPIO_FN(IRQ31_138), GPIO_FN(IRQ31_184), | ||
1158 | |||
1159 | /* MSIOF0 */ | ||
1160 | GPIO_FN(MSIOF0_TSYNC), GPIO_FN(MSIOF0_TSCK), GPIO_FN(MSIOF0_RXD), | ||
1161 | GPIO_FN(MSIOF0_RSCK), GPIO_FN(MSIOF0_RSYNC), GPIO_FN(MSIOF0_MCK0), | ||
1162 | GPIO_FN(MSIOF0_MCK1), GPIO_FN(MSIOF0_SS1), GPIO_FN(MSIOF0_SS2), | ||
1163 | GPIO_FN(MSIOF0_TXD), | ||
1164 | |||
1165 | /* MSIOF1 */ | ||
1166 | GPIO_FN(MSIOF1_TSCK_39), GPIO_FN(MSIOF1_TSCK_88), | ||
1167 | GPIO_FN(MSIOF1_TSYNC_40), GPIO_FN(MSIOF1_TSYNC_89), | ||
1168 | GPIO_FN(MSIOF1_TXD_41), GPIO_FN(MSIOF1_TXD_90), | ||
1169 | GPIO_FN(MSIOF1_RXD_42), GPIO_FN(MSIOF1_RXD_91), | ||
1170 | GPIO_FN(MSIOF1_SS1_43), GPIO_FN(MSIOF1_SS1_92), | ||
1171 | GPIO_FN(MSIOF1_SS2_44), GPIO_FN(MSIOF1_SS2_93), | ||
1172 | GPIO_FN(MSIOF1_RSCK), GPIO_FN(MSIOF1_RSYNC), | ||
1173 | GPIO_FN(MSIOF1_MCK0), GPIO_FN(MSIOF1_MCK1), | ||
1174 | |||
1175 | /* MSIOF2 */ | ||
1176 | GPIO_FN(MSIOF2_RSCK), GPIO_FN(MSIOF2_RSYNC), GPIO_FN(MSIOF2_MCK0), | ||
1177 | GPIO_FN(MSIOF2_MCK1), GPIO_FN(MSIOF2_SS1), GPIO_FN(MSIOF2_SS2), | ||
1178 | GPIO_FN(MSIOF2_TSYNC), GPIO_FN(MSIOF2_TSCK), GPIO_FN(MSIOF2_RXD), | ||
1179 | GPIO_FN(MSIOF2_TXD), | ||
1180 | |||
1181 | /* BBIF1 */ | ||
1182 | GPIO_FN(BBIF1_RXD), GPIO_FN(BBIF1_TSYNC), GPIO_FN(BBIF1_TSCK), | ||
1183 | GPIO_FN(BBIF1_TXD), GPIO_FN(BBIF1_RSCK), GPIO_FN(BBIF1_RSYNC), | ||
1184 | GPIO_FN(BBIF1_FLOW), GPIO_FN(BB_RX_FLOW_N), | ||
1185 | |||
1186 | /* BBIF2 */ | ||
1187 | GPIO_FN(BBIF2_TSCK1), GPIO_FN(BBIF2_TSYNC1), | ||
1188 | GPIO_FN(BBIF2_TXD1), GPIO_FN(BBIF2_RXD), | ||
1189 | |||
1190 | /* FSI */ | ||
1191 | GPIO_FN(FSIACK), GPIO_FN(FSIBCK), GPIO_FN(FSIAILR), | ||
1192 | GPIO_FN(FSIAIBT), GPIO_FN(FSIAISLD), GPIO_FN(FSIAOMC), | ||
1193 | GPIO_FN(FSIAOLR), GPIO_FN(FSIAOBT), GPIO_FN(FSIAOSLD), | ||
1194 | GPIO_FN(FSIASPDIF_11), GPIO_FN(FSIASPDIF_15), | ||
1195 | |||
1196 | /* FMSI */ | ||
1197 | GPIO_FN(FMSOCK), GPIO_FN(FMSOOLR), GPIO_FN(FMSIOLR), | ||
1198 | GPIO_FN(FMSOOBT), GPIO_FN(FMSIOBT), GPIO_FN(FMSOSLD), | ||
1199 | GPIO_FN(FMSOILR), GPIO_FN(FMSIILR), GPIO_FN(FMSOIBT), | ||
1200 | GPIO_FN(FMSIIBT), GPIO_FN(FMSISLD), GPIO_FN(FMSICK), | ||
1201 | |||
1202 | /* SCIFA0 */ | ||
1203 | GPIO_FN(SCIFA0_TXD), GPIO_FN(SCIFA0_RXD), GPIO_FN(SCIFA0_SCK), | ||
1204 | GPIO_FN(SCIFA0_RTS), GPIO_FN(SCIFA0_CTS), | ||
1205 | |||
1206 | /* SCIFA1 */ | ||
1207 | GPIO_FN(SCIFA1_TXD), GPIO_FN(SCIFA1_RXD), GPIO_FN(SCIFA1_SCK), | ||
1208 | GPIO_FN(SCIFA1_RTS), GPIO_FN(SCIFA1_CTS), | ||
1209 | |||
1210 | /* SCIFA2 */ | ||
1211 | GPIO_FN(SCIFA2_CTS1), GPIO_FN(SCIFA2_RTS1), GPIO_FN(SCIFA2_TXD1), | ||
1212 | GPIO_FN(SCIFA2_RXD1), GPIO_FN(SCIFA2_SCK1), | ||
1213 | |||
1214 | /* SCIFA3 */ | ||
1215 | GPIO_FN(SCIFA3_CTS_43), GPIO_FN(SCIFA3_CTS_140), | ||
1216 | GPIO_FN(SCIFA3_RTS_44), GPIO_FN(SCIFA3_RTS_141), | ||
1217 | GPIO_FN(SCIFA3_SCK), GPIO_FN(SCIFA3_TXD), | ||
1218 | GPIO_FN(SCIFA3_RXD), | ||
1219 | |||
1220 | /* SCIFA4 */ | ||
1221 | GPIO_FN(SCIFA4_RXD), GPIO_FN(SCIFA4_TXD), | ||
1222 | |||
1223 | /* SCIFA5 */ | ||
1224 | GPIO_FN(SCIFA5_RXD), GPIO_FN(SCIFA5_TXD), | ||
1225 | |||
1226 | /* SCIFB */ | ||
1227 | GPIO_FN(SCIFB_SCK), GPIO_FN(SCIFB_RTS), GPIO_FN(SCIFB_CTS), | ||
1228 | GPIO_FN(SCIFB_TXD), GPIO_FN(SCIFB_RXD), | ||
1229 | |||
1230 | /* CEU */ | ||
1231 | GPIO_FN(VIO_HD), GPIO_FN(VIO_CKO1), GPIO_FN(VIO_CKO2), | ||
1232 | GPIO_FN(VIO_VD), GPIO_FN(VIO_CLK), GPIO_FN(VIO_FIELD), | ||
1233 | GPIO_FN(VIO_CKO), GPIO_FN(VIO_D0), GPIO_FN(VIO_D1), | ||
1234 | GPIO_FN(VIO_D2), GPIO_FN(VIO_D3), GPIO_FN(VIO_D4), | ||
1235 | GPIO_FN(VIO_D5), GPIO_FN(VIO_D6), GPIO_FN(VIO_D7), | ||
1236 | GPIO_FN(VIO_D8), GPIO_FN(VIO_D9), GPIO_FN(VIO_D10), | ||
1237 | GPIO_FN(VIO_D11), GPIO_FN(VIO_D12), GPIO_FN(VIO_D13), | ||
1238 | GPIO_FN(VIO_D14), GPIO_FN(VIO_D15), | ||
1239 | |||
1240 | /* USB0 */ | ||
1241 | GPIO_FN(IDIN_0), GPIO_FN(EXTLP_0), GPIO_FN(OVCN2_0), | ||
1242 | GPIO_FN(PWEN_0), GPIO_FN(OVCN_0), GPIO_FN(VBUS0_0), | ||
1243 | |||
1244 | /* USB1 */ | ||
1245 | GPIO_FN(IDIN_1_18), GPIO_FN(IDIN_1_113), | ||
1246 | GPIO_FN(OVCN_1_114), GPIO_FN(OVCN_1_162), | ||
1247 | GPIO_FN(PWEN_1_115), GPIO_FN(PWEN_1_138), | ||
1248 | GPIO_FN(EXTLP_1), GPIO_FN(OVCN2_1), | ||
1249 | GPIO_FN(VBUS0_1), | ||
1250 | |||
1251 | /* GPIO */ | ||
1252 | GPIO_FN(GPI0), GPIO_FN(GPI1), GPIO_FN(GPO0), GPIO_FN(GPO1), | ||
1253 | |||
1254 | /* BSC */ | ||
1255 | GPIO_FN(BS), GPIO_FN(WE1), GPIO_FN(CKO), | ||
1256 | GPIO_FN(WAIT), GPIO_FN(RDWR), | ||
1257 | |||
1258 | GPIO_FN(A0), GPIO_FN(A1), GPIO_FN(A2), | ||
1259 | GPIO_FN(A3), GPIO_FN(A6), GPIO_FN(A7), | ||
1260 | GPIO_FN(A8), GPIO_FN(A9), GPIO_FN(A10), | ||
1261 | GPIO_FN(A11), GPIO_FN(A12), GPIO_FN(A13), | ||
1262 | GPIO_FN(A14), GPIO_FN(A15), GPIO_FN(A16), | ||
1263 | GPIO_FN(A17), GPIO_FN(A18), GPIO_FN(A19), | ||
1264 | GPIO_FN(A20), GPIO_FN(A21), GPIO_FN(A22), | ||
1265 | GPIO_FN(A23), GPIO_FN(A24), GPIO_FN(A25), | ||
1266 | GPIO_FN(A26), | ||
1267 | |||
1268 | GPIO_FN(CS0), GPIO_FN(CS2), GPIO_FN(CS4), | ||
1269 | GPIO_FN(CS5A), GPIO_FN(CS5B), GPIO_FN(CS6A), | ||
1270 | |||
1271 | /* BSC/FLCTL */ | ||
1272 | GPIO_FN(RD_FSC), GPIO_FN(WE0_FWE), GPIO_FN(A4_FOE), | ||
1273 | GPIO_FN(A5_FCDE), GPIO_FN(D0_NAF0), GPIO_FN(D1_NAF1), | ||
1274 | GPIO_FN(D2_NAF2), GPIO_FN(D3_NAF3), GPIO_FN(D4_NAF4), | ||
1275 | GPIO_FN(D5_NAF5), GPIO_FN(D6_NAF6), GPIO_FN(D7_NAF7), | ||
1276 | GPIO_FN(D8_NAF8), GPIO_FN(D9_NAF9), GPIO_FN(D10_NAF10), | ||
1277 | GPIO_FN(D11_NAF11), GPIO_FN(D12_NAF12), GPIO_FN(D13_NAF13), | ||
1278 | GPIO_FN(D14_NAF14), GPIO_FN(D15_NAF15), | ||
1279 | |||
1280 | /* SPU2 */ | ||
1281 | GPIO_FN(VINT_I), | ||
1282 | |||
1283 | /* FLCTL */ | ||
1284 | GPIO_FN(FCE1), GPIO_FN(FCE0), GPIO_FN(FRB), | ||
1285 | |||
1286 | /* HSI */ | ||
1287 | GPIO_FN(GP_RX_FLAG), GPIO_FN(GP_RX_DATA), GPIO_FN(GP_TX_READY), | ||
1288 | GPIO_FN(GP_RX_WAKE), GPIO_FN(MP_TX_FLAG), GPIO_FN(MP_TX_DATA), | ||
1289 | GPIO_FN(MP_RX_READY), GPIO_FN(MP_TX_WAKE), | ||
1290 | |||
1291 | /* MFI */ | ||
1292 | GPIO_FN(MFIv6), | ||
1293 | GPIO_FN(MFIv4), | ||
1294 | |||
1295 | GPIO_FN(MEMC_BUSCLK_MEMC_A0), GPIO_FN(MEMC_ADV_MEMC_DREQ0), | ||
1296 | GPIO_FN(MEMC_WAIT_MEMC_DREQ1), GPIO_FN(MEMC_CS1_MEMC_A1), | ||
1297 | GPIO_FN(MEMC_CS0), GPIO_FN(MEMC_NOE), | ||
1298 | GPIO_FN(MEMC_NWE), GPIO_FN(MEMC_INT), | ||
1299 | |||
1300 | GPIO_FN(MEMC_AD0), GPIO_FN(MEMC_AD1), GPIO_FN(MEMC_AD2), | ||
1301 | GPIO_FN(MEMC_AD3), GPIO_FN(MEMC_AD4), GPIO_FN(MEMC_AD5), | ||
1302 | GPIO_FN(MEMC_AD6), GPIO_FN(MEMC_AD7), GPIO_FN(MEMC_AD8), | ||
1303 | GPIO_FN(MEMC_AD9), GPIO_FN(MEMC_AD10), GPIO_FN(MEMC_AD11), | ||
1304 | GPIO_FN(MEMC_AD12), GPIO_FN(MEMC_AD13), GPIO_FN(MEMC_AD14), | ||
1305 | GPIO_FN(MEMC_AD15), | ||
1306 | |||
1307 | /* SIM */ | ||
1308 | GPIO_FN(SIM_RST), GPIO_FN(SIM_CLK), GPIO_FN(SIM_D), | ||
1309 | |||
1310 | /* TPU */ | ||
1311 | GPIO_FN(TPU0TO0), GPIO_FN(TPU0TO1), GPIO_FN(TPU0TO2_93), | ||
1312 | GPIO_FN(TPU0TO2_99), GPIO_FN(TPU0TO3), | ||
1313 | |||
1314 | /* I2C2 */ | ||
1315 | GPIO_FN(I2C_SCL2), GPIO_FN(I2C_SDA2), | ||
1316 | |||
1317 | /* I2C3(1) */ | ||
1318 | GPIO_FN(I2C_SCL3), GPIO_FN(I2C_SDA3), | ||
1319 | |||
1320 | /* I2C3(2) */ | ||
1321 | GPIO_FN(I2C_SCL3S), GPIO_FN(I2C_SDA3S), | ||
1322 | |||
1323 | /* I2C4(2) */ | ||
1324 | GPIO_FN(I2C_SCL4), GPIO_FN(I2C_SDA4), | ||
1325 | |||
1326 | /* I2C4(2) */ | ||
1327 | GPIO_FN(I2C_SCL4S), GPIO_FN(I2C_SDA4S), | ||
1328 | |||
1329 | /* KEYSC */ | ||
1330 | GPIO_FN(KEYOUT0), GPIO_FN(KEYIN0_121), GPIO_FN(KEYIN0_136), | ||
1331 | GPIO_FN(KEYOUT1), GPIO_FN(KEYIN1_122), GPIO_FN(KEYIN1_135), | ||
1332 | GPIO_FN(KEYOUT2), GPIO_FN(KEYIN2_123), GPIO_FN(KEYIN2_134), | ||
1333 | GPIO_FN(KEYOUT3), GPIO_FN(KEYIN3_124), GPIO_FN(KEYIN3_133), | ||
1334 | GPIO_FN(KEYOUT4), GPIO_FN(KEYIN4), GPIO_FN(KEYOUT5), | ||
1335 | GPIO_FN(KEYIN5), GPIO_FN(KEYOUT6), GPIO_FN(KEYIN6), | ||
1336 | GPIO_FN(KEYOUT7), GPIO_FN(KEYIN7), | ||
1337 | |||
1338 | /* LCDC */ | ||
1339 | GPIO_FN(LCDHSYN), GPIO_FN(LCDCS), GPIO_FN(LCDVSYN), | ||
1340 | GPIO_FN(LCDDCK), GPIO_FN(LCDWR), GPIO_FN(LCDRD), | ||
1341 | GPIO_FN(LCDDISP), GPIO_FN(LCDRS), GPIO_FN(LCDLCLK), | ||
1342 | GPIO_FN(LCDDON), | ||
1343 | |||
1344 | GPIO_FN(LCDD0), GPIO_FN(LCDD1), GPIO_FN(LCDD2), | ||
1345 | GPIO_FN(LCDD3), GPIO_FN(LCDD4), GPIO_FN(LCDD5), | ||
1346 | GPIO_FN(LCDD6), GPIO_FN(LCDD7), GPIO_FN(LCDD8), | ||
1347 | GPIO_FN(LCDD9), GPIO_FN(LCDD10), GPIO_FN(LCDD11), | ||
1348 | GPIO_FN(LCDD12), GPIO_FN(LCDD13), GPIO_FN(LCDD14), | ||
1349 | GPIO_FN(LCDD15), GPIO_FN(LCDD16), GPIO_FN(LCDD17), | ||
1350 | GPIO_FN(LCDD18), GPIO_FN(LCDD19), GPIO_FN(LCDD20), | ||
1351 | GPIO_FN(LCDD21), GPIO_FN(LCDD22), GPIO_FN(LCDD23), | ||
1352 | |||
1353 | GPIO_FN(LCDC0_SELECT), | ||
1354 | GPIO_FN(LCDC1_SELECT), | ||
1355 | |||
1356 | /* IRDA */ | ||
1357 | GPIO_FN(IRDA_OUT), GPIO_FN(IRDA_IN), GPIO_FN(IRDA_FIRSEL), | ||
1358 | GPIO_FN(IROUT_139), GPIO_FN(IROUT_140), | ||
1359 | |||
1360 | /* TSIF1 */ | ||
1361 | GPIO_FN(TS0_1SELECT), | ||
1362 | GPIO_FN(TS0_2SELECT), | ||
1363 | GPIO_FN(TS1_1SELECT), | ||
1364 | GPIO_FN(TS1_2SELECT), | ||
1365 | |||
1366 | GPIO_FN(TS_SPSYNC1), GPIO_FN(TS_SDAT1), | ||
1367 | GPIO_FN(TS_SDEN1), GPIO_FN(TS_SCK1), | ||
1368 | |||
1369 | /* TSIF2 */ | ||
1370 | GPIO_FN(TS_SPSYNC2), GPIO_FN(TS_SDAT2), | ||
1371 | GPIO_FN(TS_SDEN2), GPIO_FN(TS_SCK2), | ||
1372 | |||
1373 | /* HDMI */ | ||
1374 | GPIO_FN(HDMI_HPD), GPIO_FN(HDMI_CEC), | ||
1375 | |||
1376 | /* SDENC */ | ||
1377 | GPIO_FN(SDENC_CPG), | ||
1378 | GPIO_FN(SDENC_DV_CLKI), | ||
1379 | }; | ||
1380 | 2150 | ||
1381 | static const struct pinmux_cfg_reg pinmux_config_regs[] = { | 2151 | static const struct pinmux_cfg_reg pinmux_config_regs[] = { |
1382 | PORTCR(0, 0xE6051000), /* PORT0CR */ | 2152 | PORTCR(0, 0xE6051000), /* PORT0CR */ |
@@ -1776,45 +2546,114 @@ static const struct pinmux_data_reg pinmux_data_regs[] = { | |||
1776 | #define EXT_IRQ16L(n) evt2irq(0x200 + ((n) << 5)) | 2546 | #define EXT_IRQ16L(n) evt2irq(0x200 + ((n) << 5)) |
1777 | #define EXT_IRQ16H(n) evt2irq(0x3200 + (((n) - 16) << 5)) | 2547 | #define EXT_IRQ16H(n) evt2irq(0x3200 + (((n) - 16) << 5)) |
1778 | static const struct pinmux_irq pinmux_irqs[] = { | 2548 | static const struct pinmux_irq pinmux_irqs[] = { |
1779 | PINMUX_IRQ(EXT_IRQ16L(0), GPIO_PORT6, GPIO_PORT162), | 2549 | PINMUX_IRQ(EXT_IRQ16L(0), 6, 162), |
1780 | PINMUX_IRQ(EXT_IRQ16L(1), GPIO_PORT12), | 2550 | PINMUX_IRQ(EXT_IRQ16L(1), 12), |
1781 | PINMUX_IRQ(EXT_IRQ16L(2), GPIO_PORT4, GPIO_PORT5), | 2551 | PINMUX_IRQ(EXT_IRQ16L(2), 4, 5), |
1782 | PINMUX_IRQ(EXT_IRQ16L(3), GPIO_PORT8, GPIO_PORT16), | 2552 | PINMUX_IRQ(EXT_IRQ16L(3), 8, 16), |
1783 | PINMUX_IRQ(EXT_IRQ16L(4), GPIO_PORT17, GPIO_PORT163), | 2553 | PINMUX_IRQ(EXT_IRQ16L(4), 17, 163), |
1784 | PINMUX_IRQ(EXT_IRQ16L(5), GPIO_PORT18), | 2554 | PINMUX_IRQ(EXT_IRQ16L(5), 18), |
1785 | PINMUX_IRQ(EXT_IRQ16L(6), GPIO_PORT39, GPIO_PORT164), | 2555 | PINMUX_IRQ(EXT_IRQ16L(6), 39, 164), |
1786 | PINMUX_IRQ(EXT_IRQ16L(7), GPIO_PORT40, GPIO_PORT167), | 2556 | PINMUX_IRQ(EXT_IRQ16L(7), 40, 167), |
1787 | PINMUX_IRQ(EXT_IRQ16L(8), GPIO_PORT41, GPIO_PORT168), | 2557 | PINMUX_IRQ(EXT_IRQ16L(8), 41, 168), |
1788 | PINMUX_IRQ(EXT_IRQ16L(9), GPIO_PORT42, GPIO_PORT169), | 2558 | PINMUX_IRQ(EXT_IRQ16L(9), 42, 169), |
1789 | PINMUX_IRQ(EXT_IRQ16L(10), GPIO_PORT65), | 2559 | PINMUX_IRQ(EXT_IRQ16L(10), 65), |
1790 | PINMUX_IRQ(EXT_IRQ16L(11), GPIO_PORT67), | 2560 | PINMUX_IRQ(EXT_IRQ16L(11), 67), |
1791 | PINMUX_IRQ(EXT_IRQ16L(12), GPIO_PORT80, GPIO_PORT137), | 2561 | PINMUX_IRQ(EXT_IRQ16L(12), 80, 137), |
1792 | PINMUX_IRQ(EXT_IRQ16L(13), GPIO_PORT81, GPIO_PORT145), | 2562 | PINMUX_IRQ(EXT_IRQ16L(13), 81, 145), |
1793 | PINMUX_IRQ(EXT_IRQ16L(14), GPIO_PORT82, GPIO_PORT146), | 2563 | PINMUX_IRQ(EXT_IRQ16L(14), 82, 146), |
1794 | PINMUX_IRQ(EXT_IRQ16L(15), GPIO_PORT83, GPIO_PORT147), | 2564 | PINMUX_IRQ(EXT_IRQ16L(15), 83, 147), |
1795 | PINMUX_IRQ(EXT_IRQ16H(16), GPIO_PORT84, GPIO_PORT170), | 2565 | PINMUX_IRQ(EXT_IRQ16H(16), 84, 170), |
1796 | PINMUX_IRQ(EXT_IRQ16H(17), GPIO_PORT85), | 2566 | PINMUX_IRQ(EXT_IRQ16H(17), 85), |
1797 | PINMUX_IRQ(EXT_IRQ16H(18), GPIO_PORT86), | 2567 | PINMUX_IRQ(EXT_IRQ16H(18), 86), |
1798 | PINMUX_IRQ(EXT_IRQ16H(19), GPIO_PORT87), | 2568 | PINMUX_IRQ(EXT_IRQ16H(19), 87), |
1799 | PINMUX_IRQ(EXT_IRQ16H(20), GPIO_PORT92), | 2569 | PINMUX_IRQ(EXT_IRQ16H(20), 92), |
1800 | PINMUX_IRQ(EXT_IRQ16H(21), GPIO_PORT93), | 2570 | PINMUX_IRQ(EXT_IRQ16H(21), 93), |
1801 | PINMUX_IRQ(EXT_IRQ16H(22), GPIO_PORT94), | 2571 | PINMUX_IRQ(EXT_IRQ16H(22), 94), |
1802 | PINMUX_IRQ(EXT_IRQ16H(23), GPIO_PORT95), | 2572 | PINMUX_IRQ(EXT_IRQ16H(23), 95), |
1803 | PINMUX_IRQ(EXT_IRQ16H(24), GPIO_PORT112), | 2573 | PINMUX_IRQ(EXT_IRQ16H(24), 112), |
1804 | PINMUX_IRQ(EXT_IRQ16H(25), GPIO_PORT119), | 2574 | PINMUX_IRQ(EXT_IRQ16H(25), 119), |
1805 | PINMUX_IRQ(EXT_IRQ16H(26), GPIO_PORT121, GPIO_PORT172), | 2575 | PINMUX_IRQ(EXT_IRQ16H(26), 121, 172), |
1806 | PINMUX_IRQ(EXT_IRQ16H(27), GPIO_PORT122, GPIO_PORT180), | 2576 | PINMUX_IRQ(EXT_IRQ16H(27), 122, 180), |
1807 | PINMUX_IRQ(EXT_IRQ16H(28), GPIO_PORT123, GPIO_PORT181), | 2577 | PINMUX_IRQ(EXT_IRQ16H(28), 123, 181), |
1808 | PINMUX_IRQ(EXT_IRQ16H(29), GPIO_PORT129, GPIO_PORT182), | 2578 | PINMUX_IRQ(EXT_IRQ16H(29), 129, 182), |
1809 | PINMUX_IRQ(EXT_IRQ16H(30), GPIO_PORT130, GPIO_PORT183), | 2579 | PINMUX_IRQ(EXT_IRQ16H(30), 130, 183), |
1810 | PINMUX_IRQ(EXT_IRQ16H(31), GPIO_PORT138, GPIO_PORT184), | 2580 | PINMUX_IRQ(EXT_IRQ16H(31), 138, 184), |
2581 | }; | ||
2582 | |||
2583 | #define PORTnCR_PULMD_OFF (0 << 6) | ||
2584 | #define PORTnCR_PULMD_DOWN (2 << 6) | ||
2585 | #define PORTnCR_PULMD_UP (3 << 6) | ||
2586 | #define PORTnCR_PULMD_MASK (3 << 6) | ||
2587 | |||
2588 | struct sh7372_portcr_group { | ||
2589 | unsigned int end_pin; | ||
2590 | unsigned int offset; | ||
2591 | }; | ||
2592 | |||
2593 | static const struct sh7372_portcr_group sh7372_portcr_offsets[] = { | ||
2594 | { 45, 0x1000 }, { 75, 0x2000 }, { 99, 0x0000 }, { 120, 0x3000 }, | ||
2595 | { 151, 0x0000 }, { 155, 0x3000 }, { 166, 0x0000 }, { 190, 0x2000 }, | ||
2596 | }; | ||
2597 | |||
2598 | static void __iomem *sh7372_pinmux_portcr(struct sh_pfc *pfc, unsigned int pin) | ||
2599 | { | ||
2600 | unsigned int i; | ||
2601 | |||
2602 | for (i = 0; i < ARRAY_SIZE(sh7372_portcr_offsets); ++i) { | ||
2603 | const struct sh7372_portcr_group *group = | ||
2604 | &sh7372_portcr_offsets[i]; | ||
2605 | |||
2606 | if (i <= group->end_pin) | ||
2607 | return pfc->window->virt + group->offset + pin; | ||
2608 | } | ||
2609 | |||
2610 | return NULL; | ||
2611 | } | ||
2612 | |||
2613 | static unsigned int sh7372_pinmux_get_bias(struct sh_pfc *pfc, unsigned int pin) | ||
2614 | { | ||
2615 | void __iomem *addr = sh7372_pinmux_portcr(pfc, pin); | ||
2616 | u32 value = ioread8(addr) & PORTnCR_PULMD_MASK; | ||
2617 | |||
2618 | switch (value) { | ||
2619 | case PORTnCR_PULMD_UP: | ||
2620 | return PIN_CONFIG_BIAS_PULL_UP; | ||
2621 | case PORTnCR_PULMD_DOWN: | ||
2622 | return PIN_CONFIG_BIAS_PULL_DOWN; | ||
2623 | case PORTnCR_PULMD_OFF: | ||
2624 | default: | ||
2625 | return PIN_CONFIG_BIAS_DISABLE; | ||
2626 | } | ||
2627 | } | ||
2628 | |||
2629 | static void sh7372_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin, | ||
2630 | unsigned int bias) | ||
2631 | { | ||
2632 | void __iomem *addr = sh7372_pinmux_portcr(pfc, pin); | ||
2633 | u32 value = ioread8(addr) & ~PORTnCR_PULMD_MASK; | ||
2634 | |||
2635 | switch (bias) { | ||
2636 | case PIN_CONFIG_BIAS_PULL_UP: | ||
2637 | value |= PORTnCR_PULMD_UP; | ||
2638 | break; | ||
2639 | case PIN_CONFIG_BIAS_PULL_DOWN: | ||
2640 | value |= PORTnCR_PULMD_DOWN; | ||
2641 | break; | ||
2642 | } | ||
2643 | |||
2644 | iowrite8(value, addr); | ||
2645 | } | ||
2646 | |||
2647 | static const struct sh_pfc_soc_operations sh7372_pinmux_ops = { | ||
2648 | .get_bias = sh7372_pinmux_get_bias, | ||
2649 | .set_bias = sh7372_pinmux_set_bias, | ||
1811 | }; | 2650 | }; |
1812 | 2651 | ||
1813 | const struct sh_pfc_soc_info sh7372_pinmux_info = { | 2652 | const struct sh_pfc_soc_info sh7372_pinmux_info = { |
1814 | .name = "sh7372_pfc", | 2653 | .name = "sh7372_pfc", |
2654 | .ops = &sh7372_pinmux_ops, | ||
2655 | |||
1815 | .input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, | 2656 | .input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, |
1816 | .input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, | ||
1817 | .input_pd = { PINMUX_INPUT_PULLDOWN_BEGIN, PINMUX_INPUT_PULLDOWN_END }, | ||
1818 | .output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, | 2657 | .output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, |
1819 | .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, | 2658 | .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, |
1820 | 2659 | ||
@@ -1825,9 +2664,6 @@ const struct sh_pfc_soc_info sh7372_pinmux_info = { | |||
1825 | .functions = pinmux_functions, | 2664 | .functions = pinmux_functions, |
1826 | .nr_functions = ARRAY_SIZE(pinmux_functions), | 2665 | .nr_functions = ARRAY_SIZE(pinmux_functions), |
1827 | 2666 | ||
1828 | .func_gpios = pinmux_func_gpios, | ||
1829 | .nr_func_gpios = ARRAY_SIZE(pinmux_func_gpios), | ||
1830 | |||
1831 | .cfg_regs = pinmux_config_regs, | 2667 | .cfg_regs = pinmux_config_regs, |
1832 | .data_regs = pinmux_data_regs, | 2668 | .data_regs = pinmux_data_regs, |
1833 | 2669 | ||
diff --git a/drivers/pinctrl/sh-pfc/pfc-sh73a0.c b/drivers/pinctrl/sh-pfc/pfc-sh73a0.c index 587f7772abf2..7956df58d751 100644 --- a/drivers/pinctrl/sh-pfc/pfc-sh73a0.c +++ b/drivers/pinctrl/sh-pfc/pfc-sh73a0.c | |||
@@ -20,9 +20,12 @@ | |||
20 | */ | 20 | */ |
21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/module.h> | ||
23 | #include <linux/pinctrl/pinconf-generic.h> | 24 | #include <linux/pinctrl/pinconf-generic.h> |
25 | #include <linux/regulator/driver.h> | ||
26 | #include <linux/regulator/machine.h> | ||
27 | #include <linux/slab.h> | ||
24 | 28 | ||
25 | #include <mach/sh73a0.h> | ||
26 | #include <mach/irqs.h> | 29 | #include <mach/irqs.h> |
27 | 30 | ||
28 | #include "core.h" | 31 | #include "core.h" |
@@ -2538,6 +2541,157 @@ static const unsigned int sdhi2_ctrl_pins[] = { | |||
2538 | static const unsigned int sdhi2_ctrl_mux[] = { | 2541 | static const unsigned int sdhi2_ctrl_mux[] = { |
2539 | SDHICMD2_MARK, SDHICLK2_MARK, | 2542 | SDHICMD2_MARK, SDHICLK2_MARK, |
2540 | }; | 2543 | }; |
2544 | /* - TPU0 ------------------------------------------------------------------- */ | ||
2545 | static const unsigned int tpu0_to0_pins[] = { | ||
2546 | /* TO */ | ||
2547 | 55, | ||
2548 | }; | ||
2549 | static const unsigned int tpu0_to0_mux[] = { | ||
2550 | TPU0TO0_MARK, | ||
2551 | }; | ||
2552 | static const unsigned int tpu0_to1_pins[] = { | ||
2553 | /* TO */ | ||
2554 | 59, | ||
2555 | }; | ||
2556 | static const unsigned int tpu0_to1_mux[] = { | ||
2557 | TPU0TO1_MARK, | ||
2558 | }; | ||
2559 | static const unsigned int tpu0_to2_pins[] = { | ||
2560 | /* TO */ | ||
2561 | 140, | ||
2562 | }; | ||
2563 | static const unsigned int tpu0_to2_mux[] = { | ||
2564 | TPU0TO2_MARK, | ||
2565 | }; | ||
2566 | static const unsigned int tpu0_to3_pins[] = { | ||
2567 | /* TO */ | ||
2568 | 141, | ||
2569 | }; | ||
2570 | static const unsigned int tpu0_to3_mux[] = { | ||
2571 | TPU0TO3_MARK, | ||
2572 | }; | ||
2573 | /* - TPU1 ------------------------------------------------------------------- */ | ||
2574 | static const unsigned int tpu1_to0_pins[] = { | ||
2575 | /* TO */ | ||
2576 | 246, | ||
2577 | }; | ||
2578 | static const unsigned int tpu1_to0_mux[] = { | ||
2579 | TPU1TO0_MARK, | ||
2580 | }; | ||
2581 | static const unsigned int tpu1_to1_0_pins[] = { | ||
2582 | /* TO */ | ||
2583 | 28, | ||
2584 | }; | ||
2585 | static const unsigned int tpu1_to1_0_mux[] = { | ||
2586 | PORT28_TPU1TO1_MARK, | ||
2587 | }; | ||
2588 | static const unsigned int tpu1_to1_1_pins[] = { | ||
2589 | /* TO */ | ||
2590 | 29, | ||
2591 | }; | ||
2592 | static const unsigned int tpu1_to1_1_mux[] = { | ||
2593 | PORT29_TPU1TO1_MARK, | ||
2594 | }; | ||
2595 | static const unsigned int tpu1_to2_pins[] = { | ||
2596 | /* TO */ | ||
2597 | 153, | ||
2598 | }; | ||
2599 | static const unsigned int tpu1_to2_mux[] = { | ||
2600 | TPU1TO2_MARK, | ||
2601 | }; | ||
2602 | static const unsigned int tpu1_to3_pins[] = { | ||
2603 | /* TO */ | ||
2604 | 145, | ||
2605 | }; | ||
2606 | static const unsigned int tpu1_to3_mux[] = { | ||
2607 | TPU1TO3_MARK, | ||
2608 | }; | ||
2609 | /* - TPU2 ------------------------------------------------------------------- */ | ||
2610 | static const unsigned int tpu2_to0_pins[] = { | ||
2611 | /* TO */ | ||
2612 | 248, | ||
2613 | }; | ||
2614 | static const unsigned int tpu2_to0_mux[] = { | ||
2615 | TPU2TO0_MARK, | ||
2616 | }; | ||
2617 | static const unsigned int tpu2_to1_pins[] = { | ||
2618 | /* TO */ | ||
2619 | 197, | ||
2620 | }; | ||
2621 | static const unsigned int tpu2_to1_mux[] = { | ||
2622 | TPU2TO1_MARK, | ||
2623 | }; | ||
2624 | static const unsigned int tpu2_to2_pins[] = { | ||
2625 | /* TO */ | ||
2626 | 50, | ||
2627 | }; | ||
2628 | static const unsigned int tpu2_to2_mux[] = { | ||
2629 | TPU2TO2_MARK, | ||
2630 | }; | ||
2631 | static const unsigned int tpu2_to3_pins[] = { | ||
2632 | /* TO */ | ||
2633 | 51, | ||
2634 | }; | ||
2635 | static const unsigned int tpu2_to3_mux[] = { | ||
2636 | TPU2TO3_MARK, | ||
2637 | }; | ||
2638 | /* - TPU3 ------------------------------------------------------------------- */ | ||
2639 | static const unsigned int tpu3_to0_pins[] = { | ||
2640 | /* TO */ | ||
2641 | 163, | ||
2642 | }; | ||
2643 | static const unsigned int tpu3_to0_mux[] = { | ||
2644 | TPU3TO0_MARK, | ||
2645 | }; | ||
2646 | static const unsigned int tpu3_to1_pins[] = { | ||
2647 | /* TO */ | ||
2648 | 247, | ||
2649 | }; | ||
2650 | static const unsigned int tpu3_to1_mux[] = { | ||
2651 | TPU3TO1_MARK, | ||
2652 | }; | ||
2653 | static const unsigned int tpu3_to2_pins[] = { | ||
2654 | /* TO */ | ||
2655 | 54, | ||
2656 | }; | ||
2657 | static const unsigned int tpu3_to2_mux[] = { | ||
2658 | TPU3TO2_MARK, | ||
2659 | }; | ||
2660 | static const unsigned int tpu3_to3_pins[] = { | ||
2661 | /* TO */ | ||
2662 | 53, | ||
2663 | }; | ||
2664 | static const unsigned int tpu3_to3_mux[] = { | ||
2665 | TPU3TO3_MARK, | ||
2666 | }; | ||
2667 | /* - TPU4 ------------------------------------------------------------------- */ | ||
2668 | static const unsigned int tpu4_to0_pins[] = { | ||
2669 | /* TO */ | ||
2670 | 241, | ||
2671 | }; | ||
2672 | static const unsigned int tpu4_to0_mux[] = { | ||
2673 | TPU4TO0_MARK, | ||
2674 | }; | ||
2675 | static const unsigned int tpu4_to1_pins[] = { | ||
2676 | /* TO */ | ||
2677 | 199, | ||
2678 | }; | ||
2679 | static const unsigned int tpu4_to1_mux[] = { | ||
2680 | TPU4TO1_MARK, | ||
2681 | }; | ||
2682 | static const unsigned int tpu4_to2_pins[] = { | ||
2683 | /* TO */ | ||
2684 | 58, | ||
2685 | }; | ||
2686 | static const unsigned int tpu4_to2_mux[] = { | ||
2687 | TPU4TO2_MARK, | ||
2688 | }; | ||
2689 | static const unsigned int tpu4_to3_pins[] = { | ||
2690 | /* TO */ | ||
2691 | }; | ||
2692 | static const unsigned int tpu4_to3_mux[] = { | ||
2693 | TPU4TO3_MARK, | ||
2694 | }; | ||
2541 | /* - USB -------------------------------------------------------------------- */ | 2695 | /* - USB -------------------------------------------------------------------- */ |
2542 | static const unsigned int usb_vbus_pins[] = { | 2696 | static const unsigned int usb_vbus_pins[] = { |
2543 | /* VBUS */ | 2697 | /* VBUS */ |
@@ -2689,6 +2843,27 @@ static const struct sh_pfc_pin_group pinmux_groups[] = { | |||
2689 | SH_PFC_PIN_GROUP(sdhi2_data1), | 2843 | SH_PFC_PIN_GROUP(sdhi2_data1), |
2690 | SH_PFC_PIN_GROUP(sdhi2_data4), | 2844 | SH_PFC_PIN_GROUP(sdhi2_data4), |
2691 | SH_PFC_PIN_GROUP(sdhi2_ctrl), | 2845 | SH_PFC_PIN_GROUP(sdhi2_ctrl), |
2846 | SH_PFC_PIN_GROUP(tpu0_to0), | ||
2847 | SH_PFC_PIN_GROUP(tpu0_to1), | ||
2848 | SH_PFC_PIN_GROUP(tpu0_to2), | ||
2849 | SH_PFC_PIN_GROUP(tpu0_to3), | ||
2850 | SH_PFC_PIN_GROUP(tpu1_to0), | ||
2851 | SH_PFC_PIN_GROUP(tpu1_to1_0), | ||
2852 | SH_PFC_PIN_GROUP(tpu1_to1_1), | ||
2853 | SH_PFC_PIN_GROUP(tpu1_to2), | ||
2854 | SH_PFC_PIN_GROUP(tpu1_to3), | ||
2855 | SH_PFC_PIN_GROUP(tpu2_to0), | ||
2856 | SH_PFC_PIN_GROUP(tpu2_to1), | ||
2857 | SH_PFC_PIN_GROUP(tpu2_to2), | ||
2858 | SH_PFC_PIN_GROUP(tpu2_to3), | ||
2859 | SH_PFC_PIN_GROUP(tpu3_to0), | ||
2860 | SH_PFC_PIN_GROUP(tpu3_to1), | ||
2861 | SH_PFC_PIN_GROUP(tpu3_to2), | ||
2862 | SH_PFC_PIN_GROUP(tpu3_to3), | ||
2863 | SH_PFC_PIN_GROUP(tpu4_to0), | ||
2864 | SH_PFC_PIN_GROUP(tpu4_to1), | ||
2865 | SH_PFC_PIN_GROUP(tpu4_to2), | ||
2866 | SH_PFC_PIN_GROUP(tpu4_to3), | ||
2692 | SH_PFC_PIN_GROUP(usb_vbus), | 2867 | SH_PFC_PIN_GROUP(usb_vbus), |
2693 | }; | 2868 | }; |
2694 | 2869 | ||
@@ -2908,6 +3083,42 @@ static const char * const usb_groups[] = { | |||
2908 | "usb_vbus", | 3083 | "usb_vbus", |
2909 | }; | 3084 | }; |
2910 | 3085 | ||
3086 | static const char * const tpu0_groups[] = { | ||
3087 | "tpu0_to0", | ||
3088 | "tpu0_to1", | ||
3089 | "tpu0_to2", | ||
3090 | "tpu0_to3", | ||
3091 | }; | ||
3092 | |||
3093 | static const char * const tpu1_groups[] = { | ||
3094 | "tpu1_to0", | ||
3095 | "tpu1_to1_0", | ||
3096 | "tpu1_to1_1", | ||
3097 | "tpu1_to2", | ||
3098 | "tpu1_to3", | ||
3099 | }; | ||
3100 | |||
3101 | static const char * const tpu2_groups[] = { | ||
3102 | "tpu2_to0", | ||
3103 | "tpu2_to1", | ||
3104 | "tpu2_to2", | ||
3105 | "tpu2_to3", | ||
3106 | }; | ||
3107 | |||
3108 | static const char * const tpu3_groups[] = { | ||
3109 | "tpu3_to0", | ||
3110 | "tpu3_to1", | ||
3111 | "tpu3_to2", | ||
3112 | "tpu3_to3", | ||
3113 | }; | ||
3114 | |||
3115 | static const char * const tpu4_groups[] = { | ||
3116 | "tpu4_to0", | ||
3117 | "tpu4_to1", | ||
3118 | "tpu4_to2", | ||
3119 | "tpu4_to3", | ||
3120 | }; | ||
3121 | |||
2911 | static const struct sh_pfc_function pinmux_functions[] = { | 3122 | static const struct sh_pfc_function pinmux_functions[] = { |
2912 | SH_PFC_FUNCTION(bsc), | 3123 | SH_PFC_FUNCTION(bsc), |
2913 | SH_PFC_FUNCTION(fsia), | 3124 | SH_PFC_FUNCTION(fsia), |
@@ -2933,400 +3144,14 @@ static const struct sh_pfc_function pinmux_functions[] = { | |||
2933 | SH_PFC_FUNCTION(sdhi0), | 3144 | SH_PFC_FUNCTION(sdhi0), |
2934 | SH_PFC_FUNCTION(sdhi1), | 3145 | SH_PFC_FUNCTION(sdhi1), |
2935 | SH_PFC_FUNCTION(sdhi2), | 3146 | SH_PFC_FUNCTION(sdhi2), |
3147 | SH_PFC_FUNCTION(tpu0), | ||
3148 | SH_PFC_FUNCTION(tpu1), | ||
3149 | SH_PFC_FUNCTION(tpu2), | ||
3150 | SH_PFC_FUNCTION(tpu3), | ||
3151 | SH_PFC_FUNCTION(tpu4), | ||
2936 | SH_PFC_FUNCTION(usb), | 3152 | SH_PFC_FUNCTION(usb), |
2937 | }; | 3153 | }; |
2938 | 3154 | ||
2939 | #define PINMUX_FN_BASE GPIO_FN_GPI0 | ||
2940 | |||
2941 | static const struct pinmux_func pinmux_func_gpios[] = { | ||
2942 | /* Table 25-1 (Functions 0-7) */ | ||
2943 | GPIO_FN(GPI0), | ||
2944 | GPIO_FN(GPI1), | ||
2945 | GPIO_FN(GPI2), | ||
2946 | GPIO_FN(GPI3), | ||
2947 | GPIO_FN(GPI4), | ||
2948 | GPIO_FN(GPI5), | ||
2949 | GPIO_FN(GPI6), | ||
2950 | GPIO_FN(GPI7), | ||
2951 | GPIO_FN(GPO7), \ | ||
2952 | GPIO_FN(MFG0_OUT2), | ||
2953 | GPIO_FN(GPO6), \ | ||
2954 | GPIO_FN(MFG1_OUT2), | ||
2955 | GPIO_FN(GPO5), \ | ||
2956 | GPIO_FN(PORT16_VIO_CKOR), | ||
2957 | GPIO_FN(PORT19_VIO_CKO2), | ||
2958 | GPIO_FN(GPO0), | ||
2959 | GPIO_FN(GPO1), | ||
2960 | GPIO_FN(GPO2), \ | ||
2961 | GPIO_FN(STATUS0), | ||
2962 | GPIO_FN(GPO3), \ | ||
2963 | GPIO_FN(STATUS1), | ||
2964 | GPIO_FN(GPO4), \ | ||
2965 | GPIO_FN(STATUS2), | ||
2966 | GPIO_FN(VINT), | ||
2967 | GPIO_FN(TCKON), | ||
2968 | GPIO_FN(XDVFS1), \ | ||
2969 | GPIO_FN(MFG0_OUT1), \ | ||
2970 | GPIO_FN(PORT27_IROUT), | ||
2971 | GPIO_FN(XDVFS2), \ | ||
2972 | GPIO_FN(PORT28_TPU1TO1), | ||
2973 | GPIO_FN(SIM_RST), \ | ||
2974 | GPIO_FN(PORT29_TPU1TO1), | ||
2975 | GPIO_FN(SIM_CLK), \ | ||
2976 | GPIO_FN(PORT30_VIO_CKOR), | ||
2977 | GPIO_FN(SIM_D), \ | ||
2978 | GPIO_FN(PORT31_IROUT), | ||
2979 | GPIO_FN(XWUP), | ||
2980 | GPIO_FN(VACK), | ||
2981 | GPIO_FN(XTAL1L), | ||
2982 | GPIO_FN(PORT49_IROUT), \ | ||
2983 | GPIO_FN(BBIF2_TSYNC2), \ | ||
2984 | GPIO_FN(TPU2TO2), \ | ||
2985 | |||
2986 | GPIO_FN(BBIF2_TSCK2), \ | ||
2987 | GPIO_FN(TPU2TO3), \ | ||
2988 | GPIO_FN(BBIF2_TXD2), | ||
2989 | GPIO_FN(TPU3TO3), \ | ||
2990 | GPIO_FN(TPU3TO2), \ | ||
2991 | GPIO_FN(TPU0TO0), | ||
2992 | GPIO_FN(A0), \ | ||
2993 | GPIO_FN(BS_), | ||
2994 | GPIO_FN(A12), \ | ||
2995 | GPIO_FN(TPU4TO2), | ||
2996 | GPIO_FN(A13), \ | ||
2997 | GPIO_FN(TPU0TO1), | ||
2998 | GPIO_FN(A14), \ | ||
2999 | GPIO_FN(A15), \ | ||
3000 | GPIO_FN(A16), \ | ||
3001 | GPIO_FN(MSIOF0_SS1), | ||
3002 | GPIO_FN(A17), \ | ||
3003 | GPIO_FN(MSIOF0_TSYNC), | ||
3004 | GPIO_FN(A18), \ | ||
3005 | GPIO_FN(MSIOF0_TSCK), | ||
3006 | GPIO_FN(A19), \ | ||
3007 | GPIO_FN(MSIOF0_TXD), | ||
3008 | GPIO_FN(A20), \ | ||
3009 | GPIO_FN(MSIOF0_RSCK), | ||
3010 | GPIO_FN(A21), \ | ||
3011 | GPIO_FN(MSIOF0_RSYNC), | ||
3012 | GPIO_FN(A22), \ | ||
3013 | GPIO_FN(MSIOF0_MCK0), | ||
3014 | GPIO_FN(A23), \ | ||
3015 | GPIO_FN(MSIOF0_MCK1), | ||
3016 | GPIO_FN(A24), \ | ||
3017 | GPIO_FN(MSIOF0_RXD), | ||
3018 | GPIO_FN(A25), \ | ||
3019 | GPIO_FN(MSIOF0_SS2), | ||
3020 | GPIO_FN(A26), \ | ||
3021 | GPIO_FN(FCE1_), | ||
3022 | GPIO_FN(DACK0), | ||
3023 | GPIO_FN(FCE0_), \ | ||
3024 | GPIO_FN(WAIT_), \ | ||
3025 | GPIO_FN(DREQ0), | ||
3026 | GPIO_FN(FRB), | ||
3027 | GPIO_FN(CKO), | ||
3028 | GPIO_FN(NBRSTOUT_), | ||
3029 | GPIO_FN(NBRST_), | ||
3030 | GPIO_FN(BBIF2_TXD), | ||
3031 | GPIO_FN(BBIF2_RXD), | ||
3032 | GPIO_FN(BBIF2_SYNC), | ||
3033 | GPIO_FN(BBIF2_SCK), | ||
3034 | GPIO_FN(MFG3_IN2), | ||
3035 | GPIO_FN(MFG3_IN1), | ||
3036 | GPIO_FN(BBIF1_SS2), \ | ||
3037 | GPIO_FN(MFG3_OUT1), | ||
3038 | GPIO_FN(HSI_RX_DATA), \ | ||
3039 | GPIO_FN(BBIF1_RXD), | ||
3040 | GPIO_FN(HSI_TX_WAKE), \ | ||
3041 | GPIO_FN(BBIF1_TSCK), | ||
3042 | GPIO_FN(HSI_TX_DATA), \ | ||
3043 | GPIO_FN(BBIF1_TSYNC), | ||
3044 | GPIO_FN(HSI_TX_READY), \ | ||
3045 | GPIO_FN(BBIF1_TXD), | ||
3046 | GPIO_FN(HSI_RX_READY), \ | ||
3047 | GPIO_FN(BBIF1_RSCK), \ | ||
3048 | GPIO_FN(HSI_RX_WAKE), \ | ||
3049 | GPIO_FN(BBIF1_RSYNC), \ | ||
3050 | GPIO_FN(HSI_RX_FLAG), \ | ||
3051 | GPIO_FN(BBIF1_SS1), \ | ||
3052 | GPIO_FN(BBIF1_FLOW), | ||
3053 | GPIO_FN(HSI_TX_FLAG), | ||
3054 | GPIO_FN(VIO_VD), \ | ||
3055 | GPIO_FN(VIO2_VD), \ | ||
3056 | |||
3057 | GPIO_FN(VIO_HD), \ | ||
3058 | GPIO_FN(VIO2_HD), \ | ||
3059 | GPIO_FN(VIO_D0), \ | ||
3060 | GPIO_FN(PORT130_MSIOF2_RXD), \ | ||
3061 | GPIO_FN(VIO_D1), \ | ||
3062 | GPIO_FN(PORT131_MSIOF2_SS1), \ | ||
3063 | GPIO_FN(VIO_D2), \ | ||
3064 | GPIO_FN(PORT132_MSIOF2_SS2), \ | ||
3065 | GPIO_FN(VIO_D3), \ | ||
3066 | GPIO_FN(MSIOF2_TSYNC), \ | ||
3067 | GPIO_FN(VIO_D4), \ | ||
3068 | GPIO_FN(MSIOF2_TXD), \ | ||
3069 | GPIO_FN(VIO_D5), \ | ||
3070 | GPIO_FN(MSIOF2_TSCK), \ | ||
3071 | GPIO_FN(VIO_D6), \ | ||
3072 | GPIO_FN(VIO_D7), \ | ||
3073 | GPIO_FN(VIO_D8), \ | ||
3074 | GPIO_FN(VIO2_D0), \ | ||
3075 | GPIO_FN(VIO_D9), \ | ||
3076 | GPIO_FN(VIO2_D1), \ | ||
3077 | GPIO_FN(VIO_D10), \ | ||
3078 | GPIO_FN(TPU0TO2), \ | ||
3079 | GPIO_FN(VIO2_D2), \ | ||
3080 | GPIO_FN(VIO_D11), \ | ||
3081 | GPIO_FN(TPU0TO3), \ | ||
3082 | GPIO_FN(VIO2_D3), \ | ||
3083 | GPIO_FN(VIO_D12), \ | ||
3084 | GPIO_FN(VIO2_D4), \ | ||
3085 | GPIO_FN(VIO_D13), \ | ||
3086 | GPIO_FN(VIO2_D5), \ | ||
3087 | GPIO_FN(VIO_D14), \ | ||
3088 | GPIO_FN(VIO2_D6), \ | ||
3089 | GPIO_FN(VIO_D15), \ | ||
3090 | GPIO_FN(TPU1TO3), \ | ||
3091 | GPIO_FN(VIO2_D7), \ | ||
3092 | GPIO_FN(VIO_CLK), \ | ||
3093 | GPIO_FN(VIO2_CLK), \ | ||
3094 | GPIO_FN(VIO_FIELD), \ | ||
3095 | GPIO_FN(VIO2_FIELD), \ | ||
3096 | GPIO_FN(VIO_CKO), | ||
3097 | GPIO_FN(A27), \ | ||
3098 | GPIO_FN(MFG0_IN1), \ | ||
3099 | GPIO_FN(MFG0_IN2), | ||
3100 | GPIO_FN(TS_SPSYNC3), \ | ||
3101 | GPIO_FN(MSIOF2_RSCK), | ||
3102 | GPIO_FN(TS_SDAT3), \ | ||
3103 | GPIO_FN(MSIOF2_RSYNC), | ||
3104 | GPIO_FN(TPU1TO2), \ | ||
3105 | GPIO_FN(TS_SDEN3), \ | ||
3106 | GPIO_FN(PORT153_MSIOF2_SS1), | ||
3107 | GPIO_FN(MSIOF2_MCK0), | ||
3108 | GPIO_FN(MSIOF2_MCK1), | ||
3109 | GPIO_FN(PORT156_MSIOF2_SS2), | ||
3110 | GPIO_FN(PORT157_MSIOF2_RXD), | ||
3111 | GPIO_FN(DINT_), \ | ||
3112 | GPIO_FN(TS_SCK3), | ||
3113 | GPIO_FN(NMI), | ||
3114 | GPIO_FN(TPU3TO0), | ||
3115 | GPIO_FN(BBIF2_TSYNC1), | ||
3116 | GPIO_FN(BBIF2_TSCK1), | ||
3117 | GPIO_FN(BBIF2_TXD1), | ||
3118 | GPIO_FN(MFG2_OUT2), \ | ||
3119 | GPIO_FN(TPU2TO1), | ||
3120 | GPIO_FN(TPU4TO1), \ | ||
3121 | GPIO_FN(MFG4_OUT2), | ||
3122 | GPIO_FN(D16), | ||
3123 | GPIO_FN(D17), | ||
3124 | GPIO_FN(D18), | ||
3125 | GPIO_FN(D19), | ||
3126 | GPIO_FN(D20), | ||
3127 | GPIO_FN(D21), | ||
3128 | GPIO_FN(D22), | ||
3129 | GPIO_FN(PORT207_MSIOF0L_SS1), \ | ||
3130 | GPIO_FN(D23), | ||
3131 | GPIO_FN(PORT208_MSIOF0L_SS2), \ | ||
3132 | GPIO_FN(D24), | ||
3133 | GPIO_FN(D25), | ||
3134 | GPIO_FN(DREQ2), \ | ||
3135 | GPIO_FN(PORT210_MSIOF0L_SS1), \ | ||
3136 | GPIO_FN(D26), | ||
3137 | GPIO_FN(PORT211_MSIOF0L_SS2), \ | ||
3138 | GPIO_FN(D27), | ||
3139 | GPIO_FN(TS_SPSYNC1), \ | ||
3140 | GPIO_FN(MSIOF0L_MCK0), \ | ||
3141 | GPIO_FN(D28), | ||
3142 | GPIO_FN(TS_SDAT1), \ | ||
3143 | GPIO_FN(MSIOF0L_MCK1), \ | ||
3144 | GPIO_FN(D29), | ||
3145 | GPIO_FN(TS_SDEN1), \ | ||
3146 | GPIO_FN(MSIOF0L_RSCK), \ | ||
3147 | GPIO_FN(D30), | ||
3148 | GPIO_FN(TS_SCK1), \ | ||
3149 | GPIO_FN(MSIOF0L_RSYNC), \ | ||
3150 | GPIO_FN(D31), | ||
3151 | GPIO_FN(DACK2), \ | ||
3152 | GPIO_FN(MSIOF0L_TSYNC), \ | ||
3153 | GPIO_FN(VIO2_FIELD3), \ | ||
3154 | GPIO_FN(DACK3), \ | ||
3155 | GPIO_FN(PORT218_VIO_CKOR), | ||
3156 | GPIO_FN(DREQ3), \ | ||
3157 | GPIO_FN(MSIOF0L_TSCK), \ | ||
3158 | GPIO_FN(VIO2_CLK3), \ | ||
3159 | GPIO_FN(DREQ1), \ | ||
3160 | GPIO_FN(PWEN), \ | ||
3161 | GPIO_FN(MSIOF0L_RXD), \ | ||
3162 | GPIO_FN(VIO2_HD3), \ | ||
3163 | GPIO_FN(DACK1), \ | ||
3164 | GPIO_FN(OVCN), \ | ||
3165 | GPIO_FN(MSIOF0L_TXD), \ | ||
3166 | GPIO_FN(VIO2_VD3), \ | ||
3167 | |||
3168 | GPIO_FN(OVCN2), | ||
3169 | GPIO_FN(EXTLP), \ | ||
3170 | GPIO_FN(PORT226_VIO_CKO2), | ||
3171 | GPIO_FN(IDIN), | ||
3172 | GPIO_FN(MFG1_IN1), | ||
3173 | GPIO_FN(MSIOF1_TXD), \ | ||
3174 | GPIO_FN(MSIOF1_TSYNC), \ | ||
3175 | GPIO_FN(MSIOF1_TSCK), \ | ||
3176 | GPIO_FN(MSIOF1_RXD), \ | ||
3177 | GPIO_FN(MSIOF1_RSCK), \ | ||
3178 | GPIO_FN(VIO2_CLK2), \ | ||
3179 | GPIO_FN(MSIOF1_RSYNC), \ | ||
3180 | GPIO_FN(MFG1_IN2), \ | ||
3181 | GPIO_FN(VIO2_VD2), \ | ||
3182 | GPIO_FN(MSIOF1_MCK0), \ | ||
3183 | GPIO_FN(MSIOF1_MCK1), \ | ||
3184 | GPIO_FN(MSIOF1_SS1), \ | ||
3185 | GPIO_FN(VIO2_FIELD2), \ | ||
3186 | GPIO_FN(MSIOF1_SS2), \ | ||
3187 | GPIO_FN(VIO2_HD2), \ | ||
3188 | GPIO_FN(PORT241_IROUT), \ | ||
3189 | GPIO_FN(MFG4_OUT1), \ | ||
3190 | GPIO_FN(TPU4TO0), | ||
3191 | GPIO_FN(MFG4_IN2), | ||
3192 | GPIO_FN(PORT243_VIO_CKO2), | ||
3193 | GPIO_FN(MFG2_IN1), \ | ||
3194 | GPIO_FN(MSIOF2R_RXD), | ||
3195 | GPIO_FN(MFG2_IN2), \ | ||
3196 | GPIO_FN(MSIOF2R_TXD), | ||
3197 | GPIO_FN(MFG1_OUT1), \ | ||
3198 | GPIO_FN(TPU1TO0), | ||
3199 | GPIO_FN(MFG3_OUT2), \ | ||
3200 | GPIO_FN(TPU3TO1), | ||
3201 | GPIO_FN(MFG2_OUT1), \ | ||
3202 | GPIO_FN(TPU2TO0), \ | ||
3203 | GPIO_FN(MSIOF2R_TSCK), | ||
3204 | GPIO_FN(PORT249_IROUT), \ | ||
3205 | GPIO_FN(MFG4_IN1), \ | ||
3206 | GPIO_FN(MSIOF2R_TSYNC), | ||
3207 | GPIO_FN(SDHICLK0), | ||
3208 | GPIO_FN(SDHICD0), | ||
3209 | GPIO_FN(SDHID0_0), | ||
3210 | GPIO_FN(SDHID0_1), | ||
3211 | GPIO_FN(SDHID0_2), | ||
3212 | GPIO_FN(SDHID0_3), | ||
3213 | GPIO_FN(SDHICMD0), | ||
3214 | GPIO_FN(SDHIWP0), | ||
3215 | GPIO_FN(SDHICLK1), | ||
3216 | GPIO_FN(SDHID1_0), \ | ||
3217 | GPIO_FN(TS_SPSYNC2), | ||
3218 | GPIO_FN(SDHID1_1), \ | ||
3219 | GPIO_FN(TS_SDAT2), | ||
3220 | GPIO_FN(SDHID1_2), \ | ||
3221 | GPIO_FN(TS_SDEN2), | ||
3222 | GPIO_FN(SDHID1_3), \ | ||
3223 | GPIO_FN(TS_SCK2), | ||
3224 | GPIO_FN(SDHICMD1), | ||
3225 | GPIO_FN(SDHICLK2), | ||
3226 | GPIO_FN(SDHID2_0), \ | ||
3227 | GPIO_FN(TS_SPSYNC4), | ||
3228 | GPIO_FN(SDHID2_1), \ | ||
3229 | GPIO_FN(TS_SDAT4), | ||
3230 | GPIO_FN(SDHID2_2), \ | ||
3231 | GPIO_FN(TS_SDEN4), | ||
3232 | GPIO_FN(SDHID2_3), \ | ||
3233 | GPIO_FN(TS_SCK4), | ||
3234 | GPIO_FN(SDHICMD2), | ||
3235 | GPIO_FN(MMCCLK0), | ||
3236 | GPIO_FN(MMCD0_0), | ||
3237 | GPIO_FN(MMCD0_1), | ||
3238 | GPIO_FN(MMCD0_2), | ||
3239 | GPIO_FN(MMCD0_3), | ||
3240 | GPIO_FN(MMCD0_4), \ | ||
3241 | GPIO_FN(TS_SPSYNC5), | ||
3242 | GPIO_FN(MMCD0_5), \ | ||
3243 | GPIO_FN(TS_SDAT5), | ||
3244 | GPIO_FN(MMCD0_6), \ | ||
3245 | GPIO_FN(TS_SDEN5), | ||
3246 | GPIO_FN(MMCD0_7), \ | ||
3247 | GPIO_FN(TS_SCK5), | ||
3248 | GPIO_FN(MMCCMD0), | ||
3249 | GPIO_FN(RESETOUTS_), \ | ||
3250 | GPIO_FN(EXTAL2OUT), | ||
3251 | GPIO_FN(MCP_WAIT__MCP_FRB), | ||
3252 | GPIO_FN(MCP_CKO), \ | ||
3253 | GPIO_FN(MMCCLK1), | ||
3254 | GPIO_FN(MCP_D15_MCP_NAF15), | ||
3255 | GPIO_FN(MCP_D14_MCP_NAF14), | ||
3256 | GPIO_FN(MCP_D13_MCP_NAF13), | ||
3257 | GPIO_FN(MCP_D12_MCP_NAF12), | ||
3258 | GPIO_FN(MCP_D11_MCP_NAF11), | ||
3259 | GPIO_FN(MCP_D10_MCP_NAF10), | ||
3260 | GPIO_FN(MCP_D9_MCP_NAF9), | ||
3261 | GPIO_FN(MCP_D8_MCP_NAF8), \ | ||
3262 | GPIO_FN(MMCCMD1), | ||
3263 | GPIO_FN(MCP_D7_MCP_NAF7), \ | ||
3264 | GPIO_FN(MMCD1_7), | ||
3265 | |||
3266 | GPIO_FN(MCP_D6_MCP_NAF6), \ | ||
3267 | GPIO_FN(MMCD1_6), | ||
3268 | GPIO_FN(MCP_D5_MCP_NAF5), \ | ||
3269 | GPIO_FN(MMCD1_5), | ||
3270 | GPIO_FN(MCP_D4_MCP_NAF4), \ | ||
3271 | GPIO_FN(MMCD1_4), | ||
3272 | GPIO_FN(MCP_D3_MCP_NAF3), \ | ||
3273 | GPIO_FN(MMCD1_3), | ||
3274 | GPIO_FN(MCP_D2_MCP_NAF2), \ | ||
3275 | GPIO_FN(MMCD1_2), | ||
3276 | GPIO_FN(MCP_D1_MCP_NAF1), \ | ||
3277 | GPIO_FN(MMCD1_1), | ||
3278 | GPIO_FN(MCP_D0_MCP_NAF0), \ | ||
3279 | GPIO_FN(MMCD1_0), | ||
3280 | GPIO_FN(MCP_NBRSTOUT_), | ||
3281 | GPIO_FN(MCP_WE0__MCP_FWE), \ | ||
3282 | GPIO_FN(MCP_RDWR_MCP_FWE), | ||
3283 | |||
3284 | /* MSEL2 special cases */ | ||
3285 | GPIO_FN(TSIF2_TS_XX1), | ||
3286 | GPIO_FN(TSIF2_TS_XX2), | ||
3287 | GPIO_FN(TSIF2_TS_XX3), | ||
3288 | GPIO_FN(TSIF2_TS_XX4), | ||
3289 | GPIO_FN(TSIF2_TS_XX5), | ||
3290 | GPIO_FN(TSIF1_TS_XX1), | ||
3291 | GPIO_FN(TSIF1_TS_XX2), | ||
3292 | GPIO_FN(TSIF1_TS_XX3), | ||
3293 | GPIO_FN(TSIF1_TS_XX4), | ||
3294 | GPIO_FN(TSIF1_TS_XX5), | ||
3295 | GPIO_FN(TSIF0_TS_XX1), | ||
3296 | GPIO_FN(TSIF0_TS_XX2), | ||
3297 | GPIO_FN(TSIF0_TS_XX3), | ||
3298 | GPIO_FN(TSIF0_TS_XX4), | ||
3299 | GPIO_FN(TSIF0_TS_XX5), | ||
3300 | GPIO_FN(MST1_TS_XX1), | ||
3301 | GPIO_FN(MST1_TS_XX2), | ||
3302 | GPIO_FN(MST1_TS_XX3), | ||
3303 | GPIO_FN(MST1_TS_XX4), | ||
3304 | GPIO_FN(MST1_TS_XX5), | ||
3305 | GPIO_FN(MST0_TS_XX1), | ||
3306 | GPIO_FN(MST0_TS_XX2), | ||
3307 | GPIO_FN(MST0_TS_XX3), | ||
3308 | GPIO_FN(MST0_TS_XX4), | ||
3309 | GPIO_FN(MST0_TS_XX5), | ||
3310 | |||
3311 | /* MSEL3 special cases */ | ||
3312 | GPIO_FN(SDHI0_VCCQ_MC0_ON), | ||
3313 | GPIO_FN(SDHI0_VCCQ_MC0_OFF), | ||
3314 | GPIO_FN(DEBUG_MON_VIO), | ||
3315 | GPIO_FN(DEBUG_MON_LCDD), | ||
3316 | GPIO_FN(LCDC_LCDC0), | ||
3317 | GPIO_FN(LCDC_LCDC1), | ||
3318 | |||
3319 | /* MSEL4 special cases */ | ||
3320 | GPIO_FN(IRQ9_MEM_INT), | ||
3321 | GPIO_FN(IRQ9_MCP_INT), | ||
3322 | GPIO_FN(A11), | ||
3323 | GPIO_FN(TPU4TO3), | ||
3324 | GPIO_FN(RESETA_N_PU_ON), | ||
3325 | GPIO_FN(RESETA_N_PU_OFF), | ||
3326 | GPIO_FN(EDBGREQ_PD), | ||
3327 | GPIO_FN(EDBGREQ_PU), | ||
3328 | }; | ||
3329 | |||
3330 | #undef PORTCR | 3155 | #undef PORTCR |
3331 | #define PORTCR(nr, reg) \ | 3156 | #define PORTCR(nr, reg) \ |
3332 | { \ | 3157 | { \ |
@@ -3888,6 +3713,92 @@ static const struct pinmux_irq pinmux_irqs[] = { | |||
3888 | PINMUX_IRQ(EXT_IRQ16L(9), 308), | 3713 | PINMUX_IRQ(EXT_IRQ16L(9), 308), |
3889 | }; | 3714 | }; |
3890 | 3715 | ||
3716 | /* ----------------------------------------------------------------------------- | ||
3717 | * VCCQ MC0 regulator | ||
3718 | */ | ||
3719 | |||
3720 | static void sh73a0_vccq_mc0_endisable(struct regulator_dev *reg, bool enable) | ||
3721 | { | ||
3722 | struct sh_pfc *pfc = reg->reg_data; | ||
3723 | void __iomem *addr = pfc->window[1].virt + 4; | ||
3724 | unsigned long flags; | ||
3725 | u32 value; | ||
3726 | |||
3727 | spin_lock_irqsave(&pfc->lock, flags); | ||
3728 | |||
3729 | value = ioread32(addr); | ||
3730 | |||
3731 | if (enable) | ||
3732 | value |= BIT(28); | ||
3733 | else | ||
3734 | value &= ~BIT(28); | ||
3735 | |||
3736 | iowrite32(value, addr); | ||
3737 | |||
3738 | spin_unlock_irqrestore(&pfc->lock, flags); | ||
3739 | } | ||
3740 | |||
3741 | static int sh73a0_vccq_mc0_enable(struct regulator_dev *reg) | ||
3742 | { | ||
3743 | sh73a0_vccq_mc0_endisable(reg, true); | ||
3744 | return 0; | ||
3745 | } | ||
3746 | |||
3747 | static int sh73a0_vccq_mc0_disable(struct regulator_dev *reg) | ||
3748 | { | ||
3749 | sh73a0_vccq_mc0_endisable(reg, false); | ||
3750 | return 0; | ||
3751 | } | ||
3752 | |||
3753 | static int sh73a0_vccq_mc0_is_enabled(struct regulator_dev *reg) | ||
3754 | { | ||
3755 | struct sh_pfc *pfc = reg->reg_data; | ||
3756 | void __iomem *addr = pfc->window[1].virt + 4; | ||
3757 | unsigned long flags; | ||
3758 | u32 value; | ||
3759 | |||
3760 | spin_lock_irqsave(&pfc->lock, flags); | ||
3761 | value = ioread32(addr); | ||
3762 | spin_unlock_irqrestore(&pfc->lock, flags); | ||
3763 | |||
3764 | return !!(value & BIT(28)); | ||
3765 | } | ||
3766 | |||
3767 | static int sh73a0_vccq_mc0_get_voltage(struct regulator_dev *reg) | ||
3768 | { | ||
3769 | return 3300000; | ||
3770 | } | ||
3771 | |||
3772 | static struct regulator_ops sh73a0_vccq_mc0_ops = { | ||
3773 | .enable = sh73a0_vccq_mc0_enable, | ||
3774 | .disable = sh73a0_vccq_mc0_disable, | ||
3775 | .is_enabled = sh73a0_vccq_mc0_is_enabled, | ||
3776 | .get_voltage = sh73a0_vccq_mc0_get_voltage, | ||
3777 | }; | ||
3778 | |||
3779 | static const struct regulator_desc sh73a0_vccq_mc0_desc = { | ||
3780 | .owner = THIS_MODULE, | ||
3781 | .name = "vccq_mc0", | ||
3782 | .type = REGULATOR_VOLTAGE, | ||
3783 | .ops = &sh73a0_vccq_mc0_ops, | ||
3784 | }; | ||
3785 | |||
3786 | static struct regulator_consumer_supply sh73a0_vccq_mc0_consumers[] = { | ||
3787 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), | ||
3788 | }; | ||
3789 | |||
3790 | static const struct regulator_init_data sh73a0_vccq_mc0_init_data = { | ||
3791 | .constraints = { | ||
3792 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
3793 | }, | ||
3794 | .num_consumer_supplies = ARRAY_SIZE(sh73a0_vccq_mc0_consumers), | ||
3795 | .consumer_supplies = sh73a0_vccq_mc0_consumers, | ||
3796 | }; | ||
3797 | |||
3798 | /* ----------------------------------------------------------------------------- | ||
3799 | * Pin bias | ||
3800 | */ | ||
3801 | |||
3891 | #define PORTnCR_PULMD_OFF (0 << 6) | 3802 | #define PORTnCR_PULMD_OFF (0 << 6) |
3892 | #define PORTnCR_PULMD_DOWN (2 << 6) | 3803 | #define PORTnCR_PULMD_DOWN (2 << 6) |
3893 | #define PORTnCR_PULMD_UP (3 << 6) | 3804 | #define PORTnCR_PULMD_UP (3 << 6) |
@@ -3934,7 +3845,51 @@ static void sh73a0_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin, | |||
3934 | iowrite8(value, addr); | 3845 | iowrite8(value, addr); |
3935 | } | 3846 | } |
3936 | 3847 | ||
3848 | /* ----------------------------------------------------------------------------- | ||
3849 | * SoC information | ||
3850 | */ | ||
3851 | |||
3852 | struct sh73a0_pinmux_data { | ||
3853 | struct regulator_dev *vccq_mc0; | ||
3854 | }; | ||
3855 | |||
3856 | static int sh73a0_pinmux_soc_init(struct sh_pfc *pfc) | ||
3857 | { | ||
3858 | struct sh73a0_pinmux_data *data; | ||
3859 | struct regulator_config cfg = { }; | ||
3860 | int ret; | ||
3861 | |||
3862 | data = devm_kzalloc(pfc->dev, sizeof(*data), GFP_KERNEL); | ||
3863 | if (data == NULL) | ||
3864 | return -ENOMEM; | ||
3865 | |||
3866 | cfg.dev = pfc->dev; | ||
3867 | cfg.init_data = &sh73a0_vccq_mc0_init_data; | ||
3868 | cfg.driver_data = pfc; | ||
3869 | |||
3870 | data->vccq_mc0 = regulator_register(&sh73a0_vccq_mc0_desc, &cfg); | ||
3871 | if (IS_ERR(data->vccq_mc0)) { | ||
3872 | ret = PTR_ERR(data->vccq_mc0); | ||
3873 | dev_err(pfc->dev, "Failed to register VCCQ MC0 regulator: %d\n", | ||
3874 | ret); | ||
3875 | return ret; | ||
3876 | } | ||
3877 | |||
3878 | pfc->soc_data = data; | ||
3879 | |||
3880 | return 0; | ||
3881 | } | ||
3882 | |||
3883 | static void sh73a0_pinmux_soc_exit(struct sh_pfc *pfc) | ||
3884 | { | ||
3885 | struct sh73a0_pinmux_data *data = pfc->soc_data; | ||
3886 | |||
3887 | regulator_unregister(data->vccq_mc0); | ||
3888 | } | ||
3889 | |||
3937 | static const struct sh_pfc_soc_operations sh73a0_pinmux_ops = { | 3890 | static const struct sh_pfc_soc_operations sh73a0_pinmux_ops = { |
3891 | .init = sh73a0_pinmux_soc_init, | ||
3892 | .exit = sh73a0_pinmux_soc_exit, | ||
3938 | .get_bias = sh73a0_pinmux_get_bias, | 3893 | .get_bias = sh73a0_pinmux_get_bias, |
3939 | .set_bias = sh73a0_pinmux_set_bias, | 3894 | .set_bias = sh73a0_pinmux_set_bias, |
3940 | }; | 3895 | }; |
@@ -3956,9 +3911,6 @@ const struct sh_pfc_soc_info sh73a0_pinmux_info = { | |||
3956 | .functions = pinmux_functions, | 3911 | .functions = pinmux_functions, |
3957 | .nr_functions = ARRAY_SIZE(pinmux_functions), | 3912 | .nr_functions = ARRAY_SIZE(pinmux_functions), |
3958 | 3913 | ||
3959 | .func_gpios = pinmux_func_gpios, | ||
3960 | .nr_func_gpios = ARRAY_SIZE(pinmux_func_gpios), | ||
3961 | |||
3962 | .cfg_regs = pinmux_config_regs, | 3914 | .cfg_regs = pinmux_config_regs, |
3963 | .data_regs = pinmux_data_regs, | 3915 | .data_regs = pinmux_data_regs, |
3964 | 3916 | ||
diff --git a/drivers/pinctrl/sh-pfc/sh_pfc.h b/drivers/pinctrl/sh-pfc/sh_pfc.h index 3b785fc428d5..830ae1ffd0b5 100644 --- a/drivers/pinctrl/sh-pfc/sh_pfc.h +++ b/drivers/pinctrl/sh-pfc/sh_pfc.h | |||
@@ -11,8 +11,8 @@ | |||
11 | #ifndef __SH_PFC_H | 11 | #ifndef __SH_PFC_H |
12 | #define __SH_PFC_H | 12 | #define __SH_PFC_H |
13 | 13 | ||
14 | #include <linux/bug.h> | ||
14 | #include <linux/stringify.h> | 15 | #include <linux/stringify.h> |
15 | #include <asm-generic/gpio.h> | ||
16 | 16 | ||
17 | typedef unsigned short pinmux_enum_t; | 17 | typedef unsigned short pinmux_enum_t; |
18 | 18 | ||
@@ -129,6 +129,8 @@ struct pinmux_range { | |||
129 | struct sh_pfc; | 129 | struct sh_pfc; |
130 | 130 | ||
131 | struct sh_pfc_soc_operations { | 131 | struct sh_pfc_soc_operations { |
132 | int (*init)(struct sh_pfc *pfc); | ||
133 | void (*exit)(struct sh_pfc *pfc); | ||
132 | unsigned int (*get_bias)(struct sh_pfc *pfc, unsigned int pin); | 134 | unsigned int (*get_bias)(struct sh_pfc *pfc, unsigned int pin); |
133 | void (*set_bias)(struct sh_pfc *pfc, unsigned int pin, | 135 | void (*set_bias)(struct sh_pfc *pfc, unsigned int pin, |
134 | unsigned int bias); | 136 | unsigned int bias); |
diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c index 0eab77b22340..f296f3f7db9b 100644 --- a/drivers/rtc/rtc-at91rm9200.c +++ b/drivers/rtc/rtc-at91rm9200.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/rtc.h> | 25 | #include <linux/rtc.h> |
26 | #include <linux/bcd.h> | 26 | #include <linux/bcd.h> |
27 | #include <linux/interrupt.h> | 27 | #include <linux/interrupt.h> |
28 | #include <linux/spinlock.h> | ||
28 | #include <linux/ioctl.h> | 29 | #include <linux/ioctl.h> |
29 | #include <linux/completion.h> | 30 | #include <linux/completion.h> |
30 | #include <linux/io.h> | 31 | #include <linux/io.h> |
@@ -42,10 +43,65 @@ | |||
42 | 43 | ||
43 | #define AT91_RTC_EPOCH 1900UL /* just like arch/arm/common/rtctime.c */ | 44 | #define AT91_RTC_EPOCH 1900UL /* just like arch/arm/common/rtctime.c */ |
44 | 45 | ||
46 | struct at91_rtc_config { | ||
47 | bool use_shadow_imr; | ||
48 | }; | ||
49 | |||
50 | static const struct at91_rtc_config *at91_rtc_config; | ||
45 | static DECLARE_COMPLETION(at91_rtc_updated); | 51 | static DECLARE_COMPLETION(at91_rtc_updated); |
46 | static unsigned int at91_alarm_year = AT91_RTC_EPOCH; | 52 | static unsigned int at91_alarm_year = AT91_RTC_EPOCH; |
47 | static void __iomem *at91_rtc_regs; | 53 | static void __iomem *at91_rtc_regs; |
48 | static int irq; | 54 | static int irq; |
55 | static DEFINE_SPINLOCK(at91_rtc_lock); | ||
56 | static u32 at91_rtc_shadow_imr; | ||
57 | |||
58 | static void at91_rtc_write_ier(u32 mask) | ||
59 | { | ||
60 | unsigned long flags; | ||
61 | |||
62 | spin_lock_irqsave(&at91_rtc_lock, flags); | ||
63 | at91_rtc_shadow_imr |= mask; | ||
64 | at91_rtc_write(AT91_RTC_IER, mask); | ||
65 | spin_unlock_irqrestore(&at91_rtc_lock, flags); | ||
66 | } | ||
67 | |||
68 | static void at91_rtc_write_idr(u32 mask) | ||
69 | { | ||
70 | unsigned long flags; | ||
71 | |||
72 | spin_lock_irqsave(&at91_rtc_lock, flags); | ||
73 | at91_rtc_write(AT91_RTC_IDR, mask); | ||
74 | /* | ||
75 | * Register read back (of any RTC-register) needed to make sure | ||
76 | * IDR-register write has reached the peripheral before updating | ||
77 | * shadow mask. | ||
78 | * | ||
79 | * Note that there is still a possibility that the mask is updated | ||
80 | * before interrupts have actually been disabled in hardware. The only | ||
81 | * way to be certain would be to poll the IMR-register, which is is | ||
82 | * the very register we are trying to emulate. The register read back | ||
83 | * is a reasonable heuristic. | ||
84 | */ | ||
85 | at91_rtc_read(AT91_RTC_SR); | ||
86 | at91_rtc_shadow_imr &= ~mask; | ||
87 | spin_unlock_irqrestore(&at91_rtc_lock, flags); | ||
88 | } | ||
89 | |||
90 | static u32 at91_rtc_read_imr(void) | ||
91 | { | ||
92 | unsigned long flags; | ||
93 | u32 mask; | ||
94 | |||
95 | if (at91_rtc_config->use_shadow_imr) { | ||
96 | spin_lock_irqsave(&at91_rtc_lock, flags); | ||
97 | mask = at91_rtc_shadow_imr; | ||
98 | spin_unlock_irqrestore(&at91_rtc_lock, flags); | ||
99 | } else { | ||
100 | mask = at91_rtc_read(AT91_RTC_IMR); | ||
101 | } | ||
102 | |||
103 | return mask; | ||
104 | } | ||
49 | 105 | ||
50 | /* | 106 | /* |
51 | * Decode time/date into rtc_time structure | 107 | * Decode time/date into rtc_time structure |
@@ -110,9 +166,9 @@ static int at91_rtc_settime(struct device *dev, struct rtc_time *tm) | |||
110 | cr = at91_rtc_read(AT91_RTC_CR); | 166 | cr = at91_rtc_read(AT91_RTC_CR); |
111 | at91_rtc_write(AT91_RTC_CR, cr | AT91_RTC_UPDCAL | AT91_RTC_UPDTIM); | 167 | at91_rtc_write(AT91_RTC_CR, cr | AT91_RTC_UPDCAL | AT91_RTC_UPDTIM); |
112 | 168 | ||
113 | at91_rtc_write(AT91_RTC_IER, AT91_RTC_ACKUPD); | 169 | at91_rtc_write_ier(AT91_RTC_ACKUPD); |
114 | wait_for_completion(&at91_rtc_updated); /* wait for ACKUPD interrupt */ | 170 | wait_for_completion(&at91_rtc_updated); /* wait for ACKUPD interrupt */ |
115 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD); | 171 | at91_rtc_write_idr(AT91_RTC_ACKUPD); |
116 | 172 | ||
117 | at91_rtc_write(AT91_RTC_TIMR, | 173 | at91_rtc_write(AT91_RTC_TIMR, |
118 | bin2bcd(tm->tm_sec) << 0 | 174 | bin2bcd(tm->tm_sec) << 0 |
@@ -144,7 +200,7 @@ static int at91_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
144 | tm->tm_yday = rtc_year_days(tm->tm_mday, tm->tm_mon, tm->tm_year); | 200 | tm->tm_yday = rtc_year_days(tm->tm_mday, tm->tm_mon, tm->tm_year); |
145 | tm->tm_year = at91_alarm_year - 1900; | 201 | tm->tm_year = at91_alarm_year - 1900; |
146 | 202 | ||
147 | alrm->enabled = (at91_rtc_read(AT91_RTC_IMR) & AT91_RTC_ALARM) | 203 | alrm->enabled = (at91_rtc_read_imr() & AT91_RTC_ALARM) |
148 | ? 1 : 0; | 204 | ? 1 : 0; |
149 | 205 | ||
150 | dev_dbg(dev, "%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__, | 206 | dev_dbg(dev, "%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__, |
@@ -169,7 +225,7 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
169 | tm.tm_min = alrm->time.tm_min; | 225 | tm.tm_min = alrm->time.tm_min; |
170 | tm.tm_sec = alrm->time.tm_sec; | 226 | tm.tm_sec = alrm->time.tm_sec; |
171 | 227 | ||
172 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ALARM); | 228 | at91_rtc_write_idr(AT91_RTC_ALARM); |
173 | at91_rtc_write(AT91_RTC_TIMALR, | 229 | at91_rtc_write(AT91_RTC_TIMALR, |
174 | bin2bcd(tm.tm_sec) << 0 | 230 | bin2bcd(tm.tm_sec) << 0 |
175 | | bin2bcd(tm.tm_min) << 8 | 231 | | bin2bcd(tm.tm_min) << 8 |
@@ -182,7 +238,7 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
182 | 238 | ||
183 | if (alrm->enabled) { | 239 | if (alrm->enabled) { |
184 | at91_rtc_write(AT91_RTC_SCCR, AT91_RTC_ALARM); | 240 | at91_rtc_write(AT91_RTC_SCCR, AT91_RTC_ALARM); |
185 | at91_rtc_write(AT91_RTC_IER, AT91_RTC_ALARM); | 241 | at91_rtc_write_ier(AT91_RTC_ALARM); |
186 | } | 242 | } |
187 | 243 | ||
188 | dev_dbg(dev, "%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__, | 244 | dev_dbg(dev, "%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__, |
@@ -198,9 +254,9 @@ static int at91_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) | |||
198 | 254 | ||
199 | if (enabled) { | 255 | if (enabled) { |
200 | at91_rtc_write(AT91_RTC_SCCR, AT91_RTC_ALARM); | 256 | at91_rtc_write(AT91_RTC_SCCR, AT91_RTC_ALARM); |
201 | at91_rtc_write(AT91_RTC_IER, AT91_RTC_ALARM); | 257 | at91_rtc_write_ier(AT91_RTC_ALARM); |
202 | } else | 258 | } else |
203 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ALARM); | 259 | at91_rtc_write_idr(AT91_RTC_ALARM); |
204 | 260 | ||
205 | return 0; | 261 | return 0; |
206 | } | 262 | } |
@@ -209,7 +265,7 @@ static int at91_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) | |||
209 | */ | 265 | */ |
210 | static int at91_rtc_proc(struct device *dev, struct seq_file *seq) | 266 | static int at91_rtc_proc(struct device *dev, struct seq_file *seq) |
211 | { | 267 | { |
212 | unsigned long imr = at91_rtc_read(AT91_RTC_IMR); | 268 | unsigned long imr = at91_rtc_read_imr(); |
213 | 269 | ||
214 | seq_printf(seq, "update_IRQ\t: %s\n", | 270 | seq_printf(seq, "update_IRQ\t: %s\n", |
215 | (imr & AT91_RTC_ACKUPD) ? "yes" : "no"); | 271 | (imr & AT91_RTC_ACKUPD) ? "yes" : "no"); |
@@ -229,7 +285,7 @@ static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id) | |||
229 | unsigned int rtsr; | 285 | unsigned int rtsr; |
230 | unsigned long events = 0; | 286 | unsigned long events = 0; |
231 | 287 | ||
232 | rtsr = at91_rtc_read(AT91_RTC_SR) & at91_rtc_read(AT91_RTC_IMR); | 288 | rtsr = at91_rtc_read(AT91_RTC_SR) & at91_rtc_read_imr(); |
233 | if (rtsr) { /* this interrupt is shared! Is it ours? */ | 289 | if (rtsr) { /* this interrupt is shared! Is it ours? */ |
234 | if (rtsr & AT91_RTC_ALARM) | 290 | if (rtsr & AT91_RTC_ALARM) |
235 | events |= (RTC_AF | RTC_IRQF); | 291 | events |= (RTC_AF | RTC_IRQF); |
@@ -250,6 +306,43 @@ static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id) | |||
250 | return IRQ_NONE; /* not handled */ | 306 | return IRQ_NONE; /* not handled */ |
251 | } | 307 | } |
252 | 308 | ||
309 | static const struct at91_rtc_config at91rm9200_config = { | ||
310 | }; | ||
311 | |||
312 | static const struct at91_rtc_config at91sam9x5_config = { | ||
313 | .use_shadow_imr = true, | ||
314 | }; | ||
315 | |||
316 | #ifdef CONFIG_OF | ||
317 | static const struct of_device_id at91_rtc_dt_ids[] = { | ||
318 | { | ||
319 | .compatible = "atmel,at91rm9200-rtc", | ||
320 | .data = &at91rm9200_config, | ||
321 | }, { | ||
322 | .compatible = "atmel,at91sam9x5-rtc", | ||
323 | .data = &at91sam9x5_config, | ||
324 | }, { | ||
325 | /* sentinel */ | ||
326 | } | ||
327 | }; | ||
328 | MODULE_DEVICE_TABLE(of, at91_rtc_dt_ids); | ||
329 | #endif | ||
330 | |||
331 | static const struct at91_rtc_config * | ||
332 | at91_rtc_get_config(struct platform_device *pdev) | ||
333 | { | ||
334 | const struct of_device_id *match; | ||
335 | |||
336 | if (pdev->dev.of_node) { | ||
337 | match = of_match_node(at91_rtc_dt_ids, pdev->dev.of_node); | ||
338 | if (!match) | ||
339 | return NULL; | ||
340 | return (const struct at91_rtc_config *)match->data; | ||
341 | } | ||
342 | |||
343 | return &at91rm9200_config; | ||
344 | } | ||
345 | |||
253 | static const struct rtc_class_ops at91_rtc_ops = { | 346 | static const struct rtc_class_ops at91_rtc_ops = { |
254 | .read_time = at91_rtc_readtime, | 347 | .read_time = at91_rtc_readtime, |
255 | .set_time = at91_rtc_settime, | 348 | .set_time = at91_rtc_settime, |
@@ -268,6 +361,10 @@ static int __init at91_rtc_probe(struct platform_device *pdev) | |||
268 | struct resource *regs; | 361 | struct resource *regs; |
269 | int ret = 0; | 362 | int ret = 0; |
270 | 363 | ||
364 | at91_rtc_config = at91_rtc_get_config(pdev); | ||
365 | if (!at91_rtc_config) | ||
366 | return -ENODEV; | ||
367 | |||
271 | regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 368 | regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
272 | if (!regs) { | 369 | if (!regs) { |
273 | dev_err(&pdev->dev, "no mmio resource defined\n"); | 370 | dev_err(&pdev->dev, "no mmio resource defined\n"); |
@@ -290,7 +387,7 @@ static int __init at91_rtc_probe(struct platform_device *pdev) | |||
290 | at91_rtc_write(AT91_RTC_MR, 0); /* 24 hour mode */ | 387 | at91_rtc_write(AT91_RTC_MR, 0); /* 24 hour mode */ |
291 | 388 | ||
292 | /* Disable all interrupts */ | 389 | /* Disable all interrupts */ |
293 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD | AT91_RTC_ALARM | | 390 | at91_rtc_write_idr(AT91_RTC_ACKUPD | AT91_RTC_ALARM | |
294 | AT91_RTC_SECEV | AT91_RTC_TIMEV | | 391 | AT91_RTC_SECEV | AT91_RTC_TIMEV | |
295 | AT91_RTC_CALEV); | 392 | AT91_RTC_CALEV); |
296 | 393 | ||
@@ -335,7 +432,7 @@ static int __exit at91_rtc_remove(struct platform_device *pdev) | |||
335 | struct rtc_device *rtc = platform_get_drvdata(pdev); | 432 | struct rtc_device *rtc = platform_get_drvdata(pdev); |
336 | 433 | ||
337 | /* Disable all interrupts */ | 434 | /* Disable all interrupts */ |
338 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD | AT91_RTC_ALARM | | 435 | at91_rtc_write_idr(AT91_RTC_ACKUPD | AT91_RTC_ALARM | |
339 | AT91_RTC_SECEV | AT91_RTC_TIMEV | | 436 | AT91_RTC_SECEV | AT91_RTC_TIMEV | |
340 | AT91_RTC_CALEV); | 437 | AT91_RTC_CALEV); |
341 | free_irq(irq, pdev); | 438 | free_irq(irq, pdev); |
@@ -358,13 +455,13 @@ static int at91_rtc_suspend(struct device *dev) | |||
358 | /* this IRQ is shared with DBGU and other hardware which isn't | 455 | /* this IRQ is shared with DBGU and other hardware which isn't |
359 | * necessarily doing PM like we are... | 456 | * necessarily doing PM like we are... |
360 | */ | 457 | */ |
361 | at91_rtc_imr = at91_rtc_read(AT91_RTC_IMR) | 458 | at91_rtc_imr = at91_rtc_read_imr() |
362 | & (AT91_RTC_ALARM|AT91_RTC_SECEV); | 459 | & (AT91_RTC_ALARM|AT91_RTC_SECEV); |
363 | if (at91_rtc_imr) { | 460 | if (at91_rtc_imr) { |
364 | if (device_may_wakeup(dev)) | 461 | if (device_may_wakeup(dev)) |
365 | enable_irq_wake(irq); | 462 | enable_irq_wake(irq); |
366 | else | 463 | else |
367 | at91_rtc_write(AT91_RTC_IDR, at91_rtc_imr); | 464 | at91_rtc_write_idr(at91_rtc_imr); |
368 | } | 465 | } |
369 | return 0; | 466 | return 0; |
370 | } | 467 | } |
@@ -375,7 +472,7 @@ static int at91_rtc_resume(struct device *dev) | |||
375 | if (device_may_wakeup(dev)) | 472 | if (device_may_wakeup(dev)) |
376 | disable_irq_wake(irq); | 473 | disable_irq_wake(irq); |
377 | else | 474 | else |
378 | at91_rtc_write(AT91_RTC_IER, at91_rtc_imr); | 475 | at91_rtc_write_ier(at91_rtc_imr); |
379 | } | 476 | } |
380 | return 0; | 477 | return 0; |
381 | } | 478 | } |
@@ -383,12 +480,6 @@ static int at91_rtc_resume(struct device *dev) | |||
383 | 480 | ||
384 | static SIMPLE_DEV_PM_OPS(at91_rtc_pm_ops, at91_rtc_suspend, at91_rtc_resume); | 481 | static SIMPLE_DEV_PM_OPS(at91_rtc_pm_ops, at91_rtc_suspend, at91_rtc_resume); |
385 | 482 | ||
386 | static const struct of_device_id at91_rtc_dt_ids[] = { | ||
387 | { .compatible = "atmel,at91rm9200-rtc" }, | ||
388 | { /* sentinel */ } | ||
389 | }; | ||
390 | MODULE_DEVICE_TABLE(of, at91_rtc_dt_ids); | ||
391 | |||
392 | static struct platform_driver at91_rtc_driver = { | 483 | static struct platform_driver at91_rtc_driver = { |
393 | .remove = __exit_p(at91_rtc_remove), | 484 | .remove = __exit_p(at91_rtc_remove), |
394 | .driver = { | 485 | .driver = { |
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index cc5bea9c4b1c..f1cb706445c7 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c | |||
@@ -854,6 +854,9 @@ static int cmos_resume(struct device *dev) | |||
854 | } | 854 | } |
855 | 855 | ||
856 | spin_lock_irq(&rtc_lock); | 856 | spin_lock_irq(&rtc_lock); |
857 | if (device_may_wakeup(dev)) | ||
858 | hpet_rtc_timer_init(); | ||
859 | |||
857 | do { | 860 | do { |
858 | CMOS_WRITE(tmp, RTC_CONTROL); | 861 | CMOS_WRITE(tmp, RTC_CONTROL); |
859 | hpet_set_rtc_irq_bit(tmp & RTC_IRQMASK); | 862 | hpet_set_rtc_irq_bit(tmp & RTC_IRQMASK); |
@@ -869,7 +872,6 @@ static int cmos_resume(struct device *dev) | |||
869 | rtc_update_irq(cmos->rtc, 1, mask); | 872 | rtc_update_irq(cmos->rtc, 1, mask); |
870 | tmp &= ~RTC_AIE; | 873 | tmp &= ~RTC_AIE; |
871 | hpet_mask_rtc_irq_bit(RTC_AIE); | 874 | hpet_mask_rtc_irq_bit(RTC_AIE); |
872 | hpet_rtc_timer_init(); | ||
873 | } while (mask & RTC_AIE); | 875 | } while (mask & RTC_AIE); |
874 | spin_unlock_irq(&rtc_lock); | 876 | spin_unlock_irq(&rtc_lock); |
875 | } | 877 | } |
diff --git a/drivers/rtc/rtc-tps6586x.c b/drivers/rtc/rtc-tps6586x.c index 459c2ffc95a6..426901cef14f 100644 --- a/drivers/rtc/rtc-tps6586x.c +++ b/drivers/rtc/rtc-tps6586x.c | |||
@@ -273,6 +273,8 @@ static int tps6586x_rtc_probe(struct platform_device *pdev) | |||
273 | return ret; | 273 | return ret; |
274 | } | 274 | } |
275 | 275 | ||
276 | device_init_wakeup(&pdev->dev, 1); | ||
277 | |||
276 | platform_set_drvdata(pdev, rtc); | 278 | platform_set_drvdata(pdev, rtc); |
277 | rtc->rtc = devm_rtc_device_register(&pdev->dev, dev_name(&pdev->dev), | 279 | rtc->rtc = devm_rtc_device_register(&pdev->dev, dev_name(&pdev->dev), |
278 | &tps6586x_rtc_ops, THIS_MODULE); | 280 | &tps6586x_rtc_ops, THIS_MODULE); |
@@ -292,7 +294,6 @@ static int tps6586x_rtc_probe(struct platform_device *pdev) | |||
292 | goto fail_rtc_register; | 294 | goto fail_rtc_register; |
293 | } | 295 | } |
294 | disable_irq(rtc->irq); | 296 | disable_irq(rtc->irq); |
295 | device_set_wakeup_capable(&pdev->dev, 1); | ||
296 | return 0; | 297 | return 0; |
297 | 298 | ||
298 | fail_rtc_register: | 299 | fail_rtc_register: |
diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c index 8751a5240c99..b2eab34f38d9 100644 --- a/drivers/rtc/rtc-twl.c +++ b/drivers/rtc/rtc-twl.c | |||
@@ -524,6 +524,7 @@ static int twl_rtc_probe(struct platform_device *pdev) | |||
524 | } | 524 | } |
525 | 525 | ||
526 | platform_set_drvdata(pdev, rtc); | 526 | platform_set_drvdata(pdev, rtc); |
527 | device_init_wakeup(&pdev->dev, 1); | ||
527 | return 0; | 528 | return 0; |
528 | 529 | ||
529 | out2: | 530 | out2: |
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c index 4ffa66c87ea5..9ca3996f65b2 100644 --- a/drivers/s390/net/netiucv.c +++ b/drivers/s390/net/netiucv.c | |||
@@ -2040,6 +2040,7 @@ static struct net_device *netiucv_init_netdevice(char *username, char *userdata) | |||
2040 | netiucv_setup_netdevice); | 2040 | netiucv_setup_netdevice); |
2041 | if (!dev) | 2041 | if (!dev) |
2042 | return NULL; | 2042 | return NULL; |
2043 | rtnl_lock(); | ||
2043 | if (dev_alloc_name(dev, dev->name) < 0) | 2044 | if (dev_alloc_name(dev, dev->name) < 0) |
2044 | goto out_netdev; | 2045 | goto out_netdev; |
2045 | 2046 | ||
@@ -2061,6 +2062,7 @@ static struct net_device *netiucv_init_netdevice(char *username, char *userdata) | |||
2061 | out_fsm: | 2062 | out_fsm: |
2062 | kfree_fsm(privptr->fsm); | 2063 | kfree_fsm(privptr->fsm); |
2063 | out_netdev: | 2064 | out_netdev: |
2065 | rtnl_unlock(); | ||
2064 | free_netdev(dev); | 2066 | free_netdev(dev); |
2065 | return NULL; | 2067 | return NULL; |
2066 | } | 2068 | } |
@@ -2100,6 +2102,7 @@ static ssize_t conn_write(struct device_driver *drv, | |||
2100 | 2102 | ||
2101 | rc = netiucv_register_device(dev); | 2103 | rc = netiucv_register_device(dev); |
2102 | if (rc) { | 2104 | if (rc) { |
2105 | rtnl_unlock(); | ||
2103 | IUCV_DBF_TEXT_(setup, 2, | 2106 | IUCV_DBF_TEXT_(setup, 2, |
2104 | "ret %d from netiucv_register_device\n", rc); | 2107 | "ret %d from netiucv_register_device\n", rc); |
2105 | goto out_free_ndev; | 2108 | goto out_free_ndev; |
@@ -2109,7 +2112,8 @@ static ssize_t conn_write(struct device_driver *drv, | |||
2109 | priv = netdev_priv(dev); | 2112 | priv = netdev_priv(dev); |
2110 | SET_NETDEV_DEV(dev, priv->dev); | 2113 | SET_NETDEV_DEV(dev, priv->dev); |
2111 | 2114 | ||
2112 | rc = register_netdev(dev); | 2115 | rc = register_netdevice(dev); |
2116 | rtnl_unlock(); | ||
2113 | if (rc) | 2117 | if (rc) |
2114 | goto out_unreg; | 2118 | goto out_unreg; |
2115 | 2119 | ||
diff --git a/drivers/spi/spi-sh-hspi.c b/drivers/spi/spi-sh-hspi.c index 60cfae51c713..eab593eaaafa 100644 --- a/drivers/spi/spi-sh-hspi.c +++ b/drivers/spi/spi-sh-hspi.c | |||
@@ -89,7 +89,7 @@ static int hspi_status_check_timeout(struct hspi_priv *hspi, u32 mask, u32 val) | |||
89 | if ((mask & hspi_read(hspi, SPSR)) == val) | 89 | if ((mask & hspi_read(hspi, SPSR)) == val) |
90 | return 0; | 90 | return 0; |
91 | 91 | ||
92 | msleep(20); | 92 | udelay(10); |
93 | } | 93 | } |
94 | 94 | ||
95 | dev_err(hspi->dev, "timeout\n"); | 95 | dev_err(hspi->dev, "timeout\n"); |
diff --git a/drivers/spi/spi-topcliff-pch.c b/drivers/spi/spi-topcliff-pch.c index 35f60bd252dd..637d728fbeb5 100644 --- a/drivers/spi/spi-topcliff-pch.c +++ b/drivers/spi/spi-topcliff-pch.c | |||
@@ -1487,7 +1487,7 @@ static int pch_spi_pd_probe(struct platform_device *plat_dev) | |||
1487 | return 0; | 1487 | return 0; |
1488 | 1488 | ||
1489 | err_spi_register_master: | 1489 | err_spi_register_master: |
1490 | free_irq(board_dat->pdev->irq, board_dat); | 1490 | free_irq(board_dat->pdev->irq, data); |
1491 | err_request_irq: | 1491 | err_request_irq: |
1492 | pch_spi_free_resources(board_dat, data); | 1492 | pch_spi_free_resources(board_dat, data); |
1493 | err_spi_get_resources: | 1493 | err_spi_get_resources: |
@@ -1667,6 +1667,7 @@ static int pch_spi_probe(struct pci_dev *pdev, | |||
1667 | pd_dev = platform_device_alloc("pch-spi", i); | 1667 | pd_dev = platform_device_alloc("pch-spi", i); |
1668 | if (!pd_dev) { | 1668 | if (!pd_dev) { |
1669 | dev_err(&pdev->dev, "platform_device_alloc failed\n"); | 1669 | dev_err(&pdev->dev, "platform_device_alloc failed\n"); |
1670 | retval = -ENOMEM; | ||
1670 | goto err_platform_device; | 1671 | goto err_platform_device; |
1671 | } | 1672 | } |
1672 | pd_dev_save->pd_save[i] = pd_dev; | 1673 | pd_dev_save->pd_save[i] = pd_dev; |
diff --git a/drivers/spi/spi-xilinx.c b/drivers/spi/spi-xilinx.c index e1d769607425..34d18dcfa0db 100644 --- a/drivers/spi/spi-xilinx.c +++ b/drivers/spi/spi-xilinx.c | |||
@@ -267,7 +267,6 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) | |||
267 | { | 267 | { |
268 | struct xilinx_spi *xspi = spi_master_get_devdata(spi->master); | 268 | struct xilinx_spi *xspi = spi_master_get_devdata(spi->master); |
269 | u32 ipif_ier; | 269 | u32 ipif_ier; |
270 | u16 cr; | ||
271 | 270 | ||
272 | /* We get here with transmitter inhibited */ | 271 | /* We get here with transmitter inhibited */ |
273 | 272 | ||
@@ -276,7 +275,6 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) | |||
276 | xspi->remaining_bytes = t->len; | 275 | xspi->remaining_bytes = t->len; |
277 | INIT_COMPLETION(xspi->done); | 276 | INIT_COMPLETION(xspi->done); |
278 | 277 | ||
279 | xilinx_spi_fill_tx_fifo(xspi); | ||
280 | 278 | ||
281 | /* Enable the transmit empty interrupt, which we use to determine | 279 | /* Enable the transmit empty interrupt, which we use to determine |
282 | * progress on the transmission. | 280 | * progress on the transmission. |
@@ -285,12 +283,41 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) | |||
285 | xspi->write_fn(ipif_ier | XSPI_INTR_TX_EMPTY, | 283 | xspi->write_fn(ipif_ier | XSPI_INTR_TX_EMPTY, |
286 | xspi->regs + XIPIF_V123B_IIER_OFFSET); | 284 | xspi->regs + XIPIF_V123B_IIER_OFFSET); |
287 | 285 | ||
288 | /* Start the transfer by not inhibiting the transmitter any longer */ | 286 | for (;;) { |
289 | cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET) & | 287 | u16 cr; |
290 | ~XSPI_CR_TRANS_INHIBIT; | 288 | u8 sr; |
291 | xspi->write_fn(cr, xspi->regs + XSPI_CR_OFFSET); | 289 | |
290 | xilinx_spi_fill_tx_fifo(xspi); | ||
291 | |||
292 | /* Start the transfer by not inhibiting the transmitter any | ||
293 | * longer | ||
294 | */ | ||
295 | cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET) & | ||
296 | ~XSPI_CR_TRANS_INHIBIT; | ||
297 | xspi->write_fn(cr, xspi->regs + XSPI_CR_OFFSET); | ||
298 | |||
299 | wait_for_completion(&xspi->done); | ||
300 | |||
301 | /* A transmit has just completed. Process received data and | ||
302 | * check for more data to transmit. Always inhibit the | ||
303 | * transmitter while the Isr refills the transmit register/FIFO, | ||
304 | * or make sure it is stopped if we're done. | ||
305 | */ | ||
306 | cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET); | ||
307 | xspi->write_fn(cr | XSPI_CR_TRANS_INHIBIT, | ||
308 | xspi->regs + XSPI_CR_OFFSET); | ||
309 | |||
310 | /* Read out all the data from the Rx FIFO */ | ||
311 | sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); | ||
312 | while ((sr & XSPI_SR_RX_EMPTY_MASK) == 0) { | ||
313 | xspi->rx_fn(xspi); | ||
314 | sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); | ||
315 | } | ||
292 | 316 | ||
293 | wait_for_completion(&xspi->done); | 317 | /* See if there is more data to send */ |
318 | if (!xspi->remaining_bytes > 0) | ||
319 | break; | ||
320 | } | ||
294 | 321 | ||
295 | /* Disable the transmit empty interrupt */ | 322 | /* Disable the transmit empty interrupt */ |
296 | xspi->write_fn(ipif_ier, xspi->regs + XIPIF_V123B_IIER_OFFSET); | 323 | xspi->write_fn(ipif_ier, xspi->regs + XIPIF_V123B_IIER_OFFSET); |
@@ -314,38 +341,7 @@ static irqreturn_t xilinx_spi_irq(int irq, void *dev_id) | |||
314 | xspi->write_fn(ipif_isr, xspi->regs + XIPIF_V123B_IISR_OFFSET); | 341 | xspi->write_fn(ipif_isr, xspi->regs + XIPIF_V123B_IISR_OFFSET); |
315 | 342 | ||
316 | if (ipif_isr & XSPI_INTR_TX_EMPTY) { /* Transmission completed */ | 343 | if (ipif_isr & XSPI_INTR_TX_EMPTY) { /* Transmission completed */ |
317 | u16 cr; | 344 | complete(&xspi->done); |
318 | u8 sr; | ||
319 | |||
320 | /* A transmit has just completed. Process received data and | ||
321 | * check for more data to transmit. Always inhibit the | ||
322 | * transmitter while the Isr refills the transmit register/FIFO, | ||
323 | * or make sure it is stopped if we're done. | ||
324 | */ | ||
325 | cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET); | ||
326 | xspi->write_fn(cr | XSPI_CR_TRANS_INHIBIT, | ||
327 | xspi->regs + XSPI_CR_OFFSET); | ||
328 | |||
329 | /* Read out all the data from the Rx FIFO */ | ||
330 | sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); | ||
331 | while ((sr & XSPI_SR_RX_EMPTY_MASK) == 0) { | ||
332 | xspi->rx_fn(xspi); | ||
333 | sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); | ||
334 | } | ||
335 | |||
336 | /* See if there is more data to send */ | ||
337 | if (xspi->remaining_bytes > 0) { | ||
338 | xilinx_spi_fill_tx_fifo(xspi); | ||
339 | /* Start the transfer by not inhibiting the | ||
340 | * transmitter any longer | ||
341 | */ | ||
342 | xspi->write_fn(cr, xspi->regs + XSPI_CR_OFFSET); | ||
343 | } else { | ||
344 | /* No more data to send. | ||
345 | * Indicate the transfer is completed. | ||
346 | */ | ||
347 | complete(&xspi->done); | ||
348 | } | ||
349 | } | 345 | } |
350 | 346 | ||
351 | return IRQ_HANDLED; | 347 | return IRQ_HANDLED; |
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c index 49b098bedf9b..475c9c114689 100644 --- a/drivers/usb/chipidea/core.c +++ b/drivers/usb/chipidea/core.c | |||
@@ -276,8 +276,9 @@ static void ci_role_work(struct work_struct *work) | |||
276 | 276 | ||
277 | ci_role_stop(ci); | 277 | ci_role_stop(ci); |
278 | ci_role_start(ci, role); | 278 | ci_role_start(ci, role); |
279 | enable_irq(ci->irq); | ||
280 | } | 279 | } |
280 | |||
281 | enable_irq(ci->irq); | ||
281 | } | 282 | } |
282 | 283 | ||
283 | static irqreturn_t ci_irq(int irq, void *data) | 284 | static irqreturn_t ci_irq(int irq, void *data) |
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index 519ead2443c5..b501346484ae 100644 --- a/drivers/usb/chipidea/udc.c +++ b/drivers/usb/chipidea/udc.c | |||
@@ -1678,8 +1678,11 @@ static int udc_start(struct ci13xxx *ci) | |||
1678 | 1678 | ||
1679 | ci->gadget.ep0 = &ci->ep0in->ep; | 1679 | ci->gadget.ep0 = &ci->ep0in->ep; |
1680 | 1680 | ||
1681 | if (ci->global_phy) | 1681 | if (ci->global_phy) { |
1682 | ci->transceiver = usb_get_phy(USB_PHY_TYPE_USB2); | 1682 | ci->transceiver = usb_get_phy(USB_PHY_TYPE_USB2); |
1683 | if (IS_ERR(ci->transceiver)) | ||
1684 | ci->transceiver = NULL; | ||
1685 | } | ||
1683 | 1686 | ||
1684 | if (ci->platdata->flags & CI13XXX_REQUIRE_TRANSCEIVER) { | 1687 | if (ci->platdata->flags & CI13XXX_REQUIRE_TRANSCEIVER) { |
1685 | if (ci->transceiver == NULL) { | 1688 | if (ci->transceiver == NULL) { |
@@ -1694,7 +1697,7 @@ static int udc_start(struct ci13xxx *ci) | |||
1694 | goto put_transceiver; | 1697 | goto put_transceiver; |
1695 | } | 1698 | } |
1696 | 1699 | ||
1697 | if (!IS_ERR_OR_NULL(ci->transceiver)) { | 1700 | if (ci->transceiver) { |
1698 | retval = otg_set_peripheral(ci->transceiver->otg, | 1701 | retval = otg_set_peripheral(ci->transceiver->otg, |
1699 | &ci->gadget); | 1702 | &ci->gadget); |
1700 | if (retval) | 1703 | if (retval) |
@@ -1711,7 +1714,7 @@ static int udc_start(struct ci13xxx *ci) | |||
1711 | return retval; | 1714 | return retval; |
1712 | 1715 | ||
1713 | remove_trans: | 1716 | remove_trans: |
1714 | if (!IS_ERR_OR_NULL(ci->transceiver)) { | 1717 | if (ci->transceiver) { |
1715 | otg_set_peripheral(ci->transceiver->otg, NULL); | 1718 | otg_set_peripheral(ci->transceiver->otg, NULL); |
1716 | if (ci->global_phy) | 1719 | if (ci->global_phy) |
1717 | usb_put_phy(ci->transceiver); | 1720 | usb_put_phy(ci->transceiver); |
@@ -1719,7 +1722,7 @@ remove_trans: | |||
1719 | 1722 | ||
1720 | dev_err(dev, "error = %i\n", retval); | 1723 | dev_err(dev, "error = %i\n", retval); |
1721 | put_transceiver: | 1724 | put_transceiver: |
1722 | if (!IS_ERR_OR_NULL(ci->transceiver) && ci->global_phy) | 1725 | if (ci->transceiver && ci->global_phy) |
1723 | usb_put_phy(ci->transceiver); | 1726 | usb_put_phy(ci->transceiver); |
1724 | destroy_eps: | 1727 | destroy_eps: |
1725 | destroy_eps(ci); | 1728 | destroy_eps(ci); |
@@ -1747,7 +1750,7 @@ static void udc_stop(struct ci13xxx *ci) | |||
1747 | dma_pool_destroy(ci->td_pool); | 1750 | dma_pool_destroy(ci->td_pool); |
1748 | dma_pool_destroy(ci->qh_pool); | 1751 | dma_pool_destroy(ci->qh_pool); |
1749 | 1752 | ||
1750 | if (!IS_ERR_OR_NULL(ci->transceiver)) { | 1753 | if (ci->transceiver) { |
1751 | otg_set_peripheral(ci->transceiver->otg, NULL); | 1754 | otg_set_peripheral(ci->transceiver->otg, NULL); |
1752 | if (ci->global_phy) | 1755 | if (ci->global_phy) |
1753 | usb_put_phy(ci->transceiver); | 1756 | usb_put_phy(ci->transceiver); |
diff --git a/drivers/usb/serial/f81232.c b/drivers/usb/serial/f81232.c index 090b411d893f..7d8dd5aad236 100644 --- a/drivers/usb/serial/f81232.c +++ b/drivers/usb/serial/f81232.c | |||
@@ -165,11 +165,12 @@ static void f81232_set_termios(struct tty_struct *tty, | |||
165 | /* FIXME - Stubbed out for now */ | 165 | /* FIXME - Stubbed out for now */ |
166 | 166 | ||
167 | /* Don't change anything if nothing has changed */ | 167 | /* Don't change anything if nothing has changed */ |
168 | if (!tty_termios_hw_change(&tty->termios, old_termios)) | 168 | if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) |
169 | return; | 169 | return; |
170 | 170 | ||
171 | /* Do the real work here... */ | 171 | /* Do the real work here... */ |
172 | tty_termios_copy_hw(&tty->termios, old_termios); | 172 | if (old_termios) |
173 | tty_termios_copy_hw(&tty->termios, old_termios); | ||
173 | } | 174 | } |
174 | 175 | ||
175 | static int f81232_tiocmget(struct tty_struct *tty) | 176 | static int f81232_tiocmget(struct tty_struct *tty) |
@@ -187,12 +188,11 @@ static int f81232_tiocmset(struct tty_struct *tty, | |||
187 | 188 | ||
188 | static int f81232_open(struct tty_struct *tty, struct usb_serial_port *port) | 189 | static int f81232_open(struct tty_struct *tty, struct usb_serial_port *port) |
189 | { | 190 | { |
190 | struct ktermios tmp_termios; | ||
191 | int result; | 191 | int result; |
192 | 192 | ||
193 | /* Setup termios */ | 193 | /* Setup termios */ |
194 | if (tty) | 194 | if (tty) |
195 | f81232_set_termios(tty, port, &tmp_termios); | 195 | f81232_set_termios(tty, port, NULL); |
196 | 196 | ||
197 | result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); | 197 | result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); |
198 | if (result) { | 198 | if (result) { |
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 7151659367a0..048cd44d51b1 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
@@ -284,7 +284,7 @@ static void pl2303_set_termios(struct tty_struct *tty, | |||
284 | serial settings even to the same values as before. Thus | 284 | serial settings even to the same values as before. Thus |
285 | we actually need to filter in this specific case */ | 285 | we actually need to filter in this specific case */ |
286 | 286 | ||
287 | if (!tty_termios_hw_change(&tty->termios, old_termios)) | 287 | if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) |
288 | return; | 288 | return; |
289 | 289 | ||
290 | cflag = tty->termios.c_cflag; | 290 | cflag = tty->termios.c_cflag; |
@@ -293,7 +293,8 @@ static void pl2303_set_termios(struct tty_struct *tty, | |||
293 | if (!buf) { | 293 | if (!buf) { |
294 | dev_err(&port->dev, "%s - out of memory.\n", __func__); | 294 | dev_err(&port->dev, "%s - out of memory.\n", __func__); |
295 | /* Report back no change occurred */ | 295 | /* Report back no change occurred */ |
296 | tty->termios = *old_termios; | 296 | if (old_termios) |
297 | tty->termios = *old_termios; | ||
297 | return; | 298 | return; |
298 | } | 299 | } |
299 | 300 | ||
@@ -433,7 +434,7 @@ static void pl2303_set_termios(struct tty_struct *tty, | |||
433 | control = priv->line_control; | 434 | control = priv->line_control; |
434 | if ((cflag & CBAUD) == B0) | 435 | if ((cflag & CBAUD) == B0) |
435 | priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS); | 436 | priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS); |
436 | else if ((old_termios->c_cflag & CBAUD) == B0) | 437 | else if (old_termios && (old_termios->c_cflag & CBAUD) == B0) |
437 | priv->line_control |= (CONTROL_DTR | CONTROL_RTS); | 438 | priv->line_control |= (CONTROL_DTR | CONTROL_RTS); |
438 | if (control != priv->line_control) { | 439 | if (control != priv->line_control) { |
439 | control = priv->line_control; | 440 | control = priv->line_control; |
@@ -492,7 +493,6 @@ static void pl2303_close(struct usb_serial_port *port) | |||
492 | 493 | ||
493 | static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port) | 494 | static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port) |
494 | { | 495 | { |
495 | struct ktermios tmp_termios; | ||
496 | struct usb_serial *serial = port->serial; | 496 | struct usb_serial *serial = port->serial; |
497 | struct pl2303_serial_private *spriv = usb_get_serial_data(serial); | 497 | struct pl2303_serial_private *spriv = usb_get_serial_data(serial); |
498 | int result; | 498 | int result; |
@@ -508,7 +508,7 @@ static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
508 | 508 | ||
509 | /* Setup termios */ | 509 | /* Setup termios */ |
510 | if (tty) | 510 | if (tty) |
511 | pl2303_set_termios(tty, port, &tmp_termios); | 511 | pl2303_set_termios(tty, port, NULL); |
512 | 512 | ||
513 | result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); | 513 | result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); |
514 | if (result) { | 514 | if (result) { |
diff --git a/drivers/usb/serial/spcp8x5.c b/drivers/usb/serial/spcp8x5.c index cf3df793c2b7..ddf6c47137dc 100644 --- a/drivers/usb/serial/spcp8x5.c +++ b/drivers/usb/serial/spcp8x5.c | |||
@@ -291,7 +291,6 @@ static void spcp8x5_set_termios(struct tty_struct *tty, | |||
291 | struct spcp8x5_private *priv = usb_get_serial_port_data(port); | 291 | struct spcp8x5_private *priv = usb_get_serial_port_data(port); |
292 | unsigned long flags; | 292 | unsigned long flags; |
293 | unsigned int cflag = tty->termios.c_cflag; | 293 | unsigned int cflag = tty->termios.c_cflag; |
294 | unsigned int old_cflag = old_termios->c_cflag; | ||
295 | unsigned short uartdata; | 294 | unsigned short uartdata; |
296 | unsigned char buf[2] = {0, 0}; | 295 | unsigned char buf[2] = {0, 0}; |
297 | int baud; | 296 | int baud; |
@@ -299,15 +298,15 @@ static void spcp8x5_set_termios(struct tty_struct *tty, | |||
299 | u8 control; | 298 | u8 control; |
300 | 299 | ||
301 | /* check that they really want us to change something */ | 300 | /* check that they really want us to change something */ |
302 | if (!tty_termios_hw_change(&tty->termios, old_termios)) | 301 | if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) |
303 | return; | 302 | return; |
304 | 303 | ||
305 | /* set DTR/RTS active */ | 304 | /* set DTR/RTS active */ |
306 | spin_lock_irqsave(&priv->lock, flags); | 305 | spin_lock_irqsave(&priv->lock, flags); |
307 | control = priv->line_control; | 306 | control = priv->line_control; |
308 | if ((old_cflag & CBAUD) == B0) { | 307 | if (old_termios && (old_termios->c_cflag & CBAUD) == B0) { |
309 | priv->line_control |= MCR_DTR; | 308 | priv->line_control |= MCR_DTR; |
310 | if (!(old_cflag & CRTSCTS)) | 309 | if (!(old_termios->c_cflag & CRTSCTS)) |
311 | priv->line_control |= MCR_RTS; | 310 | priv->line_control |= MCR_RTS; |
312 | } | 311 | } |
313 | if (control != priv->line_control) { | 312 | if (control != priv->line_control) { |
@@ -394,7 +393,6 @@ static void spcp8x5_set_termios(struct tty_struct *tty, | |||
394 | 393 | ||
395 | static int spcp8x5_open(struct tty_struct *tty, struct usb_serial_port *port) | 394 | static int spcp8x5_open(struct tty_struct *tty, struct usb_serial_port *port) |
396 | { | 395 | { |
397 | struct ktermios tmp_termios; | ||
398 | struct usb_serial *serial = port->serial; | 396 | struct usb_serial *serial = port->serial; |
399 | struct spcp8x5_private *priv = usb_get_serial_port_data(port); | 397 | struct spcp8x5_private *priv = usb_get_serial_port_data(port); |
400 | int ret; | 398 | int ret; |
@@ -411,7 +409,7 @@ static int spcp8x5_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
411 | spcp8x5_set_ctrl_line(port, priv->line_control); | 409 | spcp8x5_set_ctrl_line(port, priv->line_control); |
412 | 410 | ||
413 | if (tty) | 411 | if (tty) |
414 | spcp8x5_set_termios(tty, port, &tmp_termios); | 412 | spcp8x5_set_termios(tty, port, NULL); |
415 | 413 | ||
416 | port->port.drain_delay = 256; | 414 | port->port.drain_delay = 256; |
417 | 415 | ||
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index 2b51e2336aa2..f80d3dd41d8c 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c | |||
@@ -155,14 +155,11 @@ static void vhost_net_ubuf_put_and_wait(struct vhost_net_ubuf_ref *ubufs) | |||
155 | 155 | ||
156 | static void vhost_net_clear_ubuf_info(struct vhost_net *n) | 156 | static void vhost_net_clear_ubuf_info(struct vhost_net *n) |
157 | { | 157 | { |
158 | |||
159 | bool zcopy; | ||
160 | int i; | 158 | int i; |
161 | 159 | ||
162 | for (i = 0; i < n->dev.nvqs; ++i) { | 160 | for (i = 0; i < VHOST_NET_VQ_MAX; ++i) { |
163 | zcopy = vhost_net_zcopy_mask & (0x1 << i); | 161 | kfree(n->vqs[i].ubuf_info); |
164 | if (zcopy) | 162 | n->vqs[i].ubuf_info = NULL; |
165 | kfree(n->vqs[i].ubuf_info); | ||
166 | } | 163 | } |
167 | } | 164 | } |
168 | 165 | ||
@@ -171,7 +168,7 @@ int vhost_net_set_ubuf_info(struct vhost_net *n) | |||
171 | bool zcopy; | 168 | bool zcopy; |
172 | int i; | 169 | int i; |
173 | 170 | ||
174 | for (i = 0; i < n->dev.nvqs; ++i) { | 171 | for (i = 0; i < VHOST_NET_VQ_MAX; ++i) { |
175 | zcopy = vhost_net_zcopy_mask & (0x1 << i); | 172 | zcopy = vhost_net_zcopy_mask & (0x1 << i); |
176 | if (!zcopy) | 173 | if (!zcopy) |
177 | continue; | 174 | continue; |
@@ -183,12 +180,7 @@ int vhost_net_set_ubuf_info(struct vhost_net *n) | |||
183 | return 0; | 180 | return 0; |
184 | 181 | ||
185 | err: | 182 | err: |
186 | while (i--) { | 183 | vhost_net_clear_ubuf_info(n); |
187 | zcopy = vhost_net_zcopy_mask & (0x1 << i); | ||
188 | if (!zcopy) | ||
189 | continue; | ||
190 | kfree(n->vqs[i].ubuf_info); | ||
191 | } | ||
192 | return -ENOMEM; | 184 | return -ENOMEM; |
193 | } | 185 | } |
194 | 186 | ||
@@ -196,12 +188,12 @@ void vhost_net_vq_reset(struct vhost_net *n) | |||
196 | { | 188 | { |
197 | int i; | 189 | int i; |
198 | 190 | ||
191 | vhost_net_clear_ubuf_info(n); | ||
192 | |||
199 | for (i = 0; i < VHOST_NET_VQ_MAX; i++) { | 193 | for (i = 0; i < VHOST_NET_VQ_MAX; i++) { |
200 | n->vqs[i].done_idx = 0; | 194 | n->vqs[i].done_idx = 0; |
201 | n->vqs[i].upend_idx = 0; | 195 | n->vqs[i].upend_idx = 0; |
202 | n->vqs[i].ubufs = NULL; | 196 | n->vqs[i].ubufs = NULL; |
203 | kfree(n->vqs[i].ubuf_info); | ||
204 | n->vqs[i].ubuf_info = NULL; | ||
205 | n->vqs[i].vhost_hlen = 0; | 197 | n->vqs[i].vhost_hlen = 0; |
206 | n->vqs[i].sock_hlen = 0; | 198 | n->vqs[i].sock_hlen = 0; |
207 | } | 199 | } |
@@ -436,7 +428,8 @@ static void handle_tx(struct vhost_net *net) | |||
436 | kref_get(&ubufs->kref); | 428 | kref_get(&ubufs->kref); |
437 | } | 429 | } |
438 | nvq->upend_idx = (nvq->upend_idx + 1) % UIO_MAXIOV; | 430 | nvq->upend_idx = (nvq->upend_idx + 1) % UIO_MAXIOV; |
439 | } | 431 | } else |
432 | msg.msg_control = NULL; | ||
440 | /* TODO: Check specific error and bomb out unless ENOBUFS? */ | 433 | /* TODO: Check specific error and bomb out unless ENOBUFS? */ |
441 | err = sock->ops->sendmsg(NULL, sock, &msg, len); | 434 | err = sock->ops->sendmsg(NULL, sock, &msg, len); |
442 | if (unlikely(err < 0)) { | 435 | if (unlikely(err < 0)) { |
@@ -1053,6 +1046,10 @@ static long vhost_net_set_owner(struct vhost_net *n) | |||
1053 | int r; | 1046 | int r; |
1054 | 1047 | ||
1055 | mutex_lock(&n->dev.mutex); | 1048 | mutex_lock(&n->dev.mutex); |
1049 | if (vhost_dev_has_owner(&n->dev)) { | ||
1050 | r = -EBUSY; | ||
1051 | goto out; | ||
1052 | } | ||
1056 | r = vhost_net_set_ubuf_info(n); | 1053 | r = vhost_net_set_ubuf_info(n); |
1057 | if (r) | 1054 | if (r) |
1058 | goto out; | 1055 | goto out; |
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index beee7f5787e6..60aa5ad09a2f 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c | |||
@@ -344,13 +344,19 @@ static int vhost_attach_cgroups(struct vhost_dev *dev) | |||
344 | } | 344 | } |
345 | 345 | ||
346 | /* Caller should have device mutex */ | 346 | /* Caller should have device mutex */ |
347 | bool vhost_dev_has_owner(struct vhost_dev *dev) | ||
348 | { | ||
349 | return dev->mm; | ||
350 | } | ||
351 | |||
352 | /* Caller should have device mutex */ | ||
347 | long vhost_dev_set_owner(struct vhost_dev *dev) | 353 | long vhost_dev_set_owner(struct vhost_dev *dev) |
348 | { | 354 | { |
349 | struct task_struct *worker; | 355 | struct task_struct *worker; |
350 | int err; | 356 | int err; |
351 | 357 | ||
352 | /* Is there an owner already? */ | 358 | /* Is there an owner already? */ |
353 | if (dev->mm) { | 359 | if (vhost_dev_has_owner(dev)) { |
354 | err = -EBUSY; | 360 | err = -EBUSY; |
355 | goto err_mm; | 361 | goto err_mm; |
356 | } | 362 | } |
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h index a7ad63592987..64adcf99ff33 100644 --- a/drivers/vhost/vhost.h +++ b/drivers/vhost/vhost.h | |||
@@ -133,6 +133,7 @@ struct vhost_dev { | |||
133 | 133 | ||
134 | long vhost_dev_init(struct vhost_dev *, struct vhost_virtqueue **vqs, int nvqs); | 134 | long vhost_dev_init(struct vhost_dev *, struct vhost_virtqueue **vqs, int nvqs); |
135 | long vhost_dev_set_owner(struct vhost_dev *dev); | 135 | long vhost_dev_set_owner(struct vhost_dev *dev); |
136 | bool vhost_dev_has_owner(struct vhost_dev *dev); | ||
136 | long vhost_dev_check_owner(struct vhost_dev *); | 137 | long vhost_dev_check_owner(struct vhost_dev *); |
137 | struct vhost_memory *vhost_dev_reset_owner_prepare(void); | 138 | struct vhost_memory *vhost_dev_reset_owner_prepare(void); |
138 | void vhost_dev_reset_owner(struct vhost_dev *, struct vhost_memory *); | 139 | void vhost_dev_reset_owner(struct vhost_dev *, struct vhost_memory *); |
diff --git a/drivers/xen/tmem.c b/drivers/xen/tmem.c index cc072c66c766..0f0493c63371 100644 --- a/drivers/xen/tmem.c +++ b/drivers/xen/tmem.c | |||
@@ -379,10 +379,10 @@ static int xen_tmem_init(void) | |||
379 | #ifdef CONFIG_FRONTSWAP | 379 | #ifdef CONFIG_FRONTSWAP |
380 | if (tmem_enabled && frontswap) { | 380 | if (tmem_enabled && frontswap) { |
381 | char *s = ""; | 381 | char *s = ""; |
382 | struct frontswap_ops *old_ops = | 382 | struct frontswap_ops *old_ops; |
383 | frontswap_register_ops(&tmem_frontswap_ops); | ||
384 | 383 | ||
385 | tmem_frontswap_poolid = -1; | 384 | tmem_frontswap_poolid = -1; |
385 | old_ops = frontswap_register_ops(&tmem_frontswap_ops); | ||
386 | if (IS_ERR(old_ops) || old_ops) { | 386 | if (IS_ERR(old_ops) || old_ops) { |
387 | if (IS_ERR(old_ops)) | 387 | if (IS_ERR(old_ops)) |
388 | return PTR_ERR(old_ops); | 388 | return PTR_ERR(old_ops); |
@@ -141,9 +141,6 @@ static void aio_free_ring(struct kioctx *ctx) | |||
141 | for (i = 0; i < ctx->nr_pages; i++) | 141 | for (i = 0; i < ctx->nr_pages; i++) |
142 | put_page(ctx->ring_pages[i]); | 142 | put_page(ctx->ring_pages[i]); |
143 | 143 | ||
144 | if (ctx->mmap_size) | ||
145 | vm_munmap(ctx->mmap_base, ctx->mmap_size); | ||
146 | |||
147 | if (ctx->ring_pages && ctx->ring_pages != ctx->internal_pages) | 144 | if (ctx->ring_pages && ctx->ring_pages != ctx->internal_pages) |
148 | kfree(ctx->ring_pages); | 145 | kfree(ctx->ring_pages); |
149 | } | 146 | } |
@@ -322,11 +319,6 @@ static void free_ioctx(struct kioctx *ctx) | |||
322 | 319 | ||
323 | aio_free_ring(ctx); | 320 | aio_free_ring(ctx); |
324 | 321 | ||
325 | spin_lock(&aio_nr_lock); | ||
326 | BUG_ON(aio_nr - ctx->max_reqs > aio_nr); | ||
327 | aio_nr -= ctx->max_reqs; | ||
328 | spin_unlock(&aio_nr_lock); | ||
329 | |||
330 | pr_debug("freeing %p\n", ctx); | 322 | pr_debug("freeing %p\n", ctx); |
331 | 323 | ||
332 | /* | 324 | /* |
@@ -435,17 +427,24 @@ static void kill_ioctx(struct kioctx *ctx) | |||
435 | { | 427 | { |
436 | if (!atomic_xchg(&ctx->dead, 1)) { | 428 | if (!atomic_xchg(&ctx->dead, 1)) { |
437 | hlist_del_rcu(&ctx->list); | 429 | hlist_del_rcu(&ctx->list); |
438 | /* Between hlist_del_rcu() and dropping the initial ref */ | ||
439 | synchronize_rcu(); | ||
440 | 430 | ||
441 | /* | 431 | /* |
442 | * We can't punt to workqueue here because put_ioctx() -> | 432 | * It'd be more correct to do this in free_ioctx(), after all |
443 | * free_ioctx() will unmap the ringbuffer, and that has to be | 433 | * the outstanding kiocbs have finished - but by then io_destroy |
444 | * done in the original process's context. kill_ioctx_rcu/work() | 434 | * has already returned, so io_setup() could potentially return |
445 | * exist for exit_aio(), as in that path free_ioctx() won't do | 435 | * -EAGAIN with no ioctxs actually in use (as far as userspace |
446 | * the unmap. | 436 | * could tell). |
447 | */ | 437 | */ |
448 | kill_ioctx_work(&ctx->rcu_work); | 438 | spin_lock(&aio_nr_lock); |
439 | BUG_ON(aio_nr - ctx->max_reqs > aio_nr); | ||
440 | aio_nr -= ctx->max_reqs; | ||
441 | spin_unlock(&aio_nr_lock); | ||
442 | |||
443 | if (ctx->mmap_size) | ||
444 | vm_munmap(ctx->mmap_base, ctx->mmap_size); | ||
445 | |||
446 | /* Between hlist_del_rcu() and dropping the initial ref */ | ||
447 | call_rcu(&ctx->rcu_head, kill_ioctx_rcu); | ||
449 | } | 448 | } |
450 | } | 449 | } |
451 | 450 | ||
@@ -495,10 +494,7 @@ void exit_aio(struct mm_struct *mm) | |||
495 | */ | 494 | */ |
496 | ctx->mmap_size = 0; | 495 | ctx->mmap_size = 0; |
497 | 496 | ||
498 | if (!atomic_xchg(&ctx->dead, 1)) { | 497 | kill_ioctx(ctx); |
499 | hlist_del_rcu(&ctx->list); | ||
500 | call_rcu(&ctx->rcu_head, kill_ioctx_rcu); | ||
501 | } | ||
502 | } | 498 | } |
503 | } | 499 | } |
504 | 500 | ||
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index e7b3cb5286a5..b8b60b660c8f 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -2859,8 +2859,8 @@ fail_qgroup: | |||
2859 | btrfs_free_qgroup_config(fs_info); | 2859 | btrfs_free_qgroup_config(fs_info); |
2860 | fail_trans_kthread: | 2860 | fail_trans_kthread: |
2861 | kthread_stop(fs_info->transaction_kthread); | 2861 | kthread_stop(fs_info->transaction_kthread); |
2862 | del_fs_roots(fs_info); | ||
2863 | btrfs_cleanup_transaction(fs_info->tree_root); | 2862 | btrfs_cleanup_transaction(fs_info->tree_root); |
2863 | del_fs_roots(fs_info); | ||
2864 | fail_cleaner: | 2864 | fail_cleaner: |
2865 | kthread_stop(fs_info->cleaner_kthread); | 2865 | kthread_stop(fs_info->cleaner_kthread); |
2866 | 2866 | ||
@@ -3512,15 +3512,15 @@ int close_ctree(struct btrfs_root *root) | |||
3512 | percpu_counter_sum(&fs_info->delalloc_bytes)); | 3512 | percpu_counter_sum(&fs_info->delalloc_bytes)); |
3513 | } | 3513 | } |
3514 | 3514 | ||
3515 | free_root_pointers(fs_info, 1); | ||
3516 | |||
3517 | btrfs_free_block_groups(fs_info); | 3515 | btrfs_free_block_groups(fs_info); |
3518 | 3516 | ||
3517 | btrfs_stop_all_workers(fs_info); | ||
3518 | |||
3519 | del_fs_roots(fs_info); | 3519 | del_fs_roots(fs_info); |
3520 | 3520 | ||
3521 | iput(fs_info->btree_inode); | 3521 | free_root_pointers(fs_info, 1); |
3522 | 3522 | ||
3523 | btrfs_stop_all_workers(fs_info); | 3523 | iput(fs_info->btree_inode); |
3524 | 3524 | ||
3525 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY | 3525 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY |
3526 | if (btrfs_test_opt(root, CHECK_INTEGRITY)) | 3526 | if (btrfs_test_opt(root, CHECK_INTEGRITY)) |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index af978f7682b3..17f3064b4a3e 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -8012,6 +8012,9 @@ int btrfs_drop_inode(struct inode *inode) | |||
8012 | { | 8012 | { |
8013 | struct btrfs_root *root = BTRFS_I(inode)->root; | 8013 | struct btrfs_root *root = BTRFS_I(inode)->root; |
8014 | 8014 | ||
8015 | if (root == NULL) | ||
8016 | return 1; | ||
8017 | |||
8015 | /* the snap/subvol tree is on deleting */ | 8018 | /* the snap/subvol tree is on deleting */ |
8016 | if (btrfs_root_refs(&root->root_item) == 0 && | 8019 | if (btrfs_root_refs(&root->root_item) == 0 && |
8017 | root != root->fs_info->tree_root) | 8020 | root != root->fs_info->tree_root) |
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 395b82031a42..4febca4fc2de 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c | |||
@@ -4082,7 +4082,7 @@ out: | |||
4082 | return inode; | 4082 | return inode; |
4083 | } | 4083 | } |
4084 | 4084 | ||
4085 | static struct reloc_control *alloc_reloc_control(void) | 4085 | static struct reloc_control *alloc_reloc_control(struct btrfs_fs_info *fs_info) |
4086 | { | 4086 | { |
4087 | struct reloc_control *rc; | 4087 | struct reloc_control *rc; |
4088 | 4088 | ||
@@ -4093,7 +4093,8 @@ static struct reloc_control *alloc_reloc_control(void) | |||
4093 | INIT_LIST_HEAD(&rc->reloc_roots); | 4093 | INIT_LIST_HEAD(&rc->reloc_roots); |
4094 | backref_cache_init(&rc->backref_cache); | 4094 | backref_cache_init(&rc->backref_cache); |
4095 | mapping_tree_init(&rc->reloc_root_tree); | 4095 | mapping_tree_init(&rc->reloc_root_tree); |
4096 | extent_io_tree_init(&rc->processed_blocks, NULL); | 4096 | extent_io_tree_init(&rc->processed_blocks, |
4097 | fs_info->btree_inode->i_mapping); | ||
4097 | return rc; | 4098 | return rc; |
4098 | } | 4099 | } |
4099 | 4100 | ||
@@ -4110,7 +4111,7 @@ int btrfs_relocate_block_group(struct btrfs_root *extent_root, u64 group_start) | |||
4110 | int rw = 0; | 4111 | int rw = 0; |
4111 | int err = 0; | 4112 | int err = 0; |
4112 | 4113 | ||
4113 | rc = alloc_reloc_control(); | 4114 | rc = alloc_reloc_control(fs_info); |
4114 | if (!rc) | 4115 | if (!rc) |
4115 | return -ENOMEM; | 4116 | return -ENOMEM; |
4116 | 4117 | ||
@@ -4311,7 +4312,7 @@ int btrfs_recover_relocation(struct btrfs_root *root) | |||
4311 | if (list_empty(&reloc_roots)) | 4312 | if (list_empty(&reloc_roots)) |
4312 | goto out; | 4313 | goto out; |
4313 | 4314 | ||
4314 | rc = alloc_reloc_control(); | 4315 | rc = alloc_reloc_control(root->fs_info); |
4315 | if (!rc) { | 4316 | if (!rc) { |
4316 | err = -ENOMEM; | 4317 | err = -ENOMEM; |
4317 | goto out; | 4318 | goto out; |
diff --git a/fs/ceph/locks.c b/fs/ceph/locks.c index 202dd3d68be0..ebbf680378e2 100644 --- a/fs/ceph/locks.c +++ b/fs/ceph/locks.c | |||
@@ -191,27 +191,23 @@ void ceph_count_locks(struct inode *inode, int *fcntl_count, int *flock_count) | |||
191 | } | 191 | } |
192 | 192 | ||
193 | /** | 193 | /** |
194 | * Encode the flock and fcntl locks for the given inode into the pagelist. | 194 | * Encode the flock and fcntl locks for the given inode into the ceph_filelock |
195 | * Format is: #fcntl locks, sequential fcntl locks, #flock locks, | 195 | * array. Must be called with lock_flocks() already held. |
196 | * sequential flock locks. | 196 | * If we encounter more of a specific lock type than expected, return -ENOSPC. |
197 | * Must be called with lock_flocks() already held. | ||
198 | * If we encounter more of a specific lock type than expected, | ||
199 | * we return the value 1. | ||
200 | */ | 197 | */ |
201 | int ceph_encode_locks(struct inode *inode, struct ceph_pagelist *pagelist, | 198 | int ceph_encode_locks_to_buffer(struct inode *inode, |
202 | int num_fcntl_locks, int num_flock_locks) | 199 | struct ceph_filelock *flocks, |
200 | int num_fcntl_locks, int num_flock_locks) | ||
203 | { | 201 | { |
204 | struct file_lock *lock; | 202 | struct file_lock *lock; |
205 | struct ceph_filelock cephlock; | ||
206 | int err = 0; | 203 | int err = 0; |
207 | int seen_fcntl = 0; | 204 | int seen_fcntl = 0; |
208 | int seen_flock = 0; | 205 | int seen_flock = 0; |
206 | int l = 0; | ||
209 | 207 | ||
210 | dout("encoding %d flock and %d fcntl locks", num_flock_locks, | 208 | dout("encoding %d flock and %d fcntl locks", num_flock_locks, |
211 | num_fcntl_locks); | 209 | num_fcntl_locks); |
212 | err = ceph_pagelist_append(pagelist, &num_fcntl_locks, sizeof(u32)); | 210 | |
213 | if (err) | ||
214 | goto fail; | ||
215 | for (lock = inode->i_flock; lock != NULL; lock = lock->fl_next) { | 211 | for (lock = inode->i_flock; lock != NULL; lock = lock->fl_next) { |
216 | if (lock->fl_flags & FL_POSIX) { | 212 | if (lock->fl_flags & FL_POSIX) { |
217 | ++seen_fcntl; | 213 | ++seen_fcntl; |
@@ -219,19 +215,12 @@ int ceph_encode_locks(struct inode *inode, struct ceph_pagelist *pagelist, | |||
219 | err = -ENOSPC; | 215 | err = -ENOSPC; |
220 | goto fail; | 216 | goto fail; |
221 | } | 217 | } |
222 | err = lock_to_ceph_filelock(lock, &cephlock); | 218 | err = lock_to_ceph_filelock(lock, &flocks[l]); |
223 | if (err) | 219 | if (err) |
224 | goto fail; | 220 | goto fail; |
225 | err = ceph_pagelist_append(pagelist, &cephlock, | 221 | ++l; |
226 | sizeof(struct ceph_filelock)); | ||
227 | } | 222 | } |
228 | if (err) | ||
229 | goto fail; | ||
230 | } | 223 | } |
231 | |||
232 | err = ceph_pagelist_append(pagelist, &num_flock_locks, sizeof(u32)); | ||
233 | if (err) | ||
234 | goto fail; | ||
235 | for (lock = inode->i_flock; lock != NULL; lock = lock->fl_next) { | 224 | for (lock = inode->i_flock; lock != NULL; lock = lock->fl_next) { |
236 | if (lock->fl_flags & FL_FLOCK) { | 225 | if (lock->fl_flags & FL_FLOCK) { |
237 | ++seen_flock; | 226 | ++seen_flock; |
@@ -239,19 +228,51 @@ int ceph_encode_locks(struct inode *inode, struct ceph_pagelist *pagelist, | |||
239 | err = -ENOSPC; | 228 | err = -ENOSPC; |
240 | goto fail; | 229 | goto fail; |
241 | } | 230 | } |
242 | err = lock_to_ceph_filelock(lock, &cephlock); | 231 | err = lock_to_ceph_filelock(lock, &flocks[l]); |
243 | if (err) | 232 | if (err) |
244 | goto fail; | 233 | goto fail; |
245 | err = ceph_pagelist_append(pagelist, &cephlock, | 234 | ++l; |
246 | sizeof(struct ceph_filelock)); | ||
247 | } | 235 | } |
248 | if (err) | ||
249 | goto fail; | ||
250 | } | 236 | } |
251 | fail: | 237 | fail: |
252 | return err; | 238 | return err; |
253 | } | 239 | } |
254 | 240 | ||
241 | /** | ||
242 | * Copy the encoded flock and fcntl locks into the pagelist. | ||
243 | * Format is: #fcntl locks, sequential fcntl locks, #flock locks, | ||
244 | * sequential flock locks. | ||
245 | * Returns zero on success. | ||
246 | */ | ||
247 | int ceph_locks_to_pagelist(struct ceph_filelock *flocks, | ||
248 | struct ceph_pagelist *pagelist, | ||
249 | int num_fcntl_locks, int num_flock_locks) | ||
250 | { | ||
251 | int err = 0; | ||
252 | __le32 nlocks; | ||
253 | |||
254 | nlocks = cpu_to_le32(num_fcntl_locks); | ||
255 | err = ceph_pagelist_append(pagelist, &nlocks, sizeof(nlocks)); | ||
256 | if (err) | ||
257 | goto out_fail; | ||
258 | |||
259 | err = ceph_pagelist_append(pagelist, flocks, | ||
260 | num_fcntl_locks * sizeof(*flocks)); | ||
261 | if (err) | ||
262 | goto out_fail; | ||
263 | |||
264 | nlocks = cpu_to_le32(num_flock_locks); | ||
265 | err = ceph_pagelist_append(pagelist, &nlocks, sizeof(nlocks)); | ||
266 | if (err) | ||
267 | goto out_fail; | ||
268 | |||
269 | err = ceph_pagelist_append(pagelist, | ||
270 | &flocks[num_fcntl_locks], | ||
271 | num_flock_locks * sizeof(*flocks)); | ||
272 | out_fail: | ||
273 | return err; | ||
274 | } | ||
275 | |||
255 | /* | 276 | /* |
256 | * Given a pointer to a lock, convert it to a ceph filelock | 277 | * Given a pointer to a lock, convert it to a ceph filelock |
257 | */ | 278 | */ |
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index 4f22671a5bd4..4d2920304be8 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c | |||
@@ -2478,39 +2478,44 @@ static int encode_caps_cb(struct inode *inode, struct ceph_cap *cap, | |||
2478 | 2478 | ||
2479 | if (recon_state->flock) { | 2479 | if (recon_state->flock) { |
2480 | int num_fcntl_locks, num_flock_locks; | 2480 | int num_fcntl_locks, num_flock_locks; |
2481 | struct ceph_pagelist_cursor trunc_point; | 2481 | struct ceph_filelock *flocks; |
2482 | 2482 | ||
2483 | ceph_pagelist_set_cursor(pagelist, &trunc_point); | 2483 | encode_again: |
2484 | do { | 2484 | lock_flocks(); |
2485 | lock_flocks(); | 2485 | ceph_count_locks(inode, &num_fcntl_locks, &num_flock_locks); |
2486 | ceph_count_locks(inode, &num_fcntl_locks, | 2486 | unlock_flocks(); |
2487 | &num_flock_locks); | 2487 | flocks = kmalloc((num_fcntl_locks+num_flock_locks) * |
2488 | rec.v2.flock_len = (2*sizeof(u32) + | 2488 | sizeof(struct ceph_filelock), GFP_NOFS); |
2489 | (num_fcntl_locks+num_flock_locks) * | 2489 | if (!flocks) { |
2490 | sizeof(struct ceph_filelock)); | 2490 | err = -ENOMEM; |
2491 | unlock_flocks(); | 2491 | goto out_free; |
2492 | 2492 | } | |
2493 | /* pre-alloc pagelist */ | 2493 | lock_flocks(); |
2494 | ceph_pagelist_truncate(pagelist, &trunc_point); | 2494 | err = ceph_encode_locks_to_buffer(inode, flocks, |
2495 | err = ceph_pagelist_append(pagelist, &rec, reclen); | 2495 | num_fcntl_locks, |
2496 | if (!err) | 2496 | num_flock_locks); |
2497 | err = ceph_pagelist_reserve(pagelist, | 2497 | unlock_flocks(); |
2498 | rec.v2.flock_len); | 2498 | if (err) { |
2499 | 2499 | kfree(flocks); | |
2500 | /* encode locks */ | 2500 | if (err == -ENOSPC) |
2501 | if (!err) { | 2501 | goto encode_again; |
2502 | lock_flocks(); | 2502 | goto out_free; |
2503 | err = ceph_encode_locks(inode, | 2503 | } |
2504 | pagelist, | 2504 | /* |
2505 | num_fcntl_locks, | 2505 | * number of encoded locks is stable, so copy to pagelist |
2506 | num_flock_locks); | 2506 | */ |
2507 | unlock_flocks(); | 2507 | rec.v2.flock_len = cpu_to_le32(2*sizeof(u32) + |
2508 | } | 2508 | (num_fcntl_locks+num_flock_locks) * |
2509 | } while (err == -ENOSPC); | 2509 | sizeof(struct ceph_filelock)); |
2510 | err = ceph_pagelist_append(pagelist, &rec, reclen); | ||
2511 | if (!err) | ||
2512 | err = ceph_locks_to_pagelist(flocks, pagelist, | ||
2513 | num_fcntl_locks, | ||
2514 | num_flock_locks); | ||
2515 | kfree(flocks); | ||
2510 | } else { | 2516 | } else { |
2511 | err = ceph_pagelist_append(pagelist, &rec, reclen); | 2517 | err = ceph_pagelist_append(pagelist, &rec, reclen); |
2512 | } | 2518 | } |
2513 | |||
2514 | out_free: | 2519 | out_free: |
2515 | kfree(path); | 2520 | kfree(path); |
2516 | out_dput: | 2521 | out_dput: |
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index 8696be2ff679..7ccfdb4aea2e 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h | |||
@@ -822,8 +822,13 @@ extern const struct export_operations ceph_export_ops; | |||
822 | extern int ceph_lock(struct file *file, int cmd, struct file_lock *fl); | 822 | extern int ceph_lock(struct file *file, int cmd, struct file_lock *fl); |
823 | extern int ceph_flock(struct file *file, int cmd, struct file_lock *fl); | 823 | extern int ceph_flock(struct file *file, int cmd, struct file_lock *fl); |
824 | extern void ceph_count_locks(struct inode *inode, int *p_num, int *f_num); | 824 | extern void ceph_count_locks(struct inode *inode, int *p_num, int *f_num); |
825 | extern int ceph_encode_locks(struct inode *i, struct ceph_pagelist *p, | 825 | extern int ceph_encode_locks_to_buffer(struct inode *inode, |
826 | int p_locks, int f_locks); | 826 | struct ceph_filelock *flocks, |
827 | int num_fcntl_locks, | ||
828 | int num_flock_locks); | ||
829 | extern int ceph_locks_to_pagelist(struct ceph_filelock *flocks, | ||
830 | struct ceph_pagelist *pagelist, | ||
831 | int num_fcntl_locks, int num_flock_locks); | ||
827 | extern int lock_to_ceph_filelock(struct file_lock *fl, struct ceph_filelock *c); | 832 | extern int lock_to_ceph_filelock(struct file_lock *fl, struct ceph_filelock *c); |
828 | 833 | ||
829 | /* debugfs.c */ | 834 | /* debugfs.c */ |
diff --git a/fs/file_table.c b/fs/file_table.c index cd4d87a82951..485dc0eddd67 100644 --- a/fs/file_table.c +++ b/fs/file_table.c | |||
@@ -306,17 +306,18 @@ void fput(struct file *file) | |||
306 | { | 306 | { |
307 | if (atomic_long_dec_and_test(&file->f_count)) { | 307 | if (atomic_long_dec_and_test(&file->f_count)) { |
308 | struct task_struct *task = current; | 308 | struct task_struct *task = current; |
309 | unsigned long flags; | ||
310 | |||
309 | file_sb_list_del(file); | 311 | file_sb_list_del(file); |
310 | if (unlikely(in_interrupt() || task->flags & PF_KTHREAD)) { | 312 | if (likely(!in_interrupt() && !(task->flags & PF_KTHREAD))) { |
311 | unsigned long flags; | 313 | init_task_work(&file->f_u.fu_rcuhead, ____fput); |
312 | spin_lock_irqsave(&delayed_fput_lock, flags); | 314 | if (!task_work_add(task, &file->f_u.fu_rcuhead, true)) |
313 | list_add(&file->f_u.fu_list, &delayed_fput_list); | 315 | return; |
314 | schedule_work(&delayed_fput_work); | ||
315 | spin_unlock_irqrestore(&delayed_fput_lock, flags); | ||
316 | return; | ||
317 | } | 316 | } |
318 | init_task_work(&file->f_u.fu_rcuhead, ____fput); | 317 | spin_lock_irqsave(&delayed_fput_lock, flags); |
319 | task_work_add(task, &file->f_u.fu_rcuhead, true); | 318 | list_add(&file->f_u.fu_list, &delayed_fput_list); |
319 | schedule_work(&delayed_fput_work); | ||
320 | spin_unlock_irqrestore(&delayed_fput_lock, flags); | ||
320 | } | 321 | } |
321 | } | 322 | } |
322 | 323 | ||
diff --git a/fs/namei.c b/fs/namei.c index 85e40d1c0a8f..9ed9361223c0 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -1976,7 +1976,7 @@ static int path_lookupat(int dfd, const char *name, | |||
1976 | err = complete_walk(nd); | 1976 | err = complete_walk(nd); |
1977 | 1977 | ||
1978 | if (!err && nd->flags & LOOKUP_DIRECTORY) { | 1978 | if (!err && nd->flags & LOOKUP_DIRECTORY) { |
1979 | if (!nd->inode->i_op->lookup) { | 1979 | if (!can_lookup(nd->inode)) { |
1980 | path_put(&nd->path); | 1980 | path_put(&nd->path); |
1981 | err = -ENOTDIR; | 1981 | err = -ENOTDIR; |
1982 | } | 1982 | } |
@@ -2850,7 +2850,7 @@ finish_lookup: | |||
2850 | if ((open_flag & O_CREAT) && S_ISDIR(nd->inode->i_mode)) | 2850 | if ((open_flag & O_CREAT) && S_ISDIR(nd->inode->i_mode)) |
2851 | goto out; | 2851 | goto out; |
2852 | error = -ENOTDIR; | 2852 | error = -ENOTDIR; |
2853 | if ((nd->flags & LOOKUP_DIRECTORY) && !nd->inode->i_op->lookup) | 2853 | if ((nd->flags & LOOKUP_DIRECTORY) && !can_lookup(nd->inode)) |
2854 | goto out; | 2854 | goto out; |
2855 | audit_inode(name, nd->path.dentry, 0); | 2855 | audit_inode(name, nd->path.dentry, 0); |
2856 | finish_open: | 2856 | finish_open: |
diff --git a/fs/ncpfs/dir.c b/fs/ncpfs/dir.c index 816326093656..6792ce11f2bf 100644 --- a/fs/ncpfs/dir.c +++ b/fs/ncpfs/dir.c | |||
@@ -1029,15 +1029,6 @@ static int ncp_rmdir(struct inode *dir, struct dentry *dentry) | |||
1029 | DPRINTK("ncp_rmdir: removing %s/%s\n", | 1029 | DPRINTK("ncp_rmdir: removing %s/%s\n", |
1030 | dentry->d_parent->d_name.name, dentry->d_name.name); | 1030 | dentry->d_parent->d_name.name, dentry->d_name.name); |
1031 | 1031 | ||
1032 | /* | ||
1033 | * fail with EBUSY if there are still references to this | ||
1034 | * directory. | ||
1035 | */ | ||
1036 | dentry_unhash(dentry); | ||
1037 | error = -EBUSY; | ||
1038 | if (!d_unhashed(dentry)) | ||
1039 | goto out; | ||
1040 | |||
1041 | len = sizeof(__name); | 1032 | len = sizeof(__name); |
1042 | error = ncp_io2vol(server, __name, &len, dentry->d_name.name, | 1033 | error = ncp_io2vol(server, __name, &len, dentry->d_name.name, |
1043 | dentry->d_name.len, !ncp_preserve_case(dir)); | 1034 | dentry->d_name.len, !ncp_preserve_case(dir)); |
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c index b3fdd1a323d6..e68588e6b1e8 100644 --- a/fs/ocfs2/dlm/dlmrecovery.c +++ b/fs/ocfs2/dlm/dlmrecovery.c | |||
@@ -1408,6 +1408,7 @@ int dlm_mig_lockres_handler(struct o2net_msg *msg, u32 len, void *data, | |||
1408 | mres->lockname_len, mres->lockname); | 1408 | mres->lockname_len, mres->lockname); |
1409 | ret = -EFAULT; | 1409 | ret = -EFAULT; |
1410 | spin_unlock(&res->spinlock); | 1410 | spin_unlock(&res->spinlock); |
1411 | dlm_lockres_put(res); | ||
1411 | goto leave; | 1412 | goto leave; |
1412 | } | 1413 | } |
1413 | res->state |= DLM_LOCK_RES_MIGRATING; | 1414 | res->state |= DLM_LOCK_RES_MIGRATING; |
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index 04ee1b57c243..b4a5cdf9dbc5 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c | |||
@@ -947,7 +947,7 @@ leave: | |||
947 | ocfs2_free_dir_lookup_result(&orphan_insert); | 947 | ocfs2_free_dir_lookup_result(&orphan_insert); |
948 | ocfs2_free_dir_lookup_result(&lookup); | 948 | ocfs2_free_dir_lookup_result(&lookup); |
949 | 949 | ||
950 | if (status) | 950 | if (status && (status != -ENOTEMPTY)) |
951 | mlog_errno(status); | 951 | mlog_errno(status); |
952 | 952 | ||
953 | return status; | 953 | return status; |
@@ -2216,7 +2216,7 @@ out: | |||
2216 | 2216 | ||
2217 | brelse(orphan_dir_bh); | 2217 | brelse(orphan_dir_bh); |
2218 | 2218 | ||
2219 | return 0; | 2219 | return ret; |
2220 | } | 2220 | } |
2221 | 2221 | ||
2222 | int ocfs2_create_inode_in_orphan(struct inode *dir, | 2222 | int ocfs2_create_inode_in_orphan(struct inode *dir, |
diff --git a/fs/proc/kmsg.c b/fs/proc/kmsg.c index bd4b5a740ff1..bdfabdaefdce 100644 --- a/fs/proc/kmsg.c +++ b/fs/proc/kmsg.c | |||
@@ -21,12 +21,12 @@ extern wait_queue_head_t log_wait; | |||
21 | 21 | ||
22 | static int kmsg_open(struct inode * inode, struct file * file) | 22 | static int kmsg_open(struct inode * inode, struct file * file) |
23 | { | 23 | { |
24 | return do_syslog(SYSLOG_ACTION_OPEN, NULL, 0, SYSLOG_FROM_FILE); | 24 | return do_syslog(SYSLOG_ACTION_OPEN, NULL, 0, SYSLOG_FROM_PROC); |
25 | } | 25 | } |
26 | 26 | ||
27 | static int kmsg_release(struct inode * inode, struct file * file) | 27 | static int kmsg_release(struct inode * inode, struct file * file) |
28 | { | 28 | { |
29 | (void) do_syslog(SYSLOG_ACTION_CLOSE, NULL, 0, SYSLOG_FROM_FILE); | 29 | (void) do_syslog(SYSLOG_ACTION_CLOSE, NULL, 0, SYSLOG_FROM_PROC); |
30 | return 0; | 30 | return 0; |
31 | } | 31 | } |
32 | 32 | ||
@@ -34,15 +34,15 @@ static ssize_t kmsg_read(struct file *file, char __user *buf, | |||
34 | size_t count, loff_t *ppos) | 34 | size_t count, loff_t *ppos) |
35 | { | 35 | { |
36 | if ((file->f_flags & O_NONBLOCK) && | 36 | if ((file->f_flags & O_NONBLOCK) && |
37 | !do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_FILE)) | 37 | !do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_PROC)) |
38 | return -EAGAIN; | 38 | return -EAGAIN; |
39 | return do_syslog(SYSLOG_ACTION_READ, buf, count, SYSLOG_FROM_FILE); | 39 | return do_syslog(SYSLOG_ACTION_READ, buf, count, SYSLOG_FROM_PROC); |
40 | } | 40 | } |
41 | 41 | ||
42 | static unsigned int kmsg_poll(struct file *file, poll_table *wait) | 42 | static unsigned int kmsg_poll(struct file *file, poll_table *wait) |
43 | { | 43 | { |
44 | poll_wait(file, &log_wait, wait); | 44 | poll_wait(file, &log_wait, wait); |
45 | if (do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_FILE)) | 45 | if (do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_PROC)) |
46 | return POLLIN | POLLRDNORM; | 46 | return POLLIN | POLLRDNORM; |
47 | return 0; | 47 | return 0; |
48 | } | 48 | } |
diff --git a/fs/xfs/xfs_attr_leaf.h b/fs/xfs/xfs_attr_leaf.h index f9d7846097e2..444a7704596c 100644 --- a/fs/xfs/xfs_attr_leaf.h +++ b/fs/xfs/xfs_attr_leaf.h | |||
@@ -128,6 +128,7 @@ struct xfs_attr3_leaf_hdr { | |||
128 | __u8 holes; | 128 | __u8 holes; |
129 | __u8 pad1; | 129 | __u8 pad1; |
130 | struct xfs_attr_leaf_map freemap[XFS_ATTR_LEAF_MAPSIZE]; | 130 | struct xfs_attr_leaf_map freemap[XFS_ATTR_LEAF_MAPSIZE]; |
131 | __be32 pad2; /* 64 bit alignment */ | ||
131 | }; | 132 | }; |
132 | 133 | ||
133 | #define XFS_ATTR3_LEAF_CRC_OFF (offsetof(struct xfs_attr3_leaf_hdr, info.crc)) | 134 | #define XFS_ATTR3_LEAF_CRC_OFF (offsetof(struct xfs_attr3_leaf_hdr, info.crc)) |
diff --git a/fs/xfs/xfs_btree.c b/fs/xfs/xfs_btree.c index 8804b8a3c310..0903960410a2 100644 --- a/fs/xfs/xfs_btree.c +++ b/fs/xfs/xfs_btree.c | |||
@@ -2544,7 +2544,17 @@ xfs_btree_new_iroot( | |||
2544 | if (error) | 2544 | if (error) |
2545 | goto error0; | 2545 | goto error0; |
2546 | 2546 | ||
2547 | /* | ||
2548 | * we can't just memcpy() the root in for CRC enabled btree blocks. | ||
2549 | * In that case have to also ensure the blkno remains correct | ||
2550 | */ | ||
2547 | memcpy(cblock, block, xfs_btree_block_len(cur)); | 2551 | memcpy(cblock, block, xfs_btree_block_len(cur)); |
2552 | if (cur->bc_flags & XFS_BTREE_CRC_BLOCKS) { | ||
2553 | if (cur->bc_flags & XFS_BTREE_LONG_PTRS) | ||
2554 | cblock->bb_u.l.bb_blkno = cpu_to_be64(cbp->b_bn); | ||
2555 | else | ||
2556 | cblock->bb_u.s.bb_blkno = cpu_to_be64(cbp->b_bn); | ||
2557 | } | ||
2548 | 2558 | ||
2549 | be16_add_cpu(&block->bb_level, 1); | 2559 | be16_add_cpu(&block->bb_level, 1); |
2550 | xfs_btree_set_numrecs(block, 1); | 2560 | xfs_btree_set_numrecs(block, 1); |
diff --git a/fs/xfs/xfs_dir2_format.h b/fs/xfs/xfs_dir2_format.h index 995f1f505a52..7826782b8d78 100644 --- a/fs/xfs/xfs_dir2_format.h +++ b/fs/xfs/xfs_dir2_format.h | |||
@@ -266,6 +266,7 @@ struct xfs_dir3_blk_hdr { | |||
266 | struct xfs_dir3_data_hdr { | 266 | struct xfs_dir3_data_hdr { |
267 | struct xfs_dir3_blk_hdr hdr; | 267 | struct xfs_dir3_blk_hdr hdr; |
268 | xfs_dir2_data_free_t best_free[XFS_DIR2_DATA_FD_COUNT]; | 268 | xfs_dir2_data_free_t best_free[XFS_DIR2_DATA_FD_COUNT]; |
269 | __be32 pad; /* 64 bit alignment */ | ||
269 | }; | 270 | }; |
270 | 271 | ||
271 | #define XFS_DIR3_DATA_CRC_OFF offsetof(struct xfs_dir3_data_hdr, hdr.crc) | 272 | #define XFS_DIR3_DATA_CRC_OFF offsetof(struct xfs_dir3_data_hdr, hdr.crc) |
@@ -477,7 +478,7 @@ struct xfs_dir3_leaf_hdr { | |||
477 | struct xfs_da3_blkinfo info; /* header for da routines */ | 478 | struct xfs_da3_blkinfo info; /* header for da routines */ |
478 | __be16 count; /* count of entries */ | 479 | __be16 count; /* count of entries */ |
479 | __be16 stale; /* count of stale entries */ | 480 | __be16 stale; /* count of stale entries */ |
480 | __be32 pad; | 481 | __be32 pad; /* 64 bit alignment */ |
481 | }; | 482 | }; |
482 | 483 | ||
483 | struct xfs_dir3_icleaf_hdr { | 484 | struct xfs_dir3_icleaf_hdr { |
@@ -715,7 +716,7 @@ struct xfs_dir3_free_hdr { | |||
715 | __be32 firstdb; /* db of first entry */ | 716 | __be32 firstdb; /* db of first entry */ |
716 | __be32 nvalid; /* count of valid entries */ | 717 | __be32 nvalid; /* count of valid entries */ |
717 | __be32 nused; /* count of used entries */ | 718 | __be32 nused; /* count of used entries */ |
718 | __be32 pad; /* 64 bit alignment. */ | 719 | __be32 pad; /* 64 bit alignment */ |
719 | }; | 720 | }; |
720 | 721 | ||
721 | struct xfs_dir3_free { | 722 | struct xfs_dir3_free { |
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 45a85ff84da1..7cf5e4eafe28 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c | |||
@@ -1845,7 +1845,13 @@ xlog_recover_do_inode_buffer( | |||
1845 | xfs_agino_t *buffer_nextp; | 1845 | xfs_agino_t *buffer_nextp; |
1846 | 1846 | ||
1847 | trace_xfs_log_recover_buf_inode_buf(mp->m_log, buf_f); | 1847 | trace_xfs_log_recover_buf_inode_buf(mp->m_log, buf_f); |
1848 | bp->b_ops = &xfs_inode_buf_ops; | 1848 | |
1849 | /* | ||
1850 | * Post recovery validation only works properly on CRC enabled | ||
1851 | * filesystems. | ||
1852 | */ | ||
1853 | if (xfs_sb_version_hascrc(&mp->m_sb)) | ||
1854 | bp->b_ops = &xfs_inode_buf_ops; | ||
1849 | 1855 | ||
1850 | inodes_per_buf = BBTOB(bp->b_io_length) >> mp->m_sb.sb_inodelog; | 1856 | inodes_per_buf = BBTOB(bp->b_io_length) >> mp->m_sb.sb_inodelog; |
1851 | for (i = 0; i < inodes_per_buf; i++) { | 1857 | for (i = 0; i < inodes_per_buf; i++) { |
@@ -2205,7 +2211,16 @@ xlog_recover_do_reg_buffer( | |||
2205 | /* Shouldn't be any more regions */ | 2211 | /* Shouldn't be any more regions */ |
2206 | ASSERT(i == item->ri_total); | 2212 | ASSERT(i == item->ri_total); |
2207 | 2213 | ||
2208 | xlog_recovery_validate_buf_type(mp, bp, buf_f); | 2214 | /* |
2215 | * We can only do post recovery validation on items on CRC enabled | ||
2216 | * fielsystems as we need to know when the buffer was written to be able | ||
2217 | * to determine if we should have replayed the item. If we replay old | ||
2218 | * metadata over a newer buffer, then it will enter a temporarily | ||
2219 | * inconsistent state resulting in verification failures. Hence for now | ||
2220 | * just avoid the verification stage for non-crc filesystems | ||
2221 | */ | ||
2222 | if (xfs_sb_version_hascrc(&mp->m_sb)) | ||
2223 | xlog_recovery_validate_buf_type(mp, bp, buf_f); | ||
2209 | } | 2224 | } |
2210 | 2225 | ||
2211 | /* | 2226 | /* |
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index f6bfbd734669..e8e310c05097 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c | |||
@@ -314,7 +314,8 @@ STATIC int | |||
314 | xfs_mount_validate_sb( | 314 | xfs_mount_validate_sb( |
315 | xfs_mount_t *mp, | 315 | xfs_mount_t *mp, |
316 | xfs_sb_t *sbp, | 316 | xfs_sb_t *sbp, |
317 | bool check_inprogress) | 317 | bool check_inprogress, |
318 | bool check_version) | ||
318 | { | 319 | { |
319 | 320 | ||
320 | /* | 321 | /* |
@@ -337,9 +338,10 @@ xfs_mount_validate_sb( | |||
337 | 338 | ||
338 | /* | 339 | /* |
339 | * Version 5 superblock feature mask validation. Reject combinations the | 340 | * Version 5 superblock feature mask validation. Reject combinations the |
340 | * kernel cannot support up front before checking anything else. | 341 | * kernel cannot support up front before checking anything else. For |
342 | * write validation, we don't need to check feature masks. | ||
341 | */ | 343 | */ |
342 | if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { | 344 | if (check_version && XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { |
343 | xfs_alert(mp, | 345 | xfs_alert(mp, |
344 | "Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled!\n" | 346 | "Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled!\n" |
345 | "Use of these features in this kernel is at your own risk!"); | 347 | "Use of these features in this kernel is at your own risk!"); |
@@ -675,7 +677,8 @@ xfs_sb_to_disk( | |||
675 | 677 | ||
676 | static int | 678 | static int |
677 | xfs_sb_verify( | 679 | xfs_sb_verify( |
678 | struct xfs_buf *bp) | 680 | struct xfs_buf *bp, |
681 | bool check_version) | ||
679 | { | 682 | { |
680 | struct xfs_mount *mp = bp->b_target->bt_mount; | 683 | struct xfs_mount *mp = bp->b_target->bt_mount; |
681 | struct xfs_sb sb; | 684 | struct xfs_sb sb; |
@@ -686,7 +689,8 @@ xfs_sb_verify( | |||
686 | * Only check the in progress field for the primary superblock as | 689 | * Only check the in progress field for the primary superblock as |
687 | * mkfs.xfs doesn't clear it from secondary superblocks. | 690 | * mkfs.xfs doesn't clear it from secondary superblocks. |
688 | */ | 691 | */ |
689 | return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR); | 692 | return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR, |
693 | check_version); | ||
690 | } | 694 | } |
691 | 695 | ||
692 | /* | 696 | /* |
@@ -719,7 +723,7 @@ xfs_sb_read_verify( | |||
719 | goto out_error; | 723 | goto out_error; |
720 | } | 724 | } |
721 | } | 725 | } |
722 | error = xfs_sb_verify(bp); | 726 | error = xfs_sb_verify(bp, true); |
723 | 727 | ||
724 | out_error: | 728 | out_error: |
725 | if (error) { | 729 | if (error) { |
@@ -758,7 +762,7 @@ xfs_sb_write_verify( | |||
758 | struct xfs_buf_log_item *bip = bp->b_fspriv; | 762 | struct xfs_buf_log_item *bip = bp->b_fspriv; |
759 | int error; | 763 | int error; |
760 | 764 | ||
761 | error = xfs_sb_verify(bp); | 765 | error = xfs_sb_verify(bp, false); |
762 | if (error) { | 766 | if (error) { |
763 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 767 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); |
764 | xfs_buf_ioerror(bp, error); | 768 | xfs_buf_ioerror(bp, error); |
diff --git a/include/asm-generic/kvm_para.h b/include/asm-generic/kvm_para.h index 9d96605f160a..fa25becbdcaf 100644 --- a/include/asm-generic/kvm_para.h +++ b/include/asm-generic/kvm_para.h | |||
@@ -18,4 +18,9 @@ static inline unsigned int kvm_arch_para_features(void) | |||
18 | return 0; | 18 | return 0; |
19 | } | 19 | } |
20 | 20 | ||
21 | static inline bool kvm_para_available(void) | ||
22 | { | ||
23 | return false; | ||
24 | } | ||
25 | |||
21 | #endif | 26 | #endif |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index c6f6e0839b61..9f3c7e81270a 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
@@ -175,6 +175,8 @@ extern struct bus_type cpu_subsys; | |||
175 | 175 | ||
176 | extern void get_online_cpus(void); | 176 | extern void get_online_cpus(void); |
177 | extern void put_online_cpus(void); | 177 | extern void put_online_cpus(void); |
178 | extern void cpu_hotplug_disable(void); | ||
179 | extern void cpu_hotplug_enable(void); | ||
178 | #define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri) | 180 | #define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri) |
179 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) | 181 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) |
180 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) | 182 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) |
@@ -198,6 +200,8 @@ static inline void cpu_hotplug_driver_unlock(void) | |||
198 | 200 | ||
199 | #define get_online_cpus() do { } while (0) | 201 | #define get_online_cpus() do { } while (0) |
200 | #define put_online_cpus() do { } while (0) | 202 | #define put_online_cpus() do { } while (0) |
203 | #define cpu_hotplug_disable() do { } while (0) | ||
204 | #define cpu_hotplug_enable() do { } while (0) | ||
201 | #define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) | 205 | #define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) |
202 | /* These aren't inline functions due to a GCC bug. */ | 206 | /* These aren't inline functions due to a GCC bug. */ |
203 | #define register_hotcpu_notifier(nb) ({ (void)(nb); 0; }) | 207 | #define register_hotcpu_notifier(nb) ({ (void)(nb); 0; }) |
diff --git a/include/linux/filter.h b/include/linux/filter.h index c050dcc322a4..f65f5a69db8f 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h | |||
@@ -46,6 +46,7 @@ extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); | |||
46 | extern int sk_detach_filter(struct sock *sk); | 46 | extern int sk_detach_filter(struct sock *sk); |
47 | extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen); | 47 | extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen); |
48 | extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, unsigned len); | 48 | extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, unsigned len); |
49 | extern void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to); | ||
49 | 50 | ||
50 | #ifdef CONFIG_BPF_JIT | 51 | #ifdef CONFIG_BPF_JIT |
51 | #include <stdarg.h> | 52 | #include <stdarg.h> |
diff --git a/include/linux/if_team.h b/include/linux/if_team.h index 4474557904f6..16fae6436d0e 100644 --- a/include/linux/if_team.h +++ b/include/linux/if_team.h | |||
@@ -249,12 +249,12 @@ team_get_first_port_txable_rcu(struct team *team, struct team_port *port) | |||
249 | return port; | 249 | return port; |
250 | cur = port; | 250 | cur = port; |
251 | list_for_each_entry_continue_rcu(cur, &team->port_list, list) | 251 | list_for_each_entry_continue_rcu(cur, &team->port_list, list) |
252 | if (team_port_txable(port)) | 252 | if (team_port_txable(cur)) |
253 | return cur; | 253 | return cur; |
254 | list_for_each_entry_rcu(cur, &team->port_list, list) { | 254 | list_for_each_entry_rcu(cur, &team->port_list, list) { |
255 | if (cur == port) | 255 | if (cur == port) |
256 | break; | 256 | break; |
257 | if (team_port_txable(port)) | 257 | if (team_port_txable(cur)) |
258 | return cur; | 258 | return cur; |
259 | } | 259 | } |
260 | return NULL; | 260 | return NULL; |
diff --git a/include/linux/math64.h b/include/linux/math64.h index b8ba85544721..2913b86eb12a 100644 --- a/include/linux/math64.h +++ b/include/linux/math64.h | |||
@@ -6,7 +6,8 @@ | |||
6 | 6 | ||
7 | #if BITS_PER_LONG == 64 | 7 | #if BITS_PER_LONG == 64 |
8 | 8 | ||
9 | #define div64_long(x,y) div64_s64((x),(y)) | 9 | #define div64_long(x, y) div64_s64((x), (y)) |
10 | #define div64_ul(x, y) div64_u64((x), (y)) | ||
10 | 11 | ||
11 | /** | 12 | /** |
12 | * div_u64_rem - unsigned 64bit divide with 32bit divisor with remainder | 13 | * div_u64_rem - unsigned 64bit divide with 32bit divisor with remainder |
@@ -47,7 +48,8 @@ static inline s64 div64_s64(s64 dividend, s64 divisor) | |||
47 | 48 | ||
48 | #elif BITS_PER_LONG == 32 | 49 | #elif BITS_PER_LONG == 32 |
49 | 50 | ||
50 | #define div64_long(x,y) div_s64((x),(y)) | 51 | #define div64_long(x, y) div_s64((x), (y)) |
52 | #define div64_ul(x, y) div_u64((x), (y)) | ||
51 | 53 | ||
52 | #ifndef div_u64_rem | 54 | #ifndef div_u64_rem |
53 | static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) | 55 | static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) |
diff --git a/include/linux/platform_data/gpio-rcar.h b/include/linux/platform_data/gpio-rcar.h index b253f77a7ddf..2d8d69432813 100644 --- a/include/linux/platform_data/gpio-rcar.h +++ b/include/linux/platform_data/gpio-rcar.h | |||
@@ -17,10 +17,13 @@ | |||
17 | #define __GPIO_RCAR_H__ | 17 | #define __GPIO_RCAR_H__ |
18 | 18 | ||
19 | struct gpio_rcar_config { | 19 | struct gpio_rcar_config { |
20 | unsigned int gpio_base; | 20 | int gpio_base; |
21 | unsigned int irq_base; | 21 | unsigned int irq_base; |
22 | unsigned int number_of_pins; | 22 | unsigned int number_of_pins; |
23 | const char *pctl_name; | 23 | const char *pctl_name; |
24 | unsigned has_both_edge_trigger:1; | ||
24 | }; | 25 | }; |
25 | 26 | ||
27 | #define RCAR_GP_PIN(bank, pin) (((bank) * 32) + (pin)) | ||
28 | |||
26 | #endif /* __GPIO_RCAR_H__ */ | 29 | #endif /* __GPIO_RCAR_H__ */ |
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h index 5951e3f38878..26806775b11b 100644 --- a/include/linux/scatterlist.h +++ b/include/linux/scatterlist.h | |||
@@ -111,6 +111,9 @@ static inline struct page *sg_page(struct scatterlist *sg) | |||
111 | static inline void sg_set_buf(struct scatterlist *sg, const void *buf, | 111 | static inline void sg_set_buf(struct scatterlist *sg, const void *buf, |
112 | unsigned int buflen) | 112 | unsigned int buflen) |
113 | { | 113 | { |
114 | #ifdef CONFIG_DEBUG_SG | ||
115 | BUG_ON(!virt_addr_valid(buf)); | ||
116 | #endif | ||
114 | sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf)); | 117 | sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf)); |
115 | } | 118 | } |
116 | 119 | ||
diff --git a/include/linux/smp.h b/include/linux/smp.h index e6564c1dc552..c8488763277f 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/list.h> | 11 | #include <linux/list.h> |
12 | #include <linux/cpumask.h> | 12 | #include <linux/cpumask.h> |
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/irqflags.h> | ||
14 | 15 | ||
15 | extern void cpu_idle(void); | 16 | extern void cpu_idle(void); |
16 | 17 | ||
@@ -139,13 +140,17 @@ static inline int up_smp_call_function(smp_call_func_t func, void *info) | |||
139 | } | 140 | } |
140 | #define smp_call_function(func, info, wait) \ | 141 | #define smp_call_function(func, info, wait) \ |
141 | (up_smp_call_function(func, info)) | 142 | (up_smp_call_function(func, info)) |
142 | #define on_each_cpu(func,info,wait) \ | 143 | |
143 | ({ \ | 144 | static inline int on_each_cpu(smp_call_func_t func, void *info, int wait) |
144 | local_irq_disable(); \ | 145 | { |
145 | func(info); \ | 146 | unsigned long flags; |
146 | local_irq_enable(); \ | 147 | |
147 | 0; \ | 148 | local_irq_save(flags); |
148 | }) | 149 | func(info); |
150 | local_irq_restore(flags); | ||
151 | return 0; | ||
152 | } | ||
153 | |||
149 | /* | 154 | /* |
150 | * Note we still need to test the mask even for UP | 155 | * Note we still need to test the mask even for UP |
151 | * because we actually can get an empty mask from | 156 | * because we actually can get an empty mask from |
diff --git a/include/linux/swapops.h b/include/linux/swapops.h index 47ead515c811..c5fd30d2a415 100644 --- a/include/linux/swapops.h +++ b/include/linux/swapops.h | |||
@@ -137,6 +137,7 @@ static inline void make_migration_entry_read(swp_entry_t *entry) | |||
137 | 137 | ||
138 | extern void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, | 138 | extern void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, |
139 | unsigned long address); | 139 | unsigned long address); |
140 | extern void migration_entry_wait_huge(struct mm_struct *mm, pte_t *pte); | ||
140 | #else | 141 | #else |
141 | 142 | ||
142 | #define make_migration_entry(page, write) swp_entry(0, 0) | 143 | #define make_migration_entry(page, write) swp_entry(0, 0) |
@@ -148,6 +149,8 @@ static inline int is_migration_entry(swp_entry_t swp) | |||
148 | static inline void make_migration_entry_read(swp_entry_t *entryp) { } | 149 | static inline void make_migration_entry_read(swp_entry_t *entryp) { } |
149 | static inline void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, | 150 | static inline void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, |
150 | unsigned long address) { } | 151 | unsigned long address) { } |
152 | static inline void migration_entry_wait_huge(struct mm_struct *mm, | ||
153 | pte_t *pte) { } | ||
151 | static inline int is_write_migration_entry(swp_entry_t entry) | 154 | static inline int is_write_migration_entry(swp_entry_t entry) |
152 | { | 155 | { |
153 | return 0; | 156 | return 0; |
diff --git a/include/linux/syslog.h b/include/linux/syslog.h index 38911391a139..98a3153c0f96 100644 --- a/include/linux/syslog.h +++ b/include/linux/syslog.h | |||
@@ -44,8 +44,8 @@ | |||
44 | /* Return size of the log buffer */ | 44 | /* Return size of the log buffer */ |
45 | #define SYSLOG_ACTION_SIZE_BUFFER 10 | 45 | #define SYSLOG_ACTION_SIZE_BUFFER 10 |
46 | 46 | ||
47 | #define SYSLOG_FROM_CALL 0 | 47 | #define SYSLOG_FROM_READER 0 |
48 | #define SYSLOG_FROM_FILE 1 | 48 | #define SYSLOG_FROM_PROC 1 |
49 | 49 | ||
50 | int do_syslog(int type, char __user *buf, int count, bool from_file); | 50 | int do_syslog(int type, char __user *buf, int count, bool from_file); |
51 | 51 | ||
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index 2f322c38bd4d..f8e084d0fc77 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h | |||
@@ -145,8 +145,8 @@ static inline void tracepoint_synchronize_unregister(void) | |||
145 | TP_PROTO(data_proto), \ | 145 | TP_PROTO(data_proto), \ |
146 | TP_ARGS(data_args), \ | 146 | TP_ARGS(data_args), \ |
147 | TP_CONDITION(cond), \ | 147 | TP_CONDITION(cond), \ |
148 | rcu_idle_exit(), \ | 148 | rcu_irq_enter(), \ |
149 | rcu_idle_enter()); \ | 149 | rcu_irq_exit()); \ |
150 | } | 150 | } |
151 | #else | 151 | #else |
152 | #define __DECLARE_TRACE_RCU(name, proto, args, cond, data_proto, data_args) | 152 | #define __DECLARE_TRACE_RCU(name, proto, args, cond, data_proto, data_args) |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 35a57cd1704c..7cb6d360d147 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -1117,6 +1117,7 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event); | |||
1117 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); | 1117 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); |
1118 | int mgmt_index_added(struct hci_dev *hdev); | 1118 | int mgmt_index_added(struct hci_dev *hdev); |
1119 | int mgmt_index_removed(struct hci_dev *hdev); | 1119 | int mgmt_index_removed(struct hci_dev *hdev); |
1120 | int mgmt_set_powered_failed(struct hci_dev *hdev, int err); | ||
1120 | int mgmt_powered(struct hci_dev *hdev, u8 powered); | 1121 | int mgmt_powered(struct hci_dev *hdev, u8 powered); |
1121 | int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable); | 1122 | int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable); |
1122 | int mgmt_connectable(struct hci_dev *hdev, u8 connectable); | 1123 | int mgmt_connectable(struct hci_dev *hdev, u8 connectable); |
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h index 22980a7c3873..9944c3e68c5d 100644 --- a/include/net/bluetooth/mgmt.h +++ b/include/net/bluetooth/mgmt.h | |||
@@ -42,6 +42,7 @@ | |||
42 | #define MGMT_STATUS_NOT_POWERED 0x0f | 42 | #define MGMT_STATUS_NOT_POWERED 0x0f |
43 | #define MGMT_STATUS_CANCELLED 0x10 | 43 | #define MGMT_STATUS_CANCELLED 0x10 |
44 | #define MGMT_STATUS_INVALID_INDEX 0x11 | 44 | #define MGMT_STATUS_INVALID_INDEX 0x11 |
45 | #define MGMT_STATUS_RFKILLED 0x12 | ||
45 | 46 | ||
46 | struct mgmt_hdr { | 47 | struct mgmt_hdr { |
47 | __le16 opcode; | 48 | __le16 opcode; |
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h index 4b6f0b28f41f..09b1360e10bf 100644 --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h | |||
@@ -95,10 +95,10 @@ struct ip_tunnel_net { | |||
95 | int ip_tunnel_init(struct net_device *dev); | 95 | int ip_tunnel_init(struct net_device *dev); |
96 | void ip_tunnel_uninit(struct net_device *dev); | 96 | void ip_tunnel_uninit(struct net_device *dev); |
97 | void ip_tunnel_dellink(struct net_device *dev, struct list_head *head); | 97 | void ip_tunnel_dellink(struct net_device *dev, struct list_head *head); |
98 | int __net_init ip_tunnel_init_net(struct net *net, int ip_tnl_net_id, | 98 | int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id, |
99 | struct rtnl_link_ops *ops, char *devname); | 99 | struct rtnl_link_ops *ops, char *devname); |
100 | 100 | ||
101 | void __net_exit ip_tunnel_delete_net(struct ip_tunnel_net *itn); | 101 | void ip_tunnel_delete_net(struct ip_tunnel_net *itn); |
102 | 102 | ||
103 | void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, | 103 | void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, |
104 | const struct iphdr *tnl_params); | 104 | const struct iphdr *tnl_params); |
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index d4609029f014..385c6329a967 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h | |||
@@ -450,7 +450,8 @@ enum snd_soc_dapm_type { | |||
450 | snd_soc_dapm_aif_in, /* audio interface input */ | 450 | snd_soc_dapm_aif_in, /* audio interface input */ |
451 | snd_soc_dapm_aif_out, /* audio interface output */ | 451 | snd_soc_dapm_aif_out, /* audio interface output */ |
452 | snd_soc_dapm_siggen, /* signal generator */ | 452 | snd_soc_dapm_siggen, /* signal generator */ |
453 | snd_soc_dapm_dai, /* link to DAI structure */ | 453 | snd_soc_dapm_dai_in, /* link to DAI structure */ |
454 | snd_soc_dapm_dai_out, | ||
454 | snd_soc_dapm_dai_link, /* link between two DAI structures */ | 455 | snd_soc_dapm_dai_link, /* link between two DAI structures */ |
455 | }; | 456 | }; |
456 | 457 | ||
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index a5c86fc34a37..d88c8ee00c8b 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h | |||
@@ -783,6 +783,7 @@ struct kvm_dirty_tlb { | |||
783 | #define KVM_REG_IA64 0x3000000000000000ULL | 783 | #define KVM_REG_IA64 0x3000000000000000ULL |
784 | #define KVM_REG_ARM 0x4000000000000000ULL | 784 | #define KVM_REG_ARM 0x4000000000000000ULL |
785 | #define KVM_REG_S390 0x5000000000000000ULL | 785 | #define KVM_REG_S390 0x5000000000000000ULL |
786 | #define KVM_REG_MIPS 0x7000000000000000ULL | ||
786 | 787 | ||
787 | #define KVM_REG_SIZE_SHIFT 52 | 788 | #define KVM_REG_SIZE_SHIFT 52 |
788 | #define KVM_REG_SIZE_MASK 0x00f0000000000000ULL | 789 | #define KVM_REG_SIZE_MASK 0x00f0000000000000ULL |
diff --git a/init/Kconfig b/init/Kconfig index 9d3a7887a6d3..2d9b83104dcf 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -431,6 +431,7 @@ choice | |||
431 | config TREE_RCU | 431 | config TREE_RCU |
432 | bool "Tree-based hierarchical RCU" | 432 | bool "Tree-based hierarchical RCU" |
433 | depends on !PREEMPT && SMP | 433 | depends on !PREEMPT && SMP |
434 | select IRQ_WORK | ||
434 | help | 435 | help |
435 | This option selects the RCU implementation that is | 436 | This option selects the RCU implementation that is |
436 | designed for very large SMP system with hundreds or | 437 | designed for very large SMP system with hundreds or |
diff --git a/kernel/audit.c b/kernel/audit.c index 21c7fa615bd3..91e53d04b6a9 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -1056,7 +1056,7 @@ static inline void audit_get_stamp(struct audit_context *ctx, | |||
1056 | static void wait_for_auditd(unsigned long sleep_time) | 1056 | static void wait_for_auditd(unsigned long sleep_time) |
1057 | { | 1057 | { |
1058 | DECLARE_WAITQUEUE(wait, current); | 1058 | DECLARE_WAITQUEUE(wait, current); |
1059 | set_current_state(TASK_INTERRUPTIBLE); | 1059 | set_current_state(TASK_UNINTERRUPTIBLE); |
1060 | add_wait_queue(&audit_backlog_wait, &wait); | 1060 | add_wait_queue(&audit_backlog_wait, &wait); |
1061 | 1061 | ||
1062 | if (audit_backlog_limit && | 1062 | if (audit_backlog_limit && |
diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c index a291aa23fb3f..43c307dc9453 100644 --- a/kernel/audit_tree.c +++ b/kernel/audit_tree.c | |||
@@ -658,6 +658,7 @@ int audit_add_tree_rule(struct audit_krule *rule) | |||
658 | struct vfsmount *mnt; | 658 | struct vfsmount *mnt; |
659 | int err; | 659 | int err; |
660 | 660 | ||
661 | rule->tree = NULL; | ||
661 | list_for_each_entry(tree, &tree_list, list) { | 662 | list_for_each_entry(tree, &tree_list, list) { |
662 | if (!strcmp(seed->pathname, tree->pathname)) { | 663 | if (!strcmp(seed->pathname, tree->pathname)) { |
663 | put_tree(seed); | 664 | put_tree(seed); |
diff --git a/kernel/cpu.c b/kernel/cpu.c index b5e4ab2d427e..198a38883e64 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c | |||
@@ -133,6 +133,27 @@ static void cpu_hotplug_done(void) | |||
133 | mutex_unlock(&cpu_hotplug.lock); | 133 | mutex_unlock(&cpu_hotplug.lock); |
134 | } | 134 | } |
135 | 135 | ||
136 | /* | ||
137 | * Wait for currently running CPU hotplug operations to complete (if any) and | ||
138 | * disable future CPU hotplug (from sysfs). The 'cpu_add_remove_lock' protects | ||
139 | * the 'cpu_hotplug_disabled' flag. The same lock is also acquired by the | ||
140 | * hotplug path before performing hotplug operations. So acquiring that lock | ||
141 | * guarantees mutual exclusion from any currently running hotplug operations. | ||
142 | */ | ||
143 | void cpu_hotplug_disable(void) | ||
144 | { | ||
145 | cpu_maps_update_begin(); | ||
146 | cpu_hotplug_disabled = 1; | ||
147 | cpu_maps_update_done(); | ||
148 | } | ||
149 | |||
150 | void cpu_hotplug_enable(void) | ||
151 | { | ||
152 | cpu_maps_update_begin(); | ||
153 | cpu_hotplug_disabled = 0; | ||
154 | cpu_maps_update_done(); | ||
155 | } | ||
156 | |||
136 | #else /* #if CONFIG_HOTPLUG_CPU */ | 157 | #else /* #if CONFIG_HOTPLUG_CPU */ |
137 | static void cpu_hotplug_begin(void) {} | 158 | static void cpu_hotplug_begin(void) {} |
138 | static void cpu_hotplug_done(void) {} | 159 | static void cpu_hotplug_done(void) {} |
@@ -541,36 +562,6 @@ static int __init alloc_frozen_cpus(void) | |||
541 | core_initcall(alloc_frozen_cpus); | 562 | core_initcall(alloc_frozen_cpus); |
542 | 563 | ||
543 | /* | 564 | /* |
544 | * Prevent regular CPU hotplug from racing with the freezer, by disabling CPU | ||
545 | * hotplug when tasks are about to be frozen. Also, don't allow the freezer | ||
546 | * to continue until any currently running CPU hotplug operation gets | ||
547 | * completed. | ||
548 | * To modify the 'cpu_hotplug_disabled' flag, we need to acquire the | ||
549 | * 'cpu_add_remove_lock'. And this same lock is also taken by the regular | ||
550 | * CPU hotplug path and released only after it is complete. Thus, we | ||
551 | * (and hence the freezer) will block here until any currently running CPU | ||
552 | * hotplug operation gets completed. | ||
553 | */ | ||
554 | void cpu_hotplug_disable_before_freeze(void) | ||
555 | { | ||
556 | cpu_maps_update_begin(); | ||
557 | cpu_hotplug_disabled = 1; | ||
558 | cpu_maps_update_done(); | ||
559 | } | ||
560 | |||
561 | |||
562 | /* | ||
563 | * When tasks have been thawed, re-enable regular CPU hotplug (which had been | ||
564 | * disabled while beginning to freeze tasks). | ||
565 | */ | ||
566 | void cpu_hotplug_enable_after_thaw(void) | ||
567 | { | ||
568 | cpu_maps_update_begin(); | ||
569 | cpu_hotplug_disabled = 0; | ||
570 | cpu_maps_update_done(); | ||
571 | } | ||
572 | |||
573 | /* | ||
574 | * When callbacks for CPU hotplug notifications are being executed, we must | 565 | * When callbacks for CPU hotplug notifications are being executed, we must |
575 | * ensure that the state of the system with respect to the tasks being frozen | 566 | * ensure that the state of the system with respect to the tasks being frozen |
576 | * or not, as reported by the notification, remains unchanged *throughout the | 567 | * or not, as reported by the notification, remains unchanged *throughout the |
@@ -589,12 +580,12 @@ cpu_hotplug_pm_callback(struct notifier_block *nb, | |||
589 | 580 | ||
590 | case PM_SUSPEND_PREPARE: | 581 | case PM_SUSPEND_PREPARE: |
591 | case PM_HIBERNATION_PREPARE: | 582 | case PM_HIBERNATION_PREPARE: |
592 | cpu_hotplug_disable_before_freeze(); | 583 | cpu_hotplug_disable(); |
593 | break; | 584 | break; |
594 | 585 | ||
595 | case PM_POST_SUSPEND: | 586 | case PM_POST_SUSPEND: |
596 | case PM_POST_HIBERNATION: | 587 | case PM_POST_HIBERNATION: |
597 | cpu_hotplug_enable_after_thaw(); | 588 | cpu_hotplug_enable(); |
598 | break; | 589 | break; |
599 | 590 | ||
600 | default: | 591 | default: |
diff --git a/kernel/exit.c b/kernel/exit.c index af2eb3cbd499..7bb73f9d09db 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -649,7 +649,6 @@ static void exit_notify(struct task_struct *tsk, int group_dead) | |||
649 | * jobs, send them a SIGHUP and then a SIGCONT. (POSIX 3.2.2.2) | 649 | * jobs, send them a SIGHUP and then a SIGCONT. (POSIX 3.2.2.2) |
650 | */ | 650 | */ |
651 | forget_original_parent(tsk); | 651 | forget_original_parent(tsk); |
652 | exit_task_namespaces(tsk); | ||
653 | 652 | ||
654 | write_lock_irq(&tasklist_lock); | 653 | write_lock_irq(&tasklist_lock); |
655 | if (group_dead) | 654 | if (group_dead) |
@@ -795,6 +794,7 @@ void do_exit(long code) | |||
795 | exit_shm(tsk); | 794 | exit_shm(tsk); |
796 | exit_files(tsk); | 795 | exit_files(tsk); |
797 | exit_fs(tsk); | 796 | exit_fs(tsk); |
797 | exit_task_namespaces(tsk); | ||
798 | exit_task_work(tsk); | 798 | exit_task_work(tsk); |
799 | check_stack_usage(); | 799 | check_stack_usage(); |
800 | exit_thread(); | 800 | exit_thread(); |
diff --git a/kernel/printk.c b/kernel/printk.c index fa36e1494420..8212c1aef125 100644 --- a/kernel/printk.c +++ b/kernel/printk.c | |||
@@ -363,6 +363,53 @@ static void log_store(int facility, int level, | |||
363 | log_next_seq++; | 363 | log_next_seq++; |
364 | } | 364 | } |
365 | 365 | ||
366 | #ifdef CONFIG_SECURITY_DMESG_RESTRICT | ||
367 | int dmesg_restrict = 1; | ||
368 | #else | ||
369 | int dmesg_restrict; | ||
370 | #endif | ||
371 | |||
372 | static int syslog_action_restricted(int type) | ||
373 | { | ||
374 | if (dmesg_restrict) | ||
375 | return 1; | ||
376 | /* | ||
377 | * Unless restricted, we allow "read all" and "get buffer size" | ||
378 | * for everybody. | ||
379 | */ | ||
380 | return type != SYSLOG_ACTION_READ_ALL && | ||
381 | type != SYSLOG_ACTION_SIZE_BUFFER; | ||
382 | } | ||
383 | |||
384 | static int check_syslog_permissions(int type, bool from_file) | ||
385 | { | ||
386 | /* | ||
387 | * If this is from /proc/kmsg and we've already opened it, then we've | ||
388 | * already done the capabilities checks at open time. | ||
389 | */ | ||
390 | if (from_file && type != SYSLOG_ACTION_OPEN) | ||
391 | return 0; | ||
392 | |||
393 | if (syslog_action_restricted(type)) { | ||
394 | if (capable(CAP_SYSLOG)) | ||
395 | return 0; | ||
396 | /* | ||
397 | * For historical reasons, accept CAP_SYS_ADMIN too, with | ||
398 | * a warning. | ||
399 | */ | ||
400 | if (capable(CAP_SYS_ADMIN)) { | ||
401 | pr_warn_once("%s (%d): Attempt to access syslog with " | ||
402 | "CAP_SYS_ADMIN but no CAP_SYSLOG " | ||
403 | "(deprecated).\n", | ||
404 | current->comm, task_pid_nr(current)); | ||
405 | return 0; | ||
406 | } | ||
407 | return -EPERM; | ||
408 | } | ||
409 | return security_syslog(type); | ||
410 | } | ||
411 | |||
412 | |||
366 | /* /dev/kmsg - userspace message inject/listen interface */ | 413 | /* /dev/kmsg - userspace message inject/listen interface */ |
367 | struct devkmsg_user { | 414 | struct devkmsg_user { |
368 | u64 seq; | 415 | u64 seq; |
@@ -620,7 +667,8 @@ static int devkmsg_open(struct inode *inode, struct file *file) | |||
620 | if ((file->f_flags & O_ACCMODE) == O_WRONLY) | 667 | if ((file->f_flags & O_ACCMODE) == O_WRONLY) |
621 | return 0; | 668 | return 0; |
622 | 669 | ||
623 | err = security_syslog(SYSLOG_ACTION_READ_ALL); | 670 | err = check_syslog_permissions(SYSLOG_ACTION_READ_ALL, |
671 | SYSLOG_FROM_READER); | ||
624 | if (err) | 672 | if (err) |
625 | return err; | 673 | return err; |
626 | 674 | ||
@@ -813,45 +861,6 @@ static inline void boot_delay_msec(int level) | |||
813 | } | 861 | } |
814 | #endif | 862 | #endif |
815 | 863 | ||
816 | #ifdef CONFIG_SECURITY_DMESG_RESTRICT | ||
817 | int dmesg_restrict = 1; | ||
818 | #else | ||
819 | int dmesg_restrict; | ||
820 | #endif | ||
821 | |||
822 | static int syslog_action_restricted(int type) | ||
823 | { | ||
824 | if (dmesg_restrict) | ||
825 | return 1; | ||
826 | /* Unless restricted, we allow "read all" and "get buffer size" for everybody */ | ||
827 | return type != SYSLOG_ACTION_READ_ALL && type != SYSLOG_ACTION_SIZE_BUFFER; | ||
828 | } | ||
829 | |||
830 | static int check_syslog_permissions(int type, bool from_file) | ||
831 | { | ||
832 | /* | ||
833 | * If this is from /proc/kmsg and we've already opened it, then we've | ||
834 | * already done the capabilities checks at open time. | ||
835 | */ | ||
836 | if (from_file && type != SYSLOG_ACTION_OPEN) | ||
837 | return 0; | ||
838 | |||
839 | if (syslog_action_restricted(type)) { | ||
840 | if (capable(CAP_SYSLOG)) | ||
841 | return 0; | ||
842 | /* For historical reasons, accept CAP_SYS_ADMIN too, with a warning */ | ||
843 | if (capable(CAP_SYS_ADMIN)) { | ||
844 | printk_once(KERN_WARNING "%s (%d): " | ||
845 | "Attempt to access syslog with CAP_SYS_ADMIN " | ||
846 | "but no CAP_SYSLOG (deprecated).\n", | ||
847 | current->comm, task_pid_nr(current)); | ||
848 | return 0; | ||
849 | } | ||
850 | return -EPERM; | ||
851 | } | ||
852 | return 0; | ||
853 | } | ||
854 | |||
855 | #if defined(CONFIG_PRINTK_TIME) | 864 | #if defined(CONFIG_PRINTK_TIME) |
856 | static bool printk_time = 1; | 865 | static bool printk_time = 1; |
857 | #else | 866 | #else |
@@ -1249,7 +1258,7 @@ out: | |||
1249 | 1258 | ||
1250 | SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len) | 1259 | SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len) |
1251 | { | 1260 | { |
1252 | return do_syslog(type, buf, len, SYSLOG_FROM_CALL); | 1261 | return do_syslog(type, buf, len, SYSLOG_FROM_READER); |
1253 | } | 1262 | } |
1254 | 1263 | ||
1255 | /* | 1264 | /* |
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 16ea67925015..35380019f0fc 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
@@ -1451,9 +1451,9 @@ static int rcu_gp_init(struct rcu_state *rsp) | |||
1451 | rnp->grphi, rnp->qsmask); | 1451 | rnp->grphi, rnp->qsmask); |
1452 | raw_spin_unlock_irq(&rnp->lock); | 1452 | raw_spin_unlock_irq(&rnp->lock); |
1453 | #ifdef CONFIG_PROVE_RCU_DELAY | 1453 | #ifdef CONFIG_PROVE_RCU_DELAY |
1454 | if ((prandom_u32() % (rcu_num_nodes * 8)) == 0 && | 1454 | if ((prandom_u32() % (rcu_num_nodes + 1)) == 0 && |
1455 | system_state == SYSTEM_RUNNING) | 1455 | system_state == SYSTEM_RUNNING) |
1456 | schedule_timeout_uninterruptible(2); | 1456 | udelay(200); |
1457 | #endif /* #ifdef CONFIG_PROVE_RCU_DELAY */ | 1457 | #endif /* #ifdef CONFIG_PROVE_RCU_DELAY */ |
1458 | cond_resched(); | 1458 | cond_resched(); |
1459 | } | 1459 | } |
@@ -1613,6 +1613,14 @@ static int __noreturn rcu_gp_kthread(void *arg) | |||
1613 | } | 1613 | } |
1614 | } | 1614 | } |
1615 | 1615 | ||
1616 | static void rsp_wakeup(struct irq_work *work) | ||
1617 | { | ||
1618 | struct rcu_state *rsp = container_of(work, struct rcu_state, wakeup_work); | ||
1619 | |||
1620 | /* Wake up rcu_gp_kthread() to start the grace period. */ | ||
1621 | wake_up(&rsp->gp_wq); | ||
1622 | } | ||
1623 | |||
1616 | /* | 1624 | /* |
1617 | * Start a new RCU grace period if warranted, re-initializing the hierarchy | 1625 | * Start a new RCU grace period if warranted, re-initializing the hierarchy |
1618 | * in preparation for detecting the next grace period. The caller must hold | 1626 | * in preparation for detecting the next grace period. The caller must hold |
@@ -1637,8 +1645,12 @@ rcu_start_gp_advanced(struct rcu_state *rsp, struct rcu_node *rnp, | |||
1637 | } | 1645 | } |
1638 | rsp->gp_flags = RCU_GP_FLAG_INIT; | 1646 | rsp->gp_flags = RCU_GP_FLAG_INIT; |
1639 | 1647 | ||
1640 | /* Wake up rcu_gp_kthread() to start the grace period. */ | 1648 | /* |
1641 | wake_up(&rsp->gp_wq); | 1649 | * We can't do wakeups while holding the rnp->lock, as that |
1650 | * could cause possible deadlocks with the rq->lock. Deter | ||
1651 | * the wakeup to interrupt context. | ||
1652 | */ | ||
1653 | irq_work_queue(&rsp->wakeup_work); | ||
1642 | } | 1654 | } |
1643 | 1655 | ||
1644 | /* | 1656 | /* |
@@ -3235,6 +3247,7 @@ static void __init rcu_init_one(struct rcu_state *rsp, | |||
3235 | 3247 | ||
3236 | rsp->rda = rda; | 3248 | rsp->rda = rda; |
3237 | init_waitqueue_head(&rsp->gp_wq); | 3249 | init_waitqueue_head(&rsp->gp_wq); |
3250 | init_irq_work(&rsp->wakeup_work, rsp_wakeup); | ||
3238 | rnp = rsp->level[rcu_num_lvls - 1]; | 3251 | rnp = rsp->level[rcu_num_lvls - 1]; |
3239 | for_each_possible_cpu(i) { | 3252 | for_each_possible_cpu(i) { |
3240 | while (i > rnp->grphi) | 3253 | while (i > rnp->grphi) |
diff --git a/kernel/rcutree.h b/kernel/rcutree.h index da77a8f57ff9..4df503470e42 100644 --- a/kernel/rcutree.h +++ b/kernel/rcutree.h | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/threads.h> | 27 | #include <linux/threads.h> |
28 | #include <linux/cpumask.h> | 28 | #include <linux/cpumask.h> |
29 | #include <linux/seqlock.h> | 29 | #include <linux/seqlock.h> |
30 | #include <linux/irq_work.h> | ||
30 | 31 | ||
31 | /* | 32 | /* |
32 | * Define shape of hierarchy based on NR_CPUS, CONFIG_RCU_FANOUT, and | 33 | * Define shape of hierarchy based on NR_CPUS, CONFIG_RCU_FANOUT, and |
@@ -442,6 +443,7 @@ struct rcu_state { | |||
442 | char *name; /* Name of structure. */ | 443 | char *name; /* Name of structure. */ |
443 | char abbr; /* Abbreviated name. */ | 444 | char abbr; /* Abbreviated name. */ |
444 | struct list_head flavors; /* List of RCU flavors. */ | 445 | struct list_head flavors; /* List of RCU flavors. */ |
446 | struct irq_work wakeup_work; /* Postponed wakeups */ | ||
445 | }; | 447 | }; |
446 | 448 | ||
447 | /* Values for rcu_state structure's gp_flags field. */ | 449 | /* Values for rcu_state structure's gp_flags field. */ |
diff --git a/kernel/softirq.c b/kernel/softirq.c index b5197dcb0dad..3d6833f125d3 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c | |||
@@ -195,8 +195,12 @@ void local_bh_enable_ip(unsigned long ip) | |||
195 | EXPORT_SYMBOL(local_bh_enable_ip); | 195 | EXPORT_SYMBOL(local_bh_enable_ip); |
196 | 196 | ||
197 | /* | 197 | /* |
198 | * We restart softirq processing for at most 2 ms, | 198 | * We restart softirq processing for at most MAX_SOFTIRQ_RESTART times, |
199 | * and if need_resched() is not set. | 199 | * but break the loop if need_resched() is set or after 2 ms. |
200 | * The MAX_SOFTIRQ_TIME provides a nice upper bound in most cases, but in | ||
201 | * certain cases, such as stop_machine(), jiffies may cease to | ||
202 | * increment and so we need the MAX_SOFTIRQ_RESTART limit as | ||
203 | * well to make sure we eventually return from this method. | ||
200 | * | 204 | * |
201 | * These limits have been established via experimentation. | 205 | * These limits have been established via experimentation. |
202 | * The two things to balance is latency against fairness - | 206 | * The two things to balance is latency against fairness - |
@@ -204,6 +208,7 @@ EXPORT_SYMBOL(local_bh_enable_ip); | |||
204 | * should not be able to lock up the box. | 208 | * should not be able to lock up the box. |
205 | */ | 209 | */ |
206 | #define MAX_SOFTIRQ_TIME msecs_to_jiffies(2) | 210 | #define MAX_SOFTIRQ_TIME msecs_to_jiffies(2) |
211 | #define MAX_SOFTIRQ_RESTART 10 | ||
207 | 212 | ||
208 | asmlinkage void __do_softirq(void) | 213 | asmlinkage void __do_softirq(void) |
209 | { | 214 | { |
@@ -212,6 +217,7 @@ asmlinkage void __do_softirq(void) | |||
212 | unsigned long end = jiffies + MAX_SOFTIRQ_TIME; | 217 | unsigned long end = jiffies + MAX_SOFTIRQ_TIME; |
213 | int cpu; | 218 | int cpu; |
214 | unsigned long old_flags = current->flags; | 219 | unsigned long old_flags = current->flags; |
220 | int max_restart = MAX_SOFTIRQ_RESTART; | ||
215 | 221 | ||
216 | /* | 222 | /* |
217 | * Mask out PF_MEMALLOC s current task context is borrowed for the | 223 | * Mask out PF_MEMALLOC s current task context is borrowed for the |
@@ -265,7 +271,8 @@ restart: | |||
265 | 271 | ||
266 | pending = local_softirq_pending(); | 272 | pending = local_softirq_pending(); |
267 | if (pending) { | 273 | if (pending) { |
268 | if (time_before(jiffies, end) && !need_resched()) | 274 | if (time_before(jiffies, end) && !need_resched() && |
275 | --max_restart) | ||
269 | goto restart; | 276 | goto restart; |
270 | 277 | ||
271 | wakeup_softirqd(); | 278 | wakeup_softirqd(); |
diff --git a/kernel/sys.c b/kernel/sys.c index b95d3c72ba21..2bbd9a73b54c 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -362,6 +362,29 @@ int unregister_reboot_notifier(struct notifier_block *nb) | |||
362 | } | 362 | } |
363 | EXPORT_SYMBOL(unregister_reboot_notifier); | 363 | EXPORT_SYMBOL(unregister_reboot_notifier); |
364 | 364 | ||
365 | /* Add backwards compatibility for stable trees. */ | ||
366 | #ifndef PF_NO_SETAFFINITY | ||
367 | #define PF_NO_SETAFFINITY PF_THREAD_BOUND | ||
368 | #endif | ||
369 | |||
370 | static void migrate_to_reboot_cpu(void) | ||
371 | { | ||
372 | /* The boot cpu is always logical cpu 0 */ | ||
373 | int cpu = 0; | ||
374 | |||
375 | cpu_hotplug_disable(); | ||
376 | |||
377 | /* Make certain the cpu I'm about to reboot on is online */ | ||
378 | if (!cpu_online(cpu)) | ||
379 | cpu = cpumask_first(cpu_online_mask); | ||
380 | |||
381 | /* Prevent races with other tasks migrating this task */ | ||
382 | current->flags |= PF_NO_SETAFFINITY; | ||
383 | |||
384 | /* Make certain I only run on the appropriate processor */ | ||
385 | set_cpus_allowed_ptr(current, cpumask_of(cpu)); | ||
386 | } | ||
387 | |||
365 | /** | 388 | /** |
366 | * kernel_restart - reboot the system | 389 | * kernel_restart - reboot the system |
367 | * @cmd: pointer to buffer containing command to execute for restart | 390 | * @cmd: pointer to buffer containing command to execute for restart |
@@ -373,7 +396,7 @@ EXPORT_SYMBOL(unregister_reboot_notifier); | |||
373 | void kernel_restart(char *cmd) | 396 | void kernel_restart(char *cmd) |
374 | { | 397 | { |
375 | kernel_restart_prepare(cmd); | 398 | kernel_restart_prepare(cmd); |
376 | disable_nonboot_cpus(); | 399 | migrate_to_reboot_cpu(); |
377 | syscore_shutdown(); | 400 | syscore_shutdown(); |
378 | if (!cmd) | 401 | if (!cmd) |
379 | printk(KERN_EMERG "Restarting system.\n"); | 402 | printk(KERN_EMERG "Restarting system.\n"); |
@@ -400,7 +423,7 @@ static void kernel_shutdown_prepare(enum system_states state) | |||
400 | void kernel_halt(void) | 423 | void kernel_halt(void) |
401 | { | 424 | { |
402 | kernel_shutdown_prepare(SYSTEM_HALT); | 425 | kernel_shutdown_prepare(SYSTEM_HALT); |
403 | disable_nonboot_cpus(); | 426 | migrate_to_reboot_cpu(); |
404 | syscore_shutdown(); | 427 | syscore_shutdown(); |
405 | printk(KERN_EMERG "System halted.\n"); | 428 | printk(KERN_EMERG "System halted.\n"); |
406 | kmsg_dump(KMSG_DUMP_HALT); | 429 | kmsg_dump(KMSG_DUMP_HALT); |
@@ -419,7 +442,7 @@ void kernel_power_off(void) | |||
419 | kernel_shutdown_prepare(SYSTEM_POWER_OFF); | 442 | kernel_shutdown_prepare(SYSTEM_POWER_OFF); |
420 | if (pm_power_off_prepare) | 443 | if (pm_power_off_prepare) |
421 | pm_power_off_prepare(); | 444 | pm_power_off_prepare(); |
422 | disable_nonboot_cpus(); | 445 | migrate_to_reboot_cpu(); |
423 | syscore_shutdown(); | 446 | syscore_shutdown(); |
424 | printk(KERN_EMERG "Power down.\n"); | 447 | printk(KERN_EMERG "Power down.\n"); |
425 | kmsg_dump(KMSG_DUMP_POWEROFF); | 448 | kmsg_dump(KMSG_DUMP_POWEROFF); |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 1a41023a1f88..e71a8be4a6ee 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -652,8 +652,6 @@ static struct { | |||
652 | ARCH_TRACE_CLOCKS | 652 | ARCH_TRACE_CLOCKS |
653 | }; | 653 | }; |
654 | 654 | ||
655 | int trace_clock_id; | ||
656 | |||
657 | /* | 655 | /* |
658 | * trace_parser_get_init - gets the buffer for trace parser | 656 | * trace_parser_get_init - gets the buffer for trace parser |
659 | */ | 657 | */ |
@@ -2826,7 +2824,7 @@ __tracing_open(struct inode *inode, struct file *file, bool snapshot) | |||
2826 | iter->iter_flags |= TRACE_FILE_ANNOTATE; | 2824 | iter->iter_flags |= TRACE_FILE_ANNOTATE; |
2827 | 2825 | ||
2828 | /* Output in nanoseconds only if we are using a clock in nanoseconds. */ | 2826 | /* Output in nanoseconds only if we are using a clock in nanoseconds. */ |
2829 | if (trace_clocks[trace_clock_id].in_ns) | 2827 | if (trace_clocks[tr->clock_id].in_ns) |
2830 | iter->iter_flags |= TRACE_FILE_TIME_IN_NS; | 2828 | iter->iter_flags |= TRACE_FILE_TIME_IN_NS; |
2831 | 2829 | ||
2832 | /* stop the trace while dumping if we are not opening "snapshot" */ | 2830 | /* stop the trace while dumping if we are not opening "snapshot" */ |
@@ -3825,7 +3823,7 @@ static int tracing_open_pipe(struct inode *inode, struct file *filp) | |||
3825 | iter->iter_flags |= TRACE_FILE_LAT_FMT; | 3823 | iter->iter_flags |= TRACE_FILE_LAT_FMT; |
3826 | 3824 | ||
3827 | /* Output in nanoseconds only if we are using a clock in nanoseconds. */ | 3825 | /* Output in nanoseconds only if we are using a clock in nanoseconds. */ |
3828 | if (trace_clocks[trace_clock_id].in_ns) | 3826 | if (trace_clocks[tr->clock_id].in_ns) |
3829 | iter->iter_flags |= TRACE_FILE_TIME_IN_NS; | 3827 | iter->iter_flags |= TRACE_FILE_TIME_IN_NS; |
3830 | 3828 | ||
3831 | iter->cpu_file = tc->cpu; | 3829 | iter->cpu_file = tc->cpu; |
@@ -5095,7 +5093,7 @@ tracing_stats_read(struct file *filp, char __user *ubuf, | |||
5095 | cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu); | 5093 | cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu); |
5096 | trace_seq_printf(s, "bytes: %ld\n", cnt); | 5094 | trace_seq_printf(s, "bytes: %ld\n", cnt); |
5097 | 5095 | ||
5098 | if (trace_clocks[trace_clock_id].in_ns) { | 5096 | if (trace_clocks[tr->clock_id].in_ns) { |
5099 | /* local or global for trace_clock */ | 5097 | /* local or global for trace_clock */ |
5100 | t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu)); | 5098 | t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu)); |
5101 | usec_rem = do_div(t, USEC_PER_SEC); | 5099 | usec_rem = do_div(t, USEC_PER_SEC); |
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 711ca7d3e7f1..20572ed88c5c 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
@@ -700,8 +700,6 @@ enum print_line_t print_trace_line(struct trace_iterator *iter); | |||
700 | 700 | ||
701 | extern unsigned long trace_flags; | 701 | extern unsigned long trace_flags; |
702 | 702 | ||
703 | extern int trace_clock_id; | ||
704 | |||
705 | /* Standard output formatting function used for function return traces */ | 703 | /* Standard output formatting function used for function return traces */ |
706 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 704 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
707 | 705 | ||
diff --git a/lib/mpi/mpicoder.c b/lib/mpi/mpicoder.c index 5f9c44cdf1f5..4cc6442733f4 100644 --- a/lib/mpi/mpicoder.c +++ b/lib/mpi/mpicoder.c | |||
@@ -37,7 +37,7 @@ MPI mpi_read_raw_data(const void *xbuffer, size_t nbytes) | |||
37 | mpi_limb_t a; | 37 | mpi_limb_t a; |
38 | MPI val = NULL; | 38 | MPI val = NULL; |
39 | 39 | ||
40 | while (nbytes >= 0 && buffer[0] == 0) { | 40 | while (nbytes > 0 && buffer[0] == 0) { |
41 | buffer++; | 41 | buffer++; |
42 | nbytes--; | 42 | nbytes--; |
43 | } | 43 | } |
diff --git a/mm/frontswap.c b/mm/frontswap.c index 538367ef1372..1b24bdcb3197 100644 --- a/mm/frontswap.c +++ b/mm/frontswap.c | |||
@@ -319,7 +319,7 @@ void __frontswap_invalidate_area(unsigned type) | |||
319 | return; | 319 | return; |
320 | frontswap_ops->invalidate_area(type); | 320 | frontswap_ops->invalidate_area(type); |
321 | atomic_set(&sis->frontswap_pages, 0); | 321 | atomic_set(&sis->frontswap_pages, 0); |
322 | memset(sis->frontswap_map, 0, sis->max / sizeof(long)); | 322 | bitmap_zero(sis->frontswap_map, sis->max); |
323 | } | 323 | } |
324 | clear_bit(type, need_init); | 324 | clear_bit(type, need_init); |
325 | } | 325 | } |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index f8feeeca6686..e2bfbf73a551 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -2839,7 +2839,7 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | |||
2839 | if (ptep) { | 2839 | if (ptep) { |
2840 | entry = huge_ptep_get(ptep); | 2840 | entry = huge_ptep_get(ptep); |
2841 | if (unlikely(is_hugetlb_entry_migration(entry))) { | 2841 | if (unlikely(is_hugetlb_entry_migration(entry))) { |
2842 | migration_entry_wait(mm, (pmd_t *)ptep, address); | 2842 | migration_entry_wait_huge(mm, ptep); |
2843 | return 0; | 2843 | return 0; |
2844 | } else if (unlikely(is_hugetlb_entry_hwpoisoned(entry))) | 2844 | } else if (unlikely(is_hugetlb_entry_hwpoisoned(entry))) |
2845 | return VM_FAULT_HWPOISON_LARGE | | 2845 | return VM_FAULT_HWPOISON_LARGE | |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 010d6c14129a..194721839cf5 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -1199,7 +1199,6 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, | |||
1199 | 1199 | ||
1200 | mz = mem_cgroup_zoneinfo(root, nid, zid); | 1200 | mz = mem_cgroup_zoneinfo(root, nid, zid); |
1201 | iter = &mz->reclaim_iter[reclaim->priority]; | 1201 | iter = &mz->reclaim_iter[reclaim->priority]; |
1202 | last_visited = iter->last_visited; | ||
1203 | if (prev && reclaim->generation != iter->generation) { | 1202 | if (prev && reclaim->generation != iter->generation) { |
1204 | iter->last_visited = NULL; | 1203 | iter->last_visited = NULL; |
1205 | goto out_unlock; | 1204 | goto out_unlock; |
@@ -1218,13 +1217,12 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, | |||
1218 | * is alive. | 1217 | * is alive. |
1219 | */ | 1218 | */ |
1220 | dead_count = atomic_read(&root->dead_count); | 1219 | dead_count = atomic_read(&root->dead_count); |
1221 | smp_rmb(); | 1220 | if (dead_count == iter->last_dead_count) { |
1222 | last_visited = iter->last_visited; | 1221 | smp_rmb(); |
1223 | if (last_visited) { | 1222 | last_visited = iter->last_visited; |
1224 | if ((dead_count != iter->last_dead_count) || | 1223 | if (last_visited && |
1225 | !css_tryget(&last_visited->css)) { | 1224 | !css_tryget(&last_visited->css)) |
1226 | last_visited = NULL; | 1225 | last_visited = NULL; |
1227 | } | ||
1228 | } | 1226 | } |
1229 | } | 1227 | } |
1230 | 1228 | ||
@@ -3141,8 +3139,6 @@ int memcg_update_cache_size(struct kmem_cache *s, int num_groups) | |||
3141 | return -ENOMEM; | 3139 | return -ENOMEM; |
3142 | } | 3140 | } |
3143 | 3141 | ||
3144 | INIT_WORK(&s->memcg_params->destroy, | ||
3145 | kmem_cache_destroy_work_func); | ||
3146 | s->memcg_params->is_root_cache = true; | 3142 | s->memcg_params->is_root_cache = true; |
3147 | 3143 | ||
3148 | /* | 3144 | /* |
diff --git a/mm/migrate.c b/mm/migrate.c index b1f57501de9c..6f0c24438bba 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -200,15 +200,14 @@ static void remove_migration_ptes(struct page *old, struct page *new) | |||
200 | * get to the page and wait until migration is finished. | 200 | * get to the page and wait until migration is finished. |
201 | * When we return from this function the fault will be retried. | 201 | * When we return from this function the fault will be retried. |
202 | */ | 202 | */ |
203 | void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, | 203 | static void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep, |
204 | unsigned long address) | 204 | spinlock_t *ptl) |
205 | { | 205 | { |
206 | pte_t *ptep, pte; | 206 | pte_t pte; |
207 | spinlock_t *ptl; | ||
208 | swp_entry_t entry; | 207 | swp_entry_t entry; |
209 | struct page *page; | 208 | struct page *page; |
210 | 209 | ||
211 | ptep = pte_offset_map_lock(mm, pmd, address, &ptl); | 210 | spin_lock(ptl); |
212 | pte = *ptep; | 211 | pte = *ptep; |
213 | if (!is_swap_pte(pte)) | 212 | if (!is_swap_pte(pte)) |
214 | goto out; | 213 | goto out; |
@@ -236,6 +235,20 @@ out: | |||
236 | pte_unmap_unlock(ptep, ptl); | 235 | pte_unmap_unlock(ptep, ptl); |
237 | } | 236 | } |
238 | 237 | ||
238 | void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, | ||
239 | unsigned long address) | ||
240 | { | ||
241 | spinlock_t *ptl = pte_lockptr(mm, pmd); | ||
242 | pte_t *ptep = pte_offset_map(pmd, address); | ||
243 | __migration_entry_wait(mm, ptep, ptl); | ||
244 | } | ||
245 | |||
246 | void migration_entry_wait_huge(struct mm_struct *mm, pte_t *pte) | ||
247 | { | ||
248 | spinlock_t *ptl = &(mm)->page_table_lock; | ||
249 | __migration_entry_wait(mm, pte, ptl); | ||
250 | } | ||
251 | |||
239 | #ifdef CONFIG_BLOCK | 252 | #ifdef CONFIG_BLOCK |
240 | /* Returns true if all buffers are successfully locked */ | 253 | /* Returns true if all buffers are successfully locked */ |
241 | static bool buffer_migrate_lock_buffers(struct buffer_head *head, | 254 | static bool buffer_migrate_lock_buffers(struct buffer_head *head, |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 378a15bcd649..c3edb624fccf 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -1628,6 +1628,7 @@ static bool __zone_watermark_ok(struct zone *z, int order, unsigned long mark, | |||
1628 | long min = mark; | 1628 | long min = mark; |
1629 | long lowmem_reserve = z->lowmem_reserve[classzone_idx]; | 1629 | long lowmem_reserve = z->lowmem_reserve[classzone_idx]; |
1630 | int o; | 1630 | int o; |
1631 | long free_cma = 0; | ||
1631 | 1632 | ||
1632 | free_pages -= (1 << order) - 1; | 1633 | free_pages -= (1 << order) - 1; |
1633 | if (alloc_flags & ALLOC_HIGH) | 1634 | if (alloc_flags & ALLOC_HIGH) |
@@ -1637,9 +1638,10 @@ static bool __zone_watermark_ok(struct zone *z, int order, unsigned long mark, | |||
1637 | #ifdef CONFIG_CMA | 1638 | #ifdef CONFIG_CMA |
1638 | /* If allocation can't use CMA areas don't use free CMA pages */ | 1639 | /* If allocation can't use CMA areas don't use free CMA pages */ |
1639 | if (!(alloc_flags & ALLOC_CMA)) | 1640 | if (!(alloc_flags & ALLOC_CMA)) |
1640 | free_pages -= zone_page_state(z, NR_FREE_CMA_PAGES); | 1641 | free_cma = zone_page_state(z, NR_FREE_CMA_PAGES); |
1641 | #endif | 1642 | #endif |
1642 | if (free_pages <= min + lowmem_reserve) | 1643 | |
1644 | if (free_pages - free_cma <= min + lowmem_reserve) | ||
1643 | return false; | 1645 | return false; |
1644 | for (o = 0; o < order; o++) { | 1646 | for (o = 0; o < order; o++) { |
1645 | /* At the next order, this order's pages become unavailable */ | 1647 | /* At the next order, this order's pages become unavailable */ |
diff --git a/mm/swap_state.c b/mm/swap_state.c index b3d40dcf3624..f24ab0dff554 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c | |||
@@ -336,8 +336,24 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, | |||
336 | * Swap entry may have been freed since our caller observed it. | 336 | * Swap entry may have been freed since our caller observed it. |
337 | */ | 337 | */ |
338 | err = swapcache_prepare(entry); | 338 | err = swapcache_prepare(entry); |
339 | if (err == -EEXIST) { /* seems racy */ | 339 | if (err == -EEXIST) { |
340 | radix_tree_preload_end(); | 340 | radix_tree_preload_end(); |
341 | /* | ||
342 | * We might race against get_swap_page() and stumble | ||
343 | * across a SWAP_HAS_CACHE swap_map entry whose page | ||
344 | * has not been brought into the swapcache yet, while | ||
345 | * the other end is scheduled away waiting on discard | ||
346 | * I/O completion at scan_swap_map(). | ||
347 | * | ||
348 | * In order to avoid turning this transitory state | ||
349 | * into a permanent loop around this -EEXIST case | ||
350 | * if !CONFIG_PREEMPT and the I/O completion happens | ||
351 | * to be waiting on the CPU waitqueue where we are now | ||
352 | * busy looping, we just conditionally invoke the | ||
353 | * scheduler here, if there are some more important | ||
354 | * tasks to run. | ||
355 | */ | ||
356 | cond_resched(); | ||
341 | continue; | 357 | continue; |
342 | } | 358 | } |
343 | if (err) { /* swp entry is obsolete ? */ | 359 | if (err) { /* swp entry is obsolete ? */ |
diff --git a/mm/swapfile.c b/mm/swapfile.c index 6c340d908b27..746af55b8455 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c | |||
@@ -2116,7 +2116,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) | |||
2116 | } | 2116 | } |
2117 | /* frontswap enabled? set up bit-per-page map for frontswap */ | 2117 | /* frontswap enabled? set up bit-per-page map for frontswap */ |
2118 | if (frontswap_enabled) | 2118 | if (frontswap_enabled) |
2119 | frontswap_map = vzalloc(maxpages / sizeof(long)); | 2119 | frontswap_map = vzalloc(BITS_TO_LONGS(maxpages) * sizeof(long)); |
2120 | 2120 | ||
2121 | if (p->bdev) { | 2121 | if (p->bdev) { |
2122 | if (blk_queue_nonrot(bdev_get_queue(p->bdev))) { | 2122 | if (blk_queue_nonrot(bdev_get_queue(p->bdev))) { |
diff --git a/net/9p/client.c b/net/9p/client.c index 8eb75425e6e6..addc116cecf0 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
@@ -562,36 +562,19 @@ static int p9_check_zc_errors(struct p9_client *c, struct p9_req_t *req, | |||
562 | 562 | ||
563 | if (!p9_is_proto_dotl(c)) { | 563 | if (!p9_is_proto_dotl(c)) { |
564 | /* Error is reported in string format */ | 564 | /* Error is reported in string format */ |
565 | uint16_t len; | 565 | int len; |
566 | /* 7 = header size for RERROR, 2 is the size of string len; */ | 566 | /* 7 = header size for RERROR; */ |
567 | int inline_len = in_hdrlen - (7 + 2); | 567 | int inline_len = in_hdrlen - 7; |
568 | 568 | ||
569 | /* Read the size of error string */ | 569 | len = req->rc->size - req->rc->offset; |
570 | err = p9pdu_readf(req->rc, c->proto_version, "w", &len); | 570 | if (len > (P9_ZC_HDR_SZ - 7)) { |
571 | if (err) | 571 | err = -EFAULT; |
572 | goto out_err; | ||
573 | |||
574 | ename = kmalloc(len + 1, GFP_NOFS); | ||
575 | if (!ename) { | ||
576 | err = -ENOMEM; | ||
577 | goto out_err; | 572 | goto out_err; |
578 | } | 573 | } |
579 | if (len <= inline_len) { | ||
580 | /* We have error in protocol buffer itself */ | ||
581 | if (pdu_read(req->rc, ename, len)) { | ||
582 | err = -EFAULT; | ||
583 | goto out_free; | ||
584 | 574 | ||
585 | } | 575 | ename = &req->rc->sdata[req->rc->offset]; |
586 | } else { | 576 | if (len > inline_len) { |
587 | /* | 577 | /* We have error in external buffer */ |
588 | * Part of the data is in user space buffer. | ||
589 | */ | ||
590 | if (pdu_read(req->rc, ename, inline_len)) { | ||
591 | err = -EFAULT; | ||
592 | goto out_free; | ||
593 | |||
594 | } | ||
595 | if (kern_buf) { | 578 | if (kern_buf) { |
596 | memcpy(ename + inline_len, uidata, | 579 | memcpy(ename + inline_len, uidata, |
597 | len - inline_len); | 580 | len - inline_len); |
@@ -600,19 +583,19 @@ static int p9_check_zc_errors(struct p9_client *c, struct p9_req_t *req, | |||
600 | uidata, len - inline_len); | 583 | uidata, len - inline_len); |
601 | if (err) { | 584 | if (err) { |
602 | err = -EFAULT; | 585 | err = -EFAULT; |
603 | goto out_free; | 586 | goto out_err; |
604 | } | 587 | } |
605 | } | 588 | } |
606 | } | 589 | } |
607 | ename[len] = 0; | 590 | ename = NULL; |
608 | if (p9_is_proto_dotu(c)) { | 591 | err = p9pdu_readf(req->rc, c->proto_version, "s?d", |
609 | /* For dotu we also have error code */ | 592 | &ename, &ecode); |
610 | err = p9pdu_readf(req->rc, | 593 | if (err) |
611 | c->proto_version, "d", &ecode); | 594 | goto out_err; |
612 | if (err) | 595 | |
613 | goto out_free; | 596 | if (p9_is_proto_dotu(c)) |
614 | err = -ecode; | 597 | err = -ecode; |
615 | } | 598 | |
616 | if (!err || !IS_ERR_VALUE(err)) { | 599 | if (!err || !IS_ERR_VALUE(err)) { |
617 | err = p9_errstr2errno(ename, strlen(ename)); | 600 | err = p9_errstr2errno(ename, strlen(ename)); |
618 | 601 | ||
@@ -628,8 +611,6 @@ static int p9_check_zc_errors(struct p9_client *c, struct p9_req_t *req, | |||
628 | } | 611 | } |
629 | return err; | 612 | return err; |
630 | 613 | ||
631 | out_free: | ||
632 | kfree(ename); | ||
633 | out_err: | 614 | out_err: |
634 | p9_debug(P9_DEBUG_ERROR, "couldn't parse error%d\n", err); | 615 | p9_debug(P9_DEBUG_ERROR, "couldn't parse error%d\n", err); |
635 | return err; | 616 | return err; |
diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c index 071f288b77a8..f680ee101878 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c | |||
@@ -29,6 +29,21 @@ | |||
29 | #include "bat_algo.h" | 29 | #include "bat_algo.h" |
30 | #include "network-coding.h" | 30 | #include "network-coding.h" |
31 | 31 | ||
32 | /** | ||
33 | * batadv_dup_status - duplicate status | ||
34 | * @BATADV_NO_DUP: the packet is a duplicate | ||
35 | * @BATADV_ORIG_DUP: OGM is a duplicate in the originator (but not for the | ||
36 | * neighbor) | ||
37 | * @BATADV_NEIGH_DUP: OGM is a duplicate for the neighbor | ||
38 | * @BATADV_PROTECTED: originator is currently protected (after reboot) | ||
39 | */ | ||
40 | enum batadv_dup_status { | ||
41 | BATADV_NO_DUP = 0, | ||
42 | BATADV_ORIG_DUP, | ||
43 | BATADV_NEIGH_DUP, | ||
44 | BATADV_PROTECTED, | ||
45 | }; | ||
46 | |||
32 | static struct batadv_neigh_node * | 47 | static struct batadv_neigh_node * |
33 | batadv_iv_ogm_neigh_new(struct batadv_hard_iface *hard_iface, | 48 | batadv_iv_ogm_neigh_new(struct batadv_hard_iface *hard_iface, |
34 | const uint8_t *neigh_addr, | 49 | const uint8_t *neigh_addr, |
@@ -650,7 +665,7 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv, | |||
650 | const struct batadv_ogm_packet *batadv_ogm_packet, | 665 | const struct batadv_ogm_packet *batadv_ogm_packet, |
651 | struct batadv_hard_iface *if_incoming, | 666 | struct batadv_hard_iface *if_incoming, |
652 | const unsigned char *tt_buff, | 667 | const unsigned char *tt_buff, |
653 | int is_duplicate) | 668 | enum batadv_dup_status dup_status) |
654 | { | 669 | { |
655 | struct batadv_neigh_node *neigh_node = NULL, *tmp_neigh_node = NULL; | 670 | struct batadv_neigh_node *neigh_node = NULL, *tmp_neigh_node = NULL; |
656 | struct batadv_neigh_node *router = NULL; | 671 | struct batadv_neigh_node *router = NULL; |
@@ -676,7 +691,7 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv, | |||
676 | continue; | 691 | continue; |
677 | } | 692 | } |
678 | 693 | ||
679 | if (is_duplicate) | 694 | if (dup_status != BATADV_NO_DUP) |
680 | continue; | 695 | continue; |
681 | 696 | ||
682 | spin_lock_bh(&tmp_neigh_node->lq_update_lock); | 697 | spin_lock_bh(&tmp_neigh_node->lq_update_lock); |
@@ -718,7 +733,7 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv, | |||
718 | neigh_node->tq_avg = batadv_ring_buffer_avg(neigh_node->tq_recv); | 733 | neigh_node->tq_avg = batadv_ring_buffer_avg(neigh_node->tq_recv); |
719 | spin_unlock_bh(&neigh_node->lq_update_lock); | 734 | spin_unlock_bh(&neigh_node->lq_update_lock); |
720 | 735 | ||
721 | if (!is_duplicate) { | 736 | if (dup_status == BATADV_NO_DUP) { |
722 | orig_node->last_ttl = batadv_ogm_packet->header.ttl; | 737 | orig_node->last_ttl = batadv_ogm_packet->header.ttl; |
723 | neigh_node->last_ttl = batadv_ogm_packet->header.ttl; | 738 | neigh_node->last_ttl = batadv_ogm_packet->header.ttl; |
724 | } | 739 | } |
@@ -902,15 +917,16 @@ out: | |||
902 | return ret; | 917 | return ret; |
903 | } | 918 | } |
904 | 919 | ||
905 | /* processes a batman packet for all interfaces, adjusts the sequence number and | 920 | /** |
906 | * finds out whether it is a duplicate. | 921 | * batadv_iv_ogm_update_seqnos - process a batman packet for all interfaces, |
907 | * returns: | 922 | * adjust the sequence number and find out whether it is a duplicate |
908 | * 1 the packet is a duplicate | 923 | * @ethhdr: ethernet header of the packet |
909 | * 0 the packet has not yet been received | 924 | * @batadv_ogm_packet: OGM packet to be considered |
910 | * -1 the packet is old and has been received while the seqno window | 925 | * @if_incoming: interface on which the OGM packet was received |
911 | * was protected. Caller should drop it. | 926 | * |
927 | * Returns duplicate status as enum batadv_dup_status | ||
912 | */ | 928 | */ |
913 | static int | 929 | static enum batadv_dup_status |
914 | batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr, | 930 | batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr, |
915 | const struct batadv_ogm_packet *batadv_ogm_packet, | 931 | const struct batadv_ogm_packet *batadv_ogm_packet, |
916 | const struct batadv_hard_iface *if_incoming) | 932 | const struct batadv_hard_iface *if_incoming) |
@@ -918,17 +934,18 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr, | |||
918 | struct batadv_priv *bat_priv = netdev_priv(if_incoming->soft_iface); | 934 | struct batadv_priv *bat_priv = netdev_priv(if_incoming->soft_iface); |
919 | struct batadv_orig_node *orig_node; | 935 | struct batadv_orig_node *orig_node; |
920 | struct batadv_neigh_node *tmp_neigh_node; | 936 | struct batadv_neigh_node *tmp_neigh_node; |
921 | int is_duplicate = 0; | 937 | int is_dup; |
922 | int32_t seq_diff; | 938 | int32_t seq_diff; |
923 | int need_update = 0; | 939 | int need_update = 0; |
924 | int set_mark, ret = -1; | 940 | int set_mark; |
941 | enum batadv_dup_status ret = BATADV_NO_DUP; | ||
925 | uint32_t seqno = ntohl(batadv_ogm_packet->seqno); | 942 | uint32_t seqno = ntohl(batadv_ogm_packet->seqno); |
926 | uint8_t *neigh_addr; | 943 | uint8_t *neigh_addr; |
927 | uint8_t packet_count; | 944 | uint8_t packet_count; |
928 | 945 | ||
929 | orig_node = batadv_get_orig_node(bat_priv, batadv_ogm_packet->orig); | 946 | orig_node = batadv_get_orig_node(bat_priv, batadv_ogm_packet->orig); |
930 | if (!orig_node) | 947 | if (!orig_node) |
931 | return 0; | 948 | return BATADV_NO_DUP; |
932 | 949 | ||
933 | spin_lock_bh(&orig_node->ogm_cnt_lock); | 950 | spin_lock_bh(&orig_node->ogm_cnt_lock); |
934 | seq_diff = seqno - orig_node->last_real_seqno; | 951 | seq_diff = seqno - orig_node->last_real_seqno; |
@@ -936,22 +953,29 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr, | |||
936 | /* signalize caller that the packet is to be dropped. */ | 953 | /* signalize caller that the packet is to be dropped. */ |
937 | if (!hlist_empty(&orig_node->neigh_list) && | 954 | if (!hlist_empty(&orig_node->neigh_list) && |
938 | batadv_window_protected(bat_priv, seq_diff, | 955 | batadv_window_protected(bat_priv, seq_diff, |
939 | &orig_node->batman_seqno_reset)) | 956 | &orig_node->batman_seqno_reset)) { |
957 | ret = BATADV_PROTECTED; | ||
940 | goto out; | 958 | goto out; |
959 | } | ||
941 | 960 | ||
942 | rcu_read_lock(); | 961 | rcu_read_lock(); |
943 | hlist_for_each_entry_rcu(tmp_neigh_node, | 962 | hlist_for_each_entry_rcu(tmp_neigh_node, |
944 | &orig_node->neigh_list, list) { | 963 | &orig_node->neigh_list, list) { |
945 | is_duplicate |= batadv_test_bit(tmp_neigh_node->real_bits, | ||
946 | orig_node->last_real_seqno, | ||
947 | seqno); | ||
948 | |||
949 | neigh_addr = tmp_neigh_node->addr; | 964 | neigh_addr = tmp_neigh_node->addr; |
965 | is_dup = batadv_test_bit(tmp_neigh_node->real_bits, | ||
966 | orig_node->last_real_seqno, | ||
967 | seqno); | ||
968 | |||
950 | if (batadv_compare_eth(neigh_addr, ethhdr->h_source) && | 969 | if (batadv_compare_eth(neigh_addr, ethhdr->h_source) && |
951 | tmp_neigh_node->if_incoming == if_incoming) | 970 | tmp_neigh_node->if_incoming == if_incoming) { |
952 | set_mark = 1; | 971 | set_mark = 1; |
953 | else | 972 | if (is_dup) |
973 | ret = BATADV_NEIGH_DUP; | ||
974 | } else { | ||
954 | set_mark = 0; | 975 | set_mark = 0; |
976 | if (is_dup && (ret != BATADV_NEIGH_DUP)) | ||
977 | ret = BATADV_ORIG_DUP; | ||
978 | } | ||
955 | 979 | ||
956 | /* if the window moved, set the update flag. */ | 980 | /* if the window moved, set the update flag. */ |
957 | need_update |= batadv_bit_get_packet(bat_priv, | 981 | need_update |= batadv_bit_get_packet(bat_priv, |
@@ -971,8 +995,6 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr, | |||
971 | orig_node->last_real_seqno = seqno; | 995 | orig_node->last_real_seqno = seqno; |
972 | } | 996 | } |
973 | 997 | ||
974 | ret = is_duplicate; | ||
975 | |||
976 | out: | 998 | out: |
977 | spin_unlock_bh(&orig_node->ogm_cnt_lock); | 999 | spin_unlock_bh(&orig_node->ogm_cnt_lock); |
978 | batadv_orig_node_free_ref(orig_node); | 1000 | batadv_orig_node_free_ref(orig_node); |
@@ -994,7 +1016,8 @@ static void batadv_iv_ogm_process(const struct ethhdr *ethhdr, | |||
994 | int is_broadcast = 0, is_bidirect; | 1016 | int is_broadcast = 0, is_bidirect; |
995 | bool is_single_hop_neigh = false; | 1017 | bool is_single_hop_neigh = false; |
996 | bool is_from_best_next_hop = false; | 1018 | bool is_from_best_next_hop = false; |
997 | int is_duplicate, sameseq, simlar_ttl; | 1019 | int sameseq, similar_ttl; |
1020 | enum batadv_dup_status dup_status; | ||
998 | uint32_t if_incoming_seqno; | 1021 | uint32_t if_incoming_seqno; |
999 | uint8_t *prev_sender; | 1022 | uint8_t *prev_sender; |
1000 | 1023 | ||
@@ -1138,10 +1161,10 @@ static void batadv_iv_ogm_process(const struct ethhdr *ethhdr, | |||
1138 | if (!orig_node) | 1161 | if (!orig_node) |
1139 | return; | 1162 | return; |
1140 | 1163 | ||
1141 | is_duplicate = batadv_iv_ogm_update_seqnos(ethhdr, batadv_ogm_packet, | 1164 | dup_status = batadv_iv_ogm_update_seqnos(ethhdr, batadv_ogm_packet, |
1142 | if_incoming); | 1165 | if_incoming); |
1143 | 1166 | ||
1144 | if (is_duplicate == -1) { | 1167 | if (dup_status == BATADV_PROTECTED) { |
1145 | batadv_dbg(BATADV_DBG_BATMAN, bat_priv, | 1168 | batadv_dbg(BATADV_DBG_BATMAN, bat_priv, |
1146 | "Drop packet: packet within seqno protection time (sender: %pM)\n", | 1169 | "Drop packet: packet within seqno protection time (sender: %pM)\n", |
1147 | ethhdr->h_source); | 1170 | ethhdr->h_source); |
@@ -1211,11 +1234,12 @@ static void batadv_iv_ogm_process(const struct ethhdr *ethhdr, | |||
1211 | * seqno and similar ttl as the non-duplicate | 1234 | * seqno and similar ttl as the non-duplicate |
1212 | */ | 1235 | */ |
1213 | sameseq = orig_node->last_real_seqno == ntohl(batadv_ogm_packet->seqno); | 1236 | sameseq = orig_node->last_real_seqno == ntohl(batadv_ogm_packet->seqno); |
1214 | simlar_ttl = orig_node->last_ttl - 3 <= batadv_ogm_packet->header.ttl; | 1237 | similar_ttl = orig_node->last_ttl - 3 <= batadv_ogm_packet->header.ttl; |
1215 | if (is_bidirect && (!is_duplicate || (sameseq && simlar_ttl))) | 1238 | if (is_bidirect && ((dup_status == BATADV_NO_DUP) || |
1239 | (sameseq && similar_ttl))) | ||
1216 | batadv_iv_ogm_orig_update(bat_priv, orig_node, ethhdr, | 1240 | batadv_iv_ogm_orig_update(bat_priv, orig_node, ethhdr, |
1217 | batadv_ogm_packet, if_incoming, | 1241 | batadv_ogm_packet, if_incoming, |
1218 | tt_buff, is_duplicate); | 1242 | tt_buff, dup_status); |
1219 | 1243 | ||
1220 | /* is single hop (direct) neighbor */ | 1244 | /* is single hop (direct) neighbor */ |
1221 | if (is_single_hop_neigh) { | 1245 | if (is_single_hop_neigh) { |
@@ -1236,7 +1260,7 @@ static void batadv_iv_ogm_process(const struct ethhdr *ethhdr, | |||
1236 | goto out_neigh; | 1260 | goto out_neigh; |
1237 | } | 1261 | } |
1238 | 1262 | ||
1239 | if (is_duplicate) { | 1263 | if (dup_status == BATADV_NEIGH_DUP) { |
1240 | batadv_dbg(BATADV_DBG_BATMAN, bat_priv, | 1264 | batadv_dbg(BATADV_DBG_BATMAN, bat_priv, |
1241 | "Drop packet: duplicate packet received\n"); | 1265 | "Drop packet: duplicate packet received\n"); |
1242 | goto out_neigh; | 1266 | goto out_neigh; |
diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c index 379061c72549..de27b3175cfd 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c | |||
@@ -1067,6 +1067,10 @@ void batadv_bla_update_orig_address(struct batadv_priv *bat_priv, | |||
1067 | group = htons(crc16(0, primary_if->net_dev->dev_addr, ETH_ALEN)); | 1067 | group = htons(crc16(0, primary_if->net_dev->dev_addr, ETH_ALEN)); |
1068 | bat_priv->bla.claim_dest.group = group; | 1068 | bat_priv->bla.claim_dest.group = group; |
1069 | 1069 | ||
1070 | /* purge everything when bridge loop avoidance is turned off */ | ||
1071 | if (!atomic_read(&bat_priv->bridge_loop_avoidance)) | ||
1072 | oldif = NULL; | ||
1073 | |||
1070 | if (!oldif) { | 1074 | if (!oldif) { |
1071 | batadv_bla_purge_claims(bat_priv, NULL, 1); | 1075 | batadv_bla_purge_claims(bat_priv, NULL, 1); |
1072 | batadv_bla_purge_backbone_gw(bat_priv, 1); | 1076 | batadv_bla_purge_backbone_gw(bat_priv, 1); |
diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c index 15a22efa9a67..929e304dacb2 100644 --- a/net/batman-adv/sysfs.c +++ b/net/batman-adv/sysfs.c | |||
@@ -582,10 +582,7 @@ static ssize_t batadv_store_mesh_iface(struct kobject *kobj, | |||
582 | (strncmp(hard_iface->soft_iface->name, buff, IFNAMSIZ) == 0)) | 582 | (strncmp(hard_iface->soft_iface->name, buff, IFNAMSIZ) == 0)) |
583 | goto out; | 583 | goto out; |
584 | 584 | ||
585 | if (!rtnl_trylock()) { | 585 | rtnl_lock(); |
586 | ret = -ERESTARTSYS; | ||
587 | goto out; | ||
588 | } | ||
589 | 586 | ||
590 | if (status_tmp == BATADV_IF_NOT_IN_USE) { | 587 | if (status_tmp == BATADV_IF_NOT_IN_USE) { |
591 | batadv_hardif_disable_interface(hard_iface, | 588 | batadv_hardif_disable_interface(hard_iface, |
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 33843c5c4939..d817c932d634 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
@@ -1555,11 +1555,15 @@ static const struct rfkill_ops hci_rfkill_ops = { | |||
1555 | static void hci_power_on(struct work_struct *work) | 1555 | static void hci_power_on(struct work_struct *work) |
1556 | { | 1556 | { |
1557 | struct hci_dev *hdev = container_of(work, struct hci_dev, power_on); | 1557 | struct hci_dev *hdev = container_of(work, struct hci_dev, power_on); |
1558 | int err; | ||
1558 | 1559 | ||
1559 | BT_DBG("%s", hdev->name); | 1560 | BT_DBG("%s", hdev->name); |
1560 | 1561 | ||
1561 | if (hci_dev_open(hdev->id) < 0) | 1562 | err = hci_dev_open(hdev->id); |
1563 | if (err < 0) { | ||
1564 | mgmt_set_powered_failed(hdev, err); | ||
1562 | return; | 1565 | return; |
1566 | } | ||
1563 | 1567 | ||
1564 | if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) | 1568 | if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) |
1565 | queue_delayed_work(hdev->req_workqueue, &hdev->power_off, | 1569 | queue_delayed_work(hdev->req_workqueue, &hdev->power_off, |
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index a76d1ac0321b..24bee07ee4ce 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -3677,10 +3677,14 @@ static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len) | |||
3677 | } | 3677 | } |
3678 | 3678 | ||
3679 | static inline int l2cap_command_rej(struct l2cap_conn *conn, | 3679 | static inline int l2cap_command_rej(struct l2cap_conn *conn, |
3680 | struct l2cap_cmd_hdr *cmd, u8 *data) | 3680 | struct l2cap_cmd_hdr *cmd, u16 cmd_len, |
3681 | u8 *data) | ||
3681 | { | 3682 | { |
3682 | struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data; | 3683 | struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data; |
3683 | 3684 | ||
3685 | if (cmd_len < sizeof(*rej)) | ||
3686 | return -EPROTO; | ||
3687 | |||
3684 | if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD) | 3688 | if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD) |
3685 | return 0; | 3689 | return 0; |
3686 | 3690 | ||
@@ -3829,11 +3833,14 @@ sendresp: | |||
3829 | } | 3833 | } |
3830 | 3834 | ||
3831 | static int l2cap_connect_req(struct l2cap_conn *conn, | 3835 | static int l2cap_connect_req(struct l2cap_conn *conn, |
3832 | struct l2cap_cmd_hdr *cmd, u8 *data) | 3836 | struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data) |
3833 | { | 3837 | { |
3834 | struct hci_dev *hdev = conn->hcon->hdev; | 3838 | struct hci_dev *hdev = conn->hcon->hdev; |
3835 | struct hci_conn *hcon = conn->hcon; | 3839 | struct hci_conn *hcon = conn->hcon; |
3836 | 3840 | ||
3841 | if (cmd_len < sizeof(struct l2cap_conn_req)) | ||
3842 | return -EPROTO; | ||
3843 | |||
3837 | hci_dev_lock(hdev); | 3844 | hci_dev_lock(hdev); |
3838 | if (test_bit(HCI_MGMT, &hdev->dev_flags) && | 3845 | if (test_bit(HCI_MGMT, &hdev->dev_flags) && |
3839 | !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags)) | 3846 | !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags)) |
@@ -3847,7 +3854,8 @@ static int l2cap_connect_req(struct l2cap_conn *conn, | |||
3847 | } | 3854 | } |
3848 | 3855 | ||
3849 | static int l2cap_connect_create_rsp(struct l2cap_conn *conn, | 3856 | static int l2cap_connect_create_rsp(struct l2cap_conn *conn, |
3850 | struct l2cap_cmd_hdr *cmd, u8 *data) | 3857 | struct l2cap_cmd_hdr *cmd, u16 cmd_len, |
3858 | u8 *data) | ||
3851 | { | 3859 | { |
3852 | struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data; | 3860 | struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data; |
3853 | u16 scid, dcid, result, status; | 3861 | u16 scid, dcid, result, status; |
@@ -3855,6 +3863,9 @@ static int l2cap_connect_create_rsp(struct l2cap_conn *conn, | |||
3855 | u8 req[128]; | 3863 | u8 req[128]; |
3856 | int err; | 3864 | int err; |
3857 | 3865 | ||
3866 | if (cmd_len < sizeof(*rsp)) | ||
3867 | return -EPROTO; | ||
3868 | |||
3858 | scid = __le16_to_cpu(rsp->scid); | 3869 | scid = __le16_to_cpu(rsp->scid); |
3859 | dcid = __le16_to_cpu(rsp->dcid); | 3870 | dcid = __le16_to_cpu(rsp->dcid); |
3860 | result = __le16_to_cpu(rsp->result); | 3871 | result = __le16_to_cpu(rsp->result); |
@@ -3952,6 +3963,9 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, | |||
3952 | struct l2cap_chan *chan; | 3963 | struct l2cap_chan *chan; |
3953 | int len, err = 0; | 3964 | int len, err = 0; |
3954 | 3965 | ||
3966 | if (cmd_len < sizeof(*req)) | ||
3967 | return -EPROTO; | ||
3968 | |||
3955 | dcid = __le16_to_cpu(req->dcid); | 3969 | dcid = __le16_to_cpu(req->dcid); |
3956 | flags = __le16_to_cpu(req->flags); | 3970 | flags = __le16_to_cpu(req->flags); |
3957 | 3971 | ||
@@ -3975,7 +3989,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, | |||
3975 | 3989 | ||
3976 | /* Reject if config buffer is too small. */ | 3990 | /* Reject if config buffer is too small. */ |
3977 | len = cmd_len - sizeof(*req); | 3991 | len = cmd_len - sizeof(*req); |
3978 | if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) { | 3992 | if (chan->conf_len + len > sizeof(chan->conf_req)) { |
3979 | l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, | 3993 | l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, |
3980 | l2cap_build_conf_rsp(chan, rsp, | 3994 | l2cap_build_conf_rsp(chan, rsp, |
3981 | L2CAP_CONF_REJECT, flags), rsp); | 3995 | L2CAP_CONF_REJECT, flags), rsp); |
@@ -4053,14 +4067,18 @@ unlock: | |||
4053 | } | 4067 | } |
4054 | 4068 | ||
4055 | static inline int l2cap_config_rsp(struct l2cap_conn *conn, | 4069 | static inline int l2cap_config_rsp(struct l2cap_conn *conn, |
4056 | struct l2cap_cmd_hdr *cmd, u8 *data) | 4070 | struct l2cap_cmd_hdr *cmd, u16 cmd_len, |
4071 | u8 *data) | ||
4057 | { | 4072 | { |
4058 | struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data; | 4073 | struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data; |
4059 | u16 scid, flags, result; | 4074 | u16 scid, flags, result; |
4060 | struct l2cap_chan *chan; | 4075 | struct l2cap_chan *chan; |
4061 | int len = le16_to_cpu(cmd->len) - sizeof(*rsp); | 4076 | int len = cmd_len - sizeof(*rsp); |
4062 | int err = 0; | 4077 | int err = 0; |
4063 | 4078 | ||
4079 | if (cmd_len < sizeof(*rsp)) | ||
4080 | return -EPROTO; | ||
4081 | |||
4064 | scid = __le16_to_cpu(rsp->scid); | 4082 | scid = __le16_to_cpu(rsp->scid); |
4065 | flags = __le16_to_cpu(rsp->flags); | 4083 | flags = __le16_to_cpu(rsp->flags); |
4066 | result = __le16_to_cpu(rsp->result); | 4084 | result = __le16_to_cpu(rsp->result); |
@@ -4161,7 +4179,8 @@ done: | |||
4161 | } | 4179 | } |
4162 | 4180 | ||
4163 | static inline int l2cap_disconnect_req(struct l2cap_conn *conn, | 4181 | static inline int l2cap_disconnect_req(struct l2cap_conn *conn, |
4164 | struct l2cap_cmd_hdr *cmd, u8 *data) | 4182 | struct l2cap_cmd_hdr *cmd, u16 cmd_len, |
4183 | u8 *data) | ||
4165 | { | 4184 | { |
4166 | struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data; | 4185 | struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data; |
4167 | struct l2cap_disconn_rsp rsp; | 4186 | struct l2cap_disconn_rsp rsp; |
@@ -4169,6 +4188,9 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, | |||
4169 | struct l2cap_chan *chan; | 4188 | struct l2cap_chan *chan; |
4170 | struct sock *sk; | 4189 | struct sock *sk; |
4171 | 4190 | ||
4191 | if (cmd_len != sizeof(*req)) | ||
4192 | return -EPROTO; | ||
4193 | |||
4172 | scid = __le16_to_cpu(req->scid); | 4194 | scid = __le16_to_cpu(req->scid); |
4173 | dcid = __le16_to_cpu(req->dcid); | 4195 | dcid = __le16_to_cpu(req->dcid); |
4174 | 4196 | ||
@@ -4208,12 +4230,16 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, | |||
4208 | } | 4230 | } |
4209 | 4231 | ||
4210 | static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, | 4232 | static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, |
4211 | struct l2cap_cmd_hdr *cmd, u8 *data) | 4233 | struct l2cap_cmd_hdr *cmd, u16 cmd_len, |
4234 | u8 *data) | ||
4212 | { | 4235 | { |
4213 | struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data; | 4236 | struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data; |
4214 | u16 dcid, scid; | 4237 | u16 dcid, scid; |
4215 | struct l2cap_chan *chan; | 4238 | struct l2cap_chan *chan; |
4216 | 4239 | ||
4240 | if (cmd_len != sizeof(*rsp)) | ||
4241 | return -EPROTO; | ||
4242 | |||
4217 | scid = __le16_to_cpu(rsp->scid); | 4243 | scid = __le16_to_cpu(rsp->scid); |
4218 | dcid = __le16_to_cpu(rsp->dcid); | 4244 | dcid = __le16_to_cpu(rsp->dcid); |
4219 | 4245 | ||
@@ -4243,11 +4269,15 @@ static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, | |||
4243 | } | 4269 | } |
4244 | 4270 | ||
4245 | static inline int l2cap_information_req(struct l2cap_conn *conn, | 4271 | static inline int l2cap_information_req(struct l2cap_conn *conn, |
4246 | struct l2cap_cmd_hdr *cmd, u8 *data) | 4272 | struct l2cap_cmd_hdr *cmd, u16 cmd_len, |
4273 | u8 *data) | ||
4247 | { | 4274 | { |
4248 | struct l2cap_info_req *req = (struct l2cap_info_req *) data; | 4275 | struct l2cap_info_req *req = (struct l2cap_info_req *) data; |
4249 | u16 type; | 4276 | u16 type; |
4250 | 4277 | ||
4278 | if (cmd_len != sizeof(*req)) | ||
4279 | return -EPROTO; | ||
4280 | |||
4251 | type = __le16_to_cpu(req->type); | 4281 | type = __le16_to_cpu(req->type); |
4252 | 4282 | ||
4253 | BT_DBG("type 0x%4.4x", type); | 4283 | BT_DBG("type 0x%4.4x", type); |
@@ -4294,11 +4324,15 @@ static inline int l2cap_information_req(struct l2cap_conn *conn, | |||
4294 | } | 4324 | } |
4295 | 4325 | ||
4296 | static inline int l2cap_information_rsp(struct l2cap_conn *conn, | 4326 | static inline int l2cap_information_rsp(struct l2cap_conn *conn, |
4297 | struct l2cap_cmd_hdr *cmd, u8 *data) | 4327 | struct l2cap_cmd_hdr *cmd, u16 cmd_len, |
4328 | u8 *data) | ||
4298 | { | 4329 | { |
4299 | struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data; | 4330 | struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data; |
4300 | u16 type, result; | 4331 | u16 type, result; |
4301 | 4332 | ||
4333 | if (cmd_len != sizeof(*rsp)) | ||
4334 | return -EPROTO; | ||
4335 | |||
4302 | type = __le16_to_cpu(rsp->type); | 4336 | type = __le16_to_cpu(rsp->type); |
4303 | result = __le16_to_cpu(rsp->result); | 4337 | result = __le16_to_cpu(rsp->result); |
4304 | 4338 | ||
@@ -5164,16 +5198,16 @@ static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn, | |||
5164 | 5198 | ||
5165 | switch (cmd->code) { | 5199 | switch (cmd->code) { |
5166 | case L2CAP_COMMAND_REJ: | 5200 | case L2CAP_COMMAND_REJ: |
5167 | l2cap_command_rej(conn, cmd, data); | 5201 | l2cap_command_rej(conn, cmd, cmd_len, data); |
5168 | break; | 5202 | break; |
5169 | 5203 | ||
5170 | case L2CAP_CONN_REQ: | 5204 | case L2CAP_CONN_REQ: |
5171 | err = l2cap_connect_req(conn, cmd, data); | 5205 | err = l2cap_connect_req(conn, cmd, cmd_len, data); |
5172 | break; | 5206 | break; |
5173 | 5207 | ||
5174 | case L2CAP_CONN_RSP: | 5208 | case L2CAP_CONN_RSP: |
5175 | case L2CAP_CREATE_CHAN_RSP: | 5209 | case L2CAP_CREATE_CHAN_RSP: |
5176 | err = l2cap_connect_create_rsp(conn, cmd, data); | 5210 | err = l2cap_connect_create_rsp(conn, cmd, cmd_len, data); |
5177 | break; | 5211 | break; |
5178 | 5212 | ||
5179 | case L2CAP_CONF_REQ: | 5213 | case L2CAP_CONF_REQ: |
@@ -5181,15 +5215,15 @@ static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn, | |||
5181 | break; | 5215 | break; |
5182 | 5216 | ||
5183 | case L2CAP_CONF_RSP: | 5217 | case L2CAP_CONF_RSP: |
5184 | err = l2cap_config_rsp(conn, cmd, data); | 5218 | err = l2cap_config_rsp(conn, cmd, cmd_len, data); |
5185 | break; | 5219 | break; |
5186 | 5220 | ||
5187 | case L2CAP_DISCONN_REQ: | 5221 | case L2CAP_DISCONN_REQ: |
5188 | err = l2cap_disconnect_req(conn, cmd, data); | 5222 | err = l2cap_disconnect_req(conn, cmd, cmd_len, data); |
5189 | break; | 5223 | break; |
5190 | 5224 | ||
5191 | case L2CAP_DISCONN_RSP: | 5225 | case L2CAP_DISCONN_RSP: |
5192 | err = l2cap_disconnect_rsp(conn, cmd, data); | 5226 | err = l2cap_disconnect_rsp(conn, cmd, cmd_len, data); |
5193 | break; | 5227 | break; |
5194 | 5228 | ||
5195 | case L2CAP_ECHO_REQ: | 5229 | case L2CAP_ECHO_REQ: |
@@ -5200,11 +5234,11 @@ static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn, | |||
5200 | break; | 5234 | break; |
5201 | 5235 | ||
5202 | case L2CAP_INFO_REQ: | 5236 | case L2CAP_INFO_REQ: |
5203 | err = l2cap_information_req(conn, cmd, data); | 5237 | err = l2cap_information_req(conn, cmd, cmd_len, data); |
5204 | break; | 5238 | break; |
5205 | 5239 | ||
5206 | case L2CAP_INFO_RSP: | 5240 | case L2CAP_INFO_RSP: |
5207 | err = l2cap_information_rsp(conn, cmd, data); | 5241 | err = l2cap_information_rsp(conn, cmd, cmd_len, data); |
5208 | break; | 5242 | break; |
5209 | 5243 | ||
5210 | case L2CAP_CREATE_CHAN_REQ: | 5244 | case L2CAP_CREATE_CHAN_REQ: |
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index 35fef22703e9..f8ecbc70293d 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c | |||
@@ -2700,7 +2700,7 @@ static int start_discovery(struct sock *sk, struct hci_dev *hdev, | |||
2700 | break; | 2700 | break; |
2701 | 2701 | ||
2702 | case DISCOV_TYPE_LE: | 2702 | case DISCOV_TYPE_LE: |
2703 | if (!lmp_host_le_capable(hdev)) { | 2703 | if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { |
2704 | err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY, | 2704 | err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY, |
2705 | MGMT_STATUS_NOT_SUPPORTED); | 2705 | MGMT_STATUS_NOT_SUPPORTED); |
2706 | mgmt_pending_remove(cmd); | 2706 | mgmt_pending_remove(cmd); |
@@ -3418,6 +3418,27 @@ new_settings: | |||
3418 | return err; | 3418 | return err; |
3419 | } | 3419 | } |
3420 | 3420 | ||
3421 | int mgmt_set_powered_failed(struct hci_dev *hdev, int err) | ||
3422 | { | ||
3423 | struct pending_cmd *cmd; | ||
3424 | u8 status; | ||
3425 | |||
3426 | cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev); | ||
3427 | if (!cmd) | ||
3428 | return -ENOENT; | ||
3429 | |||
3430 | if (err == -ERFKILL) | ||
3431 | status = MGMT_STATUS_RFKILLED; | ||
3432 | else | ||
3433 | status = MGMT_STATUS_FAILED; | ||
3434 | |||
3435 | err = cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status); | ||
3436 | |||
3437 | mgmt_pending_remove(cmd); | ||
3438 | |||
3439 | return err; | ||
3440 | } | ||
3441 | |||
3421 | int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable) | 3442 | int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable) |
3422 | { | 3443 | { |
3423 | struct cmd_lookup match = { NULL, hdev }; | 3444 | struct cmd_lookup match = { NULL, hdev }; |
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c index b2296d3857a0..b5562abdd6e0 100644 --- a/net/bluetooth/smp.c +++ b/net/bluetooth/smp.c | |||
@@ -770,7 +770,7 @@ int smp_conn_security(struct hci_conn *hcon, __u8 sec_level) | |||
770 | 770 | ||
771 | BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level); | 771 | BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level); |
772 | 772 | ||
773 | if (!lmp_host_le_capable(hcon->hdev)) | 773 | if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) |
774 | return 1; | 774 | return 1; |
775 | 775 | ||
776 | if (sec_level == BT_SECURITY_LOW) | 776 | if (sec_level == BT_SECURITY_LOW) |
@@ -851,7 +851,7 @@ int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb) | |||
851 | __u8 reason; | 851 | __u8 reason; |
852 | int err = 0; | 852 | int err = 0; |
853 | 853 | ||
854 | if (!lmp_host_le_capable(conn->hcon->hdev)) { | 854 | if (!test_bit(HCI_LE_ENABLED, &conn->hcon->hdev->dev_flags)) { |
855 | err = -ENOTSUPP; | 855 | err = -ENOTSUPP; |
856 | reason = SMP_PAIRING_NOTSUPP; | 856 | reason = SMP_PAIRING_NOTSUPP; |
857 | goto done; | 857 | goto done; |
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c index d5953b87918c..3a246a6cab47 100644 --- a/net/ceph/osd_client.c +++ b/net/ceph/osd_client.c | |||
@@ -1675,13 +1675,13 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend) | |||
1675 | __register_request(osdc, req); | 1675 | __register_request(osdc, req); |
1676 | __unregister_linger_request(osdc, req); | 1676 | __unregister_linger_request(osdc, req); |
1677 | } | 1677 | } |
1678 | reset_changed_osds(osdc); | ||
1678 | mutex_unlock(&osdc->request_mutex); | 1679 | mutex_unlock(&osdc->request_mutex); |
1679 | 1680 | ||
1680 | if (needmap) { | 1681 | if (needmap) { |
1681 | dout("%d requests for down osds, need new map\n", needmap); | 1682 | dout("%d requests for down osds, need new map\n", needmap); |
1682 | ceph_monc_request_next_osdmap(&osdc->client->monc); | 1683 | ceph_monc_request_next_osdmap(&osdc->client->monc); |
1683 | } | 1684 | } |
1684 | reset_changed_osds(osdc); | ||
1685 | } | 1685 | } |
1686 | 1686 | ||
1687 | 1687 | ||
diff --git a/net/core/filter.c b/net/core/filter.c index dad2a178f9f8..6438f29ff266 100644 --- a/net/core/filter.c +++ b/net/core/filter.c | |||
@@ -778,7 +778,7 @@ int sk_detach_filter(struct sock *sk) | |||
778 | } | 778 | } |
779 | EXPORT_SYMBOL_GPL(sk_detach_filter); | 779 | EXPORT_SYMBOL_GPL(sk_detach_filter); |
780 | 780 | ||
781 | static void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to) | 781 | void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to) |
782 | { | 782 | { |
783 | static const u16 decodes[] = { | 783 | static const u16 decodes[] = { |
784 | [BPF_S_ALU_ADD_K] = BPF_ALU|BPF_ADD|BPF_K, | 784 | [BPF_S_ALU_ADD_K] = BPF_ALU|BPF_ADD|BPF_K, |
diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c index d5bef0b0f639..a0e9cf6379de 100644 --- a/net/core/sock_diag.c +++ b/net/core/sock_diag.c | |||
@@ -73,8 +73,13 @@ int sock_diag_put_filterinfo(struct user_namespace *user_ns, struct sock *sk, | |||
73 | goto out; | 73 | goto out; |
74 | } | 74 | } |
75 | 75 | ||
76 | if (filter) | 76 | if (filter) { |
77 | memcpy(nla_data(attr), filter->insns, len); | 77 | struct sock_filter *fb = (struct sock_filter *)nla_data(attr); |
78 | int i; | ||
79 | |||
80 | for (i = 0; i < filter->len; i++, fb++) | ||
81 | sk_decode_filter(&filter->insns[i], fb); | ||
82 | } | ||
78 | 83 | ||
79 | out: | 84 | out: |
80 | rcu_read_unlock(); | 85 | rcu_read_unlock(); |
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c index be2f8da0ae8e..7fa8f08fa7ae 100644 --- a/net/ipv4/ip_tunnel.c +++ b/net/ipv4/ip_tunnel.c | |||
@@ -853,7 +853,7 @@ void ip_tunnel_dellink(struct net_device *dev, struct list_head *head) | |||
853 | } | 853 | } |
854 | EXPORT_SYMBOL_GPL(ip_tunnel_dellink); | 854 | EXPORT_SYMBOL_GPL(ip_tunnel_dellink); |
855 | 855 | ||
856 | int __net_init ip_tunnel_init_net(struct net *net, int ip_tnl_net_id, | 856 | int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id, |
857 | struct rtnl_link_ops *ops, char *devname) | 857 | struct rtnl_link_ops *ops, char *devname) |
858 | { | 858 | { |
859 | struct ip_tunnel_net *itn = net_generic(net, ip_tnl_net_id); | 859 | struct ip_tunnel_net *itn = net_generic(net, ip_tnl_net_id); |
@@ -899,7 +899,7 @@ static void ip_tunnel_destroy(struct ip_tunnel_net *itn, struct list_head *head) | |||
899 | unregister_netdevice_queue(itn->fb_tunnel_dev, head); | 899 | unregister_netdevice_queue(itn->fb_tunnel_dev, head); |
900 | } | 900 | } |
901 | 901 | ||
902 | void __net_exit ip_tunnel_delete_net(struct ip_tunnel_net *itn) | 902 | void ip_tunnel_delete_net(struct ip_tunnel_net *itn) |
903 | { | 903 | { |
904 | LIST_HEAD(list); | 904 | LIST_HEAD(list); |
905 | 905 | ||
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c index 9d2bdb2c1d3f..c118f6b576bb 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c | |||
@@ -361,8 +361,7 @@ static netdev_tx_t vti_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
361 | tunnel->err_count = 0; | 361 | tunnel->err_count = 0; |
362 | } | 362 | } |
363 | 363 | ||
364 | IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED | | 364 | memset(IPCB(skb), 0, sizeof(*IPCB(skb))); |
365 | IPSKB_REROUTED); | ||
366 | skb_dst_drop(skb); | 365 | skb_dst_drop(skb); |
367 | skb_dst_set(skb, &rt->dst); | 366 | skb_dst_set(skb, &rt->dst); |
368 | nf_reset(skb); | 367 | nf_reset(skb); |
diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c index 637a341c1e2d..8dec6876dc50 100644 --- a/net/l2tp/l2tp_ppp.c +++ b/net/l2tp/l2tp_ppp.c | |||
@@ -346,19 +346,19 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh | |||
346 | skb_put(skb, 2); | 346 | skb_put(skb, 2); |
347 | 347 | ||
348 | /* Copy user data into skb */ | 348 | /* Copy user data into skb */ |
349 | error = memcpy_fromiovec(skb->data, m->msg_iov, total_len); | 349 | error = memcpy_fromiovec(skb_put(skb, total_len), m->msg_iov, |
350 | total_len); | ||
350 | if (error < 0) { | 351 | if (error < 0) { |
351 | kfree_skb(skb); | 352 | kfree_skb(skb); |
352 | goto error_put_sess_tun; | 353 | goto error_put_sess_tun; |
353 | } | 354 | } |
354 | skb_put(skb, total_len); | ||
355 | 355 | ||
356 | l2tp_xmit_skb(session, skb, session->hdr_len); | 356 | l2tp_xmit_skb(session, skb, session->hdr_len); |
357 | 357 | ||
358 | sock_put(ps->tunnel_sock); | 358 | sock_put(ps->tunnel_sock); |
359 | sock_put(sk); | 359 | sock_put(sk); |
360 | 360 | ||
361 | return error; | 361 | return total_len; |
362 | 362 | ||
363 | error_put_sess_tun: | 363 | error_put_sess_tun: |
364 | sock_put(ps->tunnel_sock); | 364 | sock_put(ps->tunnel_sock); |
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c index 5b142fb16480..9e6c2a075a4c 100644 --- a/net/netfilter/ipvs/ip_vs_ctl.c +++ b/net/netfilter/ipvs/ip_vs_ctl.c | |||
@@ -2542,6 +2542,7 @@ __ip_vs_get_dest_entries(struct net *net, const struct ip_vs_get_dests *get, | |||
2542 | struct ip_vs_dest *dest; | 2542 | struct ip_vs_dest *dest; |
2543 | struct ip_vs_dest_entry entry; | 2543 | struct ip_vs_dest_entry entry; |
2544 | 2544 | ||
2545 | memset(&entry, 0, sizeof(entry)); | ||
2545 | list_for_each_entry(dest, &svc->destinations, n_list) { | 2546 | list_for_each_entry(dest, &svc->destinations, n_list) { |
2546 | if (count >= get->num_dests) | 2547 | if (count >= get->num_dests) |
2547 | break; | 2548 | break; |
diff --git a/net/netfilter/nfnetlink_acct.c b/net/netfilter/nfnetlink_acct.c index dc3fd5d44464..c7b6d466a662 100644 --- a/net/netfilter/nfnetlink_acct.c +++ b/net/netfilter/nfnetlink_acct.c | |||
@@ -149,9 +149,12 @@ nfnl_acct_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
149 | 149 | ||
150 | rcu_read_lock(); | 150 | rcu_read_lock(); |
151 | list_for_each_entry_rcu(cur, &nfnl_acct_list, head) { | 151 | list_for_each_entry_rcu(cur, &nfnl_acct_list, head) { |
152 | if (last && cur != last) | 152 | if (last) { |
153 | continue; | 153 | if (cur != last) |
154 | continue; | ||
154 | 155 | ||
156 | last = NULL; | ||
157 | } | ||
155 | if (nfnl_acct_fill_info(skb, NETLINK_CB(cb->skb).portid, | 158 | if (nfnl_acct_fill_info(skb, NETLINK_CB(cb->skb).portid, |
156 | cb->nlh->nlmsg_seq, | 159 | cb->nlh->nlmsg_seq, |
157 | NFNL_MSG_TYPE(cb->nlh->nlmsg_type), | 160 | NFNL_MSG_TYPE(cb->nlh->nlmsg_type), |
diff --git a/net/netfilter/nfnetlink_cttimeout.c b/net/netfilter/nfnetlink_cttimeout.c index 701c88a20fea..65074dfb9383 100644 --- a/net/netfilter/nfnetlink_cttimeout.c +++ b/net/netfilter/nfnetlink_cttimeout.c | |||
@@ -220,9 +220,12 @@ ctnl_timeout_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
220 | 220 | ||
221 | rcu_read_lock(); | 221 | rcu_read_lock(); |
222 | list_for_each_entry_rcu(cur, &cttimeout_list, head) { | 222 | list_for_each_entry_rcu(cur, &cttimeout_list, head) { |
223 | if (last && cur != last) | 223 | if (last) { |
224 | continue; | 224 | if (cur != last) |
225 | continue; | ||
225 | 226 | ||
227 | last = NULL; | ||
228 | } | ||
226 | if (ctnl_timeout_fill_info(skb, NETLINK_CB(cb->skb).portid, | 229 | if (ctnl_timeout_fill_info(skb, NETLINK_CB(cb->skb).portid, |
227 | cb->nlh->nlmsg_seq, | 230 | cb->nlh->nlmsg_seq, |
228 | NFNL_MSG_TYPE(cb->nlh->nlmsg_type), | 231 | NFNL_MSG_TYPE(cb->nlh->nlmsg_type), |
diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c index 4e27fa035814..5352b2d2d5bf 100644 --- a/net/netfilter/nfnetlink_queue_core.c +++ b/net/netfilter/nfnetlink_queue_core.c | |||
@@ -637,9 +637,6 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum) | |||
637 | if (queue->copy_mode == NFQNL_COPY_NONE) | 637 | if (queue->copy_mode == NFQNL_COPY_NONE) |
638 | return -EINVAL; | 638 | return -EINVAL; |
639 | 639 | ||
640 | if ((queue->flags & NFQA_CFG_F_GSO) || !skb_is_gso(entry->skb)) | ||
641 | return __nfqnl_enqueue_packet(net, queue, entry); | ||
642 | |||
643 | skb = entry->skb; | 640 | skb = entry->skb; |
644 | 641 | ||
645 | switch (entry->pf) { | 642 | switch (entry->pf) { |
@@ -651,6 +648,9 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum) | |||
651 | break; | 648 | break; |
652 | } | 649 | } |
653 | 650 | ||
651 | if ((queue->flags & NFQA_CFG_F_GSO) || !skb_is_gso(skb)) | ||
652 | return __nfqnl_enqueue_packet(net, queue, entry); | ||
653 | |||
654 | nf_bridge_adjust_skb_data(skb); | 654 | nf_bridge_adjust_skb_data(skb); |
655 | segs = skb_gso_segment(skb, 0); | 655 | segs = skb_gso_segment(skb, 0); |
656 | /* Does not use PTR_ERR to limit the number of error codes that can be | 656 | /* Does not use PTR_ERR to limit the number of error codes that can be |
diff --git a/net/netfilter/xt_TCPMSS.c b/net/netfilter/xt_TCPMSS.c index a75240f0d42b..afaebc766933 100644 --- a/net/netfilter/xt_TCPMSS.c +++ b/net/netfilter/xt_TCPMSS.c | |||
@@ -125,6 +125,12 @@ tcpmss_mangle_packet(struct sk_buff *skb, | |||
125 | 125 | ||
126 | skb_put(skb, TCPOLEN_MSS); | 126 | skb_put(skb, TCPOLEN_MSS); |
127 | 127 | ||
128 | /* RFC 879 states that the default MSS is 536 without specific | ||
129 | * knowledge that the destination host is prepared to accept larger. | ||
130 | * Since no MSS was provided, we MUST NOT set a value > 536. | ||
131 | */ | ||
132 | newmss = min(newmss, (u16)536); | ||
133 | |||
128 | opt = (u_int8_t *)tcph + sizeof(struct tcphdr); | 134 | opt = (u_int8_t *)tcph + sizeof(struct tcphdr); |
129 | memmove(opt + TCPOLEN_MSS, opt, tcplen - sizeof(struct tcphdr)); | 135 | memmove(opt + TCPOLEN_MSS, opt, tcplen - sizeof(struct tcphdr)); |
130 | 136 | ||
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index d0b3dd60d386..57ee84d21470 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c | |||
@@ -371,7 +371,7 @@ static int netlink_mmap(struct file *file, struct socket *sock, | |||
371 | err = 0; | 371 | err = 0; |
372 | out: | 372 | out: |
373 | mutex_unlock(&nlk->pg_vec_lock); | 373 | mutex_unlock(&nlk->pg_vec_lock); |
374 | return 0; | 374 | return err; |
375 | } | 375 | } |
376 | 376 | ||
377 | static void netlink_frame_flush_dcache(const struct nl_mmap_hdr *hdr) | 377 | static void netlink_frame_flush_dcache(const struct nl_mmap_hdr *hdr) |
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 8ec1bca7f859..20a1bd0e6549 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
@@ -2851,12 +2851,11 @@ static int packet_getname_spkt(struct socket *sock, struct sockaddr *uaddr, | |||
2851 | return -EOPNOTSUPP; | 2851 | return -EOPNOTSUPP; |
2852 | 2852 | ||
2853 | uaddr->sa_family = AF_PACKET; | 2853 | uaddr->sa_family = AF_PACKET; |
2854 | memset(uaddr->sa_data, 0, sizeof(uaddr->sa_data)); | ||
2854 | rcu_read_lock(); | 2855 | rcu_read_lock(); |
2855 | dev = dev_get_by_index_rcu(sock_net(sk), pkt_sk(sk)->ifindex); | 2856 | dev = dev_get_by_index_rcu(sock_net(sk), pkt_sk(sk)->ifindex); |
2856 | if (dev) | 2857 | if (dev) |
2857 | strncpy(uaddr->sa_data, dev->name, 14); | 2858 | strlcpy(uaddr->sa_data, dev->name, sizeof(uaddr->sa_data)); |
2858 | else | ||
2859 | memset(uaddr->sa_data, 0, 14); | ||
2860 | rcu_read_unlock(); | 2859 | rcu_read_unlock(); |
2861 | *uaddr_len = sizeof(*uaddr); | 2860 | *uaddr_len = sizeof(*uaddr); |
2862 | 2861 | ||
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 2b935e7cfe7b..281c1bded1f6 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c | |||
@@ -291,17 +291,18 @@ struct qdisc_rate_table *qdisc_get_rtab(struct tc_ratespec *r, struct nlattr *ta | |||
291 | { | 291 | { |
292 | struct qdisc_rate_table *rtab; | 292 | struct qdisc_rate_table *rtab; |
293 | 293 | ||
294 | if (tab == NULL || r->rate == 0 || r->cell_log == 0 || | ||
295 | nla_len(tab) != TC_RTAB_SIZE) | ||
296 | return NULL; | ||
297 | |||
294 | for (rtab = qdisc_rtab_list; rtab; rtab = rtab->next) { | 298 | for (rtab = qdisc_rtab_list; rtab; rtab = rtab->next) { |
295 | if (memcmp(&rtab->rate, r, sizeof(struct tc_ratespec)) == 0) { | 299 | if (!memcmp(&rtab->rate, r, sizeof(struct tc_ratespec)) && |
300 | !memcmp(&rtab->data, nla_data(tab), 1024)) { | ||
296 | rtab->refcnt++; | 301 | rtab->refcnt++; |
297 | return rtab; | 302 | return rtab; |
298 | } | 303 | } |
299 | } | 304 | } |
300 | 305 | ||
301 | if (tab == NULL || r->rate == 0 || r->cell_log == 0 || | ||
302 | nla_len(tab) != TC_RTAB_SIZE) | ||
303 | return NULL; | ||
304 | |||
305 | rtab = kmalloc(sizeof(*rtab), GFP_KERNEL); | 306 | rtab = kmalloc(sizeof(*rtab), GFP_KERNEL); |
306 | if (rtab) { | 307 | if (rtab) { |
307 | rtab->rate = *r; | 308 | rtab->rate = *r; |
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index 32a4625fef77..be35e2dbcc9a 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c | |||
@@ -206,6 +206,8 @@ static inline int sctp_cacc_skip(struct sctp_transport *primary, | |||
206 | */ | 206 | */ |
207 | void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q) | 207 | void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q) |
208 | { | 208 | { |
209 | memset(q, 0, sizeof(struct sctp_outq)); | ||
210 | |||
209 | q->asoc = asoc; | 211 | q->asoc = asoc; |
210 | INIT_LIST_HEAD(&q->out_chunk_list); | 212 | INIT_LIST_HEAD(&q->out_chunk_list); |
211 | INIT_LIST_HEAD(&q->control_chunk_list); | 213 | INIT_LIST_HEAD(&q->control_chunk_list); |
@@ -213,11 +215,7 @@ void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q) | |||
213 | INIT_LIST_HEAD(&q->sacked); | 215 | INIT_LIST_HEAD(&q->sacked); |
214 | INIT_LIST_HEAD(&q->abandoned); | 216 | INIT_LIST_HEAD(&q->abandoned); |
215 | 217 | ||
216 | q->fast_rtx = 0; | ||
217 | q->outstanding_bytes = 0; | ||
218 | q->empty = 1; | 218 | q->empty = 1; |
219 | q->cork = 0; | ||
220 | q->out_qlen = 0; | ||
221 | } | 219 | } |
222 | 220 | ||
223 | /* Free the outqueue structure and any related pending chunks. | 221 | /* Free the outqueue structure and any related pending chunks. |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index f631c5ff4dbf..6abb1caf9836 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
@@ -4003,6 +4003,12 @@ SCTP_STATIC void sctp_destroy_sock(struct sock *sk) | |||
4003 | 4003 | ||
4004 | /* Release our hold on the endpoint. */ | 4004 | /* Release our hold on the endpoint. */ |
4005 | sp = sctp_sk(sk); | 4005 | sp = sctp_sk(sk); |
4006 | /* This could happen during socket init, thus we bail out | ||
4007 | * early, since the rest of the below is not setup either. | ||
4008 | */ | ||
4009 | if (sp->ep == NULL) | ||
4010 | return; | ||
4011 | |||
4006 | if (sp->do_auto_asconf) { | 4012 | if (sp->do_auto_asconf) { |
4007 | sp->do_auto_asconf = 0; | 4013 | sp->do_auto_asconf = 0; |
4008 | list_del(&sp->auto_asconf_list); | 4014 | list_del(&sp->auto_asconf_list); |
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 8337663aa298..f97869f1f09b 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib | |||
@@ -149,7 +149,7 @@ cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ | |||
149 | 149 | ||
150 | ld_flags = $(LDFLAGS) $(ldflags-y) | 150 | ld_flags = $(LDFLAGS) $(ldflags-y) |
151 | 151 | ||
152 | dtc_cpp_flags = -Wp,-MD,$(depfile).pre -nostdinc \ | 152 | dtc_cpp_flags = -Wp,-MD,$(depfile).pre.tmp -nostdinc \ |
153 | -I$(srctree)/arch/$(SRCARCH)/boot/dts \ | 153 | -I$(srctree)/arch/$(SRCARCH)/boot/dts \ |
154 | -I$(srctree)/arch/$(SRCARCH)/boot/dts/include \ | 154 | -I$(srctree)/arch/$(SRCARCH)/boot/dts/include \ |
155 | -undef -D__DTS__ | 155 | -undef -D__DTS__ |
@@ -265,13 +265,13 @@ quiet_cmd_dtc = DTC $@ | |||
265 | cmd_dtc = $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ | 265 | cmd_dtc = $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ |
266 | $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 \ | 266 | $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 \ |
267 | -i $(dir $<) $(DTC_FLAGS) \ | 267 | -i $(dir $<) $(DTC_FLAGS) \ |
268 | -d $(depfile).dtc $(dtc-tmp) ; \ | 268 | -d $(depfile).dtc.tmp $(dtc-tmp) ; \ |
269 | cat $(depfile).pre $(depfile).dtc > $(depfile) | 269 | cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile) |
270 | 270 | ||
271 | $(obj)/%.dtb: $(src)/%.dts FORCE | 271 | $(obj)/%.dtb: $(src)/%.dts FORCE |
272 | $(call if_changed_dep,dtc) | 272 | $(call if_changed_dep,dtc) |
273 | 273 | ||
274 | dtc-tmp = $(subst $(comma),_,$(dot-target).dts) | 274 | dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp) |
275 | 275 | ||
276 | # Bzip2 | 276 | # Bzip2 |
277 | # --------------------------------------------------------------------------- | 277 | # --------------------------------------------------------------------------- |
diff --git a/scripts/dtc/dtc-lexer.l b/scripts/dtc/dtc-lexer.l index 254d5af88956..3b41bfca636c 100644 --- a/scripts/dtc/dtc-lexer.l +++ b/scripts/dtc/dtc-lexer.l | |||
@@ -71,7 +71,7 @@ static int pop_input_file(void); | |||
71 | push_input_file(name); | 71 | push_input_file(name); |
72 | } | 72 | } |
73 | 73 | ||
74 | <*>^"#"(line)?{WS}+[0-9]+{WS}+{STRING}({WS}+[0-9]+)? { | 74 | <*>^"#"(line)?[ \t]+[0-9]+[ \t]+{STRING}([ \t]+[0-9]+)? { |
75 | char *line, *tmp, *fn; | 75 | char *line, *tmp, *fn; |
76 | /* skip text before line # */ | 76 | /* skip text before line # */ |
77 | line = yytext; | 77 | line = yytext; |
diff --git a/scripts/dtc/dtc-lexer.lex.c_shipped b/scripts/dtc/dtc-lexer.lex.c_shipped index a6c5fcdfc032..2d30f41778b7 100644 --- a/scripts/dtc/dtc-lexer.lex.c_shipped +++ b/scripts/dtc/dtc-lexer.lex.c_shipped | |||
@@ -405,19 +405,19 @@ static yyconst flex_int16_t yy_accept[161] = | |||
405 | static yyconst flex_int32_t yy_ec[256] = | 405 | static yyconst flex_int32_t yy_ec[256] = |
406 | { 0, | 406 | { 0, |
407 | 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, | 407 | 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, |
408 | 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, | 408 | 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, |
409 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 409 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
410 | 1, 2, 4, 5, 6, 1, 1, 7, 8, 1, | 410 | 1, 2, 5, 6, 7, 1, 1, 8, 9, 1, |
411 | 1, 9, 10, 10, 11, 10, 12, 13, 14, 15, | 411 | 1, 10, 11, 11, 12, 11, 13, 14, 15, 16, |
412 | 15, 15, 15, 15, 15, 15, 15, 16, 1, 17, | 412 | 16, 16, 16, 16, 16, 16, 16, 17, 1, 18, |
413 | 18, 19, 10, 10, 20, 20, 20, 20, 20, 20, | 413 | 19, 20, 11, 11, 21, 21, 21, 21, 21, 21, |
414 | 21, 21, 21, 21, 21, 22, 21, 21, 21, 21, | 414 | 22, 22, 22, 22, 22, 23, 22, 22, 22, 22, |
415 | 21, 21, 21, 21, 23, 21, 21, 24, 21, 21, | 415 | 22, 22, 22, 22, 24, 22, 22, 25, 22, 22, |
416 | 1, 25, 26, 1, 21, 1, 20, 27, 28, 29, | 416 | 1, 26, 27, 1, 22, 1, 21, 28, 29, 30, |
417 | 417 | ||
418 | 30, 20, 21, 21, 31, 21, 21, 32, 33, 34, | 418 | 31, 21, 22, 22, 32, 22, 22, 33, 34, 35, |
419 | 35, 36, 21, 37, 38, 39, 40, 41, 21, 24, | 419 | 36, 37, 22, 38, 39, 40, 41, 42, 22, 25, |
420 | 42, 21, 43, 44, 45, 1, 1, 1, 1, 1, | 420 | 43, 22, 44, 45, 46, 1, 1, 1, 1, 1, |
421 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 421 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
422 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 422 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
423 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 423 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
@@ -434,36 +434,36 @@ static yyconst flex_int32_t yy_ec[256] = | |||
434 | 1, 1, 1, 1, 1 | 434 | 1, 1, 1, 1, 1 |
435 | } ; | 435 | } ; |
436 | 436 | ||
437 | static yyconst flex_int32_t yy_meta[46] = | 437 | static yyconst flex_int32_t yy_meta[47] = |
438 | { 0, | 438 | { 0, |
439 | 1, 1, 1, 1, 1, 2, 3, 1, 2, 2, | 439 | 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, |
440 | 2, 4, 5, 5, 5, 6, 1, 1, 1, 7, | 440 | 2, 2, 4, 5, 5, 5, 6, 1, 1, 1, |
441 | 8, 8, 8, 8, 1, 1, 7, 7, 7, 7, | 441 | 7, 8, 8, 8, 8, 1, 1, 7, 7, 7, |
442 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, | 442 | 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
443 | 8, 8, 3, 1, 1 | 443 | 8, 8, 8, 3, 1, 1 |
444 | } ; | 444 | } ; |
445 | 445 | ||
446 | static yyconst flex_int16_t yy_base[175] = | 446 | static yyconst flex_int16_t yy_base[175] = |
447 | { 0, | 447 | { 0, |
448 | 0, 388, 381, 40, 41, 386, 71, 385, 34, 44, | 448 | 0, 385, 378, 40, 41, 383, 72, 382, 34, 44, |
449 | 390, 395, 60, 62, 371, 112, 111, 111, 111, 104, | 449 | 388, 393, 61, 117, 368, 116, 115, 115, 115, 48, |
450 | 370, 106, 371, 342, 124, 119, 0, 144, 395, 0, | 450 | 367, 107, 368, 339, 127, 120, 0, 147, 393, 0, |
451 | 123, 0, 159, 153, 165, 167, 395, 130, 395, 382, | 451 | 127, 0, 133, 156, 168, 153, 393, 125, 393, 380, |
452 | 395, 0, 372, 122, 395, 157, 374, 379, 350, 21, | 452 | 393, 0, 369, 127, 393, 160, 371, 377, 347, 21, |
453 | 346, 349, 395, 395, 395, 395, 395, 362, 395, 395, | 453 | 343, 346, 393, 393, 393, 393, 393, 359, 393, 393, |
454 | 181, 346, 342, 395, 359, 0, 191, 343, 190, 351, | 454 | 183, 343, 339, 393, 356, 0, 183, 340, 187, 348, |
455 | 350, 0, 0, 0, 173, 362, 177, 367, 357, 329, | 455 | 347, 0, 0, 0, 178, 359, 195, 365, 354, 326, |
456 | 335, 328, 337, 331, 206, 329, 334, 327, 395, 338, | 456 | 332, 325, 334, 328, 204, 326, 331, 324, 393, 335, |
457 | 170, 314, 346, 345, 318, 325, 343, 158, 316, 212, | 457 | 150, 311, 343, 342, 315, 322, 340, 179, 313, 207, |
458 | 458 | ||
459 | 322, 319, 320, 395, 340, 336, 308, 305, 314, 304, | 459 | 319, 316, 317, 393, 337, 333, 305, 302, 311, 301, |
460 | 295, 138, 208, 220, 395, 292, 305, 265, 264, 254, | 460 | 310, 190, 338, 337, 393, 307, 322, 301, 305, 277, |
461 | 201, 222, 285, 275, 273, 270, 236, 235, 225, 115, | 461 | 208, 311, 307, 278, 271, 270, 248, 246, 213, 130, |
462 | 395, 395, 252, 216, 216, 217, 214, 230, 209, 220, | 462 | 393, 393, 263, 235, 207, 221, 218, 229, 213, 213, |
463 | 213, 239, 211, 217, 216, 209, 229, 395, 240, 225, | 463 | 206, 234, 218, 210, 208, 193, 219, 393, 223, 204, |
464 | 206, 169, 395, 395, 116, 106, 99, 54, 395, 395, | 464 | 176, 157, 393, 393, 120, 106, 97, 119, 393, 393, |
465 | 254, 260, 268, 272, 276, 282, 289, 293, 301, 309, | 465 | 245, 251, 259, 263, 267, 273, 280, 284, 292, 300, |
466 | 313, 319, 327, 335 | 466 | 304, 310, 318, 326 |
467 | } ; | 467 | } ; |
468 | 468 | ||
469 | static yyconst flex_int16_t yy_def[175] = | 469 | static yyconst flex_int16_t yy_def[175] = |
@@ -489,108 +489,108 @@ static yyconst flex_int16_t yy_def[175] = | |||
489 | 160, 160, 160, 160 | 489 | 160, 160, 160, 160 |
490 | } ; | 490 | } ; |
491 | 491 | ||
492 | static yyconst flex_int16_t yy_nxt[441] = | 492 | static yyconst flex_int16_t yy_nxt[440] = |
493 | { 0, | 493 | { 0, |
494 | 12, 13, 14, 15, 16, 12, 17, 18, 12, 12, | 494 | 12, 13, 14, 13, 15, 16, 12, 17, 18, 12, |
495 | 12, 19, 12, 12, 12, 12, 20, 21, 22, 23, | 495 | 12, 12, 19, 12, 12, 12, 12, 20, 21, 22, |
496 | 23, 23, 23, 23, 12, 12, 23, 23, 23, 23, | 496 | 23, 23, 23, 23, 23, 12, 12, 23, 23, 23, |
497 | 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, | 497 | 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, |
498 | 23, 23, 12, 24, 12, 25, 34, 35, 35, 25, | 498 | 23, 23, 23, 12, 24, 12, 25, 34, 35, 35, |
499 | 81, 26, 26, 27, 27, 27, 34, 35, 35, 82, | 499 | 25, 81, 26, 26, 27, 27, 27, 34, 35, 35, |
500 | 28, 36, 36, 36, 36, 159, 29, 28, 28, 28, | 500 | 82, 28, 36, 36, 36, 53, 54, 29, 28, 28, |
501 | 28, 12, 13, 14, 15, 16, 30, 17, 18, 30, | 501 | 28, 28, 12, 13, 14, 13, 15, 16, 30, 17, |
502 | 30, 30, 26, 30, 30, 30, 12, 20, 21, 22, | 502 | 18, 30, 30, 30, 26, 30, 30, 30, 12, 20, |
503 | 31, 31, 31, 31, 31, 32, 12, 31, 31, 31, | 503 | 21, 22, 31, 31, 31, 31, 31, 32, 12, 31, |
504 | 504 | ||
505 | 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, | 505 | 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, |
506 | 31, 31, 31, 12, 24, 12, 39, 41, 45, 47, | 506 | 31, 31, 31, 31, 31, 12, 24, 12, 36, 36, |
507 | 53, 54, 48, 56, 57, 61, 61, 47, 66, 45, | 507 | 36, 39, 41, 45, 47, 56, 57, 48, 61, 47, |
508 | 48, 66, 66, 66, 39, 46, 40, 49, 59, 50, | 508 | 39, 159, 48, 66, 61, 45, 66, 66, 66, 158, |
509 | 158, 51, 122, 52, 157, 49, 46, 50, 136, 63, | 509 | 46, 40, 49, 59, 50, 157, 51, 49, 52, 50, |
510 | 137, 52, 156, 43, 40, 62, 65, 65, 65, 59, | 510 | 40, 63, 46, 52, 36, 36, 36, 156, 43, 62, |
511 | 61, 61, 123, 65, 75, 69, 69, 69, 36, 36, | 511 | 65, 65, 65, 59, 136, 68, 137, 65, 75, 69, |
512 | 65, 65, 65, 65, 70, 71, 72, 69, 69, 69, | 512 | 69, 69, 70, 71, 65, 65, 65, 65, 70, 71, |
513 | 45, 46, 61, 61, 109, 77, 70, 71, 93, 110, | 513 | 72, 69, 69, 69, 61, 46, 45, 155, 154, 66, |
514 | 68, 70, 71, 85, 85, 85, 66, 46, 155, 66, | 514 | 70, 71, 66, 66, 66, 122, 85, 85, 85, 59, |
515 | 515 | ||
516 | 66, 66, 69, 69, 69, 122, 59, 100, 100, 61, | 516 | 69, 69, 69, 46, 77, 100, 109, 93, 100, 70, |
517 | 61, 70, 71, 100, 100, 148, 112, 154, 85, 85, | 517 | 71, 110, 112, 122, 129, 123, 153, 85, 85, 85, |
518 | 85, 61, 61, 129, 129, 123, 129, 129, 135, 135, | 518 | 135, 135, 135, 148, 148, 160, 135, 135, 135, 152, |
519 | 135, 142, 142, 148, 143, 149, 153, 135, 135, 135, | 519 | 142, 142, 142, 123, 143, 142, 142, 142, 151, 143, |
520 | 142, 142, 160, 143, 152, 151, 150, 146, 145, 144, | 520 | 150, 146, 145, 149, 149, 38, 38, 38, 38, 38, |
521 | 141, 140, 139, 149, 38, 38, 38, 38, 38, 38, | 521 | 38, 38, 38, 42, 144, 141, 140, 42, 42, 44, |
522 | 38, 38, 42, 138, 134, 133, 42, 42, 44, 44, | 522 | 44, 44, 44, 44, 44, 44, 44, 58, 58, 58, |
523 | 44, 44, 44, 44, 44, 44, 58, 58, 58, 58, | 523 | 58, 64, 139, 64, 66, 138, 134, 66, 133, 66, |
524 | 64, 132, 64, 66, 131, 130, 66, 160, 66, 66, | 524 | 66, 67, 132, 131, 67, 67, 67, 67, 73, 130, |
525 | 67, 128, 127, 67, 67, 67, 67, 73, 126, 73, | 525 | 73, 73, 76, 76, 76, 76, 76, 76, 76, 76, |
526 | 526 | ||
527 | 73, 76, 76, 76, 76, 76, 76, 76, 76, 78, | 527 | 78, 78, 78, 78, 78, 78, 78, 78, 91, 160, |
528 | 78, 78, 78, 78, 78, 78, 78, 91, 125, 91, | 528 | 91, 92, 129, 92, 92, 128, 92, 92, 121, 121, |
529 | 92, 124, 92, 92, 120, 92, 92, 121, 121, 121, | 529 | 121, 121, 121, 121, 121, 121, 147, 147, 147, 147, |
530 | 121, 121, 121, 121, 121, 147, 147, 147, 147, 147, | 530 | 147, 147, 147, 147, 127, 126, 125, 124, 61, 61, |
531 | 147, 147, 147, 119, 118, 117, 116, 115, 47, 114, | 531 | 120, 119, 118, 117, 116, 115, 47, 114, 110, 113, |
532 | 110, 113, 111, 108, 107, 106, 48, 105, 104, 89, | 532 | 111, 108, 107, 106, 48, 105, 104, 89, 103, 102, |
533 | 103, 102, 101, 99, 98, 97, 96, 95, 94, 79, | 533 | 101, 99, 98, 97, 96, 95, 94, 79, 77, 90, |
534 | 77, 90, 89, 88, 59, 87, 86, 59, 84, 83, | 534 | 89, 88, 59, 87, 86, 59, 84, 83, 80, 79, |
535 | 80, 79, 77, 74, 160, 60, 59, 55, 37, 160, | 535 | 77, 74, 160, 60, 59, 55, 37, 160, 33, 25, |
536 | 33, 25, 26, 25, 11, 160, 160, 160, 160, 160, | 536 | 26, 25, 11, 160, 160, 160, 160, 160, 160, 160, |
537 | 537 | ||
538 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, | 538 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, |
539 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, | 539 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, |
540 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, | 540 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, |
541 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160 | 541 | 160, 160, 160, 160, 160, 160, 160, 160, 160 |
542 | } ; | 542 | } ; |
543 | 543 | ||
544 | static yyconst flex_int16_t yy_chk[441] = | 544 | static yyconst flex_int16_t yy_chk[440] = |
545 | { 0, | 545 | { 0, |
546 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 546 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
547 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 547 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
548 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 548 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
549 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 549 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
550 | 1, 1, 1, 1, 1, 4, 9, 9, 9, 10, | 550 | 1, 1, 1, 1, 1, 1, 4, 9, 9, 9, |
551 | 50, 4, 5, 5, 5, 5, 10, 10, 10, 50, | 551 | 10, 50, 4, 5, 5, 5, 5, 10, 10, 10, |
552 | 5, 13, 13, 14, 14, 158, 5, 5, 5, 5, | 552 | 50, 5, 13, 13, 13, 20, 20, 5, 5, 5, |
553 | 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, | 553 | 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, |
554 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, | 554 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
555 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, | 555 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
556 | 556 | ||
557 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, | 557 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
558 | 7, 7, 7, 7, 7, 7, 16, 17, 18, 19, | 558 | 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, |
559 | 20, 20, 19, 22, 22, 25, 25, 26, 31, 44, | 559 | 14, 16, 17, 18, 19, 22, 22, 19, 25, 26, |
560 | 26, 31, 31, 31, 38, 18, 16, 19, 31, 19, | 560 | 38, 158, 26, 31, 33, 44, 31, 31, 31, 157, |
561 | 157, 19, 112, 19, 156, 26, 44, 26, 130, 26, | 561 | 18, 16, 19, 31, 19, 156, 19, 26, 19, 26, |
562 | 130, 26, 155, 17, 38, 25, 28, 28, 28, 28, | 562 | 38, 26, 44, 26, 36, 36, 36, 155, 17, 25, |
563 | 33, 33, 112, 28, 46, 34, 34, 34, 36, 36, | 563 | 28, 28, 28, 28, 130, 33, 130, 28, 46, 34, |
564 | 28, 28, 28, 28, 34, 34, 34, 35, 35, 35, | 564 | 34, 34, 91, 91, 28, 28, 28, 28, 34, 34, |
565 | 75, 46, 61, 61, 98, 77, 35, 35, 77, 98, | 565 | 34, 35, 35, 35, 61, 46, 75, 152, 151, 67, |
566 | 33, 91, 91, 61, 61, 61, 67, 75, 152, 67, | 566 | 35, 35, 67, 67, 67, 112, 61, 61, 61, 67, |
567 | 567 | ||
568 | 67, 67, 69, 69, 69, 121, 67, 85, 85, 113, | 568 | 69, 69, 69, 75, 77, 85, 98, 77, 100, 69, |
569 | 113, 69, 69, 100, 100, 143, 100, 151, 85, 85, | 569 | 69, 98, 100, 121, 129, 112, 150, 85, 85, 85, |
570 | 85, 114, 114, 122, 122, 121, 129, 129, 135, 135, | 570 | 135, 135, 135, 143, 147, 149, 129, 129, 129, 146, |
571 | 135, 138, 138, 147, 138, 143, 150, 129, 129, 129, | 571 | 138, 138, 138, 121, 138, 142, 142, 142, 145, 142, |
572 | 142, 142, 149, 142, 146, 145, 144, 141, 140, 139, | 572 | 144, 141, 140, 143, 147, 161, 161, 161, 161, 161, |
573 | 137, 136, 134, 147, 161, 161, 161, 161, 161, 161, | 573 | 161, 161, 161, 162, 139, 137, 136, 162, 162, 163, |
574 | 161, 161, 162, 133, 128, 127, 162, 162, 163, 163, | 574 | 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, |
575 | 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, | 575 | 164, 165, 134, 165, 166, 133, 128, 166, 127, 166, |
576 | 165, 126, 165, 166, 125, 124, 166, 123, 166, 166, | 576 | 166, 167, 126, 125, 167, 167, 167, 167, 168, 124, |
577 | 167, 120, 119, 167, 167, 167, 167, 168, 118, 168, | 577 | 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, |
578 | 578 | ||
579 | 168, 169, 169, 169, 169, 169, 169, 169, 169, 170, | 579 | 170, 170, 170, 170, 170, 170, 170, 170, 171, 123, |
580 | 170, 170, 170, 170, 170, 170, 170, 171, 117, 171, | 580 | 171, 172, 122, 172, 172, 120, 172, 172, 173, 173, |
581 | 172, 116, 172, 172, 111, 172, 172, 173, 173, 173, | 581 | 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, |
582 | 173, 173, 173, 173, 173, 174, 174, 174, 174, 174, | 582 | 174, 174, 174, 174, 119, 118, 117, 116, 114, 113, |
583 | 174, 174, 174, 110, 109, 108, 107, 106, 105, 103, | 583 | 111, 110, 109, 108, 107, 106, 105, 103, 102, 101, |
584 | 102, 101, 99, 97, 96, 95, 94, 93, 92, 90, | 584 | 99, 97, 96, 95, 94, 93, 92, 90, 88, 87, |
585 | 88, 87, 86, 84, 83, 82, 81, 80, 79, 78, | 585 | 86, 84, 83, 82, 81, 80, 79, 78, 76, 71, |
586 | 76, 71, 70, 68, 65, 63, 62, 58, 52, 51, | 586 | 70, 68, 65, 63, 62, 58, 52, 51, 49, 48, |
587 | 49, 48, 47, 43, 40, 24, 23, 21, 15, 11, | 587 | 47, 43, 40, 24, 23, 21, 15, 11, 8, 6, |
588 | 8, 6, 3, 2, 160, 160, 160, 160, 160, 160, | 588 | 3, 2, 160, 160, 160, 160, 160, 160, 160, 160, |
589 | 589 | ||
590 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, | 590 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, |
591 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, | 591 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, |
592 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, | 592 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, |
593 | 160, 160, 160, 160, 160, 160, 160, 160, 160, 160 | 593 | 160, 160, 160, 160, 160, 160, 160, 160, 160 |
594 | } ; | 594 | } ; |
595 | 595 | ||
596 | static yy_state_type yy_last_accepting_state; | 596 | static yy_state_type yy_last_accepting_state; |
diff --git a/scripts/dtc/dtc-parser.tab.c_shipped b/scripts/dtc/dtc-parser.tab.c_shipped index 4af55900a15b..ee1d8c3042fb 100644 --- a/scripts/dtc/dtc-parser.tab.c_shipped +++ b/scripts/dtc/dtc-parser.tab.c_shipped | |||
@@ -1,10 +1,8 @@ | |||
1 | /* A Bison parser, made by GNU Bison 2.5. */ | ||
1 | 2 | ||
2 | /* A Bison parser, made by GNU Bison 2.4.1. */ | 3 | /* Bison implementation for Yacc-like parsers in C |
3 | |||
4 | /* Skeleton implementation for Bison's Yacc-like parsers in C | ||
5 | 4 | ||
6 | Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 | 5 | Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. |
7 | Free Software Foundation, Inc. | ||
8 | 6 | ||
9 | This program is free software: you can redistribute it and/or modify | 7 | This program is free software: you can redistribute it and/or modify |
10 | it under the terms of the GNU General Public License as published by | 8 | it under the terms of the GNU General Public License as published by |
@@ -46,7 +44,7 @@ | |||
46 | #define YYBISON 1 | 44 | #define YYBISON 1 |
47 | 45 | ||
48 | /* Bison version. */ | 46 | /* Bison version. */ |
49 | #define YYBISON_VERSION "2.4.1" | 47 | #define YYBISON_VERSION "2.5" |
50 | 48 | ||
51 | /* Skeleton name. */ | 49 | /* Skeleton name. */ |
52 | #define YYSKELETON_NAME "yacc.c" | 50 | #define YYSKELETON_NAME "yacc.c" |
@@ -67,7 +65,7 @@ | |||
67 | 65 | ||
68 | /* Copy the first part of user declarations. */ | 66 | /* Copy the first part of user declarations. */ |
69 | 67 | ||
70 | /* Line 189 of yacc.c */ | 68 | /* Line 268 of yacc.c */ |
71 | #line 21 "dtc-parser.y" | 69 | #line 21 "dtc-parser.y" |
72 | 70 | ||
73 | #include <stdio.h> | 71 | #include <stdio.h> |
@@ -88,8 +86,8 @@ static unsigned long long eval_literal(const char *s, int base, int bits); | |||
88 | static unsigned char eval_char_literal(const char *s); | 86 | static unsigned char eval_char_literal(const char *s); |
89 | 87 | ||
90 | 88 | ||
91 | /* Line 189 of yacc.c */ | 89 | /* Line 268 of yacc.c */ |
92 | #line 93 "dtc-parser.tab.c" | 90 | #line 91 "dtc-parser.tab.c" |
93 | 91 | ||
94 | /* Enabling traces. */ | 92 | /* Enabling traces. */ |
95 | #ifndef YYDEBUG | 93 | #ifndef YYDEBUG |
@@ -147,7 +145,7 @@ static unsigned char eval_char_literal(const char *s); | |||
147 | typedef union YYSTYPE | 145 | typedef union YYSTYPE |
148 | { | 146 | { |
149 | 147 | ||
150 | /* Line 214 of yacc.c */ | 148 | /* Line 293 of yacc.c */ |
151 | #line 40 "dtc-parser.y" | 149 | #line 40 "dtc-parser.y" |
152 | 150 | ||
153 | char *propnodename; | 151 | char *propnodename; |
@@ -171,8 +169,8 @@ typedef union YYSTYPE | |||
171 | 169 | ||
172 | 170 | ||
173 | 171 | ||
174 | /* Line 214 of yacc.c */ | 172 | /* Line 293 of yacc.c */ |
175 | #line 176 "dtc-parser.tab.c" | 173 | #line 174 "dtc-parser.tab.c" |
176 | } YYSTYPE; | 174 | } YYSTYPE; |
177 | # define YYSTYPE_IS_TRIVIAL 1 | 175 | # define YYSTYPE_IS_TRIVIAL 1 |
178 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ | 176 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ |
@@ -183,8 +181,8 @@ typedef union YYSTYPE | |||
183 | /* Copy the second part of user declarations. */ | 181 | /* Copy the second part of user declarations. */ |
184 | 182 | ||
185 | 183 | ||
186 | /* Line 264 of yacc.c */ | 184 | /* Line 343 of yacc.c */ |
187 | #line 188 "dtc-parser.tab.c" | 185 | #line 186 "dtc-parser.tab.c" |
188 | 186 | ||
189 | #ifdef short | 187 | #ifdef short |
190 | # undef short | 188 | # undef short |
@@ -234,7 +232,7 @@ typedef short int yytype_int16; | |||
234 | #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) | 232 | #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) |
235 | 233 | ||
236 | #ifndef YY_ | 234 | #ifndef YY_ |
237 | # if YYENABLE_NLS | 235 | # if defined YYENABLE_NLS && YYENABLE_NLS |
238 | # if ENABLE_NLS | 236 | # if ENABLE_NLS |
239 | # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ | 237 | # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ |
240 | # define YY_(msgid) dgettext ("bison-runtime", msgid) | 238 | # define YY_(msgid) dgettext ("bison-runtime", msgid) |
@@ -287,11 +285,11 @@ YYID (yyi) | |||
287 | # define alloca _alloca | 285 | # define alloca _alloca |
288 | # else | 286 | # else |
289 | # define YYSTACK_ALLOC alloca | 287 | # define YYSTACK_ALLOC alloca |
290 | # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ | 288 | # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
291 | || defined __cplusplus || defined _MSC_VER) | 289 | || defined __cplusplus || defined _MSC_VER) |
292 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ | 290 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ |
293 | # ifndef _STDLIB_H | 291 | # ifndef EXIT_SUCCESS |
294 | # define _STDLIB_H 1 | 292 | # define EXIT_SUCCESS 0 |
295 | # endif | 293 | # endif |
296 | # endif | 294 | # endif |
297 | # endif | 295 | # endif |
@@ -314,24 +312,24 @@ YYID (yyi) | |||
314 | # ifndef YYSTACK_ALLOC_MAXIMUM | 312 | # ifndef YYSTACK_ALLOC_MAXIMUM |
315 | # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM | 313 | # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM |
316 | # endif | 314 | # endif |
317 | # if (defined __cplusplus && ! defined _STDLIB_H \ | 315 | # if (defined __cplusplus && ! defined EXIT_SUCCESS \ |
318 | && ! ((defined YYMALLOC || defined malloc) \ | 316 | && ! ((defined YYMALLOC || defined malloc) \ |
319 | && (defined YYFREE || defined free))) | 317 | && (defined YYFREE || defined free))) |
320 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ | 318 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ |
321 | # ifndef _STDLIB_H | 319 | # ifndef EXIT_SUCCESS |
322 | # define _STDLIB_H 1 | 320 | # define EXIT_SUCCESS 0 |
323 | # endif | 321 | # endif |
324 | # endif | 322 | # endif |
325 | # ifndef YYMALLOC | 323 | # ifndef YYMALLOC |
326 | # define YYMALLOC malloc | 324 | # define YYMALLOC malloc |
327 | # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ | 325 | # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
328 | || defined __cplusplus || defined _MSC_VER) | 326 | || defined __cplusplus || defined _MSC_VER) |
329 | void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ | 327 | void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ |
330 | # endif | 328 | # endif |
331 | # endif | 329 | # endif |
332 | # ifndef YYFREE | 330 | # ifndef YYFREE |
333 | # define YYFREE free | 331 | # define YYFREE free |
334 | # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ | 332 | # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
335 | || defined __cplusplus || defined _MSC_VER) | 333 | || defined __cplusplus || defined _MSC_VER) |
336 | void free (void *); /* INFRINGES ON USER NAME SPACE */ | 334 | void free (void *); /* INFRINGES ON USER NAME SPACE */ |
337 | # endif | 335 | # endif |
@@ -360,23 +358,7 @@ union yyalloc | |||
360 | ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ | 358 | ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ |
361 | + YYSTACK_GAP_MAXIMUM) | 359 | + YYSTACK_GAP_MAXIMUM) |
362 | 360 | ||
363 | /* Copy COUNT objects from FROM to TO. The source and destination do | 361 | # define YYCOPY_NEEDED 1 |
364 | not overlap. */ | ||
365 | # ifndef YYCOPY | ||
366 | # if defined __GNUC__ && 1 < __GNUC__ | ||
367 | # define YYCOPY(To, From, Count) \ | ||
368 | __builtin_memcpy (To, From, (Count) * sizeof (*(From))) | ||
369 | # else | ||
370 | # define YYCOPY(To, From, Count) \ | ||
371 | do \ | ||
372 | { \ | ||
373 | YYSIZE_T yyi; \ | ||
374 | for (yyi = 0; yyi < (Count); yyi++) \ | ||
375 | (To)[yyi] = (From)[yyi]; \ | ||
376 | } \ | ||
377 | while (YYID (0)) | ||
378 | # endif | ||
379 | # endif | ||
380 | 362 | ||
381 | /* Relocate STACK from its old location to the new one. The | 363 | /* Relocate STACK from its old location to the new one. The |
382 | local variables YYSIZE and YYSTACKSIZE give the old and new number of | 364 | local variables YYSIZE and YYSTACKSIZE give the old and new number of |
@@ -396,6 +378,26 @@ union yyalloc | |||
396 | 378 | ||
397 | #endif | 379 | #endif |
398 | 380 | ||
381 | #if defined YYCOPY_NEEDED && YYCOPY_NEEDED | ||
382 | /* Copy COUNT objects from FROM to TO. The source and destination do | ||
383 | not overlap. */ | ||
384 | # ifndef YYCOPY | ||
385 | # if defined __GNUC__ && 1 < __GNUC__ | ||
386 | # define YYCOPY(To, From, Count) \ | ||
387 | __builtin_memcpy (To, From, (Count) * sizeof (*(From))) | ||
388 | # else | ||
389 | # define YYCOPY(To, From, Count) \ | ||
390 | do \ | ||
391 | { \ | ||
392 | YYSIZE_T yyi; \ | ||
393 | for (yyi = 0; yyi < (Count); yyi++) \ | ||
394 | (To)[yyi] = (From)[yyi]; \ | ||
395 | } \ | ||
396 | while (YYID (0)) | ||
397 | # endif | ||
398 | # endif | ||
399 | #endif /* !YYCOPY_NEEDED */ | ||
400 | |||
399 | /* YYFINAL -- State number of the termination state. */ | 401 | /* YYFINAL -- State number of the termination state. */ |
400 | #define YYFINAL 4 | 402 | #define YYFINAL 4 |
401 | /* YYLAST -- Last index in YYTABLE. */ | 403 | /* YYLAST -- Last index in YYTABLE. */ |
@@ -571,8 +573,8 @@ static const yytype_uint8 yyr2[] = | |||
571 | 2, 0, 2, 2, 0, 2, 2, 2, 3, 2 | 573 | 2, 0, 2, 2, 0, 2, 2, 2, 3, 2 |
572 | }; | 574 | }; |
573 | 575 | ||
574 | /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state | 576 | /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. |
575 | STATE-NUM when YYTABLE doesn't specify something else to do. Zero | 577 | Performed when YYTABLE doesn't specify something else to do. Zero |
576 | means the default is an error. */ | 578 | means the default is an error. */ |
577 | static const yytype_uint8 yydefact[] = | 579 | static const yytype_uint8 yydefact[] = |
578 | { | 580 | { |
@@ -633,8 +635,7 @@ static const yytype_int8 yypgoto[] = | |||
633 | 635 | ||
634 | /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If | 636 | /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If |
635 | positive, shift that token. If negative, reduce the rule which | 637 | positive, shift that token. If negative, reduce the rule which |
636 | number is the opposite. If zero, do what YYDEFACT says. | 638 | number is the opposite. If YYTABLE_NINF, syntax error. */ |
637 | If YYTABLE_NINF, syntax error. */ | ||
638 | #define YYTABLE_NINF -1 | 639 | #define YYTABLE_NINF -1 |
639 | static const yytype_uint8 yytable[] = | 640 | static const yytype_uint8 yytable[] = |
640 | { | 641 | { |
@@ -654,6 +655,12 @@ static const yytype_uint8 yytable[] = | |||
654 | 137, 0, 73, 139 | 655 | 137, 0, 73, 139 |
655 | }; | 656 | }; |
656 | 657 | ||
658 | #define yypact_value_is_default(yystate) \ | ||
659 | ((yystate) == (-78)) | ||
660 | |||
661 | #define yytable_value_is_error(yytable_value) \ | ||
662 | YYID (0) | ||
663 | |||
657 | static const yytype_int16 yycheck[] = | 664 | static const yytype_int16 yycheck[] = |
658 | { | 665 | { |
659 | 5, 38, 39, 17, 18, 19, 12, 12, 17, 18, | 666 | 5, 38, 39, 17, 18, 19, 12, 12, 17, 18, |
@@ -705,9 +712,18 @@ static const yytype_uint8 yystos[] = | |||
705 | 712 | ||
706 | /* Like YYERROR except do call yyerror. This remains here temporarily | 713 | /* Like YYERROR except do call yyerror. This remains here temporarily |
707 | to ease the transition to the new meaning of YYERROR, for GCC. | 714 | to ease the transition to the new meaning of YYERROR, for GCC. |
708 | Once GCC version 2 has supplanted version 1, this can go. */ | 715 | Once GCC version 2 has supplanted version 1, this can go. However, |
716 | YYFAIL appears to be in use. Nevertheless, it is formally deprecated | ||
717 | in Bison 2.4.2's NEWS entry, where a plan to phase it out is | ||
718 | discussed. */ | ||
709 | 719 | ||
710 | #define YYFAIL goto yyerrlab | 720 | #define YYFAIL goto yyerrlab |
721 | #if defined YYFAIL | ||
722 | /* This is here to suppress warnings from the GCC cpp's | ||
723 | -Wunused-macros. Normally we don't worry about that warning, but | ||
724 | some users do, and we want to make it easy for users to remove | ||
725 | YYFAIL uses, which will produce warnings from Bison 2.5. */ | ||
726 | #endif | ||
711 | 727 | ||
712 | #define YYRECOVERING() (!!yyerrstatus) | 728 | #define YYRECOVERING() (!!yyerrstatus) |
713 | 729 | ||
@@ -717,7 +733,6 @@ do \ | |||
717 | { \ | 733 | { \ |
718 | yychar = (Token); \ | 734 | yychar = (Token); \ |
719 | yylval = (Value); \ | 735 | yylval = (Value); \ |
720 | yytoken = YYTRANSLATE (yychar); \ | ||
721 | YYPOPSTACK (1); \ | 736 | YYPOPSTACK (1); \ |
722 | goto yybackup; \ | 737 | goto yybackup; \ |
723 | } \ | 738 | } \ |
@@ -759,19 +774,10 @@ while (YYID (0)) | |||
759 | #endif | 774 | #endif |
760 | 775 | ||
761 | 776 | ||
762 | /* YY_LOCATION_PRINT -- Print the location on the stream. | 777 | /* This macro is provided for backward compatibility. */ |
763 | This macro was not mandated originally: define only if we know | ||
764 | we won't break user code: when these are the locations we know. */ | ||
765 | 778 | ||
766 | #ifndef YY_LOCATION_PRINT | 779 | #ifndef YY_LOCATION_PRINT |
767 | # if YYLTYPE_IS_TRIVIAL | 780 | # define YY_LOCATION_PRINT(File, Loc) ((void) 0) |
768 | # define YY_LOCATION_PRINT(File, Loc) \ | ||
769 | fprintf (File, "%d.%d-%d.%d", \ | ||
770 | (Loc).first_line, (Loc).first_column, \ | ||
771 | (Loc).last_line, (Loc).last_column) | ||
772 | # else | ||
773 | # define YY_LOCATION_PRINT(File, Loc) ((void) 0) | ||
774 | # endif | ||
775 | #endif | 781 | #endif |
776 | 782 | ||
777 | 783 | ||
@@ -963,7 +969,6 @@ int yydebug; | |||
963 | # define YYMAXDEPTH 10000 | 969 | # define YYMAXDEPTH 10000 |
964 | #endif | 970 | #endif |
965 | 971 | ||
966 | |||
967 | 972 | ||
968 | #if YYERROR_VERBOSE | 973 | #if YYERROR_VERBOSE |
969 | 974 | ||
@@ -1066,115 +1071,142 @@ yytnamerr (char *yyres, const char *yystr) | |||
1066 | } | 1071 | } |
1067 | # endif | 1072 | # endif |
1068 | 1073 | ||
1069 | /* Copy into YYRESULT an error message about the unexpected token | 1074 | /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message |
1070 | YYCHAR while in state YYSTATE. Return the number of bytes copied, | 1075 | about the unexpected token YYTOKEN for the state stack whose top is |
1071 | including the terminating null byte. If YYRESULT is null, do not | 1076 | YYSSP. |
1072 | copy anything; just return the number of bytes that would be | ||
1073 | copied. As a special case, return 0 if an ordinary "syntax error" | ||
1074 | message will do. Return YYSIZE_MAXIMUM if overflow occurs during | ||
1075 | size calculation. */ | ||
1076 | static YYSIZE_T | ||
1077 | yysyntax_error (char *yyresult, int yystate, int yychar) | ||
1078 | { | ||
1079 | int yyn = yypact[yystate]; | ||
1080 | 1077 | ||
1081 | if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) | 1078 | Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is |
1082 | return 0; | 1079 | not large enough to hold the message. In that case, also set |
1083 | else | 1080 | *YYMSG_ALLOC to the required number of bytes. Return 2 if the |
1081 | required number of bytes is too large to store. */ | ||
1082 | static int | ||
1083 | yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | ||
1084 | yytype_int16 *yyssp, int yytoken) | ||
1085 | { | ||
1086 | YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); | ||
1087 | YYSIZE_T yysize = yysize0; | ||
1088 | YYSIZE_T yysize1; | ||
1089 | enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; | ||
1090 | /* Internationalized format string. */ | ||
1091 | const char *yyformat = 0; | ||
1092 | /* Arguments of yyformat. */ | ||
1093 | char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; | ||
1094 | /* Number of reported tokens (one for the "unexpected", one per | ||
1095 | "expected"). */ | ||
1096 | int yycount = 0; | ||
1097 | |||
1098 | /* There are many possibilities here to consider: | ||
1099 | - Assume YYFAIL is not used. It's too flawed to consider. See | ||
1100 | <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> | ||
1101 | for details. YYERROR is fine as it does not invoke this | ||
1102 | function. | ||
1103 | - If this state is a consistent state with a default action, then | ||
1104 | the only way this function was invoked is if the default action | ||
1105 | is an error action. In that case, don't check for expected | ||
1106 | tokens because there are none. | ||
1107 | - The only way there can be no lookahead present (in yychar) is if | ||
1108 | this state is a consistent state with a default action. Thus, | ||
1109 | detecting the absence of a lookahead is sufficient to determine | ||
1110 | that there is no unexpected or expected token to report. In that | ||
1111 | case, just report a simple "syntax error". | ||
1112 | - Don't assume there isn't a lookahead just because this state is a | ||
1113 | consistent state with a default action. There might have been a | ||
1114 | previous inconsistent state, consistent state with a non-default | ||
1115 | action, or user semantic action that manipulated yychar. | ||
1116 | - Of course, the expected token list depends on states to have | ||
1117 | correct lookahead information, and it depends on the parser not | ||
1118 | to perform extra reductions after fetching a lookahead from the | ||
1119 | scanner and before detecting a syntax error. Thus, state merging | ||
1120 | (from LALR or IELR) and default reductions corrupt the expected | ||
1121 | token list. However, the list is correct for canonical LR with | ||
1122 | one exception: it will still contain any token that will not be | ||
1123 | accepted due to an error action in a later state. | ||
1124 | */ | ||
1125 | if (yytoken != YYEMPTY) | ||
1084 | { | 1126 | { |
1085 | int yytype = YYTRANSLATE (yychar); | 1127 | int yyn = yypact[*yyssp]; |
1086 | YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); | 1128 | yyarg[yycount++] = yytname[yytoken]; |
1087 | YYSIZE_T yysize = yysize0; | 1129 | if (!yypact_value_is_default (yyn)) |
1088 | YYSIZE_T yysize1; | 1130 | { |
1089 | int yysize_overflow = 0; | 1131 | /* Start YYX at -YYN if negative to avoid negative indexes in |
1090 | enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; | 1132 | YYCHECK. In other words, skip the first -YYN actions for |
1091 | char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; | 1133 | this state because they are default actions. */ |
1092 | int yyx; | 1134 | int yyxbegin = yyn < 0 ? -yyn : 0; |
1093 | 1135 | /* Stay within bounds of both yycheck and yytname. */ | |
1094 | # if 0 | 1136 | int yychecklim = YYLAST - yyn + 1; |
1095 | /* This is so xgettext sees the translatable formats that are | 1137 | int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; |
1096 | constructed on the fly. */ | 1138 | int yyx; |
1097 | YY_("syntax error, unexpected %s"); | 1139 | |
1098 | YY_("syntax error, unexpected %s, expecting %s"); | 1140 | for (yyx = yyxbegin; yyx < yyxend; ++yyx) |
1099 | YY_("syntax error, unexpected %s, expecting %s or %s"); | 1141 | if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR |
1100 | YY_("syntax error, unexpected %s, expecting %s or %s or %s"); | 1142 | && !yytable_value_is_error (yytable[yyx + yyn])) |
1101 | YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); | 1143 | { |
1102 | # endif | 1144 | if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) |
1103 | char *yyfmt; | 1145 | { |
1104 | char const *yyf; | 1146 | yycount = 1; |
1105 | static char const yyunexpected[] = "syntax error, unexpected %s"; | 1147 | yysize = yysize0; |
1106 | static char const yyexpecting[] = ", expecting %s"; | 1148 | break; |
1107 | static char const yyor[] = " or %s"; | 1149 | } |
1108 | char yyformat[sizeof yyunexpected | 1150 | yyarg[yycount++] = yytname[yyx]; |
1109 | + sizeof yyexpecting - 1 | 1151 | yysize1 = yysize + yytnamerr (0, yytname[yyx]); |
1110 | + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) | 1152 | if (! (yysize <= yysize1 |
1111 | * (sizeof yyor - 1))]; | 1153 | && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) |
1112 | char const *yyprefix = yyexpecting; | 1154 | return 2; |
1113 | 1155 | yysize = yysize1; | |
1114 | /* Start YYX at -YYN if negative to avoid negative indexes in | 1156 | } |
1115 | YYCHECK. */ | 1157 | } |
1116 | int yyxbegin = yyn < 0 ? -yyn : 0; | 1158 | } |
1117 | |||
1118 | /* Stay within bounds of both yycheck and yytname. */ | ||
1119 | int yychecklim = YYLAST - yyn + 1; | ||
1120 | int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; | ||
1121 | int yycount = 1; | ||
1122 | |||
1123 | yyarg[0] = yytname[yytype]; | ||
1124 | yyfmt = yystpcpy (yyformat, yyunexpected); | ||
1125 | |||
1126 | for (yyx = yyxbegin; yyx < yyxend; ++yyx) | ||
1127 | if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) | ||
1128 | { | ||
1129 | if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) | ||
1130 | { | ||
1131 | yycount = 1; | ||
1132 | yysize = yysize0; | ||
1133 | yyformat[sizeof yyunexpected - 1] = '\0'; | ||
1134 | break; | ||
1135 | } | ||
1136 | yyarg[yycount++] = yytname[yyx]; | ||
1137 | yysize1 = yysize + yytnamerr (0, yytname[yyx]); | ||
1138 | yysize_overflow |= (yysize1 < yysize); | ||
1139 | yysize = yysize1; | ||
1140 | yyfmt = yystpcpy (yyfmt, yyprefix); | ||
1141 | yyprefix = yyor; | ||
1142 | } | ||
1143 | 1159 | ||
1144 | yyf = YY_(yyformat); | 1160 | switch (yycount) |
1145 | yysize1 = yysize + yystrlen (yyf); | 1161 | { |
1146 | yysize_overflow |= (yysize1 < yysize); | 1162 | # define YYCASE_(N, S) \ |
1147 | yysize = yysize1; | 1163 | case N: \ |
1164 | yyformat = S; \ | ||
1165 | break | ||
1166 | YYCASE_(0, YY_("syntax error")); | ||
1167 | YYCASE_(1, YY_("syntax error, unexpected %s")); | ||
1168 | YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); | ||
1169 | YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); | ||
1170 | YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); | ||
1171 | YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); | ||
1172 | # undef YYCASE_ | ||
1173 | } | ||
1148 | 1174 | ||
1149 | if (yysize_overflow) | 1175 | yysize1 = yysize + yystrlen (yyformat); |
1150 | return YYSIZE_MAXIMUM; | 1176 | if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) |
1177 | return 2; | ||
1178 | yysize = yysize1; | ||
1151 | 1179 | ||
1152 | if (yyresult) | 1180 | if (*yymsg_alloc < yysize) |
1153 | { | 1181 | { |
1154 | /* Avoid sprintf, as that infringes on the user's name space. | 1182 | *yymsg_alloc = 2 * yysize; |
1155 | Don't have undefined behavior even if the translation | 1183 | if (! (yysize <= *yymsg_alloc |
1156 | produced a string with the wrong number of "%s"s. */ | 1184 | && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) |
1157 | char *yyp = yyresult; | 1185 | *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; |
1158 | int yyi = 0; | 1186 | return 1; |
1159 | while ((*yyp = *yyf) != '\0') | ||
1160 | { | ||
1161 | if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) | ||
1162 | { | ||
1163 | yyp += yytnamerr (yyp, yyarg[yyi++]); | ||
1164 | yyf += 2; | ||
1165 | } | ||
1166 | else | ||
1167 | { | ||
1168 | yyp++; | ||
1169 | yyf++; | ||
1170 | } | ||
1171 | } | ||
1172 | } | ||
1173 | return yysize; | ||
1174 | } | 1187 | } |
1188 | |||
1189 | /* Avoid sprintf, as that infringes on the user's name space. | ||
1190 | Don't have undefined behavior even if the translation | ||
1191 | produced a string with the wrong number of "%s"s. */ | ||
1192 | { | ||
1193 | char *yyp = *yymsg; | ||
1194 | int yyi = 0; | ||
1195 | while ((*yyp = *yyformat) != '\0') | ||
1196 | if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) | ||
1197 | { | ||
1198 | yyp += yytnamerr (yyp, yyarg[yyi++]); | ||
1199 | yyformat += 2; | ||
1200 | } | ||
1201 | else | ||
1202 | { | ||
1203 | yyp++; | ||
1204 | yyformat++; | ||
1205 | } | ||
1206 | } | ||
1207 | return 0; | ||
1175 | } | 1208 | } |
1176 | #endif /* YYERROR_VERBOSE */ | 1209 | #endif /* YYERROR_VERBOSE */ |
1177 | |||
1178 | 1210 | ||
1179 | /*-----------------------------------------------. | 1211 | /*-----------------------------------------------. |
1180 | | Release the memory associated to this symbol. | | 1212 | | Release the memory associated to this symbol. | |
@@ -1207,6 +1239,7 @@ yydestruct (yymsg, yytype, yyvaluep) | |||
1207 | } | 1239 | } |
1208 | } | 1240 | } |
1209 | 1241 | ||
1242 | |||
1210 | /* Prevent warnings from -Wmissing-prototypes. */ | 1243 | /* Prevent warnings from -Wmissing-prototypes. */ |
1211 | #ifdef YYPARSE_PARAM | 1244 | #ifdef YYPARSE_PARAM |
1212 | #if defined __STDC__ || defined __cplusplus | 1245 | #if defined __STDC__ || defined __cplusplus |
@@ -1233,10 +1266,9 @@ YYSTYPE yylval; | |||
1233 | int yynerrs; | 1266 | int yynerrs; |
1234 | 1267 | ||
1235 | 1268 | ||
1236 | 1269 | /*----------. | |
1237 | /*-------------------------. | 1270 | | yyparse. | |
1238 | | yyparse or yypush_parse. | | 1271 | `----------*/ |
1239 | `-------------------------*/ | ||
1240 | 1272 | ||
1241 | #ifdef YYPARSE_PARAM | 1273 | #ifdef YYPARSE_PARAM |
1242 | #if (defined __STDC__ || defined __C99__FUNC__ \ | 1274 | #if (defined __STDC__ || defined __C99__FUNC__ \ |
@@ -1260,8 +1292,6 @@ yyparse () | |||
1260 | #endif | 1292 | #endif |
1261 | #endif | 1293 | #endif |
1262 | { | 1294 | { |
1263 | |||
1264 | |||
1265 | int yystate; | 1295 | int yystate; |
1266 | /* Number of tokens to shift before error messages enabled. */ | 1296 | /* Number of tokens to shift before error messages enabled. */ |
1267 | int yyerrstatus; | 1297 | int yyerrstatus; |
@@ -1416,7 +1446,7 @@ yybackup: | |||
1416 | 1446 | ||
1417 | /* First try to decide what to do without reference to lookahead token. */ | 1447 | /* First try to decide what to do without reference to lookahead token. */ |
1418 | yyn = yypact[yystate]; | 1448 | yyn = yypact[yystate]; |
1419 | if (yyn == YYPACT_NINF) | 1449 | if (yypact_value_is_default (yyn)) |
1420 | goto yydefault; | 1450 | goto yydefault; |
1421 | 1451 | ||
1422 | /* Not known => get a lookahead token if don't already have one. */ | 1452 | /* Not known => get a lookahead token if don't already have one. */ |
@@ -1447,8 +1477,8 @@ yybackup: | |||
1447 | yyn = yytable[yyn]; | 1477 | yyn = yytable[yyn]; |
1448 | if (yyn <= 0) | 1478 | if (yyn <= 0) |
1449 | { | 1479 | { |
1450 | if (yyn == 0 || yyn == YYTABLE_NINF) | 1480 | if (yytable_value_is_error (yyn)) |
1451 | goto yyerrlab; | 1481 | goto yyerrlab; |
1452 | yyn = -yyn; | 1482 | yyn = -yyn; |
1453 | goto yyreduce; | 1483 | goto yyreduce; |
1454 | } | 1484 | } |
@@ -1503,72 +1533,72 @@ yyreduce: | |||
1503 | { | 1533 | { |
1504 | case 2: | 1534 | case 2: |
1505 | 1535 | ||
1506 | /* Line 1455 of yacc.c */ | 1536 | /* Line 1806 of yacc.c */ |
1507 | #line 110 "dtc-parser.y" | 1537 | #line 110 "dtc-parser.y" |
1508 | { | 1538 | { |
1509 | the_boot_info = build_boot_info((yyvsp[(3) - (4)].re), (yyvsp[(4) - (4)].node), | 1539 | the_boot_info = build_boot_info((yyvsp[(3) - (4)].re), (yyvsp[(4) - (4)].node), |
1510 | guess_boot_cpuid((yyvsp[(4) - (4)].node))); | 1540 | guess_boot_cpuid((yyvsp[(4) - (4)].node))); |
1511 | ;} | 1541 | } |
1512 | break; | 1542 | break; |
1513 | 1543 | ||
1514 | case 3: | 1544 | case 3: |
1515 | 1545 | ||
1516 | /* Line 1455 of yacc.c */ | 1546 | /* Line 1806 of yacc.c */ |
1517 | #line 118 "dtc-parser.y" | 1547 | #line 118 "dtc-parser.y" |
1518 | { | 1548 | { |
1519 | (yyval.re) = NULL; | 1549 | (yyval.re) = NULL; |
1520 | ;} | 1550 | } |
1521 | break; | 1551 | break; |
1522 | 1552 | ||
1523 | case 4: | 1553 | case 4: |
1524 | 1554 | ||
1525 | /* Line 1455 of yacc.c */ | 1555 | /* Line 1806 of yacc.c */ |
1526 | #line 122 "dtc-parser.y" | 1556 | #line 122 "dtc-parser.y" |
1527 | { | 1557 | { |
1528 | (yyval.re) = chain_reserve_entry((yyvsp[(1) - (2)].re), (yyvsp[(2) - (2)].re)); | 1558 | (yyval.re) = chain_reserve_entry((yyvsp[(1) - (2)].re), (yyvsp[(2) - (2)].re)); |
1529 | ;} | 1559 | } |
1530 | break; | 1560 | break; |
1531 | 1561 | ||
1532 | case 5: | 1562 | case 5: |
1533 | 1563 | ||
1534 | /* Line 1455 of yacc.c */ | 1564 | /* Line 1806 of yacc.c */ |
1535 | #line 129 "dtc-parser.y" | 1565 | #line 129 "dtc-parser.y" |
1536 | { | 1566 | { |
1537 | (yyval.re) = build_reserve_entry((yyvsp[(2) - (4)].integer), (yyvsp[(3) - (4)].integer)); | 1567 | (yyval.re) = build_reserve_entry((yyvsp[(2) - (4)].integer), (yyvsp[(3) - (4)].integer)); |
1538 | ;} | 1568 | } |
1539 | break; | 1569 | break; |
1540 | 1570 | ||
1541 | case 6: | 1571 | case 6: |
1542 | 1572 | ||
1543 | /* Line 1455 of yacc.c */ | 1573 | /* Line 1806 of yacc.c */ |
1544 | #line 133 "dtc-parser.y" | 1574 | #line 133 "dtc-parser.y" |
1545 | { | 1575 | { |
1546 | add_label(&(yyvsp[(2) - (2)].re)->labels, (yyvsp[(1) - (2)].labelref)); | 1576 | add_label(&(yyvsp[(2) - (2)].re)->labels, (yyvsp[(1) - (2)].labelref)); |
1547 | (yyval.re) = (yyvsp[(2) - (2)].re); | 1577 | (yyval.re) = (yyvsp[(2) - (2)].re); |
1548 | ;} | 1578 | } |
1549 | break; | 1579 | break; |
1550 | 1580 | ||
1551 | case 7: | 1581 | case 7: |
1552 | 1582 | ||
1553 | /* Line 1455 of yacc.c */ | 1583 | /* Line 1806 of yacc.c */ |
1554 | #line 141 "dtc-parser.y" | 1584 | #line 141 "dtc-parser.y" |
1555 | { | 1585 | { |
1556 | (yyval.node) = name_node((yyvsp[(2) - (2)].node), ""); | 1586 | (yyval.node) = name_node((yyvsp[(2) - (2)].node), ""); |
1557 | ;} | 1587 | } |
1558 | break; | 1588 | break; |
1559 | 1589 | ||
1560 | case 8: | 1590 | case 8: |
1561 | 1591 | ||
1562 | /* Line 1455 of yacc.c */ | 1592 | /* Line 1806 of yacc.c */ |
1563 | #line 145 "dtc-parser.y" | 1593 | #line 145 "dtc-parser.y" |
1564 | { | 1594 | { |
1565 | (yyval.node) = merge_nodes((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); | 1595 | (yyval.node) = merge_nodes((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); |
1566 | ;} | 1596 | } |
1567 | break; | 1597 | break; |
1568 | 1598 | ||
1569 | case 9: | 1599 | case 9: |
1570 | 1600 | ||
1571 | /* Line 1455 of yacc.c */ | 1601 | /* Line 1806 of yacc.c */ |
1572 | #line 149 "dtc-parser.y" | 1602 | #line 149 "dtc-parser.y" |
1573 | { | 1603 | { |
1574 | struct node *target = get_node_by_ref((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].labelref)); | 1604 | struct node *target = get_node_by_ref((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].labelref)); |
@@ -1578,12 +1608,12 @@ yyreduce: | |||
1578 | else | 1608 | else |
1579 | print_error("label or path, '%s', not found", (yyvsp[(2) - (3)].labelref)); | 1609 | print_error("label or path, '%s', not found", (yyvsp[(2) - (3)].labelref)); |
1580 | (yyval.node) = (yyvsp[(1) - (3)].node); | 1610 | (yyval.node) = (yyvsp[(1) - (3)].node); |
1581 | ;} | 1611 | } |
1582 | break; | 1612 | break; |
1583 | 1613 | ||
1584 | case 10: | 1614 | case 10: |
1585 | 1615 | ||
1586 | /* Line 1455 of yacc.c */ | 1616 | /* Line 1806 of yacc.c */ |
1587 | #line 159 "dtc-parser.y" | 1617 | #line 159 "dtc-parser.y" |
1588 | { | 1618 | { |
1589 | struct node *target = get_node_by_ref((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].labelref)); | 1619 | struct node *target = get_node_by_ref((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].labelref)); |
@@ -1594,112 +1624,112 @@ yyreduce: | |||
1594 | delete_node(target); | 1624 | delete_node(target); |
1595 | 1625 | ||
1596 | (yyval.node) = (yyvsp[(1) - (4)].node); | 1626 | (yyval.node) = (yyvsp[(1) - (4)].node); |
1597 | ;} | 1627 | } |
1598 | break; | 1628 | break; |
1599 | 1629 | ||
1600 | case 11: | 1630 | case 11: |
1601 | 1631 | ||
1602 | /* Line 1455 of yacc.c */ | 1632 | /* Line 1806 of yacc.c */ |
1603 | #line 173 "dtc-parser.y" | 1633 | #line 173 "dtc-parser.y" |
1604 | { | 1634 | { |
1605 | (yyval.node) = build_node((yyvsp[(2) - (5)].proplist), (yyvsp[(3) - (5)].nodelist)); | 1635 | (yyval.node) = build_node((yyvsp[(2) - (5)].proplist), (yyvsp[(3) - (5)].nodelist)); |
1606 | ;} | 1636 | } |
1607 | break; | 1637 | break; |
1608 | 1638 | ||
1609 | case 12: | 1639 | case 12: |
1610 | 1640 | ||
1611 | /* Line 1455 of yacc.c */ | 1641 | /* Line 1806 of yacc.c */ |
1612 | #line 180 "dtc-parser.y" | 1642 | #line 180 "dtc-parser.y" |
1613 | { | 1643 | { |
1614 | (yyval.proplist) = NULL; | 1644 | (yyval.proplist) = NULL; |
1615 | ;} | 1645 | } |
1616 | break; | 1646 | break; |
1617 | 1647 | ||
1618 | case 13: | 1648 | case 13: |
1619 | 1649 | ||
1620 | /* Line 1455 of yacc.c */ | 1650 | /* Line 1806 of yacc.c */ |
1621 | #line 184 "dtc-parser.y" | 1651 | #line 184 "dtc-parser.y" |
1622 | { | 1652 | { |
1623 | (yyval.proplist) = chain_property((yyvsp[(2) - (2)].prop), (yyvsp[(1) - (2)].proplist)); | 1653 | (yyval.proplist) = chain_property((yyvsp[(2) - (2)].prop), (yyvsp[(1) - (2)].proplist)); |
1624 | ;} | 1654 | } |
1625 | break; | 1655 | break; |
1626 | 1656 | ||
1627 | case 14: | 1657 | case 14: |
1628 | 1658 | ||
1629 | /* Line 1455 of yacc.c */ | 1659 | /* Line 1806 of yacc.c */ |
1630 | #line 191 "dtc-parser.y" | 1660 | #line 191 "dtc-parser.y" |
1631 | { | 1661 | { |
1632 | (yyval.prop) = build_property((yyvsp[(1) - (4)].propnodename), (yyvsp[(3) - (4)].data)); | 1662 | (yyval.prop) = build_property((yyvsp[(1) - (4)].propnodename), (yyvsp[(3) - (4)].data)); |
1633 | ;} | 1663 | } |
1634 | break; | 1664 | break; |
1635 | 1665 | ||
1636 | case 15: | 1666 | case 15: |
1637 | 1667 | ||
1638 | /* Line 1455 of yacc.c */ | 1668 | /* Line 1806 of yacc.c */ |
1639 | #line 195 "dtc-parser.y" | 1669 | #line 195 "dtc-parser.y" |
1640 | { | 1670 | { |
1641 | (yyval.prop) = build_property((yyvsp[(1) - (2)].propnodename), empty_data); | 1671 | (yyval.prop) = build_property((yyvsp[(1) - (2)].propnodename), empty_data); |
1642 | ;} | 1672 | } |
1643 | break; | 1673 | break; |
1644 | 1674 | ||
1645 | case 16: | 1675 | case 16: |
1646 | 1676 | ||
1647 | /* Line 1455 of yacc.c */ | 1677 | /* Line 1806 of yacc.c */ |
1648 | #line 199 "dtc-parser.y" | 1678 | #line 199 "dtc-parser.y" |
1649 | { | 1679 | { |
1650 | (yyval.prop) = build_property_delete((yyvsp[(2) - (3)].propnodename)); | 1680 | (yyval.prop) = build_property_delete((yyvsp[(2) - (3)].propnodename)); |
1651 | ;} | 1681 | } |
1652 | break; | 1682 | break; |
1653 | 1683 | ||
1654 | case 17: | 1684 | case 17: |
1655 | 1685 | ||
1656 | /* Line 1455 of yacc.c */ | 1686 | /* Line 1806 of yacc.c */ |
1657 | #line 203 "dtc-parser.y" | 1687 | #line 203 "dtc-parser.y" |
1658 | { | 1688 | { |
1659 | add_label(&(yyvsp[(2) - (2)].prop)->labels, (yyvsp[(1) - (2)].labelref)); | 1689 | add_label(&(yyvsp[(2) - (2)].prop)->labels, (yyvsp[(1) - (2)].labelref)); |
1660 | (yyval.prop) = (yyvsp[(2) - (2)].prop); | 1690 | (yyval.prop) = (yyvsp[(2) - (2)].prop); |
1661 | ;} | 1691 | } |
1662 | break; | 1692 | break; |
1663 | 1693 | ||
1664 | case 18: | 1694 | case 18: |
1665 | 1695 | ||
1666 | /* Line 1455 of yacc.c */ | 1696 | /* Line 1806 of yacc.c */ |
1667 | #line 211 "dtc-parser.y" | 1697 | #line 211 "dtc-parser.y" |
1668 | { | 1698 | { |
1669 | (yyval.data) = data_merge((yyvsp[(1) - (2)].data), (yyvsp[(2) - (2)].data)); | 1699 | (yyval.data) = data_merge((yyvsp[(1) - (2)].data), (yyvsp[(2) - (2)].data)); |
1670 | ;} | 1700 | } |
1671 | break; | 1701 | break; |
1672 | 1702 | ||
1673 | case 19: | 1703 | case 19: |
1674 | 1704 | ||
1675 | /* Line 1455 of yacc.c */ | 1705 | /* Line 1806 of yacc.c */ |
1676 | #line 215 "dtc-parser.y" | 1706 | #line 215 "dtc-parser.y" |
1677 | { | 1707 | { |
1678 | (yyval.data) = data_merge((yyvsp[(1) - (3)].data), (yyvsp[(2) - (3)].array).data); | 1708 | (yyval.data) = data_merge((yyvsp[(1) - (3)].data), (yyvsp[(2) - (3)].array).data); |
1679 | ;} | 1709 | } |
1680 | break; | 1710 | break; |
1681 | 1711 | ||
1682 | case 20: | 1712 | case 20: |
1683 | 1713 | ||
1684 | /* Line 1455 of yacc.c */ | 1714 | /* Line 1806 of yacc.c */ |
1685 | #line 219 "dtc-parser.y" | 1715 | #line 219 "dtc-parser.y" |
1686 | { | 1716 | { |
1687 | (yyval.data) = data_merge((yyvsp[(1) - (4)].data), (yyvsp[(3) - (4)].data)); | 1717 | (yyval.data) = data_merge((yyvsp[(1) - (4)].data), (yyvsp[(3) - (4)].data)); |
1688 | ;} | 1718 | } |
1689 | break; | 1719 | break; |
1690 | 1720 | ||
1691 | case 21: | 1721 | case 21: |
1692 | 1722 | ||
1693 | /* Line 1455 of yacc.c */ | 1723 | /* Line 1806 of yacc.c */ |
1694 | #line 223 "dtc-parser.y" | 1724 | #line 223 "dtc-parser.y" |
1695 | { | 1725 | { |
1696 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), REF_PATH, (yyvsp[(2) - (2)].labelref)); | 1726 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), REF_PATH, (yyvsp[(2) - (2)].labelref)); |
1697 | ;} | 1727 | } |
1698 | break; | 1728 | break; |
1699 | 1729 | ||
1700 | case 22: | 1730 | case 22: |
1701 | 1731 | ||
1702 | /* Line 1455 of yacc.c */ | 1732 | /* Line 1806 of yacc.c */ |
1703 | #line 227 "dtc-parser.y" | 1733 | #line 227 "dtc-parser.y" |
1704 | { | 1734 | { |
1705 | FILE *f = srcfile_relative_open((yyvsp[(4) - (9)].data).val, NULL); | 1735 | FILE *f = srcfile_relative_open((yyvsp[(4) - (9)].data).val, NULL); |
@@ -1716,12 +1746,12 @@ yyreduce: | |||
1716 | 1746 | ||
1717 | (yyval.data) = data_merge((yyvsp[(1) - (9)].data), d); | 1747 | (yyval.data) = data_merge((yyvsp[(1) - (9)].data), d); |
1718 | fclose(f); | 1748 | fclose(f); |
1719 | ;} | 1749 | } |
1720 | break; | 1750 | break; |
1721 | 1751 | ||
1722 | case 23: | 1752 | case 23: |
1723 | 1753 | ||
1724 | /* Line 1455 of yacc.c */ | 1754 | /* Line 1806 of yacc.c */ |
1725 | #line 244 "dtc-parser.y" | 1755 | #line 244 "dtc-parser.y" |
1726 | { | 1756 | { |
1727 | FILE *f = srcfile_relative_open((yyvsp[(4) - (5)].data).val, NULL); | 1757 | FILE *f = srcfile_relative_open((yyvsp[(4) - (5)].data).val, NULL); |
@@ -1731,48 +1761,48 @@ yyreduce: | |||
1731 | 1761 | ||
1732 | (yyval.data) = data_merge((yyvsp[(1) - (5)].data), d); | 1762 | (yyval.data) = data_merge((yyvsp[(1) - (5)].data), d); |
1733 | fclose(f); | 1763 | fclose(f); |
1734 | ;} | 1764 | } |
1735 | break; | 1765 | break; |
1736 | 1766 | ||
1737 | case 24: | 1767 | case 24: |
1738 | 1768 | ||
1739 | /* Line 1455 of yacc.c */ | 1769 | /* Line 1806 of yacc.c */ |
1740 | #line 254 "dtc-parser.y" | 1770 | #line 254 "dtc-parser.y" |
1741 | { | 1771 | { |
1742 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); | 1772 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); |
1743 | ;} | 1773 | } |
1744 | break; | 1774 | break; |
1745 | 1775 | ||
1746 | case 25: | 1776 | case 25: |
1747 | 1777 | ||
1748 | /* Line 1455 of yacc.c */ | 1778 | /* Line 1806 of yacc.c */ |
1749 | #line 261 "dtc-parser.y" | 1779 | #line 261 "dtc-parser.y" |
1750 | { | 1780 | { |
1751 | (yyval.data) = empty_data; | 1781 | (yyval.data) = empty_data; |
1752 | ;} | 1782 | } |
1753 | break; | 1783 | break; |
1754 | 1784 | ||
1755 | case 26: | 1785 | case 26: |
1756 | 1786 | ||
1757 | /* Line 1455 of yacc.c */ | 1787 | /* Line 1806 of yacc.c */ |
1758 | #line 265 "dtc-parser.y" | 1788 | #line 265 "dtc-parser.y" |
1759 | { | 1789 | { |
1760 | (yyval.data) = (yyvsp[(1) - (2)].data); | 1790 | (yyval.data) = (yyvsp[(1) - (2)].data); |
1761 | ;} | 1791 | } |
1762 | break; | 1792 | break; |
1763 | 1793 | ||
1764 | case 27: | 1794 | case 27: |
1765 | 1795 | ||
1766 | /* Line 1455 of yacc.c */ | 1796 | /* Line 1806 of yacc.c */ |
1767 | #line 269 "dtc-parser.y" | 1797 | #line 269 "dtc-parser.y" |
1768 | { | 1798 | { |
1769 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); | 1799 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); |
1770 | ;} | 1800 | } |
1771 | break; | 1801 | break; |
1772 | 1802 | ||
1773 | case 28: | 1803 | case 28: |
1774 | 1804 | ||
1775 | /* Line 1455 of yacc.c */ | 1805 | /* Line 1806 of yacc.c */ |
1776 | #line 276 "dtc-parser.y" | 1806 | #line 276 "dtc-parser.y" |
1777 | { | 1807 | { |
1778 | (yyval.array).data = empty_data; | 1808 | (yyval.array).data = empty_data; |
@@ -1787,22 +1817,22 @@ yyreduce: | |||
1787 | " are currently supported"); | 1817 | " are currently supported"); |
1788 | (yyval.array).bits = 32; | 1818 | (yyval.array).bits = 32; |
1789 | } | 1819 | } |
1790 | ;} | 1820 | } |
1791 | break; | 1821 | break; |
1792 | 1822 | ||
1793 | case 29: | 1823 | case 29: |
1794 | 1824 | ||
1795 | /* Line 1455 of yacc.c */ | 1825 | /* Line 1806 of yacc.c */ |
1796 | #line 291 "dtc-parser.y" | 1826 | #line 291 "dtc-parser.y" |
1797 | { | 1827 | { |
1798 | (yyval.array).data = empty_data; | 1828 | (yyval.array).data = empty_data; |
1799 | (yyval.array).bits = 32; | 1829 | (yyval.array).bits = 32; |
1800 | ;} | 1830 | } |
1801 | break; | 1831 | break; |
1802 | 1832 | ||
1803 | case 30: | 1833 | case 30: |
1804 | 1834 | ||
1805 | /* Line 1455 of yacc.c */ | 1835 | /* Line 1806 of yacc.c */ |
1806 | #line 296 "dtc-parser.y" | 1836 | #line 296 "dtc-parser.y" |
1807 | { | 1837 | { |
1808 | if ((yyvsp[(1) - (2)].array).bits < 64) { | 1838 | if ((yyvsp[(1) - (2)].array).bits < 64) { |
@@ -1822,12 +1852,12 @@ yyreduce: | |||
1822 | } | 1852 | } |
1823 | 1853 | ||
1824 | (yyval.array).data = data_append_integer((yyvsp[(1) - (2)].array).data, (yyvsp[(2) - (2)].integer), (yyvsp[(1) - (2)].array).bits); | 1854 | (yyval.array).data = data_append_integer((yyvsp[(1) - (2)].array).data, (yyvsp[(2) - (2)].integer), (yyvsp[(1) - (2)].array).bits); |
1825 | ;} | 1855 | } |
1826 | break; | 1856 | break; |
1827 | 1857 | ||
1828 | case 31: | 1858 | case 31: |
1829 | 1859 | ||
1830 | /* Line 1455 of yacc.c */ | 1860 | /* Line 1806 of yacc.c */ |
1831 | #line 316 "dtc-parser.y" | 1861 | #line 316 "dtc-parser.y" |
1832 | { | 1862 | { |
1833 | uint64_t val = ~0ULL >> (64 - (yyvsp[(1) - (2)].array).bits); | 1863 | uint64_t val = ~0ULL >> (64 - (yyvsp[(1) - (2)].array).bits); |
@@ -1841,288 +1871,299 @@ yyreduce: | |||
1841 | "arrays with 32-bit elements."); | 1871 | "arrays with 32-bit elements."); |
1842 | 1872 | ||
1843 | (yyval.array).data = data_append_integer((yyvsp[(1) - (2)].array).data, val, (yyvsp[(1) - (2)].array).bits); | 1873 | (yyval.array).data = data_append_integer((yyvsp[(1) - (2)].array).data, val, (yyvsp[(1) - (2)].array).bits); |
1844 | ;} | 1874 | } |
1845 | break; | 1875 | break; |
1846 | 1876 | ||
1847 | case 32: | 1877 | case 32: |
1848 | 1878 | ||
1849 | /* Line 1455 of yacc.c */ | 1879 | /* Line 1806 of yacc.c */ |
1850 | #line 330 "dtc-parser.y" | 1880 | #line 330 "dtc-parser.y" |
1851 | { | 1881 | { |
1852 | (yyval.array).data = data_add_marker((yyvsp[(1) - (2)].array).data, LABEL, (yyvsp[(2) - (2)].labelref)); | 1882 | (yyval.array).data = data_add_marker((yyvsp[(1) - (2)].array).data, LABEL, (yyvsp[(2) - (2)].labelref)); |
1853 | ;} | 1883 | } |
1854 | break; | 1884 | break; |
1855 | 1885 | ||
1856 | case 33: | 1886 | case 33: |
1857 | 1887 | ||
1858 | /* Line 1455 of yacc.c */ | 1888 | /* Line 1806 of yacc.c */ |
1859 | #line 337 "dtc-parser.y" | 1889 | #line 337 "dtc-parser.y" |
1860 | { | 1890 | { |
1861 | (yyval.integer) = eval_literal((yyvsp[(1) - (1)].literal), 0, 64); | 1891 | (yyval.integer) = eval_literal((yyvsp[(1) - (1)].literal), 0, 64); |
1862 | ;} | 1892 | } |
1863 | break; | 1893 | break; |
1864 | 1894 | ||
1865 | case 34: | 1895 | case 34: |
1866 | 1896 | ||
1867 | /* Line 1455 of yacc.c */ | 1897 | /* Line 1806 of yacc.c */ |
1868 | #line 341 "dtc-parser.y" | 1898 | #line 341 "dtc-parser.y" |
1869 | { | 1899 | { |
1870 | (yyval.integer) = eval_char_literal((yyvsp[(1) - (1)].literal)); | 1900 | (yyval.integer) = eval_char_literal((yyvsp[(1) - (1)].literal)); |
1871 | ;} | 1901 | } |
1872 | break; | 1902 | break; |
1873 | 1903 | ||
1874 | case 35: | 1904 | case 35: |
1875 | 1905 | ||
1876 | /* Line 1455 of yacc.c */ | 1906 | /* Line 1806 of yacc.c */ |
1877 | #line 345 "dtc-parser.y" | 1907 | #line 345 "dtc-parser.y" |
1878 | { | 1908 | { |
1879 | (yyval.integer) = (yyvsp[(2) - (3)].integer); | 1909 | (yyval.integer) = (yyvsp[(2) - (3)].integer); |
1880 | ;} | 1910 | } |
1881 | break; | 1911 | break; |
1882 | 1912 | ||
1883 | case 38: | 1913 | case 38: |
1884 | 1914 | ||
1885 | /* Line 1455 of yacc.c */ | 1915 | /* Line 1806 of yacc.c */ |
1886 | #line 356 "dtc-parser.y" | 1916 | #line 356 "dtc-parser.y" |
1887 | { (yyval.integer) = (yyvsp[(1) - (5)].integer) ? (yyvsp[(3) - (5)].integer) : (yyvsp[(5) - (5)].integer); ;} | 1917 | { (yyval.integer) = (yyvsp[(1) - (5)].integer) ? (yyvsp[(3) - (5)].integer) : (yyvsp[(5) - (5)].integer); } |
1888 | break; | 1918 | break; |
1889 | 1919 | ||
1890 | case 40: | 1920 | case 40: |
1891 | 1921 | ||
1892 | /* Line 1455 of yacc.c */ | 1922 | /* Line 1806 of yacc.c */ |
1893 | #line 361 "dtc-parser.y" | 1923 | #line 361 "dtc-parser.y" |
1894 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) || (yyvsp[(3) - (3)].integer); ;} | 1924 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) || (yyvsp[(3) - (3)].integer); } |
1895 | break; | 1925 | break; |
1896 | 1926 | ||
1897 | case 42: | 1927 | case 42: |
1898 | 1928 | ||
1899 | /* Line 1455 of yacc.c */ | 1929 | /* Line 1806 of yacc.c */ |
1900 | #line 366 "dtc-parser.y" | 1930 | #line 366 "dtc-parser.y" |
1901 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) && (yyvsp[(3) - (3)].integer); ;} | 1931 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) && (yyvsp[(3) - (3)].integer); } |
1902 | break; | 1932 | break; |
1903 | 1933 | ||
1904 | case 44: | 1934 | case 44: |
1905 | 1935 | ||
1906 | /* Line 1455 of yacc.c */ | 1936 | /* Line 1806 of yacc.c */ |
1907 | #line 371 "dtc-parser.y" | 1937 | #line 371 "dtc-parser.y" |
1908 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) | (yyvsp[(3) - (3)].integer); ;} | 1938 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) | (yyvsp[(3) - (3)].integer); } |
1909 | break; | 1939 | break; |
1910 | 1940 | ||
1911 | case 46: | 1941 | case 46: |
1912 | 1942 | ||
1913 | /* Line 1455 of yacc.c */ | 1943 | /* Line 1806 of yacc.c */ |
1914 | #line 376 "dtc-parser.y" | 1944 | #line 376 "dtc-parser.y" |
1915 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) ^ (yyvsp[(3) - (3)].integer); ;} | 1945 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) ^ (yyvsp[(3) - (3)].integer); } |
1916 | break; | 1946 | break; |
1917 | 1947 | ||
1918 | case 48: | 1948 | case 48: |
1919 | 1949 | ||
1920 | /* Line 1455 of yacc.c */ | 1950 | /* Line 1806 of yacc.c */ |
1921 | #line 381 "dtc-parser.y" | 1951 | #line 381 "dtc-parser.y" |
1922 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) & (yyvsp[(3) - (3)].integer); ;} | 1952 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) & (yyvsp[(3) - (3)].integer); } |
1923 | break; | 1953 | break; |
1924 | 1954 | ||
1925 | case 50: | 1955 | case 50: |
1926 | 1956 | ||
1927 | /* Line 1455 of yacc.c */ | 1957 | /* Line 1806 of yacc.c */ |
1928 | #line 386 "dtc-parser.y" | 1958 | #line 386 "dtc-parser.y" |
1929 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) == (yyvsp[(3) - (3)].integer); ;} | 1959 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) == (yyvsp[(3) - (3)].integer); } |
1930 | break; | 1960 | break; |
1931 | 1961 | ||
1932 | case 51: | 1962 | case 51: |
1933 | 1963 | ||
1934 | /* Line 1455 of yacc.c */ | 1964 | /* Line 1806 of yacc.c */ |
1935 | #line 387 "dtc-parser.y" | 1965 | #line 387 "dtc-parser.y" |
1936 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) != (yyvsp[(3) - (3)].integer); ;} | 1966 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) != (yyvsp[(3) - (3)].integer); } |
1937 | break; | 1967 | break; |
1938 | 1968 | ||
1939 | case 53: | 1969 | case 53: |
1940 | 1970 | ||
1941 | /* Line 1455 of yacc.c */ | 1971 | /* Line 1806 of yacc.c */ |
1942 | #line 392 "dtc-parser.y" | 1972 | #line 392 "dtc-parser.y" |
1943 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) < (yyvsp[(3) - (3)].integer); ;} | 1973 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) < (yyvsp[(3) - (3)].integer); } |
1944 | break; | 1974 | break; |
1945 | 1975 | ||
1946 | case 54: | 1976 | case 54: |
1947 | 1977 | ||
1948 | /* Line 1455 of yacc.c */ | 1978 | /* Line 1806 of yacc.c */ |
1949 | #line 393 "dtc-parser.y" | 1979 | #line 393 "dtc-parser.y" |
1950 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) > (yyvsp[(3) - (3)].integer); ;} | 1980 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) > (yyvsp[(3) - (3)].integer); } |
1951 | break; | 1981 | break; |
1952 | 1982 | ||
1953 | case 55: | 1983 | case 55: |
1954 | 1984 | ||
1955 | /* Line 1455 of yacc.c */ | 1985 | /* Line 1806 of yacc.c */ |
1956 | #line 394 "dtc-parser.y" | 1986 | #line 394 "dtc-parser.y" |
1957 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) <= (yyvsp[(3) - (3)].integer); ;} | 1987 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) <= (yyvsp[(3) - (3)].integer); } |
1958 | break; | 1988 | break; |
1959 | 1989 | ||
1960 | case 56: | 1990 | case 56: |
1961 | 1991 | ||
1962 | /* Line 1455 of yacc.c */ | 1992 | /* Line 1806 of yacc.c */ |
1963 | #line 395 "dtc-parser.y" | 1993 | #line 395 "dtc-parser.y" |
1964 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) >= (yyvsp[(3) - (3)].integer); ;} | 1994 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) >= (yyvsp[(3) - (3)].integer); } |
1965 | break; | 1995 | break; |
1966 | 1996 | ||
1967 | case 57: | 1997 | case 57: |
1968 | 1998 | ||
1969 | /* Line 1455 of yacc.c */ | 1999 | /* Line 1806 of yacc.c */ |
1970 | #line 399 "dtc-parser.y" | 2000 | #line 399 "dtc-parser.y" |
1971 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) << (yyvsp[(3) - (3)].integer); ;} | 2001 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) << (yyvsp[(3) - (3)].integer); } |
1972 | break; | 2002 | break; |
1973 | 2003 | ||
1974 | case 58: | 2004 | case 58: |
1975 | 2005 | ||
1976 | /* Line 1455 of yacc.c */ | 2006 | /* Line 1806 of yacc.c */ |
1977 | #line 400 "dtc-parser.y" | 2007 | #line 400 "dtc-parser.y" |
1978 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) >> (yyvsp[(3) - (3)].integer); ;} | 2008 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) >> (yyvsp[(3) - (3)].integer); } |
1979 | break; | 2009 | break; |
1980 | 2010 | ||
1981 | case 60: | 2011 | case 60: |
1982 | 2012 | ||
1983 | /* Line 1455 of yacc.c */ | 2013 | /* Line 1806 of yacc.c */ |
1984 | #line 405 "dtc-parser.y" | 2014 | #line 405 "dtc-parser.y" |
1985 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) + (yyvsp[(3) - (3)].integer); ;} | 2015 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) + (yyvsp[(3) - (3)].integer); } |
1986 | break; | 2016 | break; |
1987 | 2017 | ||
1988 | case 61: | 2018 | case 61: |
1989 | 2019 | ||
1990 | /* Line 1455 of yacc.c */ | 2020 | /* Line 1806 of yacc.c */ |
1991 | #line 406 "dtc-parser.y" | 2021 | #line 406 "dtc-parser.y" |
1992 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) - (yyvsp[(3) - (3)].integer); ;} | 2022 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) - (yyvsp[(3) - (3)].integer); } |
1993 | break; | 2023 | break; |
1994 | 2024 | ||
1995 | case 63: | 2025 | case 63: |
1996 | 2026 | ||
1997 | /* Line 1455 of yacc.c */ | 2027 | /* Line 1806 of yacc.c */ |
1998 | #line 411 "dtc-parser.y" | 2028 | #line 411 "dtc-parser.y" |
1999 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) * (yyvsp[(3) - (3)].integer); ;} | 2029 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) * (yyvsp[(3) - (3)].integer); } |
2000 | break; | 2030 | break; |
2001 | 2031 | ||
2002 | case 64: | 2032 | case 64: |
2003 | 2033 | ||
2004 | /* Line 1455 of yacc.c */ | 2034 | /* Line 1806 of yacc.c */ |
2005 | #line 412 "dtc-parser.y" | 2035 | #line 412 "dtc-parser.y" |
2006 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) / (yyvsp[(3) - (3)].integer); ;} | 2036 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) / (yyvsp[(3) - (3)].integer); } |
2007 | break; | 2037 | break; |
2008 | 2038 | ||
2009 | case 65: | 2039 | case 65: |
2010 | 2040 | ||
2011 | /* Line 1455 of yacc.c */ | 2041 | /* Line 1806 of yacc.c */ |
2012 | #line 413 "dtc-parser.y" | 2042 | #line 413 "dtc-parser.y" |
2013 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) % (yyvsp[(3) - (3)].integer); ;} | 2043 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) % (yyvsp[(3) - (3)].integer); } |
2014 | break; | 2044 | break; |
2015 | 2045 | ||
2016 | case 68: | 2046 | case 68: |
2017 | 2047 | ||
2018 | /* Line 1455 of yacc.c */ | 2048 | /* Line 1806 of yacc.c */ |
2019 | #line 419 "dtc-parser.y" | 2049 | #line 419 "dtc-parser.y" |
2020 | { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;} | 2050 | { (yyval.integer) = -(yyvsp[(2) - (2)].integer); } |
2021 | break; | 2051 | break; |
2022 | 2052 | ||
2023 | case 69: | 2053 | case 69: |
2024 | 2054 | ||
2025 | /* Line 1455 of yacc.c */ | 2055 | /* Line 1806 of yacc.c */ |
2026 | #line 420 "dtc-parser.y" | 2056 | #line 420 "dtc-parser.y" |
2027 | { (yyval.integer) = ~(yyvsp[(2) - (2)].integer); ;} | 2057 | { (yyval.integer) = ~(yyvsp[(2) - (2)].integer); } |
2028 | break; | 2058 | break; |
2029 | 2059 | ||
2030 | case 70: | 2060 | case 70: |
2031 | 2061 | ||
2032 | /* Line 1455 of yacc.c */ | 2062 | /* Line 1806 of yacc.c */ |
2033 | #line 421 "dtc-parser.y" | 2063 | #line 421 "dtc-parser.y" |
2034 | { (yyval.integer) = !(yyvsp[(2) - (2)].integer); ;} | 2064 | { (yyval.integer) = !(yyvsp[(2) - (2)].integer); } |
2035 | break; | 2065 | break; |
2036 | 2066 | ||
2037 | case 71: | 2067 | case 71: |
2038 | 2068 | ||
2039 | /* Line 1455 of yacc.c */ | 2069 | /* Line 1806 of yacc.c */ |
2040 | #line 426 "dtc-parser.y" | 2070 | #line 426 "dtc-parser.y" |
2041 | { | 2071 | { |
2042 | (yyval.data) = empty_data; | 2072 | (yyval.data) = empty_data; |
2043 | ;} | 2073 | } |
2044 | break; | 2074 | break; |
2045 | 2075 | ||
2046 | case 72: | 2076 | case 72: |
2047 | 2077 | ||
2048 | /* Line 1455 of yacc.c */ | 2078 | /* Line 1806 of yacc.c */ |
2049 | #line 430 "dtc-parser.y" | 2079 | #line 430 "dtc-parser.y" |
2050 | { | 2080 | { |
2051 | (yyval.data) = data_append_byte((yyvsp[(1) - (2)].data), (yyvsp[(2) - (2)].byte)); | 2081 | (yyval.data) = data_append_byte((yyvsp[(1) - (2)].data), (yyvsp[(2) - (2)].byte)); |
2052 | ;} | 2082 | } |
2053 | break; | 2083 | break; |
2054 | 2084 | ||
2055 | case 73: | 2085 | case 73: |
2056 | 2086 | ||
2057 | /* Line 1455 of yacc.c */ | 2087 | /* Line 1806 of yacc.c */ |
2058 | #line 434 "dtc-parser.y" | 2088 | #line 434 "dtc-parser.y" |
2059 | { | 2089 | { |
2060 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); | 2090 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); |
2061 | ;} | 2091 | } |
2062 | break; | 2092 | break; |
2063 | 2093 | ||
2064 | case 74: | 2094 | case 74: |
2065 | 2095 | ||
2066 | /* Line 1455 of yacc.c */ | 2096 | /* Line 1806 of yacc.c */ |
2067 | #line 441 "dtc-parser.y" | 2097 | #line 441 "dtc-parser.y" |
2068 | { | 2098 | { |
2069 | (yyval.nodelist) = NULL; | 2099 | (yyval.nodelist) = NULL; |
2070 | ;} | 2100 | } |
2071 | break; | 2101 | break; |
2072 | 2102 | ||
2073 | case 75: | 2103 | case 75: |
2074 | 2104 | ||
2075 | /* Line 1455 of yacc.c */ | 2105 | /* Line 1806 of yacc.c */ |
2076 | #line 445 "dtc-parser.y" | 2106 | #line 445 "dtc-parser.y" |
2077 | { | 2107 | { |
2078 | (yyval.nodelist) = chain_node((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].nodelist)); | 2108 | (yyval.nodelist) = chain_node((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].nodelist)); |
2079 | ;} | 2109 | } |
2080 | break; | 2110 | break; |
2081 | 2111 | ||
2082 | case 76: | 2112 | case 76: |
2083 | 2113 | ||
2084 | /* Line 1455 of yacc.c */ | 2114 | /* Line 1806 of yacc.c */ |
2085 | #line 449 "dtc-parser.y" | 2115 | #line 449 "dtc-parser.y" |
2086 | { | 2116 | { |
2087 | print_error("syntax error: properties must precede subnodes"); | 2117 | print_error("syntax error: properties must precede subnodes"); |
2088 | YYERROR; | 2118 | YYERROR; |
2089 | ;} | 2119 | } |
2090 | break; | 2120 | break; |
2091 | 2121 | ||
2092 | case 77: | 2122 | case 77: |
2093 | 2123 | ||
2094 | /* Line 1455 of yacc.c */ | 2124 | /* Line 1806 of yacc.c */ |
2095 | #line 457 "dtc-parser.y" | 2125 | #line 457 "dtc-parser.y" |
2096 | { | 2126 | { |
2097 | (yyval.node) = name_node((yyvsp[(2) - (2)].node), (yyvsp[(1) - (2)].propnodename)); | 2127 | (yyval.node) = name_node((yyvsp[(2) - (2)].node), (yyvsp[(1) - (2)].propnodename)); |
2098 | ;} | 2128 | } |
2099 | break; | 2129 | break; |
2100 | 2130 | ||
2101 | case 78: | 2131 | case 78: |
2102 | 2132 | ||
2103 | /* Line 1455 of yacc.c */ | 2133 | /* Line 1806 of yacc.c */ |
2104 | #line 461 "dtc-parser.y" | 2134 | #line 461 "dtc-parser.y" |
2105 | { | 2135 | { |
2106 | (yyval.node) = name_node(build_node_delete(), (yyvsp[(2) - (3)].propnodename)); | 2136 | (yyval.node) = name_node(build_node_delete(), (yyvsp[(2) - (3)].propnodename)); |
2107 | ;} | 2137 | } |
2108 | break; | 2138 | break; |
2109 | 2139 | ||
2110 | case 79: | 2140 | case 79: |
2111 | 2141 | ||
2112 | /* Line 1455 of yacc.c */ | 2142 | /* Line 1806 of yacc.c */ |
2113 | #line 465 "dtc-parser.y" | 2143 | #line 465 "dtc-parser.y" |
2114 | { | 2144 | { |
2115 | add_label(&(yyvsp[(2) - (2)].node)->labels, (yyvsp[(1) - (2)].labelref)); | 2145 | add_label(&(yyvsp[(2) - (2)].node)->labels, (yyvsp[(1) - (2)].labelref)); |
2116 | (yyval.node) = (yyvsp[(2) - (2)].node); | 2146 | (yyval.node) = (yyvsp[(2) - (2)].node); |
2117 | ;} | 2147 | } |
2118 | break; | 2148 | break; |
2119 | 2149 | ||
2120 | 2150 | ||
2121 | 2151 | ||
2122 | /* Line 1455 of yacc.c */ | 2152 | /* Line 1806 of yacc.c */ |
2123 | #line 2124 "dtc-parser.tab.c" | 2153 | #line 2154 "dtc-parser.tab.c" |
2124 | default: break; | 2154 | default: break; |
2125 | } | 2155 | } |
2156 | /* User semantic actions sometimes alter yychar, and that requires | ||
2157 | that yytoken be updated with the new translation. We take the | ||
2158 | approach of translating immediately before every use of yytoken. | ||
2159 | One alternative is translating here after every semantic action, | ||
2160 | but that translation would be missed if the semantic action invokes | ||
2161 | YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or | ||
2162 | if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an | ||
2163 | incorrect destructor might then be invoked immediately. In the | ||
2164 | case of YYERROR or YYBACKUP, subsequent parser actions might lead | ||
2165 | to an incorrect destructor call or verbose syntax error message | ||
2166 | before the lookahead is translated. */ | ||
2126 | YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); | 2167 | YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); |
2127 | 2168 | ||
2128 | YYPOPSTACK (yylen); | 2169 | YYPOPSTACK (yylen); |
@@ -2150,6 +2191,10 @@ yyreduce: | |||
2150 | | yyerrlab -- here on detecting error | | 2191 | | yyerrlab -- here on detecting error | |
2151 | `------------------------------------*/ | 2192 | `------------------------------------*/ |
2152 | yyerrlab: | 2193 | yyerrlab: |
2194 | /* Make sure we have latest lookahead translation. See comments at | ||
2195 | user semantic actions for why this is necessary. */ | ||
2196 | yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); | ||
2197 | |||
2153 | /* If not already recovering from an error, report this error. */ | 2198 | /* If not already recovering from an error, report this error. */ |
2154 | if (!yyerrstatus) | 2199 | if (!yyerrstatus) |
2155 | { | 2200 | { |
@@ -2157,37 +2202,36 @@ yyerrlab: | |||
2157 | #if ! YYERROR_VERBOSE | 2202 | #if ! YYERROR_VERBOSE |
2158 | yyerror (YY_("syntax error")); | 2203 | yyerror (YY_("syntax error")); |
2159 | #else | 2204 | #else |
2205 | # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ | ||
2206 | yyssp, yytoken) | ||
2160 | { | 2207 | { |
2161 | YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); | 2208 | char const *yymsgp = YY_("syntax error"); |
2162 | if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) | 2209 | int yysyntax_error_status; |
2163 | { | 2210 | yysyntax_error_status = YYSYNTAX_ERROR; |
2164 | YYSIZE_T yyalloc = 2 * yysize; | 2211 | if (yysyntax_error_status == 0) |
2165 | if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) | 2212 | yymsgp = yymsg; |
2166 | yyalloc = YYSTACK_ALLOC_MAXIMUM; | 2213 | else if (yysyntax_error_status == 1) |
2167 | if (yymsg != yymsgbuf) | 2214 | { |
2168 | YYSTACK_FREE (yymsg); | 2215 | if (yymsg != yymsgbuf) |
2169 | yymsg = (char *) YYSTACK_ALLOC (yyalloc); | 2216 | YYSTACK_FREE (yymsg); |
2170 | if (yymsg) | 2217 | yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); |
2171 | yymsg_alloc = yyalloc; | 2218 | if (!yymsg) |
2172 | else | 2219 | { |
2173 | { | 2220 | yymsg = yymsgbuf; |
2174 | yymsg = yymsgbuf; | 2221 | yymsg_alloc = sizeof yymsgbuf; |
2175 | yymsg_alloc = sizeof yymsgbuf; | 2222 | yysyntax_error_status = 2; |
2176 | } | 2223 | } |
2177 | } | 2224 | else |
2178 | 2225 | { | |
2179 | if (0 < yysize && yysize <= yymsg_alloc) | 2226 | yysyntax_error_status = YYSYNTAX_ERROR; |
2180 | { | 2227 | yymsgp = yymsg; |
2181 | (void) yysyntax_error (yymsg, yystate, yychar); | 2228 | } |
2182 | yyerror (yymsg); | 2229 | } |
2183 | } | 2230 | yyerror (yymsgp); |
2184 | else | 2231 | if (yysyntax_error_status == 2) |
2185 | { | 2232 | goto yyexhaustedlab; |
2186 | yyerror (YY_("syntax error")); | ||
2187 | if (yysize != 0) | ||
2188 | goto yyexhaustedlab; | ||
2189 | } | ||
2190 | } | 2233 | } |
2234 | # undef YYSYNTAX_ERROR | ||
2191 | #endif | 2235 | #endif |
2192 | } | 2236 | } |
2193 | 2237 | ||
@@ -2246,7 +2290,7 @@ yyerrlab1: | |||
2246 | for (;;) | 2290 | for (;;) |
2247 | { | 2291 | { |
2248 | yyn = yypact[yystate]; | 2292 | yyn = yypact[yystate]; |
2249 | if (yyn != YYPACT_NINF) | 2293 | if (!yypact_value_is_default (yyn)) |
2250 | { | 2294 | { |
2251 | yyn += YYTERROR; | 2295 | yyn += YYTERROR; |
2252 | if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) | 2296 | if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) |
@@ -2305,8 +2349,13 @@ yyexhaustedlab: | |||
2305 | 2349 | ||
2306 | yyreturn: | 2350 | yyreturn: |
2307 | if (yychar != YYEMPTY) | 2351 | if (yychar != YYEMPTY) |
2308 | yydestruct ("Cleanup: discarding lookahead", | 2352 | { |
2309 | yytoken, &yylval); | 2353 | /* Make sure we have latest lookahead translation. See comments at |
2354 | user semantic actions for why this is necessary. */ | ||
2355 | yytoken = YYTRANSLATE (yychar); | ||
2356 | yydestruct ("Cleanup: discarding lookahead", | ||
2357 | yytoken, &yylval); | ||
2358 | } | ||
2310 | /* Do not reclaim the symbols of the rule which action triggered | 2359 | /* Do not reclaim the symbols of the rule which action triggered |
2311 | this YYABORT or YYACCEPT. */ | 2360 | this YYABORT or YYACCEPT. */ |
2312 | YYPOPSTACK (yylen); | 2361 | YYPOPSTACK (yylen); |
@@ -2331,7 +2380,7 @@ yyreturn: | |||
2331 | 2380 | ||
2332 | 2381 | ||
2333 | 2382 | ||
2334 | /* Line 1675 of yacc.c */ | 2383 | /* Line 2067 of yacc.c */ |
2335 | #line 471 "dtc-parser.y" | 2384 | #line 471 "dtc-parser.y" |
2336 | 2385 | ||
2337 | 2386 | ||
diff --git a/scripts/dtc/dtc-parser.tab.h_shipped b/scripts/dtc/dtc-parser.tab.h_shipped index 9d2dce41211f..25d3b88c6132 100644 --- a/scripts/dtc/dtc-parser.tab.h_shipped +++ b/scripts/dtc/dtc-parser.tab.h_shipped | |||
@@ -1,10 +1,8 @@ | |||
1 | /* A Bison parser, made by GNU Bison 2.5. */ | ||
1 | 2 | ||
2 | /* A Bison parser, made by GNU Bison 2.4.1. */ | 3 | /* Bison interface for Yacc-like parsers in C |
3 | |||
4 | /* Skeleton interface for Bison's Yacc-like parsers in C | ||
5 | 4 | ||
6 | Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 | 5 | Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. |
7 | Free Software Foundation, Inc. | ||
8 | 6 | ||
9 | This program is free software: you can redistribute it and/or modify | 7 | This program is free software: you can redistribute it and/or modify |
10 | it under the terms of the GNU General Public License as published by | 8 | it under the terms of the GNU General Public License as published by |
@@ -70,7 +68,7 @@ | |||
70 | typedef union YYSTYPE | 68 | typedef union YYSTYPE |
71 | { | 69 | { |
72 | 70 | ||
73 | /* Line 1676 of yacc.c */ | 71 | /* Line 2068 of yacc.c */ |
74 | #line 40 "dtc-parser.y" | 72 | #line 40 "dtc-parser.y" |
75 | 73 | ||
76 | char *propnodename; | 74 | char *propnodename; |
@@ -94,8 +92,8 @@ typedef union YYSTYPE | |||
94 | 92 | ||
95 | 93 | ||
96 | 94 | ||
97 | /* Line 1676 of yacc.c */ | 95 | /* Line 2068 of yacc.c */ |
98 | #line 99 "dtc-parser.tab.h" | 96 | #line 97 "dtc-parser.tab.h" |
99 | } YYSTYPE; | 97 | } YYSTYPE; |
100 | # define YYSTYPE_IS_TRIVIAL 1 | 98 | # define YYSTYPE_IS_TRIVIAL 1 |
101 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ | 99 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ |
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index ccfa383f1fda..f92818155958 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c | |||
@@ -1649,6 +1649,7 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd) | |||
1649 | } | 1649 | } |
1650 | if (!snd_pcm_stream_linked(substream)) { | 1650 | if (!snd_pcm_stream_linked(substream)) { |
1651 | substream->group = group; | 1651 | substream->group = group; |
1652 | group = NULL; | ||
1652 | spin_lock_init(&substream->group->lock); | 1653 | spin_lock_init(&substream->group->lock); |
1653 | INIT_LIST_HEAD(&substream->group->substreams); | 1654 | INIT_LIST_HEAD(&substream->group->substreams); |
1654 | list_add_tail(&substream->link_list, &substream->group->substreams); | 1655 | list_add_tail(&substream->link_list, &substream->group->substreams); |
@@ -1663,8 +1664,7 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd) | |||
1663 | _nolock: | 1664 | _nolock: |
1664 | snd_card_unref(substream1->pcm->card); | 1665 | snd_card_unref(substream1->pcm->card); |
1665 | fput_light(file, fput_needed); | 1666 | fput_light(file, fput_needed); |
1666 | if (res < 0) | 1667 | kfree(group); |
1667 | kfree(group); | ||
1668 | return res; | 1668 | return res; |
1669 | } | 1669 | } |
1670 | 1670 | ||
diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c index 030f53c96ec0..987f728718c5 100644 --- a/sound/soc/codecs/cs42l52.c +++ b/sound/soc/codecs/cs42l52.c | |||
@@ -193,6 +193,8 @@ static DECLARE_TLV_DB_SCALE(mic_tlv, 1600, 100, 0); | |||
193 | 193 | ||
194 | static DECLARE_TLV_DB_SCALE(pga_tlv, -600, 50, 0); | 194 | static DECLARE_TLV_DB_SCALE(pga_tlv, -600, 50, 0); |
195 | 195 | ||
196 | static DECLARE_TLV_DB_SCALE(mix_tlv, -50, 50, 0); | ||
197 | |||
196 | static const unsigned int limiter_tlv[] = { | 198 | static const unsigned int limiter_tlv[] = { |
197 | TLV_DB_RANGE_HEAD(2), | 199 | TLV_DB_RANGE_HEAD(2), |
198 | 0, 2, TLV_DB_SCALE_ITEM(-3000, 600, 0), | 200 | 0, 2, TLV_DB_SCALE_ITEM(-3000, 600, 0), |
@@ -260,7 +262,7 @@ static const char * const hp_gain_num_text[] = { | |||
260 | }; | 262 | }; |
261 | 263 | ||
262 | static const struct soc_enum hp_gain_enum = | 264 | static const struct soc_enum hp_gain_enum = |
263 | SOC_ENUM_SINGLE(CS42L52_PB_CTL1, 4, | 265 | SOC_ENUM_SINGLE(CS42L52_PB_CTL1, 5, |
264 | ARRAY_SIZE(hp_gain_num_text), hp_gain_num_text); | 266 | ARRAY_SIZE(hp_gain_num_text), hp_gain_num_text); |
265 | 267 | ||
266 | static const char * const beep_pitch_text[] = { | 268 | static const char * const beep_pitch_text[] = { |
@@ -441,7 +443,7 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = { | |||
441 | 443 | ||
442 | SOC_DOUBLE_R_SX_TLV("PCM Mixer Volume", | 444 | SOC_DOUBLE_R_SX_TLV("PCM Mixer Volume", |
443 | CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, | 445 | CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, |
444 | 0, 0x7f, 0x19, hl_tlv), | 446 | 0, 0x7f, 0x19, mix_tlv), |
445 | SOC_DOUBLE_R("PCM Mixer Switch", | 447 | SOC_DOUBLE_R("PCM Mixer Switch", |
446 | CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, 7, 1, 1), | 448 | CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, 7, 1, 1), |
447 | 449 | ||
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c index 65d09d60b7c6..1514bf845e4b 100644 --- a/sound/soc/codecs/tlv320aic3x.c +++ b/sound/soc/codecs/tlv320aic3x.c | |||
@@ -187,14 +187,14 @@ static int snd_soc_dapm_put_volsw_aic3x(struct snd_kcontrol *kcontrol, | |||
187 | 187 | ||
188 | break; | 188 | break; |
189 | } | 189 | } |
190 | |||
191 | if (found) | ||
192 | snd_soc_dapm_sync(widget->dapm); | ||
193 | } | 190 | } |
194 | 191 | ||
195 | ret = snd_soc_update_bits(widget->codec, reg, val_mask, val); | ||
196 | |||
197 | mutex_unlock(&widget->codec->mutex); | 192 | mutex_unlock(&widget->codec->mutex); |
193 | |||
194 | if (found) | ||
195 | snd_soc_dapm_sync(widget->dapm); | ||
196 | |||
197 | ret = snd_soc_update_bits_locked(widget->codec, reg, val_mask, val); | ||
198 | return ret; | 198 | return ret; |
199 | } | 199 | } |
200 | 200 | ||
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c index e895d3939eef..100fdadda56a 100644 --- a/sound/soc/codecs/wm5102.c +++ b/sound/soc/codecs/wm5102.c | |||
@@ -1120,7 +1120,8 @@ SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, | |||
1120 | ARIZONA_DSP_WIDGETS(DSP1, "DSP1"), | 1120 | ARIZONA_DSP_WIDGETS(DSP1, "DSP1"), |
1121 | 1121 | ||
1122 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, | 1122 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, |
1123 | ARIZONA_AEC_LOOPBACK_ENA, 0, &wm5102_aec_loopback_mux), | 1123 | ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0, |
1124 | &wm5102_aec_loopback_mux), | ||
1124 | 1125 | ||
1125 | SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM, | 1126 | SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM, |
1126 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, | 1127 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, |
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c index ba38f0679662..88ad7db52dde 100644 --- a/sound/soc/codecs/wm5110.c +++ b/sound/soc/codecs/wm5110.c | |||
@@ -503,7 +503,8 @@ SND_SOC_DAPM_PGA("ASRC2R", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2R_ENA_SHIFT, 0, | |||
503 | NULL, 0), | 503 | NULL, 0), |
504 | 504 | ||
505 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, | 505 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, |
506 | ARIZONA_AEC_LOOPBACK_ENA, 0, &wm5110_aec_loopback_mux), | 506 | ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0, |
507 | &wm5110_aec_loopback_mux), | ||
507 | 508 | ||
508 | SND_SOC_DAPM_AIF_OUT("AIF1TX1", NULL, 0, | 509 | SND_SOC_DAPM_AIF_OUT("AIF1TX1", NULL, 0, |
509 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX1_ENA_SHIFT, 0), | 510 | ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX1_ENA_SHIFT, 0), |
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index dfd997aaadfc..29e95f93d482 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -3836,12 +3836,13 @@ static irqreturn_t wm8958_mic_irq(int irq, void *data) | |||
3836 | ret); | 3836 | ret); |
3837 | } else if (!(ret & WM1811_JACKDET_LVL)) { | 3837 | } else if (!(ret & WM1811_JACKDET_LVL)) { |
3838 | dev_dbg(codec->dev, "Ignoring removed jack\n"); | 3838 | dev_dbg(codec->dev, "Ignoring removed jack\n"); |
3839 | return IRQ_HANDLED; | 3839 | goto out; |
3840 | } | 3840 | } |
3841 | } else if (!(reg & WM8958_MICD_STS)) { | 3841 | } else if (!(reg & WM8958_MICD_STS)) { |
3842 | snd_soc_jack_report(wm8994->micdet[0].jack, 0, | 3842 | snd_soc_jack_report(wm8994->micdet[0].jack, 0, |
3843 | SND_JACK_MECHANICAL | SND_JACK_HEADSET | | 3843 | SND_JACK_MECHANICAL | SND_JACK_HEADSET | |
3844 | wm8994->btn_mask); | 3844 | wm8994->btn_mask); |
3845 | wm8994->mic_detecting = true; | ||
3845 | goto out; | 3846 | goto out; |
3846 | } | 3847 | } |
3847 | 3848 | ||
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index a80c883bb8be..c7051c457b75 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c | |||
@@ -55,7 +55,8 @@ static int dapm_up_seq[] = { | |||
55 | [snd_soc_dapm_clock_supply] = 1, | 55 | [snd_soc_dapm_clock_supply] = 1, |
56 | [snd_soc_dapm_micbias] = 2, | 56 | [snd_soc_dapm_micbias] = 2, |
57 | [snd_soc_dapm_dai_link] = 2, | 57 | [snd_soc_dapm_dai_link] = 2, |
58 | [snd_soc_dapm_dai] = 3, | 58 | [snd_soc_dapm_dai_in] = 3, |
59 | [snd_soc_dapm_dai_out] = 3, | ||
59 | [snd_soc_dapm_aif_in] = 3, | 60 | [snd_soc_dapm_aif_in] = 3, |
60 | [snd_soc_dapm_aif_out] = 3, | 61 | [snd_soc_dapm_aif_out] = 3, |
61 | [snd_soc_dapm_mic] = 4, | 62 | [snd_soc_dapm_mic] = 4, |
@@ -92,7 +93,8 @@ static int dapm_down_seq[] = { | |||
92 | [snd_soc_dapm_value_mux] = 9, | 93 | [snd_soc_dapm_value_mux] = 9, |
93 | [snd_soc_dapm_aif_in] = 10, | 94 | [snd_soc_dapm_aif_in] = 10, |
94 | [snd_soc_dapm_aif_out] = 10, | 95 | [snd_soc_dapm_aif_out] = 10, |
95 | [snd_soc_dapm_dai] = 10, | 96 | [snd_soc_dapm_dai_in] = 10, |
97 | [snd_soc_dapm_dai_out] = 10, | ||
96 | [snd_soc_dapm_dai_link] = 11, | 98 | [snd_soc_dapm_dai_link] = 11, |
97 | [snd_soc_dapm_clock_supply] = 12, | 99 | [snd_soc_dapm_clock_supply] = 12, |
98 | [snd_soc_dapm_regulator_supply] = 12, | 100 | [snd_soc_dapm_regulator_supply] = 12, |
@@ -419,7 +421,8 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w, | |||
419 | case snd_soc_dapm_clock_supply: | 421 | case snd_soc_dapm_clock_supply: |
420 | case snd_soc_dapm_aif_in: | 422 | case snd_soc_dapm_aif_in: |
421 | case snd_soc_dapm_aif_out: | 423 | case snd_soc_dapm_aif_out: |
422 | case snd_soc_dapm_dai: | 424 | case snd_soc_dapm_dai_in: |
425 | case snd_soc_dapm_dai_out: | ||
423 | case snd_soc_dapm_hp: | 426 | case snd_soc_dapm_hp: |
424 | case snd_soc_dapm_mic: | 427 | case snd_soc_dapm_mic: |
425 | case snd_soc_dapm_spk: | 428 | case snd_soc_dapm_spk: |
@@ -820,7 +823,7 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget, | |||
820 | switch (widget->id) { | 823 | switch (widget->id) { |
821 | case snd_soc_dapm_adc: | 824 | case snd_soc_dapm_adc: |
822 | case snd_soc_dapm_aif_out: | 825 | case snd_soc_dapm_aif_out: |
823 | case snd_soc_dapm_dai: | 826 | case snd_soc_dapm_dai_out: |
824 | if (widget->active) { | 827 | if (widget->active) { |
825 | widget->outputs = snd_soc_dapm_suspend_check(widget); | 828 | widget->outputs = snd_soc_dapm_suspend_check(widget); |
826 | return widget->outputs; | 829 | return widget->outputs; |
@@ -916,7 +919,7 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget, | |||
916 | switch (widget->id) { | 919 | switch (widget->id) { |
917 | case snd_soc_dapm_dac: | 920 | case snd_soc_dapm_dac: |
918 | case snd_soc_dapm_aif_in: | 921 | case snd_soc_dapm_aif_in: |
919 | case snd_soc_dapm_dai: | 922 | case snd_soc_dapm_dai_in: |
920 | if (widget->active) { | 923 | if (widget->active) { |
921 | widget->inputs = snd_soc_dapm_suspend_check(widget); | 924 | widget->inputs = snd_soc_dapm_suspend_check(widget); |
922 | return widget->inputs; | 925 | return widget->inputs; |
@@ -1135,16 +1138,6 @@ static int dapm_generic_check_power(struct snd_soc_dapm_widget *w) | |||
1135 | return out != 0 && in != 0; | 1138 | return out != 0 && in != 0; |
1136 | } | 1139 | } |
1137 | 1140 | ||
1138 | static int dapm_dai_check_power(struct snd_soc_dapm_widget *w) | ||
1139 | { | ||
1140 | DAPM_UPDATE_STAT(w, power_checks); | ||
1141 | |||
1142 | if (w->active) | ||
1143 | return w->active; | ||
1144 | |||
1145 | return dapm_generic_check_power(w); | ||
1146 | } | ||
1147 | |||
1148 | /* Check to see if an ADC has power */ | 1141 | /* Check to see if an ADC has power */ |
1149 | static int dapm_adc_check_power(struct snd_soc_dapm_widget *w) | 1142 | static int dapm_adc_check_power(struct snd_soc_dapm_widget *w) |
1150 | { | 1143 | { |
@@ -2318,7 +2311,8 @@ static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm, | |||
2318 | case snd_soc_dapm_clock_supply: | 2311 | case snd_soc_dapm_clock_supply: |
2319 | case snd_soc_dapm_aif_in: | 2312 | case snd_soc_dapm_aif_in: |
2320 | case snd_soc_dapm_aif_out: | 2313 | case snd_soc_dapm_aif_out: |
2321 | case snd_soc_dapm_dai: | 2314 | case snd_soc_dapm_dai_in: |
2315 | case snd_soc_dapm_dai_out: | ||
2322 | case snd_soc_dapm_dai_link: | 2316 | case snd_soc_dapm_dai_link: |
2323 | list_add(&path->list, &dapm->card->paths); | 2317 | list_add(&path->list, &dapm->card->paths); |
2324 | list_add(&path->list_sink, &wsink->sources); | 2318 | list_add(&path->list_sink, &wsink->sources); |
@@ -3129,10 +3123,12 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm, | |||
3129 | break; | 3123 | break; |
3130 | case snd_soc_dapm_adc: | 3124 | case snd_soc_dapm_adc: |
3131 | case snd_soc_dapm_aif_out: | 3125 | case snd_soc_dapm_aif_out: |
3126 | case snd_soc_dapm_dai_out: | ||
3132 | w->power_check = dapm_adc_check_power; | 3127 | w->power_check = dapm_adc_check_power; |
3133 | break; | 3128 | break; |
3134 | case snd_soc_dapm_dac: | 3129 | case snd_soc_dapm_dac: |
3135 | case snd_soc_dapm_aif_in: | 3130 | case snd_soc_dapm_aif_in: |
3131 | case snd_soc_dapm_dai_in: | ||
3136 | w->power_check = dapm_dac_check_power; | 3132 | w->power_check = dapm_dac_check_power; |
3137 | break; | 3133 | break; |
3138 | case snd_soc_dapm_pga: | 3134 | case snd_soc_dapm_pga: |
@@ -3152,9 +3148,6 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm, | |||
3152 | case snd_soc_dapm_clock_supply: | 3148 | case snd_soc_dapm_clock_supply: |
3153 | w->power_check = dapm_supply_check_power; | 3149 | w->power_check = dapm_supply_check_power; |
3154 | break; | 3150 | break; |
3155 | case snd_soc_dapm_dai: | ||
3156 | w->power_check = dapm_dai_check_power; | ||
3157 | break; | ||
3158 | default: | 3151 | default: |
3159 | w->power_check = dapm_always_on_check_power; | 3152 | w->power_check = dapm_always_on_check_power; |
3160 | break; | 3153 | break; |
@@ -3375,7 +3368,7 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, | |||
3375 | template.reg = SND_SOC_NOPM; | 3368 | template.reg = SND_SOC_NOPM; |
3376 | 3369 | ||
3377 | if (dai->driver->playback.stream_name) { | 3370 | if (dai->driver->playback.stream_name) { |
3378 | template.id = snd_soc_dapm_dai; | 3371 | template.id = snd_soc_dapm_dai_in; |
3379 | template.name = dai->driver->playback.stream_name; | 3372 | template.name = dai->driver->playback.stream_name; |
3380 | template.sname = dai->driver->playback.stream_name; | 3373 | template.sname = dai->driver->playback.stream_name; |
3381 | 3374 | ||
@@ -3393,7 +3386,7 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, | |||
3393 | } | 3386 | } |
3394 | 3387 | ||
3395 | if (dai->driver->capture.stream_name) { | 3388 | if (dai->driver->capture.stream_name) { |
3396 | template.id = snd_soc_dapm_dai; | 3389 | template.id = snd_soc_dapm_dai_out; |
3397 | template.name = dai->driver->capture.stream_name; | 3390 | template.name = dai->driver->capture.stream_name; |
3398 | template.sname = dai->driver->capture.stream_name; | 3391 | template.sname = dai->driver->capture.stream_name; |
3399 | 3392 | ||
@@ -3423,8 +3416,13 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card) | |||
3423 | 3416 | ||
3424 | /* For each DAI widget... */ | 3417 | /* For each DAI widget... */ |
3425 | list_for_each_entry(dai_w, &card->widgets, list) { | 3418 | list_for_each_entry(dai_w, &card->widgets, list) { |
3426 | if (dai_w->id != snd_soc_dapm_dai) | 3419 | switch (dai_w->id) { |
3420 | case snd_soc_dapm_dai_in: | ||
3421 | case snd_soc_dapm_dai_out: | ||
3422 | break; | ||
3423 | default: | ||
3427 | continue; | 3424 | continue; |
3425 | } | ||
3428 | 3426 | ||
3429 | dai = dai_w->priv; | 3427 | dai = dai_w->priv; |
3430 | 3428 | ||
@@ -3433,8 +3431,13 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card) | |||
3433 | if (w->dapm != dai_w->dapm) | 3431 | if (w->dapm != dai_w->dapm) |
3434 | continue; | 3432 | continue; |
3435 | 3433 | ||
3436 | if (w->id == snd_soc_dapm_dai) | 3434 | switch (w->id) { |
3435 | case snd_soc_dapm_dai_in: | ||
3436 | case snd_soc_dapm_dai_out: | ||
3437 | continue; | 3437 | continue; |
3438 | default: | ||
3439 | break; | ||
3440 | } | ||
3438 | 3441 | ||
3439 | if (!w->sname) | 3442 | if (!w->sname) |
3440 | continue; | 3443 | continue; |
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 73bb8eefa491..ccb6be4d658d 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c | |||
@@ -928,8 +928,13 @@ static int dpcm_add_paths(struct snd_soc_pcm_runtime *fe, int stream, | |||
928 | /* Create any new FE <--> BE connections */ | 928 | /* Create any new FE <--> BE connections */ |
929 | for (i = 0; i < list->num_widgets; i++) { | 929 | for (i = 0; i < list->num_widgets; i++) { |
930 | 930 | ||
931 | if (list->widgets[i]->id != snd_soc_dapm_dai) | 931 | switch (list->widgets[i]->id) { |
932 | case snd_soc_dapm_dai_in: | ||
933 | case snd_soc_dapm_dai_out: | ||
934 | break; | ||
935 | default: | ||
932 | continue; | 936 | continue; |
937 | } | ||
933 | 938 | ||
934 | /* is there a valid BE rtd for this widget */ | 939 | /* is there a valid BE rtd for this widget */ |
935 | be = dpcm_get_be(card, list->widgets[i], stream); | 940 | be = dpcm_get_be(card, list->widgets[i], stream); |
@@ -2011,9 +2016,11 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) | |||
2011 | if (cpu_dai->driver->capture.channels_min) | 2016 | if (cpu_dai->driver->capture.channels_min) |
2012 | capture = 1; | 2017 | capture = 1; |
2013 | } else { | 2018 | } else { |
2014 | if (codec_dai->driver->playback.channels_min) | 2019 | if (codec_dai->driver->playback.channels_min && |
2020 | cpu_dai->driver->playback.channels_min) | ||
2015 | playback = 1; | 2021 | playback = 1; |
2016 | if (codec_dai->driver->capture.channels_min) | 2022 | if (codec_dai->driver->capture.channels_min && |
2023 | cpu_dai->driver->capture.channels_min) | ||
2017 | capture = 1; | 2024 | capture = 1; |
2018 | } | 2025 | } |
2019 | 2026 | ||
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index 9e9d34871195..fe702076ca46 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c | |||
@@ -2191,7 +2191,7 @@ int initialize_counters(int cpu_id) | |||
2191 | 2191 | ||
2192 | void allocate_output_buffer() | 2192 | void allocate_output_buffer() |
2193 | { | 2193 | { |
2194 | output_buffer = calloc(1, (1 + topo.num_cpus) * 128); | 2194 | output_buffer = calloc(1, (1 + topo.num_cpus) * 256); |
2195 | outp = output_buffer; | 2195 | outp = output_buffer; |
2196 | if (outp == NULL) { | 2196 | if (outp == NULL) { |
2197 | perror("calloc"); | 2197 | perror("calloc"); |