diff options
Diffstat (limited to 'arch/arm')
469 files changed, 10681 insertions, 17163 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 2ec4ff36e560..2c370c869beb 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -36,7 +36,6 @@ config ARM | |||
36 | select HAVE_GENERIC_HARDIRQS | 36 | select HAVE_GENERIC_HARDIRQS |
37 | select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)) | 37 | select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)) |
38 | select HAVE_IDE if PCI || ISA || PCMCIA | 38 | select HAVE_IDE if PCI || ISA || PCMCIA |
39 | select HAVE_IRQ_WORK | ||
40 | select HAVE_KERNEL_GZIP | 39 | select HAVE_KERNEL_GZIP |
41 | select HAVE_KERNEL_LZMA | 40 | select HAVE_KERNEL_LZMA |
42 | select HAVE_KERNEL_LZO | 41 | select HAVE_KERNEL_LZO |
@@ -261,7 +260,8 @@ config MMU | |||
261 | # | 260 | # |
262 | choice | 261 | choice |
263 | prompt "ARM system type" | 262 | prompt "ARM system type" |
264 | default ARCH_MULTIPLATFORM | 263 | default ARCH_VERSATILE if !MMU |
264 | default ARCH_MULTIPLATFORM if MMU | ||
265 | 265 | ||
266 | config ARCH_MULTIPLATFORM | 266 | config ARCH_MULTIPLATFORM |
267 | bool "Allow multiple platforms to be selected" | 267 | bool "Allow multiple platforms to be selected" |
@@ -344,10 +344,10 @@ config ARCH_BCM2835 | |||
344 | select ARM_ERRATA_411920 | 344 | select ARM_ERRATA_411920 |
345 | select ARM_TIMER_SP804 | 345 | select ARM_TIMER_SP804 |
346 | select CLKDEV_LOOKUP | 346 | select CLKDEV_LOOKUP |
347 | select CLKSRC_OF | ||
347 | select COMMON_CLK | 348 | select COMMON_CLK |
348 | select CPU_V6 | 349 | select CPU_V6 |
349 | select GENERIC_CLOCKEVENTS | 350 | select GENERIC_CLOCKEVENTS |
350 | select GENERIC_GPIO | ||
351 | select MULTI_IRQ_HANDLER | 351 | select MULTI_IRQ_HANDLER |
352 | select PINCTRL | 352 | select PINCTRL |
353 | select PINCTRL_BCM2835 | 353 | select PINCTRL_BCM2835 |
@@ -647,7 +647,6 @@ config ARCH_TEGRA | |||
647 | select CLKSRC_OF | 647 | select CLKSRC_OF |
648 | select COMMON_CLK | 648 | select COMMON_CLK |
649 | select GENERIC_CLOCKEVENTS | 649 | select GENERIC_CLOCKEVENTS |
650 | select GENERIC_GPIO | ||
651 | select HAVE_CLK | 650 | select HAVE_CLK |
652 | select HAVE_SMP | 651 | select HAVE_SMP |
653 | select MIGHT_HAVE_CACHE_L2X0 | 652 | select MIGHT_HAVE_CACHE_L2X0 |
@@ -701,6 +700,7 @@ config ARCH_SHMOBILE | |||
701 | select MULTI_IRQ_HANDLER | 700 | select MULTI_IRQ_HANDLER |
702 | select NEED_MACH_MEMORY_H | 701 | select NEED_MACH_MEMORY_H |
703 | select NO_IOPORT | 702 | select NO_IOPORT |
703 | select PINCTRL | ||
704 | select PM_GENERIC_DOMAINS if PM | 704 | select PM_GENERIC_DOMAINS if PM |
705 | select SPARSE_IRQ | 705 | select SPARSE_IRQ |
706 | help | 706 | help |
@@ -747,7 +747,6 @@ config ARCH_S3C24XX | |||
747 | select ARCH_HAS_CPUFREQ | 747 | select ARCH_HAS_CPUFREQ |
748 | select ARCH_USES_GETTIMEOFFSET | 748 | select ARCH_USES_GETTIMEOFFSET |
749 | select CLKDEV_LOOKUP | 749 | select CLKDEV_LOOKUP |
750 | select GENERIC_GPIO | ||
751 | select HAVE_CLK | 750 | select HAVE_CLK |
752 | select HAVE_S3C2410_I2C if I2C | 751 | select HAVE_S3C2410_I2C if I2C |
753 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | 752 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
@@ -790,7 +789,6 @@ config ARCH_S5P64X0 | |||
790 | select CLKSRC_MMIO | 789 | select CLKSRC_MMIO |
791 | select CPU_V6 | 790 | select CPU_V6 |
792 | select GENERIC_CLOCKEVENTS | 791 | select GENERIC_CLOCKEVENTS |
793 | select GENERIC_GPIO | ||
794 | select HAVE_CLK | 792 | select HAVE_CLK |
795 | select HAVE_S3C2410_I2C if I2C | 793 | select HAVE_S3C2410_I2C if I2C |
796 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | 794 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
@@ -805,7 +803,6 @@ config ARCH_S5PC100 | |||
805 | select ARCH_USES_GETTIMEOFFSET | 803 | select ARCH_USES_GETTIMEOFFSET |
806 | select CLKDEV_LOOKUP | 804 | select CLKDEV_LOOKUP |
807 | select CPU_V7 | 805 | select CPU_V7 |
808 | select GENERIC_GPIO | ||
809 | select HAVE_CLK | 806 | select HAVE_CLK |
810 | select HAVE_S3C2410_I2C if I2C | 807 | select HAVE_S3C2410_I2C if I2C |
811 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | 808 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
@@ -823,7 +820,6 @@ config ARCH_S5PV210 | |||
823 | select CLKSRC_MMIO | 820 | select CLKSRC_MMIO |
824 | select CPU_V7 | 821 | select CPU_V7 |
825 | select GENERIC_CLOCKEVENTS | 822 | select GENERIC_CLOCKEVENTS |
826 | select GENERIC_GPIO | ||
827 | select HAVE_CLK | 823 | select HAVE_CLK |
828 | select HAVE_S3C2410_I2C if I2C | 824 | select HAVE_S3C2410_I2C if I2C |
829 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | 825 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
@@ -841,7 +837,6 @@ config ARCH_EXYNOS | |||
841 | select CLKDEV_LOOKUP | 837 | select CLKDEV_LOOKUP |
842 | select CPU_V7 | 838 | select CPU_V7 |
843 | select GENERIC_CLOCKEVENTS | 839 | select GENERIC_CLOCKEVENTS |
844 | select GENERIC_GPIO | ||
845 | select HAVE_CLK | 840 | select HAVE_CLK |
846 | select HAVE_S3C2410_I2C if I2C | 841 | select HAVE_S3C2410_I2C if I2C |
847 | select HAVE_S3C2410_WATCHDOG if WATCHDOG | 842 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
@@ -876,7 +871,6 @@ config ARCH_U300 | |||
876 | select COMMON_CLK | 871 | select COMMON_CLK |
877 | select CPU_ARM926T | 872 | select CPU_ARM926T |
878 | select GENERIC_CLOCKEVENTS | 873 | select GENERIC_CLOCKEVENTS |
879 | select GENERIC_GPIO | ||
880 | select HAVE_TCM | 874 | select HAVE_TCM |
881 | select SPARSE_IRQ | 875 | select SPARSE_IRQ |
882 | help | 876 | help |
@@ -940,17 +934,24 @@ config ARCH_DAVINCI | |||
940 | help | 934 | help |
941 | Support for TI's DaVinci platform. | 935 | Support for TI's DaVinci platform. |
942 | 936 | ||
943 | config ARCH_OMAP | 937 | config ARCH_OMAP1 |
944 | bool "TI OMAP" | 938 | bool "TI OMAP1" |
945 | depends on MMU | 939 | depends on MMU |
946 | select ARCH_HAS_CPUFREQ | 940 | select ARCH_HAS_CPUFREQ |
947 | select ARCH_HAS_HOLES_MEMORYMODEL | 941 | select ARCH_HAS_HOLES_MEMORYMODEL |
942 | select ARCH_OMAP | ||
948 | select ARCH_REQUIRE_GPIOLIB | 943 | select ARCH_REQUIRE_GPIOLIB |
944 | select CLKDEV_LOOKUP | ||
949 | select CLKSRC_MMIO | 945 | select CLKSRC_MMIO |
950 | select GENERIC_CLOCKEVENTS | 946 | select GENERIC_CLOCKEVENTS |
947 | select GENERIC_IRQ_CHIP | ||
951 | select HAVE_CLK | 948 | select HAVE_CLK |
949 | select HAVE_IDE | ||
950 | select IRQ_DOMAIN | ||
951 | select NEED_MACH_IO_H if PCCARD | ||
952 | select NEED_MACH_MEMORY_H | ||
952 | help | 953 | help |
953 | Support for TI's OMAP platform (OMAP1/2/3/4). | 954 | Support for older TI OMAP1 (omap7xx, omap15xx or omap16xx) |
954 | 955 | ||
955 | endchoice | 956 | endchoice |
956 | 957 | ||
@@ -1073,17 +1074,12 @@ source "arch/arm/mach-realview/Kconfig" | |||
1073 | source "arch/arm/mach-sa1100/Kconfig" | 1074 | source "arch/arm/mach-sa1100/Kconfig" |
1074 | 1075 | ||
1075 | source "arch/arm/plat-samsung/Kconfig" | 1076 | source "arch/arm/plat-samsung/Kconfig" |
1076 | source "arch/arm/plat-s3c24xx/Kconfig" | ||
1077 | 1077 | ||
1078 | source "arch/arm/mach-socfpga/Kconfig" | 1078 | source "arch/arm/mach-socfpga/Kconfig" |
1079 | 1079 | ||
1080 | source "arch/arm/plat-spear/Kconfig" | 1080 | source "arch/arm/plat-spear/Kconfig" |
1081 | 1081 | ||
1082 | source "arch/arm/mach-s3c24xx/Kconfig" | 1082 | source "arch/arm/mach-s3c24xx/Kconfig" |
1083 | if ARCH_S3C24XX | ||
1084 | source "arch/arm/mach-s3c2412/Kconfig" | ||
1085 | source "arch/arm/mach-s3c2440/Kconfig" | ||
1086 | endif | ||
1087 | 1083 | ||
1088 | if ARCH_S3C64XX | 1084 | if ARCH_S3C64XX |
1089 | source "arch/arm/mach-s3c64xx/Kconfig" | 1085 | source "arch/arm/mach-s3c64xx/Kconfig" |
@@ -1437,6 +1433,10 @@ config ISA_DMA | |||
1437 | bool | 1433 | bool |
1438 | select ISA_DMA_API | 1434 | select ISA_DMA_API |
1439 | 1435 | ||
1436 | config ARCH_NO_VIRT_TO_BUS | ||
1437 | def_bool y | ||
1438 | depends on !ARCH_RPC && !ARCH_NETWINDER && !ARCH_SHARK | ||
1439 | |||
1440 | # Select ISA DMA interface | 1440 | # Select ISA DMA interface |
1441 | config ISA_DMA_API | 1441 | config ISA_DMA_API |
1442 | bool | 1442 | bool |
@@ -1518,7 +1518,6 @@ config SMP | |||
1518 | 1518 | ||
1519 | config SMP_ON_UP | 1519 | config SMP_ON_UP |
1520 | bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)" | 1520 | bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)" |
1521 | depends on EXPERIMENTAL | ||
1522 | depends on SMP && !XIP_KERNEL | 1521 | depends on SMP && !XIP_KERNEL |
1523 | default y | 1522 | default y |
1524 | help | 1523 | help |
@@ -1607,6 +1606,16 @@ config HOTPLUG_CPU | |||
1607 | Say Y here to experiment with turning CPUs off and on. CPUs | 1606 | Say Y here to experiment with turning CPUs off and on. CPUs |
1608 | can be controlled through /sys/devices/system/cpu. | 1607 | can be controlled through /sys/devices/system/cpu. |
1609 | 1608 | ||
1609 | config ARM_PSCI | ||
1610 | bool "Support for the ARM Power State Coordination Interface (PSCI)" | ||
1611 | depends on CPU_V7 | ||
1612 | help | ||
1613 | Say Y here if you want Linux to communicate with system firmware | ||
1614 | implementing the PSCI specification for CPU-centric power | ||
1615 | management operations described in ARM document number ARM DEN | ||
1616 | 0022A ("Power State Coordination Interface System Software on | ||
1617 | ARM processors"). | ||
1618 | |||
1610 | config LOCAL_TIMERS | 1619 | config LOCAL_TIMERS |
1611 | bool "Use local timer interrupts" | 1620 | bool "Use local timer interrupts" |
1612 | depends on SMP | 1621 | depends on SMP |
@@ -1624,7 +1633,7 @@ config ARCH_NR_GPIO | |||
1624 | default 355 if ARCH_U8500 | 1633 | default 355 if ARCH_U8500 |
1625 | default 264 if MACH_H4700 | 1634 | default 264 if MACH_H4700 |
1626 | default 512 if SOC_OMAP5 | 1635 | default 512 if SOC_OMAP5 |
1627 | default 288 if ARCH_VT8500 | 1636 | default 288 if ARCH_VT8500 || ARCH_SUNXI |
1628 | default 0 | 1637 | default 0 |
1629 | help | 1638 | help |
1630 | Maximum number of GPIOs in the system. | 1639 | Maximum number of GPIOs in the system. |
@@ -1642,6 +1651,9 @@ config HZ | |||
1642 | default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE | 1651 | default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE |
1643 | default 100 | 1652 | default 100 |
1644 | 1653 | ||
1654 | config SCHED_HRTICK | ||
1655 | def_bool HIGH_RES_TIMERS | ||
1656 | |||
1645 | config THUMB2_KERNEL | 1657 | config THUMB2_KERNEL |
1646 | bool "Compile the kernel in Thumb-2 mode" | 1658 | bool "Compile the kernel in Thumb-2 mode" |
1647 | depends on CPU_V7 && !CPU_V6 && !CPU_V6K | 1659 | depends on CPU_V7 && !CPU_V6 && !CPU_V6K |
@@ -1706,7 +1718,7 @@ config AEABI | |||
1706 | 1718 | ||
1707 | config OABI_COMPAT | 1719 | config OABI_COMPAT |
1708 | bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)" | 1720 | bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)" |
1709 | depends on AEABI && EXPERIMENTAL && !THUMB2_KERNEL | 1721 | depends on AEABI && !THUMB2_KERNEL |
1710 | default y | 1722 | default y |
1711 | help | 1723 | help |
1712 | This option preserves the old syscall interface along with the | 1724 | This option preserves the old syscall interface along with the |
@@ -1830,7 +1842,6 @@ config SECCOMP | |||
1830 | 1842 | ||
1831 | config CC_STACKPROTECTOR | 1843 | config CC_STACKPROTECTOR |
1832 | bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)" | 1844 | bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)" |
1833 | depends on EXPERIMENTAL | ||
1834 | help | 1845 | help |
1835 | This option turns on the -fstack-protector GCC feature. This | 1846 | This option turns on the -fstack-protector GCC feature. This |
1836 | feature puts, at the beginning of functions, a canary value on | 1847 | feature puts, at the beginning of functions, a canary value on |
@@ -1847,7 +1858,7 @@ config XEN_DOM0 | |||
1847 | 1858 | ||
1848 | config XEN | 1859 | config XEN |
1849 | bool "Xen guest support on ARM (EXPERIMENTAL)" | 1860 | bool "Xen guest support on ARM (EXPERIMENTAL)" |
1850 | depends on EXPERIMENTAL && ARM && OF | 1861 | depends on ARM && OF |
1851 | depends on CPU_V7 && !CPU_V6 | 1862 | depends on CPU_V7 && !CPU_V6 |
1852 | help | 1863 | help |
1853 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. | 1864 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. |
@@ -1916,7 +1927,7 @@ config ZBOOT_ROM | |||
1916 | 1927 | ||
1917 | choice | 1928 | choice |
1918 | prompt "Include SD/MMC loader in zImage (EXPERIMENTAL)" | 1929 | prompt "Include SD/MMC loader in zImage (EXPERIMENTAL)" |
1919 | depends on ZBOOT_ROM && ARCH_SH7372 && EXPERIMENTAL | 1930 | depends on ZBOOT_ROM && ARCH_SH7372 |
1920 | default ZBOOT_ROM_NONE | 1931 | default ZBOOT_ROM_NONE |
1921 | help | 1932 | help |
1922 | Include experimental SD/MMC loading code in the ROM-able zImage. | 1933 | Include experimental SD/MMC loading code in the ROM-able zImage. |
@@ -1945,7 +1956,7 @@ endchoice | |||
1945 | 1956 | ||
1946 | config ARM_APPENDED_DTB | 1957 | config ARM_APPENDED_DTB |
1947 | bool "Use appended device tree blob to zImage (EXPERIMENTAL)" | 1958 | bool "Use appended device tree blob to zImage (EXPERIMENTAL)" |
1948 | depends on OF && !ZBOOT_ROM && EXPERIMENTAL | 1959 | depends on OF && !ZBOOT_ROM |
1949 | help | 1960 | help |
1950 | With this option, the boot code will look for a device tree binary | 1961 | With this option, the boot code will look for a device tree binary |
1951 | (DTB) appended to zImage | 1962 | (DTB) appended to zImage |
@@ -2063,7 +2074,7 @@ config XIP_PHYS_ADDR | |||
2063 | 2074 | ||
2064 | config KEXEC | 2075 | config KEXEC |
2065 | bool "Kexec system call (EXPERIMENTAL)" | 2076 | bool "Kexec system call (EXPERIMENTAL)" |
2066 | depends on EXPERIMENTAL && (!SMP || HOTPLUG_CPU) | 2077 | depends on (!SMP || HOTPLUG_CPU) |
2067 | help | 2078 | help |
2068 | kexec is a system call that implements the ability to shutdown your | 2079 | kexec is a system call that implements the ability to shutdown your |
2069 | current kernel, and to start another kernel. It is like a reboot | 2080 | current kernel, and to start another kernel. It is like a reboot |
@@ -2085,7 +2096,6 @@ config ATAGS_PROC | |||
2085 | 2096 | ||
2086 | config CRASH_DUMP | 2097 | config CRASH_DUMP |
2087 | bool "Build kdump crash kernel (EXPERIMENTAL)" | 2098 | bool "Build kdump crash kernel (EXPERIMENTAL)" |
2088 | depends on EXPERIMENTAL | ||
2089 | help | 2099 | help |
2090 | Generate crash dump after being started by kexec. This should | 2100 | Generate crash dump after being started by kexec. This should |
2091 | be normally only set in special crash dump kernels which are | 2101 | be normally only set in special crash dump kernels which are |
@@ -2152,7 +2162,7 @@ config CPU_FREQ_S3C | |||
2152 | 2162 | ||
2153 | config CPU_FREQ_S3C24XX | 2163 | config CPU_FREQ_S3C24XX |
2154 | bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)" | 2164 | bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)" |
2155 | depends on ARCH_S3C24XX && CPU_FREQ && EXPERIMENTAL | 2165 | depends on ARCH_S3C24XX && CPU_FREQ |
2156 | select CPU_FREQ_S3C | 2166 | select CPU_FREQ_S3C |
2157 | help | 2167 | help |
2158 | This enables the CPUfreq driver for the Samsung S3C24XX family | 2168 | This enables the CPUfreq driver for the Samsung S3C24XX family |
@@ -2164,7 +2174,7 @@ config CPU_FREQ_S3C24XX | |||
2164 | 2174 | ||
2165 | config CPU_FREQ_S3C24XX_PLL | 2175 | config CPU_FREQ_S3C24XX_PLL |
2166 | bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)" | 2176 | bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)" |
2167 | depends on CPU_FREQ_S3C24XX && EXPERIMENTAL | 2177 | depends on CPU_FREQ_S3C24XX |
2168 | help | 2178 | help |
2169 | Compile in support for changing the PLL frequency from the | 2179 | Compile in support for changing the PLL frequency from the |
2170 | S3C24XX series CPUfreq driver. The PLL takes time to settle | 2180 | S3C24XX series CPUfreq driver. The PLL takes time to settle |
@@ -2227,7 +2237,7 @@ config FPE_NWFPE_XP | |||
2227 | 2237 | ||
2228 | config FPE_FASTFPE | 2238 | config FPE_FASTFPE |
2229 | bool "FastFPE math emulation (EXPERIMENTAL)" | 2239 | bool "FastFPE math emulation (EXPERIMENTAL)" |
2230 | depends on (!AEABI || OABI_COMPAT) && !CPU_32v3 && EXPERIMENTAL | 2240 | depends on (!AEABI || OABI_COMPAT) && !CPU_32v3 |
2231 | ---help--- | 2241 | ---help--- |
2232 | Say Y here to include the FAST floating point emulator in the kernel. | 2242 | Say Y here to include the FAST floating point emulator in the kernel. |
2233 | This is an experimental much faster emulator which now also has full | 2243 | This is an experimental much faster emulator which now also has full |
@@ -2309,3 +2319,5 @@ source "security/Kconfig" | |||
2309 | source "crypto/Kconfig" | 2319 | source "crypto/Kconfig" |
2310 | 2320 | ||
2311 | source "lib/Kconfig" | 2321 | source "lib/Kconfig" |
2322 | |||
2323 | source "arch/arm/kvm/Kconfig" | ||
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 305ceb8ed03d..acddddac7ee4 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
@@ -32,7 +32,7 @@ config FRAME_POINTER | |||
32 | 32 | ||
33 | config ARM_UNWIND | 33 | config ARM_UNWIND |
34 | bool "Enable stack unwinding support (EXPERIMENTAL)" | 34 | bool "Enable stack unwinding support (EXPERIMENTAL)" |
35 | depends on AEABI && EXPERIMENTAL | 35 | depends on AEABI |
36 | default y | 36 | default y |
37 | help | 37 | help |
38 | This option enables stack unwinding support in the kernel | 38 | This option enables stack unwinding support in the kernel |
@@ -298,6 +298,13 @@ choice | |||
298 | Say Y here if you want kernel low-level debugging support | 298 | Say Y here if you want kernel low-level debugging support |
299 | on MVEBU based platforms. | 299 | on MVEBU based platforms. |
300 | 300 | ||
301 | config DEBUG_OMAP2PLUS_UART | ||
302 | bool "Kernel low-level debugging messages via OMAP2PLUS UART" | ||
303 | depends on ARCH_OMAP2PLUS | ||
304 | help | ||
305 | Say Y here if you want kernel low-level debugging support | ||
306 | on OMAP2PLUS based platforms. | ||
307 | |||
301 | config DEBUG_PICOXCELL_UART | 308 | config DEBUG_PICOXCELL_UART |
302 | depends on ARCH_PICOXCELL | 309 | depends on ARCH_PICOXCELL |
303 | bool "Use PicoXcell UART for low-level debug" | 310 | bool "Use PicoXcell UART for low-level debug" |
@@ -494,6 +501,54 @@ config DEBUG_IMX_UART_PORT | |||
494 | 501 | ||
495 | choice | 502 | choice |
496 | prompt "Low-level debug console UART" | 503 | prompt "Low-level debug console UART" |
504 | depends on DEBUG_OMAP2PLUS_UART | ||
505 | |||
506 | config DEBUG_OMAP2UART1 | ||
507 | bool "OMAP2/3/4 UART1 (omap2/3 sdp boards and some omap3 boards)" | ||
508 | help | ||
509 | This covers at least h4, 2430sdp, 3430sdp, 3630sdp, | ||
510 | omap3 torpedo and 3530 lv som. | ||
511 | |||
512 | config DEBUG_OMAP2UART2 | ||
513 | bool "OMAP2/3/4 UART2" | ||
514 | |||
515 | config DEBUG_OMAP2UART3 | ||
516 | bool "OMAP2 UART3 (n8x0)" | ||
517 | |||
518 | config DEBUG_OMAP3UART3 | ||
519 | bool "OMAP3 UART3 (most omap3 boards)" | ||
520 | help | ||
521 | This covers at least cm_t3x, beagle, crane, devkit8000, | ||
522 | igep00x0, ldp, n900, n9(50), pandora, overo, touchbook, | ||
523 | and 3517evm. | ||
524 | |||
525 | config DEBUG_OMAP4UART3 | ||
526 | bool "OMAP4/5 UART3 (omap4 blaze, panda, omap5 sevm)" | ||
527 | |||
528 | config DEBUG_OMAP3UART4 | ||
529 | bool "OMAP36XX UART4" | ||
530 | |||
531 | config DEBUG_OMAP4UART4 | ||
532 | bool "OMAP4/5 UART4" | ||
533 | |||
534 | config DEBUG_TI81XXUART1 | ||
535 | bool "TI81XX UART1 (ti8148evm)" | ||
536 | |||
537 | config DEBUG_TI81XXUART2 | ||
538 | bool "TI81XX UART2" | ||
539 | |||
540 | config DEBUG_TI81XXUART3 | ||
541 | bool "TI81XX UART3 (ti8168evm)" | ||
542 | |||
543 | config DEBUG_AM33XXUART1 | ||
544 | bool "AM33XX UART1" | ||
545 | |||
546 | config DEBUG_ZOOM_UART | ||
547 | bool "Zoom2/3 UART" | ||
548 | endchoice | ||
549 | |||
550 | choice | ||
551 | prompt "Low-level debug console UART" | ||
497 | depends on DEBUG_LL && DEBUG_TEGRA_UART | 552 | depends on DEBUG_LL && DEBUG_TEGRA_UART |
498 | 553 | ||
499 | config TEGRA_DEBUG_UART_AUTO_ODMDATA | 554 | config TEGRA_DEBUG_UART_AUTO_ODMDATA |
@@ -535,6 +590,7 @@ config DEBUG_LL_INCLUDE | |||
535 | DEBUG_IMX6Q_UART | 590 | DEBUG_IMX6Q_UART |
536 | default "debug/highbank.S" if DEBUG_HIGHBANK_UART | 591 | default "debug/highbank.S" if DEBUG_HIGHBANK_UART |
537 | default "debug/mvebu.S" if DEBUG_MVEBU_UART | 592 | default "debug/mvebu.S" if DEBUG_MVEBU_UART |
593 | default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART | ||
538 | default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART | 594 | default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART |
539 | default "debug/socfpga.S" if DEBUG_SOCFPGA_UART | 595 | default "debug/socfpga.S" if DEBUG_SOCFPGA_UART |
540 | default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1 | 596 | default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1 |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 30c443c406f3..1b7071681a5e 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -173,7 +173,7 @@ machine-$(CONFIG_ARCH_PRIMA2) += prima2 | |||
173 | machine-$(CONFIG_ARCH_PXA) += pxa | 173 | machine-$(CONFIG_ARCH_PXA) += pxa |
174 | machine-$(CONFIG_ARCH_REALVIEW) += realview | 174 | machine-$(CONFIG_ARCH_REALVIEW) += realview |
175 | machine-$(CONFIG_ARCH_RPC) += rpc | 175 | machine-$(CONFIG_ARCH_RPC) += rpc |
176 | machine-$(CONFIG_ARCH_S3C24XX) += s3c24xx s3c2412 s3c2440 | 176 | machine-$(CONFIG_ARCH_S3C24XX) += s3c24xx |
177 | machine-$(CONFIG_ARCH_S3C64XX) += s3c64xx | 177 | machine-$(CONFIG_ARCH_S3C64XX) += s3c64xx |
178 | machine-$(CONFIG_ARCH_S5P64X0) += s5p64x0 | 178 | machine-$(CONFIG_ARCH_S5P64X0) += s5p64x0 |
179 | machine-$(CONFIG_ARCH_S5PC100) += s5pc100 | 179 | machine-$(CONFIG_ARCH_S5PC100) += s5pc100 |
@@ -204,7 +204,7 @@ plat-$(CONFIG_ARCH_S3C64XX) += samsung | |||
204 | plat-$(CONFIG_PLAT_IOP) += iop | 204 | plat-$(CONFIG_PLAT_IOP) += iop |
205 | plat-$(CONFIG_PLAT_ORION) += orion | 205 | plat-$(CONFIG_PLAT_ORION) += orion |
206 | plat-$(CONFIG_PLAT_PXA) += pxa | 206 | plat-$(CONFIG_PLAT_PXA) += pxa |
207 | plat-$(CONFIG_PLAT_S3C24XX) += s3c24xx samsung | 207 | plat-$(CONFIG_PLAT_S3C24XX) += samsung |
208 | plat-$(CONFIG_PLAT_S5P) += samsung | 208 | plat-$(CONFIG_PLAT_S5P) += samsung |
209 | plat-$(CONFIG_PLAT_SPEAR) += spear | 209 | plat-$(CONFIG_PLAT_SPEAR) += spear |
210 | plat-$(CONFIG_PLAT_VERSATILE) += versatile | 210 | plat-$(CONFIG_PLAT_VERSATILE) += versatile |
@@ -252,6 +252,7 @@ core-$(CONFIG_FPE_NWFPE) += arch/arm/nwfpe/ | |||
252 | core-$(CONFIG_FPE_FASTFPE) += $(FASTFPE_OBJ) | 252 | core-$(CONFIG_FPE_FASTFPE) += $(FASTFPE_OBJ) |
253 | core-$(CONFIG_VFP) += arch/arm/vfp/ | 253 | core-$(CONFIG_VFP) += arch/arm/vfp/ |
254 | core-$(CONFIG_XEN) += arch/arm/xen/ | 254 | core-$(CONFIG_XEN) += arch/arm/xen/ |
255 | core-$(CONFIG_KVM_ARM_HOST) += arch/arm/kvm/ | ||
255 | 256 | ||
256 | # If we have a machine-specific directory, then include it in the build. | 257 | # If we have a machine-specific directory, then include it in the build. |
257 | core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ | 258 | core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ |
diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c index 9deb56a702ce..24b0475cb8bf 100644 --- a/arch/arm/boot/compressed/decompress.c +++ b/arch/arm/boot/compressed/decompress.c | |||
@@ -13,8 +13,6 @@ extern void error(char *); | |||
13 | #define STATIC static | 13 | #define STATIC static |
14 | #define STATIC_RW_DATA /* non-static please */ | 14 | #define STATIC_RW_DATA /* non-static please */ |
15 | 15 | ||
16 | #define ARCH_HAS_DECOMP_WDOG | ||
17 | |||
18 | /* Diagnostic functions */ | 16 | /* Diagnostic functions */ |
19 | #ifdef DEBUG | 17 | #ifdef DEBUG |
20 | # define Assert(cond,msg) {if(!(cond)) error(msg);} | 18 | # define Assert(cond,msg) {if(!(cond)) error(msg);} |
diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi index 80e29c605d4e..4801717566dd 100644 --- a/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/arch/arm/boot/dts/at91sam9n12.dtsi | |||
@@ -324,8 +324,6 @@ | |||
324 | compatible = "atmel,at91sam9260-usart"; | 324 | compatible = "atmel,at91sam9260-usart"; |
325 | reg = <0xf801c000 0x4000>; | 325 | reg = <0xf801c000 0x4000>; |
326 | interrupts = <5 4 5>; | 326 | interrupts = <5 4 5>; |
327 | atmel,use-dma-rx; | ||
328 | atmel,use-dma-tx; | ||
329 | pinctrl-names = "default"; | 327 | pinctrl-names = "default"; |
330 | pinctrl-0 = <&pinctrl_usart0>; | 328 | pinctrl-0 = <&pinctrl_usart0>; |
331 | status = "disabled"; | 329 | status = "disabled"; |
@@ -335,8 +333,6 @@ | |||
335 | compatible = "atmel,at91sam9260-usart"; | 333 | compatible = "atmel,at91sam9260-usart"; |
336 | reg = <0xf8020000 0x4000>; | 334 | reg = <0xf8020000 0x4000>; |
337 | interrupts = <6 4 5>; | 335 | interrupts = <6 4 5>; |
338 | atmel,use-dma-rx; | ||
339 | atmel,use-dma-tx; | ||
340 | pinctrl-names = "default"; | 336 | pinctrl-names = "default"; |
341 | pinctrl-0 = <&pinctrl_usart1>; | 337 | pinctrl-0 = <&pinctrl_usart1>; |
342 | status = "disabled"; | 338 | status = "disabled"; |
@@ -346,8 +342,6 @@ | |||
346 | compatible = "atmel,at91sam9260-usart"; | 342 | compatible = "atmel,at91sam9260-usart"; |
347 | reg = <0xf8024000 0x4000>; | 343 | reg = <0xf8024000 0x4000>; |
348 | interrupts = <7 4 5>; | 344 | interrupts = <7 4 5>; |
349 | atmel,use-dma-rx; | ||
350 | atmel,use-dma-tx; | ||
351 | pinctrl-names = "default"; | 345 | pinctrl-names = "default"; |
352 | pinctrl-0 = <&pinctrl_usart2>; | 346 | pinctrl-0 = <&pinctrl_usart2>; |
353 | status = "disabled"; | 347 | status = "disabled"; |
@@ -357,8 +351,6 @@ | |||
357 | compatible = "atmel,at91sam9260-usart"; | 351 | compatible = "atmel,at91sam9260-usart"; |
358 | reg = <0xf8028000 0x4000>; | 352 | reg = <0xf8028000 0x4000>; |
359 | interrupts = <8 4 5>; | 353 | interrupts = <8 4 5>; |
360 | atmel,use-dma-rx; | ||
361 | atmel,use-dma-tx; | ||
362 | pinctrl-names = "default"; | 354 | pinctrl-names = "default"; |
363 | pinctrl-0 = <&pinctrl_usart3>; | 355 | pinctrl-0 = <&pinctrl_usart3>; |
364 | status = "disabled"; | 356 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index 8ecca6948d81..d112c3af8ce2 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi | |||
@@ -197,9 +197,9 @@ | |||
197 | }; | 197 | }; |
198 | 198 | ||
199 | usart3 { | 199 | usart3 { |
200 | pinctrl_uart3: usart3-0 { | 200 | pinctrl_usart3: usart3-0 { |
201 | atmel,pins = | 201 | atmel,pins = |
202 | <2 23 0x2 0x1 /* PC22 periph B with pullup */ | 202 | <2 22 0x2 0x1 /* PC22 periph B with pullup */ |
203 | 2 23 0x2 0x0>; /* PC23 periph B */ | 203 | 2 23 0x2 0x0>; /* PC23 periph B */ |
204 | }; | 204 | }; |
205 | 205 | ||
@@ -402,8 +402,6 @@ | |||
402 | compatible = "atmel,at91sam9260-usart"; | 402 | compatible = "atmel,at91sam9260-usart"; |
403 | reg = <0xf801c000 0x200>; | 403 | reg = <0xf801c000 0x200>; |
404 | interrupts = <5 4 5>; | 404 | interrupts = <5 4 5>; |
405 | atmel,use-dma-rx; | ||
406 | atmel,use-dma-tx; | ||
407 | pinctrl-names = "default"; | 405 | pinctrl-names = "default"; |
408 | pinctrl-0 = <&pinctrl_usart0>; | 406 | pinctrl-0 = <&pinctrl_usart0>; |
409 | status = "disabled"; | 407 | status = "disabled"; |
@@ -413,8 +411,6 @@ | |||
413 | compatible = "atmel,at91sam9260-usart"; | 411 | compatible = "atmel,at91sam9260-usart"; |
414 | reg = <0xf8020000 0x200>; | 412 | reg = <0xf8020000 0x200>; |
415 | interrupts = <6 4 5>; | 413 | interrupts = <6 4 5>; |
416 | atmel,use-dma-rx; | ||
417 | atmel,use-dma-tx; | ||
418 | pinctrl-names = "default"; | 414 | pinctrl-names = "default"; |
419 | pinctrl-0 = <&pinctrl_usart1>; | 415 | pinctrl-0 = <&pinctrl_usart1>; |
420 | status = "disabled"; | 416 | status = "disabled"; |
@@ -424,8 +420,6 @@ | |||
424 | compatible = "atmel,at91sam9260-usart"; | 420 | compatible = "atmel,at91sam9260-usart"; |
425 | reg = <0xf8024000 0x200>; | 421 | reg = <0xf8024000 0x200>; |
426 | interrupts = <7 4 5>; | 422 | interrupts = <7 4 5>; |
427 | atmel,use-dma-rx; | ||
428 | atmel,use-dma-tx; | ||
429 | pinctrl-names = "default"; | 423 | pinctrl-names = "default"; |
430 | pinctrl-0 = <&pinctrl_usart2>; | 424 | pinctrl-0 = <&pinctrl_usart2>; |
431 | status = "disabled"; | 425 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/dbx5x0.dtsi b/arch/arm/boot/dts/dbx5x0.dtsi index 63f2fbcfe819..69140ba99f46 100644 --- a/arch/arm/boot/dts/dbx5x0.dtsi +++ b/arch/arm/boot/dts/dbx5x0.dtsi | |||
@@ -170,10 +170,9 @@ | |||
170 | gpio-bank = <8>; | 170 | gpio-bank = <8>; |
171 | }; | 171 | }; |
172 | 172 | ||
173 | pinctrl@80157000 { | 173 | pinctrl { |
174 | // This is actually the PRCMU base address | 174 | compatible = "stericsson,nmk-pinctrl"; |
175 | reg = <0x80157000 0x2000>; | 175 | prcm = <&prcmu>; |
176 | compatible = "stericsson,nmk_pinctrl"; | ||
177 | }; | 176 | }; |
178 | 177 | ||
179 | usb@a03e0000 { | 178 | usb@a03e0000 { |
@@ -190,9 +189,10 @@ | |||
190 | interrupts = <0 25 0x4>; | 189 | interrupts = <0 25 0x4>; |
191 | }; | 190 | }; |
192 | 191 | ||
193 | prcmu@80157000 { | 192 | prcmu: prcmu@80157000 { |
194 | compatible = "stericsson,db8500-prcmu"; | 193 | compatible = "stericsson,db8500-prcmu"; |
195 | reg = <0x80157000 0x1000>; | 194 | reg = <0x80157000 0x1000>; |
195 | reg-names = "prcmu"; | ||
196 | interrupts = <0 47 0x4>; | 196 | interrupts = <0 47 0x4>; |
197 | #address-cells = <1>; | 197 | #address-cells = <1>; |
198 | #size-cells = <1>; | 198 | #size-cells = <1>; |
diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi index e31bfc4a6f09..2feffc70814c 100644 --- a/arch/arm/boot/dts/exynos4210.dtsi +++ b/arch/arm/boot/dts/exynos4210.dtsi | |||
@@ -48,13 +48,13 @@ | |||
48 | }; | 48 | }; |
49 | 49 | ||
50 | pinctrl_0: pinctrl@11400000 { | 50 | pinctrl_0: pinctrl@11400000 { |
51 | compatible = "samsung,pinctrl-exynos4210"; | 51 | compatible = "samsung,exynos4210-pinctrl"; |
52 | reg = <0x11400000 0x1000>; | 52 | reg = <0x11400000 0x1000>; |
53 | interrupts = <0 47 0>; | 53 | interrupts = <0 47 0>; |
54 | }; | 54 | }; |
55 | 55 | ||
56 | pinctrl_1: pinctrl@11000000 { | 56 | pinctrl_1: pinctrl@11000000 { |
57 | compatible = "samsung,pinctrl-exynos4210"; | 57 | compatible = "samsung,exynos4210-pinctrl"; |
58 | reg = <0x11000000 0x1000>; | 58 | reg = <0x11000000 0x1000>; |
59 | interrupts = <0 46 0>; | 59 | interrupts = <0 46 0>; |
60 | 60 | ||
@@ -66,7 +66,7 @@ | |||
66 | }; | 66 | }; |
67 | 67 | ||
68 | pinctrl_2: pinctrl@03860000 { | 68 | pinctrl_2: pinctrl@03860000 { |
69 | compatible = "samsung,pinctrl-exynos4210"; | 69 | compatible = "samsung,exynos4210-pinctrl"; |
70 | reg = <0x03860000 0x1000>; | 70 | reg = <0x03860000 0x1000>; |
71 | }; | 71 | }; |
72 | 72 | ||
diff --git a/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi b/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi index 8e6115adcd97..099cec79e2ae 100644 --- a/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi +++ b/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi | |||
@@ -661,7 +661,7 @@ | |||
661 | 661 | ||
662 | sd4_bus8: sd4-bus-width8 { | 662 | sd4_bus8: sd4-bus-width8 { |
663 | samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; | 663 | samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; |
664 | samsung,pin-function = <3>; | 664 | samsung,pin-function = <4>; |
665 | samsung,pin-pud = <4>; | 665 | samsung,pin-pud = <4>; |
666 | samsung,pin-drv = <3>; | 666 | samsung,pin-drv = <3>; |
667 | }; | 667 | }; |
diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi index 179a62e46c9d..9a8780694909 100644 --- a/arch/arm/boot/dts/exynos4x12.dtsi +++ b/arch/arm/boot/dts/exynos4x12.dtsi | |||
@@ -37,13 +37,13 @@ | |||
37 | }; | 37 | }; |
38 | 38 | ||
39 | pinctrl_0: pinctrl@11400000 { | 39 | pinctrl_0: pinctrl@11400000 { |
40 | compatible = "samsung,pinctrl-exynos4x12"; | 40 | compatible = "samsung,exynos4x12-pinctrl"; |
41 | reg = <0x11400000 0x1000>; | 41 | reg = <0x11400000 0x1000>; |
42 | interrupts = <0 47 0>; | 42 | interrupts = <0 47 0>; |
43 | }; | 43 | }; |
44 | 44 | ||
45 | pinctrl_1: pinctrl@11000000 { | 45 | pinctrl_1: pinctrl@11000000 { |
46 | compatible = "samsung,pinctrl-exynos4x12"; | 46 | compatible = "samsung,exynos4x12-pinctrl"; |
47 | reg = <0x11000000 0x1000>; | 47 | reg = <0x11000000 0x1000>; |
48 | interrupts = <0 46 0>; | 48 | interrupts = <0 46 0>; |
49 | 49 | ||
@@ -55,14 +55,14 @@ | |||
55 | }; | 55 | }; |
56 | 56 | ||
57 | pinctrl_2: pinctrl@03860000 { | 57 | pinctrl_2: pinctrl@03860000 { |
58 | compatible = "samsung,pinctrl-exynos4x12"; | 58 | compatible = "samsung,exynos4x12-pinctrl"; |
59 | reg = <0x03860000 0x1000>; | 59 | reg = <0x03860000 0x1000>; |
60 | interrupt-parent = <&combiner>; | 60 | interrupt-parent = <&combiner>; |
61 | interrupts = <10 0>; | 61 | interrupts = <10 0>; |
62 | }; | 62 | }; |
63 | 63 | ||
64 | pinctrl_3: pinctrl@106E0000 { | 64 | pinctrl_3: pinctrl@106E0000 { |
65 | compatible = "samsung,pinctrl-exynos4x12"; | 65 | compatible = "samsung,exynos4x12-pinctrl"; |
66 | reg = <0x106E0000 0x1000>; | 66 | reg = <0x106E0000 0x1000>; |
67 | interrupts = <0 72 0>; | 67 | interrupts = <0 72 0>; |
68 | }; | 68 | }; |
diff --git a/arch/arm/boot/dts/exynos5250-smdk5250.dts b/arch/arm/boot/dts/exynos5250-smdk5250.dts index e05b18f3c33d..4db9db0a8443 100644 --- a/arch/arm/boot/dts/exynos5250-smdk5250.dts +++ b/arch/arm/boot/dts/exynos5250-smdk5250.dts | |||
@@ -49,6 +49,11 @@ | |||
49 | compatible = "samsung,s524ad0xd1"; | 49 | compatible = "samsung,s524ad0xd1"; |
50 | reg = <0x51>; | 50 | reg = <0x51>; |
51 | }; | 51 | }; |
52 | |||
53 | wm8994: wm8994@1a { | ||
54 | compatible = "wlf,wm8994"; | ||
55 | reg = <0x1a>; | ||
56 | }; | ||
52 | }; | 57 | }; |
53 | 58 | ||
54 | i2c@121D0000 { | 59 | i2c@121D0000 { |
@@ -204,4 +209,25 @@ | |||
204 | samsung,mfc-r = <0x43000000 0x800000>; | 209 | samsung,mfc-r = <0x43000000 0x800000>; |
205 | samsung,mfc-l = <0x51000000 0x800000>; | 210 | samsung,mfc-l = <0x51000000 0x800000>; |
206 | }; | 211 | }; |
212 | |||
213 | i2s0: i2s@03830000 { | ||
214 | gpios = <&gpz 0 2 0 0>, <&gpz 1 2 0 0>, <&gpz 2 2 0 0>, | ||
215 | <&gpz 3 2 0 0>, <&gpz 4 2 0 0>, <&gpz 5 2 0 0>, | ||
216 | <&gpz 6 2 0 0>; | ||
217 | }; | ||
218 | |||
219 | i2s1: i2s@12D60000 { | ||
220 | status = "disabled"; | ||
221 | }; | ||
222 | |||
223 | i2s2: i2s@12D70000 { | ||
224 | status = "disabled"; | ||
225 | }; | ||
226 | |||
227 | sound { | ||
228 | compatible = "samsung,smdk-wm8994"; | ||
229 | |||
230 | samsung,i2s-controller = <&i2s0>; | ||
231 | samsung,audio-codec = <&wm8994>; | ||
232 | }; | ||
207 | }; | 233 | }; |
diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi index 3acf594ea60b..f50b4e854355 100644 --- a/arch/arm/boot/dts/exynos5250.dtsi +++ b/arch/arm/boot/dts/exynos5250.dtsi | |||
@@ -211,8 +211,9 @@ | |||
211 | compatible = "samsung,exynos4210-spi"; | 211 | compatible = "samsung,exynos4210-spi"; |
212 | reg = <0x12d20000 0x100>; | 212 | reg = <0x12d20000 0x100>; |
213 | interrupts = <0 66 0>; | 213 | interrupts = <0 66 0>; |
214 | tx-dma-channel = <&pdma0 5>; /* preliminary */ | 214 | dmas = <&pdma0 5 |
215 | rx-dma-channel = <&pdma0 4>; /* preliminary */ | 215 | &pdma0 4>; |
216 | dma-names = "tx", "rx"; | ||
216 | #address-cells = <1>; | 217 | #address-cells = <1>; |
217 | #size-cells = <0>; | 218 | #size-cells = <0>; |
218 | }; | 219 | }; |
@@ -221,8 +222,9 @@ | |||
221 | compatible = "samsung,exynos4210-spi"; | 222 | compatible = "samsung,exynos4210-spi"; |
222 | reg = <0x12d30000 0x100>; | 223 | reg = <0x12d30000 0x100>; |
223 | interrupts = <0 67 0>; | 224 | interrupts = <0 67 0>; |
224 | tx-dma-channel = <&pdma1 5>; /* preliminary */ | 225 | dmas = <&pdma1 5 |
225 | rx-dma-channel = <&pdma1 4>; /* preliminary */ | 226 | &pdma1 4>; |
227 | dma-names = "tx", "rx"; | ||
226 | #address-cells = <1>; | 228 | #address-cells = <1>; |
227 | #size-cells = <0>; | 229 | #size-cells = <0>; |
228 | }; | 230 | }; |
@@ -231,8 +233,9 @@ | |||
231 | compatible = "samsung,exynos4210-spi"; | 233 | compatible = "samsung,exynos4210-spi"; |
232 | reg = <0x12d40000 0x100>; | 234 | reg = <0x12d40000 0x100>; |
233 | interrupts = <0 68 0>; | 235 | interrupts = <0 68 0>; |
234 | tx-dma-channel = <&pdma0 7>; /* preliminary */ | 236 | dmas = <&pdma0 7 |
235 | rx-dma-channel = <&pdma0 6>; /* preliminary */ | 237 | &pdma0 6>; |
238 | dma-names = "tx", "rx"; | ||
236 | #address-cells = <1>; | 239 | #address-cells = <1>; |
237 | #size-cells = <0>; | 240 | #size-cells = <0>; |
238 | }; | 241 | }; |
@@ -269,6 +272,35 @@ | |||
269 | #size-cells = <0>; | 272 | #size-cells = <0>; |
270 | }; | 273 | }; |
271 | 274 | ||
275 | i2s0: i2s@03830000 { | ||
276 | compatible = "samsung,i2s-v5"; | ||
277 | reg = <0x03830000 0x100>; | ||
278 | dmas = <&pdma0 10 | ||
279 | &pdma0 9 | ||
280 | &pdma0 8>; | ||
281 | dma-names = "tx", "rx", "tx-sec"; | ||
282 | samsung,supports-6ch; | ||
283 | samsung,supports-rstclr; | ||
284 | samsung,supports-secdai; | ||
285 | samsung,idma-addr = <0x03000000>; | ||
286 | }; | ||
287 | |||
288 | i2s1: i2s@12D60000 { | ||
289 | compatible = "samsung,i2s-v5"; | ||
290 | reg = <0x12D60000 0x100>; | ||
291 | dmas = <&pdma1 12 | ||
292 | &pdma1 11>; | ||
293 | dma-names = "tx", "rx"; | ||
294 | }; | ||
295 | |||
296 | i2s2: i2s@12D70000 { | ||
297 | compatible = "samsung,i2s-v5"; | ||
298 | reg = <0x12D70000 0x100>; | ||
299 | dmas = <&pdma0 12 | ||
300 | &pdma0 11>; | ||
301 | dma-names = "tx", "rx"; | ||
302 | }; | ||
303 | |||
272 | amba { | 304 | amba { |
273 | #address-cells = <1>; | 305 | #address-cells = <1>; |
274 | #size-cells = <1>; | 306 | #size-cells = <1>; |
diff --git a/arch/arm/boot/dts/exynos5440.dtsi b/arch/arm/boot/dts/exynos5440.dtsi index 024269de8ee5..5f3562ad6746 100644 --- a/arch/arm/boot/dts/exynos5440.dtsi +++ b/arch/arm/boot/dts/exynos5440.dtsi | |||
@@ -86,7 +86,7 @@ | |||
86 | }; | 86 | }; |
87 | 87 | ||
88 | pinctrl { | 88 | pinctrl { |
89 | compatible = "samsung,pinctrl-exynos5440"; | 89 | compatible = "samsung,exynos5440-pinctrl"; |
90 | reg = <0xE0000 0x1000>; | 90 | reg = <0xE0000 0x1000>; |
91 | interrupt-controller; | 91 | interrupt-controller; |
92 | #interrupt-cells = <2>; | 92 | #interrupt-cells = <2>; |
@@ -154,6 +154,6 @@ | |||
154 | rtc { | 154 | rtc { |
155 | compatible = "samsung,s3c6410-rtc"; | 155 | compatible = "samsung,s3c6410-rtc"; |
156 | reg = <0x130000 0x1000>; | 156 | reg = <0x130000 0x1000>; |
157 | interrupts = <0 16 0>, <0 17 0>; | 157 | interrupts = <0 17 0>, <0 16 0>; |
158 | }; | 158 | }; |
159 | }; | 159 | }; |
diff --git a/arch/arm/boot/dts/highbank.dts b/arch/arm/boot/dts/highbank.dts index 5927a8df5625..6aad34ad9517 100644 --- a/arch/arm/boot/dts/highbank.dts +++ b/arch/arm/boot/dts/highbank.dts | |||
@@ -37,6 +37,16 @@ | |||
37 | next-level-cache = <&L2>; | 37 | next-level-cache = <&L2>; |
38 | clocks = <&a9pll>; | 38 | clocks = <&a9pll>; |
39 | clock-names = "cpu"; | 39 | clock-names = "cpu"; |
40 | operating-points = < | ||
41 | /* kHz ignored */ | ||
42 | 1300000 1000000 | ||
43 | 1200000 1000000 | ||
44 | 1100000 1000000 | ||
45 | 800000 1000000 | ||
46 | 400000 1000000 | ||
47 | 200000 1000000 | ||
48 | >; | ||
49 | clock-latency = <100000>; | ||
40 | }; | 50 | }; |
41 | 51 | ||
42 | cpu@901 { | 52 | cpu@901 { |
diff --git a/arch/arm/boot/dts/imx23.dtsi b/arch/arm/boot/dts/imx23.dtsi index 65415c598a5e..56afcf41aae0 100644 --- a/arch/arm/boot/dts/imx23.dtsi +++ b/arch/arm/boot/dts/imx23.dtsi | |||
@@ -391,7 +391,9 @@ | |||
391 | }; | 391 | }; |
392 | 392 | ||
393 | lradc@80050000 { | 393 | lradc@80050000 { |
394 | compatible = "fsl,imx23-lradc"; | ||
394 | reg = <0x80050000 0x2000>; | 395 | reg = <0x80050000 0x2000>; |
396 | interrupts = <36 37 38 39 40 41 42 43 44>; | ||
395 | status = "disabled"; | 397 | status = "disabled"; |
396 | }; | 398 | }; |
397 | 399 | ||
diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi index d6265ca97119..ff1205ea5719 100644 --- a/arch/arm/boot/dts/imx6q.dtsi +++ b/arch/arm/boot/dts/imx6q.dtsi | |||
@@ -866,7 +866,7 @@ | |||
866 | compatible = "fsl,imx6q-fec"; | 866 | compatible = "fsl,imx6q-fec"; |
867 | reg = <0x02188000 0x4000>; | 867 | reg = <0x02188000 0x4000>; |
868 | interrupts = <0 118 0x04 0 119 0x04>; | 868 | interrupts = <0 118 0x04 0 119 0x04>; |
869 | clocks = <&clks 117>, <&clks 117>, <&clks 177>; | 869 | clocks = <&clks 117>, <&clks 117>, <&clks 190>; |
870 | clock-names = "ipg", "ahb", "ptp"; | 870 | clock-names = "ipg", "ahb", "ptp"; |
871 | status = "disabled"; | 871 | status = "disabled"; |
872 | }; | 872 | }; |
diff --git a/arch/arm/boot/dts/prima2.dtsi b/arch/arm/boot/dts/prima2.dtsi index 055fca542120..3329719a9412 100644 --- a/arch/arm/boot/dts/prima2.dtsi +++ b/arch/arm/boot/dts/prima2.dtsi | |||
@@ -58,10 +58,11 @@ | |||
58 | #size-cells = <1>; | 58 | #size-cells = <1>; |
59 | ranges = <0x88000000 0x88000000 0x40000>; | 59 | ranges = <0x88000000 0x88000000 0x40000>; |
60 | 60 | ||
61 | clock-controller@88000000 { | 61 | clks: clock-controller@88000000 { |
62 | compatible = "sirf,prima2-clkc"; | 62 | compatible = "sirf,prima2-clkc"; |
63 | reg = <0x88000000 0x1000>; | 63 | reg = <0x88000000 0x1000>; |
64 | interrupts = <3>; | 64 | interrupts = <3>; |
65 | #clock-cells = <1>; | ||
65 | }; | 66 | }; |
66 | 67 | ||
67 | reset-controller@88010000 { | 68 | reset-controller@88010000 { |
@@ -85,6 +86,7 @@ | |||
85 | compatible = "sirf,prima2-memc"; | 86 | compatible = "sirf,prima2-memc"; |
86 | reg = <0x90000000 0x10000>; | 87 | reg = <0x90000000 0x10000>; |
87 | interrupts = <27>; | 88 | interrupts = <27>; |
89 | clocks = <&clks 5>; | ||
88 | }; | 90 | }; |
89 | }; | 91 | }; |
90 | 92 | ||
@@ -104,6 +106,7 @@ | |||
104 | compatible = "sirf,prima2-vpp"; | 106 | compatible = "sirf,prima2-vpp"; |
105 | reg = <0x90020000 0x10000>; | 107 | reg = <0x90020000 0x10000>; |
106 | interrupts = <31>; | 108 | interrupts = <31>; |
109 | clocks = <&clks 35>; | ||
107 | }; | 110 | }; |
108 | }; | 111 | }; |
109 | 112 | ||
@@ -117,6 +120,7 @@ | |||
117 | compatible = "powervr,sgx531"; | 120 | compatible = "powervr,sgx531"; |
118 | reg = <0x98000000 0x8000000>; | 121 | reg = <0x98000000 0x8000000>; |
119 | interrupts = <6>; | 122 | interrupts = <6>; |
123 | clocks = <&clks 32>; | ||
120 | }; | 124 | }; |
121 | }; | 125 | }; |
122 | 126 | ||
@@ -130,6 +134,7 @@ | |||
130 | compatible = "sirf,prima2-video-codec"; | 134 | compatible = "sirf,prima2-video-codec"; |
131 | reg = <0xa0000000 0x8000000>; | 135 | reg = <0xa0000000 0x8000000>; |
132 | interrupts = <5>; | 136 | interrupts = <5>; |
137 | clocks = <&clks 33>; | ||
133 | }; | 138 | }; |
134 | }; | 139 | }; |
135 | 140 | ||
@@ -149,12 +154,14 @@ | |||
149 | compatible = "sirf,prima2-gps"; | 154 | compatible = "sirf,prima2-gps"; |
150 | reg = <0xa8010000 0x10000>; | 155 | reg = <0xa8010000 0x10000>; |
151 | interrupts = <7>; | 156 | interrupts = <7>; |
157 | clocks = <&clks 9>; | ||
152 | }; | 158 | }; |
153 | 159 | ||
154 | dsp@a9000000 { | 160 | dsp@a9000000 { |
155 | compatible = "sirf,prima2-dsp"; | 161 | compatible = "sirf,prima2-dsp"; |
156 | reg = <0xa9000000 0x1000000>; | 162 | reg = <0xa9000000 0x1000000>; |
157 | interrupts = <8>; | 163 | interrupts = <8>; |
164 | clocks = <&clks 8>; | ||
158 | }; | 165 | }; |
159 | }; | 166 | }; |
160 | 167 | ||
@@ -174,12 +181,14 @@ | |||
174 | compatible = "sirf,prima2-nand"; | 181 | compatible = "sirf,prima2-nand"; |
175 | reg = <0xb0030000 0x10000>; | 182 | reg = <0xb0030000 0x10000>; |
176 | interrupts = <41>; | 183 | interrupts = <41>; |
184 | clocks = <&clks 26>; | ||
177 | }; | 185 | }; |
178 | 186 | ||
179 | audio@b0040000 { | 187 | audio@b0040000 { |
180 | compatible = "sirf,prima2-audio"; | 188 | compatible = "sirf,prima2-audio"; |
181 | reg = <0xb0040000 0x10000>; | 189 | reg = <0xb0040000 0x10000>; |
182 | interrupts = <35>; | 190 | interrupts = <35>; |
191 | clocks = <&clks 27>; | ||
183 | }; | 192 | }; |
184 | 193 | ||
185 | uart0: uart@b0050000 { | 194 | uart0: uart@b0050000 { |
@@ -187,6 +196,7 @@ | |||
187 | compatible = "sirf,prima2-uart"; | 196 | compatible = "sirf,prima2-uart"; |
188 | reg = <0xb0050000 0x10000>; | 197 | reg = <0xb0050000 0x10000>; |
189 | interrupts = <17>; | 198 | interrupts = <17>; |
199 | clocks = <&clks 13>; | ||
190 | }; | 200 | }; |
191 | 201 | ||
192 | uart1: uart@b0060000 { | 202 | uart1: uart@b0060000 { |
@@ -194,6 +204,7 @@ | |||
194 | compatible = "sirf,prima2-uart"; | 204 | compatible = "sirf,prima2-uart"; |
195 | reg = <0xb0060000 0x10000>; | 205 | reg = <0xb0060000 0x10000>; |
196 | interrupts = <18>; | 206 | interrupts = <18>; |
207 | clocks = <&clks 14>; | ||
197 | }; | 208 | }; |
198 | 209 | ||
199 | uart2: uart@b0070000 { | 210 | uart2: uart@b0070000 { |
@@ -201,6 +212,7 @@ | |||
201 | compatible = "sirf,prima2-uart"; | 212 | compatible = "sirf,prima2-uart"; |
202 | reg = <0xb0070000 0x10000>; | 213 | reg = <0xb0070000 0x10000>; |
203 | interrupts = <19>; | 214 | interrupts = <19>; |
215 | clocks = <&clks 15>; | ||
204 | }; | 216 | }; |
205 | 217 | ||
206 | usp0: usp@b0080000 { | 218 | usp0: usp@b0080000 { |
@@ -208,6 +220,7 @@ | |||
208 | compatible = "sirf,prima2-usp"; | 220 | compatible = "sirf,prima2-usp"; |
209 | reg = <0xb0080000 0x10000>; | 221 | reg = <0xb0080000 0x10000>; |
210 | interrupts = <20>; | 222 | interrupts = <20>; |
223 | clocks = <&clks 28>; | ||
211 | }; | 224 | }; |
212 | 225 | ||
213 | usp1: usp@b0090000 { | 226 | usp1: usp@b0090000 { |
@@ -215,6 +228,7 @@ | |||
215 | compatible = "sirf,prima2-usp"; | 228 | compatible = "sirf,prima2-usp"; |
216 | reg = <0xb0090000 0x10000>; | 229 | reg = <0xb0090000 0x10000>; |
217 | interrupts = <21>; | 230 | interrupts = <21>; |
231 | clocks = <&clks 29>; | ||
218 | }; | 232 | }; |
219 | 233 | ||
220 | usp2: usp@b00a0000 { | 234 | usp2: usp@b00a0000 { |
@@ -222,6 +236,7 @@ | |||
222 | compatible = "sirf,prima2-usp"; | 236 | compatible = "sirf,prima2-usp"; |
223 | reg = <0xb00a0000 0x10000>; | 237 | reg = <0xb00a0000 0x10000>; |
224 | interrupts = <22>; | 238 | interrupts = <22>; |
239 | clocks = <&clks 30>; | ||
225 | }; | 240 | }; |
226 | 241 | ||
227 | dmac0: dma-controller@b00b0000 { | 242 | dmac0: dma-controller@b00b0000 { |
@@ -229,6 +244,7 @@ | |||
229 | compatible = "sirf,prima2-dmac"; | 244 | compatible = "sirf,prima2-dmac"; |
230 | reg = <0xb00b0000 0x10000>; | 245 | reg = <0xb00b0000 0x10000>; |
231 | interrupts = <12>; | 246 | interrupts = <12>; |
247 | clocks = <&clks 24>; | ||
232 | }; | 248 | }; |
233 | 249 | ||
234 | dmac1: dma-controller@b0160000 { | 250 | dmac1: dma-controller@b0160000 { |
@@ -236,11 +252,13 @@ | |||
236 | compatible = "sirf,prima2-dmac"; | 252 | compatible = "sirf,prima2-dmac"; |
237 | reg = <0xb0160000 0x10000>; | 253 | reg = <0xb0160000 0x10000>; |
238 | interrupts = <13>; | 254 | interrupts = <13>; |
255 | clocks = <&clks 25>; | ||
239 | }; | 256 | }; |
240 | 257 | ||
241 | vip@b00C0000 { | 258 | vip@b00C0000 { |
242 | compatible = "sirf,prima2-vip"; | 259 | compatible = "sirf,prima2-vip"; |
243 | reg = <0xb00C0000 0x10000>; | 260 | reg = <0xb00C0000 0x10000>; |
261 | clocks = <&clks 31>; | ||
244 | }; | 262 | }; |
245 | 263 | ||
246 | spi0: spi@b00d0000 { | 264 | spi0: spi@b00d0000 { |
@@ -248,6 +266,7 @@ | |||
248 | compatible = "sirf,prima2-spi"; | 266 | compatible = "sirf,prima2-spi"; |
249 | reg = <0xb00d0000 0x10000>; | 267 | reg = <0xb00d0000 0x10000>; |
250 | interrupts = <15>; | 268 | interrupts = <15>; |
269 | clocks = <&clks 19>; | ||
251 | }; | 270 | }; |
252 | 271 | ||
253 | spi1: spi@b0170000 { | 272 | spi1: spi@b0170000 { |
@@ -255,6 +274,7 @@ | |||
255 | compatible = "sirf,prima2-spi"; | 274 | compatible = "sirf,prima2-spi"; |
256 | reg = <0xb0170000 0x10000>; | 275 | reg = <0xb0170000 0x10000>; |
257 | interrupts = <16>; | 276 | interrupts = <16>; |
277 | clocks = <&clks 20>; | ||
258 | }; | 278 | }; |
259 | 279 | ||
260 | i2c0: i2c@b00e0000 { | 280 | i2c0: i2c@b00e0000 { |
@@ -262,6 +282,7 @@ | |||
262 | compatible = "sirf,prima2-i2c"; | 282 | compatible = "sirf,prima2-i2c"; |
263 | reg = <0xb00e0000 0x10000>; | 283 | reg = <0xb00e0000 0x10000>; |
264 | interrupts = <24>; | 284 | interrupts = <24>; |
285 | clocks = <&clks 17>; | ||
265 | }; | 286 | }; |
266 | 287 | ||
267 | i2c1: i2c@b00f0000 { | 288 | i2c1: i2c@b00f0000 { |
@@ -269,12 +290,14 @@ | |||
269 | compatible = "sirf,prima2-i2c"; | 290 | compatible = "sirf,prima2-i2c"; |
270 | reg = <0xb00f0000 0x10000>; | 291 | reg = <0xb00f0000 0x10000>; |
271 | interrupts = <25>; | 292 | interrupts = <25>; |
293 | clocks = <&clks 18>; | ||
272 | }; | 294 | }; |
273 | 295 | ||
274 | tsc@b0110000 { | 296 | tsc@b0110000 { |
275 | compatible = "sirf,prima2-tsc"; | 297 | compatible = "sirf,prima2-tsc"; |
276 | reg = <0xb0110000 0x10000>; | 298 | reg = <0xb0110000 0x10000>; |
277 | interrupts = <33>; | 299 | interrupts = <33>; |
300 | clocks = <&clks 16>; | ||
278 | }; | 301 | }; |
279 | 302 | ||
280 | gpio: pinctrl@b0120000 { | 303 | gpio: pinctrl@b0120000 { |
@@ -507,17 +530,20 @@ | |||
507 | pwm@b0130000 { | 530 | pwm@b0130000 { |
508 | compatible = "sirf,prima2-pwm"; | 531 | compatible = "sirf,prima2-pwm"; |
509 | reg = <0xb0130000 0x10000>; | 532 | reg = <0xb0130000 0x10000>; |
533 | clocks = <&clks 21>; | ||
510 | }; | 534 | }; |
511 | 535 | ||
512 | efusesys@b0140000 { | 536 | efusesys@b0140000 { |
513 | compatible = "sirf,prima2-efuse"; | 537 | compatible = "sirf,prima2-efuse"; |
514 | reg = <0xb0140000 0x10000>; | 538 | reg = <0xb0140000 0x10000>; |
539 | clocks = <&clks 22>; | ||
515 | }; | 540 | }; |
516 | 541 | ||
517 | pulsec@b0150000 { | 542 | pulsec@b0150000 { |
518 | compatible = "sirf,prima2-pulsec"; | 543 | compatible = "sirf,prima2-pulsec"; |
519 | reg = <0xb0150000 0x10000>; | 544 | reg = <0xb0150000 0x10000>; |
520 | interrupts = <48>; | 545 | interrupts = <48>; |
546 | clocks = <&clks 23>; | ||
521 | }; | 547 | }; |
522 | 548 | ||
523 | pci-iobg { | 549 | pci-iobg { |
@@ -616,12 +642,14 @@ | |||
616 | compatible = "chipidea,ci13611a-prima2"; | 642 | compatible = "chipidea,ci13611a-prima2"; |
617 | reg = <0xb8000000 0x10000>; | 643 | reg = <0xb8000000 0x10000>; |
618 | interrupts = <10>; | 644 | interrupts = <10>; |
645 | clocks = <&clks 40>; | ||
619 | }; | 646 | }; |
620 | 647 | ||
621 | usb1: usb@b00f0000 { | 648 | usb1: usb@b00f0000 { |
622 | compatible = "chipidea,ci13611a-prima2"; | 649 | compatible = "chipidea,ci13611a-prima2"; |
623 | reg = <0xb8010000 0x10000>; | 650 | reg = <0xb8010000 0x10000>; |
624 | interrupts = <11>; | 651 | interrupts = <11>; |
652 | clocks = <&clks 41>; | ||
625 | }; | 653 | }; |
626 | 654 | ||
627 | sata@b00f0000 { | 655 | sata@b00f0000 { |
@@ -634,6 +662,7 @@ | |||
634 | compatible = "sirf,prima2-security"; | 662 | compatible = "sirf,prima2-security"; |
635 | reg = <0xb8030000 0x10000>; | 663 | reg = <0xb8030000 0x10000>; |
636 | interrupts = <42>; | 664 | interrupts = <42>; |
665 | clocks = <&clks 7>; | ||
637 | }; | 666 | }; |
638 | }; | 667 | }; |
639 | }; | 668 | }; |
diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi index e61fdd47bd01..f99f60dadf5d 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi | |||
@@ -16,4 +16,34 @@ | |||
16 | memory { | 16 | memory { |
17 | reg = <0x40000000 0x80000000>; | 17 | reg = <0x40000000 0x80000000>; |
18 | }; | 18 | }; |
19 | |||
20 | soc { | ||
21 | pinctrl@01c20800 { | ||
22 | compatible = "allwinner,sun4i-a10-pinctrl"; | ||
23 | reg = <0x01c20800 0x400>; | ||
24 | #address-cells = <1>; | ||
25 | #size-cells = <0>; | ||
26 | |||
27 | uart0_pins_a: uart0@0 { | ||
28 | allwinner,pins = "PB22", "PB23"; | ||
29 | allwinner,function = "uart0"; | ||
30 | allwinner,drive = <0>; | ||
31 | allwinner,pull = <0>; | ||
32 | }; | ||
33 | |||
34 | uart0_pins_b: uart0@1 { | ||
35 | allwinner,pins = "PF2", "PF4"; | ||
36 | allwinner,function = "uart0"; | ||
37 | allwinner,drive = <0>; | ||
38 | allwinner,pull = <0>; | ||
39 | }; | ||
40 | |||
41 | uart1_pins_a: uart1@0 { | ||
42 | allwinner,pins = "PA10", "PA11"; | ||
43 | allwinner,function = "uart1"; | ||
44 | allwinner,drive = <0>; | ||
45 | allwinner,pull = <0>; | ||
46 | }; | ||
47 | }; | ||
48 | }; | ||
19 | }; | 49 | }; |
diff --git a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts index 498a091a4ea2..4a1e45d4aace 100644 --- a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts +++ b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts | |||
@@ -24,6 +24,8 @@ | |||
24 | 24 | ||
25 | soc { | 25 | soc { |
26 | uart1: uart@01c28400 { | 26 | uart1: uart@01c28400 { |
27 | pinctrl-names = "default"; | ||
28 | pinctrl-0 = <&uart1_pins_b>; | ||
27 | status = "okay"; | 29 | status = "okay"; |
28 | }; | 30 | }; |
29 | }; | 31 | }; |
diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi index 59a2d265a98e..e1121890fb29 100644 --- a/arch/arm/boot/dts/sun5i-a13.dtsi +++ b/arch/arm/boot/dts/sun5i-a13.dtsi | |||
@@ -17,4 +17,27 @@ | |||
17 | memory { | 17 | memory { |
18 | reg = <0x40000000 0x20000000>; | 18 | reg = <0x40000000 0x20000000>; |
19 | }; | 19 | }; |
20 | |||
21 | soc { | ||
22 | pinctrl@01c20800 { | ||
23 | compatible = "allwinner,sun5i-a13-pinctrl"; | ||
24 | reg = <0x01c20800 0x400>; | ||
25 | #address-cells = <1>; | ||
26 | #size-cells = <0>; | ||
27 | |||
28 | uart1_pins_a: uart1@0 { | ||
29 | allwinner,pins = "PE10", "PE11"; | ||
30 | allwinner,function = "uart1"; | ||
31 | allwinner,drive = <0>; | ||
32 | allwinner,pull = <0>; | ||
33 | }; | ||
34 | |||
35 | uart1_pins_b: uart1@1 { | ||
36 | allwinner,pins = "PG3", "PG4"; | ||
37 | allwinner,function = "uart1"; | ||
38 | allwinner,drive = <0>; | ||
39 | allwinner,pull = <0>; | ||
40 | }; | ||
41 | }; | ||
42 | }; | ||
20 | }; | 43 | }; |
diff --git a/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts b/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts index a3d37ec2655d..73187173117c 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts | |||
@@ -70,7 +70,7 @@ | |||
70 | compatible = "arm,sp805", "arm,primecell"; | 70 | compatible = "arm,sp805", "arm,primecell"; |
71 | status = "disabled"; | 71 | status = "disabled"; |
72 | reg = <0 0x2b060000 0 0x1000>; | 72 | reg = <0 0x2b060000 0 0x1000>; |
73 | interrupts = <98>; | 73 | interrupts = <0 98 4>; |
74 | clocks = <&oscclk7>; | 74 | clocks = <&oscclk7>; |
75 | clock-names = "apb_pclk"; | 75 | clock-names = "apb_pclk"; |
76 | }; | 76 | }; |
diff --git a/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts b/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts index cf8071ad22d5..dfe371ec2749 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts | |||
@@ -72,7 +72,7 @@ | |||
72 | wdt@2a490000 { | 72 | wdt@2a490000 { |
73 | compatible = "arm,sp805", "arm,primecell"; | 73 | compatible = "arm,sp805", "arm,primecell"; |
74 | reg = <0 0x2a490000 0 0x1000>; | 74 | reg = <0 0x2a490000 0 0x1000>; |
75 | interrupts = <98>; | 75 | interrupts = <0 98 4>; |
76 | clocks = <&oscclk6a>, <&oscclk6a>; | 76 | clocks = <&oscclk6a>, <&oscclk6a>; |
77 | clock-names = "wdogclk", "apb_pclk"; | 77 | clock-names = "wdogclk", "apb_pclk"; |
78 | }; | 78 | }; |
diff --git a/arch/arm/boot/dts/vt8500.dtsi b/arch/arm/boot/dts/vt8500.dtsi index d8645e990b21..cf31ced46602 100644 --- a/arch/arm/boot/dts/vt8500.dtsi +++ b/arch/arm/boot/dts/vt8500.dtsi | |||
@@ -45,6 +45,38 @@ | |||
45 | compatible = "fixed-clock"; | 45 | compatible = "fixed-clock"; |
46 | clock-frequency = <24000000>; | 46 | clock-frequency = <24000000>; |
47 | }; | 47 | }; |
48 | |||
49 | clkuart0: uart0 { | ||
50 | #clock-cells = <0>; | ||
51 | compatible = "via,vt8500-device-clock"; | ||
52 | clocks = <&ref24>; | ||
53 | enable-reg = <0x250>; | ||
54 | enable-bit = <1>; | ||
55 | }; | ||
56 | |||
57 | clkuart1: uart1 { | ||
58 | #clock-cells = <0>; | ||
59 | compatible = "via,vt8500-device-clock"; | ||
60 | clocks = <&ref24>; | ||
61 | enable-reg = <0x250>; | ||
62 | enable-bit = <2>; | ||
63 | }; | ||
64 | |||
65 | clkuart2: uart2 { | ||
66 | #clock-cells = <0>; | ||
67 | compatible = "via,vt8500-device-clock"; | ||
68 | clocks = <&ref24>; | ||
69 | enable-reg = <0x250>; | ||
70 | enable-bit = <3>; | ||
71 | }; | ||
72 | |||
73 | clkuart3: uart3 { | ||
74 | #clock-cells = <0>; | ||
75 | compatible = "via,vt8500-device-clock"; | ||
76 | clocks = <&ref24>; | ||
77 | enable-reg = <0x250>; | ||
78 | enable-bit = <4>; | ||
79 | }; | ||
48 | }; | 80 | }; |
49 | }; | 81 | }; |
50 | 82 | ||
@@ -83,28 +115,28 @@ | |||
83 | compatible = "via,vt8500-uart"; | 115 | compatible = "via,vt8500-uart"; |
84 | reg = <0xd8200000 0x1040>; | 116 | reg = <0xd8200000 0x1040>; |
85 | interrupts = <32>; | 117 | interrupts = <32>; |
86 | clocks = <&ref24>; | 118 | clocks = <&clkuart0>; |
87 | }; | 119 | }; |
88 | 120 | ||
89 | uart@d82b0000 { | 121 | uart@d82b0000 { |
90 | compatible = "via,vt8500-uart"; | 122 | compatible = "via,vt8500-uart"; |
91 | reg = <0xd82b0000 0x1040>; | 123 | reg = <0xd82b0000 0x1040>; |
92 | interrupts = <33>; | 124 | interrupts = <33>; |
93 | clocks = <&ref24>; | 125 | clocks = <&clkuart1>; |
94 | }; | 126 | }; |
95 | 127 | ||
96 | uart@d8210000 { | 128 | uart@d8210000 { |
97 | compatible = "via,vt8500-uart"; | 129 | compatible = "via,vt8500-uart"; |
98 | reg = <0xd8210000 0x1040>; | 130 | reg = <0xd8210000 0x1040>; |
99 | interrupts = <47>; | 131 | interrupts = <47>; |
100 | clocks = <&ref24>; | 132 | clocks = <&clkuart2>; |
101 | }; | 133 | }; |
102 | 134 | ||
103 | uart@d82c0000 { | 135 | uart@d82c0000 { |
104 | compatible = "via,vt8500-uart"; | 136 | compatible = "via,vt8500-uart"; |
105 | reg = <0xd82c0000 0x1040>; | 137 | reg = <0xd82c0000 0x1040>; |
106 | interrupts = <50>; | 138 | interrupts = <50>; |
107 | clocks = <&ref24>; | 139 | clocks = <&clkuart3>; |
108 | }; | 140 | }; |
109 | 141 | ||
110 | rtc@d8100000 { | 142 | rtc@d8100000 { |
diff --git a/arch/arm/boot/dts/wm8505.dtsi b/arch/arm/boot/dts/wm8505.dtsi index 330f833ac3b0..e74a1c0fb9a2 100644 --- a/arch/arm/boot/dts/wm8505.dtsi +++ b/arch/arm/boot/dts/wm8505.dtsi | |||
@@ -59,6 +59,54 @@ | |||
59 | compatible = "fixed-clock"; | 59 | compatible = "fixed-clock"; |
60 | clock-frequency = <24000000>; | 60 | clock-frequency = <24000000>; |
61 | }; | 61 | }; |
62 | |||
63 | clkuart0: uart0 { | ||
64 | #clock-cells = <0>; | ||
65 | compatible = "via,vt8500-device-clock"; | ||
66 | clocks = <&ref24>; | ||
67 | enable-reg = <0x250>; | ||
68 | enable-bit = <1>; | ||
69 | }; | ||
70 | |||
71 | clkuart1: uart1 { | ||
72 | #clock-cells = <0>; | ||
73 | compatible = "via,vt8500-device-clock"; | ||
74 | clocks = <&ref24>; | ||
75 | enable-reg = <0x250>; | ||
76 | enable-bit = <2>; | ||
77 | }; | ||
78 | |||
79 | clkuart2: uart2 { | ||
80 | #clock-cells = <0>; | ||
81 | compatible = "via,vt8500-device-clock"; | ||
82 | clocks = <&ref24>; | ||
83 | enable-reg = <0x250>; | ||
84 | enable-bit = <3>; | ||
85 | }; | ||
86 | |||
87 | clkuart3: uart3 { | ||
88 | #clock-cells = <0>; | ||
89 | compatible = "via,vt8500-device-clock"; | ||
90 | clocks = <&ref24>; | ||
91 | enable-reg = <0x250>; | ||
92 | enable-bit = <4>; | ||
93 | }; | ||
94 | |||
95 | clkuart4: uart4 { | ||
96 | #clock-cells = <0>; | ||
97 | compatible = "via,vt8500-device-clock"; | ||
98 | clocks = <&ref24>; | ||
99 | enable-reg = <0x250>; | ||
100 | enable-bit = <22>; | ||
101 | }; | ||
102 | |||
103 | clkuart5: uart5 { | ||
104 | #clock-cells = <0>; | ||
105 | compatible = "via,vt8500-device-clock"; | ||
106 | clocks = <&ref24>; | ||
107 | enable-reg = <0x250>; | ||
108 | enable-bit = <23>; | ||
109 | }; | ||
62 | }; | 110 | }; |
63 | }; | 111 | }; |
64 | 112 | ||
@@ -96,42 +144,42 @@ | |||
96 | compatible = "via,vt8500-uart"; | 144 | compatible = "via,vt8500-uart"; |
97 | reg = <0xd8200000 0x1040>; | 145 | reg = <0xd8200000 0x1040>; |
98 | interrupts = <32>; | 146 | interrupts = <32>; |
99 | clocks = <&ref24>; | 147 | clocks = <&clkuart0>; |
100 | }; | 148 | }; |
101 | 149 | ||
102 | uart@d82b0000 { | 150 | uart@d82b0000 { |
103 | compatible = "via,vt8500-uart"; | 151 | compatible = "via,vt8500-uart"; |
104 | reg = <0xd82b0000 0x1040>; | 152 | reg = <0xd82b0000 0x1040>; |
105 | interrupts = <33>; | 153 | interrupts = <33>; |
106 | clocks = <&ref24>; | 154 | clocks = <&clkuart1>; |
107 | }; | 155 | }; |
108 | 156 | ||
109 | uart@d8210000 { | 157 | uart@d8210000 { |
110 | compatible = "via,vt8500-uart"; | 158 | compatible = "via,vt8500-uart"; |
111 | reg = <0xd8210000 0x1040>; | 159 | reg = <0xd8210000 0x1040>; |
112 | interrupts = <47>; | 160 | interrupts = <47>; |
113 | clocks = <&ref24>; | 161 | clocks = <&clkuart2>; |
114 | }; | 162 | }; |
115 | 163 | ||
116 | uart@d82c0000 { | 164 | uart@d82c0000 { |
117 | compatible = "via,vt8500-uart"; | 165 | compatible = "via,vt8500-uart"; |
118 | reg = <0xd82c0000 0x1040>; | 166 | reg = <0xd82c0000 0x1040>; |
119 | interrupts = <50>; | 167 | interrupts = <50>; |
120 | clocks = <&ref24>; | 168 | clocks = <&clkuart3>; |
121 | }; | 169 | }; |
122 | 170 | ||
123 | uart@d8370000 { | 171 | uart@d8370000 { |
124 | compatible = "via,vt8500-uart"; | 172 | compatible = "via,vt8500-uart"; |
125 | reg = <0xd8370000 0x1040>; | 173 | reg = <0xd8370000 0x1040>; |
126 | interrupts = <31>; | 174 | interrupts = <31>; |
127 | clocks = <&ref24>; | 175 | clocks = <&clkuart4>; |
128 | }; | 176 | }; |
129 | 177 | ||
130 | uart@d8380000 { | 178 | uart@d8380000 { |
131 | compatible = "via,vt8500-uart"; | 179 | compatible = "via,vt8500-uart"; |
132 | reg = <0xd8380000 0x1040>; | 180 | reg = <0xd8380000 0x1040>; |
133 | interrupts = <30>; | 181 | interrupts = <30>; |
134 | clocks = <&ref24>; | 182 | clocks = <&clkuart5>; |
135 | }; | 183 | }; |
136 | 184 | ||
137 | rtc@d8100000 { | 185 | rtc@d8100000 { |
diff --git a/arch/arm/boot/dts/wm8650.dtsi b/arch/arm/boot/dts/wm8650.dtsi index 83b9467559bb..db3c0a12e052 100644 --- a/arch/arm/boot/dts/wm8650.dtsi +++ b/arch/arm/boot/dts/wm8650.dtsi | |||
@@ -75,6 +75,22 @@ | |||
75 | reg = <0x204>; | 75 | reg = <0x204>; |
76 | }; | 76 | }; |
77 | 77 | ||
78 | clkuart0: uart0 { | ||
79 | #clock-cells = <0>; | ||
80 | compatible = "via,vt8500-device-clock"; | ||
81 | clocks = <&ref24>; | ||
82 | enable-reg = <0x250>; | ||
83 | enable-bit = <1>; | ||
84 | }; | ||
85 | |||
86 | clkuart1: uart1 { | ||
87 | #clock-cells = <0>; | ||
88 | compatible = "via,vt8500-device-clock"; | ||
89 | clocks = <&ref24>; | ||
90 | enable-reg = <0x250>; | ||
91 | enable-bit = <2>; | ||
92 | }; | ||
93 | |||
78 | arm: arm { | 94 | arm: arm { |
79 | #clock-cells = <0>; | 95 | #clock-cells = <0>; |
80 | compatible = "via,vt8500-device-clock"; | 96 | compatible = "via,vt8500-device-clock"; |
@@ -128,14 +144,14 @@ | |||
128 | compatible = "via,vt8500-uart"; | 144 | compatible = "via,vt8500-uart"; |
129 | reg = <0xd8200000 0x1040>; | 145 | reg = <0xd8200000 0x1040>; |
130 | interrupts = <32>; | 146 | interrupts = <32>; |
131 | clocks = <&ref24>; | 147 | clocks = <&clkuart0>; |
132 | }; | 148 | }; |
133 | 149 | ||
134 | uart@d82b0000 { | 150 | uart@d82b0000 { |
135 | compatible = "via,vt8500-uart"; | 151 | compatible = "via,vt8500-uart"; |
136 | reg = <0xd82b0000 0x1040>; | 152 | reg = <0xd82b0000 0x1040>; |
137 | interrupts = <33>; | 153 | interrupts = <33>; |
138 | clocks = <&ref24>; | 154 | clocks = <&clkuart1>; |
139 | }; | 155 | }; |
140 | 156 | ||
141 | rtc@d8100000 { | 157 | rtc@d8100000 { |
diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi index 401c1262d4ed..5914b5654591 100644 --- a/arch/arm/boot/dts/zynq-7000.dtsi +++ b/arch/arm/boot/dts/zynq-7000.dtsi | |||
@@ -44,14 +44,14 @@ | |||
44 | compatible = "xlnx,xuartps"; | 44 | compatible = "xlnx,xuartps"; |
45 | reg = <0xE0000000 0x1000>; | 45 | reg = <0xE0000000 0x1000>; |
46 | interrupts = <0 27 4>; | 46 | interrupts = <0 27 4>; |
47 | clock = <50000000>; | 47 | clocks = <&uart_clk 0>; |
48 | }; | 48 | }; |
49 | 49 | ||
50 | uart1: uart@e0001000 { | 50 | uart1: uart@e0001000 { |
51 | compatible = "xlnx,xuartps"; | 51 | compatible = "xlnx,xuartps"; |
52 | reg = <0xE0001000 0x1000>; | 52 | reg = <0xE0001000 0x1000>; |
53 | interrupts = <0 50 4>; | 53 | interrupts = <0 50 4>; |
54 | clock = <50000000>; | 54 | clocks = <&uart_clk 1>; |
55 | }; | 55 | }; |
56 | 56 | ||
57 | slcr: slcr@f8000000 { | 57 | slcr: slcr@f8000000 { |
diff --git a/arch/arm/configs/at91sam9263_defconfig b/arch/arm/configs/at91sam9263_defconfig index c5212f43eee6..36fed66bd4b5 100644 --- a/arch/arm/configs/at91sam9263_defconfig +++ b/arch/arm/configs/at91sam9263_defconfig | |||
@@ -18,7 +18,6 @@ CONFIG_ARCH_AT91=y | |||
18 | CONFIG_ARCH_AT91SAM9263=y | 18 | CONFIG_ARCH_AT91SAM9263=y |
19 | CONFIG_MACH_AT91SAM9263EK=y | 19 | CONFIG_MACH_AT91SAM9263EK=y |
20 | CONFIG_MACH_USB_A9263=y | 20 | CONFIG_MACH_USB_A9263=y |
21 | CONFIG_MACH_NEOCORE926=y | ||
22 | CONFIG_MTD_AT91_DATAFLASH_CARD=y | 21 | CONFIG_MTD_AT91_DATAFLASH_CARD=y |
23 | # CONFIG_ARM_THUMB is not set | 22 | # CONFIG_ARM_THUMB is not set |
24 | CONFIG_AEABI=y | 23 | CONFIG_AEABI=y |
diff --git a/arch/arm/configs/marzen_defconfig b/arch/arm/configs/marzen_defconfig index 728a43c446f8..afb17d630d44 100644 --- a/arch/arm/configs/marzen_defconfig +++ b/arch/arm/configs/marzen_defconfig | |||
@@ -83,7 +83,6 @@ CONFIG_USB=y | |||
83 | CONFIG_USB_RCAR_PHY=y | 83 | CONFIG_USB_RCAR_PHY=y |
84 | CONFIG_MMC=y | 84 | CONFIG_MMC=y |
85 | CONFIG_MMC_SDHI=y | 85 | CONFIG_MMC_SDHI=y |
86 | CONFIG_USB=y | ||
87 | CONFIG_USB_EHCI_HCD=y | 86 | CONFIG_USB_EHCI_HCD=y |
88 | CONFIG_USB_OHCI_HCD=y | 87 | CONFIG_USB_OHCI_HCD=y |
89 | CONFIG_USB_OHCI_HCD_PLATFORM=y | 88 | CONFIG_USB_OHCI_HCD_PLATFORM=y |
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig index 2eeff1e64b6e..e31d442343c8 100644 --- a/arch/arm/configs/multi_v7_defconfig +++ b/arch/arm/configs/multi_v7_defconfig | |||
@@ -8,6 +8,7 @@ CONFIG_ARCH_HIGHBANK=y | |||
8 | CONFIG_ARCH_SOCFPGA=y | 8 | CONFIG_ARCH_SOCFPGA=y |
9 | CONFIG_ARCH_SUNXI=y | 9 | CONFIG_ARCH_SUNXI=y |
10 | # CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA is not set | 10 | # CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA is not set |
11 | CONFIG_ARCH_ZYNQ=y | ||
11 | CONFIG_ARM_ERRATA_754322=y | 12 | CONFIG_ARM_ERRATA_754322=y |
12 | CONFIG_SMP=y | 13 | CONFIG_SMP=y |
13 | CONFIG_ARM_ARCH_TIMER=y | 14 | CONFIG_ARM_ARCH_TIMER=y |
@@ -39,7 +40,6 @@ CONFIG_I2C=y | |||
39 | CONFIG_I2C_DESIGNWARE_PLATFORM=y | 40 | CONFIG_I2C_DESIGNWARE_PLATFORM=y |
40 | CONFIG_SPI=y | 41 | CONFIG_SPI=y |
41 | CONFIG_SPI_PL022=y | 42 | CONFIG_SPI_PL022=y |
42 | CONFIG_GPIOLIB=y | ||
43 | CONFIG_FB=y | 43 | CONFIG_FB=y |
44 | CONFIG_FB_ARMCLCD=y | 44 | CONFIG_FB_ARMCLCD=y |
45 | CONFIG_FRAMEBUFFER_CONSOLE=y | 45 | CONFIG_FRAMEBUFFER_CONSOLE=y |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index 82ce8d738fa1..5be2e4be802c 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
@@ -20,9 +20,10 @@ CONFIG_MODULE_FORCE_UNLOAD=y | |||
20 | CONFIG_MODVERSIONS=y | 20 | CONFIG_MODVERSIONS=y |
21 | CONFIG_MODULE_SRCVERSION_ALL=y | 21 | CONFIG_MODULE_SRCVERSION_ALL=y |
22 | # CONFIG_BLK_DEV_BSG is not set | 22 | # CONFIG_BLK_DEV_BSG is not set |
23 | CONFIG_ARCH_OMAP=y | 23 | CONFIG_ARCH_OMAP2PLUS=y |
24 | CONFIG_OMAP_RESET_CLOCKS=y | 24 | CONFIG_OMAP_RESET_CLOCKS=y |
25 | CONFIG_OMAP_MUX_DEBUG=y | 25 | CONFIG_OMAP_MUX_DEBUG=y |
26 | CONFIG_ARCH_VEXPRESS_CA9X4=y | ||
26 | CONFIG_ARM_THUMBEE=y | 27 | CONFIG_ARM_THUMBEE=y |
27 | CONFIG_ARM_ERRATA_411920=y | 28 | CONFIG_ARM_ERRATA_411920=y |
28 | CONFIG_NO_HZ=y | 29 | CONFIG_NO_HZ=y |
@@ -121,6 +122,8 @@ CONFIG_SERIAL_8250_MANY_PORTS=y | |||
121 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 122 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
122 | CONFIG_SERIAL_8250_DETECT_IRQ=y | 123 | CONFIG_SERIAL_8250_DETECT_IRQ=y |
123 | CONFIG_SERIAL_8250_RSA=y | 124 | CONFIG_SERIAL_8250_RSA=y |
125 | CONFIG_SERIAL_AMBA_PL011=y | ||
126 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | ||
124 | CONFIG_HW_RANDOM=y | 127 | CONFIG_HW_RANDOM=y |
125 | CONFIG_I2C_CHARDEV=y | 128 | CONFIG_I2C_CHARDEV=y |
126 | CONFIG_SPI=y | 129 | CONFIG_SPI=y |
@@ -194,6 +197,7 @@ CONFIG_USB_ZERO=m | |||
194 | CONFIG_MMC=y | 197 | CONFIG_MMC=y |
195 | CONFIG_MMC_UNSAFE_RESUME=y | 198 | CONFIG_MMC_UNSAFE_RESUME=y |
196 | CONFIG_SDIO_UART=y | 199 | CONFIG_SDIO_UART=y |
200 | CONFIG_MMC_ARMMMCI=y | ||
197 | CONFIG_MMC_OMAP=y | 201 | CONFIG_MMC_OMAP=y |
198 | CONFIG_MMC_OMAP_HS=y | 202 | CONFIG_MMC_OMAP_HS=y |
199 | CONFIG_RTC_CLASS=y | 203 | CONFIG_RTC_CLASS=y |
diff --git a/arch/arm/configs/shark_defconfig b/arch/arm/configs/shark_defconfig index caa07db90cf5..e319b2c56f11 100644 --- a/arch/arm/configs/shark_defconfig +++ b/arch/arm/configs/shark_defconfig | |||
@@ -73,7 +73,6 @@ CONFIG_PARTITION_ADVANCED=y | |||
73 | CONFIG_NLS_CODEPAGE_437=m | 73 | CONFIG_NLS_CODEPAGE_437=m |
74 | CONFIG_NLS_CODEPAGE_850=m | 74 | CONFIG_NLS_CODEPAGE_850=m |
75 | CONFIG_NLS_ISO8859_1=m | 75 | CONFIG_NLS_ISO8859_1=m |
76 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||
77 | # CONFIG_ENABLE_MUST_CHECK is not set | 76 | # CONFIG_ENABLE_MUST_CHECK is not set |
78 | CONFIG_DEBUG_KERNEL=y | 77 | CONFIG_DEBUG_KERNEL=y |
79 | # CONFIG_SCHED_DEBUG is not set | 78 | # CONFIG_SCHED_DEBUG is not set |
diff --git a/arch/arm/configs/u8500_defconfig b/arch/arm/configs/u8500_defconfig index 231dca604737..426270fe080d 100644 --- a/arch/arm/configs/u8500_defconfig +++ b/arch/arm/configs/u8500_defconfig | |||
@@ -66,9 +66,9 @@ CONFIG_SPI=y | |||
66 | CONFIG_SPI_PL022=y | 66 | CONFIG_SPI_PL022=y |
67 | CONFIG_GPIO_STMPE=y | 67 | CONFIG_GPIO_STMPE=y |
68 | CONFIG_GPIO_TC3589X=y | 68 | CONFIG_GPIO_TC3589X=y |
69 | CONFIG_POWER_SUPPLY=y | 69 | # CONFIG_POWER_SUPPLY is not set |
70 | CONFIG_AB8500_BM=y | 70 | # CONFIG_AB8500_BM is not set |
71 | CONFIG_AB8500_BATTERY_THERM_ON_BATCTRL=y | 71 | # CONFIG_AB8500_BATTERY_THERM_ON_BATCTRL is not set |
72 | CONFIG_THERMAL=y | 72 | CONFIG_THERMAL=y |
73 | CONFIG_CPU_THERMAL=y | 73 | CONFIG_CPU_THERMAL=y |
74 | CONFIG_MFD_STMPE=y | 74 | CONFIG_MFD_STMPE=y |
diff --git a/arch/arm/crypto/aes-armv4.S b/arch/arm/crypto/aes-armv4.S index e59b1d505d6c..19d6cd6f29f9 100644 --- a/arch/arm/crypto/aes-armv4.S +++ b/arch/arm/crypto/aes-armv4.S | |||
@@ -34,8 +34,9 @@ | |||
34 | @ A little glue here to select the correct code below for the ARM CPU | 34 | @ A little glue here to select the correct code below for the ARM CPU |
35 | @ that is being targetted. | 35 | @ that is being targetted. |
36 | 36 | ||
37 | #include <linux/linkage.h> | ||
38 | |||
37 | .text | 39 | .text |
38 | .code 32 | ||
39 | 40 | ||
40 | .type AES_Te,%object | 41 | .type AES_Te,%object |
41 | .align 5 | 42 | .align 5 |
@@ -145,10 +146,8 @@ AES_Te: | |||
145 | 146 | ||
146 | @ void AES_encrypt(const unsigned char *in, unsigned char *out, | 147 | @ void AES_encrypt(const unsigned char *in, unsigned char *out, |
147 | @ const AES_KEY *key) { | 148 | @ const AES_KEY *key) { |
148 | .global AES_encrypt | ||
149 | .type AES_encrypt,%function | ||
150 | .align 5 | 149 | .align 5 |
151 | AES_encrypt: | 150 | ENTRY(AES_encrypt) |
152 | sub r3,pc,#8 @ AES_encrypt | 151 | sub r3,pc,#8 @ AES_encrypt |
153 | stmdb sp!,{r1,r4-r12,lr} | 152 | stmdb sp!,{r1,r4-r12,lr} |
154 | mov r12,r0 @ inp | 153 | mov r12,r0 @ inp |
@@ -239,15 +238,8 @@ AES_encrypt: | |||
239 | strb r6,[r12,#14] | 238 | strb r6,[r12,#14] |
240 | strb r3,[r12,#15] | 239 | strb r3,[r12,#15] |
241 | #endif | 240 | #endif |
242 | #if __ARM_ARCH__>=5 | ||
243 | ldmia sp!,{r4-r12,pc} | 241 | ldmia sp!,{r4-r12,pc} |
244 | #else | 242 | ENDPROC(AES_encrypt) |
245 | ldmia sp!,{r4-r12,lr} | ||
246 | tst lr,#1 | ||
247 | moveq pc,lr @ be binary compatible with V4, yet | ||
248 | .word 0xe12fff1e @ interoperable with Thumb ISA:-) | ||
249 | #endif | ||
250 | .size AES_encrypt,.-AES_encrypt | ||
251 | 243 | ||
252 | .type _armv4_AES_encrypt,%function | 244 | .type _armv4_AES_encrypt,%function |
253 | .align 2 | 245 | .align 2 |
@@ -386,10 +378,8 @@ _armv4_AES_encrypt: | |||
386 | ldr pc,[sp],#4 @ pop and return | 378 | ldr pc,[sp],#4 @ pop and return |
387 | .size _armv4_AES_encrypt,.-_armv4_AES_encrypt | 379 | .size _armv4_AES_encrypt,.-_armv4_AES_encrypt |
388 | 380 | ||
389 | .global private_AES_set_encrypt_key | ||
390 | .type private_AES_set_encrypt_key,%function | ||
391 | .align 5 | 381 | .align 5 |
392 | private_AES_set_encrypt_key: | 382 | ENTRY(private_AES_set_encrypt_key) |
393 | _armv4_AES_set_encrypt_key: | 383 | _armv4_AES_set_encrypt_key: |
394 | sub r3,pc,#8 @ AES_set_encrypt_key | 384 | sub r3,pc,#8 @ AES_set_encrypt_key |
395 | teq r0,#0 | 385 | teq r0,#0 |
@@ -658,15 +648,11 @@ _armv4_AES_set_encrypt_key: | |||
658 | 648 | ||
659 | .Ldone: mov r0,#0 | 649 | .Ldone: mov r0,#0 |
660 | ldmia sp!,{r4-r12,lr} | 650 | ldmia sp!,{r4-r12,lr} |
661 | .Labrt: tst lr,#1 | 651 | .Labrt: mov pc,lr |
662 | moveq pc,lr @ be binary compatible with V4, yet | 652 | ENDPROC(private_AES_set_encrypt_key) |
663 | .word 0xe12fff1e @ interoperable with Thumb ISA:-) | ||
664 | .size private_AES_set_encrypt_key,.-private_AES_set_encrypt_key | ||
665 | 653 | ||
666 | .global private_AES_set_decrypt_key | ||
667 | .type private_AES_set_decrypt_key,%function | ||
668 | .align 5 | 654 | .align 5 |
669 | private_AES_set_decrypt_key: | 655 | ENTRY(private_AES_set_decrypt_key) |
670 | str lr,[sp,#-4]! @ push lr | 656 | str lr,[sp,#-4]! @ push lr |
671 | #if 0 | 657 | #if 0 |
672 | @ kernel does both of these in setkey so optimise this bit out by | 658 | @ kernel does both of these in setkey so optimise this bit out by |
@@ -748,15 +734,8 @@ private_AES_set_decrypt_key: | |||
748 | bne .Lmix | 734 | bne .Lmix |
749 | 735 | ||
750 | mov r0,#0 | 736 | mov r0,#0 |
751 | #if __ARM_ARCH__>=5 | ||
752 | ldmia sp!,{r4-r12,pc} | 737 | ldmia sp!,{r4-r12,pc} |
753 | #else | 738 | ENDPROC(private_AES_set_decrypt_key) |
754 | ldmia sp!,{r4-r12,lr} | ||
755 | tst lr,#1 | ||
756 | moveq pc,lr @ be binary compatible with V4, yet | ||
757 | .word 0xe12fff1e @ interoperable with Thumb ISA:-) | ||
758 | #endif | ||
759 | .size private_AES_set_decrypt_key,.-private_AES_set_decrypt_key | ||
760 | 739 | ||
761 | .type AES_Td,%object | 740 | .type AES_Td,%object |
762 | .align 5 | 741 | .align 5 |
@@ -862,10 +841,8 @@ AES_Td: | |||
862 | 841 | ||
863 | @ void AES_decrypt(const unsigned char *in, unsigned char *out, | 842 | @ void AES_decrypt(const unsigned char *in, unsigned char *out, |
864 | @ const AES_KEY *key) { | 843 | @ const AES_KEY *key) { |
865 | .global AES_decrypt | ||
866 | .type AES_decrypt,%function | ||
867 | .align 5 | 844 | .align 5 |
868 | AES_decrypt: | 845 | ENTRY(AES_decrypt) |
869 | sub r3,pc,#8 @ AES_decrypt | 846 | sub r3,pc,#8 @ AES_decrypt |
870 | stmdb sp!,{r1,r4-r12,lr} | 847 | stmdb sp!,{r1,r4-r12,lr} |
871 | mov r12,r0 @ inp | 848 | mov r12,r0 @ inp |
@@ -956,15 +933,8 @@ AES_decrypt: | |||
956 | strb r6,[r12,#14] | 933 | strb r6,[r12,#14] |
957 | strb r3,[r12,#15] | 934 | strb r3,[r12,#15] |
958 | #endif | 935 | #endif |
959 | #if __ARM_ARCH__>=5 | ||
960 | ldmia sp!,{r4-r12,pc} | 936 | ldmia sp!,{r4-r12,pc} |
961 | #else | 937 | ENDPROC(AES_decrypt) |
962 | ldmia sp!,{r4-r12,lr} | ||
963 | tst lr,#1 | ||
964 | moveq pc,lr @ be binary compatible with V4, yet | ||
965 | .word 0xe12fff1e @ interoperable with Thumb ISA:-) | ||
966 | #endif | ||
967 | .size AES_decrypt,.-AES_decrypt | ||
968 | 938 | ||
969 | .type _armv4_AES_decrypt,%function | 939 | .type _armv4_AES_decrypt,%function |
970 | .align 2 | 940 | .align 2 |
@@ -1064,7 +1034,9 @@ _armv4_AES_decrypt: | |||
1064 | and r9,lr,r1,lsr#8 | 1034 | and r9,lr,r1,lsr#8 |
1065 | 1035 | ||
1066 | ldrb r7,[r10,r7] @ Td4[s1>>0] | 1036 | ldrb r7,[r10,r7] @ Td4[s1>>0] |
1067 | ldrb r1,[r10,r1,lsr#24] @ Td4[s1>>24] | 1037 | ARM( ldrb r1,[r10,r1,lsr#24] ) @ Td4[s1>>24] |
1038 | THUMB( add r1,r10,r1,lsr#24 ) @ Td4[s1>>24] | ||
1039 | THUMB( ldrb r1,[r1] ) | ||
1068 | ldrb r8,[r10,r8] @ Td4[s1>>16] | 1040 | ldrb r8,[r10,r8] @ Td4[s1>>16] |
1069 | eor r0,r7,r0,lsl#24 | 1041 | eor r0,r7,r0,lsl#24 |
1070 | ldrb r9,[r10,r9] @ Td4[s1>>8] | 1042 | ldrb r9,[r10,r9] @ Td4[s1>>8] |
@@ -1077,7 +1049,9 @@ _armv4_AES_decrypt: | |||
1077 | ldrb r8,[r10,r8] @ Td4[s2>>0] | 1049 | ldrb r8,[r10,r8] @ Td4[s2>>0] |
1078 | and r9,lr,r2,lsr#16 | 1050 | and r9,lr,r2,lsr#16 |
1079 | 1051 | ||
1080 | ldrb r2,[r10,r2,lsr#24] @ Td4[s2>>24] | 1052 | ARM( ldrb r2,[r10,r2,lsr#24] ) @ Td4[s2>>24] |
1053 | THUMB( add r2,r10,r2,lsr#24 ) @ Td4[s2>>24] | ||
1054 | THUMB( ldrb r2,[r2] ) | ||
1081 | eor r0,r0,r7,lsl#8 | 1055 | eor r0,r0,r7,lsl#8 |
1082 | ldrb r9,[r10,r9] @ Td4[s2>>16] | 1056 | ldrb r9,[r10,r9] @ Td4[s2>>16] |
1083 | eor r1,r8,r1,lsl#16 | 1057 | eor r1,r8,r1,lsl#16 |
@@ -1090,7 +1064,9 @@ _armv4_AES_decrypt: | |||
1090 | and r9,lr,r3 @ i2 | 1064 | and r9,lr,r3 @ i2 |
1091 | 1065 | ||
1092 | ldrb r9,[r10,r9] @ Td4[s3>>0] | 1066 | ldrb r9,[r10,r9] @ Td4[s3>>0] |
1093 | ldrb r3,[r10,r3,lsr#24] @ Td4[s3>>24] | 1067 | ARM( ldrb r3,[r10,r3,lsr#24] ) @ Td4[s3>>24] |
1068 | THUMB( add r3,r10,r3,lsr#24 ) @ Td4[s3>>24] | ||
1069 | THUMB( ldrb r3,[r3] ) | ||
1094 | eor r0,r0,r7,lsl#16 | 1070 | eor r0,r0,r7,lsl#16 |
1095 | ldr r7,[r11,#0] | 1071 | ldr r7,[r11,#0] |
1096 | eor r1,r1,r8,lsl#8 | 1072 | eor r1,r1,r8,lsl#8 |
diff --git a/arch/arm/crypto/sha1-armv4-large.S b/arch/arm/crypto/sha1-armv4-large.S index 7050ab133b9d..92c6eed7aac9 100644 --- a/arch/arm/crypto/sha1-armv4-large.S +++ b/arch/arm/crypto/sha1-armv4-large.S | |||
@@ -51,13 +51,12 @@ | |||
51 | @ Profiler-assisted and platform-specific optimization resulted in 10% | 51 | @ Profiler-assisted and platform-specific optimization resulted in 10% |
52 | @ improvement on Cortex A8 core and 12.2 cycles per byte. | 52 | @ improvement on Cortex A8 core and 12.2 cycles per byte. |
53 | 53 | ||
54 | .text | 54 | #include <linux/linkage.h> |
55 | 55 | ||
56 | .global sha1_block_data_order | 56 | .text |
57 | .type sha1_block_data_order,%function | ||
58 | 57 | ||
59 | .align 2 | 58 | .align 2 |
60 | sha1_block_data_order: | 59 | ENTRY(sha1_block_data_order) |
61 | stmdb sp!,{r4-r12,lr} | 60 | stmdb sp!,{r4-r12,lr} |
62 | add r2,r1,r2,lsl#6 @ r2 to point at the end of r1 | 61 | add r2,r1,r2,lsl#6 @ r2 to point at the end of r1 |
63 | ldmia r0,{r3,r4,r5,r6,r7} | 62 | ldmia r0,{r3,r4,r5,r6,r7} |
@@ -194,7 +193,7 @@ sha1_block_data_order: | |||
194 | eor r10,r10,r7,ror#2 @ F_00_19(B,C,D) | 193 | eor r10,r10,r7,ror#2 @ F_00_19(B,C,D) |
195 | str r9,[r14,#-4]! | 194 | str r9,[r14,#-4]! |
196 | add r3,r3,r10 @ E+=F_00_19(B,C,D) | 195 | add r3,r3,r10 @ E+=F_00_19(B,C,D) |
197 | teq r14,sp | 196 | cmp r14,sp |
198 | bne .L_00_15 @ [((11+4)*5+2)*3] | 197 | bne .L_00_15 @ [((11+4)*5+2)*3] |
199 | #if __ARM_ARCH__<7 | 198 | #if __ARM_ARCH__<7 |
200 | ldrb r10,[r1,#2] | 199 | ldrb r10,[r1,#2] |
@@ -374,7 +373,9 @@ sha1_block_data_order: | |||
374 | @ F_xx_xx | 373 | @ F_xx_xx |
375 | add r3,r3,r9 @ E+=X[i] | 374 | add r3,r3,r9 @ E+=X[i] |
376 | add r3,r3,r10 @ E+=F_20_39(B,C,D) | 375 | add r3,r3,r10 @ E+=F_20_39(B,C,D) |
377 | teq r14,sp @ preserve carry | 376 | ARM( teq r14,sp ) @ preserve carry |
377 | THUMB( mov r11,sp ) | ||
378 | THUMB( teq r14,r11 ) @ preserve carry | ||
378 | bne .L_20_39_or_60_79 @ [+((12+3)*5+2)*4] | 379 | bne .L_20_39_or_60_79 @ [+((12+3)*5+2)*4] |
379 | bcs .L_done @ [+((12+3)*5+2)*4], spare 300 bytes | 380 | bcs .L_done @ [+((12+3)*5+2)*4], spare 300 bytes |
380 | 381 | ||
@@ -466,7 +467,7 @@ sha1_block_data_order: | |||
466 | add r3,r3,r9 @ E+=X[i] | 467 | add r3,r3,r9 @ E+=X[i] |
467 | add r3,r3,r10 @ E+=F_40_59(B,C,D) | 468 | add r3,r3,r10 @ E+=F_40_59(B,C,D) |
468 | add r3,r3,r11,ror#2 | 469 | add r3,r3,r11,ror#2 |
469 | teq r14,sp | 470 | cmp r14,sp |
470 | bne .L_40_59 @ [+((12+5)*5+2)*4] | 471 | bne .L_40_59 @ [+((12+5)*5+2)*4] |
471 | 472 | ||
472 | ldr r8,.LK_60_79 | 473 | ldr r8,.LK_60_79 |
@@ -485,19 +486,12 @@ sha1_block_data_order: | |||
485 | teq r1,r2 | 486 | teq r1,r2 |
486 | bne .Lloop @ [+18], total 1307 | 487 | bne .Lloop @ [+18], total 1307 |
487 | 488 | ||
488 | #if __ARM_ARCH__>=5 | ||
489 | ldmia sp!,{r4-r12,pc} | 489 | ldmia sp!,{r4-r12,pc} |
490 | #else | ||
491 | ldmia sp!,{r4-r12,lr} | ||
492 | tst lr,#1 | ||
493 | moveq pc,lr @ be binary compatible with V4, yet | ||
494 | .word 0xe12fff1e @ interoperable with Thumb ISA:-) | ||
495 | #endif | ||
496 | .align 2 | 490 | .align 2 |
497 | .LK_00_19: .word 0x5a827999 | 491 | .LK_00_19: .word 0x5a827999 |
498 | .LK_20_39: .word 0x6ed9eba1 | 492 | .LK_20_39: .word 0x6ed9eba1 |
499 | .LK_40_59: .word 0x8f1bbcdc | 493 | .LK_40_59: .word 0x8f1bbcdc |
500 | .LK_60_79: .word 0xca62c1d6 | 494 | .LK_60_79: .word 0xca62c1d6 |
501 | .size sha1_block_data_order,.-sha1_block_data_order | 495 | ENDPROC(sha1_block_data_order) |
502 | .asciz "SHA1 block transform for ARMv4, CRYPTOGAMS by <appro@openssl.org>" | 496 | .asciz "SHA1 block transform for ARMv4, CRYPTOGAMS by <appro@openssl.org>" |
503 | .align 2 | 497 | .align 2 |
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index eb87200aa4b5..05ee9eebad6b 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h | |||
@@ -246,18 +246,14 @@ | |||
246 | * | 246 | * |
247 | * This macro is intended for forcing the CPU into SVC mode at boot time. | 247 | * This macro is intended for forcing the CPU into SVC mode at boot time. |
248 | * you cannot return to the original mode. | 248 | * you cannot return to the original mode. |
249 | * | ||
250 | * Beware, it also clobers LR. | ||
251 | */ | 249 | */ |
252 | .macro safe_svcmode_maskall reg:req | 250 | .macro safe_svcmode_maskall reg:req |
253 | #if __LINUX_ARM_ARCH__ >= 6 | 251 | #if __LINUX_ARM_ARCH__ >= 6 |
254 | mrs \reg , cpsr | 252 | mrs \reg , cpsr |
255 | mov lr , \reg | 253 | eor \reg, \reg, #HYP_MODE |
256 | and lr , lr , #MODE_MASK | 254 | tst \reg, #MODE_MASK |
257 | cmp lr , #HYP_MODE | ||
258 | orr \reg , \reg , #PSR_I_BIT | PSR_F_BIT | ||
259 | bic \reg , \reg , #MODE_MASK | 255 | bic \reg , \reg , #MODE_MASK |
260 | orr \reg , \reg , #SVC_MODE | 256 | orr \reg , \reg , #PSR_I_BIT | PSR_F_BIT | SVC_MODE |
261 | THUMB( orr \reg , \reg , #PSR_T_BIT ) | 257 | THUMB( orr \reg , \reg , #PSR_T_BIT ) |
262 | bne 1f | 258 | bne 1f |
263 | orr \reg, \reg, #PSR_A_BIT | 259 | orr \reg, \reg, #PSR_A_BIT |
diff --git a/arch/arm/include/asm/cti.h b/arch/arm/include/asm/cti.h index f2e5cad3f306..2381199acb7d 100644 --- a/arch/arm/include/asm/cti.h +++ b/arch/arm/include/asm/cti.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define __ASMARM_CTI_H | 2 | #define __ASMARM_CTI_H |
3 | 3 | ||
4 | #include <asm/io.h> | 4 | #include <asm/io.h> |
5 | #include <asm/hardware/coresight.h> | ||
5 | 6 | ||
6 | /* The registers' definition is from section 3.2 of | 7 | /* The registers' definition is from section 3.2 of |
7 | * Embedded Cross Trigger Revision: r0p0 | 8 | * Embedded Cross Trigger Revision: r0p0 |
@@ -35,11 +36,6 @@ | |||
35 | #define LOCKACCESS 0xFB0 | 36 | #define LOCKACCESS 0xFB0 |
36 | #define LOCKSTATUS 0xFB4 | 37 | #define LOCKSTATUS 0xFB4 |
37 | 38 | ||
38 | /* write this value to LOCKACCESS will unlock the module, and | ||
39 | * other value will lock the module | ||
40 | */ | ||
41 | #define LOCKCODE 0xC5ACCE55 | ||
42 | |||
43 | /** | 39 | /** |
44 | * struct cti - cross trigger interface struct | 40 | * struct cti - cross trigger interface struct |
45 | * @base: mapped virtual address for the cti base | 41 | * @base: mapped virtual address for the cti base |
@@ -146,7 +142,7 @@ static inline void cti_irq_ack(struct cti *cti) | |||
146 | */ | 142 | */ |
147 | static inline void cti_unlock(struct cti *cti) | 143 | static inline void cti_unlock(struct cti *cti) |
148 | { | 144 | { |
149 | __raw_writel(LOCKCODE, cti->base + LOCKACCESS); | 145 | __raw_writel(CS_LAR_KEY, cti->base + LOCKACCESS); |
150 | } | 146 | } |
151 | 147 | ||
152 | /** | 148 | /** |
@@ -158,6 +154,6 @@ static inline void cti_unlock(struct cti *cti) | |||
158 | */ | 154 | */ |
159 | static inline void cti_lock(struct cti *cti) | 155 | static inline void cti_lock(struct cti *cti) |
160 | { | 156 | { |
161 | __raw_writel(~LOCKCODE, cti->base + LOCKACCESS); | 157 | __raw_writel(~CS_LAR_KEY, cti->base + LOCKACCESS); |
162 | } | 158 | } |
163 | #endif | 159 | #endif |
diff --git a/arch/arm/include/asm/dma.h b/arch/arm/include/asm/dma.h index 5694a0d6576b..58b8c6a0ab1f 100644 --- a/arch/arm/include/asm/dma.h +++ b/arch/arm/include/asm/dma.h | |||
@@ -105,7 +105,7 @@ extern void set_dma_sg(unsigned int chan, struct scatterlist *sg, int nr_sg); | |||
105 | */ | 105 | */ |
106 | extern void __set_dma_addr(unsigned int chan, void *addr); | 106 | extern void __set_dma_addr(unsigned int chan, void *addr); |
107 | #define set_dma_addr(chan, addr) \ | 107 | #define set_dma_addr(chan, addr) \ |
108 | __set_dma_addr(chan, bus_to_virt(addr)) | 108 | __set_dma_addr(chan, (void *)__bus_to_virt(addr)) |
109 | 109 | ||
110 | /* Set the DMA byte count for this channel | 110 | /* Set the DMA byte count for this channel |
111 | * | 111 | * |
diff --git a/arch/arm/include/asm/hardware/coresight.h b/arch/arm/include/asm/hardware/coresight.h index 7ecd793b8f5a..0cf7a6b842ff 100644 --- a/arch/arm/include/asm/hardware/coresight.h +++ b/arch/arm/include/asm/hardware/coresight.h | |||
@@ -36,7 +36,7 @@ | |||
36 | /* CoreSight Component Registers */ | 36 | /* CoreSight Component Registers */ |
37 | #define CSCR_CLASS 0xff4 | 37 | #define CSCR_CLASS 0xff4 |
38 | 38 | ||
39 | #define UNLOCK_MAGIC 0xc5acce55 | 39 | #define CS_LAR_KEY 0xc5acce55 |
40 | 40 | ||
41 | /* ETM control register, "ETM Architecture", 3.3.1 */ | 41 | /* ETM control register, "ETM Architecture", 3.3.1 */ |
42 | #define ETMR_CTRL 0 | 42 | #define ETMR_CTRL 0 |
@@ -147,11 +147,11 @@ | |||
147 | 147 | ||
148 | #define etm_lock(t) do { etm_writel((t), 0, CSMR_LOCKACCESS); } while (0) | 148 | #define etm_lock(t) do { etm_writel((t), 0, CSMR_LOCKACCESS); } while (0) |
149 | #define etm_unlock(t) \ | 149 | #define etm_unlock(t) \ |
150 | do { etm_writel((t), UNLOCK_MAGIC, CSMR_LOCKACCESS); } while (0) | 150 | do { etm_writel((t), CS_LAR_KEY, CSMR_LOCKACCESS); } while (0) |
151 | 151 | ||
152 | #define etb_lock(t) do { etb_writel((t), 0, CSMR_LOCKACCESS); } while (0) | 152 | #define etb_lock(t) do { etb_writel((t), 0, CSMR_LOCKACCESS); } while (0) |
153 | #define etb_unlock(t) \ | 153 | #define etb_unlock(t) \ |
154 | do { etb_writel((t), UNLOCK_MAGIC, CSMR_LOCKACCESS); } while (0) | 154 | do { etb_writel((t), CS_LAR_KEY, CSMR_LOCKACCESS); } while (0) |
155 | 155 | ||
156 | #endif /* __ASM_HARDWARE_CORESIGHT_H */ | 156 | #endif /* __ASM_HARDWARE_CORESIGHT_H */ |
157 | 157 | ||
diff --git a/arch/arm/include/asm/hardware/sp810.h b/arch/arm/include/asm/hardware/sp810.h deleted file mode 100644 index 6636430dd0e6..000000000000 --- a/arch/arm/include/asm/hardware/sp810.h +++ /dev/null | |||
@@ -1,64 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/include/asm/hardware/sp810.h | ||
3 | * | ||
4 | * ARM PrimeXsys System Controller SP810 header file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar <viresh.linux@gmail.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARM_SP810_H | ||
15 | #define __ASM_ARM_SP810_H | ||
16 | |||
17 | #include <linux/io.h> | ||
18 | |||
19 | /* sysctl registers offset */ | ||
20 | #define SCCTRL 0x000 | ||
21 | #define SCSYSSTAT 0x004 | ||
22 | #define SCIMCTRL 0x008 | ||
23 | #define SCIMSTAT 0x00C | ||
24 | #define SCXTALCTRL 0x010 | ||
25 | #define SCPLLCTRL 0x014 | ||
26 | #define SCPLLFCTRL 0x018 | ||
27 | #define SCPERCTRL0 0x01C | ||
28 | #define SCPERCTRL1 0x020 | ||
29 | #define SCPEREN 0x024 | ||
30 | #define SCPERDIS 0x028 | ||
31 | #define SCPERCLKEN 0x02C | ||
32 | #define SCPERSTAT 0x030 | ||
33 | #define SCSYSID0 0xEE0 | ||
34 | #define SCSYSID1 0xEE4 | ||
35 | #define SCSYSID2 0xEE8 | ||
36 | #define SCSYSID3 0xEEC | ||
37 | #define SCITCR 0xF00 | ||
38 | #define SCITIR0 0xF04 | ||
39 | #define SCITIR1 0xF08 | ||
40 | #define SCITOR 0xF0C | ||
41 | #define SCCNTCTRL 0xF10 | ||
42 | #define SCCNTDATA 0xF14 | ||
43 | #define SCCNTSTEP 0xF18 | ||
44 | #define SCPERIPHID0 0xFE0 | ||
45 | #define SCPERIPHID1 0xFE4 | ||
46 | #define SCPERIPHID2 0xFE8 | ||
47 | #define SCPERIPHID3 0xFEC | ||
48 | #define SCPCELLID0 0xFF0 | ||
49 | #define SCPCELLID1 0xFF4 | ||
50 | #define SCPCELLID2 0xFF8 | ||
51 | #define SCPCELLID3 0xFFC | ||
52 | |||
53 | #define SCCTRL_TIMERENnSEL_SHIFT(n) (15 + ((n) * 2)) | ||
54 | |||
55 | static inline void sysctl_soft_reset(void __iomem *base) | ||
56 | { | ||
57 | /* switch to slow mode */ | ||
58 | writel(0x2, base + SCCTRL); | ||
59 | |||
60 | /* writing any value to SCSYSSTAT reg will reset system */ | ||
61 | writel(0, base + SCSYSSTAT); | ||
62 | } | ||
63 | |||
64 | #endif /* __ASM_ARM_SP810_H */ | ||
diff --git a/arch/arm/include/asm/hw_breakpoint.h b/arch/arm/include/asm/hw_breakpoint.h index 01169dd723f1..eef55ea9ef00 100644 --- a/arch/arm/include/asm/hw_breakpoint.h +++ b/arch/arm/include/asm/hw_breakpoint.h | |||
@@ -85,6 +85,9 @@ static inline void decode_ctrl_reg(u32 reg, | |||
85 | #define ARM_DSCR_HDBGEN (1 << 14) | 85 | #define ARM_DSCR_HDBGEN (1 << 14) |
86 | #define ARM_DSCR_MDBGEN (1 << 15) | 86 | #define ARM_DSCR_MDBGEN (1 << 15) |
87 | 87 | ||
88 | /* OSLSR os lock model bits */ | ||
89 | #define ARM_OSLSR_OSLM0 (1 << 0) | ||
90 | |||
88 | /* opcode2 numbers for the co-processor instructions. */ | 91 | /* opcode2 numbers for the co-processor instructions. */ |
89 | #define ARM_OP2_BVR 4 | 92 | #define ARM_OP2_BVR 4 |
90 | #define ARM_OP2_BCR 5 | 93 | #define ARM_OP2_BCR 5 |
diff --git a/arch/arm/include/asm/idmap.h b/arch/arm/include/asm/idmap.h index bf863edb517d..1a66f907e5cc 100644 --- a/arch/arm/include/asm/idmap.h +++ b/arch/arm/include/asm/idmap.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #define __idmap __section(.idmap.text) noinline notrace | 8 | #define __idmap __section(.idmap.text) noinline notrace |
9 | 9 | ||
10 | extern pgd_t *idmap_pgd; | 10 | extern pgd_t *idmap_pgd; |
11 | extern pgd_t *hyp_pgd; | ||
11 | 12 | ||
12 | void setup_mm_for_reboot(void); | 13 | void setup_mm_for_reboot(void); |
13 | 14 | ||
diff --git a/arch/arm/include/asm/kvm_arm.h b/arch/arm/include/asm/kvm_arm.h new file mode 100644 index 000000000000..7c3d813e15df --- /dev/null +++ b/arch/arm/include/asm/kvm_arm.h | |||
@@ -0,0 +1,214 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ARM_KVM_ARM_H__ | ||
20 | #define __ARM_KVM_ARM_H__ | ||
21 | |||
22 | #include <linux/types.h> | ||
23 | |||
24 | /* Hyp Configuration Register (HCR) bits */ | ||
25 | #define HCR_TGE (1 << 27) | ||
26 | #define HCR_TVM (1 << 26) | ||
27 | #define HCR_TTLB (1 << 25) | ||
28 | #define HCR_TPU (1 << 24) | ||
29 | #define HCR_TPC (1 << 23) | ||
30 | #define HCR_TSW (1 << 22) | ||
31 | #define HCR_TAC (1 << 21) | ||
32 | #define HCR_TIDCP (1 << 20) | ||
33 | #define HCR_TSC (1 << 19) | ||
34 | #define HCR_TID3 (1 << 18) | ||
35 | #define HCR_TID2 (1 << 17) | ||
36 | #define HCR_TID1 (1 << 16) | ||
37 | #define HCR_TID0 (1 << 15) | ||
38 | #define HCR_TWE (1 << 14) | ||
39 | #define HCR_TWI (1 << 13) | ||
40 | #define HCR_DC (1 << 12) | ||
41 | #define HCR_BSU (3 << 10) | ||
42 | #define HCR_BSU_IS (1 << 10) | ||
43 | #define HCR_FB (1 << 9) | ||
44 | #define HCR_VA (1 << 8) | ||
45 | #define HCR_VI (1 << 7) | ||
46 | #define HCR_VF (1 << 6) | ||
47 | #define HCR_AMO (1 << 5) | ||
48 | #define HCR_IMO (1 << 4) | ||
49 | #define HCR_FMO (1 << 3) | ||
50 | #define HCR_PTW (1 << 2) | ||
51 | #define HCR_SWIO (1 << 1) | ||
52 | #define HCR_VM 1 | ||
53 | |||
54 | /* | ||
55 | * The bits we set in HCR: | ||
56 | * TAC: Trap ACTLR | ||
57 | * TSC: Trap SMC | ||
58 | * TSW: Trap cache operations by set/way | ||
59 | * TWI: Trap WFI | ||
60 | * TIDCP: Trap L2CTLR/L2ECTLR | ||
61 | * BSU_IS: Upgrade barriers to the inner shareable domain | ||
62 | * FB: Force broadcast of all maintainance operations | ||
63 | * AMO: Override CPSR.A and enable signaling with VA | ||
64 | * IMO: Override CPSR.I and enable signaling with VI | ||
65 | * FMO: Override CPSR.F and enable signaling with VF | ||
66 | * SWIO: Turn set/way invalidates into set/way clean+invalidate | ||
67 | */ | ||
68 | #define HCR_GUEST_MASK (HCR_TSC | HCR_TSW | HCR_TWI | HCR_VM | HCR_BSU_IS | \ | ||
69 | HCR_FB | HCR_TAC | HCR_AMO | HCR_IMO | HCR_FMO | \ | ||
70 | HCR_SWIO | HCR_TIDCP) | ||
71 | #define HCR_VIRT_EXCP_MASK (HCR_VA | HCR_VI | HCR_VF) | ||
72 | |||
73 | /* System Control Register (SCTLR) bits */ | ||
74 | #define SCTLR_TE (1 << 30) | ||
75 | #define SCTLR_EE (1 << 25) | ||
76 | #define SCTLR_V (1 << 13) | ||
77 | |||
78 | /* Hyp System Control Register (HSCTLR) bits */ | ||
79 | #define HSCTLR_TE (1 << 30) | ||
80 | #define HSCTLR_EE (1 << 25) | ||
81 | #define HSCTLR_FI (1 << 21) | ||
82 | #define HSCTLR_WXN (1 << 19) | ||
83 | #define HSCTLR_I (1 << 12) | ||
84 | #define HSCTLR_C (1 << 2) | ||
85 | #define HSCTLR_A (1 << 1) | ||
86 | #define HSCTLR_M 1 | ||
87 | #define HSCTLR_MASK (HSCTLR_M | HSCTLR_A | HSCTLR_C | HSCTLR_I | \ | ||
88 | HSCTLR_WXN | HSCTLR_FI | HSCTLR_EE | HSCTLR_TE) | ||
89 | |||
90 | /* TTBCR and HTCR Registers bits */ | ||
91 | #define TTBCR_EAE (1 << 31) | ||
92 | #define TTBCR_IMP (1 << 30) | ||
93 | #define TTBCR_SH1 (3 << 28) | ||
94 | #define TTBCR_ORGN1 (3 << 26) | ||
95 | #define TTBCR_IRGN1 (3 << 24) | ||
96 | #define TTBCR_EPD1 (1 << 23) | ||
97 | #define TTBCR_A1 (1 << 22) | ||
98 | #define TTBCR_T1SZ (3 << 16) | ||
99 | #define TTBCR_SH0 (3 << 12) | ||
100 | #define TTBCR_ORGN0 (3 << 10) | ||
101 | #define TTBCR_IRGN0 (3 << 8) | ||
102 | #define TTBCR_EPD0 (1 << 7) | ||
103 | #define TTBCR_T0SZ 3 | ||
104 | #define HTCR_MASK (TTBCR_T0SZ | TTBCR_IRGN0 | TTBCR_ORGN0 | TTBCR_SH0) | ||
105 | |||
106 | /* Hyp System Trap Register */ | ||
107 | #define HSTR_T(x) (1 << x) | ||
108 | #define HSTR_TTEE (1 << 16) | ||
109 | #define HSTR_TJDBX (1 << 17) | ||
110 | |||
111 | /* Hyp Coprocessor Trap Register */ | ||
112 | #define HCPTR_TCP(x) (1 << x) | ||
113 | #define HCPTR_TCP_MASK (0x3fff) | ||
114 | #define HCPTR_TASE (1 << 15) | ||
115 | #define HCPTR_TTA (1 << 20) | ||
116 | #define HCPTR_TCPAC (1 << 31) | ||
117 | |||
118 | /* Hyp Debug Configuration Register bits */ | ||
119 | #define HDCR_TDRA (1 << 11) | ||
120 | #define HDCR_TDOSA (1 << 10) | ||
121 | #define HDCR_TDA (1 << 9) | ||
122 | #define HDCR_TDE (1 << 8) | ||
123 | #define HDCR_HPME (1 << 7) | ||
124 | #define HDCR_TPM (1 << 6) | ||
125 | #define HDCR_TPMCR (1 << 5) | ||
126 | #define HDCR_HPMN_MASK (0x1F) | ||
127 | |||
128 | /* | ||
129 | * The architecture supports 40-bit IPA as input to the 2nd stage translations | ||
130 | * and PTRS_PER_S2_PGD becomes 1024, because each entry covers 1GB of address | ||
131 | * space. | ||
132 | */ | ||
133 | #define KVM_PHYS_SHIFT (40) | ||
134 | #define KVM_PHYS_SIZE (1ULL << KVM_PHYS_SHIFT) | ||
135 | #define KVM_PHYS_MASK (KVM_PHYS_SIZE - 1ULL) | ||
136 | #define PTRS_PER_S2_PGD (1ULL << (KVM_PHYS_SHIFT - 30)) | ||
137 | #define S2_PGD_ORDER get_order(PTRS_PER_S2_PGD * sizeof(pgd_t)) | ||
138 | #define S2_PGD_SIZE (1 << S2_PGD_ORDER) | ||
139 | |||
140 | /* Virtualization Translation Control Register (VTCR) bits */ | ||
141 | #define VTCR_SH0 (3 << 12) | ||
142 | #define VTCR_ORGN0 (3 << 10) | ||
143 | #define VTCR_IRGN0 (3 << 8) | ||
144 | #define VTCR_SL0 (3 << 6) | ||
145 | #define VTCR_S (1 << 4) | ||
146 | #define VTCR_T0SZ (0xf) | ||
147 | #define VTCR_MASK (VTCR_SH0 | VTCR_ORGN0 | VTCR_IRGN0 | VTCR_SL0 | \ | ||
148 | VTCR_S | VTCR_T0SZ) | ||
149 | #define VTCR_HTCR_SH (VTCR_SH0 | VTCR_ORGN0 | VTCR_IRGN0) | ||
150 | #define VTCR_SL_L2 (0 << 6) /* Starting-level: 2 */ | ||
151 | #define VTCR_SL_L1 (1 << 6) /* Starting-level: 1 */ | ||
152 | #define KVM_VTCR_SL0 VTCR_SL_L1 | ||
153 | /* stage-2 input address range defined as 2^(32-T0SZ) */ | ||
154 | #define KVM_T0SZ (32 - KVM_PHYS_SHIFT) | ||
155 | #define KVM_VTCR_T0SZ (KVM_T0SZ & VTCR_T0SZ) | ||
156 | #define KVM_VTCR_S ((KVM_VTCR_T0SZ << 1) & VTCR_S) | ||
157 | |||
158 | /* Virtualization Translation Table Base Register (VTTBR) bits */ | ||
159 | #if KVM_VTCR_SL0 == VTCR_SL_L2 /* see ARM DDI 0406C: B4-1720 */ | ||
160 | #define VTTBR_X (14 - KVM_T0SZ) | ||
161 | #else | ||
162 | #define VTTBR_X (5 - KVM_T0SZ) | ||
163 | #endif | ||
164 | #define VTTBR_BADDR_SHIFT (VTTBR_X - 1) | ||
165 | #define VTTBR_BADDR_MASK (((1LLU << (40 - VTTBR_X)) - 1) << VTTBR_BADDR_SHIFT) | ||
166 | #define VTTBR_VMID_SHIFT (48LLU) | ||
167 | #define VTTBR_VMID_MASK (0xffLLU << VTTBR_VMID_SHIFT) | ||
168 | |||
169 | /* Hyp Syndrome Register (HSR) bits */ | ||
170 | #define HSR_EC_SHIFT (26) | ||
171 | #define HSR_EC (0x3fU << HSR_EC_SHIFT) | ||
172 | #define HSR_IL (1U << 25) | ||
173 | #define HSR_ISS (HSR_IL - 1) | ||
174 | #define HSR_ISV_SHIFT (24) | ||
175 | #define HSR_ISV (1U << HSR_ISV_SHIFT) | ||
176 | #define HSR_SRT_SHIFT (16) | ||
177 | #define HSR_SRT_MASK (0xf << HSR_SRT_SHIFT) | ||
178 | #define HSR_FSC (0x3f) | ||
179 | #define HSR_FSC_TYPE (0x3c) | ||
180 | #define HSR_SSE (1 << 21) | ||
181 | #define HSR_WNR (1 << 6) | ||
182 | #define HSR_CV_SHIFT (24) | ||
183 | #define HSR_CV (1U << HSR_CV_SHIFT) | ||
184 | #define HSR_COND_SHIFT (20) | ||
185 | #define HSR_COND (0xfU << HSR_COND_SHIFT) | ||
186 | |||
187 | #define FSC_FAULT (0x04) | ||
188 | #define FSC_PERM (0x0c) | ||
189 | |||
190 | /* Hyp Prefetch Fault Address Register (HPFAR/HDFAR) */ | ||
191 | #define HPFAR_MASK (~0xf) | ||
192 | |||
193 | #define HSR_EC_UNKNOWN (0x00) | ||
194 | #define HSR_EC_WFI (0x01) | ||
195 | #define HSR_EC_CP15_32 (0x03) | ||
196 | #define HSR_EC_CP15_64 (0x04) | ||
197 | #define HSR_EC_CP14_MR (0x05) | ||
198 | #define HSR_EC_CP14_LS (0x06) | ||
199 | #define HSR_EC_CP_0_13 (0x07) | ||
200 | #define HSR_EC_CP10_ID (0x08) | ||
201 | #define HSR_EC_JAZELLE (0x09) | ||
202 | #define HSR_EC_BXJ (0x0A) | ||
203 | #define HSR_EC_CP14_64 (0x0C) | ||
204 | #define HSR_EC_SVC_HYP (0x11) | ||
205 | #define HSR_EC_HVC (0x12) | ||
206 | #define HSR_EC_SMC (0x13) | ||
207 | #define HSR_EC_IABT (0x20) | ||
208 | #define HSR_EC_IABT_HYP (0x21) | ||
209 | #define HSR_EC_DABT (0x24) | ||
210 | #define HSR_EC_DABT_HYP (0x25) | ||
211 | |||
212 | #define HSR_HVC_IMM_MASK ((1UL << 16) - 1) | ||
213 | |||
214 | #endif /* __ARM_KVM_ARM_H__ */ | ||
diff --git a/arch/arm/include/asm/kvm_asm.h b/arch/arm/include/asm/kvm_asm.h new file mode 100644 index 000000000000..5e06e8177784 --- /dev/null +++ b/arch/arm/include/asm/kvm_asm.h | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ARM_KVM_ASM_H__ | ||
20 | #define __ARM_KVM_ASM_H__ | ||
21 | |||
22 | /* 0 is reserved as an invalid value. */ | ||
23 | #define c0_MPIDR 1 /* MultiProcessor ID Register */ | ||
24 | #define c0_CSSELR 2 /* Cache Size Selection Register */ | ||
25 | #define c1_SCTLR 3 /* System Control Register */ | ||
26 | #define c1_ACTLR 4 /* Auxilliary Control Register */ | ||
27 | #define c1_CPACR 5 /* Coprocessor Access Control */ | ||
28 | #define c2_TTBR0 6 /* Translation Table Base Register 0 */ | ||
29 | #define c2_TTBR0_high 7 /* TTBR0 top 32 bits */ | ||
30 | #define c2_TTBR1 8 /* Translation Table Base Register 1 */ | ||
31 | #define c2_TTBR1_high 9 /* TTBR1 top 32 bits */ | ||
32 | #define c2_TTBCR 10 /* Translation Table Base Control R. */ | ||
33 | #define c3_DACR 11 /* Domain Access Control Register */ | ||
34 | #define c5_DFSR 12 /* Data Fault Status Register */ | ||
35 | #define c5_IFSR 13 /* Instruction Fault Status Register */ | ||
36 | #define c5_ADFSR 14 /* Auxilary Data Fault Status R */ | ||
37 | #define c5_AIFSR 15 /* Auxilary Instrunction Fault Status R */ | ||
38 | #define c6_DFAR 16 /* Data Fault Address Register */ | ||
39 | #define c6_IFAR 17 /* Instruction Fault Address Register */ | ||
40 | #define c9_L2CTLR 18 /* Cortex A15 L2 Control Register */ | ||
41 | #define c10_PRRR 19 /* Primary Region Remap Register */ | ||
42 | #define c10_NMRR 20 /* Normal Memory Remap Register */ | ||
43 | #define c12_VBAR 21 /* Vector Base Address Register */ | ||
44 | #define c13_CID 22 /* Context ID Register */ | ||
45 | #define c13_TID_URW 23 /* Thread ID, User R/W */ | ||
46 | #define c13_TID_URO 24 /* Thread ID, User R/O */ | ||
47 | #define c13_TID_PRIV 25 /* Thread ID, Privileged */ | ||
48 | #define NR_CP15_REGS 26 /* Number of regs (incl. invalid) */ | ||
49 | |||
50 | #define ARM_EXCEPTION_RESET 0 | ||
51 | #define ARM_EXCEPTION_UNDEFINED 1 | ||
52 | #define ARM_EXCEPTION_SOFTWARE 2 | ||
53 | #define ARM_EXCEPTION_PREF_ABORT 3 | ||
54 | #define ARM_EXCEPTION_DATA_ABORT 4 | ||
55 | #define ARM_EXCEPTION_IRQ 5 | ||
56 | #define ARM_EXCEPTION_FIQ 6 | ||
57 | #define ARM_EXCEPTION_HVC 7 | ||
58 | |||
59 | #ifndef __ASSEMBLY__ | ||
60 | struct kvm; | ||
61 | struct kvm_vcpu; | ||
62 | |||
63 | extern char __kvm_hyp_init[]; | ||
64 | extern char __kvm_hyp_init_end[]; | ||
65 | |||
66 | extern char __kvm_hyp_exit[]; | ||
67 | extern char __kvm_hyp_exit_end[]; | ||
68 | |||
69 | extern char __kvm_hyp_vector[]; | ||
70 | |||
71 | extern char __kvm_hyp_code_start[]; | ||
72 | extern char __kvm_hyp_code_end[]; | ||
73 | |||
74 | extern void __kvm_tlb_flush_vmid(struct kvm *kvm); | ||
75 | |||
76 | extern void __kvm_flush_vm_context(void); | ||
77 | extern void __kvm_tlb_flush_vmid(struct kvm *kvm); | ||
78 | |||
79 | extern int __kvm_vcpu_run(struct kvm_vcpu *vcpu); | ||
80 | #endif | ||
81 | |||
82 | #endif /* __ARM_KVM_ASM_H__ */ | ||
diff --git a/arch/arm/include/asm/kvm_coproc.h b/arch/arm/include/asm/kvm_coproc.h new file mode 100644 index 000000000000..4917c2f7e459 --- /dev/null +++ b/arch/arm/include/asm/kvm_coproc.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 Rusty Russell IBM Corporation | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License, version 2, as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope that it will be useful, | ||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | * GNU General Public License for more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License | ||
14 | * along with this program; if not, write to the Free Software | ||
15 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
16 | */ | ||
17 | |||
18 | #ifndef __ARM_KVM_COPROC_H__ | ||
19 | #define __ARM_KVM_COPROC_H__ | ||
20 | #include <linux/kvm_host.h> | ||
21 | |||
22 | void kvm_reset_coprocs(struct kvm_vcpu *vcpu); | ||
23 | |||
24 | struct kvm_coproc_target_table { | ||
25 | unsigned target; | ||
26 | const struct coproc_reg *table; | ||
27 | size_t num; | ||
28 | }; | ||
29 | void kvm_register_target_coproc_table(struct kvm_coproc_target_table *table); | ||
30 | |||
31 | int kvm_handle_cp10_id(struct kvm_vcpu *vcpu, struct kvm_run *run); | ||
32 | int kvm_handle_cp_0_13_access(struct kvm_vcpu *vcpu, struct kvm_run *run); | ||
33 | int kvm_handle_cp14_load_store(struct kvm_vcpu *vcpu, struct kvm_run *run); | ||
34 | int kvm_handle_cp14_access(struct kvm_vcpu *vcpu, struct kvm_run *run); | ||
35 | int kvm_handle_cp15_32(struct kvm_vcpu *vcpu, struct kvm_run *run); | ||
36 | int kvm_handle_cp15_64(struct kvm_vcpu *vcpu, struct kvm_run *run); | ||
37 | |||
38 | unsigned long kvm_arm_num_guest_msrs(struct kvm_vcpu *vcpu); | ||
39 | int kvm_arm_copy_msrindices(struct kvm_vcpu *vcpu, u64 __user *uindices); | ||
40 | void kvm_coproc_table_init(void); | ||
41 | |||
42 | struct kvm_one_reg; | ||
43 | int kvm_arm_copy_coproc_indices(struct kvm_vcpu *vcpu, u64 __user *uindices); | ||
44 | int kvm_arm_coproc_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *); | ||
45 | int kvm_arm_coproc_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *); | ||
46 | unsigned long kvm_arm_num_coproc_regs(struct kvm_vcpu *vcpu); | ||
47 | #endif /* __ARM_KVM_COPROC_H__ */ | ||
diff --git a/arch/arm/include/asm/kvm_emulate.h b/arch/arm/include/asm/kvm_emulate.h new file mode 100644 index 000000000000..fd611996bfb5 --- /dev/null +++ b/arch/arm/include/asm/kvm_emulate.h | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ARM_KVM_EMULATE_H__ | ||
20 | #define __ARM_KVM_EMULATE_H__ | ||
21 | |||
22 | #include <linux/kvm_host.h> | ||
23 | #include <asm/kvm_asm.h> | ||
24 | #include <asm/kvm_mmio.h> | ||
25 | |||
26 | u32 *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num); | ||
27 | u32 *vcpu_spsr(struct kvm_vcpu *vcpu); | ||
28 | |||
29 | int kvm_handle_wfi(struct kvm_vcpu *vcpu, struct kvm_run *run); | ||
30 | void kvm_skip_instr(struct kvm_vcpu *vcpu, bool is_wide_instr); | ||
31 | void kvm_inject_undefined(struct kvm_vcpu *vcpu); | ||
32 | void kvm_inject_dabt(struct kvm_vcpu *vcpu, unsigned long addr); | ||
33 | void kvm_inject_pabt(struct kvm_vcpu *vcpu, unsigned long addr); | ||
34 | |||
35 | static inline bool vcpu_mode_is_32bit(struct kvm_vcpu *vcpu) | ||
36 | { | ||
37 | return 1; | ||
38 | } | ||
39 | |||
40 | static inline u32 *vcpu_pc(struct kvm_vcpu *vcpu) | ||
41 | { | ||
42 | return (u32 *)&vcpu->arch.regs.usr_regs.ARM_pc; | ||
43 | } | ||
44 | |||
45 | static inline u32 *vcpu_cpsr(struct kvm_vcpu *vcpu) | ||
46 | { | ||
47 | return (u32 *)&vcpu->arch.regs.usr_regs.ARM_cpsr; | ||
48 | } | ||
49 | |||
50 | static inline void vcpu_set_thumb(struct kvm_vcpu *vcpu) | ||
51 | { | ||
52 | *vcpu_cpsr(vcpu) |= PSR_T_BIT; | ||
53 | } | ||
54 | |||
55 | static inline bool mode_has_spsr(struct kvm_vcpu *vcpu) | ||
56 | { | ||
57 | unsigned long cpsr_mode = vcpu->arch.regs.usr_regs.ARM_cpsr & MODE_MASK; | ||
58 | return (cpsr_mode > USR_MODE && cpsr_mode < SYSTEM_MODE); | ||
59 | } | ||
60 | |||
61 | static inline bool vcpu_mode_priv(struct kvm_vcpu *vcpu) | ||
62 | { | ||
63 | unsigned long cpsr_mode = vcpu->arch.regs.usr_regs.ARM_cpsr & MODE_MASK; | ||
64 | return cpsr_mode > USR_MODE;; | ||
65 | } | ||
66 | |||
67 | static inline bool kvm_vcpu_reg_is_pc(struct kvm_vcpu *vcpu, int reg) | ||
68 | { | ||
69 | return reg == 15; | ||
70 | } | ||
71 | |||
72 | #endif /* __ARM_KVM_EMULATE_H__ */ | ||
diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h new file mode 100644 index 000000000000..98b4d1a72923 --- /dev/null +++ b/arch/arm/include/asm/kvm_host.h | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ARM_KVM_HOST_H__ | ||
20 | #define __ARM_KVM_HOST_H__ | ||
21 | |||
22 | #include <asm/kvm.h> | ||
23 | #include <asm/kvm_asm.h> | ||
24 | #include <asm/kvm_mmio.h> | ||
25 | #include <asm/fpstate.h> | ||
26 | |||
27 | #define KVM_MAX_VCPUS CONFIG_KVM_ARM_MAX_VCPUS | ||
28 | #define KVM_MEMORY_SLOTS 32 | ||
29 | #define KVM_PRIVATE_MEM_SLOTS 4 | ||
30 | #define KVM_COALESCED_MMIO_PAGE_OFFSET 1 | ||
31 | #define KVM_HAVE_ONE_REG | ||
32 | |||
33 | #define KVM_VCPU_MAX_FEATURES 1 | ||
34 | |||
35 | /* We don't currently support large pages. */ | ||
36 | #define KVM_HPAGE_GFN_SHIFT(x) 0 | ||
37 | #define KVM_NR_PAGE_SIZES 1 | ||
38 | #define KVM_PAGES_PER_HPAGE(x) (1UL<<31) | ||
39 | |||
40 | struct kvm_vcpu; | ||
41 | u32 *kvm_vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num, u32 mode); | ||
42 | int kvm_target_cpu(void); | ||
43 | int kvm_reset_vcpu(struct kvm_vcpu *vcpu); | ||
44 | void kvm_reset_coprocs(struct kvm_vcpu *vcpu); | ||
45 | |||
46 | struct kvm_arch { | ||
47 | /* VTTBR value associated with below pgd and vmid */ | ||
48 | u64 vttbr; | ||
49 | |||
50 | /* | ||
51 | * Anything that is not used directly from assembly code goes | ||
52 | * here. | ||
53 | */ | ||
54 | |||
55 | /* The VMID generation used for the virt. memory system */ | ||
56 | u64 vmid_gen; | ||
57 | u32 vmid; | ||
58 | |||
59 | /* Stage-2 page table */ | ||
60 | pgd_t *pgd; | ||
61 | }; | ||
62 | |||
63 | #define KVM_NR_MEM_OBJS 40 | ||
64 | |||
65 | /* | ||
66 | * We don't want allocation failures within the mmu code, so we preallocate | ||
67 | * enough memory for a single page fault in a cache. | ||
68 | */ | ||
69 | struct kvm_mmu_memory_cache { | ||
70 | int nobjs; | ||
71 | void *objects[KVM_NR_MEM_OBJS]; | ||
72 | }; | ||
73 | |||
74 | struct kvm_vcpu_arch { | ||
75 | struct kvm_regs regs; | ||
76 | |||
77 | int target; /* Processor target */ | ||
78 | DECLARE_BITMAP(features, KVM_VCPU_MAX_FEATURES); | ||
79 | |||
80 | /* System control coprocessor (cp15) */ | ||
81 | u32 cp15[NR_CP15_REGS]; | ||
82 | |||
83 | /* The CPU type we expose to the VM */ | ||
84 | u32 midr; | ||
85 | |||
86 | /* Exception Information */ | ||
87 | u32 hsr; /* Hyp Syndrome Register */ | ||
88 | u32 hxfar; /* Hyp Data/Inst Fault Address Register */ | ||
89 | u32 hpfar; /* Hyp IPA Fault Address Register */ | ||
90 | |||
91 | /* Floating point registers (VFP and Advanced SIMD/NEON) */ | ||
92 | struct vfp_hard_struct vfp_guest; | ||
93 | struct vfp_hard_struct *vfp_host; | ||
94 | |||
95 | /* | ||
96 | * Anything that is not used directly from assembly code goes | ||
97 | * here. | ||
98 | */ | ||
99 | /* dcache set/way operation pending */ | ||
100 | int last_pcpu; | ||
101 | cpumask_t require_dcache_flush; | ||
102 | |||
103 | /* Don't run the guest on this vcpu */ | ||
104 | bool pause; | ||
105 | |||
106 | /* IO related fields */ | ||
107 | struct kvm_decode mmio_decode; | ||
108 | |||
109 | /* Interrupt related fields */ | ||
110 | u32 irq_lines; /* IRQ and FIQ levels */ | ||
111 | |||
112 | /* Hyp exception information */ | ||
113 | u32 hyp_pc; /* PC when exception was taken from Hyp mode */ | ||
114 | |||
115 | /* Cache some mmu pages needed inside spinlock regions */ | ||
116 | struct kvm_mmu_memory_cache mmu_page_cache; | ||
117 | |||
118 | /* Detect first run of a vcpu */ | ||
119 | bool has_run_once; | ||
120 | }; | ||
121 | |||
122 | struct kvm_vm_stat { | ||
123 | u32 remote_tlb_flush; | ||
124 | }; | ||
125 | |||
126 | struct kvm_vcpu_stat { | ||
127 | u32 halt_wakeup; | ||
128 | }; | ||
129 | |||
130 | struct kvm_vcpu_init; | ||
131 | int kvm_vcpu_set_target(struct kvm_vcpu *vcpu, | ||
132 | const struct kvm_vcpu_init *init); | ||
133 | unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu); | ||
134 | int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *indices); | ||
135 | struct kvm_one_reg; | ||
136 | int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg); | ||
137 | int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg); | ||
138 | u64 kvm_call_hyp(void *hypfn, ...); | ||
139 | void force_vm_exit(const cpumask_t *mask); | ||
140 | |||
141 | #define KVM_ARCH_WANT_MMU_NOTIFIER | ||
142 | struct kvm; | ||
143 | int kvm_unmap_hva(struct kvm *kvm, unsigned long hva); | ||
144 | int kvm_unmap_hva_range(struct kvm *kvm, | ||
145 | unsigned long start, unsigned long end); | ||
146 | void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); | ||
147 | |||
148 | unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu); | ||
149 | int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *indices); | ||
150 | |||
151 | /* We do not have shadow page tables, hence the empty hooks */ | ||
152 | static inline int kvm_age_hva(struct kvm *kvm, unsigned long hva) | ||
153 | { | ||
154 | return 0; | ||
155 | } | ||
156 | |||
157 | static inline int kvm_test_age_hva(struct kvm *kvm, unsigned long hva) | ||
158 | { | ||
159 | return 0; | ||
160 | } | ||
161 | #endif /* __ARM_KVM_HOST_H__ */ | ||
diff --git a/arch/arm/include/asm/kvm_mmio.h b/arch/arm/include/asm/kvm_mmio.h new file mode 100644 index 000000000000..adcc0d7d3175 --- /dev/null +++ b/arch/arm/include/asm/kvm_mmio.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ARM_KVM_MMIO_H__ | ||
20 | #define __ARM_KVM_MMIO_H__ | ||
21 | |||
22 | #include <linux/kvm_host.h> | ||
23 | #include <asm/kvm_asm.h> | ||
24 | #include <asm/kvm_arm.h> | ||
25 | |||
26 | struct kvm_decode { | ||
27 | unsigned long rt; | ||
28 | bool sign_extend; | ||
29 | }; | ||
30 | |||
31 | /* | ||
32 | * The in-kernel MMIO emulation code wants to use a copy of run->mmio, | ||
33 | * which is an anonymous type. Use our own type instead. | ||
34 | */ | ||
35 | struct kvm_exit_mmio { | ||
36 | phys_addr_t phys_addr; | ||
37 | u8 data[8]; | ||
38 | u32 len; | ||
39 | bool is_write; | ||
40 | }; | ||
41 | |||
42 | static inline void kvm_prepare_mmio(struct kvm_run *run, | ||
43 | struct kvm_exit_mmio *mmio) | ||
44 | { | ||
45 | run->mmio.phys_addr = mmio->phys_addr; | ||
46 | run->mmio.len = mmio->len; | ||
47 | run->mmio.is_write = mmio->is_write; | ||
48 | memcpy(run->mmio.data, mmio->data, mmio->len); | ||
49 | run->exit_reason = KVM_EXIT_MMIO; | ||
50 | } | ||
51 | |||
52 | int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run); | ||
53 | int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run, | ||
54 | phys_addr_t fault_ipa); | ||
55 | |||
56 | #endif /* __ARM_KVM_MMIO_H__ */ | ||
diff --git a/arch/arm/include/asm/kvm_mmu.h b/arch/arm/include/asm/kvm_mmu.h new file mode 100644 index 000000000000..421a20b34874 --- /dev/null +++ b/arch/arm/include/asm/kvm_mmu.h | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ARM_KVM_MMU_H__ | ||
20 | #define __ARM_KVM_MMU_H__ | ||
21 | |||
22 | int create_hyp_mappings(void *from, void *to); | ||
23 | int create_hyp_io_mappings(void *from, void *to, phys_addr_t); | ||
24 | void free_hyp_pmds(void); | ||
25 | |||
26 | int kvm_alloc_stage2_pgd(struct kvm *kvm); | ||
27 | void kvm_free_stage2_pgd(struct kvm *kvm); | ||
28 | int kvm_phys_addr_ioremap(struct kvm *kvm, phys_addr_t guest_ipa, | ||
29 | phys_addr_t pa, unsigned long size); | ||
30 | |||
31 | int kvm_handle_guest_abort(struct kvm_vcpu *vcpu, struct kvm_run *run); | ||
32 | |||
33 | void kvm_mmu_free_memory_caches(struct kvm_vcpu *vcpu); | ||
34 | |||
35 | phys_addr_t kvm_mmu_get_httbr(void); | ||
36 | int kvm_mmu_init(void); | ||
37 | void kvm_clear_hyp_idmap(void); | ||
38 | |||
39 | static inline bool kvm_is_write_fault(unsigned long hsr) | ||
40 | { | ||
41 | unsigned long hsr_ec = hsr >> HSR_EC_SHIFT; | ||
42 | if (hsr_ec == HSR_EC_IABT) | ||
43 | return false; | ||
44 | else if ((hsr & HSR_ISV) && !(hsr & HSR_WNR)) | ||
45 | return false; | ||
46 | else | ||
47 | return true; | ||
48 | } | ||
49 | |||
50 | #endif /* __ARM_KVM_MMU_H__ */ | ||
diff --git a/arch/arm/include/asm/kvm_psci.h b/arch/arm/include/asm/kvm_psci.h new file mode 100644 index 000000000000..9a83d98bf170 --- /dev/null +++ b/arch/arm/include/asm/kvm_psci.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - ARM Ltd | ||
3 | * Author: Marc Zyngier <marc.zyngier@arm.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
16 | */ | ||
17 | |||
18 | #ifndef __ARM_KVM_PSCI_H__ | ||
19 | #define __ARM_KVM_PSCI_H__ | ||
20 | |||
21 | bool kvm_psci_call(struct kvm_vcpu *vcpu); | ||
22 | |||
23 | #endif /* __ARM_KVM_PSCI_H__ */ | ||
diff --git a/arch/arm/include/asm/mach/pci.h b/arch/arm/include/asm/mach/pci.h index db9fedb57f2c..5cf2e979b4be 100644 --- a/arch/arm/include/asm/mach/pci.h +++ b/arch/arm/include/asm/mach/pci.h | |||
@@ -23,6 +23,7 @@ struct hw_pci { | |||
23 | #endif | 23 | #endif |
24 | struct pci_ops *ops; | 24 | struct pci_ops *ops; |
25 | int nr_controllers; | 25 | int nr_controllers; |
26 | void **private_data; | ||
26 | int (*setup)(int nr, struct pci_sys_data *); | 27 | int (*setup)(int nr, struct pci_sys_data *); |
27 | struct pci_bus *(*scan)(int nr, struct pci_sys_data *); | 28 | struct pci_bus *(*scan)(int nr, struct pci_sys_data *); |
28 | void (*preinit)(void); | 29 | void (*preinit)(void); |
diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index 1c4df27f9332..57870ab313c5 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h | |||
@@ -36,23 +36,23 @@ | |||
36 | * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area | 36 | * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area |
37 | */ | 37 | */ |
38 | #define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET) | 38 | #define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET) |
39 | #define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(0x01000000)) | 39 | #define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(SZ_16M)) |
40 | #define TASK_UNMAPPED_BASE ALIGN(TASK_SIZE / 3, SZ_16M) | 40 | #define TASK_UNMAPPED_BASE ALIGN(TASK_SIZE / 3, SZ_16M) |
41 | 41 | ||
42 | /* | 42 | /* |
43 | * The maximum size of a 26-bit user space task. | 43 | * The maximum size of a 26-bit user space task. |
44 | */ | 44 | */ |
45 | #define TASK_SIZE_26 UL(0x04000000) | 45 | #define TASK_SIZE_26 (UL(1) << 26) |
46 | 46 | ||
47 | /* | 47 | /* |
48 | * The module space lives between the addresses given by TASK_SIZE | 48 | * The module space lives between the addresses given by TASK_SIZE |
49 | * and PAGE_OFFSET - it must be within 32MB of the kernel text. | 49 | * and PAGE_OFFSET - it must be within 32MB of the kernel text. |
50 | */ | 50 | */ |
51 | #ifndef CONFIG_THUMB2_KERNEL | 51 | #ifndef CONFIG_THUMB2_KERNEL |
52 | #define MODULES_VADDR (PAGE_OFFSET - 16*1024*1024) | 52 | #define MODULES_VADDR (PAGE_OFFSET - SZ_16M) |
53 | #else | 53 | #else |
54 | /* smaller range for Thumb-2 symbols relocation (2^24)*/ | 54 | /* smaller range for Thumb-2 symbols relocation (2^24)*/ |
55 | #define MODULES_VADDR (PAGE_OFFSET - 8*1024*1024) | 55 | #define MODULES_VADDR (PAGE_OFFSET - SZ_8M) |
56 | #endif | 56 | #endif |
57 | 57 | ||
58 | #if TASK_SIZE > MODULES_VADDR | 58 | #if TASK_SIZE > MODULES_VADDR |
@@ -245,6 +245,7 @@ static inline void *phys_to_virt(phys_addr_t x) | |||
245 | #define __bus_to_pfn(x) __phys_to_pfn(x) | 245 | #define __bus_to_pfn(x) __phys_to_pfn(x) |
246 | #endif | 246 | #endif |
247 | 247 | ||
248 | #ifdef CONFIG_VIRT_TO_BUS | ||
248 | static inline __deprecated unsigned long virt_to_bus(void *x) | 249 | static inline __deprecated unsigned long virt_to_bus(void *x) |
249 | { | 250 | { |
250 | return __virt_to_bus((unsigned long)x); | 251 | return __virt_to_bus((unsigned long)x); |
@@ -254,6 +255,7 @@ static inline __deprecated void *bus_to_virt(unsigned long x) | |||
254 | { | 255 | { |
255 | return (void *)__bus_to_virt(x); | 256 | return (void *)__bus_to_virt(x); |
256 | } | 257 | } |
258 | #endif | ||
257 | 259 | ||
258 | /* | 260 | /* |
259 | * Conversion between a struct page and a physical address. | 261 | * Conversion between a struct page and a physical address. |
diff --git a/arch/arm/include/asm/opcodes-sec.h b/arch/arm/include/asm/opcodes-sec.h new file mode 100644 index 000000000000..bc3a9174417c --- /dev/null +++ b/arch/arm/include/asm/opcodes-sec.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License version 2 as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * This program is distributed in the hope that it will be useful, | ||
7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
9 | * GNU General Public License for more details. | ||
10 | * | ||
11 | * Copyright (C) 2012 ARM Limited | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARM_OPCODES_SEC_H | ||
15 | #define __ASM_ARM_OPCODES_SEC_H | ||
16 | |||
17 | #include <asm/opcodes.h> | ||
18 | |||
19 | #define __SMC(imm4) __inst_arm_thumb32( \ | ||
20 | 0xE1600070 | (((imm4) & 0xF) << 0), \ | ||
21 | 0xF7F08000 | (((imm4) & 0xF) << 16) \ | ||
22 | ) | ||
23 | |||
24 | #endif /* __ASM_ARM_OPCODES_SEC_H */ | ||
diff --git a/arch/arm/include/asm/opcodes.h b/arch/arm/include/asm/opcodes.h index 74e211a6fb24..e796c598513b 100644 --- a/arch/arm/include/asm/opcodes.h +++ b/arch/arm/include/asm/opcodes.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #define __ASM_ARM_OPCODES_H | 10 | #define __ASM_ARM_OPCODES_H |
11 | 11 | ||
12 | #ifndef __ASSEMBLY__ | 12 | #ifndef __ASSEMBLY__ |
13 | #include <linux/linkage.h> | ||
13 | extern asmlinkage unsigned int arm_check_condition(u32 opcode, u32 psr); | 14 | extern asmlinkage unsigned int arm_check_condition(u32 opcode, u32 psr); |
14 | #endif | 15 | #endif |
15 | 16 | ||
diff --git a/arch/arm/include/asm/outercache.h b/arch/arm/include/asm/outercache.h index 53426c66352a..12f71a190422 100644 --- a/arch/arm/include/asm/outercache.h +++ b/arch/arm/include/asm/outercache.h | |||
@@ -92,6 +92,7 @@ static inline void outer_flush_range(phys_addr_t start, phys_addr_t end) | |||
92 | static inline void outer_flush_all(void) { } | 92 | static inline void outer_flush_all(void) { } |
93 | static inline void outer_inv_all(void) { } | 93 | static inline void outer_inv_all(void) { } |
94 | static inline void outer_disable(void) { } | 94 | static inline void outer_disable(void) { } |
95 | static inline void outer_resume(void) { } | ||
95 | 96 | ||
96 | #endif | 97 | #endif |
97 | 98 | ||
diff --git a/arch/arm/include/asm/pgtable-3level-hwdef.h b/arch/arm/include/asm/pgtable-3level-hwdef.h index d7952824c5c4..18f5cef82ad5 100644 --- a/arch/arm/include/asm/pgtable-3level-hwdef.h +++ b/arch/arm/include/asm/pgtable-3level-hwdef.h | |||
@@ -32,6 +32,9 @@ | |||
32 | #define PMD_TYPE_SECT (_AT(pmdval_t, 1) << 0) | 32 | #define PMD_TYPE_SECT (_AT(pmdval_t, 1) << 0) |
33 | #define PMD_BIT4 (_AT(pmdval_t, 0)) | 33 | #define PMD_BIT4 (_AT(pmdval_t, 0)) |
34 | #define PMD_DOMAIN(x) (_AT(pmdval_t, 0)) | 34 | #define PMD_DOMAIN(x) (_AT(pmdval_t, 0)) |
35 | #define PMD_APTABLE_SHIFT (61) | ||
36 | #define PMD_APTABLE (_AT(pgdval_t, 3) << PGD_APTABLE_SHIFT) | ||
37 | #define PMD_PXNTABLE (_AT(pgdval_t, 1) << 59) | ||
35 | 38 | ||
36 | /* | 39 | /* |
37 | * - section | 40 | * - section |
@@ -41,9 +44,11 @@ | |||
41 | #define PMD_SECT_S (_AT(pmdval_t, 3) << 8) | 44 | #define PMD_SECT_S (_AT(pmdval_t, 3) << 8) |
42 | #define PMD_SECT_AF (_AT(pmdval_t, 1) << 10) | 45 | #define PMD_SECT_AF (_AT(pmdval_t, 1) << 10) |
43 | #define PMD_SECT_nG (_AT(pmdval_t, 1) << 11) | 46 | #define PMD_SECT_nG (_AT(pmdval_t, 1) << 11) |
47 | #define PMD_SECT_PXN (_AT(pmdval_t, 1) << 53) | ||
44 | #define PMD_SECT_XN (_AT(pmdval_t, 1) << 54) | 48 | #define PMD_SECT_XN (_AT(pmdval_t, 1) << 54) |
45 | #define PMD_SECT_AP_WRITE (_AT(pmdval_t, 0)) | 49 | #define PMD_SECT_AP_WRITE (_AT(pmdval_t, 0)) |
46 | #define PMD_SECT_AP_READ (_AT(pmdval_t, 0)) | 50 | #define PMD_SECT_AP_READ (_AT(pmdval_t, 0)) |
51 | #define PMD_SECT_AP1 (_AT(pmdval_t, 1) << 6) | ||
47 | #define PMD_SECT_TEX(x) (_AT(pmdval_t, 0)) | 52 | #define PMD_SECT_TEX(x) (_AT(pmdval_t, 0)) |
48 | 53 | ||
49 | /* | 54 | /* |
diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h index a3f37929940a..6ef8afd1b64c 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h | |||
@@ -104,11 +104,29 @@ | |||
104 | */ | 104 | */ |
105 | #define L_PGD_SWAPPER (_AT(pgdval_t, 1) << 55) /* swapper_pg_dir entry */ | 105 | #define L_PGD_SWAPPER (_AT(pgdval_t, 1) << 55) /* swapper_pg_dir entry */ |
106 | 106 | ||
107 | /* | ||
108 | * 2nd stage PTE definitions for LPAE. | ||
109 | */ | ||
110 | #define L_PTE_S2_MT_UNCACHED (_AT(pteval_t, 0x5) << 2) /* MemAttr[3:0] */ | ||
111 | #define L_PTE_S2_MT_WRITETHROUGH (_AT(pteval_t, 0xa) << 2) /* MemAttr[3:0] */ | ||
112 | #define L_PTE_S2_MT_WRITEBACK (_AT(pteval_t, 0xf) << 2) /* MemAttr[3:0] */ | ||
113 | #define L_PTE_S2_RDONLY (_AT(pteval_t, 1) << 6) /* HAP[1] */ | ||
114 | #define L_PTE_S2_RDWR (_AT(pteval_t, 2) << 6) /* HAP[2:1] */ | ||
115 | |||
116 | /* | ||
117 | * Hyp-mode PL2 PTE definitions for LPAE. | ||
118 | */ | ||
119 | #define L_PTE_HYP L_PTE_USER | ||
120 | |||
107 | #ifndef __ASSEMBLY__ | 121 | #ifndef __ASSEMBLY__ |
108 | 122 | ||
109 | #define pud_none(pud) (!pud_val(pud)) | 123 | #define pud_none(pud) (!pud_val(pud)) |
110 | #define pud_bad(pud) (!(pud_val(pud) & 2)) | 124 | #define pud_bad(pud) (!(pud_val(pud) & 2)) |
111 | #define pud_present(pud) (pud_val(pud)) | 125 | #define pud_present(pud) (pud_val(pud)) |
126 | #define pmd_table(pmd) ((pmd_val(pmd) & PMD_TYPE_MASK) == \ | ||
127 | PMD_TYPE_TABLE) | ||
128 | #define pmd_sect(pmd) ((pmd_val(pmd) & PMD_TYPE_MASK) == \ | ||
129 | PMD_TYPE_SECT) | ||
112 | 130 | ||
113 | #define pud_clear(pudp) \ | 131 | #define pud_clear(pudp) \ |
114 | do { \ | 132 | do { \ |
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 9c82f988c0e3..f30ac3b55ba9 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h | |||
@@ -70,6 +70,9 @@ extern void __pgd_error(const char *file, int line, pgd_t); | |||
70 | 70 | ||
71 | extern pgprot_t pgprot_user; | 71 | extern pgprot_t pgprot_user; |
72 | extern pgprot_t pgprot_kernel; | 72 | extern pgprot_t pgprot_kernel; |
73 | extern pgprot_t pgprot_hyp_device; | ||
74 | extern pgprot_t pgprot_s2; | ||
75 | extern pgprot_t pgprot_s2_device; | ||
73 | 76 | ||
74 | #define _MOD_PROT(p, b) __pgprot(pgprot_val(p) | (b)) | 77 | #define _MOD_PROT(p, b) __pgprot(pgprot_val(p) | (b)) |
75 | 78 | ||
@@ -82,6 +85,10 @@ extern pgprot_t pgprot_kernel; | |||
82 | #define PAGE_READONLY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_RDONLY) | 85 | #define PAGE_READONLY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_RDONLY) |
83 | #define PAGE_KERNEL _MOD_PROT(pgprot_kernel, L_PTE_XN) | 86 | #define PAGE_KERNEL _MOD_PROT(pgprot_kernel, L_PTE_XN) |
84 | #define PAGE_KERNEL_EXEC pgprot_kernel | 87 | #define PAGE_KERNEL_EXEC pgprot_kernel |
88 | #define PAGE_HYP _MOD_PROT(pgprot_kernel, L_PTE_HYP) | ||
89 | #define PAGE_HYP_DEVICE _MOD_PROT(pgprot_hyp_device, L_PTE_HYP) | ||
90 | #define PAGE_S2 _MOD_PROT(pgprot_s2, L_PTE_S2_RDONLY) | ||
91 | #define PAGE_S2_DEVICE _MOD_PROT(pgprot_s2_device, L_PTE_USER | L_PTE_S2_RDONLY) | ||
85 | 92 | ||
86 | #define __PAGE_NONE __pgprot(_L_PTE_DEFAULT | L_PTE_RDONLY | L_PTE_XN | L_PTE_NONE) | 93 | #define __PAGE_NONE __pgprot(_L_PTE_DEFAULT | L_PTE_RDONLY | L_PTE_XN | L_PTE_NONE) |
87 | #define __PAGE_SHARED __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_XN) | 94 | #define __PAGE_SHARED __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_XN) |
diff --git a/arch/arm/include/asm/psci.h b/arch/arm/include/asm/psci.h new file mode 100644 index 000000000000..ce0dbe7c1625 --- /dev/null +++ b/arch/arm/include/asm/psci.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License version 2 as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * This program is distributed in the hope that it will be useful, | ||
7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
9 | * GNU General Public License for more details. | ||
10 | * | ||
11 | * Copyright (C) 2012 ARM Limited | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARM_PSCI_H | ||
15 | #define __ASM_ARM_PSCI_H | ||
16 | |||
17 | #define PSCI_POWER_STATE_TYPE_STANDBY 0 | ||
18 | #define PSCI_POWER_STATE_TYPE_POWER_DOWN 1 | ||
19 | |||
20 | struct psci_power_state { | ||
21 | u16 id; | ||
22 | u8 type; | ||
23 | u8 affinity_level; | ||
24 | }; | ||
25 | |||
26 | struct psci_operations { | ||
27 | int (*cpu_suspend)(struct psci_power_state state, | ||
28 | unsigned long entry_point); | ||
29 | int (*cpu_off)(struct psci_power_state state); | ||
30 | int (*cpu_on)(unsigned long cpuid, unsigned long entry_point); | ||
31 | int (*migrate)(unsigned long cpuid); | ||
32 | }; | ||
33 | |||
34 | extern struct psci_operations psci_ops; | ||
35 | |||
36 | #endif /* __ASM_ARM_PSCI_H */ | ||
diff --git a/arch/arm/include/asm/smp_scu.h b/arch/arm/include/asm/smp_scu.h index 006f02681cd8..18d169373612 100644 --- a/arch/arm/include/asm/smp_scu.h +++ b/arch/arm/include/asm/smp_scu.h | |||
@@ -24,8 +24,14 @@ static inline unsigned long scu_a9_get_base(void) | |||
24 | } | 24 | } |
25 | 25 | ||
26 | unsigned int scu_get_core_count(void __iomem *); | 26 | unsigned int scu_get_core_count(void __iomem *); |
27 | void scu_enable(void __iomem *); | ||
28 | int scu_power_mode(void __iomem *, unsigned int); | 27 | int scu_power_mode(void __iomem *, unsigned int); |
28 | |||
29 | #ifdef CONFIG_SMP | ||
30 | void scu_enable(void __iomem *scu_base); | ||
31 | #else | ||
32 | static inline void scu_enable(void __iomem *scu_base) {} | ||
33 | #endif | ||
34 | |||
29 | #endif | 35 | #endif |
30 | 36 | ||
31 | #endif | 37 | #endif |
diff --git a/arch/arm/include/asm/spinlock.h b/arch/arm/include/asm/spinlock.h index b4ca707d0a69..6220e9fdf4c7 100644 --- a/arch/arm/include/asm/spinlock.h +++ b/arch/arm/include/asm/spinlock.h | |||
@@ -119,22 +119,8 @@ static inline int arch_spin_trylock(arch_spinlock_t *lock) | |||
119 | 119 | ||
120 | static inline void arch_spin_unlock(arch_spinlock_t *lock) | 120 | static inline void arch_spin_unlock(arch_spinlock_t *lock) |
121 | { | 121 | { |
122 | unsigned long tmp; | ||
123 | u32 slock; | ||
124 | |||
125 | smp_mb(); | 122 | smp_mb(); |
126 | 123 | lock->tickets.owner++; | |
127 | __asm__ __volatile__( | ||
128 | " mov %1, #1\n" | ||
129 | "1: ldrex %0, [%2]\n" | ||
130 | " uadd16 %0, %0, %1\n" | ||
131 | " strex %1, %0, [%2]\n" | ||
132 | " teq %1, #0\n" | ||
133 | " bne 1b" | ||
134 | : "=&r" (slock), "=&r" (tmp) | ||
135 | : "r" (&lock->slock) | ||
136 | : "cc"); | ||
137 | |||
138 | dsb_sev(); | 124 | dsb_sev(); |
139 | } | 125 | } |
140 | 126 | ||
diff --git a/arch/arm/include/asm/virt.h b/arch/arm/include/asm/virt.h index 86164df86cb4..50af92bac737 100644 --- a/arch/arm/include/asm/virt.h +++ b/arch/arm/include/asm/virt.h | |||
@@ -24,9 +24,9 @@ | |||
24 | /* | 24 | /* |
25 | * Flag indicating that the kernel was not entered in the same mode on every | 25 | * Flag indicating that the kernel was not entered in the same mode on every |
26 | * CPU. The zImage loader stashes this value in an SPSR, so we need an | 26 | * CPU. The zImage loader stashes this value in an SPSR, so we need an |
27 | * architecturally defined flag bit here (the N flag, as it happens) | 27 | * architecturally defined flag bit here. |
28 | */ | 28 | */ |
29 | #define BOOT_CPU_MODE_MISMATCH (1<<31) | 29 | #define BOOT_CPU_MODE_MISMATCH PSR_N_BIT |
30 | 30 | ||
31 | #ifndef __ASSEMBLY__ | 31 | #ifndef __ASSEMBLY__ |
32 | 32 | ||
diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S b/arch/arm/include/debug/omap2plus.S index cfaed13d0040..6d867aef18eb 100644 --- a/arch/arm/mach-omap2/include/mach/debug-macro.S +++ b/arch/arm/include/debug/omap2plus.S | |||
@@ -1,5 +1,4 @@ | |||
1 | /* arch/arm/mach-omap2/include/mach/debug-macro.S | 1 | /* |
2 | * | ||
3 | * Debugging macro include header | 2 | * Debugging macro include header |
4 | * | 3 | * |
5 | * Copyright (C) 1994-1999 Russell King | 4 | * Copyright (C) 1994-1999 Russell King |
@@ -13,7 +12,49 @@ | |||
13 | 12 | ||
14 | #include <linux/serial_reg.h> | 13 | #include <linux/serial_reg.h> |
15 | 14 | ||
16 | #include <mach/serial.h> | 15 | /* OMAP2 serial ports */ |
16 | #define OMAP2_UART1_BASE 0x4806a000 | ||
17 | #define OMAP2_UART2_BASE 0x4806c000 | ||
18 | #define OMAP2_UART3_BASE 0x4806e000 | ||
19 | |||
20 | /* OMAP3 serial ports */ | ||
21 | #define OMAP3_UART1_BASE OMAP2_UART1_BASE | ||
22 | #define OMAP3_UART2_BASE OMAP2_UART2_BASE | ||
23 | #define OMAP3_UART3_BASE 0x49020000 | ||
24 | #define OMAP3_UART4_BASE 0x49042000 /* Only on 36xx */ | ||
25 | #define OMAP3_UART4_AM35XX_BASE 0x4809E000 /* Only on AM35xx */ | ||
26 | |||
27 | /* OMAP4 serial ports */ | ||
28 | #define OMAP4_UART1_BASE OMAP2_UART1_BASE | ||
29 | #define OMAP4_UART2_BASE OMAP2_UART2_BASE | ||
30 | #define OMAP4_UART3_BASE 0x48020000 | ||
31 | #define OMAP4_UART4_BASE 0x4806e000 | ||
32 | |||
33 | /* TI81XX serial ports */ | ||
34 | #define TI81XX_UART1_BASE 0x48020000 | ||
35 | #define TI81XX_UART2_BASE 0x48022000 | ||
36 | #define TI81XX_UART3_BASE 0x48024000 | ||
37 | |||
38 | /* AM3505/3517 UART4 */ | ||
39 | #define AM35XX_UART4_BASE 0x4809E000 /* Only on AM3505/3517 */ | ||
40 | |||
41 | /* AM33XX serial port */ | ||
42 | #define AM33XX_UART1_BASE 0x44E09000 | ||
43 | |||
44 | /* OMAP5 serial ports */ | ||
45 | #define OMAP5_UART1_BASE OMAP2_UART1_BASE | ||
46 | #define OMAP5_UART2_BASE OMAP2_UART2_BASE | ||
47 | #define OMAP5_UART3_BASE OMAP4_UART3_BASE | ||
48 | #define OMAP5_UART4_BASE OMAP4_UART4_BASE | ||
49 | #define OMAP5_UART5_BASE 0x48066000 | ||
50 | #define OMAP5_UART6_BASE 0x48068000 | ||
51 | |||
52 | /* External port on Zoom2/3 */ | ||
53 | #define ZOOM_UART_BASE 0x10000000 | ||
54 | #define ZOOM_UART_VIRT 0xfa400000 | ||
55 | |||
56 | #define OMAP_PORT_SHIFT 2 | ||
57 | #define ZOOM_PORT_SHIFT 1 | ||
17 | 58 | ||
18 | #define UART_OFFSET(addr) ((addr) & 0x00ffffff) | 59 | #define UART_OFFSET(addr) ((addr) & 0x00ffffff) |
19 | 60 | ||
@@ -23,12 +64,6 @@ omap_uart_virt: .word 0 | |||
23 | omap_uart_lsr: .word 0 | 64 | omap_uart_lsr: .word 0 |
24 | .popsection | 65 | .popsection |
25 | 66 | ||
26 | /* | ||
27 | * Note that this code won't work if the bootloader passes | ||
28 | * a wrong machine ID number in r1. To debug, just hardcode | ||
29 | * the desired UART phys and virt addresses temporarily into | ||
30 | * the omap_uart_phys and omap_uart_virt above. | ||
31 | */ | ||
32 | .macro addruart, rp, rv, tmp | 67 | .macro addruart, rp, rv, tmp |
33 | 68 | ||
34 | /* Use omap_uart_phys/virt if already configured */ | 69 | /* Use omap_uart_phys/virt if already configured */ |
@@ -43,74 +78,64 @@ omap_uart_lsr: .word 0 | |||
43 | cmpne \rv, #0 | 78 | cmpne \rv, #0 |
44 | bne 100f @ already configured | 79 | bne 100f @ already configured |
45 | 80 | ||
46 | /* Check the debug UART configuration set in uncompress.h */ | ||
47 | mov \rp, pc | ||
48 | ldr \rv, =OMAP_UART_INFO_OFS | ||
49 | and \rp, \rp, #0xff000000 | ||
50 | ldr \rp, [\rp, \rv] | ||
51 | |||
52 | /* Select the UART to use based on the UART1 scratchpad value */ | ||
53 | cmp \rp, #0 @ no port configured? | ||
54 | beq 21f @ if none, try to use UART1 | ||
55 | cmp \rp, #OMAP2UART1 @ OMAP2/3/4UART1 | ||
56 | beq 21f @ configure OMAP2/3/4UART1 | ||
57 | cmp \rp, #OMAP2UART2 @ OMAP2/3/4UART2 | ||
58 | beq 22f @ configure OMAP2/3/4UART2 | ||
59 | cmp \rp, #OMAP2UART3 @ only on 24xx | ||
60 | beq 23f @ configure OMAP2UART3 | ||
61 | cmp \rp, #OMAP3UART3 @ only on 34xx | ||
62 | beq 33f @ configure OMAP3UART3 | ||
63 | cmp \rp, #OMAP4UART3 @ only on 44xx/54xx | ||
64 | beq 43f @ configure OMAP4/5UART3 | ||
65 | cmp \rp, #OMAP3UART4 @ only on 36xx | ||
66 | beq 34f @ configure OMAP3UART4 | ||
67 | cmp \rp, #OMAP4UART4 @ only on 44xx/54xx | ||
68 | beq 44f @ configure OMAP4/5UART4 | ||
69 | cmp \rp, #TI81XXUART1 @ ti81Xx UART offsets different | ||
70 | beq 81f @ configure UART1 | ||
71 | cmp \rp, #TI81XXUART2 @ ti81Xx UART offsets different | ||
72 | beq 82f @ configure UART2 | ||
73 | cmp \rp, #TI81XXUART3 @ ti81Xx UART offsets different | ||
74 | beq 83f @ configure UART3 | ||
75 | cmp \rp, #AM33XXUART1 @ AM33XX UART offsets different | ||
76 | beq 84f @ configure UART1 | ||
77 | cmp \rp, #ZOOM_UART @ only on zoom2/3 | ||
78 | beq 95f @ configure ZOOM_UART | ||
79 | |||
80 | /* Configure the UART offset from the phys/virt base */ | 81 | /* Configure the UART offset from the phys/virt base */ |
81 | 21: mov \rp, #UART_OFFSET(OMAP2_UART1_BASE) @ omap2/3/4 | 82 | #ifdef CONFIG_DEBUG_OMAP2UART1 |
83 | mov \rp, #UART_OFFSET(OMAP2_UART1_BASE) @ omap2/3/4 | ||
82 | b 98f | 84 | b 98f |
83 | 22: mov \rp, #UART_OFFSET(OMAP2_UART2_BASE) @ omap2/3/4 | 85 | #endif |
86 | #ifdef CONFIG_DEBUG_OMAP2UART2 | ||
87 | mov \rp, #UART_OFFSET(OMAP2_UART2_BASE) @ omap2/3/4 | ||
84 | b 98f | 88 | b 98f |
85 | 23: mov \rp, #UART_OFFSET(OMAP2_UART3_BASE) | 89 | #endif |
90 | #ifdef CONFIG_DEBUG_OMAP2UART3 | ||
91 | mov \rp, #UART_OFFSET(OMAP2_UART3_BASE) | ||
86 | b 98f | 92 | b 98f |
87 | 33: mov \rp, #UART_OFFSET(OMAP3_UART1_BASE) | 93 | #endif |
94 | #ifdef CONFIG_DEBUG_OMAP3UART3 | ||
95 | mov \rp, #UART_OFFSET(OMAP3_UART1_BASE) | ||
88 | add \rp, \rp, #0x00fb0000 | 96 | add \rp, \rp, #0x00fb0000 |
89 | add \rp, \rp, #0x00006000 @ OMAP3_UART3_BASE | 97 | add \rp, \rp, #0x00006000 @ OMAP3_UART3_BASE |
90 | b 98f | 98 | b 98f |
91 | 34: mov \rp, #UART_OFFSET(OMAP3_UART1_BASE) | 99 | #endif |
100 | #ifdef CONFIG_DEBUG_OMAP4UART3 | ||
101 | mov \rp, #UART_OFFSET(OMAP4_UART3_BASE) | ||
102 | b 98f | ||
103 | #endif | ||
104 | #ifdef CONFIG_DEBUG_OMAP3UART4 | ||
105 | mov \rp, #UART_OFFSET(OMAP3_UART1_BASE) | ||
92 | add \rp, \rp, #0x00fb0000 | 106 | add \rp, \rp, #0x00fb0000 |
93 | add \rp, \rp, #0x00028000 @ OMAP3_UART4_BASE | 107 | add \rp, \rp, #0x00028000 @ OMAP3_UART4_BASE |
94 | b 98f | 108 | b 98f |
95 | 43: mov \rp, #UART_OFFSET(OMAP4_UART3_BASE) | 109 | #endif |
96 | b 98f | 110 | #ifdef CONFIG_DEBUG_OMAP4UART4 |
97 | 44: mov \rp, #UART_OFFSET(OMAP4_UART4_BASE) | 111 | mov \rp, #UART_OFFSET(OMAP4_UART4_BASE) |
98 | b 98f | 112 | b 98f |
99 | 81: mov \rp, #UART_OFFSET(TI81XX_UART1_BASE) | 113 | #endif |
114 | #ifdef CONFIG_DEBUG_TI81XXUART1 | ||
115 | mov \rp, #UART_OFFSET(TI81XX_UART1_BASE) | ||
100 | b 98f | 116 | b 98f |
101 | 82: mov \rp, #UART_OFFSET(TI81XX_UART2_BASE) | 117 | #endif |
118 | #ifdef CONFIG_DEBUG_TI81XXUART2 | ||
119 | mov \rp, #UART_OFFSET(TI81XX_UART2_BASE) | ||
102 | b 98f | 120 | b 98f |
103 | 83: mov \rp, #UART_OFFSET(TI81XX_UART3_BASE) | 121 | #endif |
122 | #ifdef CONFIG_DEBUG_TI81XXUART3 | ||
123 | mov \rp, #UART_OFFSET(TI81XX_UART3_BASE) | ||
104 | b 98f | 124 | b 98f |
105 | 84: ldr \rp, =AM33XX_UART1_BASE | 125 | #endif |
126 | #ifdef CONFIG_DEBUG_AM33XXUART1 | ||
127 | ldr \rp, =AM33XX_UART1_BASE | ||
106 | and \rp, \rp, #0x00ffffff | 128 | and \rp, \rp, #0x00ffffff |
107 | b 97f | 129 | b 97f |
108 | 95: ldr \rp, =ZOOM_UART_BASE | 130 | #endif |
131 | #ifdef CONFIG_DEBUG_ZOOM_UART | ||
132 | ldr \rp, =ZOOM_UART_BASE | ||
109 | str \rp, [\tmp, #0] @ omap_uart_phys | 133 | str \rp, [\tmp, #0] @ omap_uart_phys |
110 | ldr \rp, =ZOOM_UART_VIRT | 134 | ldr \rp, =ZOOM_UART_VIRT |
111 | str \rp, [\tmp, #4] @ omap_uart_virt | 135 | str \rp, [\tmp, #4] @ omap_uart_virt |
112 | mov \rp, #(UART_LSR << ZOOM_PORT_SHIFT) | 136 | mov \rp, #(UART_LSR << ZOOM_PORT_SHIFT) |
113 | str \rp, [\tmp, #8] @ omap_uart_lsr | 137 | str \rp, [\tmp, #8] @ omap_uart_lsr |
138 | #endif | ||
114 | b 10b | 139 | b 10b |
115 | 140 | ||
116 | /* AM33XX: Store both phys and virt address for the uart */ | 141 | /* AM33XX: Store both phys and virt address for the uart */ |
diff --git a/arch/arm/include/uapi/asm/kvm.h b/arch/arm/include/uapi/asm/kvm.h new file mode 100644 index 000000000000..3303ff5adbf3 --- /dev/null +++ b/arch/arm/include/uapi/asm/kvm.h | |||
@@ -0,0 +1,164 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ARM_KVM_H__ | ||
20 | #define __ARM_KVM_H__ | ||
21 | |||
22 | #include <linux/types.h> | ||
23 | #include <asm/ptrace.h> | ||
24 | |||
25 | #define __KVM_HAVE_GUEST_DEBUG | ||
26 | #define __KVM_HAVE_IRQ_LINE | ||
27 | |||
28 | #define KVM_REG_SIZE(id) \ | ||
29 | (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT)) | ||
30 | |||
31 | /* Valid for svc_regs, abt_regs, und_regs, irq_regs in struct kvm_regs */ | ||
32 | #define KVM_ARM_SVC_sp svc_regs[0] | ||
33 | #define KVM_ARM_SVC_lr svc_regs[1] | ||
34 | #define KVM_ARM_SVC_spsr svc_regs[2] | ||
35 | #define KVM_ARM_ABT_sp abt_regs[0] | ||
36 | #define KVM_ARM_ABT_lr abt_regs[1] | ||
37 | #define KVM_ARM_ABT_spsr abt_regs[2] | ||
38 | #define KVM_ARM_UND_sp und_regs[0] | ||
39 | #define KVM_ARM_UND_lr und_regs[1] | ||
40 | #define KVM_ARM_UND_spsr und_regs[2] | ||
41 | #define KVM_ARM_IRQ_sp irq_regs[0] | ||
42 | #define KVM_ARM_IRQ_lr irq_regs[1] | ||
43 | #define KVM_ARM_IRQ_spsr irq_regs[2] | ||
44 | |||
45 | /* Valid only for fiq_regs in struct kvm_regs */ | ||
46 | #define KVM_ARM_FIQ_r8 fiq_regs[0] | ||
47 | #define KVM_ARM_FIQ_r9 fiq_regs[1] | ||
48 | #define KVM_ARM_FIQ_r10 fiq_regs[2] | ||
49 | #define KVM_ARM_FIQ_fp fiq_regs[3] | ||
50 | #define KVM_ARM_FIQ_ip fiq_regs[4] | ||
51 | #define KVM_ARM_FIQ_sp fiq_regs[5] | ||
52 | #define KVM_ARM_FIQ_lr fiq_regs[6] | ||
53 | #define KVM_ARM_FIQ_spsr fiq_regs[7] | ||
54 | |||
55 | struct kvm_regs { | ||
56 | struct pt_regs usr_regs;/* R0_usr - R14_usr, PC, CPSR */ | ||
57 | __u32 svc_regs[3]; /* SP_svc, LR_svc, SPSR_svc */ | ||
58 | __u32 abt_regs[3]; /* SP_abt, LR_abt, SPSR_abt */ | ||
59 | __u32 und_regs[3]; /* SP_und, LR_und, SPSR_und */ | ||
60 | __u32 irq_regs[3]; /* SP_irq, LR_irq, SPSR_irq */ | ||
61 | __u32 fiq_regs[8]; /* R8_fiq - R14_fiq, SPSR_fiq */ | ||
62 | }; | ||
63 | |||
64 | /* Supported Processor Types */ | ||
65 | #define KVM_ARM_TARGET_CORTEX_A15 0 | ||
66 | #define KVM_ARM_NUM_TARGETS 1 | ||
67 | |||
68 | #define KVM_ARM_VCPU_POWER_OFF 0 /* CPU is started in OFF state */ | ||
69 | |||
70 | struct kvm_vcpu_init { | ||
71 | __u32 target; | ||
72 | __u32 features[7]; | ||
73 | }; | ||
74 | |||
75 | struct kvm_sregs { | ||
76 | }; | ||
77 | |||
78 | struct kvm_fpu { | ||
79 | }; | ||
80 | |||
81 | struct kvm_guest_debug_arch { | ||
82 | }; | ||
83 | |||
84 | struct kvm_debug_exit_arch { | ||
85 | }; | ||
86 | |||
87 | struct kvm_sync_regs { | ||
88 | }; | ||
89 | |||
90 | struct kvm_arch_memory_slot { | ||
91 | }; | ||
92 | |||
93 | /* If you need to interpret the index values, here is the key: */ | ||
94 | #define KVM_REG_ARM_COPROC_MASK 0x000000000FFF0000 | ||
95 | #define KVM_REG_ARM_COPROC_SHIFT 16 | ||
96 | #define KVM_REG_ARM_32_OPC2_MASK 0x0000000000000007 | ||
97 | #define KVM_REG_ARM_32_OPC2_SHIFT 0 | ||
98 | #define KVM_REG_ARM_OPC1_MASK 0x0000000000000078 | ||
99 | #define KVM_REG_ARM_OPC1_SHIFT 3 | ||
100 | #define KVM_REG_ARM_CRM_MASK 0x0000000000000780 | ||
101 | #define KVM_REG_ARM_CRM_SHIFT 7 | ||
102 | #define KVM_REG_ARM_32_CRN_MASK 0x0000000000007800 | ||
103 | #define KVM_REG_ARM_32_CRN_SHIFT 11 | ||
104 | |||
105 | /* Normal registers are mapped as coprocessor 16. */ | ||
106 | #define KVM_REG_ARM_CORE (0x0010 << KVM_REG_ARM_COPROC_SHIFT) | ||
107 | #define KVM_REG_ARM_CORE_REG(name) (offsetof(struct kvm_regs, name) / 4) | ||
108 | |||
109 | /* Some registers need more space to represent values. */ | ||
110 | #define KVM_REG_ARM_DEMUX (0x0011 << KVM_REG_ARM_COPROC_SHIFT) | ||
111 | #define KVM_REG_ARM_DEMUX_ID_MASK 0x000000000000FF00 | ||
112 | #define KVM_REG_ARM_DEMUX_ID_SHIFT 8 | ||
113 | #define KVM_REG_ARM_DEMUX_ID_CCSIDR (0x00 << KVM_REG_ARM_DEMUX_ID_SHIFT) | ||
114 | #define KVM_REG_ARM_DEMUX_VAL_MASK 0x00000000000000FF | ||
115 | #define KVM_REG_ARM_DEMUX_VAL_SHIFT 0 | ||
116 | |||
117 | /* VFP registers: we could overload CP10 like ARM does, but that's ugly. */ | ||
118 | #define KVM_REG_ARM_VFP (0x0012 << KVM_REG_ARM_COPROC_SHIFT) | ||
119 | #define KVM_REG_ARM_VFP_MASK 0x000000000000FFFF | ||
120 | #define KVM_REG_ARM_VFP_BASE_REG 0x0 | ||
121 | #define KVM_REG_ARM_VFP_FPSID 0x1000 | ||
122 | #define KVM_REG_ARM_VFP_FPSCR 0x1001 | ||
123 | #define KVM_REG_ARM_VFP_MVFR1 0x1006 | ||
124 | #define KVM_REG_ARM_VFP_MVFR0 0x1007 | ||
125 | #define KVM_REG_ARM_VFP_FPEXC 0x1008 | ||
126 | #define KVM_REG_ARM_VFP_FPINST 0x1009 | ||
127 | #define KVM_REG_ARM_VFP_FPINST2 0x100A | ||
128 | |||
129 | |||
130 | /* KVM_IRQ_LINE irq field index values */ | ||
131 | #define KVM_ARM_IRQ_TYPE_SHIFT 24 | ||
132 | #define KVM_ARM_IRQ_TYPE_MASK 0xff | ||
133 | #define KVM_ARM_IRQ_VCPU_SHIFT 16 | ||
134 | #define KVM_ARM_IRQ_VCPU_MASK 0xff | ||
135 | #define KVM_ARM_IRQ_NUM_SHIFT 0 | ||
136 | #define KVM_ARM_IRQ_NUM_MASK 0xffff | ||
137 | |||
138 | /* irq_type field */ | ||
139 | #define KVM_ARM_IRQ_TYPE_CPU 0 | ||
140 | #define KVM_ARM_IRQ_TYPE_SPI 1 | ||
141 | #define KVM_ARM_IRQ_TYPE_PPI 2 | ||
142 | |||
143 | /* out-of-kernel GIC cpu interrupt injection irq_number field */ | ||
144 | #define KVM_ARM_IRQ_CPU_IRQ 0 | ||
145 | #define KVM_ARM_IRQ_CPU_FIQ 1 | ||
146 | |||
147 | /* Highest supported SPI, from VGIC_NR_IRQS */ | ||
148 | #define KVM_ARM_IRQ_GIC_MAX 127 | ||
149 | |||
150 | /* PSCI interface */ | ||
151 | #define KVM_PSCI_FN_BASE 0x95c1ba5e | ||
152 | #define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n)) | ||
153 | |||
154 | #define KVM_PSCI_FN_CPU_SUSPEND KVM_PSCI_FN(0) | ||
155 | #define KVM_PSCI_FN_CPU_OFF KVM_PSCI_FN(1) | ||
156 | #define KVM_PSCI_FN_CPU_ON KVM_PSCI_FN(2) | ||
157 | #define KVM_PSCI_FN_MIGRATE KVM_PSCI_FN(3) | ||
158 | |||
159 | #define KVM_PSCI_RET_SUCCESS 0 | ||
160 | #define KVM_PSCI_RET_NI ((unsigned long)-1) | ||
161 | #define KVM_PSCI_RET_INVAL ((unsigned long)-2) | ||
162 | #define KVM_PSCI_RET_DENIED ((unsigned long)-3) | ||
163 | |||
164 | #endif /* __ARM_KVM_H__ */ | ||
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index 5bbec7b8183e..5f3338eacad2 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile | |||
@@ -82,5 +82,6 @@ obj-$(CONFIG_DEBUG_LL) += debug.o | |||
82 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | 82 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o |
83 | 83 | ||
84 | obj-$(CONFIG_ARM_VIRT_EXT) += hyp-stub.o | 84 | obj-$(CONFIG_ARM_VIRT_EXT) += hyp-stub.o |
85 | obj-$(CONFIG_ARM_PSCI) += psci.o | ||
85 | 86 | ||
86 | extra-y := $(head-y) vmlinux.lds | 87 | extra-y := $(head-y) vmlinux.lds |
diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c index c985b481192c..c8b3272dfed1 100644 --- a/arch/arm/kernel/asm-offsets.c +++ b/arch/arm/kernel/asm-offsets.c | |||
@@ -13,6 +13,9 @@ | |||
13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
15 | #include <linux/dma-mapping.h> | 15 | #include <linux/dma-mapping.h> |
16 | #ifdef CONFIG_KVM_ARM_HOST | ||
17 | #include <linux/kvm_host.h> | ||
18 | #endif | ||
16 | #include <asm/cacheflush.h> | 19 | #include <asm/cacheflush.h> |
17 | #include <asm/glue-df.h> | 20 | #include <asm/glue-df.h> |
18 | #include <asm/glue-pf.h> | 21 | #include <asm/glue-pf.h> |
@@ -146,5 +149,27 @@ int main(void) | |||
146 | DEFINE(DMA_BIDIRECTIONAL, DMA_BIDIRECTIONAL); | 149 | DEFINE(DMA_BIDIRECTIONAL, DMA_BIDIRECTIONAL); |
147 | DEFINE(DMA_TO_DEVICE, DMA_TO_DEVICE); | 150 | DEFINE(DMA_TO_DEVICE, DMA_TO_DEVICE); |
148 | DEFINE(DMA_FROM_DEVICE, DMA_FROM_DEVICE); | 151 | DEFINE(DMA_FROM_DEVICE, DMA_FROM_DEVICE); |
152 | #ifdef CONFIG_KVM_ARM_HOST | ||
153 | DEFINE(VCPU_KVM, offsetof(struct kvm_vcpu, kvm)); | ||
154 | DEFINE(VCPU_MIDR, offsetof(struct kvm_vcpu, arch.midr)); | ||
155 | DEFINE(VCPU_CP15, offsetof(struct kvm_vcpu, arch.cp15)); | ||
156 | DEFINE(VCPU_VFP_GUEST, offsetof(struct kvm_vcpu, arch.vfp_guest)); | ||
157 | DEFINE(VCPU_VFP_HOST, offsetof(struct kvm_vcpu, arch.vfp_host)); | ||
158 | DEFINE(VCPU_REGS, offsetof(struct kvm_vcpu, arch.regs)); | ||
159 | DEFINE(VCPU_USR_REGS, offsetof(struct kvm_vcpu, arch.regs.usr_regs)); | ||
160 | DEFINE(VCPU_SVC_REGS, offsetof(struct kvm_vcpu, arch.regs.svc_regs)); | ||
161 | DEFINE(VCPU_ABT_REGS, offsetof(struct kvm_vcpu, arch.regs.abt_regs)); | ||
162 | DEFINE(VCPU_UND_REGS, offsetof(struct kvm_vcpu, arch.regs.und_regs)); | ||
163 | DEFINE(VCPU_IRQ_REGS, offsetof(struct kvm_vcpu, arch.regs.irq_regs)); | ||
164 | DEFINE(VCPU_FIQ_REGS, offsetof(struct kvm_vcpu, arch.regs.fiq_regs)); | ||
165 | DEFINE(VCPU_PC, offsetof(struct kvm_vcpu, arch.regs.usr_regs.ARM_pc)); | ||
166 | DEFINE(VCPU_CPSR, offsetof(struct kvm_vcpu, arch.regs.usr_regs.ARM_cpsr)); | ||
167 | DEFINE(VCPU_IRQ_LINES, offsetof(struct kvm_vcpu, arch.irq_lines)); | ||
168 | DEFINE(VCPU_HSR, offsetof(struct kvm_vcpu, arch.hsr)); | ||
169 | DEFINE(VCPU_HxFAR, offsetof(struct kvm_vcpu, arch.hxfar)); | ||
170 | DEFINE(VCPU_HPFAR, offsetof(struct kvm_vcpu, arch.hpfar)); | ||
171 | DEFINE(VCPU_HYP_PC, offsetof(struct kvm_vcpu, arch.hyp_pc)); | ||
172 | DEFINE(KVM_VTTBR, offsetof(struct kvm, arch.vttbr)); | ||
173 | #endif | ||
149 | return 0; | 174 | return 0; |
150 | } | 175 | } |
diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 379cf3292390..a1f73b502ef0 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c | |||
@@ -413,7 +413,7 @@ static int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | |||
413 | return irq; | 413 | return irq; |
414 | } | 414 | } |
415 | 415 | ||
416 | static int __init pcibios_init_resources(int busnr, struct pci_sys_data *sys) | 416 | static int pcibios_init_resources(int busnr, struct pci_sys_data *sys) |
417 | { | 417 | { |
418 | int ret; | 418 | int ret; |
419 | struct pci_host_bridge_window *window; | 419 | struct pci_host_bridge_window *window; |
@@ -445,7 +445,7 @@ static int __init pcibios_init_resources(int busnr, struct pci_sys_data *sys) | |||
445 | return 0; | 445 | return 0; |
446 | } | 446 | } |
447 | 447 | ||
448 | static void __init pcibios_init_hw(struct hw_pci *hw, struct list_head *head) | 448 | static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head) |
449 | { | 449 | { |
450 | struct pci_sys_data *sys = NULL; | 450 | struct pci_sys_data *sys = NULL; |
451 | int ret; | 451 | int ret; |
@@ -464,6 +464,9 @@ static void __init pcibios_init_hw(struct hw_pci *hw, struct list_head *head) | |||
464 | sys->map_irq = hw->map_irq; | 464 | sys->map_irq = hw->map_irq; |
465 | INIT_LIST_HEAD(&sys->resources); | 465 | INIT_LIST_HEAD(&sys->resources); |
466 | 466 | ||
467 | if (hw->private_data) | ||
468 | sys->private_data = hw->private_data[nr]; | ||
469 | |||
467 | ret = hw->setup(nr, sys); | 470 | ret = hw->setup(nr, sys); |
468 | 471 | ||
469 | if (ret > 0) { | 472 | if (ret > 0) { |
@@ -493,7 +496,7 @@ static void __init pcibios_init_hw(struct hw_pci *hw, struct list_head *head) | |||
493 | } | 496 | } |
494 | } | 497 | } |
495 | 498 | ||
496 | void __init pci_common_init(struct hw_pci *hw) | 499 | void pci_common_init(struct hw_pci *hw) |
497 | { | 500 | { |
498 | struct pci_sys_data *sys; | 501 | struct pci_sys_data *sys; |
499 | LIST_HEAD(head); | 502 | LIST_HEAD(head); |
diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c index 5ff2e77782b1..5eae53e7a2e1 100644 --- a/arch/arm/kernel/hw_breakpoint.c +++ b/arch/arm/kernel/hw_breakpoint.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/perf_event.h> | 28 | #include <linux/perf_event.h> |
29 | #include <linux/hw_breakpoint.h> | 29 | #include <linux/hw_breakpoint.h> |
30 | #include <linux/smp.h> | 30 | #include <linux/smp.h> |
31 | #include <linux/cpu_pm.h> | ||
31 | 32 | ||
32 | #include <asm/cacheflush.h> | 33 | #include <asm/cacheflush.h> |
33 | #include <asm/cputype.h> | 34 | #include <asm/cputype.h> |
@@ -35,6 +36,7 @@ | |||
35 | #include <asm/hw_breakpoint.h> | 36 | #include <asm/hw_breakpoint.h> |
36 | #include <asm/kdebug.h> | 37 | #include <asm/kdebug.h> |
37 | #include <asm/traps.h> | 38 | #include <asm/traps.h> |
39 | #include <asm/hardware/coresight.h> | ||
38 | 40 | ||
39 | /* Breakpoint currently in use for each BRP. */ | 41 | /* Breakpoint currently in use for each BRP. */ |
40 | static DEFINE_PER_CPU(struct perf_event *, bp_on_reg[ARM_MAX_BRP]); | 42 | static DEFINE_PER_CPU(struct perf_event *, bp_on_reg[ARM_MAX_BRP]); |
@@ -49,6 +51,9 @@ static int core_num_wrps; | |||
49 | /* Debug architecture version. */ | 51 | /* Debug architecture version. */ |
50 | static u8 debug_arch; | 52 | static u8 debug_arch; |
51 | 53 | ||
54 | /* Does debug architecture support OS Save and Restore? */ | ||
55 | static bool has_ossr; | ||
56 | |||
52 | /* Maximum supported watchpoint length. */ | 57 | /* Maximum supported watchpoint length. */ |
53 | static u8 max_watchpoint_len; | 58 | static u8 max_watchpoint_len; |
54 | 59 | ||
@@ -903,6 +908,23 @@ static struct undef_hook debug_reg_hook = { | |||
903 | .fn = debug_reg_trap, | 908 | .fn = debug_reg_trap, |
904 | }; | 909 | }; |
905 | 910 | ||
911 | /* Does this core support OS Save and Restore? */ | ||
912 | static bool core_has_os_save_restore(void) | ||
913 | { | ||
914 | u32 oslsr; | ||
915 | |||
916 | switch (get_debug_arch()) { | ||
917 | case ARM_DEBUG_ARCH_V7_1: | ||
918 | return true; | ||
919 | case ARM_DEBUG_ARCH_V7_ECP14: | ||
920 | ARM_DBG_READ(c1, c1, 4, oslsr); | ||
921 | if (oslsr & ARM_OSLSR_OSLM0) | ||
922 | return true; | ||
923 | default: | ||
924 | return false; | ||
925 | } | ||
926 | } | ||
927 | |||
906 | static void reset_ctrl_regs(void *unused) | 928 | static void reset_ctrl_regs(void *unused) |
907 | { | 929 | { |
908 | int i, raw_num_brps, err = 0, cpu = smp_processor_id(); | 930 | int i, raw_num_brps, err = 0, cpu = smp_processor_id(); |
@@ -930,11 +952,7 @@ static void reset_ctrl_regs(void *unused) | |||
930 | if ((val & 0x1) == 0) | 952 | if ((val & 0x1) == 0) |
931 | err = -EPERM; | 953 | err = -EPERM; |
932 | 954 | ||
933 | /* | 955 | if (!has_ossr) |
934 | * Check whether we implement OS save and restore. | ||
935 | */ | ||
936 | ARM_DBG_READ(c1, c1, 4, val); | ||
937 | if ((val & 0x9) == 0) | ||
938 | goto clear_vcr; | 956 | goto clear_vcr; |
939 | break; | 957 | break; |
940 | case ARM_DEBUG_ARCH_V7_1: | 958 | case ARM_DEBUG_ARCH_V7_1: |
@@ -955,9 +973,9 @@ static void reset_ctrl_regs(void *unused) | |||
955 | 973 | ||
956 | /* | 974 | /* |
957 | * Unconditionally clear the OS lock by writing a value | 975 | * Unconditionally clear the OS lock by writing a value |
958 | * other than 0xC5ACCE55 to the access register. | 976 | * other than CS_LAR_KEY to the access register. |
959 | */ | 977 | */ |
960 | ARM_DBG_WRITE(c1, c0, 4, 0); | 978 | ARM_DBG_WRITE(c1, c0, 4, ~CS_LAR_KEY); |
961 | isb(); | 979 | isb(); |
962 | 980 | ||
963 | /* | 981 | /* |
@@ -1015,6 +1033,30 @@ static struct notifier_block __cpuinitdata dbg_reset_nb = { | |||
1015 | .notifier_call = dbg_reset_notify, | 1033 | .notifier_call = dbg_reset_notify, |
1016 | }; | 1034 | }; |
1017 | 1035 | ||
1036 | #ifdef CONFIG_CPU_PM | ||
1037 | static int dbg_cpu_pm_notify(struct notifier_block *self, unsigned long action, | ||
1038 | void *v) | ||
1039 | { | ||
1040 | if (action == CPU_PM_EXIT) | ||
1041 | reset_ctrl_regs(NULL); | ||
1042 | |||
1043 | return NOTIFY_OK; | ||
1044 | } | ||
1045 | |||
1046 | static struct notifier_block __cpuinitdata dbg_cpu_pm_nb = { | ||
1047 | .notifier_call = dbg_cpu_pm_notify, | ||
1048 | }; | ||
1049 | |||
1050 | static void __init pm_init(void) | ||
1051 | { | ||
1052 | cpu_pm_register_notifier(&dbg_cpu_pm_nb); | ||
1053 | } | ||
1054 | #else | ||
1055 | static inline void pm_init(void) | ||
1056 | { | ||
1057 | } | ||
1058 | #endif | ||
1059 | |||
1018 | static int __init arch_hw_breakpoint_init(void) | 1060 | static int __init arch_hw_breakpoint_init(void) |
1019 | { | 1061 | { |
1020 | debug_arch = get_debug_arch(); | 1062 | debug_arch = get_debug_arch(); |
@@ -1024,6 +1066,8 @@ static int __init arch_hw_breakpoint_init(void) | |||
1024 | return 0; | 1066 | return 0; |
1025 | } | 1067 | } |
1026 | 1068 | ||
1069 | has_ossr = core_has_os_save_restore(); | ||
1070 | |||
1027 | /* Determine how many BRPs/WRPs are available. */ | 1071 | /* Determine how many BRPs/WRPs are available. */ |
1028 | core_num_brps = get_num_brps(); | 1072 | core_num_brps = get_num_brps(); |
1029 | core_num_wrps = get_num_wrps(); | 1073 | core_num_wrps = get_num_wrps(); |
@@ -1062,8 +1106,9 @@ static int __init arch_hw_breakpoint_init(void) | |||
1062 | hook_ifault_code(FAULT_CODE_DEBUG, hw_breakpoint_pending, SIGTRAP, | 1106 | hook_ifault_code(FAULT_CODE_DEBUG, hw_breakpoint_pending, SIGTRAP, |
1063 | TRAP_HWBKPT, "breakpoint debug exception"); | 1107 | TRAP_HWBKPT, "breakpoint debug exception"); |
1064 | 1108 | ||
1065 | /* Register hotplug notifier. */ | 1109 | /* Register hotplug and PM notifiers. */ |
1066 | register_cpu_notifier(&dbg_reset_nb); | 1110 | register_cpu_notifier(&dbg_reset_nb); |
1111 | pm_init(); | ||
1067 | return 0; | 1112 | return 0; |
1068 | } | 1113 | } |
1069 | arch_initcall(arch_hw_breakpoint_init); | 1114 | arch_initcall(arch_hw_breakpoint_init); |
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index c6dec5fc20aa..047d3e40e470 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -172,14 +172,9 @@ static void default_idle(void) | |||
172 | local_irq_enable(); | 172 | local_irq_enable(); |
173 | } | 173 | } |
174 | 174 | ||
175 | void (*pm_idle)(void) = default_idle; | ||
176 | EXPORT_SYMBOL(pm_idle); | ||
177 | |||
178 | /* | 175 | /* |
179 | * The idle thread, has rather strange semantics for calling pm_idle, | 176 | * The idle thread. |
180 | * but this is what x86 does and we need to do the same, so that | 177 | * We always respect 'hlt_counter' to prevent low power idle. |
181 | * things like cpuidle get called in the same way. The only difference | ||
182 | * is that we always respect 'hlt_counter' to prevent low power idle. | ||
183 | */ | 178 | */ |
184 | void cpu_idle(void) | 179 | void cpu_idle(void) |
185 | { | 180 | { |
@@ -210,10 +205,10 @@ void cpu_idle(void) | |||
210 | } else if (!need_resched()) { | 205 | } else if (!need_resched()) { |
211 | stop_critical_timings(); | 206 | stop_critical_timings(); |
212 | if (cpuidle_idle_call()) | 207 | if (cpuidle_idle_call()) |
213 | pm_idle(); | 208 | default_idle(); |
214 | start_critical_timings(); | 209 | start_critical_timings(); |
215 | /* | 210 | /* |
216 | * pm_idle functions must always | 211 | * default_idle functions must always |
217 | * return with IRQs enabled. | 212 | * return with IRQs enabled. |
218 | */ | 213 | */ |
219 | WARN_ON(irqs_disabled()); | 214 | WARN_ON(irqs_disabled()); |
diff --git a/arch/arm/kernel/psci.c b/arch/arm/kernel/psci.c new file mode 100644 index 000000000000..36531643cc2c --- /dev/null +++ b/arch/arm/kernel/psci.c | |||
@@ -0,0 +1,211 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License version 2 as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * This program is distributed in the hope that it will be useful, | ||
7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
9 | * GNU General Public License for more details. | ||
10 | * | ||
11 | * Copyright (C) 2012 ARM Limited | ||
12 | * | ||
13 | * Author: Will Deacon <will.deacon@arm.com> | ||
14 | */ | ||
15 | |||
16 | #define pr_fmt(fmt) "psci: " fmt | ||
17 | |||
18 | #include <linux/init.h> | ||
19 | #include <linux/of.h> | ||
20 | |||
21 | #include <asm/compiler.h> | ||
22 | #include <asm/errno.h> | ||
23 | #include <asm/opcodes-sec.h> | ||
24 | #include <asm/opcodes-virt.h> | ||
25 | #include <asm/psci.h> | ||
26 | |||
27 | struct psci_operations psci_ops; | ||
28 | |||
29 | static int (*invoke_psci_fn)(u32, u32, u32, u32); | ||
30 | |||
31 | enum psci_function { | ||
32 | PSCI_FN_CPU_SUSPEND, | ||
33 | PSCI_FN_CPU_ON, | ||
34 | PSCI_FN_CPU_OFF, | ||
35 | PSCI_FN_MIGRATE, | ||
36 | PSCI_FN_MAX, | ||
37 | }; | ||
38 | |||
39 | static u32 psci_function_id[PSCI_FN_MAX]; | ||
40 | |||
41 | #define PSCI_RET_SUCCESS 0 | ||
42 | #define PSCI_RET_EOPNOTSUPP -1 | ||
43 | #define PSCI_RET_EINVAL -2 | ||
44 | #define PSCI_RET_EPERM -3 | ||
45 | |||
46 | static int psci_to_linux_errno(int errno) | ||
47 | { | ||
48 | switch (errno) { | ||
49 | case PSCI_RET_SUCCESS: | ||
50 | return 0; | ||
51 | case PSCI_RET_EOPNOTSUPP: | ||
52 | return -EOPNOTSUPP; | ||
53 | case PSCI_RET_EINVAL: | ||
54 | return -EINVAL; | ||
55 | case PSCI_RET_EPERM: | ||
56 | return -EPERM; | ||
57 | }; | ||
58 | |||
59 | return -EINVAL; | ||
60 | } | ||
61 | |||
62 | #define PSCI_POWER_STATE_ID_MASK 0xffff | ||
63 | #define PSCI_POWER_STATE_ID_SHIFT 0 | ||
64 | #define PSCI_POWER_STATE_TYPE_MASK 0x1 | ||
65 | #define PSCI_POWER_STATE_TYPE_SHIFT 16 | ||
66 | #define PSCI_POWER_STATE_AFFL_MASK 0x3 | ||
67 | #define PSCI_POWER_STATE_AFFL_SHIFT 24 | ||
68 | |||
69 | static u32 psci_power_state_pack(struct psci_power_state state) | ||
70 | { | ||
71 | return ((state.id & PSCI_POWER_STATE_ID_MASK) | ||
72 | << PSCI_POWER_STATE_ID_SHIFT) | | ||
73 | ((state.type & PSCI_POWER_STATE_TYPE_MASK) | ||
74 | << PSCI_POWER_STATE_TYPE_SHIFT) | | ||
75 | ((state.affinity_level & PSCI_POWER_STATE_AFFL_MASK) | ||
76 | << PSCI_POWER_STATE_AFFL_SHIFT); | ||
77 | } | ||
78 | |||
79 | /* | ||
80 | * The following two functions are invoked via the invoke_psci_fn pointer | ||
81 | * and will not be inlined, allowing us to piggyback on the AAPCS. | ||
82 | */ | ||
83 | static noinline int __invoke_psci_fn_hvc(u32 function_id, u32 arg0, u32 arg1, | ||
84 | u32 arg2) | ||
85 | { | ||
86 | asm volatile( | ||
87 | __asmeq("%0", "r0") | ||
88 | __asmeq("%1", "r1") | ||
89 | __asmeq("%2", "r2") | ||
90 | __asmeq("%3", "r3") | ||
91 | __HVC(0) | ||
92 | : "+r" (function_id) | ||
93 | : "r" (arg0), "r" (arg1), "r" (arg2)); | ||
94 | |||
95 | return function_id; | ||
96 | } | ||
97 | |||
98 | static noinline int __invoke_psci_fn_smc(u32 function_id, u32 arg0, u32 arg1, | ||
99 | u32 arg2) | ||
100 | { | ||
101 | asm volatile( | ||
102 | __asmeq("%0", "r0") | ||
103 | __asmeq("%1", "r1") | ||
104 | __asmeq("%2", "r2") | ||
105 | __asmeq("%3", "r3") | ||
106 | __SMC(0) | ||
107 | : "+r" (function_id) | ||
108 | : "r" (arg0), "r" (arg1), "r" (arg2)); | ||
109 | |||
110 | return function_id; | ||
111 | } | ||
112 | |||
113 | static int psci_cpu_suspend(struct psci_power_state state, | ||
114 | unsigned long entry_point) | ||
115 | { | ||
116 | int err; | ||
117 | u32 fn, power_state; | ||
118 | |||
119 | fn = psci_function_id[PSCI_FN_CPU_SUSPEND]; | ||
120 | power_state = psci_power_state_pack(state); | ||
121 | err = invoke_psci_fn(fn, power_state, entry_point, 0); | ||
122 | return psci_to_linux_errno(err); | ||
123 | } | ||
124 | |||
125 | static int psci_cpu_off(struct psci_power_state state) | ||
126 | { | ||
127 | int err; | ||
128 | u32 fn, power_state; | ||
129 | |||
130 | fn = psci_function_id[PSCI_FN_CPU_OFF]; | ||
131 | power_state = psci_power_state_pack(state); | ||
132 | err = invoke_psci_fn(fn, power_state, 0, 0); | ||
133 | return psci_to_linux_errno(err); | ||
134 | } | ||
135 | |||
136 | static int psci_cpu_on(unsigned long cpuid, unsigned long entry_point) | ||
137 | { | ||
138 | int err; | ||
139 | u32 fn; | ||
140 | |||
141 | fn = psci_function_id[PSCI_FN_CPU_ON]; | ||
142 | err = invoke_psci_fn(fn, cpuid, entry_point, 0); | ||
143 | return psci_to_linux_errno(err); | ||
144 | } | ||
145 | |||
146 | static int psci_migrate(unsigned long cpuid) | ||
147 | { | ||
148 | int err; | ||
149 | u32 fn; | ||
150 | |||
151 | fn = psci_function_id[PSCI_FN_MIGRATE]; | ||
152 | err = invoke_psci_fn(fn, cpuid, 0, 0); | ||
153 | return psci_to_linux_errno(err); | ||
154 | } | ||
155 | |||
156 | static const struct of_device_id psci_of_match[] __initconst = { | ||
157 | { .compatible = "arm,psci", }, | ||
158 | {}, | ||
159 | }; | ||
160 | |||
161 | static int __init psci_init(void) | ||
162 | { | ||
163 | struct device_node *np; | ||
164 | const char *method; | ||
165 | u32 id; | ||
166 | |||
167 | np = of_find_matching_node(NULL, psci_of_match); | ||
168 | if (!np) | ||
169 | return 0; | ||
170 | |||
171 | pr_info("probing function IDs from device-tree\n"); | ||
172 | |||
173 | if (of_property_read_string(np, "method", &method)) { | ||
174 | pr_warning("missing \"method\" property\n"); | ||
175 | goto out_put_node; | ||
176 | } | ||
177 | |||
178 | if (!strcmp("hvc", method)) { | ||
179 | invoke_psci_fn = __invoke_psci_fn_hvc; | ||
180 | } else if (!strcmp("smc", method)) { | ||
181 | invoke_psci_fn = __invoke_psci_fn_smc; | ||
182 | } else { | ||
183 | pr_warning("invalid \"method\" property: %s\n", method); | ||
184 | goto out_put_node; | ||
185 | } | ||
186 | |||
187 | if (!of_property_read_u32(np, "cpu_suspend", &id)) { | ||
188 | psci_function_id[PSCI_FN_CPU_SUSPEND] = id; | ||
189 | psci_ops.cpu_suspend = psci_cpu_suspend; | ||
190 | } | ||
191 | |||
192 | if (!of_property_read_u32(np, "cpu_off", &id)) { | ||
193 | psci_function_id[PSCI_FN_CPU_OFF] = id; | ||
194 | psci_ops.cpu_off = psci_cpu_off; | ||
195 | } | ||
196 | |||
197 | if (!of_property_read_u32(np, "cpu_on", &id)) { | ||
198 | psci_function_id[PSCI_FN_CPU_ON] = id; | ||
199 | psci_ops.cpu_on = psci_cpu_on; | ||
200 | } | ||
201 | |||
202 | if (!of_property_read_u32(np, "migrate", &id)) { | ||
203 | psci_function_id[PSCI_FN_MIGRATE] = id; | ||
204 | psci_ops.migrate = psci_migrate; | ||
205 | } | ||
206 | |||
207 | out_put_node: | ||
208 | of_node_put(np); | ||
209 | return 0; | ||
210 | } | ||
211 | early_initcall(psci_init); | ||
diff --git a/arch/arm/kernel/sched_clock.c b/arch/arm/kernel/sched_clock.c index fc6692e2b603..bd6f56b9ec21 100644 --- a/arch/arm/kernel/sched_clock.c +++ b/arch/arm/kernel/sched_clock.c | |||
@@ -93,11 +93,11 @@ static void notrace update_sched_clock(void) | |||
93 | * detectable in cyc_to_fixed_sched_clock(). | 93 | * detectable in cyc_to_fixed_sched_clock(). |
94 | */ | 94 | */ |
95 | raw_local_irq_save(flags); | 95 | raw_local_irq_save(flags); |
96 | cd.epoch_cyc = cyc; | 96 | cd.epoch_cyc_copy = cyc; |
97 | smp_wmb(); | 97 | smp_wmb(); |
98 | cd.epoch_ns = ns; | 98 | cd.epoch_ns = ns; |
99 | smp_wmb(); | 99 | smp_wmb(); |
100 | cd.epoch_cyc_copy = cyc; | 100 | cd.epoch_cyc = cyc; |
101 | raw_local_irq_restore(flags); | 101 | raw_local_irq_restore(flags); |
102 | } | 102 | } |
103 | 103 | ||
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 3fc96db2a4b6..60340fa561d4 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -125,18 +125,6 @@ void __init smp_init_cpus(void) | |||
125 | smp_ops.smp_init_cpus(); | 125 | smp_ops.smp_init_cpus(); |
126 | } | 126 | } |
127 | 127 | ||
128 | static void __init platform_smp_prepare_cpus(unsigned int max_cpus) | ||
129 | { | ||
130 | if (smp_ops.smp_prepare_cpus) | ||
131 | smp_ops.smp_prepare_cpus(max_cpus); | ||
132 | } | ||
133 | |||
134 | static void __cpuinit platform_secondary_init(unsigned int cpu) | ||
135 | { | ||
136 | if (smp_ops.smp_secondary_init) | ||
137 | smp_ops.smp_secondary_init(cpu); | ||
138 | } | ||
139 | |||
140 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | 128 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) |
141 | { | 129 | { |
142 | if (smp_ops.smp_boot_secondary) | 130 | if (smp_ops.smp_boot_secondary) |
@@ -154,12 +142,6 @@ static int platform_cpu_kill(unsigned int cpu) | |||
154 | return 1; | 142 | return 1; |
155 | } | 143 | } |
156 | 144 | ||
157 | static void platform_cpu_die(unsigned int cpu) | ||
158 | { | ||
159 | if (smp_ops.cpu_die) | ||
160 | smp_ops.cpu_die(cpu); | ||
161 | } | ||
162 | |||
163 | static int platform_cpu_disable(unsigned int cpu) | 145 | static int platform_cpu_disable(unsigned int cpu) |
164 | { | 146 | { |
165 | if (smp_ops.cpu_disable) | 147 | if (smp_ops.cpu_disable) |
@@ -257,7 +239,8 @@ void __ref cpu_die(void) | |||
257 | * actual CPU shutdown procedure is at least platform (if not | 239 | * actual CPU shutdown procedure is at least platform (if not |
258 | * CPU) specific. | 240 | * CPU) specific. |
259 | */ | 241 | */ |
260 | platform_cpu_die(cpu); | 242 | if (smp_ops.cpu_die) |
243 | smp_ops.cpu_die(cpu); | ||
261 | 244 | ||
262 | /* | 245 | /* |
263 | * Do not return to the idle loop - jump back to the secondary | 246 | * Do not return to the idle loop - jump back to the secondary |
@@ -324,7 +307,8 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
324 | /* | 307 | /* |
325 | * Give the platform a chance to do its own initialisation. | 308 | * Give the platform a chance to do its own initialisation. |
326 | */ | 309 | */ |
327 | platform_secondary_init(cpu); | 310 | if (smp_ops.smp_secondary_init) |
311 | smp_ops.smp_secondary_init(cpu); | ||
328 | 312 | ||
329 | notify_cpu_starting(cpu); | 313 | notify_cpu_starting(cpu); |
330 | 314 | ||
@@ -399,8 +383,8 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
399 | /* | 383 | /* |
400 | * Initialise the present map, which describes the set of CPUs | 384 | * Initialise the present map, which describes the set of CPUs |
401 | * actually populated at the present time. A platform should | 385 | * actually populated at the present time. A platform should |
402 | * re-initialize the map in platform_smp_prepare_cpus() if | 386 | * re-initialize the map in the platforms smp_prepare_cpus() |
403 | * present != possible (e.g. physical hotplug). | 387 | * if present != possible (e.g. physical hotplug). |
404 | */ | 388 | */ |
405 | init_cpu_present(cpu_possible_mask); | 389 | init_cpu_present(cpu_possible_mask); |
406 | 390 | ||
@@ -408,7 +392,8 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
408 | * Initialise the SCU if there are more than one CPU | 392 | * Initialise the SCU if there are more than one CPU |
409 | * and let them know where to start. | 393 | * and let them know where to start. |
410 | */ | 394 | */ |
411 | platform_smp_prepare_cpus(max_cpus); | 395 | if (smp_ops.smp_prepare_cpus) |
396 | smp_ops.smp_prepare_cpus(max_cpus); | ||
412 | } | 397 | } |
413 | } | 398 | } |
414 | 399 | ||
diff --git a/arch/arm/kernel/smp_scu.c b/arch/arm/kernel/smp_scu.c index b9f015e843d8..45eac87ed66a 100644 --- a/arch/arm/kernel/smp_scu.c +++ b/arch/arm/kernel/smp_scu.c | |||
@@ -75,7 +75,7 @@ void scu_enable(void __iomem *scu_base) | |||
75 | int scu_power_mode(void __iomem *scu_base, unsigned int mode) | 75 | int scu_power_mode(void __iomem *scu_base, unsigned int mode) |
76 | { | 76 | { |
77 | unsigned int val; | 77 | unsigned int val; |
78 | int cpu = cpu_logical_map(smp_processor_id()); | 78 | int cpu = MPIDR_AFFINITY_LEVEL(cpu_logical_map(smp_processor_id()), 0); |
79 | 79 | ||
80 | if (mode > 3 || mode == 1 || cpu > 3) | 80 | if (mode > 3 || mode == 1 || cpu > 3) |
81 | return -EINVAL; | 81 | return -EINVAL; |
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index dc9bb0146665..c092115d903a 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
@@ -30,7 +30,6 @@ static void __iomem *twd_base; | |||
30 | 30 | ||
31 | static struct clk *twd_clk; | 31 | static struct clk *twd_clk; |
32 | static unsigned long twd_timer_rate; | 32 | static unsigned long twd_timer_rate; |
33 | static bool common_setup_called; | ||
34 | static DEFINE_PER_CPU(bool, percpu_setup_called); | 33 | static DEFINE_PER_CPU(bool, percpu_setup_called); |
35 | 34 | ||
36 | static struct clock_event_device __percpu **twd_evt; | 35 | static struct clock_event_device __percpu **twd_evt; |
@@ -238,25 +237,28 @@ static irqreturn_t twd_handler(int irq, void *dev_id) | |||
238 | return IRQ_NONE; | 237 | return IRQ_NONE; |
239 | } | 238 | } |
240 | 239 | ||
241 | static struct clk *twd_get_clock(void) | 240 | static void twd_get_clock(struct device_node *np) |
242 | { | 241 | { |
243 | struct clk *clk; | ||
244 | int err; | 242 | int err; |
245 | 243 | ||
246 | clk = clk_get_sys("smp_twd", NULL); | 244 | if (np) |
247 | if (IS_ERR(clk)) { | 245 | twd_clk = of_clk_get(np, 0); |
248 | pr_err("smp_twd: clock not found: %d\n", (int)PTR_ERR(clk)); | 246 | else |
249 | return clk; | 247 | twd_clk = clk_get_sys("smp_twd", NULL); |
248 | |||
249 | if (IS_ERR(twd_clk)) { | ||
250 | pr_err("smp_twd: clock not found %d\n", (int) PTR_ERR(twd_clk)); | ||
251 | return; | ||
250 | } | 252 | } |
251 | 253 | ||
252 | err = clk_prepare_enable(clk); | 254 | err = clk_prepare_enable(twd_clk); |
253 | if (err) { | 255 | if (err) { |
254 | pr_err("smp_twd: clock failed to prepare+enable: %d\n", err); | 256 | pr_err("smp_twd: clock failed to prepare+enable: %d\n", err); |
255 | clk_put(clk); | 257 | clk_put(twd_clk); |
256 | return ERR_PTR(err); | 258 | return; |
257 | } | 259 | } |
258 | 260 | ||
259 | return clk; | 261 | twd_timer_rate = clk_get_rate(twd_clk); |
260 | } | 262 | } |
261 | 263 | ||
262 | /* | 264 | /* |
@@ -279,26 +281,7 @@ static int __cpuinit twd_timer_setup(struct clock_event_device *clk) | |||
279 | } | 281 | } |
280 | per_cpu(percpu_setup_called, cpu) = true; | 282 | per_cpu(percpu_setup_called, cpu) = true; |
281 | 283 | ||
282 | /* | 284 | twd_calibrate_rate(); |
283 | * This stuff only need to be done once for the entire TWD cluster | ||
284 | * during the runtime of the system. | ||
285 | */ | ||
286 | if (!common_setup_called) { | ||
287 | twd_clk = twd_get_clock(); | ||
288 | |||
289 | /* | ||
290 | * We use IS_ERR_OR_NULL() here, because if the clock stubs | ||
291 | * are active we will get a valid clk reference which is | ||
292 | * however NULL and will return the rate 0. In that case we | ||
293 | * need to calibrate the rate instead. | ||
294 | */ | ||
295 | if (!IS_ERR_OR_NULL(twd_clk)) | ||
296 | twd_timer_rate = clk_get_rate(twd_clk); | ||
297 | else | ||
298 | twd_calibrate_rate(); | ||
299 | |||
300 | common_setup_called = true; | ||
301 | } | ||
302 | 285 | ||
303 | /* | 286 | /* |
304 | * The following is done once per CPU the first time .setup() is | 287 | * The following is done once per CPU the first time .setup() is |
@@ -329,7 +312,7 @@ static struct local_timer_ops twd_lt_ops __cpuinitdata = { | |||
329 | .stop = twd_timer_stop, | 312 | .stop = twd_timer_stop, |
330 | }; | 313 | }; |
331 | 314 | ||
332 | static int __init twd_local_timer_common_register(void) | 315 | static int __init twd_local_timer_common_register(struct device_node *np) |
333 | { | 316 | { |
334 | int err; | 317 | int err; |
335 | 318 | ||
@@ -349,6 +332,8 @@ static int __init twd_local_timer_common_register(void) | |||
349 | if (err) | 332 | if (err) |
350 | goto out_irq; | 333 | goto out_irq; |
351 | 334 | ||
335 | twd_get_clock(np); | ||
336 | |||
352 | return 0; | 337 | return 0; |
353 | 338 | ||
354 | out_irq: | 339 | out_irq: |
@@ -372,7 +357,7 @@ int __init twd_local_timer_register(struct twd_local_timer *tlt) | |||
372 | if (!twd_base) | 357 | if (!twd_base) |
373 | return -ENOMEM; | 358 | return -ENOMEM; |
374 | 359 | ||
375 | return twd_local_timer_common_register(); | 360 | return twd_local_timer_common_register(NULL); |
376 | } | 361 | } |
377 | 362 | ||
378 | #ifdef CONFIG_OF | 363 | #ifdef CONFIG_OF |
@@ -404,7 +389,7 @@ void __init twd_local_timer_of_register(void) | |||
404 | goto out; | 389 | goto out; |
405 | } | 390 | } |
406 | 391 | ||
407 | err = twd_local_timer_common_register(); | 392 | err = twd_local_timer_common_register(np); |
408 | 393 | ||
409 | out: | 394 | out: |
410 | WARN(err, "twd_local_timer_of_register failed (%d)\n", err); | 395 | WARN(err, "twd_local_timer_of_register failed (%d)\n", err); |
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 11c1785bf63e..b571484e9f03 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
@@ -19,7 +19,11 @@ | |||
19 | ALIGN_FUNCTION(); \ | 19 | ALIGN_FUNCTION(); \ |
20 | VMLINUX_SYMBOL(__idmap_text_start) = .; \ | 20 | VMLINUX_SYMBOL(__idmap_text_start) = .; \ |
21 | *(.idmap.text) \ | 21 | *(.idmap.text) \ |
22 | VMLINUX_SYMBOL(__idmap_text_end) = .; | 22 | VMLINUX_SYMBOL(__idmap_text_end) = .; \ |
23 | ALIGN_FUNCTION(); \ | ||
24 | VMLINUX_SYMBOL(__hyp_idmap_text_start) = .; \ | ||
25 | *(.hyp.idmap.text) \ | ||
26 | VMLINUX_SYMBOL(__hyp_idmap_text_end) = .; | ||
23 | 27 | ||
24 | #ifdef CONFIG_HOTPLUG_CPU | 28 | #ifdef CONFIG_HOTPLUG_CPU |
25 | #define ARM_CPU_DISCARD(x) | 29 | #define ARM_CPU_DISCARD(x) |
diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig new file mode 100644 index 000000000000..05227cb57a7b --- /dev/null +++ b/arch/arm/kvm/Kconfig | |||
@@ -0,0 +1,56 @@ | |||
1 | # | ||
2 | # KVM configuration | ||
3 | # | ||
4 | |||
5 | source "virt/kvm/Kconfig" | ||
6 | |||
7 | menuconfig VIRTUALIZATION | ||
8 | bool "Virtualization" | ||
9 | ---help--- | ||
10 | Say Y here to get to see options for using your Linux host to run | ||
11 | other operating systems inside virtual machines (guests). | ||
12 | This option alone does not add any kernel code. | ||
13 | |||
14 | If you say N, all options in this submenu will be skipped and | ||
15 | disabled. | ||
16 | |||
17 | if VIRTUALIZATION | ||
18 | |||
19 | config KVM | ||
20 | bool "Kernel-based Virtual Machine (KVM) support" | ||
21 | select PREEMPT_NOTIFIERS | ||
22 | select ANON_INODES | ||
23 | select KVM_MMIO | ||
24 | select KVM_ARM_HOST | ||
25 | depends on ARM_VIRT_EXT && ARM_LPAE | ||
26 | ---help--- | ||
27 | Support hosting virtualized guest machines. You will also | ||
28 | need to select one or more of the processor modules below. | ||
29 | |||
30 | This module provides access to the hardware capabilities through | ||
31 | a character device node named /dev/kvm. | ||
32 | |||
33 | If unsure, say N. | ||
34 | |||
35 | config KVM_ARM_HOST | ||
36 | bool "KVM host support for ARM cpus." | ||
37 | depends on KVM | ||
38 | depends on MMU | ||
39 | select MMU_NOTIFIER | ||
40 | ---help--- | ||
41 | Provides host support for ARM processors. | ||
42 | |||
43 | config KVM_ARM_MAX_VCPUS | ||
44 | int "Number maximum supported virtual CPUs per VM" | ||
45 | depends on KVM_ARM_HOST | ||
46 | default 4 | ||
47 | help | ||
48 | Static number of max supported virtual CPUs per VM. | ||
49 | |||
50 | If you choose a high number, the vcpu structures will be quite | ||
51 | large, so only choose a reasonable number that you expect to | ||
52 | actually use. | ||
53 | |||
54 | source drivers/virtio/Kconfig | ||
55 | |||
56 | endif # VIRTUALIZATION | ||
diff --git a/arch/arm/kvm/Makefile b/arch/arm/kvm/Makefile new file mode 100644 index 000000000000..ea27987bd07f --- /dev/null +++ b/arch/arm/kvm/Makefile | |||
@@ -0,0 +1,21 @@ | |||
1 | # | ||
2 | # Makefile for Kernel-based Virtual Machine module | ||
3 | # | ||
4 | |||
5 | plus_virt := $(call as-instr,.arch_extension virt,+virt) | ||
6 | ifeq ($(plus_virt),+virt) | ||
7 | plus_virt_def := -DREQUIRES_VIRT=1 | ||
8 | endif | ||
9 | |||
10 | ccflags-y += -Ivirt/kvm -Iarch/arm/kvm | ||
11 | CFLAGS_arm.o := -I. $(plus_virt_def) | ||
12 | CFLAGS_mmu.o := -I. | ||
13 | |||
14 | AFLAGS_init.o := -Wa,-march=armv7-a$(plus_virt) | ||
15 | AFLAGS_interrupts.o := -Wa,-march=armv7-a$(plus_virt) | ||
16 | |||
17 | kvm-arm-y = $(addprefix ../../../virt/kvm/, kvm_main.o coalesced_mmio.o) | ||
18 | |||
19 | obj-y += kvm-arm.o init.o interrupts.o | ||
20 | obj-y += arm.o guest.o mmu.o emulate.o reset.o | ||
21 | obj-y += coproc.o coproc_a15.o mmio.o psci.o | ||
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c new file mode 100644 index 000000000000..2d30e3afdaf9 --- /dev/null +++ b/arch/arm/kvm/arm.c | |||
@@ -0,0 +1,1015 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #include <linux/errno.h> | ||
20 | #include <linux/err.h> | ||
21 | #include <linux/kvm_host.h> | ||
22 | #include <linux/module.h> | ||
23 | #include <linux/vmalloc.h> | ||
24 | #include <linux/fs.h> | ||
25 | #include <linux/mman.h> | ||
26 | #include <linux/sched.h> | ||
27 | #include <linux/kvm.h> | ||
28 | #include <trace/events/kvm.h> | ||
29 | |||
30 | #define CREATE_TRACE_POINTS | ||
31 | #include "trace.h" | ||
32 | |||
33 | #include <asm/unified.h> | ||
34 | #include <asm/uaccess.h> | ||
35 | #include <asm/ptrace.h> | ||
36 | #include <asm/mman.h> | ||
37 | #include <asm/cputype.h> | ||
38 | #include <asm/tlbflush.h> | ||
39 | #include <asm/cacheflush.h> | ||
40 | #include <asm/virt.h> | ||
41 | #include <asm/kvm_arm.h> | ||
42 | #include <asm/kvm_asm.h> | ||
43 | #include <asm/kvm_mmu.h> | ||
44 | #include <asm/kvm_emulate.h> | ||
45 | #include <asm/kvm_coproc.h> | ||
46 | #include <asm/kvm_psci.h> | ||
47 | #include <asm/opcodes.h> | ||
48 | |||
49 | #ifdef REQUIRES_VIRT | ||
50 | __asm__(".arch_extension virt"); | ||
51 | #endif | ||
52 | |||
53 | static DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page); | ||
54 | static struct vfp_hard_struct __percpu *kvm_host_vfp_state; | ||
55 | static unsigned long hyp_default_vectors; | ||
56 | |||
57 | /* The VMID used in the VTTBR */ | ||
58 | static atomic64_t kvm_vmid_gen = ATOMIC64_INIT(1); | ||
59 | static u8 kvm_next_vmid; | ||
60 | static DEFINE_SPINLOCK(kvm_vmid_lock); | ||
61 | |||
62 | int kvm_arch_hardware_enable(void *garbage) | ||
63 | { | ||
64 | return 0; | ||
65 | } | ||
66 | |||
67 | int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu) | ||
68 | { | ||
69 | return kvm_vcpu_exiting_guest_mode(vcpu) == IN_GUEST_MODE; | ||
70 | } | ||
71 | |||
72 | void kvm_arch_hardware_disable(void *garbage) | ||
73 | { | ||
74 | } | ||
75 | |||
76 | int kvm_arch_hardware_setup(void) | ||
77 | { | ||
78 | return 0; | ||
79 | } | ||
80 | |||
81 | void kvm_arch_hardware_unsetup(void) | ||
82 | { | ||
83 | } | ||
84 | |||
85 | void kvm_arch_check_processor_compat(void *rtn) | ||
86 | { | ||
87 | *(int *)rtn = 0; | ||
88 | } | ||
89 | |||
90 | void kvm_arch_sync_events(struct kvm *kvm) | ||
91 | { | ||
92 | } | ||
93 | |||
94 | /** | ||
95 | * kvm_arch_init_vm - initializes a VM data structure | ||
96 | * @kvm: pointer to the KVM struct | ||
97 | */ | ||
98 | int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) | ||
99 | { | ||
100 | int ret = 0; | ||
101 | |||
102 | if (type) | ||
103 | return -EINVAL; | ||
104 | |||
105 | ret = kvm_alloc_stage2_pgd(kvm); | ||
106 | if (ret) | ||
107 | goto out_fail_alloc; | ||
108 | |||
109 | ret = create_hyp_mappings(kvm, kvm + 1); | ||
110 | if (ret) | ||
111 | goto out_free_stage2_pgd; | ||
112 | |||
113 | /* Mark the initial VMID generation invalid */ | ||
114 | kvm->arch.vmid_gen = 0; | ||
115 | |||
116 | return ret; | ||
117 | out_free_stage2_pgd: | ||
118 | kvm_free_stage2_pgd(kvm); | ||
119 | out_fail_alloc: | ||
120 | return ret; | ||
121 | } | ||
122 | |||
123 | int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) | ||
124 | { | ||
125 | return VM_FAULT_SIGBUS; | ||
126 | } | ||
127 | |||
128 | void kvm_arch_free_memslot(struct kvm_memory_slot *free, | ||
129 | struct kvm_memory_slot *dont) | ||
130 | { | ||
131 | } | ||
132 | |||
133 | int kvm_arch_create_memslot(struct kvm_memory_slot *slot, unsigned long npages) | ||
134 | { | ||
135 | return 0; | ||
136 | } | ||
137 | |||
138 | /** | ||
139 | * kvm_arch_destroy_vm - destroy the VM data structure | ||
140 | * @kvm: pointer to the KVM struct | ||
141 | */ | ||
142 | void kvm_arch_destroy_vm(struct kvm *kvm) | ||
143 | { | ||
144 | int i; | ||
145 | |||
146 | kvm_free_stage2_pgd(kvm); | ||
147 | |||
148 | for (i = 0; i < KVM_MAX_VCPUS; ++i) { | ||
149 | if (kvm->vcpus[i]) { | ||
150 | kvm_arch_vcpu_free(kvm->vcpus[i]); | ||
151 | kvm->vcpus[i] = NULL; | ||
152 | } | ||
153 | } | ||
154 | } | ||
155 | |||
156 | int kvm_dev_ioctl_check_extension(long ext) | ||
157 | { | ||
158 | int r; | ||
159 | switch (ext) { | ||
160 | case KVM_CAP_USER_MEMORY: | ||
161 | case KVM_CAP_SYNC_MMU: | ||
162 | case KVM_CAP_DESTROY_MEMORY_REGION_WORKS: | ||
163 | case KVM_CAP_ONE_REG: | ||
164 | case KVM_CAP_ARM_PSCI: | ||
165 | r = 1; | ||
166 | break; | ||
167 | case KVM_CAP_COALESCED_MMIO: | ||
168 | r = KVM_COALESCED_MMIO_PAGE_OFFSET; | ||
169 | break; | ||
170 | case KVM_CAP_NR_VCPUS: | ||
171 | r = num_online_cpus(); | ||
172 | break; | ||
173 | case KVM_CAP_MAX_VCPUS: | ||
174 | r = KVM_MAX_VCPUS; | ||
175 | break; | ||
176 | default: | ||
177 | r = 0; | ||
178 | break; | ||
179 | } | ||
180 | return r; | ||
181 | } | ||
182 | |||
183 | long kvm_arch_dev_ioctl(struct file *filp, | ||
184 | unsigned int ioctl, unsigned long arg) | ||
185 | { | ||
186 | return -EINVAL; | ||
187 | } | ||
188 | |||
189 | int kvm_arch_set_memory_region(struct kvm *kvm, | ||
190 | struct kvm_userspace_memory_region *mem, | ||
191 | struct kvm_memory_slot old, | ||
192 | int user_alloc) | ||
193 | { | ||
194 | return 0; | ||
195 | } | ||
196 | |||
197 | int kvm_arch_prepare_memory_region(struct kvm *kvm, | ||
198 | struct kvm_memory_slot *memslot, | ||
199 | struct kvm_memory_slot old, | ||
200 | struct kvm_userspace_memory_region *mem, | ||
201 | int user_alloc) | ||
202 | { | ||
203 | return 0; | ||
204 | } | ||
205 | |||
206 | void kvm_arch_commit_memory_region(struct kvm *kvm, | ||
207 | struct kvm_userspace_memory_region *mem, | ||
208 | struct kvm_memory_slot old, | ||
209 | int user_alloc) | ||
210 | { | ||
211 | } | ||
212 | |||
213 | void kvm_arch_flush_shadow_all(struct kvm *kvm) | ||
214 | { | ||
215 | } | ||
216 | |||
217 | void kvm_arch_flush_shadow_memslot(struct kvm *kvm, | ||
218 | struct kvm_memory_slot *slot) | ||
219 | { | ||
220 | } | ||
221 | |||
222 | struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id) | ||
223 | { | ||
224 | int err; | ||
225 | struct kvm_vcpu *vcpu; | ||
226 | |||
227 | vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL); | ||
228 | if (!vcpu) { | ||
229 | err = -ENOMEM; | ||
230 | goto out; | ||
231 | } | ||
232 | |||
233 | err = kvm_vcpu_init(vcpu, kvm, id); | ||
234 | if (err) | ||
235 | goto free_vcpu; | ||
236 | |||
237 | err = create_hyp_mappings(vcpu, vcpu + 1); | ||
238 | if (err) | ||
239 | goto vcpu_uninit; | ||
240 | |||
241 | return vcpu; | ||
242 | vcpu_uninit: | ||
243 | kvm_vcpu_uninit(vcpu); | ||
244 | free_vcpu: | ||
245 | kmem_cache_free(kvm_vcpu_cache, vcpu); | ||
246 | out: | ||
247 | return ERR_PTR(err); | ||
248 | } | ||
249 | |||
250 | int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) | ||
251 | { | ||
252 | return 0; | ||
253 | } | ||
254 | |||
255 | void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) | ||
256 | { | ||
257 | kvm_mmu_free_memory_caches(vcpu); | ||
258 | kmem_cache_free(kvm_vcpu_cache, vcpu); | ||
259 | } | ||
260 | |||
261 | void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) | ||
262 | { | ||
263 | kvm_arch_vcpu_free(vcpu); | ||
264 | } | ||
265 | |||
266 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) | ||
267 | { | ||
268 | return 0; | ||
269 | } | ||
270 | |||
271 | int __attribute_const__ kvm_target_cpu(void) | ||
272 | { | ||
273 | unsigned long implementor = read_cpuid_implementor(); | ||
274 | unsigned long part_number = read_cpuid_part_number(); | ||
275 | |||
276 | if (implementor != ARM_CPU_IMP_ARM) | ||
277 | return -EINVAL; | ||
278 | |||
279 | switch (part_number) { | ||
280 | case ARM_CPU_PART_CORTEX_A15: | ||
281 | return KVM_ARM_TARGET_CORTEX_A15; | ||
282 | default: | ||
283 | return -EINVAL; | ||
284 | } | ||
285 | } | ||
286 | |||
287 | int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) | ||
288 | { | ||
289 | /* Force users to call KVM_ARM_VCPU_INIT */ | ||
290 | vcpu->arch.target = -1; | ||
291 | return 0; | ||
292 | } | ||
293 | |||
294 | void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) | ||
295 | { | ||
296 | } | ||
297 | |||
298 | void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) | ||
299 | { | ||
300 | vcpu->cpu = cpu; | ||
301 | vcpu->arch.vfp_host = this_cpu_ptr(kvm_host_vfp_state); | ||
302 | |||
303 | /* | ||
304 | * Check whether this vcpu requires the cache to be flushed on | ||
305 | * this physical CPU. This is a consequence of doing dcache | ||
306 | * operations by set/way on this vcpu. We do it here to be in | ||
307 | * a non-preemptible section. | ||
308 | */ | ||
309 | if (cpumask_test_and_clear_cpu(cpu, &vcpu->arch.require_dcache_flush)) | ||
310 | flush_cache_all(); /* We'd really want v7_flush_dcache_all() */ | ||
311 | } | ||
312 | |||
313 | void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) | ||
314 | { | ||
315 | } | ||
316 | |||
317 | int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, | ||
318 | struct kvm_guest_debug *dbg) | ||
319 | { | ||
320 | return -EINVAL; | ||
321 | } | ||
322 | |||
323 | |||
324 | int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, | ||
325 | struct kvm_mp_state *mp_state) | ||
326 | { | ||
327 | return -EINVAL; | ||
328 | } | ||
329 | |||
330 | int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, | ||
331 | struct kvm_mp_state *mp_state) | ||
332 | { | ||
333 | return -EINVAL; | ||
334 | } | ||
335 | |||
336 | /** | ||
337 | * kvm_arch_vcpu_runnable - determine if the vcpu can be scheduled | ||
338 | * @v: The VCPU pointer | ||
339 | * | ||
340 | * If the guest CPU is not waiting for interrupts or an interrupt line is | ||
341 | * asserted, the CPU is by definition runnable. | ||
342 | */ | ||
343 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) | ||
344 | { | ||
345 | return !!v->arch.irq_lines; | ||
346 | } | ||
347 | |||
348 | /* Just ensure a guest exit from a particular CPU */ | ||
349 | static void exit_vm_noop(void *info) | ||
350 | { | ||
351 | } | ||
352 | |||
353 | void force_vm_exit(const cpumask_t *mask) | ||
354 | { | ||
355 | smp_call_function_many(mask, exit_vm_noop, NULL, true); | ||
356 | } | ||
357 | |||
358 | /** | ||
359 | * need_new_vmid_gen - check that the VMID is still valid | ||
360 | * @kvm: The VM's VMID to checkt | ||
361 | * | ||
362 | * return true if there is a new generation of VMIDs being used | ||
363 | * | ||
364 | * The hardware supports only 256 values with the value zero reserved for the | ||
365 | * host, so we check if an assigned value belongs to a previous generation, | ||
366 | * which which requires us to assign a new value. If we're the first to use a | ||
367 | * VMID for the new generation, we must flush necessary caches and TLBs on all | ||
368 | * CPUs. | ||
369 | */ | ||
370 | static bool need_new_vmid_gen(struct kvm *kvm) | ||
371 | { | ||
372 | return unlikely(kvm->arch.vmid_gen != atomic64_read(&kvm_vmid_gen)); | ||
373 | } | ||
374 | |||
375 | /** | ||
376 | * update_vttbr - Update the VTTBR with a valid VMID before the guest runs | ||
377 | * @kvm The guest that we are about to run | ||
378 | * | ||
379 | * Called from kvm_arch_vcpu_ioctl_run before entering the guest to ensure the | ||
380 | * VM has a valid VMID, otherwise assigns a new one and flushes corresponding | ||
381 | * caches and TLBs. | ||
382 | */ | ||
383 | static void update_vttbr(struct kvm *kvm) | ||
384 | { | ||
385 | phys_addr_t pgd_phys; | ||
386 | u64 vmid; | ||
387 | |||
388 | if (!need_new_vmid_gen(kvm)) | ||
389 | return; | ||
390 | |||
391 | spin_lock(&kvm_vmid_lock); | ||
392 | |||
393 | /* | ||
394 | * We need to re-check the vmid_gen here to ensure that if another vcpu | ||
395 | * already allocated a valid vmid for this vm, then this vcpu should | ||
396 | * use the same vmid. | ||
397 | */ | ||
398 | if (!need_new_vmid_gen(kvm)) { | ||
399 | spin_unlock(&kvm_vmid_lock); | ||
400 | return; | ||
401 | } | ||
402 | |||
403 | /* First user of a new VMID generation? */ | ||
404 | if (unlikely(kvm_next_vmid == 0)) { | ||
405 | atomic64_inc(&kvm_vmid_gen); | ||
406 | kvm_next_vmid = 1; | ||
407 | |||
408 | /* | ||
409 | * On SMP we know no other CPUs can use this CPU's or each | ||
410 | * other's VMID after force_vm_exit returns since the | ||
411 | * kvm_vmid_lock blocks them from reentry to the guest. | ||
412 | */ | ||
413 | force_vm_exit(cpu_all_mask); | ||
414 | /* | ||
415 | * Now broadcast TLB + ICACHE invalidation over the inner | ||
416 | * shareable domain to make sure all data structures are | ||
417 | * clean. | ||
418 | */ | ||
419 | kvm_call_hyp(__kvm_flush_vm_context); | ||
420 | } | ||
421 | |||
422 | kvm->arch.vmid_gen = atomic64_read(&kvm_vmid_gen); | ||
423 | kvm->arch.vmid = kvm_next_vmid; | ||
424 | kvm_next_vmid++; | ||
425 | |||
426 | /* update vttbr to be used with the new vmid */ | ||
427 | pgd_phys = virt_to_phys(kvm->arch.pgd); | ||
428 | vmid = ((u64)(kvm->arch.vmid) << VTTBR_VMID_SHIFT) & VTTBR_VMID_MASK; | ||
429 | kvm->arch.vttbr = pgd_phys & VTTBR_BADDR_MASK; | ||
430 | kvm->arch.vttbr |= vmid; | ||
431 | |||
432 | spin_unlock(&kvm_vmid_lock); | ||
433 | } | ||
434 | |||
435 | static int handle_svc_hyp(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
436 | { | ||
437 | /* SVC called from Hyp mode should never get here */ | ||
438 | kvm_debug("SVC called from Hyp mode shouldn't go here\n"); | ||
439 | BUG(); | ||
440 | return -EINVAL; /* Squash warning */ | ||
441 | } | ||
442 | |||
443 | static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
444 | { | ||
445 | trace_kvm_hvc(*vcpu_pc(vcpu), *vcpu_reg(vcpu, 0), | ||
446 | vcpu->arch.hsr & HSR_HVC_IMM_MASK); | ||
447 | |||
448 | if (kvm_psci_call(vcpu)) | ||
449 | return 1; | ||
450 | |||
451 | kvm_inject_undefined(vcpu); | ||
452 | return 1; | ||
453 | } | ||
454 | |||
455 | static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
456 | { | ||
457 | if (kvm_psci_call(vcpu)) | ||
458 | return 1; | ||
459 | |||
460 | kvm_inject_undefined(vcpu); | ||
461 | return 1; | ||
462 | } | ||
463 | |||
464 | static int handle_pabt_hyp(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
465 | { | ||
466 | /* The hypervisor should never cause aborts */ | ||
467 | kvm_err("Prefetch Abort taken from Hyp mode at %#08x (HSR: %#08x)\n", | ||
468 | vcpu->arch.hxfar, vcpu->arch.hsr); | ||
469 | return -EFAULT; | ||
470 | } | ||
471 | |||
472 | static int handle_dabt_hyp(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
473 | { | ||
474 | /* This is either an error in the ws. code or an external abort */ | ||
475 | kvm_err("Data Abort taken from Hyp mode at %#08x (HSR: %#08x)\n", | ||
476 | vcpu->arch.hxfar, vcpu->arch.hsr); | ||
477 | return -EFAULT; | ||
478 | } | ||
479 | |||
480 | typedef int (*exit_handle_fn)(struct kvm_vcpu *, struct kvm_run *); | ||
481 | static exit_handle_fn arm_exit_handlers[] = { | ||
482 | [HSR_EC_WFI] = kvm_handle_wfi, | ||
483 | [HSR_EC_CP15_32] = kvm_handle_cp15_32, | ||
484 | [HSR_EC_CP15_64] = kvm_handle_cp15_64, | ||
485 | [HSR_EC_CP14_MR] = kvm_handle_cp14_access, | ||
486 | [HSR_EC_CP14_LS] = kvm_handle_cp14_load_store, | ||
487 | [HSR_EC_CP14_64] = kvm_handle_cp14_access, | ||
488 | [HSR_EC_CP_0_13] = kvm_handle_cp_0_13_access, | ||
489 | [HSR_EC_CP10_ID] = kvm_handle_cp10_id, | ||
490 | [HSR_EC_SVC_HYP] = handle_svc_hyp, | ||
491 | [HSR_EC_HVC] = handle_hvc, | ||
492 | [HSR_EC_SMC] = handle_smc, | ||
493 | [HSR_EC_IABT] = kvm_handle_guest_abort, | ||
494 | [HSR_EC_IABT_HYP] = handle_pabt_hyp, | ||
495 | [HSR_EC_DABT] = kvm_handle_guest_abort, | ||
496 | [HSR_EC_DABT_HYP] = handle_dabt_hyp, | ||
497 | }; | ||
498 | |||
499 | /* | ||
500 | * A conditional instruction is allowed to trap, even though it | ||
501 | * wouldn't be executed. So let's re-implement the hardware, in | ||
502 | * software! | ||
503 | */ | ||
504 | static bool kvm_condition_valid(struct kvm_vcpu *vcpu) | ||
505 | { | ||
506 | unsigned long cpsr, cond, insn; | ||
507 | |||
508 | /* | ||
509 | * Exception Code 0 can only happen if we set HCR.TGE to 1, to | ||
510 | * catch undefined instructions, and then we won't get past | ||
511 | * the arm_exit_handlers test anyway. | ||
512 | */ | ||
513 | BUG_ON(((vcpu->arch.hsr & HSR_EC) >> HSR_EC_SHIFT) == 0); | ||
514 | |||
515 | /* Top two bits non-zero? Unconditional. */ | ||
516 | if (vcpu->arch.hsr >> 30) | ||
517 | return true; | ||
518 | |||
519 | cpsr = *vcpu_cpsr(vcpu); | ||
520 | |||
521 | /* Is condition field valid? */ | ||
522 | if ((vcpu->arch.hsr & HSR_CV) >> HSR_CV_SHIFT) | ||
523 | cond = (vcpu->arch.hsr & HSR_COND) >> HSR_COND_SHIFT; | ||
524 | else { | ||
525 | /* This can happen in Thumb mode: examine IT state. */ | ||
526 | unsigned long it; | ||
527 | |||
528 | it = ((cpsr >> 8) & 0xFC) | ((cpsr >> 25) & 0x3); | ||
529 | |||
530 | /* it == 0 => unconditional. */ | ||
531 | if (it == 0) | ||
532 | return true; | ||
533 | |||
534 | /* The cond for this insn works out as the top 4 bits. */ | ||
535 | cond = (it >> 4); | ||
536 | } | ||
537 | |||
538 | /* Shift makes it look like an ARM-mode instruction */ | ||
539 | insn = cond << 28; | ||
540 | return arm_check_condition(insn, cpsr) != ARM_OPCODE_CONDTEST_FAIL; | ||
541 | } | ||
542 | |||
543 | /* | ||
544 | * Return > 0 to return to guest, < 0 on error, 0 (and set exit_reason) on | ||
545 | * proper exit to QEMU. | ||
546 | */ | ||
547 | static int handle_exit(struct kvm_vcpu *vcpu, struct kvm_run *run, | ||
548 | int exception_index) | ||
549 | { | ||
550 | unsigned long hsr_ec; | ||
551 | |||
552 | switch (exception_index) { | ||
553 | case ARM_EXCEPTION_IRQ: | ||
554 | return 1; | ||
555 | case ARM_EXCEPTION_UNDEFINED: | ||
556 | kvm_err("Undefined exception in Hyp mode at: %#08x\n", | ||
557 | vcpu->arch.hyp_pc); | ||
558 | BUG(); | ||
559 | panic("KVM: Hypervisor undefined exception!\n"); | ||
560 | case ARM_EXCEPTION_DATA_ABORT: | ||
561 | case ARM_EXCEPTION_PREF_ABORT: | ||
562 | case ARM_EXCEPTION_HVC: | ||
563 | hsr_ec = (vcpu->arch.hsr & HSR_EC) >> HSR_EC_SHIFT; | ||
564 | |||
565 | if (hsr_ec >= ARRAY_SIZE(arm_exit_handlers) | ||
566 | || !arm_exit_handlers[hsr_ec]) { | ||
567 | kvm_err("Unkown exception class: %#08lx, " | ||
568 | "hsr: %#08x\n", hsr_ec, | ||
569 | (unsigned int)vcpu->arch.hsr); | ||
570 | BUG(); | ||
571 | } | ||
572 | |||
573 | /* | ||
574 | * See ARM ARM B1.14.1: "Hyp traps on instructions | ||
575 | * that fail their condition code check" | ||
576 | */ | ||
577 | if (!kvm_condition_valid(vcpu)) { | ||
578 | bool is_wide = vcpu->arch.hsr & HSR_IL; | ||
579 | kvm_skip_instr(vcpu, is_wide); | ||
580 | return 1; | ||
581 | } | ||
582 | |||
583 | return arm_exit_handlers[hsr_ec](vcpu, run); | ||
584 | default: | ||
585 | kvm_pr_unimpl("Unsupported exception type: %d", | ||
586 | exception_index); | ||
587 | run->exit_reason = KVM_EXIT_INTERNAL_ERROR; | ||
588 | return 0; | ||
589 | } | ||
590 | } | ||
591 | |||
592 | static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu) | ||
593 | { | ||
594 | if (likely(vcpu->arch.has_run_once)) | ||
595 | return 0; | ||
596 | |||
597 | vcpu->arch.has_run_once = true; | ||
598 | |||
599 | /* | ||
600 | * Handle the "start in power-off" case by calling into the | ||
601 | * PSCI code. | ||
602 | */ | ||
603 | if (test_and_clear_bit(KVM_ARM_VCPU_POWER_OFF, vcpu->arch.features)) { | ||
604 | *vcpu_reg(vcpu, 0) = KVM_PSCI_FN_CPU_OFF; | ||
605 | kvm_psci_call(vcpu); | ||
606 | } | ||
607 | |||
608 | return 0; | ||
609 | } | ||
610 | |||
611 | static void vcpu_pause(struct kvm_vcpu *vcpu) | ||
612 | { | ||
613 | wait_queue_head_t *wq = kvm_arch_vcpu_wq(vcpu); | ||
614 | |||
615 | wait_event_interruptible(*wq, !vcpu->arch.pause); | ||
616 | } | ||
617 | |||
618 | /** | ||
619 | * kvm_arch_vcpu_ioctl_run - the main VCPU run function to execute guest code | ||
620 | * @vcpu: The VCPU pointer | ||
621 | * @run: The kvm_run structure pointer used for userspace state exchange | ||
622 | * | ||
623 | * This function is called through the VCPU_RUN ioctl called from user space. It | ||
624 | * will execute VM code in a loop until the time slice for the process is used | ||
625 | * or some emulation is needed from user space in which case the function will | ||
626 | * return with return value 0 and with the kvm_run structure filled in with the | ||
627 | * required data for the requested emulation. | ||
628 | */ | ||
629 | int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
630 | { | ||
631 | int ret; | ||
632 | sigset_t sigsaved; | ||
633 | |||
634 | /* Make sure they initialize the vcpu with KVM_ARM_VCPU_INIT */ | ||
635 | if (unlikely(vcpu->arch.target < 0)) | ||
636 | return -ENOEXEC; | ||
637 | |||
638 | ret = kvm_vcpu_first_run_init(vcpu); | ||
639 | if (ret) | ||
640 | return ret; | ||
641 | |||
642 | if (run->exit_reason == KVM_EXIT_MMIO) { | ||
643 | ret = kvm_handle_mmio_return(vcpu, vcpu->run); | ||
644 | if (ret) | ||
645 | return ret; | ||
646 | } | ||
647 | |||
648 | if (vcpu->sigset_active) | ||
649 | sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved); | ||
650 | |||
651 | ret = 1; | ||
652 | run->exit_reason = KVM_EXIT_UNKNOWN; | ||
653 | while (ret > 0) { | ||
654 | /* | ||
655 | * Check conditions before entering the guest | ||
656 | */ | ||
657 | cond_resched(); | ||
658 | |||
659 | update_vttbr(vcpu->kvm); | ||
660 | |||
661 | if (vcpu->arch.pause) | ||
662 | vcpu_pause(vcpu); | ||
663 | |||
664 | local_irq_disable(); | ||
665 | |||
666 | /* | ||
667 | * Re-check atomic conditions | ||
668 | */ | ||
669 | if (signal_pending(current)) { | ||
670 | ret = -EINTR; | ||
671 | run->exit_reason = KVM_EXIT_INTR; | ||
672 | } | ||
673 | |||
674 | if (ret <= 0 || need_new_vmid_gen(vcpu->kvm)) { | ||
675 | local_irq_enable(); | ||
676 | continue; | ||
677 | } | ||
678 | |||
679 | /************************************************************** | ||
680 | * Enter the guest | ||
681 | */ | ||
682 | trace_kvm_entry(*vcpu_pc(vcpu)); | ||
683 | kvm_guest_enter(); | ||
684 | vcpu->mode = IN_GUEST_MODE; | ||
685 | |||
686 | ret = kvm_call_hyp(__kvm_vcpu_run, vcpu); | ||
687 | |||
688 | vcpu->mode = OUTSIDE_GUEST_MODE; | ||
689 | vcpu->arch.last_pcpu = smp_processor_id(); | ||
690 | kvm_guest_exit(); | ||
691 | trace_kvm_exit(*vcpu_pc(vcpu)); | ||
692 | /* | ||
693 | * We may have taken a host interrupt in HYP mode (ie | ||
694 | * while executing the guest). This interrupt is still | ||
695 | * pending, as we haven't serviced it yet! | ||
696 | * | ||
697 | * We're now back in SVC mode, with interrupts | ||
698 | * disabled. Enabling the interrupts now will have | ||
699 | * the effect of taking the interrupt again, in SVC | ||
700 | * mode this time. | ||
701 | */ | ||
702 | local_irq_enable(); | ||
703 | |||
704 | /* | ||
705 | * Back from guest | ||
706 | *************************************************************/ | ||
707 | |||
708 | ret = handle_exit(vcpu, run, ret); | ||
709 | } | ||
710 | |||
711 | if (vcpu->sigset_active) | ||
712 | sigprocmask(SIG_SETMASK, &sigsaved, NULL); | ||
713 | return ret; | ||
714 | } | ||
715 | |||
716 | static int vcpu_interrupt_line(struct kvm_vcpu *vcpu, int number, bool level) | ||
717 | { | ||
718 | int bit_index; | ||
719 | bool set; | ||
720 | unsigned long *ptr; | ||
721 | |||
722 | if (number == KVM_ARM_IRQ_CPU_IRQ) | ||
723 | bit_index = __ffs(HCR_VI); | ||
724 | else /* KVM_ARM_IRQ_CPU_FIQ */ | ||
725 | bit_index = __ffs(HCR_VF); | ||
726 | |||
727 | ptr = (unsigned long *)&vcpu->arch.irq_lines; | ||
728 | if (level) | ||
729 | set = test_and_set_bit(bit_index, ptr); | ||
730 | else | ||
731 | set = test_and_clear_bit(bit_index, ptr); | ||
732 | |||
733 | /* | ||
734 | * If we didn't change anything, no need to wake up or kick other CPUs | ||
735 | */ | ||
736 | if (set == level) | ||
737 | return 0; | ||
738 | |||
739 | /* | ||
740 | * The vcpu irq_lines field was updated, wake up sleeping VCPUs and | ||
741 | * trigger a world-switch round on the running physical CPU to set the | ||
742 | * virtual IRQ/FIQ fields in the HCR appropriately. | ||
743 | */ | ||
744 | kvm_vcpu_kick(vcpu); | ||
745 | |||
746 | return 0; | ||
747 | } | ||
748 | |||
749 | int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level) | ||
750 | { | ||
751 | u32 irq = irq_level->irq; | ||
752 | unsigned int irq_type, vcpu_idx, irq_num; | ||
753 | int nrcpus = atomic_read(&kvm->online_vcpus); | ||
754 | struct kvm_vcpu *vcpu = NULL; | ||
755 | bool level = irq_level->level; | ||
756 | |||
757 | irq_type = (irq >> KVM_ARM_IRQ_TYPE_SHIFT) & KVM_ARM_IRQ_TYPE_MASK; | ||
758 | vcpu_idx = (irq >> KVM_ARM_IRQ_VCPU_SHIFT) & KVM_ARM_IRQ_VCPU_MASK; | ||
759 | irq_num = (irq >> KVM_ARM_IRQ_NUM_SHIFT) & KVM_ARM_IRQ_NUM_MASK; | ||
760 | |||
761 | trace_kvm_irq_line(irq_type, vcpu_idx, irq_num, irq_level->level); | ||
762 | |||
763 | if (irq_type != KVM_ARM_IRQ_TYPE_CPU) | ||
764 | return -EINVAL; | ||
765 | |||
766 | if (vcpu_idx >= nrcpus) | ||
767 | return -EINVAL; | ||
768 | |||
769 | vcpu = kvm_get_vcpu(kvm, vcpu_idx); | ||
770 | if (!vcpu) | ||
771 | return -EINVAL; | ||
772 | |||
773 | if (irq_num > KVM_ARM_IRQ_CPU_FIQ) | ||
774 | return -EINVAL; | ||
775 | |||
776 | return vcpu_interrupt_line(vcpu, irq_num, level); | ||
777 | } | ||
778 | |||
779 | long kvm_arch_vcpu_ioctl(struct file *filp, | ||
780 | unsigned int ioctl, unsigned long arg) | ||
781 | { | ||
782 | struct kvm_vcpu *vcpu = filp->private_data; | ||
783 | void __user *argp = (void __user *)arg; | ||
784 | |||
785 | switch (ioctl) { | ||
786 | case KVM_ARM_VCPU_INIT: { | ||
787 | struct kvm_vcpu_init init; | ||
788 | |||
789 | if (copy_from_user(&init, argp, sizeof(init))) | ||
790 | return -EFAULT; | ||
791 | |||
792 | return kvm_vcpu_set_target(vcpu, &init); | ||
793 | |||
794 | } | ||
795 | case KVM_SET_ONE_REG: | ||
796 | case KVM_GET_ONE_REG: { | ||
797 | struct kvm_one_reg reg; | ||
798 | if (copy_from_user(®, argp, sizeof(reg))) | ||
799 | return -EFAULT; | ||
800 | if (ioctl == KVM_SET_ONE_REG) | ||
801 | return kvm_arm_set_reg(vcpu, ®); | ||
802 | else | ||
803 | return kvm_arm_get_reg(vcpu, ®); | ||
804 | } | ||
805 | case KVM_GET_REG_LIST: { | ||
806 | struct kvm_reg_list __user *user_list = argp; | ||
807 | struct kvm_reg_list reg_list; | ||
808 | unsigned n; | ||
809 | |||
810 | if (copy_from_user(®_list, user_list, sizeof(reg_list))) | ||
811 | return -EFAULT; | ||
812 | n = reg_list.n; | ||
813 | reg_list.n = kvm_arm_num_regs(vcpu); | ||
814 | if (copy_to_user(user_list, ®_list, sizeof(reg_list))) | ||
815 | return -EFAULT; | ||
816 | if (n < reg_list.n) | ||
817 | return -E2BIG; | ||
818 | return kvm_arm_copy_reg_indices(vcpu, user_list->reg); | ||
819 | } | ||
820 | default: | ||
821 | return -EINVAL; | ||
822 | } | ||
823 | } | ||
824 | |||
825 | int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log) | ||
826 | { | ||
827 | return -EINVAL; | ||
828 | } | ||
829 | |||
830 | long kvm_arch_vm_ioctl(struct file *filp, | ||
831 | unsigned int ioctl, unsigned long arg) | ||
832 | { | ||
833 | return -EINVAL; | ||
834 | } | ||
835 | |||
836 | static void cpu_init_hyp_mode(void *vector) | ||
837 | { | ||
838 | unsigned long long pgd_ptr; | ||
839 | unsigned long pgd_low, pgd_high; | ||
840 | unsigned long hyp_stack_ptr; | ||
841 | unsigned long stack_page; | ||
842 | unsigned long vector_ptr; | ||
843 | |||
844 | /* Switch from the HYP stub to our own HYP init vector */ | ||
845 | __hyp_set_vectors((unsigned long)vector); | ||
846 | |||
847 | pgd_ptr = (unsigned long long)kvm_mmu_get_httbr(); | ||
848 | pgd_low = (pgd_ptr & ((1ULL << 32) - 1)); | ||
849 | pgd_high = (pgd_ptr >> 32ULL); | ||
850 | stack_page = __get_cpu_var(kvm_arm_hyp_stack_page); | ||
851 | hyp_stack_ptr = stack_page + PAGE_SIZE; | ||
852 | vector_ptr = (unsigned long)__kvm_hyp_vector; | ||
853 | |||
854 | /* | ||
855 | * Call initialization code, and switch to the full blown | ||
856 | * HYP code. The init code doesn't need to preserve these registers as | ||
857 | * r1-r3 and r12 are already callee save according to the AAPCS. | ||
858 | * Note that we slightly misuse the prototype by casing the pgd_low to | ||
859 | * a void *. | ||
860 | */ | ||
861 | kvm_call_hyp((void *)pgd_low, pgd_high, hyp_stack_ptr, vector_ptr); | ||
862 | } | ||
863 | |||
864 | /** | ||
865 | * Inits Hyp-mode on all online CPUs | ||
866 | */ | ||
867 | static int init_hyp_mode(void) | ||
868 | { | ||
869 | phys_addr_t init_phys_addr; | ||
870 | int cpu; | ||
871 | int err = 0; | ||
872 | |||
873 | /* | ||
874 | * Allocate Hyp PGD and setup Hyp identity mapping | ||
875 | */ | ||
876 | err = kvm_mmu_init(); | ||
877 | if (err) | ||
878 | goto out_err; | ||
879 | |||
880 | /* | ||
881 | * It is probably enough to obtain the default on one | ||
882 | * CPU. It's unlikely to be different on the others. | ||
883 | */ | ||
884 | hyp_default_vectors = __hyp_get_vectors(); | ||
885 | |||
886 | /* | ||
887 | * Allocate stack pages for Hypervisor-mode | ||
888 | */ | ||
889 | for_each_possible_cpu(cpu) { | ||
890 | unsigned long stack_page; | ||
891 | |||
892 | stack_page = __get_free_page(GFP_KERNEL); | ||
893 | if (!stack_page) { | ||
894 | err = -ENOMEM; | ||
895 | goto out_free_stack_pages; | ||
896 | } | ||
897 | |||
898 | per_cpu(kvm_arm_hyp_stack_page, cpu) = stack_page; | ||
899 | } | ||
900 | |||
901 | /* | ||
902 | * Execute the init code on each CPU. | ||
903 | * | ||
904 | * Note: The stack is not mapped yet, so don't do anything else than | ||
905 | * initializing the hypervisor mode on each CPU using a local stack | ||
906 | * space for temporary storage. | ||
907 | */ | ||
908 | init_phys_addr = virt_to_phys(__kvm_hyp_init); | ||
909 | for_each_online_cpu(cpu) { | ||
910 | smp_call_function_single(cpu, cpu_init_hyp_mode, | ||
911 | (void *)(long)init_phys_addr, 1); | ||
912 | } | ||
913 | |||
914 | /* | ||
915 | * Unmap the identity mapping | ||
916 | */ | ||
917 | kvm_clear_hyp_idmap(); | ||
918 | |||
919 | /* | ||
920 | * Map the Hyp-code called directly from the host | ||
921 | */ | ||
922 | err = create_hyp_mappings(__kvm_hyp_code_start, __kvm_hyp_code_end); | ||
923 | if (err) { | ||
924 | kvm_err("Cannot map world-switch code\n"); | ||
925 | goto out_free_mappings; | ||
926 | } | ||
927 | |||
928 | /* | ||
929 | * Map the Hyp stack pages | ||
930 | */ | ||
931 | for_each_possible_cpu(cpu) { | ||
932 | char *stack_page = (char *)per_cpu(kvm_arm_hyp_stack_page, cpu); | ||
933 | err = create_hyp_mappings(stack_page, stack_page + PAGE_SIZE); | ||
934 | |||
935 | if (err) { | ||
936 | kvm_err("Cannot map hyp stack\n"); | ||
937 | goto out_free_mappings; | ||
938 | } | ||
939 | } | ||
940 | |||
941 | /* | ||
942 | * Map the host VFP structures | ||
943 | */ | ||
944 | kvm_host_vfp_state = alloc_percpu(struct vfp_hard_struct); | ||
945 | if (!kvm_host_vfp_state) { | ||
946 | err = -ENOMEM; | ||
947 | kvm_err("Cannot allocate host VFP state\n"); | ||
948 | goto out_free_mappings; | ||
949 | } | ||
950 | |||
951 | for_each_possible_cpu(cpu) { | ||
952 | struct vfp_hard_struct *vfp; | ||
953 | |||
954 | vfp = per_cpu_ptr(kvm_host_vfp_state, cpu); | ||
955 | err = create_hyp_mappings(vfp, vfp + 1); | ||
956 | |||
957 | if (err) { | ||
958 | kvm_err("Cannot map host VFP state: %d\n", err); | ||
959 | goto out_free_vfp; | ||
960 | } | ||
961 | } | ||
962 | |||
963 | kvm_info("Hyp mode initialized successfully\n"); | ||
964 | return 0; | ||
965 | out_free_vfp: | ||
966 | free_percpu(kvm_host_vfp_state); | ||
967 | out_free_mappings: | ||
968 | free_hyp_pmds(); | ||
969 | out_free_stack_pages: | ||
970 | for_each_possible_cpu(cpu) | ||
971 | free_page(per_cpu(kvm_arm_hyp_stack_page, cpu)); | ||
972 | out_err: | ||
973 | kvm_err("error initializing Hyp mode: %d\n", err); | ||
974 | return err; | ||
975 | } | ||
976 | |||
977 | /** | ||
978 | * Initialize Hyp-mode and memory mappings on all CPUs. | ||
979 | */ | ||
980 | int kvm_arch_init(void *opaque) | ||
981 | { | ||
982 | int err; | ||
983 | |||
984 | if (!is_hyp_mode_available()) { | ||
985 | kvm_err("HYP mode not available\n"); | ||
986 | return -ENODEV; | ||
987 | } | ||
988 | |||
989 | if (kvm_target_cpu() < 0) { | ||
990 | kvm_err("Target CPU not supported!\n"); | ||
991 | return -ENODEV; | ||
992 | } | ||
993 | |||
994 | err = init_hyp_mode(); | ||
995 | if (err) | ||
996 | goto out_err; | ||
997 | |||
998 | kvm_coproc_table_init(); | ||
999 | return 0; | ||
1000 | out_err: | ||
1001 | return err; | ||
1002 | } | ||
1003 | |||
1004 | /* NOP: Compiling as a module not supported */ | ||
1005 | void kvm_arch_exit(void) | ||
1006 | { | ||
1007 | } | ||
1008 | |||
1009 | static int arm_init(void) | ||
1010 | { | ||
1011 | int rc = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE); | ||
1012 | return rc; | ||
1013 | } | ||
1014 | |||
1015 | module_init(arm_init); | ||
diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c new file mode 100644 index 000000000000..d782638c7ec0 --- /dev/null +++ b/arch/arm/kvm/coproc.c | |||
@@ -0,0 +1,1046 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Authors: Rusty Russell <rusty@rustcorp.com.au> | ||
4 | * Christoffer Dall <c.dall@virtualopensystems.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License, version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
18 | */ | ||
19 | #include <linux/mm.h> | ||
20 | #include <linux/kvm_host.h> | ||
21 | #include <linux/uaccess.h> | ||
22 | #include <asm/kvm_arm.h> | ||
23 | #include <asm/kvm_host.h> | ||
24 | #include <asm/kvm_emulate.h> | ||
25 | #include <asm/kvm_coproc.h> | ||
26 | #include <asm/cacheflush.h> | ||
27 | #include <asm/cputype.h> | ||
28 | #include <trace/events/kvm.h> | ||
29 | #include <asm/vfp.h> | ||
30 | #include "../vfp/vfpinstr.h" | ||
31 | |||
32 | #include "trace.h" | ||
33 | #include "coproc.h" | ||
34 | |||
35 | |||
36 | /****************************************************************************** | ||
37 | * Co-processor emulation | ||
38 | *****************************************************************************/ | ||
39 | |||
40 | /* 3 bits per cache level, as per CLIDR, but non-existent caches always 0 */ | ||
41 | static u32 cache_levels; | ||
42 | |||
43 | /* CSSELR values; used to index KVM_REG_ARM_DEMUX_ID_CCSIDR */ | ||
44 | #define CSSELR_MAX 12 | ||
45 | |||
46 | int kvm_handle_cp10_id(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
47 | { | ||
48 | kvm_inject_undefined(vcpu); | ||
49 | return 1; | ||
50 | } | ||
51 | |||
52 | int kvm_handle_cp_0_13_access(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
53 | { | ||
54 | /* | ||
55 | * We can get here, if the host has been built without VFPv3 support, | ||
56 | * but the guest attempted a floating point operation. | ||
57 | */ | ||
58 | kvm_inject_undefined(vcpu); | ||
59 | return 1; | ||
60 | } | ||
61 | |||
62 | int kvm_handle_cp14_load_store(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
63 | { | ||
64 | kvm_inject_undefined(vcpu); | ||
65 | return 1; | ||
66 | } | ||
67 | |||
68 | int kvm_handle_cp14_access(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
69 | { | ||
70 | kvm_inject_undefined(vcpu); | ||
71 | return 1; | ||
72 | } | ||
73 | |||
74 | /* See note at ARM ARM B1.14.4 */ | ||
75 | static bool access_dcsw(struct kvm_vcpu *vcpu, | ||
76 | const struct coproc_params *p, | ||
77 | const struct coproc_reg *r) | ||
78 | { | ||
79 | u32 val; | ||
80 | int cpu; | ||
81 | |||
82 | cpu = get_cpu(); | ||
83 | |||
84 | if (!p->is_write) | ||
85 | return read_from_write_only(vcpu, p); | ||
86 | |||
87 | cpumask_setall(&vcpu->arch.require_dcache_flush); | ||
88 | cpumask_clear_cpu(cpu, &vcpu->arch.require_dcache_flush); | ||
89 | |||
90 | /* If we were already preempted, take the long way around */ | ||
91 | if (cpu != vcpu->arch.last_pcpu) { | ||
92 | flush_cache_all(); | ||
93 | goto done; | ||
94 | } | ||
95 | |||
96 | val = *vcpu_reg(vcpu, p->Rt1); | ||
97 | |||
98 | switch (p->CRm) { | ||
99 | case 6: /* Upgrade DCISW to DCCISW, as per HCR.SWIO */ | ||
100 | case 14: /* DCCISW */ | ||
101 | asm volatile("mcr p15, 0, %0, c7, c14, 2" : : "r" (val)); | ||
102 | break; | ||
103 | |||
104 | case 10: /* DCCSW */ | ||
105 | asm volatile("mcr p15, 0, %0, c7, c10, 2" : : "r" (val)); | ||
106 | break; | ||
107 | } | ||
108 | |||
109 | done: | ||
110 | put_cpu(); | ||
111 | |||
112 | return true; | ||
113 | } | ||
114 | |||
115 | /* | ||
116 | * We could trap ID_DFR0 and tell the guest we don't support performance | ||
117 | * monitoring. Unfortunately the patch to make the kernel check ID_DFR0 was | ||
118 | * NAKed, so it will read the PMCR anyway. | ||
119 | * | ||
120 | * Therefore we tell the guest we have 0 counters. Unfortunately, we | ||
121 | * must always support PMCCNTR (the cycle counter): we just RAZ/WI for | ||
122 | * all PM registers, which doesn't crash the guest kernel at least. | ||
123 | */ | ||
124 | static bool pm_fake(struct kvm_vcpu *vcpu, | ||
125 | const struct coproc_params *p, | ||
126 | const struct coproc_reg *r) | ||
127 | { | ||
128 | if (p->is_write) | ||
129 | return ignore_write(vcpu, p); | ||
130 | else | ||
131 | return read_zero(vcpu, p); | ||
132 | } | ||
133 | |||
134 | #define access_pmcr pm_fake | ||
135 | #define access_pmcntenset pm_fake | ||
136 | #define access_pmcntenclr pm_fake | ||
137 | #define access_pmovsr pm_fake | ||
138 | #define access_pmselr pm_fake | ||
139 | #define access_pmceid0 pm_fake | ||
140 | #define access_pmceid1 pm_fake | ||
141 | #define access_pmccntr pm_fake | ||
142 | #define access_pmxevtyper pm_fake | ||
143 | #define access_pmxevcntr pm_fake | ||
144 | #define access_pmuserenr pm_fake | ||
145 | #define access_pmintenset pm_fake | ||
146 | #define access_pmintenclr pm_fake | ||
147 | |||
148 | /* Architected CP15 registers. | ||
149 | * Important: Must be sorted ascending by CRn, CRM, Op1, Op2 | ||
150 | */ | ||
151 | static const struct coproc_reg cp15_regs[] = { | ||
152 | /* CSSELR: swapped by interrupt.S. */ | ||
153 | { CRn( 0), CRm( 0), Op1( 2), Op2( 0), is32, | ||
154 | NULL, reset_unknown, c0_CSSELR }, | ||
155 | |||
156 | /* TTBR0/TTBR1: swapped by interrupt.S. */ | ||
157 | { CRm( 2), Op1( 0), is64, NULL, reset_unknown64, c2_TTBR0 }, | ||
158 | { CRm( 2), Op1( 1), is64, NULL, reset_unknown64, c2_TTBR1 }, | ||
159 | |||
160 | /* TTBCR: swapped by interrupt.S. */ | ||
161 | { CRn( 2), CRm( 0), Op1( 0), Op2( 2), is32, | ||
162 | NULL, reset_val, c2_TTBCR, 0x00000000 }, | ||
163 | |||
164 | /* DACR: swapped by interrupt.S. */ | ||
165 | { CRn( 3), CRm( 0), Op1( 0), Op2( 0), is32, | ||
166 | NULL, reset_unknown, c3_DACR }, | ||
167 | |||
168 | /* DFSR/IFSR/ADFSR/AIFSR: swapped by interrupt.S. */ | ||
169 | { CRn( 5), CRm( 0), Op1( 0), Op2( 0), is32, | ||
170 | NULL, reset_unknown, c5_DFSR }, | ||
171 | { CRn( 5), CRm( 0), Op1( 0), Op2( 1), is32, | ||
172 | NULL, reset_unknown, c5_IFSR }, | ||
173 | { CRn( 5), CRm( 1), Op1( 0), Op2( 0), is32, | ||
174 | NULL, reset_unknown, c5_ADFSR }, | ||
175 | { CRn( 5), CRm( 1), Op1( 0), Op2( 1), is32, | ||
176 | NULL, reset_unknown, c5_AIFSR }, | ||
177 | |||
178 | /* DFAR/IFAR: swapped by interrupt.S. */ | ||
179 | { CRn( 6), CRm( 0), Op1( 0), Op2( 0), is32, | ||
180 | NULL, reset_unknown, c6_DFAR }, | ||
181 | { CRn( 6), CRm( 0), Op1( 0), Op2( 2), is32, | ||
182 | NULL, reset_unknown, c6_IFAR }, | ||
183 | /* | ||
184 | * DC{C,I,CI}SW operations: | ||
185 | */ | ||
186 | { CRn( 7), CRm( 6), Op1( 0), Op2( 2), is32, access_dcsw}, | ||
187 | { CRn( 7), CRm(10), Op1( 0), Op2( 2), is32, access_dcsw}, | ||
188 | { CRn( 7), CRm(14), Op1( 0), Op2( 2), is32, access_dcsw}, | ||
189 | /* | ||
190 | * Dummy performance monitor implementation. | ||
191 | */ | ||
192 | { CRn( 9), CRm(12), Op1( 0), Op2( 0), is32, access_pmcr}, | ||
193 | { CRn( 9), CRm(12), Op1( 0), Op2( 1), is32, access_pmcntenset}, | ||
194 | { CRn( 9), CRm(12), Op1( 0), Op2( 2), is32, access_pmcntenclr}, | ||
195 | { CRn( 9), CRm(12), Op1( 0), Op2( 3), is32, access_pmovsr}, | ||
196 | { CRn( 9), CRm(12), Op1( 0), Op2( 5), is32, access_pmselr}, | ||
197 | { CRn( 9), CRm(12), Op1( 0), Op2( 6), is32, access_pmceid0}, | ||
198 | { CRn( 9), CRm(12), Op1( 0), Op2( 7), is32, access_pmceid1}, | ||
199 | { CRn( 9), CRm(13), Op1( 0), Op2( 0), is32, access_pmccntr}, | ||
200 | { CRn( 9), CRm(13), Op1( 0), Op2( 1), is32, access_pmxevtyper}, | ||
201 | { CRn( 9), CRm(13), Op1( 0), Op2( 2), is32, access_pmxevcntr}, | ||
202 | { CRn( 9), CRm(14), Op1( 0), Op2( 0), is32, access_pmuserenr}, | ||
203 | { CRn( 9), CRm(14), Op1( 0), Op2( 1), is32, access_pmintenset}, | ||
204 | { CRn( 9), CRm(14), Op1( 0), Op2( 2), is32, access_pmintenclr}, | ||
205 | |||
206 | /* PRRR/NMRR (aka MAIR0/MAIR1): swapped by interrupt.S. */ | ||
207 | { CRn(10), CRm( 2), Op1( 0), Op2( 0), is32, | ||
208 | NULL, reset_unknown, c10_PRRR}, | ||
209 | { CRn(10), CRm( 2), Op1( 0), Op2( 1), is32, | ||
210 | NULL, reset_unknown, c10_NMRR}, | ||
211 | |||
212 | /* VBAR: swapped by interrupt.S. */ | ||
213 | { CRn(12), CRm( 0), Op1( 0), Op2( 0), is32, | ||
214 | NULL, reset_val, c12_VBAR, 0x00000000 }, | ||
215 | |||
216 | /* CONTEXTIDR/TPIDRURW/TPIDRURO/TPIDRPRW: swapped by interrupt.S. */ | ||
217 | { CRn(13), CRm( 0), Op1( 0), Op2( 1), is32, | ||
218 | NULL, reset_val, c13_CID, 0x00000000 }, | ||
219 | { CRn(13), CRm( 0), Op1( 0), Op2( 2), is32, | ||
220 | NULL, reset_unknown, c13_TID_URW }, | ||
221 | { CRn(13), CRm( 0), Op1( 0), Op2( 3), is32, | ||
222 | NULL, reset_unknown, c13_TID_URO }, | ||
223 | { CRn(13), CRm( 0), Op1( 0), Op2( 4), is32, | ||
224 | NULL, reset_unknown, c13_TID_PRIV }, | ||
225 | }; | ||
226 | |||
227 | /* Target specific emulation tables */ | ||
228 | static struct kvm_coproc_target_table *target_tables[KVM_ARM_NUM_TARGETS]; | ||
229 | |||
230 | void kvm_register_target_coproc_table(struct kvm_coproc_target_table *table) | ||
231 | { | ||
232 | target_tables[table->target] = table; | ||
233 | } | ||
234 | |||
235 | /* Get specific register table for this target. */ | ||
236 | static const struct coproc_reg *get_target_table(unsigned target, size_t *num) | ||
237 | { | ||
238 | struct kvm_coproc_target_table *table; | ||
239 | |||
240 | table = target_tables[target]; | ||
241 | *num = table->num; | ||
242 | return table->table; | ||
243 | } | ||
244 | |||
245 | static const struct coproc_reg *find_reg(const struct coproc_params *params, | ||
246 | const struct coproc_reg table[], | ||
247 | unsigned int num) | ||
248 | { | ||
249 | unsigned int i; | ||
250 | |||
251 | for (i = 0; i < num; i++) { | ||
252 | const struct coproc_reg *r = &table[i]; | ||
253 | |||
254 | if (params->is_64bit != r->is_64) | ||
255 | continue; | ||
256 | if (params->CRn != r->CRn) | ||
257 | continue; | ||
258 | if (params->CRm != r->CRm) | ||
259 | continue; | ||
260 | if (params->Op1 != r->Op1) | ||
261 | continue; | ||
262 | if (params->Op2 != r->Op2) | ||
263 | continue; | ||
264 | |||
265 | return r; | ||
266 | } | ||
267 | return NULL; | ||
268 | } | ||
269 | |||
270 | static int emulate_cp15(struct kvm_vcpu *vcpu, | ||
271 | const struct coproc_params *params) | ||
272 | { | ||
273 | size_t num; | ||
274 | const struct coproc_reg *table, *r; | ||
275 | |||
276 | trace_kvm_emulate_cp15_imp(params->Op1, params->Rt1, params->CRn, | ||
277 | params->CRm, params->Op2, params->is_write); | ||
278 | |||
279 | table = get_target_table(vcpu->arch.target, &num); | ||
280 | |||
281 | /* Search target-specific then generic table. */ | ||
282 | r = find_reg(params, table, num); | ||
283 | if (!r) | ||
284 | r = find_reg(params, cp15_regs, ARRAY_SIZE(cp15_regs)); | ||
285 | |||
286 | if (likely(r)) { | ||
287 | /* If we don't have an accessor, we should never get here! */ | ||
288 | BUG_ON(!r->access); | ||
289 | |||
290 | if (likely(r->access(vcpu, params, r))) { | ||
291 | /* Skip instruction, since it was emulated */ | ||
292 | kvm_skip_instr(vcpu, (vcpu->arch.hsr >> 25) & 1); | ||
293 | return 1; | ||
294 | } | ||
295 | /* If access function fails, it should complain. */ | ||
296 | } else { | ||
297 | kvm_err("Unsupported guest CP15 access at: %08x\n", | ||
298 | *vcpu_pc(vcpu)); | ||
299 | print_cp_instr(params); | ||
300 | } | ||
301 | kvm_inject_undefined(vcpu); | ||
302 | return 1; | ||
303 | } | ||
304 | |||
305 | /** | ||
306 | * kvm_handle_cp15_64 -- handles a mrrc/mcrr trap on a guest CP15 access | ||
307 | * @vcpu: The VCPU pointer | ||
308 | * @run: The kvm_run struct | ||
309 | */ | ||
310 | int kvm_handle_cp15_64(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
311 | { | ||
312 | struct coproc_params params; | ||
313 | |||
314 | params.CRm = (vcpu->arch.hsr >> 1) & 0xf; | ||
315 | params.Rt1 = (vcpu->arch.hsr >> 5) & 0xf; | ||
316 | params.is_write = ((vcpu->arch.hsr & 1) == 0); | ||
317 | params.is_64bit = true; | ||
318 | |||
319 | params.Op1 = (vcpu->arch.hsr >> 16) & 0xf; | ||
320 | params.Op2 = 0; | ||
321 | params.Rt2 = (vcpu->arch.hsr >> 10) & 0xf; | ||
322 | params.CRn = 0; | ||
323 | |||
324 | return emulate_cp15(vcpu, ¶ms); | ||
325 | } | ||
326 | |||
327 | static void reset_coproc_regs(struct kvm_vcpu *vcpu, | ||
328 | const struct coproc_reg *table, size_t num) | ||
329 | { | ||
330 | unsigned long i; | ||
331 | |||
332 | for (i = 0; i < num; i++) | ||
333 | if (table[i].reset) | ||
334 | table[i].reset(vcpu, &table[i]); | ||
335 | } | ||
336 | |||
337 | /** | ||
338 | * kvm_handle_cp15_32 -- handles a mrc/mcr trap on a guest CP15 access | ||
339 | * @vcpu: The VCPU pointer | ||
340 | * @run: The kvm_run struct | ||
341 | */ | ||
342 | int kvm_handle_cp15_32(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
343 | { | ||
344 | struct coproc_params params; | ||
345 | |||
346 | params.CRm = (vcpu->arch.hsr >> 1) & 0xf; | ||
347 | params.Rt1 = (vcpu->arch.hsr >> 5) & 0xf; | ||
348 | params.is_write = ((vcpu->arch.hsr & 1) == 0); | ||
349 | params.is_64bit = false; | ||
350 | |||
351 | params.CRn = (vcpu->arch.hsr >> 10) & 0xf; | ||
352 | params.Op1 = (vcpu->arch.hsr >> 14) & 0x7; | ||
353 | params.Op2 = (vcpu->arch.hsr >> 17) & 0x7; | ||
354 | params.Rt2 = 0; | ||
355 | |||
356 | return emulate_cp15(vcpu, ¶ms); | ||
357 | } | ||
358 | |||
359 | /****************************************************************************** | ||
360 | * Userspace API | ||
361 | *****************************************************************************/ | ||
362 | |||
363 | static bool index_to_params(u64 id, struct coproc_params *params) | ||
364 | { | ||
365 | switch (id & KVM_REG_SIZE_MASK) { | ||
366 | case KVM_REG_SIZE_U32: | ||
367 | /* Any unused index bits means it's not valid. */ | ||
368 | if (id & ~(KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK | ||
369 | | KVM_REG_ARM_COPROC_MASK | ||
370 | | KVM_REG_ARM_32_CRN_MASK | ||
371 | | KVM_REG_ARM_CRM_MASK | ||
372 | | KVM_REG_ARM_OPC1_MASK | ||
373 | | KVM_REG_ARM_32_OPC2_MASK)) | ||
374 | return false; | ||
375 | |||
376 | params->is_64bit = false; | ||
377 | params->CRn = ((id & KVM_REG_ARM_32_CRN_MASK) | ||
378 | >> KVM_REG_ARM_32_CRN_SHIFT); | ||
379 | params->CRm = ((id & KVM_REG_ARM_CRM_MASK) | ||
380 | >> KVM_REG_ARM_CRM_SHIFT); | ||
381 | params->Op1 = ((id & KVM_REG_ARM_OPC1_MASK) | ||
382 | >> KVM_REG_ARM_OPC1_SHIFT); | ||
383 | params->Op2 = ((id & KVM_REG_ARM_32_OPC2_MASK) | ||
384 | >> KVM_REG_ARM_32_OPC2_SHIFT); | ||
385 | return true; | ||
386 | case KVM_REG_SIZE_U64: | ||
387 | /* Any unused index bits means it's not valid. */ | ||
388 | if (id & ~(KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK | ||
389 | | KVM_REG_ARM_COPROC_MASK | ||
390 | | KVM_REG_ARM_CRM_MASK | ||
391 | | KVM_REG_ARM_OPC1_MASK)) | ||
392 | return false; | ||
393 | params->is_64bit = true; | ||
394 | params->CRm = ((id & KVM_REG_ARM_CRM_MASK) | ||
395 | >> KVM_REG_ARM_CRM_SHIFT); | ||
396 | params->Op1 = ((id & KVM_REG_ARM_OPC1_MASK) | ||
397 | >> KVM_REG_ARM_OPC1_SHIFT); | ||
398 | params->Op2 = 0; | ||
399 | params->CRn = 0; | ||
400 | return true; | ||
401 | default: | ||
402 | return false; | ||
403 | } | ||
404 | } | ||
405 | |||
406 | /* Decode an index value, and find the cp15 coproc_reg entry. */ | ||
407 | static const struct coproc_reg *index_to_coproc_reg(struct kvm_vcpu *vcpu, | ||
408 | u64 id) | ||
409 | { | ||
410 | size_t num; | ||
411 | const struct coproc_reg *table, *r; | ||
412 | struct coproc_params params; | ||
413 | |||
414 | /* We only do cp15 for now. */ | ||
415 | if ((id & KVM_REG_ARM_COPROC_MASK) >> KVM_REG_ARM_COPROC_SHIFT != 15) | ||
416 | return NULL; | ||
417 | |||
418 | if (!index_to_params(id, ¶ms)) | ||
419 | return NULL; | ||
420 | |||
421 | table = get_target_table(vcpu->arch.target, &num); | ||
422 | r = find_reg(¶ms, table, num); | ||
423 | if (!r) | ||
424 | r = find_reg(¶ms, cp15_regs, ARRAY_SIZE(cp15_regs)); | ||
425 | |||
426 | /* Not saved in the cp15 array? */ | ||
427 | if (r && !r->reg) | ||
428 | r = NULL; | ||
429 | |||
430 | return r; | ||
431 | } | ||
432 | |||
433 | /* | ||
434 | * These are the invariant cp15 registers: we let the guest see the host | ||
435 | * versions of these, so they're part of the guest state. | ||
436 | * | ||
437 | * A future CPU may provide a mechanism to present different values to | ||
438 | * the guest, or a future kvm may trap them. | ||
439 | */ | ||
440 | /* Unfortunately, there's no register-argument for mrc, so generate. */ | ||
441 | #define FUNCTION_FOR32(crn, crm, op1, op2, name) \ | ||
442 | static void get_##name(struct kvm_vcpu *v, \ | ||
443 | const struct coproc_reg *r) \ | ||
444 | { \ | ||
445 | u32 val; \ | ||
446 | \ | ||
447 | asm volatile("mrc p15, " __stringify(op1) \ | ||
448 | ", %0, c" __stringify(crn) \ | ||
449 | ", c" __stringify(crm) \ | ||
450 | ", " __stringify(op2) "\n" : "=r" (val)); \ | ||
451 | ((struct coproc_reg *)r)->val = val; \ | ||
452 | } | ||
453 | |||
454 | FUNCTION_FOR32(0, 0, 0, 0, MIDR) | ||
455 | FUNCTION_FOR32(0, 0, 0, 1, CTR) | ||
456 | FUNCTION_FOR32(0, 0, 0, 2, TCMTR) | ||
457 | FUNCTION_FOR32(0, 0, 0, 3, TLBTR) | ||
458 | FUNCTION_FOR32(0, 0, 0, 6, REVIDR) | ||
459 | FUNCTION_FOR32(0, 1, 0, 0, ID_PFR0) | ||
460 | FUNCTION_FOR32(0, 1, 0, 1, ID_PFR1) | ||
461 | FUNCTION_FOR32(0, 1, 0, 2, ID_DFR0) | ||
462 | FUNCTION_FOR32(0, 1, 0, 3, ID_AFR0) | ||
463 | FUNCTION_FOR32(0, 1, 0, 4, ID_MMFR0) | ||
464 | FUNCTION_FOR32(0, 1, 0, 5, ID_MMFR1) | ||
465 | FUNCTION_FOR32(0, 1, 0, 6, ID_MMFR2) | ||
466 | FUNCTION_FOR32(0, 1, 0, 7, ID_MMFR3) | ||
467 | FUNCTION_FOR32(0, 2, 0, 0, ID_ISAR0) | ||
468 | FUNCTION_FOR32(0, 2, 0, 1, ID_ISAR1) | ||
469 | FUNCTION_FOR32(0, 2, 0, 2, ID_ISAR2) | ||
470 | FUNCTION_FOR32(0, 2, 0, 3, ID_ISAR3) | ||
471 | FUNCTION_FOR32(0, 2, 0, 4, ID_ISAR4) | ||
472 | FUNCTION_FOR32(0, 2, 0, 5, ID_ISAR5) | ||
473 | FUNCTION_FOR32(0, 0, 1, 1, CLIDR) | ||
474 | FUNCTION_FOR32(0, 0, 1, 7, AIDR) | ||
475 | |||
476 | /* ->val is filled in by kvm_invariant_coproc_table_init() */ | ||
477 | static struct coproc_reg invariant_cp15[] = { | ||
478 | { CRn( 0), CRm( 0), Op1( 0), Op2( 0), is32, NULL, get_MIDR }, | ||
479 | { CRn( 0), CRm( 0), Op1( 0), Op2( 1), is32, NULL, get_CTR }, | ||
480 | { CRn( 0), CRm( 0), Op1( 0), Op2( 2), is32, NULL, get_TCMTR }, | ||
481 | { CRn( 0), CRm( 0), Op1( 0), Op2( 3), is32, NULL, get_TLBTR }, | ||
482 | { CRn( 0), CRm( 0), Op1( 0), Op2( 6), is32, NULL, get_REVIDR }, | ||
483 | |||
484 | { CRn( 0), CRm( 1), Op1( 0), Op2( 0), is32, NULL, get_ID_PFR0 }, | ||
485 | { CRn( 0), CRm( 1), Op1( 0), Op2( 1), is32, NULL, get_ID_PFR1 }, | ||
486 | { CRn( 0), CRm( 1), Op1( 0), Op2( 2), is32, NULL, get_ID_DFR0 }, | ||
487 | { CRn( 0), CRm( 1), Op1( 0), Op2( 3), is32, NULL, get_ID_AFR0 }, | ||
488 | { CRn( 0), CRm( 1), Op1( 0), Op2( 4), is32, NULL, get_ID_MMFR0 }, | ||
489 | { CRn( 0), CRm( 1), Op1( 0), Op2( 5), is32, NULL, get_ID_MMFR1 }, | ||
490 | { CRn( 0), CRm( 1), Op1( 0), Op2( 6), is32, NULL, get_ID_MMFR2 }, | ||
491 | { CRn( 0), CRm( 1), Op1( 0), Op2( 7), is32, NULL, get_ID_MMFR3 }, | ||
492 | |||
493 | { CRn( 0), CRm( 2), Op1( 0), Op2( 0), is32, NULL, get_ID_ISAR0 }, | ||
494 | { CRn( 0), CRm( 2), Op1( 0), Op2( 1), is32, NULL, get_ID_ISAR1 }, | ||
495 | { CRn( 0), CRm( 2), Op1( 0), Op2( 2), is32, NULL, get_ID_ISAR2 }, | ||
496 | { CRn( 0), CRm( 2), Op1( 0), Op2( 3), is32, NULL, get_ID_ISAR3 }, | ||
497 | { CRn( 0), CRm( 2), Op1( 0), Op2( 4), is32, NULL, get_ID_ISAR4 }, | ||
498 | { CRn( 0), CRm( 2), Op1( 0), Op2( 5), is32, NULL, get_ID_ISAR5 }, | ||
499 | |||
500 | { CRn( 0), CRm( 0), Op1( 1), Op2( 1), is32, NULL, get_CLIDR }, | ||
501 | { CRn( 0), CRm( 0), Op1( 1), Op2( 7), is32, NULL, get_AIDR }, | ||
502 | }; | ||
503 | |||
504 | static int reg_from_user(void *val, const void __user *uaddr, u64 id) | ||
505 | { | ||
506 | /* This Just Works because we are little endian. */ | ||
507 | if (copy_from_user(val, uaddr, KVM_REG_SIZE(id)) != 0) | ||
508 | return -EFAULT; | ||
509 | return 0; | ||
510 | } | ||
511 | |||
512 | static int reg_to_user(void __user *uaddr, const void *val, u64 id) | ||
513 | { | ||
514 | /* This Just Works because we are little endian. */ | ||
515 | if (copy_to_user(uaddr, val, KVM_REG_SIZE(id)) != 0) | ||
516 | return -EFAULT; | ||
517 | return 0; | ||
518 | } | ||
519 | |||
520 | static int get_invariant_cp15(u64 id, void __user *uaddr) | ||
521 | { | ||
522 | struct coproc_params params; | ||
523 | const struct coproc_reg *r; | ||
524 | |||
525 | if (!index_to_params(id, ¶ms)) | ||
526 | return -ENOENT; | ||
527 | |||
528 | r = find_reg(¶ms, invariant_cp15, ARRAY_SIZE(invariant_cp15)); | ||
529 | if (!r) | ||
530 | return -ENOENT; | ||
531 | |||
532 | return reg_to_user(uaddr, &r->val, id); | ||
533 | } | ||
534 | |||
535 | static int set_invariant_cp15(u64 id, void __user *uaddr) | ||
536 | { | ||
537 | struct coproc_params params; | ||
538 | const struct coproc_reg *r; | ||
539 | int err; | ||
540 | u64 val = 0; /* Make sure high bits are 0 for 32-bit regs */ | ||
541 | |||
542 | if (!index_to_params(id, ¶ms)) | ||
543 | return -ENOENT; | ||
544 | r = find_reg(¶ms, invariant_cp15, ARRAY_SIZE(invariant_cp15)); | ||
545 | if (!r) | ||
546 | return -ENOENT; | ||
547 | |||
548 | err = reg_from_user(&val, uaddr, id); | ||
549 | if (err) | ||
550 | return err; | ||
551 | |||
552 | /* This is what we mean by invariant: you can't change it. */ | ||
553 | if (r->val != val) | ||
554 | return -EINVAL; | ||
555 | |||
556 | return 0; | ||
557 | } | ||
558 | |||
559 | static bool is_valid_cache(u32 val) | ||
560 | { | ||
561 | u32 level, ctype; | ||
562 | |||
563 | if (val >= CSSELR_MAX) | ||
564 | return -ENOENT; | ||
565 | |||
566 | /* Bottom bit is Instruction or Data bit. Next 3 bits are level. */ | ||
567 | level = (val >> 1); | ||
568 | ctype = (cache_levels >> (level * 3)) & 7; | ||
569 | |||
570 | switch (ctype) { | ||
571 | case 0: /* No cache */ | ||
572 | return false; | ||
573 | case 1: /* Instruction cache only */ | ||
574 | return (val & 1); | ||
575 | case 2: /* Data cache only */ | ||
576 | case 4: /* Unified cache */ | ||
577 | return !(val & 1); | ||
578 | case 3: /* Separate instruction and data caches */ | ||
579 | return true; | ||
580 | default: /* Reserved: we can't know instruction or data. */ | ||
581 | return false; | ||
582 | } | ||
583 | } | ||
584 | |||
585 | /* Which cache CCSIDR represents depends on CSSELR value. */ | ||
586 | static u32 get_ccsidr(u32 csselr) | ||
587 | { | ||
588 | u32 ccsidr; | ||
589 | |||
590 | /* Make sure noone else changes CSSELR during this! */ | ||
591 | local_irq_disable(); | ||
592 | /* Put value into CSSELR */ | ||
593 | asm volatile("mcr p15, 2, %0, c0, c0, 0" : : "r" (csselr)); | ||
594 | isb(); | ||
595 | /* Read result out of CCSIDR */ | ||
596 | asm volatile("mrc p15, 1, %0, c0, c0, 0" : "=r" (ccsidr)); | ||
597 | local_irq_enable(); | ||
598 | |||
599 | return ccsidr; | ||
600 | } | ||
601 | |||
602 | static int demux_c15_get(u64 id, void __user *uaddr) | ||
603 | { | ||
604 | u32 val; | ||
605 | u32 __user *uval = uaddr; | ||
606 | |||
607 | /* Fail if we have unknown bits set. */ | ||
608 | if (id & ~(KVM_REG_ARCH_MASK|KVM_REG_SIZE_MASK|KVM_REG_ARM_COPROC_MASK | ||
609 | | ((1 << KVM_REG_ARM_COPROC_SHIFT)-1))) | ||
610 | return -ENOENT; | ||
611 | |||
612 | switch (id & KVM_REG_ARM_DEMUX_ID_MASK) { | ||
613 | case KVM_REG_ARM_DEMUX_ID_CCSIDR: | ||
614 | if (KVM_REG_SIZE(id) != 4) | ||
615 | return -ENOENT; | ||
616 | val = (id & KVM_REG_ARM_DEMUX_VAL_MASK) | ||
617 | >> KVM_REG_ARM_DEMUX_VAL_SHIFT; | ||
618 | if (!is_valid_cache(val)) | ||
619 | return -ENOENT; | ||
620 | |||
621 | return put_user(get_ccsidr(val), uval); | ||
622 | default: | ||
623 | return -ENOENT; | ||
624 | } | ||
625 | } | ||
626 | |||
627 | static int demux_c15_set(u64 id, void __user *uaddr) | ||
628 | { | ||
629 | u32 val, newval; | ||
630 | u32 __user *uval = uaddr; | ||
631 | |||
632 | /* Fail if we have unknown bits set. */ | ||
633 | if (id & ~(KVM_REG_ARCH_MASK|KVM_REG_SIZE_MASK|KVM_REG_ARM_COPROC_MASK | ||
634 | | ((1 << KVM_REG_ARM_COPROC_SHIFT)-1))) | ||
635 | return -ENOENT; | ||
636 | |||
637 | switch (id & KVM_REG_ARM_DEMUX_ID_MASK) { | ||
638 | case KVM_REG_ARM_DEMUX_ID_CCSIDR: | ||
639 | if (KVM_REG_SIZE(id) != 4) | ||
640 | return -ENOENT; | ||
641 | val = (id & KVM_REG_ARM_DEMUX_VAL_MASK) | ||
642 | >> KVM_REG_ARM_DEMUX_VAL_SHIFT; | ||
643 | if (!is_valid_cache(val)) | ||
644 | return -ENOENT; | ||
645 | |||
646 | if (get_user(newval, uval)) | ||
647 | return -EFAULT; | ||
648 | |||
649 | /* This is also invariant: you can't change it. */ | ||
650 | if (newval != get_ccsidr(val)) | ||
651 | return -EINVAL; | ||
652 | return 0; | ||
653 | default: | ||
654 | return -ENOENT; | ||
655 | } | ||
656 | } | ||
657 | |||
658 | #ifdef CONFIG_VFPv3 | ||
659 | static const int vfp_sysregs[] = { KVM_REG_ARM_VFP_FPEXC, | ||
660 | KVM_REG_ARM_VFP_FPSCR, | ||
661 | KVM_REG_ARM_VFP_FPINST, | ||
662 | KVM_REG_ARM_VFP_FPINST2, | ||
663 | KVM_REG_ARM_VFP_MVFR0, | ||
664 | KVM_REG_ARM_VFP_MVFR1, | ||
665 | KVM_REG_ARM_VFP_FPSID }; | ||
666 | |||
667 | static unsigned int num_fp_regs(void) | ||
668 | { | ||
669 | if (((fmrx(MVFR0) & MVFR0_A_SIMD_MASK) >> MVFR0_A_SIMD_BIT) == 2) | ||
670 | return 32; | ||
671 | else | ||
672 | return 16; | ||
673 | } | ||
674 | |||
675 | static unsigned int num_vfp_regs(void) | ||
676 | { | ||
677 | /* Normal FP regs + control regs. */ | ||
678 | return num_fp_regs() + ARRAY_SIZE(vfp_sysregs); | ||
679 | } | ||
680 | |||
681 | static int copy_vfp_regids(u64 __user *uindices) | ||
682 | { | ||
683 | unsigned int i; | ||
684 | const u64 u32reg = KVM_REG_ARM | KVM_REG_SIZE_U32 | KVM_REG_ARM_VFP; | ||
685 | const u64 u64reg = KVM_REG_ARM | KVM_REG_SIZE_U64 | KVM_REG_ARM_VFP; | ||
686 | |||
687 | for (i = 0; i < num_fp_regs(); i++) { | ||
688 | if (put_user((u64reg | KVM_REG_ARM_VFP_BASE_REG) + i, | ||
689 | uindices)) | ||
690 | return -EFAULT; | ||
691 | uindices++; | ||
692 | } | ||
693 | |||
694 | for (i = 0; i < ARRAY_SIZE(vfp_sysregs); i++) { | ||
695 | if (put_user(u32reg | vfp_sysregs[i], uindices)) | ||
696 | return -EFAULT; | ||
697 | uindices++; | ||
698 | } | ||
699 | |||
700 | return num_vfp_regs(); | ||
701 | } | ||
702 | |||
703 | static int vfp_get_reg(const struct kvm_vcpu *vcpu, u64 id, void __user *uaddr) | ||
704 | { | ||
705 | u32 vfpid = (id & KVM_REG_ARM_VFP_MASK); | ||
706 | u32 val; | ||
707 | |||
708 | /* Fail if we have unknown bits set. */ | ||
709 | if (id & ~(KVM_REG_ARCH_MASK|KVM_REG_SIZE_MASK|KVM_REG_ARM_COPROC_MASK | ||
710 | | ((1 << KVM_REG_ARM_COPROC_SHIFT)-1))) | ||
711 | return -ENOENT; | ||
712 | |||
713 | if (vfpid < num_fp_regs()) { | ||
714 | if (KVM_REG_SIZE(id) != 8) | ||
715 | return -ENOENT; | ||
716 | return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpregs[vfpid], | ||
717 | id); | ||
718 | } | ||
719 | |||
720 | /* FP control registers are all 32 bit. */ | ||
721 | if (KVM_REG_SIZE(id) != 4) | ||
722 | return -ENOENT; | ||
723 | |||
724 | switch (vfpid) { | ||
725 | case KVM_REG_ARM_VFP_FPEXC: | ||
726 | return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpexc, id); | ||
727 | case KVM_REG_ARM_VFP_FPSCR: | ||
728 | return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpscr, id); | ||
729 | case KVM_REG_ARM_VFP_FPINST: | ||
730 | return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpinst, id); | ||
731 | case KVM_REG_ARM_VFP_FPINST2: | ||
732 | return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpinst2, id); | ||
733 | case KVM_REG_ARM_VFP_MVFR0: | ||
734 | val = fmrx(MVFR0); | ||
735 | return reg_to_user(uaddr, &val, id); | ||
736 | case KVM_REG_ARM_VFP_MVFR1: | ||
737 | val = fmrx(MVFR1); | ||
738 | return reg_to_user(uaddr, &val, id); | ||
739 | case KVM_REG_ARM_VFP_FPSID: | ||
740 | val = fmrx(FPSID); | ||
741 | return reg_to_user(uaddr, &val, id); | ||
742 | default: | ||
743 | return -ENOENT; | ||
744 | } | ||
745 | } | ||
746 | |||
747 | static int vfp_set_reg(struct kvm_vcpu *vcpu, u64 id, const void __user *uaddr) | ||
748 | { | ||
749 | u32 vfpid = (id & KVM_REG_ARM_VFP_MASK); | ||
750 | u32 val; | ||
751 | |||
752 | /* Fail if we have unknown bits set. */ | ||
753 | if (id & ~(KVM_REG_ARCH_MASK|KVM_REG_SIZE_MASK|KVM_REG_ARM_COPROC_MASK | ||
754 | | ((1 << KVM_REG_ARM_COPROC_SHIFT)-1))) | ||
755 | return -ENOENT; | ||
756 | |||
757 | if (vfpid < num_fp_regs()) { | ||
758 | if (KVM_REG_SIZE(id) != 8) | ||
759 | return -ENOENT; | ||
760 | return reg_from_user(&vcpu->arch.vfp_guest.fpregs[vfpid], | ||
761 | uaddr, id); | ||
762 | } | ||
763 | |||
764 | /* FP control registers are all 32 bit. */ | ||
765 | if (KVM_REG_SIZE(id) != 4) | ||
766 | return -ENOENT; | ||
767 | |||
768 | switch (vfpid) { | ||
769 | case KVM_REG_ARM_VFP_FPEXC: | ||
770 | return reg_from_user(&vcpu->arch.vfp_guest.fpexc, uaddr, id); | ||
771 | case KVM_REG_ARM_VFP_FPSCR: | ||
772 | return reg_from_user(&vcpu->arch.vfp_guest.fpscr, uaddr, id); | ||
773 | case KVM_REG_ARM_VFP_FPINST: | ||
774 | return reg_from_user(&vcpu->arch.vfp_guest.fpinst, uaddr, id); | ||
775 | case KVM_REG_ARM_VFP_FPINST2: | ||
776 | return reg_from_user(&vcpu->arch.vfp_guest.fpinst2, uaddr, id); | ||
777 | /* These are invariant. */ | ||
778 | case KVM_REG_ARM_VFP_MVFR0: | ||
779 | if (reg_from_user(&val, uaddr, id)) | ||
780 | return -EFAULT; | ||
781 | if (val != fmrx(MVFR0)) | ||
782 | return -EINVAL; | ||
783 | return 0; | ||
784 | case KVM_REG_ARM_VFP_MVFR1: | ||
785 | if (reg_from_user(&val, uaddr, id)) | ||
786 | return -EFAULT; | ||
787 | if (val != fmrx(MVFR1)) | ||
788 | return -EINVAL; | ||
789 | return 0; | ||
790 | case KVM_REG_ARM_VFP_FPSID: | ||
791 | if (reg_from_user(&val, uaddr, id)) | ||
792 | return -EFAULT; | ||
793 | if (val != fmrx(FPSID)) | ||
794 | return -EINVAL; | ||
795 | return 0; | ||
796 | default: | ||
797 | return -ENOENT; | ||
798 | } | ||
799 | } | ||
800 | #else /* !CONFIG_VFPv3 */ | ||
801 | static unsigned int num_vfp_regs(void) | ||
802 | { | ||
803 | return 0; | ||
804 | } | ||
805 | |||
806 | static int copy_vfp_regids(u64 __user *uindices) | ||
807 | { | ||
808 | return 0; | ||
809 | } | ||
810 | |||
811 | static int vfp_get_reg(const struct kvm_vcpu *vcpu, u64 id, void __user *uaddr) | ||
812 | { | ||
813 | return -ENOENT; | ||
814 | } | ||
815 | |||
816 | static int vfp_set_reg(struct kvm_vcpu *vcpu, u64 id, const void __user *uaddr) | ||
817 | { | ||
818 | return -ENOENT; | ||
819 | } | ||
820 | #endif /* !CONFIG_VFPv3 */ | ||
821 | |||
822 | int kvm_arm_coproc_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) | ||
823 | { | ||
824 | const struct coproc_reg *r; | ||
825 | void __user *uaddr = (void __user *)(long)reg->addr; | ||
826 | |||
827 | if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_DEMUX) | ||
828 | return demux_c15_get(reg->id, uaddr); | ||
829 | |||
830 | if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_VFP) | ||
831 | return vfp_get_reg(vcpu, reg->id, uaddr); | ||
832 | |||
833 | r = index_to_coproc_reg(vcpu, reg->id); | ||
834 | if (!r) | ||
835 | return get_invariant_cp15(reg->id, uaddr); | ||
836 | |||
837 | /* Note: copies two regs if size is 64 bit. */ | ||
838 | return reg_to_user(uaddr, &vcpu->arch.cp15[r->reg], reg->id); | ||
839 | } | ||
840 | |||
841 | int kvm_arm_coproc_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) | ||
842 | { | ||
843 | const struct coproc_reg *r; | ||
844 | void __user *uaddr = (void __user *)(long)reg->addr; | ||
845 | |||
846 | if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_DEMUX) | ||
847 | return demux_c15_set(reg->id, uaddr); | ||
848 | |||
849 | if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_VFP) | ||
850 | return vfp_set_reg(vcpu, reg->id, uaddr); | ||
851 | |||
852 | r = index_to_coproc_reg(vcpu, reg->id); | ||
853 | if (!r) | ||
854 | return set_invariant_cp15(reg->id, uaddr); | ||
855 | |||
856 | /* Note: copies two regs if size is 64 bit */ | ||
857 | return reg_from_user(&vcpu->arch.cp15[r->reg], uaddr, reg->id); | ||
858 | } | ||
859 | |||
860 | static unsigned int num_demux_regs(void) | ||
861 | { | ||
862 | unsigned int i, count = 0; | ||
863 | |||
864 | for (i = 0; i < CSSELR_MAX; i++) | ||
865 | if (is_valid_cache(i)) | ||
866 | count++; | ||
867 | |||
868 | return count; | ||
869 | } | ||
870 | |||
871 | static int write_demux_regids(u64 __user *uindices) | ||
872 | { | ||
873 | u64 val = KVM_REG_ARM | KVM_REG_SIZE_U32 | KVM_REG_ARM_DEMUX; | ||
874 | unsigned int i; | ||
875 | |||
876 | val |= KVM_REG_ARM_DEMUX_ID_CCSIDR; | ||
877 | for (i = 0; i < CSSELR_MAX; i++) { | ||
878 | if (!is_valid_cache(i)) | ||
879 | continue; | ||
880 | if (put_user(val | i, uindices)) | ||
881 | return -EFAULT; | ||
882 | uindices++; | ||
883 | } | ||
884 | return 0; | ||
885 | } | ||
886 | |||
887 | static u64 cp15_to_index(const struct coproc_reg *reg) | ||
888 | { | ||
889 | u64 val = KVM_REG_ARM | (15 << KVM_REG_ARM_COPROC_SHIFT); | ||
890 | if (reg->is_64) { | ||
891 | val |= KVM_REG_SIZE_U64; | ||
892 | val |= (reg->Op1 << KVM_REG_ARM_OPC1_SHIFT); | ||
893 | val |= (reg->CRm << KVM_REG_ARM_CRM_SHIFT); | ||
894 | } else { | ||
895 | val |= KVM_REG_SIZE_U32; | ||
896 | val |= (reg->Op1 << KVM_REG_ARM_OPC1_SHIFT); | ||
897 | val |= (reg->Op2 << KVM_REG_ARM_32_OPC2_SHIFT); | ||
898 | val |= (reg->CRm << KVM_REG_ARM_CRM_SHIFT); | ||
899 | val |= (reg->CRn << KVM_REG_ARM_32_CRN_SHIFT); | ||
900 | } | ||
901 | return val; | ||
902 | } | ||
903 | |||
904 | static bool copy_reg_to_user(const struct coproc_reg *reg, u64 __user **uind) | ||
905 | { | ||
906 | if (!*uind) | ||
907 | return true; | ||
908 | |||
909 | if (put_user(cp15_to_index(reg), *uind)) | ||
910 | return false; | ||
911 | |||
912 | (*uind)++; | ||
913 | return true; | ||
914 | } | ||
915 | |||
916 | /* Assumed ordered tables, see kvm_coproc_table_init. */ | ||
917 | static int walk_cp15(struct kvm_vcpu *vcpu, u64 __user *uind) | ||
918 | { | ||
919 | const struct coproc_reg *i1, *i2, *end1, *end2; | ||
920 | unsigned int total = 0; | ||
921 | size_t num; | ||
922 | |||
923 | /* We check for duplicates here, to allow arch-specific overrides. */ | ||
924 | i1 = get_target_table(vcpu->arch.target, &num); | ||
925 | end1 = i1 + num; | ||
926 | i2 = cp15_regs; | ||
927 | end2 = cp15_regs + ARRAY_SIZE(cp15_regs); | ||
928 | |||
929 | BUG_ON(i1 == end1 || i2 == end2); | ||
930 | |||
931 | /* Walk carefully, as both tables may refer to the same register. */ | ||
932 | while (i1 || i2) { | ||
933 | int cmp = cmp_reg(i1, i2); | ||
934 | /* target-specific overrides generic entry. */ | ||
935 | if (cmp <= 0) { | ||
936 | /* Ignore registers we trap but don't save. */ | ||
937 | if (i1->reg) { | ||
938 | if (!copy_reg_to_user(i1, &uind)) | ||
939 | return -EFAULT; | ||
940 | total++; | ||
941 | } | ||
942 | } else { | ||
943 | /* Ignore registers we trap but don't save. */ | ||
944 | if (i2->reg) { | ||
945 | if (!copy_reg_to_user(i2, &uind)) | ||
946 | return -EFAULT; | ||
947 | total++; | ||
948 | } | ||
949 | } | ||
950 | |||
951 | if (cmp <= 0 && ++i1 == end1) | ||
952 | i1 = NULL; | ||
953 | if (cmp >= 0 && ++i2 == end2) | ||
954 | i2 = NULL; | ||
955 | } | ||
956 | return total; | ||
957 | } | ||
958 | |||
959 | unsigned long kvm_arm_num_coproc_regs(struct kvm_vcpu *vcpu) | ||
960 | { | ||
961 | return ARRAY_SIZE(invariant_cp15) | ||
962 | + num_demux_regs() | ||
963 | + num_vfp_regs() | ||
964 | + walk_cp15(vcpu, (u64 __user *)NULL); | ||
965 | } | ||
966 | |||
967 | int kvm_arm_copy_coproc_indices(struct kvm_vcpu *vcpu, u64 __user *uindices) | ||
968 | { | ||
969 | unsigned int i; | ||
970 | int err; | ||
971 | |||
972 | /* Then give them all the invariant registers' indices. */ | ||
973 | for (i = 0; i < ARRAY_SIZE(invariant_cp15); i++) { | ||
974 | if (put_user(cp15_to_index(&invariant_cp15[i]), uindices)) | ||
975 | return -EFAULT; | ||
976 | uindices++; | ||
977 | } | ||
978 | |||
979 | err = walk_cp15(vcpu, uindices); | ||
980 | if (err < 0) | ||
981 | return err; | ||
982 | uindices += err; | ||
983 | |||
984 | err = copy_vfp_regids(uindices); | ||
985 | if (err < 0) | ||
986 | return err; | ||
987 | uindices += err; | ||
988 | |||
989 | return write_demux_regids(uindices); | ||
990 | } | ||
991 | |||
992 | void kvm_coproc_table_init(void) | ||
993 | { | ||
994 | unsigned int i; | ||
995 | |||
996 | /* Make sure tables are unique and in order. */ | ||
997 | for (i = 1; i < ARRAY_SIZE(cp15_regs); i++) | ||
998 | BUG_ON(cmp_reg(&cp15_regs[i-1], &cp15_regs[i]) >= 0); | ||
999 | |||
1000 | /* We abuse the reset function to overwrite the table itself. */ | ||
1001 | for (i = 0; i < ARRAY_SIZE(invariant_cp15); i++) | ||
1002 | invariant_cp15[i].reset(NULL, &invariant_cp15[i]); | ||
1003 | |||
1004 | /* | ||
1005 | * CLIDR format is awkward, so clean it up. See ARM B4.1.20: | ||
1006 | * | ||
1007 | * If software reads the Cache Type fields from Ctype1 | ||
1008 | * upwards, once it has seen a value of 0b000, no caches | ||
1009 | * exist at further-out levels of the hierarchy. So, for | ||
1010 | * example, if Ctype3 is the first Cache Type field with a | ||
1011 | * value of 0b000, the values of Ctype4 to Ctype7 must be | ||
1012 | * ignored. | ||
1013 | */ | ||
1014 | asm volatile("mrc p15, 1, %0, c0, c0, 1" : "=r" (cache_levels)); | ||
1015 | for (i = 0; i < 7; i++) | ||
1016 | if (((cache_levels >> (i*3)) & 7) == 0) | ||
1017 | break; | ||
1018 | /* Clear all higher bits. */ | ||
1019 | cache_levels &= (1 << (i*3))-1; | ||
1020 | } | ||
1021 | |||
1022 | /** | ||
1023 | * kvm_reset_coprocs - sets cp15 registers to reset value | ||
1024 | * @vcpu: The VCPU pointer | ||
1025 | * | ||
1026 | * This function finds the right table above and sets the registers on the | ||
1027 | * virtual CPU struct to their architecturally defined reset values. | ||
1028 | */ | ||
1029 | void kvm_reset_coprocs(struct kvm_vcpu *vcpu) | ||
1030 | { | ||
1031 | size_t num; | ||
1032 | const struct coproc_reg *table; | ||
1033 | |||
1034 | /* Catch someone adding a register without putting in reset entry. */ | ||
1035 | memset(vcpu->arch.cp15, 0x42, sizeof(vcpu->arch.cp15)); | ||
1036 | |||
1037 | /* Generic chip reset first (so target could override). */ | ||
1038 | reset_coproc_regs(vcpu, cp15_regs, ARRAY_SIZE(cp15_regs)); | ||
1039 | |||
1040 | table = get_target_table(vcpu->arch.target, &num); | ||
1041 | reset_coproc_regs(vcpu, table, num); | ||
1042 | |||
1043 | for (num = 1; num < NR_CP15_REGS; num++) | ||
1044 | if (vcpu->arch.cp15[num] == 0x42424242) | ||
1045 | panic("Didn't reset vcpu->arch.cp15[%zi]", num); | ||
1046 | } | ||
diff --git a/arch/arm/kvm/coproc.h b/arch/arm/kvm/coproc.h new file mode 100644 index 000000000000..992adfafa2ff --- /dev/null +++ b/arch/arm/kvm/coproc.h | |||
@@ -0,0 +1,153 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Authors: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ARM_KVM_COPROC_LOCAL_H__ | ||
20 | #define __ARM_KVM_COPROC_LOCAL_H__ | ||
21 | |||
22 | struct coproc_params { | ||
23 | unsigned long CRn; | ||
24 | unsigned long CRm; | ||
25 | unsigned long Op1; | ||
26 | unsigned long Op2; | ||
27 | unsigned long Rt1; | ||
28 | unsigned long Rt2; | ||
29 | bool is_64bit; | ||
30 | bool is_write; | ||
31 | }; | ||
32 | |||
33 | struct coproc_reg { | ||
34 | /* MRC/MCR/MRRC/MCRR instruction which accesses it. */ | ||
35 | unsigned long CRn; | ||
36 | unsigned long CRm; | ||
37 | unsigned long Op1; | ||
38 | unsigned long Op2; | ||
39 | |||
40 | bool is_64; | ||
41 | |||
42 | /* Trapped access from guest, if non-NULL. */ | ||
43 | bool (*access)(struct kvm_vcpu *, | ||
44 | const struct coproc_params *, | ||
45 | const struct coproc_reg *); | ||
46 | |||
47 | /* Initialization for vcpu. */ | ||
48 | void (*reset)(struct kvm_vcpu *, const struct coproc_reg *); | ||
49 | |||
50 | /* Index into vcpu->arch.cp15[], or 0 if we don't need to save it. */ | ||
51 | unsigned long reg; | ||
52 | |||
53 | /* Value (usually reset value) */ | ||
54 | u64 val; | ||
55 | }; | ||
56 | |||
57 | static inline void print_cp_instr(const struct coproc_params *p) | ||
58 | { | ||
59 | /* Look, we even formatted it for you to paste into the table! */ | ||
60 | if (p->is_64bit) { | ||
61 | kvm_pr_unimpl(" { CRm(%2lu), Op1(%2lu), is64, func_%s },\n", | ||
62 | p->CRm, p->Op1, p->is_write ? "write" : "read"); | ||
63 | } else { | ||
64 | kvm_pr_unimpl(" { CRn(%2lu), CRm(%2lu), Op1(%2lu), Op2(%2lu), is32," | ||
65 | " func_%s },\n", | ||
66 | p->CRn, p->CRm, p->Op1, p->Op2, | ||
67 | p->is_write ? "write" : "read"); | ||
68 | } | ||
69 | } | ||
70 | |||
71 | static inline bool ignore_write(struct kvm_vcpu *vcpu, | ||
72 | const struct coproc_params *p) | ||
73 | { | ||
74 | return true; | ||
75 | } | ||
76 | |||
77 | static inline bool read_zero(struct kvm_vcpu *vcpu, | ||
78 | const struct coproc_params *p) | ||
79 | { | ||
80 | *vcpu_reg(vcpu, p->Rt1) = 0; | ||
81 | return true; | ||
82 | } | ||
83 | |||
84 | static inline bool write_to_read_only(struct kvm_vcpu *vcpu, | ||
85 | const struct coproc_params *params) | ||
86 | { | ||
87 | kvm_debug("CP15 write to read-only register at: %08x\n", | ||
88 | *vcpu_pc(vcpu)); | ||
89 | print_cp_instr(params); | ||
90 | return false; | ||
91 | } | ||
92 | |||
93 | static inline bool read_from_write_only(struct kvm_vcpu *vcpu, | ||
94 | const struct coproc_params *params) | ||
95 | { | ||
96 | kvm_debug("CP15 read to write-only register at: %08x\n", | ||
97 | *vcpu_pc(vcpu)); | ||
98 | print_cp_instr(params); | ||
99 | return false; | ||
100 | } | ||
101 | |||
102 | /* Reset functions */ | ||
103 | static inline void reset_unknown(struct kvm_vcpu *vcpu, | ||
104 | const struct coproc_reg *r) | ||
105 | { | ||
106 | BUG_ON(!r->reg); | ||
107 | BUG_ON(r->reg >= ARRAY_SIZE(vcpu->arch.cp15)); | ||
108 | vcpu->arch.cp15[r->reg] = 0xdecafbad; | ||
109 | } | ||
110 | |||
111 | static inline void reset_val(struct kvm_vcpu *vcpu, const struct coproc_reg *r) | ||
112 | { | ||
113 | BUG_ON(!r->reg); | ||
114 | BUG_ON(r->reg >= ARRAY_SIZE(vcpu->arch.cp15)); | ||
115 | vcpu->arch.cp15[r->reg] = r->val; | ||
116 | } | ||
117 | |||
118 | static inline void reset_unknown64(struct kvm_vcpu *vcpu, | ||
119 | const struct coproc_reg *r) | ||
120 | { | ||
121 | BUG_ON(!r->reg); | ||
122 | BUG_ON(r->reg + 1 >= ARRAY_SIZE(vcpu->arch.cp15)); | ||
123 | |||
124 | vcpu->arch.cp15[r->reg] = 0xdecafbad; | ||
125 | vcpu->arch.cp15[r->reg+1] = 0xd0c0ffee; | ||
126 | } | ||
127 | |||
128 | static inline int cmp_reg(const struct coproc_reg *i1, | ||
129 | const struct coproc_reg *i2) | ||
130 | { | ||
131 | BUG_ON(i1 == i2); | ||
132 | if (!i1) | ||
133 | return 1; | ||
134 | else if (!i2) | ||
135 | return -1; | ||
136 | if (i1->CRn != i2->CRn) | ||
137 | return i1->CRn - i2->CRn; | ||
138 | if (i1->CRm != i2->CRm) | ||
139 | return i1->CRm - i2->CRm; | ||
140 | if (i1->Op1 != i2->Op1) | ||
141 | return i1->Op1 - i2->Op1; | ||
142 | return i1->Op2 - i2->Op2; | ||
143 | } | ||
144 | |||
145 | |||
146 | #define CRn(_x) .CRn = _x | ||
147 | #define CRm(_x) .CRm = _x | ||
148 | #define Op1(_x) .Op1 = _x | ||
149 | #define Op2(_x) .Op2 = _x | ||
150 | #define is64 .is_64 = true | ||
151 | #define is32 .is_64 = false | ||
152 | |||
153 | #endif /* __ARM_KVM_COPROC_LOCAL_H__ */ | ||
diff --git a/arch/arm/kvm/coproc_a15.c b/arch/arm/kvm/coproc_a15.c new file mode 100644 index 000000000000..685063a6d0cf --- /dev/null +++ b/arch/arm/kvm/coproc_a15.c | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Authors: Rusty Russell <rusty@rustcorp.au> | ||
4 | * Christoffer Dall <c.dall@virtualopensystems.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License, version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
18 | */ | ||
19 | #include <linux/kvm_host.h> | ||
20 | #include <asm/cputype.h> | ||
21 | #include <asm/kvm_arm.h> | ||
22 | #include <asm/kvm_host.h> | ||
23 | #include <asm/kvm_emulate.h> | ||
24 | #include <asm/kvm_coproc.h> | ||
25 | #include <linux/init.h> | ||
26 | |||
27 | static void reset_mpidr(struct kvm_vcpu *vcpu, const struct coproc_reg *r) | ||
28 | { | ||
29 | /* | ||
30 | * Compute guest MPIDR: | ||
31 | * (Even if we present only one VCPU to the guest on an SMP | ||
32 | * host we don't set the U bit in the MPIDR, or vice versa, as | ||
33 | * revealing the underlying hardware properties is likely to | ||
34 | * be the best choice). | ||
35 | */ | ||
36 | vcpu->arch.cp15[c0_MPIDR] = (read_cpuid_mpidr() & ~MPIDR_LEVEL_MASK) | ||
37 | | (vcpu->vcpu_id & MPIDR_LEVEL_MASK); | ||
38 | } | ||
39 | |||
40 | #include "coproc.h" | ||
41 | |||
42 | /* A15 TRM 4.3.28: RO WI */ | ||
43 | static bool access_actlr(struct kvm_vcpu *vcpu, | ||
44 | const struct coproc_params *p, | ||
45 | const struct coproc_reg *r) | ||
46 | { | ||
47 | if (p->is_write) | ||
48 | return ignore_write(vcpu, p); | ||
49 | |||
50 | *vcpu_reg(vcpu, p->Rt1) = vcpu->arch.cp15[c1_ACTLR]; | ||
51 | return true; | ||
52 | } | ||
53 | |||
54 | /* A15 TRM 4.3.60: R/O. */ | ||
55 | static bool access_cbar(struct kvm_vcpu *vcpu, | ||
56 | const struct coproc_params *p, | ||
57 | const struct coproc_reg *r) | ||
58 | { | ||
59 | if (p->is_write) | ||
60 | return write_to_read_only(vcpu, p); | ||
61 | return read_zero(vcpu, p); | ||
62 | } | ||
63 | |||
64 | /* A15 TRM 4.3.48: R/O WI. */ | ||
65 | static bool access_l2ctlr(struct kvm_vcpu *vcpu, | ||
66 | const struct coproc_params *p, | ||
67 | const struct coproc_reg *r) | ||
68 | { | ||
69 | if (p->is_write) | ||
70 | return ignore_write(vcpu, p); | ||
71 | |||
72 | *vcpu_reg(vcpu, p->Rt1) = vcpu->arch.cp15[c9_L2CTLR]; | ||
73 | return true; | ||
74 | } | ||
75 | |||
76 | static void reset_l2ctlr(struct kvm_vcpu *vcpu, const struct coproc_reg *r) | ||
77 | { | ||
78 | u32 l2ctlr, ncores; | ||
79 | |||
80 | asm volatile("mrc p15, 1, %0, c9, c0, 2\n" : "=r" (l2ctlr)); | ||
81 | l2ctlr &= ~(3 << 24); | ||
82 | ncores = atomic_read(&vcpu->kvm->online_vcpus) - 1; | ||
83 | l2ctlr |= (ncores & 3) << 24; | ||
84 | |||
85 | vcpu->arch.cp15[c9_L2CTLR] = l2ctlr; | ||
86 | } | ||
87 | |||
88 | static void reset_actlr(struct kvm_vcpu *vcpu, const struct coproc_reg *r) | ||
89 | { | ||
90 | u32 actlr; | ||
91 | |||
92 | /* ACTLR contains SMP bit: make sure you create all cpus first! */ | ||
93 | asm volatile("mrc p15, 0, %0, c1, c0, 1\n" : "=r" (actlr)); | ||
94 | /* Make the SMP bit consistent with the guest configuration */ | ||
95 | if (atomic_read(&vcpu->kvm->online_vcpus) > 1) | ||
96 | actlr |= 1U << 6; | ||
97 | else | ||
98 | actlr &= ~(1U << 6); | ||
99 | |||
100 | vcpu->arch.cp15[c1_ACTLR] = actlr; | ||
101 | } | ||
102 | |||
103 | /* A15 TRM 4.3.49: R/O WI (even if NSACR.NS_L2ERR, a write of 1 is ignored). */ | ||
104 | static bool access_l2ectlr(struct kvm_vcpu *vcpu, | ||
105 | const struct coproc_params *p, | ||
106 | const struct coproc_reg *r) | ||
107 | { | ||
108 | if (p->is_write) | ||
109 | return ignore_write(vcpu, p); | ||
110 | |||
111 | *vcpu_reg(vcpu, p->Rt1) = 0; | ||
112 | return true; | ||
113 | } | ||
114 | |||
115 | /* | ||
116 | * A15-specific CP15 registers. | ||
117 | * Important: Must be sorted ascending by CRn, CRM, Op1, Op2 | ||
118 | */ | ||
119 | static const struct coproc_reg a15_regs[] = { | ||
120 | /* MPIDR: we use VMPIDR for guest access. */ | ||
121 | { CRn( 0), CRm( 0), Op1( 0), Op2( 5), is32, | ||
122 | NULL, reset_mpidr, c0_MPIDR }, | ||
123 | |||
124 | /* SCTLR: swapped by interrupt.S. */ | ||
125 | { CRn( 1), CRm( 0), Op1( 0), Op2( 0), is32, | ||
126 | NULL, reset_val, c1_SCTLR, 0x00C50078 }, | ||
127 | /* ACTLR: trapped by HCR.TAC bit. */ | ||
128 | { CRn( 1), CRm( 0), Op1( 0), Op2( 1), is32, | ||
129 | access_actlr, reset_actlr, c1_ACTLR }, | ||
130 | /* CPACR: swapped by interrupt.S. */ | ||
131 | { CRn( 1), CRm( 0), Op1( 0), Op2( 2), is32, | ||
132 | NULL, reset_val, c1_CPACR, 0x00000000 }, | ||
133 | |||
134 | /* | ||
135 | * L2CTLR access (guest wants to know #CPUs). | ||
136 | */ | ||
137 | { CRn( 9), CRm( 0), Op1( 1), Op2( 2), is32, | ||
138 | access_l2ctlr, reset_l2ctlr, c9_L2CTLR }, | ||
139 | { CRn( 9), CRm( 0), Op1( 1), Op2( 3), is32, access_l2ectlr}, | ||
140 | |||
141 | /* The Configuration Base Address Register. */ | ||
142 | { CRn(15), CRm( 0), Op1( 4), Op2( 0), is32, access_cbar}, | ||
143 | }; | ||
144 | |||
145 | static struct kvm_coproc_target_table a15_target_table = { | ||
146 | .target = KVM_ARM_TARGET_CORTEX_A15, | ||
147 | .table = a15_regs, | ||
148 | .num = ARRAY_SIZE(a15_regs), | ||
149 | }; | ||
150 | |||
151 | static int __init coproc_a15_init(void) | ||
152 | { | ||
153 | unsigned int i; | ||
154 | |||
155 | for (i = 1; i < ARRAY_SIZE(a15_regs); i++) | ||
156 | BUG_ON(cmp_reg(&a15_regs[i-1], | ||
157 | &a15_regs[i]) >= 0); | ||
158 | |||
159 | kvm_register_target_coproc_table(&a15_target_table); | ||
160 | return 0; | ||
161 | } | ||
162 | late_initcall(coproc_a15_init); | ||
diff --git a/arch/arm/kvm/emulate.c b/arch/arm/kvm/emulate.c new file mode 100644 index 000000000000..d61450ac6665 --- /dev/null +++ b/arch/arm/kvm/emulate.c | |||
@@ -0,0 +1,373 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #include <linux/mm.h> | ||
20 | #include <linux/kvm_host.h> | ||
21 | #include <asm/kvm_arm.h> | ||
22 | #include <asm/kvm_emulate.h> | ||
23 | #include <trace/events/kvm.h> | ||
24 | |||
25 | #include "trace.h" | ||
26 | |||
27 | #define VCPU_NR_MODES 6 | ||
28 | #define VCPU_REG_OFFSET_USR 0 | ||
29 | #define VCPU_REG_OFFSET_FIQ 1 | ||
30 | #define VCPU_REG_OFFSET_IRQ 2 | ||
31 | #define VCPU_REG_OFFSET_SVC 3 | ||
32 | #define VCPU_REG_OFFSET_ABT 4 | ||
33 | #define VCPU_REG_OFFSET_UND 5 | ||
34 | #define REG_OFFSET(_reg) \ | ||
35 | (offsetof(struct kvm_regs, _reg) / sizeof(u32)) | ||
36 | |||
37 | #define USR_REG_OFFSET(_num) REG_OFFSET(usr_regs.uregs[_num]) | ||
38 | |||
39 | static const unsigned long vcpu_reg_offsets[VCPU_NR_MODES][15] = { | ||
40 | /* USR/SYS Registers */ | ||
41 | [VCPU_REG_OFFSET_USR] = { | ||
42 | USR_REG_OFFSET(0), USR_REG_OFFSET(1), USR_REG_OFFSET(2), | ||
43 | USR_REG_OFFSET(3), USR_REG_OFFSET(4), USR_REG_OFFSET(5), | ||
44 | USR_REG_OFFSET(6), USR_REG_OFFSET(7), USR_REG_OFFSET(8), | ||
45 | USR_REG_OFFSET(9), USR_REG_OFFSET(10), USR_REG_OFFSET(11), | ||
46 | USR_REG_OFFSET(12), USR_REG_OFFSET(13), USR_REG_OFFSET(14), | ||
47 | }, | ||
48 | |||
49 | /* FIQ Registers */ | ||
50 | [VCPU_REG_OFFSET_FIQ] = { | ||
51 | USR_REG_OFFSET(0), USR_REG_OFFSET(1), USR_REG_OFFSET(2), | ||
52 | USR_REG_OFFSET(3), USR_REG_OFFSET(4), USR_REG_OFFSET(5), | ||
53 | USR_REG_OFFSET(6), USR_REG_OFFSET(7), | ||
54 | REG_OFFSET(fiq_regs[0]), /* r8 */ | ||
55 | REG_OFFSET(fiq_regs[1]), /* r9 */ | ||
56 | REG_OFFSET(fiq_regs[2]), /* r10 */ | ||
57 | REG_OFFSET(fiq_regs[3]), /* r11 */ | ||
58 | REG_OFFSET(fiq_regs[4]), /* r12 */ | ||
59 | REG_OFFSET(fiq_regs[5]), /* r13 */ | ||
60 | REG_OFFSET(fiq_regs[6]), /* r14 */ | ||
61 | }, | ||
62 | |||
63 | /* IRQ Registers */ | ||
64 | [VCPU_REG_OFFSET_IRQ] = { | ||
65 | USR_REG_OFFSET(0), USR_REG_OFFSET(1), USR_REG_OFFSET(2), | ||
66 | USR_REG_OFFSET(3), USR_REG_OFFSET(4), USR_REG_OFFSET(5), | ||
67 | USR_REG_OFFSET(6), USR_REG_OFFSET(7), USR_REG_OFFSET(8), | ||
68 | USR_REG_OFFSET(9), USR_REG_OFFSET(10), USR_REG_OFFSET(11), | ||
69 | USR_REG_OFFSET(12), | ||
70 | REG_OFFSET(irq_regs[0]), /* r13 */ | ||
71 | REG_OFFSET(irq_regs[1]), /* r14 */ | ||
72 | }, | ||
73 | |||
74 | /* SVC Registers */ | ||
75 | [VCPU_REG_OFFSET_SVC] = { | ||
76 | USR_REG_OFFSET(0), USR_REG_OFFSET(1), USR_REG_OFFSET(2), | ||
77 | USR_REG_OFFSET(3), USR_REG_OFFSET(4), USR_REG_OFFSET(5), | ||
78 | USR_REG_OFFSET(6), USR_REG_OFFSET(7), USR_REG_OFFSET(8), | ||
79 | USR_REG_OFFSET(9), USR_REG_OFFSET(10), USR_REG_OFFSET(11), | ||
80 | USR_REG_OFFSET(12), | ||
81 | REG_OFFSET(svc_regs[0]), /* r13 */ | ||
82 | REG_OFFSET(svc_regs[1]), /* r14 */ | ||
83 | }, | ||
84 | |||
85 | /* ABT Registers */ | ||
86 | [VCPU_REG_OFFSET_ABT] = { | ||
87 | USR_REG_OFFSET(0), USR_REG_OFFSET(1), USR_REG_OFFSET(2), | ||
88 | USR_REG_OFFSET(3), USR_REG_OFFSET(4), USR_REG_OFFSET(5), | ||
89 | USR_REG_OFFSET(6), USR_REG_OFFSET(7), USR_REG_OFFSET(8), | ||
90 | USR_REG_OFFSET(9), USR_REG_OFFSET(10), USR_REG_OFFSET(11), | ||
91 | USR_REG_OFFSET(12), | ||
92 | REG_OFFSET(abt_regs[0]), /* r13 */ | ||
93 | REG_OFFSET(abt_regs[1]), /* r14 */ | ||
94 | }, | ||
95 | |||
96 | /* UND Registers */ | ||
97 | [VCPU_REG_OFFSET_UND] = { | ||
98 | USR_REG_OFFSET(0), USR_REG_OFFSET(1), USR_REG_OFFSET(2), | ||
99 | USR_REG_OFFSET(3), USR_REG_OFFSET(4), USR_REG_OFFSET(5), | ||
100 | USR_REG_OFFSET(6), USR_REG_OFFSET(7), USR_REG_OFFSET(8), | ||
101 | USR_REG_OFFSET(9), USR_REG_OFFSET(10), USR_REG_OFFSET(11), | ||
102 | USR_REG_OFFSET(12), | ||
103 | REG_OFFSET(und_regs[0]), /* r13 */ | ||
104 | REG_OFFSET(und_regs[1]), /* r14 */ | ||
105 | }, | ||
106 | }; | ||
107 | |||
108 | /* | ||
109 | * Return a pointer to the register number valid in the current mode of | ||
110 | * the virtual CPU. | ||
111 | */ | ||
112 | u32 *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num) | ||
113 | { | ||
114 | u32 *reg_array = (u32 *)&vcpu->arch.regs; | ||
115 | u32 mode = *vcpu_cpsr(vcpu) & MODE_MASK; | ||
116 | |||
117 | switch (mode) { | ||
118 | case USR_MODE...SVC_MODE: | ||
119 | mode &= ~MODE32_BIT; /* 0 ... 3 */ | ||
120 | break; | ||
121 | |||
122 | case ABT_MODE: | ||
123 | mode = VCPU_REG_OFFSET_ABT; | ||
124 | break; | ||
125 | |||
126 | case UND_MODE: | ||
127 | mode = VCPU_REG_OFFSET_UND; | ||
128 | break; | ||
129 | |||
130 | case SYSTEM_MODE: | ||
131 | mode = VCPU_REG_OFFSET_USR; | ||
132 | break; | ||
133 | |||
134 | default: | ||
135 | BUG(); | ||
136 | } | ||
137 | |||
138 | return reg_array + vcpu_reg_offsets[mode][reg_num]; | ||
139 | } | ||
140 | |||
141 | /* | ||
142 | * Return the SPSR for the current mode of the virtual CPU. | ||
143 | */ | ||
144 | u32 *vcpu_spsr(struct kvm_vcpu *vcpu) | ||
145 | { | ||
146 | u32 mode = *vcpu_cpsr(vcpu) & MODE_MASK; | ||
147 | switch (mode) { | ||
148 | case SVC_MODE: | ||
149 | return &vcpu->arch.regs.KVM_ARM_SVC_spsr; | ||
150 | case ABT_MODE: | ||
151 | return &vcpu->arch.regs.KVM_ARM_ABT_spsr; | ||
152 | case UND_MODE: | ||
153 | return &vcpu->arch.regs.KVM_ARM_UND_spsr; | ||
154 | case IRQ_MODE: | ||
155 | return &vcpu->arch.regs.KVM_ARM_IRQ_spsr; | ||
156 | case FIQ_MODE: | ||
157 | return &vcpu->arch.regs.KVM_ARM_FIQ_spsr; | ||
158 | default: | ||
159 | BUG(); | ||
160 | } | ||
161 | } | ||
162 | |||
163 | /** | ||
164 | * kvm_handle_wfi - handle a wait-for-interrupts instruction executed by a guest | ||
165 | * @vcpu: the vcpu pointer | ||
166 | * @run: the kvm_run structure pointer | ||
167 | * | ||
168 | * Simply sets the wait_for_interrupts flag on the vcpu structure, which will | ||
169 | * halt execution of world-switches and schedule other host processes until | ||
170 | * there is an incoming IRQ or FIQ to the VM. | ||
171 | */ | ||
172 | int kvm_handle_wfi(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
173 | { | ||
174 | trace_kvm_wfi(*vcpu_pc(vcpu)); | ||
175 | kvm_vcpu_block(vcpu); | ||
176 | return 1; | ||
177 | } | ||
178 | |||
179 | /** | ||
180 | * adjust_itstate - adjust ITSTATE when emulating instructions in IT-block | ||
181 | * @vcpu: The VCPU pointer | ||
182 | * | ||
183 | * When exceptions occur while instructions are executed in Thumb IF-THEN | ||
184 | * blocks, the ITSTATE field of the CPSR is not advanved (updated), so we have | ||
185 | * to do this little bit of work manually. The fields map like this: | ||
186 | * | ||
187 | * IT[7:0] -> CPSR[26:25],CPSR[15:10] | ||
188 | */ | ||
189 | static void kvm_adjust_itstate(struct kvm_vcpu *vcpu) | ||
190 | { | ||
191 | unsigned long itbits, cond; | ||
192 | unsigned long cpsr = *vcpu_cpsr(vcpu); | ||
193 | bool is_arm = !(cpsr & PSR_T_BIT); | ||
194 | |||
195 | BUG_ON(is_arm && (cpsr & PSR_IT_MASK)); | ||
196 | |||
197 | if (!(cpsr & PSR_IT_MASK)) | ||
198 | return; | ||
199 | |||
200 | cond = (cpsr & 0xe000) >> 13; | ||
201 | itbits = (cpsr & 0x1c00) >> (10 - 2); | ||
202 | itbits |= (cpsr & (0x3 << 25)) >> 25; | ||
203 | |||
204 | /* Perform ITAdvance (see page A-52 in ARM DDI 0406C) */ | ||
205 | if ((itbits & 0x7) == 0) | ||
206 | itbits = cond = 0; | ||
207 | else | ||
208 | itbits = (itbits << 1) & 0x1f; | ||
209 | |||
210 | cpsr &= ~PSR_IT_MASK; | ||
211 | cpsr |= cond << 13; | ||
212 | cpsr |= (itbits & 0x1c) << (10 - 2); | ||
213 | cpsr |= (itbits & 0x3) << 25; | ||
214 | *vcpu_cpsr(vcpu) = cpsr; | ||
215 | } | ||
216 | |||
217 | /** | ||
218 | * kvm_skip_instr - skip a trapped instruction and proceed to the next | ||
219 | * @vcpu: The vcpu pointer | ||
220 | */ | ||
221 | void kvm_skip_instr(struct kvm_vcpu *vcpu, bool is_wide_instr) | ||
222 | { | ||
223 | bool is_thumb; | ||
224 | |||
225 | is_thumb = !!(*vcpu_cpsr(vcpu) & PSR_T_BIT); | ||
226 | if (is_thumb && !is_wide_instr) | ||
227 | *vcpu_pc(vcpu) += 2; | ||
228 | else | ||
229 | *vcpu_pc(vcpu) += 4; | ||
230 | kvm_adjust_itstate(vcpu); | ||
231 | } | ||
232 | |||
233 | |||
234 | /****************************************************************************** | ||
235 | * Inject exceptions into the guest | ||
236 | */ | ||
237 | |||
238 | static u32 exc_vector_base(struct kvm_vcpu *vcpu) | ||
239 | { | ||
240 | u32 sctlr = vcpu->arch.cp15[c1_SCTLR]; | ||
241 | u32 vbar = vcpu->arch.cp15[c12_VBAR]; | ||
242 | |||
243 | if (sctlr & SCTLR_V) | ||
244 | return 0xffff0000; | ||
245 | else /* always have security exceptions */ | ||
246 | return vbar; | ||
247 | } | ||
248 | |||
249 | /** | ||
250 | * kvm_inject_undefined - inject an undefined exception into the guest | ||
251 | * @vcpu: The VCPU to receive the undefined exception | ||
252 | * | ||
253 | * It is assumed that this code is called from the VCPU thread and that the | ||
254 | * VCPU therefore is not currently executing guest code. | ||
255 | * | ||
256 | * Modelled after TakeUndefInstrException() pseudocode. | ||
257 | */ | ||
258 | void kvm_inject_undefined(struct kvm_vcpu *vcpu) | ||
259 | { | ||
260 | u32 new_lr_value; | ||
261 | u32 new_spsr_value; | ||
262 | u32 cpsr = *vcpu_cpsr(vcpu); | ||
263 | u32 sctlr = vcpu->arch.cp15[c1_SCTLR]; | ||
264 | bool is_thumb = (cpsr & PSR_T_BIT); | ||
265 | u32 vect_offset = 4; | ||
266 | u32 return_offset = (is_thumb) ? 2 : 4; | ||
267 | |||
268 | new_spsr_value = cpsr; | ||
269 | new_lr_value = *vcpu_pc(vcpu) - return_offset; | ||
270 | |||
271 | *vcpu_cpsr(vcpu) = (cpsr & ~MODE_MASK) | UND_MODE; | ||
272 | *vcpu_cpsr(vcpu) |= PSR_I_BIT; | ||
273 | *vcpu_cpsr(vcpu) &= ~(PSR_IT_MASK | PSR_J_BIT | PSR_E_BIT | PSR_T_BIT); | ||
274 | |||
275 | if (sctlr & SCTLR_TE) | ||
276 | *vcpu_cpsr(vcpu) |= PSR_T_BIT; | ||
277 | if (sctlr & SCTLR_EE) | ||
278 | *vcpu_cpsr(vcpu) |= PSR_E_BIT; | ||
279 | |||
280 | /* Note: These now point to UND banked copies */ | ||
281 | *vcpu_spsr(vcpu) = cpsr; | ||
282 | *vcpu_reg(vcpu, 14) = new_lr_value; | ||
283 | |||
284 | /* Branch to exception vector */ | ||
285 | *vcpu_pc(vcpu) = exc_vector_base(vcpu) + vect_offset; | ||
286 | } | ||
287 | |||
288 | /* | ||
289 | * Modelled after TakeDataAbortException() and TakePrefetchAbortException | ||
290 | * pseudocode. | ||
291 | */ | ||
292 | static void inject_abt(struct kvm_vcpu *vcpu, bool is_pabt, unsigned long addr) | ||
293 | { | ||
294 | u32 new_lr_value; | ||
295 | u32 new_spsr_value; | ||
296 | u32 cpsr = *vcpu_cpsr(vcpu); | ||
297 | u32 sctlr = vcpu->arch.cp15[c1_SCTLR]; | ||
298 | bool is_thumb = (cpsr & PSR_T_BIT); | ||
299 | u32 vect_offset; | ||
300 | u32 return_offset = (is_thumb) ? 4 : 0; | ||
301 | bool is_lpae; | ||
302 | |||
303 | new_spsr_value = cpsr; | ||
304 | new_lr_value = *vcpu_pc(vcpu) + return_offset; | ||
305 | |||
306 | *vcpu_cpsr(vcpu) = (cpsr & ~MODE_MASK) | ABT_MODE; | ||
307 | *vcpu_cpsr(vcpu) |= PSR_I_BIT | PSR_A_BIT; | ||
308 | *vcpu_cpsr(vcpu) &= ~(PSR_IT_MASK | PSR_J_BIT | PSR_E_BIT | PSR_T_BIT); | ||
309 | |||
310 | if (sctlr & SCTLR_TE) | ||
311 | *vcpu_cpsr(vcpu) |= PSR_T_BIT; | ||
312 | if (sctlr & SCTLR_EE) | ||
313 | *vcpu_cpsr(vcpu) |= PSR_E_BIT; | ||
314 | |||
315 | /* Note: These now point to ABT banked copies */ | ||
316 | *vcpu_spsr(vcpu) = cpsr; | ||
317 | *vcpu_reg(vcpu, 14) = new_lr_value; | ||
318 | |||
319 | if (is_pabt) | ||
320 | vect_offset = 12; | ||
321 | else | ||
322 | vect_offset = 16; | ||
323 | |||
324 | /* Branch to exception vector */ | ||
325 | *vcpu_pc(vcpu) = exc_vector_base(vcpu) + vect_offset; | ||
326 | |||
327 | if (is_pabt) { | ||
328 | /* Set DFAR and DFSR */ | ||
329 | vcpu->arch.cp15[c6_IFAR] = addr; | ||
330 | is_lpae = (vcpu->arch.cp15[c2_TTBCR] >> 31); | ||
331 | /* Always give debug fault for now - should give guest a clue */ | ||
332 | if (is_lpae) | ||
333 | vcpu->arch.cp15[c5_IFSR] = 1 << 9 | 0x22; | ||
334 | else | ||
335 | vcpu->arch.cp15[c5_IFSR] = 2; | ||
336 | } else { /* !iabt */ | ||
337 | /* Set DFAR and DFSR */ | ||
338 | vcpu->arch.cp15[c6_DFAR] = addr; | ||
339 | is_lpae = (vcpu->arch.cp15[c2_TTBCR] >> 31); | ||
340 | /* Always give debug fault for now - should give guest a clue */ | ||
341 | if (is_lpae) | ||
342 | vcpu->arch.cp15[c5_DFSR] = 1 << 9 | 0x22; | ||
343 | else | ||
344 | vcpu->arch.cp15[c5_DFSR] = 2; | ||
345 | } | ||
346 | |||
347 | } | ||
348 | |||
349 | /** | ||
350 | * kvm_inject_dabt - inject a data abort into the guest | ||
351 | * @vcpu: The VCPU to receive the undefined exception | ||
352 | * @addr: The address to report in the DFAR | ||
353 | * | ||
354 | * It is assumed that this code is called from the VCPU thread and that the | ||
355 | * VCPU therefore is not currently executing guest code. | ||
356 | */ | ||
357 | void kvm_inject_dabt(struct kvm_vcpu *vcpu, unsigned long addr) | ||
358 | { | ||
359 | inject_abt(vcpu, false, addr); | ||
360 | } | ||
361 | |||
362 | /** | ||
363 | * kvm_inject_pabt - inject a prefetch abort into the guest | ||
364 | * @vcpu: The VCPU to receive the undefined exception | ||
365 | * @addr: The address to report in the DFAR | ||
366 | * | ||
367 | * It is assumed that this code is called from the VCPU thread and that the | ||
368 | * VCPU therefore is not currently executing guest code. | ||
369 | */ | ||
370 | void kvm_inject_pabt(struct kvm_vcpu *vcpu, unsigned long addr) | ||
371 | { | ||
372 | inject_abt(vcpu, true, addr); | ||
373 | } | ||
diff --git a/arch/arm/kvm/guest.c b/arch/arm/kvm/guest.c new file mode 100644 index 000000000000..2339d9609d36 --- /dev/null +++ b/arch/arm/kvm/guest.c | |||
@@ -0,0 +1,222 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #include <linux/errno.h> | ||
20 | #include <linux/err.h> | ||
21 | #include <linux/kvm_host.h> | ||
22 | #include <linux/module.h> | ||
23 | #include <linux/vmalloc.h> | ||
24 | #include <linux/fs.h> | ||
25 | #include <asm/uaccess.h> | ||
26 | #include <asm/kvm.h> | ||
27 | #include <asm/kvm_asm.h> | ||
28 | #include <asm/kvm_emulate.h> | ||
29 | #include <asm/kvm_coproc.h> | ||
30 | |||
31 | #define VM_STAT(x) { #x, offsetof(struct kvm, stat.x), KVM_STAT_VM } | ||
32 | #define VCPU_STAT(x) { #x, offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU } | ||
33 | |||
34 | struct kvm_stats_debugfs_item debugfs_entries[] = { | ||
35 | { NULL } | ||
36 | }; | ||
37 | |||
38 | int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) | ||
39 | { | ||
40 | return 0; | ||
41 | } | ||
42 | |||
43 | static u64 core_reg_offset_from_id(u64 id) | ||
44 | { | ||
45 | return id & ~(KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK | KVM_REG_ARM_CORE); | ||
46 | } | ||
47 | |||
48 | static int get_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) | ||
49 | { | ||
50 | u32 __user *uaddr = (u32 __user *)(long)reg->addr; | ||
51 | struct kvm_regs *regs = &vcpu->arch.regs; | ||
52 | u64 off; | ||
53 | |||
54 | if (KVM_REG_SIZE(reg->id) != 4) | ||
55 | return -ENOENT; | ||
56 | |||
57 | /* Our ID is an index into the kvm_regs struct. */ | ||
58 | off = core_reg_offset_from_id(reg->id); | ||
59 | if (off >= sizeof(*regs) / KVM_REG_SIZE(reg->id)) | ||
60 | return -ENOENT; | ||
61 | |||
62 | return put_user(((u32 *)regs)[off], uaddr); | ||
63 | } | ||
64 | |||
65 | static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) | ||
66 | { | ||
67 | u32 __user *uaddr = (u32 __user *)(long)reg->addr; | ||
68 | struct kvm_regs *regs = &vcpu->arch.regs; | ||
69 | u64 off, val; | ||
70 | |||
71 | if (KVM_REG_SIZE(reg->id) != 4) | ||
72 | return -ENOENT; | ||
73 | |||
74 | /* Our ID is an index into the kvm_regs struct. */ | ||
75 | off = core_reg_offset_from_id(reg->id); | ||
76 | if (off >= sizeof(*regs) / KVM_REG_SIZE(reg->id)) | ||
77 | return -ENOENT; | ||
78 | |||
79 | if (get_user(val, uaddr) != 0) | ||
80 | return -EFAULT; | ||
81 | |||
82 | if (off == KVM_REG_ARM_CORE_REG(usr_regs.ARM_cpsr)) { | ||
83 | unsigned long mode = val & MODE_MASK; | ||
84 | switch (mode) { | ||
85 | case USR_MODE: | ||
86 | case FIQ_MODE: | ||
87 | case IRQ_MODE: | ||
88 | case SVC_MODE: | ||
89 | case ABT_MODE: | ||
90 | case UND_MODE: | ||
91 | break; | ||
92 | default: | ||
93 | return -EINVAL; | ||
94 | } | ||
95 | } | ||
96 | |||
97 | ((u32 *)regs)[off] = val; | ||
98 | return 0; | ||
99 | } | ||
100 | |||
101 | int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | ||
102 | { | ||
103 | return -EINVAL; | ||
104 | } | ||
105 | |||
106 | int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | ||
107 | { | ||
108 | return -EINVAL; | ||
109 | } | ||
110 | |||
111 | static unsigned long num_core_regs(void) | ||
112 | { | ||
113 | return sizeof(struct kvm_regs) / sizeof(u32); | ||
114 | } | ||
115 | |||
116 | /** | ||
117 | * kvm_arm_num_regs - how many registers do we present via KVM_GET_ONE_REG | ||
118 | * | ||
119 | * This is for all registers. | ||
120 | */ | ||
121 | unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu) | ||
122 | { | ||
123 | return num_core_regs() + kvm_arm_num_coproc_regs(vcpu); | ||
124 | } | ||
125 | |||
126 | /** | ||
127 | * kvm_arm_copy_reg_indices - get indices of all registers. | ||
128 | * | ||
129 | * We do core registers right here, then we apppend coproc regs. | ||
130 | */ | ||
131 | int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices) | ||
132 | { | ||
133 | unsigned int i; | ||
134 | const u64 core_reg = KVM_REG_ARM | KVM_REG_SIZE_U32 | KVM_REG_ARM_CORE; | ||
135 | |||
136 | for (i = 0; i < sizeof(struct kvm_regs)/sizeof(u32); i++) { | ||
137 | if (put_user(core_reg | i, uindices)) | ||
138 | return -EFAULT; | ||
139 | uindices++; | ||
140 | } | ||
141 | |||
142 | return kvm_arm_copy_coproc_indices(vcpu, uindices); | ||
143 | } | ||
144 | |||
145 | int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) | ||
146 | { | ||
147 | /* We currently use nothing arch-specific in upper 32 bits */ | ||
148 | if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 != KVM_REG_ARM >> 32) | ||
149 | return -EINVAL; | ||
150 | |||
151 | /* Register group 16 means we want a core register. */ | ||
152 | if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE) | ||
153 | return get_core_reg(vcpu, reg); | ||
154 | |||
155 | return kvm_arm_coproc_get_reg(vcpu, reg); | ||
156 | } | ||
157 | |||
158 | int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) | ||
159 | { | ||
160 | /* We currently use nothing arch-specific in upper 32 bits */ | ||
161 | if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 != KVM_REG_ARM >> 32) | ||
162 | return -EINVAL; | ||
163 | |||
164 | /* Register group 16 means we set a core register. */ | ||
165 | if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE) | ||
166 | return set_core_reg(vcpu, reg); | ||
167 | |||
168 | return kvm_arm_coproc_set_reg(vcpu, reg); | ||
169 | } | ||
170 | |||
171 | int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu, | ||
172 | struct kvm_sregs *sregs) | ||
173 | { | ||
174 | return -EINVAL; | ||
175 | } | ||
176 | |||
177 | int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, | ||
178 | struct kvm_sregs *sregs) | ||
179 | { | ||
180 | return -EINVAL; | ||
181 | } | ||
182 | |||
183 | int kvm_vcpu_set_target(struct kvm_vcpu *vcpu, | ||
184 | const struct kvm_vcpu_init *init) | ||
185 | { | ||
186 | unsigned int i; | ||
187 | |||
188 | /* We can only do a cortex A15 for now. */ | ||
189 | if (init->target != kvm_target_cpu()) | ||
190 | return -EINVAL; | ||
191 | |||
192 | vcpu->arch.target = init->target; | ||
193 | bitmap_zero(vcpu->arch.features, KVM_VCPU_MAX_FEATURES); | ||
194 | |||
195 | /* -ENOENT for unknown features, -EINVAL for invalid combinations. */ | ||
196 | for (i = 0; i < sizeof(init->features) * 8; i++) { | ||
197 | if (test_bit(i, (void *)init->features)) { | ||
198 | if (i >= KVM_VCPU_MAX_FEATURES) | ||
199 | return -ENOENT; | ||
200 | set_bit(i, vcpu->arch.features); | ||
201 | } | ||
202 | } | ||
203 | |||
204 | /* Now we know what it is, we can reset it. */ | ||
205 | return kvm_reset_vcpu(vcpu); | ||
206 | } | ||
207 | |||
208 | int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) | ||
209 | { | ||
210 | return -EINVAL; | ||
211 | } | ||
212 | |||
213 | int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) | ||
214 | { | ||
215 | return -EINVAL; | ||
216 | } | ||
217 | |||
218 | int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu, | ||
219 | struct kvm_translation *tr) | ||
220 | { | ||
221 | return -EINVAL; | ||
222 | } | ||
diff --git a/arch/arm/kvm/init.S b/arch/arm/kvm/init.S new file mode 100644 index 000000000000..9f37a79b880b --- /dev/null +++ b/arch/arm/kvm/init.S | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #include <linux/linkage.h> | ||
20 | #include <asm/unified.h> | ||
21 | #include <asm/asm-offsets.h> | ||
22 | #include <asm/kvm_asm.h> | ||
23 | #include <asm/kvm_arm.h> | ||
24 | |||
25 | /******************************************************************** | ||
26 | * Hypervisor initialization | ||
27 | * - should be called with: | ||
28 | * r0,r1 = Hypervisor pgd pointer | ||
29 | * r2 = top of Hyp stack (kernel VA) | ||
30 | * r3 = pointer to hyp vectors | ||
31 | */ | ||
32 | |||
33 | .text | ||
34 | .pushsection .hyp.idmap.text,"ax" | ||
35 | .align 5 | ||
36 | __kvm_hyp_init: | ||
37 | .globl __kvm_hyp_init | ||
38 | |||
39 | @ Hyp-mode exception vector | ||
40 | W(b) . | ||
41 | W(b) . | ||
42 | W(b) . | ||
43 | W(b) . | ||
44 | W(b) . | ||
45 | W(b) __do_hyp_init | ||
46 | W(b) . | ||
47 | W(b) . | ||
48 | |||
49 | __do_hyp_init: | ||
50 | @ Set the HTTBR to point to the hypervisor PGD pointer passed | ||
51 | mcrr p15, 4, r0, r1, c2 | ||
52 | |||
53 | @ Set the HTCR and VTCR to the same shareability and cacheability | ||
54 | @ settings as the non-secure TTBCR and with T0SZ == 0. | ||
55 | mrc p15, 4, r0, c2, c0, 2 @ HTCR | ||
56 | ldr r12, =HTCR_MASK | ||
57 | bic r0, r0, r12 | ||
58 | mrc p15, 0, r1, c2, c0, 2 @ TTBCR | ||
59 | and r1, r1, #(HTCR_MASK & ~TTBCR_T0SZ) | ||
60 | orr r0, r0, r1 | ||
61 | mcr p15, 4, r0, c2, c0, 2 @ HTCR | ||
62 | |||
63 | mrc p15, 4, r1, c2, c1, 2 @ VTCR | ||
64 | ldr r12, =VTCR_MASK | ||
65 | bic r1, r1, r12 | ||
66 | bic r0, r0, #(~VTCR_HTCR_SH) @ clear non-reusable HTCR bits | ||
67 | orr r1, r0, r1 | ||
68 | orr r1, r1, #(KVM_VTCR_SL0 | KVM_VTCR_T0SZ | KVM_VTCR_S) | ||
69 | mcr p15, 4, r1, c2, c1, 2 @ VTCR | ||
70 | |||
71 | @ Use the same memory attributes for hyp. accesses as the kernel | ||
72 | @ (copy MAIRx ro HMAIRx). | ||
73 | mrc p15, 0, r0, c10, c2, 0 | ||
74 | mcr p15, 4, r0, c10, c2, 0 | ||
75 | mrc p15, 0, r0, c10, c2, 1 | ||
76 | mcr p15, 4, r0, c10, c2, 1 | ||
77 | |||
78 | @ Set the HSCTLR to: | ||
79 | @ - ARM/THUMB exceptions: Kernel config (Thumb-2 kernel) | ||
80 | @ - Endianness: Kernel config | ||
81 | @ - Fast Interrupt Features: Kernel config | ||
82 | @ - Write permission implies XN: disabled | ||
83 | @ - Instruction cache: enabled | ||
84 | @ - Data/Unified cache: enabled | ||
85 | @ - Memory alignment checks: enabled | ||
86 | @ - MMU: enabled (this code must be run from an identity mapping) | ||
87 | mrc p15, 4, r0, c1, c0, 0 @ HSCR | ||
88 | ldr r12, =HSCTLR_MASK | ||
89 | bic r0, r0, r12 | ||
90 | mrc p15, 0, r1, c1, c0, 0 @ SCTLR | ||
91 | ldr r12, =(HSCTLR_EE | HSCTLR_FI | HSCTLR_I | HSCTLR_C) | ||
92 | and r1, r1, r12 | ||
93 | ARM( ldr r12, =(HSCTLR_M | HSCTLR_A) ) | ||
94 | THUMB( ldr r12, =(HSCTLR_M | HSCTLR_A | HSCTLR_TE) ) | ||
95 | orr r1, r1, r12 | ||
96 | orr r0, r0, r1 | ||
97 | isb | ||
98 | mcr p15, 4, r0, c1, c0, 0 @ HSCR | ||
99 | isb | ||
100 | |||
101 | @ Set stack pointer and return to the kernel | ||
102 | mov sp, r2 | ||
103 | |||
104 | @ Set HVBAR to point to the HYP vectors | ||
105 | mcr p15, 4, r3, c12, c0, 0 @ HVBAR | ||
106 | |||
107 | eret | ||
108 | |||
109 | .ltorg | ||
110 | |||
111 | .globl __kvm_hyp_init_end | ||
112 | __kvm_hyp_init_end: | ||
113 | |||
114 | .popsection | ||
diff --git a/arch/arm/kvm/interrupts.S b/arch/arm/kvm/interrupts.S new file mode 100644 index 000000000000..c5400d2e97ca --- /dev/null +++ b/arch/arm/kvm/interrupts.S | |||
@@ -0,0 +1,478 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #include <linux/linkage.h> | ||
20 | #include <linux/const.h> | ||
21 | #include <asm/unified.h> | ||
22 | #include <asm/page.h> | ||
23 | #include <asm/ptrace.h> | ||
24 | #include <asm/asm-offsets.h> | ||
25 | #include <asm/kvm_asm.h> | ||
26 | #include <asm/kvm_arm.h> | ||
27 | #include <asm/vfpmacros.h> | ||
28 | #include "interrupts_head.S" | ||
29 | |||
30 | .text | ||
31 | |||
32 | __kvm_hyp_code_start: | ||
33 | .globl __kvm_hyp_code_start | ||
34 | |||
35 | /******************************************************************** | ||
36 | * Flush per-VMID TLBs | ||
37 | * | ||
38 | * void __kvm_tlb_flush_vmid(struct kvm *kvm); | ||
39 | * | ||
40 | * We rely on the hardware to broadcast the TLB invalidation to all CPUs | ||
41 | * inside the inner-shareable domain (which is the case for all v7 | ||
42 | * implementations). If we come across a non-IS SMP implementation, we'll | ||
43 | * have to use an IPI based mechanism. Until then, we stick to the simple | ||
44 | * hardware assisted version. | ||
45 | */ | ||
46 | ENTRY(__kvm_tlb_flush_vmid) | ||
47 | push {r2, r3} | ||
48 | |||
49 | add r0, r0, #KVM_VTTBR | ||
50 | ldrd r2, r3, [r0] | ||
51 | mcrr p15, 6, r2, r3, c2 @ Write VTTBR | ||
52 | isb | ||
53 | mcr p15, 0, r0, c8, c3, 0 @ TLBIALLIS (rt ignored) | ||
54 | dsb | ||
55 | isb | ||
56 | mov r2, #0 | ||
57 | mov r3, #0 | ||
58 | mcrr p15, 6, r2, r3, c2 @ Back to VMID #0 | ||
59 | isb @ Not necessary if followed by eret | ||
60 | |||
61 | pop {r2, r3} | ||
62 | bx lr | ||
63 | ENDPROC(__kvm_tlb_flush_vmid) | ||
64 | |||
65 | /******************************************************************** | ||
66 | * Flush TLBs and instruction caches of all CPUs inside the inner-shareable | ||
67 | * domain, for all VMIDs | ||
68 | * | ||
69 | * void __kvm_flush_vm_context(void); | ||
70 | */ | ||
71 | ENTRY(__kvm_flush_vm_context) | ||
72 | mov r0, #0 @ rn parameter for c15 flushes is SBZ | ||
73 | |||
74 | /* Invalidate NS Non-Hyp TLB Inner Shareable (TLBIALLNSNHIS) */ | ||
75 | mcr p15, 4, r0, c8, c3, 4 | ||
76 | /* Invalidate instruction caches Inner Shareable (ICIALLUIS) */ | ||
77 | mcr p15, 0, r0, c7, c1, 0 | ||
78 | dsb | ||
79 | isb @ Not necessary if followed by eret | ||
80 | |||
81 | bx lr | ||
82 | ENDPROC(__kvm_flush_vm_context) | ||
83 | |||
84 | |||
85 | /******************************************************************** | ||
86 | * Hypervisor world-switch code | ||
87 | * | ||
88 | * | ||
89 | * int __kvm_vcpu_run(struct kvm_vcpu *vcpu) | ||
90 | */ | ||
91 | ENTRY(__kvm_vcpu_run) | ||
92 | @ Save the vcpu pointer | ||
93 | mcr p15, 4, vcpu, c13, c0, 2 @ HTPIDR | ||
94 | |||
95 | save_host_regs | ||
96 | |||
97 | @ Store hardware CP15 state and load guest state | ||
98 | read_cp15_state store_to_vcpu = 0 | ||
99 | write_cp15_state read_from_vcpu = 1 | ||
100 | |||
101 | @ If the host kernel has not been configured with VFPv3 support, | ||
102 | @ then it is safer if we deny guests from using it as well. | ||
103 | #ifdef CONFIG_VFPv3 | ||
104 | @ Set FPEXC_EN so the guest doesn't trap floating point instructions | ||
105 | VFPFMRX r2, FPEXC @ VMRS | ||
106 | push {r2} | ||
107 | orr r2, r2, #FPEXC_EN | ||
108 | VFPFMXR FPEXC, r2 @ VMSR | ||
109 | #endif | ||
110 | |||
111 | @ Configure Hyp-role | ||
112 | configure_hyp_role vmentry | ||
113 | |||
114 | @ Trap coprocessor CRx accesses | ||
115 | set_hstr vmentry | ||
116 | set_hcptr vmentry, (HCPTR_TTA | HCPTR_TCP(10) | HCPTR_TCP(11)) | ||
117 | set_hdcr vmentry | ||
118 | |||
119 | @ Write configured ID register into MIDR alias | ||
120 | ldr r1, [vcpu, #VCPU_MIDR] | ||
121 | mcr p15, 4, r1, c0, c0, 0 | ||
122 | |||
123 | @ Write guest view of MPIDR into VMPIDR | ||
124 | ldr r1, [vcpu, #CP15_OFFSET(c0_MPIDR)] | ||
125 | mcr p15, 4, r1, c0, c0, 5 | ||
126 | |||
127 | @ Set up guest memory translation | ||
128 | ldr r1, [vcpu, #VCPU_KVM] | ||
129 | add r1, r1, #KVM_VTTBR | ||
130 | ldrd r2, r3, [r1] | ||
131 | mcrr p15, 6, r2, r3, c2 @ Write VTTBR | ||
132 | |||
133 | @ We're all done, just restore the GPRs and go to the guest | ||
134 | restore_guest_regs | ||
135 | clrex @ Clear exclusive monitor | ||
136 | eret | ||
137 | |||
138 | __kvm_vcpu_return: | ||
139 | /* | ||
140 | * return convention: | ||
141 | * guest r0, r1, r2 saved on the stack | ||
142 | * r0: vcpu pointer | ||
143 | * r1: exception code | ||
144 | */ | ||
145 | save_guest_regs | ||
146 | |||
147 | @ Set VMID == 0 | ||
148 | mov r2, #0 | ||
149 | mov r3, #0 | ||
150 | mcrr p15, 6, r2, r3, c2 @ Write VTTBR | ||
151 | |||
152 | @ Don't trap coprocessor accesses for host kernel | ||
153 | set_hstr vmexit | ||
154 | set_hdcr vmexit | ||
155 | set_hcptr vmexit, (HCPTR_TTA | HCPTR_TCP(10) | HCPTR_TCP(11)) | ||
156 | |||
157 | #ifdef CONFIG_VFPv3 | ||
158 | @ Save floating point registers we if let guest use them. | ||
159 | tst r2, #(HCPTR_TCP(10) | HCPTR_TCP(11)) | ||
160 | bne after_vfp_restore | ||
161 | |||
162 | @ Switch VFP/NEON hardware state to the host's | ||
163 | add r7, vcpu, #VCPU_VFP_GUEST | ||
164 | store_vfp_state r7 | ||
165 | add r7, vcpu, #VCPU_VFP_HOST | ||
166 | ldr r7, [r7] | ||
167 | restore_vfp_state r7 | ||
168 | |||
169 | after_vfp_restore: | ||
170 | @ Restore FPEXC_EN which we clobbered on entry | ||
171 | pop {r2} | ||
172 | VFPFMXR FPEXC, r2 | ||
173 | #endif | ||
174 | |||
175 | @ Reset Hyp-role | ||
176 | configure_hyp_role vmexit | ||
177 | |||
178 | @ Let host read hardware MIDR | ||
179 | mrc p15, 0, r2, c0, c0, 0 | ||
180 | mcr p15, 4, r2, c0, c0, 0 | ||
181 | |||
182 | @ Back to hardware MPIDR | ||
183 | mrc p15, 0, r2, c0, c0, 5 | ||
184 | mcr p15, 4, r2, c0, c0, 5 | ||
185 | |||
186 | @ Store guest CP15 state and restore host state | ||
187 | read_cp15_state store_to_vcpu = 1 | ||
188 | write_cp15_state read_from_vcpu = 0 | ||
189 | |||
190 | restore_host_regs | ||
191 | clrex @ Clear exclusive monitor | ||
192 | mov r0, r1 @ Return the return code | ||
193 | mov r1, #0 @ Clear upper bits in return value | ||
194 | bx lr @ return to IOCTL | ||
195 | |||
196 | /******************************************************************** | ||
197 | * Call function in Hyp mode | ||
198 | * | ||
199 | * | ||
200 | * u64 kvm_call_hyp(void *hypfn, ...); | ||
201 | * | ||
202 | * This is not really a variadic function in the classic C-way and care must | ||
203 | * be taken when calling this to ensure parameters are passed in registers | ||
204 | * only, since the stack will change between the caller and the callee. | ||
205 | * | ||
206 | * Call the function with the first argument containing a pointer to the | ||
207 | * function you wish to call in Hyp mode, and subsequent arguments will be | ||
208 | * passed as r0, r1, and r2 (a maximum of 3 arguments in addition to the | ||
209 | * function pointer can be passed). The function being called must be mapped | ||
210 | * in Hyp mode (see init_hyp_mode in arch/arm/kvm/arm.c). Return values are | ||
211 | * passed in r0 and r1. | ||
212 | * | ||
213 | * The calling convention follows the standard AAPCS: | ||
214 | * r0 - r3: caller save | ||
215 | * r12: caller save | ||
216 | * rest: callee save | ||
217 | */ | ||
218 | ENTRY(kvm_call_hyp) | ||
219 | hvc #0 | ||
220 | bx lr | ||
221 | |||
222 | /******************************************************************** | ||
223 | * Hypervisor exception vector and handlers | ||
224 | * | ||
225 | * | ||
226 | * The KVM/ARM Hypervisor ABI is defined as follows: | ||
227 | * | ||
228 | * Entry to Hyp mode from the host kernel will happen _only_ when an HVC | ||
229 | * instruction is issued since all traps are disabled when running the host | ||
230 | * kernel as per the Hyp-mode initialization at boot time. | ||
231 | * | ||
232 | * HVC instructions cause a trap to the vector page + offset 0x18 (see hyp_hvc | ||
233 | * below) when the HVC instruction is called from SVC mode (i.e. a guest or the | ||
234 | * host kernel) and they cause a trap to the vector page + offset 0xc when HVC | ||
235 | * instructions are called from within Hyp-mode. | ||
236 | * | ||
237 | * Hyp-ABI: Calling HYP-mode functions from host (in SVC mode): | ||
238 | * Switching to Hyp mode is done through a simple HVC #0 instruction. The | ||
239 | * exception vector code will check that the HVC comes from VMID==0 and if | ||
240 | * so will push the necessary state (SPSR, lr_usr) on the Hyp stack. | ||
241 | * - r0 contains a pointer to a HYP function | ||
242 | * - r1, r2, and r3 contain arguments to the above function. | ||
243 | * - The HYP function will be called with its arguments in r0, r1 and r2. | ||
244 | * On HYP function return, we return directly to SVC. | ||
245 | * | ||
246 | * Note that the above is used to execute code in Hyp-mode from a host-kernel | ||
247 | * point of view, and is a different concept from performing a world-switch and | ||
248 | * executing guest code SVC mode (with a VMID != 0). | ||
249 | */ | ||
250 | |||
251 | /* Handle undef, svc, pabt, or dabt by crashing with a user notice */ | ||
252 | .macro bad_exception exception_code, panic_str | ||
253 | push {r0-r2} | ||
254 | mrrc p15, 6, r0, r1, c2 @ Read VTTBR | ||
255 | lsr r1, r1, #16 | ||
256 | ands r1, r1, #0xff | ||
257 | beq 99f | ||
258 | |||
259 | load_vcpu @ Load VCPU pointer | ||
260 | .if \exception_code == ARM_EXCEPTION_DATA_ABORT | ||
261 | mrc p15, 4, r2, c5, c2, 0 @ HSR | ||
262 | mrc p15, 4, r1, c6, c0, 0 @ HDFAR | ||
263 | str r2, [vcpu, #VCPU_HSR] | ||
264 | str r1, [vcpu, #VCPU_HxFAR] | ||
265 | .endif | ||
266 | .if \exception_code == ARM_EXCEPTION_PREF_ABORT | ||
267 | mrc p15, 4, r2, c5, c2, 0 @ HSR | ||
268 | mrc p15, 4, r1, c6, c0, 2 @ HIFAR | ||
269 | str r2, [vcpu, #VCPU_HSR] | ||
270 | str r1, [vcpu, #VCPU_HxFAR] | ||
271 | .endif | ||
272 | mov r1, #\exception_code | ||
273 | b __kvm_vcpu_return | ||
274 | |||
275 | @ We were in the host already. Let's craft a panic-ing return to SVC. | ||
276 | 99: mrs r2, cpsr | ||
277 | bic r2, r2, #MODE_MASK | ||
278 | orr r2, r2, #SVC_MODE | ||
279 | THUMB( orr r2, r2, #PSR_T_BIT ) | ||
280 | msr spsr_cxsf, r2 | ||
281 | mrs r1, ELR_hyp | ||
282 | ldr r2, =BSYM(panic) | ||
283 | msr ELR_hyp, r2 | ||
284 | ldr r0, =\panic_str | ||
285 | eret | ||
286 | .endm | ||
287 | |||
288 | .text | ||
289 | |||
290 | .align 5 | ||
291 | __kvm_hyp_vector: | ||
292 | .globl __kvm_hyp_vector | ||
293 | |||
294 | @ Hyp-mode exception vector | ||
295 | W(b) hyp_reset | ||
296 | W(b) hyp_undef | ||
297 | W(b) hyp_svc | ||
298 | W(b) hyp_pabt | ||
299 | W(b) hyp_dabt | ||
300 | W(b) hyp_hvc | ||
301 | W(b) hyp_irq | ||
302 | W(b) hyp_fiq | ||
303 | |||
304 | .align | ||
305 | hyp_reset: | ||
306 | b hyp_reset | ||
307 | |||
308 | .align | ||
309 | hyp_undef: | ||
310 | bad_exception ARM_EXCEPTION_UNDEFINED, und_die_str | ||
311 | |||
312 | .align | ||
313 | hyp_svc: | ||
314 | bad_exception ARM_EXCEPTION_HVC, svc_die_str | ||
315 | |||
316 | .align | ||
317 | hyp_pabt: | ||
318 | bad_exception ARM_EXCEPTION_PREF_ABORT, pabt_die_str | ||
319 | |||
320 | .align | ||
321 | hyp_dabt: | ||
322 | bad_exception ARM_EXCEPTION_DATA_ABORT, dabt_die_str | ||
323 | |||
324 | .align | ||
325 | hyp_hvc: | ||
326 | /* | ||
327 | * Getting here is either becuase of a trap from a guest or from calling | ||
328 | * HVC from the host kernel, which means "switch to Hyp mode". | ||
329 | */ | ||
330 | push {r0, r1, r2} | ||
331 | |||
332 | @ Check syndrome register | ||
333 | mrc p15, 4, r1, c5, c2, 0 @ HSR | ||
334 | lsr r0, r1, #HSR_EC_SHIFT | ||
335 | #ifdef CONFIG_VFPv3 | ||
336 | cmp r0, #HSR_EC_CP_0_13 | ||
337 | beq switch_to_guest_vfp | ||
338 | #endif | ||
339 | cmp r0, #HSR_EC_HVC | ||
340 | bne guest_trap @ Not HVC instr. | ||
341 | |||
342 | /* | ||
343 | * Let's check if the HVC came from VMID 0 and allow simple | ||
344 | * switch to Hyp mode | ||
345 | */ | ||
346 | mrrc p15, 6, r0, r2, c2 | ||
347 | lsr r2, r2, #16 | ||
348 | and r2, r2, #0xff | ||
349 | cmp r2, #0 | ||
350 | bne guest_trap @ Guest called HVC | ||
351 | |||
352 | host_switch_to_hyp: | ||
353 | pop {r0, r1, r2} | ||
354 | |||
355 | push {lr} | ||
356 | mrs lr, SPSR | ||
357 | push {lr} | ||
358 | |||
359 | mov lr, r0 | ||
360 | mov r0, r1 | ||
361 | mov r1, r2 | ||
362 | mov r2, r3 | ||
363 | |||
364 | THUMB( orr lr, #1) | ||
365 | blx lr @ Call the HYP function | ||
366 | |||
367 | pop {lr} | ||
368 | msr SPSR_csxf, lr | ||
369 | pop {lr} | ||
370 | eret | ||
371 | |||
372 | guest_trap: | ||
373 | load_vcpu @ Load VCPU pointer to r0 | ||
374 | str r1, [vcpu, #VCPU_HSR] | ||
375 | |||
376 | @ Check if we need the fault information | ||
377 | lsr r1, r1, #HSR_EC_SHIFT | ||
378 | cmp r1, #HSR_EC_IABT | ||
379 | mrceq p15, 4, r2, c6, c0, 2 @ HIFAR | ||
380 | beq 2f | ||
381 | cmp r1, #HSR_EC_DABT | ||
382 | bne 1f | ||
383 | mrc p15, 4, r2, c6, c0, 0 @ HDFAR | ||
384 | |||
385 | 2: str r2, [vcpu, #VCPU_HxFAR] | ||
386 | |||
387 | /* | ||
388 | * B3.13.5 Reporting exceptions taken to the Non-secure PL2 mode: | ||
389 | * | ||
390 | * Abort on the stage 2 translation for a memory access from a | ||
391 | * Non-secure PL1 or PL0 mode: | ||
392 | * | ||
393 | * For any Access flag fault or Translation fault, and also for any | ||
394 | * Permission fault on the stage 2 translation of a memory access | ||
395 | * made as part of a translation table walk for a stage 1 translation, | ||
396 | * the HPFAR holds the IPA that caused the fault. Otherwise, the HPFAR | ||
397 | * is UNKNOWN. | ||
398 | */ | ||
399 | |||
400 | /* Check for permission fault, and S1PTW */ | ||
401 | mrc p15, 4, r1, c5, c2, 0 @ HSR | ||
402 | and r0, r1, #HSR_FSC_TYPE | ||
403 | cmp r0, #FSC_PERM | ||
404 | tsteq r1, #(1 << 7) @ S1PTW | ||
405 | mrcne p15, 4, r2, c6, c0, 4 @ HPFAR | ||
406 | bne 3f | ||
407 | |||
408 | /* Resolve IPA using the xFAR */ | ||
409 | mcr p15, 0, r2, c7, c8, 0 @ ATS1CPR | ||
410 | isb | ||
411 | mrrc p15, 0, r0, r1, c7 @ PAR | ||
412 | tst r0, #1 | ||
413 | bne 4f @ Failed translation | ||
414 | ubfx r2, r0, #12, #20 | ||
415 | lsl r2, r2, #4 | ||
416 | orr r2, r2, r1, lsl #24 | ||
417 | |||
418 | 3: load_vcpu @ Load VCPU pointer to r0 | ||
419 | str r2, [r0, #VCPU_HPFAR] | ||
420 | |||
421 | 1: mov r1, #ARM_EXCEPTION_HVC | ||
422 | b __kvm_vcpu_return | ||
423 | |||
424 | 4: pop {r0, r1, r2} @ Failed translation, return to guest | ||
425 | eret | ||
426 | |||
427 | /* | ||
428 | * If VFPv3 support is not available, then we will not switch the VFP | ||
429 | * registers; however cp10 and cp11 accesses will still trap and fallback | ||
430 | * to the regular coprocessor emulation code, which currently will | ||
431 | * inject an undefined exception to the guest. | ||
432 | */ | ||
433 | #ifdef CONFIG_VFPv3 | ||
434 | switch_to_guest_vfp: | ||
435 | load_vcpu @ Load VCPU pointer to r0 | ||
436 | push {r3-r7} | ||
437 | |||
438 | @ NEON/VFP used. Turn on VFP access. | ||
439 | set_hcptr vmexit, (HCPTR_TCP(10) | HCPTR_TCP(11)) | ||
440 | |||
441 | @ Switch VFP/NEON hardware state to the guest's | ||
442 | add r7, r0, #VCPU_VFP_HOST | ||
443 | ldr r7, [r7] | ||
444 | store_vfp_state r7 | ||
445 | add r7, r0, #VCPU_VFP_GUEST | ||
446 | restore_vfp_state r7 | ||
447 | |||
448 | pop {r3-r7} | ||
449 | pop {r0-r2} | ||
450 | eret | ||
451 | #endif | ||
452 | |||
453 | .align | ||
454 | hyp_irq: | ||
455 | push {r0, r1, r2} | ||
456 | mov r1, #ARM_EXCEPTION_IRQ | ||
457 | load_vcpu @ Load VCPU pointer to r0 | ||
458 | b __kvm_vcpu_return | ||
459 | |||
460 | .align | ||
461 | hyp_fiq: | ||
462 | b hyp_fiq | ||
463 | |||
464 | .ltorg | ||
465 | |||
466 | __kvm_hyp_code_end: | ||
467 | .globl __kvm_hyp_code_end | ||
468 | |||
469 | .section ".rodata" | ||
470 | |||
471 | und_die_str: | ||
472 | .ascii "unexpected undefined exception in Hyp mode at: %#08x" | ||
473 | pabt_die_str: | ||
474 | .ascii "unexpected prefetch abort in Hyp mode at: %#08x" | ||
475 | dabt_die_str: | ||
476 | .ascii "unexpected data abort in Hyp mode at: %#08x" | ||
477 | svc_die_str: | ||
478 | .ascii "unexpected HVC/SVC trap in Hyp mode at: %#08x" | ||
diff --git a/arch/arm/kvm/interrupts_head.S b/arch/arm/kvm/interrupts_head.S new file mode 100644 index 000000000000..6a95d341e9c5 --- /dev/null +++ b/arch/arm/kvm/interrupts_head.S | |||
@@ -0,0 +1,441 @@ | |||
1 | #define VCPU_USR_REG(_reg_nr) (VCPU_USR_REGS + (_reg_nr * 4)) | ||
2 | #define VCPU_USR_SP (VCPU_USR_REG(13)) | ||
3 | #define VCPU_USR_LR (VCPU_USR_REG(14)) | ||
4 | #define CP15_OFFSET(_cp15_reg_idx) (VCPU_CP15 + (_cp15_reg_idx * 4)) | ||
5 | |||
6 | /* | ||
7 | * Many of these macros need to access the VCPU structure, which is always | ||
8 | * held in r0. These macros should never clobber r1, as it is used to hold the | ||
9 | * exception code on the return path (except of course the macro that switches | ||
10 | * all the registers before the final jump to the VM). | ||
11 | */ | ||
12 | vcpu .req r0 @ vcpu pointer always in r0 | ||
13 | |||
14 | /* Clobbers {r2-r6} */ | ||
15 | .macro store_vfp_state vfp_base | ||
16 | @ The VFPFMRX and VFPFMXR macros are the VMRS and VMSR instructions | ||
17 | VFPFMRX r2, FPEXC | ||
18 | @ Make sure VFP is enabled so we can touch the registers. | ||
19 | orr r6, r2, #FPEXC_EN | ||
20 | VFPFMXR FPEXC, r6 | ||
21 | |||
22 | VFPFMRX r3, FPSCR | ||
23 | tst r2, #FPEXC_EX @ Check for VFP Subarchitecture | ||
24 | beq 1f | ||
25 | @ If FPEXC_EX is 0, then FPINST/FPINST2 reads are upredictable, so | ||
26 | @ we only need to save them if FPEXC_EX is set. | ||
27 | VFPFMRX r4, FPINST | ||
28 | tst r2, #FPEXC_FP2V | ||
29 | VFPFMRX r5, FPINST2, ne @ vmrsne | ||
30 | bic r6, r2, #FPEXC_EX @ FPEXC_EX disable | ||
31 | VFPFMXR FPEXC, r6 | ||
32 | 1: | ||
33 | VFPFSTMIA \vfp_base, r6 @ Save VFP registers | ||
34 | stm \vfp_base, {r2-r5} @ Save FPEXC, FPSCR, FPINST, FPINST2 | ||
35 | .endm | ||
36 | |||
37 | /* Assume FPEXC_EN is on and FPEXC_EX is off, clobbers {r2-r6} */ | ||
38 | .macro restore_vfp_state vfp_base | ||
39 | VFPFLDMIA \vfp_base, r6 @ Load VFP registers | ||
40 | ldm \vfp_base, {r2-r5} @ Load FPEXC, FPSCR, FPINST, FPINST2 | ||
41 | |||
42 | VFPFMXR FPSCR, r3 | ||
43 | tst r2, #FPEXC_EX @ Check for VFP Subarchitecture | ||
44 | beq 1f | ||
45 | VFPFMXR FPINST, r4 | ||
46 | tst r2, #FPEXC_FP2V | ||
47 | VFPFMXR FPINST2, r5, ne | ||
48 | 1: | ||
49 | VFPFMXR FPEXC, r2 @ FPEXC (last, in case !EN) | ||
50 | .endm | ||
51 | |||
52 | /* These are simply for the macros to work - value don't have meaning */ | ||
53 | .equ usr, 0 | ||
54 | .equ svc, 1 | ||
55 | .equ abt, 2 | ||
56 | .equ und, 3 | ||
57 | .equ irq, 4 | ||
58 | .equ fiq, 5 | ||
59 | |||
60 | .macro push_host_regs_mode mode | ||
61 | mrs r2, SP_\mode | ||
62 | mrs r3, LR_\mode | ||
63 | mrs r4, SPSR_\mode | ||
64 | push {r2, r3, r4} | ||
65 | .endm | ||
66 | |||
67 | /* | ||
68 | * Store all host persistent registers on the stack. | ||
69 | * Clobbers all registers, in all modes, except r0 and r1. | ||
70 | */ | ||
71 | .macro save_host_regs | ||
72 | /* Hyp regs. Only ELR_hyp (SPSR_hyp already saved) */ | ||
73 | mrs r2, ELR_hyp | ||
74 | push {r2} | ||
75 | |||
76 | /* usr regs */ | ||
77 | push {r4-r12} @ r0-r3 are always clobbered | ||
78 | mrs r2, SP_usr | ||
79 | mov r3, lr | ||
80 | push {r2, r3} | ||
81 | |||
82 | push_host_regs_mode svc | ||
83 | push_host_regs_mode abt | ||
84 | push_host_regs_mode und | ||
85 | push_host_regs_mode irq | ||
86 | |||
87 | /* fiq regs */ | ||
88 | mrs r2, r8_fiq | ||
89 | mrs r3, r9_fiq | ||
90 | mrs r4, r10_fiq | ||
91 | mrs r5, r11_fiq | ||
92 | mrs r6, r12_fiq | ||
93 | mrs r7, SP_fiq | ||
94 | mrs r8, LR_fiq | ||
95 | mrs r9, SPSR_fiq | ||
96 | push {r2-r9} | ||
97 | .endm | ||
98 | |||
99 | .macro pop_host_regs_mode mode | ||
100 | pop {r2, r3, r4} | ||
101 | msr SP_\mode, r2 | ||
102 | msr LR_\mode, r3 | ||
103 | msr SPSR_\mode, r4 | ||
104 | .endm | ||
105 | |||
106 | /* | ||
107 | * Restore all host registers from the stack. | ||
108 | * Clobbers all registers, in all modes, except r0 and r1. | ||
109 | */ | ||
110 | .macro restore_host_regs | ||
111 | pop {r2-r9} | ||
112 | msr r8_fiq, r2 | ||
113 | msr r9_fiq, r3 | ||
114 | msr r10_fiq, r4 | ||
115 | msr r11_fiq, r5 | ||
116 | msr r12_fiq, r6 | ||
117 | msr SP_fiq, r7 | ||
118 | msr LR_fiq, r8 | ||
119 | msr SPSR_fiq, r9 | ||
120 | |||
121 | pop_host_regs_mode irq | ||
122 | pop_host_regs_mode und | ||
123 | pop_host_regs_mode abt | ||
124 | pop_host_regs_mode svc | ||
125 | |||
126 | pop {r2, r3} | ||
127 | msr SP_usr, r2 | ||
128 | mov lr, r3 | ||
129 | pop {r4-r12} | ||
130 | |||
131 | pop {r2} | ||
132 | msr ELR_hyp, r2 | ||
133 | .endm | ||
134 | |||
135 | /* | ||
136 | * Restore SP, LR and SPSR for a given mode. offset is the offset of | ||
137 | * this mode's registers from the VCPU base. | ||
138 | * | ||
139 | * Assumes vcpu pointer in vcpu reg | ||
140 | * | ||
141 | * Clobbers r1, r2, r3, r4. | ||
142 | */ | ||
143 | .macro restore_guest_regs_mode mode, offset | ||
144 | add r1, vcpu, \offset | ||
145 | ldm r1, {r2, r3, r4} | ||
146 | msr SP_\mode, r2 | ||
147 | msr LR_\mode, r3 | ||
148 | msr SPSR_\mode, r4 | ||
149 | .endm | ||
150 | |||
151 | /* | ||
152 | * Restore all guest registers from the vcpu struct. | ||
153 | * | ||
154 | * Assumes vcpu pointer in vcpu reg | ||
155 | * | ||
156 | * Clobbers *all* registers. | ||
157 | */ | ||
158 | .macro restore_guest_regs | ||
159 | restore_guest_regs_mode svc, #VCPU_SVC_REGS | ||
160 | restore_guest_regs_mode abt, #VCPU_ABT_REGS | ||
161 | restore_guest_regs_mode und, #VCPU_UND_REGS | ||
162 | restore_guest_regs_mode irq, #VCPU_IRQ_REGS | ||
163 | |||
164 | add r1, vcpu, #VCPU_FIQ_REGS | ||
165 | ldm r1, {r2-r9} | ||
166 | msr r8_fiq, r2 | ||
167 | msr r9_fiq, r3 | ||
168 | msr r10_fiq, r4 | ||
169 | msr r11_fiq, r5 | ||
170 | msr r12_fiq, r6 | ||
171 | msr SP_fiq, r7 | ||
172 | msr LR_fiq, r8 | ||
173 | msr SPSR_fiq, r9 | ||
174 | |||
175 | @ Load return state | ||
176 | ldr r2, [vcpu, #VCPU_PC] | ||
177 | ldr r3, [vcpu, #VCPU_CPSR] | ||
178 | msr ELR_hyp, r2 | ||
179 | msr SPSR_cxsf, r3 | ||
180 | |||
181 | @ Load user registers | ||
182 | ldr r2, [vcpu, #VCPU_USR_SP] | ||
183 | ldr r3, [vcpu, #VCPU_USR_LR] | ||
184 | msr SP_usr, r2 | ||
185 | mov lr, r3 | ||
186 | add vcpu, vcpu, #(VCPU_USR_REGS) | ||
187 | ldm vcpu, {r0-r12} | ||
188 | .endm | ||
189 | |||
190 | /* | ||
191 | * Save SP, LR and SPSR for a given mode. offset is the offset of | ||
192 | * this mode's registers from the VCPU base. | ||
193 | * | ||
194 | * Assumes vcpu pointer in vcpu reg | ||
195 | * | ||
196 | * Clobbers r2, r3, r4, r5. | ||
197 | */ | ||
198 | .macro save_guest_regs_mode mode, offset | ||
199 | add r2, vcpu, \offset | ||
200 | mrs r3, SP_\mode | ||
201 | mrs r4, LR_\mode | ||
202 | mrs r5, SPSR_\mode | ||
203 | stm r2, {r3, r4, r5} | ||
204 | .endm | ||
205 | |||
206 | /* | ||
207 | * Save all guest registers to the vcpu struct | ||
208 | * Expects guest's r0, r1, r2 on the stack. | ||
209 | * | ||
210 | * Assumes vcpu pointer in vcpu reg | ||
211 | * | ||
212 | * Clobbers r2, r3, r4, r5. | ||
213 | */ | ||
214 | .macro save_guest_regs | ||
215 | @ Store usr registers | ||
216 | add r2, vcpu, #VCPU_USR_REG(3) | ||
217 | stm r2, {r3-r12} | ||
218 | add r2, vcpu, #VCPU_USR_REG(0) | ||
219 | pop {r3, r4, r5} @ r0, r1, r2 | ||
220 | stm r2, {r3, r4, r5} | ||
221 | mrs r2, SP_usr | ||
222 | mov r3, lr | ||
223 | str r2, [vcpu, #VCPU_USR_SP] | ||
224 | str r3, [vcpu, #VCPU_USR_LR] | ||
225 | |||
226 | @ Store return state | ||
227 | mrs r2, ELR_hyp | ||
228 | mrs r3, spsr | ||
229 | str r2, [vcpu, #VCPU_PC] | ||
230 | str r3, [vcpu, #VCPU_CPSR] | ||
231 | |||
232 | @ Store other guest registers | ||
233 | save_guest_regs_mode svc, #VCPU_SVC_REGS | ||
234 | save_guest_regs_mode abt, #VCPU_ABT_REGS | ||
235 | save_guest_regs_mode und, #VCPU_UND_REGS | ||
236 | save_guest_regs_mode irq, #VCPU_IRQ_REGS | ||
237 | .endm | ||
238 | |||
239 | /* Reads cp15 registers from hardware and stores them in memory | ||
240 | * @store_to_vcpu: If 0, registers are written in-order to the stack, | ||
241 | * otherwise to the VCPU struct pointed to by vcpup | ||
242 | * | ||
243 | * Assumes vcpu pointer in vcpu reg | ||
244 | * | ||
245 | * Clobbers r2 - r12 | ||
246 | */ | ||
247 | .macro read_cp15_state store_to_vcpu | ||
248 | mrc p15, 0, r2, c1, c0, 0 @ SCTLR | ||
249 | mrc p15, 0, r3, c1, c0, 2 @ CPACR | ||
250 | mrc p15, 0, r4, c2, c0, 2 @ TTBCR | ||
251 | mrc p15, 0, r5, c3, c0, 0 @ DACR | ||
252 | mrrc p15, 0, r6, r7, c2 @ TTBR 0 | ||
253 | mrrc p15, 1, r8, r9, c2 @ TTBR 1 | ||
254 | mrc p15, 0, r10, c10, c2, 0 @ PRRR | ||
255 | mrc p15, 0, r11, c10, c2, 1 @ NMRR | ||
256 | mrc p15, 2, r12, c0, c0, 0 @ CSSELR | ||
257 | |||
258 | .if \store_to_vcpu == 0 | ||
259 | push {r2-r12} @ Push CP15 registers | ||
260 | .else | ||
261 | str r2, [vcpu, #CP15_OFFSET(c1_SCTLR)] | ||
262 | str r3, [vcpu, #CP15_OFFSET(c1_CPACR)] | ||
263 | str r4, [vcpu, #CP15_OFFSET(c2_TTBCR)] | ||
264 | str r5, [vcpu, #CP15_OFFSET(c3_DACR)] | ||
265 | add r2, vcpu, #CP15_OFFSET(c2_TTBR0) | ||
266 | strd r6, r7, [r2] | ||
267 | add r2, vcpu, #CP15_OFFSET(c2_TTBR1) | ||
268 | strd r8, r9, [r2] | ||
269 | str r10, [vcpu, #CP15_OFFSET(c10_PRRR)] | ||
270 | str r11, [vcpu, #CP15_OFFSET(c10_NMRR)] | ||
271 | str r12, [vcpu, #CP15_OFFSET(c0_CSSELR)] | ||
272 | .endif | ||
273 | |||
274 | mrc p15, 0, r2, c13, c0, 1 @ CID | ||
275 | mrc p15, 0, r3, c13, c0, 2 @ TID_URW | ||
276 | mrc p15, 0, r4, c13, c0, 3 @ TID_URO | ||
277 | mrc p15, 0, r5, c13, c0, 4 @ TID_PRIV | ||
278 | mrc p15, 0, r6, c5, c0, 0 @ DFSR | ||
279 | mrc p15, 0, r7, c5, c0, 1 @ IFSR | ||
280 | mrc p15, 0, r8, c5, c1, 0 @ ADFSR | ||
281 | mrc p15, 0, r9, c5, c1, 1 @ AIFSR | ||
282 | mrc p15, 0, r10, c6, c0, 0 @ DFAR | ||
283 | mrc p15, 0, r11, c6, c0, 2 @ IFAR | ||
284 | mrc p15, 0, r12, c12, c0, 0 @ VBAR | ||
285 | |||
286 | .if \store_to_vcpu == 0 | ||
287 | push {r2-r12} @ Push CP15 registers | ||
288 | .else | ||
289 | str r2, [vcpu, #CP15_OFFSET(c13_CID)] | ||
290 | str r3, [vcpu, #CP15_OFFSET(c13_TID_URW)] | ||
291 | str r4, [vcpu, #CP15_OFFSET(c13_TID_URO)] | ||
292 | str r5, [vcpu, #CP15_OFFSET(c13_TID_PRIV)] | ||
293 | str r6, [vcpu, #CP15_OFFSET(c5_DFSR)] | ||
294 | str r7, [vcpu, #CP15_OFFSET(c5_IFSR)] | ||
295 | str r8, [vcpu, #CP15_OFFSET(c5_ADFSR)] | ||
296 | str r9, [vcpu, #CP15_OFFSET(c5_AIFSR)] | ||
297 | str r10, [vcpu, #CP15_OFFSET(c6_DFAR)] | ||
298 | str r11, [vcpu, #CP15_OFFSET(c6_IFAR)] | ||
299 | str r12, [vcpu, #CP15_OFFSET(c12_VBAR)] | ||
300 | .endif | ||
301 | .endm | ||
302 | |||
303 | /* | ||
304 | * Reads cp15 registers from memory and writes them to hardware | ||
305 | * @read_from_vcpu: If 0, registers are read in-order from the stack, | ||
306 | * otherwise from the VCPU struct pointed to by vcpup | ||
307 | * | ||
308 | * Assumes vcpu pointer in vcpu reg | ||
309 | */ | ||
310 | .macro write_cp15_state read_from_vcpu | ||
311 | .if \read_from_vcpu == 0 | ||
312 | pop {r2-r12} | ||
313 | .else | ||
314 | ldr r2, [vcpu, #CP15_OFFSET(c13_CID)] | ||
315 | ldr r3, [vcpu, #CP15_OFFSET(c13_TID_URW)] | ||
316 | ldr r4, [vcpu, #CP15_OFFSET(c13_TID_URO)] | ||
317 | ldr r5, [vcpu, #CP15_OFFSET(c13_TID_PRIV)] | ||
318 | ldr r6, [vcpu, #CP15_OFFSET(c5_DFSR)] | ||
319 | ldr r7, [vcpu, #CP15_OFFSET(c5_IFSR)] | ||
320 | ldr r8, [vcpu, #CP15_OFFSET(c5_ADFSR)] | ||
321 | ldr r9, [vcpu, #CP15_OFFSET(c5_AIFSR)] | ||
322 | ldr r10, [vcpu, #CP15_OFFSET(c6_DFAR)] | ||
323 | ldr r11, [vcpu, #CP15_OFFSET(c6_IFAR)] | ||
324 | ldr r12, [vcpu, #CP15_OFFSET(c12_VBAR)] | ||
325 | .endif | ||
326 | |||
327 | mcr p15, 0, r2, c13, c0, 1 @ CID | ||
328 | mcr p15, 0, r3, c13, c0, 2 @ TID_URW | ||
329 | mcr p15, 0, r4, c13, c0, 3 @ TID_URO | ||
330 | mcr p15, 0, r5, c13, c0, 4 @ TID_PRIV | ||
331 | mcr p15, 0, r6, c5, c0, 0 @ DFSR | ||
332 | mcr p15, 0, r7, c5, c0, 1 @ IFSR | ||
333 | mcr p15, 0, r8, c5, c1, 0 @ ADFSR | ||
334 | mcr p15, 0, r9, c5, c1, 1 @ AIFSR | ||
335 | mcr p15, 0, r10, c6, c0, 0 @ DFAR | ||
336 | mcr p15, 0, r11, c6, c0, 2 @ IFAR | ||
337 | mcr p15, 0, r12, c12, c0, 0 @ VBAR | ||
338 | |||
339 | .if \read_from_vcpu == 0 | ||
340 | pop {r2-r12} | ||
341 | .else | ||
342 | ldr r2, [vcpu, #CP15_OFFSET(c1_SCTLR)] | ||
343 | ldr r3, [vcpu, #CP15_OFFSET(c1_CPACR)] | ||
344 | ldr r4, [vcpu, #CP15_OFFSET(c2_TTBCR)] | ||
345 | ldr r5, [vcpu, #CP15_OFFSET(c3_DACR)] | ||
346 | add r12, vcpu, #CP15_OFFSET(c2_TTBR0) | ||
347 | ldrd r6, r7, [r12] | ||
348 | add r12, vcpu, #CP15_OFFSET(c2_TTBR1) | ||
349 | ldrd r8, r9, [r12] | ||
350 | ldr r10, [vcpu, #CP15_OFFSET(c10_PRRR)] | ||
351 | ldr r11, [vcpu, #CP15_OFFSET(c10_NMRR)] | ||
352 | ldr r12, [vcpu, #CP15_OFFSET(c0_CSSELR)] | ||
353 | .endif | ||
354 | |||
355 | mcr p15, 0, r2, c1, c0, 0 @ SCTLR | ||
356 | mcr p15, 0, r3, c1, c0, 2 @ CPACR | ||
357 | mcr p15, 0, r4, c2, c0, 2 @ TTBCR | ||
358 | mcr p15, 0, r5, c3, c0, 0 @ DACR | ||
359 | mcrr p15, 0, r6, r7, c2 @ TTBR 0 | ||
360 | mcrr p15, 1, r8, r9, c2 @ TTBR 1 | ||
361 | mcr p15, 0, r10, c10, c2, 0 @ PRRR | ||
362 | mcr p15, 0, r11, c10, c2, 1 @ NMRR | ||
363 | mcr p15, 2, r12, c0, c0, 0 @ CSSELR | ||
364 | .endm | ||
365 | |||
366 | /* | ||
367 | * Save the VGIC CPU state into memory | ||
368 | * | ||
369 | * Assumes vcpu pointer in vcpu reg | ||
370 | */ | ||
371 | .macro save_vgic_state | ||
372 | .endm | ||
373 | |||
374 | /* | ||
375 | * Restore the VGIC CPU state from memory | ||
376 | * | ||
377 | * Assumes vcpu pointer in vcpu reg | ||
378 | */ | ||
379 | .macro restore_vgic_state | ||
380 | .endm | ||
381 | |||
382 | .equ vmentry, 0 | ||
383 | .equ vmexit, 1 | ||
384 | |||
385 | /* Configures the HSTR (Hyp System Trap Register) on entry/return | ||
386 | * (hardware reset value is 0) */ | ||
387 | .macro set_hstr operation | ||
388 | mrc p15, 4, r2, c1, c1, 3 | ||
389 | ldr r3, =HSTR_T(15) | ||
390 | .if \operation == vmentry | ||
391 | orr r2, r2, r3 @ Trap CR{15} | ||
392 | .else | ||
393 | bic r2, r2, r3 @ Don't trap any CRx accesses | ||
394 | .endif | ||
395 | mcr p15, 4, r2, c1, c1, 3 | ||
396 | .endm | ||
397 | |||
398 | /* Configures the HCPTR (Hyp Coprocessor Trap Register) on entry/return | ||
399 | * (hardware reset value is 0). Keep previous value in r2. */ | ||
400 | .macro set_hcptr operation, mask | ||
401 | mrc p15, 4, r2, c1, c1, 2 | ||
402 | ldr r3, =\mask | ||
403 | .if \operation == vmentry | ||
404 | orr r3, r2, r3 @ Trap coproc-accesses defined in mask | ||
405 | .else | ||
406 | bic r3, r2, r3 @ Don't trap defined coproc-accesses | ||
407 | .endif | ||
408 | mcr p15, 4, r3, c1, c1, 2 | ||
409 | .endm | ||
410 | |||
411 | /* Configures the HDCR (Hyp Debug Configuration Register) on entry/return | ||
412 | * (hardware reset value is 0) */ | ||
413 | .macro set_hdcr operation | ||
414 | mrc p15, 4, r2, c1, c1, 1 | ||
415 | ldr r3, =(HDCR_TPM|HDCR_TPMCR) | ||
416 | .if \operation == vmentry | ||
417 | orr r2, r2, r3 @ Trap some perfmon accesses | ||
418 | .else | ||
419 | bic r2, r2, r3 @ Don't trap any perfmon accesses | ||
420 | .endif | ||
421 | mcr p15, 4, r2, c1, c1, 1 | ||
422 | .endm | ||
423 | |||
424 | /* Enable/Disable: stage-2 trans., trap interrupts, trap wfi, trap smc */ | ||
425 | .macro configure_hyp_role operation | ||
426 | mrc p15, 4, r2, c1, c1, 0 @ HCR | ||
427 | bic r2, r2, #HCR_VIRT_EXCP_MASK | ||
428 | ldr r3, =HCR_GUEST_MASK | ||
429 | .if \operation == vmentry | ||
430 | orr r2, r2, r3 | ||
431 | ldr r3, [vcpu, #VCPU_IRQ_LINES] | ||
432 | orr r2, r2, r3 | ||
433 | .else | ||
434 | bic r2, r2, r3 | ||
435 | .endif | ||
436 | mcr p15, 4, r2, c1, c1, 0 | ||
437 | .endm | ||
438 | |||
439 | .macro load_vcpu | ||
440 | mrc p15, 4, vcpu, c13, c0, 2 @ HTPIDR | ||
441 | .endm | ||
diff --git a/arch/arm/kvm/mmio.c b/arch/arm/kvm/mmio.c new file mode 100644 index 000000000000..0144baf82904 --- /dev/null +++ b/arch/arm/kvm/mmio.c | |||
@@ -0,0 +1,153 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #include <linux/kvm_host.h> | ||
20 | #include <asm/kvm_mmio.h> | ||
21 | #include <asm/kvm_emulate.h> | ||
22 | #include <trace/events/kvm.h> | ||
23 | |||
24 | #include "trace.h" | ||
25 | |||
26 | /** | ||
27 | * kvm_handle_mmio_return -- Handle MMIO loads after user space emulation | ||
28 | * @vcpu: The VCPU pointer | ||
29 | * @run: The VCPU run struct containing the mmio data | ||
30 | * | ||
31 | * This should only be called after returning from userspace for MMIO load | ||
32 | * emulation. | ||
33 | */ | ||
34 | int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
35 | { | ||
36 | __u32 *dest; | ||
37 | unsigned int len; | ||
38 | int mask; | ||
39 | |||
40 | if (!run->mmio.is_write) { | ||
41 | dest = vcpu_reg(vcpu, vcpu->arch.mmio_decode.rt); | ||
42 | memset(dest, 0, sizeof(int)); | ||
43 | |||
44 | len = run->mmio.len; | ||
45 | if (len > 4) | ||
46 | return -EINVAL; | ||
47 | |||
48 | memcpy(dest, run->mmio.data, len); | ||
49 | |||
50 | trace_kvm_mmio(KVM_TRACE_MMIO_READ, len, run->mmio.phys_addr, | ||
51 | *((u64 *)run->mmio.data)); | ||
52 | |||
53 | if (vcpu->arch.mmio_decode.sign_extend && len < 4) { | ||
54 | mask = 1U << ((len * 8) - 1); | ||
55 | *dest = (*dest ^ mask) - mask; | ||
56 | } | ||
57 | } | ||
58 | |||
59 | return 0; | ||
60 | } | ||
61 | |||
62 | static int decode_hsr(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, | ||
63 | struct kvm_exit_mmio *mmio) | ||
64 | { | ||
65 | unsigned long rt, len; | ||
66 | bool is_write, sign_extend; | ||
67 | |||
68 | if ((vcpu->arch.hsr >> 8) & 1) { | ||
69 | /* cache operation on I/O addr, tell guest unsupported */ | ||
70 | kvm_inject_dabt(vcpu, vcpu->arch.hxfar); | ||
71 | return 1; | ||
72 | } | ||
73 | |||
74 | if ((vcpu->arch.hsr >> 7) & 1) { | ||
75 | /* page table accesses IO mem: tell guest to fix its TTBR */ | ||
76 | kvm_inject_dabt(vcpu, vcpu->arch.hxfar); | ||
77 | return 1; | ||
78 | } | ||
79 | |||
80 | switch ((vcpu->arch.hsr >> 22) & 0x3) { | ||
81 | case 0: | ||
82 | len = 1; | ||
83 | break; | ||
84 | case 1: | ||
85 | len = 2; | ||
86 | break; | ||
87 | case 2: | ||
88 | len = 4; | ||
89 | break; | ||
90 | default: | ||
91 | kvm_err("Hardware is weird: SAS 0b11 is reserved\n"); | ||
92 | return -EFAULT; | ||
93 | } | ||
94 | |||
95 | is_write = vcpu->arch.hsr & HSR_WNR; | ||
96 | sign_extend = vcpu->arch.hsr & HSR_SSE; | ||
97 | rt = (vcpu->arch.hsr & HSR_SRT_MASK) >> HSR_SRT_SHIFT; | ||
98 | |||
99 | if (kvm_vcpu_reg_is_pc(vcpu, rt)) { | ||
100 | /* IO memory trying to read/write pc */ | ||
101 | kvm_inject_pabt(vcpu, vcpu->arch.hxfar); | ||
102 | return 1; | ||
103 | } | ||
104 | |||
105 | mmio->is_write = is_write; | ||
106 | mmio->phys_addr = fault_ipa; | ||
107 | mmio->len = len; | ||
108 | vcpu->arch.mmio_decode.sign_extend = sign_extend; | ||
109 | vcpu->arch.mmio_decode.rt = rt; | ||
110 | |||
111 | /* | ||
112 | * The MMIO instruction is emulated and should not be re-executed | ||
113 | * in the guest. | ||
114 | */ | ||
115 | kvm_skip_instr(vcpu, (vcpu->arch.hsr >> 25) & 1); | ||
116 | return 0; | ||
117 | } | ||
118 | |||
119 | int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run, | ||
120 | phys_addr_t fault_ipa) | ||
121 | { | ||
122 | struct kvm_exit_mmio mmio; | ||
123 | unsigned long rt; | ||
124 | int ret; | ||
125 | |||
126 | /* | ||
127 | * Prepare MMIO operation. First stash it in a private | ||
128 | * structure that we can use for in-kernel emulation. If the | ||
129 | * kernel can't handle it, copy it into run->mmio and let user | ||
130 | * space do its magic. | ||
131 | */ | ||
132 | |||
133 | if (vcpu->arch.hsr & HSR_ISV) { | ||
134 | ret = decode_hsr(vcpu, fault_ipa, &mmio); | ||
135 | if (ret) | ||
136 | return ret; | ||
137 | } else { | ||
138 | kvm_err("load/store instruction decoding not implemented\n"); | ||
139 | return -ENOSYS; | ||
140 | } | ||
141 | |||
142 | rt = vcpu->arch.mmio_decode.rt; | ||
143 | trace_kvm_mmio((mmio.is_write) ? KVM_TRACE_MMIO_WRITE : | ||
144 | KVM_TRACE_MMIO_READ_UNSATISFIED, | ||
145 | mmio.len, fault_ipa, | ||
146 | (mmio.is_write) ? *vcpu_reg(vcpu, rt) : 0); | ||
147 | |||
148 | if (mmio.is_write) | ||
149 | memcpy(mmio.data, vcpu_reg(vcpu, rt), mmio.len); | ||
150 | |||
151 | kvm_prepare_mmio(run, &mmio); | ||
152 | return 0; | ||
153 | } | ||
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c new file mode 100644 index 000000000000..f30e13163a96 --- /dev/null +++ b/arch/arm/kvm/mmu.c | |||
@@ -0,0 +1,787 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | |||
19 | #include <linux/mman.h> | ||
20 | #include <linux/kvm_host.h> | ||
21 | #include <linux/io.h> | ||
22 | #include <trace/events/kvm.h> | ||
23 | #include <asm/idmap.h> | ||
24 | #include <asm/pgalloc.h> | ||
25 | #include <asm/cacheflush.h> | ||
26 | #include <asm/kvm_arm.h> | ||
27 | #include <asm/kvm_mmu.h> | ||
28 | #include <asm/kvm_mmio.h> | ||
29 | #include <asm/kvm_asm.h> | ||
30 | #include <asm/kvm_emulate.h> | ||
31 | #include <asm/mach/map.h> | ||
32 | #include <trace/events/kvm.h> | ||
33 | |||
34 | #include "trace.h" | ||
35 | |||
36 | extern char __hyp_idmap_text_start[], __hyp_idmap_text_end[]; | ||
37 | |||
38 | static DEFINE_MUTEX(kvm_hyp_pgd_mutex); | ||
39 | |||
40 | static void kvm_tlb_flush_vmid(struct kvm *kvm) | ||
41 | { | ||
42 | kvm_call_hyp(__kvm_tlb_flush_vmid, kvm); | ||
43 | } | ||
44 | |||
45 | static void kvm_set_pte(pte_t *pte, pte_t new_pte) | ||
46 | { | ||
47 | pte_val(*pte) = new_pte; | ||
48 | /* | ||
49 | * flush_pmd_entry just takes a void pointer and cleans the necessary | ||
50 | * cache entries, so we can reuse the function for ptes. | ||
51 | */ | ||
52 | flush_pmd_entry(pte); | ||
53 | } | ||
54 | |||
55 | static int mmu_topup_memory_cache(struct kvm_mmu_memory_cache *cache, | ||
56 | int min, int max) | ||
57 | { | ||
58 | void *page; | ||
59 | |||
60 | BUG_ON(max > KVM_NR_MEM_OBJS); | ||
61 | if (cache->nobjs >= min) | ||
62 | return 0; | ||
63 | while (cache->nobjs < max) { | ||
64 | page = (void *)__get_free_page(PGALLOC_GFP); | ||
65 | if (!page) | ||
66 | return -ENOMEM; | ||
67 | cache->objects[cache->nobjs++] = page; | ||
68 | } | ||
69 | return 0; | ||
70 | } | ||
71 | |||
72 | static void mmu_free_memory_cache(struct kvm_mmu_memory_cache *mc) | ||
73 | { | ||
74 | while (mc->nobjs) | ||
75 | free_page((unsigned long)mc->objects[--mc->nobjs]); | ||
76 | } | ||
77 | |||
78 | static void *mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc) | ||
79 | { | ||
80 | void *p; | ||
81 | |||
82 | BUG_ON(!mc || !mc->nobjs); | ||
83 | p = mc->objects[--mc->nobjs]; | ||
84 | return p; | ||
85 | } | ||
86 | |||
87 | static void free_ptes(pmd_t *pmd, unsigned long addr) | ||
88 | { | ||
89 | pte_t *pte; | ||
90 | unsigned int i; | ||
91 | |||
92 | for (i = 0; i < PTRS_PER_PMD; i++, addr += PMD_SIZE) { | ||
93 | if (!pmd_none(*pmd) && pmd_table(*pmd)) { | ||
94 | pte = pte_offset_kernel(pmd, addr); | ||
95 | pte_free_kernel(NULL, pte); | ||
96 | } | ||
97 | pmd++; | ||
98 | } | ||
99 | } | ||
100 | |||
101 | /** | ||
102 | * free_hyp_pmds - free a Hyp-mode level-2 tables and child level-3 tables | ||
103 | * | ||
104 | * Assumes this is a page table used strictly in Hyp-mode and therefore contains | ||
105 | * only mappings in the kernel memory area, which is above PAGE_OFFSET. | ||
106 | */ | ||
107 | void free_hyp_pmds(void) | ||
108 | { | ||
109 | pgd_t *pgd; | ||
110 | pud_t *pud; | ||
111 | pmd_t *pmd; | ||
112 | unsigned long addr; | ||
113 | |||
114 | mutex_lock(&kvm_hyp_pgd_mutex); | ||
115 | for (addr = PAGE_OFFSET; addr != 0; addr += PGDIR_SIZE) { | ||
116 | pgd = hyp_pgd + pgd_index(addr); | ||
117 | pud = pud_offset(pgd, addr); | ||
118 | |||
119 | if (pud_none(*pud)) | ||
120 | continue; | ||
121 | BUG_ON(pud_bad(*pud)); | ||
122 | |||
123 | pmd = pmd_offset(pud, addr); | ||
124 | free_ptes(pmd, addr); | ||
125 | pmd_free(NULL, pmd); | ||
126 | pud_clear(pud); | ||
127 | } | ||
128 | mutex_unlock(&kvm_hyp_pgd_mutex); | ||
129 | } | ||
130 | |||
131 | static void create_hyp_pte_mappings(pmd_t *pmd, unsigned long start, | ||
132 | unsigned long end) | ||
133 | { | ||
134 | pte_t *pte; | ||
135 | unsigned long addr; | ||
136 | struct page *page; | ||
137 | |||
138 | for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) { | ||
139 | pte = pte_offset_kernel(pmd, addr); | ||
140 | BUG_ON(!virt_addr_valid(addr)); | ||
141 | page = virt_to_page(addr); | ||
142 | kvm_set_pte(pte, mk_pte(page, PAGE_HYP)); | ||
143 | } | ||
144 | } | ||
145 | |||
146 | static void create_hyp_io_pte_mappings(pmd_t *pmd, unsigned long start, | ||
147 | unsigned long end, | ||
148 | unsigned long *pfn_base) | ||
149 | { | ||
150 | pte_t *pte; | ||
151 | unsigned long addr; | ||
152 | |||
153 | for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) { | ||
154 | pte = pte_offset_kernel(pmd, addr); | ||
155 | BUG_ON(pfn_valid(*pfn_base)); | ||
156 | kvm_set_pte(pte, pfn_pte(*pfn_base, PAGE_HYP_DEVICE)); | ||
157 | (*pfn_base)++; | ||
158 | } | ||
159 | } | ||
160 | |||
161 | static int create_hyp_pmd_mappings(pud_t *pud, unsigned long start, | ||
162 | unsigned long end, unsigned long *pfn_base) | ||
163 | { | ||
164 | pmd_t *pmd; | ||
165 | pte_t *pte; | ||
166 | unsigned long addr, next; | ||
167 | |||
168 | for (addr = start; addr < end; addr = next) { | ||
169 | pmd = pmd_offset(pud, addr); | ||
170 | |||
171 | BUG_ON(pmd_sect(*pmd)); | ||
172 | |||
173 | if (pmd_none(*pmd)) { | ||
174 | pte = pte_alloc_one_kernel(NULL, addr); | ||
175 | if (!pte) { | ||
176 | kvm_err("Cannot allocate Hyp pte\n"); | ||
177 | return -ENOMEM; | ||
178 | } | ||
179 | pmd_populate_kernel(NULL, pmd, pte); | ||
180 | } | ||
181 | |||
182 | next = pmd_addr_end(addr, end); | ||
183 | |||
184 | /* | ||
185 | * If pfn_base is NULL, we map kernel pages into HYP with the | ||
186 | * virtual address. Otherwise, this is considered an I/O | ||
187 | * mapping and we map the physical region starting at | ||
188 | * *pfn_base to [start, end[. | ||
189 | */ | ||
190 | if (!pfn_base) | ||
191 | create_hyp_pte_mappings(pmd, addr, next); | ||
192 | else | ||
193 | create_hyp_io_pte_mappings(pmd, addr, next, pfn_base); | ||
194 | } | ||
195 | |||
196 | return 0; | ||
197 | } | ||
198 | |||
199 | static int __create_hyp_mappings(void *from, void *to, unsigned long *pfn_base) | ||
200 | { | ||
201 | unsigned long start = (unsigned long)from; | ||
202 | unsigned long end = (unsigned long)to; | ||
203 | pgd_t *pgd; | ||
204 | pud_t *pud; | ||
205 | pmd_t *pmd; | ||
206 | unsigned long addr, next; | ||
207 | int err = 0; | ||
208 | |||
209 | BUG_ON(start > end); | ||
210 | if (start < PAGE_OFFSET) | ||
211 | return -EINVAL; | ||
212 | |||
213 | mutex_lock(&kvm_hyp_pgd_mutex); | ||
214 | for (addr = start; addr < end; addr = next) { | ||
215 | pgd = hyp_pgd + pgd_index(addr); | ||
216 | pud = pud_offset(pgd, addr); | ||
217 | |||
218 | if (pud_none_or_clear_bad(pud)) { | ||
219 | pmd = pmd_alloc_one(NULL, addr); | ||
220 | if (!pmd) { | ||
221 | kvm_err("Cannot allocate Hyp pmd\n"); | ||
222 | err = -ENOMEM; | ||
223 | goto out; | ||
224 | } | ||
225 | pud_populate(NULL, pud, pmd); | ||
226 | } | ||
227 | |||
228 | next = pgd_addr_end(addr, end); | ||
229 | err = create_hyp_pmd_mappings(pud, addr, next, pfn_base); | ||
230 | if (err) | ||
231 | goto out; | ||
232 | } | ||
233 | out: | ||
234 | mutex_unlock(&kvm_hyp_pgd_mutex); | ||
235 | return err; | ||
236 | } | ||
237 | |||
238 | /** | ||
239 | * create_hyp_mappings - map a kernel virtual address range in Hyp mode | ||
240 | * @from: The virtual kernel start address of the range | ||
241 | * @to: The virtual kernel end address of the range (exclusive) | ||
242 | * | ||
243 | * The same virtual address as the kernel virtual address is also used in | ||
244 | * Hyp-mode mapping to the same underlying physical pages. | ||
245 | * | ||
246 | * Note: Wrapping around zero in the "to" address is not supported. | ||
247 | */ | ||
248 | int create_hyp_mappings(void *from, void *to) | ||
249 | { | ||
250 | return __create_hyp_mappings(from, to, NULL); | ||
251 | } | ||
252 | |||
253 | /** | ||
254 | * create_hyp_io_mappings - map a physical IO range in Hyp mode | ||
255 | * @from: The virtual HYP start address of the range | ||
256 | * @to: The virtual HYP end address of the range (exclusive) | ||
257 | * @addr: The physical start address which gets mapped | ||
258 | */ | ||
259 | int create_hyp_io_mappings(void *from, void *to, phys_addr_t addr) | ||
260 | { | ||
261 | unsigned long pfn = __phys_to_pfn(addr); | ||
262 | return __create_hyp_mappings(from, to, &pfn); | ||
263 | } | ||
264 | |||
265 | /** | ||
266 | * kvm_alloc_stage2_pgd - allocate level-1 table for stage-2 translation. | ||
267 | * @kvm: The KVM struct pointer for the VM. | ||
268 | * | ||
269 | * Allocates the 1st level table only of size defined by S2_PGD_ORDER (can | ||
270 | * support either full 40-bit input addresses or limited to 32-bit input | ||
271 | * addresses). Clears the allocated pages. | ||
272 | * | ||
273 | * Note we don't need locking here as this is only called when the VM is | ||
274 | * created, which can only be done once. | ||
275 | */ | ||
276 | int kvm_alloc_stage2_pgd(struct kvm *kvm) | ||
277 | { | ||
278 | pgd_t *pgd; | ||
279 | |||
280 | if (kvm->arch.pgd != NULL) { | ||
281 | kvm_err("kvm_arch already initialized?\n"); | ||
282 | return -EINVAL; | ||
283 | } | ||
284 | |||
285 | pgd = (pgd_t *)__get_free_pages(GFP_KERNEL, S2_PGD_ORDER); | ||
286 | if (!pgd) | ||
287 | return -ENOMEM; | ||
288 | |||
289 | /* stage-2 pgd must be aligned to its size */ | ||
290 | VM_BUG_ON((unsigned long)pgd & (S2_PGD_SIZE - 1)); | ||
291 | |||
292 | memset(pgd, 0, PTRS_PER_S2_PGD * sizeof(pgd_t)); | ||
293 | clean_dcache_area(pgd, PTRS_PER_S2_PGD * sizeof(pgd_t)); | ||
294 | kvm->arch.pgd = pgd; | ||
295 | |||
296 | return 0; | ||
297 | } | ||
298 | |||
299 | static void clear_pud_entry(pud_t *pud) | ||
300 | { | ||
301 | pmd_t *pmd_table = pmd_offset(pud, 0); | ||
302 | pud_clear(pud); | ||
303 | pmd_free(NULL, pmd_table); | ||
304 | put_page(virt_to_page(pud)); | ||
305 | } | ||
306 | |||
307 | static void clear_pmd_entry(pmd_t *pmd) | ||
308 | { | ||
309 | pte_t *pte_table = pte_offset_kernel(pmd, 0); | ||
310 | pmd_clear(pmd); | ||
311 | pte_free_kernel(NULL, pte_table); | ||
312 | put_page(virt_to_page(pmd)); | ||
313 | } | ||
314 | |||
315 | static bool pmd_empty(pmd_t *pmd) | ||
316 | { | ||
317 | struct page *pmd_page = virt_to_page(pmd); | ||
318 | return page_count(pmd_page) == 1; | ||
319 | } | ||
320 | |||
321 | static void clear_pte_entry(pte_t *pte) | ||
322 | { | ||
323 | if (pte_present(*pte)) { | ||
324 | kvm_set_pte(pte, __pte(0)); | ||
325 | put_page(virt_to_page(pte)); | ||
326 | } | ||
327 | } | ||
328 | |||
329 | static bool pte_empty(pte_t *pte) | ||
330 | { | ||
331 | struct page *pte_page = virt_to_page(pte); | ||
332 | return page_count(pte_page) == 1; | ||
333 | } | ||
334 | |||
335 | /** | ||
336 | * unmap_stage2_range -- Clear stage2 page table entries to unmap a range | ||
337 | * @kvm: The VM pointer | ||
338 | * @start: The intermediate physical base address of the range to unmap | ||
339 | * @size: The size of the area to unmap | ||
340 | * | ||
341 | * Clear a range of stage-2 mappings, lowering the various ref-counts. Must | ||
342 | * be called while holding mmu_lock (unless for freeing the stage2 pgd before | ||
343 | * destroying the VM), otherwise another faulting VCPU may come in and mess | ||
344 | * with things behind our backs. | ||
345 | */ | ||
346 | static void unmap_stage2_range(struct kvm *kvm, phys_addr_t start, u64 size) | ||
347 | { | ||
348 | pgd_t *pgd; | ||
349 | pud_t *pud; | ||
350 | pmd_t *pmd; | ||
351 | pte_t *pte; | ||
352 | phys_addr_t addr = start, end = start + size; | ||
353 | u64 range; | ||
354 | |||
355 | while (addr < end) { | ||
356 | pgd = kvm->arch.pgd + pgd_index(addr); | ||
357 | pud = pud_offset(pgd, addr); | ||
358 | if (pud_none(*pud)) { | ||
359 | addr += PUD_SIZE; | ||
360 | continue; | ||
361 | } | ||
362 | |||
363 | pmd = pmd_offset(pud, addr); | ||
364 | if (pmd_none(*pmd)) { | ||
365 | addr += PMD_SIZE; | ||
366 | continue; | ||
367 | } | ||
368 | |||
369 | pte = pte_offset_kernel(pmd, addr); | ||
370 | clear_pte_entry(pte); | ||
371 | range = PAGE_SIZE; | ||
372 | |||
373 | /* If we emptied the pte, walk back up the ladder */ | ||
374 | if (pte_empty(pte)) { | ||
375 | clear_pmd_entry(pmd); | ||
376 | range = PMD_SIZE; | ||
377 | if (pmd_empty(pmd)) { | ||
378 | clear_pud_entry(pud); | ||
379 | range = PUD_SIZE; | ||
380 | } | ||
381 | } | ||
382 | |||
383 | addr += range; | ||
384 | } | ||
385 | } | ||
386 | |||
387 | /** | ||
388 | * kvm_free_stage2_pgd - free all stage-2 tables | ||
389 | * @kvm: The KVM struct pointer for the VM. | ||
390 | * | ||
391 | * Walks the level-1 page table pointed to by kvm->arch.pgd and frees all | ||
392 | * underlying level-2 and level-3 tables before freeing the actual level-1 table | ||
393 | * and setting the struct pointer to NULL. | ||
394 | * | ||
395 | * Note we don't need locking here as this is only called when the VM is | ||
396 | * destroyed, which can only be done once. | ||
397 | */ | ||
398 | void kvm_free_stage2_pgd(struct kvm *kvm) | ||
399 | { | ||
400 | if (kvm->arch.pgd == NULL) | ||
401 | return; | ||
402 | |||
403 | unmap_stage2_range(kvm, 0, KVM_PHYS_SIZE); | ||
404 | free_pages((unsigned long)kvm->arch.pgd, S2_PGD_ORDER); | ||
405 | kvm->arch.pgd = NULL; | ||
406 | } | ||
407 | |||
408 | |||
409 | static int stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache, | ||
410 | phys_addr_t addr, const pte_t *new_pte, bool iomap) | ||
411 | { | ||
412 | pgd_t *pgd; | ||
413 | pud_t *pud; | ||
414 | pmd_t *pmd; | ||
415 | pte_t *pte, old_pte; | ||
416 | |||
417 | /* Create 2nd stage page table mapping - Level 1 */ | ||
418 | pgd = kvm->arch.pgd + pgd_index(addr); | ||
419 | pud = pud_offset(pgd, addr); | ||
420 | if (pud_none(*pud)) { | ||
421 | if (!cache) | ||
422 | return 0; /* ignore calls from kvm_set_spte_hva */ | ||
423 | pmd = mmu_memory_cache_alloc(cache); | ||
424 | pud_populate(NULL, pud, pmd); | ||
425 | pmd += pmd_index(addr); | ||
426 | get_page(virt_to_page(pud)); | ||
427 | } else | ||
428 | pmd = pmd_offset(pud, addr); | ||
429 | |||
430 | /* Create 2nd stage page table mapping - Level 2 */ | ||
431 | if (pmd_none(*pmd)) { | ||
432 | if (!cache) | ||
433 | return 0; /* ignore calls from kvm_set_spte_hva */ | ||
434 | pte = mmu_memory_cache_alloc(cache); | ||
435 | clean_pte_table(pte); | ||
436 | pmd_populate_kernel(NULL, pmd, pte); | ||
437 | pte += pte_index(addr); | ||
438 | get_page(virt_to_page(pmd)); | ||
439 | } else | ||
440 | pte = pte_offset_kernel(pmd, addr); | ||
441 | |||
442 | if (iomap && pte_present(*pte)) | ||
443 | return -EFAULT; | ||
444 | |||
445 | /* Create 2nd stage page table mapping - Level 3 */ | ||
446 | old_pte = *pte; | ||
447 | kvm_set_pte(pte, *new_pte); | ||
448 | if (pte_present(old_pte)) | ||
449 | kvm_tlb_flush_vmid(kvm); | ||
450 | else | ||
451 | get_page(virt_to_page(pte)); | ||
452 | |||
453 | return 0; | ||
454 | } | ||
455 | |||
456 | /** | ||
457 | * kvm_phys_addr_ioremap - map a device range to guest IPA | ||
458 | * | ||
459 | * @kvm: The KVM pointer | ||
460 | * @guest_ipa: The IPA at which to insert the mapping | ||
461 | * @pa: The physical address of the device | ||
462 | * @size: The size of the mapping | ||
463 | */ | ||
464 | int kvm_phys_addr_ioremap(struct kvm *kvm, phys_addr_t guest_ipa, | ||
465 | phys_addr_t pa, unsigned long size) | ||
466 | { | ||
467 | phys_addr_t addr, end; | ||
468 | int ret = 0; | ||
469 | unsigned long pfn; | ||
470 | struct kvm_mmu_memory_cache cache = { 0, }; | ||
471 | |||
472 | end = (guest_ipa + size + PAGE_SIZE - 1) & PAGE_MASK; | ||
473 | pfn = __phys_to_pfn(pa); | ||
474 | |||
475 | for (addr = guest_ipa; addr < end; addr += PAGE_SIZE) { | ||
476 | pte_t pte = pfn_pte(pfn, PAGE_S2_DEVICE | L_PTE_S2_RDWR); | ||
477 | |||
478 | ret = mmu_topup_memory_cache(&cache, 2, 2); | ||
479 | if (ret) | ||
480 | goto out; | ||
481 | spin_lock(&kvm->mmu_lock); | ||
482 | ret = stage2_set_pte(kvm, &cache, addr, &pte, true); | ||
483 | spin_unlock(&kvm->mmu_lock); | ||
484 | if (ret) | ||
485 | goto out; | ||
486 | |||
487 | pfn++; | ||
488 | } | ||
489 | |||
490 | out: | ||
491 | mmu_free_memory_cache(&cache); | ||
492 | return ret; | ||
493 | } | ||
494 | |||
495 | static void coherent_icache_guest_page(struct kvm *kvm, gfn_t gfn) | ||
496 | { | ||
497 | /* | ||
498 | * If we are going to insert an instruction page and the icache is | ||
499 | * either VIPT or PIPT, there is a potential problem where the host | ||
500 | * (or another VM) may have used the same page as this guest, and we | ||
501 | * read incorrect data from the icache. If we're using a PIPT cache, | ||
502 | * we can invalidate just that page, but if we are using a VIPT cache | ||
503 | * we need to invalidate the entire icache - damn shame - as written | ||
504 | * in the ARM ARM (DDI 0406C.b - Page B3-1393). | ||
505 | * | ||
506 | * VIVT caches are tagged using both the ASID and the VMID and doesn't | ||
507 | * need any kind of flushing (DDI 0406C.b - Page B3-1392). | ||
508 | */ | ||
509 | if (icache_is_pipt()) { | ||
510 | unsigned long hva = gfn_to_hva(kvm, gfn); | ||
511 | __cpuc_coherent_user_range(hva, hva + PAGE_SIZE); | ||
512 | } else if (!icache_is_vivt_asid_tagged()) { | ||
513 | /* any kind of VIPT cache */ | ||
514 | __flush_icache_all(); | ||
515 | } | ||
516 | } | ||
517 | |||
518 | static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, | ||
519 | gfn_t gfn, struct kvm_memory_slot *memslot, | ||
520 | unsigned long fault_status) | ||
521 | { | ||
522 | pte_t new_pte; | ||
523 | pfn_t pfn; | ||
524 | int ret; | ||
525 | bool write_fault, writable; | ||
526 | unsigned long mmu_seq; | ||
527 | struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache; | ||
528 | |||
529 | write_fault = kvm_is_write_fault(vcpu->arch.hsr); | ||
530 | if (fault_status == FSC_PERM && !write_fault) { | ||
531 | kvm_err("Unexpected L2 read permission error\n"); | ||
532 | return -EFAULT; | ||
533 | } | ||
534 | |||
535 | /* We need minimum second+third level pages */ | ||
536 | ret = mmu_topup_memory_cache(memcache, 2, KVM_NR_MEM_OBJS); | ||
537 | if (ret) | ||
538 | return ret; | ||
539 | |||
540 | mmu_seq = vcpu->kvm->mmu_notifier_seq; | ||
541 | /* | ||
542 | * Ensure the read of mmu_notifier_seq happens before we call | ||
543 | * gfn_to_pfn_prot (which calls get_user_pages), so that we don't risk | ||
544 | * the page we just got a reference to gets unmapped before we have a | ||
545 | * chance to grab the mmu_lock, which ensure that if the page gets | ||
546 | * unmapped afterwards, the call to kvm_unmap_hva will take it away | ||
547 | * from us again properly. This smp_rmb() interacts with the smp_wmb() | ||
548 | * in kvm_mmu_notifier_invalidate_<page|range_end>. | ||
549 | */ | ||
550 | smp_rmb(); | ||
551 | |||
552 | pfn = gfn_to_pfn_prot(vcpu->kvm, gfn, write_fault, &writable); | ||
553 | if (is_error_pfn(pfn)) | ||
554 | return -EFAULT; | ||
555 | |||
556 | new_pte = pfn_pte(pfn, PAGE_S2); | ||
557 | coherent_icache_guest_page(vcpu->kvm, gfn); | ||
558 | |||
559 | spin_lock(&vcpu->kvm->mmu_lock); | ||
560 | if (mmu_notifier_retry(vcpu->kvm, mmu_seq)) | ||
561 | goto out_unlock; | ||
562 | if (writable) { | ||
563 | pte_val(new_pte) |= L_PTE_S2_RDWR; | ||
564 | kvm_set_pfn_dirty(pfn); | ||
565 | } | ||
566 | stage2_set_pte(vcpu->kvm, memcache, fault_ipa, &new_pte, false); | ||
567 | |||
568 | out_unlock: | ||
569 | spin_unlock(&vcpu->kvm->mmu_lock); | ||
570 | kvm_release_pfn_clean(pfn); | ||
571 | return 0; | ||
572 | } | ||
573 | |||
574 | /** | ||
575 | * kvm_handle_guest_abort - handles all 2nd stage aborts | ||
576 | * @vcpu: the VCPU pointer | ||
577 | * @run: the kvm_run structure | ||
578 | * | ||
579 | * Any abort that gets to the host is almost guaranteed to be caused by a | ||
580 | * missing second stage translation table entry, which can mean that either the | ||
581 | * guest simply needs more memory and we must allocate an appropriate page or it | ||
582 | * can mean that the guest tried to access I/O memory, which is emulated by user | ||
583 | * space. The distinction is based on the IPA causing the fault and whether this | ||
584 | * memory region has been registered as standard RAM by user space. | ||
585 | */ | ||
586 | int kvm_handle_guest_abort(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
587 | { | ||
588 | unsigned long hsr_ec; | ||
589 | unsigned long fault_status; | ||
590 | phys_addr_t fault_ipa; | ||
591 | struct kvm_memory_slot *memslot; | ||
592 | bool is_iabt; | ||
593 | gfn_t gfn; | ||
594 | int ret, idx; | ||
595 | |||
596 | hsr_ec = vcpu->arch.hsr >> HSR_EC_SHIFT; | ||
597 | is_iabt = (hsr_ec == HSR_EC_IABT); | ||
598 | fault_ipa = ((phys_addr_t)vcpu->arch.hpfar & HPFAR_MASK) << 8; | ||
599 | |||
600 | trace_kvm_guest_fault(*vcpu_pc(vcpu), vcpu->arch.hsr, | ||
601 | vcpu->arch.hxfar, fault_ipa); | ||
602 | |||
603 | /* Check the stage-2 fault is trans. fault or write fault */ | ||
604 | fault_status = (vcpu->arch.hsr & HSR_FSC_TYPE); | ||
605 | if (fault_status != FSC_FAULT && fault_status != FSC_PERM) { | ||
606 | kvm_err("Unsupported fault status: EC=%#lx DFCS=%#lx\n", | ||
607 | hsr_ec, fault_status); | ||
608 | return -EFAULT; | ||
609 | } | ||
610 | |||
611 | idx = srcu_read_lock(&vcpu->kvm->srcu); | ||
612 | |||
613 | gfn = fault_ipa >> PAGE_SHIFT; | ||
614 | if (!kvm_is_visible_gfn(vcpu->kvm, gfn)) { | ||
615 | if (is_iabt) { | ||
616 | /* Prefetch Abort on I/O address */ | ||
617 | kvm_inject_pabt(vcpu, vcpu->arch.hxfar); | ||
618 | ret = 1; | ||
619 | goto out_unlock; | ||
620 | } | ||
621 | |||
622 | if (fault_status != FSC_FAULT) { | ||
623 | kvm_err("Unsupported fault status on io memory: %#lx\n", | ||
624 | fault_status); | ||
625 | ret = -EFAULT; | ||
626 | goto out_unlock; | ||
627 | } | ||
628 | |||
629 | /* Adjust page offset */ | ||
630 | fault_ipa |= vcpu->arch.hxfar & ~PAGE_MASK; | ||
631 | ret = io_mem_abort(vcpu, run, fault_ipa); | ||
632 | goto out_unlock; | ||
633 | } | ||
634 | |||
635 | memslot = gfn_to_memslot(vcpu->kvm, gfn); | ||
636 | if (!memslot->user_alloc) { | ||
637 | kvm_err("non user-alloc memslots not supported\n"); | ||
638 | ret = -EINVAL; | ||
639 | goto out_unlock; | ||
640 | } | ||
641 | |||
642 | ret = user_mem_abort(vcpu, fault_ipa, gfn, memslot, fault_status); | ||
643 | if (ret == 0) | ||
644 | ret = 1; | ||
645 | out_unlock: | ||
646 | srcu_read_unlock(&vcpu->kvm->srcu, idx); | ||
647 | return ret; | ||
648 | } | ||
649 | |||
650 | static void handle_hva_to_gpa(struct kvm *kvm, | ||
651 | unsigned long start, | ||
652 | unsigned long end, | ||
653 | void (*handler)(struct kvm *kvm, | ||
654 | gpa_t gpa, void *data), | ||
655 | void *data) | ||
656 | { | ||
657 | struct kvm_memslots *slots; | ||
658 | struct kvm_memory_slot *memslot; | ||
659 | |||
660 | slots = kvm_memslots(kvm); | ||
661 | |||
662 | /* we only care about the pages that the guest sees */ | ||
663 | kvm_for_each_memslot(memslot, slots) { | ||
664 | unsigned long hva_start, hva_end; | ||
665 | gfn_t gfn, gfn_end; | ||
666 | |||
667 | hva_start = max(start, memslot->userspace_addr); | ||
668 | hva_end = min(end, memslot->userspace_addr + | ||
669 | (memslot->npages << PAGE_SHIFT)); | ||
670 | if (hva_start >= hva_end) | ||
671 | continue; | ||
672 | |||
673 | /* | ||
674 | * {gfn(page) | page intersects with [hva_start, hva_end)} = | ||
675 | * {gfn_start, gfn_start+1, ..., gfn_end-1}. | ||
676 | */ | ||
677 | gfn = hva_to_gfn_memslot(hva_start, memslot); | ||
678 | gfn_end = hva_to_gfn_memslot(hva_end + PAGE_SIZE - 1, memslot); | ||
679 | |||
680 | for (; gfn < gfn_end; ++gfn) { | ||
681 | gpa_t gpa = gfn << PAGE_SHIFT; | ||
682 | handler(kvm, gpa, data); | ||
683 | } | ||
684 | } | ||
685 | } | ||
686 | |||
687 | static void kvm_unmap_hva_handler(struct kvm *kvm, gpa_t gpa, void *data) | ||
688 | { | ||
689 | unmap_stage2_range(kvm, gpa, PAGE_SIZE); | ||
690 | kvm_tlb_flush_vmid(kvm); | ||
691 | } | ||
692 | |||
693 | int kvm_unmap_hva(struct kvm *kvm, unsigned long hva) | ||
694 | { | ||
695 | unsigned long end = hva + PAGE_SIZE; | ||
696 | |||
697 | if (!kvm->arch.pgd) | ||
698 | return 0; | ||
699 | |||
700 | trace_kvm_unmap_hva(hva); | ||
701 | handle_hva_to_gpa(kvm, hva, end, &kvm_unmap_hva_handler, NULL); | ||
702 | return 0; | ||
703 | } | ||
704 | |||
705 | int kvm_unmap_hva_range(struct kvm *kvm, | ||
706 | unsigned long start, unsigned long end) | ||
707 | { | ||
708 | if (!kvm->arch.pgd) | ||
709 | return 0; | ||
710 | |||
711 | trace_kvm_unmap_hva_range(start, end); | ||
712 | handle_hva_to_gpa(kvm, start, end, &kvm_unmap_hva_handler, NULL); | ||
713 | return 0; | ||
714 | } | ||
715 | |||
716 | static void kvm_set_spte_handler(struct kvm *kvm, gpa_t gpa, void *data) | ||
717 | { | ||
718 | pte_t *pte = (pte_t *)data; | ||
719 | |||
720 | stage2_set_pte(kvm, NULL, gpa, pte, false); | ||
721 | } | ||
722 | |||
723 | |||
724 | void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte) | ||
725 | { | ||
726 | unsigned long end = hva + PAGE_SIZE; | ||
727 | pte_t stage2_pte; | ||
728 | |||
729 | if (!kvm->arch.pgd) | ||
730 | return; | ||
731 | |||
732 | trace_kvm_set_spte_hva(hva); | ||
733 | stage2_pte = pfn_pte(pte_pfn(pte), PAGE_S2); | ||
734 | handle_hva_to_gpa(kvm, hva, end, &kvm_set_spte_handler, &stage2_pte); | ||
735 | } | ||
736 | |||
737 | void kvm_mmu_free_memory_caches(struct kvm_vcpu *vcpu) | ||
738 | { | ||
739 | mmu_free_memory_cache(&vcpu->arch.mmu_page_cache); | ||
740 | } | ||
741 | |||
742 | phys_addr_t kvm_mmu_get_httbr(void) | ||
743 | { | ||
744 | VM_BUG_ON(!virt_addr_valid(hyp_pgd)); | ||
745 | return virt_to_phys(hyp_pgd); | ||
746 | } | ||
747 | |||
748 | int kvm_mmu_init(void) | ||
749 | { | ||
750 | if (!hyp_pgd) { | ||
751 | kvm_err("Hyp mode PGD not allocated\n"); | ||
752 | return -ENOMEM; | ||
753 | } | ||
754 | |||
755 | return 0; | ||
756 | } | ||
757 | |||
758 | /** | ||
759 | * kvm_clear_idmap - remove all idmaps from the hyp pgd | ||
760 | * | ||
761 | * Free the underlying pmds for all pgds in range and clear the pgds (but | ||
762 | * don't free them) afterwards. | ||
763 | */ | ||
764 | void kvm_clear_hyp_idmap(void) | ||
765 | { | ||
766 | unsigned long addr, end; | ||
767 | unsigned long next; | ||
768 | pgd_t *pgd = hyp_pgd; | ||
769 | pud_t *pud; | ||
770 | pmd_t *pmd; | ||
771 | |||
772 | addr = virt_to_phys(__hyp_idmap_text_start); | ||
773 | end = virt_to_phys(__hyp_idmap_text_end); | ||
774 | |||
775 | pgd += pgd_index(addr); | ||
776 | do { | ||
777 | next = pgd_addr_end(addr, end); | ||
778 | if (pgd_none_or_clear_bad(pgd)) | ||
779 | continue; | ||
780 | pud = pud_offset(pgd, addr); | ||
781 | pmd = pmd_offset(pud, addr); | ||
782 | |||
783 | pud_clear(pud); | ||
784 | clean_pmd_entry(pmd); | ||
785 | pmd_free(NULL, (pmd_t *)((unsigned long)pmd & PAGE_MASK)); | ||
786 | } while (pgd++, addr = next, addr < end); | ||
787 | } | ||
diff --git a/arch/arm/kvm/psci.c b/arch/arm/kvm/psci.c new file mode 100644 index 000000000000..7ee5bb7a3667 --- /dev/null +++ b/arch/arm/kvm/psci.c | |||
@@ -0,0 +1,108 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - ARM Ltd | ||
3 | * Author: Marc Zyngier <marc.zyngier@arm.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
16 | */ | ||
17 | |||
18 | #include <linux/kvm_host.h> | ||
19 | #include <linux/wait.h> | ||
20 | |||
21 | #include <asm/kvm_emulate.h> | ||
22 | #include <asm/kvm_psci.h> | ||
23 | |||
24 | /* | ||
25 | * This is an implementation of the Power State Coordination Interface | ||
26 | * as described in ARM document number ARM DEN 0022A. | ||
27 | */ | ||
28 | |||
29 | static void kvm_psci_vcpu_off(struct kvm_vcpu *vcpu) | ||
30 | { | ||
31 | vcpu->arch.pause = true; | ||
32 | } | ||
33 | |||
34 | static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu) | ||
35 | { | ||
36 | struct kvm *kvm = source_vcpu->kvm; | ||
37 | struct kvm_vcpu *vcpu; | ||
38 | wait_queue_head_t *wq; | ||
39 | unsigned long cpu_id; | ||
40 | phys_addr_t target_pc; | ||
41 | |||
42 | cpu_id = *vcpu_reg(source_vcpu, 1); | ||
43 | if (vcpu_mode_is_32bit(source_vcpu)) | ||
44 | cpu_id &= ~((u32) 0); | ||
45 | |||
46 | if (cpu_id >= atomic_read(&kvm->online_vcpus)) | ||
47 | return KVM_PSCI_RET_INVAL; | ||
48 | |||
49 | target_pc = *vcpu_reg(source_vcpu, 2); | ||
50 | |||
51 | vcpu = kvm_get_vcpu(kvm, cpu_id); | ||
52 | |||
53 | wq = kvm_arch_vcpu_wq(vcpu); | ||
54 | if (!waitqueue_active(wq)) | ||
55 | return KVM_PSCI_RET_INVAL; | ||
56 | |||
57 | kvm_reset_vcpu(vcpu); | ||
58 | |||
59 | /* Gracefully handle Thumb2 entry point */ | ||
60 | if (vcpu_mode_is_32bit(vcpu) && (target_pc & 1)) { | ||
61 | target_pc &= ~((phys_addr_t) 1); | ||
62 | vcpu_set_thumb(vcpu); | ||
63 | } | ||
64 | |||
65 | *vcpu_pc(vcpu) = target_pc; | ||
66 | vcpu->arch.pause = false; | ||
67 | smp_mb(); /* Make sure the above is visible */ | ||
68 | |||
69 | wake_up_interruptible(wq); | ||
70 | |||
71 | return KVM_PSCI_RET_SUCCESS; | ||
72 | } | ||
73 | |||
74 | /** | ||
75 | * kvm_psci_call - handle PSCI call if r0 value is in range | ||
76 | * @vcpu: Pointer to the VCPU struct | ||
77 | * | ||
78 | * Handle PSCI calls from guests through traps from HVC or SMC instructions. | ||
79 | * The calling convention is similar to SMC calls to the secure world where | ||
80 | * the function number is placed in r0 and this function returns true if the | ||
81 | * function number specified in r0 is withing the PSCI range, and false | ||
82 | * otherwise. | ||
83 | */ | ||
84 | bool kvm_psci_call(struct kvm_vcpu *vcpu) | ||
85 | { | ||
86 | unsigned long psci_fn = *vcpu_reg(vcpu, 0) & ~((u32) 0); | ||
87 | unsigned long val; | ||
88 | |||
89 | switch (psci_fn) { | ||
90 | case KVM_PSCI_FN_CPU_OFF: | ||
91 | kvm_psci_vcpu_off(vcpu); | ||
92 | val = KVM_PSCI_RET_SUCCESS; | ||
93 | break; | ||
94 | case KVM_PSCI_FN_CPU_ON: | ||
95 | val = kvm_psci_vcpu_on(vcpu); | ||
96 | break; | ||
97 | case KVM_PSCI_FN_CPU_SUSPEND: | ||
98 | case KVM_PSCI_FN_MIGRATE: | ||
99 | val = KVM_PSCI_RET_NI; | ||
100 | break; | ||
101 | |||
102 | default: | ||
103 | return false; | ||
104 | } | ||
105 | |||
106 | *vcpu_reg(vcpu, 0) = val; | ||
107 | return true; | ||
108 | } | ||
diff --git a/arch/arm/kvm/reset.c b/arch/arm/kvm/reset.c new file mode 100644 index 000000000000..b80256b554cd --- /dev/null +++ b/arch/arm/kvm/reset.c | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 - Virtual Open Systems and Columbia University | ||
3 | * Author: Christoffer Dall <c.dall@virtualopensystems.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License, version 2, as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | */ | ||
18 | #include <linux/compiler.h> | ||
19 | #include <linux/errno.h> | ||
20 | #include <linux/sched.h> | ||
21 | #include <linux/kvm_host.h> | ||
22 | #include <linux/kvm.h> | ||
23 | |||
24 | #include <asm/unified.h> | ||
25 | #include <asm/ptrace.h> | ||
26 | #include <asm/cputype.h> | ||
27 | #include <asm/kvm_arm.h> | ||
28 | #include <asm/kvm_coproc.h> | ||
29 | |||
30 | /****************************************************************************** | ||
31 | * Cortex-A15 Reset Values | ||
32 | */ | ||
33 | |||
34 | static const int a15_max_cpu_idx = 3; | ||
35 | |||
36 | static struct kvm_regs a15_regs_reset = { | ||
37 | .usr_regs.ARM_cpsr = SVC_MODE | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT, | ||
38 | }; | ||
39 | |||
40 | |||
41 | /******************************************************************************* | ||
42 | * Exported reset function | ||
43 | */ | ||
44 | |||
45 | /** | ||
46 | * kvm_reset_vcpu - sets core registers and cp15 registers to reset value | ||
47 | * @vcpu: The VCPU pointer | ||
48 | * | ||
49 | * This function finds the right table above and sets the registers on the | ||
50 | * virtual CPU struct to their architectually defined reset values. | ||
51 | */ | ||
52 | int kvm_reset_vcpu(struct kvm_vcpu *vcpu) | ||
53 | { | ||
54 | struct kvm_regs *cpu_reset; | ||
55 | |||
56 | switch (vcpu->arch.target) { | ||
57 | case KVM_ARM_TARGET_CORTEX_A15: | ||
58 | if (vcpu->vcpu_id > a15_max_cpu_idx) | ||
59 | return -EINVAL; | ||
60 | cpu_reset = &a15_regs_reset; | ||
61 | vcpu->arch.midr = read_cpuid_id(); | ||
62 | break; | ||
63 | default: | ||
64 | return -ENODEV; | ||
65 | } | ||
66 | |||
67 | /* Reset core registers */ | ||
68 | memcpy(&vcpu->arch.regs, cpu_reset, sizeof(vcpu->arch.regs)); | ||
69 | |||
70 | /* Reset CP15 registers */ | ||
71 | kvm_reset_coprocs(vcpu); | ||
72 | |||
73 | return 0; | ||
74 | } | ||
diff --git a/arch/arm/kvm/trace.h b/arch/arm/kvm/trace.h new file mode 100644 index 000000000000..a8e73ed5ad5b --- /dev/null +++ b/arch/arm/kvm/trace.h | |||
@@ -0,0 +1,235 @@ | |||
1 | #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) | ||
2 | #define _TRACE_KVM_H | ||
3 | |||
4 | #include <linux/tracepoint.h> | ||
5 | |||
6 | #undef TRACE_SYSTEM | ||
7 | #define TRACE_SYSTEM kvm | ||
8 | |||
9 | /* | ||
10 | * Tracepoints for entry/exit to guest | ||
11 | */ | ||
12 | TRACE_EVENT(kvm_entry, | ||
13 | TP_PROTO(unsigned long vcpu_pc), | ||
14 | TP_ARGS(vcpu_pc), | ||
15 | |||
16 | TP_STRUCT__entry( | ||
17 | __field( unsigned long, vcpu_pc ) | ||
18 | ), | ||
19 | |||
20 | TP_fast_assign( | ||
21 | __entry->vcpu_pc = vcpu_pc; | ||
22 | ), | ||
23 | |||
24 | TP_printk("PC: 0x%08lx", __entry->vcpu_pc) | ||
25 | ); | ||
26 | |||
27 | TRACE_EVENT(kvm_exit, | ||
28 | TP_PROTO(unsigned long vcpu_pc), | ||
29 | TP_ARGS(vcpu_pc), | ||
30 | |||
31 | TP_STRUCT__entry( | ||
32 | __field( unsigned long, vcpu_pc ) | ||
33 | ), | ||
34 | |||
35 | TP_fast_assign( | ||
36 | __entry->vcpu_pc = vcpu_pc; | ||
37 | ), | ||
38 | |||
39 | TP_printk("PC: 0x%08lx", __entry->vcpu_pc) | ||
40 | ); | ||
41 | |||
42 | TRACE_EVENT(kvm_guest_fault, | ||
43 | TP_PROTO(unsigned long vcpu_pc, unsigned long hsr, | ||
44 | unsigned long hxfar, | ||
45 | unsigned long long ipa), | ||
46 | TP_ARGS(vcpu_pc, hsr, hxfar, ipa), | ||
47 | |||
48 | TP_STRUCT__entry( | ||
49 | __field( unsigned long, vcpu_pc ) | ||
50 | __field( unsigned long, hsr ) | ||
51 | __field( unsigned long, hxfar ) | ||
52 | __field( unsigned long long, ipa ) | ||
53 | ), | ||
54 | |||
55 | TP_fast_assign( | ||
56 | __entry->vcpu_pc = vcpu_pc; | ||
57 | __entry->hsr = hsr; | ||
58 | __entry->hxfar = hxfar; | ||
59 | __entry->ipa = ipa; | ||
60 | ), | ||
61 | |||
62 | TP_printk("guest fault at PC %#08lx (hxfar %#08lx, " | ||
63 | "ipa %#16llx, hsr %#08lx", | ||
64 | __entry->vcpu_pc, __entry->hxfar, | ||
65 | __entry->ipa, __entry->hsr) | ||
66 | ); | ||
67 | |||
68 | TRACE_EVENT(kvm_irq_line, | ||
69 | TP_PROTO(unsigned int type, int vcpu_idx, int irq_num, int level), | ||
70 | TP_ARGS(type, vcpu_idx, irq_num, level), | ||
71 | |||
72 | TP_STRUCT__entry( | ||
73 | __field( unsigned int, type ) | ||
74 | __field( int, vcpu_idx ) | ||
75 | __field( int, irq_num ) | ||
76 | __field( int, level ) | ||
77 | ), | ||
78 | |||
79 | TP_fast_assign( | ||
80 | __entry->type = type; | ||
81 | __entry->vcpu_idx = vcpu_idx; | ||
82 | __entry->irq_num = irq_num; | ||
83 | __entry->level = level; | ||
84 | ), | ||
85 | |||
86 | TP_printk("Inject %s interrupt (%d), vcpu->idx: %d, num: %d, level: %d", | ||
87 | (__entry->type == KVM_ARM_IRQ_TYPE_CPU) ? "CPU" : | ||
88 | (__entry->type == KVM_ARM_IRQ_TYPE_PPI) ? "VGIC PPI" : | ||
89 | (__entry->type == KVM_ARM_IRQ_TYPE_SPI) ? "VGIC SPI" : "UNKNOWN", | ||
90 | __entry->type, __entry->vcpu_idx, __entry->irq_num, __entry->level) | ||
91 | ); | ||
92 | |||
93 | TRACE_EVENT(kvm_mmio_emulate, | ||
94 | TP_PROTO(unsigned long vcpu_pc, unsigned long instr, | ||
95 | unsigned long cpsr), | ||
96 | TP_ARGS(vcpu_pc, instr, cpsr), | ||
97 | |||
98 | TP_STRUCT__entry( | ||
99 | __field( unsigned long, vcpu_pc ) | ||
100 | __field( unsigned long, instr ) | ||
101 | __field( unsigned long, cpsr ) | ||
102 | ), | ||
103 | |||
104 | TP_fast_assign( | ||
105 | __entry->vcpu_pc = vcpu_pc; | ||
106 | __entry->instr = instr; | ||
107 | __entry->cpsr = cpsr; | ||
108 | ), | ||
109 | |||
110 | TP_printk("Emulate MMIO at: 0x%08lx (instr: %08lx, cpsr: %08lx)", | ||
111 | __entry->vcpu_pc, __entry->instr, __entry->cpsr) | ||
112 | ); | ||
113 | |||
114 | /* Architecturally implementation defined CP15 register access */ | ||
115 | TRACE_EVENT(kvm_emulate_cp15_imp, | ||
116 | TP_PROTO(unsigned long Op1, unsigned long Rt1, unsigned long CRn, | ||
117 | unsigned long CRm, unsigned long Op2, bool is_write), | ||
118 | TP_ARGS(Op1, Rt1, CRn, CRm, Op2, is_write), | ||
119 | |||
120 | TP_STRUCT__entry( | ||
121 | __field( unsigned int, Op1 ) | ||
122 | __field( unsigned int, Rt1 ) | ||
123 | __field( unsigned int, CRn ) | ||
124 | __field( unsigned int, CRm ) | ||
125 | __field( unsigned int, Op2 ) | ||
126 | __field( bool, is_write ) | ||
127 | ), | ||
128 | |||
129 | TP_fast_assign( | ||
130 | __entry->is_write = is_write; | ||
131 | __entry->Op1 = Op1; | ||
132 | __entry->Rt1 = Rt1; | ||
133 | __entry->CRn = CRn; | ||
134 | __entry->CRm = CRm; | ||
135 | __entry->Op2 = Op2; | ||
136 | ), | ||
137 | |||
138 | TP_printk("Implementation defined CP15: %s\tp15, %u, r%u, c%u, c%u, %u", | ||
139 | (__entry->is_write) ? "mcr" : "mrc", | ||
140 | __entry->Op1, __entry->Rt1, __entry->CRn, | ||
141 | __entry->CRm, __entry->Op2) | ||
142 | ); | ||
143 | |||
144 | TRACE_EVENT(kvm_wfi, | ||
145 | TP_PROTO(unsigned long vcpu_pc), | ||
146 | TP_ARGS(vcpu_pc), | ||
147 | |||
148 | TP_STRUCT__entry( | ||
149 | __field( unsigned long, vcpu_pc ) | ||
150 | ), | ||
151 | |||
152 | TP_fast_assign( | ||
153 | __entry->vcpu_pc = vcpu_pc; | ||
154 | ), | ||
155 | |||
156 | TP_printk("guest executed wfi at: 0x%08lx", __entry->vcpu_pc) | ||
157 | ); | ||
158 | |||
159 | TRACE_EVENT(kvm_unmap_hva, | ||
160 | TP_PROTO(unsigned long hva), | ||
161 | TP_ARGS(hva), | ||
162 | |||
163 | TP_STRUCT__entry( | ||
164 | __field( unsigned long, hva ) | ||
165 | ), | ||
166 | |||
167 | TP_fast_assign( | ||
168 | __entry->hva = hva; | ||
169 | ), | ||
170 | |||
171 | TP_printk("mmu notifier unmap hva: %#08lx", __entry->hva) | ||
172 | ); | ||
173 | |||
174 | TRACE_EVENT(kvm_unmap_hva_range, | ||
175 | TP_PROTO(unsigned long start, unsigned long end), | ||
176 | TP_ARGS(start, end), | ||
177 | |||
178 | TP_STRUCT__entry( | ||
179 | __field( unsigned long, start ) | ||
180 | __field( unsigned long, end ) | ||
181 | ), | ||
182 | |||
183 | TP_fast_assign( | ||
184 | __entry->start = start; | ||
185 | __entry->end = end; | ||
186 | ), | ||
187 | |||
188 | TP_printk("mmu notifier unmap range: %#08lx -- %#08lx", | ||
189 | __entry->start, __entry->end) | ||
190 | ); | ||
191 | |||
192 | TRACE_EVENT(kvm_set_spte_hva, | ||
193 | TP_PROTO(unsigned long hva), | ||
194 | TP_ARGS(hva), | ||
195 | |||
196 | TP_STRUCT__entry( | ||
197 | __field( unsigned long, hva ) | ||
198 | ), | ||
199 | |||
200 | TP_fast_assign( | ||
201 | __entry->hva = hva; | ||
202 | ), | ||
203 | |||
204 | TP_printk("mmu notifier set pte hva: %#08lx", __entry->hva) | ||
205 | ); | ||
206 | |||
207 | TRACE_EVENT(kvm_hvc, | ||
208 | TP_PROTO(unsigned long vcpu_pc, unsigned long r0, unsigned long imm), | ||
209 | TP_ARGS(vcpu_pc, r0, imm), | ||
210 | |||
211 | TP_STRUCT__entry( | ||
212 | __field( unsigned long, vcpu_pc ) | ||
213 | __field( unsigned long, r0 ) | ||
214 | __field( unsigned long, imm ) | ||
215 | ), | ||
216 | |||
217 | TP_fast_assign( | ||
218 | __entry->vcpu_pc = vcpu_pc; | ||
219 | __entry->r0 = r0; | ||
220 | __entry->imm = imm; | ||
221 | ), | ||
222 | |||
223 | TP_printk("HVC at 0x%08lx (r0: 0x%08lx, imm: 0x%lx", | ||
224 | __entry->vcpu_pc, __entry->r0, __entry->imm) | ||
225 | ); | ||
226 | |||
227 | #endif /* _TRACE_KVM_H */ | ||
228 | |||
229 | #undef TRACE_INCLUDE_PATH | ||
230 | #define TRACE_INCLUDE_PATH arch/arm/kvm | ||
231 | #undef TRACE_INCLUDE_FILE | ||
232 | #define TRACE_INCLUDE_FILE trace | ||
233 | |||
234 | /* This part must be outside protection */ | ||
235 | #include <trace/define_trace.h> | ||
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 958358c91afd..6071f4c3d654 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig | |||
@@ -352,12 +352,6 @@ config MACH_USB_A9263 | |||
352 | Select this if you are using a Calao Systems USB-A9263. | 352 | Select this if you are using a Calao Systems USB-A9263. |
353 | <http://www.calao-systems.com> | 353 | <http://www.calao-systems.com> |
354 | 354 | ||
355 | config MACH_NEOCORE926 | ||
356 | bool "Adeneo NEOCORE926" | ||
357 | select HAVE_AT91_DATAFLASH_CARD | ||
358 | help | ||
359 | Select this if you are using the Adeneo Neocore 926 board. | ||
360 | |||
361 | endif | 355 | endif |
362 | 356 | ||
363 | # ---------------------------------------------------------- | 357 | # ---------------------------------------------------------- |
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index b38a1dcb79b8..39218ca6d8e8 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile | |||
@@ -66,7 +66,6 @@ obj-$(CONFIG_MACH_AT91SAM9G10EK) += board-sam9261ek.o | |||
66 | # AT91SAM9263 board-specific support | 66 | # AT91SAM9263 board-specific support |
67 | obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o | 67 | obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o |
68 | obj-$(CONFIG_MACH_USB_A9263) += board-usb-a926x.o | 68 | obj-$(CONFIG_MACH_USB_A9263) += board-usb-a926x.o |
69 | obj-$(CONFIG_MACH_NEOCORE926) += board-neocore926.o | ||
70 | 69 | ||
71 | # AT91SAM9RL board-specific support | 70 | # AT91SAM9RL board-specific support |
72 | obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o | 71 | obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o |
diff --git a/arch/arm/mach-at91/board-neocore926.c b/arch/arm/mach-at91/board-neocore926.c deleted file mode 100644 index 5b4760fe53de..000000000000 --- a/arch/arm/mach-at91/board-neocore926.c +++ /dev/null | |||
@@ -1,387 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-at91/board-neocore926.c | ||
3 | * | ||
4 | * Copyright (C) 2005 SAN People | ||
5 | * Copyright (C) 2007 Atmel Corporation | ||
6 | * Copyright (C) 2008 ADENEO. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | #include <linux/types.h> | ||
24 | #include <linux/gpio.h> | ||
25 | #include <linux/init.h> | ||
26 | #include <linux/mm.h> | ||
27 | #include <linux/module.h> | ||
28 | #include <linux/platform_device.h> | ||
29 | #include <linux/spi/spi.h> | ||
30 | #include <linux/spi/ads7846.h> | ||
31 | #include <linux/fb.h> | ||
32 | #include <linux/gpio_keys.h> | ||
33 | #include <linux/input.h> | ||
34 | |||
35 | #include <video/atmel_lcdc.h> | ||
36 | |||
37 | #include <asm/setup.h> | ||
38 | #include <asm/mach-types.h> | ||
39 | #include <asm/irq.h> | ||
40 | #include <asm/sizes.h> | ||
41 | |||
42 | #include <asm/mach/arch.h> | ||
43 | #include <asm/mach/map.h> | ||
44 | #include <asm/mach/irq.h> | ||
45 | |||
46 | #include <mach/hardware.h> | ||
47 | #include <mach/at91sam9_smc.h> | ||
48 | |||
49 | #include "at91_aic.h" | ||
50 | #include "board.h" | ||
51 | #include "sam9_smc.h" | ||
52 | #include "generic.h" | ||
53 | |||
54 | |||
55 | static void __init neocore926_init_early(void) | ||
56 | { | ||
57 | /* Initialize processor: 20 MHz crystal */ | ||
58 | at91_initialize(20000000); | ||
59 | } | ||
60 | |||
61 | /* | ||
62 | * USB Host port | ||
63 | */ | ||
64 | static struct at91_usbh_data __initdata neocore926_usbh_data = { | ||
65 | .ports = 2, | ||
66 | .vbus_pin = { AT91_PIN_PA24, AT91_PIN_PA21 }, | ||
67 | .overcurrent_pin= {-EINVAL, -EINVAL}, | ||
68 | }; | ||
69 | |||
70 | /* | ||
71 | * USB Device port | ||
72 | */ | ||
73 | static struct at91_udc_data __initdata neocore926_udc_data = { | ||
74 | .vbus_pin = AT91_PIN_PA25, | ||
75 | .pullup_pin = -EINVAL, /* pull-up driven by UDC */ | ||
76 | }; | ||
77 | |||
78 | |||
79 | /* | ||
80 | * ADS7846 Touchscreen | ||
81 | */ | ||
82 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | ||
83 | static int ads7843_pendown_state(void) | ||
84 | { | ||
85 | return !at91_get_gpio_value(AT91_PIN_PA15); /* Touchscreen PENIRQ */ | ||
86 | } | ||
87 | |||
88 | static struct ads7846_platform_data ads_info = { | ||
89 | .model = 7843, | ||
90 | .x_min = 150, | ||
91 | .x_max = 3830, | ||
92 | .y_min = 190, | ||
93 | .y_max = 3830, | ||
94 | .vref_delay_usecs = 100, | ||
95 | .x_plate_ohms = 450, | ||
96 | .y_plate_ohms = 250, | ||
97 | .pressure_max = 15000, | ||
98 | .debounce_max = 1, | ||
99 | .debounce_rep = 0, | ||
100 | .debounce_tol = (~0), | ||
101 | .get_pendown_state = ads7843_pendown_state, | ||
102 | }; | ||
103 | |||
104 | static void __init neocore926_add_device_ts(void) | ||
105 | { | ||
106 | at91_set_B_periph(AT91_PIN_PA15, 1); /* External IRQ1, with pullup */ | ||
107 | at91_set_gpio_input(AT91_PIN_PC13, 1); /* Touchscreen BUSY signal */ | ||
108 | } | ||
109 | #else | ||
110 | static void __init neocore926_add_device_ts(void) {} | ||
111 | #endif | ||
112 | |||
113 | /* | ||
114 | * SPI devices. | ||
115 | */ | ||
116 | static struct spi_board_info neocore926_spi_devices[] = { | ||
117 | #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD) | ||
118 | { /* DataFlash card */ | ||
119 | .modalias = "mtd_dataflash", | ||
120 | .chip_select = 0, | ||
121 | .max_speed_hz = 15 * 1000 * 1000, | ||
122 | .bus_num = 0, | ||
123 | }, | ||
124 | #endif | ||
125 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | ||
126 | { | ||
127 | .modalias = "ads7846", | ||
128 | .chip_select = 1, | ||
129 | .max_speed_hz = 125000 * 16, | ||
130 | .bus_num = 0, | ||
131 | .platform_data = &ads_info, | ||
132 | .irq = NR_IRQS_LEGACY + AT91SAM9263_ID_IRQ1, | ||
133 | }, | ||
134 | #endif | ||
135 | }; | ||
136 | |||
137 | |||
138 | /* | ||
139 | * MCI (SD/MMC) | ||
140 | */ | ||
141 | static struct mci_platform_data __initdata neocore926_mci0_data = { | ||
142 | .slot[0] = { | ||
143 | .bus_width = 4, | ||
144 | .detect_pin = AT91_PIN_PE18, | ||
145 | .wp_pin = AT91_PIN_PE19, | ||
146 | }, | ||
147 | }; | ||
148 | |||
149 | |||
150 | /* | ||
151 | * MACB Ethernet device | ||
152 | */ | ||
153 | static struct macb_platform_data __initdata neocore926_macb_data = { | ||
154 | .phy_irq_pin = AT91_PIN_PE31, | ||
155 | .is_rmii = 1, | ||
156 | }; | ||
157 | |||
158 | |||
159 | /* | ||
160 | * NAND flash | ||
161 | */ | ||
162 | static struct mtd_partition __initdata neocore926_nand_partition[] = { | ||
163 | { | ||
164 | .name = "Linux Kernel", /* "Partition 1", */ | ||
165 | .offset = 0, | ||
166 | .size = SZ_8M, | ||
167 | }, | ||
168 | { | ||
169 | .name = "Filesystem", /* "Partition 2", */ | ||
170 | .offset = MTDPART_OFS_NXTBLK, | ||
171 | .size = SZ_32M, | ||
172 | }, | ||
173 | { | ||
174 | .name = "Free", /* "Partition 3", */ | ||
175 | .offset = MTDPART_OFS_NXTBLK, | ||
176 | .size = MTDPART_SIZ_FULL, | ||
177 | }, | ||
178 | }; | ||
179 | |||
180 | static struct atmel_nand_data __initdata neocore926_nand_data = { | ||
181 | .ale = 21, | ||
182 | .cle = 22, | ||
183 | .rdy_pin = AT91_PIN_PB19, | ||
184 | .rdy_pin_active_low = 1, | ||
185 | .enable_pin = AT91_PIN_PD15, | ||
186 | .ecc_mode = NAND_ECC_SOFT, | ||
187 | .parts = neocore926_nand_partition, | ||
188 | .num_parts = ARRAY_SIZE(neocore926_nand_partition), | ||
189 | .det_pin = -EINVAL, | ||
190 | }; | ||
191 | |||
192 | static struct sam9_smc_config __initdata neocore926_nand_smc_config = { | ||
193 | .ncs_read_setup = 0, | ||
194 | .nrd_setup = 1, | ||
195 | .ncs_write_setup = 0, | ||
196 | .nwe_setup = 1, | ||
197 | |||
198 | .ncs_read_pulse = 4, | ||
199 | .nrd_pulse = 4, | ||
200 | .ncs_write_pulse = 4, | ||
201 | .nwe_pulse = 4, | ||
202 | |||
203 | .read_cycle = 6, | ||
204 | .write_cycle = 6, | ||
205 | |||
206 | .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8, | ||
207 | .tdf_cycles = 2, | ||
208 | }; | ||
209 | |||
210 | static void __init neocore926_add_device_nand(void) | ||
211 | { | ||
212 | /* configure chip-select 3 (NAND) */ | ||
213 | sam9_smc_configure(0, 3, &neocore926_nand_smc_config); | ||
214 | |||
215 | at91_add_device_nand(&neocore926_nand_data); | ||
216 | } | ||
217 | |||
218 | |||
219 | /* | ||
220 | * LCD Controller | ||
221 | */ | ||
222 | #if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE) | ||
223 | static struct fb_videomode at91_tft_vga_modes[] = { | ||
224 | { | ||
225 | .name = "TX09D50VM1CCA @ 60", | ||
226 | .refresh = 60, | ||
227 | .xres = 240, .yres = 320, | ||
228 | .pixclock = KHZ2PICOS(5000), | ||
229 | |||
230 | .left_margin = 1, .right_margin = 33, | ||
231 | .upper_margin = 1, .lower_margin = 0, | ||
232 | .hsync_len = 5, .vsync_len = 1, | ||
233 | |||
234 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
235 | .vmode = FB_VMODE_NONINTERLACED, | ||
236 | }, | ||
237 | }; | ||
238 | |||
239 | static struct fb_monspecs at91fb_default_monspecs = { | ||
240 | .manufacturer = "HIT", | ||
241 | .monitor = "TX09D70VM1CCA", | ||
242 | |||
243 | .modedb = at91_tft_vga_modes, | ||
244 | .modedb_len = ARRAY_SIZE(at91_tft_vga_modes), | ||
245 | .hfmin = 15000, | ||
246 | .hfmax = 64000, | ||
247 | .vfmin = 50, | ||
248 | .vfmax = 150, | ||
249 | }; | ||
250 | |||
251 | #define AT91SAM9263_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \ | ||
252 | | ATMEL_LCDC_DISTYPE_TFT \ | ||
253 | | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE) | ||
254 | |||
255 | static void at91_lcdc_power_control(int on) | ||
256 | { | ||
257 | at91_set_gpio_value(AT91_PIN_PA30, on); | ||
258 | } | ||
259 | |||
260 | /* Driver datas */ | ||
261 | static struct atmel_lcdfb_info __initdata neocore926_lcdc_data = { | ||
262 | .lcdcon_is_backlight = true, | ||
263 | .default_bpp = 16, | ||
264 | .default_dmacon = ATMEL_LCDC_DMAEN, | ||
265 | .default_lcdcon2 = AT91SAM9263_DEFAULT_LCDCON2, | ||
266 | .default_monspecs = &at91fb_default_monspecs, | ||
267 | .atmel_lcdfb_power_control = at91_lcdc_power_control, | ||
268 | .guard_time = 1, | ||
269 | .lcd_wiring_mode = ATMEL_LCDC_WIRING_RGB555, | ||
270 | }; | ||
271 | |||
272 | #else | ||
273 | static struct atmel_lcdfb_info __initdata neocore926_lcdc_data; | ||
274 | #endif | ||
275 | |||
276 | |||
277 | /* | ||
278 | * GPIO Buttons | ||
279 | */ | ||
280 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
281 | static struct gpio_keys_button neocore926_buttons[] = { | ||
282 | { /* BP1, "leftclic" */ | ||
283 | .code = BTN_LEFT, | ||
284 | .gpio = AT91_PIN_PC5, | ||
285 | .active_low = 1, | ||
286 | .desc = "left_click", | ||
287 | .wakeup = 1, | ||
288 | }, | ||
289 | { /* BP2, "rightclic" */ | ||
290 | .code = BTN_RIGHT, | ||
291 | .gpio = AT91_PIN_PC4, | ||
292 | .active_low = 1, | ||
293 | .desc = "right_click", | ||
294 | .wakeup = 1, | ||
295 | }, | ||
296 | }; | ||
297 | |||
298 | static struct gpio_keys_platform_data neocore926_button_data = { | ||
299 | .buttons = neocore926_buttons, | ||
300 | .nbuttons = ARRAY_SIZE(neocore926_buttons), | ||
301 | }; | ||
302 | |||
303 | static struct platform_device neocore926_button_device = { | ||
304 | .name = "gpio-keys", | ||
305 | .id = -1, | ||
306 | .num_resources = 0, | ||
307 | .dev = { | ||
308 | .platform_data = &neocore926_button_data, | ||
309 | } | ||
310 | }; | ||
311 | |||
312 | static void __init neocore926_add_device_buttons(void) | ||
313 | { | ||
314 | at91_set_GPIO_periph(AT91_PIN_PC5, 0); /* left button */ | ||
315 | at91_set_deglitch(AT91_PIN_PC5, 1); | ||
316 | at91_set_GPIO_periph(AT91_PIN_PC4, 0); /* right button */ | ||
317 | at91_set_deglitch(AT91_PIN_PC4, 1); | ||
318 | |||
319 | platform_device_register(&neocore926_button_device); | ||
320 | } | ||
321 | #else | ||
322 | static void __init neocore926_add_device_buttons(void) {} | ||
323 | #endif | ||
324 | |||
325 | |||
326 | /* | ||
327 | * AC97 | ||
328 | */ | ||
329 | static struct ac97c_platform_data neocore926_ac97_data = { | ||
330 | .reset_pin = AT91_PIN_PA13, | ||
331 | }; | ||
332 | |||
333 | |||
334 | static void __init neocore926_board_init(void) | ||
335 | { | ||
336 | /* Serial */ | ||
337 | /* DBGU on ttyS0. (Rx & Tx only) */ | ||
338 | at91_register_uart(0, 0, 0); | ||
339 | |||
340 | /* USART0 on ttyS1. (Rx, Tx, RTS, CTS) */ | ||
341 | at91_register_uart(AT91SAM9263_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); | ||
342 | at91_add_device_serial(); | ||
343 | |||
344 | /* USB Host */ | ||
345 | at91_add_device_usbh(&neocore926_usbh_data); | ||
346 | |||
347 | /* USB Device */ | ||
348 | at91_add_device_udc(&neocore926_udc_data); | ||
349 | |||
350 | /* SPI */ | ||
351 | at91_set_gpio_output(AT91_PIN_PE20, 1); /* select spi0 clock */ | ||
352 | at91_add_device_spi(neocore926_spi_devices, ARRAY_SIZE(neocore926_spi_devices)); | ||
353 | |||
354 | /* Touchscreen */ | ||
355 | neocore926_add_device_ts(); | ||
356 | |||
357 | /* MMC */ | ||
358 | at91_add_device_mci(0, &neocore926_mci0_data); | ||
359 | |||
360 | /* Ethernet */ | ||
361 | at91_add_device_eth(&neocore926_macb_data); | ||
362 | |||
363 | /* NAND */ | ||
364 | neocore926_add_device_nand(); | ||
365 | |||
366 | /* I2C */ | ||
367 | at91_add_device_i2c(NULL, 0); | ||
368 | |||
369 | /* LCD Controller */ | ||
370 | at91_add_device_lcdc(&neocore926_lcdc_data); | ||
371 | |||
372 | /* Push Buttons */ | ||
373 | neocore926_add_device_buttons(); | ||
374 | |||
375 | /* AC97 */ | ||
376 | at91_add_device_ac97(&neocore926_ac97_data); | ||
377 | } | ||
378 | |||
379 | MACHINE_START(NEOCORE926, "ADENEO NEOCORE 926") | ||
380 | /* Maintainer: ADENEO */ | ||
381 | .init_time = at91sam926x_pit_init, | ||
382 | .map_io = at91_map_io, | ||
383 | .handle_irq = at91_aic_handle_irq, | ||
384 | .init_early = neocore926_init_early, | ||
385 | .init_irq = at91_init_irq_default, | ||
386 | .init_machine = neocore926_board_init, | ||
387 | MACHINE_END | ||
diff --git a/arch/arm/mach-at91/include/mach/uncompress.h b/arch/arm/mach-at91/include/mach/uncompress.h index 97ad68a826f8..5659f7c72120 100644 --- a/arch/arm/mach-at91/include/mach/uncompress.h +++ b/arch/arm/mach-at91/include/mach/uncompress.h | |||
@@ -196,6 +196,4 @@ static inline void flush(void) | |||
196 | barrier(); | 196 | barrier(); |
197 | } | 197 | } |
198 | 198 | ||
199 | #define arch_decomp_wdog() | ||
200 | |||
201 | #endif | 199 | #endif |
diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig index 48705c10a0fe..bf02471d7e7c 100644 --- a/arch/arm/mach-bcm/Kconfig +++ b/arch/arm/mach-bcm/Kconfig | |||
@@ -7,7 +7,6 @@ config ARCH_BCM | |||
7 | select ARM_GIC | 7 | select ARM_GIC |
8 | select CPU_V7 | 8 | select CPU_V7 |
9 | select GENERIC_CLOCKEVENTS | 9 | select GENERIC_CLOCKEVENTS |
10 | select GENERIC_GPIO | ||
11 | select GENERIC_TIME | 10 | select GENERIC_TIME |
12 | select GPIO_BCM | 11 | select GPIO_BCM |
13 | select SPARSE_IRQ | 12 | select SPARSE_IRQ |
diff --git a/arch/arm/mach-bcm2835/bcm2835.c b/arch/arm/mach-bcm2835/bcm2835.c index 1a446a164c8c..6f5785985dd1 100644 --- a/arch/arm/mach-bcm2835/bcm2835.c +++ b/arch/arm/mach-bcm2835/bcm2835.c | |||
@@ -17,8 +17,8 @@ | |||
17 | #include <linux/irqchip/bcm2835.h> | 17 | #include <linux/irqchip/bcm2835.h> |
18 | #include <linux/of_address.h> | 18 | #include <linux/of_address.h> |
19 | #include <linux/of_platform.h> | 19 | #include <linux/of_platform.h> |
20 | #include <linux/bcm2835_timer.h> | ||
21 | #include <linux/clk/bcm2835.h> | 20 | #include <linux/clk/bcm2835.h> |
21 | #include <linux/clocksource.h> | ||
22 | 22 | ||
23 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
24 | #include <asm/mach/map.h> | 24 | #include <asm/mach/map.h> |
@@ -132,7 +132,7 @@ DT_MACHINE_START(BCM2835, "BCM2835") | |||
132 | .init_irq = bcm2835_init_irq, | 132 | .init_irq = bcm2835_init_irq, |
133 | .handle_irq = bcm2835_handle_irq, | 133 | .handle_irq = bcm2835_handle_irq, |
134 | .init_machine = bcm2835_init, | 134 | .init_machine = bcm2835_init, |
135 | .init_time = bcm2835_timer_init, | 135 | .init_time = clocksource_of_init, |
136 | .restart = bcm2835_restart, | 136 | .restart = bcm2835_restart, |
137 | .dt_compat = bcm2835_compat | 137 | .dt_compat = bcm2835_compat |
138 | MACHINE_END | 138 | MACHINE_END |
diff --git a/arch/arm/mach-bcm2835/include/mach/uncompress.h b/arch/arm/mach-bcm2835/include/mach/uncompress.h index cc46dcc72377..bf86dca3bf71 100644 --- a/arch/arm/mach-bcm2835/include/mach/uncompress.h +++ b/arch/arm/mach-bcm2835/include/mach/uncompress.h | |||
@@ -42,4 +42,3 @@ static inline void flush(void) | |||
42 | } | 42 | } |
43 | 43 | ||
44 | #define arch_decomp_setup() | 44 | #define arch_decomp_setup() |
45 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-clps711x/include/mach/uncompress.h b/arch/arm/mach-clps711x/include/mach/uncompress.h index 7b28d6a47690..5f02d06dc655 100644 --- a/arch/arm/mach-clps711x/include/mach/uncompress.h +++ b/arch/arm/mach-clps711x/include/mach/uncompress.h | |||
@@ -53,5 +53,3 @@ static inline void flush(void) | |||
53 | * nothing to do | 53 | * nothing to do |
54 | */ | 54 | */ |
55 | #define arch_decomp_setup() | 55 | #define arch_decomp_setup() |
56 | |||
57 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-cns3xxx/include/mach/uncompress.h b/arch/arm/mach-cns3xxx/include/mach/uncompress.h index a91b6058ab4f..7a030b99df84 100644 --- a/arch/arm/mach-cns3xxx/include/mach/uncompress.h +++ b/arch/arm/mach-cns3xxx/include/mach/uncompress.h | |||
@@ -51,4 +51,3 @@ static inline void flush(void) | |||
51 | * nothing to do | 51 | * nothing to do |
52 | */ | 52 | */ |
53 | #define arch_decomp_setup() | 53 | #define arch_decomp_setup() |
54 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-davinci/cpuidle.c b/arch/arm/mach-davinci/cpuidle.c index 9107691adbdb..5ac9e9384b15 100644 --- a/arch/arm/mach-davinci/cpuidle.c +++ b/arch/arm/mach-davinci/cpuidle.c | |||
@@ -25,35 +25,44 @@ | |||
25 | 25 | ||
26 | #define DAVINCI_CPUIDLE_MAX_STATES 2 | 26 | #define DAVINCI_CPUIDLE_MAX_STATES 2 |
27 | 27 | ||
28 | struct davinci_ops { | 28 | static DEFINE_PER_CPU(struct cpuidle_device, davinci_cpuidle_device); |
29 | void (*enter) (u32 flags); | 29 | static void __iomem *ddr2_reg_base; |
30 | void (*exit) (u32 flags); | 30 | static bool ddr2_pdown; |
31 | u32 flags; | 31 | |
32 | }; | 32 | static void davinci_save_ddr_power(int enter, bool pdown) |
33 | { | ||
34 | u32 val; | ||
35 | |||
36 | val = __raw_readl(ddr2_reg_base + DDR2_SDRCR_OFFSET); | ||
37 | |||
38 | if (enter) { | ||
39 | if (pdown) | ||
40 | val |= DDR2_SRPD_BIT; | ||
41 | else | ||
42 | val &= ~DDR2_SRPD_BIT; | ||
43 | val |= DDR2_LPMODEN_BIT; | ||
44 | } else { | ||
45 | val &= ~(DDR2_SRPD_BIT | DDR2_LPMODEN_BIT); | ||
46 | } | ||
47 | |||
48 | __raw_writel(val, ddr2_reg_base + DDR2_SDRCR_OFFSET); | ||
49 | } | ||
33 | 50 | ||
34 | /* Actual code that puts the SoC in different idle states */ | 51 | /* Actual code that puts the SoC in different idle states */ |
35 | static int davinci_enter_idle(struct cpuidle_device *dev, | 52 | static int davinci_enter_idle(struct cpuidle_device *dev, |
36 | struct cpuidle_driver *drv, | 53 | struct cpuidle_driver *drv, |
37 | int index) | 54 | int index) |
38 | { | 55 | { |
39 | struct cpuidle_state_usage *state_usage = &dev->states_usage[index]; | 56 | davinci_save_ddr_power(1, ddr2_pdown); |
40 | struct davinci_ops *ops = cpuidle_get_statedata(state_usage); | ||
41 | |||
42 | if (ops && ops->enter) | ||
43 | ops->enter(ops->flags); | ||
44 | 57 | ||
45 | index = cpuidle_wrap_enter(dev, drv, index, | 58 | index = cpuidle_wrap_enter(dev, drv, index, |
46 | arm_cpuidle_simple_enter); | 59 | arm_cpuidle_simple_enter); |
47 | 60 | ||
48 | if (ops && ops->exit) | 61 | davinci_save_ddr_power(0, ddr2_pdown); |
49 | ops->exit(ops->flags); | ||
50 | 62 | ||
51 | return index; | 63 | return index; |
52 | } | 64 | } |
53 | 65 | ||
54 | /* fields in davinci_ops.flags */ | ||
55 | #define DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN BIT(0) | ||
56 | |||
57 | static struct cpuidle_driver davinci_idle_driver = { | 66 | static struct cpuidle_driver davinci_idle_driver = { |
58 | .name = "cpuidle-davinci", | 67 | .name = "cpuidle-davinci", |
59 | .owner = THIS_MODULE, | 68 | .owner = THIS_MODULE, |
@@ -70,45 +79,6 @@ static struct cpuidle_driver davinci_idle_driver = { | |||
70 | .state_count = DAVINCI_CPUIDLE_MAX_STATES, | 79 | .state_count = DAVINCI_CPUIDLE_MAX_STATES, |
71 | }; | 80 | }; |
72 | 81 | ||
73 | static DEFINE_PER_CPU(struct cpuidle_device, davinci_cpuidle_device); | ||
74 | static void __iomem *ddr2_reg_base; | ||
75 | |||
76 | static void davinci_save_ddr_power(int enter, bool pdown) | ||
77 | { | ||
78 | u32 val; | ||
79 | |||
80 | val = __raw_readl(ddr2_reg_base + DDR2_SDRCR_OFFSET); | ||
81 | |||
82 | if (enter) { | ||
83 | if (pdown) | ||
84 | val |= DDR2_SRPD_BIT; | ||
85 | else | ||
86 | val &= ~DDR2_SRPD_BIT; | ||
87 | val |= DDR2_LPMODEN_BIT; | ||
88 | } else { | ||
89 | val &= ~(DDR2_SRPD_BIT | DDR2_LPMODEN_BIT); | ||
90 | } | ||
91 | |||
92 | __raw_writel(val, ddr2_reg_base + DDR2_SDRCR_OFFSET); | ||
93 | } | ||
94 | |||
95 | static void davinci_c2state_enter(u32 flags) | ||
96 | { | ||
97 | davinci_save_ddr_power(1, !!(flags & DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN)); | ||
98 | } | ||
99 | |||
100 | static void davinci_c2state_exit(u32 flags) | ||
101 | { | ||
102 | davinci_save_ddr_power(0, !!(flags & DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN)); | ||
103 | } | ||
104 | |||
105 | static struct davinci_ops davinci_states[DAVINCI_CPUIDLE_MAX_STATES] = { | ||
106 | [1] = { | ||
107 | .enter = davinci_c2state_enter, | ||
108 | .exit = davinci_c2state_exit, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | static int __init davinci_cpuidle_probe(struct platform_device *pdev) | 82 | static int __init davinci_cpuidle_probe(struct platform_device *pdev) |
113 | { | 83 | { |
114 | int ret; | 84 | int ret; |
@@ -124,11 +94,7 @@ static int __init davinci_cpuidle_probe(struct platform_device *pdev) | |||
124 | 94 | ||
125 | ddr2_reg_base = pdata->ddr2_ctlr_base; | 95 | ddr2_reg_base = pdata->ddr2_ctlr_base; |
126 | 96 | ||
127 | if (pdata->ddr2_pdown) | 97 | ddr2_pdown = pdata->ddr2_pdown; |
128 | davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN; | ||
129 | cpuidle_set_statedata(&device->states_usage[1], &davinci_states[1]); | ||
130 | |||
131 | device->state_count = DAVINCI_CPUIDLE_MAX_STATES; | ||
132 | 98 | ||
133 | ret = cpuidle_register_driver(&davinci_idle_driver); | 99 | ret = cpuidle_register_driver(&davinci_idle_driver); |
134 | if (ret) { | 100 | if (ret) { |
diff --git a/arch/arm/mach-davinci/include/mach/uncompress.h b/arch/arm/mach-davinci/include/mach/uncompress.h index 3a0ff905a69b..f49c2916aa3a 100644 --- a/arch/arm/mach-davinci/include/mach/uncompress.h +++ b/arch/arm/mach-davinci/include/mach/uncompress.h | |||
@@ -101,4 +101,3 @@ static inline void __arch_decomp_setup(unsigned long arch_id) | |||
101 | } | 101 | } |
102 | 102 | ||
103 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) | 103 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) |
104 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-dove/common.c b/arch/arm/mach-dove/common.c index 0c7911b3e155..ea84c535a110 100644 --- a/arch/arm/mach-dove/common.c +++ b/arch/arm/mach-dove/common.c | |||
@@ -8,35 +8,24 @@ | |||
8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/delay.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | #include <linux/pci.h> | ||
16 | #include <linux/clk-provider.h> | 11 | #include <linux/clk-provider.h> |
17 | #include <linux/clk/mvebu.h> | 12 | #include <linux/clk/mvebu.h> |
18 | #include <linux/ata_platform.h> | 13 | #include <linux/dma-mapping.h> |
19 | #include <linux/gpio.h> | 14 | #include <linux/init.h> |
20 | #include <linux/of.h> | 15 | #include <linux/of.h> |
21 | #include <linux/of_platform.h> | 16 | #include <linux/of_platform.h> |
22 | #include <asm/page.h> | 17 | #include <linux/platform_data/dma-mv_xor.h> |
23 | #include <asm/setup.h> | 18 | #include <linux/platform_data/usb-ehci-orion.h> |
24 | #include <asm/timex.h> | 19 | #include <linux/platform_device.h> |
25 | #include <asm/hardware/cache-tauros2.h> | 20 | #include <asm/hardware/cache-tauros2.h> |
21 | #include <asm/mach/arch.h> | ||
26 | #include <asm/mach/map.h> | 22 | #include <asm/mach/map.h> |
27 | #include <asm/mach/time.h> | 23 | #include <asm/mach/time.h> |
28 | #include <asm/mach/pci.h> | ||
29 | #include <mach/dove.h> | ||
30 | #include <mach/pm.h> | ||
31 | #include <mach/bridge-regs.h> | 24 | #include <mach/bridge-regs.h> |
32 | #include <asm/mach/arch.h> | 25 | #include <mach/pm.h> |
33 | #include <linux/irq.h> | ||
34 | #include <plat/time.h> | ||
35 | #include <linux/platform_data/usb-ehci-orion.h> | ||
36 | #include <linux/platform_data/dma-mv_xor.h> | ||
37 | #include <plat/irq.h> | ||
38 | #include <plat/common.h> | 26 | #include <plat/common.h> |
39 | #include <plat/addr-map.h> | 27 | #include <plat/irq.h> |
28 | #include <plat/time.h> | ||
40 | #include "common.h" | 29 | #include "common.h" |
41 | 30 | ||
42 | /***************************************************************************** | 31 | /***************************************************************************** |
diff --git a/arch/arm/mach-dove/include/mach/uncompress.h b/arch/arm/mach-dove/include/mach/uncompress.h index 2c5cdd7a3eed..5c8ae9b9d39a 100644 --- a/arch/arm/mach-dove/include/mach/uncompress.h +++ b/arch/arm/mach-dove/include/mach/uncompress.h | |||
@@ -34,4 +34,3 @@ static void flush(void) | |||
34 | * nothing to do | 34 | * nothing to do |
35 | */ | 35 | */ |
36 | #define arch_decomp_setup() | 36 | #define arch_decomp_setup() |
37 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-ebsa110/include/mach/uncompress.h b/arch/arm/mach-ebsa110/include/mach/uncompress.h index 32041509fbf8..ab64bea69c72 100644 --- a/arch/arm/mach-ebsa110/include/mach/uncompress.h +++ b/arch/arm/mach-ebsa110/include/mach/uncompress.h | |||
@@ -42,4 +42,3 @@ static inline void flush(void) | |||
42 | * nothing to do | 42 | * nothing to do |
43 | */ | 43 | */ |
44 | #define arch_decomp_setup() | 44 | #define arch_decomp_setup() |
45 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/uncompress.h b/arch/arm/mach-ep93xx/include/mach/uncompress.h index d64274fc5760..d2afb4dd82ab 100644 --- a/arch/arm/mach-ep93xx/include/mach/uncompress.h +++ b/arch/arm/mach-ep93xx/include/mach/uncompress.h | |||
@@ -86,5 +86,3 @@ static void arch_decomp_setup(void) | |||
86 | { | 86 | { |
87 | ethernet_reset(); | 87 | ethernet_reset(); |
88 | } | 88 | } |
89 | |||
90 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 4ea80bc4ef9b..d63d399c7bae 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
13 | #include <linux/interrupt.h> | 13 | #include <linux/interrupt.h> |
14 | #include <linux/irq.h> | 14 | #include <linux/irq.h> |
15 | #include <linux/irqchip.h> | ||
15 | #include <linux/io.h> | 16 | #include <linux/io.h> |
16 | #include <linux/device.h> | 17 | #include <linux/device.h> |
17 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
@@ -36,7 +37,6 @@ | |||
36 | #include <mach/regs-irq.h> | 37 | #include <mach/regs-irq.h> |
37 | #include <mach/regs-pmu.h> | 38 | #include <mach/regs-pmu.h> |
38 | #include <mach/regs-gpio.h> | 39 | #include <mach/regs-gpio.h> |
39 | #include <mach/pmu.h> | ||
40 | 40 | ||
41 | #include <plat/cpu.h> | 41 | #include <plat/cpu.h> |
42 | #include <plat/clock.h> | 42 | #include <plat/clock.h> |
@@ -300,6 +300,7 @@ void exynos4_restart(char mode, const char *cmd) | |||
300 | 300 | ||
301 | void exynos5_restart(char mode, const char *cmd) | 301 | void exynos5_restart(char mode, const char *cmd) |
302 | { | 302 | { |
303 | struct device_node *np; | ||
303 | u32 val; | 304 | u32 val; |
304 | void __iomem *addr; | 305 | void __iomem *addr; |
305 | 306 | ||
@@ -307,8 +308,9 @@ void exynos5_restart(char mode, const char *cmd) | |||
307 | val = 0x1; | 308 | val = 0x1; |
308 | addr = EXYNOS_SWRESET; | 309 | addr = EXYNOS_SWRESET; |
309 | } else if (of_machine_is_compatible("samsung,exynos5440")) { | 310 | } else if (of_machine_is_compatible("samsung,exynos5440")) { |
310 | val = (0x10 << 20) | (0x1 << 16); | 311 | np = of_find_compatible_node(NULL, NULL, "samsung,exynos5440-clock"); |
311 | addr = EXYNOS5440_SWRESET; | 312 | addr = of_iomap(np, 0) + 0xcc; |
313 | val = (0xfff << 20) | (0x1 << 16); | ||
312 | } else { | 314 | } else { |
313 | pr_err("%s: cannot support non-DT\n", __func__); | 315 | pr_err("%s: cannot support non-DT\n", __func__); |
314 | return; | 316 | return; |
@@ -439,218 +441,6 @@ static void __init exynos5_init_clocks(int xtal) | |||
439 | #endif | 441 | #endif |
440 | } | 442 | } |
441 | 443 | ||
442 | #define COMBINER_ENABLE_SET 0x0 | ||
443 | #define COMBINER_ENABLE_CLEAR 0x4 | ||
444 | #define COMBINER_INT_STATUS 0xC | ||
445 | |||
446 | static DEFINE_SPINLOCK(irq_controller_lock); | ||
447 | |||
448 | struct combiner_chip_data { | ||
449 | unsigned int irq_offset; | ||
450 | unsigned int irq_mask; | ||
451 | void __iomem *base; | ||
452 | }; | ||
453 | |||
454 | static struct irq_domain *combiner_irq_domain; | ||
455 | static struct combiner_chip_data combiner_data[MAX_COMBINER_NR]; | ||
456 | |||
457 | static inline void __iomem *combiner_base(struct irq_data *data) | ||
458 | { | ||
459 | struct combiner_chip_data *combiner_data = | ||
460 | irq_data_get_irq_chip_data(data); | ||
461 | |||
462 | return combiner_data->base; | ||
463 | } | ||
464 | |||
465 | static void combiner_mask_irq(struct irq_data *data) | ||
466 | { | ||
467 | u32 mask = 1 << (data->hwirq % 32); | ||
468 | |||
469 | __raw_writel(mask, combiner_base(data) + COMBINER_ENABLE_CLEAR); | ||
470 | } | ||
471 | |||
472 | static void combiner_unmask_irq(struct irq_data *data) | ||
473 | { | ||
474 | u32 mask = 1 << (data->hwirq % 32); | ||
475 | |||
476 | __raw_writel(mask, combiner_base(data) + COMBINER_ENABLE_SET); | ||
477 | } | ||
478 | |||
479 | static void combiner_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) | ||
480 | { | ||
481 | struct combiner_chip_data *chip_data = irq_get_handler_data(irq); | ||
482 | struct irq_chip *chip = irq_get_chip(irq); | ||
483 | unsigned int cascade_irq, combiner_irq; | ||
484 | unsigned long status; | ||
485 | |||
486 | chained_irq_enter(chip, desc); | ||
487 | |||
488 | spin_lock(&irq_controller_lock); | ||
489 | status = __raw_readl(chip_data->base + COMBINER_INT_STATUS); | ||
490 | spin_unlock(&irq_controller_lock); | ||
491 | status &= chip_data->irq_mask; | ||
492 | |||
493 | if (status == 0) | ||
494 | goto out; | ||
495 | |||
496 | combiner_irq = __ffs(status); | ||
497 | |||
498 | cascade_irq = combiner_irq + (chip_data->irq_offset & ~31); | ||
499 | if (unlikely(cascade_irq >= NR_IRQS)) | ||
500 | do_bad_IRQ(cascade_irq, desc); | ||
501 | else | ||
502 | generic_handle_irq(cascade_irq); | ||
503 | |||
504 | out: | ||
505 | chained_irq_exit(chip, desc); | ||
506 | } | ||
507 | |||
508 | static struct irq_chip combiner_chip = { | ||
509 | .name = "COMBINER", | ||
510 | .irq_mask = combiner_mask_irq, | ||
511 | .irq_unmask = combiner_unmask_irq, | ||
512 | }; | ||
513 | |||
514 | static void __init combiner_cascade_irq(unsigned int combiner_nr, unsigned int irq) | ||
515 | { | ||
516 | unsigned int max_nr; | ||
517 | |||
518 | if (soc_is_exynos5250()) | ||
519 | max_nr = EXYNOS5_MAX_COMBINER_NR; | ||
520 | else | ||
521 | max_nr = EXYNOS4_MAX_COMBINER_NR; | ||
522 | |||
523 | if (combiner_nr >= max_nr) | ||
524 | BUG(); | ||
525 | if (irq_set_handler_data(irq, &combiner_data[combiner_nr]) != 0) | ||
526 | BUG(); | ||
527 | irq_set_chained_handler(irq, combiner_handle_cascade_irq); | ||
528 | } | ||
529 | |||
530 | static void __init combiner_init_one(unsigned int combiner_nr, | ||
531 | void __iomem *base) | ||
532 | { | ||
533 | combiner_data[combiner_nr].base = base; | ||
534 | combiner_data[combiner_nr].irq_offset = irq_find_mapping( | ||
535 | combiner_irq_domain, combiner_nr * MAX_IRQ_IN_COMBINER); | ||
536 | combiner_data[combiner_nr].irq_mask = 0xff << ((combiner_nr % 4) << 3); | ||
537 | |||
538 | /* Disable all interrupts */ | ||
539 | __raw_writel(combiner_data[combiner_nr].irq_mask, | ||
540 | base + COMBINER_ENABLE_CLEAR); | ||
541 | } | ||
542 | |||
543 | #ifdef CONFIG_OF | ||
544 | static int combiner_irq_domain_xlate(struct irq_domain *d, | ||
545 | struct device_node *controller, | ||
546 | const u32 *intspec, unsigned int intsize, | ||
547 | unsigned long *out_hwirq, | ||
548 | unsigned int *out_type) | ||
549 | { | ||
550 | if (d->of_node != controller) | ||
551 | return -EINVAL; | ||
552 | |||
553 | if (intsize < 2) | ||
554 | return -EINVAL; | ||
555 | |||
556 | *out_hwirq = intspec[0] * MAX_IRQ_IN_COMBINER + intspec[1]; | ||
557 | *out_type = 0; | ||
558 | |||
559 | return 0; | ||
560 | } | ||
561 | #else | ||
562 | static int combiner_irq_domain_xlate(struct irq_domain *d, | ||
563 | struct device_node *controller, | ||
564 | const u32 *intspec, unsigned int intsize, | ||
565 | unsigned long *out_hwirq, | ||
566 | unsigned int *out_type) | ||
567 | { | ||
568 | return -EINVAL; | ||
569 | } | ||
570 | #endif | ||
571 | |||
572 | static int combiner_irq_domain_map(struct irq_domain *d, unsigned int irq, | ||
573 | irq_hw_number_t hw) | ||
574 | { | ||
575 | irq_set_chip_and_handler(irq, &combiner_chip, handle_level_irq); | ||
576 | irq_set_chip_data(irq, &combiner_data[hw >> 3]); | ||
577 | set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); | ||
578 | |||
579 | return 0; | ||
580 | } | ||
581 | |||
582 | static struct irq_domain_ops combiner_irq_domain_ops = { | ||
583 | .xlate = combiner_irq_domain_xlate, | ||
584 | .map = combiner_irq_domain_map, | ||
585 | }; | ||
586 | |||
587 | static void __init combiner_init(void __iomem *combiner_base, | ||
588 | struct device_node *np) | ||
589 | { | ||
590 | int i, irq, irq_base; | ||
591 | unsigned int max_nr, nr_irq; | ||
592 | |||
593 | if (np) { | ||
594 | if (of_property_read_u32(np, "samsung,combiner-nr", &max_nr)) { | ||
595 | pr_warning("%s: number of combiners not specified, " | ||
596 | "setting default as %d.\n", | ||
597 | __func__, EXYNOS4_MAX_COMBINER_NR); | ||
598 | max_nr = EXYNOS4_MAX_COMBINER_NR; | ||
599 | } | ||
600 | } else { | ||
601 | max_nr = soc_is_exynos5250() ? EXYNOS5_MAX_COMBINER_NR : | ||
602 | EXYNOS4_MAX_COMBINER_NR; | ||
603 | } | ||
604 | nr_irq = max_nr * MAX_IRQ_IN_COMBINER; | ||
605 | |||
606 | irq_base = irq_alloc_descs(COMBINER_IRQ(0, 0), 1, nr_irq, 0); | ||
607 | if (IS_ERR_VALUE(irq_base)) { | ||
608 | irq_base = COMBINER_IRQ(0, 0); | ||
609 | pr_warning("%s: irq desc alloc failed. Continuing with %d as linux irq base\n", __func__, irq_base); | ||
610 | } | ||
611 | |||
612 | combiner_irq_domain = irq_domain_add_legacy(np, nr_irq, irq_base, 0, | ||
613 | &combiner_irq_domain_ops, &combiner_data); | ||
614 | if (WARN_ON(!combiner_irq_domain)) { | ||
615 | pr_warning("%s: irq domain init failed\n", __func__); | ||
616 | return; | ||
617 | } | ||
618 | |||
619 | for (i = 0; i < max_nr; i++) { | ||
620 | combiner_init_one(i, combiner_base + (i >> 2) * 0x10); | ||
621 | irq = IRQ_SPI(i); | ||
622 | #ifdef CONFIG_OF | ||
623 | if (np) | ||
624 | irq = irq_of_parse_and_map(np, i); | ||
625 | #endif | ||
626 | combiner_cascade_irq(i, irq); | ||
627 | } | ||
628 | } | ||
629 | |||
630 | #ifdef CONFIG_OF | ||
631 | static int __init combiner_of_init(struct device_node *np, | ||
632 | struct device_node *parent) | ||
633 | { | ||
634 | void __iomem *combiner_base; | ||
635 | |||
636 | combiner_base = of_iomap(np, 0); | ||
637 | if (!combiner_base) { | ||
638 | pr_err("%s: failed to map combiner registers\n", __func__); | ||
639 | return -ENXIO; | ||
640 | } | ||
641 | |||
642 | combiner_init(combiner_base, np); | ||
643 | |||
644 | return 0; | ||
645 | } | ||
646 | |||
647 | static const struct of_device_id exynos_dt_irq_match[] = { | ||
648 | { .compatible = "samsung,exynos4210-combiner", | ||
649 | .data = combiner_of_init, }, | ||
650 | {}, | ||
651 | }; | ||
652 | #endif | ||
653 | |||
654 | void __init exynos4_init_irq(void) | 444 | void __init exynos4_init_irq(void) |
655 | { | 445 | { |
656 | unsigned int gic_bank_offset; | 446 | unsigned int gic_bank_offset; |
@@ -660,10 +450,8 @@ void __init exynos4_init_irq(void) | |||
660 | if (!of_have_populated_dt()) | 450 | if (!of_have_populated_dt()) |
661 | gic_init_bases(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU, gic_bank_offset, NULL); | 451 | gic_init_bases(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU, gic_bank_offset, NULL); |
662 | #ifdef CONFIG_OF | 452 | #ifdef CONFIG_OF |
663 | else { | 453 | else |
664 | irqchip_init(); | 454 | irqchip_init(); |
665 | of_irq_init(exynos_dt_irq_match); | ||
666 | } | ||
667 | #endif | 455 | #endif |
668 | 456 | ||
669 | if (!of_have_populated_dt()) | 457 | if (!of_have_populated_dt()) |
@@ -681,7 +469,6 @@ void __init exynos5_init_irq(void) | |||
681 | { | 469 | { |
682 | #ifdef CONFIG_OF | 470 | #ifdef CONFIG_OF |
683 | irqchip_init(); | 471 | irqchip_init(); |
684 | of_irq_init(exynos_dt_irq_match); | ||
685 | #endif | 472 | #endif |
686 | /* | 473 | /* |
687 | * The parameters of s5p_init_irq() are for VIC init. | 474 | * The parameters of s5p_init_irq() are for VIC init. |
@@ -1033,8 +820,8 @@ static int __init exynos_init_irq_eint(void) | |||
1033 | * interrupt support code here can be completely removed. | 820 | * interrupt support code here can be completely removed. |
1034 | */ | 821 | */ |
1035 | static const struct of_device_id exynos_pinctrl_ids[] = { | 822 | static const struct of_device_id exynos_pinctrl_ids[] = { |
1036 | { .compatible = "samsung,pinctrl-exynos4210", }, | 823 | { .compatible = "samsung,exynos4210-pinctrl", }, |
1037 | { .compatible = "samsung,pinctrl-exynos4x12", }, | 824 | { .compatible = "samsung,exynos4x12-pinctrl", }, |
1038 | }; | 825 | }; |
1039 | struct device_node *pctrl_np, *wkup_np; | 826 | struct device_node *pctrl_np, *wkup_np; |
1040 | const char *wkup_compat = "samsung,exynos4210-wakeup-eint"; | 827 | const char *wkup_compat = "samsung,exynos4210-wakeup-eint"; |
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h index 12f2f1117e99..9339bb8954be 100644 --- a/arch/arm/mach-exynos/common.h +++ b/arch/arm/mach-exynos/common.h | |||
@@ -60,8 +60,31 @@ void exynos4212_register_clocks(void); | |||
60 | #define exynos4212_register_clocks() | 60 | #define exynos4212_register_clocks() |
61 | #endif | 61 | #endif |
62 | 62 | ||
63 | struct device_node; | ||
64 | void combiner_init(void __iomem *combiner_base, struct device_node *np); | ||
65 | |||
63 | extern struct smp_operations exynos_smp_ops; | 66 | extern struct smp_operations exynos_smp_ops; |
64 | 67 | ||
65 | extern void exynos_cpu_die(unsigned int cpu); | 68 | extern void exynos_cpu_die(unsigned int cpu); |
66 | 69 | ||
70 | /* PMU(Power Management Unit) support */ | ||
71 | |||
72 | #define PMU_TABLE_END NULL | ||
73 | |||
74 | enum sys_powerdown { | ||
75 | SYS_AFTR, | ||
76 | SYS_LPA, | ||
77 | SYS_SLEEP, | ||
78 | NUM_SYS_POWERDOWN, | ||
79 | }; | ||
80 | |||
81 | extern unsigned long l2x0_regs_phys; | ||
82 | struct exynos_pmu_conf { | ||
83 | void __iomem *reg; | ||
84 | unsigned int val[NUM_SYS_POWERDOWN]; | ||
85 | }; | ||
86 | |||
87 | extern void exynos_sys_powerdown_conf(enum sys_powerdown mode); | ||
88 | extern void s3c_cpu_resume(void); | ||
89 | |||
67 | #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */ | 90 | #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */ |
diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c index 050924152776..fcfe0251aa3e 100644 --- a/arch/arm/mach-exynos/cpuidle.c +++ b/arch/arm/mach-exynos/cpuidle.c | |||
@@ -23,10 +23,11 @@ | |||
23 | #include <asm/cpuidle.h> | 23 | #include <asm/cpuidle.h> |
24 | #include <mach/regs-clock.h> | 24 | #include <mach/regs-clock.h> |
25 | #include <mach/regs-pmu.h> | 25 | #include <mach/regs-pmu.h> |
26 | #include <mach/pmu.h> | ||
27 | 26 | ||
28 | #include <plat/cpu.h> | 27 | #include <plat/cpu.h> |
29 | 28 | ||
29 | #include "common.h" | ||
30 | |||
30 | #define REG_DIRECTGO_ADDR (samsung_rev() == EXYNOS4210_REV_1_1 ? \ | 31 | #define REG_DIRECTGO_ADDR (samsung_rev() == EXYNOS4210_REV_1_1 ? \ |
31 | S5P_INFORM7 : (samsung_rev() == EXYNOS4210_REV_1_0 ? \ | 32 | S5P_INFORM7 : (samsung_rev() == EXYNOS4210_REV_1_0 ? \ |
32 | (S5P_VA_SYSRAM + 0x24) : S5P_INFORM0)) | 33 | (S5P_VA_SYSRAM + 0x24) : S5P_INFORM0)) |
diff --git a/arch/arm/mach-exynos/dev-audio.c b/arch/arm/mach-exynos/dev-audio.c index 9d1a60951d7b..c662c89794b2 100644 --- a/arch/arm/mach-exynos/dev-audio.c +++ b/arch/arm/mach-exynos/dev-audio.c | |||
@@ -21,7 +21,8 @@ | |||
21 | #include <mach/map.h> | 21 | #include <mach/map.h> |
22 | #include <mach/dma.h> | 22 | #include <mach/dma.h> |
23 | #include <mach/irqs.h> | 23 | #include <mach/irqs.h> |
24 | #include <mach/regs-audss.h> | 24 | |
25 | #define EXYNOS4_AUDSS_INT_MEM (0x03000000) | ||
25 | 26 | ||
26 | static int exynos4_cfg_i2s(struct platform_device *pdev) | 27 | static int exynos4_cfg_i2s(struct platform_device *pdev) |
27 | { | 28 | { |
diff --git a/arch/arm/mach-exynos/include/mach/cpufreq.h b/arch/arm/mach-exynos/include/mach/cpufreq.h deleted file mode 100644 index 7517c3f417af..000000000000 --- a/arch/arm/mach-exynos/include/mach/cpufreq.h +++ /dev/null | |||
@@ -1,36 +0,0 @@ | |||
1 | /* linux/arch/arm/mach-exynos/include/mach/cpufreq.h | ||
2 | * | ||
3 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. | ||
4 | * http://www.samsung.com | ||
5 | * | ||
6 | * EXYNOS - CPUFreq support | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | enum cpufreq_level_index { | ||
14 | L0, L1, L2, L3, L4, | ||
15 | L5, L6, L7, L8, L9, | ||
16 | L10, L11, L12, L13, L14, | ||
17 | L15, L16, L17, L18, L19, | ||
18 | L20, | ||
19 | }; | ||
20 | |||
21 | struct exynos_dvfs_info { | ||
22 | unsigned long mpll_freq_khz; | ||
23 | unsigned int pll_safe_idx; | ||
24 | unsigned int pm_lock_idx; | ||
25 | unsigned int max_support_idx; | ||
26 | unsigned int min_support_idx; | ||
27 | struct clk *cpu_clk; | ||
28 | unsigned int *volt_table; | ||
29 | struct cpufreq_frequency_table *freq_table; | ||
30 | void (*set_freq)(unsigned int, unsigned int); | ||
31 | bool (*need_apll_change)(unsigned int, unsigned int); | ||
32 | }; | ||
33 | |||
34 | extern int exynos4210_cpufreq_init(struct exynos_dvfs_info *); | ||
35 | extern int exynos4x12_cpufreq_init(struct exynos_dvfs_info *); | ||
36 | extern int exynos5250_cpufreq_init(struct exynos_dvfs_info *); | ||
diff --git a/arch/arm/mach-exynos/include/mach/pmu.h b/arch/arm/mach-exynos/include/mach/pmu.h deleted file mode 100644 index 7c27c2d4bf44..000000000000 --- a/arch/arm/mach-exynos/include/mach/pmu.h +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | /* linux/arch/arm/mach-exynos4/include/mach/pmu.h | ||
2 | * | ||
3 | * Copyright (c) 2011 Samsung Electronics Co., Ltd. | ||
4 | * http://www.samsung.com/ | ||
5 | * | ||
6 | * EXYNOS4210 - PMU(Power Management Unit) support | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_PMU_H | ||
14 | #define __ASM_ARCH_PMU_H __FILE__ | ||
15 | |||
16 | #define PMU_TABLE_END NULL | ||
17 | |||
18 | enum sys_powerdown { | ||
19 | SYS_AFTR, | ||
20 | SYS_LPA, | ||
21 | SYS_SLEEP, | ||
22 | NUM_SYS_POWERDOWN, | ||
23 | }; | ||
24 | |||
25 | extern unsigned long l2x0_regs_phys; | ||
26 | struct exynos_pmu_conf { | ||
27 | void __iomem *reg; | ||
28 | unsigned int val[NUM_SYS_POWERDOWN]; | ||
29 | }; | ||
30 | |||
31 | extern void exynos_sys_powerdown_conf(enum sys_powerdown mode); | ||
32 | extern void s3c_cpu_resume(void); | ||
33 | |||
34 | #endif /* __ASM_ARCH_PMU_H */ | ||
diff --git a/arch/arm/mach-exynos/include/mach/regs-audss.h b/arch/arm/mach-exynos/include/mach/regs-audss.h deleted file mode 100644 index ca5a8b64218a..000000000000 --- a/arch/arm/mach-exynos/include/mach/regs-audss.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | /* arch/arm/mach-exynos4/include/mach/regs-audss.h | ||
2 | * | ||
3 | * Copyright (c) 2011 Samsung Electronics | ||
4 | * http://www.samsung.com | ||
5 | * | ||
6 | * Exynos4 Audio SubSystem clock register definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __PLAT_REGS_AUDSS_H | ||
14 | #define __PLAT_REGS_AUDSS_H __FILE__ | ||
15 | |||
16 | #define EXYNOS4_AUDSS_INT_MEM (0x03000000) | ||
17 | |||
18 | #endif /* _PLAT_REGS_AUDSS_H */ | ||
diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c index 0deeecffa3ae..973a06637572 100644 --- a/arch/arm/mach-exynos/mach-exynos5-dt.c +++ b/arch/arm/mach-exynos/mach-exynos5-dt.c | |||
@@ -103,6 +103,12 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = { | |||
103 | OF_DEV_AUXDATA("samsung,mfc-v6", 0x11000000, "s5p-mfc-v6", NULL), | 103 | OF_DEV_AUXDATA("samsung,mfc-v6", 0x11000000, "s5p-mfc-v6", NULL), |
104 | OF_DEV_AUXDATA("samsung,exynos5250-tmu", 0x10060000, | 104 | OF_DEV_AUXDATA("samsung,exynos5250-tmu", 0x10060000, |
105 | "exynos-tmu", NULL), | 105 | "exynos-tmu", NULL), |
106 | OF_DEV_AUXDATA("samsung,i2s-v5", 0x03830000, | ||
107 | "samsung-i2s.0", NULL), | ||
108 | OF_DEV_AUXDATA("samsung,i2s-v5", 0x12D60000, | ||
109 | "samsung-i2s.1", NULL), | ||
110 | OF_DEV_AUXDATA("samsung,i2s-v5", 0x12D70000, | ||
111 | "samsung-i2s.2", NULL), | ||
106 | {}, | 112 | {}, |
107 | }; | 113 | }; |
108 | 114 | ||
diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c index b9b539cac81e..e3faaa812016 100644 --- a/arch/arm/mach-exynos/pm.c +++ b/arch/arm/mach-exynos/pm.c | |||
@@ -34,7 +34,8 @@ | |||
34 | #include <mach/regs-clock.h> | 34 | #include <mach/regs-clock.h> |
35 | #include <mach/regs-pmu.h> | 35 | #include <mach/regs-pmu.h> |
36 | #include <mach/pm-core.h> | 36 | #include <mach/pm-core.h> |
37 | #include <mach/pmu.h> | 37 | |
38 | #include "common.h" | ||
38 | 39 | ||
39 | static struct sleep_save exynos4_set_clksrc[] = { | 40 | static struct sleep_save exynos4_set_clksrc[] = { |
40 | { .reg = EXYNOS4_CLKSRC_MASK_TOP , .val = 0x00000001, }, | 41 | { .reg = EXYNOS4_CLKSRC_MASK_TOP , .val = 0x00000001, }, |
@@ -91,8 +92,8 @@ static int exynos_cpu_suspend(unsigned long arg) | |||
91 | /* issue the standby signal into the pm unit. */ | 92 | /* issue the standby signal into the pm unit. */ |
92 | cpu_do_idle(); | 93 | cpu_do_idle(); |
93 | 94 | ||
94 | /* we should never get past here */ | 95 | pr_info("Failed to suspend the system\n"); |
95 | panic("sleep resumed to originator?"); | 96 | return 1; /* Aborting suspend */ |
96 | } | 97 | } |
97 | 98 | ||
98 | static void exynos_pm_prepare(void) | 99 | static void exynos_pm_prepare(void) |
@@ -282,6 +283,8 @@ static void exynos_pm_resume(void) | |||
282 | if (!(tmp & S5P_CENTRAL_LOWPWR_CFG)) { | 283 | if (!(tmp & S5P_CENTRAL_LOWPWR_CFG)) { |
283 | tmp |= S5P_CENTRAL_LOWPWR_CFG; | 284 | tmp |= S5P_CENTRAL_LOWPWR_CFG; |
284 | __raw_writel(tmp, S5P_CENTRAL_SEQ_CONFIGURATION); | 285 | __raw_writel(tmp, S5P_CENTRAL_SEQ_CONFIGURATION); |
286 | /* clear the wakeup state register */ | ||
287 | __raw_writel(0x0, S5P_WAKEUP_STAT); | ||
285 | /* No need to perform below restore code */ | 288 | /* No need to perform below restore code */ |
286 | goto early_wakeup; | 289 | goto early_wakeup; |
287 | } | 290 | } |
diff --git a/arch/arm/mach-exynos/pmu.c b/arch/arm/mach-exynos/pmu.c index 3a48c852be6c..daebc1abc966 100644 --- a/arch/arm/mach-exynos/pmu.c +++ b/arch/arm/mach-exynos/pmu.c | |||
@@ -14,7 +14,8 @@ | |||
14 | #include <linux/bug.h> | 14 | #include <linux/bug.h> |
15 | 15 | ||
16 | #include <mach/regs-clock.h> | 16 | #include <mach/regs-clock.h> |
17 | #include <mach/pmu.h> | 17 | |
18 | #include "common.h" | ||
18 | 19 | ||
19 | static struct exynos_pmu_conf *exynos_pmu_config; | 20 | static struct exynos_pmu_conf *exynos_pmu_config; |
20 | 21 | ||
diff --git a/arch/arm/mach-footbridge/include/mach/uncompress.h b/arch/arm/mach-footbridge/include/mach/uncompress.h index 5dfa44287346..a69398c05a52 100644 --- a/arch/arm/mach-footbridge/include/mach/uncompress.h +++ b/arch/arm/mach-footbridge/include/mach/uncompress.h | |||
@@ -35,4 +35,3 @@ static inline void flush(void) | |||
35 | * nothing to do | 35 | * nothing to do |
36 | */ | 36 | */ |
37 | #define arch_decomp_setup() | 37 | #define arch_decomp_setup() |
38 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-gemini/include/mach/uncompress.h b/arch/arm/mach-gemini/include/mach/uncompress.h index 0efa26247235..02e225673acb 100644 --- a/arch/arm/mach-gemini/include/mach/uncompress.h +++ b/arch/arm/mach-gemini/include/mach/uncompress.h | |||
@@ -39,6 +39,4 @@ static inline void flush(void) | |||
39 | */ | 39 | */ |
40 | #define arch_decomp_setup() | 40 | #define arch_decomp_setup() |
41 | 41 | ||
42 | #define arch_decomp_wdog() | ||
43 | |||
44 | #endif /* __MACH_UNCOMPRESS_H */ | 42 | #endif /* __MACH_UNCOMPRESS_H */ |
diff --git a/arch/arm/mach-h720x/include/mach/uncompress.h b/arch/arm/mach-h720x/include/mach/uncompress.h index d6623234f61e..43e343c4b50a 100644 --- a/arch/arm/mach-h720x/include/mach/uncompress.h +++ b/arch/arm/mach-h720x/include/mach/uncompress.h | |||
@@ -32,6 +32,5 @@ static inline void flush(void) | |||
32 | * nothing to do | 32 | * nothing to do |
33 | */ | 33 | */ |
34 | #define arch_decomp_setup() | 34 | #define arch_decomp_setup() |
35 | #define arch_decomp_wdog() | ||
36 | 35 | ||
37 | #endif | 36 | #endif |
diff --git a/arch/arm/mach-highbank/Kconfig b/arch/arm/mach-highbank/Kconfig index 551c97e87a78..44b12f9c1584 100644 --- a/arch/arm/mach-highbank/Kconfig +++ b/arch/arm/mach-highbank/Kconfig | |||
@@ -1,5 +1,7 @@ | |||
1 | config ARCH_HIGHBANK | 1 | config ARCH_HIGHBANK |
2 | bool "Calxeda ECX-1000/2000 (Highbank/Midway)" if ARCH_MULTI_V7 | 2 | bool "Calxeda ECX-1000/2000 (Highbank/Midway)" if ARCH_MULTI_V7 |
3 | select ARCH_HAS_CPUFREQ | ||
4 | select ARCH_HAS_OPP | ||
3 | select ARCH_WANT_OPTIONAL_GPIOLIB | 5 | select ARCH_WANT_OPTIONAL_GPIOLIB |
4 | select ARM_AMBA | 6 | select ARM_AMBA |
5 | select ARM_GIC | 7 | select ARM_GIC |
@@ -11,5 +13,7 @@ config ARCH_HIGHBANK | |||
11 | select GENERIC_CLOCKEVENTS | 13 | select GENERIC_CLOCKEVENTS |
12 | select HAVE_ARM_SCU | 14 | select HAVE_ARM_SCU |
13 | select HAVE_SMP | 15 | select HAVE_SMP |
16 | select MAILBOX | ||
17 | select PL320_MBOX | ||
14 | select SPARSE_IRQ | 18 | select SPARSE_IRQ |
15 | select USE_OF | 19 | select USE_OF |
diff --git a/arch/arm/mach-highbank/core.h b/arch/arm/mach-highbank/core.h index 80235b46cb58..3f65206a9b92 100644 --- a/arch/arm/mach-highbank/core.h +++ b/arch/arm/mach-highbank/core.h | |||
@@ -2,7 +2,6 @@ | |||
2 | #define __HIGHBANK_CORE_H | 2 | #define __HIGHBANK_CORE_H |
3 | 3 | ||
4 | extern void highbank_set_cpu_jump(int cpu, void *jump_addr); | 4 | extern void highbank_set_cpu_jump(int cpu, void *jump_addr); |
5 | extern void highbank_clocks_init(void); | ||
6 | extern void highbank_restart(char, const char *); | 5 | extern void highbank_restart(char, const char *); |
7 | extern void __iomem *scu_base_addr; | 6 | extern void __iomem *scu_base_addr; |
8 | 7 | ||
diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c index fd630bccbd31..a4f9f50247d4 100644 --- a/arch/arm/mach-highbank/highbank.c +++ b/arch/arm/mach-highbank/highbank.c | |||
@@ -26,9 +26,11 @@ | |||
26 | #include <linux/of_address.h> | 26 | #include <linux/of_address.h> |
27 | #include <linux/smp.h> | 27 | #include <linux/smp.h> |
28 | #include <linux/amba/bus.h> | 28 | #include <linux/amba/bus.h> |
29 | #include <linux/clk-provider.h> | ||
29 | 30 | ||
30 | #include <asm/arch_timer.h> | 31 | #include <asm/arch_timer.h> |
31 | #include <asm/cacheflush.h> | 32 | #include <asm/cacheflush.h> |
33 | #include <asm/cputype.h> | ||
32 | #include <asm/smp_plat.h> | 34 | #include <asm/smp_plat.h> |
33 | #include <asm/smp_twd.h> | 35 | #include <asm/smp_twd.h> |
34 | #include <asm/hardware/arm_timer.h> | 36 | #include <asm/hardware/arm_timer.h> |
@@ -59,7 +61,7 @@ static void __init highbank_scu_map_io(void) | |||
59 | 61 | ||
60 | void highbank_set_cpu_jump(int cpu, void *jump_addr) | 62 | void highbank_set_cpu_jump(int cpu, void *jump_addr) |
61 | { | 63 | { |
62 | cpu = cpu_logical_map(cpu); | 64 | cpu = MPIDR_AFFINITY_LEVEL(cpu_logical_map(cpu), 0); |
63 | writel(virt_to_phys(jump_addr), HB_JUMP_TABLE_VIRT(cpu)); | 65 | writel(virt_to_phys(jump_addr), HB_JUMP_TABLE_VIRT(cpu)); |
64 | __cpuc_flush_dcache_area(HB_JUMP_TABLE_VIRT(cpu), 16); | 66 | __cpuc_flush_dcache_area(HB_JUMP_TABLE_VIRT(cpu), 16); |
65 | outer_clean_range(HB_JUMP_TABLE_PHYS(cpu), | 67 | outer_clean_range(HB_JUMP_TABLE_PHYS(cpu), |
@@ -110,7 +112,7 @@ static void __init highbank_timer_init(void) | |||
110 | WARN_ON(!timer_base); | 112 | WARN_ON(!timer_base); |
111 | irq = irq_of_parse_and_map(np, 0); | 113 | irq = irq_of_parse_and_map(np, 0); |
112 | 114 | ||
113 | highbank_clocks_init(); | 115 | of_clk_init(NULL); |
114 | lookup.clk = of_clk_get(np, 0); | 116 | lookup.clk = of_clk_get(np, 0); |
115 | clkdev_add(&lookup); | 117 | clkdev_add(&lookup); |
116 | 118 | ||
diff --git a/arch/arm/mach-highbank/sysregs.h b/arch/arm/mach-highbank/sysregs.h index 70af9d13fcef..5995df7f2622 100644 --- a/arch/arm/mach-highbank/sysregs.h +++ b/arch/arm/mach-highbank/sysregs.h | |||
@@ -37,7 +37,7 @@ extern void __iomem *sregs_base; | |||
37 | 37 | ||
38 | static inline void highbank_set_core_pwr(void) | 38 | static inline void highbank_set_core_pwr(void) |
39 | { | 39 | { |
40 | int cpu = cpu_logical_map(smp_processor_id()); | 40 | int cpu = MPIDR_AFFINITY_LEVEL(cpu_logical_map(smp_processor_id()), 0); |
41 | if (scu_base_addr) | 41 | if (scu_base_addr) |
42 | scu_power_mode(scu_base_addr, SCU_PM_POWEROFF); | 42 | scu_power_mode(scu_base_addr, SCU_PM_POWEROFF); |
43 | else | 43 | else |
@@ -46,7 +46,7 @@ static inline void highbank_set_core_pwr(void) | |||
46 | 46 | ||
47 | static inline void highbank_clear_core_pwr(void) | 47 | static inline void highbank_clear_core_pwr(void) |
48 | { | 48 | { |
49 | int cpu = cpu_logical_map(smp_processor_id()); | 49 | int cpu = MPIDR_AFFINITY_LEVEL(cpu_logical_map(smp_processor_id()), 0); |
50 | if (scu_base_addr) | 50 | if (scu_base_addr) |
51 | scu_power_mode(scu_base_addr, SCU_PM_NORMAL); | 51 | scu_power_mode(scu_base_addr, SCU_PM_NORMAL); |
52 | else | 52 | else |
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 7b11d3329e81..4c9c6f9d2c55 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig | |||
@@ -480,7 +480,7 @@ config MACH_MX31ADS_WM1133_EV1 | |||
480 | bool "Support Wolfson Microelectronics 1133-EV1 module" | 480 | bool "Support Wolfson Microelectronics 1133-EV1 module" |
481 | depends on MACH_MX31ADS | 481 | depends on MACH_MX31ADS |
482 | depends on MFD_WM8350_I2C | 482 | depends on MFD_WM8350_I2C |
483 | depends on REGULATOR_WM8350 | 483 | depends on REGULATOR_WM8350 = y |
484 | select MFD_WM8350_CONFIG_MODE_0 | 484 | select MFD_WM8350_CONFIG_MODE_0 |
485 | select MFD_WM8352_CONFIG_MODE_0 | 485 | select MFD_WM8352_CONFIG_MODE_0 |
486 | help | 486 | help |
diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c index 2c570cdaae7b..69858c78f40d 100644 --- a/arch/arm/mach-imx/clk-imx25.c +++ b/arch/arm/mach-imx/clk-imx25.c | |||
@@ -224,6 +224,9 @@ static int __init __mx25_clocks_init(unsigned long osc_rate) | |||
224 | 224 | ||
225 | clk_prepare_enable(clk[emi_ahb]); | 225 | clk_prepare_enable(clk[emi_ahb]); |
226 | 226 | ||
227 | /* Clock source for gpt must be derived from AHB */ | ||
228 | clk_set_parent(clk[per5_sel], clk[ahb]); | ||
229 | |||
227 | clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0"); | 230 | clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0"); |
228 | clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); | 231 | clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); |
229 | 232 | ||
diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index d24b0d68e83f..30b3242a7d49 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c | |||
@@ -229,9 +229,12 @@ int __init mx27_clocks_init(unsigned long fref) | |||
229 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.1"); | 229 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.1"); |
230 | clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.2"); | 230 | clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.2"); |
231 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.2"); | 231 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.2"); |
232 | clk_register_clkdev(clk[cspi1_ipg_gate], NULL, "imx27-cspi.0"); | 232 | clk_register_clkdev(clk[per2_gate], "per", "imx27-cspi.0"); |
233 | clk_register_clkdev(clk[cspi2_ipg_gate], NULL, "imx27-cspi.1"); | 233 | clk_register_clkdev(clk[cspi1_ipg_gate], "ipg", "imx27-cspi.0"); |
234 | clk_register_clkdev(clk[cspi3_ipg_gate], NULL, "imx27-cspi.2"); | 234 | clk_register_clkdev(clk[per2_gate], "per", "imx27-cspi.1"); |
235 | clk_register_clkdev(clk[cspi2_ipg_gate], "ipg", "imx27-cspi.1"); | ||
236 | clk_register_clkdev(clk[per2_gate], "per", "imx27-cspi.2"); | ||
237 | clk_register_clkdev(clk[cspi3_ipg_gate], "ipg", "imx27-cspi.2"); | ||
235 | clk_register_clkdev(clk[per3_gate], "per", "imx21-fb.0"); | 238 | clk_register_clkdev(clk[per3_gate], "per", "imx21-fb.0"); |
236 | clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx21-fb.0"); | 239 | clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx21-fb.0"); |
237 | clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx21-fb.0"); | 240 | clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx21-fb.0"); |
diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c index 00737eb4e00d..67de611e29ab 100644 --- a/arch/arm/mach-imx/imx31-dt.c +++ b/arch/arm/mach-imx/imx31-dt.c | |||
@@ -28,12 +28,17 @@ static const char *imx31_dt_board_compat[] __initdata = { | |||
28 | NULL | 28 | NULL |
29 | }; | 29 | }; |
30 | 30 | ||
31 | static void __init imx31_dt_timer_init(void) | ||
32 | { | ||
33 | mx31_clocks_init_dt(); | ||
34 | } | ||
35 | |||
31 | DT_MACHINE_START(IMX31_DT, "Freescale i.MX31 (Device Tree Support)") | 36 | DT_MACHINE_START(IMX31_DT, "Freescale i.MX31 (Device Tree Support)") |
32 | .map_io = mx31_map_io, | 37 | .map_io = mx31_map_io, |
33 | .init_early = imx31_init_early, | 38 | .init_early = imx31_init_early, |
34 | .init_irq = mx31_init_irq, | 39 | .init_irq = mx31_init_irq, |
35 | .handle_irq = imx31_handle_irq, | 40 | .handle_irq = imx31_handle_irq, |
36 | .init_time = mx31_clocks_init_dt, | 41 | .init_time = imx31_dt_timer_init, |
37 | .init_machine = imx31_dt_init, | 42 | .init_machine = imx31_dt_init, |
38 | .dt_compat = imx31_dt_board_compat, | 43 | .dt_compat = imx31_dt_board_compat, |
39 | .restart = mxc_restart, | 44 | .restart = mxc_restart, |
diff --git a/arch/arm/mach-integrator/common.h b/arch/arm/mach-integrator/common.h index 79197d8b34aa..72516658be1e 100644 --- a/arch/arm/mach-integrator/common.h +++ b/arch/arm/mach-integrator/common.h | |||
@@ -1,10 +1,5 @@ | |||
1 | #include <linux/amba/serial.h> | 1 | #include <linux/amba/serial.h> |
2 | #ifdef CONFIG_ARCH_INTEGRATOR_AP | ||
3 | extern struct amba_pl010_data ap_uart_data; | 2 | extern struct amba_pl010_data ap_uart_data; |
4 | #else | ||
5 | /* Not used without Integrator/AP support anyway */ | ||
6 | struct amba_pl010_data ap_uart_data {}; | ||
7 | #endif | ||
8 | void integrator_init_early(void); | 3 | void integrator_init_early(void); |
9 | int integrator_init(bool is_cp); | 4 | int integrator_init(bool is_cp); |
10 | void integrator_reserve(void); | 5 | void integrator_reserve(void); |
diff --git a/arch/arm/mach-integrator/core.c b/arch/arm/mach-integrator/core.c index 39c060f75e47..81461d218717 100644 --- a/arch/arm/mach-integrator/core.c +++ b/arch/arm/mach-integrator/core.c | |||
@@ -71,7 +71,7 @@ int __init integrator_init(bool is_cp) | |||
71 | * hard-code them. The Integator/CP and forward have proper cell IDs. | 71 | * hard-code them. The Integator/CP and forward have proper cell IDs. |
72 | * Else we leave them undefined to the bus driver can autoprobe them. | 72 | * Else we leave them undefined to the bus driver can autoprobe them. |
73 | */ | 73 | */ |
74 | if (!is_cp) { | 74 | if (!is_cp && IS_ENABLED(CONFIG_ARCH_INTEGRATOR_AP)) { |
75 | rtc_device.periphid = 0x00041030; | 75 | rtc_device.periphid = 0x00041030; |
76 | uart0_device.periphid = 0x00041010; | 76 | uart0_device.periphid = 0x00041010; |
77 | uart1_device.periphid = 0x00041010; | 77 | uart1_device.periphid = 0x00041010; |
diff --git a/arch/arm/mach-integrator/include/mach/uncompress.h b/arch/arm/mach-integrator/include/mach/uncompress.h index 30452f00a164..8f3cc9954c16 100644 --- a/arch/arm/mach-integrator/include/mach/uncompress.h +++ b/arch/arm/mach-integrator/include/mach/uncompress.h | |||
@@ -46,5 +46,3 @@ static inline void flush(void) | |||
46 | * nothing to do | 46 | * nothing to do |
47 | */ | 47 | */ |
48 | #define arch_decomp_setup() | 48 | #define arch_decomp_setup() |
49 | |||
50 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c index 78f1b3814f77..ea961445e0e9 100644 --- a/arch/arm/mach-integrator/integrator_ap.c +++ b/arch/arm/mach-integrator/integrator_ap.c | |||
@@ -94,7 +94,7 @@ void __iomem *ap_syscon_base; | |||
94 | * f1b00000 1b000000 GPIO | 94 | * f1b00000 1b000000 GPIO |
95 | */ | 95 | */ |
96 | 96 | ||
97 | static struct map_desc ap_io_desc[] __initdata = { | 97 | static struct map_desc ap_io_desc[] __initdata __maybe_unused = { |
98 | { | 98 | { |
99 | .virtual = IO_ADDRESS(INTEGRATOR_HDR_BASE), | 99 | .virtual = IO_ADDRESS(INTEGRATOR_HDR_BASE), |
100 | .pfn = __phys_to_pfn(INTEGRATOR_HDR_BASE), | 100 | .pfn = __phys_to_pfn(INTEGRATOR_HDR_BASE), |
@@ -609,7 +609,6 @@ static struct map_desc ap_io_desc_atag[] __initdata = { | |||
609 | static void __init ap_map_io_atag(void) | 609 | static void __init ap_map_io_atag(void) |
610 | { | 610 | { |
611 | iotable_init(ap_io_desc_atag, ARRAY_SIZE(ap_io_desc_atag)); | 611 | iotable_init(ap_io_desc_atag, ARRAY_SIZE(ap_io_desc_atag)); |
612 | ap_syscon_base = __io_address(INTEGRATOR_SC_BASE); | ||
613 | ap_map_io(); | 612 | ap_map_io(); |
614 | } | 613 | } |
615 | 614 | ||
@@ -677,6 +676,7 @@ static void __init ap_init(void) | |||
677 | 676 | ||
678 | platform_device_register(&cfi_flash_device); | 677 | platform_device_register(&cfi_flash_device); |
679 | 678 | ||
679 | ap_syscon_base = __io_address(INTEGRATOR_SC_BASE); | ||
680 | sc_dec = readl(ap_syscon_base + INTEGRATOR_SC_DEC_OFFSET); | 680 | sc_dec = readl(ap_syscon_base + INTEGRATOR_SC_DEC_OFFSET); |
681 | for (i = 0; i < 4; i++) { | 681 | for (i = 0; i < 4; i++) { |
682 | struct lm_device *lmdev; | 682 | struct lm_device *lmdev; |
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c index 4cef9a0ebbb9..2b0db82a5381 100644 --- a/arch/arm/mach-integrator/integrator_cp.c +++ b/arch/arm/mach-integrator/integrator_cp.c | |||
@@ -78,7 +78,7 @@ static void __iomem *intcp_con_base; | |||
78 | * fcb00000 cb000000 CP system control | 78 | * fcb00000 cb000000 CP system control |
79 | */ | 79 | */ |
80 | 80 | ||
81 | static struct map_desc intcp_io_desc[] __initdata = { | 81 | static struct map_desc intcp_io_desc[] __initdata __maybe_unused = { |
82 | { | 82 | { |
83 | .virtual = IO_ADDRESS(INTEGRATOR_HDR_BASE), | 83 | .virtual = IO_ADDRESS(INTEGRATOR_HDR_BASE), |
84 | .pfn = __phys_to_pfn(INTEGRATOR_HDR_BASE), | 84 | .pfn = __phys_to_pfn(INTEGRATOR_HDR_BASE), |
diff --git a/arch/arm/mach-iop13xx/include/mach/uncompress.h b/arch/arm/mach-iop13xx/include/mach/uncompress.h index fa4f80522fad..d3791ece2772 100644 --- a/arch/arm/mach-iop13xx/include/mach/uncompress.h +++ b/arch/arm/mach-iop13xx/include/mach/uncompress.h | |||
@@ -20,4 +20,3 @@ static inline void flush(void) | |||
20 | * nothing to do | 20 | * nothing to do |
21 | */ | 21 | */ |
22 | #define arch_decomp_setup() | 22 | #define arch_decomp_setup() |
23 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-iop32x/include/mach/uncompress.h b/arch/arm/mach-iop32x/include/mach/uncompress.h index 4fd715496f45..b3d45fd365e7 100644 --- a/arch/arm/mach-iop32x/include/mach/uncompress.h +++ b/arch/arm/mach-iop32x/include/mach/uncompress.h | |||
@@ -36,4 +36,3 @@ static __inline__ void __arch_decomp_setup(unsigned long arch_id) | |||
36 | * nothing to do | 36 | * nothing to do |
37 | */ | 37 | */ |
38 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) | 38 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) |
39 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-iop33x/include/mach/uncompress.h b/arch/arm/mach-iop33x/include/mach/uncompress.h index f99bb848c5a1..ed282e14176d 100644 --- a/arch/arm/mach-iop33x/include/mach/uncompress.h +++ b/arch/arm/mach-iop33x/include/mach/uncompress.h | |||
@@ -34,4 +34,3 @@ static __inline__ void __arch_decomp_setup(unsigned long arch_id) | |||
34 | * nothing to do | 34 | * nothing to do |
35 | */ | 35 | */ |
36 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) | 36 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) |
37 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/uncompress.h b/arch/arm/mach-ixp4xx/include/mach/uncompress.h index eb945a926d07..7b25c0225e46 100644 --- a/arch/arm/mach-ixp4xx/include/mach/uncompress.h +++ b/arch/arm/mach-ixp4xx/include/mach/uncompress.h | |||
@@ -53,6 +53,4 @@ static __inline__ void __arch_decomp_setup(unsigned long arch_id) | |||
53 | */ | 53 | */ |
54 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) | 54 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) |
55 | 55 | ||
56 | #define arch_decomp_wdog() | ||
57 | |||
58 | #endif | 56 | #endif |
diff --git a/arch/arm/mach-kirkwood/board-ib62x0.c b/arch/arm/mach-kirkwood/board-ib62x0.c index 9f6f496380d8..9a857ae83984 100644 --- a/arch/arm/mach-kirkwood/board-ib62x0.c +++ b/arch/arm/mach-kirkwood/board-ib62x0.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/mv643xx_eth.h> | 16 | #include <linux/mv643xx_eth.h> |
17 | #include <linux/input.h> | ||
18 | #include "common.h" | 17 | #include "common.h" |
19 | 18 | ||
20 | static struct mv643xx_eth_platform_data ib62x0_ge00_data = { | 19 | static struct mv643xx_eth_platform_data ib62x0_ge00_data = { |
diff --git a/arch/arm/mach-kirkwood/board-mplcec4.c b/arch/arm/mach-kirkwood/board-mplcec4.c index 56bfe5a1605a..3264925b8318 100644 --- a/arch/arm/mach-kirkwood/board-mplcec4.c +++ b/arch/arm/mach-kirkwood/board-mplcec4.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <linux/mv643xx_eth.h> | 14 | #include <linux/mv643xx_eth.h> |
15 | #include <linux/platform_data/mmc-mvsdio.h> | 15 | #include <linux/platform_data/mmc-mvsdio.h> |
16 | #include "common.h" | 16 | #include "common.h" |
17 | #include "mpp.h" | ||
18 | 17 | ||
19 | static struct mv643xx_eth_platform_data mplcec4_ge00_data = { | 18 | static struct mv643xx_eth_platform_data mplcec4_ge00_data = { |
20 | .phy_addr = MV643XX_ETH_PHY_ADDR(1), | 19 | .phy_addr = MV643XX_ETH_PHY_ADDR(1), |
diff --git a/arch/arm/mach-kirkwood/board-nsa310.c b/arch/arm/mach-kirkwood/board-nsa310.c index f58d2e1a4042..970174ad4a70 100644 --- a/arch/arm/mach-kirkwood/board-nsa310.c +++ b/arch/arm/mach-kirkwood/board-nsa310.c | |||
@@ -10,12 +10,10 @@ | |||
10 | 10 | ||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/i2c.h> | ||
14 | #include <linux/gpio.h> | 13 | #include <linux/gpio.h> |
15 | 14 | #include <linux/i2c.h> | |
16 | #include <asm/mach-types.h> | ||
17 | #include <asm/mach/arch.h> | ||
18 | #include <mach/kirkwood.h> | 15 | #include <mach/kirkwood.h> |
16 | #include <linux/of.h> | ||
19 | #include "common.h" | 17 | #include "common.h" |
20 | #include "mpp.h" | 18 | #include "mpp.h" |
21 | 19 | ||
@@ -79,14 +77,10 @@ static void __init nsa310_gpio_init(void) | |||
79 | 77 | ||
80 | void __init nsa310_init(void) | 78 | void __init nsa310_init(void) |
81 | { | 79 | { |
82 | u32 dev, rev; | ||
83 | |||
84 | kirkwood_mpp_conf(nsa310_mpp_config); | 80 | kirkwood_mpp_conf(nsa310_mpp_config); |
85 | 81 | ||
86 | nsa310_gpio_init(); | 82 | nsa310_gpio_init(); |
87 | 83 | ||
88 | kirkwood_pcie_id(&dev, &rev); | ||
89 | |||
90 | i2c_register_board_info(0, ARRAY_AND_SIZE(nsa310_i2c_info)); | 84 | i2c_register_board_info(0, ARRAY_AND_SIZE(nsa310_i2c_info)); |
91 | } | 85 | } |
92 | 86 | ||
diff --git a/arch/arm/mach-kirkwood/dockstar-setup.c b/arch/arm/mach-kirkwood/dockstar-setup.c index 77f98f2b0416..060ccf9cb63f 100644 --- a/arch/arm/mach-kirkwood/dockstar-setup.c +++ b/arch/arm/mach-kirkwood/dockstar-setup.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <asm/mach-types.h> | 19 | #include <asm/mach-types.h> |
20 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
21 | #include <mach/kirkwood.h> | 21 | #include <mach/kirkwood.h> |
22 | #include <linux/platform_data/mmc-mvsdio.h> | ||
23 | #include "common.h" | 22 | #include "common.h" |
24 | #include "mpp.h" | 23 | #include "mpp.h" |
25 | 24 | ||
diff --git a/arch/arm/mach-kirkwood/include/mach/uncompress.h b/arch/arm/mach-kirkwood/include/mach/uncompress.h index 75d5497df3a8..5bca5534021f 100644 --- a/arch/arm/mach-kirkwood/include/mach/uncompress.h +++ b/arch/arm/mach-kirkwood/include/mach/uncompress.h | |||
@@ -44,4 +44,3 @@ static void flush(void) | |||
44 | * nothing to do | 44 | * nothing to do |
45 | */ | 45 | */ |
46 | #define arch_decomp_setup() | 46 | #define arch_decomp_setup() |
47 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-ks8695/include/mach/uncompress.h b/arch/arm/mach-ks8695/include/mach/uncompress.h index 8879d610308a..c089a1aea674 100644 --- a/arch/arm/mach-ks8695/include/mach/uncompress.h +++ b/arch/arm/mach-ks8695/include/mach/uncompress.h | |||
@@ -32,6 +32,5 @@ static inline void flush(void) | |||
32 | } | 32 | } |
33 | 33 | ||
34 | #define arch_decomp_setup() | 34 | #define arch_decomp_setup() |
35 | #define arch_decomp_wdog() | ||
36 | 35 | ||
37 | #endif | 36 | #endif |
diff --git a/arch/arm/mach-lpc32xx/include/mach/uncompress.h b/arch/arm/mach-lpc32xx/include/mach/uncompress.h index c142487d299a..1198a89183cd 100644 --- a/arch/arm/mach-lpc32xx/include/mach/uncompress.h +++ b/arch/arm/mach-lpc32xx/include/mach/uncompress.h | |||
@@ -55,6 +55,5 @@ static inline void flush(void) | |||
55 | 55 | ||
56 | /* NULL functions; we don't presently need them */ | 56 | /* NULL functions; we don't presently need them */ |
57 | #define arch_decomp_setup() | 57 | #define arch_decomp_setup() |
58 | #define arch_decomp_wdog() | ||
59 | 58 | ||
60 | #endif | 59 | #endif |
diff --git a/arch/arm/mach-mmp/include/mach/uncompress.h b/arch/arm/mach-mmp/include/mach/uncompress.h index d6daeb7e4ef1..8890fa8fa771 100644 --- a/arch/arm/mach-mmp/include/mach/uncompress.h +++ b/arch/arm/mach-mmp/include/mach/uncompress.h | |||
@@ -43,9 +43,3 @@ static inline void arch_decomp_setup(void) | |||
43 | if (machine_is_avengers_lite()) | 43 | if (machine_is_avengers_lite()) |
44 | UART = (unsigned long *)UART3_BASE; | 44 | UART = (unsigned long *)UART3_BASE; |
45 | } | 45 | } |
46 | |||
47 | /* | ||
48 | * nothing to do | ||
49 | */ | ||
50 | |||
51 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-msm/include/mach/uncompress.h b/arch/arm/mach-msm/include/mach/uncompress.h index c14011fe832d..fa97a10d8695 100644 --- a/arch/arm/mach-msm/include/mach/uncompress.h +++ b/arch/arm/mach-msm/include/mach/uncompress.h | |||
@@ -60,8 +60,4 @@ static inline void arch_decomp_setup(void) | |||
60 | { | 60 | { |
61 | } | 61 | } |
62 | 62 | ||
63 | static inline void arch_decomp_wdog(void) | ||
64 | { | ||
65 | } | ||
66 | |||
67 | #endif | 63 | #endif |
diff --git a/arch/arm/mach-msm/proc_comm.h b/arch/arm/mach-msm/proc_comm.h index 12da4cacd4a8..e8d043a0e990 100644 --- a/arch/arm/mach-msm/proc_comm.h +++ b/arch/arm/mach-msm/proc_comm.h | |||
@@ -253,6 +253,6 @@ enum { | |||
253 | (((drvstr) & 0xF) << 17)) | 253 | (((drvstr) & 0xF) << 17)) |
254 | 254 | ||
255 | int msm_proc_comm(unsigned cmd, unsigned *data1, unsigned *data2); | 255 | int msm_proc_comm(unsigned cmd, unsigned *data1, unsigned *data2); |
256 | void __init proc_comm_boot_wait(void); | 256 | void proc_comm_boot_wait(void); |
257 | 257 | ||
258 | #endif | 258 | #endif |
diff --git a/arch/arm/mach-mv78xx0/include/mach/uncompress.h b/arch/arm/mach-mv78xx0/include/mach/uncompress.h index 365264298e79..6a761c44a296 100644 --- a/arch/arm/mach-mv78xx0/include/mach/uncompress.h +++ b/arch/arm/mach-mv78xx0/include/mach/uncompress.h | |||
@@ -44,4 +44,3 @@ static void flush(void) | |||
44 | * nothing to do | 44 | * nothing to do |
45 | */ | 45 | */ |
46 | #define arch_decomp_setup() | 46 | #define arch_decomp_setup() |
47 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-mvebu/Makefile b/arch/arm/mach-mvebu/Makefile index 99df4df680fd..da93bcbc74c1 100644 --- a/arch/arm/mach-mvebu/Makefile +++ b/arch/arm/mach-mvebu/Makefile | |||
@@ -3,7 +3,8 @@ ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \ | |||
3 | 3 | ||
4 | AFLAGS_coherency_ll.o := -Wa,-march=armv7-a | 4 | AFLAGS_coherency_ll.o := -Wa,-march=armv7-a |
5 | 5 | ||
6 | obj-y += system-controller.o | 6 | obj-y += system-controller.o |
7 | obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o irq-armada-370-xp.o addr-map.o coherency.o coherency_ll.o pmsu.o | 7 | obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o |
8 | obj-$(CONFIG_ARCH_MVEBU) += addr-map.o coherency.o coherency_ll.o pmsu.o irq-armada-370-xp.o | ||
8 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o | 9 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o |
9 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o | 10 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o |
diff --git a/arch/arm/mach-mxs/include/mach/uncompress.h b/arch/arm/mach-mxs/include/mach/uncompress.h index ef2811495446..533f5186e200 100644 --- a/arch/arm/mach-mxs/include/mach/uncompress.h +++ b/arch/arm/mach-mxs/include/mach/uncompress.h | |||
@@ -72,6 +72,5 @@ static inline void __arch_decomp_setup(unsigned long arch_id) | |||
72 | } | 72 | } |
73 | 73 | ||
74 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) | 74 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) |
75 | #define arch_decomp_wdog() | ||
76 | 75 | ||
77 | #endif /* __MACH_MXS_UNCOMPRESS_H__ */ | 76 | #endif /* __MACH_MXS_UNCOMPRESS_H__ */ |
diff --git a/arch/arm/mach-netx/include/mach/uncompress.h b/arch/arm/mach-netx/include/mach/uncompress.h index 84f91284f612..5cb1051b5831 100644 --- a/arch/arm/mach-netx/include/mach/uncompress.h +++ b/arch/arm/mach-netx/include/mach/uncompress.h | |||
@@ -73,4 +73,3 @@ static inline void flush(void) | |||
73 | * nothing to do | 73 | * nothing to do |
74 | */ | 74 | */ |
75 | #define arch_decomp_setup() | 75 | #define arch_decomp_setup() |
76 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-nomadik/include/mach/uncompress.h b/arch/arm/mach-nomadik/include/mach/uncompress.h index 7d4687e9cbdf..f527af6527c8 100644 --- a/arch/arm/mach-nomadik/include/mach/uncompress.h +++ b/arch/arm/mach-nomadik/include/mach/uncompress.h | |||
@@ -58,6 +58,4 @@ static inline void arch_decomp_setup(void) | |||
58 | { | 58 | { |
59 | } | 59 | } |
60 | 60 | ||
61 | #define arch_decomp_wdog() /* nothing to do here */ | ||
62 | |||
63 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ | 61 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ |
diff --git a/arch/arm/mach-omap1/dma.c b/arch/arm/mach-omap1/dma.c index e190611e4b46..1a4e887f028d 100644 --- a/arch/arm/mach-omap1/dma.c +++ b/arch/arm/mach-omap1/dma.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/device.h> | 25 | #include <linux/device.h> |
26 | #include <linux/io.h> | 26 | #include <linux/io.h> |
27 | 27 | #include <linux/dma-mapping.h> | |
28 | #include <linux/omap-dma.h> | 28 | #include <linux/omap-dma.h> |
29 | #include <mach/tc.h> | 29 | #include <mach/tc.h> |
30 | 30 | ||
@@ -270,11 +270,17 @@ static u32 configure_dma_errata(void) | |||
270 | return errata; | 270 | return errata; |
271 | } | 271 | } |
272 | 272 | ||
273 | static const struct platform_device_info omap_dma_dev_info = { | ||
274 | .name = "omap-dma-engine", | ||
275 | .id = -1, | ||
276 | .dma_mask = DMA_BIT_MASK(32), | ||
277 | }; | ||
278 | |||
273 | static int __init omap1_system_dma_init(void) | 279 | static int __init omap1_system_dma_init(void) |
274 | { | 280 | { |
275 | struct omap_system_dma_plat_info *p; | 281 | struct omap_system_dma_plat_info *p; |
276 | struct omap_dma_dev_attr *d; | 282 | struct omap_dma_dev_attr *d; |
277 | struct platform_device *pdev; | 283 | struct platform_device *pdev, *dma_pdev; |
278 | int ret; | 284 | int ret; |
279 | 285 | ||
280 | pdev = platform_device_alloc("omap_dma_system", 0); | 286 | pdev = platform_device_alloc("omap_dma_system", 0); |
@@ -380,8 +386,16 @@ static int __init omap1_system_dma_init(void) | |||
380 | dma_common_ch_start = CPC; | 386 | dma_common_ch_start = CPC; |
381 | dma_common_ch_end = COLOR; | 387 | dma_common_ch_end = COLOR; |
382 | 388 | ||
389 | dma_pdev = platform_device_register_full(&omap_dma_dev_info); | ||
390 | if (IS_ERR(dma_pdev)) { | ||
391 | ret = PTR_ERR(dma_pdev); | ||
392 | goto exit_release_pdev; | ||
393 | } | ||
394 | |||
383 | return ret; | 395 | return ret; |
384 | 396 | ||
397 | exit_release_pdev: | ||
398 | platform_device_del(pdev); | ||
385 | exit_release_chan: | 399 | exit_release_chan: |
386 | kfree(d->chan); | 400 | kfree(d->chan); |
387 | exit_release_d: | 401 | exit_release_d: |
diff --git a/arch/arm/mach-omap1/i2c.c b/arch/arm/mach-omap1/i2c.c index faca808cb3d9..7f5761cffd2e 100644 --- a/arch/arm/mach-omap1/i2c.c +++ b/arch/arm/mach-omap1/i2c.c | |||
@@ -91,3 +91,9 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *pdata, | |||
91 | 91 | ||
92 | return platform_device_register(pdev); | 92 | return platform_device_register(pdev); |
93 | } | 93 | } |
94 | |||
95 | static int __init omap_i2c_cmdline(void) | ||
96 | { | ||
97 | return omap_register_i2c_bus_cmdline(); | ||
98 | } | ||
99 | subsys_initcall(omap_i2c_cmdline); | ||
diff --git a/arch/arm/mach-omap1/include/mach/uncompress.h b/arch/arm/mach-omap1/include/mach/uncompress.h index ad6fbe7d83f2..4869633de8cd 100644 --- a/arch/arm/mach-omap1/include/mach/uncompress.h +++ b/arch/arm/mach-omap1/include/mach/uncompress.h | |||
@@ -115,8 +115,3 @@ static inline void arch_decomp_setup(void) | |||
115 | DEBUG_LL_OMAP1(3, sx1); | 115 | DEBUG_LL_OMAP1(3, sx1); |
116 | } while (0); | 116 | } while (0); |
117 | } | 117 | } |
118 | |||
119 | /* | ||
120 | * nothing to do | ||
121 | */ | ||
122 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 41b581fd0213..c3c033f283a9 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
@@ -1,3 +1,26 @@ | |||
1 | config ARCH_OMAP | ||
2 | bool | ||
3 | |||
4 | config ARCH_OMAP2PLUS | ||
5 | bool "TI OMAP2/3/4/5 SoCs with device tree support" if (ARCH_MULTI_V6 || ARCH_MULTI_V7) | ||
6 | select ARCH_HAS_CPUFREQ | ||
7 | select ARCH_HAS_HOLES_MEMORYMODEL | ||
8 | select ARCH_OMAP | ||
9 | select ARCH_REQUIRE_GPIOLIB | ||
10 | select CLKDEV_LOOKUP | ||
11 | select CLKSRC_MMIO | ||
12 | select GENERIC_CLOCKEVENTS | ||
13 | select GENERIC_IRQ_CHIP | ||
14 | select HAVE_CLK | ||
15 | select OMAP_DM_TIMER | ||
16 | select PINCTRL | ||
17 | select PROC_DEVICETREE if PROC_FS | ||
18 | select SPARSE_IRQ | ||
19 | select USE_OF | ||
20 | help | ||
21 | Systems based on OMAP2, OMAP3, OMAP4 or OMAP5 | ||
22 | |||
23 | |||
1 | if ARCH_OMAP2PLUS | 24 | if ARCH_OMAP2PLUS |
2 | 25 | ||
3 | menu "TI OMAP2/3/4 Specific Features" | 26 | menu "TI OMAP2/3/4 Specific Features" |
@@ -397,7 +420,7 @@ config OMAP3_SDRC_AC_TIMING | |||
397 | 420 | ||
398 | config OMAP4_ERRATA_I688 | 421 | config OMAP4_ERRATA_I688 |
399 | bool "OMAP4 errata: Async Bridge Corruption" | 422 | bool "OMAP4 errata: Async Bridge Corruption" |
400 | depends on ARCH_OMAP4 | 423 | depends on ARCH_OMAP4 && !ARCH_MULTIPLATFORM |
401 | select ARCH_HAS_BARRIERS | 424 | select ARCH_HAS_BARRIERS |
402 | help | 425 | help |
403 | If a data is stalled inside asynchronous bridge because of back | 426 | If a data is stalled inside asynchronous bridge because of back |
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 947cafe65aef..65fb6fb38caf 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -2,6 +2,9 @@ | |||
2 | # Makefile for the linux kernel. | 2 | # Makefile for the linux kernel. |
3 | # | 3 | # |
4 | 4 | ||
5 | ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \ | ||
6 | -I$(srctree)/arch/arm/plat-omap/include | ||
7 | |||
5 | # Common support | 8 | # Common support |
6 | obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o gpmc.o timer.o pm.o \ | 9 | obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o gpmc.o timer.o pm.o \ |
7 | common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \ | 10 | common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \ |
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index 5f413968d568..a3e0aaa4886b 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/clk.h> | 27 | #include <linux/clk.h> |
28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
29 | #include <linux/gpio.h> | 29 | #include <linux/gpio.h> |
30 | #include <linux/usb/phy.h> | ||
30 | 31 | ||
31 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
32 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
@@ -263,6 +264,7 @@ static void __init omap_2430sdp_init(void) | |||
263 | omap_hsmmc_init(mmc); | 264 | omap_hsmmc_init(mmc); |
264 | 265 | ||
265 | omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP); | 266 | omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP); |
267 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
266 | usb_musb_init(NULL); | 268 | usb_musb_init(NULL); |
267 | 269 | ||
268 | board_smc91x_init(); | 270 | board_smc91x_init(); |
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index c22a981086f7..15a3914ab492 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/gpio.h> | 25 | #include <linux/gpio.h> |
26 | #include <linux/mmc/host.h> | 26 | #include <linux/mmc/host.h> |
27 | #include <linux/platform_data/spi-omap2-mcspi.h> | 27 | #include <linux/platform_data/spi-omap2-mcspi.h> |
28 | #include <linux/usb/phy.h> | ||
28 | 29 | ||
29 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
30 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
@@ -579,6 +580,7 @@ static void __init omap_3430sdp_init(void) | |||
579 | omap_ads7846_init(1, gpio_pendown, 310, NULL); | 580 | omap_ads7846_init(1, gpio_pendown, 310, NULL); |
580 | omap_serial_init(); | 581 | omap_serial_init(); |
581 | omap_sdrc_init(hyb18m512160af6_sdrc_params, NULL); | 582 | omap_sdrc_init(hyb18m512160af6_sdrc_params, NULL); |
583 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
582 | usb_musb_init(NULL); | 584 | usb_musb_init(NULL); |
583 | board_smc91x_init(); | 585 | board_smc91x_init(); |
584 | board_flash_init(sdp_flash_partitions, chip_sel_3430, 0); | 586 | board_flash_init(sdp_flash_partitions, chip_sel_3430, 0); |
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index f8eeef40efe8..508e2752b7de 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/irqchip/arm-gic.h> | 29 | #include <linux/irqchip/arm-gic.h> |
30 | #include <linux/platform_data/omap4-keypad.h> | 30 | #include <linux/platform_data/omap4-keypad.h> |
31 | #include <linux/usb/musb.h> | 31 | #include <linux/usb/musb.h> |
32 | #include <linux/usb/phy.h> | ||
32 | 33 | ||
33 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
34 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
@@ -696,6 +697,7 @@ static void __init omap_4430sdp_init(void) | |||
696 | omap4_sdp4430_wifi_init(); | 697 | omap4_sdp4430_wifi_init(); |
697 | omap4_twl6030_hsmmc_init(mmc); | 698 | omap4_twl6030_hsmmc_init(mmc); |
698 | 699 | ||
700 | usb_bind_phy("musb-hdrc.0.auto", 0, "omap-usb2.1.auto"); | ||
699 | usb_musb_init(&musb_board_data); | 701 | usb_musb_init(&musb_board_data); |
700 | 702 | ||
701 | status = omap_ethernet_init(); | 703 | status = omap_ethernet_init(); |
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index 343130c02bb0..10054e3c3482 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/regulator/fixed.h> | 30 | #include <linux/regulator/fixed.h> |
31 | #include <linux/regulator/machine.h> | 31 | #include <linux/regulator/machine.h> |
32 | #include <linux/mmc/host.h> | 32 | #include <linux/mmc/host.h> |
33 | #include <linux/usb/phy.h> | ||
33 | 34 | ||
34 | #include <linux/spi/spi.h> | 35 | #include <linux/spi/spi.h> |
35 | #include <linux/spi/tdo24m.h> | 36 | #include <linux/spi/tdo24m.h> |
@@ -724,6 +725,7 @@ static void __init cm_t3x_common_init(void) | |||
724 | cm_t35_init_display(); | 725 | cm_t35_init_display(); |
725 | omap_twl4030_audio_init("cm-t3x"); | 726 | omap_twl4030_audio_init("cm-t3x"); |
726 | 727 | ||
728 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
727 | usb_musb_init(NULL); | 729 | usb_musb_init(NULL); |
728 | cm_t35_init_usbh(); | 730 | cm_t35_init_usbh(); |
729 | cm_t35_init_camera(); | 731 | cm_t35_init_camera(); |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index f3a59c79caeb..4dadb0b7b808 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/mtd/partitions.h> | 29 | #include <linux/mtd/partitions.h> |
30 | #include <linux/mtd/nand.h> | 30 | #include <linux/mtd/nand.h> |
31 | #include <linux/mmc/host.h> | 31 | #include <linux/mmc/host.h> |
32 | #include <linux/usb/phy.h> | ||
32 | 33 | ||
33 | #include <linux/regulator/machine.h> | 34 | #include <linux/regulator/machine.h> |
34 | #include <linux/i2c/twl.h> | 35 | #include <linux/i2c/twl.h> |
@@ -622,6 +623,7 @@ static void __init devkit8000_init(void) | |||
622 | 623 | ||
623 | omap_ads7846_init(2, OMAP3_DEVKIT_TS_GPIO, 0, NULL); | 624 | omap_ads7846_init(2, OMAP3_DEVKIT_TS_GPIO, 0, NULL); |
624 | 625 | ||
626 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
625 | usb_musb_init(NULL); | 627 | usb_musb_init(NULL); |
626 | usbhs_init(&usbhs_bdata); | 628 | usbhs_init(&usbhs_bdata); |
627 | board_nand_init(devkit8000_nand_partitions, | 629 | board_nand_init(devkit8000_nand_partitions, |
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index 8022f563074a..c10738a067cd 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/input.h> | 20 | #include <linux/input.h> |
21 | #include <linux/usb/phy.h> | ||
21 | 22 | ||
22 | #include <linux/regulator/machine.h> | 23 | #include <linux/regulator/machine.h> |
23 | #include <linux/regulator/fixed.h> | 24 | #include <linux/regulator/fixed.h> |
@@ -625,6 +626,7 @@ static void __init igep_init(void) | |||
625 | omap_serial_init(); | 626 | omap_serial_init(); |
626 | omap_sdrc_init(m65kxxxxam_sdrc_params, | 627 | omap_sdrc_init(m65kxxxxam_sdrc_params, |
627 | m65kxxxxam_sdrc_params); | 628 | m65kxxxxam_sdrc_params); |
629 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
628 | usb_musb_init(NULL); | 630 | usb_musb_init(NULL); |
629 | 631 | ||
630 | igep_flash_init(); | 632 | igep_flash_init(); |
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index ff440c0d04dd..b12fe966a7b9 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
29 | #include <linux/smsc911x.h> | 29 | #include <linux/smsc911x.h> |
30 | #include <linux/mmc/host.h> | 30 | #include <linux/mmc/host.h> |
31 | #include <linux/usb/phy.h> | ||
31 | #include <linux/platform_data/spi-omap2-mcspi.h> | 32 | #include <linux/platform_data/spi-omap2-mcspi.h> |
32 | 33 | ||
33 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
@@ -418,6 +419,7 @@ static void __init omap_ldp_init(void) | |||
418 | omap_ads7846_init(1, 54, 310, NULL); | 419 | omap_ads7846_init(1, 54, 310, NULL); |
419 | omap_serial_init(); | 420 | omap_serial_init(); |
420 | omap_sdrc_init(NULL, NULL); | 421 | omap_sdrc_init(NULL, NULL); |
422 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
421 | usb_musb_init(NULL); | 423 | usb_musb_init(NULL); |
422 | board_nand_init(ldp_nand_partitions, ARRAY_SIZE(ldp_nand_partitions), | 424 | board_nand_init(ldp_nand_partitions, ARRAY_SIZE(ldp_nand_partitions), |
423 | ZOOM_NAND_CS, 0, nand_default_timings); | 425 | ZOOM_NAND_CS, 0, nand_default_timings); |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 67769ef6d184..70bc1fc808c8 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/mtd/partitions.h> | 30 | #include <linux/mtd/partitions.h> |
31 | #include <linux/mtd/nand.h> | 31 | #include <linux/mtd/nand.h> |
32 | #include <linux/mmc/host.h> | 32 | #include <linux/mmc/host.h> |
33 | #include <linux/usb/phy.h> | ||
33 | 34 | ||
34 | #include <linux/regulator/machine.h> | 35 | #include <linux/regulator/machine.h> |
35 | #include <linux/i2c/twl.h> | 36 | #include <linux/i2c/twl.h> |
@@ -494,7 +495,7 @@ static int __init beagle_opp_init(void) | |||
494 | } | 495 | } |
495 | return 0; | 496 | return 0; |
496 | } | 497 | } |
497 | device_initcall(beagle_opp_init); | 498 | omap_device_initcall(beagle_opp_init); |
498 | 499 | ||
499 | static void __init omap3_beagle_init(void) | 500 | static void __init omap3_beagle_init(void) |
500 | { | 501 | { |
@@ -519,6 +520,7 @@ static void __init omap3_beagle_init(void) | |||
519 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, | 520 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, |
520 | mt46h32m32lf6_sdrc_params); | 521 | mt46h32m32lf6_sdrc_params); |
521 | 522 | ||
523 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
522 | usb_musb_init(NULL); | 524 | usb_musb_init(NULL); |
523 | usbhs_init(&usbhs_bdata); | 525 | usbhs_init(&usbhs_bdata); |
524 | board_nand_init(omap3beagle_nand_partitions, | 526 | board_nand_init(omap3beagle_nand_partitions, |
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index b13459bee8cb..8258a78c3dfb 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <linux/regulator/machine.h> | 41 | #include <linux/regulator/machine.h> |
42 | #include <linux/mmc/host.h> | 42 | #include <linux/mmc/host.h> |
43 | #include <linux/export.h> | 43 | #include <linux/export.h> |
44 | #include <linux/usb/phy.h> | ||
44 | 45 | ||
45 | #include <asm/mach-types.h> | 46 | #include <asm/mach-types.h> |
46 | #include <asm/mach/arch.h> | 47 | #include <asm/mach/arch.h> |
@@ -309,7 +310,7 @@ static struct omap2_hsmmc_info mmc[] = { | |||
309 | .gpio_wp = 63, | 310 | .gpio_wp = 63, |
310 | .deferred = true, | 311 | .deferred = true, |
311 | }, | 312 | }, |
312 | #ifdef CONFIG_WL12XX_PLATFORM_DATA | 313 | #ifdef CONFIG_WILINK_PLATFORM_DATA |
313 | { | 314 | { |
314 | .name = "wl1271", | 315 | .name = "wl1271", |
315 | .mmc = 2, | 316 | .mmc = 2, |
@@ -450,7 +451,7 @@ static struct regulator_init_data omap3evm_vio = { | |||
450 | .consumer_supplies = omap3evm_vio_supply, | 451 | .consumer_supplies = omap3evm_vio_supply, |
451 | }; | 452 | }; |
452 | 453 | ||
453 | #ifdef CONFIG_WL12XX_PLATFORM_DATA | 454 | #ifdef CONFIG_WILINK_PLATFORM_DATA |
454 | 455 | ||
455 | #define OMAP3EVM_WLAN_PMENA_GPIO (150) | 456 | #define OMAP3EVM_WLAN_PMENA_GPIO (150) |
456 | #define OMAP3EVM_WLAN_IRQ_GPIO (149) | 457 | #define OMAP3EVM_WLAN_IRQ_GPIO (149) |
@@ -563,7 +564,7 @@ static struct omap_board_mux omap35x_board_mux[] __initdata = { | |||
563 | OMAP_PIN_OFF_NONE), | 564 | OMAP_PIN_OFF_NONE), |
564 | OMAP3_MUX(GPMC_WAIT2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP | | 565 | OMAP3_MUX(GPMC_WAIT2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP | |
565 | OMAP_PIN_OFF_NONE), | 566 | OMAP_PIN_OFF_NONE), |
566 | #ifdef CONFIG_WL12XX_PLATFORM_DATA | 567 | #ifdef CONFIG_WILINK_PLATFORM_DATA |
567 | /* WLAN IRQ - GPIO 149 */ | 568 | /* WLAN IRQ - GPIO 149 */ |
568 | OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), | 569 | OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), |
569 | 570 | ||
@@ -601,7 +602,7 @@ static struct omap_board_mux omap36x_board_mux[] __initdata = { | |||
601 | OMAP3_MUX(SYS_BOOT4, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE), | 602 | OMAP3_MUX(SYS_BOOT4, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE), |
602 | OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE), | 603 | OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE), |
603 | OMAP3_MUX(SYS_BOOT6, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE), | 604 | OMAP3_MUX(SYS_BOOT6, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE), |
604 | #ifdef CONFIG_WL12XX_PLATFORM_DATA | 605 | #ifdef CONFIG_WILINK_PLATFORM_DATA |
605 | /* WLAN IRQ - GPIO 149 */ | 606 | /* WLAN IRQ - GPIO 149 */ |
606 | OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), | 607 | OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT), |
607 | 608 | ||
@@ -637,7 +638,7 @@ static struct gpio omap3_evm_ehci_gpios[] __initdata = { | |||
637 | 638 | ||
638 | static void __init omap3_evm_wl12xx_init(void) | 639 | static void __init omap3_evm_wl12xx_init(void) |
639 | { | 640 | { |
640 | #ifdef CONFIG_WL12XX_PLATFORM_DATA | 641 | #ifdef CONFIG_WILINK_PLATFORM_DATA |
641 | int ret; | 642 | int ret; |
642 | 643 | ||
643 | /* WL12xx WLAN Init */ | 644 | /* WL12xx WLAN Init */ |
@@ -734,6 +735,7 @@ static void __init omap3_evm_init(void) | |||
734 | omap_mux_init_gpio(135, OMAP_PIN_OUTPUT); | 735 | omap_mux_init_gpio(135, OMAP_PIN_OUTPUT); |
735 | usbhs_bdata.reset_gpio_port[1] = 135; | 736 | usbhs_bdata.reset_gpio_port[1] = 135; |
736 | } | 737 | } |
738 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
737 | usb_musb_init(&musb_board_data); | 739 | usb_musb_init(&musb_board_data); |
738 | usbhs_init(&usbhs_bdata); | 740 | usbhs_init(&usbhs_bdata); |
739 | board_nand_init(omap3evm_nand_partitions, | 741 | board_nand_init(omap3evm_nand_partitions, |
diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c index 0fba43a9b07d..bab51e64c4b5 100644 --- a/arch/arm/mach-omap2/board-omap3logic.c +++ b/arch/arm/mach-omap2/board-omap3logic.c | |||
@@ -29,6 +29,7 @@ | |||
29 | 29 | ||
30 | #include <linux/i2c/twl.h> | 30 | #include <linux/i2c/twl.h> |
31 | #include <linux/mmc/host.h> | 31 | #include <linux/mmc/host.h> |
32 | #include <linux/usb/phy.h> | ||
32 | 33 | ||
33 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
34 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
@@ -215,6 +216,7 @@ static void __init omap3logic_init(void) | |||
215 | board_mmc_init(); | 216 | board_mmc_init(); |
216 | board_smsc911x_init(); | 217 | board_smsc911x_init(); |
217 | 218 | ||
219 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
218 | usb_musb_init(NULL); | 220 | usb_musb_init(NULL); |
219 | 221 | ||
220 | /* Ensure SDRC pins are mux'd for self-refresh */ | 222 | /* Ensure SDRC pins are mux'd for self-refresh */ |
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index 39806754c875..2bba362148a0 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/mmc/host.h> | 35 | #include <linux/mmc/host.h> |
36 | #include <linux/mmc/card.h> | 36 | #include <linux/mmc/card.h> |
37 | #include <linux/regulator/fixed.h> | 37 | #include <linux/regulator/fixed.h> |
38 | #include <linux/usb/phy.h> | ||
38 | #include <linux/platform_data/spi-omap2-mcspi.h> | 39 | #include <linux/platform_data/spi-omap2-mcspi.h> |
39 | 40 | ||
40 | #include <asm/mach-types.h> | 41 | #include <asm/mach-types.h> |
@@ -601,6 +602,7 @@ static void __init omap3pandora_init(void) | |||
601 | ARRAY_SIZE(omap3pandora_spi_board_info)); | 602 | ARRAY_SIZE(omap3pandora_spi_board_info)); |
602 | omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL); | 603 | omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL); |
603 | usbhs_init(&usbhs_bdata); | 604 | usbhs_init(&usbhs_bdata); |
605 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
604 | usb_musb_init(NULL); | 606 | usb_musb_init(NULL); |
605 | gpmc_nand_init(&pandora_nand_data, NULL); | 607 | gpmc_nand_init(&pandora_nand_data, NULL); |
606 | 608 | ||
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index 73417474b08c..95c10b3aa678 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/interrupt.h> | 33 | #include <linux/interrupt.h> |
34 | #include <linux/smsc911x.h> | 34 | #include <linux/smsc911x.h> |
35 | #include <linux/i2c/at24.h> | 35 | #include <linux/i2c/at24.h> |
36 | #include <linux/usb/phy.h> | ||
36 | 37 | ||
37 | #include <asm/mach-types.h> | 38 | #include <asm/mach-types.h> |
38 | #include <asm/mach/arch.h> | 39 | #include <asm/mach/arch.h> |
@@ -404,6 +405,7 @@ static void __init omap3_stalker_init(void) | |||
404 | 405 | ||
405 | omap_serial_init(); | 406 | omap_serial_init(); |
406 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL); | 407 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL); |
408 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
407 | usb_musb_init(NULL); | 409 | usb_musb_init(NULL); |
408 | usbhs_init(&usbhs_bdata); | 410 | usbhs_init(&usbhs_bdata); |
409 | omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL); | 411 | omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL); |
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c index fc83c963ba93..bcd44fbcd877 100644 --- a/arch/arm/mach-omap2/board-omap3touchbook.c +++ b/arch/arm/mach-omap2/board-omap3touchbook.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/mtd/partitions.h> | 28 | #include <linux/mtd/partitions.h> |
29 | #include <linux/mtd/nand.h> | 29 | #include <linux/mtd/nand.h> |
30 | #include <linux/mmc/host.h> | 30 | #include <linux/mmc/host.h> |
31 | #include <linux/usb/phy.h> | ||
31 | 32 | ||
32 | #include <linux/platform_data/spi-omap2-mcspi.h> | 33 | #include <linux/platform_data/spi-omap2-mcspi.h> |
33 | #include <linux/spi/spi.h> | 34 | #include <linux/spi/spi.h> |
@@ -365,6 +366,7 @@ static void __init omap3_touchbook_init(void) | |||
365 | 366 | ||
366 | /* Touchscreen and accelerometer */ | 367 | /* Touchscreen and accelerometer */ |
367 | omap_ads7846_init(4, OMAP3_TS_GPIO, 310, &ads7846_pdata); | 368 | omap_ads7846_init(4, OMAP3_TS_GPIO, 310, &ads7846_pdata); |
369 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
368 | usb_musb_init(NULL); | 370 | usb_musb_init(NULL); |
369 | usbhs_init(&usbhs_bdata); | 371 | usbhs_init(&usbhs_bdata); |
370 | board_nand_init(omap3touchbook_nand_partitions, | 372 | board_nand_init(omap3touchbook_nand_partitions, |
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index 824cdffb129f..b02c2f00609b 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/regulator/fixed.h> | 30 | #include <linux/regulator/fixed.h> |
31 | #include <linux/ti_wilink_st.h> | 31 | #include <linux/ti_wilink_st.h> |
32 | #include <linux/usb/musb.h> | 32 | #include <linux/usb/musb.h> |
33 | #include <linux/usb/phy.h> | ||
33 | #include <linux/wl12xx.h> | 34 | #include <linux/wl12xx.h> |
34 | #include <linux/irqchip/arm-gic.h> | 35 | #include <linux/irqchip/arm-gic.h> |
35 | #include <linux/platform_data/omap-abe-twl6040.h> | 36 | #include <linux/platform_data/omap-abe-twl6040.h> |
@@ -447,6 +448,7 @@ static void __init omap4_panda_init(void) | |||
447 | omap_sdrc_init(NULL, NULL); | 448 | omap_sdrc_init(NULL, NULL); |
448 | omap4_twl6030_hsmmc_init(mmc); | 449 | omap4_twl6030_hsmmc_init(mmc); |
449 | omap4_ehci_init(); | 450 | omap4_ehci_init(); |
451 | usb_bind_phy("musb-hdrc.0.auto", 0, "omap-usb2.1.auto"); | ||
450 | usb_musb_init(&musb_board_data); | 452 | usb_musb_init(&musb_board_data); |
451 | omap4_panda_display_init(); | 453 | omap4_panda_display_init(); |
452 | } | 454 | } |
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index e425d53212c7..1bcf39671c35 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/mtd/nand.h> | 36 | #include <linux/mtd/nand.h> |
37 | #include <linux/mtd/partitions.h> | 37 | #include <linux/mtd/partitions.h> |
38 | #include <linux/mmc/host.h> | 38 | #include <linux/mmc/host.h> |
39 | #include <linux/usb/phy.h> | ||
39 | 40 | ||
40 | #include <linux/platform_data/mtd-nand-omap2.h> | 41 | #include <linux/platform_data/mtd-nand-omap2.h> |
41 | #include <linux/platform_data/spi-omap2-mcspi.h> | 42 | #include <linux/platform_data/spi-omap2-mcspi.h> |
@@ -499,6 +500,7 @@ static void __init overo_init(void) | |||
499 | mt46h32m32lf6_sdrc_params); | 500 | mt46h32m32lf6_sdrc_params); |
500 | board_nand_init(overo_nand_partitions, | 501 | board_nand_init(overo_nand_partitions, |
501 | ARRAY_SIZE(overo_nand_partitions), NAND_CS, 0, NULL); | 502 | ARRAY_SIZE(overo_nand_partitions), NAND_CS, 0, NULL); |
503 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
502 | usb_musb_init(NULL); | 504 | usb_musb_init(NULL); |
503 | usbhs_init(&usbhs_bdata); | 505 | usbhs_init(&usbhs_bdata); |
504 | overo_spi_init(); | 506 | overo_spi_init(); |
diff --git a/arch/arm/mach-omap2/board-rm680.c b/arch/arm/mach-omap2/board-rm680.c index 386a2ddc1173..345e8c4b8731 100644 --- a/arch/arm/mach-omap2/board-rm680.c +++ b/arch/arm/mach-omap2/board-rm680.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/regulator/machine.h> | 18 | #include <linux/regulator/machine.h> |
19 | #include <linux/regulator/consumer.h> | 19 | #include <linux/regulator/consumer.h> |
20 | #include <linux/platform_data/mtd-onenand-omap2.h> | 20 | #include <linux/platform_data/mtd-onenand-omap2.h> |
21 | #include <linux/usb/phy.h> | ||
21 | 22 | ||
22 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
23 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
@@ -134,6 +135,7 @@ static void __init rm680_init(void) | |||
134 | sdrc_params = nokia_get_sdram_timings(); | 135 | sdrc_params = nokia_get_sdram_timings(); |
135 | omap_sdrc_init(sdrc_params, sdrc_params); | 136 | omap_sdrc_init(sdrc_params, sdrc_params); |
136 | 137 | ||
138 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
137 | usb_musb_init(NULL); | 139 | usb_musb_init(NULL); |
138 | rm680_peripherals_init(); | 140 | rm680_peripherals_init(); |
139 | } | 141 | } |
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index cf07e289b4ea..f3d075baebb6 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c | |||
@@ -42,7 +42,7 @@ | |||
42 | #include <media/si4713.h> | 42 | #include <media/si4713.h> |
43 | #include <linux/leds-lp5523.h> | 43 | #include <linux/leds-lp5523.h> |
44 | 44 | ||
45 | #include <../drivers/staging/iio/light/tsl2563.h> | 45 | #include <linux/platform_data/tsl2563.h> |
46 | #include <linux/lis3lv02d.h> | 46 | #include <linux/lis3lv02d.h> |
47 | 47 | ||
48 | #if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE) | 48 | #if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE) |
diff --git a/arch/arm/mach-omap2/board-rx51-video.c b/arch/arm/mach-omap2/board-rx51-video.c index 46f4fc982766..eb667261df08 100644 --- a/arch/arm/mach-omap2/board-rx51-video.c +++ b/arch/arm/mach-omap2/board-rx51-video.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <video/omapdss.h> | 18 | #include <video/omapdss.h> |
19 | #include <linux/platform_data/spi-omap2-mcspi.h> | 19 | #include <linux/platform_data/spi-omap2-mcspi.h> |
20 | 20 | ||
21 | #include "soc.h" | ||
21 | #include "board-rx51.h" | 22 | #include "board-rx51.h" |
22 | 23 | ||
23 | #include "mux.h" | 24 | #include "mux.h" |
@@ -85,5 +86,5 @@ static int __init rx51_video_init(void) | |||
85 | return 0; | 86 | return 0; |
86 | } | 87 | } |
87 | 88 | ||
88 | subsys_initcall(rx51_video_init); | 89 | omap_subsys_initcall(rx51_video_init); |
89 | #endif /* defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) */ | 90 | #endif /* defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) */ |
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c index 26e07addc9d7..dc5498b1b3a7 100644 --- a/arch/arm/mach-omap2/board-zoom-peripherals.c +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/wl12xx.h> | 20 | #include <linux/wl12xx.h> |
21 | #include <linux/mmc/host.h> | 21 | #include <linux/mmc/host.h> |
22 | #include <linux/platform_data/gpio-omap.h> | 22 | #include <linux/platform_data/gpio-omap.h> |
23 | #include <linux/usb/phy.h> | ||
23 | 24 | ||
24 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
25 | #include <asm/mach/arch.h> | 26 | #include <asm/mach/arch.h> |
@@ -298,6 +299,7 @@ void __init zoom_peripherals_init(void) | |||
298 | omap_hsmmc_init(mmc); | 299 | omap_hsmmc_init(mmc); |
299 | omap_i2c_init(); | 300 | omap_i2c_init(); |
300 | platform_device_register(&omap_vwlan_device); | 301 | platform_device_register(&omap_vwlan_device); |
302 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
301 | usb_musb_init(NULL); | 303 | usb_musb_init(NULL); |
302 | enable_board_wakeup_source(); | 304 | enable_board_wakeup_source(); |
303 | omap_serial_init(); | 305 | omap_serial_init(); |
diff --git a/arch/arm/mach-omap2/clock2xxx.c b/arch/arm/mach-omap2/clock2xxx.c index 1ff646908627..b870f6a9e283 100644 --- a/arch/arm/mach-omap2/clock2xxx.c +++ b/arch/arm/mach-omap2/clock2xxx.c | |||
@@ -52,6 +52,6 @@ static int __init omap2xxx_clk_arch_init(void) | |||
52 | return ret; | 52 | return ret; |
53 | } | 53 | } |
54 | 54 | ||
55 | arch_initcall(omap2xxx_clk_arch_init); | 55 | omap_arch_initcall(omap2xxx_clk_arch_init); |
56 | 56 | ||
57 | 57 | ||
diff --git a/arch/arm/mach-omap2/clock3xxx.c b/arch/arm/mach-omap2/clock3xxx.c index 4eacab8f1176..0b02b4161d71 100644 --- a/arch/arm/mach-omap2/clock3xxx.c +++ b/arch/arm/mach-omap2/clock3xxx.c | |||
@@ -94,6 +94,6 @@ static int __init omap3xxx_clk_arch_init(void) | |||
94 | return ret; | 94 | return ret; |
95 | } | 95 | } |
96 | 96 | ||
97 | arch_initcall(omap3xxx_clk_arch_init); | 97 | omap_arch_initcall(omap3xxx_clk_arch_init); |
98 | 98 | ||
99 | 99 | ||
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index d8a0cc3b9d2c..142d9c616f1b 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/pinctrl/machine.h> | 20 | #include <linux/pinctrl/machine.h> |
21 | #include <linux/platform_data/omap4-keypad.h> | 21 | #include <linux/platform_data/omap4-keypad.h> |
22 | #include <linux/platform_data/omap_ocp2scp.h> | 22 | #include <linux/platform_data/omap_ocp2scp.h> |
23 | #include <linux/usb/omap_control_usb.h> | ||
23 | 24 | ||
24 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
25 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
@@ -67,7 +68,7 @@ static int __init omap3_l3_init(void) | |||
67 | 68 | ||
68 | return IS_ERR(pdev) ? PTR_ERR(pdev) : 0; | 69 | return IS_ERR(pdev) ? PTR_ERR(pdev) : 0; |
69 | } | 70 | } |
70 | postcore_initcall(omap3_l3_init); | 71 | omap_postcore_initcall(omap3_l3_init); |
71 | 72 | ||
72 | static int __init omap4_l3_init(void) | 73 | static int __init omap4_l3_init(void) |
73 | { | 74 | { |
@@ -101,7 +102,7 @@ static int __init omap4_l3_init(void) | |||
101 | 102 | ||
102 | return IS_ERR(pdev) ? PTR_ERR(pdev) : 0; | 103 | return IS_ERR(pdev) ? PTR_ERR(pdev) : 0; |
103 | } | 104 | } |
104 | postcore_initcall(omap4_l3_init); | 105 | omap_postcore_initcall(omap4_l3_init); |
105 | 106 | ||
106 | #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE) | 107 | #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE) |
107 | 108 | ||
@@ -252,6 +253,49 @@ static inline void omap_init_camera(void) | |||
252 | #endif | 253 | #endif |
253 | } | 254 | } |
254 | 255 | ||
256 | #if IS_ENABLED(CONFIG_OMAP_CONTROL_USB) | ||
257 | static struct omap_control_usb_platform_data omap4_control_usb_pdata = { | ||
258 | .type = 1, | ||
259 | }; | ||
260 | |||
261 | struct resource omap4_control_usb_res[] = { | ||
262 | { | ||
263 | .name = "control_dev_conf", | ||
264 | .start = 0x4a002300, | ||
265 | .end = 0x4a002303, | ||
266 | .flags = IORESOURCE_MEM, | ||
267 | }, | ||
268 | { | ||
269 | .name = "otghs_control", | ||
270 | .start = 0x4a00233c, | ||
271 | .end = 0x4a00233f, | ||
272 | .flags = IORESOURCE_MEM, | ||
273 | }, | ||
274 | }; | ||
275 | |||
276 | static struct platform_device omap4_control_usb = { | ||
277 | .name = "omap-control-usb", | ||
278 | .id = -1, | ||
279 | .dev = { | ||
280 | .platform_data = &omap4_control_usb_pdata, | ||
281 | }, | ||
282 | .num_resources = 2, | ||
283 | .resource = omap4_control_usb_res, | ||
284 | }; | ||
285 | |||
286 | static inline void __init omap_init_control_usb(void) | ||
287 | { | ||
288 | if (!cpu_is_omap44xx()) | ||
289 | return; | ||
290 | |||
291 | if (platform_device_register(&omap4_control_usb)) | ||
292 | pr_err("Error registering omap_control_usb device\n"); | ||
293 | } | ||
294 | |||
295 | #else | ||
296 | static inline void omap_init_control_usb(void) { } | ||
297 | #endif /* CONFIG_OMAP_CONTROL_USB */ | ||
298 | |||
255 | int __init omap4_keyboard_init(struct omap4_keypad_platform_data | 299 | int __init omap4_keyboard_init(struct omap4_keypad_platform_data |
256 | *sdp4430_keypad_data, struct omap_board_data *bdata) | 300 | *sdp4430_keypad_data, struct omap_board_data *bdata) |
257 | { | 301 | { |
@@ -716,6 +760,7 @@ static int __init omap2_init_devices(void) | |||
716 | omap_init_mbox(); | 760 | omap_init_mbox(); |
717 | /* If dtb is there, the devices will be created dynamically */ | 761 | /* If dtb is there, the devices will be created dynamically */ |
718 | if (!of_have_populated_dt()) { | 762 | if (!of_have_populated_dt()) { |
763 | omap_init_control_usb(); | ||
719 | omap_init_dmic(); | 764 | omap_init_dmic(); |
720 | omap_init_mcpdm(); | 765 | omap_init_mcpdm(); |
721 | omap_init_mcspi(); | 766 | omap_init_mcspi(); |
@@ -729,4 +774,4 @@ static int __init omap2_init_devices(void) | |||
729 | 774 | ||
730 | return 0; | 775 | return 0; |
731 | } | 776 | } |
732 | arch_initcall(omap2_init_devices); | 777 | omap_arch_initcall(omap2_init_devices); |
diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c index 491c5c8837fa..dab9fc014b97 100644 --- a/arch/arm/mach-omap2/dma.c +++ b/arch/arm/mach-omap2/dma.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include <linux/module.h> | 27 | #include <linux/module.h> |
28 | #include <linux/init.h> | 28 | #include <linux/init.h> |
29 | #include <linux/device.h> | 29 | #include <linux/device.h> |
30 | 30 | #include <linux/dma-mapping.h> | |
31 | #include <linux/omap-dma.h> | 31 | #include <linux/omap-dma.h> |
32 | 32 | ||
33 | #include "soc.h" | 33 | #include "soc.h" |
@@ -288,9 +288,26 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) | |||
288 | return 0; | 288 | return 0; |
289 | } | 289 | } |
290 | 290 | ||
291 | static const struct platform_device_info omap_dma_dev_info = { | ||
292 | .name = "omap-dma-engine", | ||
293 | .id = -1, | ||
294 | .dma_mask = DMA_BIT_MASK(32), | ||
295 | }; | ||
296 | |||
291 | static int __init omap2_system_dma_init(void) | 297 | static int __init omap2_system_dma_init(void) |
292 | { | 298 | { |
293 | return omap_hwmod_for_each_by_class("dma", | 299 | struct platform_device *pdev; |
300 | int res; | ||
301 | |||
302 | res = omap_hwmod_for_each_by_class("dma", | ||
294 | omap2_system_dma_init_dev, NULL); | 303 | omap2_system_dma_init_dev, NULL); |
304 | if (res) | ||
305 | return res; | ||
306 | |||
307 | pdev = platform_device_register_full(&omap_dma_dev_info); | ||
308 | if (IS_ERR(pdev)) | ||
309 | return PTR_ERR(pdev); | ||
310 | |||
311 | return res; | ||
295 | } | 312 | } |
296 | arch_initcall(omap2_system_dma_init); | 313 | omap_arch_initcall(omap2_system_dma_init); |
diff --git a/arch/arm/mach-omap2/drm.c b/arch/arm/mach-omap2/drm.c index 4d8d1a52ffe7..59a4af779f42 100644 --- a/arch/arm/mach-omap2/drm.c +++ b/arch/arm/mach-omap2/drm.c | |||
@@ -62,6 +62,6 @@ static int __init omap_init_drm(void) | |||
62 | 62 | ||
63 | } | 63 | } |
64 | 64 | ||
65 | arch_initcall(omap_init_drm); | 65 | omap_arch_initcall(omap_init_drm); |
66 | 66 | ||
67 | #endif | 67 | #endif |
diff --git a/arch/arm/mach-omap2/emu.c b/arch/arm/mach-omap2/emu.c index b3566f68a559..cbeaca2d7695 100644 --- a/arch/arm/mach-omap2/emu.c +++ b/arch/arm/mach-omap2/emu.c | |||
@@ -47,4 +47,4 @@ static int __init emu_init(void) | |||
47 | return 0; | 47 | return 0; |
48 | } | 48 | } |
49 | 49 | ||
50 | subsys_initcall(emu_init); | 50 | omap_subsys_initcall(emu_init); |
diff --git a/arch/arm/mach-omap2/fb.c b/arch/arm/mach-omap2/fb.c index d9bd965f6d07..190ae493c6ef 100644 --- a/arch/arm/mach-omap2/fb.c +++ b/arch/arm/mach-omap2/fb.c | |||
@@ -89,7 +89,7 @@ static int __init omap_init_vrfb(void) | |||
89 | return 0; | 89 | return 0; |
90 | } | 90 | } |
91 | 91 | ||
92 | arch_initcall(omap_init_vrfb); | 92 | omap_arch_initcall(omap_init_vrfb); |
93 | #endif | 93 | #endif |
94 | 94 | ||
95 | #if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) | 95 | #if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) |
@@ -113,6 +113,6 @@ static int __init omap_init_fb(void) | |||
113 | return platform_device_register(&omap_fb_device); | 113 | return platform_device_register(&omap_fb_device); |
114 | } | 114 | } |
115 | 115 | ||
116 | arch_initcall(omap_init_fb); | 116 | omap_arch_initcall(omap_init_fb); |
117 | 117 | ||
118 | #endif | 118 | #endif |
diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c index 482ade1923b0..7a577145b68b 100644 --- a/arch/arm/mach-omap2/gpio.c +++ b/arch/arm/mach-omap2/gpio.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/of.h> | 23 | #include <linux/of.h> |
24 | #include <linux/platform_data/gpio-omap.h> | 24 | #include <linux/platform_data/gpio-omap.h> |
25 | 25 | ||
26 | #include "soc.h" | ||
26 | #include "omap_hwmod.h" | 27 | #include "omap_hwmod.h" |
27 | #include "omap_device.h" | 28 | #include "omap_device.h" |
28 | #include "omap-pm.h" | 29 | #include "omap-pm.h" |
@@ -146,7 +147,7 @@ static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | |||
146 | /* | 147 | /* |
147 | * gpio_init needs to be done before | 148 | * gpio_init needs to be done before |
148 | * machine_init functions access gpio APIs. | 149 | * machine_init functions access gpio APIs. |
149 | * Hence gpio_init is a postcore_initcall. | 150 | * Hence gpio_init is a omap_postcore_initcall. |
150 | */ | 151 | */ |
151 | static int __init omap2_gpio_init(void) | 152 | static int __init omap2_gpio_init(void) |
152 | { | 153 | { |
@@ -156,4 +157,4 @@ static int __init omap2_gpio_init(void) | |||
156 | 157 | ||
157 | return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init, NULL); | 158 | return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init, NULL); |
158 | } | 159 | } |
159 | postcore_initcall(omap2_gpio_init); | 160 | omap_postcore_initcall(omap2_gpio_init); |
diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c index db969a5c4998..afc1e8c32d6c 100644 --- a/arch/arm/mach-omap2/gpmc-nand.c +++ b/arch/arm/mach-omap2/gpmc-nand.c | |||
@@ -89,20 +89,21 @@ static int omap2_nand_gpmc_retime( | |||
89 | return 0; | 89 | return 0; |
90 | } | 90 | } |
91 | 91 | ||
92 | static bool __init gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt) | 92 | static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt) |
93 | { | 93 | { |
94 | /* support only OMAP3 class */ | 94 | /* support only OMAP3 class */ |
95 | if (!cpu_is_omap34xx()) { | 95 | if (!cpu_is_omap34xx() && !soc_is_am33xx()) { |
96 | pr_err("BCH ecc is not supported on this CPU\n"); | 96 | pr_err("BCH ecc is not supported on this CPU\n"); |
97 | return 0; | 97 | return 0; |
98 | } | 98 | } |
99 | 99 | ||
100 | /* | 100 | /* |
101 | * For now, assume 4-bit mode is only supported on OMAP3630 ES1.x, x>=1. | 101 | * For now, assume 4-bit mode is only supported on OMAP3630 ES1.x, x>=1 |
102 | * Other chips may be added if confirmed to work. | 102 | * and AM33xx derivates. Other chips may be added if confirmed to work. |
103 | */ | 103 | */ |
104 | if ((ecc_opt == OMAP_ECC_BCH4_CODE_HW) && | 104 | if ((ecc_opt == OMAP_ECC_BCH4_CODE_HW) && |
105 | (!cpu_is_omap3630() || (GET_OMAP_REVISION() == 0))) { | 105 | (!cpu_is_omap3630() || (GET_OMAP_REVISION() == 0)) && |
106 | (!soc_is_am33xx())) { | ||
106 | pr_err("BCH 4-bit mode is not supported on this CPU\n"); | 107 | pr_err("BCH 4-bit mode is not supported on this CPU\n"); |
107 | return 0; | 108 | return 0; |
108 | } | 109 | } |
@@ -110,8 +111,8 @@ static bool __init gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt) | |||
110 | return 1; | 111 | return 1; |
111 | } | 112 | } |
112 | 113 | ||
113 | int __init gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data, | 114 | int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data, |
114 | struct gpmc_timings *gpmc_t) | 115 | struct gpmc_timings *gpmc_t) |
115 | { | 116 | { |
116 | int err = 0; | 117 | int err = 0; |
117 | struct device *dev = &gpmc_nand_device.dev; | 118 | struct device *dev = &gpmc_nand_device.dev; |
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c index 94a349e4dc96..fadd87435cd0 100644 --- a/arch/arm/mach-omap2/gpmc-onenand.c +++ b/arch/arm/mach-omap2/gpmc-onenand.c | |||
@@ -356,7 +356,7 @@ static int gpmc_onenand_setup(void __iomem *onenand_base, int *freq_ptr) | |||
356 | return ret; | 356 | return ret; |
357 | } | 357 | } |
358 | 358 | ||
359 | void __init gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data) | 359 | void gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data) |
360 | { | 360 | { |
361 | int err; | 361 | int err; |
362 | 362 | ||
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index bc0783364ad3..8d70bd03c5d8 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c | |||
@@ -25,6 +25,10 @@ | |||
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/interrupt.h> | 26 | #include <linux/interrupt.h> |
27 | #include <linux/platform_device.h> | 27 | #include <linux/platform_device.h> |
28 | #include <linux/of.h> | ||
29 | #include <linux/of_mtd.h> | ||
30 | #include <linux/of_device.h> | ||
31 | #include <linux/mtd/nand.h> | ||
28 | 32 | ||
29 | #include <linux/platform_data/mtd-nand-omap2.h> | 33 | #include <linux/platform_data/mtd-nand-omap2.h> |
30 | 34 | ||
@@ -34,6 +38,8 @@ | |||
34 | #include "common.h" | 38 | #include "common.h" |
35 | #include "omap_device.h" | 39 | #include "omap_device.h" |
36 | #include "gpmc.h" | 40 | #include "gpmc.h" |
41 | #include "gpmc-nand.h" | ||
42 | #include "gpmc-onenand.h" | ||
37 | 43 | ||
38 | #define DEVICE_NAME "omap-gpmc" | 44 | #define DEVICE_NAME "omap-gpmc" |
39 | 45 | ||
@@ -145,7 +151,8 @@ static unsigned gpmc_irq_start; | |||
145 | static struct resource gpmc_mem_root; | 151 | static struct resource gpmc_mem_root; |
146 | static struct resource gpmc_cs_mem[GPMC_CS_NUM]; | 152 | static struct resource gpmc_cs_mem[GPMC_CS_NUM]; |
147 | static DEFINE_SPINLOCK(gpmc_mem_lock); | 153 | static DEFINE_SPINLOCK(gpmc_mem_lock); |
148 | static unsigned int gpmc_cs_map; /* flag for cs which are initialized */ | 154 | /* Define chip-selects as reserved by default until probe completes */ |
155 | static unsigned int gpmc_cs_map = ((1 << GPMC_CS_NUM) - 1); | ||
149 | static struct device *gpmc_dev; | 156 | static struct device *gpmc_dev; |
150 | static int gpmc_irq; | 157 | static int gpmc_irq; |
151 | static resource_size_t phys_base, mem_size; | 158 | static resource_size_t phys_base, mem_size; |
@@ -1118,8 +1125,215 @@ int gpmc_calc_timings(struct gpmc_timings *gpmc_t, | |||
1118 | /* TODO: remove, see function definition */ | 1125 | /* TODO: remove, see function definition */ |
1119 | gpmc_convert_ps_to_ns(gpmc_t); | 1126 | gpmc_convert_ps_to_ns(gpmc_t); |
1120 | 1127 | ||
1128 | /* Now the GPMC is initialised, unreserve the chip-selects */ | ||
1129 | gpmc_cs_map = 0; | ||
1130 | |||
1131 | return 0; | ||
1132 | } | ||
1133 | |||
1134 | #ifdef CONFIG_OF | ||
1135 | static struct of_device_id gpmc_dt_ids[] = { | ||
1136 | { .compatible = "ti,omap2420-gpmc" }, | ||
1137 | { .compatible = "ti,omap2430-gpmc" }, | ||
1138 | { .compatible = "ti,omap3430-gpmc" }, /* omap3430 & omap3630 */ | ||
1139 | { .compatible = "ti,omap4430-gpmc" }, /* omap4430 & omap4460 & omap543x */ | ||
1140 | { .compatible = "ti,am3352-gpmc" }, /* am335x devices */ | ||
1141 | { } | ||
1142 | }; | ||
1143 | MODULE_DEVICE_TABLE(of, gpmc_dt_ids); | ||
1144 | |||
1145 | static void __maybe_unused gpmc_read_timings_dt(struct device_node *np, | ||
1146 | struct gpmc_timings *gpmc_t) | ||
1147 | { | ||
1148 | u32 val; | ||
1149 | |||
1150 | memset(gpmc_t, 0, sizeof(*gpmc_t)); | ||
1151 | |||
1152 | /* minimum clock period for syncronous mode */ | ||
1153 | if (!of_property_read_u32(np, "gpmc,sync-clk", &val)) | ||
1154 | gpmc_t->sync_clk = val; | ||
1155 | |||
1156 | /* chip select timtings */ | ||
1157 | if (!of_property_read_u32(np, "gpmc,cs-on", &val)) | ||
1158 | gpmc_t->cs_on = val; | ||
1159 | |||
1160 | if (!of_property_read_u32(np, "gpmc,cs-rd-off", &val)) | ||
1161 | gpmc_t->cs_rd_off = val; | ||
1162 | |||
1163 | if (!of_property_read_u32(np, "gpmc,cs-wr-off", &val)) | ||
1164 | gpmc_t->cs_wr_off = val; | ||
1165 | |||
1166 | /* ADV signal timings */ | ||
1167 | if (!of_property_read_u32(np, "gpmc,adv-on", &val)) | ||
1168 | gpmc_t->adv_on = val; | ||
1169 | |||
1170 | if (!of_property_read_u32(np, "gpmc,adv-rd-off", &val)) | ||
1171 | gpmc_t->adv_rd_off = val; | ||
1172 | |||
1173 | if (!of_property_read_u32(np, "gpmc,adv-wr-off", &val)) | ||
1174 | gpmc_t->adv_wr_off = val; | ||
1175 | |||
1176 | /* WE signal timings */ | ||
1177 | if (!of_property_read_u32(np, "gpmc,we-on", &val)) | ||
1178 | gpmc_t->we_on = val; | ||
1179 | |||
1180 | if (!of_property_read_u32(np, "gpmc,we-off", &val)) | ||
1181 | gpmc_t->we_off = val; | ||
1182 | |||
1183 | /* OE signal timings */ | ||
1184 | if (!of_property_read_u32(np, "gpmc,oe-on", &val)) | ||
1185 | gpmc_t->oe_on = val; | ||
1186 | |||
1187 | if (!of_property_read_u32(np, "gpmc,oe-off", &val)) | ||
1188 | gpmc_t->oe_off = val; | ||
1189 | |||
1190 | /* access and cycle timings */ | ||
1191 | if (!of_property_read_u32(np, "gpmc,page-burst-access", &val)) | ||
1192 | gpmc_t->page_burst_access = val; | ||
1193 | |||
1194 | if (!of_property_read_u32(np, "gpmc,access", &val)) | ||
1195 | gpmc_t->access = val; | ||
1196 | |||
1197 | if (!of_property_read_u32(np, "gpmc,rd-cycle", &val)) | ||
1198 | gpmc_t->rd_cycle = val; | ||
1199 | |||
1200 | if (!of_property_read_u32(np, "gpmc,wr-cycle", &val)) | ||
1201 | gpmc_t->wr_cycle = val; | ||
1202 | |||
1203 | /* only for OMAP3430 */ | ||
1204 | if (!of_property_read_u32(np, "gpmc,wr-access", &val)) | ||
1205 | gpmc_t->wr_access = val; | ||
1206 | |||
1207 | if (!of_property_read_u32(np, "gpmc,wr-data-mux-bus", &val)) | ||
1208 | gpmc_t->wr_data_mux_bus = val; | ||
1209 | } | ||
1210 | |||
1211 | #ifdef CONFIG_MTD_NAND | ||
1212 | |||
1213 | static const char * const nand_ecc_opts[] = { | ||
1214 | [OMAP_ECC_HAMMING_CODE_DEFAULT] = "sw", | ||
1215 | [OMAP_ECC_HAMMING_CODE_HW] = "hw", | ||
1216 | [OMAP_ECC_HAMMING_CODE_HW_ROMCODE] = "hw-romcode", | ||
1217 | [OMAP_ECC_BCH4_CODE_HW] = "bch4", | ||
1218 | [OMAP_ECC_BCH8_CODE_HW] = "bch8", | ||
1219 | }; | ||
1220 | |||
1221 | static int gpmc_probe_nand_child(struct platform_device *pdev, | ||
1222 | struct device_node *child) | ||
1223 | { | ||
1224 | u32 val; | ||
1225 | const char *s; | ||
1226 | struct gpmc_timings gpmc_t; | ||
1227 | struct omap_nand_platform_data *gpmc_nand_data; | ||
1228 | |||
1229 | if (of_property_read_u32(child, "reg", &val) < 0) { | ||
1230 | dev_err(&pdev->dev, "%s has no 'reg' property\n", | ||
1231 | child->full_name); | ||
1232 | return -ENODEV; | ||
1233 | } | ||
1234 | |||
1235 | gpmc_nand_data = devm_kzalloc(&pdev->dev, sizeof(*gpmc_nand_data), | ||
1236 | GFP_KERNEL); | ||
1237 | if (!gpmc_nand_data) | ||
1238 | return -ENOMEM; | ||
1239 | |||
1240 | gpmc_nand_data->cs = val; | ||
1241 | gpmc_nand_data->of_node = child; | ||
1242 | |||
1243 | if (!of_property_read_string(child, "ti,nand-ecc-opt", &s)) | ||
1244 | for (val = 0; val < ARRAY_SIZE(nand_ecc_opts); val++) | ||
1245 | if (!strcasecmp(s, nand_ecc_opts[val])) { | ||
1246 | gpmc_nand_data->ecc_opt = val; | ||
1247 | break; | ||
1248 | } | ||
1249 | |||
1250 | val = of_get_nand_bus_width(child); | ||
1251 | if (val == 16) | ||
1252 | gpmc_nand_data->devsize = NAND_BUSWIDTH_16; | ||
1253 | |||
1254 | gpmc_read_timings_dt(child, &gpmc_t); | ||
1255 | gpmc_nand_init(gpmc_nand_data, &gpmc_t); | ||
1256 | |||
1257 | return 0; | ||
1258 | } | ||
1259 | #else | ||
1260 | static int gpmc_probe_nand_child(struct platform_device *pdev, | ||
1261 | struct device_node *child) | ||
1262 | { | ||
1121 | return 0; | 1263 | return 0; |
1122 | } | 1264 | } |
1265 | #endif | ||
1266 | |||
1267 | #ifdef CONFIG_MTD_ONENAND | ||
1268 | static int gpmc_probe_onenand_child(struct platform_device *pdev, | ||
1269 | struct device_node *child) | ||
1270 | { | ||
1271 | u32 val; | ||
1272 | struct omap_onenand_platform_data *gpmc_onenand_data; | ||
1273 | |||
1274 | if (of_property_read_u32(child, "reg", &val) < 0) { | ||
1275 | dev_err(&pdev->dev, "%s has no 'reg' property\n", | ||
1276 | child->full_name); | ||
1277 | return -ENODEV; | ||
1278 | } | ||
1279 | |||
1280 | gpmc_onenand_data = devm_kzalloc(&pdev->dev, sizeof(*gpmc_onenand_data), | ||
1281 | GFP_KERNEL); | ||
1282 | if (!gpmc_onenand_data) | ||
1283 | return -ENOMEM; | ||
1284 | |||
1285 | gpmc_onenand_data->cs = val; | ||
1286 | gpmc_onenand_data->of_node = child; | ||
1287 | gpmc_onenand_data->dma_channel = -1; | ||
1288 | |||
1289 | if (!of_property_read_u32(child, "dma-channel", &val)) | ||
1290 | gpmc_onenand_data->dma_channel = val; | ||
1291 | |||
1292 | gpmc_onenand_init(gpmc_onenand_data); | ||
1293 | |||
1294 | return 0; | ||
1295 | } | ||
1296 | #else | ||
1297 | static int gpmc_probe_onenand_child(struct platform_device *pdev, | ||
1298 | struct device_node *child) | ||
1299 | { | ||
1300 | return 0; | ||
1301 | } | ||
1302 | #endif | ||
1303 | |||
1304 | static int gpmc_probe_dt(struct platform_device *pdev) | ||
1305 | { | ||
1306 | int ret; | ||
1307 | struct device_node *child; | ||
1308 | const struct of_device_id *of_id = | ||
1309 | of_match_device(gpmc_dt_ids, &pdev->dev); | ||
1310 | |||
1311 | if (!of_id) | ||
1312 | return 0; | ||
1313 | |||
1314 | for_each_node_by_name(child, "nand") { | ||
1315 | ret = gpmc_probe_nand_child(pdev, child); | ||
1316 | if (ret < 0) { | ||
1317 | of_node_put(child); | ||
1318 | return ret; | ||
1319 | } | ||
1320 | } | ||
1321 | |||
1322 | for_each_node_by_name(child, "onenand") { | ||
1323 | ret = gpmc_probe_onenand_child(pdev, child); | ||
1324 | if (ret < 0) { | ||
1325 | of_node_put(child); | ||
1326 | return ret; | ||
1327 | } | ||
1328 | } | ||
1329 | return 0; | ||
1330 | } | ||
1331 | #else | ||
1332 | static int gpmc_probe_dt(struct platform_device *pdev) | ||
1333 | { | ||
1334 | return 0; | ||
1335 | } | ||
1336 | #endif | ||
1123 | 1337 | ||
1124 | static int gpmc_probe(struct platform_device *pdev) | 1338 | static int gpmc_probe(struct platform_device *pdev) |
1125 | { | 1339 | { |
@@ -1134,11 +1348,9 @@ static int gpmc_probe(struct platform_device *pdev) | |||
1134 | phys_base = res->start; | 1348 | phys_base = res->start; |
1135 | mem_size = resource_size(res); | 1349 | mem_size = resource_size(res); |
1136 | 1350 | ||
1137 | gpmc_base = devm_request_and_ioremap(&pdev->dev, res); | 1351 | gpmc_base = devm_ioremap_resource(&pdev->dev, res); |
1138 | if (!gpmc_base) { | 1352 | if (IS_ERR(gpmc_base)) |
1139 | dev_err(&pdev->dev, "error: request memory / ioremap\n"); | 1353 | return PTR_ERR(gpmc_base); |
1140 | return -EADDRNOTAVAIL; | ||
1141 | } | ||
1142 | 1354 | ||
1143 | res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); | 1355 | res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); |
1144 | if (res == NULL) | 1356 | if (res == NULL) |
@@ -1174,6 +1386,14 @@ static int gpmc_probe(struct platform_device *pdev) | |||
1174 | if (IS_ERR_VALUE(gpmc_setup_irq())) | 1386 | if (IS_ERR_VALUE(gpmc_setup_irq())) |
1175 | dev_warn(gpmc_dev, "gpmc_setup_irq failed\n"); | 1387 | dev_warn(gpmc_dev, "gpmc_setup_irq failed\n"); |
1176 | 1388 | ||
1389 | rc = gpmc_probe_dt(pdev); | ||
1390 | if (rc < 0) { | ||
1391 | clk_disable_unprepare(gpmc_l3_clk); | ||
1392 | clk_put(gpmc_l3_clk); | ||
1393 | dev_err(gpmc_dev, "failed to probe DT parameters\n"); | ||
1394 | return rc; | ||
1395 | } | ||
1396 | |||
1177 | return 0; | 1397 | return 0; |
1178 | } | 1398 | } |
1179 | 1399 | ||
@@ -1191,6 +1411,7 @@ static struct platform_driver gpmc_driver = { | |||
1191 | .driver = { | 1411 | .driver = { |
1192 | .name = DEVICE_NAME, | 1412 | .name = DEVICE_NAME, |
1193 | .owner = THIS_MODULE, | 1413 | .owner = THIS_MODULE, |
1414 | .of_match_table = of_match_ptr(gpmc_dt_ids), | ||
1194 | }, | 1415 | }, |
1195 | }; | 1416 | }; |
1196 | 1417 | ||
@@ -1205,7 +1426,7 @@ static __exit void gpmc_exit(void) | |||
1205 | 1426 | ||
1206 | } | 1427 | } |
1207 | 1428 | ||
1208 | postcore_initcall(gpmc_init); | 1429 | omap_postcore_initcall(gpmc_init); |
1209 | module_exit(gpmc_exit); | 1430 | module_exit(gpmc_exit); |
1210 | 1431 | ||
1211 | static int __init omap_gpmc_init(void) | 1432 | static int __init omap_gpmc_init(void) |
@@ -1214,6 +1435,13 @@ static int __init omap_gpmc_init(void) | |||
1214 | struct platform_device *pdev; | 1435 | struct platform_device *pdev; |
1215 | char *oh_name = "gpmc"; | 1436 | char *oh_name = "gpmc"; |
1216 | 1437 | ||
1438 | /* | ||
1439 | * if the board boots up with a populated DT, do not | ||
1440 | * manually add the device from this initcall | ||
1441 | */ | ||
1442 | if (of_have_populated_dt()) | ||
1443 | return -ENODEV; | ||
1444 | |||
1217 | oh = omap_hwmod_lookup(oh_name); | 1445 | oh = omap_hwmod_lookup(oh_name); |
1218 | if (!oh) { | 1446 | if (!oh) { |
1219 | pr_err("Could not look up %s\n", oh_name); | 1447 | pr_err("Could not look up %s\n", oh_name); |
@@ -1225,7 +1453,7 @@ static int __init omap_gpmc_init(void) | |||
1225 | 1453 | ||
1226 | return IS_ERR(pdev) ? PTR_ERR(pdev) : 0; | 1454 | return IS_ERR(pdev) ? PTR_ERR(pdev) : 0; |
1227 | } | 1455 | } |
1228 | postcore_initcall(omap_gpmc_init); | 1456 | omap_postcore_initcall(omap_gpmc_init); |
1229 | 1457 | ||
1230 | static irqreturn_t gpmc_handle_irq(int irq, void *dev) | 1458 | static irqreturn_t gpmc_handle_irq(int irq, void *dev) |
1231 | { | 1459 | { |
diff --git a/arch/arm/mach-omap2/hdq1w.c b/arch/arm/mach-omap2/hdq1w.c index b7aa8ba2ccb2..cbc8e3c480e0 100644 --- a/arch/arm/mach-omap2/hdq1w.c +++ b/arch/arm/mach-omap2/hdq1w.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/err.h> | 27 | #include <linux/err.h> |
28 | #include <linux/platform_device.h> | 28 | #include <linux/platform_device.h> |
29 | 29 | ||
30 | #include "soc.h" | ||
30 | #include "omap_hwmod.h" | 31 | #include "omap_hwmod.h" |
31 | #include "omap_device.h" | 32 | #include "omap_device.h" |
32 | #include "hdq1w.h" | 33 | #include "hdq1w.h" |
@@ -93,4 +94,4 @@ static int __init omap_init_hdq(void) | |||
93 | 94 | ||
94 | return 0; | 95 | return 0; |
95 | } | 96 | } |
96 | arch_initcall(omap_init_hdq); | 97 | omap_arch_initcall(omap_init_hdq); |
diff --git a/arch/arm/mach-omap2/hwspinlock.c b/arch/arm/mach-omap2/hwspinlock.c index c3688903f3d4..ef175acaeaa2 100644 --- a/arch/arm/mach-omap2/hwspinlock.c +++ b/arch/arm/mach-omap2/hwspinlock.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
22 | #include <linux/hwspinlock.h> | 22 | #include <linux/hwspinlock.h> |
23 | 23 | ||
24 | #include "soc.h" | ||
24 | #include "omap_hwmod.h" | 25 | #include "omap_hwmod.h" |
25 | #include "omap_device.h" | 26 | #include "omap_device.h" |
26 | 27 | ||
@@ -56,4 +57,4 @@ static int __init hwspinlocks_init(void) | |||
56 | return retval; | 57 | return retval; |
57 | } | 58 | } |
58 | /* early board code might need to reserve specific hwspinlock instances */ | 59 | /* early board code might need to reserve specific hwspinlock instances */ |
59 | postcore_initcall(hwspinlocks_init); | 60 | omap_postcore_initcall(hwspinlocks_init); |
diff --git a/arch/arm/mach-omap2/i2c.c b/arch/arm/mach-omap2/i2c.c index c11a23fa9665..d940e53dd9f2 100644 --- a/arch/arm/mach-omap2/i2c.c +++ b/arch/arm/mach-omap2/i2c.c | |||
@@ -184,3 +184,8 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata, | |||
184 | return PTR_RET(pdev); | 184 | return PTR_RET(pdev); |
185 | } | 185 | } |
186 | 186 | ||
187 | static int __init omap_i2c_cmdline(void) | ||
188 | { | ||
189 | return omap_register_i2c_bus_cmdline(); | ||
190 | } | ||
191 | omap_subsys_initcall(omap_i2c_cmdline); | ||
diff --git a/arch/arm/mach-omap2/include/mach/serial.h b/arch/arm/mach-omap2/include/mach/serial.h index 70eda00db7a4..7ca1fcff453b 100644 --- a/arch/arm/mach-omap2/include/mach/serial.h +++ b/arch/arm/mach-omap2/include/mach/serial.h | |||
@@ -8,20 +8,6 @@ | |||
8 | * GNU General Public License for more details. | 8 | * GNU General Public License for more details. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | /* | ||
12 | * Memory entry used for the DEBUG_LL UART configuration, relative to | ||
13 | * start of RAM. See also uncompress.h and debug-macro.S. | ||
14 | * | ||
15 | * Note that using a memory location for storing the UART configuration | ||
16 | * has at least two limitations: | ||
17 | * | ||
18 | * 1. Kernel uncompress code cannot overlap OMAP_UART_INFO as the | ||
19 | * uncompress code could then partially overwrite itself | ||
20 | * 2. We assume printascii is called at least once before paging_init, | ||
21 | * and addruart has a chance to read OMAP_UART_INFO | ||
22 | */ | ||
23 | #define OMAP_UART_INFO_OFS 0x3ffc | ||
24 | |||
25 | /* OMAP2 serial ports */ | 11 | /* OMAP2 serial ports */ |
26 | #define OMAP2_UART1_BASE 0x4806a000 | 12 | #define OMAP2_UART1_BASE 0x4806a000 |
27 | #define OMAP2_UART2_BASE 0x4806c000 | 13 | #define OMAP2_UART2_BASE 0x4806c000 |
@@ -68,29 +54,6 @@ | |||
68 | 54 | ||
69 | #define OMAP24XX_BASE_BAUD (48000000/16) | 55 | #define OMAP24XX_BASE_BAUD (48000000/16) |
70 | 56 | ||
71 | /* | ||
72 | * DEBUG_LL port encoding stored into the UART1 scratchpad register by | ||
73 | * decomp_setup in uncompress.h | ||
74 | */ | ||
75 | #define OMAP2UART1 21 | ||
76 | #define OMAP2UART2 22 | ||
77 | #define OMAP2UART3 23 | ||
78 | #define OMAP3UART1 OMAP2UART1 | ||
79 | #define OMAP3UART2 OMAP2UART2 | ||
80 | #define OMAP3UART3 33 | ||
81 | #define OMAP3UART4 34 /* Only on 36xx */ | ||
82 | #define OMAP4UART1 OMAP2UART1 | ||
83 | #define OMAP4UART2 OMAP2UART2 | ||
84 | #define OMAP4UART3 43 | ||
85 | #define OMAP4UART4 44 | ||
86 | #define TI81XXUART1 81 | ||
87 | #define TI81XXUART2 82 | ||
88 | #define TI81XXUART3 83 | ||
89 | #define AM33XXUART1 84 | ||
90 | #define OMAP5UART3 OMAP4UART3 | ||
91 | #define OMAP5UART4 OMAP4UART4 | ||
92 | #define ZOOM_UART 95 /* Only on zoom2/3 */ | ||
93 | |||
94 | #ifndef __ASSEMBLER__ | 57 | #ifndef __ASSEMBLER__ |
95 | 58 | ||
96 | struct omap_board_data; | 59 | struct omap_board_data; |
diff --git a/arch/arm/mach-omap2/include/mach/uncompress.h b/arch/arm/mach-omap2/include/mach/uncompress.h deleted file mode 100644 index 8e3546d3e041..000000000000 --- a/arch/arm/mach-omap2/include/mach/uncompress.h +++ /dev/null | |||
@@ -1,176 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/plat-omap/include/mach/uncompress.h | ||
3 | * | ||
4 | * Serial port stubs for kernel decompress status messages | ||
5 | * | ||
6 | * Initially based on: | ||
7 | * linux-2.4.15-rmk1-dsplinux1.6/arch/arm/plat-omap/include/mach1510/uncompress.h | ||
8 | * Copyright (C) 2000 RidgeRun, Inc. | ||
9 | * Author: Greg Lonnon <glonnon@ridgerun.com> | ||
10 | * | ||
11 | * Rewritten by: | ||
12 | * Author: <source@mvista.com> | ||
13 | * 2004 (c) MontaVista Software, Inc. | ||
14 | * | ||
15 | * This file is licensed under the terms of the GNU General Public License | ||
16 | * version 2. This program is licensed "as is" without any warranty of any | ||
17 | * kind, whether express or implied. | ||
18 | */ | ||
19 | |||
20 | #include <linux/types.h> | ||
21 | #include <linux/serial_reg.h> | ||
22 | |||
23 | #include <asm/memory.h> | ||
24 | #include <asm/mach-types.h> | ||
25 | |||
26 | #include <mach/serial.h> | ||
27 | |||
28 | #define MDR1_MODE_MASK 0x07 | ||
29 | |||
30 | volatile u8 *uart_base; | ||
31 | int uart_shift; | ||
32 | |||
33 | /* | ||
34 | * Store the DEBUG_LL uart number into memory. | ||
35 | * See also debug-macro.S, and serial.c for related code. | ||
36 | */ | ||
37 | static void set_omap_uart_info(unsigned char port) | ||
38 | { | ||
39 | /* | ||
40 | * Get address of some.bss variable and round it down | ||
41 | * a la CONFIG_AUTO_ZRELADDR. | ||
42 | */ | ||
43 | u32 ram_start = (u32)&uart_shift & 0xf8000000; | ||
44 | u32 *uart_info = (u32 *)(ram_start + OMAP_UART_INFO_OFS); | ||
45 | *uart_info = port; | ||
46 | } | ||
47 | |||
48 | static void putc(int c) | ||
49 | { | ||
50 | if (!uart_base) | ||
51 | return; | ||
52 | |||
53 | /* Check for UART 16x mode */ | ||
54 | if ((uart_base[UART_OMAP_MDR1 << uart_shift] & MDR1_MODE_MASK) != 0) | ||
55 | return; | ||
56 | |||
57 | while (!(uart_base[UART_LSR << uart_shift] & UART_LSR_THRE)) | ||
58 | barrier(); | ||
59 | uart_base[UART_TX << uart_shift] = c; | ||
60 | } | ||
61 | |||
62 | static inline void flush(void) | ||
63 | { | ||
64 | } | ||
65 | |||
66 | /* | ||
67 | * Macros to configure UART1 and debug UART | ||
68 | */ | ||
69 | #define _DEBUG_LL_ENTRY(mach, dbg_uart, dbg_shft, dbg_id) \ | ||
70 | if (machine_is_##mach()) { \ | ||
71 | uart_base = (volatile u8 *)(dbg_uart); \ | ||
72 | uart_shift = (dbg_shft); \ | ||
73 | port = (dbg_id); \ | ||
74 | set_omap_uart_info(port); \ | ||
75 | break; \ | ||
76 | } | ||
77 | |||
78 | #define DEBUG_LL_OMAP2(p, mach) \ | ||
79 | _DEBUG_LL_ENTRY(mach, OMAP2_UART##p##_BASE, OMAP_PORT_SHIFT, \ | ||
80 | OMAP2UART##p) | ||
81 | |||
82 | #define DEBUG_LL_OMAP3(p, mach) \ | ||
83 | _DEBUG_LL_ENTRY(mach, OMAP3_UART##p##_BASE, OMAP_PORT_SHIFT, \ | ||
84 | OMAP3UART##p) | ||
85 | |||
86 | #define DEBUG_LL_OMAP4(p, mach) \ | ||
87 | _DEBUG_LL_ENTRY(mach, OMAP4_UART##p##_BASE, OMAP_PORT_SHIFT, \ | ||
88 | OMAP4UART##p) | ||
89 | |||
90 | #define DEBUG_LL_OMAP5(p, mach) \ | ||
91 | _DEBUG_LL_ENTRY(mach, OMAP5_UART##p##_BASE, OMAP_PORT_SHIFT, \ | ||
92 | OMAP5UART##p) | ||
93 | /* Zoom2/3 shift is different for UART1 and external port */ | ||
94 | #define DEBUG_LL_ZOOM(mach) \ | ||
95 | _DEBUG_LL_ENTRY(mach, ZOOM_UART_BASE, ZOOM_PORT_SHIFT, ZOOM_UART) | ||
96 | |||
97 | #define DEBUG_LL_TI81XX(p, mach) \ | ||
98 | _DEBUG_LL_ENTRY(mach, TI81XX_UART##p##_BASE, OMAP_PORT_SHIFT, \ | ||
99 | TI81XXUART##p) | ||
100 | |||
101 | #define DEBUG_LL_AM33XX(p, mach) \ | ||
102 | _DEBUG_LL_ENTRY(mach, AM33XX_UART##p##_BASE, OMAP_PORT_SHIFT, \ | ||
103 | AM33XXUART##p) | ||
104 | |||
105 | static inline void arch_decomp_setup(void) | ||
106 | { | ||
107 | int port = 0; | ||
108 | |||
109 | /* | ||
110 | * Initialize the port based on the machine ID from the bootloader. | ||
111 | * Note that we're using macros here instead of switch statement | ||
112 | * as machine_is functions are optimized out for the boards that | ||
113 | * are not selected. | ||
114 | */ | ||
115 | do { | ||
116 | /* omap2 based boards using UART1 */ | ||
117 | DEBUG_LL_OMAP2(1, omap_2430sdp); | ||
118 | DEBUG_LL_OMAP2(1, omap_apollon); | ||
119 | DEBUG_LL_OMAP2(1, omap_h4); | ||
120 | |||
121 | /* omap2 based boards using UART3 */ | ||
122 | DEBUG_LL_OMAP2(3, nokia_n800); | ||
123 | DEBUG_LL_OMAP2(3, nokia_n810); | ||
124 | DEBUG_LL_OMAP2(3, nokia_n810_wimax); | ||
125 | |||
126 | /* omap3 based boards using UART1 */ | ||
127 | DEBUG_LL_OMAP2(1, omap3evm); | ||
128 | DEBUG_LL_OMAP3(1, omap_3430sdp); | ||
129 | DEBUG_LL_OMAP3(1, omap_3630sdp); | ||
130 | DEBUG_LL_OMAP3(1, omap3530_lv_som); | ||
131 | DEBUG_LL_OMAP3(1, omap3_torpedo); | ||
132 | |||
133 | /* omap3 based boards using UART3 */ | ||
134 | DEBUG_LL_OMAP3(3, cm_t35); | ||
135 | DEBUG_LL_OMAP3(3, cm_t3517); | ||
136 | DEBUG_LL_OMAP3(3, cm_t3730); | ||
137 | DEBUG_LL_OMAP3(3, craneboard); | ||
138 | DEBUG_LL_OMAP3(3, devkit8000); | ||
139 | DEBUG_LL_OMAP3(3, igep0020); | ||
140 | DEBUG_LL_OMAP3(3, igep0030); | ||
141 | DEBUG_LL_OMAP3(3, nokia_rm680); | ||
142 | DEBUG_LL_OMAP3(3, nokia_rm696); | ||
143 | DEBUG_LL_OMAP3(3, nokia_rx51); | ||
144 | DEBUG_LL_OMAP3(3, omap3517evm); | ||
145 | DEBUG_LL_OMAP3(3, omap3_beagle); | ||
146 | DEBUG_LL_OMAP3(3, omap3_pandora); | ||
147 | DEBUG_LL_OMAP3(3, omap_ldp); | ||
148 | DEBUG_LL_OMAP3(3, overo); | ||
149 | DEBUG_LL_OMAP3(3, touchbook); | ||
150 | |||
151 | /* omap4 based boards using UART3 */ | ||
152 | DEBUG_LL_OMAP4(3, omap_4430sdp); | ||
153 | DEBUG_LL_OMAP4(3, omap4_panda); | ||
154 | |||
155 | /* omap5 based boards using UART3 */ | ||
156 | DEBUG_LL_OMAP5(3, omap5_sevm); | ||
157 | |||
158 | /* zoom2/3 external uart */ | ||
159 | DEBUG_LL_ZOOM(omap_zoom2); | ||
160 | DEBUG_LL_ZOOM(omap_zoom3); | ||
161 | |||
162 | /* TI8168 base boards using UART3 */ | ||
163 | DEBUG_LL_TI81XX(3, ti8168evm); | ||
164 | |||
165 | /* TI8148 base boards using UART1 */ | ||
166 | DEBUG_LL_TI81XX(1, ti8148evm); | ||
167 | |||
168 | /* AM33XX base boards using UART1 */ | ||
169 | DEBUG_LL_AM33XX(1, am335xevm); | ||
170 | } while (0); | ||
171 | } | ||
172 | |||
173 | /* | ||
174 | * nothing to do | ||
175 | */ | ||
176 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index 453580410ae0..5d8768075dd9 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | #include <linux/omap-dma.h> | 24 | #include <linux/omap-dma.h> |
25 | 25 | ||
26 | #include "soc.h" | ||
26 | #include "omap_device.h" | 27 | #include "omap_device.h" |
27 | 28 | ||
28 | /* | 29 | /* |
@@ -118,4 +119,4 @@ static int __init omap2_mcbsp_init(void) | |||
118 | 119 | ||
119 | return 0; | 120 | return 0; |
120 | } | 121 | } |
121 | arch_initcall(omap2_mcbsp_init); | 122 | omap_arch_initcall(omap2_mcbsp_init); |
diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c index f7f38c7fd5ff..f6daae821ebb 100644 --- a/arch/arm/mach-omap2/omap-iommu.c +++ b/arch/arm/mach-omap2/omap-iommu.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
17 | 17 | ||
18 | #include <linux/platform_data/iommu-omap.h> | 18 | #include <linux/platform_data/iommu-omap.h> |
19 | #include "soc.h" | ||
19 | #include "omap_hwmod.h" | 20 | #include "omap_hwmod.h" |
20 | #include "omap_device.h" | 21 | #include "omap_device.h" |
21 | 22 | ||
@@ -60,7 +61,7 @@ static int __init omap_iommu_init(void) | |||
60 | return omap_hwmod_for_each_by_class("mmu", omap_iommu_dev_init, NULL); | 61 | return omap_hwmod_for_each_by_class("mmu", omap_iommu_dev_init, NULL); |
61 | } | 62 | } |
62 | /* must be ready before omap3isp is probed */ | 63 | /* must be ready before omap3isp is probed */ |
63 | subsys_initcall(omap_iommu_init); | 64 | omap_subsys_initcall(omap_iommu_init); |
64 | 65 | ||
65 | static void __exit omap_iommu_exit(void) | 66 | static void __exit omap_iommu_exit(void) |
66 | { | 67 | { |
diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c index 8c5b5e3e3541..f8bb3b9b6a76 100644 --- a/arch/arm/mach-omap2/omap-wakeupgen.c +++ b/arch/arm/mach-omap2/omap-wakeupgen.c | |||
@@ -45,7 +45,7 @@ | |||
45 | 45 | ||
46 | static void __iomem *wakeupgen_base; | 46 | static void __iomem *wakeupgen_base; |
47 | static void __iomem *sar_base; | 47 | static void __iomem *sar_base; |
48 | static DEFINE_SPINLOCK(wakeupgen_lock); | 48 | static DEFINE_RAW_SPINLOCK(wakeupgen_lock); |
49 | static unsigned int irq_target_cpu[MAX_IRQS]; | 49 | static unsigned int irq_target_cpu[MAX_IRQS]; |
50 | static unsigned int irq_banks = MAX_NR_REG_BANKS; | 50 | static unsigned int irq_banks = MAX_NR_REG_BANKS; |
51 | static unsigned int max_irqs = MAX_IRQS; | 51 | static unsigned int max_irqs = MAX_IRQS; |
@@ -133,9 +133,9 @@ static void wakeupgen_mask(struct irq_data *d) | |||
133 | { | 133 | { |
134 | unsigned long flags; | 134 | unsigned long flags; |
135 | 135 | ||
136 | spin_lock_irqsave(&wakeupgen_lock, flags); | 136 | raw_spin_lock_irqsave(&wakeupgen_lock, flags); |
137 | _wakeupgen_clear(d->irq, irq_target_cpu[d->irq]); | 137 | _wakeupgen_clear(d->irq, irq_target_cpu[d->irq]); |
138 | spin_unlock_irqrestore(&wakeupgen_lock, flags); | 138 | raw_spin_unlock_irqrestore(&wakeupgen_lock, flags); |
139 | } | 139 | } |
140 | 140 | ||
141 | /* | 141 | /* |
@@ -145,9 +145,9 @@ static void wakeupgen_unmask(struct irq_data *d) | |||
145 | { | 145 | { |
146 | unsigned long flags; | 146 | unsigned long flags; |
147 | 147 | ||
148 | spin_lock_irqsave(&wakeupgen_lock, flags); | 148 | raw_spin_lock_irqsave(&wakeupgen_lock, flags); |
149 | _wakeupgen_set(d->irq, irq_target_cpu[d->irq]); | 149 | _wakeupgen_set(d->irq, irq_target_cpu[d->irq]); |
150 | spin_unlock_irqrestore(&wakeupgen_lock, flags); | 150 | raw_spin_unlock_irqrestore(&wakeupgen_lock, flags); |
151 | } | 151 | } |
152 | 152 | ||
153 | #ifdef CONFIG_HOTPLUG_CPU | 153 | #ifdef CONFIG_HOTPLUG_CPU |
@@ -188,7 +188,7 @@ static void wakeupgen_irqmask_all(unsigned int cpu, unsigned int set) | |||
188 | { | 188 | { |
189 | unsigned long flags; | 189 | unsigned long flags; |
190 | 190 | ||
191 | spin_lock_irqsave(&wakeupgen_lock, flags); | 191 | raw_spin_lock_irqsave(&wakeupgen_lock, flags); |
192 | if (set) { | 192 | if (set) { |
193 | _wakeupgen_save_masks(cpu); | 193 | _wakeupgen_save_masks(cpu); |
194 | _wakeupgen_set_all(cpu, WKG_MASK_ALL); | 194 | _wakeupgen_set_all(cpu, WKG_MASK_ALL); |
@@ -196,7 +196,7 @@ static void wakeupgen_irqmask_all(unsigned int cpu, unsigned int set) | |||
196 | _wakeupgen_set_all(cpu, WKG_UNMASK_ALL); | 196 | _wakeupgen_set_all(cpu, WKG_UNMASK_ALL); |
197 | _wakeupgen_restore_masks(cpu); | 197 | _wakeupgen_restore_masks(cpu); |
198 | } | 198 | } |
199 | spin_unlock_irqrestore(&wakeupgen_lock, flags); | 199 | raw_spin_unlock_irqrestore(&wakeupgen_lock, flags); |
200 | } | 200 | } |
201 | #endif | 201 | #endif |
202 | 202 | ||
diff --git a/arch/arm/mach-omap2/omap2-restart.c b/arch/arm/mach-omap2/omap2-restart.c index be6bc89ab1e8..719b716a4494 100644 --- a/arch/arm/mach-omap2/omap2-restart.c +++ b/arch/arm/mach-omap2/omap2-restart.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/clk.h> | 13 | #include <linux/clk.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | 15 | ||
16 | #include "soc.h" | ||
16 | #include "common.h" | 17 | #include "common.h" |
17 | #include "prm2xxx.h" | 18 | #include "prm2xxx.h" |
18 | 19 | ||
@@ -62,4 +63,4 @@ static int __init omap2xxx_common_look_up_clks_for_reset(void) | |||
62 | 63 | ||
63 | return 0; | 64 | return 0; |
64 | } | 65 | } |
65 | core_initcall(omap2xxx_common_look_up_clks_for_reset); | 66 | omap_core_initcall(omap2xxx_common_look_up_clks_for_reset); |
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 547094883606..708bb115a27f 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c | |||
@@ -226,7 +226,7 @@ static int __init omap_l2_cache_init(void) | |||
226 | 226 | ||
227 | return 0; | 227 | return 0; |
228 | } | 228 | } |
229 | early_initcall(omap_l2_cache_init); | 229 | omap_early_initcall(omap_l2_cache_init); |
230 | #endif | 230 | #endif |
231 | 231 | ||
232 | void __iomem *omap4_get_sar_ram_base(void) | 232 | void __iomem *omap4_get_sar_ram_base(void) |
@@ -254,7 +254,7 @@ static int __init omap4_sar_ram_init(void) | |||
254 | 254 | ||
255 | return 0; | 255 | return 0; |
256 | } | 256 | } |
257 | early_initcall(omap4_sar_ram_init); | 257 | omap_early_initcall(omap4_sar_ram_init); |
258 | 258 | ||
259 | void __init omap_gic_of_init(void) | 259 | void __init omap_gic_of_init(void) |
260 | { | 260 | { |
diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c index 6ee3ad3dd95a..381be7ac0c17 100644 --- a/arch/arm/mach-omap2/omap_device.c +++ b/arch/arm/mach-omap2/omap_device.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/of.h> | 36 | #include <linux/of.h> |
37 | #include <linux/notifier.h> | 37 | #include <linux/notifier.h> |
38 | 38 | ||
39 | #include "soc.h" | ||
39 | #include "omap_device.h" | 40 | #include "omap_device.h" |
40 | #include "omap_hwmod.h" | 41 | #include "omap_hwmod.h" |
41 | 42 | ||
@@ -840,7 +841,7 @@ static int __init omap_device_init(void) | |||
840 | bus_register_notifier(&platform_bus_type, &platform_nb); | 841 | bus_register_notifier(&platform_bus_type, &platform_nb); |
841 | return 0; | 842 | return 0; |
842 | } | 843 | } |
843 | core_initcall(omap_device_init); | 844 | omap_core_initcall(omap_device_init); |
844 | 845 | ||
845 | /** | 846 | /** |
846 | * omap_device_late_idle - idle devices without drivers | 847 | * omap_device_late_idle - idle devices without drivers |
@@ -878,4 +879,4 @@ static int __init omap_device_late_init(void) | |||
878 | bus_for_each_dev(&platform_bus_type, NULL, NULL, omap_device_late_idle); | 879 | bus_for_each_dev(&platform_bus_type, NULL, NULL, omap_device_late_idle); |
879 | return 0; | 880 | return 0; |
880 | } | 881 | } |
881 | late_initcall(omap_device_late_init); | 882 | omap_late_initcall(omap_device_late_init); |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 6804d474a47d..a8984989dec8 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -3311,7 +3311,7 @@ static int __init omap_hwmod_setup_all(void) | |||
3311 | 3311 | ||
3312 | return 0; | 3312 | return 0; |
3313 | } | 3313 | } |
3314 | core_initcall(omap_hwmod_setup_all); | 3314 | omap_core_initcall(omap_hwmod_setup_all); |
3315 | 3315 | ||
3316 | /** | 3316 | /** |
3317 | * omap_hwmod_enable - enable an omap_hwmod | 3317 | * omap_hwmod_enable - enable an omap_hwmod |
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index a1849a883702..7ec1083ff604 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c | |||
@@ -2702,13 +2702,6 @@ static struct resource omap44xx_usb_phy_and_pll_addrs[] = { | |||
2702 | .end = 0x4a0ae000, | 2702 | .end = 0x4a0ae000, |
2703 | .flags = IORESOURCE_MEM, | 2703 | .flags = IORESOURCE_MEM, |
2704 | }, | 2704 | }, |
2705 | { | ||
2706 | /* XXX: Remove this once control module driver is in place */ | ||
2707 | .name = "ctrl_dev", | ||
2708 | .start = 0x4a002300, | ||
2709 | .end = 0x4a002303, | ||
2710 | .flags = IORESOURCE_MEM, | ||
2711 | }, | ||
2712 | { } | 2705 | { } |
2713 | }; | 2706 | }; |
2714 | 2707 | ||
@@ -6155,12 +6148,6 @@ static struct omap_hwmod_addr_space omap44xx_usb_otg_hs_addrs[] = { | |||
6155 | .pa_end = 0x4a0ab7ff, | 6148 | .pa_end = 0x4a0ab7ff, |
6156 | .flags = ADDR_TYPE_RT | 6149 | .flags = ADDR_TYPE_RT |
6157 | }, | 6150 | }, |
6158 | { | ||
6159 | /* XXX: Remove this once control module driver is in place */ | ||
6160 | .pa_start = 0x4a00233c, | ||
6161 | .pa_end = 0x4a00233f, | ||
6162 | .flags = ADDR_TYPE_RT | ||
6163 | }, | ||
6164 | { } | 6151 | { } |
6165 | }; | 6152 | }; |
6166 | 6153 | ||
diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c index e237602e10ea..eb8a25de67ed 100644 --- a/arch/arm/mach-omap2/omap_phy_internal.c +++ b/arch/arm/mach-omap2/omap_phy_internal.c | |||
@@ -63,7 +63,7 @@ static int __init omap4430_phy_power_down(void) | |||
63 | 63 | ||
64 | return 0; | 64 | return 0; |
65 | } | 65 | } |
66 | early_initcall(omap4430_phy_power_down); | 66 | omap_early_initcall(omap4430_phy_power_down); |
67 | 67 | ||
68 | void am35x_musb_reset(void) | 68 | void am35x_musb_reset(void) |
69 | { | 69 | { |
diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c index 62772e0e0d69..fc67add76444 100644 --- a/arch/arm/mach-omap2/opp3xxx_data.c +++ b/arch/arm/mach-omap2/opp3xxx_data.c | |||
@@ -168,4 +168,4 @@ int __init omap3_opp_init(void) | |||
168 | 168 | ||
169 | return r; | 169 | return r; |
170 | } | 170 | } |
171 | device_initcall(omap3_opp_init); | 171 | omap_device_initcall(omap3_opp_init); |
diff --git a/arch/arm/mach-omap2/opp4xxx_data.c b/arch/arm/mach-omap2/opp4xxx_data.c index d470b728e720..1ef7a3e5ce4a 100644 --- a/arch/arm/mach-omap2/opp4xxx_data.c +++ b/arch/arm/mach-omap2/opp4xxx_data.c | |||
@@ -177,4 +177,4 @@ int __init omap4_opp_init(void) | |||
177 | ARRAY_SIZE(omap446x_opp_def_list)); | 177 | ARRAY_SIZE(omap446x_opp_def_list)); |
178 | return r; | 178 | return r; |
179 | } | 179 | } |
180 | device_initcall(omap4_opp_init); | 180 | omap_device_initcall(omap4_opp_init); |
diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c index 6db89ae92389..1edd000a8143 100644 --- a/arch/arm/mach-omap2/pm-debug.c +++ b/arch/arm/mach-omap2/pm-debug.c | |||
@@ -277,6 +277,6 @@ static int __init pm_dbg_init(void) | |||
277 | 277 | ||
278 | return 0; | 278 | return 0; |
279 | } | 279 | } |
280 | arch_initcall(pm_dbg_init); | 280 | omap_arch_initcall(pm_dbg_init); |
281 | 281 | ||
282 | #endif | 282 | #endif |
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 9a9be3c9f208..cd6682df5625 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c | |||
@@ -273,7 +273,7 @@ static int __init omap2_common_pm_init(void) | |||
273 | 273 | ||
274 | return 0; | 274 | return 0; |
275 | } | 275 | } |
276 | postcore_initcall(omap2_common_pm_init); | 276 | omap_postcore_initcall(omap2_common_pm_init); |
277 | 277 | ||
278 | int __init omap2_common_pm_late_init(void) | 278 | int __init omap2_common_pm_late_init(void) |
279 | { | 279 | { |
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 7be3622cfc85..2d93d8b23835 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -351,12 +351,10 @@ static void omap3_pm_idle(void) | |||
351 | if (omap_irq_pending()) | 351 | if (omap_irq_pending()) |
352 | goto out; | 352 | goto out; |
353 | 353 | ||
354 | trace_power_start(POWER_CSTATE, 1, smp_processor_id()); | ||
355 | trace_cpu_idle(1, smp_processor_id()); | 354 | trace_cpu_idle(1, smp_processor_id()); |
356 | 355 | ||
357 | omap_sram_idle(); | 356 | omap_sram_idle(); |
358 | 357 | ||
359 | trace_power_end(smp_processor_id()); | ||
360 | trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id()); | 358 | trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id()); |
361 | 359 | ||
362 | out: | 360 | out: |
diff --git a/arch/arm/mach-omap2/pmu.c b/arch/arm/mach-omap2/pmu.c index 0ef4d6aa758e..9debf822687c 100644 --- a/arch/arm/mach-omap2/pmu.c +++ b/arch/arm/mach-omap2/pmu.c | |||
@@ -88,4 +88,4 @@ static int __init omap_init_pmu(void) | |||
88 | 88 | ||
89 | return omap2_init_pmu(oh_num, oh_names); | 89 | return omap2_init_pmu(oh_num, oh_names); |
90 | } | 90 | } |
91 | subsys_initcall(omap_init_pmu); | 91 | omap_subsys_initcall(omap_init_pmu); |
diff --git a/arch/arm/mach-omap2/prm3xxx.c b/arch/arm/mach-omap2/prm3xxx.c index e648bd55b072..7721990d2006 100644 --- a/arch/arm/mach-omap2/prm3xxx.c +++ b/arch/arm/mach-omap2/prm3xxx.c | |||
@@ -427,7 +427,7 @@ static int __init omap3xxx_prm_late_init(void) | |||
427 | 427 | ||
428 | return ret; | 428 | return ret; |
429 | } | 429 | } |
430 | subsys_initcall(omap3xxx_prm_late_init); | 430 | omap_subsys_initcall(omap3xxx_prm_late_init); |
431 | 431 | ||
432 | static void __exit omap3xxx_prm_exit(void) | 432 | static void __exit omap3xxx_prm_exit(void) |
433 | { | 433 | { |
diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c index c05a343d465d..d35f98aabf7a 100644 --- a/arch/arm/mach-omap2/prm44xx.c +++ b/arch/arm/mach-omap2/prm44xx.c | |||
@@ -665,7 +665,7 @@ static int __init omap44xx_prm_late_init(void) | |||
665 | 665 | ||
666 | return omap_prcm_register_chain_handler(&omap4_prcm_irq_setup); | 666 | return omap_prcm_register_chain_handler(&omap4_prcm_irq_setup); |
667 | } | 667 | } |
668 | subsys_initcall(omap44xx_prm_late_init); | 668 | omap_subsys_initcall(omap44xx_prm_late_init); |
669 | 669 | ||
670 | static void __exit omap44xx_prm_exit(void) | 670 | static void __exit omap44xx_prm_exit(void) |
671 | { | 671 | { |
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index d01c373cbbef..8396b5b7e912 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
@@ -254,7 +254,7 @@ static int __init omap_serial_early_init(void) | |||
254 | 254 | ||
255 | return 0; | 255 | return 0; |
256 | } | 256 | } |
257 | core_initcall(omap_serial_early_init); | 257 | omap_core_initcall(omap_serial_early_init); |
258 | 258 | ||
259 | /** | 259 | /** |
260 | * omap_serial_init_port() - initialize single serial port | 260 | * omap_serial_init_port() - initialize single serial port |
diff --git a/arch/arm/mach-omap2/smartreflex-class3.c b/arch/arm/mach-omap2/smartreflex-class3.c index 1da8f03c479e..aee3c8940a30 100644 --- a/arch/arm/mach-omap2/smartreflex-class3.c +++ b/arch/arm/mach-omap2/smartreflex-class3.c | |||
@@ -12,6 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/power/smartreflex.h> | 14 | #include <linux/power/smartreflex.h> |
15 | #include "soc.h" | ||
15 | #include "voltage.h" | 16 | #include "voltage.h" |
16 | 17 | ||
17 | static int sr_class3_enable(struct omap_sr *sr) | 18 | static int sr_class3_enable(struct omap_sr *sr) |
@@ -58,4 +59,4 @@ static int __init sr_class3_init(void) | |||
58 | pr_info("SmartReflex Class3 initialized\n"); | 59 | pr_info("SmartReflex Class3 initialized\n"); |
59 | return sr_register_class(&class3_data); | 60 | return sr_register_class(&class3_data); |
60 | } | 61 | } |
61 | late_initcall(sr_class3_init); | 62 | omap_late_initcall(sr_class3_init); |
diff --git a/arch/arm/mach-omap2/soc.h b/arch/arm/mach-omap2/soc.h index f31d90774de0..092aedd7ed13 100644 --- a/arch/arm/mach-omap2/soc.h +++ b/arch/arm/mach-omap2/soc.h | |||
@@ -42,6 +42,9 @@ | |||
42 | #undef MULTI_OMAP2 | 42 | #undef MULTI_OMAP2 |
43 | #undef OMAP_NAME | 43 | #undef OMAP_NAME |
44 | 44 | ||
45 | #ifdef CONFIG_ARCH_MULTIPLATFORM | ||
46 | #define MULTI_OMAP2 | ||
47 | #endif | ||
45 | #ifdef CONFIG_SOC_OMAP2420 | 48 | #ifdef CONFIG_SOC_OMAP2420 |
46 | # ifdef OMAP_NAME | 49 | # ifdef OMAP_NAME |
47 | # undef MULTI_OMAP2 | 50 | # undef MULTI_OMAP2 |
@@ -112,6 +115,11 @@ int omap_type(void); | |||
112 | */ | 115 | */ |
113 | unsigned int omap_rev(void); | 116 | unsigned int omap_rev(void); |
114 | 117 | ||
118 | static inline int soc_is_omap(void) | ||
119 | { | ||
120 | return omap_rev() != 0; | ||
121 | } | ||
122 | |||
115 | /* | 123 | /* |
116 | * Get the CPU revision for OMAP devices | 124 | * Get the CPU revision for OMAP devices |
117 | */ | 125 | */ |
@@ -465,5 +473,26 @@ static inline unsigned int omap4_has_ ##feat(void) \ | |||
465 | 473 | ||
466 | OMAP4_HAS_FEATURE(perf_silicon, PERF_SILICON) | 474 | OMAP4_HAS_FEATURE(perf_silicon, PERF_SILICON) |
467 | 475 | ||
476 | /* | ||
477 | * We need to make sure omap initcalls don't run when | ||
478 | * multiplatform kernels are booted on other SoCs. | ||
479 | */ | ||
480 | #define omap_initcall(level, fn) \ | ||
481 | static int __init __used __##fn(void) \ | ||
482 | { \ | ||
483 | if (!soc_is_omap()) \ | ||
484 | return 0; \ | ||
485 | return fn(); \ | ||
486 | } \ | ||
487 | level(__##fn); | ||
488 | |||
489 | #define omap_early_initcall(fn) omap_initcall(early_initcall, fn) | ||
490 | #define omap_core_initcall(fn) omap_initcall(core_initcall, fn) | ||
491 | #define omap_postcore_initcall(fn) omap_initcall(postcore_initcall, fn) | ||
492 | #define omap_arch_initcall(fn) omap_initcall(arch_initcall, fn) | ||
493 | #define omap_subsys_initcall(fn) omap_initcall(subsys_initcall, fn) | ||
494 | #define omap_device_initcall(fn) omap_initcall(device_initcall, fn) | ||
495 | #define omap_late_initcall(fn) omap_initcall(late_initcall, fn) | ||
496 | |||
468 | #endif /* __ASSEMBLY__ */ | 497 | #endif /* __ASSEMBLY__ */ |
469 | 498 | ||
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index 6d1f7b187d7c..2bdd4cf17a8f 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c | |||
@@ -227,7 +227,7 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer, | |||
227 | int r = 0; | 227 | int r = 0; |
228 | 228 | ||
229 | if (of_have_populated_dt()) { | 229 | if (of_have_populated_dt()) { |
230 | np = omap_get_timer_dt(omap_timer_match, NULL); | 230 | np = omap_get_timer_dt(omap_timer_match, property); |
231 | if (!np) | 231 | if (!np) |
232 | return -ENODEV; | 232 | return -ENODEV; |
233 | 233 | ||
@@ -718,7 +718,7 @@ static int __init omap2_dm_timer_init(void) | |||
718 | 718 | ||
719 | return 0; | 719 | return 0; |
720 | } | 720 | } |
721 | arch_initcall(omap2_dm_timer_init); | 721 | omap_arch_initcall(omap2_dm_timer_init); |
722 | 722 | ||
723 | /** | 723 | /** |
724 | * omap2_override_clocksource - clocksource override with user configuration | 724 | * omap2_override_clocksource - clocksource override with user configuration |
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c index e49b40b4c90a..6a7aec6d1174 100644 --- a/arch/arm/mach-omap2/twl-common.c +++ b/arch/arm/mach-omap2/twl-common.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/i2c.h> | 23 | #include <linux/i2c.h> |
24 | #include <linux/i2c/twl.h> | 24 | #include <linux/i2c/twl.h> |
25 | #include <linux/gpio.h> | 25 | #include <linux/gpio.h> |
26 | #include <linux/string.h> | ||
26 | #include <linux/regulator/machine.h> | 27 | #include <linux/regulator/machine.h> |
27 | #include <linux/regulator/fixed.h> | 28 | #include <linux/regulator/fixed.h> |
28 | 29 | ||
@@ -56,7 +57,7 @@ void __init omap_pmic_init(int bus, u32 clkrate, | |||
56 | struct twl4030_platform_data *pmic_data) | 57 | struct twl4030_platform_data *pmic_data) |
57 | { | 58 | { |
58 | omap_mux_init_signal("sys_nirq", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE); | 59 | omap_mux_init_signal("sys_nirq", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE); |
59 | strncpy(pmic_i2c_board_info.type, pmic_type, | 60 | strlcpy(pmic_i2c_board_info.type, pmic_type, |
60 | sizeof(pmic_i2c_board_info.type)); | 61 | sizeof(pmic_i2c_board_info.type)); |
61 | pmic_i2c_board_info.irq = pmic_irq; | 62 | pmic_i2c_board_info.irq = pmic_irq; |
62 | pmic_i2c_board_info.platform_data = pmic_data; | 63 | pmic_i2c_board_info.platform_data = pmic_data; |
diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c index 8c4de2708cf2..3242a554ad6b 100644 --- a/arch/arm/mach-omap2/usb-musb.c +++ b/arch/arm/mach-omap2/usb-musb.c | |||
@@ -85,6 +85,9 @@ void __init usb_musb_init(struct omap_musb_board_data *musb_board_data) | |||
85 | musb_plat.mode = board_data->mode; | 85 | musb_plat.mode = board_data->mode; |
86 | musb_plat.extvbus = board_data->extvbus; | 86 | musb_plat.extvbus = board_data->extvbus; |
87 | 87 | ||
88 | if (cpu_is_omap44xx()) | ||
89 | musb_plat.has_mailbox = true; | ||
90 | |||
88 | if (soc_is_am35xx()) { | 91 | if (soc_is_am35xx()) { |
89 | oh_name = "am35x_otg_hs"; | 92 | oh_name = "am35x_otg_hs"; |
90 | name = "musb-am35x"; | 93 | name = "musb-am35x"; |
diff --git a/arch/arm/mach-omap2/wd_timer.c b/arch/arm/mach-omap2/wd_timer.c index 910243f54a05..d15c7bbab8e2 100644 --- a/arch/arm/mach-omap2/wd_timer.c +++ b/arch/arm/mach-omap2/wd_timer.c | |||
@@ -129,4 +129,4 @@ static int __init omap_init_wdt(void) | |||
129 | dev_name, oh->name); | 129 | dev_name, oh->name); |
130 | return 0; | 130 | return 0; |
131 | } | 131 | } |
132 | subsys_initcall(omap_init_wdt); | 132 | omap_subsys_initcall(omap_init_wdt); |
diff --git a/arch/arm/mach-orion5x/include/mach/uncompress.h b/arch/arm/mach-orion5x/include/mach/uncompress.h index 4322dba468a4..abd26b542c3c 100644 --- a/arch/arm/mach-orion5x/include/mach/uncompress.h +++ b/arch/arm/mach-orion5x/include/mach/uncompress.h | |||
@@ -46,4 +46,3 @@ static void flush(void) | |||
46 | * nothing to do | 46 | * nothing to do |
47 | */ | 47 | */ |
48 | #define arch_decomp_setup() | 48 | #define arch_decomp_setup() |
49 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-picoxcell/Kconfig b/arch/arm/mach-picoxcell/Kconfig index 868796f8085c..13bae78b215a 100644 --- a/arch/arm/mach-picoxcell/Kconfig +++ b/arch/arm/mach-picoxcell/Kconfig | |||
@@ -7,7 +7,6 @@ config ARCH_PICOXCELL | |||
7 | select DW_APB_TIMER | 7 | select DW_APB_TIMER |
8 | select DW_APB_TIMER_OF | 8 | select DW_APB_TIMER_OF |
9 | select GENERIC_CLOCKEVENTS | 9 | select GENERIC_CLOCKEVENTS |
10 | select GENERIC_GPIO | ||
11 | select HAVE_TCM | 10 | select HAVE_TCM |
12 | select NO_IOPORT | 11 | select NO_IOPORT |
13 | select SPARSE_IRQ | 12 | select SPARSE_IRQ |
diff --git a/arch/arm/mach-prima2/include/mach/uncompress.h b/arch/arm/mach-prima2/include/mach/uncompress.h index 15f3edcfbb47..d1513a33709a 100644 --- a/arch/arm/mach-prima2/include/mach/uncompress.h +++ b/arch/arm/mach-prima2/include/mach/uncompress.h | |||
@@ -17,8 +17,6 @@ void arch_decomp_setup(void) | |||
17 | { | 17 | { |
18 | } | 18 | } |
19 | 19 | ||
20 | #define arch_decomp_wdog() | ||
21 | |||
22 | static __inline__ void putc(char c) | 20 | static __inline__ void putc(char c) |
23 | { | 21 | { |
24 | /* | 22 | /* |
diff --git a/arch/arm/mach-pxa/include/mach/palmtreo.h b/arch/arm/mach-pxa/include/mach/palmtreo.h index 2d3f14e3be29..714b6574393e 100644 --- a/arch/arm/mach-pxa/include/mach/palmtreo.h +++ b/arch/arm/mach-pxa/include/mach/palmtreo.h | |||
@@ -38,13 +38,14 @@ | |||
38 | #define GPIO_NR_TREO_LCD_POWER 25 | 38 | #define GPIO_NR_TREO_LCD_POWER 25 |
39 | 39 | ||
40 | /* Treo680 specific GPIOs */ | 40 | /* Treo680 specific GPIOs */ |
41 | #ifdef CONFIG_MACH_TREO680 | ||
42 | #define GPIO_NR_TREO680_SD_READONLY 33 | 41 | #define GPIO_NR_TREO680_SD_READONLY 33 |
43 | #define GPIO_NR_TREO680_SD_POWER 42 | 42 | #define GPIO_NR_TREO680_SD_POWER 42 |
44 | #define GPIO_NR_TREO680_VIBRATE_EN 44 | 43 | #define GPIO_NR_TREO680_VIBRATE_EN 44 |
45 | #define GPIO_NR_TREO680_KEYB_BL 24 | 44 | #define GPIO_NR_TREO680_KEYB_BL 24 |
46 | #define GPIO_NR_TREO680_BT_EN 43 | 45 | #define GPIO_NR_TREO680_BT_EN 43 |
47 | #endif /* CONFIG_MACH_TREO680 */ | 46 | #define GPIO_NR_TREO680_LCD_POWER 77 |
47 | #define GPIO_NR_TREO680_LCD_EN 86 | ||
48 | #define GPIO_NR_TREO680_LCD_EN_N 25 | ||
48 | 49 | ||
49 | /* Centro685 specific GPIOs */ | 50 | /* Centro685 specific GPIOs */ |
50 | #define GPIO_NR_CENTRO_SD_POWER 21 | 51 | #define GPIO_NR_CENTRO_SD_POWER 21 |
diff --git a/arch/arm/mach-pxa/include/mach/smemc.h b/arch/arm/mach-pxa/include/mach/smemc.h index b7de471b273a..b802f285fe00 100644 --- a/arch/arm/mach-pxa/include/mach/smemc.h +++ b/arch/arm/mach-pxa/include/mach/smemc.h | |||
@@ -37,6 +37,7 @@ | |||
37 | #define CSADRCFG1 (SMEMC_VIRT + 0x84) /* Address Configuration Register for CS1 */ | 37 | #define CSADRCFG1 (SMEMC_VIRT + 0x84) /* Address Configuration Register for CS1 */ |
38 | #define CSADRCFG2 (SMEMC_VIRT + 0x88) /* Address Configuration Register for CS2 */ | 38 | #define CSADRCFG2 (SMEMC_VIRT + 0x88) /* Address Configuration Register for CS2 */ |
39 | #define CSADRCFG3 (SMEMC_VIRT + 0x8C) /* Address Configuration Register for CS3 */ | 39 | #define CSADRCFG3 (SMEMC_VIRT + 0x8C) /* Address Configuration Register for CS3 */ |
40 | #define CSMSADRCFG (SMEMC_VIRT + 0xA0) /* Chip Select Configuration Register */ | ||
40 | 41 | ||
41 | /* | 42 | /* |
42 | * More handy macros for PCMCIA | 43 | * More handy macros for PCMCIA |
diff --git a/arch/arm/mach-pxa/include/mach/uncompress.h b/arch/arm/mach-pxa/include/mach/uncompress.h index 5519a34b667f..8c27757e68ff 100644 --- a/arch/arm/mach-pxa/include/mach/uncompress.h +++ b/arch/arm/mach-pxa/include/mach/uncompress.h | |||
@@ -72,8 +72,3 @@ static inline void arch_decomp_setup(void) | |||
72 | uart_is_pxa = 0; | 72 | uart_is_pxa = 0; |
73 | } | 73 | } |
74 | } | 74 | } |
75 | |||
76 | /* | ||
77 | * nothing to do | ||
78 | */ | ||
79 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-pxa/palmtreo.c b/arch/arm/mach-pxa/palmtreo.c index d17bda278782..a29849d181c8 100644 --- a/arch/arm/mach-pxa/palmtreo.c +++ b/arch/arm/mach-pxa/palmtreo.c | |||
@@ -98,9 +98,6 @@ static unsigned long treo_pin_config[] __initdata = { | |||
98 | GPIO96_KP_MKOUT_6, | 98 | GPIO96_KP_MKOUT_6, |
99 | GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH, /* Hotsync button */ | 99 | GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH, /* Hotsync button */ |
100 | 100 | ||
101 | /* LCD */ | ||
102 | GPIOxx_LCD_TFT_16BPP, | ||
103 | |||
104 | /* Quick Capture Interface */ | 101 | /* Quick Capture Interface */ |
105 | GPIO84_CIF_FV, | 102 | GPIO84_CIF_FV, |
106 | GPIO85_CIF_LV, | 103 | GPIO85_CIF_LV, |
@@ -140,6 +137,12 @@ static unsigned long treo680_pin_config[] __initdata = { | |||
140 | /* MATRIX KEYPAD - different wake up source */ | 137 | /* MATRIX KEYPAD - different wake up source */ |
141 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, | 138 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, |
142 | GPIO99_KP_MKIN_5, | 139 | GPIO99_KP_MKIN_5, |
140 | |||
141 | /* LCD... L_BIAS alt fn not configured on Treo680; is GPIO instead */ | ||
142 | GPIOxx_LCD_16BPP, | ||
143 | GPIO74_LCD_FCLK, | ||
144 | GPIO75_LCD_LCLK, | ||
145 | GPIO76_LCD_PCLK, | ||
143 | }; | 146 | }; |
144 | #endif /* CONFIG_MACH_TREO680 */ | 147 | #endif /* CONFIG_MACH_TREO680 */ |
145 | 148 | ||
@@ -155,6 +158,9 @@ static unsigned long centro685_pin_config[] __initdata = { | |||
155 | /* MATRIX KEYPAD - different wake up source */ | 158 | /* MATRIX KEYPAD - different wake up source */ |
156 | GPIO100_KP_MKIN_0, | 159 | GPIO100_KP_MKIN_0, |
157 | GPIO99_KP_MKIN_5 | WAKEUP_ON_LEVEL_HIGH, | 160 | GPIO99_KP_MKIN_5 | WAKEUP_ON_LEVEL_HIGH, |
161 | |||
162 | /* LCD */ | ||
163 | GPIOxx_LCD_TFT_16BPP, | ||
158 | }; | 164 | }; |
159 | #endif /* CONFIG_MACH_CENTRO */ | 165 | #endif /* CONFIG_MACH_CENTRO */ |
160 | 166 | ||
@@ -328,7 +334,6 @@ static inline void palmtreo_uhc_init(void) {} | |||
328 | /****************************************************************************** | 334 | /****************************************************************************** |
329 | * Vibra and LEDs | 335 | * Vibra and LEDs |
330 | ******************************************************************************/ | 336 | ******************************************************************************/ |
331 | #ifdef CONFIG_MACH_TREO680 | ||
332 | static struct gpio_led treo680_gpio_leds[] = { | 337 | static struct gpio_led treo680_gpio_leds[] = { |
333 | { | 338 | { |
334 | .name = "treo680:vibra:vibra", | 339 | .name = "treo680:vibra:vibra", |
@@ -379,21 +384,17 @@ static struct gpio_led_platform_data centro_gpio_led_info = { | |||
379 | static struct platform_device palmtreo_leds = { | 384 | static struct platform_device palmtreo_leds = { |
380 | .name = "leds-gpio", | 385 | .name = "leds-gpio", |
381 | .id = -1, | 386 | .id = -1, |
382 | .dev = { | ||
383 | .platform_data = &treo680_gpio_led_info, | ||
384 | } | ||
385 | }; | 387 | }; |
386 | 388 | ||
387 | static void __init palmtreo_leds_init(void) | 389 | static void __init palmtreo_leds_init(void) |
388 | { | 390 | { |
389 | if (machine_is_centro()) | 391 | if (machine_is_centro()) |
390 | palmtreo_leds.dev.platform_data = ¢ro_gpio_led_info; | 392 | palmtreo_leds.dev.platform_data = ¢ro_gpio_led_info; |
393 | else if (machine_is_treo680()) | ||
394 | palmtreo_leds.dev.platform_data = &treo680_gpio_led_info; | ||
391 | 395 | ||
392 | platform_device_register(&palmtreo_leds); | 396 | platform_device_register(&palmtreo_leds); |
393 | } | 397 | } |
394 | #else | ||
395 | static inline void palmtreo_leds_init(void) {} | ||
396 | #endif | ||
397 | 398 | ||
398 | /****************************************************************************** | 399 | /****************************************************************************** |
399 | * Machine init | 400 | * Machine init |
@@ -424,10 +425,59 @@ static void __init palmphone_common_init(void) | |||
424 | } | 425 | } |
425 | 426 | ||
426 | #ifdef CONFIG_MACH_TREO680 | 427 | #ifdef CONFIG_MACH_TREO680 |
428 | void __init treo680_gpio_init(void) | ||
429 | { | ||
430 | unsigned int gpio; | ||
431 | |||
432 | /* drive all three lcd gpios high initially */ | ||
433 | const unsigned long lcd_flags = GPIOF_INIT_HIGH | GPIOF_DIR_OUT; | ||
434 | |||
435 | /* | ||
436 | * LCD GPIO initialization... | ||
437 | */ | ||
438 | |||
439 | /* | ||
440 | * This is likely the power to the lcd. Toggling it low/high appears to | ||
441 | * turn the lcd off/on. Can be toggled after lcd is initialized without | ||
442 | * any apparent adverse effects to the lcd operation. Note that this | ||
443 | * gpio line is used by the lcd controller as the L_BIAS signal, but | ||
444 | * treo680 configures it as gpio. | ||
445 | */ | ||
446 | gpio = GPIO_NR_TREO680_LCD_POWER; | ||
447 | if (gpio_request_one(gpio, lcd_flags, "LCD power") < 0) | ||
448 | goto fail; | ||
449 | |||
450 | /* | ||
451 | * These two are called "enables", for lack of a better understanding. | ||
452 | * If either of these are toggled after the lcd is initialized, the | ||
453 | * image becomes degraded. N.B. The IPL shipped with the treo | ||
454 | * configures GPIO_NR_TREO680_LCD_EN_N as output and drives it high. If | ||
455 | * the IPL is ever reprogrammed, this initialization may be need to be | ||
456 | * revisited. | ||
457 | */ | ||
458 | gpio = GPIO_NR_TREO680_LCD_EN; | ||
459 | if (gpio_request_one(gpio, lcd_flags, "LCD enable") < 0) | ||
460 | goto fail; | ||
461 | gpio = GPIO_NR_TREO680_LCD_EN_N; | ||
462 | if (gpio_request_one(gpio, lcd_flags, "LCD enable_n") < 0) | ||
463 | goto fail; | ||
464 | |||
465 | /* driving this low turns LCD on */ | ||
466 | gpio_set_value(GPIO_NR_TREO680_LCD_EN_N, 0); | ||
467 | |||
468 | return; | ||
469 | fail: | ||
470 | pr_err("gpio %d initialization failed\n", gpio); | ||
471 | gpio_free(GPIO_NR_TREO680_LCD_POWER); | ||
472 | gpio_free(GPIO_NR_TREO680_LCD_EN); | ||
473 | gpio_free(GPIO_NR_TREO680_LCD_EN_N); | ||
474 | } | ||
475 | |||
427 | static void __init treo680_init(void) | 476 | static void __init treo680_init(void) |
428 | { | 477 | { |
429 | pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config)); | 478 | pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config)); |
430 | palmphone_common_init(); | 479 | palmphone_common_init(); |
480 | treo680_gpio_init(); | ||
431 | palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY, | 481 | palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY, |
432 | GPIO_NR_TREO680_SD_POWER, 0); | 482 | GPIO_NR_TREO680_SD_POWER, 0); |
433 | } | 483 | } |
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index 616cb87b6179..69985b06c0da 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c | |||
@@ -53,17 +53,25 @@ static unsigned long ac97_reset_config[] = { | |||
53 | GPIO95_AC97_nRESET, | 53 | GPIO95_AC97_nRESET, |
54 | }; | 54 | }; |
55 | 55 | ||
56 | void pxa27x_assert_ac97reset(int reset_gpio, int on) | 56 | void pxa27x_configure_ac97reset(int reset_gpio, bool to_gpio) |
57 | { | 57 | { |
58 | /* | ||
59 | * This helper function is used to work around a bug in the pxa27x's | ||
60 | * ac97 controller during a warm reset. The configuration of the | ||
61 | * reset_gpio is changed as follows: | ||
62 | * to_gpio == true: configured to generic output gpio and driven high | ||
63 | * to_gpio == false: configured to ac97 controller alt fn AC97_nRESET | ||
64 | */ | ||
65 | |||
58 | if (reset_gpio == 113) | 66 | if (reset_gpio == 113) |
59 | pxa2xx_mfp_config(on ? &ac97_reset_config[0] : | 67 | pxa2xx_mfp_config(to_gpio ? &ac97_reset_config[0] : |
60 | &ac97_reset_config[1], 1); | 68 | &ac97_reset_config[1], 1); |
61 | 69 | ||
62 | if (reset_gpio == 95) | 70 | if (reset_gpio == 95) |
63 | pxa2xx_mfp_config(on ? &ac97_reset_config[2] : | 71 | pxa2xx_mfp_config(to_gpio ? &ac97_reset_config[2] : |
64 | &ac97_reset_config[3], 1); | 72 | &ac97_reset_config[3], 1); |
65 | } | 73 | } |
66 | EXPORT_SYMBOL_GPL(pxa27x_assert_ac97reset); | 74 | EXPORT_SYMBOL_GPL(pxa27x_configure_ac97reset); |
67 | 75 | ||
68 | /* Crystal clock: 13MHz */ | 76 | /* Crystal clock: 13MHz */ |
69 | #define BASE_CLK 13000000 | 77 | #define BASE_CLK 13000000 |
diff --git a/arch/arm/mach-pxa/smemc.c b/arch/arm/mach-pxa/smemc.c index 79923058d10f..f38aa890b2c9 100644 --- a/arch/arm/mach-pxa/smemc.c +++ b/arch/arm/mach-pxa/smemc.c | |||
@@ -40,6 +40,8 @@ static void pxa3xx_smemc_resume(void) | |||
40 | __raw_writel(csadrcfg[1], CSADRCFG1); | 40 | __raw_writel(csadrcfg[1], CSADRCFG1); |
41 | __raw_writel(csadrcfg[2], CSADRCFG2); | 41 | __raw_writel(csadrcfg[2], CSADRCFG2); |
42 | __raw_writel(csadrcfg[3], CSADRCFG3); | 42 | __raw_writel(csadrcfg[3], CSADRCFG3); |
43 | /* CSMSADRCFG wakes up in its default state (0), so we need to set it */ | ||
44 | __raw_writel(0x2, CSMSADRCFG); | ||
43 | } | 45 | } |
44 | 46 | ||
45 | static struct syscore_ops smemc_syscore_ops = { | 47 | static struct syscore_ops smemc_syscore_ops = { |
@@ -49,8 +51,19 @@ static struct syscore_ops smemc_syscore_ops = { | |||
49 | 51 | ||
50 | static int __init smemc_init(void) | 52 | static int __init smemc_init(void) |
51 | { | 53 | { |
52 | if (cpu_is_pxa3xx()) | 54 | if (cpu_is_pxa3xx()) { |
55 | /* | ||
56 | * The only documentation we have on the | ||
57 | * Chip Select Configuration Register (CSMSADRCFG) is that | ||
58 | * it must be programmed to 0x2. | ||
59 | * Moreover, in the bit definitions, the second bit | ||
60 | * (CSMSADRCFG[1]) is called "SETALWAYS". | ||
61 | * Other bits are reserved in this register. | ||
62 | */ | ||
63 | __raw_writel(0x2, CSMSADRCFG); | ||
64 | |||
53 | register_syscore_ops(&smemc_syscore_ops); | 65 | register_syscore_ops(&smemc_syscore_ops); |
66 | } | ||
54 | 67 | ||
55 | return 0; | 68 | return 0; |
56 | } | 69 | } |
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index f90aa27ad599..362726c49c70 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
@@ -732,7 +732,7 @@ static inline void spitz_lcd_init(void) {} | |||
732 | #endif | 732 | #endif |
733 | 733 | ||
734 | /****************************************************************************** | 734 | /****************************************************************************** |
735 | * Framebuffer | 735 | * NAND Flash |
736 | ******************************************************************************/ | 736 | ******************************************************************************/ |
737 | #if defined(CONFIG_MTD_NAND_SHARPSL) || defined(CONFIG_MTD_NAND_SHARPSL_MODULE) | 737 | #if defined(CONFIG_MTD_NAND_SHARPSL) || defined(CONFIG_MTD_NAND_SHARPSL_MODULE) |
738 | static struct mtd_partition spitz_nand_partitions[] = { | 738 | static struct mtd_partition spitz_nand_partitions[] = { |
@@ -858,7 +858,7 @@ static inline void spitz_nor_init(void) {} | |||
858 | #endif | 858 | #endif |
859 | 859 | ||
860 | /****************************************************************************** | 860 | /****************************************************************************** |
861 | * GPIO expander | 861 | * I2C devices |
862 | ******************************************************************************/ | 862 | ******************************************************************************/ |
863 | #if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE) | 863 | #if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE) |
864 | static struct pca953x_platform_data akita_pca953x_pdata = { | 864 | static struct pca953x_platform_data akita_pca953x_pdata = { |
diff --git a/arch/arm/mach-realview/include/mach/uncompress.h b/arch/arm/mach-realview/include/mach/uncompress.h index 83050378ffd2..cfa30d21783b 100644 --- a/arch/arm/mach-realview/include/mach/uncompress.h +++ b/arch/arm/mach-realview/include/mach/uncompress.h | |||
@@ -75,4 +75,3 @@ static inline void flush(void) | |||
75 | * nothing to do | 75 | * nothing to do |
76 | */ | 76 | */ |
77 | #define arch_decomp_setup() | 77 | #define arch_decomp_setup() |
78 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-rpc/include/mach/uncompress.h b/arch/arm/mach-rpc/include/mach/uncompress.h index 9cd9bcdad6cc..0fd4b0b8ef22 100644 --- a/arch/arm/mach-rpc/include/mach/uncompress.h +++ b/arch/arm/mach-rpc/include/mach/uncompress.h | |||
@@ -189,8 +189,3 @@ static void arch_decomp_setup(void) | |||
189 | if (nr_pages * page_size < 4096*1024) error("<4M of mem\n"); | 189 | if (nr_pages * page_size < 4096*1024) error("<4M of mem\n"); |
190 | } | 190 | } |
191 | #endif | 191 | #endif |
192 | |||
193 | /* | ||
194 | * nothing to do | ||
195 | */ | ||
196 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig deleted file mode 100644 index 68d89cb96af0..000000000000 --- a/arch/arm/mach-s3c2410/Kconfig +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | # Copyright 2007 Simtec Electronics | ||
2 | # | ||
3 | # Licensed under GPLv2 | ||
4 | |||
5 | # cpu frequency scaling support | ||
6 | |||
7 | config S3C2410_CPUFREQ | ||
8 | bool | ||
9 | depends on CPU_FREQ_S3C24XX && CPU_S3C2410 | ||
10 | select S3C2410_CPUFREQ_UTILS | ||
11 | help | ||
12 | CPU Frequency scaling support for S3C2410 | ||
13 | |||
14 | config S3C2410_PLLTABLE | ||
15 | bool | ||
16 | depends on S3C2410_CPUFREQ && CPU_FREQ_S3C24XX_PLL | ||
17 | default y | ||
18 | help | ||
19 | Select the PLL table for the S3C2410 | ||
20 | |||
diff --git a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile deleted file mode 100644 index 6b9a316e0041..000000000000 --- a/arch/arm/mach-s3c2410/Makefile +++ /dev/null | |||
@@ -1,14 +0,0 @@ | |||
1 | # arch/arm/mach-s3c2410/Makefile | ||
2 | # | ||
3 | # Copyright 2007 Simtec Electronics | ||
4 | # | ||
5 | # Licensed under GPLv2 | ||
6 | |||
7 | obj-y := | ||
8 | obj-m := | ||
9 | obj-n := | ||
10 | obj- := | ||
11 | |||
12 | obj-$(CONFIG_S3C2410_CPUFREQ) += cpu-freq.o | ||
13 | obj-$(CONFIG_S3C2410_PLLTABLE) += pll.o | ||
14 | |||
diff --git a/arch/arm/mach-s3c2412/Kconfig b/arch/arm/mach-s3c2412/Kconfig deleted file mode 100644 index 495f6928cbaa..000000000000 --- a/arch/arm/mach-s3c2412/Kconfig +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | # Copyright 2007 Simtec Electronics | ||
2 | # | ||
3 | # Licensed under GPLv2 | ||
4 | |||
5 | # Note, the S3C2412 IOtiming support is in plat-s3c24xx | ||
6 | |||
7 | config S3C2412_CPUFREQ | ||
8 | bool | ||
9 | depends on CPU_FREQ_S3C24XX && CPU_S3C2412 | ||
10 | default y | ||
11 | select S3C2412_IOTIMING | ||
12 | help | ||
13 | CPU Frequency scaling support for S3C2412 and S3C2413 SoC CPUs. | ||
diff --git a/arch/arm/mach-s3c2412/Makefile b/arch/arm/mach-s3c2412/Makefile deleted file mode 100644 index 41a6c279fb2f..000000000000 --- a/arch/arm/mach-s3c2412/Makefile +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | # arch/arm/mach-s3c2412/Makefile | ||
2 | # | ||
3 | # Copyright 2007 Simtec Electronics | ||
4 | # | ||
5 | # Licensed under GPLv2 | ||
6 | |||
7 | obj-y := | ||
8 | obj-m := | ||
9 | obj-n := | ||
10 | obj- := | ||
11 | |||
12 | obj-$(CONFIG_S3C2412_CPUFREQ) += cpu-freq.o | ||
diff --git a/arch/arm/mach-s3c2412/gpio.c b/arch/arm/mach-s3c2412/gpio.c deleted file mode 100644 index 4526f6ba31a8..000000000000 --- a/arch/arm/mach-s3c2412/gpio.c +++ /dev/null | |||
@@ -1,62 +0,0 @@ | |||
1 | /* linux/arch/arm/mach-s3c2412/gpio.c | ||
2 | * | ||
3 | * Copyright (c) 2007 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * http://armlinux.simtec.co.uk/. | ||
7 | * | ||
8 | * S3C2412/S3C2413 specific GPIO support | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/types.h> | ||
17 | #include <linux/module.h> | ||
18 | #include <linux/interrupt.h> | ||
19 | #include <linux/gpio.h> | ||
20 | |||
21 | #include <asm/mach/arch.h> | ||
22 | #include <asm/mach/map.h> | ||
23 | |||
24 | #include <mach/regs-gpio.h> | ||
25 | #include <mach/hardware.h> | ||
26 | |||
27 | #include <plat/gpio-core.h> | ||
28 | |||
29 | int s3c2412_gpio_set_sleepcfg(unsigned int pin, unsigned int state) | ||
30 | { | ||
31 | struct samsung_gpio_chip *chip = samsung_gpiolib_getchip(pin); | ||
32 | unsigned long offs = pin - chip->chip.base; | ||
33 | unsigned long flags; | ||
34 | unsigned long slpcon; | ||
35 | |||
36 | offs *= 2; | ||
37 | |||
38 | if (pin < S3C2410_GPB(0)) | ||
39 | return -EINVAL; | ||
40 | |||
41 | if (pin >= S3C2410_GPF(0) && | ||
42 | pin <= S3C2410_GPG(16)) | ||
43 | return -EINVAL; | ||
44 | |||
45 | if (pin > S3C2410_GPH(16)) | ||
46 | return -EINVAL; | ||
47 | |||
48 | local_irq_save(flags); | ||
49 | |||
50 | slpcon = __raw_readl(chip->base + 0x0C); | ||
51 | |||
52 | slpcon &= ~(3 << offs); | ||
53 | slpcon |= state << offs; | ||
54 | |||
55 | __raw_writel(slpcon, chip->base + 0x0C); | ||
56 | |||
57 | local_irq_restore(flags); | ||
58 | |||
59 | return 0; | ||
60 | } | ||
61 | |||
62 | EXPORT_SYMBOL(s3c2412_gpio_set_sleepcfg); | ||
diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig deleted file mode 100644 index a4d7fd27bec5..000000000000 --- a/arch/arm/mach-s3c2440/Kconfig +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | # Copyright 2007 Simtec Electronics | ||
2 | # | ||
3 | # Licensed under GPLv2 | ||
4 | |||
5 | config S3C2440_CPUFREQ | ||
6 | bool "S3C2440/S3C2442 CPU Frequency scaling support" | ||
7 | depends on CPU_FREQ_S3C24XX && (CPU_S3C2440 || CPU_S3C2442) | ||
8 | default y | ||
9 | select S3C2410_CPUFREQ_UTILS | ||
10 | help | ||
11 | CPU Frequency scaling support for S3C2440 and S3C2442 SoC CPUs. | ||
12 | |||
13 | config S3C2440_XTAL_12000000 | ||
14 | bool | ||
15 | help | ||
16 | Indicate that the build needs to support 12MHz system | ||
17 | crystal. | ||
18 | |||
19 | config S3C2440_XTAL_16934400 | ||
20 | bool | ||
21 | help | ||
22 | Indicate that the build needs to support 16.9344MHz system | ||
23 | crystal. | ||
24 | |||
25 | config S3C2440_PLL_12000000 | ||
26 | bool | ||
27 | depends on S3C2440_CPUFREQ && S3C2440_XTAL_12000000 | ||
28 | default y if CPU_FREQ_S3C24XX_PLL | ||
29 | help | ||
30 | PLL tables for S3C2440 or S3C2442 CPUs with 12MHz crystals. | ||
31 | |||
32 | config S3C2440_PLL_16934400 | ||
33 | bool | ||
34 | depends on S3C2440_CPUFREQ && S3C2440_XTAL_16934400 | ||
35 | default y if CPU_FREQ_S3C24XX_PLL | ||
36 | help | ||
37 | PLL tables for S3C2440 or S3C2442 CPUs with 16.934MHz crystals. | ||
diff --git a/arch/arm/mach-s3c2440/Makefile b/arch/arm/mach-s3c2440/Makefile deleted file mode 100644 index c46092439814..000000000000 --- a/arch/arm/mach-s3c2440/Makefile +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | # arch/arm/mach-s3c2440/Makefile | ||
2 | # | ||
3 | # Copyright 2007 Simtec Electronics | ||
4 | # | ||
5 | # Licensed under GPLv2 | ||
6 | |||
7 | obj-y := | ||
8 | obj-m := | ||
9 | obj-n := | ||
10 | obj- := | ||
11 | |||
12 | obj-$(CONFIG_CPU_S3C2440) += dsc.o | ||
13 | |||
14 | obj-$(CONFIG_S3C2440_CPUFREQ) += s3c2440-cpufreq.o | ||
15 | |||
16 | obj-$(CONFIG_S3C2440_PLL_12000000) += s3c2440-pll-12000000.o | ||
17 | obj-$(CONFIG_S3C2440_PLL_16934400) += s3c2440-pll-16934400.o | ||
diff --git a/arch/arm/mach-s3c2440/dsc.c b/arch/arm/mach-s3c2440/dsc.c deleted file mode 100644 index 9ea66e31f626..000000000000 --- a/arch/arm/mach-s3c2440/dsc.c +++ /dev/null | |||
@@ -1,54 +0,0 @@ | |||
1 | /* linux/arch/arm/mach-s3c2440/dsc.c | ||
2 | * | ||
3 | * Copyright (c) 2004-2005 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Samsung S3C2440 Drive Strength Control support | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <linux/interrupt.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/module.h> | ||
18 | #include <linux/io.h> | ||
19 | |||
20 | #include <asm/mach/arch.h> | ||
21 | #include <asm/mach/map.h> | ||
22 | #include <asm/mach/irq.h> | ||
23 | |||
24 | #include <mach/hardware.h> | ||
25 | #include <asm/irq.h> | ||
26 | |||
27 | #include <mach/regs-gpio.h> | ||
28 | #include <mach/regs-dsc.h> | ||
29 | |||
30 | #include <plat/cpu.h> | ||
31 | #include <plat/s3c244x.h> | ||
32 | |||
33 | int s3c2440_set_dsc(unsigned int pin, unsigned int value) | ||
34 | { | ||
35 | void __iomem *base; | ||
36 | unsigned long val; | ||
37 | unsigned long flags; | ||
38 | unsigned long mask; | ||
39 | |||
40 | base = (pin & S3C2440_SELECT_DSC1) ? S3C2440_DSC1 : S3C2440_DSC0; | ||
41 | mask = 3 << S3C2440_DSC_GETSHIFT(pin); | ||
42 | |||
43 | local_irq_save(flags); | ||
44 | |||
45 | val = __raw_readl(base); | ||
46 | val &= ~mask; | ||
47 | val |= value & mask; | ||
48 | __raw_writel(val, base); | ||
49 | |||
50 | local_irq_restore(flags); | ||
51 | return 0; | ||
52 | } | ||
53 | |||
54 | EXPORT_SYMBOL(s3c2440_set_dsc); | ||
diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig index 25df14a9e268..37f513d1588e 100644 --- a/arch/arm/mach-s3c24xx/Kconfig +++ b/arch/arm/mach-s3c24xx/Kconfig | |||
@@ -9,6 +9,15 @@ | |||
9 | 9 | ||
10 | if ARCH_S3C24XX | 10 | if ARCH_S3C24XX |
11 | 11 | ||
12 | config PLAT_S3C24XX | ||
13 | def_bool y | ||
14 | select ARCH_REQUIRE_GPIOLIB | ||
15 | select NO_IOPORT | ||
16 | select S3C_DEV_NAND | ||
17 | select IRQ_DOMAIN | ||
18 | help | ||
19 | Base platform code for any Samsung S3C24XX device | ||
20 | |||
12 | menu "SAMSUNG S3C24XX SoCs Support" | 21 | menu "SAMSUNG S3C24XX SoCs Support" |
13 | 22 | ||
14 | comment "S3C24XX SoCs" | 23 | comment "S3C24XX SoCs" |
@@ -83,6 +92,17 @@ config CPU_S3C2443 | |||
83 | 92 | ||
84 | # common code | 93 | # common code |
85 | 94 | ||
95 | config S3C2410_CLOCK | ||
96 | bool | ||
97 | help | ||
98 | Clock code for the S3C2410, and similar processors which | ||
99 | is currently includes the S3C2410, S3C2440, S3C2442. | ||
100 | |||
101 | config S3C24XX_DCLK | ||
102 | bool | ||
103 | help | ||
104 | Clock code for supporting DCLK/CLKOUT on S3C24XX architectures | ||
105 | |||
86 | config S3C24XX_SMDK | 106 | config S3C24XX_SMDK |
87 | bool | 107 | bool |
88 | help | 108 | help |
@@ -111,6 +131,22 @@ config S3C24XX_SETUP_TS | |||
111 | help | 131 | help |
112 | Compile in platform device definition for Samsung TouchScreen. | 132 | Compile in platform device definition for Samsung TouchScreen. |
113 | 133 | ||
134 | config S3C24XX_DMA | ||
135 | bool "S3C2410 DMA support" | ||
136 | depends on ARCH_S3C24XX | ||
137 | select S3C_DMA | ||
138 | help | ||
139 | S3C2410 DMA support. This is needed for drivers like sound which | ||
140 | use the S3C2410's DMA system to move data to and from the | ||
141 | peripheral blocks. | ||
142 | |||
143 | config S3C2410_DMA_DEBUG | ||
144 | bool "S3C2410 DMA support debug" | ||
145 | depends on ARCH_S3C24XX && S3C2410_DMA | ||
146 | help | ||
147 | Enable debugging output for the DMA code. This option sends info | ||
148 | to the kernel log, at priority KERN_DEBUG. | ||
149 | |||
114 | config S3C2410_DMA | 150 | config S3C2410_DMA |
115 | bool | 151 | bool |
116 | depends on S3C24XX_DMA && (CPU_S3C2410 || CPU_S3C2442) | 152 | depends on S3C24XX_DMA && (CPU_S3C2410 || CPU_S3C2442) |
@@ -123,10 +159,92 @@ config S3C2410_PM | |||
123 | help | 159 | help |
124 | Power Management code common to S3C2410 and better | 160 | Power Management code common to S3C2410 and better |
125 | 161 | ||
162 | # low-level serial option nodes | ||
163 | |||
164 | config CPU_LLSERIAL_S3C2410_ONLY | ||
165 | bool | ||
166 | default y if CPU_LLSERIAL_S3C2410 && !CPU_LLSERIAL_S3C2440 | ||
167 | |||
168 | config CPU_LLSERIAL_S3C2440_ONLY | ||
169 | bool | ||
170 | default y if CPU_LLSERIAL_S3C2440 && !CPU_LLSERIAL_S3C2410 | ||
171 | |||
172 | config CPU_LLSERIAL_S3C2410 | ||
173 | bool | ||
174 | help | ||
175 | Selected if there is an S3C2410 (or register compatible) serial | ||
176 | low-level implementation needed | ||
177 | |||
178 | config CPU_LLSERIAL_S3C2440 | ||
179 | bool | ||
180 | help | ||
181 | Selected if there is an S3C2440 (or register compatible) serial | ||
182 | low-level implementation needed | ||
183 | |||
184 | # gpio configurations | ||
185 | |||
186 | config S3C24XX_GPIO_EXTRA | ||
187 | int | ||
188 | default 128 if S3C24XX_GPIO_EXTRA128 | ||
189 | default 64 if S3C24XX_GPIO_EXTRA64 | ||
190 | default 16 if ARCH_H1940 | ||
191 | default 0 | ||
192 | |||
193 | config S3C24XX_GPIO_EXTRA64 | ||
194 | bool | ||
195 | help | ||
196 | Add an extra 64 gpio numbers to the available GPIO pool. This is | ||
197 | available for boards that need extra gpios for external devices. | ||
198 | |||
199 | config S3C24XX_GPIO_EXTRA128 | ||
200 | bool | ||
201 | help | ||
202 | Add an extra 128 gpio numbers to the available GPIO pool. This is | ||
203 | available for boards that need extra gpios for external devices. | ||
204 | |||
205 | # cpu frequency items common between s3c2410 and s3c2440/s3c2442 | ||
206 | |||
207 | config S3C2410_IOTIMING | ||
208 | bool | ||
209 | depends on CPU_FREQ_S3C24XX | ||
210 | help | ||
211 | Internal node to select io timing code that is common to the s3c2410 | ||
212 | and s3c2440/s3c2442 cpu frequency support. | ||
213 | |||
214 | config S3C2410_CPUFREQ_UTILS | ||
215 | bool | ||
216 | depends on CPU_FREQ_S3C24XX | ||
217 | help | ||
218 | Internal node to select timing code that is common to the s3c2410 | ||
219 | and s3c2440/s3c244 cpu frequency support. | ||
220 | |||
221 | # cpu frequency support common to s3c2412, s3c2413 and s3c2442 | ||
222 | |||
223 | config S3C2412_IOTIMING | ||
224 | bool | ||
225 | depends on CPU_FREQ_S3C24XX && (CPU_S3C2412 || CPU_S3C2443) | ||
226 | help | ||
227 | Intel node to select io timing code that is common to the s3c2412 | ||
228 | and the s3c2443. | ||
229 | |||
126 | # cpu-specific sections | 230 | # cpu-specific sections |
127 | 231 | ||
128 | if CPU_S3C2410 | 232 | if CPU_S3C2410 |
129 | 233 | ||
234 | config S3C2410_CPUFREQ | ||
235 | bool | ||
236 | depends on CPU_FREQ_S3C24XX && CPU_S3C2410 | ||
237 | select S3C2410_CPUFREQ_UTILS | ||
238 | help | ||
239 | CPU Frequency scaling support for S3C2410 | ||
240 | |||
241 | config S3C2410_PLL | ||
242 | bool | ||
243 | depends on S3C2410_CPUFREQ && CPU_FREQ_S3C24XX_PLL | ||
244 | default y | ||
245 | help | ||
246 | Select the PLL table for the S3C2410 | ||
247 | |||
130 | config S3C24XX_SIMTEC_NOR | 248 | config S3C24XX_SIMTEC_NOR |
131 | bool | 249 | bool |
132 | help | 250 | help |
@@ -226,6 +344,7 @@ config MACH_QT2410 | |||
226 | config ARCH_SMDK2410 | 344 | config ARCH_SMDK2410 |
227 | bool "SMDK2410/A9M2410" | 345 | bool "SMDK2410/A9M2410" |
228 | select S3C24XX_SMDK | 346 | select S3C24XX_SMDK |
347 | select S3C_DEV_USB_HOST | ||
229 | help | 348 | help |
230 | Say Y here if you are using the SMDK2410 or the derived module A9M2410 | 349 | Say Y here if you are using the SMDK2410 or the derived module A9M2410 |
231 | <http://www.fsforth.de> | 350 | <http://www.fsforth.de> |
@@ -266,6 +385,14 @@ config CPU_S3C2412_ONLY | |||
266 | !CPU_S3C2443 && CPU_S3C2412 | 385 | !CPU_S3C2443 && CPU_S3C2412 |
267 | default y | 386 | default y |
268 | 387 | ||
388 | config S3C2412_CPUFREQ | ||
389 | bool | ||
390 | depends on CPU_FREQ_S3C24XX && CPU_S3C2412 | ||
391 | default y | ||
392 | select S3C2412_IOTIMING | ||
393 | help | ||
394 | CPU Frequency scaling support for S3C2412 and S3C2413 SoC CPUs. | ||
395 | |||
269 | config S3C2412_DMA | 396 | config S3C2412_DMA |
270 | bool | 397 | bool |
271 | help | 398 | help |
@@ -273,6 +400,7 @@ config S3C2412_DMA | |||
273 | 400 | ||
274 | config S3C2412_PM | 401 | config S3C2412_PM |
275 | bool | 402 | bool |
403 | select S3C2412_PM_SLEEP | ||
276 | help | 404 | help |
277 | Internal config node to apply S3C2412 power management | 405 | Internal config node to apply S3C2412 power management |
278 | 406 | ||
@@ -291,8 +419,8 @@ config MACH_JIVE | |||
291 | Say Y here if you are using the Logitech Jive. | 419 | Say Y here if you are using the Logitech Jive. |
292 | 420 | ||
293 | config MACH_JIVE_SHOW_BOOTLOADER | 421 | config MACH_JIVE_SHOW_BOOTLOADER |
294 | bool "Allow access to bootloader partitions in MTD (EXPERIMENTAL)" | 422 | bool "Allow access to bootloader partitions in MTD" |
295 | depends on MACH_JIVE && EXPERIMENTAL | 423 | depends on MACH_JIVE |
296 | 424 | ||
297 | config MACH_S3C2413 | 425 | config MACH_S3C2413 |
298 | bool | 426 | bool |
@@ -365,11 +493,45 @@ endif # CPU_S3C2416 | |||
365 | 493 | ||
366 | if CPU_S3C2440 | 494 | if CPU_S3C2440 |
367 | 495 | ||
496 | config S3C2440_CPUFREQ | ||
497 | bool "S3C2440/S3C2442 CPU Frequency scaling support" | ||
498 | depends on CPU_FREQ_S3C24XX && (CPU_S3C2440 || CPU_S3C2442) | ||
499 | default y | ||
500 | select S3C2410_CPUFREQ_UTILS | ||
501 | help | ||
502 | CPU Frequency scaling support for S3C2440 and S3C2442 SoC CPUs. | ||
503 | |||
368 | config S3C2440_DMA | 504 | config S3C2440_DMA |
369 | bool | 505 | bool |
370 | help | 506 | help |
371 | Support for S3C2440 specific DMA code5A | 507 | Support for S3C2440 specific DMA code5A |
372 | 508 | ||
509 | config S3C2440_XTAL_12000000 | ||
510 | bool | ||
511 | help | ||
512 | Indicate that the build needs to support 12MHz system | ||
513 | crystal. | ||
514 | |||
515 | config S3C2440_XTAL_16934400 | ||
516 | bool | ||
517 | help | ||
518 | Indicate that the build needs to support 16.9344MHz system | ||
519 | crystal. | ||
520 | |||
521 | config S3C2440_PLL_12000000 | ||
522 | bool | ||
523 | depends on S3C2440_CPUFREQ && S3C2440_XTAL_12000000 | ||
524 | default y if CPU_FREQ_S3C24XX_PLL | ||
525 | help | ||
526 | PLL tables for S3C2440 or S3C2442 CPUs with 12MHz crystals. | ||
527 | |||
528 | config S3C2440_PLL_16934400 | ||
529 | bool | ||
530 | depends on S3C2440_CPUFREQ && S3C2440_XTAL_16934400 | ||
531 | default y if CPU_FREQ_S3C24XX_PLL | ||
532 | help | ||
533 | PLL tables for S3C2440 or S3C2442 CPUs with 16.934MHz crystals. | ||
534 | |||
373 | comment "S3C2440 Boards" | 535 | comment "S3C2440 Boards" |
374 | 536 | ||
375 | # | 537 | # |
diff --git a/arch/arm/mach-s3c24xx/Makefile b/arch/arm/mach-s3c24xx/Makefile index 0ab6ab15da4c..af53d27d5c36 100644 --- a/arch/arm/mach-s3c24xx/Makefile +++ b/arch/arm/mach-s3c24xx/Makefile | |||
@@ -14,26 +14,32 @@ obj- := | |||
14 | 14 | ||
15 | # core | 15 | # core |
16 | 16 | ||
17 | obj-y += common.o | 17 | obj-y += common.o irq.o |
18 | 18 | ||
19 | obj-$(CONFIG_CPU_S3C2410) += s3c2410.o | 19 | obj-$(CONFIG_CPU_S3C2410) += s3c2410.o |
20 | obj-$(CONFIG_S3C2410_CPUFREQ) += cpufreq-s3c2410.o | ||
20 | obj-$(CONFIG_S3C2410_DMA) += dma-s3c2410.o | 21 | obj-$(CONFIG_S3C2410_DMA) += dma-s3c2410.o |
22 | obj-$(CONFIG_S3C2410_PLL) += pll-s3c2410.o | ||
21 | obj-$(CONFIG_S3C2410_PM) += pm-s3c2410.o sleep-s3c2410.o | 23 | obj-$(CONFIG_S3C2410_PM) += pm-s3c2410.o sleep-s3c2410.o |
22 | 24 | ||
23 | obj-$(CONFIG_CPU_S3C2412) += s3c2412.o irq-s3c2412.o clock-s3c2412.o | 25 | obj-$(CONFIG_CPU_S3C2412) += s3c2412.o irq-s3c2412.o clock-s3c2412.o |
26 | obj-$(CONFIG_S3C2412_CPUFREQ) += cpufreq-s3c2412.o | ||
24 | obj-$(CONFIG_S3C2412_DMA) += dma-s3c2412.o | 27 | obj-$(CONFIG_S3C2412_DMA) += dma-s3c2412.o |
25 | obj-$(CONFIG_S3C2412_PM) += pm-s3c2412.o | 28 | obj-$(CONFIG_S3C2412_PM) += pm-s3c2412.o |
26 | obj-$(CONFIG_S3C2412_PM_SLEEP) += sleep-s3c2412.o | 29 | obj-$(CONFIG_S3C2412_PM_SLEEP) += sleep-s3c2412.o |
27 | 30 | ||
28 | obj-$(CONFIG_CPU_S3C2416) += s3c2416.o irq-s3c2416.o clock-s3c2416.o | 31 | obj-$(CONFIG_CPU_S3C2416) += s3c2416.o clock-s3c2416.o |
29 | obj-$(CONFIG_S3C2416_PM) += pm-s3c2416.o | 32 | obj-$(CONFIG_S3C2416_PM) += pm-s3c2416.o |
30 | 33 | ||
31 | obj-$(CONFIG_CPU_S3C2440) += s3c2440.o irq-s3c2440.o clock-s3c2440.o | 34 | obj-$(CONFIG_CPU_S3C2440) += s3c2440.o irq-s3c2440.o clock-s3c2440.o |
32 | obj-$(CONFIG_CPU_S3C2442) += s3c2442.o | 35 | obj-$(CONFIG_CPU_S3C2442) += s3c2442.o |
33 | obj-$(CONFIG_CPU_S3C244X) += s3c244x.o irq-s3c244x.o clock-s3c244x.o | 36 | obj-$(CONFIG_CPU_S3C244X) += s3c244x.o irq-s3c244x.o clock-s3c244x.o |
37 | obj-$(CONFIG_S3C2440_CPUFREQ) += cpufreq-s3c2440.o | ||
34 | obj-$(CONFIG_S3C2440_DMA) += dma-s3c2440.o | 38 | obj-$(CONFIG_S3C2440_DMA) += dma-s3c2440.o |
39 | obj-$(CONFIG_S3C2440_PLL_12000000) += pll-s3c2440-12000000.o | ||
40 | obj-$(CONFIG_S3C2440_PLL_16934400) += pll-s3c2440-16934400.o | ||
35 | 41 | ||
36 | obj-$(CONFIG_CPU_S3C2443) += s3c2443.o irq-s3c2443.o clock-s3c2443.o | 42 | obj-$(CONFIG_CPU_S3C2443) += s3c2443.o clock-s3c2443.o |
37 | 43 | ||
38 | # PM | 44 | # PM |
39 | 45 | ||
@@ -41,9 +47,21 @@ obj-$(CONFIG_PM) += pm.o irq-pm.o sleep.o | |||
41 | 47 | ||
42 | # common code | 48 | # common code |
43 | 49 | ||
50 | obj-$(CONFIG_S3C24XX_DCLK) += clock-dclk.o | ||
51 | obj-$(CONFIG_S3C24XX_DMA) += dma.o | ||
52 | |||
53 | obj-$(CONFIG_S3C2410_CLOCK) += clock-s3c2410.o | ||
54 | obj-$(CONFIG_S3C2410_CPUFREQ_UTILS) += cpufreq-utils.o | ||
55 | |||
56 | obj-$(CONFIG_S3C2410_IOTIMING) += iotiming-s3c2410.o | ||
57 | obj-$(CONFIG_S3C2412_IOTIMING) += iotiming-s3c2412.o | ||
58 | |||
44 | obj-$(CONFIG_S3C2443_COMMON) += common-s3c2443.o | 59 | obj-$(CONFIG_S3C2443_COMMON) += common-s3c2443.o |
45 | obj-$(CONFIG_S3C2443_DMA) += dma-s3c2443.o | 60 | obj-$(CONFIG_S3C2443_DMA) += dma-s3c2443.o |
46 | 61 | ||
62 | obj-$(CONFIG_CPU_FREQ_S3C24XX) += cpufreq.o | ||
63 | obj-$(CONFIG_CPU_FREQ_S3C24XX_DEBUGFS) += cpufreq-debugfs.o | ||
64 | |||
47 | # | 65 | # |
48 | # machine support | 66 | # machine support |
49 | # following is ordered alphabetically by option text. | 67 | # following is ordered alphabetically by option text. |
diff --git a/arch/arm/mach-s3c24xx/anubis.h b/arch/arm/mach-s3c24xx/anubis.h new file mode 100644 index 000000000000..2691665f27d9 --- /dev/null +++ b/arch/arm/mach-s3c24xx/anubis.h | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005 Simtec Electronics | ||
3 | * http://www.simtec.co.uk/products/ | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * ANUBIS - CPLD control constants | ||
7 | * ANUBIS - IRQ Number definitions | ||
8 | * ANUBIS - Memory map definitions | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #ifndef __MACH_S3C24XX_ANUBIS_H | ||
16 | #define __MACH_S3C24XX_ANUBIS_H __FILE__ | ||
17 | |||
18 | /* CTRL2 - NAND WP control, IDE Reset assert/check */ | ||
19 | |||
20 | #define ANUBIS_CTRL1_NANDSEL (0x3) | ||
21 | |||
22 | /* IDREG - revision */ | ||
23 | |||
24 | #define ANUBIS_IDREG_REVMASK (0x7) | ||
25 | |||
26 | /* irq */ | ||
27 | |||
28 | #define ANUBIS_IRQ_IDE0 IRQ_EINT2 | ||
29 | #define ANUBIS_IRQ_IDE1 IRQ_EINT3 | ||
30 | #define ANUBIS_IRQ_ASIX IRQ_EINT1 | ||
31 | |||
32 | /* map */ | ||
33 | |||
34 | /* start peripherals off after the S3C2410 */ | ||
35 | |||
36 | #define ANUBIS_IOADDR(x) (S3C2410_ADDR((x) + 0x01800000)) | ||
37 | |||
38 | #define ANUBIS_PA_CPLD (S3C2410_CS1 | (1<<26)) | ||
39 | |||
40 | /* we put the CPLD registers next, to get them out of the way */ | ||
41 | |||
42 | #define ANUBIS_VA_CTRL1 ANUBIS_IOADDR(0x00000000) | ||
43 | #define ANUBIS_PA_CTRL1 ANUBIS_PA_CPLD | ||
44 | |||
45 | #define ANUBIS_VA_IDREG ANUBIS_IOADDR(0x00300000) | ||
46 | #define ANUBIS_PA_IDREG (ANUBIS_PA_CPLD + (3 << 23)) | ||
47 | |||
48 | #define ANUBIS_IDEPRI ANUBIS_IOADDR(0x01000000) | ||
49 | #define ANUBIS_IDEPRIAUX ANUBIS_IOADDR(0x01100000) | ||
50 | #define ANUBIS_IDESEC ANUBIS_IOADDR(0x01200000) | ||
51 | #define ANUBIS_IDESECAUX ANUBIS_IOADDR(0x01300000) | ||
52 | |||
53 | #endif /* __MACH_S3C24XX_ANUBIS_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/bast-ide.c b/arch/arm/mach-s3c24xx/bast-ide.c index ba02cf8d80a2..3f0288f2f542 100644 --- a/arch/arm/mach-s3c24xx/bast-ide.c +++ b/arch/arm/mach-s3c24xx/bast-ide.c | |||
@@ -25,8 +25,8 @@ | |||
25 | #include <asm/mach/irq.h> | 25 | #include <asm/mach/irq.h> |
26 | 26 | ||
27 | #include <mach/map.h> | 27 | #include <mach/map.h> |
28 | #include <mach/bast-map.h> | 28 | |
29 | #include <mach/bast-irq.h> | 29 | #include "bast.h" |
30 | 30 | ||
31 | /* IDE ports */ | 31 | /* IDE ports */ |
32 | 32 | ||
@@ -34,12 +34,10 @@ static struct pata_platform_info bast_ide_platdata = { | |||
34 | .ioport_shift = 5, | 34 | .ioport_shift = 5, |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #define IDE_CS S3C2410_CS5 | ||
38 | |||
39 | static struct resource bast_ide0_resource[] = { | 37 | static struct resource bast_ide0_resource[] = { |
40 | [0] = DEFINE_RES_MEM(IDE_CS + BAST_PA_IDEPRI, 8 * 0x20), | 38 | [0] = DEFINE_RES_MEM(BAST_IDE_CS + BAST_PA_IDEPRI, 8 * 0x20), |
41 | [1] = DEFINE_RES_MEM(IDE_CS + BAST_PA_IDEPRIAUX + (6 * 0x20), 0x20), | 39 | [1] = DEFINE_RES_MEM(BAST_IDE_CS + BAST_PA_IDEPRIAUX + (6 * 0x20), 0x20), |
42 | [2] = DEFINE_RES_IRQ(IRQ_IDE0), | 40 | [2] = DEFINE_RES_IRQ(BAST_IRQ_IDE0), |
43 | }; | 41 | }; |
44 | 42 | ||
45 | static struct platform_device bast_device_ide0 = { | 43 | static struct platform_device bast_device_ide0 = { |
@@ -55,9 +53,9 @@ static struct platform_device bast_device_ide0 = { | |||
55 | }; | 53 | }; |
56 | 54 | ||
57 | static struct resource bast_ide1_resource[] = { | 55 | static struct resource bast_ide1_resource[] = { |
58 | [0] = DEFINE_RES_MEM(IDE_CS + BAST_PA_IDESEC, 8 * 0x20), | 56 | [0] = DEFINE_RES_MEM(BAST_IDE_CS + BAST_PA_IDESEC, 8 * 0x20), |
59 | [1] = DEFINE_RES_MEM(IDE_CS + BAST_PA_IDESECAUX + (6 * 0x20), 0x20), | 57 | [1] = DEFINE_RES_MEM(BAST_IDE_CS + BAST_PA_IDESECAUX + (6 * 0x20), 0x20), |
60 | [2] = DEFINE_RES_IRQ(IRQ_IDE1), | 58 | [2] = DEFINE_RES_IRQ(BAST_IRQ_IDE1), |
61 | }; | 59 | }; |
62 | 60 | ||
63 | static struct platform_device bast_device_ide1 = { | 61 | static struct platform_device bast_device_ide1 = { |
diff --git a/arch/arm/mach-s3c24xx/bast-irq.c b/arch/arm/mach-s3c24xx/bast-irq.c index ac7b2ad5c405..c0daa9590b4c 100644 --- a/arch/arm/mach-s3c24xx/bast-irq.c +++ b/arch/arm/mach-s3c24xx/bast-irq.c | |||
@@ -27,27 +27,20 @@ | |||
27 | #include <linux/device.h> | 27 | #include <linux/device.h> |
28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
29 | 29 | ||
30 | #include <asm/mach-types.h> | ||
31 | |||
32 | #include <mach/hardware.h> | ||
33 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
34 | 31 | #include <asm/mach-types.h> | |
35 | #include <asm/mach/irq.h> | 32 | #include <asm/mach/irq.h> |
36 | 33 | ||
34 | #include <mach/hardware.h> | ||
37 | #include <mach/regs-irq.h> | 35 | #include <mach/regs-irq.h> |
38 | #include <mach/bast-map.h> | ||
39 | #include <mach/bast-irq.h> | ||
40 | 36 | ||
41 | #include <plat/irq.h> | 37 | #include <plat/irq.h> |
42 | 38 | ||
43 | #if 0 | 39 | #include "bast.h" |
44 | #include <asm/debug-ll.h> | ||
45 | #endif | ||
46 | 40 | ||
47 | #define irqdbf(x...) | 41 | #define irqdbf(x...) |
48 | #define irqdbf2(x...) | 42 | #define irqdbf2(x...) |
49 | 43 | ||
50 | |||
51 | /* handle PC104 ISA interrupts from the system CPLD */ | 44 | /* handle PC104 ISA interrupts from the system CPLD */ |
52 | 45 | ||
53 | /* table of ISA irq nos to the relevant mask... zero means | 46 | /* table of ISA irq nos to the relevant mask... zero means |
@@ -87,7 +80,7 @@ bast_pc104_mask(struct irq_data *data) | |||
87 | static void | 80 | static void |
88 | bast_pc104_maskack(struct irq_data *data) | 81 | bast_pc104_maskack(struct irq_data *data) |
89 | { | 82 | { |
90 | struct irq_desc *desc = irq_desc + IRQ_ISA; | 83 | struct irq_desc *desc = irq_desc + BAST_IRQ_ISA; |
91 | 84 | ||
92 | bast_pc104_mask(data); | 85 | bast_pc104_mask(data); |
93 | desc->irq_data.chip->irq_ack(&desc->irq_data); | 86 | desc->irq_data.chip->irq_ack(&desc->irq_data); |
@@ -122,7 +115,7 @@ bast_irq_pc104_demux(unsigned int irq, | |||
122 | if (unlikely(stat == 0)) { | 115 | if (unlikely(stat == 0)) { |
123 | /* ack if we get an irq with nothing (ie, startup) */ | 116 | /* ack if we get an irq with nothing (ie, startup) */ |
124 | 117 | ||
125 | desc = irq_desc + IRQ_ISA; | 118 | desc = irq_desc + BAST_IRQ_ISA; |
126 | desc->irq_data.chip->irq_ack(&desc->irq_data); | 119 | desc->irq_data.chip->irq_ack(&desc->irq_data); |
127 | } else { | 120 | } else { |
128 | /* handle the IRQ */ | 121 | /* handle the IRQ */ |
@@ -147,7 +140,7 @@ static __init int bast_irq_init(void) | |||
147 | 140 | ||
148 | __raw_writeb(0x0, BAST_VA_PC104_IRQMASK); | 141 | __raw_writeb(0x0, BAST_VA_PC104_IRQMASK); |
149 | 142 | ||
150 | irq_set_chained_handler(IRQ_ISA, bast_irq_pc104_demux); | 143 | irq_set_chained_handler(BAST_IRQ_ISA, bast_irq_pc104_demux); |
151 | 144 | ||
152 | /* register our IRQs */ | 145 | /* register our IRQs */ |
153 | 146 | ||
diff --git a/arch/arm/mach-s3c24xx/bast.h b/arch/arm/mach-s3c24xx/bast.h new file mode 100644 index 000000000000..5c7534bae92d --- /dev/null +++ b/arch/arm/mach-s3c24xx/bast.h | |||
@@ -0,0 +1,197 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2003-2004 Simtec Electronics | ||
3 | * Ben Dooks <ben@simtec.co.uk> | ||
4 | * | ||
5 | * BAST - CPLD control constants | ||
6 | * BAST - IRQ Number definitions | ||
7 | * BAST - Memory map definitions | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_S3C24XX_BAST_H | ||
15 | #define __MACH_S3C24XX_BAST_H __FILE__ | ||
16 | |||
17 | /* CTRL1 - Audio LR routing */ | ||
18 | |||
19 | #define BAST_CPLD_CTRL1_LRCOFF (0x00) | ||
20 | #define BAST_CPLD_CTRL1_LRCADC (0x01) | ||
21 | #define BAST_CPLD_CTRL1_LRCDAC (0x02) | ||
22 | #define BAST_CPLD_CTRL1_LRCARM (0x03) | ||
23 | #define BAST_CPLD_CTRL1_LRMASK (0x03) | ||
24 | |||
25 | /* CTRL2 - NAND WP control, IDE Reset assert/check */ | ||
26 | |||
27 | #define BAST_CPLD_CTRL2_WNAND (0x04) | ||
28 | #define BAST_CPLD_CTLR2_IDERST (0x08) | ||
29 | |||
30 | /* CTRL3 - rom write control, CPLD identity */ | ||
31 | |||
32 | #define BAST_CPLD_CTRL3_IDMASK (0x0e) | ||
33 | #define BAST_CPLD_CTRL3_ROMWEN (0x01) | ||
34 | |||
35 | /* CTRL4 - 8bit LCD interface control/status */ | ||
36 | |||
37 | #define BAST_CPLD_CTRL4_LLAT (0x01) | ||
38 | #define BAST_CPLD_CTRL4_LCDRW (0x02) | ||
39 | #define BAST_CPLD_CTRL4_LCDCMD (0x04) | ||
40 | #define BAST_CPLD_CTRL4_LCDE2 (0x01) | ||
41 | |||
42 | /* CTRL5 - DMA routing */ | ||
43 | |||
44 | #define BAST_CPLD_DMA0_PRIIDE (0) | ||
45 | #define BAST_CPLD_DMA0_SECIDE (1) | ||
46 | #define BAST_CPLD_DMA0_ISA15 (2) | ||
47 | #define BAST_CPLD_DMA0_ISA36 (3) | ||
48 | |||
49 | #define BAST_CPLD_DMA1_PRIIDE (0 << 2) | ||
50 | #define BAST_CPLD_DMA1_SECIDE (1 << 2) | ||
51 | #define BAST_CPLD_DMA1_ISA15 (2 << 2) | ||
52 | #define BAST_CPLD_DMA1_ISA36 (3 << 2) | ||
53 | |||
54 | /* irq numbers to onboard peripherals */ | ||
55 | |||
56 | #define BAST_IRQ_USBOC IRQ_EINT18 | ||
57 | #define BAST_IRQ_IDE0 IRQ_EINT16 | ||
58 | #define BAST_IRQ_IDE1 IRQ_EINT17 | ||
59 | #define BAST_IRQ_PCSERIAL1 IRQ_EINT15 | ||
60 | #define BAST_IRQ_PCSERIAL2 IRQ_EINT14 | ||
61 | #define BAST_IRQ_PCPARALLEL IRQ_EINT13 | ||
62 | #define BAST_IRQ_ASIX IRQ_EINT11 | ||
63 | #define BAST_IRQ_DM9000 IRQ_EINT10 | ||
64 | #define BAST_IRQ_ISA IRQ_EINT9 | ||
65 | #define BAST_IRQ_SMALERT IRQ_EINT8 | ||
66 | |||
67 | /* map */ | ||
68 | |||
69 | /* | ||
70 | * ok, we've used up to 0x13000000, now we need to find space for the | ||
71 | * peripherals that live in the nGCS[x] areas, which are quite numerous | ||
72 | * in their space. We also have the board's CPLD to find register space | ||
73 | * for. | ||
74 | */ | ||
75 | |||
76 | #define BAST_IOADDR(x) (S3C2410_ADDR((x) + 0x01300000)) | ||
77 | |||
78 | /* we put the CPLD registers next, to get them out of the way */ | ||
79 | |||
80 | #define BAST_VA_CTRL1 BAST_IOADDR(0x00000000) | ||
81 | #define BAST_PA_CTRL1 (S3C2410_CS5 | 0x7800000) | ||
82 | |||
83 | #define BAST_VA_CTRL2 BAST_IOADDR(0x00100000) | ||
84 | #define BAST_PA_CTRL2 (S3C2410_CS1 | 0x6000000) | ||
85 | |||
86 | #define BAST_VA_CTRL3 BAST_IOADDR(0x00200000) | ||
87 | #define BAST_PA_CTRL3 (S3C2410_CS1 | 0x6800000) | ||
88 | |||
89 | #define BAST_VA_CTRL4 BAST_IOADDR(0x00300000) | ||
90 | #define BAST_PA_CTRL4 (S3C2410_CS1 | 0x7000000) | ||
91 | |||
92 | /* next, we have the PC104 ISA interrupt registers */ | ||
93 | |||
94 | #define BAST_PA_PC104_IRQREQ (S3C2410_CS5 | 0x6000000) | ||
95 | #define BAST_VA_PC104_IRQREQ BAST_IOADDR(0x00400000) | ||
96 | |||
97 | #define BAST_PA_PC104_IRQRAW (S3C2410_CS5 | 0x6800000) | ||
98 | #define BAST_VA_PC104_IRQRAW BAST_IOADDR(0x00500000) | ||
99 | |||
100 | #define BAST_PA_PC104_IRQMASK (S3C2410_CS5 | 0x7000000) | ||
101 | #define BAST_VA_PC104_IRQMASK BAST_IOADDR(0x00600000) | ||
102 | |||
103 | #define BAST_PA_LCD_RCMD1 (0x8800000) | ||
104 | #define BAST_VA_LCD_RCMD1 BAST_IOADDR(0x00700000) | ||
105 | |||
106 | #define BAST_PA_LCD_WCMD1 (0x8000000) | ||
107 | #define BAST_VA_LCD_WCMD1 BAST_IOADDR(0x00800000) | ||
108 | |||
109 | #define BAST_PA_LCD_RDATA1 (0x9800000) | ||
110 | #define BAST_VA_LCD_RDATA1 BAST_IOADDR(0x00900000) | ||
111 | |||
112 | #define BAST_PA_LCD_WDATA1 (0x9000000) | ||
113 | #define BAST_VA_LCD_WDATA1 BAST_IOADDR(0x00A00000) | ||
114 | |||
115 | #define BAST_PA_LCD_RCMD2 (0xA800000) | ||
116 | #define BAST_VA_LCD_RCMD2 BAST_IOADDR(0x00B00000) | ||
117 | |||
118 | #define BAST_PA_LCD_WCMD2 (0xA000000) | ||
119 | #define BAST_VA_LCD_WCMD2 BAST_IOADDR(0x00C00000) | ||
120 | |||
121 | #define BAST_PA_LCD_RDATA2 (0xB800000) | ||
122 | #define BAST_VA_LCD_RDATA2 BAST_IOADDR(0x00D00000) | ||
123 | |||
124 | #define BAST_PA_LCD_WDATA2 (0xB000000) | ||
125 | #define BAST_VA_LCD_WDATA2 BAST_IOADDR(0x00E00000) | ||
126 | |||
127 | |||
128 | /* | ||
129 | * 0xE0000000 contains the IO space that is split by speed and | ||
130 | * whether the access is for 8 or 16bit IO... this ensures that | ||
131 | * the correct access is made | ||
132 | * | ||
133 | * 0x10000000 of space, partitioned as so: | ||
134 | * | ||
135 | * 0x00000000 to 0x04000000 8bit, slow | ||
136 | * 0x04000000 to 0x08000000 16bit, slow | ||
137 | * 0x08000000 to 0x0C000000 16bit, net | ||
138 | * 0x0C000000 to 0x10000000 16bit, fast | ||
139 | * | ||
140 | * each of these spaces has the following in: | ||
141 | * | ||
142 | * 0x00000000 to 0x01000000 16MB ISA IO space | ||
143 | * 0x01000000 to 0x02000000 16MB ISA memory space | ||
144 | * 0x02000000 to 0x02100000 1MB IDE primary channel | ||
145 | * 0x02100000 to 0x02200000 1MB IDE primary channel aux | ||
146 | * 0x02200000 to 0x02400000 1MB IDE secondary channel | ||
147 | * 0x02300000 to 0x02400000 1MB IDE secondary channel aux | ||
148 | * 0x02400000 to 0x02500000 1MB ASIX ethernet controller | ||
149 | * 0x02500000 to 0x02600000 1MB Davicom DM9000 ethernet controller | ||
150 | * 0x02600000 to 0x02700000 1MB PC SuperIO controller | ||
151 | * | ||
152 | * the phyiscal layout of the zones are: | ||
153 | * nGCS2 - 8bit, slow | ||
154 | * nGCS3 - 16bit, slow | ||
155 | * nGCS4 - 16bit, net | ||
156 | * nGCS5 - 16bit, fast | ||
157 | */ | ||
158 | |||
159 | #define BAST_VA_MULTISPACE (0xE0000000) | ||
160 | |||
161 | #define BAST_VA_ISAIO (BAST_VA_MULTISPACE + 0x00000000) | ||
162 | #define BAST_VA_ISAMEM (BAST_VA_MULTISPACE + 0x01000000) | ||
163 | #define BAST_VA_IDEPRI (BAST_VA_MULTISPACE + 0x02000000) | ||
164 | #define BAST_VA_IDEPRIAUX (BAST_VA_MULTISPACE + 0x02100000) | ||
165 | #define BAST_VA_IDESEC (BAST_VA_MULTISPACE + 0x02200000) | ||
166 | #define BAST_VA_IDESECAUX (BAST_VA_MULTISPACE + 0x02300000) | ||
167 | #define BAST_VA_ASIXNET (BAST_VA_MULTISPACE + 0x02400000) | ||
168 | #define BAST_VA_DM9000 (BAST_VA_MULTISPACE + 0x02500000) | ||
169 | #define BAST_VA_SUPERIO (BAST_VA_MULTISPACE + 0x02600000) | ||
170 | |||
171 | #define BAST_VAM_CS2 (0x00000000) | ||
172 | #define BAST_VAM_CS3 (0x04000000) | ||
173 | #define BAST_VAM_CS4 (0x08000000) | ||
174 | #define BAST_VAM_CS5 (0x0C000000) | ||
175 | |||
176 | /* physical offset addresses for the peripherals */ | ||
177 | |||
178 | #define BAST_PA_ISAIO (0x00000000) | ||
179 | #define BAST_PA_ASIXNET (0x01000000) | ||
180 | #define BAST_PA_SUPERIO (0x01800000) | ||
181 | #define BAST_PA_IDEPRI (0x02000000) | ||
182 | #define BAST_PA_IDEPRIAUX (0x02800000) | ||
183 | #define BAST_PA_IDESEC (0x03000000) | ||
184 | #define BAST_PA_IDESECAUX (0x03800000) | ||
185 | #define BAST_PA_ISAMEM (0x04000000) | ||
186 | #define BAST_PA_DM9000 (0x05000000) | ||
187 | |||
188 | /* some configurations for the peripherals */ | ||
189 | |||
190 | #define BAST_PCSIO (BAST_VA_SUPERIO + BAST_VAM_CS2) | ||
191 | |||
192 | #define BAST_ASIXNET_CS BAST_VAM_CS5 | ||
193 | #define BAST_DM9000_CS BAST_VAM_CS4 | ||
194 | |||
195 | #define BAST_IDE_CS S3C2410_CS5 | ||
196 | |||
197 | #endif /* __MACH_S3C24XX_BAST_H */ | ||
diff --git a/arch/arm/plat-s3c24xx/clock-dclk.c b/arch/arm/mach-s3c24xx/clock-dclk.c index f95d3268ae1f..1edd9b2369c5 100644 --- a/arch/arm/plat-s3c24xx/clock-dclk.c +++ b/arch/arm/mach-s3c24xx/clock-dclk.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/clock-dclk.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2004-2008 Simtec Electronics | 2 | * Copyright (c) 2004-2008 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 3 | * Ben Dooks <ben@simtec.co.uk> |
5 | * http://armlinux.simtec.co.uk/ | 4 | * http://armlinux.simtec.co.uk/ |
diff --git a/arch/arm/plat-s3c24xx/s3c2410-clock.c b/arch/arm/mach-s3c24xx/clock-s3c2410.c index 25dc4d4397b1..641266f3d152 100644 --- a/arch/arm/plat-s3c24xx/s3c2410-clock.c +++ b/arch/arm/mach-s3c24xx/clock-s3c2410.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/clock.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006 Simtec Electronics | 2 | * Copyright (c) 2006 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 3 | * Ben Dooks <ben@simtec.co.uk> |
5 | * | 4 | * |
diff --git a/arch/arm/mach-s3c24xx/common-s3c2443.c b/arch/arm/mach-s3c24xx/common-s3c2443.c index aeb4a24ff3ed..f6b9f2ef01bd 100644 --- a/arch/arm/mach-s3c24xx/common-s3c2443.c +++ b/arch/arm/mach-s3c24xx/common-s3c2443.c | |||
@@ -132,7 +132,7 @@ static struct clk *clk_msysclk_sources[] = { | |||
132 | [3] = &clk_mpllref, | 132 | [3] = &clk_mpllref, |
133 | }; | 133 | }; |
134 | 134 | ||
135 | struct clksrc_clk clk_msysclk = { | 135 | static struct clksrc_clk clk_msysclk = { |
136 | .clk = { | 136 | .clk = { |
137 | .name = "msysclk", | 137 | .name = "msysclk", |
138 | .parent = &clk_xtal, | 138 | .parent = &clk_xtal, |
diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c index 0c9e9a785ef6..6bcf87f65f9e 100644 --- a/arch/arm/mach-s3c24xx/common.c +++ b/arch/arm/mach-s3c24xx/common.c | |||
@@ -197,7 +197,7 @@ static unsigned long s3c24xx_read_idcode_v4(void) | |||
197 | 197 | ||
198 | static void s3c24xx_default_idle(void) | 198 | static void s3c24xx_default_idle(void) |
199 | { | 199 | { |
200 | unsigned long tmp; | 200 | unsigned long tmp = 0; |
201 | int i; | 201 | int i; |
202 | 202 | ||
203 | /* idle the system by using the idle mode which will wait for an | 203 | /* idle the system by using the idle mode which will wait for an |
diff --git a/arch/arm/mach-s3c24xx/common.h b/arch/arm/mach-s3c24xx/common.h index c2f596e7bc2d..ed6276fcaa3b 100644 --- a/arch/arm/mach-s3c24xx/common.h +++ b/arch/arm/mach-s3c24xx/common.h | |||
@@ -15,4 +15,6 @@ | |||
15 | void s3c2410_restart(char mode, const char *cmd); | 15 | void s3c2410_restart(char mode, const char *cmd); |
16 | void s3c244x_restart(char mode, const char *cmd); | 16 | void s3c244x_restart(char mode, const char *cmd); |
17 | 17 | ||
18 | extern struct syscore_ops s3c24xx_irq_syscore_ops; | ||
19 | |||
18 | #endif /* __ARCH_ARM_MACH_S3C24XX_COMMON_H */ | 20 | #endif /* __ARCH_ARM_MACH_S3C24XX_COMMON_H */ |
diff --git a/arch/arm/plat-s3c24xx/cpu-freq-debugfs.c b/arch/arm/mach-s3c24xx/cpufreq-debugfs.c index c7adad0e8de0..9b7b4289d66c 100644 --- a/arch/arm/plat-s3c24xx/cpu-freq-debugfs.c +++ b/arch/arm/mach-s3c24xx/cpufreq-debugfs.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/cpu-freq-debugfs.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2009 Simtec Electronics | 2 | * Copyright (c) 2009 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
diff --git a/arch/arm/mach-s3c2410/cpu-freq.c b/arch/arm/mach-s3c24xx/cpufreq-s3c2410.c index 5404535da1a5..cfa0dd8723ec 100644 --- a/arch/arm/mach-s3c2410/cpu-freq.c +++ b/arch/arm/mach-s3c24xx/cpufreq-s3c2410.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/cpu-freq.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006-2008 Simtec Electronics | 2 | * Copyright (c) 2006-2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -81,7 +80,7 @@ static int s3c2410_cpufreq_calcdivs(struct s3c_cpufreq_config *cfg) | |||
81 | cfg->divs.p_divisor = pdiv; | 80 | cfg->divs.p_divisor = pdiv; |
82 | cfg->divs.h_divisor = hdiv; | 81 | cfg->divs.h_divisor = hdiv; |
83 | 82 | ||
84 | return 0 ; | 83 | return 0; |
85 | } | 84 | } |
86 | 85 | ||
87 | static struct s3c_cpufreq_info s3c2410_cpufreq_info = { | 86 | static struct s3c_cpufreq_info s3c2410_cpufreq_info = { |
@@ -131,7 +130,6 @@ static int __init s3c2410_cpufreq_init(void) | |||
131 | { | 130 | { |
132 | return subsys_interface_register(&s3c2410_cpufreq_interface); | 131 | return subsys_interface_register(&s3c2410_cpufreq_interface); |
133 | } | 132 | } |
134 | |||
135 | arch_initcall(s3c2410_cpufreq_init); | 133 | arch_initcall(s3c2410_cpufreq_init); |
136 | 134 | ||
137 | static int s3c2410a_cpufreq_add(struct device *dev, | 135 | static int s3c2410a_cpufreq_add(struct device *dev, |
@@ -159,5 +157,4 @@ static int __init s3c2410a_cpufreq_init(void) | |||
159 | { | 157 | { |
160 | return subsys_interface_register(&s3c2410a_cpufreq_interface); | 158 | return subsys_interface_register(&s3c2410a_cpufreq_interface); |
161 | } | 159 | } |
162 | |||
163 | arch_initcall(s3c2410a_cpufreq_init); | 160 | arch_initcall(s3c2410a_cpufreq_init); |
diff --git a/arch/arm/mach-s3c2412/cpu-freq.c b/arch/arm/mach-s3c24xx/cpufreq-s3c2412.c index 125be7d5fa60..8bf0f3a77476 100644 --- a/arch/arm/mach-s3c2412/cpu-freq.c +++ b/arch/arm/mach-s3c24xx/cpufreq-s3c2412.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s3c2412/cpu-freq.c | 1 | /* |
2 | * | ||
3 | * Copyright 2008 Simtec Electronics | 2 | * Copyright 2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -26,12 +25,13 @@ | |||
26 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
27 | 26 | ||
28 | #include <mach/regs-clock.h> | 27 | #include <mach/regs-clock.h> |
29 | #include <mach/regs-s3c2412-mem.h> | ||
30 | 28 | ||
31 | #include <plat/cpu.h> | 29 | #include <plat/cpu.h> |
32 | #include <plat/clock.h> | 30 | #include <plat/clock.h> |
33 | #include <plat/cpu-freq-core.h> | 31 | #include <plat/cpu-freq-core.h> |
34 | 32 | ||
33 | #include "s3c2412.h" | ||
34 | |||
35 | /* our clock resources. */ | 35 | /* our clock resources. */ |
36 | static struct clk *xtal; | 36 | static struct clk *xtal; |
37 | static struct clk *fclk; | 37 | static struct clk *fclk; |
@@ -111,7 +111,7 @@ static int s3c2412_cpufreq_calcdivs(struct s3c_cpufreq_config *cfg) | |||
111 | 111 | ||
112 | return 0; | 112 | return 0; |
113 | 113 | ||
114 | invalid: | 114 | invalid: |
115 | return -EINVAL; | 115 | return -EINVAL; |
116 | } | 116 | } |
117 | 117 | ||
@@ -255,5 +255,4 @@ static int s3c2412_cpufreq_init(void) | |||
255 | { | 255 | { |
256 | return subsys_interface_register(&s3c2412_cpufreq_interface); | 256 | return subsys_interface_register(&s3c2412_cpufreq_interface); |
257 | } | 257 | } |
258 | |||
259 | arch_initcall(s3c2412_cpufreq_init); | 258 | arch_initcall(s3c2412_cpufreq_init); |
diff --git a/arch/arm/mach-s3c2440/s3c2440-cpufreq.c b/arch/arm/mach-s3c24xx/cpufreq-s3c2440.c index 61776764d9f4..72b2cc8a5a85 100644 --- a/arch/arm/mach-s3c2440/s3c2440-cpufreq.c +++ b/arch/arm/mach-s3c24xx/cpufreq-s3c2440.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/s3c2440-cpufreq.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006-2009 Simtec Electronics | 2 | * Copyright (c) 2006-2009 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -310,5 +309,4 @@ static int s3c2442_cpufreq_init(void) | |||
310 | { | 309 | { |
311 | return subsys_interface_register(&s3c2442_cpufreq_interface); | 310 | return subsys_interface_register(&s3c2442_cpufreq_interface); |
312 | } | 311 | } |
313 | |||
314 | subsys_initcall(s3c2442_cpufreq_init); | 312 | subsys_initcall(s3c2442_cpufreq_init); |
diff --git a/arch/arm/plat-s3c24xx/s3c2410-cpufreq-utils.c b/arch/arm/mach-s3c24xx/cpufreq-utils.c index 43ea80190d87..ddd8280e3875 100644 --- a/arch/arm/plat-s3c24xx/s3c2410-cpufreq-utils.c +++ b/arch/arm/mach-s3c24xx/cpufreq-utils.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/s3c2410-cpufreq-utils.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2009 Simtec Electronics | 2 | * Copyright (c) 2009 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -17,11 +16,12 @@ | |||
17 | #include <linux/io.h> | 16 | #include <linux/io.h> |
18 | 17 | ||
19 | #include <mach/map.h> | 18 | #include <mach/map.h> |
20 | #include <mach/regs-mem.h> | ||
21 | #include <mach/regs-clock.h> | 19 | #include <mach/regs-clock.h> |
22 | 20 | ||
23 | #include <plat/cpu-freq-core.h> | 21 | #include <plat/cpu-freq-core.h> |
24 | 22 | ||
23 | #include "regs-mem.h" | ||
24 | |||
25 | /** | 25 | /** |
26 | * s3c2410_cpufreq_setrefresh - set SDRAM refresh value | 26 | * s3c2410_cpufreq_setrefresh - set SDRAM refresh value |
27 | * @cfg: The frequency configuration | 27 | * @cfg: The frequency configuration |
diff --git a/arch/arm/plat-s3c24xx/cpu-freq.c b/arch/arm/mach-s3c24xx/cpufreq.c index 468079938884..5f181e733eee 100644 --- a/arch/arm/plat-s3c24xx/cpu-freq.c +++ b/arch/arm/mach-s3c24xx/cpufreq.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/cpu-freq.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006-2008 Simtec Electronics | 2 | * Copyright (c) 2006-2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
diff --git a/arch/arm/mach-s3c24xx/dma-s3c2410.c b/arch/arm/mach-s3c24xx/dma-s3c2410.c index 4803338cf56e..25d085adc93c 100644 --- a/arch/arm/mach-s3c24xx/dma-s3c2410.c +++ b/arch/arm/mach-s3c24xx/dma-s3c2410.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <mach/regs-gpio.h> | 27 | #include <mach/regs-gpio.h> |
28 | #include <plat/regs-ac97.h> | 28 | #include <plat/regs-ac97.h> |
29 | #include <plat/regs-dma.h> | 29 | #include <plat/regs-dma.h> |
30 | #include <mach/regs-mem.h> | ||
31 | #include <mach/regs-lcd.h> | 30 | #include <mach/regs-lcd.h> |
32 | #include <mach/regs-sdi.h> | 31 | #include <mach/regs-sdi.h> |
33 | #include <plat/regs-iis.h> | 32 | #include <plat/regs-iis.h> |
diff --git a/arch/arm/mach-s3c24xx/dma-s3c2412.c b/arch/arm/mach-s3c24xx/dma-s3c2412.c index 38472ac920ff..d2408ba372cb 100644 --- a/arch/arm/mach-s3c24xx/dma-s3c2412.c +++ b/arch/arm/mach-s3c24xx/dma-s3c2412.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <mach/regs-gpio.h> | 27 | #include <mach/regs-gpio.h> |
28 | #include <plat/regs-ac97.h> | 28 | #include <plat/regs-ac97.h> |
29 | #include <plat/regs-dma.h> | 29 | #include <plat/regs-dma.h> |
30 | #include <mach/regs-mem.h> | ||
31 | #include <mach/regs-lcd.h> | 30 | #include <mach/regs-lcd.h> |
32 | #include <mach/regs-sdi.h> | 31 | #include <mach/regs-sdi.h> |
33 | #include <plat/regs-iis.h> | 32 | #include <plat/regs-iis.h> |
diff --git a/arch/arm/mach-s3c24xx/dma-s3c2440.c b/arch/arm/mach-s3c24xx/dma-s3c2440.c index 5f0a0c8ef84f..0b86e74d104f 100644 --- a/arch/arm/mach-s3c24xx/dma-s3c2440.c +++ b/arch/arm/mach-s3c24xx/dma-s3c2440.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <mach/regs-gpio.h> | 27 | #include <mach/regs-gpio.h> |
28 | #include <plat/regs-ac97.h> | 28 | #include <plat/regs-ac97.h> |
29 | #include <plat/regs-dma.h> | 29 | #include <plat/regs-dma.h> |
30 | #include <mach/regs-mem.h> | ||
31 | #include <mach/regs-lcd.h> | 30 | #include <mach/regs-lcd.h> |
32 | #include <mach/regs-sdi.h> | 31 | #include <mach/regs-sdi.h> |
33 | #include <plat/regs-iis.h> | 32 | #include <plat/regs-iis.h> |
diff --git a/arch/arm/mach-s3c24xx/dma-s3c2443.c b/arch/arm/mach-s3c24xx/dma-s3c2443.c index 2d94228d2866..05536254a3f8 100644 --- a/arch/arm/mach-s3c24xx/dma-s3c2443.c +++ b/arch/arm/mach-s3c24xx/dma-s3c2443.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <mach/regs-gpio.h> | 27 | #include <mach/regs-gpio.h> |
28 | #include <plat/regs-ac97.h> | 28 | #include <plat/regs-ac97.h> |
29 | #include <plat/regs-dma.h> | 29 | #include <plat/regs-dma.h> |
30 | #include <mach/regs-mem.h> | ||
31 | #include <mach/regs-lcd.h> | 30 | #include <mach/regs-lcd.h> |
32 | #include <mach/regs-sdi.h> | 31 | #include <mach/regs-sdi.h> |
33 | #include <plat/regs-iis.h> | 32 | #include <plat/regs-iis.h> |
diff --git a/arch/arm/plat-s3c24xx/dma.c b/arch/arm/mach-s3c24xx/dma.c index ba3e76c95504..aab64909e9a3 100644 --- a/arch/arm/plat-s3c24xx/dma.c +++ b/arch/arm/mach-s3c24xx/dma.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/dma.c | 1 | /* |
2 | * | ||
3 | * Copyright 2003-2006 Simtec Electronics | 2 | * Copyright 2003-2006 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 3 | * Ben Dooks <ben@simtec.co.uk> |
5 | * | 4 | * |
diff --git a/arch/arm/mach-s3c24xx/include/mach/gta02.h b/arch/arm/mach-s3c24xx/gta02.h index 217393482153..9430a71e9184 100644 --- a/arch/arm/mach-s3c24xx/include/mach/gta02.h +++ b/arch/arm/mach-s3c24xx/gta02.h | |||
@@ -1,5 +1,13 @@ | |||
1 | #ifndef _GTA02_H | 1 | /* |
2 | #define _GTA02_H | 2 | * GTA02 header |
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef __MACH_S3C24XX_GTA02_H | ||
10 | #define __MACH_S3C24XX_GTA02_H __FILE__ | ||
3 | 11 | ||
4 | #include <mach/regs-gpio.h> | 12 | #include <mach/regs-gpio.h> |
5 | 13 | ||
@@ -12,4 +20,4 @@ | |||
12 | 20 | ||
13 | #define GTA02_IRQ_PCF50633 IRQ_EINT9 | 21 | #define GTA02_IRQ_PCF50633 IRQ_EINT9 |
14 | 22 | ||
15 | #endif /* _GTA02_H */ | 23 | #endif /* __MACH_S3C24XX_GTA02_H */ |
diff --git a/arch/arm/mach-s3c24xx/h1940-bluetooth.c b/arch/arm/mach-s3c24xx/h1940-bluetooth.c index 3f40c61b6e02..5b98bfd1df43 100644 --- a/arch/arm/mach-s3c24xx/h1940-bluetooth.c +++ b/arch/arm/mach-s3c24xx/h1940-bluetooth.c | |||
@@ -19,10 +19,10 @@ | |||
19 | #include <linux/gpio.h> | 19 | #include <linux/gpio.h> |
20 | #include <linux/rfkill.h> | 20 | #include <linux/rfkill.h> |
21 | 21 | ||
22 | #include <mach/regs-gpio.h> | ||
23 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
24 | #include <mach/h1940-latch.h> | 23 | #include <mach/regs-gpio.h> |
25 | #include <mach/h1940.h> | 24 | |
25 | #include "h1940.h" | ||
26 | 26 | ||
27 | #define DRV_NAME "h1940-bt" | 27 | #define DRV_NAME "h1940-bt" |
28 | 28 | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/h1940-latch.h b/arch/arm/mach-s3c24xx/h1940.h index fc897d3a056c..2950cc466840 100644 --- a/arch/arm/mach-s3c24xx/include/mach/h1940-latch.h +++ b/arch/arm/mach-s3c24xx/h1940.h | |||
@@ -1,20 +1,30 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/h1940-latch.h | 1 | /* |
2 | * Copyright 2006 Ben Dooks <ben-linux@fluff.org> | ||
2 | * | 3 | * |
3 | * Copyright (c) 2005 Simtec Electronics | 4 | * Copyright (c) 2005 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 5 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 6 | * Ben Dooks <ben@simtec.co.uk> |
6 | * | 7 | * |
7 | * iPAQ H1940 series - latch definitions | 8 | * iPAQ H1940 series definitions |
8 | * | 9 | * |
9 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU General Public License version 2 as | 11 | * it under the terms of the GNU General Public License version 2 as |
11 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
12 | */ | 13 | */ |
13 | 14 | ||
14 | #ifndef __ASM_ARCH_H1940_LATCH_H | 15 | #ifndef __MACH_S3C24XX_H1940_H |
15 | #define __ASM_ARCH_H1940_LATCH_H | 16 | #define __MACH_S3C24XX_H1940_H __FILE__ |
16 | 17 | ||
17 | #include <asm/gpio.h> | 18 | #define H1940_SUSPEND_CHECKSUM (0x30003ff8) |
19 | #define H1940_SUSPEND_RESUMEAT (0x30081000) | ||
20 | #define H1940_SUSPEND_CHECK (0x30080000) | ||
21 | |||
22 | extern void h1940_pm_return(void); | ||
23 | extern int h1940_led_blink_set(unsigned gpio, int state, | ||
24 | unsigned long *delay_on, | ||
25 | unsigned long *delay_off); | ||
26 | |||
27 | #include <linux/gpio.h> | ||
18 | 28 | ||
19 | #define H1940_LATCH_GPIO(x) (S3C_GPIO_END + (x)) | 29 | #define H1940_LATCH_GPIO(x) (S3C_GPIO_END + (x)) |
20 | 30 | ||
@@ -40,4 +50,4 @@ | |||
40 | #define H1940_LATCH_LED_GREEN H1940_LATCH_GPIO(14) | 50 | #define H1940_LATCH_LED_GREEN H1940_LATCH_GPIO(14) |
41 | #define H1940_LATCH_LED_FLASH H1940_LATCH_GPIO(15) | 51 | #define H1940_LATCH_LED_FLASH H1940_LATCH_GPIO(15) |
42 | 52 | ||
43 | #endif /* __ASM_ARCH_H1940_LATCH_H */ | 53 | #endif /* __MACH_S3C24XX_H1940_H */ |
diff --git a/arch/arm/mach-s3c24xx/include/mach/anubis-cpld.h b/arch/arm/mach-s3c24xx/include/mach/anubis-cpld.h deleted file mode 100644 index 1b614d5a81f3..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/anubis-cpld.h +++ /dev/null | |||
@@ -1,25 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/anubis-cpld.h | ||
2 | * | ||
3 | * Copyright (c) 2005 Simtec Electronics | ||
4 | * http://www.simtec.co.uk/products/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * ANUBIS - CPLD control constants | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARCH_ANUBISCPLD_H | ||
15 | #define __ASM_ARCH_ANUBISCPLD_H | ||
16 | |||
17 | /* CTRL2 - NAND WP control, IDE Reset assert/check */ | ||
18 | |||
19 | #define ANUBIS_CTRL1_NANDSEL (0x3) | ||
20 | |||
21 | /* IDREG - revision */ | ||
22 | |||
23 | #define ANUBIS_IDREG_REVMASK (0x7) | ||
24 | |||
25 | #endif /* __ASM_ARCH_ANUBISCPLD_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/anubis-irq.h b/arch/arm/mach-s3c24xx/include/mach/anubis-irq.h deleted file mode 100644 index a2a328134e34..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/anubis-irq.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/anubis-irq.h | ||
2 | * | ||
3 | * Copyright (c) 2005 Simtec Electronics | ||
4 | * http://www.simtec.co.uk/products/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * ANUBIS - IRQ Number definitions | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARCH_ANUBISIRQ_H | ||
15 | #define __ASM_ARCH_ANUBISIRQ_H | ||
16 | |||
17 | #define IRQ_IDE0 IRQ_EINT2 | ||
18 | #define IRQ_IDE1 IRQ_EINT3 | ||
19 | #define IRQ_ASIX IRQ_EINT1 | ||
20 | |||
21 | #endif /* __ASM_ARCH_ANUBISIRQ_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/anubis-map.h b/arch/arm/mach-s3c24xx/include/mach/anubis-map.h deleted file mode 100644 index c9deb3a5b2c3..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/anubis-map.h +++ /dev/null | |||
@@ -1,38 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/anubis-map.h | ||
2 | * | ||
3 | * Copyright (c) 2005 Simtec Electronics | ||
4 | * http://www.simtec.co.uk/products/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * ANUBIS - Memory map definitions | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | /* needs arch/map.h including with this */ | ||
15 | |||
16 | #ifndef __ASM_ARCH_ANUBISMAP_H | ||
17 | #define __ASM_ARCH_ANUBISMAP_H | ||
18 | |||
19 | /* start peripherals off after the S3C2410 */ | ||
20 | |||
21 | #define ANUBIS_IOADDR(x) (S3C2410_ADDR((x) + 0x01800000)) | ||
22 | |||
23 | #define ANUBIS_PA_CPLD (S3C2410_CS1 | (1<<26)) | ||
24 | |||
25 | /* we put the CPLD registers next, to get them out of the way */ | ||
26 | |||
27 | #define ANUBIS_VA_CTRL1 ANUBIS_IOADDR(0x00000000) /* 0x01800000 */ | ||
28 | #define ANUBIS_PA_CTRL1 (ANUBIS_PA_CPLD) | ||
29 | |||
30 | #define ANUBIS_VA_IDREG ANUBIS_IOADDR(0x00300000) /* 0x01B00000 */ | ||
31 | #define ANUBIS_PA_IDREG (ANUBIS_PA_CPLD + (3<<23)) | ||
32 | |||
33 | #define ANUBIS_IDEPRI ANUBIS_IOADDR(0x01000000) | ||
34 | #define ANUBIS_IDEPRIAUX ANUBIS_IOADDR(0x01100000) | ||
35 | #define ANUBIS_IDESEC ANUBIS_IOADDR(0x01200000) | ||
36 | #define ANUBIS_IDESECAUX ANUBIS_IOADDR(0x01300000) | ||
37 | |||
38 | #endif /* __ASM_ARCH_ANUBISMAP_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/bast-cpld.h b/arch/arm/mach-s3c24xx/include/mach/bast-cpld.h deleted file mode 100644 index bee2a7a932a0..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/bast-cpld.h +++ /dev/null | |||
@@ -1,53 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/bast-cpld.h | ||
2 | * | ||
3 | * Copyright (c) 2003-2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * BAST - CPLD control constants | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_BASTCPLD_H | ||
14 | #define __ASM_ARCH_BASTCPLD_H | ||
15 | |||
16 | /* CTRL1 - Audio LR routing */ | ||
17 | |||
18 | #define BAST_CPLD_CTRL1_LRCOFF (0x00) | ||
19 | #define BAST_CPLD_CTRL1_LRCADC (0x01) | ||
20 | #define BAST_CPLD_CTRL1_LRCDAC (0x02) | ||
21 | #define BAST_CPLD_CTRL1_LRCARM (0x03) | ||
22 | #define BAST_CPLD_CTRL1_LRMASK (0x03) | ||
23 | |||
24 | /* CTRL2 - NAND WP control, IDE Reset assert/check */ | ||
25 | |||
26 | #define BAST_CPLD_CTRL2_WNAND (0x04) | ||
27 | #define BAST_CPLD_CTLR2_IDERST (0x08) | ||
28 | |||
29 | /* CTRL3 - rom write control, CPLD identity */ | ||
30 | |||
31 | #define BAST_CPLD_CTRL3_IDMASK (0x0e) | ||
32 | #define BAST_CPLD_CTRL3_ROMWEN (0x01) | ||
33 | |||
34 | /* CTRL4 - 8bit LCD interface control/status */ | ||
35 | |||
36 | #define BAST_CPLD_CTRL4_LLAT (0x01) | ||
37 | #define BAST_CPLD_CTRL4_LCDRW (0x02) | ||
38 | #define BAST_CPLD_CTRL4_LCDCMD (0x04) | ||
39 | #define BAST_CPLD_CTRL4_LCDE2 (0x01) | ||
40 | |||
41 | /* CTRL5 - DMA routing */ | ||
42 | |||
43 | #define BAST_CPLD_DMA0_PRIIDE (0<<0) | ||
44 | #define BAST_CPLD_DMA0_SECIDE (1<<0) | ||
45 | #define BAST_CPLD_DMA0_ISA15 (2<<0) | ||
46 | #define BAST_CPLD_DMA0_ISA36 (3<<0) | ||
47 | |||
48 | #define BAST_CPLD_DMA1_PRIIDE (0<<2) | ||
49 | #define BAST_CPLD_DMA1_SECIDE (1<<2) | ||
50 | #define BAST_CPLD_DMA1_ISA15 (2<<2) | ||
51 | #define BAST_CPLD_DMA1_ISA36 (3<<2) | ||
52 | |||
53 | #endif /* __ASM_ARCH_BASTCPLD_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/bast-irq.h b/arch/arm/mach-s3c24xx/include/mach/bast-irq.h deleted file mode 100644 index cac428c42e7f..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/bast-irq.h +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/bast-irq.h | ||
2 | * | ||
3 | * Copyright (c) 2003-2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Machine BAST - IRQ Number definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_BASTIRQ_H | ||
14 | #define __ASM_ARCH_BASTIRQ_H | ||
15 | |||
16 | /* irq numbers to onboard peripherals */ | ||
17 | |||
18 | #define IRQ_USBOC IRQ_EINT18 | ||
19 | #define IRQ_IDE0 IRQ_EINT16 | ||
20 | #define IRQ_IDE1 IRQ_EINT17 | ||
21 | #define IRQ_PCSERIAL1 IRQ_EINT15 | ||
22 | #define IRQ_PCSERIAL2 IRQ_EINT14 | ||
23 | #define IRQ_PCPARALLEL IRQ_EINT13 | ||
24 | #define IRQ_ASIX IRQ_EINT11 | ||
25 | #define IRQ_DM9000 IRQ_EINT10 | ||
26 | #define IRQ_ISA IRQ_EINT9 | ||
27 | #define IRQ_SMALERT IRQ_EINT8 | ||
28 | |||
29 | #endif /* __ASM_ARCH_BASTIRQ_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/bast-map.h b/arch/arm/mach-s3c24xx/include/mach/bast-map.h deleted file mode 100644 index eecea2a50f8f..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/bast-map.h +++ /dev/null | |||
@@ -1,146 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/bast-map.h | ||
2 | * | ||
3 | * Copyright (c) 2003-2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Machine BAST - Memory map definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | /* needs arch/map.h including with this */ | ||
14 | |||
15 | /* ok, we've used up to 0x13000000, now we need to find space for the | ||
16 | * peripherals that live in the nGCS[x] areas, which are quite numerous | ||
17 | * in their space. We also have the board's CPLD to find register space | ||
18 | * for. | ||
19 | */ | ||
20 | |||
21 | #ifndef __ASM_ARCH_BASTMAP_H | ||
22 | #define __ASM_ARCH_BASTMAP_H | ||
23 | |||
24 | #define BAST_IOADDR(x) (S3C2410_ADDR((x) + 0x01300000)) | ||
25 | |||
26 | /* we put the CPLD registers next, to get them out of the way */ | ||
27 | |||
28 | #define BAST_VA_CTRL1 BAST_IOADDR(0x00000000) /* 0x01300000 */ | ||
29 | #define BAST_PA_CTRL1 (S3C2410_CS5 | 0x7800000) | ||
30 | |||
31 | #define BAST_VA_CTRL2 BAST_IOADDR(0x00100000) /* 0x01400000 */ | ||
32 | #define BAST_PA_CTRL2 (S3C2410_CS1 | 0x6000000) | ||
33 | |||
34 | #define BAST_VA_CTRL3 BAST_IOADDR(0x00200000) /* 0x01500000 */ | ||
35 | #define BAST_PA_CTRL3 (S3C2410_CS1 | 0x6800000) | ||
36 | |||
37 | #define BAST_VA_CTRL4 BAST_IOADDR(0x00300000) /* 0x01600000 */ | ||
38 | #define BAST_PA_CTRL4 (S3C2410_CS1 | 0x7000000) | ||
39 | |||
40 | /* next, we have the PC104 ISA interrupt registers */ | ||
41 | |||
42 | #define BAST_PA_PC104_IRQREQ (S3C2410_CS5 | 0x6000000) /* 0x01700000 */ | ||
43 | #define BAST_VA_PC104_IRQREQ BAST_IOADDR(0x00400000) | ||
44 | |||
45 | #define BAST_PA_PC104_IRQRAW (S3C2410_CS5 | 0x6800000) /* 0x01800000 */ | ||
46 | #define BAST_VA_PC104_IRQRAW BAST_IOADDR(0x00500000) | ||
47 | |||
48 | #define BAST_PA_PC104_IRQMASK (S3C2410_CS5 | 0x7000000) /* 0x01900000 */ | ||
49 | #define BAST_VA_PC104_IRQMASK BAST_IOADDR(0x00600000) | ||
50 | |||
51 | #define BAST_PA_LCD_RCMD1 (0x8800000) | ||
52 | #define BAST_VA_LCD_RCMD1 BAST_IOADDR(0x00700000) | ||
53 | |||
54 | #define BAST_PA_LCD_WCMD1 (0x8000000) | ||
55 | #define BAST_VA_LCD_WCMD1 BAST_IOADDR(0x00800000) | ||
56 | |||
57 | #define BAST_PA_LCD_RDATA1 (0x9800000) | ||
58 | #define BAST_VA_LCD_RDATA1 BAST_IOADDR(0x00900000) | ||
59 | |||
60 | #define BAST_PA_LCD_WDATA1 (0x9000000) | ||
61 | #define BAST_VA_LCD_WDATA1 BAST_IOADDR(0x00A00000) | ||
62 | |||
63 | #define BAST_PA_LCD_RCMD2 (0xA800000) | ||
64 | #define BAST_VA_LCD_RCMD2 BAST_IOADDR(0x00B00000) | ||
65 | |||
66 | #define BAST_PA_LCD_WCMD2 (0xA000000) | ||
67 | #define BAST_VA_LCD_WCMD2 BAST_IOADDR(0x00C00000) | ||
68 | |||
69 | #define BAST_PA_LCD_RDATA2 (0xB800000) | ||
70 | #define BAST_VA_LCD_RDATA2 BAST_IOADDR(0x00D00000) | ||
71 | |||
72 | #define BAST_PA_LCD_WDATA2 (0xB000000) | ||
73 | #define BAST_VA_LCD_WDATA2 BAST_IOADDR(0x00E00000) | ||
74 | |||
75 | |||
76 | /* 0xE0000000 contains the IO space that is split by speed and | ||
77 | * whether the access is for 8 or 16bit IO... this ensures that | ||
78 | * the correct access is made | ||
79 | * | ||
80 | * 0x10000000 of space, partitioned as so: | ||
81 | * | ||
82 | * 0x00000000 to 0x04000000 8bit, slow | ||
83 | * 0x04000000 to 0x08000000 16bit, slow | ||
84 | * 0x08000000 to 0x0C000000 16bit, net | ||
85 | * 0x0C000000 to 0x10000000 16bit, fast | ||
86 | * | ||
87 | * each of these spaces has the following in: | ||
88 | * | ||
89 | * 0x00000000 to 0x01000000 16MB ISA IO space | ||
90 | * 0x01000000 to 0x02000000 16MB ISA memory space | ||
91 | * 0x02000000 to 0x02100000 1MB IDE primary channel | ||
92 | * 0x02100000 to 0x02200000 1MB IDE primary channel aux | ||
93 | * 0x02200000 to 0x02400000 1MB IDE secondary channel | ||
94 | * 0x02300000 to 0x02400000 1MB IDE secondary channel aux | ||
95 | * 0x02400000 to 0x02500000 1MB ASIX ethernet controller | ||
96 | * 0x02500000 to 0x02600000 1MB Davicom DM9000 ethernet controller | ||
97 | * 0x02600000 to 0x02700000 1MB PC SuperIO controller | ||
98 | * | ||
99 | * the phyiscal layout of the zones are: | ||
100 | * nGCS2 - 8bit, slow | ||
101 | * nGCS3 - 16bit, slow | ||
102 | * nGCS4 - 16bit, net | ||
103 | * nGCS5 - 16bit, fast | ||
104 | */ | ||
105 | |||
106 | #define BAST_VA_MULTISPACE (0xE0000000) | ||
107 | |||
108 | #define BAST_VA_ISAIO (BAST_VA_MULTISPACE + 0x00000000) | ||
109 | #define BAST_VA_ISAMEM (BAST_VA_MULTISPACE + 0x01000000) | ||
110 | #define BAST_VA_IDEPRI (BAST_VA_MULTISPACE + 0x02000000) | ||
111 | #define BAST_VA_IDEPRIAUX (BAST_VA_MULTISPACE + 0x02100000) | ||
112 | #define BAST_VA_IDESEC (BAST_VA_MULTISPACE + 0x02200000) | ||
113 | #define BAST_VA_IDESECAUX (BAST_VA_MULTISPACE + 0x02300000) | ||
114 | #define BAST_VA_ASIXNET (BAST_VA_MULTISPACE + 0x02400000) | ||
115 | #define BAST_VA_DM9000 (BAST_VA_MULTISPACE + 0x02500000) | ||
116 | #define BAST_VA_SUPERIO (BAST_VA_MULTISPACE + 0x02600000) | ||
117 | |||
118 | #define BAST_VA_MULTISPACE (0xE0000000) | ||
119 | |||
120 | #define BAST_VAM_CS2 (0x00000000) | ||
121 | #define BAST_VAM_CS3 (0x04000000) | ||
122 | #define BAST_VAM_CS4 (0x08000000) | ||
123 | #define BAST_VAM_CS5 (0x0C000000) | ||
124 | |||
125 | /* physical offset addresses for the peripherals */ | ||
126 | |||
127 | #define BAST_PA_ISAIO (0x00000000) | ||
128 | #define BAST_PA_ASIXNET (0x01000000) | ||
129 | #define BAST_PA_SUPERIO (0x01800000) | ||
130 | #define BAST_PA_IDEPRI (0x02000000) | ||
131 | #define BAST_PA_IDEPRIAUX (0x02800000) | ||
132 | #define BAST_PA_IDESEC (0x03000000) | ||
133 | #define BAST_PA_IDESECAUX (0x03800000) | ||
134 | #define BAST_PA_ISAMEM (0x04000000) | ||
135 | #define BAST_PA_DM9000 (0x05000000) | ||
136 | |||
137 | /* some configurations for the peripherals */ | ||
138 | |||
139 | #define BAST_PCSIO (BAST_VA_SUPERIO + BAST_VAM_CS2) | ||
140 | /* */ | ||
141 | |||
142 | #define BAST_ASIXNET_CS BAST_VAM_CS5 | ||
143 | #define BAST_IDE_CS BAST_VAM_CS5 | ||
144 | #define BAST_DM9000_CS BAST_VAM_CS4 | ||
145 | |||
146 | #endif /* __ASM_ARCH_BASTMAP_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/debug-macro.S b/arch/arm/mach-s3c24xx/include/mach/debug-macro.S index 4135de87d1f7..13ed33c69113 100644 --- a/arch/arm/mach-s3c24xx/include/mach/debug-macro.S +++ b/arch/arm/mach-s3c24xx/include/mach/debug-macro.S | |||
@@ -40,17 +40,17 @@ | |||
40 | addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART) | 40 | addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART) |
41 | addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART) | 41 | addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART) |
42 | bic \rd, \rd, #0xff000 | 42 | bic \rd, \rd, #0xff000 |
43 | ldr \rd, [ \rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0) ] | 43 | ldr \rd, [\rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0)] |
44 | and \rd, \rd, #0x00ff0000 | 44 | and \rd, \rd, #0x00ff0000 |
45 | teq \rd, #0x00440000 @ is it 2440? | 45 | teq \rd, #0x00440000 @ is it 2440? |
46 | 1004: | 46 | 1004: |
47 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 47 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
48 | moveq \rd, \rd, lsr #SHIFT_2440TXF | 48 | moveq \rd, \rd, lsr #SHIFT_2440TXF |
49 | tst \rd, #S3C2410_UFSTAT_TXFULL | 49 | tst \rd, #S3C2410_UFSTAT_TXFULL |
50 | .endm | 50 | .endm |
51 | 51 | ||
52 | .macro fifo_full_s3c2410 rd, rx | 52 | .macro fifo_full_s3c2410 rd, rx |
53 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 53 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
54 | tst \rd, #S3C2410_UFSTAT_TXFULL | 54 | tst \rd, #S3C2410_UFSTAT_TXFULL |
55 | .endm | 55 | .endm |
56 | 56 | ||
@@ -68,18 +68,18 @@ | |||
68 | addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART) | 68 | addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART) |
69 | addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART) | 69 | addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART) |
70 | bic \rd, \rd, #0xff000 | 70 | bic \rd, \rd, #0xff000 |
71 | ldr \rd, [ \rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0) ] | 71 | ldr \rd, [\rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0)] |
72 | and \rd, \rd, #0x00ff0000 | 72 | and \rd, \rd, #0x00ff0000 |
73 | teq \rd, #0x00440000 @ is it 2440? | 73 | teq \rd, #0x00440000 @ is it 2440? |
74 | 74 | ||
75 | 10000: | 75 | 10000: |
76 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 76 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
77 | andne \rd, \rd, #S3C2410_UFSTAT_TXMASK | 77 | andne \rd, \rd, #S3C2410_UFSTAT_TXMASK |
78 | andeq \rd, \rd, #S3C2440_UFSTAT_TXMASK | 78 | andeq \rd, \rd, #S3C2440_UFSTAT_TXMASK |
79 | .endm | 79 | .endm |
80 | 80 | ||
81 | .macro fifo_level_s3c2410 rd, rx | 81 | .macro fifo_level_s3c2410 rd, rx |
82 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 82 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
83 | and \rd, \rd, #S3C2410_UFSTAT_TXMASK | 83 | and \rd, \rd, #S3C2410_UFSTAT_TXMASK |
84 | .endm | 84 | .endm |
85 | 85 | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/entry-macro.S b/arch/arm/mach-s3c24xx/include/mach/entry-macro.S index 7615a14773fa..6a21beeba1da 100644 --- a/arch/arm/mach-s3c24xx/include/mach/entry-macro.S +++ b/arch/arm/mach-s3c24xx/include/mach/entry-macro.S | |||
@@ -31,10 +31,10 @@ | |||
31 | 31 | ||
32 | @@ try the interrupt offset register, since it is there | 32 | @@ try the interrupt offset register, since it is there |
33 | 33 | ||
34 | ldr \irqstat, [ \base, #INTPND ] | 34 | ldr \irqstat, [\base, #INTPND ] |
35 | teq \irqstat, #0 | 35 | teq \irqstat, #0 |
36 | beq 1002f | 36 | beq 1002f |
37 | ldr \irqnr, [ \base, #INTOFFSET ] | 37 | ldr \irqnr, [\base, #INTOFFSET ] |
38 | mov \tmp, #1 | 38 | mov \tmp, #1 |
39 | tst \irqstat, \tmp, lsl \irqnr | 39 | tst \irqstat, \tmp, lsl \irqnr |
40 | bne 1001f | 40 | bne 1001f |
diff --git a/arch/arm/mach-s3c24xx/include/mach/gpio-fns.h b/arch/arm/mach-s3c24xx/include/mach/gpio-fns.h deleted file mode 100644 index c53ad34c6579..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/gpio-fns.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <plat/gpio-fns.h> | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h b/arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h deleted file mode 100644 index 3890a05948fb..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h +++ /dev/null | |||
@@ -1,97 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/gpio-nrs.h | ||
2 | * | ||
3 | * Copyright (c) 2008 Simtec Electronics | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * S3C2410 - GPIO bank numbering | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_GPIONRS_H | ||
15 | #define __MACH_GPIONRS_H | ||
16 | |||
17 | #define S3C2410_GPIONO(bank,offset) ((bank) + (offset)) | ||
18 | |||
19 | #define S3C2410_GPIO_BANKG (32*6) | ||
20 | #define S3C2410_GPIO_BANKH (32*7) | ||
21 | |||
22 | /* GPIO sizes for various SoCs: | ||
23 | * | ||
24 | * 2442 | ||
25 | * 2410 2412 2440 2443 2416 | ||
26 | * ---- ---- ---- ---- ---- | ||
27 | * A 23 22 25 16 25 | ||
28 | * B 11 11 11 11 9 | ||
29 | * C 16 15 16 16 16 | ||
30 | * D 16 16 16 16 16 | ||
31 | * E 16 16 16 16 16 | ||
32 | * F 8 8 8 8 8 | ||
33 | * G 16 16 16 16 8 | ||
34 | * H 11 11 9 15 15 | ||
35 | * J -- -- 13 16 -- | ||
36 | * K -- -- -- -- 16 | ||
37 | * L -- -- -- 15 7 | ||
38 | * M -- -- -- 2 2 | ||
39 | */ | ||
40 | |||
41 | /* GPIO bank sizes */ | ||
42 | #define S3C2410_GPIO_A_NR (32) | ||
43 | #define S3C2410_GPIO_B_NR (32) | ||
44 | #define S3C2410_GPIO_C_NR (32) | ||
45 | #define S3C2410_GPIO_D_NR (32) | ||
46 | #define S3C2410_GPIO_E_NR (32) | ||
47 | #define S3C2410_GPIO_F_NR (32) | ||
48 | #define S3C2410_GPIO_G_NR (32) | ||
49 | #define S3C2410_GPIO_H_NR (32) | ||
50 | #define S3C2410_GPIO_J_NR (32) /* technically 16. */ | ||
51 | #define S3C2410_GPIO_K_NR (32) /* technically 16. */ | ||
52 | #define S3C2410_GPIO_L_NR (32) /* technically 15. */ | ||
53 | #define S3C2410_GPIO_M_NR (32) /* technically 2. */ | ||
54 | |||
55 | #if CONFIG_S3C_GPIO_SPACE != 0 | ||
56 | #error CONFIG_S3C_GPIO_SPACE cannot be nonzero at the moment | ||
57 | #endif | ||
58 | |||
59 | #define S3C2410_GPIO_NEXT(__gpio) \ | ||
60 | ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 0) | ||
61 | |||
62 | #ifndef __ASSEMBLY__ | ||
63 | |||
64 | enum s3c_gpio_number { | ||
65 | S3C2410_GPIO_A_START = 0, | ||
66 | S3C2410_GPIO_B_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_A), | ||
67 | S3C2410_GPIO_C_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_B), | ||
68 | S3C2410_GPIO_D_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_C), | ||
69 | S3C2410_GPIO_E_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_D), | ||
70 | S3C2410_GPIO_F_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_E), | ||
71 | S3C2410_GPIO_G_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_F), | ||
72 | S3C2410_GPIO_H_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_G), | ||
73 | S3C2410_GPIO_J_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_H), | ||
74 | S3C2410_GPIO_K_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_J), | ||
75 | S3C2410_GPIO_L_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_K), | ||
76 | S3C2410_GPIO_M_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_L), | ||
77 | }; | ||
78 | |||
79 | #endif /* __ASSEMBLY__ */ | ||
80 | |||
81 | /* S3C2410 GPIO number definitions. */ | ||
82 | |||
83 | #define S3C2410_GPA(_nr) (S3C2410_GPIO_A_START + (_nr)) | ||
84 | #define S3C2410_GPB(_nr) (S3C2410_GPIO_B_START + (_nr)) | ||
85 | #define S3C2410_GPC(_nr) (S3C2410_GPIO_C_START + (_nr)) | ||
86 | #define S3C2410_GPD(_nr) (S3C2410_GPIO_D_START + (_nr)) | ||
87 | #define S3C2410_GPE(_nr) (S3C2410_GPIO_E_START + (_nr)) | ||
88 | #define S3C2410_GPF(_nr) (S3C2410_GPIO_F_START + (_nr)) | ||
89 | #define S3C2410_GPG(_nr) (S3C2410_GPIO_G_START + (_nr)) | ||
90 | #define S3C2410_GPH(_nr) (S3C2410_GPIO_H_START + (_nr)) | ||
91 | #define S3C2410_GPJ(_nr) (S3C2410_GPIO_J_START + (_nr)) | ||
92 | #define S3C2410_GPK(_nr) (S3C2410_GPIO_K_START + (_nr)) | ||
93 | #define S3C2410_GPL(_nr) (S3C2410_GPIO_L_START + (_nr)) | ||
94 | #define S3C2410_GPM(_nr) (S3C2410_GPIO_M_START + (_nr)) | ||
95 | |||
96 | #endif /* __MACH_GPIONRS_H */ | ||
97 | |||
diff --git a/arch/arm/mach-s3c24xx/include/mach/gpio-track.h b/arch/arm/mach-s3c24xx/include/mach/gpio-track.h deleted file mode 100644 index c410a078622c..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/gpio-track.h +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c24100/include/mach/gpio-core.h | ||
2 | * | ||
3 | * Copyright 2008 Openmoko, Inc. | ||
4 | * Copyright 2008 Simtec Electronics | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * http://armlinux.simtec.co.uk/ | ||
7 | * | ||
8 | * S3C2410 - GPIO core support | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARCH_GPIO_CORE_H | ||
16 | #define __ASM_ARCH_GPIO_CORE_H __FILE__ | ||
17 | |||
18 | #include <mach/regs-gpio.h> | ||
19 | |||
20 | extern struct samsung_gpio_chip s3c24xx_gpios[]; | ||
21 | |||
22 | static inline struct samsung_gpio_chip *samsung_gpiolib_getchip(unsigned int pin) | ||
23 | { | ||
24 | struct samsung_gpio_chip *chip; | ||
25 | |||
26 | if (pin > S3C_GPIO_END) | ||
27 | return NULL; | ||
28 | |||
29 | chip = &s3c24xx_gpios[pin/32]; | ||
30 | return ((pin - chip->chip.base) < chip->chip.ngpio) ? chip : NULL; | ||
31 | } | ||
32 | |||
33 | #endif /* __ASM_ARCH_GPIO_CORE_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/gpio.h b/arch/arm/mach-s3c24xx/include/mach/gpio.h index 6fac70f3484e..14591563ca70 100644 --- a/arch/arm/mach-s3c24xx/include/mach/gpio.h +++ b/arch/arm/mach-s3c24xx/include/mach/gpio.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/gpio.h | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2008 Simtec Electronics | 2 | * Copyright (c) 2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -15,6 +14,9 @@ | |||
15 | * devices that need GPIO. | 14 | * devices that need GPIO. |
16 | */ | 15 | */ |
17 | 16 | ||
17 | #ifndef __MACH_GPIO_H | ||
18 | #define __MACH_GPIO_H __FILE__ | ||
19 | |||
18 | #ifdef CONFIG_CPU_S3C244X | 20 | #ifdef CONFIG_CPU_S3C244X |
19 | #define ARCH_NR_GPIOS (32 * 9 + CONFIG_S3C24XX_GPIO_EXTRA) | 21 | #define ARCH_NR_GPIOS (32 * 9 + CONFIG_S3C24XX_GPIO_EXTRA) |
20 | #elif defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2416) | 22 | #elif defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2416) |
@@ -23,8 +25,83 @@ | |||
23 | #define ARCH_NR_GPIOS (256 + CONFIG_S3C24XX_GPIO_EXTRA) | 25 | #define ARCH_NR_GPIOS (256 + CONFIG_S3C24XX_GPIO_EXTRA) |
24 | #endif | 26 | #endif |
25 | 27 | ||
26 | #include <mach/gpio-nrs.h> | 28 | /* |
27 | #include <mach/gpio-fns.h> | 29 | * GPIO sizes for various SoCs: |
30 | * | ||
31 | * 2410 2412 2440 2443 2416 | ||
32 | * 2442 | ||
33 | * ---- ---- ---- ---- ---- | ||
34 | * A 23 22 25 16 25 | ||
35 | * B 11 11 11 11 9 | ||
36 | * C 16 15 16 16 16 | ||
37 | * D 16 16 16 16 16 | ||
38 | * E 16 16 16 16 16 | ||
39 | * F 8 8 8 8 8 | ||
40 | * G 16 16 16 16 8 | ||
41 | * H 11 11 9 15 15 | ||
42 | * J -- -- 13 16 -- | ||
43 | * K -- -- -- -- 16 | ||
44 | * L -- -- -- 15 7 | ||
45 | * M -- -- -- 2 2 | ||
46 | */ | ||
47 | |||
48 | /* GPIO bank sizes */ | ||
49 | |||
50 | #define S3C2410_GPIO_A_NR (32) | ||
51 | #define S3C2410_GPIO_B_NR (32) | ||
52 | #define S3C2410_GPIO_C_NR (32) | ||
53 | #define S3C2410_GPIO_D_NR (32) | ||
54 | #define S3C2410_GPIO_E_NR (32) | ||
55 | #define S3C2410_GPIO_F_NR (32) | ||
56 | #define S3C2410_GPIO_G_NR (32) | ||
57 | #define S3C2410_GPIO_H_NR (32) | ||
58 | #define S3C2410_GPIO_J_NR (32) /* technically 16. */ | ||
59 | #define S3C2410_GPIO_K_NR (32) /* technically 16. */ | ||
60 | #define S3C2410_GPIO_L_NR (32) /* technically 15. */ | ||
61 | #define S3C2410_GPIO_M_NR (32) /* technically 2. */ | ||
62 | |||
63 | #if CONFIG_S3C_GPIO_SPACE != 0 | ||
64 | #error CONFIG_S3C_GPIO_SPACE cannot be nonzero at the moment | ||
65 | #endif | ||
66 | |||
67 | #define S3C2410_GPIO_NEXT(__gpio) \ | ||
68 | ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 0) | ||
69 | |||
70 | #ifndef __ASSEMBLY__ | ||
71 | |||
72 | enum s3c_gpio_number { | ||
73 | S3C2410_GPIO_A_START = 0, | ||
74 | S3C2410_GPIO_B_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_A), | ||
75 | S3C2410_GPIO_C_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_B), | ||
76 | S3C2410_GPIO_D_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_C), | ||
77 | S3C2410_GPIO_E_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_D), | ||
78 | S3C2410_GPIO_F_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_E), | ||
79 | S3C2410_GPIO_G_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_F), | ||
80 | S3C2410_GPIO_H_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_G), | ||
81 | S3C2410_GPIO_J_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_H), | ||
82 | S3C2410_GPIO_K_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_J), | ||
83 | S3C2410_GPIO_L_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_K), | ||
84 | S3C2410_GPIO_M_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_L), | ||
85 | }; | ||
86 | |||
87 | #endif /* __ASSEMBLY__ */ | ||
88 | |||
89 | /* S3C2410 GPIO number definitions. */ | ||
90 | |||
91 | #define S3C2410_GPA(_nr) (S3C2410_GPIO_A_START + (_nr)) | ||
92 | #define S3C2410_GPB(_nr) (S3C2410_GPIO_B_START + (_nr)) | ||
93 | #define S3C2410_GPC(_nr) (S3C2410_GPIO_C_START + (_nr)) | ||
94 | #define S3C2410_GPD(_nr) (S3C2410_GPIO_D_START + (_nr)) | ||
95 | #define S3C2410_GPE(_nr) (S3C2410_GPIO_E_START + (_nr)) | ||
96 | #define S3C2410_GPF(_nr) (S3C2410_GPIO_F_START + (_nr)) | ||
97 | #define S3C2410_GPG(_nr) (S3C2410_GPIO_G_START + (_nr)) | ||
98 | #define S3C2410_GPH(_nr) (S3C2410_GPIO_H_START + (_nr)) | ||
99 | #define S3C2410_GPJ(_nr) (S3C2410_GPIO_J_START + (_nr)) | ||
100 | #define S3C2410_GPK(_nr) (S3C2410_GPIO_K_START + (_nr)) | ||
101 | #define S3C2410_GPL(_nr) (S3C2410_GPIO_L_START + (_nr)) | ||
102 | #define S3C2410_GPM(_nr) (S3C2410_GPIO_M_START + (_nr)) | ||
103 | |||
104 | #include <plat/gpio-cfg.h> | ||
28 | 105 | ||
29 | #ifdef CONFIG_CPU_S3C244X | 106 | #ifdef CONFIG_CPU_S3C244X |
30 | #define S3C_GPIO_END (S3C2410_GPJ(0) + 32) | 107 | #define S3C_GPIO_END (S3C2410_GPJ(0) + 32) |
@@ -33,3 +110,5 @@ | |||
33 | #else | 110 | #else |
34 | #define S3C_GPIO_END (S3C2410_GPH(0) + 32) | 111 | #define S3C_GPIO_END (S3C2410_GPH(0) + 32) |
35 | #endif | 112 | #endif |
113 | |||
114 | #endif /* __MACH_GPIO_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/h1940.h b/arch/arm/mach-s3c24xx/include/mach/h1940.h deleted file mode 100644 index 2aa683c8d3d6..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/h1940.h +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/h1940.h | ||
2 | * | ||
3 | * Copyright 2006 Ben Dooks <ben-linux@fluff.org> | ||
4 | * | ||
5 | * H1940 definitions | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef __ASM_ARCH_H1940_H | ||
13 | #define __ASM_ARCH_H1940_H | ||
14 | |||
15 | #define H1940_SUSPEND_CHECKSUM (0x30003ff8) | ||
16 | #define H1940_SUSPEND_RESUMEAT (0x30081000) | ||
17 | #define H1940_SUSPEND_CHECK (0x30080000) | ||
18 | |||
19 | extern void h1940_pm_return(void); | ||
20 | extern int h1940_led_blink_set(unsigned gpio, int state, | ||
21 | unsigned long *delay_on, unsigned long *delay_off); | ||
22 | |||
23 | |||
24 | #endif /* __ASM_ARCH_H1940_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/hardware.h b/arch/arm/mach-s3c24xx/include/mach/hardware.h index aef5631eac58..a6cc14a092fc 100644 --- a/arch/arm/mach-s3c24xx/include/mach/hardware.h +++ b/arch/arm/mach-s3c24xx/include/mach/hardware.h | |||
@@ -23,12 +23,6 @@ extern int s3c2440_set_dsc(unsigned int pin, unsigned int value); | |||
23 | 23 | ||
24 | #endif /* CONFIG_CPU_S3C2440 */ | 24 | #endif /* CONFIG_CPU_S3C2440 */ |
25 | 25 | ||
26 | #ifdef CONFIG_CPU_S3C2412 | ||
27 | |||
28 | extern int s3c2412_gpio_set_sleepcfg(unsigned int pin, unsigned int state); | ||
29 | |||
30 | #endif /* CONFIG_CPU_S3C2412 */ | ||
31 | |||
32 | #endif /* __ASSEMBLY__ */ | 26 | #endif /* __ASSEMBLY__ */ |
33 | 27 | ||
34 | #include <asm/sizes.h> | 28 | #include <asm/sizes.h> |
diff --git a/arch/arm/mach-s3c24xx/include/mach/idle.h b/arch/arm/mach-s3c24xx/include/mach/idle.h deleted file mode 100644 index e9ddd706b16e..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/idle.h +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/idle.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 CPU Idle controls | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_IDLE_H | ||
14 | #define __ASM_ARCH_IDLE_H __FILE__ | ||
15 | |||
16 | /* This allows the over-ride of the default idle code, in case there | ||
17 | * is any other things to be done over idle (like DVS) | ||
18 | */ | ||
19 | |||
20 | extern void (*s3c24xx_idle)(void); | ||
21 | |||
22 | extern void s3c24xx_default_idle(void); | ||
23 | |||
24 | #endif /* __ASM_ARCH_IDLE_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/osiris-cpld.h b/arch/arm/mach-s3c24xx/include/mach/osiris-cpld.h deleted file mode 100644 index e9e36b0abbac..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/osiris-cpld.h +++ /dev/null | |||
@@ -1,30 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/osiris-cpld.h | ||
2 | * | ||
3 | * Copyright 2005 Simtec Electronics | ||
4 | * http://www.simtec.co.uk/products/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * OSIRIS - CPLD control constants | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARCH_OSIRISCPLD_H | ||
15 | #define __ASM_ARCH_OSIRISCPLD_H | ||
16 | |||
17 | /* CTRL0 - NAND WP control */ | ||
18 | |||
19 | #define OSIRIS_CTRL0_NANDSEL (0x3) | ||
20 | #define OSIRIS_CTRL0_BOOT_INT (1<<3) | ||
21 | #define OSIRIS_CTRL0_PCMCIA (1<<4) | ||
22 | #define OSIRIS_CTRL0_FIX8 (1<<5) | ||
23 | #define OSIRIS_CTRL0_PCMCIA_nWAIT (1<<6) | ||
24 | #define OSIRIS_CTRL0_PCMCIA_nIOIS16 (1<<7) | ||
25 | |||
26 | #define OSIRIS_CTRL1_FIX8 (1<<0) | ||
27 | |||
28 | #define OSIRIS_ID_REVMASK (0x7) | ||
29 | |||
30 | #endif /* __ASM_ARCH_OSIRISCPLD_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-gpio.h b/arch/arm/mach-s3c24xx/include/mach/regs-gpio.h index a11a638bd599..c2ef016032ab 100644 --- a/arch/arm/mach-s3c24xx/include/mach/regs-gpio.h +++ b/arch/arm/mach-s3c24xx/include/mach/regs-gpio.h | |||
@@ -14,8 +14,6 @@ | |||
14 | #ifndef __ASM_ARCH_REGS_GPIO_H | 14 | #ifndef __ASM_ARCH_REGS_GPIO_H |
15 | #define __ASM_ARCH_REGS_GPIO_H | 15 | #define __ASM_ARCH_REGS_GPIO_H |
16 | 16 | ||
17 | #include <mach/gpio-nrs.h> | ||
18 | |||
19 | #define S3C24XX_MISCCR S3C24XX_GPIOREG2(0x80) | 17 | #define S3C24XX_MISCCR S3C24XX_GPIOREG2(0x80) |
20 | 18 | ||
21 | /* general configuration options */ | 19 | /* general configuration options */ |
diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-mem.h b/arch/arm/mach-s3c24xx/include/mach/regs-mem.h deleted file mode 100644 index e0c67b0163d8..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/regs-mem.h +++ /dev/null | |||
@@ -1,202 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/regs-mem.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 Memory Control register definitions | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARM_MEMREGS_H | ||
14 | #define __ASM_ARM_MEMREGS_H | ||
15 | |||
16 | #ifndef S3C2410_MEMREG | ||
17 | #define S3C2410_MEMREG(x) (S3C24XX_VA_MEMCTRL + (x)) | ||
18 | #endif | ||
19 | |||
20 | /* bus width, and wait state control */ | ||
21 | #define S3C2410_BWSCON S3C2410_MEMREG(0x0000) | ||
22 | |||
23 | /* bank zero config - note, pinstrapped from OM pins! */ | ||
24 | #define S3C2410_BWSCON_DW0_16 (1<<1) | ||
25 | #define S3C2410_BWSCON_DW0_32 (2<<1) | ||
26 | |||
27 | /* bank one configs */ | ||
28 | #define S3C2410_BWSCON_DW1_8 (0<<4) | ||
29 | #define S3C2410_BWSCON_DW1_16 (1<<4) | ||
30 | #define S3C2410_BWSCON_DW1_32 (2<<4) | ||
31 | #define S3C2410_BWSCON_WS1 (1<<6) | ||
32 | #define S3C2410_BWSCON_ST1 (1<<7) | ||
33 | |||
34 | /* bank 2 configurations */ | ||
35 | #define S3C2410_BWSCON_DW2_8 (0<<8) | ||
36 | #define S3C2410_BWSCON_DW2_16 (1<<8) | ||
37 | #define S3C2410_BWSCON_DW2_32 (2<<8) | ||
38 | #define S3C2410_BWSCON_WS2 (1<<10) | ||
39 | #define S3C2410_BWSCON_ST2 (1<<11) | ||
40 | |||
41 | /* bank 3 configurations */ | ||
42 | #define S3C2410_BWSCON_DW3_8 (0<<12) | ||
43 | #define S3C2410_BWSCON_DW3_16 (1<<12) | ||
44 | #define S3C2410_BWSCON_DW3_32 (2<<12) | ||
45 | #define S3C2410_BWSCON_WS3 (1<<14) | ||
46 | #define S3C2410_BWSCON_ST3 (1<<15) | ||
47 | |||
48 | /* bank 4 configurations */ | ||
49 | #define S3C2410_BWSCON_DW4_8 (0<<16) | ||
50 | #define S3C2410_BWSCON_DW4_16 (1<<16) | ||
51 | #define S3C2410_BWSCON_DW4_32 (2<<16) | ||
52 | #define S3C2410_BWSCON_WS4 (1<<18) | ||
53 | #define S3C2410_BWSCON_ST4 (1<<19) | ||
54 | |||
55 | /* bank 5 configurations */ | ||
56 | #define S3C2410_BWSCON_DW5_8 (0<<20) | ||
57 | #define S3C2410_BWSCON_DW5_16 (1<<20) | ||
58 | #define S3C2410_BWSCON_DW5_32 (2<<20) | ||
59 | #define S3C2410_BWSCON_WS5 (1<<22) | ||
60 | #define S3C2410_BWSCON_ST5 (1<<23) | ||
61 | |||
62 | /* bank 6 configurations */ | ||
63 | #define S3C2410_BWSCON_DW6_8 (0<<24) | ||
64 | #define S3C2410_BWSCON_DW6_16 (1<<24) | ||
65 | #define S3C2410_BWSCON_DW6_32 (2<<24) | ||
66 | #define S3C2410_BWSCON_WS6 (1<<26) | ||
67 | #define S3C2410_BWSCON_ST6 (1<<27) | ||
68 | |||
69 | /* bank 7 configurations */ | ||
70 | #define S3C2410_BWSCON_DW7_8 (0<<28) | ||
71 | #define S3C2410_BWSCON_DW7_16 (1<<28) | ||
72 | #define S3C2410_BWSCON_DW7_32 (2<<28) | ||
73 | #define S3C2410_BWSCON_WS7 (1<<30) | ||
74 | #define S3C2410_BWSCON_ST7 (1<<31) | ||
75 | |||
76 | /* accesor functions for getting BANK(n) configuration. (n != 0) */ | ||
77 | |||
78 | #define S3C2410_BWSCON_GET(_bwscon, _bank) (((_bwscon) >> ((_bank) * 4)) & 0xf) | ||
79 | |||
80 | #define S3C2410_BWSCON_DW8 (0) | ||
81 | #define S3C2410_BWSCON_DW16 (1) | ||
82 | #define S3C2410_BWSCON_DW32 (2) | ||
83 | #define S3C2410_BWSCON_WS (1 << 2) | ||
84 | #define S3C2410_BWSCON_ST (1 << 3) | ||
85 | |||
86 | /* memory set (rom, ram) */ | ||
87 | #define S3C2410_BANKCON0 S3C2410_MEMREG(0x0004) | ||
88 | #define S3C2410_BANKCON1 S3C2410_MEMREG(0x0008) | ||
89 | #define S3C2410_BANKCON2 S3C2410_MEMREG(0x000C) | ||
90 | #define S3C2410_BANKCON3 S3C2410_MEMREG(0x0010) | ||
91 | #define S3C2410_BANKCON4 S3C2410_MEMREG(0x0014) | ||
92 | #define S3C2410_BANKCON5 S3C2410_MEMREG(0x0018) | ||
93 | #define S3C2410_BANKCON6 S3C2410_MEMREG(0x001C) | ||
94 | #define S3C2410_BANKCON7 S3C2410_MEMREG(0x0020) | ||
95 | |||
96 | /* bank configuration registers */ | ||
97 | |||
98 | #define S3C2410_BANKCON_PMCnorm (0x00) | ||
99 | #define S3C2410_BANKCON_PMC4 (0x01) | ||
100 | #define S3C2410_BANKCON_PMC8 (0x02) | ||
101 | #define S3C2410_BANKCON_PMC16 (0x03) | ||
102 | |||
103 | /* bank configurations for banks 0..7, note banks | ||
104 | * 6 and 7 have different configurations depending on | ||
105 | * the memory type bits */ | ||
106 | |||
107 | #define S3C2410_BANKCON_Tacp2 (0x0 << 2) | ||
108 | #define S3C2410_BANKCON_Tacp3 (0x1 << 2) | ||
109 | #define S3C2410_BANKCON_Tacp4 (0x2 << 2) | ||
110 | #define S3C2410_BANKCON_Tacp6 (0x3 << 2) | ||
111 | #define S3C2410_BANKCON_Tacp_SHIFT (2) | ||
112 | |||
113 | #define S3C2410_BANKCON_Tcah0 (0x0 << 4) | ||
114 | #define S3C2410_BANKCON_Tcah1 (0x1 << 4) | ||
115 | #define S3C2410_BANKCON_Tcah2 (0x2 << 4) | ||
116 | #define S3C2410_BANKCON_Tcah4 (0x3 << 4) | ||
117 | #define S3C2410_BANKCON_Tcah_SHIFT (4) | ||
118 | |||
119 | #define S3C2410_BANKCON_Tcoh0 (0x0 << 6) | ||
120 | #define S3C2410_BANKCON_Tcoh1 (0x1 << 6) | ||
121 | #define S3C2410_BANKCON_Tcoh2 (0x2 << 6) | ||
122 | #define S3C2410_BANKCON_Tcoh4 (0x3 << 6) | ||
123 | #define S3C2410_BANKCON_Tcoh_SHIFT (6) | ||
124 | |||
125 | #define S3C2410_BANKCON_Tacc1 (0x0 << 8) | ||
126 | #define S3C2410_BANKCON_Tacc2 (0x1 << 8) | ||
127 | #define S3C2410_BANKCON_Tacc3 (0x2 << 8) | ||
128 | #define S3C2410_BANKCON_Tacc4 (0x3 << 8) | ||
129 | #define S3C2410_BANKCON_Tacc6 (0x4 << 8) | ||
130 | #define S3C2410_BANKCON_Tacc8 (0x5 << 8) | ||
131 | #define S3C2410_BANKCON_Tacc10 (0x6 << 8) | ||
132 | #define S3C2410_BANKCON_Tacc14 (0x7 << 8) | ||
133 | #define S3C2410_BANKCON_Tacc_SHIFT (8) | ||
134 | |||
135 | #define S3C2410_BANKCON_Tcos0 (0x0 << 11) | ||
136 | #define S3C2410_BANKCON_Tcos1 (0x1 << 11) | ||
137 | #define S3C2410_BANKCON_Tcos2 (0x2 << 11) | ||
138 | #define S3C2410_BANKCON_Tcos4 (0x3 << 11) | ||
139 | #define S3C2410_BANKCON_Tcos_SHIFT (11) | ||
140 | |||
141 | #define S3C2410_BANKCON_Tacs0 (0x0 << 13) | ||
142 | #define S3C2410_BANKCON_Tacs1 (0x1 << 13) | ||
143 | #define S3C2410_BANKCON_Tacs2 (0x2 << 13) | ||
144 | #define S3C2410_BANKCON_Tacs4 (0x3 << 13) | ||
145 | #define S3C2410_BANKCON_Tacs_SHIFT (13) | ||
146 | |||
147 | #define S3C2410_BANKCON_SRAM (0x0 << 15) | ||
148 | #define S3C2410_BANKCON_SDRAM (0x3 << 15) | ||
149 | |||
150 | /* next bits only for SDRAM in 6,7 */ | ||
151 | #define S3C2410_BANKCON_Trcd2 (0x00 << 2) | ||
152 | #define S3C2410_BANKCON_Trcd3 (0x01 << 2) | ||
153 | #define S3C2410_BANKCON_Trcd4 (0x02 << 2) | ||
154 | |||
155 | /* control column address select */ | ||
156 | #define S3C2410_BANKCON_SCANb8 (0x00 << 0) | ||
157 | #define S3C2410_BANKCON_SCANb9 (0x01 << 0) | ||
158 | #define S3C2410_BANKCON_SCANb10 (0x02 << 0) | ||
159 | |||
160 | #define S3C2410_REFRESH S3C2410_MEMREG(0x0024) | ||
161 | #define S3C2410_BANKSIZE S3C2410_MEMREG(0x0028) | ||
162 | #define S3C2410_MRSRB6 S3C2410_MEMREG(0x002C) | ||
163 | #define S3C2410_MRSRB7 S3C2410_MEMREG(0x0030) | ||
164 | |||
165 | /* refresh control */ | ||
166 | |||
167 | #define S3C2410_REFRESH_REFEN (1<<23) | ||
168 | #define S3C2410_REFRESH_SELF (1<<22) | ||
169 | #define S3C2410_REFRESH_REFCOUNTER ((1<<11)-1) | ||
170 | |||
171 | #define S3C2410_REFRESH_TRP_MASK (3<<20) | ||
172 | #define S3C2410_REFRESH_TRP_2clk (0<<20) | ||
173 | #define S3C2410_REFRESH_TRP_3clk (1<<20) | ||
174 | #define S3C2410_REFRESH_TRP_4clk (2<<20) | ||
175 | |||
176 | #define S3C2410_REFRESH_TSRC_MASK (3<<18) | ||
177 | #define S3C2410_REFRESH_TSRC_4clk (0<<18) | ||
178 | #define S3C2410_REFRESH_TSRC_5clk (1<<18) | ||
179 | #define S3C2410_REFRESH_TSRC_6clk (2<<18) | ||
180 | #define S3C2410_REFRESH_TSRC_7clk (3<<18) | ||
181 | |||
182 | |||
183 | /* mode select register(s) */ | ||
184 | |||
185 | #define S3C2410_MRSRB_CL1 (0x00 << 4) | ||
186 | #define S3C2410_MRSRB_CL2 (0x02 << 4) | ||
187 | #define S3C2410_MRSRB_CL3 (0x03 << 4) | ||
188 | |||
189 | /* bank size register */ | ||
190 | #define S3C2410_BANKSIZE_128M (0x2 << 0) | ||
191 | #define S3C2410_BANKSIZE_64M (0x1 << 0) | ||
192 | #define S3C2410_BANKSIZE_32M (0x0 << 0) | ||
193 | #define S3C2410_BANKSIZE_16M (0x7 << 0) | ||
194 | #define S3C2410_BANKSIZE_8M (0x6 << 0) | ||
195 | #define S3C2410_BANKSIZE_4M (0x5 << 0) | ||
196 | #define S3C2410_BANKSIZE_2M (0x4 << 0) | ||
197 | #define S3C2410_BANKSIZE_MASK (0x7 << 0) | ||
198 | #define S3C2410_BANKSIZE_SCLK_EN (1<<4) | ||
199 | #define S3C2410_BANKSIZE_SCKE_EN (1<<5) | ||
200 | #define S3C2410_BANKSIZE_BURST (1<<7) | ||
201 | |||
202 | #endif /* __ASM_ARM_MEMREGS_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-power.h b/arch/arm/mach-s3c24xx/include/mach/regs-power.h deleted file mode 100644 index 4932b87bdf3d..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/regs-power.h +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/regs-power.h | ||
2 | * | ||
3 | * Copyright (c) 2003-2006 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C24XX power control register definitions | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARM_REGS_PWR | ||
14 | #define __ASM_ARM_REGS_PWR __FILE__ | ||
15 | |||
16 | #define S3C24XX_PWRREG(x) ((x) + S3C24XX_VA_CLKPWR) | ||
17 | |||
18 | #define S3C2412_PWRMODECON S3C24XX_PWRREG(0x20) | ||
19 | #define S3C2412_PWRCFG S3C24XX_PWRREG(0x24) | ||
20 | |||
21 | #define S3C2412_INFORM0 S3C24XX_PWRREG(0x70) | ||
22 | #define S3C2412_INFORM1 S3C24XX_PWRREG(0x74) | ||
23 | #define S3C2412_INFORM2 S3C24XX_PWRREG(0x78) | ||
24 | #define S3C2412_INFORM3 S3C24XX_PWRREG(0x7C) | ||
25 | |||
26 | #define S3C2412_PWRCFG_BATF_IRQ (1<<0) | ||
27 | #define S3C2412_PWRCFG_BATF_IGNORE (2<<0) | ||
28 | #define S3C2412_PWRCFG_BATF_SLEEP (3<<0) | ||
29 | #define S3C2412_PWRCFG_BATF_MASK (3<<0) | ||
30 | |||
31 | #define S3C2412_PWRCFG_STANDBYWFI_IGNORE (0<<6) | ||
32 | #define S3C2412_PWRCFG_STANDBYWFI_IDLE (1<<6) | ||
33 | #define S3C2412_PWRCFG_STANDBYWFI_STOP (2<<6) | ||
34 | #define S3C2412_PWRCFG_STANDBYWFI_SLEEP (3<<6) | ||
35 | #define S3C2412_PWRCFG_STANDBYWFI_MASK (3<<6) | ||
36 | |||
37 | #define S3C2412_PWRCFG_RTC_MASKIRQ (1<<8) | ||
38 | #define S3C2412_PWRCFG_NAND_NORST (1<<9) | ||
39 | |||
40 | #endif /* __ASM_ARM_REGS_PWR */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-s3c2412-mem.h b/arch/arm/mach-s3c24xx/include/mach/regs-s3c2412-mem.h deleted file mode 100644 index fb6352515090..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/regs-s3c2412-mem.h +++ /dev/null | |||
@@ -1,48 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/regs-s3c2412-mem.h | ||
2 | * | ||
3 | * Copyright (c) 2008 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * http://armlinux.simtec.co.uk/ | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * S3C2412 memory register definitions | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARM_REGS_S3C2412_MEM | ||
15 | #define __ASM_ARM_REGS_S3C2412_MEM | ||
16 | |||
17 | #define S3C2412_MEMREG(x) (S3C24XX_VA_MEMCTRL + (x)) | ||
18 | #define S3C2412_EBIREG(x) (S3C2412_VA_EBI + (x)) | ||
19 | |||
20 | #define S3C2412_SSMCREG(x) (S3C2412_VA_SSMC + (x)) | ||
21 | #define S3C2412_SSMC(x, o) (S3C2412_SSMCREG((x * 0x20) + (o))) | ||
22 | |||
23 | #define S3C2412_BANKCFG S3C2412_MEMREG(0x00) | ||
24 | #define S3C2412_BANKCON1 S3C2412_MEMREG(0x04) | ||
25 | #define S3C2412_BANKCON2 S3C2412_MEMREG(0x08) | ||
26 | #define S3C2412_BANKCON3 S3C2412_MEMREG(0x0C) | ||
27 | |||
28 | #define S3C2412_REFRESH S3C2412_MEMREG(0x10) | ||
29 | #define S3C2412_TIMEOUT S3C2412_MEMREG(0x14) | ||
30 | |||
31 | /* EBI control registers */ | ||
32 | |||
33 | #define S3C2412_EBI_PR S3C2412_EBIREG(0x00) | ||
34 | #define S3C2412_EBI_BANKCFG S3C2412_EBIREG(0x04) | ||
35 | |||
36 | /* SSMC control registers */ | ||
37 | |||
38 | #define S3C2412_SSMC_BANK(x) S3C2412_SSMC(x, 0x00) | ||
39 | #define S3C2412_SMIDCYR(x) S3C2412_SSMC(x, 0x00) | ||
40 | #define S3C2412_SMBWSTRD(x) S3C2412_SSMC(x, 0x04) | ||
41 | #define S3C2412_SMBWSTWRR(x) S3C2412_SSMC(x, 0x08) | ||
42 | #define S3C2412_SMBWSTOENR(x) S3C2412_SSMC(x, 0x0C) | ||
43 | #define S3C2412_SMBWSTWENR(x) S3C2412_SSMC(x, 0x10) | ||
44 | #define S3C2412_SMBCR(x) S3C2412_SSMC(x, 0x14) | ||
45 | #define S3C2412_SMBSR(x) S3C2412_SSMC(x, 0x18) | ||
46 | #define S3C2412_SMBWSTBRDR(x) S3C2412_SSMC(x, 0x1C) | ||
47 | |||
48 | #endif /* __ASM_ARM_REGS_S3C2412_MEM */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-s3c2412.h b/arch/arm/mach-s3c24xx/include/mach/regs-s3c2412.h deleted file mode 100644 index aa69dc79bc38..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/regs-s3c2412.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/regs-s3c2412.h | ||
2 | * | ||
3 | * Copyright 2007 Simtec Electronics | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * S3C2412 specific register definitions | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARCH_REGS_S3C2412_H | ||
15 | #define __ASM_ARCH_REGS_S3C2412_H "s3c2412" | ||
16 | |||
17 | #define S3C2412_SWRST (S3C24XX_VA_CLKPWR + 0x30) | ||
18 | #define S3C2412_SWRST_RESET (0x533C2412) | ||
19 | |||
20 | /* see regs-power.h for the other registers in the power block. */ | ||
21 | |||
22 | #endif /* __ASM_ARCH_REGS_S3C2412_H */ | ||
23 | |||
diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-s3c2416-mem.h b/arch/arm/mach-s3c24xx/include/mach/regs-s3c2416-mem.h deleted file mode 100644 index 2f31b74974af..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/regs-s3c2416-mem.h +++ /dev/null | |||
@@ -1,30 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/regs-s3c2416-mem.h | ||
2 | * | ||
3 | * Copyright (c) 2009 Yauhen Kharuzhy <jekhor@gmail.com>, | ||
4 | * as part of OpenInkpot project | ||
5 | * Copyright (c) 2009 Promwad Innovation Company | ||
6 | * Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * S3C2416 memory register definitions | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARM_REGS_S3C2416_MEM | ||
16 | #define __ASM_ARM_REGS_S3C2416_MEM | ||
17 | |||
18 | #ifndef S3C2416_MEMREG | ||
19 | #define S3C2416_MEMREG(x) (S3C24XX_VA_MEMCTRL + (x)) | ||
20 | #endif | ||
21 | |||
22 | #define S3C2416_BANKCFG S3C2416_MEMREG(0x00) | ||
23 | #define S3C2416_BANKCON1 S3C2416_MEMREG(0x04) | ||
24 | #define S3C2416_BANKCON2 S3C2416_MEMREG(0x08) | ||
25 | #define S3C2416_BANKCON3 S3C2416_MEMREG(0x0C) | ||
26 | |||
27 | #define S3C2416_REFRESH S3C2416_MEMREG(0x10) | ||
28 | #define S3C2416_TIMEOUT S3C2416_MEMREG(0x14) | ||
29 | |||
30 | #endif /* __ASM_ARM_REGS_S3C2416_MEM */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-s3c2416.h b/arch/arm/mach-s3c24xx/include/mach/regs-s3c2416.h deleted file mode 100644 index e443167efb87..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/regs-s3c2416.h +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/regs-s3c2416.h | ||
2 | * | ||
3 | * Copyright (c) 2009 Yauhen Kharuzhy <jekhor@gmail.com>, | ||
4 | * as part of OpenInkpot project | ||
5 | * Copyright (c) 2009 Promwad Innovation Company | ||
6 | * Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * S3C2416 specific register definitions | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARCH_REGS_S3C2416_H | ||
16 | #define __ASM_ARCH_REGS_S3C2416_H "s3c2416" | ||
17 | |||
18 | #define S3C2416_SWRST (S3C24XX_VA_CLKPWR + 0x44) | ||
19 | #define S3C2416_SWRST_RESET (0x533C2416) | ||
20 | |||
21 | /* see regs-power.h for the other registers in the power block. */ | ||
22 | |||
23 | #endif /* __ASM_ARCH_REGS_S3C2416_H */ | ||
24 | |||
diff --git a/arch/arm/mach-s3c24xx/include/mach/vr1000-cpld.h b/arch/arm/mach-s3c24xx/include/mach/vr1000-cpld.h deleted file mode 100644 index e4119913d7c5..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/vr1000-cpld.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/vr1000-cpld.h | ||
2 | * | ||
3 | * Copyright (c) 2003 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * VR1000 - CPLD control constants | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_VR1000CPLD_H | ||
14 | #define __ASM_ARCH_VR1000CPLD_H | ||
15 | |||
16 | #define VR1000_CPLD_CTRL2_RAMWEN (0x04) /* SRAM Write Enable */ | ||
17 | |||
18 | #endif /* __ASM_ARCH_VR1000CPLD_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/vr1000-irq.h b/arch/arm/mach-s3c24xx/include/mach/vr1000-irq.h deleted file mode 100644 index 47add133b8ee..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/vr1000-irq.h +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/vr1000-irq.h | ||
2 | * | ||
3 | * Copyright (c) 2003-2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Machine VR1000 - IRQ Number definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_VR1000IRQ_H | ||
14 | #define __ASM_ARCH_VR1000IRQ_H | ||
15 | |||
16 | /* irq numbers to onboard peripherals */ | ||
17 | |||
18 | #define IRQ_USBOC IRQ_EINT19 | ||
19 | #define IRQ_IDE0 IRQ_EINT16 | ||
20 | #define IRQ_IDE1 IRQ_EINT17 | ||
21 | #define IRQ_VR1000_SERIAL IRQ_EINT12 | ||
22 | #define IRQ_VR1000_DM9000A IRQ_EINT10 | ||
23 | #define IRQ_VR1000_DM9000N IRQ_EINT9 | ||
24 | #define IRQ_SMALERT IRQ_EINT8 | ||
25 | |||
26 | #endif /* __ASM_ARCH_VR1000IRQ_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/vr1000-map.h b/arch/arm/mach-s3c24xx/include/mach/vr1000-map.h deleted file mode 100644 index 28376e56dd3b..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/vr1000-map.h +++ /dev/null | |||
@@ -1,110 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/vr1000-map.h | ||
2 | * | ||
3 | * Copyright (c) 2003-2005 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Machine VR1000 - Memory map definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | /* needs arch/map.h including with this */ | ||
14 | |||
15 | /* ok, we've used up to 0x13000000, now we need to find space for the | ||
16 | * peripherals that live in the nGCS[x] areas, which are quite numerous | ||
17 | * in their space. We also have the board's CPLD to find register space | ||
18 | * for. | ||
19 | */ | ||
20 | |||
21 | #ifndef __ASM_ARCH_VR1000MAP_H | ||
22 | #define __ASM_ARCH_VR1000MAP_H | ||
23 | |||
24 | #include <mach/bast-map.h> | ||
25 | |||
26 | #define VR1000_IOADDR(x) BAST_IOADDR(x) | ||
27 | |||
28 | /* we put the CPLD registers next, to get them out of the way */ | ||
29 | |||
30 | #define VR1000_VA_CTRL1 VR1000_IOADDR(0x00000000) /* 0x01300000 */ | ||
31 | #define VR1000_PA_CTRL1 (S3C2410_CS5 | 0x7800000) | ||
32 | |||
33 | #define VR1000_VA_CTRL2 VR1000_IOADDR(0x00100000) /* 0x01400000 */ | ||
34 | #define VR1000_PA_CTRL2 (S3C2410_CS1 | 0x6000000) | ||
35 | |||
36 | #define VR1000_VA_CTRL3 VR1000_IOADDR(0x00200000) /* 0x01500000 */ | ||
37 | #define VR1000_PA_CTRL3 (S3C2410_CS1 | 0x6800000) | ||
38 | |||
39 | #define VR1000_VA_CTRL4 VR1000_IOADDR(0x00300000) /* 0x01600000 */ | ||
40 | #define VR1000_PA_CTRL4 (S3C2410_CS1 | 0x7000000) | ||
41 | |||
42 | /* next, we have the PC104 ISA interrupt registers */ | ||
43 | |||
44 | #define VR1000_PA_PC104_IRQREQ (S3C2410_CS5 | 0x6000000) /* 0x01700000 */ | ||
45 | #define VR1000_VA_PC104_IRQREQ VR1000_IOADDR(0x00400000) | ||
46 | |||
47 | #define VR1000_PA_PC104_IRQRAW (S3C2410_CS5 | 0x6800000) /* 0x01800000 */ | ||
48 | #define VR1000_VA_PC104_IRQRAW VR1000_IOADDR(0x00500000) | ||
49 | |||
50 | #define VR1000_PA_PC104_IRQMASK (S3C2410_CS5 | 0x7000000) /* 0x01900000 */ | ||
51 | #define VR1000_VA_PC104_IRQMASK VR1000_IOADDR(0x00600000) | ||
52 | |||
53 | /* 0xE0000000 contains the IO space that is split by speed and | ||
54 | * whether the access is for 8 or 16bit IO... this ensures that | ||
55 | * the correct access is made | ||
56 | * | ||
57 | * 0x10000000 of space, partitioned as so: | ||
58 | * | ||
59 | * 0x00000000 to 0x04000000 8bit, slow | ||
60 | * 0x04000000 to 0x08000000 16bit, slow | ||
61 | * 0x08000000 to 0x0C000000 16bit, net | ||
62 | * 0x0C000000 to 0x10000000 16bit, fast | ||
63 | * | ||
64 | * each of these spaces has the following in: | ||
65 | * | ||
66 | * 0x02000000 to 0x02100000 1MB IDE primary channel | ||
67 | * 0x02100000 to 0x02200000 1MB IDE primary channel aux | ||
68 | * 0x02200000 to 0x02400000 1MB IDE secondary channel | ||
69 | * 0x02300000 to 0x02400000 1MB IDE secondary channel aux | ||
70 | * 0x02500000 to 0x02600000 1MB Davicom DM9000 ethernet controllers | ||
71 | * 0x02600000 to 0x02700000 1MB | ||
72 | * | ||
73 | * the phyiscal layout of the zones are: | ||
74 | * nGCS2 - 8bit, slow | ||
75 | * nGCS3 - 16bit, slow | ||
76 | * nGCS4 - 16bit, net | ||
77 | * nGCS5 - 16bit, fast | ||
78 | */ | ||
79 | |||
80 | #define VR1000_VA_MULTISPACE (0xE0000000) | ||
81 | |||
82 | #define VR1000_VA_ISAIO (VR1000_VA_MULTISPACE + 0x00000000) | ||
83 | #define VR1000_VA_ISAMEM (VR1000_VA_MULTISPACE + 0x01000000) | ||
84 | #define VR1000_VA_IDEPRI (VR1000_VA_MULTISPACE + 0x02000000) | ||
85 | #define VR1000_VA_IDEPRIAUX (VR1000_VA_MULTISPACE + 0x02100000) | ||
86 | #define VR1000_VA_IDESEC (VR1000_VA_MULTISPACE + 0x02200000) | ||
87 | #define VR1000_VA_IDESECAUX (VR1000_VA_MULTISPACE + 0x02300000) | ||
88 | #define VR1000_VA_ASIXNET (VR1000_VA_MULTISPACE + 0x02400000) | ||
89 | #define VR1000_VA_DM9000 (VR1000_VA_MULTISPACE + 0x02500000) | ||
90 | #define VR1000_VA_SUPERIO (VR1000_VA_MULTISPACE + 0x02600000) | ||
91 | |||
92 | /* physical offset addresses for the peripherals */ | ||
93 | |||
94 | #define VR1000_PA_IDEPRI (0x02000000) | ||
95 | #define VR1000_PA_IDEPRIAUX (0x02800000) | ||
96 | #define VR1000_PA_IDESEC (0x03000000) | ||
97 | #define VR1000_PA_IDESECAUX (0x03800000) | ||
98 | #define VR1000_PA_DM9000 (0x05000000) | ||
99 | |||
100 | #define VR1000_PA_SERIAL (0x11800000) | ||
101 | #define VR1000_VA_SERIAL (VR1000_IOADDR(0x00700000)) | ||
102 | |||
103 | /* VR1000 ram is in CS1, with A26..A24 = 2_101 */ | ||
104 | #define VR1000_PA_SRAM (S3C2410_CS1 | 0x05000000) | ||
105 | |||
106 | /* some configurations for the peripherals */ | ||
107 | |||
108 | #define VR1000_DM9000_CS VR1000_VAM_CS4 | ||
109 | |||
110 | #endif /* __ASM_ARCH_VR1000MAP_H */ | ||
diff --git a/arch/arm/plat-s3c24xx/s3c2410-iotiming.c b/arch/arm/mach-s3c24xx/iotiming-s3c2410.c index b1908e56da1b..4cd13ab6496b 100644 --- a/arch/arm/plat-s3c24xx/s3c2410-iotiming.c +++ b/arch/arm/mach-s3c24xx/iotiming-s3c2410.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/s3c2410-iotiming.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006-2009 Simtec Electronics | 2 | * Copyright (c) 2006-2009 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -20,11 +19,12 @@ | |||
20 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
21 | 20 | ||
22 | #include <mach/map.h> | 21 | #include <mach/map.h> |
23 | #include <mach/regs-mem.h> | ||
24 | #include <mach/regs-clock.h> | 22 | #include <mach/regs-clock.h> |
25 | 23 | ||
26 | #include <plat/cpu-freq-core.h> | 24 | #include <plat/cpu-freq-core.h> |
27 | 25 | ||
26 | #include "regs-mem.h" | ||
27 | |||
28 | #define print_ns(x) ((x) / 10), ((x) % 10) | 28 | #define print_ns(x) ((x) / 10), ((x) % 10) |
29 | 29 | ||
30 | /** | 30 | /** |
diff --git a/arch/arm/plat-s3c24xx/s3c2412-iotiming.c b/arch/arm/mach-s3c24xx/iotiming-s3c2412.c index 48eee39ab369..663436d9db01 100644 --- a/arch/arm/plat-s3c24xx/s3c2412-iotiming.c +++ b/arch/arm/mach-s3c24xx/iotiming-s3c2412.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/s3c2412-iotiming.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006-2008 Simtec Electronics | 2 | * Copyright (c) 2006-2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -28,12 +27,12 @@ | |||
28 | #include <asm/mach/arch.h> | 27 | #include <asm/mach/arch.h> |
29 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
30 | 29 | ||
31 | #include <mach/regs-s3c2412-mem.h> | ||
32 | |||
33 | #include <plat/cpu.h> | 30 | #include <plat/cpu.h> |
34 | #include <plat/cpu-freq-core.h> | 31 | #include <plat/cpu-freq-core.h> |
35 | #include <plat/clock.h> | 32 | #include <plat/clock.h> |
36 | 33 | ||
34 | #include "s3c2412.h" | ||
35 | |||
37 | #define print_ns(x) ((x) / 10), ((x) % 10) | 36 | #define print_ns(x) ((x) / 10), ((x) % 10) |
38 | 37 | ||
39 | /** | 38 | /** |
diff --git a/arch/arm/mach-s3c24xx/irq-pm.c b/arch/arm/mach-s3c24xx/irq-pm.c index 0efb2e2848c8..e1199599873e 100644 --- a/arch/arm/mach-s3c24xx/irq-pm.c +++ b/arch/arm/mach-s3c24xx/irq-pm.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
17 | #include <linux/irq.h> | 17 | #include <linux/irq.h> |
18 | #include <linux/syscore_ops.h> | ||
18 | 19 | ||
19 | #include <plat/cpu.h> | 20 | #include <plat/cpu.h> |
20 | #include <plat/pm.h> | 21 | #include <plat/pm.h> |
@@ -29,18 +30,18 @@ | |||
29 | * set bit to 1 in allow bitfield to enable the wakeup settings on it | 30 | * set bit to 1 in allow bitfield to enable the wakeup settings on it |
30 | */ | 31 | */ |
31 | 32 | ||
32 | unsigned long s3c_irqwake_intallow = 1L << (IRQ_RTC - IRQ_EINT0) | 0xfL; | 33 | unsigned long s3c_irqwake_intallow = 1L << 30 | 0xfL; |
33 | unsigned long s3c_irqwake_eintallow = 0x0000fff0L; | 34 | unsigned long s3c_irqwake_eintallow = 0x0000fff0L; |
34 | 35 | ||
35 | int s3c_irq_wake(struct irq_data *data, unsigned int state) | 36 | int s3c_irq_wake(struct irq_data *data, unsigned int state) |
36 | { | 37 | { |
37 | unsigned long irqbit = 1 << (data->irq - IRQ_EINT0); | 38 | unsigned long irqbit = 1 << data->hwirq; |
38 | 39 | ||
39 | if (!(s3c_irqwake_intallow & irqbit)) | 40 | if (!(s3c_irqwake_intallow & irqbit)) |
40 | return -ENOENT; | 41 | return -ENOENT; |
41 | 42 | ||
42 | printk(KERN_INFO "wake %s for irq %d\n", | 43 | pr_info("wake %s for hwirq %lu\n", |
43 | state ? "enabled" : "disabled", data->irq); | 44 | state ? "enabled" : "disabled", data->hwirq); |
44 | 45 | ||
45 | if (!state) | 46 | if (!state) |
46 | s3c_irqwake_intmask |= irqbit; | 47 | s3c_irqwake_intmask |= irqbit; |
@@ -64,7 +65,7 @@ static unsigned long save_extint[3]; | |||
64 | static unsigned long save_eintflt[4]; | 65 | static unsigned long save_eintflt[4]; |
65 | static unsigned long save_eintmask; | 66 | static unsigned long save_eintmask; |
66 | 67 | ||
67 | int s3c24xx_irq_suspend(void) | 68 | static int s3c24xx_irq_suspend(void) |
68 | { | 69 | { |
69 | unsigned int i; | 70 | unsigned int i; |
70 | 71 | ||
@@ -80,7 +81,7 @@ int s3c24xx_irq_suspend(void) | |||
80 | return 0; | 81 | return 0; |
81 | } | 82 | } |
82 | 83 | ||
83 | void s3c24xx_irq_resume(void) | 84 | static void s3c24xx_irq_resume(void) |
84 | { | 85 | { |
85 | unsigned int i; | 86 | unsigned int i; |
86 | 87 | ||
@@ -93,3 +94,31 @@ void s3c24xx_irq_resume(void) | |||
93 | s3c_pm_do_restore(irq_save, ARRAY_SIZE(irq_save)); | 94 | s3c_pm_do_restore(irq_save, ARRAY_SIZE(irq_save)); |
94 | __raw_writel(save_eintmask, S3C24XX_EINTMASK); | 95 | __raw_writel(save_eintmask, S3C24XX_EINTMASK); |
95 | } | 96 | } |
97 | |||
98 | struct syscore_ops s3c24xx_irq_syscore_ops = { | ||
99 | .suspend = s3c24xx_irq_suspend, | ||
100 | .resume = s3c24xx_irq_resume, | ||
101 | }; | ||
102 | |||
103 | #ifdef CONFIG_CPU_S3C2416 | ||
104 | static struct sleep_save s3c2416_irq_save[] = { | ||
105 | SAVE_ITEM(S3C2416_INTMSK2), | ||
106 | }; | ||
107 | |||
108 | static int s3c2416_irq_suspend(void) | ||
109 | { | ||
110 | s3c_pm_do_save(s3c2416_irq_save, ARRAY_SIZE(s3c2416_irq_save)); | ||
111 | |||
112 | return 0; | ||
113 | } | ||
114 | |||
115 | static void s3c2416_irq_resume(void) | ||
116 | { | ||
117 | s3c_pm_do_restore(s3c2416_irq_save, ARRAY_SIZE(s3c2416_irq_save)); | ||
118 | } | ||
119 | |||
120 | struct syscore_ops s3c2416_irq_syscore_ops = { | ||
121 | .suspend = s3c2416_irq_suspend, | ||
122 | .resume = s3c2416_irq_resume, | ||
123 | }; | ||
124 | #endif | ||
diff --git a/arch/arm/mach-s3c24xx/irq-s3c2412.c b/arch/arm/mach-s3c24xx/irq-s3c2412.c index e65619ddbccc..67d763178d3f 100644 --- a/arch/arm/mach-s3c24xx/irq-s3c2412.c +++ b/arch/arm/mach-s3c24xx/irq-s3c2412.c | |||
@@ -33,12 +33,13 @@ | |||
33 | 33 | ||
34 | #include <mach/regs-irq.h> | 34 | #include <mach/regs-irq.h> |
35 | #include <mach/regs-gpio.h> | 35 | #include <mach/regs-gpio.h> |
36 | #include <mach/regs-power.h> | ||
37 | 36 | ||
38 | #include <plat/cpu.h> | 37 | #include <plat/cpu.h> |
39 | #include <plat/irq.h> | 38 | #include <plat/irq.h> |
40 | #include <plat/pm.h> | 39 | #include <plat/pm.h> |
41 | 40 | ||
41 | #include "s3c2412-power.h" | ||
42 | |||
42 | #define INTMSK(start, end) ((1 << ((end) + 1 - (start))) - 1) | 43 | #define INTMSK(start, end) ((1 << ((end) + 1 - (start))) - 1) |
43 | #define INTMSK_SUB(start, end) (INTMSK(start, end) << ((start - S3C2410_IRQSUB(0)))) | 44 | #define INTMSK_SUB(start, end) (INTMSK(start, end) << ((start - S3C2410_IRQSUB(0)))) |
44 | 45 | ||
diff --git a/arch/arm/mach-s3c24xx/irq-s3c2416.c b/arch/arm/mach-s3c24xx/irq-s3c2416.c deleted file mode 100644 index ff141b0af26b..000000000000 --- a/arch/arm/mach-s3c24xx/irq-s3c2416.c +++ /dev/null | |||
@@ -1,348 +0,0 @@ | |||
1 | /* linux/arch/arm/mach-s3c2416/irq.c | ||
2 | * | ||
3 | * Copyright (c) 2009 Yauhen Kharuzhy <jekhor@gmail.com>, | ||
4 | * as part of OpenInkpot project | ||
5 | * Copyright (c) 2009 Promwad Innovation Company | ||
6 | * Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | #include <linux/init.h> | ||
25 | #include <linux/module.h> | ||
26 | #include <linux/interrupt.h> | ||
27 | #include <linux/ioport.h> | ||
28 | #include <linux/device.h> | ||
29 | #include <linux/io.h> | ||
30 | #include <linux/syscore_ops.h> | ||
31 | |||
32 | #include <mach/hardware.h> | ||
33 | #include <asm/irq.h> | ||
34 | |||
35 | #include <asm/mach/irq.h> | ||
36 | |||
37 | #include <mach/regs-irq.h> | ||
38 | #include <mach/regs-gpio.h> | ||
39 | |||
40 | #include <plat/cpu.h> | ||
41 | #include <plat/pm.h> | ||
42 | #include <plat/irq.h> | ||
43 | |||
44 | #define INTMSK(start, end) ((1 << ((end) + 1 - (start))) - 1) | ||
45 | |||
46 | static inline void s3c2416_irq_demux(unsigned int irq, unsigned int len) | ||
47 | { | ||
48 | unsigned int subsrc, submsk; | ||
49 | unsigned int end; | ||
50 | |||
51 | /* read the current pending interrupts, and the mask | ||
52 | * for what it is available */ | ||
53 | |||
54 | subsrc = __raw_readl(S3C2410_SUBSRCPND); | ||
55 | submsk = __raw_readl(S3C2410_INTSUBMSK); | ||
56 | |||
57 | subsrc &= ~submsk; | ||
58 | subsrc >>= (irq - S3C2410_IRQSUB(0)); | ||
59 | subsrc &= (1 << len)-1; | ||
60 | |||
61 | end = len + irq; | ||
62 | |||
63 | for (; irq < end && subsrc; irq++) { | ||
64 | if (subsrc & 1) | ||
65 | generic_handle_irq(irq); | ||
66 | |||
67 | subsrc >>= 1; | ||
68 | } | ||
69 | } | ||
70 | |||
71 | /* WDT/AC97 sub interrupts */ | ||
72 | |||
73 | static void s3c2416_irq_demux_wdtac97(unsigned int irq, struct irq_desc *desc) | ||
74 | { | ||
75 | s3c2416_irq_demux(IRQ_S3C2443_WDT, 4); | ||
76 | } | ||
77 | |||
78 | #define INTMSK_WDTAC97 (1UL << (IRQ_WDT - IRQ_EINT0)) | ||
79 | #define SUBMSK_WDTAC97 INTMSK(IRQ_S3C2443_WDT, IRQ_S3C2443_AC97) | ||
80 | |||
81 | static void s3c2416_irq_wdtac97_mask(struct irq_data *data) | ||
82 | { | ||
83 | s3c_irqsub_mask(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); | ||
84 | } | ||
85 | |||
86 | static void s3c2416_irq_wdtac97_unmask(struct irq_data *data) | ||
87 | { | ||
88 | s3c_irqsub_unmask(data->irq, INTMSK_WDTAC97); | ||
89 | } | ||
90 | |||
91 | static void s3c2416_irq_wdtac97_ack(struct irq_data *data) | ||
92 | { | ||
93 | s3c_irqsub_maskack(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); | ||
94 | } | ||
95 | |||
96 | static struct irq_chip s3c2416_irq_wdtac97 = { | ||
97 | .irq_mask = s3c2416_irq_wdtac97_mask, | ||
98 | .irq_unmask = s3c2416_irq_wdtac97_unmask, | ||
99 | .irq_ack = s3c2416_irq_wdtac97_ack, | ||
100 | }; | ||
101 | |||
102 | /* LCD sub interrupts */ | ||
103 | |||
104 | static void s3c2416_irq_demux_lcd(unsigned int irq, struct irq_desc *desc) | ||
105 | { | ||
106 | s3c2416_irq_demux(IRQ_S3C2443_LCD1, 4); | ||
107 | } | ||
108 | |||
109 | #define INTMSK_LCD (1UL << (IRQ_LCD - IRQ_EINT0)) | ||
110 | #define SUBMSK_LCD INTMSK(IRQ_S3C2443_LCD1, IRQ_S3C2443_LCD4) | ||
111 | |||
112 | static void s3c2416_irq_lcd_mask(struct irq_data *data) | ||
113 | { | ||
114 | s3c_irqsub_mask(data->irq, INTMSK_LCD, SUBMSK_LCD); | ||
115 | } | ||
116 | |||
117 | static void s3c2416_irq_lcd_unmask(struct irq_data *data) | ||
118 | { | ||
119 | s3c_irqsub_unmask(data->irq, INTMSK_LCD); | ||
120 | } | ||
121 | |||
122 | static void s3c2416_irq_lcd_ack(struct irq_data *data) | ||
123 | { | ||
124 | s3c_irqsub_maskack(data->irq, INTMSK_LCD, SUBMSK_LCD); | ||
125 | } | ||
126 | |||
127 | static struct irq_chip s3c2416_irq_lcd = { | ||
128 | .irq_mask = s3c2416_irq_lcd_mask, | ||
129 | .irq_unmask = s3c2416_irq_lcd_unmask, | ||
130 | .irq_ack = s3c2416_irq_lcd_ack, | ||
131 | }; | ||
132 | |||
133 | /* DMA sub interrupts */ | ||
134 | |||
135 | static void s3c2416_irq_demux_dma(unsigned int irq, struct irq_desc *desc) | ||
136 | { | ||
137 | s3c2416_irq_demux(IRQ_S3C2443_DMA0, 6); | ||
138 | } | ||
139 | |||
140 | #define INTMSK_DMA (1UL << (IRQ_S3C2443_DMA - IRQ_EINT0)) | ||
141 | #define SUBMSK_DMA INTMSK(IRQ_S3C2443_DMA0, IRQ_S3C2443_DMA5) | ||
142 | |||
143 | |||
144 | static void s3c2416_irq_dma_mask(struct irq_data *data) | ||
145 | { | ||
146 | s3c_irqsub_mask(data->irq, INTMSK_DMA, SUBMSK_DMA); | ||
147 | } | ||
148 | |||
149 | static void s3c2416_irq_dma_unmask(struct irq_data *data) | ||
150 | { | ||
151 | s3c_irqsub_unmask(data->irq, INTMSK_DMA); | ||
152 | } | ||
153 | |||
154 | static void s3c2416_irq_dma_ack(struct irq_data *data) | ||
155 | { | ||
156 | s3c_irqsub_maskack(data->irq, INTMSK_DMA, SUBMSK_DMA); | ||
157 | } | ||
158 | |||
159 | static struct irq_chip s3c2416_irq_dma = { | ||
160 | .irq_mask = s3c2416_irq_dma_mask, | ||
161 | .irq_unmask = s3c2416_irq_dma_unmask, | ||
162 | .irq_ack = s3c2416_irq_dma_ack, | ||
163 | }; | ||
164 | |||
165 | /* UART3 sub interrupts */ | ||
166 | |||
167 | static void s3c2416_irq_demux_uart3(unsigned int irq, struct irq_desc *desc) | ||
168 | { | ||
169 | s3c2416_irq_demux(IRQ_S3C2443_RX3, 3); | ||
170 | } | ||
171 | |||
172 | #define INTMSK_UART3 (1UL << (IRQ_S3C2443_UART3 - IRQ_EINT0)) | ||
173 | #define SUBMSK_UART3 (0x7 << (IRQ_S3C2443_RX3 - S3C2410_IRQSUB(0))) | ||
174 | |||
175 | static void s3c2416_irq_uart3_mask(struct irq_data *data) | ||
176 | { | ||
177 | s3c_irqsub_mask(data->irq, INTMSK_UART3, SUBMSK_UART3); | ||
178 | } | ||
179 | |||
180 | static void s3c2416_irq_uart3_unmask(struct irq_data *data) | ||
181 | { | ||
182 | s3c_irqsub_unmask(data->irq, INTMSK_UART3); | ||
183 | } | ||
184 | |||
185 | static void s3c2416_irq_uart3_ack(struct irq_data *data) | ||
186 | { | ||
187 | s3c_irqsub_maskack(data->irq, INTMSK_UART3, SUBMSK_UART3); | ||
188 | } | ||
189 | |||
190 | static struct irq_chip s3c2416_irq_uart3 = { | ||
191 | .irq_mask = s3c2416_irq_uart3_mask, | ||
192 | .irq_unmask = s3c2416_irq_uart3_unmask, | ||
193 | .irq_ack = s3c2416_irq_uart3_ack, | ||
194 | }; | ||
195 | |||
196 | /* second interrupt register */ | ||
197 | |||
198 | static inline void s3c2416_irq_ack_second(struct irq_data *data) | ||
199 | { | ||
200 | unsigned long bitval = 1UL << (data->irq - IRQ_S3C2416_2D); | ||
201 | |||
202 | __raw_writel(bitval, S3C2416_SRCPND2); | ||
203 | __raw_writel(bitval, S3C2416_INTPND2); | ||
204 | } | ||
205 | |||
206 | static void s3c2416_irq_mask_second(struct irq_data *data) | ||
207 | { | ||
208 | unsigned long bitval = 1UL << (data->irq - IRQ_S3C2416_2D); | ||
209 | unsigned long mask; | ||
210 | |||
211 | mask = __raw_readl(S3C2416_INTMSK2); | ||
212 | mask |= bitval; | ||
213 | __raw_writel(mask, S3C2416_INTMSK2); | ||
214 | } | ||
215 | |||
216 | static void s3c2416_irq_unmask_second(struct irq_data *data) | ||
217 | { | ||
218 | unsigned long bitval = 1UL << (data->irq - IRQ_S3C2416_2D); | ||
219 | unsigned long mask; | ||
220 | |||
221 | mask = __raw_readl(S3C2416_INTMSK2); | ||
222 | mask &= ~bitval; | ||
223 | __raw_writel(mask, S3C2416_INTMSK2); | ||
224 | } | ||
225 | |||
226 | struct irq_chip s3c2416_irq_second = { | ||
227 | .irq_ack = s3c2416_irq_ack_second, | ||
228 | .irq_mask = s3c2416_irq_mask_second, | ||
229 | .irq_unmask = s3c2416_irq_unmask_second, | ||
230 | }; | ||
231 | |||
232 | |||
233 | /* IRQ initialisation code */ | ||
234 | |||
235 | static int s3c2416_add_sub(unsigned int base, | ||
236 | void (*demux)(unsigned int, | ||
237 | struct irq_desc *), | ||
238 | struct irq_chip *chip, | ||
239 | unsigned int start, unsigned int end) | ||
240 | { | ||
241 | unsigned int irqno; | ||
242 | |||
243 | irq_set_chip_and_handler(base, &s3c_irq_level_chip, handle_level_irq); | ||
244 | irq_set_chained_handler(base, demux); | ||
245 | |||
246 | for (irqno = start; irqno <= end; irqno++) { | ||
247 | irq_set_chip_and_handler(irqno, chip, handle_level_irq); | ||
248 | set_irq_flags(irqno, IRQF_VALID); | ||
249 | } | ||
250 | |||
251 | return 0; | ||
252 | } | ||
253 | |||
254 | static void s3c2416_irq_add_second(void) | ||
255 | { | ||
256 | unsigned long pend; | ||
257 | unsigned long last; | ||
258 | int irqno; | ||
259 | int i; | ||
260 | |||
261 | /* first, clear all interrupts pending... */ | ||
262 | last = 0; | ||
263 | for (i = 0; i < 4; i++) { | ||
264 | pend = __raw_readl(S3C2416_INTPND2); | ||
265 | |||
266 | if (pend == 0 || pend == last) | ||
267 | break; | ||
268 | |||
269 | __raw_writel(pend, S3C2416_SRCPND2); | ||
270 | __raw_writel(pend, S3C2416_INTPND2); | ||
271 | printk(KERN_INFO "irq: clearing pending status %08x\n", | ||
272 | (int)pend); | ||
273 | last = pend; | ||
274 | } | ||
275 | |||
276 | for (irqno = IRQ_S3C2416_2D; irqno <= IRQ_S3C2416_I2S1; irqno++) { | ||
277 | switch (irqno) { | ||
278 | case IRQ_S3C2416_RESERVED2: | ||
279 | case IRQ_S3C2416_RESERVED3: | ||
280 | /* no IRQ here */ | ||
281 | break; | ||
282 | default: | ||
283 | irq_set_chip_and_handler(irqno, &s3c2416_irq_second, | ||
284 | handle_edge_irq); | ||
285 | set_irq_flags(irqno, IRQF_VALID); | ||
286 | } | ||
287 | } | ||
288 | } | ||
289 | |||
290 | static int s3c2416_irq_add(struct device *dev, | ||
291 | struct subsys_interface *sif) | ||
292 | { | ||
293 | printk(KERN_INFO "S3C2416: IRQ Support\n"); | ||
294 | |||
295 | s3c2416_add_sub(IRQ_LCD, s3c2416_irq_demux_lcd, &s3c2416_irq_lcd, | ||
296 | IRQ_S3C2443_LCD2, IRQ_S3C2443_LCD4); | ||
297 | |||
298 | s3c2416_add_sub(IRQ_S3C2443_DMA, s3c2416_irq_demux_dma, | ||
299 | &s3c2416_irq_dma, IRQ_S3C2443_DMA0, IRQ_S3C2443_DMA5); | ||
300 | |||
301 | s3c2416_add_sub(IRQ_S3C2443_UART3, s3c2416_irq_demux_uart3, | ||
302 | &s3c2416_irq_uart3, | ||
303 | IRQ_S3C2443_RX3, IRQ_S3C2443_ERR3); | ||
304 | |||
305 | s3c2416_add_sub(IRQ_WDT, s3c2416_irq_demux_wdtac97, | ||
306 | &s3c2416_irq_wdtac97, | ||
307 | IRQ_S3C2443_WDT, IRQ_S3C2443_AC97); | ||
308 | |||
309 | s3c2416_irq_add_second(); | ||
310 | |||
311 | return 0; | ||
312 | } | ||
313 | |||
314 | static struct subsys_interface s3c2416_irq_interface = { | ||
315 | .name = "s3c2416_irq", | ||
316 | .subsys = &s3c2416_subsys, | ||
317 | .add_dev = s3c2416_irq_add, | ||
318 | }; | ||
319 | |||
320 | static int __init s3c2416_irq_init(void) | ||
321 | { | ||
322 | return subsys_interface_register(&s3c2416_irq_interface); | ||
323 | } | ||
324 | |||
325 | arch_initcall(s3c2416_irq_init); | ||
326 | |||
327 | #ifdef CONFIG_PM | ||
328 | static struct sleep_save irq_save[] = { | ||
329 | SAVE_ITEM(S3C2416_INTMSK2), | ||
330 | }; | ||
331 | |||
332 | int s3c2416_irq_suspend(void) | ||
333 | { | ||
334 | s3c_pm_do_save(irq_save, ARRAY_SIZE(irq_save)); | ||
335 | |||
336 | return 0; | ||
337 | } | ||
338 | |||
339 | void s3c2416_irq_resume(void) | ||
340 | { | ||
341 | s3c_pm_do_restore(irq_save, ARRAY_SIZE(irq_save)); | ||
342 | } | ||
343 | |||
344 | struct syscore_ops s3c2416_irq_syscore_ops = { | ||
345 | .suspend = s3c2416_irq_suspend, | ||
346 | .resume = s3c2416_irq_resume, | ||
347 | }; | ||
348 | #endif | ||
diff --git a/arch/arm/mach-s3c24xx/irq-s3c2443.c b/arch/arm/mach-s3c24xx/irq-s3c2443.c deleted file mode 100644 index 5e69109c0928..000000000000 --- a/arch/arm/mach-s3c24xx/irq-s3c2443.c +++ /dev/null | |||
@@ -1,281 +0,0 @@ | |||
1 | /* linux/arch/arm/mach-s3c2443/irq.c | ||
2 | * | ||
3 | * Copyright (c) 2007 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | * | ||
20 | */ | ||
21 | |||
22 | #include <linux/init.h> | ||
23 | #include <linux/module.h> | ||
24 | #include <linux/interrupt.h> | ||
25 | #include <linux/ioport.h> | ||
26 | #include <linux/device.h> | ||
27 | #include <linux/io.h> | ||
28 | |||
29 | #include <mach/hardware.h> | ||
30 | #include <asm/irq.h> | ||
31 | |||
32 | #include <asm/mach/irq.h> | ||
33 | |||
34 | #include <mach/regs-irq.h> | ||
35 | #include <mach/regs-gpio.h> | ||
36 | |||
37 | #include <plat/cpu.h> | ||
38 | #include <plat/pm.h> | ||
39 | #include <plat/irq.h> | ||
40 | |||
41 | #define INTMSK(start, end) ((1 << ((end) + 1 - (start))) - 1) | ||
42 | |||
43 | static inline void s3c2443_irq_demux(unsigned int irq, unsigned int len) | ||
44 | { | ||
45 | unsigned int subsrc, submsk; | ||
46 | unsigned int end; | ||
47 | |||
48 | /* read the current pending interrupts, and the mask | ||
49 | * for what it is available */ | ||
50 | |||
51 | subsrc = __raw_readl(S3C2410_SUBSRCPND); | ||
52 | submsk = __raw_readl(S3C2410_INTSUBMSK); | ||
53 | |||
54 | subsrc &= ~submsk; | ||
55 | subsrc >>= (irq - S3C2410_IRQSUB(0)); | ||
56 | subsrc &= (1 << len)-1; | ||
57 | |||
58 | end = len + irq; | ||
59 | |||
60 | for (; irq < end && subsrc; irq++) { | ||
61 | if (subsrc & 1) | ||
62 | generic_handle_irq(irq); | ||
63 | |||
64 | subsrc >>= 1; | ||
65 | } | ||
66 | } | ||
67 | |||
68 | /* WDT/AC97 sub interrupts */ | ||
69 | |||
70 | static void s3c2443_irq_demux_wdtac97(unsigned int irq, struct irq_desc *desc) | ||
71 | { | ||
72 | s3c2443_irq_demux(IRQ_S3C2443_WDT, 4); | ||
73 | } | ||
74 | |||
75 | #define INTMSK_WDTAC97 (1UL << (IRQ_WDT - IRQ_EINT0)) | ||
76 | #define SUBMSK_WDTAC97 INTMSK(IRQ_S3C2443_WDT, IRQ_S3C2443_AC97) | ||
77 | |||
78 | static void s3c2443_irq_wdtac97_mask(struct irq_data *data) | ||
79 | { | ||
80 | s3c_irqsub_mask(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); | ||
81 | } | ||
82 | |||
83 | static void s3c2443_irq_wdtac97_unmask(struct irq_data *data) | ||
84 | { | ||
85 | s3c_irqsub_unmask(data->irq, INTMSK_WDTAC97); | ||
86 | } | ||
87 | |||
88 | static void s3c2443_irq_wdtac97_ack(struct irq_data *data) | ||
89 | { | ||
90 | s3c_irqsub_maskack(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); | ||
91 | } | ||
92 | |||
93 | static struct irq_chip s3c2443_irq_wdtac97 = { | ||
94 | .irq_mask = s3c2443_irq_wdtac97_mask, | ||
95 | .irq_unmask = s3c2443_irq_wdtac97_unmask, | ||
96 | .irq_ack = s3c2443_irq_wdtac97_ack, | ||
97 | }; | ||
98 | |||
99 | /* LCD sub interrupts */ | ||
100 | |||
101 | static void s3c2443_irq_demux_lcd(unsigned int irq, struct irq_desc *desc) | ||
102 | { | ||
103 | s3c2443_irq_demux(IRQ_S3C2443_LCD1, 4); | ||
104 | } | ||
105 | |||
106 | #define INTMSK_LCD (1UL << (IRQ_LCD - IRQ_EINT0)) | ||
107 | #define SUBMSK_LCD INTMSK(IRQ_S3C2443_LCD1, IRQ_S3C2443_LCD4) | ||
108 | |||
109 | static void s3c2443_irq_lcd_mask(struct irq_data *data) | ||
110 | { | ||
111 | s3c_irqsub_mask(data->irq, INTMSK_LCD, SUBMSK_LCD); | ||
112 | } | ||
113 | |||
114 | static void s3c2443_irq_lcd_unmask(struct irq_data *data) | ||
115 | { | ||
116 | s3c_irqsub_unmask(data->irq, INTMSK_LCD); | ||
117 | } | ||
118 | |||
119 | static void s3c2443_irq_lcd_ack(struct irq_data *data) | ||
120 | { | ||
121 | s3c_irqsub_maskack(data->irq, INTMSK_LCD, SUBMSK_LCD); | ||
122 | } | ||
123 | |||
124 | static struct irq_chip s3c2443_irq_lcd = { | ||
125 | .irq_mask = s3c2443_irq_lcd_mask, | ||
126 | .irq_unmask = s3c2443_irq_lcd_unmask, | ||
127 | .irq_ack = s3c2443_irq_lcd_ack, | ||
128 | }; | ||
129 | |||
130 | /* DMA sub interrupts */ | ||
131 | |||
132 | static void s3c2443_irq_demux_dma(unsigned int irq, struct irq_desc *desc) | ||
133 | { | ||
134 | s3c2443_irq_demux(IRQ_S3C2443_DMA0, 6); | ||
135 | } | ||
136 | |||
137 | #define INTMSK_DMA (1UL << (IRQ_S3C2443_DMA - IRQ_EINT0)) | ||
138 | #define SUBMSK_DMA INTMSK(IRQ_S3C2443_DMA0, IRQ_S3C2443_DMA5) | ||
139 | |||
140 | static void s3c2443_irq_dma_mask(struct irq_data *data) | ||
141 | { | ||
142 | s3c_irqsub_mask(data->irq, INTMSK_DMA, SUBMSK_DMA); | ||
143 | } | ||
144 | |||
145 | static void s3c2443_irq_dma_unmask(struct irq_data *data) | ||
146 | { | ||
147 | s3c_irqsub_unmask(data->irq, INTMSK_DMA); | ||
148 | } | ||
149 | |||
150 | static void s3c2443_irq_dma_ack(struct irq_data *data) | ||
151 | { | ||
152 | s3c_irqsub_maskack(data->irq, INTMSK_DMA, SUBMSK_DMA); | ||
153 | } | ||
154 | |||
155 | static struct irq_chip s3c2443_irq_dma = { | ||
156 | .irq_mask = s3c2443_irq_dma_mask, | ||
157 | .irq_unmask = s3c2443_irq_dma_unmask, | ||
158 | .irq_ack = s3c2443_irq_dma_ack, | ||
159 | }; | ||
160 | |||
161 | /* UART3 sub interrupts */ | ||
162 | |||
163 | static void s3c2443_irq_demux_uart3(unsigned int irq, struct irq_desc *desc) | ||
164 | { | ||
165 | s3c2443_irq_demux(IRQ_S3C2443_RX3, 3); | ||
166 | } | ||
167 | |||
168 | #define INTMSK_UART3 (1UL << (IRQ_S3C2443_UART3 - IRQ_EINT0)) | ||
169 | #define SUBMSK_UART3 (0x7 << (IRQ_S3C2443_RX3 - S3C2410_IRQSUB(0))) | ||
170 | |||
171 | static void s3c2443_irq_uart3_mask(struct irq_data *data) | ||
172 | { | ||
173 | s3c_irqsub_mask(data->irq, INTMSK_UART3, SUBMSK_UART3); | ||
174 | } | ||
175 | |||
176 | static void s3c2443_irq_uart3_unmask(struct irq_data *data) | ||
177 | { | ||
178 | s3c_irqsub_unmask(data->irq, INTMSK_UART3); | ||
179 | } | ||
180 | |||
181 | static void s3c2443_irq_uart3_ack(struct irq_data *data) | ||
182 | { | ||
183 | s3c_irqsub_maskack(data->irq, INTMSK_UART3, SUBMSK_UART3); | ||
184 | } | ||
185 | |||
186 | static struct irq_chip s3c2443_irq_uart3 = { | ||
187 | .irq_mask = s3c2443_irq_uart3_mask, | ||
188 | .irq_unmask = s3c2443_irq_uart3_unmask, | ||
189 | .irq_ack = s3c2443_irq_uart3_ack, | ||
190 | }; | ||
191 | |||
192 | /* CAM sub interrupts */ | ||
193 | |||
194 | static void s3c2443_irq_demux_cam(unsigned int irq, struct irq_desc *desc) | ||
195 | { | ||
196 | s3c2443_irq_demux(IRQ_S3C2440_CAM_C, 4); | ||
197 | } | ||
198 | |||
199 | #define INTMSK_CAM (1UL << (IRQ_CAM - IRQ_EINT0)) | ||
200 | #define SUBMSK_CAM INTMSK(IRQ_S3C2440_CAM_C, IRQ_S3C2440_CAM_P) | ||
201 | |||
202 | static void s3c2443_irq_cam_mask(struct irq_data *data) | ||
203 | { | ||
204 | s3c_irqsub_mask(data->irq, INTMSK_CAM, SUBMSK_CAM); | ||
205 | } | ||
206 | |||
207 | static void s3c2443_irq_cam_unmask(struct irq_data *data) | ||
208 | { | ||
209 | s3c_irqsub_unmask(data->irq, INTMSK_CAM); | ||
210 | } | ||
211 | |||
212 | static void s3c2443_irq_cam_ack(struct irq_data *data) | ||
213 | { | ||
214 | s3c_irqsub_maskack(data->irq, INTMSK_CAM, SUBMSK_CAM); | ||
215 | } | ||
216 | |||
217 | static struct irq_chip s3c2443_irq_cam = { | ||
218 | .irq_mask = s3c2443_irq_cam_mask, | ||
219 | .irq_unmask = s3c2443_irq_cam_unmask, | ||
220 | .irq_ack = s3c2443_irq_cam_ack, | ||
221 | }; | ||
222 | |||
223 | /* IRQ initialisation code */ | ||
224 | |||
225 | static int s3c2443_add_sub(unsigned int base, | ||
226 | void (*demux)(unsigned int, | ||
227 | struct irq_desc *), | ||
228 | struct irq_chip *chip, | ||
229 | unsigned int start, unsigned int end) | ||
230 | { | ||
231 | unsigned int irqno; | ||
232 | |||
233 | irq_set_chip_and_handler(base, &s3c_irq_level_chip, handle_level_irq); | ||
234 | irq_set_chained_handler(base, demux); | ||
235 | |||
236 | for (irqno = start; irqno <= end; irqno++) { | ||
237 | irq_set_chip_and_handler(irqno, chip, handle_level_irq); | ||
238 | set_irq_flags(irqno, IRQF_VALID); | ||
239 | } | ||
240 | |||
241 | return 0; | ||
242 | } | ||
243 | |||
244 | static int s3c2443_irq_add(struct device *dev, | ||
245 | struct subsys_interface *sif) | ||
246 | { | ||
247 | printk("S3C2443: IRQ Support\n"); | ||
248 | |||
249 | s3c2443_add_sub(IRQ_CAM, s3c2443_irq_demux_cam, &s3c2443_irq_cam, | ||
250 | IRQ_S3C2440_CAM_C, IRQ_S3C2440_CAM_P); | ||
251 | |||
252 | s3c2443_add_sub(IRQ_LCD, s3c2443_irq_demux_lcd, &s3c2443_irq_lcd, | ||
253 | IRQ_S3C2443_LCD1, IRQ_S3C2443_LCD4); | ||
254 | |||
255 | s3c2443_add_sub(IRQ_S3C2443_DMA, s3c2443_irq_demux_dma, | ||
256 | &s3c2443_irq_dma, IRQ_S3C2443_DMA0, IRQ_S3C2443_DMA5); | ||
257 | |||
258 | s3c2443_add_sub(IRQ_S3C2443_UART3, s3c2443_irq_demux_uart3, | ||
259 | &s3c2443_irq_uart3, | ||
260 | IRQ_S3C2443_RX3, IRQ_S3C2443_ERR3); | ||
261 | |||
262 | s3c2443_add_sub(IRQ_WDT, s3c2443_irq_demux_wdtac97, | ||
263 | &s3c2443_irq_wdtac97, | ||
264 | IRQ_S3C2443_WDT, IRQ_S3C2443_AC97); | ||
265 | |||
266 | return 0; | ||
267 | } | ||
268 | |||
269 | static struct subsys_interface s3c2443_irq_interface = { | ||
270 | .name = "s3c2443_irq", | ||
271 | .subsys = &s3c2443_subsys, | ||
272 | .add_dev = s3c2443_irq_add, | ||
273 | }; | ||
274 | |||
275 | static int __init s3c2443_irq_init(void) | ||
276 | { | ||
277 | return subsys_interface_register(&s3c2443_irq_interface); | ||
278 | } | ||
279 | |||
280 | arch_initcall(s3c2443_irq_init); | ||
281 | |||
diff --git a/arch/arm/mach-s3c24xx/irq.c b/arch/arm/mach-s3c24xx/irq.c new file mode 100644 index 000000000000..cb9f5e011e73 --- /dev/null +++ b/arch/arm/mach-s3c24xx/irq.c | |||
@@ -0,0 +1,822 @@ | |||
1 | /* | ||
2 | * S3C24XX IRQ handling | ||
3 | * | ||
4 | * Copyright (c) 2003-2004 Simtec Electronics | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * Copyright (c) 2012 Heiko Stuebner <heiko@sntech.de> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | */ | ||
18 | |||
19 | #include <linux/init.h> | ||
20 | #include <linux/slab.h> | ||
21 | #include <linux/module.h> | ||
22 | #include <linux/io.h> | ||
23 | #include <linux/err.h> | ||
24 | #include <linux/interrupt.h> | ||
25 | #include <linux/ioport.h> | ||
26 | #include <linux/device.h> | ||
27 | #include <linux/irqdomain.h> | ||
28 | |||
29 | #include <asm/mach/irq.h> | ||
30 | |||
31 | #include <mach/regs-irq.h> | ||
32 | #include <mach/regs-gpio.h> | ||
33 | |||
34 | #include <plat/cpu.h> | ||
35 | #include <plat/regs-irqtype.h> | ||
36 | #include <plat/pm.h> | ||
37 | #include <plat/irq.h> | ||
38 | |||
39 | #define S3C_IRQTYPE_NONE 0 | ||
40 | #define S3C_IRQTYPE_EINT 1 | ||
41 | #define S3C_IRQTYPE_EDGE 2 | ||
42 | #define S3C_IRQTYPE_LEVEL 3 | ||
43 | |||
44 | struct s3c_irq_data { | ||
45 | unsigned int type; | ||
46 | unsigned long parent_irq; | ||
47 | |||
48 | /* data gets filled during init */ | ||
49 | struct s3c_irq_intc *intc; | ||
50 | unsigned long sub_bits; | ||
51 | struct s3c_irq_intc *sub_intc; | ||
52 | }; | ||
53 | |||
54 | /* | ||
55 | * Sructure holding the controller data | ||
56 | * @reg_pending register holding pending irqs | ||
57 | * @reg_intpnd special register intpnd in main intc | ||
58 | * @reg_mask mask register | ||
59 | * @domain irq_domain of the controller | ||
60 | * @parent parent controller for ext and sub irqs | ||
61 | * @irqs irq-data, always s3c_irq_data[32] | ||
62 | */ | ||
63 | struct s3c_irq_intc { | ||
64 | void __iomem *reg_pending; | ||
65 | void __iomem *reg_intpnd; | ||
66 | void __iomem *reg_mask; | ||
67 | struct irq_domain *domain; | ||
68 | struct s3c_irq_intc *parent; | ||
69 | struct s3c_irq_data *irqs; | ||
70 | }; | ||
71 | |||
72 | static void s3c_irq_mask(struct irq_data *data) | ||
73 | { | ||
74 | struct s3c_irq_intc *intc = data->domain->host_data; | ||
75 | struct s3c_irq_intc *parent_intc = intc->parent; | ||
76 | struct s3c_irq_data *irq_data = &intc->irqs[data->hwirq]; | ||
77 | struct s3c_irq_data *parent_data; | ||
78 | unsigned long mask; | ||
79 | unsigned int irqno; | ||
80 | |||
81 | mask = __raw_readl(intc->reg_mask); | ||
82 | mask |= (1UL << data->hwirq); | ||
83 | __raw_writel(mask, intc->reg_mask); | ||
84 | |||
85 | if (parent_intc && irq_data->parent_irq) { | ||
86 | parent_data = &parent_intc->irqs[irq_data->parent_irq]; | ||
87 | |||
88 | /* check to see if we need to mask the parent IRQ */ | ||
89 | if ((mask & parent_data->sub_bits) == parent_data->sub_bits) { | ||
90 | irqno = irq_find_mapping(parent_intc->domain, | ||
91 | irq_data->parent_irq); | ||
92 | s3c_irq_mask(irq_get_irq_data(irqno)); | ||
93 | } | ||
94 | } | ||
95 | } | ||
96 | |||
97 | static void s3c_irq_unmask(struct irq_data *data) | ||
98 | { | ||
99 | struct s3c_irq_intc *intc = data->domain->host_data; | ||
100 | struct s3c_irq_intc *parent_intc = intc->parent; | ||
101 | struct s3c_irq_data *irq_data = &intc->irqs[data->hwirq]; | ||
102 | unsigned long mask; | ||
103 | unsigned int irqno; | ||
104 | |||
105 | mask = __raw_readl(intc->reg_mask); | ||
106 | mask &= ~(1UL << data->hwirq); | ||
107 | __raw_writel(mask, intc->reg_mask); | ||
108 | |||
109 | if (parent_intc && irq_data->parent_irq) { | ||
110 | irqno = irq_find_mapping(parent_intc->domain, | ||
111 | irq_data->parent_irq); | ||
112 | s3c_irq_unmask(irq_get_irq_data(irqno)); | ||
113 | } | ||
114 | } | ||
115 | |||
116 | static inline void s3c_irq_ack(struct irq_data *data) | ||
117 | { | ||
118 | struct s3c_irq_intc *intc = data->domain->host_data; | ||
119 | unsigned long bitval = 1UL << data->hwirq; | ||
120 | |||
121 | __raw_writel(bitval, intc->reg_pending); | ||
122 | if (intc->reg_intpnd) | ||
123 | __raw_writel(bitval, intc->reg_intpnd); | ||
124 | } | ||
125 | |||
126 | static int s3c_irqext_type_set(void __iomem *gpcon_reg, | ||
127 | void __iomem *extint_reg, | ||
128 | unsigned long gpcon_offset, | ||
129 | unsigned long extint_offset, | ||
130 | unsigned int type) | ||
131 | { | ||
132 | unsigned long newvalue = 0, value; | ||
133 | |||
134 | /* Set the GPIO to external interrupt mode */ | ||
135 | value = __raw_readl(gpcon_reg); | ||
136 | value = (value & ~(3 << gpcon_offset)) | (0x02 << gpcon_offset); | ||
137 | __raw_writel(value, gpcon_reg); | ||
138 | |||
139 | /* Set the external interrupt to pointed trigger type */ | ||
140 | switch (type) | ||
141 | { | ||
142 | case IRQ_TYPE_NONE: | ||
143 | pr_warn("No edge setting!\n"); | ||
144 | break; | ||
145 | |||
146 | case IRQ_TYPE_EDGE_RISING: | ||
147 | newvalue = S3C2410_EXTINT_RISEEDGE; | ||
148 | break; | ||
149 | |||
150 | case IRQ_TYPE_EDGE_FALLING: | ||
151 | newvalue = S3C2410_EXTINT_FALLEDGE; | ||
152 | break; | ||
153 | |||
154 | case IRQ_TYPE_EDGE_BOTH: | ||
155 | newvalue = S3C2410_EXTINT_BOTHEDGE; | ||
156 | break; | ||
157 | |||
158 | case IRQ_TYPE_LEVEL_LOW: | ||
159 | newvalue = S3C2410_EXTINT_LOWLEV; | ||
160 | break; | ||
161 | |||
162 | case IRQ_TYPE_LEVEL_HIGH: | ||
163 | newvalue = S3C2410_EXTINT_HILEV; | ||
164 | break; | ||
165 | |||
166 | default: | ||
167 | pr_err("No such irq type %d", type); | ||
168 | return -EINVAL; | ||
169 | } | ||
170 | |||
171 | value = __raw_readl(extint_reg); | ||
172 | value = (value & ~(7 << extint_offset)) | (newvalue << extint_offset); | ||
173 | __raw_writel(value, extint_reg); | ||
174 | |||
175 | return 0; | ||
176 | } | ||
177 | |||
178 | /* FIXME: make static when it's out of plat-samsung/irq.h */ | ||
179 | int s3c_irqext_type(struct irq_data *data, unsigned int type) | ||
180 | { | ||
181 | void __iomem *extint_reg; | ||
182 | void __iomem *gpcon_reg; | ||
183 | unsigned long gpcon_offset, extint_offset; | ||
184 | |||
185 | if ((data->hwirq >= 4) && (data->hwirq <= 7)) { | ||
186 | gpcon_reg = S3C2410_GPFCON; | ||
187 | extint_reg = S3C24XX_EXTINT0; | ||
188 | gpcon_offset = (data->hwirq) * 2; | ||
189 | extint_offset = (data->hwirq) * 4; | ||
190 | } else if ((data->hwirq >= 8) && (data->hwirq <= 15)) { | ||
191 | gpcon_reg = S3C2410_GPGCON; | ||
192 | extint_reg = S3C24XX_EXTINT1; | ||
193 | gpcon_offset = (data->hwirq - 8) * 2; | ||
194 | extint_offset = (data->hwirq - 8) * 4; | ||
195 | } else if ((data->hwirq >= 16) && (data->hwirq <= 23)) { | ||
196 | gpcon_reg = S3C2410_GPGCON; | ||
197 | extint_reg = S3C24XX_EXTINT2; | ||
198 | gpcon_offset = (data->hwirq - 8) * 2; | ||
199 | extint_offset = (data->hwirq - 16) * 4; | ||
200 | } else { | ||
201 | return -EINVAL; | ||
202 | } | ||
203 | |||
204 | return s3c_irqext_type_set(gpcon_reg, extint_reg, gpcon_offset, | ||
205 | extint_offset, type); | ||
206 | } | ||
207 | |||
208 | static int s3c_irqext0_type(struct irq_data *data, unsigned int type) | ||
209 | { | ||
210 | void __iomem *extint_reg; | ||
211 | void __iomem *gpcon_reg; | ||
212 | unsigned long gpcon_offset, extint_offset; | ||
213 | |||
214 | if ((data->hwirq >= 0) && (data->hwirq <= 3)) { | ||
215 | gpcon_reg = S3C2410_GPFCON; | ||
216 | extint_reg = S3C24XX_EXTINT0; | ||
217 | gpcon_offset = (data->hwirq) * 2; | ||
218 | extint_offset = (data->hwirq) * 4; | ||
219 | } else { | ||
220 | return -EINVAL; | ||
221 | } | ||
222 | |||
223 | return s3c_irqext_type_set(gpcon_reg, extint_reg, gpcon_offset, | ||
224 | extint_offset, type); | ||
225 | } | ||
226 | |||
227 | struct irq_chip s3c_irq_chip = { | ||
228 | .name = "s3c", | ||
229 | .irq_ack = s3c_irq_ack, | ||
230 | .irq_mask = s3c_irq_mask, | ||
231 | .irq_unmask = s3c_irq_unmask, | ||
232 | .irq_set_wake = s3c_irq_wake | ||
233 | }; | ||
234 | |||
235 | struct irq_chip s3c_irq_level_chip = { | ||
236 | .name = "s3c-level", | ||
237 | .irq_mask = s3c_irq_mask, | ||
238 | .irq_unmask = s3c_irq_unmask, | ||
239 | .irq_ack = s3c_irq_ack, | ||
240 | }; | ||
241 | |||
242 | static struct irq_chip s3c_irqext_chip = { | ||
243 | .name = "s3c-ext", | ||
244 | .irq_mask = s3c_irq_mask, | ||
245 | .irq_unmask = s3c_irq_unmask, | ||
246 | .irq_ack = s3c_irq_ack, | ||
247 | .irq_set_type = s3c_irqext_type, | ||
248 | .irq_set_wake = s3c_irqext_wake | ||
249 | }; | ||
250 | |||
251 | static struct irq_chip s3c_irq_eint0t4 = { | ||
252 | .name = "s3c-ext0", | ||
253 | .irq_ack = s3c_irq_ack, | ||
254 | .irq_mask = s3c_irq_mask, | ||
255 | .irq_unmask = s3c_irq_unmask, | ||
256 | .irq_set_wake = s3c_irq_wake, | ||
257 | .irq_set_type = s3c_irqext0_type, | ||
258 | }; | ||
259 | |||
260 | static void s3c_irq_demux(unsigned int irq, struct irq_desc *desc) | ||
261 | { | ||
262 | struct irq_chip *chip = irq_desc_get_chip(desc); | ||
263 | struct s3c_irq_intc *intc = desc->irq_data.domain->host_data; | ||
264 | struct s3c_irq_data *irq_data = &intc->irqs[desc->irq_data.hwirq]; | ||
265 | struct s3c_irq_intc *sub_intc = irq_data->sub_intc; | ||
266 | unsigned long src; | ||
267 | unsigned long msk; | ||
268 | unsigned int n; | ||
269 | |||
270 | chained_irq_enter(chip, desc); | ||
271 | |||
272 | src = __raw_readl(sub_intc->reg_pending); | ||
273 | msk = __raw_readl(sub_intc->reg_mask); | ||
274 | |||
275 | src &= ~msk; | ||
276 | src &= irq_data->sub_bits; | ||
277 | |||
278 | while (src) { | ||
279 | n = __ffs(src); | ||
280 | src &= ~(1 << n); | ||
281 | generic_handle_irq(irq_find_mapping(sub_intc->domain, n)); | ||
282 | } | ||
283 | |||
284 | chained_irq_exit(chip, desc); | ||
285 | } | ||
286 | |||
287 | #ifdef CONFIG_FIQ | ||
288 | /** | ||
289 | * s3c24xx_set_fiq - set the FIQ routing | ||
290 | * @irq: IRQ number to route to FIQ on processor. | ||
291 | * @on: Whether to route @irq to the FIQ, or to remove the FIQ routing. | ||
292 | * | ||
293 | * Change the state of the IRQ to FIQ routing depending on @irq and @on. If | ||
294 | * @on is true, the @irq is checked to see if it can be routed and the | ||
295 | * interrupt controller updated to route the IRQ. If @on is false, the FIQ | ||
296 | * routing is cleared, regardless of which @irq is specified. | ||
297 | */ | ||
298 | int s3c24xx_set_fiq(unsigned int irq, bool on) | ||
299 | { | ||
300 | u32 intmod; | ||
301 | unsigned offs; | ||
302 | |||
303 | if (on) { | ||
304 | offs = irq - FIQ_START; | ||
305 | if (offs > 31) | ||
306 | return -EINVAL; | ||
307 | |||
308 | intmod = 1 << offs; | ||
309 | } else { | ||
310 | intmod = 0; | ||
311 | } | ||
312 | |||
313 | __raw_writel(intmod, S3C2410_INTMOD); | ||
314 | return 0; | ||
315 | } | ||
316 | |||
317 | EXPORT_SYMBOL_GPL(s3c24xx_set_fiq); | ||
318 | #endif | ||
319 | |||
320 | static int s3c24xx_irq_map(struct irq_domain *h, unsigned int virq, | ||
321 | irq_hw_number_t hw) | ||
322 | { | ||
323 | struct s3c_irq_intc *intc = h->host_data; | ||
324 | struct s3c_irq_data *irq_data = &intc->irqs[hw]; | ||
325 | struct s3c_irq_intc *parent_intc; | ||
326 | struct s3c_irq_data *parent_irq_data; | ||
327 | unsigned int irqno; | ||
328 | |||
329 | if (!intc) { | ||
330 | pr_err("irq-s3c24xx: no controller found for hwirq %lu\n", hw); | ||
331 | return -EINVAL; | ||
332 | } | ||
333 | |||
334 | if (!irq_data) { | ||
335 | pr_err("irq-s3c24xx: no irq data found for hwirq %lu\n", hw); | ||
336 | return -EINVAL; | ||
337 | } | ||
338 | |||
339 | /* attach controller pointer to irq_data */ | ||
340 | irq_data->intc = intc; | ||
341 | |||
342 | /* set handler and flags */ | ||
343 | switch (irq_data->type) { | ||
344 | case S3C_IRQTYPE_NONE: | ||
345 | return 0; | ||
346 | case S3C_IRQTYPE_EINT: | ||
347 | if (irq_data->parent_irq) | ||
348 | irq_set_chip_and_handler(virq, &s3c_irqext_chip, | ||
349 | handle_edge_irq); | ||
350 | else | ||
351 | irq_set_chip_and_handler(virq, &s3c_irq_eint0t4, | ||
352 | handle_edge_irq); | ||
353 | break; | ||
354 | case S3C_IRQTYPE_EDGE: | ||
355 | if (irq_data->parent_irq || | ||
356 | intc->reg_pending == S3C2416_SRCPND2) | ||
357 | irq_set_chip_and_handler(virq, &s3c_irq_level_chip, | ||
358 | handle_edge_irq); | ||
359 | else | ||
360 | irq_set_chip_and_handler(virq, &s3c_irq_chip, | ||
361 | handle_edge_irq); | ||
362 | break; | ||
363 | case S3C_IRQTYPE_LEVEL: | ||
364 | if (irq_data->parent_irq) | ||
365 | irq_set_chip_and_handler(virq, &s3c_irq_level_chip, | ||
366 | handle_level_irq); | ||
367 | else | ||
368 | irq_set_chip_and_handler(virq, &s3c_irq_chip, | ||
369 | handle_level_irq); | ||
370 | break; | ||
371 | default: | ||
372 | pr_err("irq-s3c24xx: unsupported irqtype %d\n", irq_data->type); | ||
373 | return -EINVAL; | ||
374 | } | ||
375 | set_irq_flags(virq, IRQF_VALID); | ||
376 | |||
377 | if (irq_data->parent_irq) { | ||
378 | parent_intc = intc->parent; | ||
379 | if (!parent_intc) { | ||
380 | pr_err("irq-s3c24xx: no parent controller found for hwirq %lu\n", | ||
381 | hw); | ||
382 | goto err; | ||
383 | } | ||
384 | |||
385 | parent_irq_data = &parent_intc->irqs[irq_data->parent_irq]; | ||
386 | if (!irq_data) { | ||
387 | pr_err("irq-s3c24xx: no irq data found for hwirq %lu\n", | ||
388 | hw); | ||
389 | goto err; | ||
390 | } | ||
391 | |||
392 | parent_irq_data->sub_intc = intc; | ||
393 | parent_irq_data->sub_bits |= (1UL << hw); | ||
394 | |||
395 | /* attach the demuxer to the parent irq */ | ||
396 | irqno = irq_find_mapping(parent_intc->domain, | ||
397 | irq_data->parent_irq); | ||
398 | if (!irqno) { | ||
399 | pr_err("irq-s3c24xx: could not find mapping for parent irq %lu\n", | ||
400 | irq_data->parent_irq); | ||
401 | goto err; | ||
402 | } | ||
403 | irq_set_chained_handler(irqno, s3c_irq_demux); | ||
404 | } | ||
405 | |||
406 | return 0; | ||
407 | |||
408 | err: | ||
409 | set_irq_flags(virq, 0); | ||
410 | |||
411 | /* the only error can result from bad mapping data*/ | ||
412 | return -EINVAL; | ||
413 | } | ||
414 | |||
415 | static struct irq_domain_ops s3c24xx_irq_ops = { | ||
416 | .map = s3c24xx_irq_map, | ||
417 | .xlate = irq_domain_xlate_twocell, | ||
418 | }; | ||
419 | |||
420 | static void s3c24xx_clear_intc(struct s3c_irq_intc *intc) | ||
421 | { | ||
422 | void __iomem *reg_source; | ||
423 | unsigned long pend; | ||
424 | unsigned long last; | ||
425 | int i; | ||
426 | |||
427 | /* if intpnd is set, read the next pending irq from there */ | ||
428 | reg_source = intc->reg_intpnd ? intc->reg_intpnd : intc->reg_pending; | ||
429 | |||
430 | last = 0; | ||
431 | for (i = 0; i < 4; i++) { | ||
432 | pend = __raw_readl(reg_source); | ||
433 | |||
434 | if (pend == 0 || pend == last) | ||
435 | break; | ||
436 | |||
437 | __raw_writel(pend, intc->reg_pending); | ||
438 | if (intc->reg_intpnd) | ||
439 | __raw_writel(pend, intc->reg_intpnd); | ||
440 | |||
441 | pr_info("irq: clearing pending status %08x\n", (int)pend); | ||
442 | last = pend; | ||
443 | } | ||
444 | } | ||
445 | |||
446 | struct s3c_irq_intc *s3c24xx_init_intc(struct device_node *np, | ||
447 | struct s3c_irq_data *irq_data, | ||
448 | struct s3c_irq_intc *parent, | ||
449 | unsigned long address) | ||
450 | { | ||
451 | struct s3c_irq_intc *intc; | ||
452 | void __iomem *base = (void *)0xf6000000; /* static mapping */ | ||
453 | int irq_num; | ||
454 | int irq_start; | ||
455 | int irq_offset; | ||
456 | int ret; | ||
457 | |||
458 | intc = kzalloc(sizeof(struct s3c_irq_intc), GFP_KERNEL); | ||
459 | if (!intc) | ||
460 | return ERR_PTR(-ENOMEM); | ||
461 | |||
462 | intc->irqs = irq_data; | ||
463 | |||
464 | if (parent) | ||
465 | intc->parent = parent; | ||
466 | |||
467 | /* select the correct data for the controller. | ||
468 | * Need to hard code the irq num start and offset | ||
469 | * to preserve the static mapping for now | ||
470 | */ | ||
471 | switch (address) { | ||
472 | case 0x4a000000: | ||
473 | pr_debug("irq: found main intc\n"); | ||
474 | intc->reg_pending = base; | ||
475 | intc->reg_mask = base + 0x08; | ||
476 | intc->reg_intpnd = base + 0x10; | ||
477 | irq_num = 32; | ||
478 | irq_start = S3C2410_IRQ(0); | ||
479 | irq_offset = 0; | ||
480 | break; | ||
481 | case 0x4a000018: | ||
482 | pr_debug("irq: found subintc\n"); | ||
483 | intc->reg_pending = base + 0x18; | ||
484 | intc->reg_mask = base + 0x1c; | ||
485 | irq_num = 29; | ||
486 | irq_start = S3C2410_IRQSUB(0); | ||
487 | irq_offset = 0; | ||
488 | break; | ||
489 | case 0x4a000040: | ||
490 | pr_debug("irq: found intc2\n"); | ||
491 | intc->reg_pending = base + 0x40; | ||
492 | intc->reg_mask = base + 0x48; | ||
493 | intc->reg_intpnd = base + 0x50; | ||
494 | irq_num = 8; | ||
495 | irq_start = S3C2416_IRQ(0); | ||
496 | irq_offset = 0; | ||
497 | break; | ||
498 | case 0x560000a4: | ||
499 | pr_debug("irq: found eintc\n"); | ||
500 | base = (void *)0xfd000000; | ||
501 | |||
502 | intc->reg_mask = base + 0xa4; | ||
503 | intc->reg_pending = base + 0x08; | ||
504 | irq_num = 20; | ||
505 | irq_start = S3C2410_IRQ(32); | ||
506 | irq_offset = 4; | ||
507 | break; | ||
508 | default: | ||
509 | pr_err("irq: unsupported controller address\n"); | ||
510 | ret = -EINVAL; | ||
511 | goto err; | ||
512 | } | ||
513 | |||
514 | /* now that all the data is complete, init the irq-domain */ | ||
515 | s3c24xx_clear_intc(intc); | ||
516 | intc->domain = irq_domain_add_legacy(np, irq_num, irq_start, | ||
517 | irq_offset, &s3c24xx_irq_ops, | ||
518 | intc); | ||
519 | if (!intc->domain) { | ||
520 | pr_err("irq: could not create irq-domain\n"); | ||
521 | ret = -EINVAL; | ||
522 | goto err; | ||
523 | } | ||
524 | |||
525 | return intc; | ||
526 | |||
527 | err: | ||
528 | kfree(intc); | ||
529 | return ERR_PTR(ret); | ||
530 | } | ||
531 | |||
532 | /* s3c24xx_init_irq | ||
533 | * | ||
534 | * Initialise S3C2410 IRQ system | ||
535 | */ | ||
536 | |||
537 | static struct s3c_irq_data init_base[32] = { | ||
538 | { .type = S3C_IRQTYPE_EINT, }, /* EINT0 */ | ||
539 | { .type = S3C_IRQTYPE_EINT, }, /* EINT1 */ | ||
540 | { .type = S3C_IRQTYPE_EINT, }, /* EINT2 */ | ||
541 | { .type = S3C_IRQTYPE_EINT, }, /* EINT3 */ | ||
542 | { .type = S3C_IRQTYPE_LEVEL, }, /* EINT4to7 */ | ||
543 | { .type = S3C_IRQTYPE_LEVEL, }, /* EINT8to23 */ | ||
544 | { .type = S3C_IRQTYPE_NONE, }, /* reserved */ | ||
545 | { .type = S3C_IRQTYPE_EDGE, }, /* nBATT_FLT */ | ||
546 | { .type = S3C_IRQTYPE_EDGE, }, /* TICK */ | ||
547 | { .type = S3C_IRQTYPE_EDGE, }, /* WDT */ | ||
548 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER0 */ | ||
549 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER1 */ | ||
550 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER2 */ | ||
551 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER3 */ | ||
552 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER4 */ | ||
553 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART2 */ | ||
554 | { .type = S3C_IRQTYPE_EDGE, }, /* LCD */ | ||
555 | { .type = S3C_IRQTYPE_EDGE, }, /* DMA0 */ | ||
556 | { .type = S3C_IRQTYPE_EDGE, }, /* DMA1 */ | ||
557 | { .type = S3C_IRQTYPE_EDGE, }, /* DMA2 */ | ||
558 | { .type = S3C_IRQTYPE_EDGE, }, /* DMA3 */ | ||
559 | { .type = S3C_IRQTYPE_EDGE, }, /* SDI */ | ||
560 | { .type = S3C_IRQTYPE_EDGE, }, /* SPI0 */ | ||
561 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART1 */ | ||
562 | { .type = S3C_IRQTYPE_NONE, }, /* reserved */ | ||
563 | { .type = S3C_IRQTYPE_EDGE, }, /* USBD */ | ||
564 | { .type = S3C_IRQTYPE_EDGE, }, /* USBH */ | ||
565 | { .type = S3C_IRQTYPE_EDGE, }, /* IIC */ | ||
566 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART0 */ | ||
567 | { .type = S3C_IRQTYPE_EDGE, }, /* SPI1 */ | ||
568 | { .type = S3C_IRQTYPE_EDGE, }, /* RTC */ | ||
569 | { .type = S3C_IRQTYPE_LEVEL, }, /* ADCPARENT */ | ||
570 | }; | ||
571 | |||
572 | static struct s3c_irq_data init_eint[32] = { | ||
573 | { .type = S3C_IRQTYPE_NONE, }, /* reserved */ | ||
574 | { .type = S3C_IRQTYPE_NONE, }, /* reserved */ | ||
575 | { .type = S3C_IRQTYPE_NONE, }, /* reserved */ | ||
576 | { .type = S3C_IRQTYPE_NONE, }, /* reserved */ | ||
577 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 4 }, /* EINT4 */ | ||
578 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 4 }, /* EINT5 */ | ||
579 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 4 }, /* EINT6 */ | ||
580 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 4 }, /* EINT7 */ | ||
581 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT8 */ | ||
582 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT9 */ | ||
583 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT10 */ | ||
584 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT11 */ | ||
585 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT12 */ | ||
586 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT13 */ | ||
587 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT14 */ | ||
588 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT15 */ | ||
589 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT16 */ | ||
590 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT17 */ | ||
591 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT18 */ | ||
592 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT19 */ | ||
593 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT20 */ | ||
594 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT21 */ | ||
595 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT22 */ | ||
596 | { .type = S3C_IRQTYPE_EINT, .parent_irq = 5 }, /* EINT23 */ | ||
597 | }; | ||
598 | |||
599 | static struct s3c_irq_data init_subint[32] = { | ||
600 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-RX */ | ||
601 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-TX */ | ||
602 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-ERR */ | ||
603 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-RX */ | ||
604 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-TX */ | ||
605 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-ERR */ | ||
606 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-RX */ | ||
607 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-TX */ | ||
608 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-ERR */ | ||
609 | { .type = S3C_IRQTYPE_EDGE, .parent_irq = 31 }, /* TC */ | ||
610 | { .type = S3C_IRQTYPE_EDGE, .parent_irq = 31 }, /* ADC */ | ||
611 | }; | ||
612 | |||
613 | void __init s3c24xx_init_irq(void) | ||
614 | { | ||
615 | struct s3c_irq_intc *main_intc; | ||
616 | |||
617 | #ifdef CONFIG_FIQ | ||
618 | init_FIQ(FIQ_START); | ||
619 | #endif | ||
620 | |||
621 | main_intc = s3c24xx_init_intc(NULL, &init_base[0], NULL, 0x4a000000); | ||
622 | if (IS_ERR(main_intc)) { | ||
623 | pr_err("irq: could not create main interrupt controller\n"); | ||
624 | return; | ||
625 | } | ||
626 | |||
627 | s3c24xx_init_intc(NULL, &init_subint[0], main_intc, 0x4a000018); | ||
628 | s3c24xx_init_intc(NULL, &init_eint[0], main_intc, 0x560000a4); | ||
629 | } | ||
630 | |||
631 | #ifdef CONFIG_CPU_S3C2416 | ||
632 | static struct s3c_irq_data init_s3c2416base[32] = { | ||
633 | { .type = S3C_IRQTYPE_EINT, }, /* EINT0 */ | ||
634 | { .type = S3C_IRQTYPE_EINT, }, /* EINT1 */ | ||
635 | { .type = S3C_IRQTYPE_EINT, }, /* EINT2 */ | ||
636 | { .type = S3C_IRQTYPE_EINT, }, /* EINT3 */ | ||
637 | { .type = S3C_IRQTYPE_LEVEL, }, /* EINT4to7 */ | ||
638 | { .type = S3C_IRQTYPE_LEVEL, }, /* EINT8to23 */ | ||
639 | { .type = S3C_IRQTYPE_NONE, }, /* reserved */ | ||
640 | { .type = S3C_IRQTYPE_EDGE, }, /* nBATT_FLT */ | ||
641 | { .type = S3C_IRQTYPE_EDGE, }, /* TICK */ | ||
642 | { .type = S3C_IRQTYPE_LEVEL, }, /* WDT/AC97 */ | ||
643 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER0 */ | ||
644 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER1 */ | ||
645 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER2 */ | ||
646 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER3 */ | ||
647 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER4 */ | ||
648 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART2 */ | ||
649 | { .type = S3C_IRQTYPE_LEVEL, }, /* LCD */ | ||
650 | { .type = S3C_IRQTYPE_LEVEL, }, /* DMA */ | ||
651 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART3 */ | ||
652 | { .type = S3C_IRQTYPE_NONE, }, /* reserved */ | ||
653 | { .type = S3C_IRQTYPE_EDGE, }, /* SDI1 */ | ||
654 | { .type = S3C_IRQTYPE_EDGE, }, /* SDI0 */ | ||
655 | { .type = S3C_IRQTYPE_EDGE, }, /* SPI0 */ | ||
656 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART1 */ | ||
657 | { .type = S3C_IRQTYPE_EDGE, }, /* NAND */ | ||
658 | { .type = S3C_IRQTYPE_EDGE, }, /* USBD */ | ||
659 | { .type = S3C_IRQTYPE_EDGE, }, /* USBH */ | ||
660 | { .type = S3C_IRQTYPE_EDGE, }, /* IIC */ | ||
661 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART0 */ | ||
662 | { .type = S3C_IRQTYPE_NONE, }, | ||
663 | { .type = S3C_IRQTYPE_EDGE, }, /* RTC */ | ||
664 | { .type = S3C_IRQTYPE_LEVEL, }, /* ADCPARENT */ | ||
665 | }; | ||
666 | |||
667 | static struct s3c_irq_data init_s3c2416subint[32] = { | ||
668 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-RX */ | ||
669 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-TX */ | ||
670 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-ERR */ | ||
671 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-RX */ | ||
672 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-TX */ | ||
673 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-ERR */ | ||
674 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-RX */ | ||
675 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-TX */ | ||
676 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-ERR */ | ||
677 | { .type = S3C_IRQTYPE_EDGE, .parent_irq = 31 }, /* TC */ | ||
678 | { .type = S3C_IRQTYPE_EDGE, .parent_irq = 31 }, /* ADC */ | ||
679 | { .type = S3C_IRQTYPE_NONE }, /* reserved */ | ||
680 | { .type = S3C_IRQTYPE_NONE }, /* reserved */ | ||
681 | { .type = S3C_IRQTYPE_NONE }, /* reserved */ | ||
682 | { .type = S3C_IRQTYPE_NONE }, /* reserved */ | ||
683 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 16 }, /* LCD2 */ | ||
684 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 16 }, /* LCD3 */ | ||
685 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 16 }, /* LCD4 */ | ||
686 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA0 */ | ||
687 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA1 */ | ||
688 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA2 */ | ||
689 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA3 */ | ||
690 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA4 */ | ||
691 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA5 */ | ||
692 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 18 }, /* UART3-RX */ | ||
693 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 18 }, /* UART3-TX */ | ||
694 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 18 }, /* UART3-ERR */ | ||
695 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 9 }, /* WDT */ | ||
696 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 9 }, /* AC97 */ | ||
697 | }; | ||
698 | |||
699 | static struct s3c_irq_data init_s3c2416_second[32] = { | ||
700 | { .type = S3C_IRQTYPE_EDGE }, /* 2D */ | ||
701 | { .type = S3C_IRQTYPE_EDGE }, /* IIC1 */ | ||
702 | { .type = S3C_IRQTYPE_NONE }, /* reserved */ | ||
703 | { .type = S3C_IRQTYPE_NONE }, /* reserved */ | ||
704 | { .type = S3C_IRQTYPE_EDGE }, /* PCM0 */ | ||
705 | { .type = S3C_IRQTYPE_EDGE }, /* PCM1 */ | ||
706 | { .type = S3C_IRQTYPE_EDGE }, /* I2S0 */ | ||
707 | { .type = S3C_IRQTYPE_EDGE }, /* I2S1 */ | ||
708 | }; | ||
709 | |||
710 | void __init s3c2416_init_irq(void) | ||
711 | { | ||
712 | struct s3c_irq_intc *main_intc; | ||
713 | |||
714 | pr_info("S3C2416: IRQ Support\n"); | ||
715 | |||
716 | #ifdef CONFIG_FIQ | ||
717 | init_FIQ(FIQ_START); | ||
718 | #endif | ||
719 | |||
720 | main_intc = s3c24xx_init_intc(NULL, &init_s3c2416base[0], NULL, 0x4a000000); | ||
721 | if (IS_ERR(main_intc)) { | ||
722 | pr_err("irq: could not create main interrupt controller\n"); | ||
723 | return; | ||
724 | } | ||
725 | |||
726 | s3c24xx_init_intc(NULL, &init_eint[0], main_intc, 0x560000a4); | ||
727 | s3c24xx_init_intc(NULL, &init_s3c2416subint[0], main_intc, 0x4a000018); | ||
728 | |||
729 | s3c24xx_init_intc(NULL, &init_s3c2416_second[0], NULL, 0x4a000040); | ||
730 | } | ||
731 | |||
732 | #endif | ||
733 | |||
734 | #ifdef CONFIG_CPU_S3C2443 | ||
735 | static struct s3c_irq_data init_s3c2443base[32] = { | ||
736 | { .type = S3C_IRQTYPE_EINT, }, /* EINT0 */ | ||
737 | { .type = S3C_IRQTYPE_EINT, }, /* EINT1 */ | ||
738 | { .type = S3C_IRQTYPE_EINT, }, /* EINT2 */ | ||
739 | { .type = S3C_IRQTYPE_EINT, }, /* EINT3 */ | ||
740 | { .type = S3C_IRQTYPE_LEVEL, }, /* EINT4to7 */ | ||
741 | { .type = S3C_IRQTYPE_LEVEL, }, /* EINT8to23 */ | ||
742 | { .type = S3C_IRQTYPE_LEVEL, }, /* CAM */ | ||
743 | { .type = S3C_IRQTYPE_EDGE, }, /* nBATT_FLT */ | ||
744 | { .type = S3C_IRQTYPE_EDGE, }, /* TICK */ | ||
745 | { .type = S3C_IRQTYPE_LEVEL, }, /* WDT/AC97 */ | ||
746 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER0 */ | ||
747 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER1 */ | ||
748 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER2 */ | ||
749 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER3 */ | ||
750 | { .type = S3C_IRQTYPE_EDGE, }, /* TIMER4 */ | ||
751 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART2 */ | ||
752 | { .type = S3C_IRQTYPE_LEVEL, }, /* LCD */ | ||
753 | { .type = S3C_IRQTYPE_LEVEL, }, /* DMA */ | ||
754 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART3 */ | ||
755 | { .type = S3C_IRQTYPE_EDGE, }, /* CFON */ | ||
756 | { .type = S3C_IRQTYPE_EDGE, }, /* SDI1 */ | ||
757 | { .type = S3C_IRQTYPE_EDGE, }, /* SDI0 */ | ||
758 | { .type = S3C_IRQTYPE_EDGE, }, /* SPI0 */ | ||
759 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART1 */ | ||
760 | { .type = S3C_IRQTYPE_EDGE, }, /* NAND */ | ||
761 | { .type = S3C_IRQTYPE_EDGE, }, /* USBD */ | ||
762 | { .type = S3C_IRQTYPE_EDGE, }, /* USBH */ | ||
763 | { .type = S3C_IRQTYPE_EDGE, }, /* IIC */ | ||
764 | { .type = S3C_IRQTYPE_LEVEL, }, /* UART0 */ | ||
765 | { .type = S3C_IRQTYPE_EDGE, }, /* SPI1 */ | ||
766 | { .type = S3C_IRQTYPE_EDGE, }, /* RTC */ | ||
767 | { .type = S3C_IRQTYPE_LEVEL, }, /* ADCPARENT */ | ||
768 | }; | ||
769 | |||
770 | |||
771 | static struct s3c_irq_data init_s3c2443subint[32] = { | ||
772 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-RX */ | ||
773 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-TX */ | ||
774 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-ERR */ | ||
775 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-RX */ | ||
776 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-TX */ | ||
777 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-ERR */ | ||
778 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-RX */ | ||
779 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-TX */ | ||
780 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-ERR */ | ||
781 | { .type = S3C_IRQTYPE_EDGE, .parent_irq = 31 }, /* TC */ | ||
782 | { .type = S3C_IRQTYPE_EDGE, .parent_irq = 31 }, /* ADC */ | ||
783 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 6 }, /* CAM_C */ | ||
784 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 6 }, /* CAM_P */ | ||
785 | { .type = S3C_IRQTYPE_NONE }, /* reserved */ | ||
786 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 16 }, /* LCD1 */ | ||
787 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 16 }, /* LCD2 */ | ||
788 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 16 }, /* LCD3 */ | ||
789 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 16 }, /* LCD4 */ | ||
790 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA0 */ | ||
791 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA1 */ | ||
792 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA2 */ | ||
793 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA3 */ | ||
794 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA4 */ | ||
795 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 17 }, /* DMA5 */ | ||
796 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 18 }, /* UART3-RX */ | ||
797 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 18 }, /* UART3-TX */ | ||
798 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 18 }, /* UART3-ERR */ | ||
799 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 9 }, /* WDT */ | ||
800 | { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 9 }, /* AC97 */ | ||
801 | }; | ||
802 | |||
803 | void __init s3c2443_init_irq(void) | ||
804 | { | ||
805 | struct s3c_irq_intc *main_intc; | ||
806 | |||
807 | pr_info("S3C2443: IRQ Support\n"); | ||
808 | |||
809 | #ifdef CONFIG_FIQ | ||
810 | init_FIQ(FIQ_START); | ||
811 | #endif | ||
812 | |||
813 | main_intc = s3c24xx_init_intc(NULL, &init_s3c2443base[0], NULL, 0x4a000000); | ||
814 | if (IS_ERR(main_intc)) { | ||
815 | pr_err("irq: could not create main interrupt controller\n"); | ||
816 | return; | ||
817 | } | ||
818 | |||
819 | s3c24xx_init_intc(NULL, &init_eint[0], main_intc, 0x560000a4); | ||
820 | s3c24xx_init_intc(NULL, &init_s3c2443subint[0], main_intc, 0x4a000018); | ||
821 | } | ||
822 | #endif | ||
diff --git a/arch/arm/mach-s3c24xx/mach-anubis.c b/arch/arm/mach-s3c24xx/mach-anubis.c index 85eefab881af..bb595f15ce36 100644 --- a/arch/arm/mach-s3c24xx/mach-anubis.c +++ b/arch/arm/mach-s3c24xx/mach-anubis.c | |||
@@ -28,17 +28,12 @@ | |||
28 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
29 | #include <asm/mach/irq.h> | 29 | #include <asm/mach/irq.h> |
30 | 30 | ||
31 | #include <mach/anubis-map.h> | ||
32 | #include <mach/anubis-irq.h> | ||
33 | #include <mach/anubis-cpld.h> | ||
34 | |||
35 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
36 | #include <asm/irq.h> | 32 | #include <asm/irq.h> |
37 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
38 | 34 | ||
39 | #include <plat/regs-serial.h> | 35 | #include <plat/regs-serial.h> |
40 | #include <mach/regs-gpio.h> | 36 | #include <mach/regs-gpio.h> |
41 | #include <mach/regs-mem.h> | ||
42 | #include <mach/regs-lcd.h> | 37 | #include <mach/regs-lcd.h> |
43 | #include <linux/platform_data/mtd-nand-s3c2410.h> | 38 | #include <linux/platform_data/mtd-nand-s3c2410.h> |
44 | #include <linux/platform_data/i2c-s3c2410.h> | 39 | #include <linux/platform_data/i2c-s3c2410.h> |
@@ -55,8 +50,9 @@ | |||
55 | #include <plat/cpu.h> | 50 | #include <plat/cpu.h> |
56 | #include <linux/platform_data/asoc-s3c24xx_simtec.h> | 51 | #include <linux/platform_data/asoc-s3c24xx_simtec.h> |
57 | 52 | ||
58 | #include "simtec.h" | 53 | #include "anubis.h" |
59 | #include "common.h" | 54 | #include "common.h" |
55 | #include "simtec.h" | ||
60 | 56 | ||
61 | #define COPYRIGHT ", Copyright 2005-2009 Simtec Electronics" | 57 | #define COPYRIGHT ", Copyright 2005-2009 Simtec Electronics" |
62 | 58 | ||
@@ -237,7 +233,7 @@ static struct pata_platform_info anubis_ide_platdata = { | |||
237 | static struct resource anubis_ide0_resource[] = { | 233 | static struct resource anubis_ide0_resource[] = { |
238 | [0] = DEFINE_RES_MEM(S3C2410_CS3, 8 * 32), | 234 | [0] = DEFINE_RES_MEM(S3C2410_CS3, 8 * 32), |
239 | [2] = DEFINE_RES_MEM(S3C2410_CS3 + (1 << 26) + (6 * 32), 32), | 235 | [2] = DEFINE_RES_MEM(S3C2410_CS3 + (1 << 26) + (6 * 32), 32), |
240 | [3] = DEFINE_RES_IRQ(IRQ_IDE0), | 236 | [3] = DEFINE_RES_IRQ(ANUBIS_IRQ_IDE0), |
241 | }; | 237 | }; |
242 | 238 | ||
243 | static struct platform_device anubis_device_ide0 = { | 239 | static struct platform_device anubis_device_ide0 = { |
@@ -254,7 +250,7 @@ static struct platform_device anubis_device_ide0 = { | |||
254 | static struct resource anubis_ide1_resource[] = { | 250 | static struct resource anubis_ide1_resource[] = { |
255 | [0] = DEFINE_RES_MEM(S3C2410_CS4, 8 * 32), | 251 | [0] = DEFINE_RES_MEM(S3C2410_CS4, 8 * 32), |
256 | [1] = DEFINE_RES_MEM(S3C2410_CS4 + (1 << 26) + (6 * 32), 32), | 252 | [1] = DEFINE_RES_MEM(S3C2410_CS4 + (1 << 26) + (6 * 32), 32), |
257 | [2] = DEFINE_RES_IRQ(IRQ_IDE0), | 253 | [2] = DEFINE_RES_IRQ(ANUBIS_IRQ_IDE0), |
258 | }; | 254 | }; |
259 | 255 | ||
260 | static struct platform_device anubis_device_ide1 = { | 256 | static struct platform_device anubis_device_ide1 = { |
@@ -279,7 +275,7 @@ static struct ax_plat_data anubis_asix_platdata = { | |||
279 | 275 | ||
280 | static struct resource anubis_asix_resource[] = { | 276 | static struct resource anubis_asix_resource[] = { |
281 | [0] = DEFINE_RES_MEM(S3C2410_CS5, 0x20 * 0x20), | 277 | [0] = DEFINE_RES_MEM(S3C2410_CS5, 0x20 * 0x20), |
282 | [1] = DEFINE_RES_IRQ(IRQ_ASIX), | 278 | [1] = DEFINE_RES_IRQ(ANUBIS_IRQ_ASIX), |
283 | }; | 279 | }; |
284 | 280 | ||
285 | static struct platform_device anubis_device_asix = { | 281 | static struct platform_device anubis_device_asix = { |
diff --git a/arch/arm/mach-s3c24xx/mach-at2440evb.c b/arch/arm/mach-s3c24xx/mach-at2440evb.c index b31c4aa724f2..b4bc60c78ebb 100644 --- a/arch/arm/mach-s3c24xx/mach-at2440evb.c +++ b/arch/arm/mach-s3c24xx/mach-at2440evb.c | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/types.h> | 16 | #include <linux/types.h> |
17 | #include <linux/gpio.h> | ||
17 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
18 | #include <linux/list.h> | 19 | #include <linux/list.h> |
19 | #include <linux/timer.h> | 20 | #include <linux/timer.h> |
@@ -34,7 +35,6 @@ | |||
34 | 35 | ||
35 | #include <plat/regs-serial.h> | 36 | #include <plat/regs-serial.h> |
36 | #include <mach/regs-gpio.h> | 37 | #include <mach/regs-gpio.h> |
37 | #include <mach/regs-mem.h> | ||
38 | #include <mach/regs-lcd.h> | 38 | #include <mach/regs-lcd.h> |
39 | #include <linux/platform_data/mtd-nand-s3c2410.h> | 39 | #include <linux/platform_data/mtd-nand-s3c2410.h> |
40 | #include <linux/platform_data/i2c-s3c2410.h> | 40 | #include <linux/platform_data/i2c-s3c2410.h> |
diff --git a/arch/arm/mach-s3c24xx/mach-bast.c b/arch/arm/mach-s3c24xx/mach-bast.c index 526964c19dd8..ca6618081041 100644 --- a/arch/arm/mach-s3c24xx/mach-bast.c +++ b/arch/arm/mach-s3c24xx/mach-bast.c | |||
@@ -24,48 +24,41 @@ | |||
24 | #include <linux/ata_platform.h> | 24 | #include <linux/ata_platform.h> |
25 | #include <linux/i2c.h> | 25 | #include <linux/i2c.h> |
26 | #include <linux/io.h> | 26 | #include <linux/io.h> |
27 | #include <linux/serial_8250.h> | ||
28 | |||
29 | #include <linux/mtd/mtd.h> | ||
30 | #include <linux/mtd/nand.h> | ||
31 | #include <linux/mtd/nand_ecc.h> | ||
32 | #include <linux/mtd/partitions.h> | ||
33 | |||
34 | #include <linux/platform_data/asoc-s3c24xx_simtec.h> | ||
35 | #include <linux/platform_data/hwmon-s3c.h> | ||
36 | #include <linux/platform_data/i2c-s3c2410.h> | ||
37 | #include <linux/platform_data/mtd-nand-s3c2410.h> | ||
27 | 38 | ||
28 | #include <net/ax88796.h> | 39 | #include <net/ax88796.h> |
29 | 40 | ||
41 | #include <asm/irq.h> | ||
30 | #include <asm/mach/arch.h> | 42 | #include <asm/mach/arch.h> |
31 | #include <asm/mach/map.h> | 43 | #include <asm/mach/map.h> |
32 | #include <asm/mach/irq.h> | 44 | #include <asm/mach/irq.h> |
33 | |||
34 | #include <mach/bast-map.h> | ||
35 | #include <mach/bast-irq.h> | ||
36 | #include <mach/bast-cpld.h> | ||
37 | |||
38 | #include <mach/hardware.h> | ||
39 | #include <asm/irq.h> | ||
40 | #include <asm/mach-types.h> | 45 | #include <asm/mach-types.h> |
41 | 46 | ||
42 | //#include <asm/debug-ll.h> | 47 | #include <mach/fb.h> |
43 | #include <plat/regs-serial.h> | 48 | #include <mach/hardware.h> |
44 | #include <mach/regs-gpio.h> | 49 | #include <mach/regs-gpio.h> |
45 | #include <mach/regs-mem.h> | ||
46 | #include <mach/regs-lcd.h> | 50 | #include <mach/regs-lcd.h> |
47 | 51 | ||
48 | #include <linux/platform_data/hwmon-s3c.h> | ||
49 | #include <linux/platform_data/mtd-nand-s3c2410.h> | ||
50 | #include <linux/platform_data/i2c-s3c2410.h> | ||
51 | #include <mach/fb.h> | ||
52 | |||
53 | #include <linux/mtd/mtd.h> | ||
54 | #include <linux/mtd/nand.h> | ||
55 | #include <linux/mtd/nand_ecc.h> | ||
56 | #include <linux/mtd/partitions.h> | ||
57 | |||
58 | #include <linux/serial_8250.h> | ||
59 | |||
60 | #include <plat/clock.h> | 52 | #include <plat/clock.h> |
61 | #include <plat/devs.h> | ||
62 | #include <plat/cpu.h> | 53 | #include <plat/cpu.h> |
63 | #include <plat/cpu-freq.h> | 54 | #include <plat/cpu-freq.h> |
55 | #include <plat/devs.h> | ||
64 | #include <plat/gpio-cfg.h> | 56 | #include <plat/gpio-cfg.h> |
65 | #include <linux/platform_data/asoc-s3c24xx_simtec.h> | 57 | #include <plat/regs-serial.h> |
66 | 58 | ||
67 | #include "simtec.h" | 59 | #include "bast.h" |
68 | #include "common.h" | 60 | #include "common.h" |
61 | #include "simtec.h" | ||
69 | 62 | ||
70 | #define COPYRIGHT ", Copyright 2004-2008 Simtec Electronics" | 63 | #define COPYRIGHT ", Copyright 2004-2008 Simtec Electronics" |
71 | 64 | ||
@@ -312,7 +305,7 @@ static struct s3c2410_platform_nand __initdata bast_nand_info = { | |||
312 | static struct resource bast_dm9k_resource[] = { | 305 | static struct resource bast_dm9k_resource[] = { |
313 | [0] = DEFINE_RES_MEM(S3C2410_CS5 + BAST_PA_DM9000, 4), | 306 | [0] = DEFINE_RES_MEM(S3C2410_CS5 + BAST_PA_DM9000, 4), |
314 | [1] = DEFINE_RES_MEM(S3C2410_CS5 + BAST_PA_DM9000 + 0x40, 0x40), | 307 | [1] = DEFINE_RES_MEM(S3C2410_CS5 + BAST_PA_DM9000 + 0x40, 0x40), |
315 | [2] = DEFINE_RES_NAMED(IRQ_DM9000 , 1, NULL, IORESOURCE_IRQ \ | 308 | [2] = DEFINE_RES_NAMED(BAST_IRQ_DM9000 , 1, NULL, IORESOURCE_IRQ \ |
316 | | IORESOURCE_IRQ_HIGHLEVEL), | 309 | | IORESOURCE_IRQ_HIGHLEVEL), |
317 | }; | 310 | }; |
318 | 311 | ||
@@ -343,7 +336,7 @@ static struct platform_device bast_device_dm9k = { | |||
343 | static struct plat_serial8250_port bast_sio_data[] = { | 336 | static struct plat_serial8250_port bast_sio_data[] = { |
344 | [0] = { | 337 | [0] = { |
345 | .mapbase = SERIAL_BASE + 0x2f8, | 338 | .mapbase = SERIAL_BASE + 0x2f8, |
346 | .irq = IRQ_PCSERIAL1, | 339 | .irq = BAST_IRQ_PCSERIAL1, |
347 | .flags = SERIAL_FLAGS, | 340 | .flags = SERIAL_FLAGS, |
348 | .iotype = UPIO_MEM, | 341 | .iotype = UPIO_MEM, |
349 | .regshift = 0, | 342 | .regshift = 0, |
@@ -351,7 +344,7 @@ static struct plat_serial8250_port bast_sio_data[] = { | |||
351 | }, | 344 | }, |
352 | [1] = { | 345 | [1] = { |
353 | .mapbase = SERIAL_BASE + 0x3f8, | 346 | .mapbase = SERIAL_BASE + 0x3f8, |
354 | .irq = IRQ_PCSERIAL2, | 347 | .irq = BAST_IRQ_PCSERIAL2, |
355 | .flags = SERIAL_FLAGS, | 348 | .flags = SERIAL_FLAGS, |
356 | .iotype = UPIO_MEM, | 349 | .iotype = UPIO_MEM, |
357 | .regshift = 0, | 350 | .regshift = 0, |
@@ -390,7 +383,7 @@ static struct ax_plat_data bast_asix_platdata = { | |||
390 | static struct resource bast_asix_resource[] = { | 383 | static struct resource bast_asix_resource[] = { |
391 | [0] = DEFINE_RES_MEM(S3C2410_CS5 + BAST_PA_ASIXNET, 0x18 * 0x20), | 384 | [0] = DEFINE_RES_MEM(S3C2410_CS5 + BAST_PA_ASIXNET, 0x18 * 0x20), |
392 | [1] = DEFINE_RES_MEM(S3C2410_CS5 + BAST_PA_ASIXNET + (0x1f * 0x20), 1), | 385 | [1] = DEFINE_RES_MEM(S3C2410_CS5 + BAST_PA_ASIXNET + (0x1f * 0x20), 1), |
393 | [2] = DEFINE_RES_IRQ(IRQ_ASIX), | 386 | [2] = DEFINE_RES_IRQ(BAST_IRQ_ASIX), |
394 | }; | 387 | }; |
395 | 388 | ||
396 | static struct platform_device bast_device_asix = { | 389 | static struct platform_device bast_device_asix = { |
diff --git a/arch/arm/mach-s3c24xx/mach-gta02.c b/arch/arm/mach-s3c24xx/mach-gta02.c index fb5d3b3b53db..a25e8c5a7b4c 100644 --- a/arch/arm/mach-s3c24xx/mach-gta02.c +++ b/arch/arm/mach-s3c24xx/mach-gta02.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/arm/mach-s3c2442/mach-gta02.c | ||
3 | * | ||
4 | * S3C2442 Machine Support for Openmoko GTA02 / FreeRunner. | 2 | * S3C2442 Machine Support for Openmoko GTA02 / FreeRunner. |
5 | * | 3 | * |
6 | * Copyright (C) 2006-2009 by Openmoko, Inc. | 4 | * Copyright (C) 2006-2009 by Openmoko, Inc. |
@@ -23,7 +21,6 @@ | |||
23 | * along with this program; if not, write to the Free Software | 21 | * along with this program; if not, write to the Free Software |
24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | 22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
25 | * MA 02111-1307 USA | 23 | * MA 02111-1307 USA |
26 | * | ||
27 | */ | 24 | */ |
28 | 25 | ||
29 | #include <linux/kernel.h> | 26 | #include <linux/kernel.h> |
@@ -34,62 +31,59 @@ | |||
34 | #include <linux/timer.h> | 31 | #include <linux/timer.h> |
35 | #include <linux/init.h> | 32 | #include <linux/init.h> |
36 | #include <linux/gpio.h> | 33 | #include <linux/gpio.h> |
34 | #include <linux/gpio_keys.h> | ||
37 | #include <linux/workqueue.h> | 35 | #include <linux/workqueue.h> |
38 | #include <linux/platform_device.h> | 36 | #include <linux/platform_device.h> |
39 | #include <linux/serial_core.h> | 37 | #include <linux/serial_core.h> |
40 | #include <linux/spi/spi.h> | 38 | #include <linux/input.h> |
41 | #include <linux/spi/s3c24xx.h> | 39 | #include <linux/io.h> |
40 | #include <linux/i2c.h> | ||
42 | 41 | ||
43 | #include <linux/mmc/host.h> | 42 | #include <linux/mmc/host.h> |
44 | 43 | ||
44 | #include <linux/mfd/pcf50633/adc.h> | ||
45 | #include <linux/mfd/pcf50633/backlight.h> | ||
46 | #include <linux/mfd/pcf50633/core.h> | ||
47 | #include <linux/mfd/pcf50633/gpio.h> | ||
48 | #include <linux/mfd/pcf50633/mbc.h> | ||
49 | #include <linux/mfd/pcf50633/pmic.h> | ||
50 | |||
45 | #include <linux/mtd/mtd.h> | 51 | #include <linux/mtd/mtd.h> |
46 | #include <linux/mtd/nand.h> | 52 | #include <linux/mtd/nand.h> |
47 | #include <linux/mtd/nand_ecc.h> | 53 | #include <linux/mtd/nand_ecc.h> |
48 | #include <linux/mtd/partitions.h> | 54 | #include <linux/mtd/partitions.h> |
49 | #include <linux/mtd/physmap.h> | 55 | #include <linux/mtd/physmap.h> |
50 | #include <linux/io.h> | ||
51 | 56 | ||
52 | #include <linux/i2c.h> | ||
53 | #include <linux/regulator/machine.h> | 57 | #include <linux/regulator/machine.h> |
54 | 58 | ||
55 | #include <linux/mfd/pcf50633/core.h> | 59 | #include <linux/spi/spi.h> |
56 | #include <linux/mfd/pcf50633/mbc.h> | 60 | #include <linux/spi/s3c24xx.h> |
57 | #include <linux/mfd/pcf50633/adc.h> | ||
58 | #include <linux/mfd/pcf50633/gpio.h> | ||
59 | #include <linux/mfd/pcf50633/pmic.h> | ||
60 | #include <linux/mfd/pcf50633/backlight.h> | ||
61 | |||
62 | #include <linux/input.h> | ||
63 | #include <linux/gpio_keys.h> | ||
64 | 61 | ||
62 | #include <asm/irq.h> | ||
63 | #include <asm/mach-types.h> | ||
65 | #include <asm/mach/arch.h> | 64 | #include <asm/mach/arch.h> |
66 | #include <asm/mach/map.h> | 65 | #include <asm/mach/map.h> |
67 | #include <asm/mach/irq.h> | 66 | #include <asm/mach/irq.h> |
68 | 67 | ||
69 | #include <asm/irq.h> | 68 | #include <linux/platform_data/i2c-s3c2410.h> |
70 | #include <asm/mach-types.h> | 69 | #include <linux/platform_data/mtd-nand-s3c2410.h> |
70 | #include <linux/platform_data/touchscreen-s3c2410.h> | ||
71 | #include <linux/platform_data/usb-ohci-s3c2410.h> | ||
72 | #include <linux/platform_data/usb-s3c2410_udc.h> | ||
71 | 73 | ||
72 | #include <mach/regs-irq.h> | ||
73 | #include <mach/regs-gpio.h> | ||
74 | #include <mach/fb.h> | 74 | #include <mach/fb.h> |
75 | |||
76 | #include <linux/platform_data/usb-ohci-s3c2410.h> | ||
77 | #include <mach/regs-mem.h> | ||
78 | #include <mach/hardware.h> | 75 | #include <mach/hardware.h> |
76 | #include <mach/regs-gpio.h> | ||
77 | #include <mach/regs-irq.h> | ||
79 | 78 | ||
80 | #include <mach/gta02.h> | ||
81 | |||
82 | #include <plat/regs-serial.h> | ||
83 | #include <linux/platform_data/mtd-nand-s3c2410.h> | ||
84 | #include <plat/devs.h> | ||
85 | #include <plat/cpu.h> | 79 | #include <plat/cpu.h> |
86 | #include <plat/pm.h> | 80 | #include <plat/devs.h> |
87 | #include <linux/platform_data/usb-s3c2410_udc.h> | ||
88 | #include <plat/gpio-cfg.h> | 81 | #include <plat/gpio-cfg.h> |
89 | #include <linux/platform_data/i2c-s3c2410.h> | 82 | #include <plat/pm.h> |
90 | #include <linux/platform_data/touchscreen-s3c2410.h> | 83 | #include <plat/regs-serial.h> |
91 | 84 | ||
92 | #include "common.h" | 85 | #include "common.h" |
86 | #include "gta02.h" | ||
93 | 87 | ||
94 | static struct pcf50633 *gta02_pcf; | 88 | static struct pcf50633 *gta02_pcf; |
95 | 89 | ||
diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c index 2eb09e27c13c..79bc0830d740 100644 --- a/arch/arm/mach-s3c24xx/mach-h1940.c +++ b/arch/arm/mach-s3c24xx/mach-h1940.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/mach-h1940.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2003-2005 Simtec Electronics | 2 | * Copyright (c) 2003-2005 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 3 | * Ben Dooks <ben@simtec.co.uk> |
5 | * | 4 | * |
@@ -37,40 +36,36 @@ | |||
37 | #include <linux/mmc/host.h> | 36 | #include <linux/mmc/host.h> |
38 | #include <linux/export.h> | 37 | #include <linux/export.h> |
39 | 38 | ||
39 | #include <asm/irq.h> | ||
40 | #include <asm/mach-types.h> | ||
40 | #include <asm/mach/arch.h> | 41 | #include <asm/mach/arch.h> |
41 | #include <asm/mach/map.h> | 42 | #include <asm/mach/map.h> |
42 | #include <asm/mach/irq.h> | 43 | #include <asm/mach/irq.h> |
43 | 44 | ||
44 | #include <mach/hardware.h> | 45 | #include <linux/platform_data/i2c-s3c2410.h> |
45 | #include <asm/irq.h> | 46 | #include <linux/platform_data/mmc-s3cmci.h> |
46 | #include <asm/mach-types.h> | 47 | #include <linux/platform_data/touchscreen-s3c2410.h> |
47 | 48 | #include <linux/platform_data/usb-s3c2410_udc.h> | |
48 | #include <plat/regs-serial.h> | ||
49 | #include <mach/regs-lcd.h> | ||
50 | #include <mach/regs-clock.h> | ||
51 | 49 | ||
52 | #include <mach/regs-gpio.h> | 50 | #include <sound/uda1380.h> |
53 | #include <mach/gpio-fns.h> | ||
54 | #include <mach/gpio-nrs.h> | ||
55 | 51 | ||
56 | #include <mach/h1940.h> | ||
57 | #include <mach/h1940-latch.h> | ||
58 | #include <mach/fb.h> | 52 | #include <mach/fb.h> |
59 | #include <linux/platform_data/usb-s3c2410_udc.h> | 53 | #include <mach/hardware.h> |
60 | #include <linux/platform_data/i2c-s3c2410.h> | 54 | #include <mach/regs-clock.h> |
55 | #include <mach/regs-gpio.h> | ||
56 | #include <mach/regs-lcd.h> | ||
61 | 57 | ||
62 | #include <plat/gpio-cfg.h> | ||
63 | #include <plat/clock.h> | 58 | #include <plat/clock.h> |
64 | #include <plat/devs.h> | ||
65 | #include <plat/cpu.h> | 59 | #include <plat/cpu.h> |
60 | #include <plat/devs.h> | ||
61 | #include <plat/gpio-cfg.h> | ||
66 | #include <plat/pll.h> | 62 | #include <plat/pll.h> |
67 | #include <plat/pm.h> | 63 | #include <plat/pm.h> |
68 | #include <linux/platform_data/mmc-s3cmci.h> | 64 | #include <plat/regs-serial.h> |
69 | #include <linux/platform_data/touchscreen-s3c2410.h> | ||
70 | 65 | ||
71 | #include <sound/uda1380.h> | ||
72 | 66 | ||
73 | #include "common.h" | 67 | #include "common.h" |
68 | #include "h1940.h" | ||
74 | 69 | ||
75 | #define H1940_LATCH ((void __force __iomem *)0xF8000000) | 70 | #define H1940_LATCH ((void __force __iomem *)0xF8000000) |
76 | 71 | ||
diff --git a/arch/arm/mach-s3c24xx/mach-jive.c b/arch/arm/mach-s3c24xx/mach-jive.c index d7a172555238..54e83c1f780c 100644 --- a/arch/arm/mach-s3c24xx/mach-jive.c +++ b/arch/arm/mach-s3c24xx/mach-jive.c | |||
@@ -35,9 +35,7 @@ | |||
35 | #include <linux/platform_data/mtd-nand-s3c2410.h> | 35 | #include <linux/platform_data/mtd-nand-s3c2410.h> |
36 | #include <linux/platform_data/i2c-s3c2410.h> | 36 | #include <linux/platform_data/i2c-s3c2410.h> |
37 | 37 | ||
38 | #include <mach/regs-power.h> | ||
39 | #include <mach/regs-gpio.h> | 38 | #include <mach/regs-gpio.h> |
40 | #include <mach/regs-mem.h> | ||
41 | #include <mach/regs-lcd.h> | 39 | #include <mach/regs-lcd.h> |
42 | #include <mach/fb.h> | 40 | #include <mach/fb.h> |
43 | 41 | ||
@@ -56,6 +54,8 @@ | |||
56 | #include <plat/pm.h> | 54 | #include <plat/pm.h> |
57 | #include <linux/platform_data/usb-s3c2410_udc.h> | 55 | #include <linux/platform_data/usb-s3c2410_udc.h> |
58 | 56 | ||
57 | #include "s3c2412-power.h" | ||
58 | |||
59 | static struct map_desc jive_iodesc[] __initdata = { | 59 | static struct map_desc jive_iodesc[] __initdata = { |
60 | }; | 60 | }; |
61 | 61 | ||
diff --git a/arch/arm/mach-s3c24xx/mach-mini2440.c b/arch/arm/mach-s3c24xx/mach-mini2440.c index 2db09ade9b50..2865e5919f2c 100644 --- a/arch/arm/mach-s3c24xx/mach-mini2440.c +++ b/arch/arm/mach-s3c24xx/mach-mini2440.c | |||
@@ -40,7 +40,6 @@ | |||
40 | #include <plat/regs-serial.h> | 40 | #include <plat/regs-serial.h> |
41 | #include <mach/regs-gpio.h> | 41 | #include <mach/regs-gpio.h> |
42 | #include <linux/platform_data/leds-s3c24xx.h> | 42 | #include <linux/platform_data/leds-s3c24xx.h> |
43 | #include <mach/regs-mem.h> | ||
44 | #include <mach/regs-lcd.h> | 43 | #include <mach/regs-lcd.h> |
45 | #include <mach/irqs.h> | 44 | #include <mach/irqs.h> |
46 | #include <linux/platform_data/mtd-nand-s3c2410.h> | 45 | #include <linux/platform_data/mtd-nand-s3c2410.h> |
diff --git a/arch/arm/mach-s3c24xx/mach-osiris.c b/arch/arm/mach-s3c24xx/mach-osiris.c index ba0f5b5ec19e..ae2cbdf3e3ca 100644 --- a/arch/arm/mach-s3c24xx/mach-osiris.c +++ b/arch/arm/mach-s3c24xx/mach-osiris.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s3c2440/mach-osiris.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2005-2008 Simtec Electronics | 2 | * Copyright (c) 2005-2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -22,25 +21,16 @@ | |||
22 | #include <linux/clk.h> | 21 | #include <linux/clk.h> |
23 | #include <linux/i2c.h> | 22 | #include <linux/i2c.h> |
24 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/platform_device.h> | ||
25 | 25 | ||
26 | #include <linux/i2c/tps65010.h> | 26 | #include <linux/i2c/tps65010.h> |
27 | 27 | ||
28 | #include <asm/mach-types.h> | ||
28 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
29 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
30 | #include <asm/mach/irq.h> | 31 | #include <asm/mach/irq.h> |
31 | |||
32 | #include <mach/osiris-map.h> | ||
33 | #include <mach/osiris-cpld.h> | ||
34 | |||
35 | #include <mach/hardware.h> | ||
36 | #include <asm/irq.h> | 32 | #include <asm/irq.h> |
37 | #include <asm/mach-types.h> | ||
38 | 33 | ||
39 | #include <plat/cpu-freq.h> | ||
40 | #include <plat/regs-serial.h> | ||
41 | #include <mach/regs-gpio.h> | ||
42 | #include <mach/regs-mem.h> | ||
43 | #include <mach/regs-lcd.h> | ||
44 | #include <linux/platform_data/mtd-nand-s3c2410.h> | 34 | #include <linux/platform_data/mtd-nand-s3c2410.h> |
45 | #include <linux/platform_data/i2c-s3c2410.h> | 35 | #include <linux/platform_data/i2c-s3c2410.h> |
46 | 36 | ||
@@ -49,12 +39,20 @@ | |||
49 | #include <linux/mtd/nand_ecc.h> | 39 | #include <linux/mtd/nand_ecc.h> |
50 | #include <linux/mtd/partitions.h> | 40 | #include <linux/mtd/partitions.h> |
51 | 41 | ||
52 | #include <plat/gpio-cfg.h> | ||
53 | #include <plat/clock.h> | 42 | #include <plat/clock.h> |
54 | #include <plat/devs.h> | ||
55 | #include <plat/cpu.h> | 43 | #include <plat/cpu.h> |
44 | #include <plat/cpu-freq.h> | ||
45 | #include <plat/devs.h> | ||
46 | #include <plat/gpio-cfg.h> | ||
47 | #include <plat/regs-serial.h> | ||
48 | |||
49 | #include <mach/hardware.h> | ||
50 | #include <mach/regs-gpio.h> | ||
51 | #include <mach/regs-lcd.h> | ||
56 | 52 | ||
57 | #include "common.h" | 53 | #include "common.h" |
54 | #include "osiris.h" | ||
55 | #include "regs-mem.h" | ||
58 | 56 | ||
59 | /* onboard perihperal map */ | 57 | /* onboard perihperal map */ |
60 | 58 | ||
diff --git a/arch/arm/mach-s3c24xx/mach-otom.c b/arch/arm/mach-s3c24xx/mach-otom.c index e0fdae93aa7b..40a47d6c6a85 100644 --- a/arch/arm/mach-s3c24xx/mach-otom.c +++ b/arch/arm/mach-s3c24xx/mach-otom.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/mach-otom.c | 1 | /* |
2 | * | 2 | * |
3 | * Copyright (c) 2004 Nex Vision | 3 | * Copyright (c) 2004 Nex Vision |
4 | * Guillaume GOURAT <guillaume.gourat@nexvision.fr> | 4 | * Guillaume GOURAT <guillaume.gourat@nexvision.fr> |
@@ -6,7 +6,6 @@ | |||
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
9 | * | ||
10 | */ | 9 | */ |
11 | 10 | ||
12 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
@@ -19,26 +18,25 @@ | |||
19 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
20 | #include <linux/io.h> | 19 | #include <linux/io.h> |
21 | 20 | ||
21 | #include <linux/platform_data/i2c-s3c2410.h> | ||
22 | |||
23 | #include <asm/irq.h> | ||
24 | #include <asm/mach-types.h> | ||
22 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
23 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
24 | #include <asm/mach/irq.h> | 27 | #include <asm/mach/irq.h> |
25 | 28 | ||
26 | #include <mach/otom-map.h> | ||
27 | |||
28 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
29 | #include <asm/irq.h> | ||
30 | #include <asm/mach-types.h> | ||
31 | |||
32 | #include <plat/regs-serial.h> | ||
33 | #include <mach/regs-gpio.h> | 30 | #include <mach/regs-gpio.h> |
34 | 31 | ||
35 | #include <plat/s3c2410.h> | ||
36 | #include <plat/clock.h> | 32 | #include <plat/clock.h> |
37 | #include <plat/devs.h> | ||
38 | #include <linux/platform_data/i2c-s3c2410.h> | ||
39 | #include <plat/cpu.h> | 33 | #include <plat/cpu.h> |
34 | #include <plat/devs.h> | ||
35 | #include <plat/regs-serial.h> | ||
36 | #include <plat/s3c2410.h> | ||
40 | 37 | ||
41 | #include "common.h" | 38 | #include "common.h" |
39 | #include "otom.h" | ||
42 | 40 | ||
43 | static struct map_desc otom11_iodesc[] __initdata = { | 41 | static struct map_desc otom11_iodesc[] __initdata = { |
44 | /* Device area */ | 42 | /* Device area */ |
diff --git a/arch/arm/mach-s3c24xx/mach-rx1950.c b/arch/arm/mach-s3c24xx/mach-rx1950.c index e14ec7105a6d..1f9ba2ae5288 100644 --- a/arch/arm/mach-s3c24xx/mach-rx1950.c +++ b/arch/arm/mach-s3c24xx/mach-rx1950.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s3c2440/mach-rx1950.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006-2009 Victor Chukhantsev, Denis Grigoriev, | 2 | * Copyright (c) 2006-2009 Victor Chukhantsev, Denis Grigoriev, |
4 | * Copyright (c) 2007-2010 Vasily Khoruzhick | 3 | * Copyright (c) 2007-2010 Vasily Khoruzhick |
5 | * | 4 | * |
@@ -37,31 +36,31 @@ | |||
37 | 36 | ||
38 | #include <linux/mmc/host.h> | 37 | #include <linux/mmc/host.h> |
39 | 38 | ||
39 | #include <asm/mach-types.h> | ||
40 | #include <asm/mach/arch.h> | 40 | #include <asm/mach/arch.h> |
41 | #include <asm/mach/map.h> | 41 | #include <asm/mach/map.h> |
42 | #include <asm/mach-types.h> | ||
43 | 42 | ||
43 | #include <linux/platform_data/i2c-s3c2410.h> | ||
44 | #include <linux/platform_data/mmc-s3cmci.h> | ||
45 | #include <linux/platform_data/mtd-nand-s3c2410.h> | ||
46 | #include <linux/platform_data/touchscreen-s3c2410.h> | ||
47 | #include <linux/platform_data/usb-s3c2410_udc.h> | ||
48 | |||
49 | #include <sound/uda1380.h> | ||
50 | |||
51 | #include <mach/fb.h> | ||
44 | #include <mach/regs-gpio.h> | 52 | #include <mach/regs-gpio.h> |
45 | #include <mach/regs-lcd.h> | 53 | #include <mach/regs-lcd.h> |
46 | #include <mach/h1940.h> | ||
47 | #include <mach/fb.h> | ||
48 | 54 | ||
49 | #include <plat/clock.h> | 55 | #include <plat/clock.h> |
50 | #include <plat/regs-serial.h> | ||
51 | #include <plat/regs-iic.h> | ||
52 | #include <linux/platform_data/mmc-s3cmci.h> | ||
53 | #include <linux/platform_data/usb-s3c2410_udc.h> | ||
54 | #include <linux/platform_data/mtd-nand-s3c2410.h> | ||
55 | #include <linux/platform_data/i2c-s3c2410.h> | ||
56 | #include <plat/devs.h> | ||
57 | #include <plat/cpu.h> | 56 | #include <plat/cpu.h> |
57 | #include <plat/devs.h> | ||
58 | #include <plat/pm.h> | 58 | #include <plat/pm.h> |
59 | #include <plat/irq.h> | 59 | #include <plat/regs-iic.h> |
60 | #include <linux/platform_data/touchscreen-s3c2410.h> | 60 | #include <plat/regs-serial.h> |
61 | |||
62 | #include <sound/uda1380.h> | ||
63 | 61 | ||
64 | #include "common.h" | 62 | #include "common.h" |
63 | #include "h1940.h" | ||
65 | 64 | ||
66 | #define LCD_PWM_PERIOD 192960 | 65 | #define LCD_PWM_PERIOD 192960 |
67 | #define LCD_PWM_DUTY 127353 | 66 | #define LCD_PWM_DUTY 127353 |
diff --git a/arch/arm/mach-s3c24xx/mach-rx3715.c b/arch/arm/mach-s3c24xx/mach-rx3715.c index d00caa8de922..f20418a2fb1b 100644 --- a/arch/arm/mach-s3c24xx/mach-rx3715.c +++ b/arch/arm/mach-s3c24xx/mach-rx3715.c | |||
@@ -31,27 +31,27 @@ | |||
31 | #include <linux/mtd/partitions.h> | 31 | #include <linux/mtd/partitions.h> |
32 | 32 | ||
33 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
34 | #include <asm/mach/map.h> | ||
35 | #include <asm/mach/irq.h> | 34 | #include <asm/mach/irq.h> |
35 | #include <asm/mach/map.h> | ||
36 | |||
37 | #include <linux/platform_data/mtd-nand-s3c2410.h> | ||
36 | 38 | ||
37 | #include <mach/hardware.h> | ||
38 | #include <asm/irq.h> | 39 | #include <asm/irq.h> |
39 | #include <asm/mach-types.h> | 40 | #include <asm/mach-types.h> |
40 | 41 | ||
41 | #include <plat/regs-serial.h> | 42 | #include <mach/fb.h> |
43 | #include <mach/hardware.h> | ||
42 | #include <mach/regs-gpio.h> | 44 | #include <mach/regs-gpio.h> |
43 | #include <mach/regs-lcd.h> | 45 | #include <mach/regs-lcd.h> |
44 | 46 | ||
45 | #include <mach/h1940.h> | ||
46 | #include <linux/platform_data/mtd-nand-s3c2410.h> | ||
47 | #include <mach/fb.h> | ||
48 | |||
49 | #include <plat/clock.h> | 47 | #include <plat/clock.h> |
50 | #include <plat/devs.h> | ||
51 | #include <plat/cpu.h> | 48 | #include <plat/cpu.h> |
49 | #include <plat/devs.h> | ||
52 | #include <plat/pm.h> | 50 | #include <plat/pm.h> |
51 | #include <plat/regs-serial.h> | ||
53 | 52 | ||
54 | #include "common.h" | 53 | #include "common.h" |
54 | #include "h1940.h" | ||
55 | 55 | ||
56 | static struct map_desc rx3715_iodesc[] __initdata = { | 56 | static struct map_desc rx3715_iodesc[] __initdata = { |
57 | /* dump ISA space somewhere unused */ | 57 | /* dump ISA space somewhere unused */ |
diff --git a/arch/arm/mach-s3c24xx/mach-smdk2413.c b/arch/arm/mach-s3c24xx/mach-smdk2413.c index 69f356e83790..86d7847c9d45 100644 --- a/arch/arm/mach-s3c24xx/mach-smdk2413.c +++ b/arch/arm/mach-s3c24xx/mach-smdk2413.c | |||
@@ -37,7 +37,6 @@ | |||
37 | #include <mach/regs-gpio.h> | 37 | #include <mach/regs-gpio.h> |
38 | #include <mach/regs-lcd.h> | 38 | #include <mach/regs-lcd.h> |
39 | 39 | ||
40 | #include <mach/idle.h> | ||
41 | #include <linux/platform_data/usb-s3c2410_udc.h> | 40 | #include <linux/platform_data/usb-s3c2410_udc.h> |
42 | #include <linux/platform_data/i2c-s3c2410.h> | 41 | #include <linux/platform_data/i2c-s3c2410.h> |
43 | #include <mach/fb.h> | 42 | #include <mach/fb.h> |
diff --git a/arch/arm/mach-s3c24xx/mach-smdk2416.c b/arch/arm/mach-s3c24xx/mach-smdk2416.c index fe160c7f4b0a..ebb2e61f3d07 100644 --- a/arch/arm/mach-s3c24xx/mach-smdk2416.c +++ b/arch/arm/mach-s3c24xx/mach-smdk2416.c | |||
@@ -39,7 +39,6 @@ | |||
39 | #include <mach/regs-lcd.h> | 39 | #include <mach/regs-lcd.h> |
40 | #include <mach/regs-s3c2443-clock.h> | 40 | #include <mach/regs-s3c2443-clock.h> |
41 | 41 | ||
42 | #include <mach/idle.h> | ||
43 | #include <linux/platform_data/leds-s3c24xx.h> | 42 | #include <linux/platform_data/leds-s3c24xx.h> |
44 | #include <linux/platform_data/i2c-s3c2410.h> | 43 | #include <linux/platform_data/i2c-s3c2410.h> |
45 | 44 | ||
@@ -251,7 +250,7 @@ MACHINE_START(SMDK2416, "SMDK2416") | |||
251 | /* Maintainer: Yauhen Kharuzhy <jekhor@gmail.com> */ | 250 | /* Maintainer: Yauhen Kharuzhy <jekhor@gmail.com> */ |
252 | .atag_offset = 0x100, | 251 | .atag_offset = 0x100, |
253 | 252 | ||
254 | .init_irq = s3c24xx_init_irq, | 253 | .init_irq = s3c2416_init_irq, |
255 | .map_io = smdk2416_map_io, | 254 | .map_io = smdk2416_map_io, |
256 | .init_machine = smdk2416_machine_init, | 255 | .init_machine = smdk2416_machine_init, |
257 | .init_time = s3c24xx_timer_init, | 256 | .init_time = s3c24xx_timer_init, |
diff --git a/arch/arm/mach-s3c24xx/mach-smdk2440.c b/arch/arm/mach-s3c24xx/mach-smdk2440.c index a8fdafedc4c1..08cc38c8a4ae 100644 --- a/arch/arm/mach-s3c24xx/mach-smdk2440.c +++ b/arch/arm/mach-s3c24xx/mach-smdk2440.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <mach/regs-gpio.h> | 35 | #include <mach/regs-gpio.h> |
36 | #include <mach/regs-lcd.h> | 36 | #include <mach/regs-lcd.h> |
37 | 37 | ||
38 | #include <mach/idle.h> | ||
39 | #include <mach/fb.h> | 38 | #include <mach/fb.h> |
40 | #include <linux/platform_data/i2c-s3c2410.h> | 39 | #include <linux/platform_data/i2c-s3c2410.h> |
41 | 40 | ||
diff --git a/arch/arm/mach-s3c24xx/mach-smdk2443.c b/arch/arm/mach-s3c24xx/mach-smdk2443.c index 7830d7004306..fc65d74d3c73 100644 --- a/arch/arm/mach-s3c24xx/mach-smdk2443.c +++ b/arch/arm/mach-s3c24xx/mach-smdk2443.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <mach/regs-gpio.h> | 35 | #include <mach/regs-gpio.h> |
36 | #include <mach/regs-lcd.h> | 36 | #include <mach/regs-lcd.h> |
37 | 37 | ||
38 | #include <mach/idle.h> | ||
39 | #include <mach/fb.h> | 38 | #include <mach/fb.h> |
40 | #include <linux/platform_data/i2c-s3c2410.h> | 39 | #include <linux/platform_data/i2c-s3c2410.h> |
41 | 40 | ||
@@ -141,7 +140,7 @@ MACHINE_START(SMDK2443, "SMDK2443") | |||
141 | /* Maintainer: Ben Dooks <ben-linux@fluff.org> */ | 140 | /* Maintainer: Ben Dooks <ben-linux@fluff.org> */ |
142 | .atag_offset = 0x100, | 141 | .atag_offset = 0x100, |
143 | 142 | ||
144 | .init_irq = s3c24xx_init_irq, | 143 | .init_irq = s3c2443_init_irq, |
145 | .map_io = smdk2443_map_io, | 144 | .map_io = smdk2443_map_io, |
146 | .init_machine = smdk2443_machine_init, | 145 | .init_machine = smdk2443_machine_init, |
147 | .init_time = s3c24xx_timer_init, | 146 | .init_time = s3c24xx_timer_init, |
diff --git a/arch/arm/mach-s3c24xx/mach-vr1000.c b/arch/arm/mach-s3c24xx/mach-vr1000.c index dda21a01e3cc..ec42d1e4e465 100644 --- a/arch/arm/mach-s3c24xx/mach-vr1000.c +++ b/arch/arm/mach-s3c24xx/mach-vr1000.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/mach-vr1000.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2003-2008 Simtec Electronics | 2 | * Copyright (c) 2003-2008 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 3 | * Ben Dooks <ben@simtec.co.uk> |
5 | * | 4 | * |
@@ -32,27 +31,25 @@ | |||
32 | #include <asm/mach/map.h> | 31 | #include <asm/mach/map.h> |
33 | #include <asm/mach/irq.h> | 32 | #include <asm/mach/irq.h> |
34 | 33 | ||
35 | #include <mach/bast-map.h> | ||
36 | #include <mach/vr1000-map.h> | ||
37 | #include <mach/vr1000-irq.h> | ||
38 | #include <mach/vr1000-cpld.h> | ||
39 | |||
40 | #include <mach/hardware.h> | ||
41 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
42 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
43 | 36 | ||
44 | #include <plat/regs-serial.h> | ||
45 | #include <mach/regs-gpio.h> | ||
46 | #include <linux/platform_data/leds-s3c24xx.h> | 37 | #include <linux/platform_data/leds-s3c24xx.h> |
38 | #include <linux/platform_data/i2c-s3c2410.h> | ||
39 | #include <linux/platform_data/asoc-s3c24xx_simtec.h> | ||
40 | |||
41 | #include <mach/hardware.h> | ||
42 | #include <mach/regs-gpio.h> | ||
47 | 43 | ||
48 | #include <plat/clock.h> | 44 | #include <plat/clock.h> |
49 | #include <plat/devs.h> | ||
50 | #include <plat/cpu.h> | 45 | #include <plat/cpu.h> |
51 | #include <linux/platform_data/i2c-s3c2410.h> | 46 | #include <plat/devs.h> |
52 | #include <linux/platform_data/asoc-s3c24xx_simtec.h> | 47 | #include <plat/regs-serial.h> |
53 | 48 | ||
54 | #include "simtec.h" | 49 | #include "bast.h" |
55 | #include "common.h" | 50 | #include "common.h" |
51 | #include "simtec.h" | ||
52 | #include "vr1000.h" | ||
56 | 53 | ||
57 | /* macros for virtual address mods for the io space entries */ | 54 | /* macros for virtual address mods for the io space entries */ |
58 | #define VA_C5(item) ((unsigned long)(item) + BAST_VAM_CS5) | 55 | #define VA_C5(item) ((unsigned long)(item) + BAST_VAM_CS5) |
@@ -143,7 +140,7 @@ static struct s3c2410_uartcfg vr1000_uartcfgs[] __initdata = { | |||
143 | static struct plat_serial8250_port serial_platform_data[] = { | 140 | static struct plat_serial8250_port serial_platform_data[] = { |
144 | [0] = { | 141 | [0] = { |
145 | .mapbase = VR1000_SERIAL_MAPBASE(0), | 142 | .mapbase = VR1000_SERIAL_MAPBASE(0), |
146 | .irq = IRQ_VR1000_SERIAL + 0, | 143 | .irq = VR1000_IRQ_SERIAL + 0, |
147 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, | 144 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, |
148 | .iotype = UPIO_MEM, | 145 | .iotype = UPIO_MEM, |
149 | .regshift = 0, | 146 | .regshift = 0, |
@@ -151,7 +148,7 @@ static struct plat_serial8250_port serial_platform_data[] = { | |||
151 | }, | 148 | }, |
152 | [1] = { | 149 | [1] = { |
153 | .mapbase = VR1000_SERIAL_MAPBASE(1), | 150 | .mapbase = VR1000_SERIAL_MAPBASE(1), |
154 | .irq = IRQ_VR1000_SERIAL + 1, | 151 | .irq = VR1000_IRQ_SERIAL + 1, |
155 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, | 152 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, |
156 | .iotype = UPIO_MEM, | 153 | .iotype = UPIO_MEM, |
157 | .regshift = 0, | 154 | .regshift = 0, |
@@ -159,7 +156,7 @@ static struct plat_serial8250_port serial_platform_data[] = { | |||
159 | }, | 156 | }, |
160 | [2] = { | 157 | [2] = { |
161 | .mapbase = VR1000_SERIAL_MAPBASE(2), | 158 | .mapbase = VR1000_SERIAL_MAPBASE(2), |
162 | .irq = IRQ_VR1000_SERIAL + 2, | 159 | .irq = VR1000_IRQ_SERIAL + 2, |
163 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, | 160 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, |
164 | .iotype = UPIO_MEM, | 161 | .iotype = UPIO_MEM, |
165 | .regshift = 0, | 162 | .regshift = 0, |
@@ -167,7 +164,7 @@ static struct plat_serial8250_port serial_platform_data[] = { | |||
167 | }, | 164 | }, |
168 | [3] = { | 165 | [3] = { |
169 | .mapbase = VR1000_SERIAL_MAPBASE(3), | 166 | .mapbase = VR1000_SERIAL_MAPBASE(3), |
170 | .irq = IRQ_VR1000_SERIAL + 3, | 167 | .irq = VR1000_IRQ_SERIAL + 3, |
171 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, | 168 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, |
172 | .iotype = UPIO_MEM, | 169 | .iotype = UPIO_MEM, |
173 | .regshift = 0, | 170 | .regshift = 0, |
@@ -189,14 +186,14 @@ static struct platform_device serial_device = { | |||
189 | static struct resource vr1000_dm9k0_resource[] = { | 186 | static struct resource vr1000_dm9k0_resource[] = { |
190 | [0] = DEFINE_RES_MEM(S3C2410_CS5 + VR1000_PA_DM9000, 4), | 187 | [0] = DEFINE_RES_MEM(S3C2410_CS5 + VR1000_PA_DM9000, 4), |
191 | [1] = DEFINE_RES_MEM(S3C2410_CS5 + VR1000_PA_DM9000 + 0x40, 0x40), | 188 | [1] = DEFINE_RES_MEM(S3C2410_CS5 + VR1000_PA_DM9000 + 0x40, 0x40), |
192 | [2] = DEFINE_RES_NAMED(IRQ_VR1000_DM9000A, 1, NULL, IORESOURCE_IRQ \ | 189 | [2] = DEFINE_RES_NAMED(VR1000_IRQ_DM9000A, 1, NULL, IORESOURCE_IRQ \ |
193 | | IORESOURCE_IRQ_HIGHLEVEL), | 190 | | IORESOURCE_IRQ_HIGHLEVEL), |
194 | }; | 191 | }; |
195 | 192 | ||
196 | static struct resource vr1000_dm9k1_resource[] = { | 193 | static struct resource vr1000_dm9k1_resource[] = { |
197 | [0] = DEFINE_RES_MEM(S3C2410_CS5 + VR1000_PA_DM9000 + 0x80, 4), | 194 | [0] = DEFINE_RES_MEM(S3C2410_CS5 + VR1000_PA_DM9000 + 0x80, 4), |
198 | [1] = DEFINE_RES_MEM(S3C2410_CS5 + VR1000_PA_DM9000 + 0xC0, 0x40), | 195 | [1] = DEFINE_RES_MEM(S3C2410_CS5 + VR1000_PA_DM9000 + 0xC0, 0x40), |
199 | [2] = DEFINE_RES_NAMED(IRQ_VR1000_DM9000N, 1, NULL, IORESOURCE_IRQ \ | 196 | [2] = DEFINE_RES_NAMED(VR1000_IRQ_DM9000N, 1, NULL, IORESOURCE_IRQ \ |
200 | | IORESOURCE_IRQ_HIGHLEVEL), | 197 | | IORESOURCE_IRQ_HIGHLEVEL), |
201 | }; | 198 | }; |
202 | 199 | ||
diff --git a/arch/arm/mach-s3c24xx/mach-vstms.c b/arch/arm/mach-s3c24xx/mach-vstms.c index 7fe7d4f60419..3e2bfddc9df1 100644 --- a/arch/arm/mach-s3c24xx/mach-vstms.c +++ b/arch/arm/mach-s3c24xx/mach-vstms.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <mach/regs-gpio.h> | 36 | #include <mach/regs-gpio.h> |
37 | #include <mach/regs-lcd.h> | 37 | #include <mach/regs-lcd.h> |
38 | 38 | ||
39 | #include <mach/idle.h> | ||
40 | #include <mach/fb.h> | 39 | #include <mach/fb.h> |
41 | 40 | ||
42 | #include <linux/platform_data/i2c-s3c2410.h> | 41 | #include <linux/platform_data/i2c-s3c2410.h> |
diff --git a/arch/arm/mach-s3c24xx/include/mach/osiris-map.h b/arch/arm/mach-s3c24xx/osiris.h index 17380f848428..b8d56074abac 100644 --- a/arch/arm/mach-s3c24xx/include/mach/osiris-map.h +++ b/arch/arm/mach-s3c24xx/osiris.h | |||
@@ -1,9 +1,9 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/osiris-map.h | 1 | /* |
2 | * | ||
3 | * Copyright 2005 Simtec Electronics | 2 | * Copyright 2005 Simtec Electronics |
4 | * http://www.simtec.co.uk/products/ | 3 | * http://www.simtec.co.uk/products/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
6 | * | 5 | * |
6 | * OSIRIS - CPLD control constants | ||
7 | * OSIRIS - Memory map definitions | 7 | * OSIRIS - Memory map definitions |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
@@ -11,10 +11,21 @@ | |||
11 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
12 | */ | 12 | */ |
13 | 13 | ||
14 | /* needs arch/map.h including with this */ | 14 | #ifndef __MACH_S3C24XX_OSIRIS_H |
15 | #define __MACH_S3C24XX_OSIRIS_H __FILE__ | ||
16 | |||
17 | /* CTRL0 - NAND WP control */ | ||
18 | |||
19 | #define OSIRIS_CTRL0_NANDSEL (0x3) | ||
20 | #define OSIRIS_CTRL0_BOOT_INT (1<<3) | ||
21 | #define OSIRIS_CTRL0_PCMCIA (1<<4) | ||
22 | #define OSIRIS_CTRL0_FIX8 (1<<5) | ||
23 | #define OSIRIS_CTRL0_PCMCIA_nWAIT (1<<6) | ||
24 | #define OSIRIS_CTRL0_PCMCIA_nIOIS16 (1<<7) | ||
25 | |||
26 | #define OSIRIS_CTRL1_FIX8 (1<<0) | ||
15 | 27 | ||
16 | #ifndef __ASM_ARCH_OSIRISMAP_H | 28 | #define OSIRIS_ID_REVMASK (0x7) |
17 | #define __ASM_ARCH_OSIRISMAP_H | ||
18 | 29 | ||
19 | /* start peripherals off after the S3C2410 */ | 30 | /* start peripherals off after the S3C2410 */ |
20 | 31 | ||
@@ -39,4 +50,4 @@ | |||
39 | #define OSIRIS_VA_IDREG OSIRIS_IOADDR(0x00700000) | 50 | #define OSIRIS_VA_IDREG OSIRIS_IOADDR(0x00700000) |
40 | #define OSIRIS_PA_IDREG (OSIRIS_PA_CPLD + (7<<23)) | 51 | #define OSIRIS_PA_IDREG (OSIRIS_PA_CPLD + (7<<23)) |
41 | 52 | ||
42 | #endif /* __ASM_ARCH_OSIRISMAP_H */ | 53 | #endif /* __MACH_S3C24XX_OSIRIS_H */ |
diff --git a/arch/arm/mach-s3c24xx/include/mach/otom-map.h b/arch/arm/mach-s3c24xx/otom.h index f9277a52c145..321b7be1c0f7 100644 --- a/arch/arm/mach-s3c24xx/include/mach/otom-map.h +++ b/arch/arm/mach-s3c24xx/otom.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/otom-map.h | 1 | /* |
2 | * | ||
3 | * (c) 2005 Guillaume GOURAT / NexVision | 2 | * (c) 2005 Guillaume GOURAT / NexVision |
4 | * guillaume.gourat@nexvision.fr | 3 | * guillaume.gourat@nexvision.fr |
5 | * | 4 | * |
@@ -10,21 +9,20 @@ | |||
10 | * published by the Free Software Foundation. | 9 | * published by the Free Software Foundation. |
11 | */ | 10 | */ |
12 | 11 | ||
13 | /* needs arch/map.h including with this */ | 12 | /* |
14 | 13 | * ok, we've used up to 0x01300000, now we need to find space for the | |
15 | /* ok, we've used up to 0x01300000, now we need to find space for the | ||
16 | * peripherals that live in the nGCS[x] areas, which are quite numerous | 14 | * peripherals that live in the nGCS[x] areas, which are quite numerous |
17 | * in their space. | 15 | * in their space. |
18 | */ | 16 | */ |
19 | 17 | ||
20 | #ifndef __ASM_ARCH_OTOMMAP_H | 18 | #ifndef __MACH_S3C24XX_OTOM_H |
21 | #define __ASM_ARCH_OTOMMAP_H | 19 | #define __MACH_S3C24XX_OTOM_H __FILE__ |
22 | 20 | ||
23 | #define OTOM_PA_CS8900A_BASE (S3C2410_CS3 + 0x01000000) /* nGCS3 +0x01000000 */ | 21 | #define OTOM_PA_CS8900A_BASE (S3C2410_CS3 + 0x01000000) /* nGCS3 +0x01000000 */ |
24 | #define OTOM_VA_CS8900A_BASE S3C2410_ADDR(0x04000000) /* 0xF4000000 */ | 22 | #define OTOM_VA_CS8900A_BASE S3C2410_ADDR(0x04000000) /* 0xF4000000 */ |
25 | 23 | ||
26 | /* physical offset addresses for the peripherals */ | 24 | /* physical offset addresses for the peripherals */ |
27 | 25 | ||
28 | #define OTOM_PA_FLASH0_BASE (S3C2410_CS0) /* Bank 0 */ | 26 | #define OTOM_PA_FLASH0_BASE (S3C2410_CS0) |
29 | 27 | ||
30 | #endif /* __ASM_ARCH_OTOMMAP_H */ | 28 | #endif /* __MACH_S3C24XX_OTOM_H */ |
diff --git a/arch/arm/mach-s3c2410/pll.c b/arch/arm/mach-s3c24xx/pll-s3c2410.c index e0b3b347da82..dcf3420a3271 100644 --- a/arch/arm/mach-s3c2410/pll.c +++ b/arch/arm/mach-s3c24xx/pll-s3c2410.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* arch/arm/mach-s3c2410/pll.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006-2007 Simtec Electronics | 2 | * Copyright (c) 2006-2007 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -82,7 +81,6 @@ static int __init s3c2410_pll_init(void) | |||
82 | return subsys_interface_register(&s3c2410_plls_interface); | 81 | return subsys_interface_register(&s3c2410_plls_interface); |
83 | 82 | ||
84 | } | 83 | } |
85 | |||
86 | arch_initcall(s3c2410_pll_init); | 84 | arch_initcall(s3c2410_pll_init); |
87 | 85 | ||
88 | static struct subsys_interface s3c2410a_plls_interface = { | 86 | static struct subsys_interface s3c2410a_plls_interface = { |
@@ -95,5 +93,4 @@ static int __init s3c2410a_pll_init(void) | |||
95 | { | 93 | { |
96 | return subsys_interface_register(&s3c2410a_plls_interface); | 94 | return subsys_interface_register(&s3c2410a_plls_interface); |
97 | } | 95 | } |
98 | |||
99 | arch_initcall(s3c2410a_pll_init); | 96 | arch_initcall(s3c2410a_pll_init); |
diff --git a/arch/arm/mach-s3c2440/s3c2440-pll-12000000.c b/arch/arm/mach-s3c24xx/pll-s3c2440-12000000.c index 551fb433be87..673781758319 100644 --- a/arch/arm/mach-s3c2440/s3c2440-pll-12000000.c +++ b/arch/arm/mach-s3c24xx/pll-s3c2440-12000000.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* arch/arm/mach-s3c2440/s3c2440-pll-12000000.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006-2007 Simtec Electronics | 2 | * Copyright (c) 2006-2007 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -83,7 +82,6 @@ static int __init s3c2440_pll_12mhz(void) | |||
83 | return subsys_interface_register(&s3c2440_plls12_interface); | 82 | return subsys_interface_register(&s3c2440_plls12_interface); |
84 | 83 | ||
85 | } | 84 | } |
86 | |||
87 | arch_initcall(s3c2440_pll_12mhz); | 85 | arch_initcall(s3c2440_pll_12mhz); |
88 | 86 | ||
89 | static struct subsys_interface s3c2442_plls12_interface = { | 87 | static struct subsys_interface s3c2442_plls12_interface = { |
@@ -97,5 +95,4 @@ static int __init s3c2442_pll_12mhz(void) | |||
97 | return subsys_interface_register(&s3c2442_plls12_interface); | 95 | return subsys_interface_register(&s3c2442_plls12_interface); |
98 | 96 | ||
99 | } | 97 | } |
100 | |||
101 | arch_initcall(s3c2442_pll_12mhz); | 98 | arch_initcall(s3c2442_pll_12mhz); |
diff --git a/arch/arm/mach-s3c2440/s3c2440-pll-16934400.c b/arch/arm/mach-s3c24xx/pll-s3c2440-16934400.c index 3f15bcf64290..debfa106289b 100644 --- a/arch/arm/mach-s3c2440/s3c2440-pll-16934400.c +++ b/arch/arm/mach-s3c24xx/pll-s3c2440-16934400.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* arch/arm/mach-s3c2440/s3c2440-pll-16934400.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006-2008 Simtec Electronics | 2 | * Copyright (c) 2006-2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 3 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -111,7 +110,6 @@ static int __init s3c2440_pll_16934400(void) | |||
111 | { | 110 | { |
112 | return subsys_interface_register(&s3c2440_plls169344_interface); | 111 | return subsys_interface_register(&s3c2440_plls169344_interface); |
113 | } | 112 | } |
114 | |||
115 | arch_initcall(s3c2440_pll_16934400); | 113 | arch_initcall(s3c2440_pll_16934400); |
116 | 114 | ||
117 | static struct subsys_interface s3c2442_plls169344_interface = { | 115 | static struct subsys_interface s3c2442_plls169344_interface = { |
@@ -124,5 +122,4 @@ static int __init s3c2442_pll_16934400(void) | |||
124 | { | 122 | { |
125 | return subsys_interface_register(&s3c2442_plls169344_interface); | 123 | return subsys_interface_register(&s3c2442_plls169344_interface); |
126 | } | 124 | } |
127 | |||
128 | arch_initcall(s3c2442_pll_16934400); | 125 | arch_initcall(s3c2442_pll_16934400); |
diff --git a/arch/arm/mach-s3c24xx/pm-h1940.S b/arch/arm/mach-s3c24xx/pm-h1940.S index c93bf2db9f4d..6183a688012b 100644 --- a/arch/arm/mach-s3c24xx/pm-h1940.S +++ b/arch/arm/mach-s3c24xx/pm-h1940.S | |||
@@ -30,4 +30,4 @@ | |||
30 | 30 | ||
31 | h1940_pm_return: | 31 | h1940_pm_return: |
32 | mov r0, #S3C2410_PA_GPIO | 32 | mov r0, #S3C2410_PA_GPIO |
33 | ldr pc, [ r0, #S3C2410_GSTATUS3 - S3C24XX_VA_GPIO ] | 33 | ldr pc, [r0, #S3C2410_GSTATUS3 - S3C24XX_VA_GPIO] |
diff --git a/arch/arm/mach-s3c24xx/pm-s3c2410.c b/arch/arm/mach-s3c24xx/pm-s3c2410.c index 949ae05e07c5..2d82c4f116cd 100644 --- a/arch/arm/mach-s3c24xx/pm-s3c2410.c +++ b/arch/arm/mach-s3c24xx/pm-s3c2410.c | |||
@@ -29,16 +29,16 @@ | |||
29 | #include <linux/gpio.h> | 29 | #include <linux/gpio.h> |
30 | #include <linux/io.h> | 30 | #include <linux/io.h> |
31 | 31 | ||
32 | #include <mach/hardware.h> | ||
33 | |||
34 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
35 | 33 | ||
34 | #include <mach/hardware.h> | ||
36 | #include <mach/regs-gpio.h> | 35 | #include <mach/regs-gpio.h> |
37 | #include <mach/h1940.h> | ||
38 | 36 | ||
39 | #include <plat/cpu.h> | 37 | #include <plat/cpu.h> |
40 | #include <plat/pm.h> | 38 | #include <plat/pm.h> |
41 | 39 | ||
40 | #include "h1940.h" | ||
41 | |||
42 | static void s3c2410_pm_prepare(void) | 42 | static void s3c2410_pm_prepare(void) |
43 | { | 43 | { |
44 | /* ensure at least GSTATUS3 has the resume address */ | 44 | /* ensure at least GSTATUS3 has the resume address */ |
diff --git a/arch/arm/mach-s3c24xx/pm-s3c2412.c b/arch/arm/mach-s3c24xx/pm-s3c2412.c index c60f67a75aff..668a78a8b195 100644 --- a/arch/arm/mach-s3c24xx/pm-s3c2412.c +++ b/arch/arm/mach-s3c24xx/pm-s3c2412.c | |||
@@ -21,19 +21,19 @@ | |||
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
23 | 23 | ||
24 | #include <mach/hardware.h> | ||
25 | #include <asm/cacheflush.h> | 24 | #include <asm/cacheflush.h> |
26 | #include <asm/irq.h> | 25 | #include <asm/irq.h> |
27 | 26 | ||
28 | #include <mach/regs-power.h> | 27 | #include <mach/hardware.h> |
29 | #include <mach/regs-gpio.h> | 28 | #include <mach/regs-gpio.h> |
30 | #include <mach/regs-dsc.h> | ||
31 | 29 | ||
32 | #include <plat/cpu.h> | 30 | #include <plat/cpu.h> |
33 | #include <plat/pm.h> | 31 | #include <plat/pm.h> |
34 | |||
35 | #include <plat/s3c2412.h> | 32 | #include <plat/s3c2412.h> |
36 | 33 | ||
34 | #include "regs-dsc.h" | ||
35 | #include "s3c2412-power.h" | ||
36 | |||
37 | extern void s3c2412_sleep_enter(void); | 37 | extern void s3c2412_sleep_enter(void); |
38 | 38 | ||
39 | static int s3c2412_cpu_suspend(unsigned long arg) | 39 | static int s3c2412_cpu_suspend(unsigned long arg) |
@@ -48,7 +48,8 @@ static int s3c2412_cpu_suspend(unsigned long arg) | |||
48 | 48 | ||
49 | s3c2412_sleep_enter(); | 49 | s3c2412_sleep_enter(); |
50 | 50 | ||
51 | panic("sleep resumed to originator?"); | 51 | pr_info("Failed to suspend the system\n"); |
52 | return 1; /* Aborting suspend */ | ||
52 | } | 53 | } |
53 | 54 | ||
54 | static void s3c2412_pm_prepare(void) | 55 | static void s3c2412_pm_prepare(void) |
diff --git a/arch/arm/mach-s3c24xx/pm-s3c2416.c b/arch/arm/mach-s3c24xx/pm-s3c2416.c index 1bd4817b8eb8..44923895f558 100644 --- a/arch/arm/mach-s3c24xx/pm-s3c2416.c +++ b/arch/arm/mach-s3c24xx/pm-s3c2416.c | |||
@@ -16,12 +16,13 @@ | |||
16 | 16 | ||
17 | #include <asm/cacheflush.h> | 17 | #include <asm/cacheflush.h> |
18 | 18 | ||
19 | #include <mach/regs-power.h> | ||
20 | #include <mach/regs-s3c2443-clock.h> | 19 | #include <mach/regs-s3c2443-clock.h> |
21 | 20 | ||
22 | #include <plat/cpu.h> | 21 | #include <plat/cpu.h> |
23 | #include <plat/pm.h> | 22 | #include <plat/pm.h> |
24 | 23 | ||
24 | #include "s3c2412-power.h" | ||
25 | |||
25 | extern void s3c2412_sleep_enter(void); | 26 | extern void s3c2412_sleep_enter(void); |
26 | 27 | ||
27 | static int s3c2416_cpu_suspend(unsigned long arg) | 28 | static int s3c2416_cpu_suspend(unsigned long arg) |
@@ -34,7 +35,8 @@ static int s3c2416_cpu_suspend(unsigned long arg) | |||
34 | 35 | ||
35 | s3c2412_sleep_enter(); | 36 | s3c2412_sleep_enter(); |
36 | 37 | ||
37 | panic("sleep resumed to originator?"); | 38 | pr_info("Failed to suspend the system\n"); |
39 | return 1; /* Aborting suspend */ | ||
38 | } | 40 | } |
39 | 41 | ||
40 | static void s3c2416_pm_prepare(void) | 42 | static void s3c2416_pm_prepare(void) |
diff --git a/arch/arm/mach-s3c24xx/pm.c b/arch/arm/mach-s3c24xx/pm.c index 724755f0b0f5..caa5b7211380 100644 --- a/arch/arm/mach-s3c24xx/pm.c +++ b/arch/arm/mach-s3c24xx/pm.c | |||
@@ -38,7 +38,6 @@ | |||
38 | #include <plat/regs-serial.h> | 38 | #include <plat/regs-serial.h> |
39 | #include <mach/regs-clock.h> | 39 | #include <mach/regs-clock.h> |
40 | #include <mach/regs-gpio.h> | 40 | #include <mach/regs-gpio.h> |
41 | #include <mach/regs-mem.h> | ||
42 | #include <mach/regs-irq.h> | 41 | #include <mach/regs-irq.h> |
43 | 42 | ||
44 | #include <asm/mach/time.h> | 43 | #include <asm/mach/time.h> |
@@ -46,6 +45,8 @@ | |||
46 | #include <plat/gpio-cfg.h> | 45 | #include <plat/gpio-cfg.h> |
47 | #include <plat/pm.h> | 46 | #include <plat/pm.h> |
48 | 47 | ||
48 | #include "regs-mem.h" | ||
49 | |||
49 | #define PFX "s3c24xx-pm: " | 50 | #define PFX "s3c24xx-pm: " |
50 | 51 | ||
51 | static struct sleep_save core_save[] = { | 52 | static struct sleep_save core_save[] = { |
diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-dsc.h b/arch/arm/mach-s3c24xx/regs-dsc.h index 98fd4a05587c..98fd4a05587c 100644 --- a/arch/arm/mach-s3c24xx/include/mach/regs-dsc.h +++ b/arch/arm/mach-s3c24xx/regs-dsc.h | |||
diff --git a/arch/arm/mach-s3c24xx/regs-mem.h b/arch/arm/mach-s3c24xx/regs-mem.h new file mode 100644 index 000000000000..86b1258368c2 --- /dev/null +++ b/arch/arm/mach-s3c24xx/regs-mem.h | |||
@@ -0,0 +1,54 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
3 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * S3C2410 Memory Control register definitions | ||
10 | */ | ||
11 | |||
12 | #ifndef __ARCH_ARM_MACH_S3C24XX_REGS_MEM_H | ||
13 | #define __ARCH_ARM_MACH_S3C24XX_REGS_MEM_H __FILE__ | ||
14 | |||
15 | #define S3C2410_MEMREG(x) (S3C24XX_VA_MEMCTRL + (x)) | ||
16 | |||
17 | #define S3C2410_BWSCON S3C2410_MEMREG(0x00) | ||
18 | #define S3C2410_BANKCON0 S3C2410_MEMREG(0x04) | ||
19 | #define S3C2410_BANKCON1 S3C2410_MEMREG(0x08) | ||
20 | #define S3C2410_BANKCON2 S3C2410_MEMREG(0x0C) | ||
21 | #define S3C2410_BANKCON3 S3C2410_MEMREG(0x10) | ||
22 | #define S3C2410_BANKCON4 S3C2410_MEMREG(0x14) | ||
23 | #define S3C2410_BANKCON5 S3C2410_MEMREG(0x18) | ||
24 | #define S3C2410_BANKCON6 S3C2410_MEMREG(0x1C) | ||
25 | #define S3C2410_BANKCON7 S3C2410_MEMREG(0x20) | ||
26 | #define S3C2410_REFRESH S3C2410_MEMREG(0x24) | ||
27 | #define S3C2410_BANKSIZE S3C2410_MEMREG(0x28) | ||
28 | |||
29 | #define S3C2410_BWSCON_ST1 (1 << 7) | ||
30 | #define S3C2410_BWSCON_ST2 (1 << 11) | ||
31 | #define S3C2410_BWSCON_ST3 (1 << 15) | ||
32 | #define S3C2410_BWSCON_ST4 (1 << 19) | ||
33 | #define S3C2410_BWSCON_ST5 (1 << 23) | ||
34 | |||
35 | #define S3C2410_BWSCON_GET(_bwscon, _bank) (((_bwscon) >> ((_bank) * 4)) & 0xf) | ||
36 | |||
37 | #define S3C2410_BWSCON_WS (1 << 2) | ||
38 | |||
39 | #define S3C2410_BANKCON_PMC16 (0x3) | ||
40 | |||
41 | #define S3C2410_BANKCON_Tacp_SHIFT (2) | ||
42 | #define S3C2410_BANKCON_Tcah_SHIFT (4) | ||
43 | #define S3C2410_BANKCON_Tcoh_SHIFT (6) | ||
44 | #define S3C2410_BANKCON_Tacc_SHIFT (8) | ||
45 | #define S3C2410_BANKCON_Tcos_SHIFT (11) | ||
46 | #define S3C2410_BANKCON_Tacs_SHIFT (13) | ||
47 | |||
48 | #define S3C2410_BANKCON_SDRAM (0x3 << 15) | ||
49 | |||
50 | #define S3C2410_REFRESH_SELF (1 << 22) | ||
51 | |||
52 | #define S3C2410_BANKSIZE_MASK (0x7 << 0) | ||
53 | |||
54 | #endif /* __ARCH_ARM_MACH_S3C24XX_REGS_MEM_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/s3c2410.c b/arch/arm/mach-s3c24xx/s3c2410.c index a3c5cb086ee2..9ebef95da721 100644 --- a/arch/arm/mach-s3c24xx/s3c2410.c +++ b/arch/arm/mach-s3c24xx/s3c2410.c | |||
@@ -49,6 +49,8 @@ | |||
49 | #include <plat/gpio-cfg.h> | 49 | #include <plat/gpio-cfg.h> |
50 | #include <plat/gpio-cfg-helpers.h> | 50 | #include <plat/gpio-cfg-helpers.h> |
51 | 51 | ||
52 | #include "common.h" | ||
53 | |||
52 | /* Initial IO mappings */ | 54 | /* Initial IO mappings */ |
53 | 55 | ||
54 | static struct map_desc s3c2410_iodesc[] __initdata = { | 56 | static struct map_desc s3c2410_iodesc[] __initdata = { |
@@ -182,8 +184,8 @@ int __init s3c2410_init(void) | |||
182 | 184 | ||
183 | #ifdef CONFIG_PM | 185 | #ifdef CONFIG_PM |
184 | register_syscore_ops(&s3c2410_pm_syscore_ops); | 186 | register_syscore_ops(&s3c2410_pm_syscore_ops); |
185 | #endif | ||
186 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | 187 | register_syscore_ops(&s3c24xx_irq_syscore_ops); |
188 | #endif | ||
187 | 189 | ||
188 | return device_register(&s3c2410_dev); | 190 | return device_register(&s3c2410_dev); |
189 | } | 191 | } |
diff --git a/arch/arm/mach-s3c24xx/s3c2412-power.h b/arch/arm/mach-s3c24xx/s3c2412-power.h new file mode 100644 index 000000000000..1b02c5ddb31b --- /dev/null +++ b/arch/arm/mach-s3c24xx/s3c2412-power.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2003-2006 Simtec Electronics <linux@simtec.co.uk> | ||
3 | * http://armlinux.simtec.co.uk/ | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #ifndef __ARCH_ARM_MACH_S3C24XX_S3C2412_POWER_H | ||
11 | #define __ARCH_ARM_MACH_S3C24XX_S3C2412_POWER_H __FILE__ | ||
12 | |||
13 | #define S3C24XX_PWRREG(x) ((x) + S3C24XX_VA_CLKPWR) | ||
14 | |||
15 | #define S3C2412_PWRMODECON S3C24XX_PWRREG(0x20) | ||
16 | #define S3C2412_PWRCFG S3C24XX_PWRREG(0x24) | ||
17 | |||
18 | #define S3C2412_INFORM0 S3C24XX_PWRREG(0x70) | ||
19 | #define S3C2412_INFORM1 S3C24XX_PWRREG(0x74) | ||
20 | #define S3C2412_INFORM2 S3C24XX_PWRREG(0x78) | ||
21 | #define S3C2412_INFORM3 S3C24XX_PWRREG(0x7C) | ||
22 | |||
23 | #define S3C2412_PWRCFG_BATF_IRQ (1 << 0) | ||
24 | #define S3C2412_PWRCFG_BATF_IGNORE (2 << 0) | ||
25 | #define S3C2412_PWRCFG_BATF_SLEEP (3 << 0) | ||
26 | #define S3C2412_PWRCFG_BATF_MASK (3 << 0) | ||
27 | |||
28 | #define S3C2412_PWRCFG_STANDBYWFI_IGNORE (0 << 6) | ||
29 | #define S3C2412_PWRCFG_STANDBYWFI_IDLE (1 << 6) | ||
30 | #define S3C2412_PWRCFG_STANDBYWFI_STOP (2 << 6) | ||
31 | #define S3C2412_PWRCFG_STANDBYWFI_SLEEP (3 << 6) | ||
32 | #define S3C2412_PWRCFG_STANDBYWFI_MASK (3 << 6) | ||
33 | |||
34 | #define S3C2412_PWRCFG_RTC_MASKIRQ (1 << 8) | ||
35 | #define S3C2412_PWRCFG_NAND_NORST (1 << 9) | ||
36 | |||
37 | #endif /* __ARCH_ARM_MACH_S3C24XX_S3C2412_POWER_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/s3c2412.c b/arch/arm/mach-s3c24xx/s3c2412.c index 6c5f4031ff0c..0d592159a5c3 100644 --- a/arch/arm/mach-s3c24xx/s3c2412.c +++ b/arch/arm/mach-s3c24xx/s3c2412.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s3c2412/s3c2412.c | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2006 Simtec Electronics | 2 | * Copyright (c) 2006 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 3 | * Ben Dooks <ben@simtec.co.uk> |
5 | * | 4 | * |
@@ -28,28 +27,31 @@ | |||
28 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
29 | #include <asm/mach/irq.h> | 28 | #include <asm/mach/irq.h> |
30 | 29 | ||
31 | #include <mach/hardware.h> | ||
32 | #include <asm/proc-fns.h> | 30 | #include <asm/proc-fns.h> |
33 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
34 | #include <asm/system_misc.h> | 32 | #include <asm/system_misc.h> |
35 | 33 | ||
36 | #include <plat/cpu-freq.h> | 34 | #include <mach/hardware.h> |
37 | |||
38 | #include <mach/regs-clock.h> | 35 | #include <mach/regs-clock.h> |
39 | #include <plat/regs-serial.h> | ||
40 | #include <mach/regs-power.h> | ||
41 | #include <mach/regs-gpio.h> | 36 | #include <mach/regs-gpio.h> |
42 | #include <mach/regs-dsc.h> | ||
43 | #include <plat/regs-spi.h> | ||
44 | #include <mach/regs-s3c2412.h> | ||
45 | 37 | ||
46 | #include <plat/s3c2412.h> | 38 | #include <plat/clock.h> |
47 | #include <plat/cpu.h> | 39 | #include <plat/cpu.h> |
40 | #include <plat/cpu-freq.h> | ||
48 | #include <plat/devs.h> | 41 | #include <plat/devs.h> |
49 | #include <plat/clock.h> | ||
50 | #include <plat/pm.h> | ||
51 | #include <plat/pll.h> | ||
52 | #include <plat/nand-core.h> | 42 | #include <plat/nand-core.h> |
43 | #include <plat/pll.h> | ||
44 | #include <plat/pm.h> | ||
45 | #include <plat/regs-serial.h> | ||
46 | #include <plat/regs-spi.h> | ||
47 | #include <plat/s3c2412.h> | ||
48 | |||
49 | #include "common.h" | ||
50 | #include "regs-dsc.h" | ||
51 | #include "s3c2412-power.h" | ||
52 | |||
53 | #define S3C2412_SWRST (S3C24XX_VA_CLKPWR + 0x30) | ||
54 | #define S3C2412_SWRST_RESET (0x533C2412) | ||
53 | 55 | ||
54 | #ifndef CONFIG_CPU_S3C2412_ONLY | 56 | #ifndef CONFIG_CPU_S3C2412_ONLY |
55 | void __iomem *s3c24xx_va_gpio2 = S3C24XX_VA_GPIO; | 57 | void __iomem *s3c24xx_va_gpio2 = S3C24XX_VA_GPIO; |
@@ -244,8 +246,8 @@ int __init s3c2412_init(void) | |||
244 | 246 | ||
245 | #ifdef CONFIG_PM | 247 | #ifdef CONFIG_PM |
246 | register_syscore_ops(&s3c2412_pm_syscore_ops); | 248 | register_syscore_ops(&s3c2412_pm_syscore_ops); |
247 | #endif | ||
248 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | 249 | register_syscore_ops(&s3c24xx_irq_syscore_ops); |
250 | #endif | ||
249 | 251 | ||
250 | return device_register(&s3c2412_dev); | 252 | return device_register(&s3c2412_dev); |
251 | } | 253 | } |
diff --git a/arch/arm/mach-s3c24xx/s3c2412.h b/arch/arm/mach-s3c24xx/s3c2412.h new file mode 100644 index 000000000000..548ced42cbb7 --- /dev/null +++ b/arch/arm/mach-s3c24xx/s3c2412.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2008 Simtec Electronics | ||
3 | * Ben Dooks <ben@simtec.co.uk> | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ARCH_ARM_MACH_S3C24XX_S3C2412_H | ||
12 | #define __ARCH_ARM_REGS_S3C24XX_S3C2412_H __FILE__ | ||
13 | |||
14 | #define S3C2412_MEMREG(x) (S3C24XX_VA_MEMCTRL + (x)) | ||
15 | #define S3C2412_EBIREG(x) (S3C2412_VA_EBI + (x)) | ||
16 | |||
17 | #define S3C2412_SSMCREG(x) (S3C2412_VA_SSMC + (x)) | ||
18 | #define S3C2412_SSMC(x, o) (S3C2412_SSMCREG((x * 0x20) + (o))) | ||
19 | |||
20 | #define S3C2412_REFRESH S3C2412_MEMREG(0x10) | ||
21 | |||
22 | #define S3C2412_EBI_BANKCFG S3C2412_EBIREG(0x4) | ||
23 | |||
24 | #define S3C2412_SSMC_BANK(x) S3C2412_SSMC(x, 0x0) | ||
25 | |||
26 | #endif /* __ARCH_ARM_MACH_S3C24XX_S3C2412_H */ | ||
diff --git a/arch/arm/mach-s3c24xx/s3c2416.c b/arch/arm/mach-s3c24xx/s3c2416.c index 77ee0b732237..e30476db0295 100644 --- a/arch/arm/mach-s3c24xx/s3c2416.c +++ b/arch/arm/mach-s3c24xx/s3c2416.c | |||
@@ -63,6 +63,8 @@ | |||
63 | #include <plat/rtc-core.h> | 63 | #include <plat/rtc-core.h> |
64 | #include <plat/spi-core.h> | 64 | #include <plat/spi-core.h> |
65 | 65 | ||
66 | #include "common.h" | ||
67 | |||
66 | static struct map_desc s3c2416_iodesc[] __initdata = { | 68 | static struct map_desc s3c2416_iodesc[] __initdata = { |
67 | IODESC_ENT(WATCHDOG), | 69 | IODESC_ENT(WATCHDOG), |
68 | IODESC_ENT(CLKPWR), | 70 | IODESC_ENT(CLKPWR), |
@@ -105,9 +107,9 @@ int __init s3c2416_init(void) | |||
105 | 107 | ||
106 | #ifdef CONFIG_PM | 108 | #ifdef CONFIG_PM |
107 | register_syscore_ops(&s3c2416_pm_syscore_ops); | 109 | register_syscore_ops(&s3c2416_pm_syscore_ops); |
108 | #endif | ||
109 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | 110 | register_syscore_ops(&s3c24xx_irq_syscore_ops); |
110 | register_syscore_ops(&s3c2416_irq_syscore_ops); | 111 | register_syscore_ops(&s3c2416_irq_syscore_ops); |
112 | #endif | ||
111 | 113 | ||
112 | return device_register(&s3c2416_dev); | 114 | return device_register(&s3c2416_dev); |
113 | } | 115 | } |
diff --git a/arch/arm/mach-s3c24xx/s3c2440.c b/arch/arm/mach-s3c24xx/s3c2440.c index 2b3dddb49af7..559e394e8989 100644 --- a/arch/arm/mach-s3c24xx/s3c2440.c +++ b/arch/arm/mach-s3c24xx/s3c2440.c | |||
@@ -40,6 +40,8 @@ | |||
40 | #include <plat/gpio-cfg.h> | 40 | #include <plat/gpio-cfg.h> |
41 | #include <plat/gpio-cfg-helpers.h> | 41 | #include <plat/gpio-cfg-helpers.h> |
42 | 42 | ||
43 | #include "common.h" | ||
44 | |||
43 | static struct device s3c2440_dev = { | 45 | static struct device s3c2440_dev = { |
44 | .bus = &s3c2440_subsys, | 46 | .bus = &s3c2440_subsys, |
45 | }; | 47 | }; |
@@ -57,9 +59,9 @@ int __init s3c2440_init(void) | |||
57 | 59 | ||
58 | #ifdef CONFIG_PM | 60 | #ifdef CONFIG_PM |
59 | register_syscore_ops(&s3c2410_pm_syscore_ops); | 61 | register_syscore_ops(&s3c2410_pm_syscore_ops); |
62 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | ||
60 | #endif | 63 | #endif |
61 | register_syscore_ops(&s3c244x_pm_syscore_ops); | 64 | register_syscore_ops(&s3c244x_pm_syscore_ops); |
62 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | ||
63 | 65 | ||
64 | /* register our system device for everything else */ | 66 | /* register our system device for everything else */ |
65 | 67 | ||
diff --git a/arch/arm/mach-s3c24xx/s3c2442.c b/arch/arm/mach-s3c24xx/s3c2442.c index 22cb7c94a8c8..f732826c2359 100644 --- a/arch/arm/mach-s3c24xx/s3c2442.c +++ b/arch/arm/mach-s3c24xx/s3c2442.c | |||
@@ -51,6 +51,8 @@ | |||
51 | #include <plat/gpio-cfg.h> | 51 | #include <plat/gpio-cfg.h> |
52 | #include <plat/gpio-cfg-helpers.h> | 52 | #include <plat/gpio-cfg-helpers.h> |
53 | 53 | ||
54 | #include "common.h" | ||
55 | |||
54 | /* S3C2442 extended clock support */ | 56 | /* S3C2442 extended clock support */ |
55 | 57 | ||
56 | static unsigned long s3c2442_camif_upll_round(struct clk *clk, | 58 | static unsigned long s3c2442_camif_upll_round(struct clk *clk, |
@@ -172,9 +174,9 @@ int __init s3c2442_init(void) | |||
172 | 174 | ||
173 | #ifdef CONFIG_PM | 175 | #ifdef CONFIG_PM |
174 | register_syscore_ops(&s3c2410_pm_syscore_ops); | 176 | register_syscore_ops(&s3c2410_pm_syscore_ops); |
177 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | ||
175 | #endif | 178 | #endif |
176 | register_syscore_ops(&s3c244x_pm_syscore_ops); | 179 | register_syscore_ops(&s3c244x_pm_syscore_ops); |
177 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | ||
178 | 180 | ||
179 | return device_register(&s3c2442_dev); | 181 | return device_register(&s3c2442_dev); |
180 | } | 182 | } |
diff --git a/arch/arm/mach-s3c24xx/s3c244x.c b/arch/arm/mach-s3c24xx/s3c244x.c index b0b60a1154d6..ad2671baa910 100644 --- a/arch/arm/mach-s3c24xx/s3c244x.c +++ b/arch/arm/mach-s3c24xx/s3c244x.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <mach/regs-clock.h> | 36 | #include <mach/regs-clock.h> |
37 | #include <plat/regs-serial.h> | 37 | #include <plat/regs-serial.h> |
38 | #include <mach/regs-gpio.h> | 38 | #include <mach/regs-gpio.h> |
39 | #include <mach/regs-dsc.h> | ||
40 | 39 | ||
41 | #include <plat/s3c2410.h> | 40 | #include <plat/s3c2410.h> |
42 | #include <plat/s3c244x.h> | 41 | #include <plat/s3c244x.h> |
@@ -48,6 +47,8 @@ | |||
48 | #include <plat/nand-core.h> | 47 | #include <plat/nand-core.h> |
49 | #include <plat/watchdog-reset.h> | 48 | #include <plat/watchdog-reset.h> |
50 | 49 | ||
50 | #include "regs-dsc.h" | ||
51 | |||
51 | static struct map_desc s3c244x_iodesc[] __initdata = { | 52 | static struct map_desc s3c244x_iodesc[] __initdata = { |
52 | IODESC_ENT(CLKPWR), | 53 | IODESC_ENT(CLKPWR), |
53 | IODESC_ENT(TIMER), | 54 | IODESC_ENT(TIMER), |
diff --git a/arch/arm/mach-s3c24xx/simtec-audio.c b/arch/arm/mach-s3c24xx/simtec-audio.c index fd0ef05763a9..67cb5120dfeb 100644 --- a/arch/arm/mach-s3c24xx/simtec-audio.c +++ b/arch/arm/mach-s3c24xx/simtec-audio.c | |||
@@ -17,16 +17,13 @@ | |||
17 | #include <linux/device.h> | 17 | #include <linux/device.h> |
18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
19 | 19 | ||
20 | #include <mach/bast-map.h> | ||
21 | #include <mach/bast-irq.h> | ||
22 | #include <mach/bast-cpld.h> | ||
23 | |||
24 | #include <mach/hardware.h> | 20 | #include <mach/hardware.h> |
25 | #include <mach/regs-gpio.h> | 21 | #include <mach/regs-gpio.h> |
26 | 22 | ||
27 | #include <linux/platform_data/asoc-s3c24xx_simtec.h> | 23 | #include <linux/platform_data/asoc-s3c24xx_simtec.h> |
28 | #include <plat/devs.h> | 24 | #include <plat/devs.h> |
29 | 25 | ||
26 | #include "bast.h" | ||
30 | #include "simtec.h" | 27 | #include "simtec.h" |
31 | 28 | ||
32 | /* platform ops for audio */ | 29 | /* platform ops for audio */ |
diff --git a/arch/arm/mach-s3c24xx/simtec-nor.c b/arch/arm/mach-s3c24xx/simtec-nor.c index 029744fcaacb..8884bffa619a 100644 --- a/arch/arm/mach-s3c24xx/simtec-nor.c +++ b/arch/arm/mach-s3c24xx/simtec-nor.c | |||
@@ -27,9 +27,8 @@ | |||
27 | #include <asm/mach/irq.h> | 27 | #include <asm/mach/irq.h> |
28 | 28 | ||
29 | #include <mach/map.h> | 29 | #include <mach/map.h> |
30 | #include <mach/bast-map.h> | ||
31 | #include <mach/bast-cpld.h> | ||
32 | 30 | ||
31 | #include "bast.h" | ||
33 | #include "simtec.h" | 32 | #include "simtec.h" |
34 | 33 | ||
35 | static void simtec_nor_vpp(struct platform_device *pdev, int vpp) | 34 | static void simtec_nor_vpp(struct platform_device *pdev, int vpp) |
diff --git a/arch/arm/mach-s3c24xx/simtec-pm.c b/arch/arm/mach-s3c24xx/simtec-pm.c index 699f93171297..38a2f1fdebab 100644 --- a/arch/arm/mach-s3c24xx/simtec-pm.c +++ b/arch/arm/mach-s3c24xx/simtec-pm.c | |||
@@ -28,12 +28,13 @@ | |||
28 | 28 | ||
29 | #include <mach/map.h> | 29 | #include <mach/map.h> |
30 | #include <mach/regs-gpio.h> | 30 | #include <mach/regs-gpio.h> |
31 | #include <mach/regs-mem.h> | ||
32 | 31 | ||
33 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
34 | 33 | ||
35 | #include <plat/pm.h> | 34 | #include <plat/pm.h> |
36 | 35 | ||
36 | #include "regs-mem.h" | ||
37 | |||
37 | #define COPYRIGHT ", Copyright 2005 Simtec Electronics" | 38 | #define COPYRIGHT ", Copyright 2005 Simtec Electronics" |
38 | 39 | ||
39 | /* pm_simtec_init | 40 | /* pm_simtec_init |
diff --git a/arch/arm/mach-s3c24xx/simtec-usb.c b/arch/arm/mach-s3c24xx/simtec-usb.c index ddf7a3c743ac..2ed2e32430dc 100644 --- a/arch/arm/mach-s3c24xx/simtec-usb.c +++ b/arch/arm/mach-s3c24xx/simtec-usb.c | |||
@@ -28,15 +28,13 @@ | |||
28 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
29 | #include <asm/mach/irq.h> | 29 | #include <asm/mach/irq.h> |
30 | 30 | ||
31 | #include <mach/bast-map.h> | ||
32 | #include <mach/bast-irq.h> | ||
33 | |||
34 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
35 | #include <asm/irq.h> | 32 | #include <asm/irq.h> |
36 | 33 | ||
37 | #include <linux/platform_data/usb-ohci-s3c2410.h> | 34 | #include <linux/platform_data/usb-ohci-s3c2410.h> |
38 | #include <plat/devs.h> | 35 | #include <plat/devs.h> |
39 | 36 | ||
37 | #include "bast.h" | ||
40 | #include "simtec.h" | 38 | #include "simtec.h" |
41 | 39 | ||
42 | /* control power and monitor over-current events on various Simtec | 40 | /* control power and monitor over-current events on various Simtec |
@@ -79,7 +77,7 @@ static void usb_simtec_enableoc(struct s3c2410_hcd_info *info, int on) | |||
79 | int ret; | 77 | int ret; |
80 | 78 | ||
81 | if (on) { | 79 | if (on) { |
82 | ret = request_irq(IRQ_USBOC, usb_simtec_ocirq, | 80 | ret = request_irq(BAST_IRQ_USBOC, usb_simtec_ocirq, |
83 | IRQF_DISABLED | IRQF_TRIGGER_RISING | | 81 | IRQF_DISABLED | IRQF_TRIGGER_RISING | |
84 | IRQF_TRIGGER_FALLING, | 82 | IRQF_TRIGGER_FALLING, |
85 | "USB Over-current", info); | 83 | "USB Over-current", info); |
@@ -87,7 +85,7 @@ static void usb_simtec_enableoc(struct s3c2410_hcd_info *info, int on) | |||
87 | printk(KERN_ERR "failed to request usb oc irq\n"); | 85 | printk(KERN_ERR "failed to request usb oc irq\n"); |
88 | } | 86 | } |
89 | } else { | 87 | } else { |
90 | free_irq(IRQ_USBOC, info); | 88 | free_irq(BAST_IRQ_USBOC, info); |
91 | } | 89 | } |
92 | } | 90 | } |
93 | 91 | ||
diff --git a/arch/arm/mach-s3c24xx/sleep-s3c2410.S b/arch/arm/mach-s3c24xx/sleep-s3c2410.S index dd5b6388a5a5..dd47c8fa07fa 100644 --- a/arch/arm/mach-s3c24xx/sleep-s3c2410.S +++ b/arch/arm/mach-s3c24xx/sleep-s3c2410.S | |||
@@ -31,9 +31,10 @@ | |||
31 | 31 | ||
32 | #include <mach/regs-gpio.h> | 32 | #include <mach/regs-gpio.h> |
33 | #include <mach/regs-clock.h> | 33 | #include <mach/regs-clock.h> |
34 | #include <mach/regs-mem.h> | ||
35 | #include <plat/regs-serial.h> | 34 | #include <plat/regs-serial.h> |
36 | 35 | ||
36 | #include "regs-mem.h" | ||
37 | |||
37 | /* s3c2410_cpu_suspend | 38 | /* s3c2410_cpu_suspend |
38 | * | 39 | * |
39 | * put the cpu into sleep mode | 40 | * put the cpu into sleep mode |
@@ -45,9 +46,9 @@ ENTRY(s3c2410_cpu_suspend) | |||
45 | ldr r4, =S3C2410_REFRESH | 46 | ldr r4, =S3C2410_REFRESH |
46 | ldr r5, =S3C24XX_MISCCR | 47 | ldr r5, =S3C24XX_MISCCR |
47 | ldr r6, =S3C2410_CLKCON | 48 | ldr r6, =S3C2410_CLKCON |
48 | ldr r7, [ r4 ] @ get REFRESH (and ensure in TLB) | 49 | ldr r7, [r4] @ get REFRESH (and ensure in TLB) |
49 | ldr r8, [ r5 ] @ get MISCCR (and ensure in TLB) | 50 | ldr r8, [r5] @ get MISCCR (and ensure in TLB) |
50 | ldr r9, [ r6 ] @ get CLKCON (and ensure in TLB) | 51 | ldr r9, [r6] @ get CLKCON (and ensure in TLB) |
51 | 52 | ||
52 | orr r7, r7, #S3C2410_REFRESH_SELF @ SDRAM sleep command | 53 | orr r7, r7, #S3C2410_REFRESH_SELF @ SDRAM sleep command |
53 | orr r8, r8, #S3C2410_MISCCR_SDSLEEP @ SDRAM power-down signals | 54 | orr r8, r8, #S3C2410_MISCCR_SDSLEEP @ SDRAM power-down signals |
@@ -61,8 +62,8 @@ ENTRY(s3c2410_cpu_suspend) | |||
61 | @@ align next bit of code to cache line | 62 | @@ align next bit of code to cache line |
62 | .align 5 | 63 | .align 5 |
63 | s3c2410_do_sleep: | 64 | s3c2410_do_sleep: |
64 | streq r7, [ r4 ] @ SDRAM sleep command | 65 | streq r7, [r4] @ SDRAM sleep command |
65 | streq r8, [ r5 ] @ SDRAM power-down config | 66 | streq r8, [r5] @ SDRAM power-down config |
66 | streq r9, [ r6 ] @ CPU sleep | 67 | streq r9, [r6] @ CPU sleep |
67 | 1: beq 1b | 68 | 1: beq 1b |
68 | mov pc, r14 | 69 | mov pc, r14 |
diff --git a/arch/arm/mach-s3c24xx/sleep-s3c2412.S b/arch/arm/mach-s3c24xx/sleep-s3c2412.S index c82418ed714d..5adaceb7da13 100644 --- a/arch/arm/mach-s3c24xx/sleep-s3c2412.S +++ b/arch/arm/mach-s3c24xx/sleep-s3c2412.S | |||
@@ -57,12 +57,12 @@ s3c2412_sleep_enter1: | |||
57 | * retry, as simply returning causes the system to lock. | 57 | * retry, as simply returning causes the system to lock. |
58 | */ | 58 | */ |
59 | 59 | ||
60 | ldrne r9, [ r1 ] | 60 | ldrne r9, [r1] |
61 | strne r9, [ r1 ] | 61 | strne r9, [r1] |
62 | ldrne r9, [ r2 ] | 62 | ldrne r9, [r2] |
63 | strne r9, [ r2 ] | 63 | strne r9, [r2] |
64 | ldrne r9, [ r3 ] | 64 | ldrne r9, [r3] |
65 | strne r9, [ r3 ] | 65 | strne r9, [r3] |
66 | bne s3c2412_sleep_enter1 | 66 | bne s3c2412_sleep_enter1 |
67 | 67 | ||
68 | mov pc, r14 | 68 | mov pc, r14 |
diff --git a/arch/arm/mach-s3c24xx/sleep.S b/arch/arm/mach-s3c24xx/sleep.S index c56612569b40..7f378b662da6 100644 --- a/arch/arm/mach-s3c24xx/sleep.S +++ b/arch/arm/mach-s3c24xx/sleep.S | |||
@@ -31,7 +31,6 @@ | |||
31 | 31 | ||
32 | #include <mach/regs-gpio.h> | 32 | #include <mach/regs-gpio.h> |
33 | #include <mach/regs-clock.h> | 33 | #include <mach/regs-clock.h> |
34 | #include <mach/regs-mem.h> | ||
35 | #include <plat/regs-serial.h> | 34 | #include <plat/regs-serial.h> |
36 | 35 | ||
37 | /* CONFIG_DEBUG_RESUME is dangerous if your bootloader does not | 36 | /* CONFIG_DEBUG_RESUME is dangerous if your bootloader does not |
diff --git a/arch/arm/mach-s3c24xx/vr1000.h b/arch/arm/mach-s3c24xx/vr1000.h new file mode 100644 index 000000000000..7fcd2c2f183c --- /dev/null +++ b/arch/arm/mach-s3c24xx/vr1000.h | |||
@@ -0,0 +1,118 @@ | |||
1 | |||
2 | /* arch/arm/mach-s3c2410/include/mach/vr1000-cpld.h | ||
3 | * | ||
4 | * Copyright (c) 2003 Simtec Electronics | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * VR1000 - CPLD control constants | ||
8 | * Machine VR1000 - IRQ Number definitions | ||
9 | * Machine VR1000 - Memory map definitions | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify | ||
12 | * it under the terms of the GNU General Public License version 2 as | ||
13 | * published by the Free Software Foundation. | ||
14 | */ | ||
15 | |||
16 | #ifndef __MACH_S3C24XX_VR1000_H | ||
17 | #define __MACH_S3C24XX_VR1000_H __FILE__ | ||
18 | |||
19 | #define VR1000_CPLD_CTRL2_RAMWEN (0x04) /* SRAM Write Enable */ | ||
20 | |||
21 | /* irq numbers to onboard peripherals */ | ||
22 | |||
23 | #define VR1000_IRQ_USBOC IRQ_EINT19 | ||
24 | #define VR1000_IRQ_IDE0 IRQ_EINT16 | ||
25 | #define VR1000_IRQ_IDE1 IRQ_EINT17 | ||
26 | #define VR1000_IRQ_SERIAL IRQ_EINT12 | ||
27 | #define VR1000_IRQ_DM9000A IRQ_EINT10 | ||
28 | #define VR1000_IRQ_DM9000N IRQ_EINT9 | ||
29 | #define VR1000_IRQ_SMALERT IRQ_EINT8 | ||
30 | |||
31 | /* map */ | ||
32 | |||
33 | #define VR1000_IOADDR(x) (S3C2410_ADDR((x) + 0x01300000)) | ||
34 | |||
35 | /* we put the CPLD registers next, to get them out of the way */ | ||
36 | |||
37 | #define VR1000_VA_CTRL1 VR1000_IOADDR(0x00000000) /* 0x01300000 */ | ||
38 | #define VR1000_PA_CTRL1 (S3C2410_CS5 | 0x7800000) | ||
39 | |||
40 | #define VR1000_VA_CTRL2 VR1000_IOADDR(0x00100000) /* 0x01400000 */ | ||
41 | #define VR1000_PA_CTRL2 (S3C2410_CS1 | 0x6000000) | ||
42 | |||
43 | #define VR1000_VA_CTRL3 VR1000_IOADDR(0x00200000) /* 0x01500000 */ | ||
44 | #define VR1000_PA_CTRL3 (S3C2410_CS1 | 0x6800000) | ||
45 | |||
46 | #define VR1000_VA_CTRL4 VR1000_IOADDR(0x00300000) /* 0x01600000 */ | ||
47 | #define VR1000_PA_CTRL4 (S3C2410_CS1 | 0x7000000) | ||
48 | |||
49 | /* next, we have the PC104 ISA interrupt registers */ | ||
50 | |||
51 | #define VR1000_PA_PC104_IRQREQ (S3C2410_CS5 | 0x6000000) /* 0x01700000 */ | ||
52 | #define VR1000_VA_PC104_IRQREQ VR1000_IOADDR(0x00400000) | ||
53 | |||
54 | #define VR1000_PA_PC104_IRQRAW (S3C2410_CS5 | 0x6800000) /* 0x01800000 */ | ||
55 | #define VR1000_VA_PC104_IRQRAW VR1000_IOADDR(0x00500000) | ||
56 | |||
57 | #define VR1000_PA_PC104_IRQMASK (S3C2410_CS5 | 0x7000000) /* 0x01900000 */ | ||
58 | #define VR1000_VA_PC104_IRQMASK VR1000_IOADDR(0x00600000) | ||
59 | |||
60 | /* | ||
61 | * 0xE0000000 contains the IO space that is split by speed and | ||
62 | * whether the access is for 8 or 16bit IO... this ensures that | ||
63 | * the correct access is made | ||
64 | * | ||
65 | * 0x10000000 of space, partitioned as so: | ||
66 | * | ||
67 | * 0x00000000 to 0x04000000 8bit, slow | ||
68 | * 0x04000000 to 0x08000000 16bit, slow | ||
69 | * 0x08000000 to 0x0C000000 16bit, net | ||
70 | * 0x0C000000 to 0x10000000 16bit, fast | ||
71 | * | ||
72 | * each of these spaces has the following in: | ||
73 | * | ||
74 | * 0x02000000 to 0x02100000 1MB IDE primary channel | ||
75 | * 0x02100000 to 0x02200000 1MB IDE primary channel aux | ||
76 | * 0x02200000 to 0x02400000 1MB IDE secondary channel | ||
77 | * 0x02300000 to 0x02400000 1MB IDE secondary channel aux | ||
78 | * 0x02500000 to 0x02600000 1MB Davicom DM9000 ethernet controllers | ||
79 | * 0x02600000 to 0x02700000 1MB | ||
80 | * | ||
81 | * the phyiscal layout of the zones are: | ||
82 | * nGCS2 - 8bit, slow | ||
83 | * nGCS3 - 16bit, slow | ||
84 | * nGCS4 - 16bit, net | ||
85 | * nGCS5 - 16bit, fast | ||
86 | */ | ||
87 | |||
88 | #define VR1000_VA_MULTISPACE (0xE0000000) | ||
89 | |||
90 | #define VR1000_VA_ISAIO (VR1000_VA_MULTISPACE + 0x00000000) | ||
91 | #define VR1000_VA_ISAMEM (VR1000_VA_MULTISPACE + 0x01000000) | ||
92 | #define VR1000_VA_IDEPRI (VR1000_VA_MULTISPACE + 0x02000000) | ||
93 | #define VR1000_VA_IDEPRIAUX (VR1000_VA_MULTISPACE + 0x02100000) | ||
94 | #define VR1000_VA_IDESEC (VR1000_VA_MULTISPACE + 0x02200000) | ||
95 | #define VR1000_VA_IDESECAUX (VR1000_VA_MULTISPACE + 0x02300000) | ||
96 | #define VR1000_VA_ASIXNET (VR1000_VA_MULTISPACE + 0x02400000) | ||
97 | #define VR1000_VA_DM9000 (VR1000_VA_MULTISPACE + 0x02500000) | ||
98 | #define VR1000_VA_SUPERIO (VR1000_VA_MULTISPACE + 0x02600000) | ||
99 | |||
100 | /* physical offset addresses for the peripherals */ | ||
101 | |||
102 | #define VR1000_PA_IDEPRI (0x02000000) | ||
103 | #define VR1000_PA_IDEPRIAUX (0x02800000) | ||
104 | #define VR1000_PA_IDESEC (0x03000000) | ||
105 | #define VR1000_PA_IDESECAUX (0x03800000) | ||
106 | #define VR1000_PA_DM9000 (0x05000000) | ||
107 | |||
108 | #define VR1000_PA_SERIAL (0x11800000) | ||
109 | #define VR1000_VA_SERIAL (VR1000_IOADDR(0x00700000)) | ||
110 | |||
111 | /* VR1000 ram is in CS1, with A26..A24 = 2_101 */ | ||
112 | #define VR1000_PA_SRAM (S3C2410_CS1 | 0x05000000) | ||
113 | |||
114 | /* some configurations for the peripherals */ | ||
115 | |||
116 | #define VR1000_DM9000_CS VR1000_VAM_CS4 | ||
117 | |||
118 | #endif /* __MACH_S3C24XX_VR1000_H */ | ||
diff --git a/arch/arm/mach-s3c64xx/clock.c b/arch/arm/mach-s3c64xx/clock.c index 803711e283b2..8499415be9cd 100644 --- a/arch/arm/mach-s3c64xx/clock.c +++ b/arch/arm/mach-s3c64xx/clock.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
24 | #include <mach/map.h> | 24 | #include <mach/map.h> |
25 | 25 | ||
26 | #include <mach/regs-sys.h> | ||
27 | #include <mach/regs-clock.h> | 26 | #include <mach/regs-clock.h> |
28 | 27 | ||
29 | #include <plat/cpu.h> | 28 | #include <plat/cpu.h> |
@@ -33,6 +32,8 @@ | |||
33 | #include <plat/clock-clksrc.h> | 32 | #include <plat/clock-clksrc.h> |
34 | #include <plat/pll.h> | 33 | #include <plat/pll.h> |
35 | 34 | ||
35 | #include "regs-sys.h" | ||
36 | |||
36 | /* fin_apll, fin_mpll and fin_epll are all the same clock, which we call | 37 | /* fin_apll, fin_mpll and fin_epll are all the same clock, which we call |
37 | * ext_xtal_mux for want of an actual name from the manual. | 38 | * ext_xtal_mux for want of an actual name from the manual. |
38 | */ | 39 | */ |
diff --git a/arch/arm/mach-s3c64xx/cpuidle.c b/arch/arm/mach-s3c64xx/cpuidle.c index acb197ccf3f7..ead5fab0dbb5 100644 --- a/arch/arm/mach-s3c64xx/cpuidle.c +++ b/arch/arm/mach-s3c64xx/cpuidle.c | |||
@@ -20,8 +20,8 @@ | |||
20 | 20 | ||
21 | #include <mach/map.h> | 21 | #include <mach/map.h> |
22 | 22 | ||
23 | #include <mach/regs-sys.h> | 23 | #include "regs-sys.h" |
24 | #include <mach/regs-syscon-power.h> | 24 | #include "regs-syscon-power.h" |
25 | 25 | ||
26 | static int s3c64xx_enter_idle(struct cpuidle_device *dev, | 26 | static int s3c64xx_enter_idle(struct cpuidle_device *dev, |
27 | struct cpuidle_driver *drv, | 27 | struct cpuidle_driver *drv, |
diff --git a/arch/arm/mach-s3c64xx/include/mach/crag6410.h b/arch/arm/mach-s3c64xx/crag6410.h index 4c3c9994fc2c..4c3c9994fc2c 100644 --- a/arch/arm/mach-s3c64xx/include/mach/crag6410.h +++ b/arch/arm/mach-s3c64xx/crag6410.h | |||
diff --git a/arch/arm/mach-s3c64xx/dma.c b/arch/arm/mach-s3c64xx/dma.c index f2a7a1725596..ec29b35f25c0 100644 --- a/arch/arm/mach-s3c64xx/dma.c +++ b/arch/arm/mach-s3c64xx/dma.c | |||
@@ -28,10 +28,10 @@ | |||
28 | #include <mach/map.h> | 28 | #include <mach/map.h> |
29 | #include <mach/irqs.h> | 29 | #include <mach/irqs.h> |
30 | 30 | ||
31 | #include <mach/regs-sys.h> | ||
32 | |||
33 | #include <asm/hardware/pl080.h> | 31 | #include <asm/hardware/pl080.h> |
34 | 32 | ||
33 | #include "regs-sys.h" | ||
34 | |||
35 | /* dma channel state information */ | 35 | /* dma channel state information */ |
36 | 36 | ||
37 | struct s3c64xx_dmac { | 37 | struct s3c64xx_dmac { |
diff --git a/arch/arm/mach-s3c64xx/include/mach/regs-sys.h b/arch/arm/mach-s3c64xx/include/mach/regs-sys.h deleted file mode 100644 index b91e02093289..000000000000 --- a/arch/arm/mach-s3c64xx/include/mach/regs-sys.h +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | /* arch/arm/plat-s3c64xx/include/plat/regs-sys.h | ||
2 | * | ||
3 | * Copyright 2008 Openmoko, Inc. | ||
4 | * Copyright 2008 Simtec Electronics | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * http://armlinux.simtec.co.uk/ | ||
7 | * | ||
8 | * S3C64XX system register definitions | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #ifndef __PLAT_REGS_SYS_H | ||
16 | #define __PLAT_REGS_SYS_H __FILE__ | ||
17 | |||
18 | #define S3C_SYSREG(x) (S3C_VA_SYS + (x)) | ||
19 | |||
20 | #define S3C64XX_AHB_CON0 S3C_SYSREG(0x100) | ||
21 | #define S3C64XX_AHB_CON1 S3C_SYSREG(0x104) | ||
22 | #define S3C64XX_AHB_CON2 S3C_SYSREG(0x108) | ||
23 | |||
24 | #define S3C64XX_SDMA_SEL S3C_SYSREG(0x110) | ||
25 | |||
26 | #define S3C64XX_OTHERS S3C_SYSREG(0x900) | ||
27 | |||
28 | #define S3C64XX_OTHERS_USBMASK (1 << 16) | ||
29 | #define S3C64XX_OTHERS_SYNCMUXSEL (1 << 6) | ||
30 | |||
31 | #endif /* _PLAT_REGS_SYS_H */ | ||
diff --git a/arch/arm/mach-s3c64xx/mach-anw6410.c b/arch/arm/mach-s3c64xx/mach-anw6410.c index afeae0b5bb28..728eef3296b2 100644 --- a/arch/arm/mach-s3c64xx/mach-anw6410.c +++ b/arch/arm/mach-s3c64xx/mach-anw6410.c | |||
@@ -49,9 +49,9 @@ | |||
49 | #include <plat/devs.h> | 49 | #include <plat/devs.h> |
50 | #include <plat/cpu.h> | 50 | #include <plat/cpu.h> |
51 | #include <mach/regs-gpio.h> | 51 | #include <mach/regs-gpio.h> |
52 | #include <mach/regs-modem.h> | ||
53 | 52 | ||
54 | #include "common.h" | 53 | #include "common.h" |
54 | #include "regs-modem.h" | ||
55 | 55 | ||
56 | /* DM9000 */ | 56 | /* DM9000 */ |
57 | #define ANW6410_PA_DM9000 (0x18000000) | 57 | #define ANW6410_PA_DM9000 (0x18000000) |
diff --git a/arch/arm/mach-s3c64xx/mach-crag6410-module.c b/arch/arm/mach-s3c64xx/mach-crag6410-module.c index 755c0bb119f4..bf3d1c09b085 100644 --- a/arch/arm/mach-s3c64xx/mach-crag6410-module.c +++ b/arch/arm/mach-s3c64xx/mach-crag6410-module.c | |||
@@ -29,7 +29,7 @@ | |||
29 | 29 | ||
30 | #include <linux/platform_data/spi-s3c64xx.h> | 30 | #include <linux/platform_data/spi-s3c64xx.h> |
31 | 31 | ||
32 | #include <mach/crag6410.h> | 32 | #include "crag6410.h" |
33 | 33 | ||
34 | static struct s3c64xx_spi_csinfo wm0010_spi_csinfo = { | 34 | static struct s3c64xx_spi_csinfo wm0010_spi_csinfo = { |
35 | .line = S3C64XX_GPC(3), | 35 | .line = S3C64XX_GPC(3), |
diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach-s3c64xx/mach-crag6410.c index 5b6adc7f1d39..1acf02bace57 100644 --- a/arch/arm/mach-s3c64xx/mach-crag6410.c +++ b/arch/arm/mach-s3c64xx/mach-crag6410.c | |||
@@ -49,12 +49,7 @@ | |||
49 | #include <mach/hardware.h> | 49 | #include <mach/hardware.h> |
50 | #include <mach/map.h> | 50 | #include <mach/map.h> |
51 | 51 | ||
52 | #include <mach/regs-sys.h> | ||
53 | #include <mach/regs-gpio.h> | 52 | #include <mach/regs-gpio.h> |
54 | #include <mach/regs-modem.h> | ||
55 | #include <mach/crag6410.h> | ||
56 | |||
57 | #include <mach/regs-gpio-memport.h> | ||
58 | 53 | ||
59 | #include <plat/regs-serial.h> | 54 | #include <plat/regs-serial.h> |
60 | #include <plat/fb.h> | 55 | #include <plat/fb.h> |
@@ -71,6 +66,10 @@ | |||
71 | #include <plat/pm.h> | 66 | #include <plat/pm.h> |
72 | 67 | ||
73 | #include "common.h" | 68 | #include "common.h" |
69 | #include "crag6410.h" | ||
70 | #include "regs-gpio-memport.h" | ||
71 | #include "regs-modem.h" | ||
72 | #include "regs-sys.h" | ||
74 | 73 | ||
75 | /* serial port setup */ | 74 | /* serial port setup */ |
76 | 75 | ||
diff --git a/arch/arm/mach-s3c64xx/mach-mini6410.c b/arch/arm/mach-s3c64xx/mach-mini6410.c index e173e6e98228..4b41fcdaa7b6 100644 --- a/arch/arm/mach-s3c64xx/mach-mini6410.c +++ b/arch/arm/mach-s3c64xx/mach-mini6410.c | |||
@@ -30,8 +30,6 @@ | |||
30 | 30 | ||
31 | #include <mach/map.h> | 31 | #include <mach/map.h> |
32 | #include <mach/regs-gpio.h> | 32 | #include <mach/regs-gpio.h> |
33 | #include <mach/regs-modem.h> | ||
34 | #include <mach/regs-srom.h> | ||
35 | 33 | ||
36 | #include <plat/adc.h> | 34 | #include <plat/adc.h> |
37 | #include <plat/cpu.h> | 35 | #include <plat/cpu.h> |
@@ -45,6 +43,8 @@ | |||
45 | #include <video/samsung_fimd.h> | 43 | #include <video/samsung_fimd.h> |
46 | 44 | ||
47 | #include "common.h" | 45 | #include "common.h" |
46 | #include "regs-modem.h" | ||
47 | #include "regs-srom.h" | ||
48 | 48 | ||
49 | #define UCON S3C2410_UCON_DEFAULT | 49 | #define UCON S3C2410_UCON_DEFAULT |
50 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) | 50 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) |
diff --git a/arch/arm/mach-s3c64xx/mach-real6410.c b/arch/arm/mach-s3c64xx/mach-real6410.c index 4d0d47a66930..fa12bd21ad82 100644 --- a/arch/arm/mach-s3c64xx/mach-real6410.c +++ b/arch/arm/mach-s3c64xx/mach-real6410.c | |||
@@ -31,8 +31,6 @@ | |||
31 | 31 | ||
32 | #include <mach/map.h> | 32 | #include <mach/map.h> |
33 | #include <mach/regs-gpio.h> | 33 | #include <mach/regs-gpio.h> |
34 | #include <mach/regs-modem.h> | ||
35 | #include <mach/regs-srom.h> | ||
36 | 34 | ||
37 | #include <plat/adc.h> | 35 | #include <plat/adc.h> |
38 | #include <plat/cpu.h> | 36 | #include <plat/cpu.h> |
@@ -46,6 +44,8 @@ | |||
46 | #include <video/samsung_fimd.h> | 44 | #include <video/samsung_fimd.h> |
47 | 45 | ||
48 | #include "common.h" | 46 | #include "common.h" |
47 | #include "regs-modem.h" | ||
48 | #include "regs-srom.h" | ||
49 | 49 | ||
50 | #define UCON S3C2410_UCON_DEFAULT | 50 | #define UCON S3C2410_UCON_DEFAULT |
51 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) | 51 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) |
diff --git a/arch/arm/mach-s3c64xx/mach-smartq.c b/arch/arm/mach-s3c64xx/mach-smartq.c index c6d7390939ae..fc3e9b32e26f 100644 --- a/arch/arm/mach-s3c64xx/mach-smartq.c +++ b/arch/arm/mach-s3c64xx/mach-smartq.c | |||
@@ -25,7 +25,6 @@ | |||
25 | 25 | ||
26 | #include <mach/map.h> | 26 | #include <mach/map.h> |
27 | #include <mach/regs-gpio.h> | 27 | #include <mach/regs-gpio.h> |
28 | #include <mach/regs-modem.h> | ||
29 | 28 | ||
30 | #include <plat/clock.h> | 29 | #include <plat/clock.h> |
31 | #include <plat/cpu.h> | 30 | #include <plat/cpu.h> |
@@ -41,6 +40,7 @@ | |||
41 | #include <video/platform_lcd.h> | 40 | #include <video/platform_lcd.h> |
42 | 41 | ||
43 | #include "common.h" | 42 | #include "common.h" |
43 | #include "regs-modem.h" | ||
44 | 44 | ||
45 | #define UCON S3C2410_UCON_DEFAULT | 45 | #define UCON S3C2410_UCON_DEFAULT |
46 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE) | 46 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE) |
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c index 1663d10ba02a..ba7544e2d04d 100644 --- a/arch/arm/mach-s3c64xx/mach-smdk6410.c +++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c | |||
@@ -56,10 +56,7 @@ | |||
56 | #include <asm/mach-types.h> | 56 | #include <asm/mach-types.h> |
57 | 57 | ||
58 | #include <plat/regs-serial.h> | 58 | #include <plat/regs-serial.h> |
59 | #include <mach/regs-modem.h> | ||
60 | #include <mach/regs-gpio.h> | 59 | #include <mach/regs-gpio.h> |
61 | #include <mach/regs-sys.h> | ||
62 | #include <mach/regs-srom.h> | ||
63 | #include <linux/platform_data/ata-samsung_cf.h> | 60 | #include <linux/platform_data/ata-samsung_cf.h> |
64 | #include <linux/platform_data/i2c-s3c2410.h> | 61 | #include <linux/platform_data/i2c-s3c2410.h> |
65 | #include <plat/fb.h> | 62 | #include <plat/fb.h> |
@@ -74,6 +71,9 @@ | |||
74 | #include <plat/backlight.h> | 71 | #include <plat/backlight.h> |
75 | 72 | ||
76 | #include "common.h" | 73 | #include "common.h" |
74 | #include "regs-modem.h" | ||
75 | #include "regs-srom.h" | ||
76 | #include "regs-sys.h" | ||
77 | 77 | ||
78 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK | 78 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK |
79 | #define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB | 79 | #define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB |
diff --git a/arch/arm/mach-s3c64xx/pm.c b/arch/arm/mach-s3c64xx/pm.c index d2e1a16690bd..6a1f91fea678 100644 --- a/arch/arm/mach-s3c64xx/pm.c +++ b/arch/arm/mach-s3c64xx/pm.c | |||
@@ -26,12 +26,13 @@ | |||
26 | #include <plat/pm.h> | 26 | #include <plat/pm.h> |
27 | #include <plat/wakeup-mask.h> | 27 | #include <plat/wakeup-mask.h> |
28 | 28 | ||
29 | #include <mach/regs-sys.h> | ||
30 | #include <mach/regs-gpio.h> | 29 | #include <mach/regs-gpio.h> |
31 | #include <mach/regs-clock.h> | 30 | #include <mach/regs-clock.h> |
32 | #include <mach/regs-syscon-power.h> | 31 | |
33 | #include <mach/regs-gpio-memport.h> | 32 | #include "regs-gpio-memport.h" |
34 | #include <mach/regs-modem.h> | 33 | #include "regs-modem.h" |
34 | #include "regs-sys.h" | ||
35 | #include "regs-syscon-power.h" | ||
35 | 36 | ||
36 | struct s3c64xx_pm_domain { | 37 | struct s3c64xx_pm_domain { |
37 | char *const name; | 38 | char *const name; |
@@ -296,7 +297,8 @@ static int s3c64xx_cpu_suspend(unsigned long arg) | |||
296 | 297 | ||
297 | /* we should never get past here */ | 298 | /* we should never get past here */ |
298 | 299 | ||
299 | panic("sleep resumed to originator?"); | 300 | pr_info("Failed to suspend the system\n"); |
301 | return 1; /* Aborting suspend */ | ||
300 | } | 302 | } |
301 | 303 | ||
302 | /* mapping of interrupts to parts of the wakeup mask */ | 304 | /* mapping of interrupts to parts of the wakeup mask */ |
diff --git a/arch/arm/mach-s3c64xx/include/mach/regs-gpio-memport.h b/arch/arm/mach-s3c64xx/regs-gpio-memport.h index 82342f6fd27d..b927593019f5 100644 --- a/arch/arm/mach-s3c64xx/include/mach/regs-gpio-memport.h +++ b/arch/arm/mach-s3c64xx/regs-gpio-memport.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/plat-s3c64xx/include/mach/regs-gpio-memport.h | 1 | /* |
2 | * | ||
3 | * Copyright 2008 Openmoko, Inc. | 2 | * Copyright 2008 Openmoko, Inc. |
4 | * Copyright 2008 Simtec Electronics | 3 | * Copyright 2008 Simtec Electronics |
5 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
@@ -8,8 +7,8 @@ | |||
8 | * S3C64XX - GPIO memory port register definitions | 7 | * S3C64XX - GPIO memory port register definitions |
9 | */ | 8 | */ |
10 | 9 | ||
11 | #ifndef __ASM_PLAT_S3C64XX_REGS_GPIO_MEMPORT_H | 10 | #ifndef __MACH_S3C64XX_REGS_GPIO_MEMPORT_H |
12 | #define __ASM_PLAT_S3C64XX_REGS_GPIO_MEMPORT_H __FILE__ | 11 | #define __MACH_S3C64XX_REGS_GPIO_MEMPORT_H __FILE__ |
13 | 12 | ||
14 | #define S3C64XX_MEM0CONSTOP S3C64XX_GPIOREG(0x1B0) | 13 | #define S3C64XX_MEM0CONSTOP S3C64XX_GPIOREG(0x1B0) |
15 | #define S3C64XX_MEM1CONSTOP S3C64XX_GPIOREG(0x1B4) | 14 | #define S3C64XX_MEM1CONSTOP S3C64XX_GPIOREG(0x1B4) |
@@ -21,5 +20,5 @@ | |||
21 | #define S3C64XX_MEM0DRVCON S3C64XX_GPIOREG(0x1D0) | 20 | #define S3C64XX_MEM0DRVCON S3C64XX_GPIOREG(0x1D0) |
22 | #define S3C64XX_MEM1DRVCON S3C64XX_GPIOREG(0x1D4) | 21 | #define S3C64XX_MEM1DRVCON S3C64XX_GPIOREG(0x1D4) |
23 | 22 | ||
24 | #endif /* __ASM_PLAT_S3C64XX_REGS_GPIO_MEMPORT_H */ | 23 | #endif /* __MACH_S3C64XX_REGS_GPIO_MEMPORT_H */ |
25 | 24 | ||
diff --git a/arch/arm/mach-s3c64xx/include/mach/regs-modem.h b/arch/arm/mach-s3c64xx/regs-modem.h index 49f7759dedfa..073cdd3a03be 100644 --- a/arch/arm/mach-s3c64xx/include/mach/regs-modem.h +++ b/arch/arm/mach-s3c64xx/regs-modem.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* arch/arm/plat-s3c64xx/include/plat/regs-modem.h | 1 | /* |
2 | * | ||
3 | * Copyright 2008 Openmoko, Inc. | 2 | * Copyright 2008 Openmoko, Inc. |
4 | * Copyright 2008 Simtec Electronics | 3 | * Copyright 2008 Simtec Electronics |
5 | * http://armlinux.simtec.co.uk/ | 4 | * http://armlinux.simtec.co.uk/ |
@@ -12,10 +11,10 @@ | |||
12 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
13 | */ | 12 | */ |
14 | 13 | ||
15 | #ifndef __PLAT_S3C64XX_REGS_MODEM_H | 14 | #ifndef __MACH_S3C64XX_REGS_MODEM_H |
16 | #define __PLAT_S3C64XX_REGS_MODEM_H __FILE__ | 15 | #define __MACH_S3C64XX_REGS_MODEM_H __FILE__ |
17 | 16 | ||
18 | #define S3C64XX_MODEMREG(x) (S3C64XX_VA_MODEM + (x)) | 17 | #define S3C64XX_MODEMREG(x) (S3C64XX_VA_MODEM + (x)) |
19 | 18 | ||
20 | #define S3C64XX_MODEM_INT2AP S3C64XX_MODEMREG(0x0) | 19 | #define S3C64XX_MODEM_INT2AP S3C64XX_MODEMREG(0x0) |
21 | #define S3C64XX_MODEM_INT2MODEM S3C64XX_MODEMREG(0x4) | 20 | #define S3C64XX_MODEM_INT2MODEM S3C64XX_MODEMREG(0x4) |
@@ -28,4 +27,4 @@ | |||
28 | #define MIFPCON_INT2M_LEVEL (1 << 4) | 27 | #define MIFPCON_INT2M_LEVEL (1 << 4) |
29 | #define MIFPCON_LCD_BYPASS (1 << 3) | 28 | #define MIFPCON_LCD_BYPASS (1 << 3) |
30 | 29 | ||
31 | #endif /* __PLAT_S3C64XX_REGS_MODEM_H */ | 30 | #endif /* __MACH_S3C64XX_REGS_MODEM_H */ |
diff --git a/arch/arm/mach-s3c64xx/include/mach/regs-srom.h b/arch/arm/mach-s3c64xx/regs-srom.h index 756731b36297..d56f3386eb00 100644 --- a/arch/arm/mach-s3c64xx/include/mach/regs-srom.h +++ b/arch/arm/mach-s3c64xx/regs-srom.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* arch/arm/plat-s3c64xx/include/plat/regs-srom.h | 1 | /* |
2 | * | ||
3 | * Copyright 2009 Andy Green <andy@warmcat.com> | 2 | * Copyright 2009 Andy Green <andy@warmcat.com> |
4 | * | 3 | * |
5 | * S3C64XX SROM definitions | 4 | * S3C64XX SROM definitions |
@@ -9,8 +8,8 @@ | |||
9 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
10 | */ | 9 | */ |
11 | 10 | ||
12 | #ifndef __PLAT_REGS_SROM_H | 11 | #ifndef __MACH_S3C64XX_REGS_SROM_H |
13 | #define __PLAT_REGS_SROM_H __FILE__ | 12 | #define __MACH_S3C64XX_REGS_SROM_H __FILE__ |
14 | 13 | ||
15 | #define S3C64XX_SROMREG(x) (S3C_VA_MEM + (x)) | 14 | #define S3C64XX_SROMREG(x) (S3C_VA_MEM + (x)) |
16 | 15 | ||
@@ -29,7 +28,7 @@ | |||
29 | #define S3C64XX_SROM_BW__DATAWIDTH__SHIFT 0 | 28 | #define S3C64XX_SROM_BW__DATAWIDTH__SHIFT 0 |
30 | #define S3C64XX_SROM_BW__WAITENABLE__SHIFT 2 | 29 | #define S3C64XX_SROM_BW__WAITENABLE__SHIFT 2 |
31 | #define S3C64XX_SROM_BW__BYTEENABLE__SHIFT 3 | 30 | #define S3C64XX_SROM_BW__BYTEENABLE__SHIFT 3 |
32 | #define S3C64XX_SROM_BW__CS_MASK 0xf | 31 | #define S3C64XX_SROM_BW__CS_MASK 0xf |
33 | 32 | ||
34 | #define S3C64XX_SROM_BW__NCS0__SHIFT 0 | 33 | #define S3C64XX_SROM_BW__NCS0__SHIFT 0 |
35 | #define S3C64XX_SROM_BW__NCS1__SHIFT 4 | 34 | #define S3C64XX_SROM_BW__NCS1__SHIFT 4 |
@@ -56,4 +55,4 @@ | |||
56 | #define S3C64XX_SROM_BCX__TACS__SHIFT 28 | 55 | #define S3C64XX_SROM_BCX__TACS__SHIFT 28 |
57 | #define S3C64XX_SROM_BCX__TACS__MASK 0xf | 56 | #define S3C64XX_SROM_BCX__TACS__MASK 0xf |
58 | 57 | ||
59 | #endif /* _PLAT_REGS_SROM_H */ | 58 | #endif /* __MACH_S3C64XX_REGS_SROM_H */ |
diff --git a/arch/arm/mach-s3c64xx/regs-sys.h b/arch/arm/mach-s3c64xx/regs-sys.h new file mode 100644 index 000000000000..8c411fbb0cd9 --- /dev/null +++ b/arch/arm/mach-s3c64xx/regs-sys.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * Copyright 2008 Openmoko, Inc. | ||
3 | * Copyright 2008 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * http://armlinux.simtec.co.uk/ | ||
6 | * | ||
7 | * S3C64XX system register definitions | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_S3C64XX_REGS_SYS_H | ||
15 | #define __MACH_S3C64XX_REGS_SYS_H __FILE__ | ||
16 | |||
17 | #define S3C_SYSREG(x) (S3C_VA_SYS + (x)) | ||
18 | |||
19 | #define S3C64XX_AHB_CON0 S3C_SYSREG(0x100) | ||
20 | #define S3C64XX_AHB_CON1 S3C_SYSREG(0x104) | ||
21 | #define S3C64XX_AHB_CON2 S3C_SYSREG(0x108) | ||
22 | |||
23 | #define S3C64XX_SDMA_SEL S3C_SYSREG(0x110) | ||
24 | |||
25 | #define S3C64XX_OTHERS S3C_SYSREG(0x900) | ||
26 | |||
27 | #define S3C64XX_OTHERS_USBMASK (1 << 16) | ||
28 | #define S3C64XX_OTHERS_SYNCMUXSEL (1 << 6) | ||
29 | |||
30 | #endif /* __MACH_S3C64XX_REGS_SYS_H */ | ||
diff --git a/arch/arm/mach-s3c64xx/include/mach/regs-syscon-power.h b/arch/arm/mach-s3c64xx/regs-syscon-power.h index 270d96ac9705..6e16b3404da9 100644 --- a/arch/arm/mach-s3c64xx/include/mach/regs-syscon-power.h +++ b/arch/arm/mach-s3c64xx/regs-syscon-power.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* arch/arm/plat-s3c64xx/include/plat/regs-syscon-power.h | 1 | /* |
2 | * | ||
3 | * Copyright 2008 Openmoko, Inc. | 2 | * Copyright 2008 Openmoko, Inc. |
4 | * Copyright 2008 Simtec Electronics | 3 | * Copyright 2008 Simtec Electronics |
5 | * http://armlinux.simtec.co.uk/ | 4 | * http://armlinux.simtec.co.uk/ |
@@ -12,8 +11,8 @@ | |||
12 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
13 | */ | 12 | */ |
14 | 13 | ||
15 | #ifndef __PLAT_S3C64XX_REGS_SYSCON_POWER_H | 14 | #ifndef __MACH_S3C64XX_REGS_SYSCON_POWER_H |
16 | #define __PLAT_S3C64XX_REGS_SYSCON_POWER_H __FILE__ | 15 | #define __MACH_S3C64XX_REGS_SYSCON_POWER_H __FILE__ |
17 | 16 | ||
18 | #define S3C64XX_PWR_CFG S3C_SYSREG(0x804) | 17 | #define S3C64XX_PWR_CFG S3C_SYSREG(0x804) |
19 | 18 | ||
@@ -113,4 +112,4 @@ | |||
113 | #define S3C64XX_INFORM2 S3C_SYSREG(0xA08) | 112 | #define S3C64XX_INFORM2 S3C_SYSREG(0xA08) |
114 | #define S3C64XX_INFORM3 S3C_SYSREG(0xA0C) | 113 | #define S3C64XX_INFORM3 S3C_SYSREG(0xA0C) |
115 | 114 | ||
116 | #endif /* __PLAT_S3C64XX_REGS_SYSCON_POWER_H */ | 115 | #endif /* __MACH_S3C64XX_REGS_SYSCON_POWER_H */ |
diff --git a/arch/arm/mach-s3c64xx/setup-usb-phy.c b/arch/arm/mach-s3c64xx/setup-usb-phy.c index f6757e02d7db..c8174d95339b 100644 --- a/arch/arm/mach-s3c64xx/setup-usb-phy.c +++ b/arch/arm/mach-s3c64xx/setup-usb-phy.c | |||
@@ -15,11 +15,12 @@ | |||
15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <mach/map.h> | 17 | #include <mach/map.h> |
18 | #include <mach/regs-sys.h> | ||
19 | #include <plat/cpu.h> | 18 | #include <plat/cpu.h> |
20 | #include <plat/regs-usb-hsotg-phy.h> | 19 | #include <plat/regs-usb-hsotg-phy.h> |
21 | #include <plat/usb-phy.h> | 20 | #include <plat/usb-phy.h> |
22 | 21 | ||
22 | #include "regs-sys.h" | ||
23 | |||
23 | static int s3c_usb_otgphy_init(struct platform_device *pdev) | 24 | static int s3c_usb_otgphy_init(struct platform_device *pdev) |
24 | { | 25 | { |
25 | struct clk *xusbxti; | 26 | struct clk *xusbxti; |
diff --git a/arch/arm/mach-s5p64x0/clock-s5p6440.c b/arch/arm/mach-s5p64x0/clock-s5p6440.c index 5112371079d0..3537815247f1 100644 --- a/arch/arm/mach-s5p64x0/clock-s5p6440.c +++ b/arch/arm/mach-s5p64x0/clock-s5p6440.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
24 | #include <mach/map.h> | 24 | #include <mach/map.h> |
25 | #include <mach/regs-clock.h> | 25 | #include <mach/regs-clock.h> |
26 | #include <mach/s5p64x0-clock.h> | ||
27 | 26 | ||
28 | #include <plat/cpu-freq.h> | 27 | #include <plat/cpu-freq.h> |
29 | #include <plat/clock.h> | 28 | #include <plat/clock.h> |
@@ -32,6 +31,7 @@ | |||
32 | #include <plat/s5p-clock.h> | 31 | #include <plat/s5p-clock.h> |
33 | #include <plat/clock-clksrc.h> | 32 | #include <plat/clock-clksrc.h> |
34 | 33 | ||
34 | #include "clock.h" | ||
35 | #include "common.h" | 35 | #include "common.h" |
36 | 36 | ||
37 | static u32 epll_div[][5] = { | 37 | static u32 epll_div[][5] = { |
diff --git a/arch/arm/mach-s5p64x0/clock-s5p6450.c b/arch/arm/mach-s5p64x0/clock-s5p6450.c index 154dea702d70..af384ddd2dcf 100644 --- a/arch/arm/mach-s5p64x0/clock-s5p6450.c +++ b/arch/arm/mach-s5p64x0/clock-s5p6450.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
24 | #include <mach/map.h> | 24 | #include <mach/map.h> |
25 | #include <mach/regs-clock.h> | 25 | #include <mach/regs-clock.h> |
26 | #include <mach/s5p64x0-clock.h> | ||
27 | 26 | ||
28 | #include <plat/cpu-freq.h> | 27 | #include <plat/cpu-freq.h> |
29 | #include <plat/clock.h> | 28 | #include <plat/clock.h> |
@@ -32,6 +31,7 @@ | |||
32 | #include <plat/s5p-clock.h> | 31 | #include <plat/s5p-clock.h> |
33 | #include <plat/clock-clksrc.h> | 32 | #include <plat/clock-clksrc.h> |
34 | 33 | ||
34 | #include "clock.h" | ||
35 | #include "common.h" | 35 | #include "common.h" |
36 | 36 | ||
37 | static struct clksrc_clk clk_mout_dpll = { | 37 | static struct clksrc_clk clk_mout_dpll = { |
diff --git a/arch/arm/mach-s5p64x0/include/mach/s5p64x0-clock.h b/arch/arm/mach-s5p64x0/clock.h index 0ef47d1b7670..28b8e3c6bd24 100644 --- a/arch/arm/mach-s5p64x0/include/mach/s5p64x0-clock.h +++ b/arch/arm/mach-s5p64x0/clock.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s5p64x0/include/mach/s5p64x0-clock.h | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. | 2 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. |
4 | * http://www.samsung.com | 3 | * http://www.samsung.com |
5 | * | 4 | * |
@@ -10,8 +9,8 @@ | |||
10 | * published by the Free Software Foundation. | 9 | * published by the Free Software Foundation. |
11 | */ | 10 | */ |
12 | 11 | ||
13 | #ifndef __ASM_ARCH_CLOCK_H | 12 | #ifndef __MACH_S5P64X0_CLOCK_H |
14 | #define __ASM_ARCH_CLOCK_H __FILE__ | 13 | #define __MACH_S5P64X0_CLOCK_H __FILE__ |
15 | 14 | ||
16 | #include <linux/clk.h> | 15 | #include <linux/clk.h> |
17 | 16 | ||
@@ -36,4 +35,4 @@ extern int s5p64x0_mem_ctrl(struct clk *clk, int enable); | |||
36 | 35 | ||
37 | extern int s5p64x0_clk48m_ctrl(struct clk *clk, int enable); | 36 | extern int s5p64x0_clk48m_ctrl(struct clk *clk, int enable); |
38 | 37 | ||
39 | #endif /* __ASM_ARCH_CLOCK_H */ | 38 | #endif /* __MACH_S5P64X0_CLOCK_H */ |
diff --git a/arch/arm/mach-s5p64x0/gpiolib.c b/arch/arm/mach-s5p64x0/gpiolib.c deleted file mode 100644 index 700dac6c43f3..000000000000 --- a/arch/arm/mach-s5p64x0/gpiolib.c +++ /dev/null | |||
@@ -1,508 +0,0 @@ | |||
1 | /* linux/arch/arm/mach-s5p64x0/gpiolib.c | ||
2 | * | ||
3 | * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd. | ||
4 | * http://www.samsung.com | ||
5 | * | ||
6 | * S5P64X0 - GPIOlib support | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/irq.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/gpio.h> | ||
17 | |||
18 | #include <mach/map.h> | ||
19 | #include <mach/regs-gpio.h> | ||
20 | #include <mach/regs-clock.h> | ||
21 | |||
22 | #include <plat/cpu.h> | ||
23 | #include <plat/gpio-core.h> | ||
24 | #include <plat/gpio-cfg.h> | ||
25 | #include <plat/gpio-cfg-helpers.h> | ||
26 | |||
27 | /* | ||
28 | * S5P6440 GPIO bank summary: | ||
29 | * | ||
30 | * Bank GPIOs Style SlpCon ExtInt Group | ||
31 | * A 6 4Bit Yes 1 | ||
32 | * B 7 4Bit Yes 1 | ||
33 | * C 8 4Bit Yes 2 | ||
34 | * F 2 2Bit Yes 4 [1] | ||
35 | * G 7 4Bit Yes 5 | ||
36 | * H 10 4Bit[2] Yes 6 | ||
37 | * I 16 2Bit Yes None | ||
38 | * J 12 2Bit Yes None | ||
39 | * N 16 2Bit No IRQ_EINT | ||
40 | * P 8 2Bit Yes 8 | ||
41 | * R 15 4Bit[2] Yes 8 | ||
42 | * | ||
43 | * S5P6450 GPIO bank summary: | ||
44 | * | ||
45 | * Bank GPIOs Style SlpCon ExtInt Group | ||
46 | * A 6 4Bit Yes 1 | ||
47 | * B 7 4Bit Yes 1 | ||
48 | * C 8 4Bit Yes 2 | ||
49 | * D 8 4Bit Yes None | ||
50 | * F 2 2Bit Yes None | ||
51 | * G 14 4Bit[2] Yes 5 | ||
52 | * H 10 4Bit[2] Yes 6 | ||
53 | * I 16 2Bit Yes None | ||
54 | * J 12 2Bit Yes None | ||
55 | * K 5 4Bit Yes None | ||
56 | * N 16 2Bit No IRQ_EINT | ||
57 | * P 11 2Bit Yes 8 | ||
58 | * Q 14 2Bit Yes None | ||
59 | * R 15 4Bit[2] Yes None | ||
60 | * S 8 2Bit Yes None | ||
61 | * | ||
62 | * [1] BANKF pins 14,15 do not form part of the external interrupt sources | ||
63 | * [2] BANK has two control registers, GPxCON0 and GPxCON1 | ||
64 | */ | ||
65 | |||
66 | static int s5p64x0_gpiolib_rbank_4bit2_input(struct gpio_chip *chip, | ||
67 | unsigned int offset) | ||
68 | { | ||
69 | struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip); | ||
70 | void __iomem *base = ourchip->base; | ||
71 | void __iomem *regcon = base; | ||
72 | unsigned long con; | ||
73 | unsigned long flags; | ||
74 | |||
75 | switch (offset) { | ||
76 | case 6: | ||
77 | offset += 1; | ||
78 | case 0: | ||
79 | case 1: | ||
80 | case 2: | ||
81 | case 3: | ||
82 | case 4: | ||
83 | case 5: | ||
84 | regcon -= 4; | ||
85 | break; | ||
86 | default: | ||
87 | offset -= 7; | ||
88 | break; | ||
89 | } | ||
90 | |||
91 | s3c_gpio_lock(ourchip, flags); | ||
92 | |||
93 | con = __raw_readl(regcon); | ||
94 | con &= ~(0xf << con_4bit_shift(offset)); | ||
95 | __raw_writel(con, regcon); | ||
96 | |||
97 | s3c_gpio_unlock(ourchip, flags); | ||
98 | |||
99 | return 0; | ||
100 | } | ||
101 | |||
102 | static int s5p64x0_gpiolib_rbank_4bit2_output(struct gpio_chip *chip, | ||
103 | unsigned int offset, int value) | ||
104 | { | ||
105 | struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip); | ||
106 | void __iomem *base = ourchip->base; | ||
107 | void __iomem *regcon = base; | ||
108 | unsigned long con; | ||
109 | unsigned long dat; | ||
110 | unsigned long flags; | ||
111 | unsigned con_offset = offset; | ||
112 | |||
113 | switch (con_offset) { | ||
114 | case 6: | ||
115 | con_offset += 1; | ||
116 | case 0: | ||
117 | case 1: | ||
118 | case 2: | ||
119 | case 3: | ||
120 | case 4: | ||
121 | case 5: | ||
122 | regcon -= 4; | ||
123 | break; | ||
124 | default: | ||
125 | con_offset -= 7; | ||
126 | break; | ||
127 | } | ||
128 | |||
129 | s3c_gpio_lock(ourchip, flags); | ||
130 | |||
131 | con = __raw_readl(regcon); | ||
132 | con &= ~(0xf << con_4bit_shift(con_offset)); | ||
133 | con |= 0x1 << con_4bit_shift(con_offset); | ||
134 | |||
135 | dat = __raw_readl(base + GPIODAT_OFF); | ||
136 | if (value) | ||
137 | dat |= 1 << offset; | ||
138 | else | ||
139 | dat &= ~(1 << offset); | ||
140 | |||
141 | __raw_writel(con, regcon); | ||
142 | __raw_writel(dat, base + GPIODAT_OFF); | ||
143 | |||
144 | s3c_gpio_unlock(ourchip, flags); | ||
145 | |||
146 | return 0; | ||
147 | } | ||
148 | |||
149 | int s5p64x0_gpio_setcfg_4bit_rbank(struct s3c_gpio_chip *chip, | ||
150 | unsigned int off, unsigned int cfg) | ||
151 | { | ||
152 | void __iomem *reg = chip->base; | ||
153 | unsigned int shift; | ||
154 | u32 con; | ||
155 | |||
156 | switch (off) { | ||
157 | case 0: | ||
158 | case 1: | ||
159 | case 2: | ||
160 | case 3: | ||
161 | case 4: | ||
162 | case 5: | ||
163 | shift = (off & 7) * 4; | ||
164 | reg -= 4; | ||
165 | break; | ||
166 | case 6: | ||
167 | shift = ((off + 1) & 7) * 4; | ||
168 | reg -= 4; | ||
169 | default: | ||
170 | shift = ((off + 1) & 7) * 4; | ||
171 | break; | ||
172 | } | ||
173 | |||
174 | if (s3c_gpio_is_cfg_special(cfg)) { | ||
175 | cfg &= 0xf; | ||
176 | cfg <<= shift; | ||
177 | } | ||
178 | |||
179 | con = __raw_readl(reg); | ||
180 | con &= ~(0xf << shift); | ||
181 | con |= cfg; | ||
182 | __raw_writel(con, reg); | ||
183 | |||
184 | return 0; | ||
185 | } | ||
186 | |||
187 | static struct s3c_gpio_cfg s5p64x0_gpio_cfgs[] = { | ||
188 | { | ||
189 | .cfg_eint = 0, | ||
190 | }, { | ||
191 | .cfg_eint = 7, | ||
192 | }, { | ||
193 | .cfg_eint = 3, | ||
194 | .set_config = s5p64x0_gpio_setcfg_4bit_rbank, | ||
195 | }, { | ||
196 | .cfg_eint = 0, | ||
197 | .set_config = s3c_gpio_setcfg_s3c24xx, | ||
198 | .get_config = s3c_gpio_getcfg_s3c24xx, | ||
199 | }, { | ||
200 | .cfg_eint = 2, | ||
201 | .set_config = s3c_gpio_setcfg_s3c24xx, | ||
202 | .get_config = s3c_gpio_getcfg_s3c24xx, | ||
203 | }, { | ||
204 | .cfg_eint = 3, | ||
205 | .set_config = s3c_gpio_setcfg_s3c24xx, | ||
206 | .get_config = s3c_gpio_getcfg_s3c24xx, | ||
207 | }, | ||
208 | }; | ||
209 | |||
210 | static struct s3c_gpio_chip s5p6440_gpio_4bit[] = { | ||
211 | { | ||
212 | .base = S5P64X0_GPA_BASE, | ||
213 | .config = &s5p64x0_gpio_cfgs[1], | ||
214 | .chip = { | ||
215 | .base = S5P6440_GPA(0), | ||
216 | .ngpio = S5P6440_GPIO_A_NR, | ||
217 | .label = "GPA", | ||
218 | }, | ||
219 | }, { | ||
220 | .base = S5P64X0_GPB_BASE, | ||
221 | .config = &s5p64x0_gpio_cfgs[1], | ||
222 | .chip = { | ||
223 | .base = S5P6440_GPB(0), | ||
224 | .ngpio = S5P6440_GPIO_B_NR, | ||
225 | .label = "GPB", | ||
226 | }, | ||
227 | }, { | ||
228 | .base = S5P64X0_GPC_BASE, | ||
229 | .config = &s5p64x0_gpio_cfgs[1], | ||
230 | .chip = { | ||
231 | .base = S5P6440_GPC(0), | ||
232 | .ngpio = S5P6440_GPIO_C_NR, | ||
233 | .label = "GPC", | ||
234 | }, | ||
235 | }, { | ||
236 | .base = S5P64X0_GPG_BASE, | ||
237 | .config = &s5p64x0_gpio_cfgs[1], | ||
238 | .chip = { | ||
239 | .base = S5P6440_GPG(0), | ||
240 | .ngpio = S5P6440_GPIO_G_NR, | ||
241 | .label = "GPG", | ||
242 | }, | ||
243 | }, | ||
244 | }; | ||
245 | |||
246 | static struct s3c_gpio_chip s5p6440_gpio_4bit2[] = { | ||
247 | { | ||
248 | .base = S5P64X0_GPH_BASE + 0x4, | ||
249 | .config = &s5p64x0_gpio_cfgs[1], | ||
250 | .chip = { | ||
251 | .base = S5P6440_GPH(0), | ||
252 | .ngpio = S5P6440_GPIO_H_NR, | ||
253 | .label = "GPH", | ||
254 | }, | ||
255 | }, | ||
256 | }; | ||
257 | |||
258 | static struct s3c_gpio_chip s5p6440_gpio_rbank_4bit2[] = { | ||
259 | { | ||
260 | .base = S5P64X0_GPR_BASE + 0x4, | ||
261 | .config = &s5p64x0_gpio_cfgs[2], | ||
262 | .chip = { | ||
263 | .base = S5P6440_GPR(0), | ||
264 | .ngpio = S5P6440_GPIO_R_NR, | ||
265 | .label = "GPR", | ||
266 | }, | ||
267 | }, | ||
268 | }; | ||
269 | |||
270 | static struct s3c_gpio_chip s5p6440_gpio_2bit[] = { | ||
271 | { | ||
272 | .base = S5P64X0_GPF_BASE, | ||
273 | .config = &s5p64x0_gpio_cfgs[5], | ||
274 | .chip = { | ||
275 | .base = S5P6440_GPF(0), | ||
276 | .ngpio = S5P6440_GPIO_F_NR, | ||
277 | .label = "GPF", | ||
278 | }, | ||
279 | }, { | ||
280 | .base = S5P64X0_GPI_BASE, | ||
281 | .config = &s5p64x0_gpio_cfgs[3], | ||
282 | .chip = { | ||
283 | .base = S5P6440_GPI(0), | ||
284 | .ngpio = S5P6440_GPIO_I_NR, | ||
285 | .label = "GPI", | ||
286 | }, | ||
287 | }, { | ||
288 | .base = S5P64X0_GPJ_BASE, | ||
289 | .config = &s5p64x0_gpio_cfgs[3], | ||
290 | .chip = { | ||
291 | .base = S5P6440_GPJ(0), | ||
292 | .ngpio = S5P6440_GPIO_J_NR, | ||
293 | .label = "GPJ", | ||
294 | }, | ||
295 | }, { | ||
296 | .base = S5P64X0_GPN_BASE, | ||
297 | .config = &s5p64x0_gpio_cfgs[4], | ||
298 | .chip = { | ||
299 | .base = S5P6440_GPN(0), | ||
300 | .ngpio = S5P6440_GPIO_N_NR, | ||
301 | .label = "GPN", | ||
302 | }, | ||
303 | }, { | ||
304 | .base = S5P64X0_GPP_BASE, | ||
305 | .config = &s5p64x0_gpio_cfgs[5], | ||
306 | .chip = { | ||
307 | .base = S5P6440_GPP(0), | ||
308 | .ngpio = S5P6440_GPIO_P_NR, | ||
309 | .label = "GPP", | ||
310 | }, | ||
311 | }, | ||
312 | }; | ||
313 | |||
314 | static struct s3c_gpio_chip s5p6450_gpio_4bit[] = { | ||
315 | { | ||
316 | .base = S5P64X0_GPA_BASE, | ||
317 | .config = &s5p64x0_gpio_cfgs[1], | ||
318 | .chip = { | ||
319 | .base = S5P6450_GPA(0), | ||
320 | .ngpio = S5P6450_GPIO_A_NR, | ||
321 | .label = "GPA", | ||
322 | }, | ||
323 | }, { | ||
324 | .base = S5P64X0_GPB_BASE, | ||
325 | .config = &s5p64x0_gpio_cfgs[1], | ||
326 | .chip = { | ||
327 | .base = S5P6450_GPB(0), | ||
328 | .ngpio = S5P6450_GPIO_B_NR, | ||
329 | .label = "GPB", | ||
330 | }, | ||
331 | }, { | ||
332 | .base = S5P64X0_GPC_BASE, | ||
333 | .config = &s5p64x0_gpio_cfgs[1], | ||
334 | .chip = { | ||
335 | .base = S5P6450_GPC(0), | ||
336 | .ngpio = S5P6450_GPIO_C_NR, | ||
337 | .label = "GPC", | ||
338 | }, | ||
339 | }, { | ||
340 | .base = S5P6450_GPD_BASE, | ||
341 | .config = &s5p64x0_gpio_cfgs[1], | ||
342 | .chip = { | ||
343 | .base = S5P6450_GPD(0), | ||
344 | .ngpio = S5P6450_GPIO_D_NR, | ||
345 | .label = "GPD", | ||
346 | }, | ||
347 | }, { | ||
348 | .base = S5P6450_GPK_BASE, | ||
349 | .config = &s5p64x0_gpio_cfgs[1], | ||
350 | .chip = { | ||
351 | .base = S5P6450_GPK(0), | ||
352 | .ngpio = S5P6450_GPIO_K_NR, | ||
353 | .label = "GPK", | ||
354 | }, | ||
355 | }, | ||
356 | }; | ||
357 | |||
358 | static struct s3c_gpio_chip s5p6450_gpio_4bit2[] = { | ||
359 | { | ||
360 | .base = S5P64X0_GPG_BASE + 0x4, | ||
361 | .config = &s5p64x0_gpio_cfgs[1], | ||
362 | .chip = { | ||
363 | .base = S5P6450_GPG(0), | ||
364 | .ngpio = S5P6450_GPIO_G_NR, | ||
365 | .label = "GPG", | ||
366 | }, | ||
367 | }, { | ||
368 | .base = S5P64X0_GPH_BASE + 0x4, | ||
369 | .config = &s5p64x0_gpio_cfgs[1], | ||
370 | .chip = { | ||
371 | .base = S5P6450_GPH(0), | ||
372 | .ngpio = S5P6450_GPIO_H_NR, | ||
373 | .label = "GPH", | ||
374 | }, | ||
375 | }, | ||
376 | }; | ||
377 | |||
378 | static struct s3c_gpio_chip s5p6450_gpio_rbank_4bit2[] = { | ||
379 | { | ||
380 | .base = S5P64X0_GPR_BASE + 0x4, | ||
381 | .config = &s5p64x0_gpio_cfgs[2], | ||
382 | .chip = { | ||
383 | .base = S5P6450_GPR(0), | ||
384 | .ngpio = S5P6450_GPIO_R_NR, | ||
385 | .label = "GPR", | ||
386 | }, | ||
387 | }, | ||
388 | }; | ||
389 | |||
390 | static struct s3c_gpio_chip s5p6450_gpio_2bit[] = { | ||
391 | { | ||
392 | .base = S5P64X0_GPF_BASE, | ||
393 | .config = &s5p64x0_gpio_cfgs[5], | ||
394 | .chip = { | ||
395 | .base = S5P6450_GPF(0), | ||
396 | .ngpio = S5P6450_GPIO_F_NR, | ||
397 | .label = "GPF", | ||
398 | }, | ||
399 | }, { | ||
400 | .base = S5P64X0_GPI_BASE, | ||
401 | .config = &s5p64x0_gpio_cfgs[3], | ||
402 | .chip = { | ||
403 | .base = S5P6450_GPI(0), | ||
404 | .ngpio = S5P6450_GPIO_I_NR, | ||
405 | .label = "GPI", | ||
406 | }, | ||
407 | }, { | ||
408 | .base = S5P64X0_GPJ_BASE, | ||
409 | .config = &s5p64x0_gpio_cfgs[3], | ||
410 | .chip = { | ||
411 | .base = S5P6450_GPJ(0), | ||
412 | .ngpio = S5P6450_GPIO_J_NR, | ||
413 | .label = "GPJ", | ||
414 | }, | ||
415 | }, { | ||
416 | .base = S5P64X0_GPN_BASE, | ||
417 | .config = &s5p64x0_gpio_cfgs[4], | ||
418 | .chip = { | ||
419 | .base = S5P6450_GPN(0), | ||
420 | .ngpio = S5P6450_GPIO_N_NR, | ||
421 | .label = "GPN", | ||
422 | }, | ||
423 | }, { | ||
424 | .base = S5P64X0_GPP_BASE, | ||
425 | .config = &s5p64x0_gpio_cfgs[5], | ||
426 | .chip = { | ||
427 | .base = S5P6450_GPP(0), | ||
428 | .ngpio = S5P6450_GPIO_P_NR, | ||
429 | .label = "GPP", | ||
430 | }, | ||
431 | }, { | ||
432 | .base = S5P6450_GPQ_BASE, | ||
433 | .config = &s5p64x0_gpio_cfgs[4], | ||
434 | .chip = { | ||
435 | .base = S5P6450_GPQ(0), | ||
436 | .ngpio = S5P6450_GPIO_Q_NR, | ||
437 | .label = "GPQ", | ||
438 | }, | ||
439 | }, { | ||
440 | .base = S5P6450_GPS_BASE, | ||
441 | .config = &s5p64x0_gpio_cfgs[5], | ||
442 | .chip = { | ||
443 | .base = S5P6450_GPS(0), | ||
444 | .ngpio = S5P6450_GPIO_S_NR, | ||
445 | .label = "GPS", | ||
446 | }, | ||
447 | }, | ||
448 | }; | ||
449 | |||
450 | void __init s5p64x0_gpiolib_set_cfg(struct s3c_gpio_cfg *chipcfg, int nr_chips) | ||
451 | { | ||
452 | for (; nr_chips > 0; nr_chips--, chipcfg++) { | ||
453 | if (!chipcfg->set_config) | ||
454 | chipcfg->set_config = s3c_gpio_setcfg_s3c64xx_4bit; | ||
455 | if (!chipcfg->get_config) | ||
456 | chipcfg->get_config = s3c_gpio_getcfg_s3c64xx_4bit; | ||
457 | if (!chipcfg->set_pull) | ||
458 | chipcfg->set_pull = s3c_gpio_setpull_updown; | ||
459 | if (!chipcfg->get_pull) | ||
460 | chipcfg->get_pull = s3c_gpio_getpull_updown; | ||
461 | } | ||
462 | } | ||
463 | |||
464 | static void __init s5p64x0_gpio_add_rbank_4bit2(struct s3c_gpio_chip *chip, | ||
465 | int nr_chips) | ||
466 | { | ||
467 | for (; nr_chips > 0; nr_chips--, chip++) { | ||
468 | chip->chip.direction_input = s5p64x0_gpiolib_rbank_4bit2_input; | ||
469 | chip->chip.direction_output = | ||
470 | s5p64x0_gpiolib_rbank_4bit2_output; | ||
471 | s3c_gpiolib_add(chip); | ||
472 | } | ||
473 | } | ||
474 | |||
475 | static int __init s5p64x0_gpiolib_init(void) | ||
476 | { | ||
477 | s5p64x0_gpiolib_set_cfg(s5p64x0_gpio_cfgs, | ||
478 | ARRAY_SIZE(s5p64x0_gpio_cfgs)); | ||
479 | |||
480 | if (soc_is_s5p6450()) { | ||
481 | samsung_gpiolib_add_2bit_chips(s5p6450_gpio_2bit, | ||
482 | ARRAY_SIZE(s5p6450_gpio_2bit)); | ||
483 | |||
484 | samsung_gpiolib_add_4bit_chips(s5p6450_gpio_4bit, | ||
485 | ARRAY_SIZE(s5p6450_gpio_4bit)); | ||
486 | |||
487 | samsung_gpiolib_add_4bit2_chips(s5p6450_gpio_4bit2, | ||
488 | ARRAY_SIZE(s5p6450_gpio_4bit2)); | ||
489 | |||
490 | s5p64x0_gpio_add_rbank_4bit2(s5p6450_gpio_rbank_4bit2, | ||
491 | ARRAY_SIZE(s5p6450_gpio_rbank_4bit2)); | ||
492 | } else { | ||
493 | samsung_gpiolib_add_2bit_chips(s5p6440_gpio_2bit, | ||
494 | ARRAY_SIZE(s5p6440_gpio_2bit)); | ||
495 | |||
496 | samsung_gpiolib_add_4bit_chips(s5p6440_gpio_4bit, | ||
497 | ARRAY_SIZE(s5p6440_gpio_4bit)); | ||
498 | |||
499 | samsung_gpiolib_add_4bit2_chips(s5p6440_gpio_4bit2, | ||
500 | ARRAY_SIZE(s5p6440_gpio_4bit2)); | ||
501 | |||
502 | s5p64x0_gpio_add_rbank_4bit2(s5p6440_gpio_rbank_4bit2, | ||
503 | ARRAY_SIZE(s5p6440_gpio_rbank_4bit2)); | ||
504 | } | ||
505 | |||
506 | return 0; | ||
507 | } | ||
508 | core_initcall(s5p64x0_gpiolib_init); | ||
diff --git a/arch/arm/mach-s5p64x0/include/mach/i2c.h b/arch/arm/mach-s5p64x0/i2c.h index 887d25209e8e..1e5bb4ea200d 100644 --- a/arch/arm/mach-s5p64x0/include/mach/i2c.h +++ b/arch/arm/mach-s5p64x0/i2c.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* linux/arch/arm/mach-s5p64x0/include/mach/i2c.h | 1 | /* |
2 | * | ||
3 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. | 2 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. |
4 | * http://www.samsung.com | 3 | * http://www.samsung.com |
5 | * | 4 | * |
diff --git a/arch/arm/mach-s5p64x0/include/mach/uncompress.h b/arch/arm/mach-s5p64x0/include/mach/uncompress.h index 1608faf870ff..19e0d64d78c5 100644 --- a/arch/arm/mach-s5p64x0/include/mach/uncompress.h +++ b/arch/arm/mach-s5p64x0/include/mach/uncompress.h | |||
@@ -116,33 +116,6 @@ static inline void flush(void) | |||
116 | *((volatile unsigned int __force *)(ad)) = (d); \ | 116 | *((volatile unsigned int __force *)(ad)) = (d); \ |
117 | } while (0) | 117 | } while (0) |
118 | 118 | ||
119 | /* | ||
120 | * CONFIG_S3C_BOOT_WATCHDOG | ||
121 | * | ||
122 | * Simple boot-time watchdog setup, to reboot the system if there is | ||
123 | * any problem with the boot process | ||
124 | */ | ||
125 | |||
126 | #ifdef CONFIG_S3C_BOOT_WATCHDOG | ||
127 | |||
128 | #define WDOG_COUNT (0xff00) | ||
129 | |||
130 | static inline void arch_decomp_wdog(void) | ||
131 | { | ||
132 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
133 | } | ||
134 | |||
135 | static void arch_decomp_wdog_start(void) | ||
136 | { | ||
137 | __raw_writel(WDOG_COUNT, S3C2410_WTDAT); | ||
138 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
139 | __raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x80), S3C2410_WTCON); | ||
140 | } | ||
141 | |||
142 | #else | ||
143 | #define arch_decomp_wdog_start() | ||
144 | #define arch_decomp_wdog() | ||
145 | #endif | ||
146 | 119 | ||
147 | #ifdef CONFIG_S3C_BOOT_ERROR_RESET | 120 | #ifdef CONFIG_S3C_BOOT_ERROR_RESET |
148 | 121 | ||
@@ -192,7 +165,6 @@ static void arch_decomp_setup(void) | |||
192 | */ | 165 | */ |
193 | 166 | ||
194 | arch_detect_cpu(); | 167 | arch_detect_cpu(); |
195 | arch_decomp_wdog_start(); | ||
196 | 168 | ||
197 | /* | 169 | /* |
198 | * Enable the UART FIFOs if they where not enabled and our | 170 | * Enable the UART FIFOs if they where not enabled and our |
diff --git a/arch/arm/mach-s5p64x0/mach-smdk6440.c b/arch/arm/mach-s5p64x0/mach-smdk6440.c index a40d5eb38124..e23723a5a214 100644 --- a/arch/arm/mach-s5p64x0/mach-smdk6440.c +++ b/arch/arm/mach-s5p64x0/mach-smdk6440.c | |||
@@ -37,7 +37,6 @@ | |||
37 | #include <mach/hardware.h> | 37 | #include <mach/hardware.h> |
38 | #include <mach/map.h> | 38 | #include <mach/map.h> |
39 | #include <mach/regs-clock.h> | 39 | #include <mach/regs-clock.h> |
40 | #include <mach/i2c.h> | ||
41 | #include <mach/regs-gpio.h> | 40 | #include <mach/regs-gpio.h> |
42 | 41 | ||
43 | #include <plat/regs-serial.h> | 42 | #include <plat/regs-serial.h> |
@@ -55,6 +54,7 @@ | |||
55 | #include <plat/sdhci.h> | 54 | #include <plat/sdhci.h> |
56 | 55 | ||
57 | #include "common.h" | 56 | #include "common.h" |
57 | #include "i2c.h" | ||
58 | 58 | ||
59 | #define SMDK6440_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \ | 59 | #define SMDK6440_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \ |
60 | S3C2410_UCON_RXILEVEL | \ | 60 | S3C2410_UCON_RXILEVEL | \ |
diff --git a/arch/arm/mach-s5p64x0/mach-smdk6450.c b/arch/arm/mach-s5p64x0/mach-smdk6450.c index 703e576a26e0..ca10963a959e 100644 --- a/arch/arm/mach-s5p64x0/mach-smdk6450.c +++ b/arch/arm/mach-s5p64x0/mach-smdk6450.c | |||
@@ -37,7 +37,6 @@ | |||
37 | #include <mach/hardware.h> | 37 | #include <mach/hardware.h> |
38 | #include <mach/map.h> | 38 | #include <mach/map.h> |
39 | #include <mach/regs-clock.h> | 39 | #include <mach/regs-clock.h> |
40 | #include <mach/i2c.h> | ||
41 | #include <mach/regs-gpio.h> | 40 | #include <mach/regs-gpio.h> |
42 | 41 | ||
43 | #include <plat/regs-serial.h> | 42 | #include <plat/regs-serial.h> |
@@ -55,6 +54,7 @@ | |||
55 | #include <plat/sdhci.h> | 54 | #include <plat/sdhci.h> |
56 | 55 | ||
57 | #include "common.h" | 56 | #include "common.h" |
57 | #include "i2c.h" | ||
58 | 58 | ||
59 | #define SMDK6450_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \ | 59 | #define SMDK6450_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \ |
60 | S3C2410_UCON_RXILEVEL | \ | 60 | S3C2410_UCON_RXILEVEL | \ |
diff --git a/arch/arm/mach-s5p64x0/pm.c b/arch/arm/mach-s5p64x0/pm.c index 9cba18bfe47b..97c2a08ad490 100644 --- a/arch/arm/mach-s5p64x0/pm.c +++ b/arch/arm/mach-s5p64x0/pm.c | |||
@@ -103,8 +103,8 @@ static int s5p64x0_cpu_suspend(unsigned long arg) | |||
103 | "mcr p15, 0, %0, c7, c10, 4\n\t" | 103 | "mcr p15, 0, %0, c7, c10, 4\n\t" |
104 | "mcr p15, 0, %0, c7, c0, 4" : : "r" (tmp)); | 104 | "mcr p15, 0, %0, c7, c0, 4" : : "r" (tmp)); |
105 | 105 | ||
106 | /* we should never get past here */ | 106 | pr_info("Failed to suspend the system\n"); |
107 | panic("sleep resumed to originator?"); | 107 | return 1; /* Aborting suspend */ |
108 | } | 108 | } |
109 | 109 | ||
110 | /* mapping of interrupts to parts of the wakeup mask */ | 110 | /* mapping of interrupts to parts of the wakeup mask */ |
diff --git a/arch/arm/mach-s5p64x0/setup-i2c0.c b/arch/arm/mach-s5p64x0/setup-i2c0.c index a32edc545e6c..569b76ac98cb 100644 --- a/arch/arm/mach-s5p64x0/setup-i2c0.c +++ b/arch/arm/mach-s5p64x0/setup-i2c0.c | |||
@@ -21,7 +21,7 @@ struct platform_device; /* don't need the contents */ | |||
21 | #include <plat/gpio-cfg.h> | 21 | #include <plat/gpio-cfg.h> |
22 | #include <linux/platform_data/i2c-s3c2410.h> | 22 | #include <linux/platform_data/i2c-s3c2410.h> |
23 | 23 | ||
24 | #include <mach/i2c.h> | 24 | #include "i2c.h" |
25 | 25 | ||
26 | void s5p6440_i2c0_cfg_gpio(struct platform_device *dev) | 26 | void s5p6440_i2c0_cfg_gpio(struct platform_device *dev) |
27 | { | 27 | { |
diff --git a/arch/arm/mach-s5p64x0/setup-i2c1.c b/arch/arm/mach-s5p64x0/setup-i2c1.c index ca2c5c7f8aa6..867374e6d0bc 100644 --- a/arch/arm/mach-s5p64x0/setup-i2c1.c +++ b/arch/arm/mach-s5p64x0/setup-i2c1.c | |||
@@ -21,7 +21,7 @@ struct platform_device; /* don't need the contents */ | |||
21 | #include <plat/gpio-cfg.h> | 21 | #include <plat/gpio-cfg.h> |
22 | #include <linux/platform_data/i2c-s3c2410.h> | 22 | #include <linux/platform_data/i2c-s3c2410.h> |
23 | 23 | ||
24 | #include <mach/i2c.h> | 24 | #include "i2c.h" |
25 | 25 | ||
26 | void s5p6440_i2c1_cfg_gpio(struct platform_device *dev) | 26 | void s5p6440_i2c1_cfg_gpio(struct platform_device *dev) |
27 | { | 27 | { |
diff --git a/arch/arm/mach-s5pv210/dev-audio.c b/arch/arm/mach-s5pv210/dev-audio.c index addfb165c13d..2d67361ef431 100644 --- a/arch/arm/mach-s5pv210/dev-audio.c +++ b/arch/arm/mach-s5pv210/dev-audio.c | |||
@@ -18,7 +18,8 @@ | |||
18 | #include <mach/map.h> | 18 | #include <mach/map.h> |
19 | #include <mach/dma.h> | 19 | #include <mach/dma.h> |
20 | #include <mach/irqs.h> | 20 | #include <mach/irqs.h> |
21 | #include <mach/regs-audss.h> | 21 | |
22 | #define S5PV210_AUDSS_INT_MEM (0xC0000000) | ||
22 | 23 | ||
23 | static int s5pv210_cfg_i2s(struct platform_device *pdev) | 24 | static int s5pv210_cfg_i2s(struct platform_device *pdev) |
24 | { | 25 | { |
diff --git a/arch/arm/mach-s5pv210/include/mach/regs-audss.h b/arch/arm/mach-s5pv210/include/mach/regs-audss.h deleted file mode 100644 index eacc1f790807..000000000000 --- a/arch/arm/mach-s5pv210/include/mach/regs-audss.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | /* arch/arm/mach-s5pv210/include/mach/regs-audss.h | ||
2 | * | ||
3 | * Copyright (c) 2011 Samsung Electronics | ||
4 | * http://www.samsung.com | ||
5 | * | ||
6 | * S5PV210 Audio SubSystem clock register definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __PLAT_REGS_AUDSS_H | ||
14 | #define __PLAT_REGS_AUDSS_H __FILE__ | ||
15 | |||
16 | #define S5PV210_AUDSS_INT_MEM (0xC0000000) | ||
17 | |||
18 | #endif /* _PLAT_REGS_AUDSS_H */ | ||
diff --git a/arch/arm/mach-s5pv210/include/mach/regs-sys.h b/arch/arm/mach-s5pv210/include/mach/regs-sys.h deleted file mode 100644 index cccb1eddaa38..000000000000 --- a/arch/arm/mach-s5pv210/include/mach/regs-sys.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | /* arch/arm/mach-s5pv210/include/mach/regs-sys.h | ||
2 | * | ||
3 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. | ||
4 | * http://www.samsung.com/ | ||
5 | * | ||
6 | * S5PV210 - System registers definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #define S5PV210_USB_PHY_CON (S3C_VA_SYS + 0xE80C) | ||
14 | #define S5PV210_USB_PHY0_EN (1 << 0) | ||
15 | #define S5PV210_USB_PHY1_EN (1 << 1) | ||
diff --git a/arch/arm/mach-s5pv210/include/mach/uncompress.h b/arch/arm/mach-s5pv210/include/mach/uncompress.h index 08ff2fda1fb9..ef977ea8546d 100644 --- a/arch/arm/mach-s5pv210/include/mach/uncompress.h +++ b/arch/arm/mach-s5pv210/include/mach/uncompress.h | |||
@@ -19,6 +19,8 @@ | |||
19 | static void arch_detect_cpu(void) | 19 | static void arch_detect_cpu(void) |
20 | { | 20 | { |
21 | /* we do not need to do any cpu detection here at the moment. */ | 21 | /* we do not need to do any cpu detection here at the moment. */ |
22 | fifo_mask = S5PV210_UFSTAT_TXMASK; | ||
23 | fifo_max = 63 << S5PV210_UFSTAT_TXSHIFT; | ||
22 | } | 24 | } |
23 | 25 | ||
24 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ | 26 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ |
diff --git a/arch/arm/mach-s5pv210/pm.c b/arch/arm/mach-s5pv210/pm.c index 736bfb103cbc..2b68a67b6e95 100644 --- a/arch/arm/mach-s5pv210/pm.c +++ b/arch/arm/mach-s5pv210/pm.c | |||
@@ -104,8 +104,8 @@ static int s5pv210_cpu_suspend(unsigned long arg) | |||
104 | "mcr p15, 0, %0, c7, c10, 4\n\t" | 104 | "mcr p15, 0, %0, c7, c10, 4\n\t" |
105 | "wfi" : : "r" (tmp)); | 105 | "wfi" : : "r" (tmp)); |
106 | 106 | ||
107 | /* we should never get past here */ | 107 | pr_info("Failed to suspend the system\n"); |
108 | panic("sleep resumed to originator?"); | 108 | return 1; /* Aborting suspend */ |
109 | } | 109 | } |
110 | 110 | ||
111 | static void s5pv210_pm_prepare(void) | 111 | static void s5pv210_pm_prepare(void) |
diff --git a/arch/arm/mach-s5pv210/setup-usb-phy.c b/arch/arm/mach-s5pv210/setup-usb-phy.c index be39cf4aa91b..356a0900af03 100644 --- a/arch/arm/mach-s5pv210/setup-usb-phy.c +++ b/arch/arm/mach-s5pv210/setup-usb-phy.c | |||
@@ -12,12 +12,17 @@ | |||
12 | #include <linux/err.h> | 12 | #include <linux/err.h> |
13 | #include <linux/io.h> | 13 | #include <linux/io.h> |
14 | #include <linux/platform_device.h> | 14 | #include <linux/platform_device.h> |
15 | |||
15 | #include <mach/map.h> | 16 | #include <mach/map.h> |
16 | #include <mach/regs-sys.h> | 17 | |
17 | #include <plat/cpu.h> | 18 | #include <plat/cpu.h> |
18 | #include <plat/regs-usb-hsotg-phy.h> | 19 | #include <plat/regs-usb-hsotg-phy.h> |
19 | #include <plat/usb-phy.h> | 20 | #include <plat/usb-phy.h> |
20 | 21 | ||
22 | #define S5PV210_USB_PHY_CON (S3C_VA_SYS + 0xE80C) | ||
23 | #define S5PV210_USB_PHY0_EN (1 << 0) | ||
24 | #define S5PV210_USB_PHY1_EN (1 << 1) | ||
25 | |||
21 | static int s5pv210_usb_otgphy_init(struct platform_device *pdev) | 26 | static int s5pv210_usb_otgphy_init(struct platform_device *pdev) |
22 | { | 27 | { |
23 | struct clk *xusbxti; | 28 | struct clk *xusbxti; |
diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c index b38d2525d5db..e838ba27e443 100644 --- a/arch/arm/mach-sa1100/assabet.c +++ b/arch/arm/mach-sa1100/assabet.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/ioport.h> | 16 | #include <linux/ioport.h> |
17 | #include <linux/platform_data/sa11x0-serial.h> | 17 | #include <linux/platform_data/sa11x0-serial.h> |
18 | #include <linux/serial_core.h> | 18 | #include <linux/serial_core.h> |
19 | #include <linux/platform_device.h> | ||
19 | #include <linux/mfd/ucb1x00.h> | 20 | #include <linux/mfd/ucb1x00.h> |
20 | #include <linux/mtd/mtd.h> | 21 | #include <linux/mtd/mtd.h> |
21 | #include <linux/mtd/partitions.h> | 22 | #include <linux/mtd/partitions.h> |
diff --git a/arch/arm/mach-sa1100/include/mach/uncompress.h b/arch/arm/mach-sa1100/include/mach/uncompress.h index 5cf71da60e42..73093dc89829 100644 --- a/arch/arm/mach-sa1100/include/mach/uncompress.h +++ b/arch/arm/mach-sa1100/include/mach/uncompress.h | |||
@@ -49,4 +49,3 @@ static inline void flush(void) | |||
49 | * Nothing to do for these | 49 | * Nothing to do for these |
50 | */ | 50 | */ |
51 | #define arch_decomp_setup() | 51 | #define arch_decomp_setup() |
52 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-sa1100/lart.c b/arch/arm/mach-sa1100/lart.c index a89917653884..51b0eb52c014 100644 --- a/arch/arm/mach-sa1100/lart.c +++ b/arch/arm/mach-sa1100/lart.c | |||
@@ -24,9 +24,6 @@ | |||
24 | 24 | ||
25 | #include "generic.h" | 25 | #include "generic.h" |
26 | 26 | ||
27 | |||
28 | #warning "include/asm/arch-sa1100/ide.h needs fixing for lart" | ||
29 | |||
30 | static struct mcp_plat_data lart_mcp_data = { | 27 | static struct mcp_plat_data lart_mcp_data = { |
31 | .mccr0 = MCCR0_ADM, | 28 | .mccr0 = MCCR0_ADM, |
32 | .sclk_rate = 11981000, | 29 | .sclk_rate = 11981000, |
diff --git a/arch/arm/mach-shark/include/mach/uncompress.h b/arch/arm/mach-shark/include/mach/uncompress.h index 22ccab4c3c5e..a168435aecc9 100644 --- a/arch/arm/mach-shark/include/mach/uncompress.h +++ b/arch/arm/mach-shark/include/mach/uncompress.h | |||
@@ -48,4 +48,3 @@ static void putr() | |||
48 | * nothing to do | 48 | * nothing to do |
49 | */ | 49 | */ |
50 | #define arch_decomp_setup() | 50 | #define arch_decomp_setup() |
51 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile index 700e6623aa86..e1fac57514b9 100644 --- a/arch/arm/mach-shmobile/Makefile +++ b/arch/arm/mach-shmobile/Makefile | |||
@@ -19,13 +19,6 @@ smp-$(CONFIG_ARCH_SH73A0) += smp-sh73a0.o headsmp-sh73a0.o | |||
19 | smp-$(CONFIG_ARCH_R8A7779) += smp-r8a7779.o | 19 | smp-$(CONFIG_ARCH_R8A7779) += smp-r8a7779.o |
20 | smp-$(CONFIG_ARCH_EMEV2) += smp-emev2.o | 20 | smp-$(CONFIG_ARCH_EMEV2) += smp-emev2.o |
21 | 21 | ||
22 | # Pinmux setup | ||
23 | pfc-y := | ||
24 | pfc-$(CONFIG_ARCH_SH7372) += pfc-sh7372.o | ||
25 | pfc-$(CONFIG_ARCH_SH73A0) += pfc-sh73a0.o | ||
26 | pfc-$(CONFIG_ARCH_R8A7740) += pfc-r8a7740.o | ||
27 | pfc-$(CONFIG_ARCH_R8A7779) += pfc-r8a7779.o | ||
28 | |||
29 | # IRQ objects | 22 | # IRQ objects |
30 | obj-$(CONFIG_ARCH_SH7372) += entry-intc.o | 23 | obj-$(CONFIG_ARCH_SH7372) += entry-intc.o |
31 | obj-$(CONFIG_ARCH_R8A7740) += entry-intc.o | 24 | obj-$(CONFIG_ARCH_R8A7740) += entry-intc.o |
@@ -52,4 +45,3 @@ obj-$(CONFIG_MACH_KZM9G) += board-kzm9g.o | |||
52 | 45 | ||
53 | # Framework support | 46 | # Framework support |
54 | obj-$(CONFIG_SMP) += $(smp-y) | 47 | obj-$(CONFIG_SMP) += $(smp-y) |
55 | obj-$(CONFIG_GENERIC_GPIO) += $(pfc-y) | ||
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index c1d4ab630214..2928cd686808 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
@@ -657,14 +657,8 @@ static struct platform_device lcdc_device = { | |||
657 | /* FSI */ | 657 | /* FSI */ |
658 | #define IRQ_FSI evt2irq(0x1840) | 658 | #define IRQ_FSI evt2irq(0x1840) |
659 | static struct sh_fsi_platform_info fsi_info = { | 659 | static struct sh_fsi_platform_info fsi_info = { |
660 | .port_a = { | ||
661 | .flags = SH_FSI_BRS_INV, | ||
662 | }, | ||
663 | .port_b = { | 660 | .port_b = { |
664 | .flags = SH_FSI_BRS_INV | | 661 | .flags = SH_FSI_CLK_CPG | |
665 | SH_FSI_BRM_INV | | ||
666 | SH_FSI_LRS_INV | | ||
667 | SH_FSI_CLK_CPG | | ||
668 | SH_FSI_FMT_SPDIF, | 662 | SH_FSI_FMT_SPDIF, |
669 | }, | 663 | }, |
670 | }; | 664 | }; |
@@ -692,21 +686,21 @@ static struct platform_device fsi_device = { | |||
692 | }, | 686 | }, |
693 | }; | 687 | }; |
694 | 688 | ||
695 | static struct asoc_simple_dai_init_info fsi2_ak4643_init_info = { | ||
696 | .fmt = SND_SOC_DAIFMT_LEFT_J, | ||
697 | .codec_daifmt = SND_SOC_DAIFMT_CBM_CFM, | ||
698 | .cpu_daifmt = SND_SOC_DAIFMT_CBS_CFS, | ||
699 | .sysclk = 11289600, | ||
700 | }; | ||
701 | |||
702 | static struct asoc_simple_card_info fsi2_ak4643_info = { | 689 | static struct asoc_simple_card_info fsi2_ak4643_info = { |
703 | .name = "AK4643", | 690 | .name = "AK4643", |
704 | .card = "FSI2A-AK4643", | 691 | .card = "FSI2A-AK4643", |
705 | .cpu_dai = "fsia-dai", | ||
706 | .codec = "ak4642-codec.0-0013", | 692 | .codec = "ak4642-codec.0-0013", |
707 | .platform = "sh_fsi2", | 693 | .platform = "sh_fsi2", |
708 | .codec_dai = "ak4642-hifi", | 694 | .daifmt = SND_SOC_DAIFMT_LEFT_J, |
709 | .init = &fsi2_ak4643_init_info, | 695 | .cpu_dai = { |
696 | .name = "fsia-dai", | ||
697 | .fmt = SND_SOC_DAIFMT_CBS_CFS, | ||
698 | }, | ||
699 | .codec_dai = { | ||
700 | .name = "ak4642-hifi", | ||
701 | .fmt = SND_SOC_DAIFMT_CBM_CFM, | ||
702 | .sysclk = 11289600, | ||
703 | }, | ||
710 | }; | 704 | }; |
711 | 705 | ||
712 | static struct platform_device fsi_ak4643_device = { | 706 | static struct platform_device fsi_ak4643_device = { |
@@ -815,18 +809,18 @@ static struct platform_device lcdc1_device = { | |||
815 | }, | 809 | }, |
816 | }; | 810 | }; |
817 | 811 | ||
818 | static struct asoc_simple_dai_init_info fsi2_hdmi_init_info = { | ||
819 | .cpu_daifmt = SND_SOC_DAIFMT_CBM_CFM, | ||
820 | }; | ||
821 | |||
822 | static struct asoc_simple_card_info fsi2_hdmi_info = { | 812 | static struct asoc_simple_card_info fsi2_hdmi_info = { |
823 | .name = "HDMI", | 813 | .name = "HDMI", |
824 | .card = "FSI2B-HDMI", | 814 | .card = "FSI2B-HDMI", |
825 | .cpu_dai = "fsib-dai", | ||
826 | .codec = "sh-mobile-hdmi", | 815 | .codec = "sh-mobile-hdmi", |
827 | .platform = "sh_fsi2", | 816 | .platform = "sh_fsi2", |
828 | .codec_dai = "sh_mobile_hdmi-hifi", | 817 | .cpu_dai = { |
829 | .init = &fsi2_hdmi_init_info, | 818 | .name = "fsib-dai", |
819 | .fmt = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF, | ||
820 | }, | ||
821 | .codec_dai = { | ||
822 | .name = "sh_mobile_hdmi-hifi", | ||
823 | }, | ||
830 | }; | 824 | }; |
831 | 825 | ||
832 | static struct platform_device fsi_hdmi_device = { | 826 | static struct platform_device fsi_hdmi_device = { |
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index 65731370da81..81d91fda2d90 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c | |||
@@ -806,21 +806,21 @@ static struct platform_device fsi_device = { | |||
806 | }; | 806 | }; |
807 | 807 | ||
808 | /* FSI-WM8978 */ | 808 | /* FSI-WM8978 */ |
809 | static struct asoc_simple_dai_init_info fsi_wm8978_init_info = { | ||
810 | .fmt = SND_SOC_DAIFMT_I2S, | ||
811 | .codec_daifmt = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF, | ||
812 | .cpu_daifmt = SND_SOC_DAIFMT_CBS_CFS, | ||
813 | .sysclk = 12288000, | ||
814 | }; | ||
815 | |||
816 | static struct asoc_simple_card_info fsi_wm8978_info = { | 809 | static struct asoc_simple_card_info fsi_wm8978_info = { |
817 | .name = "wm8978", | 810 | .name = "wm8978", |
818 | .card = "FSI2A-WM8978", | 811 | .card = "FSI2A-WM8978", |
819 | .cpu_dai = "fsia-dai", | ||
820 | .codec = "wm8978.0-001a", | 812 | .codec = "wm8978.0-001a", |
821 | .platform = "sh_fsi2", | 813 | .platform = "sh_fsi2", |
822 | .codec_dai = "wm8978-hifi", | 814 | .daifmt = SND_SOC_DAIFMT_I2S, |
823 | .init = &fsi_wm8978_init_info, | 815 | .cpu_dai = { |
816 | .name = "fsia-dai", | ||
817 | .fmt = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_IB_NF, | ||
818 | }, | ||
819 | .codec_dai = { | ||
820 | .name = "wm8978-hifi", | ||
821 | .fmt = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF, | ||
822 | .sysclk = 12288000, | ||
823 | }, | ||
824 | }; | 824 | }; |
825 | 825 | ||
826 | static struct platform_device fsi_wm8978_device = { | 826 | static struct platform_device fsi_wm8978_device = { |
@@ -832,18 +832,18 @@ static struct platform_device fsi_wm8978_device = { | |||
832 | }; | 832 | }; |
833 | 833 | ||
834 | /* FSI-HDMI */ | 834 | /* FSI-HDMI */ |
835 | static struct asoc_simple_dai_init_info fsi2_hdmi_init_info = { | ||
836 | .cpu_daifmt = SND_SOC_DAIFMT_CBM_CFM, | ||
837 | }; | ||
838 | |||
839 | static struct asoc_simple_card_info fsi2_hdmi_info = { | 835 | static struct asoc_simple_card_info fsi2_hdmi_info = { |
840 | .name = "HDMI", | 836 | .name = "HDMI", |
841 | .card = "FSI2B-HDMI", | 837 | .card = "FSI2B-HDMI", |
842 | .cpu_dai = "fsib-dai", | ||
843 | .codec = "sh-mobile-hdmi", | 838 | .codec = "sh-mobile-hdmi", |
844 | .platform = "sh_fsi2", | 839 | .platform = "sh_fsi2", |
845 | .codec_dai = "sh_mobile_hdmi-hifi", | 840 | .cpu_dai = { |
846 | .init = &fsi2_hdmi_init_info, | 841 | .name = "fsib-dai", |
842 | .fmt = SND_SOC_DAIFMT_CBM_CFM, | ||
843 | }, | ||
844 | .codec_dai = { | ||
845 | .name = "sh_mobile_hdmi-hifi", | ||
846 | }, | ||
847 | }; | 847 | }; |
848 | 848 | ||
849 | static struct platform_device fsi_hdmi_device = { | 849 | static struct platform_device fsi_hdmi_device = { |
diff --git a/arch/arm/mach-shmobile/board-kzm9g.c b/arch/arm/mach-shmobile/board-kzm9g.c index 363c6edfa3cd..3efff2e7b1e7 100644 --- a/arch/arm/mach-shmobile/board-kzm9g.c +++ b/arch/arm/mach-shmobile/board-kzm9g.c | |||
@@ -525,21 +525,21 @@ static struct platform_device fsi_device = { | |||
525 | }, | 525 | }, |
526 | }; | 526 | }; |
527 | 527 | ||
528 | static struct asoc_simple_dai_init_info fsi2_ak4648_init_info = { | ||
529 | .fmt = SND_SOC_DAIFMT_LEFT_J, | ||
530 | .codec_daifmt = SND_SOC_DAIFMT_CBM_CFM, | ||
531 | .cpu_daifmt = SND_SOC_DAIFMT_CBS_CFS, | ||
532 | .sysclk = 11289600, | ||
533 | }; | ||
534 | |||
535 | static struct asoc_simple_card_info fsi2_ak4648_info = { | 528 | static struct asoc_simple_card_info fsi2_ak4648_info = { |
536 | .name = "AK4648", | 529 | .name = "AK4648", |
537 | .card = "FSI2A-AK4648", | 530 | .card = "FSI2A-AK4648", |
538 | .cpu_dai = "fsia-dai", | ||
539 | .codec = "ak4642-codec.0-0012", | 531 | .codec = "ak4642-codec.0-0012", |
540 | .platform = "sh_fsi2", | 532 | .platform = "sh_fsi2", |
541 | .codec_dai = "ak4642-hifi", | 533 | .daifmt = SND_SOC_DAIFMT_LEFT_J, |
542 | .init = &fsi2_ak4648_init_info, | 534 | .cpu_dai = { |
535 | .name = "fsia-dai", | ||
536 | .fmt = SND_SOC_DAIFMT_CBS_CFS, | ||
537 | }, | ||
538 | .codec_dai = { | ||
539 | .name = "ak4642-hifi", | ||
540 | .fmt = SND_SOC_DAIFMT_CBM_CFM, | ||
541 | .sysclk = 11289600, | ||
542 | }, | ||
543 | }; | 543 | }; |
544 | 544 | ||
545 | static struct platform_device fsi_ak4648_device = { | 545 | static struct platform_device fsi_ak4648_device = { |
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index fe4917f2c1a2..e2fafca9432b 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
@@ -502,18 +502,18 @@ static struct platform_device hdmi_lcdc_device = { | |||
502 | }, | 502 | }, |
503 | }; | 503 | }; |
504 | 504 | ||
505 | static struct asoc_simple_dai_init_info fsi2_hdmi_init_info = { | ||
506 | .cpu_daifmt = SND_SOC_DAIFMT_CBM_CFM, | ||
507 | }; | ||
508 | |||
509 | static struct asoc_simple_card_info fsi2_hdmi_info = { | 505 | static struct asoc_simple_card_info fsi2_hdmi_info = { |
510 | .name = "HDMI", | 506 | .name = "HDMI", |
511 | .card = "FSI2B-HDMI", | 507 | .card = "FSI2B-HDMI", |
512 | .cpu_dai = "fsib-dai", | ||
513 | .codec = "sh-mobile-hdmi", | 508 | .codec = "sh-mobile-hdmi", |
514 | .platform = "sh_fsi2", | 509 | .platform = "sh_fsi2", |
515 | .codec_dai = "sh_mobile_hdmi-hifi", | 510 | .cpu_dai = { |
516 | .init = &fsi2_hdmi_init_info, | 511 | .name = "fsib-dai", |
512 | .fmt = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF, | ||
513 | }, | ||
514 | .codec_dai = { | ||
515 | .name = "sh_mobile_hdmi-hifi", | ||
516 | }, | ||
517 | }; | 517 | }; |
518 | 518 | ||
519 | static struct platform_device fsi_hdmi_device = { | 519 | static struct platform_device fsi_hdmi_device = { |
@@ -858,16 +858,12 @@ static struct platform_device leds_device = { | |||
858 | #define IRQ_FSI evt2irq(0x1840) | 858 | #define IRQ_FSI evt2irq(0x1840) |
859 | static struct sh_fsi_platform_info fsi_info = { | 859 | static struct sh_fsi_platform_info fsi_info = { |
860 | .port_a = { | 860 | .port_a = { |
861 | .flags = SH_FSI_BRS_INV, | ||
862 | .tx_id = SHDMA_SLAVE_FSIA_TX, | 861 | .tx_id = SHDMA_SLAVE_FSIA_TX, |
863 | .rx_id = SHDMA_SLAVE_FSIA_RX, | 862 | .rx_id = SHDMA_SLAVE_FSIA_RX, |
864 | }, | 863 | }, |
865 | .port_b = { | 864 | .port_b = { |
866 | .flags = SH_FSI_BRS_INV | | 865 | .flags = SH_FSI_CLK_CPG | |
867 | SH_FSI_BRM_INV | | 866 | SH_FSI_FMT_SPDIF, |
868 | SH_FSI_LRS_INV | | ||
869 | SH_FSI_CLK_CPG | | ||
870 | SH_FSI_FMT_SPDIF, | ||
871 | } | 867 | } |
872 | }; | 868 | }; |
873 | 869 | ||
@@ -896,21 +892,21 @@ static struct platform_device fsi_device = { | |||
896 | }, | 892 | }, |
897 | }; | 893 | }; |
898 | 894 | ||
899 | static struct asoc_simple_dai_init_info fsi2_ak4643_init_info = { | ||
900 | .fmt = SND_SOC_DAIFMT_LEFT_J, | ||
901 | .codec_daifmt = SND_SOC_DAIFMT_CBM_CFM, | ||
902 | .cpu_daifmt = SND_SOC_DAIFMT_CBS_CFS, | ||
903 | .sysclk = 11289600, | ||
904 | }; | ||
905 | |||
906 | static struct asoc_simple_card_info fsi2_ak4643_info = { | 895 | static struct asoc_simple_card_info fsi2_ak4643_info = { |
907 | .name = "AK4643", | 896 | .name = "AK4643", |
908 | .card = "FSI2A-AK4643", | 897 | .card = "FSI2A-AK4643", |
909 | .cpu_dai = "fsia-dai", | ||
910 | .codec = "ak4642-codec.0-0013", | 898 | .codec = "ak4642-codec.0-0013", |
911 | .platform = "sh_fsi2", | 899 | .platform = "sh_fsi2", |
912 | .codec_dai = "ak4642-hifi", | 900 | .daifmt = SND_SOC_DAIFMT_LEFT_J, |
913 | .init = &fsi2_ak4643_init_info, | 901 | .cpu_dai = { |
902 | .name = "fsia-dai", | ||
903 | .fmt = SND_SOC_DAIFMT_CBS_CFS, | ||
904 | }, | ||
905 | .codec_dai = { | ||
906 | .name = "ak4642-hifi", | ||
907 | .fmt = SND_SOC_DAIFMT_CBM_CFM, | ||
908 | .sysclk = 11289600, | ||
909 | }, | ||
914 | }; | 910 | }; |
915 | 911 | ||
916 | static struct platform_device fsi_ak4643_device = { | 912 | static struct platform_device fsi_ak4643_device = { |
diff --git a/arch/arm/mach-shmobile/include/mach/uncompress.h b/arch/arm/mach-shmobile/include/mach/uncompress.h index 0bd7556b1387..f1aee56781e7 100644 --- a/arch/arm/mach-shmobile/include/mach/uncompress.h +++ b/arch/arm/mach-shmobile/include/mach/uncompress.h | |||
@@ -16,6 +16,4 @@ static void arch_decomp_setup(void) | |||
16 | { | 16 | { |
17 | } | 17 | } |
18 | 18 | ||
19 | #define arch_decomp_wdog() | ||
20 | |||
21 | #endif /* __ASM_MACH_UNCOMPRESS_H */ | 19 | #endif /* __ASM_MACH_UNCOMPRESS_H */ |
diff --git a/arch/arm/mach-shmobile/pfc-r8a7740.c b/arch/arm/mach-shmobile/pfc-r8a7740.c deleted file mode 100644 index 134d1b9a8821..000000000000 --- a/arch/arm/mach-shmobile/pfc-r8a7740.c +++ /dev/null | |||
@@ -1,2617 +0,0 @@ | |||
1 | /* | ||
2 | * R8A7740 processor support | ||
3 | * | ||
4 | * Copyright (C) 2011 Renesas Solutions Corp. | ||
5 | * Copyright (C) 2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License as | ||
9 | * published by the Free Software Foundation; version 2 of the | ||
10 | * License. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
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 | ||
20 | */ | ||
21 | #include <linux/init.h> | ||
22 | #include <linux/kernel.h> | ||
23 | #include <linux/sh_pfc.h> | ||
24 | #include <mach/r8a7740.h> | ||
25 | #include <mach/irqs.h> | ||
26 | |||
27 | #define CPU_ALL_PORT(fn, pfx, sfx) \ | ||
28 | PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \ | ||
29 | PORT_10(fn, pfx##10, sfx), PORT_90(fn, pfx##1, sfx), \ | ||
30 | PORT_10(fn, pfx##20, sfx), \ | ||
31 | PORT_1(fn, pfx##210, sfx), PORT_1(fn, pfx##211, sfx) | ||
32 | |||
33 | enum { | ||
34 | PINMUX_RESERVED = 0, | ||
35 | |||
36 | /* PORT0_DATA -> PORT211_DATA */ | ||
37 | PINMUX_DATA_BEGIN, | ||
38 | PORT_ALL(DATA), | ||
39 | PINMUX_DATA_END, | ||
40 | |||
41 | /* PORT0_IN -> PORT211_IN */ | ||
42 | PINMUX_INPUT_BEGIN, | ||
43 | PORT_ALL(IN), | ||
44 | PINMUX_INPUT_END, | ||
45 | |||
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 */ | ||
57 | PINMUX_OUTPUT_BEGIN, | ||
58 | PORT_ALL(OUT), | ||
59 | PINMUX_OUTPUT_END, | ||
60 | |||
61 | PINMUX_FUNCTION_BEGIN, | ||
62 | PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT211_FN_IN */ | ||
63 | PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT211_FN_OUT */ | ||
64 | PORT_ALL(FN0), /* PORT0_FN0 -> PORT211_FN0 */ | ||
65 | PORT_ALL(FN1), /* PORT0_FN1 -> PORT211_FN1 */ | ||
66 | PORT_ALL(FN2), /* PORT0_FN2 -> PORT211_FN2 */ | ||
67 | PORT_ALL(FN3), /* PORT0_FN3 -> PORT211_FN3 */ | ||
68 | PORT_ALL(FN4), /* PORT0_FN4 -> PORT211_FN4 */ | ||
69 | PORT_ALL(FN5), /* PORT0_FN5 -> PORT211_FN5 */ | ||
70 | PORT_ALL(FN6), /* PORT0_FN6 -> PORT211_FN6 */ | ||
71 | PORT_ALL(FN7), /* PORT0_FN7 -> PORT211_FN7 */ | ||
72 | |||
73 | MSEL1CR_31_0, MSEL1CR_31_1, | ||
74 | MSEL1CR_30_0, MSEL1CR_30_1, | ||
75 | MSEL1CR_29_0, MSEL1CR_29_1, | ||
76 | MSEL1CR_28_0, MSEL1CR_28_1, | ||
77 | MSEL1CR_27_0, MSEL1CR_27_1, | ||
78 | MSEL1CR_26_0, MSEL1CR_26_1, | ||
79 | MSEL1CR_16_0, MSEL1CR_16_1, | ||
80 | MSEL1CR_15_0, MSEL1CR_15_1, | ||
81 | MSEL1CR_14_0, MSEL1CR_14_1, | ||
82 | MSEL1CR_13_0, MSEL1CR_13_1, | ||
83 | MSEL1CR_12_0, MSEL1CR_12_1, | ||
84 | MSEL1CR_9_0, MSEL1CR_9_1, | ||
85 | MSEL1CR_7_0, MSEL1CR_7_1, | ||
86 | MSEL1CR_6_0, MSEL1CR_6_1, | ||
87 | MSEL1CR_5_0, MSEL1CR_5_1, | ||
88 | MSEL1CR_4_0, MSEL1CR_4_1, | ||
89 | MSEL1CR_3_0, MSEL1CR_3_1, | ||
90 | MSEL1CR_2_0, MSEL1CR_2_1, | ||
91 | MSEL1CR_0_0, MSEL1CR_0_1, | ||
92 | |||
93 | MSEL3CR_15_0, MSEL3CR_15_1, /* Trace / Debug ? */ | ||
94 | MSEL3CR_6_0, MSEL3CR_6_1, | ||
95 | |||
96 | MSEL4CR_19_0, MSEL4CR_19_1, | ||
97 | MSEL4CR_18_0, MSEL4CR_18_1, | ||
98 | MSEL4CR_15_0, MSEL4CR_15_1, | ||
99 | MSEL4CR_10_0, MSEL4CR_10_1, | ||
100 | MSEL4CR_6_0, MSEL4CR_6_1, | ||
101 | MSEL4CR_4_0, MSEL4CR_4_1, | ||
102 | MSEL4CR_1_0, MSEL4CR_1_1, | ||
103 | |||
104 | MSEL5CR_31_0, MSEL5CR_31_1, /* irq/fiq output */ | ||
105 | MSEL5CR_30_0, MSEL5CR_30_1, | ||
106 | MSEL5CR_29_0, MSEL5CR_29_1, | ||
107 | MSEL5CR_27_0, MSEL5CR_27_1, | ||
108 | MSEL5CR_25_0, MSEL5CR_25_1, | ||
109 | MSEL5CR_23_0, MSEL5CR_23_1, | ||
110 | MSEL5CR_21_0, MSEL5CR_21_1, | ||
111 | MSEL5CR_19_0, MSEL5CR_19_1, | ||
112 | MSEL5CR_17_0, MSEL5CR_17_1, | ||
113 | MSEL5CR_15_0, MSEL5CR_15_1, | ||
114 | MSEL5CR_14_0, MSEL5CR_14_1, | ||
115 | MSEL5CR_13_0, MSEL5CR_13_1, | ||
116 | MSEL5CR_12_0, MSEL5CR_12_1, | ||
117 | MSEL5CR_11_0, MSEL5CR_11_1, | ||
118 | MSEL5CR_10_0, MSEL5CR_10_1, | ||
119 | MSEL5CR_8_0, MSEL5CR_8_1, | ||
120 | MSEL5CR_7_0, MSEL5CR_7_1, | ||
121 | MSEL5CR_6_0, MSEL5CR_6_1, | ||
122 | MSEL5CR_5_0, MSEL5CR_5_1, | ||
123 | MSEL5CR_4_0, MSEL5CR_4_1, | ||
124 | MSEL5CR_3_0, MSEL5CR_3_1, | ||
125 | MSEL5CR_2_0, MSEL5CR_2_1, | ||
126 | MSEL5CR_0_0, MSEL5CR_0_1, | ||
127 | PINMUX_FUNCTION_END, | ||
128 | |||
129 | PINMUX_MARK_BEGIN, | ||
130 | |||
131 | /* IRQ */ | ||
132 | IRQ0_PORT2_MARK, IRQ0_PORT13_MARK, | ||
133 | IRQ1_MARK, | ||
134 | IRQ2_PORT11_MARK, IRQ2_PORT12_MARK, | ||
135 | IRQ3_PORT10_MARK, IRQ3_PORT14_MARK, | ||
136 | IRQ4_PORT15_MARK, IRQ4_PORT172_MARK, | ||
137 | IRQ5_PORT0_MARK, IRQ5_PORT1_MARK, | ||
138 | IRQ6_PORT121_MARK, IRQ6_PORT173_MARK, | ||
139 | IRQ7_PORT120_MARK, IRQ7_PORT209_MARK, | ||
140 | IRQ8_MARK, | ||
141 | IRQ9_PORT118_MARK, IRQ9_PORT210_MARK, | ||
142 | IRQ10_MARK, | ||
143 | IRQ11_MARK, | ||
144 | IRQ12_PORT42_MARK, IRQ12_PORT97_MARK, | ||
145 | IRQ13_PORT64_MARK, IRQ13_PORT98_MARK, | ||
146 | IRQ14_PORT63_MARK, IRQ14_PORT99_MARK, | ||
147 | IRQ15_PORT62_MARK, IRQ15_PORT100_MARK, | ||
148 | IRQ16_PORT68_MARK, IRQ16_PORT211_MARK, | ||
149 | IRQ17_MARK, | ||
150 | IRQ18_MARK, | ||
151 | IRQ19_MARK, | ||
152 | IRQ20_MARK, | ||
153 | IRQ21_MARK, | ||
154 | IRQ22_MARK, | ||
155 | IRQ23_MARK, | ||
156 | IRQ24_MARK, | ||
157 | IRQ25_MARK, | ||
158 | IRQ26_PORT58_MARK, IRQ26_PORT81_MARK, | ||
159 | IRQ27_PORT57_MARK, IRQ27_PORT168_MARK, | ||
160 | IRQ28_PORT56_MARK, IRQ28_PORT169_MARK, | ||
161 | IRQ29_PORT50_MARK, IRQ29_PORT170_MARK, | ||
162 | IRQ30_PORT49_MARK, IRQ30_PORT171_MARK, | ||
163 | IRQ31_PORT41_MARK, IRQ31_PORT167_MARK, | ||
164 | |||
165 | /* Function */ | ||
166 | |||
167 | /* DBGT */ | ||
168 | DBGMDT2_MARK, DBGMDT1_MARK, DBGMDT0_MARK, | ||
169 | DBGMD10_MARK, DBGMD11_MARK, DBGMD20_MARK, | ||
170 | DBGMD21_MARK, | ||
171 | |||
172 | /* FSI-A */ | ||
173 | FSIAISLD_PORT0_MARK, /* FSIAISLD Port 0/5 */ | ||
174 | FSIAISLD_PORT5_MARK, | ||
175 | FSIASPDIF_PORT9_MARK, /* FSIASPDIF Port 9/18 */ | ||
176 | FSIASPDIF_PORT18_MARK, | ||
177 | FSIAOSLD1_MARK, FSIAOSLD2_MARK, FSIAOLR_MARK, | ||
178 | FSIAOBT_MARK, FSIAOSLD_MARK, FSIAOMC_MARK, | ||
179 | FSIACK_MARK, FSIAILR_MARK, FSIAIBT_MARK, | ||
180 | |||
181 | /* FSI-B */ | ||
182 | FSIBCK_MARK, | ||
183 | |||
184 | /* FMSI */ | ||
185 | FMSISLD_PORT1_MARK, /* FMSISLD Port 1/6 */ | ||
186 | FMSISLD_PORT6_MARK, | ||
187 | FMSIILR_MARK, FMSIIBT_MARK, FMSIOLR_MARK, FMSIOBT_MARK, | ||
188 | FMSICK_MARK, FMSOILR_MARK, FMSOIBT_MARK, FMSOOLR_MARK, | ||
189 | FMSOOBT_MARK, FMSOSLD_MARK, FMSOCK_MARK, | ||
190 | |||
191 | /* SCIFA0 */ | ||
192 | SCIFA0_SCK_MARK, SCIFA0_CTS_MARK, SCIFA0_RTS_MARK, | ||
193 | SCIFA0_RXD_MARK, SCIFA0_TXD_MARK, | ||
194 | |||
195 | /* SCIFA1 */ | ||
196 | SCIFA1_CTS_MARK, SCIFA1_SCK_MARK, SCIFA1_RXD_MARK, | ||
197 | SCIFA1_TXD_MARK, SCIFA1_RTS_MARK, | ||
198 | |||
199 | /* SCIFA2 */ | ||
200 | SCIFA2_SCK_PORT22_MARK, /* SCIFA2_SCK Port 22/199 */ | ||
201 | SCIFA2_SCK_PORT199_MARK, | ||
202 | SCIFA2_RXD_MARK, SCIFA2_TXD_MARK, | ||
203 | SCIFA2_CTS_MARK, SCIFA2_RTS_MARK, | ||
204 | |||
205 | /* SCIFA3 */ | ||
206 | SCIFA3_RTS_PORT105_MARK, /* MSEL5CR_8_0 */ | ||
207 | SCIFA3_SCK_PORT116_MARK, | ||
208 | SCIFA3_CTS_PORT117_MARK, | ||
209 | SCIFA3_RXD_PORT174_MARK, | ||
210 | SCIFA3_TXD_PORT175_MARK, | ||
211 | |||
212 | SCIFA3_RTS_PORT161_MARK, /* MSEL5CR_8_1 */ | ||
213 | SCIFA3_SCK_PORT158_MARK, | ||
214 | SCIFA3_CTS_PORT162_MARK, | ||
215 | SCIFA3_RXD_PORT159_MARK, | ||
216 | SCIFA3_TXD_PORT160_MARK, | ||
217 | |||
218 | /* SCIFA4 */ | ||
219 | SCIFA4_RXD_PORT12_MARK, /* MSEL5CR[12:11] = 00 */ | ||
220 | SCIFA4_TXD_PORT13_MARK, | ||
221 | |||
222 | SCIFA4_RXD_PORT204_MARK, /* MSEL5CR[12:11] = 01 */ | ||
223 | SCIFA4_TXD_PORT203_MARK, | ||
224 | |||
225 | SCIFA4_RXD_PORT94_MARK, /* MSEL5CR[12:11] = 10 */ | ||
226 | SCIFA4_TXD_PORT93_MARK, | ||
227 | |||
228 | SCIFA4_SCK_PORT21_MARK, /* SCIFA4_SCK Port 21/205 */ | ||
229 | SCIFA4_SCK_PORT205_MARK, | ||
230 | |||
231 | /* SCIFA5 */ | ||
232 | SCIFA5_TXD_PORT20_MARK, /* MSEL5CR[15:14] = 00 */ | ||
233 | SCIFA5_RXD_PORT10_MARK, | ||
234 | |||
235 | SCIFA5_RXD_PORT207_MARK, /* MSEL5CR[15:14] = 01 */ | ||
236 | SCIFA5_TXD_PORT208_MARK, | ||
237 | |||
238 | SCIFA5_TXD_PORT91_MARK, /* MSEL5CR[15:14] = 10 */ | ||
239 | SCIFA5_RXD_PORT92_MARK, | ||
240 | |||
241 | SCIFA5_SCK_PORT23_MARK, /* SCIFA5_SCK Port 23/206 */ | ||
242 | SCIFA5_SCK_PORT206_MARK, | ||
243 | |||
244 | /* SCIFA6 */ | ||
245 | SCIFA6_SCK_MARK, SCIFA6_RXD_MARK, SCIFA6_TXD_MARK, | ||
246 | |||
247 | /* SCIFA7 */ | ||
248 | SCIFA7_TXD_MARK, SCIFA7_RXD_MARK, | ||
249 | |||
250 | /* SCIFAB */ | ||
251 | SCIFB_SCK_PORT190_MARK, /* MSEL5CR_17_0 */ | ||
252 | SCIFB_RXD_PORT191_MARK, | ||
253 | SCIFB_TXD_PORT192_MARK, | ||
254 | SCIFB_RTS_PORT186_MARK, | ||
255 | SCIFB_CTS_PORT187_MARK, | ||
256 | |||
257 | SCIFB_SCK_PORT2_MARK, /* MSEL5CR_17_1 */ | ||
258 | SCIFB_RXD_PORT3_MARK, | ||
259 | SCIFB_TXD_PORT4_MARK, | ||
260 | SCIFB_RTS_PORT172_MARK, | ||
261 | SCIFB_CTS_PORT173_MARK, | ||
262 | |||
263 | /* LCD0 */ | ||
264 | LCDC0_SELECT_MARK, | ||
265 | |||
266 | 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, | ||
268 | LCD0_D8_MARK, LCD0_D9_MARK, LCD0_D10_MARK, LCD0_D11_MARK, | ||
269 | LCD0_D12_MARK, LCD0_D13_MARK, LCD0_D14_MARK, LCD0_D15_MARK, | ||
270 | LCD0_D16_MARK, LCD0_D17_MARK, | ||
271 | LCD0_DON_MARK, LCD0_VCPWC_MARK, LCD0_VEPWC_MARK, | ||
272 | LCD0_DCK_MARK, LCD0_VSYN_MARK, /* for RGB */ | ||
273 | LCD0_HSYN_MARK, LCD0_DISP_MARK, /* for RGB */ | ||
274 | LCD0_WR_MARK, LCD0_RD_MARK, /* for SYS */ | ||
275 | LCD0_CS_MARK, LCD0_RS_MARK, /* for SYS */ | ||
276 | |||
277 | LCD0_D21_PORT158_MARK, LCD0_D23_PORT159_MARK, /* MSEL5CR_6_1 */ | ||
278 | LCD0_D22_PORT160_MARK, LCD0_D20_PORT161_MARK, | ||
279 | LCD0_D19_PORT162_MARK, LCD0_D18_PORT163_MARK, | ||
280 | LCD0_LCLK_PORT165_MARK, | ||
281 | |||
282 | LCD0_D18_PORT40_MARK, LCD0_D22_PORT0_MARK, /* MSEL5CR_6_0 */ | ||
283 | LCD0_D23_PORT1_MARK, LCD0_D21_PORT2_MARK, | ||
284 | LCD0_D20_PORT3_MARK, LCD0_D19_PORT4_MARK, | ||
285 | LCD0_LCLK_PORT102_MARK, | ||
286 | |||
287 | /* LCD1 */ | ||
288 | LCDC1_SELECT_MARK, | ||
289 | |||
290 | 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, | ||
292 | LCD1_D8_MARK, LCD1_D9_MARK, LCD1_D10_MARK, LCD1_D11_MARK, | ||
293 | LCD1_D12_MARK, LCD1_D13_MARK, LCD1_D14_MARK, LCD1_D15_MARK, | ||
294 | LCD1_D16_MARK, LCD1_D17_MARK, LCD1_D18_MARK, LCD1_D19_MARK, | ||
295 | LCD1_D20_MARK, LCD1_D21_MARK, LCD1_D22_MARK, LCD1_D23_MARK, | ||
296 | LCD1_DON_MARK, LCD1_VCPWC_MARK, | ||
297 | LCD1_LCLK_MARK, LCD1_VEPWC_MARK, | ||
298 | |||
299 | LCD1_DCK_MARK, LCD1_VSYN_MARK, /* for RGB */ | ||
300 | LCD1_HSYN_MARK, LCD1_DISP_MARK, /* for RGB */ | ||
301 | LCD1_RS_MARK, LCD1_CS_MARK, /* for SYS */ | ||
302 | LCD1_RD_MARK, LCD1_WR_MARK, /* for SYS */ | ||
303 | |||
304 | /* RSPI */ | ||
305 | RSPI_SSL0_A_MARK, RSPI_SSL1_A_MARK, RSPI_SSL2_A_MARK, | ||
306 | RSPI_SSL3_A_MARK, RSPI_CK_A_MARK, RSPI_MOSI_A_MARK, | ||
307 | RSPI_MISO_A_MARK, | ||
308 | |||
309 | /* VIO CKO */ | ||
310 | VIO_CKO1_MARK, /* needs fixup */ | ||
311 | VIO_CKO2_MARK, | ||
312 | VIO_CKO_1_MARK, | ||
313 | VIO_CKO_MARK, | ||
314 | |||
315 | /* VIO0 */ | ||
316 | VIO0_D0_MARK, VIO0_D1_MARK, VIO0_D2_MARK, VIO0_D3_MARK, | ||
317 | VIO0_D4_MARK, VIO0_D5_MARK, VIO0_D6_MARK, VIO0_D7_MARK, | ||
318 | VIO0_D8_MARK, VIO0_D9_MARK, VIO0_D10_MARK, VIO0_D11_MARK, | ||
319 | VIO0_D12_MARK, VIO0_VD_MARK, VIO0_HD_MARK, VIO0_CLK_MARK, | ||
320 | VIO0_FIELD_MARK, | ||
321 | |||
322 | VIO0_D13_PORT26_MARK, /* MSEL5CR_27_0 */ | ||
323 | VIO0_D14_PORT25_MARK, | ||
324 | VIO0_D15_PORT24_MARK, | ||
325 | |||
326 | VIO0_D13_PORT22_MARK, /* MSEL5CR_27_1 */ | ||
327 | VIO0_D14_PORT95_MARK, | ||
328 | VIO0_D15_PORT96_MARK, | ||
329 | |||
330 | /* VIO1 */ | ||
331 | VIO1_D0_MARK, VIO1_D1_MARK, VIO1_D2_MARK, VIO1_D3_MARK, | ||
332 | VIO1_D4_MARK, VIO1_D5_MARK, VIO1_D6_MARK, VIO1_D7_MARK, | ||
333 | VIO1_VD_MARK, VIO1_HD_MARK, VIO1_CLK_MARK, VIO1_FIELD_MARK, | ||
334 | |||
335 | /* TPU0 */ | ||
336 | TPU0TO0_MARK, TPU0TO1_MARK, TPU0TO3_MARK, | ||
337 | TPU0TO2_PORT66_MARK, /* TPU0TO2 Port 66/202 */ | ||
338 | TPU0TO2_PORT202_MARK, | ||
339 | |||
340 | /* SSP1 0 */ | ||
341 | STP0_IPD0_MARK, STP0_IPD1_MARK, STP0_IPD2_MARK, STP0_IPD3_MARK, | ||
342 | STP0_IPD4_MARK, STP0_IPD5_MARK, STP0_IPD6_MARK, STP0_IPD7_MARK, | ||
343 | STP0_IPEN_MARK, STP0_IPCLK_MARK, STP0_IPSYNC_MARK, | ||
344 | |||
345 | /* SSP1 1 */ | ||
346 | STP1_IPD1_MARK, STP1_IPD2_MARK, STP1_IPD3_MARK, STP1_IPD4_MARK, | ||
347 | STP1_IPD5_MARK, STP1_IPD6_MARK, STP1_IPD7_MARK, STP1_IPCLK_MARK, | ||
348 | STP1_IPSYNC_MARK, | ||
349 | |||
350 | STP1_IPD0_PORT186_MARK, /* MSEL5CR_23_0 */ | ||
351 | STP1_IPEN_PORT187_MARK, | ||
352 | |||
353 | STP1_IPD0_PORT194_MARK, /* MSEL5CR_23_1 */ | ||
354 | STP1_IPEN_PORT193_MARK, | ||
355 | |||
356 | /* SIM */ | ||
357 | SIM_RST_MARK, SIM_CLK_MARK, | ||
358 | SIM_D_PORT22_MARK, /* SIM_D Port 22/199 */ | ||
359 | SIM_D_PORT199_MARK, | ||
360 | |||
361 | /* SDHI0 */ | ||
362 | SDHI0_D0_MARK, SDHI0_D1_MARK, SDHI0_D2_MARK, SDHI0_D3_MARK, | ||
363 | SDHI0_CD_MARK, SDHI0_WP_MARK, SDHI0_CMD_MARK, SDHI0_CLK_MARK, | ||
364 | |||
365 | /* SDHI1 */ | ||
366 | SDHI1_D0_MARK, SDHI1_D1_MARK, SDHI1_D2_MARK, SDHI1_D3_MARK, | ||
367 | SDHI1_CD_MARK, SDHI1_WP_MARK, SDHI1_CMD_MARK, SDHI1_CLK_MARK, | ||
368 | |||
369 | /* SDHI2 */ | ||
370 | SDHI2_D0_MARK, SDHI2_D1_MARK, SDHI2_D2_MARK, SDHI2_D3_MARK, | ||
371 | SDHI2_CLK_MARK, SDHI2_CMD_MARK, | ||
372 | |||
373 | SDHI2_CD_PORT24_MARK, /* MSEL5CR_19_0 */ | ||
374 | SDHI2_WP_PORT25_MARK, | ||
375 | |||
376 | SDHI2_WP_PORT177_MARK, /* MSEL5CR_19_1 */ | ||
377 | SDHI2_CD_PORT202_MARK, | ||
378 | |||
379 | /* MSIOF2 */ | ||
380 | MSIOF2_TXD_MARK, MSIOF2_RXD_MARK, MSIOF2_TSCK_MARK, | ||
381 | MSIOF2_SS2_MARK, MSIOF2_TSYNC_MARK, MSIOF2_SS1_MARK, | ||
382 | MSIOF2_MCK1_MARK, MSIOF2_MCK0_MARK, MSIOF2_RSYNC_MARK, | ||
383 | MSIOF2_RSCK_MARK, | ||
384 | |||
385 | /* KEYSC */ | ||
386 | KEYIN4_MARK, KEYIN5_MARK, KEYIN6_MARK, KEYIN7_MARK, | ||
387 | KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK, | ||
388 | KEYOUT4_MARK, KEYOUT5_MARK, KEYOUT6_MARK, KEYOUT7_MARK, | ||
389 | |||
390 | KEYIN0_PORT43_MARK, /* MSEL4CR_18_0 */ | ||
391 | KEYIN1_PORT44_MARK, | ||
392 | KEYIN2_PORT45_MARK, | ||
393 | KEYIN3_PORT46_MARK, | ||
394 | |||
395 | KEYIN0_PORT58_MARK, /* MSEL4CR_18_1 */ | ||
396 | KEYIN1_PORT57_MARK, | ||
397 | KEYIN2_PORT56_MARK, | ||
398 | KEYIN3_PORT55_MARK, | ||
399 | |||
400 | /* VOU */ | ||
401 | DV_D0_MARK, DV_D1_MARK, DV_D2_MARK, DV_D3_MARK, | ||
402 | DV_D4_MARK, DV_D5_MARK, DV_D6_MARK, DV_D7_MARK, | ||
403 | DV_D8_MARK, DV_D9_MARK, DV_D10_MARK, DV_D11_MARK, | ||
404 | DV_D12_MARK, DV_D13_MARK, DV_D14_MARK, DV_D15_MARK, | ||
405 | DV_CLK_MARK, DV_VSYNC_MARK, DV_HSYNC_MARK, | ||
406 | |||
407 | /* MEMC */ | ||
408 | MEMC_AD0_MARK, MEMC_AD1_MARK, MEMC_AD2_MARK, MEMC_AD3_MARK, | ||
409 | MEMC_AD4_MARK, MEMC_AD5_MARK, MEMC_AD6_MARK, MEMC_AD7_MARK, | ||
410 | MEMC_AD8_MARK, MEMC_AD9_MARK, MEMC_AD10_MARK, MEMC_AD11_MARK, | ||
411 | MEMC_AD12_MARK, MEMC_AD13_MARK, MEMC_AD14_MARK, MEMC_AD15_MARK, | ||
412 | MEMC_CS0_MARK, MEMC_INT_MARK, MEMC_NWE_MARK, MEMC_NOE_MARK, | ||
413 | |||
414 | MEMC_CS1_MARK, /* MSEL4CR_6_0 */ | ||
415 | MEMC_ADV_MARK, | ||
416 | MEMC_WAIT_MARK, | ||
417 | MEMC_BUSCLK_MARK, | ||
418 | |||
419 | MEMC_A1_MARK, /* MSEL4CR_6_1 */ | ||
420 | MEMC_DREQ0_MARK, | ||
421 | MEMC_DREQ1_MARK, | ||
422 | MEMC_A0_MARK, | ||
423 | |||
424 | /* MMC */ | ||
425 | MMC0_D0_PORT68_MARK, MMC0_D1_PORT69_MARK, MMC0_D2_PORT70_MARK, | ||
426 | MMC0_D3_PORT71_MARK, MMC0_D4_PORT72_MARK, MMC0_D5_PORT73_MARK, | ||
427 | MMC0_D6_PORT74_MARK, MMC0_D7_PORT75_MARK, MMC0_CLK_PORT66_MARK, | ||
428 | MMC0_CMD_PORT67_MARK, /* MSEL4CR_15_0 */ | ||
429 | |||
430 | MMC1_D0_PORT149_MARK, MMC1_D1_PORT148_MARK, MMC1_D2_PORT147_MARK, | ||
431 | MMC1_D3_PORT146_MARK, MMC1_D4_PORT145_MARK, MMC1_D5_PORT144_MARK, | ||
432 | MMC1_D6_PORT143_MARK, MMC1_D7_PORT142_MARK, MMC1_CLK_PORT103_MARK, | ||
433 | MMC1_CMD_PORT104_MARK, /* MSEL4CR_15_1 */ | ||
434 | |||
435 | /* MSIOF0 */ | ||
436 | MSIOF0_SS1_MARK, MSIOF0_SS2_MARK, MSIOF0_RXD_MARK, | ||
437 | MSIOF0_TXD_MARK, MSIOF0_MCK0_MARK, MSIOF0_MCK1_MARK, | ||
438 | MSIOF0_RSYNC_MARK, MSIOF0_RSCK_MARK, MSIOF0_TSCK_MARK, | ||
439 | MSIOF0_TSYNC_MARK, | ||
440 | |||
441 | /* MSIOF1 */ | ||
442 | MSIOF1_RSCK_MARK, MSIOF1_RSYNC_MARK, | ||
443 | MSIOF1_MCK0_MARK, MSIOF1_MCK1_MARK, | ||
444 | |||
445 | MSIOF1_SS2_PORT116_MARK, MSIOF1_SS1_PORT117_MARK, | ||
446 | MSIOF1_RXD_PORT118_MARK, MSIOF1_TXD_PORT119_MARK, | ||
447 | MSIOF1_TSYNC_PORT120_MARK, | ||
448 | MSIOF1_TSCK_PORT121_MARK, /* MSEL4CR_10_0 */ | ||
449 | |||
450 | MSIOF1_SS1_PORT67_MARK, MSIOF1_TSCK_PORT72_MARK, | ||
451 | MSIOF1_TSYNC_PORT73_MARK, MSIOF1_TXD_PORT74_MARK, | ||
452 | MSIOF1_RXD_PORT75_MARK, | ||
453 | MSIOF1_SS2_PORT202_MARK, /* MSEL4CR_10_1 */ | ||
454 | |||
455 | /* GPIO */ | ||
456 | GPO0_MARK, GPI0_MARK, GPO1_MARK, GPI1_MARK, | ||
457 | |||
458 | /* USB0 */ | ||
459 | USB0_OCI_MARK, USB0_PPON_MARK, VBUS_MARK, | ||
460 | |||
461 | /* USB1 */ | ||
462 | USB1_OCI_MARK, USB1_PPON_MARK, | ||
463 | |||
464 | /* BBIF1 */ | ||
465 | BBIF1_RXD_MARK, BBIF1_TXD_MARK, BBIF1_TSYNC_MARK, | ||
466 | BBIF1_TSCK_MARK, BBIF1_RSCK_MARK, BBIF1_RSYNC_MARK, | ||
467 | BBIF1_FLOW_MARK, BBIF1_RX_FLOW_N_MARK, | ||
468 | |||
469 | /* BBIF2 */ | ||
470 | BBIF2_TXD2_PORT5_MARK, /* MSEL5CR_0_0 */ | ||
471 | BBIF2_RXD2_PORT60_MARK, | ||
472 | BBIF2_TSYNC2_PORT6_MARK, | ||
473 | BBIF2_TSCK2_PORT59_MARK, | ||
474 | |||
475 | BBIF2_RXD2_PORT90_MARK, /* MSEL5CR_0_1 */ | ||
476 | BBIF2_TXD2_PORT183_MARK, | ||
477 | BBIF2_TSCK2_PORT89_MARK, | ||
478 | BBIF2_TSYNC2_PORT184_MARK, | ||
479 | |||
480 | /* BSC / FLCTL / PCMCIA */ | ||
481 | CS0_MARK, CS2_MARK, CS4_MARK, | ||
482 | CS5B_MARK, CS6A_MARK, | ||
483 | CS5A_PORT105_MARK, /* CS5A PORT 19/105 */ | ||
484 | CS5A_PORT19_MARK, | ||
485 | IOIS16_MARK, /* ? */ | ||
486 | |||
487 | A0_MARK, A1_MARK, A2_MARK, A3_MARK, | ||
488 | A4_FOE_MARK, /* share with FLCTL */ | ||
489 | A5_FCDE_MARK, /* share with FLCTL */ | ||
490 | A6_MARK, A7_MARK, A8_MARK, A9_MARK, | ||
491 | A10_MARK, A11_MARK, A12_MARK, A13_MARK, | ||
492 | A14_MARK, A15_MARK, A16_MARK, A17_MARK, | ||
493 | A18_MARK, A19_MARK, A20_MARK, A21_MARK, | ||
494 | A22_MARK, A23_MARK, A24_MARK, A25_MARK, | ||
495 | A26_MARK, | ||
496 | |||
497 | D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, /* share with FLCTL */ | ||
498 | D3_NAF3_MARK, D4_NAF4_MARK, D5_NAF5_MARK, /* share with FLCTL */ | ||
499 | D6_NAF6_MARK, D7_NAF7_MARK, D8_NAF8_MARK, /* share with FLCTL */ | ||
500 | D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK, /* share with FLCTL */ | ||
501 | D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, /* share with FLCTL */ | ||
502 | D15_NAF15_MARK, /* share with FLCTL */ | ||
503 | D16_MARK, D17_MARK, D18_MARK, D19_MARK, | ||
504 | D20_MARK, D21_MARK, D22_MARK, D23_MARK, | ||
505 | D24_MARK, D25_MARK, D26_MARK, D27_MARK, | ||
506 | D28_MARK, D29_MARK, D30_MARK, D31_MARK, | ||
507 | |||
508 | WE0_FWE_MARK, /* share with FLCTL */ | ||
509 | WE1_MARK, | ||
510 | WE2_ICIORD_MARK, /* share with PCMCIA */ | ||
511 | WE3_ICIOWR_MARK, /* share with PCMCIA */ | ||
512 | CKO_MARK, BS_MARK, RDWR_MARK, | ||
513 | RD_FSC_MARK, /* share with FLCTL */ | ||
514 | WAIT_PORT177_MARK, /* WAIT Port 90/177 */ | ||
515 | WAIT_PORT90_MARK, | ||
516 | |||
517 | FCE0_MARK, FCE1_MARK, FRB_MARK, /* FLCTL */ | ||
518 | |||
519 | /* IRDA */ | ||
520 | IRDA_FIRSEL_MARK, IRDA_IN_MARK, IRDA_OUT_MARK, | ||
521 | |||
522 | /* ATAPI */ | ||
523 | IDE_D0_MARK, IDE_D1_MARK, IDE_D2_MARK, IDE_D3_MARK, | ||
524 | IDE_D4_MARK, IDE_D5_MARK, IDE_D6_MARK, IDE_D7_MARK, | ||
525 | IDE_D8_MARK, IDE_D9_MARK, IDE_D10_MARK, IDE_D11_MARK, | ||
526 | IDE_D12_MARK, IDE_D13_MARK, IDE_D14_MARK, IDE_D15_MARK, | ||
527 | IDE_A0_MARK, IDE_A1_MARK, IDE_A2_MARK, IDE_CS0_MARK, | ||
528 | IDE_CS1_MARK, IDE_IOWR_MARK, IDE_IORD_MARK, IDE_IORDY_MARK, | ||
529 | IDE_INT_MARK, IDE_RST_MARK, IDE_DIRECTION_MARK, | ||
530 | IDE_EXBUF_ENB_MARK, IDE_IODACK_MARK, IDE_IODREQ_MARK, | ||
531 | |||
532 | /* RMII */ | ||
533 | RMII_CRS_DV_MARK, RMII_RX_ER_MARK, RMII_RXD0_MARK, | ||
534 | RMII_RXD1_MARK, RMII_TX_EN_MARK, RMII_TXD0_MARK, | ||
535 | RMII_MDC_MARK, RMII_TXD1_MARK, RMII_MDIO_MARK, | ||
536 | RMII_REF50CK_MARK, /* for RMII */ | ||
537 | RMII_REF125CK_MARK, /* for GMII */ | ||
538 | |||
539 | /* GEther */ | ||
540 | ET_TX_CLK_MARK, ET_TX_EN_MARK, ET_ETXD0_MARK, ET_ETXD1_MARK, | ||
541 | ET_ETXD2_MARK, ET_ETXD3_MARK, | ||
542 | ET_ETXD4_MARK, ET_ETXD5_MARK, /* for GEther */ | ||
543 | ET_ETXD6_MARK, ET_ETXD7_MARK, /* for GEther */ | ||
544 | ET_COL_MARK, ET_TX_ER_MARK, ET_RX_CLK_MARK, ET_RX_DV_MARK, | ||
545 | ET_ERXD0_MARK, ET_ERXD1_MARK, ET_ERXD2_MARK, ET_ERXD3_MARK, | ||
546 | ET_ERXD4_MARK, ET_ERXD5_MARK, /* for GEther */ | ||
547 | ET_ERXD6_MARK, ET_ERXD7_MARK, /* for GEther */ | ||
548 | ET_RX_ER_MARK, ET_CRS_MARK, ET_MDC_MARK, ET_MDIO_MARK, | ||
549 | ET_LINK_MARK, ET_PHY_INT_MARK, ET_WOL_MARK, ET_GTX_CLK_MARK, | ||
550 | |||
551 | /* DMA0 */ | ||
552 | DREQ0_MARK, DACK0_MARK, | ||
553 | |||
554 | /* DMA1 */ | ||
555 | DREQ1_MARK, DACK1_MARK, | ||
556 | |||
557 | /* SYSC */ | ||
558 | RESETOUTS_MARK, RESETP_PULLUP_MARK, RESETP_PLAIN_MARK, | ||
559 | |||
560 | /* IRREM */ | ||
561 | IROUT_MARK, | ||
562 | |||
563 | /* SDENC */ | ||
564 | SDENC_CPG_MARK, SDENC_DV_CLKI_MARK, | ||
565 | |||
566 | /* HDMI */ | ||
567 | HDMI_HPD_MARK, HDMI_CEC_MARK, | ||
568 | |||
569 | /* DEBUG */ | ||
570 | EDEBGREQ_PULLUP_MARK, /* for JTAG */ | ||
571 | EDEBGREQ_PULLDOWN_MARK, | ||
572 | |||
573 | TRACEAUD_FROM_VIO_MARK, /* for TRACE/AUD */ | ||
574 | TRACEAUD_FROM_LCDC0_MARK, | ||
575 | TRACEAUD_FROM_MEMC_MARK, | ||
576 | |||
577 | PINMUX_MARK_END, | ||
578 | }; | ||
579 | |||
580 | static pinmux_enum_t pinmux_data[] = { | ||
581 | /* specify valid pin states for each pin in GPIO mode */ | ||
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 | |||
712 | /* Port0 */ | ||
713 | PINMUX_DATA(DBGMDT2_MARK, PORT0_FN1), | ||
714 | PINMUX_DATA(FSIAISLD_PORT0_MARK, PORT0_FN2, MSEL5CR_3_0), | ||
715 | PINMUX_DATA(FSIAOSLD1_MARK, PORT0_FN3), | ||
716 | PINMUX_DATA(LCD0_D22_PORT0_MARK, PORT0_FN4, MSEL5CR_6_0), | ||
717 | PINMUX_DATA(SCIFA7_RXD_MARK, PORT0_FN6), | ||
718 | PINMUX_DATA(LCD1_D4_MARK, PORT0_FN7), | ||
719 | PINMUX_DATA(IRQ5_PORT0_MARK, PORT0_FN0, MSEL1CR_5_0), | ||
720 | |||
721 | /* Port1 */ | ||
722 | PINMUX_DATA(DBGMDT1_MARK, PORT1_FN1), | ||
723 | PINMUX_DATA(FMSISLD_PORT1_MARK, PORT1_FN2, MSEL5CR_5_0), | ||
724 | PINMUX_DATA(FSIAOSLD2_MARK, PORT1_FN3), | ||
725 | PINMUX_DATA(LCD0_D23_PORT1_MARK, PORT1_FN4, MSEL5CR_6_0), | ||
726 | PINMUX_DATA(SCIFA7_TXD_MARK, PORT1_FN6), | ||
727 | PINMUX_DATA(LCD1_D3_MARK, PORT1_FN7), | ||
728 | PINMUX_DATA(IRQ5_PORT1_MARK, PORT1_FN0, MSEL1CR_5_1), | ||
729 | |||
730 | /* Port2 */ | ||
731 | PINMUX_DATA(DBGMDT0_MARK, PORT2_FN1), | ||
732 | PINMUX_DATA(SCIFB_SCK_PORT2_MARK, PORT2_FN2, MSEL5CR_17_1), | ||
733 | PINMUX_DATA(LCD0_D21_PORT2_MARK, PORT2_FN4, MSEL5CR_6_0), | ||
734 | PINMUX_DATA(LCD1_D2_MARK, PORT2_FN7), | ||
735 | PINMUX_DATA(IRQ0_PORT2_MARK, PORT2_FN0, MSEL1CR_0_1), | ||
736 | |||
737 | /* Port3 */ | ||
738 | PINMUX_DATA(DBGMD21_MARK, PORT3_FN1), | ||
739 | PINMUX_DATA(SCIFB_RXD_PORT3_MARK, PORT3_FN2, MSEL5CR_17_1), | ||
740 | PINMUX_DATA(LCD0_D20_PORT3_MARK, PORT3_FN4, MSEL5CR_6_0), | ||
741 | PINMUX_DATA(LCD1_D1_MARK, PORT3_FN7), | ||
742 | |||
743 | /* Port4 */ | ||
744 | PINMUX_DATA(DBGMD20_MARK, PORT4_FN1), | ||
745 | PINMUX_DATA(SCIFB_TXD_PORT4_MARK, PORT4_FN2, MSEL5CR_17_1), | ||
746 | PINMUX_DATA(LCD0_D19_PORT4_MARK, PORT4_FN4, MSEL5CR_6_0), | ||
747 | PINMUX_DATA(LCD1_D0_MARK, PORT4_FN7), | ||
748 | |||
749 | /* Port5 */ | ||
750 | PINMUX_DATA(DBGMD11_MARK, PORT5_FN1), | ||
751 | PINMUX_DATA(BBIF2_TXD2_PORT5_MARK, PORT5_FN2, MSEL5CR_0_0), | ||
752 | PINMUX_DATA(FSIAISLD_PORT5_MARK, PORT5_FN4, MSEL5CR_3_1), | ||
753 | PINMUX_DATA(RSPI_SSL0_A_MARK, PORT5_FN6), | ||
754 | PINMUX_DATA(LCD1_VCPWC_MARK, PORT5_FN7), | ||
755 | |||
756 | /* Port6 */ | ||
757 | PINMUX_DATA(DBGMD10_MARK, PORT6_FN1), | ||
758 | PINMUX_DATA(BBIF2_TSYNC2_PORT6_MARK, PORT6_FN2, MSEL5CR_0_0), | ||
759 | PINMUX_DATA(FMSISLD_PORT6_MARK, PORT6_FN4, MSEL5CR_5_1), | ||
760 | PINMUX_DATA(RSPI_SSL1_A_MARK, PORT6_FN6), | ||
761 | PINMUX_DATA(LCD1_VEPWC_MARK, PORT6_FN7), | ||
762 | |||
763 | /* Port7 */ | ||
764 | PINMUX_DATA(FSIAOLR_MARK, PORT7_FN1), | ||
765 | |||
766 | /* Port8 */ | ||
767 | PINMUX_DATA(FSIAOBT_MARK, PORT8_FN1), | ||
768 | |||
769 | /* Port9 */ | ||
770 | PINMUX_DATA(FSIAOSLD_MARK, PORT9_FN1), | ||
771 | PINMUX_DATA(FSIASPDIF_PORT9_MARK, PORT9_FN2, MSEL5CR_4_0), | ||
772 | |||
773 | /* Port10 */ | ||
774 | PINMUX_DATA(FSIAOMC_MARK, PORT10_FN1), | ||
775 | PINMUX_DATA(SCIFA5_RXD_PORT10_MARK, PORT10_FN3, MSEL5CR_14_0, MSEL5CR_15_0), | ||
776 | PINMUX_DATA(IRQ3_PORT10_MARK, PORT10_FN0, MSEL1CR_3_0), | ||
777 | |||
778 | /* Port11 */ | ||
779 | PINMUX_DATA(FSIACK_MARK, PORT11_FN1), | ||
780 | PINMUX_DATA(FSIBCK_MARK, PORT11_FN2), | ||
781 | PINMUX_DATA(IRQ2_PORT11_MARK, PORT11_FN0, MSEL1CR_2_0), | ||
782 | |||
783 | /* Port12 */ | ||
784 | PINMUX_DATA(FSIAILR_MARK, PORT12_FN1), | ||
785 | PINMUX_DATA(SCIFA4_RXD_PORT12_MARK, PORT12_FN2, MSEL5CR_12_0, MSEL5CR_11_0), | ||
786 | PINMUX_DATA(LCD1_RS_MARK, PORT12_FN6), | ||
787 | PINMUX_DATA(LCD1_DISP_MARK, PORT12_FN7), | ||
788 | PINMUX_DATA(IRQ2_PORT12_MARK, PORT12_FN0, MSEL1CR_2_1), | ||
789 | |||
790 | /* Port13 */ | ||
791 | PINMUX_DATA(FSIAIBT_MARK, PORT13_FN1), | ||
792 | PINMUX_DATA(SCIFA4_TXD_PORT13_MARK, PORT13_FN2, MSEL5CR_12_0, MSEL5CR_11_0), | ||
793 | PINMUX_DATA(LCD1_RD_MARK, PORT13_FN7), | ||
794 | PINMUX_DATA(IRQ0_PORT13_MARK, PORT13_FN0, MSEL1CR_0_0), | ||
795 | |||
796 | /* Port14 */ | ||
797 | PINMUX_DATA(FMSOILR_MARK, PORT14_FN1), | ||
798 | PINMUX_DATA(FMSIILR_MARK, PORT14_FN2), | ||
799 | PINMUX_DATA(VIO_CKO1_MARK, PORT14_FN3), | ||
800 | PINMUX_DATA(LCD1_D23_MARK, PORT14_FN7), | ||
801 | PINMUX_DATA(IRQ3_PORT14_MARK, PORT14_FN0, MSEL1CR_3_1), | ||
802 | |||
803 | /* Port15 */ | ||
804 | PINMUX_DATA(FMSOIBT_MARK, PORT15_FN1), | ||
805 | PINMUX_DATA(FMSIIBT_MARK, PORT15_FN2), | ||
806 | PINMUX_DATA(VIO_CKO2_MARK, PORT15_FN3), | ||
807 | PINMUX_DATA(LCD1_D22_MARK, PORT15_FN7), | ||
808 | PINMUX_DATA(IRQ4_PORT15_MARK, PORT15_FN0, MSEL1CR_4_0), | ||
809 | |||
810 | /* Port16 */ | ||
811 | PINMUX_DATA(FMSOOLR_MARK, PORT16_FN1), | ||
812 | PINMUX_DATA(FMSIOLR_MARK, PORT16_FN2), | ||
813 | |||
814 | /* Port17 */ | ||
815 | PINMUX_DATA(FMSOOBT_MARK, PORT17_FN1), | ||
816 | PINMUX_DATA(FMSIOBT_MARK, PORT17_FN2), | ||
817 | |||
818 | /* Port18 */ | ||
819 | PINMUX_DATA(FMSOSLD_MARK, PORT18_FN1), | ||
820 | PINMUX_DATA(FSIASPDIF_PORT18_MARK, PORT18_FN2, MSEL5CR_4_1), | ||
821 | |||
822 | /* Port19 */ | ||
823 | PINMUX_DATA(FMSICK_MARK, PORT19_FN1), | ||
824 | PINMUX_DATA(CS5A_PORT19_MARK, PORT19_FN7, MSEL5CR_2_1), | ||
825 | PINMUX_DATA(IRQ10_MARK, PORT19_FN0), | ||
826 | |||
827 | /* Port20 */ | ||
828 | PINMUX_DATA(FMSOCK_MARK, PORT20_FN1), | ||
829 | PINMUX_DATA(SCIFA5_TXD_PORT20_MARK, PORT20_FN3, MSEL5CR_15_0, MSEL5CR_14_0), | ||
830 | PINMUX_DATA(IRQ1_MARK, PORT20_FN0), | ||
831 | |||
832 | /* Port21 */ | ||
833 | PINMUX_DATA(SCIFA1_CTS_MARK, PORT21_FN1), | ||
834 | PINMUX_DATA(SCIFA4_SCK_PORT21_MARK, PORT21_FN2, MSEL5CR_10_0), | ||
835 | PINMUX_DATA(TPU0TO1_MARK, PORT21_FN4), | ||
836 | PINMUX_DATA(VIO1_FIELD_MARK, PORT21_FN5), | ||
837 | PINMUX_DATA(STP0_IPD5_MARK, PORT21_FN6), | ||
838 | PINMUX_DATA(LCD1_D10_MARK, PORT21_FN7), | ||
839 | |||
840 | /* Port22 */ | ||
841 | PINMUX_DATA(SCIFA2_SCK_PORT22_MARK, PORT22_FN1, MSEL5CR_7_0), | ||
842 | PINMUX_DATA(SIM_D_PORT22_MARK, PORT22_FN4, MSEL5CR_21_0), | ||
843 | PINMUX_DATA(VIO0_D13_PORT22_MARK, PORT22_FN7, MSEL5CR_27_1), | ||
844 | |||
845 | /* Port23 */ | ||
846 | PINMUX_DATA(SCIFA1_RTS_MARK, PORT23_FN1), | ||
847 | PINMUX_DATA(SCIFA5_SCK_PORT23_MARK, PORT23_FN3, MSEL5CR_13_0), | ||
848 | PINMUX_DATA(TPU0TO0_MARK, PORT23_FN4), | ||
849 | PINMUX_DATA(VIO_CKO_1_MARK, PORT23_FN5), | ||
850 | PINMUX_DATA(STP0_IPD2_MARK, PORT23_FN6), | ||
851 | PINMUX_DATA(LCD1_D7_MARK, PORT23_FN7), | ||
852 | |||
853 | /* Port24 */ | ||
854 | PINMUX_DATA(VIO0_D15_PORT24_MARK, PORT24_FN1, MSEL5CR_27_0), | ||
855 | PINMUX_DATA(VIO1_D7_MARK, PORT24_FN5), | ||
856 | PINMUX_DATA(SCIFA6_SCK_MARK, PORT24_FN6), | ||
857 | PINMUX_DATA(SDHI2_CD_PORT24_MARK, PORT24_FN7, MSEL5CR_19_0), | ||
858 | |||
859 | /* Port25 */ | ||
860 | PINMUX_DATA(VIO0_D14_PORT25_MARK, PORT25_FN1, MSEL5CR_27_0), | ||
861 | PINMUX_DATA(VIO1_D6_MARK, PORT25_FN5), | ||
862 | PINMUX_DATA(SCIFA6_RXD_MARK, PORT25_FN6), | ||
863 | PINMUX_DATA(SDHI2_WP_PORT25_MARK, PORT25_FN7, MSEL5CR_19_0), | ||
864 | |||
865 | /* Port26 */ | ||
866 | PINMUX_DATA(VIO0_D13_PORT26_MARK, PORT26_FN1, MSEL5CR_27_0), | ||
867 | PINMUX_DATA(VIO1_D5_MARK, PORT26_FN5), | ||
868 | PINMUX_DATA(SCIFA6_TXD_MARK, PORT26_FN6), | ||
869 | |||
870 | /* Port27 - Port39 Function */ | ||
871 | PINMUX_DATA(VIO0_D7_MARK, PORT27_FN1), | ||
872 | PINMUX_DATA(VIO0_D6_MARK, PORT28_FN1), | ||
873 | PINMUX_DATA(VIO0_D5_MARK, PORT29_FN1), | ||
874 | PINMUX_DATA(VIO0_D4_MARK, PORT30_FN1), | ||
875 | PINMUX_DATA(VIO0_D3_MARK, PORT31_FN1), | ||
876 | PINMUX_DATA(VIO0_D2_MARK, PORT32_FN1), | ||
877 | PINMUX_DATA(VIO0_D1_MARK, PORT33_FN1), | ||
878 | PINMUX_DATA(VIO0_D0_MARK, PORT34_FN1), | ||
879 | PINMUX_DATA(VIO0_CLK_MARK, PORT35_FN1), | ||
880 | PINMUX_DATA(VIO_CKO_MARK, PORT36_FN1), | ||
881 | PINMUX_DATA(VIO0_HD_MARK, PORT37_FN1), | ||
882 | PINMUX_DATA(VIO0_FIELD_MARK, PORT38_FN1), | ||
883 | PINMUX_DATA(VIO0_VD_MARK, PORT39_FN1), | ||
884 | |||
885 | /* Port38 IRQ */ | ||
886 | PINMUX_DATA(IRQ25_MARK, PORT38_FN0), | ||
887 | |||
888 | /* Port40 */ | ||
889 | PINMUX_DATA(LCD0_D18_PORT40_MARK, PORT40_FN4, MSEL5CR_6_0), | ||
890 | PINMUX_DATA(RSPI_CK_A_MARK, PORT40_FN6), | ||
891 | PINMUX_DATA(LCD1_LCLK_MARK, PORT40_FN7), | ||
892 | |||
893 | /* Port41 */ | ||
894 | PINMUX_DATA(LCD0_D17_MARK, PORT41_FN1), | ||
895 | PINMUX_DATA(MSIOF2_SS1_MARK, PORT41_FN2), | ||
896 | PINMUX_DATA(IRQ31_PORT41_MARK, PORT41_FN0, MSEL1CR_31_1), | ||
897 | |||
898 | /* Port42 */ | ||
899 | PINMUX_DATA(LCD0_D16_MARK, PORT42_FN1), | ||
900 | PINMUX_DATA(MSIOF2_MCK1_MARK, PORT42_FN2), | ||
901 | PINMUX_DATA(IRQ12_PORT42_MARK, PORT42_FN0, MSEL1CR_12_1), | ||
902 | |||
903 | /* Port43 */ | ||
904 | PINMUX_DATA(LCD0_D15_MARK, PORT43_FN1), | ||
905 | PINMUX_DATA(MSIOF2_MCK0_MARK, PORT43_FN2), | ||
906 | PINMUX_DATA(KEYIN0_PORT43_MARK, PORT43_FN3, MSEL4CR_18_0), | ||
907 | PINMUX_DATA(DV_D15_MARK, PORT43_FN6), | ||
908 | |||
909 | /* Port44 */ | ||
910 | PINMUX_DATA(LCD0_D14_MARK, PORT44_FN1), | ||
911 | PINMUX_DATA(MSIOF2_RSYNC_MARK, PORT44_FN2), | ||
912 | PINMUX_DATA(KEYIN1_PORT44_MARK, PORT44_FN3, MSEL4CR_18_0), | ||
913 | PINMUX_DATA(DV_D14_MARK, PORT44_FN6), | ||
914 | |||
915 | /* Port45 */ | ||
916 | PINMUX_DATA(LCD0_D13_MARK, PORT45_FN1), | ||
917 | PINMUX_DATA(MSIOF2_RSCK_MARK, PORT45_FN2), | ||
918 | PINMUX_DATA(KEYIN2_PORT45_MARK, PORT45_FN3, MSEL4CR_18_0), | ||
919 | PINMUX_DATA(DV_D13_MARK, PORT45_FN6), | ||
920 | |||
921 | /* Port46 */ | ||
922 | PINMUX_DATA(LCD0_D12_MARK, PORT46_FN1), | ||
923 | PINMUX_DATA(KEYIN3_PORT46_MARK, PORT46_FN3, MSEL4CR_18_0), | ||
924 | PINMUX_DATA(DV_D12_MARK, PORT46_FN6), | ||
925 | |||
926 | /* Port47 */ | ||
927 | PINMUX_DATA(LCD0_D11_MARK, PORT47_FN1), | ||
928 | PINMUX_DATA(KEYIN4_MARK, PORT47_FN3), | ||
929 | PINMUX_DATA(DV_D11_MARK, PORT47_FN6), | ||
930 | |||
931 | /* Port48 */ | ||
932 | PINMUX_DATA(LCD0_D10_MARK, PORT48_FN1), | ||
933 | PINMUX_DATA(KEYIN5_MARK, PORT48_FN3), | ||
934 | PINMUX_DATA(DV_D10_MARK, PORT48_FN6), | ||
935 | |||
936 | /* Port49 */ | ||
937 | PINMUX_DATA(LCD0_D9_MARK, PORT49_FN1), | ||
938 | PINMUX_DATA(KEYIN6_MARK, PORT49_FN3), | ||
939 | PINMUX_DATA(DV_D9_MARK, PORT49_FN6), | ||
940 | PINMUX_DATA(IRQ30_PORT49_MARK, PORT49_FN0, MSEL1CR_30_1), | ||
941 | |||
942 | /* Port50 */ | ||
943 | PINMUX_DATA(LCD0_D8_MARK, PORT50_FN1), | ||
944 | PINMUX_DATA(KEYIN7_MARK, PORT50_FN3), | ||
945 | PINMUX_DATA(DV_D8_MARK, PORT50_FN6), | ||
946 | PINMUX_DATA(IRQ29_PORT50_MARK, PORT50_FN0, MSEL1CR_29_1), | ||
947 | |||
948 | /* Port51 */ | ||
949 | PINMUX_DATA(LCD0_D7_MARK, PORT51_FN1), | ||
950 | PINMUX_DATA(KEYOUT0_MARK, PORT51_FN3), | ||
951 | PINMUX_DATA(DV_D7_MARK, PORT51_FN6), | ||
952 | |||
953 | /* Port52 */ | ||
954 | PINMUX_DATA(LCD0_D6_MARK, PORT52_FN1), | ||
955 | PINMUX_DATA(KEYOUT1_MARK, PORT52_FN3), | ||
956 | PINMUX_DATA(DV_D6_MARK, PORT52_FN6), | ||
957 | |||
958 | /* Port53 */ | ||
959 | PINMUX_DATA(LCD0_D5_MARK, PORT53_FN1), | ||
960 | PINMUX_DATA(KEYOUT2_MARK, PORT53_FN3), | ||
961 | PINMUX_DATA(DV_D5_MARK, PORT53_FN6), | ||
962 | |||
963 | /* Port54 */ | ||
964 | PINMUX_DATA(LCD0_D4_MARK, PORT54_FN1), | ||
965 | PINMUX_DATA(KEYOUT3_MARK, PORT54_FN3), | ||
966 | PINMUX_DATA(DV_D4_MARK, PORT54_FN6), | ||
967 | |||
968 | /* Port55 */ | ||
969 | PINMUX_DATA(LCD0_D3_MARK, PORT55_FN1), | ||
970 | PINMUX_DATA(KEYOUT4_MARK, PORT55_FN3), | ||
971 | PINMUX_DATA(KEYIN3_PORT55_MARK, PORT55_FN4, MSEL4CR_18_1), | ||
972 | PINMUX_DATA(DV_D3_MARK, PORT55_FN6), | ||
973 | |||
974 | /* Port56 */ | ||
975 | PINMUX_DATA(LCD0_D2_MARK, PORT56_FN1), | ||
976 | PINMUX_DATA(KEYOUT5_MARK, PORT56_FN3), | ||
977 | PINMUX_DATA(KEYIN2_PORT56_MARK, PORT56_FN4, MSEL4CR_18_1), | ||
978 | PINMUX_DATA(DV_D2_MARK, PORT56_FN6), | ||
979 | PINMUX_DATA(IRQ28_PORT56_MARK, PORT56_FN0, MSEL1CR_28_1), | ||
980 | |||
981 | /* Port57 */ | ||
982 | PINMUX_DATA(LCD0_D1_MARK, PORT57_FN1), | ||
983 | PINMUX_DATA(KEYOUT6_MARK, PORT57_FN3), | ||
984 | PINMUX_DATA(KEYIN1_PORT57_MARK, PORT57_FN4, MSEL4CR_18_1), | ||
985 | PINMUX_DATA(DV_D1_MARK, PORT57_FN6), | ||
986 | PINMUX_DATA(IRQ27_PORT57_MARK, PORT57_FN0, MSEL1CR_27_1), | ||
987 | |||
988 | /* Port58 */ | ||
989 | PINMUX_DATA(LCD0_D0_MARK, PORT58_FN1), | ||
990 | PINMUX_DATA(KEYOUT7_MARK, PORT58_FN3), | ||
991 | PINMUX_DATA(KEYIN0_PORT58_MARK, PORT58_FN4, MSEL4CR_18_1), | ||
992 | PINMUX_DATA(DV_D0_MARK, PORT58_FN6), | ||
993 | PINMUX_DATA(IRQ26_PORT58_MARK, PORT58_FN0, MSEL1CR_26_1), | ||
994 | |||
995 | /* Port59 */ | ||
996 | PINMUX_DATA(LCD0_VCPWC_MARK, PORT59_FN1), | ||
997 | PINMUX_DATA(BBIF2_TSCK2_PORT59_MARK, PORT59_FN2, MSEL5CR_0_0), | ||
998 | PINMUX_DATA(RSPI_MOSI_A_MARK, PORT59_FN6), | ||
999 | |||
1000 | /* Port60 */ | ||
1001 | PINMUX_DATA(LCD0_VEPWC_MARK, PORT60_FN1), | ||
1002 | PINMUX_DATA(BBIF2_RXD2_PORT60_MARK, PORT60_FN2, MSEL5CR_0_0), | ||
1003 | PINMUX_DATA(RSPI_MISO_A_MARK, PORT60_FN6), | ||
1004 | |||
1005 | /* Port61 */ | ||
1006 | PINMUX_DATA(LCD0_DON_MARK, PORT61_FN1), | ||
1007 | PINMUX_DATA(MSIOF2_TXD_MARK, PORT61_FN2), | ||
1008 | |||
1009 | /* Port62 */ | ||
1010 | PINMUX_DATA(LCD0_DCK_MARK, PORT62_FN1), | ||
1011 | PINMUX_DATA(LCD0_WR_MARK, PORT62_FN4), | ||
1012 | PINMUX_DATA(DV_CLK_MARK, PORT62_FN6), | ||
1013 | PINMUX_DATA(IRQ15_PORT62_MARK, PORT62_FN0, MSEL1CR_15_1), | ||
1014 | |||
1015 | /* Port63 */ | ||
1016 | PINMUX_DATA(LCD0_VSYN_MARK, PORT63_FN1), | ||
1017 | PINMUX_DATA(DV_VSYNC_MARK, PORT63_FN6), | ||
1018 | PINMUX_DATA(IRQ14_PORT63_MARK, PORT63_FN0, MSEL1CR_14_1), | ||
1019 | |||
1020 | /* Port64 */ | ||
1021 | PINMUX_DATA(LCD0_HSYN_MARK, PORT64_FN1), | ||
1022 | PINMUX_DATA(LCD0_CS_MARK, PORT64_FN4), | ||
1023 | PINMUX_DATA(DV_HSYNC_MARK, PORT64_FN6), | ||
1024 | PINMUX_DATA(IRQ13_PORT64_MARK, PORT64_FN0, MSEL1CR_13_1), | ||
1025 | |||
1026 | /* Port65 */ | ||
1027 | PINMUX_DATA(LCD0_DISP_MARK, PORT65_FN1), | ||
1028 | PINMUX_DATA(MSIOF2_TSCK_MARK, PORT65_FN2), | ||
1029 | PINMUX_DATA(LCD0_RS_MARK, PORT65_FN4), | ||
1030 | |||
1031 | /* Port66 */ | ||
1032 | PINMUX_DATA(MEMC_INT_MARK, PORT66_FN1), | ||
1033 | PINMUX_DATA(TPU0TO2_PORT66_MARK, PORT66_FN3, MSEL5CR_25_0), | ||
1034 | PINMUX_DATA(MMC0_CLK_PORT66_MARK, PORT66_FN4, MSEL4CR_15_0), | ||
1035 | PINMUX_DATA(SDHI1_CLK_MARK, PORT66_FN6), | ||
1036 | |||
1037 | /* Port67 - Port73 Function1 */ | ||
1038 | PINMUX_DATA(MEMC_CS0_MARK, PORT67_FN1), | ||
1039 | PINMUX_DATA(MEMC_AD8_MARK, PORT68_FN1), | ||
1040 | PINMUX_DATA(MEMC_AD9_MARK, PORT69_FN1), | ||
1041 | PINMUX_DATA(MEMC_AD10_MARK, PORT70_FN1), | ||
1042 | PINMUX_DATA(MEMC_AD11_MARK, PORT71_FN1), | ||
1043 | PINMUX_DATA(MEMC_AD12_MARK, PORT72_FN1), | ||
1044 | PINMUX_DATA(MEMC_AD13_MARK, PORT73_FN1), | ||
1045 | |||
1046 | /* Port67 - Port73 Function2 */ | ||
1047 | PINMUX_DATA(MSIOF1_SS1_PORT67_MARK, PORT67_FN2, MSEL4CR_10_1), | ||
1048 | PINMUX_DATA(MSIOF1_RSCK_MARK, PORT68_FN2), | ||
1049 | PINMUX_DATA(MSIOF1_RSYNC_MARK, PORT69_FN2), | ||
1050 | PINMUX_DATA(MSIOF1_MCK0_MARK, PORT70_FN2), | ||
1051 | PINMUX_DATA(MSIOF1_MCK1_MARK, PORT71_FN2), | ||
1052 | PINMUX_DATA(MSIOF1_TSCK_PORT72_MARK, PORT72_FN2, MSEL4CR_10_1), | ||
1053 | PINMUX_DATA(MSIOF1_TSYNC_PORT73_MARK, PORT73_FN2, MSEL4CR_10_1), | ||
1054 | |||
1055 | /* Port67 - Port73 Function4 */ | ||
1056 | PINMUX_DATA(MMC0_CMD_PORT67_MARK, PORT67_FN4, MSEL4CR_15_0), | ||
1057 | PINMUX_DATA(MMC0_D0_PORT68_MARK, PORT68_FN4, MSEL4CR_15_0), | ||
1058 | PINMUX_DATA(MMC0_D1_PORT69_MARK, PORT69_FN4, MSEL4CR_15_0), | ||
1059 | PINMUX_DATA(MMC0_D2_PORT70_MARK, PORT70_FN4, MSEL4CR_15_0), | ||
1060 | PINMUX_DATA(MMC0_D3_PORT71_MARK, PORT71_FN4, MSEL4CR_15_0), | ||
1061 | PINMUX_DATA(MMC0_D4_PORT72_MARK, PORT72_FN4, MSEL4CR_15_0), | ||
1062 | PINMUX_DATA(MMC0_D5_PORT73_MARK, PORT73_FN4, MSEL4CR_15_0), | ||
1063 | |||
1064 | /* Port67 - Port73 Function6 */ | ||
1065 | PINMUX_DATA(SDHI1_CMD_MARK, PORT67_FN6), | ||
1066 | PINMUX_DATA(SDHI1_D0_MARK, PORT68_FN6), | ||
1067 | PINMUX_DATA(SDHI1_D1_MARK, PORT69_FN6), | ||
1068 | PINMUX_DATA(SDHI1_D2_MARK, PORT70_FN6), | ||
1069 | PINMUX_DATA(SDHI1_D3_MARK, PORT71_FN6), | ||
1070 | PINMUX_DATA(SDHI1_CD_MARK, PORT72_FN6), | ||
1071 | PINMUX_DATA(SDHI1_WP_MARK, PORT73_FN6), | ||
1072 | |||
1073 | /* Port67 - Port71 IRQ */ | ||
1074 | PINMUX_DATA(IRQ20_MARK, PORT67_FN0), | ||
1075 | PINMUX_DATA(IRQ16_PORT68_MARK, PORT68_FN0, MSEL1CR_16_0), | ||
1076 | PINMUX_DATA(IRQ17_MARK, PORT69_FN0), | ||
1077 | PINMUX_DATA(IRQ18_MARK, PORT70_FN0), | ||
1078 | PINMUX_DATA(IRQ19_MARK, PORT71_FN0), | ||
1079 | |||
1080 | /* Port74 */ | ||
1081 | PINMUX_DATA(MEMC_AD14_MARK, PORT74_FN1), | ||
1082 | PINMUX_DATA(MSIOF1_TXD_PORT74_MARK, PORT74_FN2, MSEL4CR_10_1), | ||
1083 | PINMUX_DATA(MMC0_D6_PORT74_MARK, PORT74_FN4, MSEL4CR_15_0), | ||
1084 | PINMUX_DATA(STP1_IPD7_MARK, PORT74_FN6), | ||
1085 | PINMUX_DATA(LCD1_D21_MARK, PORT74_FN7), | ||
1086 | |||
1087 | /* Port75 */ | ||
1088 | PINMUX_DATA(MEMC_AD15_MARK, PORT75_FN1), | ||
1089 | PINMUX_DATA(MSIOF1_RXD_PORT75_MARK, PORT75_FN2, MSEL4CR_10_1), | ||
1090 | PINMUX_DATA(MMC0_D7_PORT75_MARK, PORT75_FN4, MSEL4CR_15_0), | ||
1091 | PINMUX_DATA(STP1_IPD6_MARK, PORT75_FN6), | ||
1092 | PINMUX_DATA(LCD1_D20_MARK, PORT75_FN7), | ||
1093 | |||
1094 | /* Port76 - Port80 Function */ | ||
1095 | PINMUX_DATA(SDHI0_CMD_MARK, PORT76_FN1), | ||
1096 | PINMUX_DATA(SDHI0_D0_MARK, PORT77_FN1), | ||
1097 | PINMUX_DATA(SDHI0_D1_MARK, PORT78_FN1), | ||
1098 | PINMUX_DATA(SDHI0_D2_MARK, PORT79_FN1), | ||
1099 | PINMUX_DATA(SDHI0_D3_MARK, PORT80_FN1), | ||
1100 | |||
1101 | /* Port81 */ | ||
1102 | PINMUX_DATA(SDHI0_CD_MARK, PORT81_FN1), | ||
1103 | PINMUX_DATA(IRQ26_PORT81_MARK, PORT81_FN0, MSEL1CR_26_0), | ||
1104 | |||
1105 | /* Port82 - Port88 Function */ | ||
1106 | PINMUX_DATA(SDHI0_CLK_MARK, PORT82_FN1), | ||
1107 | PINMUX_DATA(SDHI0_WP_MARK, PORT83_FN1), | ||
1108 | PINMUX_DATA(RESETOUTS_MARK, PORT84_FN1), | ||
1109 | PINMUX_DATA(USB0_PPON_MARK, PORT85_FN1), | ||
1110 | PINMUX_DATA(USB0_OCI_MARK, PORT86_FN1), | ||
1111 | PINMUX_DATA(USB1_PPON_MARK, PORT87_FN1), | ||
1112 | PINMUX_DATA(USB1_OCI_MARK, PORT88_FN1), | ||
1113 | |||
1114 | /* Port89 */ | ||
1115 | PINMUX_DATA(DREQ0_MARK, PORT89_FN1), | ||
1116 | PINMUX_DATA(BBIF2_TSCK2_PORT89_MARK, PORT89_FN2, MSEL5CR_0_1), | ||
1117 | PINMUX_DATA(RSPI_SSL3_A_MARK, PORT89_FN6), | ||
1118 | |||
1119 | /* Port90 */ | ||
1120 | PINMUX_DATA(DACK0_MARK, PORT90_FN1), | ||
1121 | PINMUX_DATA(BBIF2_RXD2_PORT90_MARK, PORT90_FN2, MSEL5CR_0_1), | ||
1122 | PINMUX_DATA(RSPI_SSL2_A_MARK, PORT90_FN6), | ||
1123 | PINMUX_DATA(WAIT_PORT90_MARK, PORT90_FN7, MSEL5CR_2_1), | ||
1124 | |||
1125 | /* Port91 */ | ||
1126 | PINMUX_DATA(MEMC_AD0_MARK, PORT91_FN1), | ||
1127 | PINMUX_DATA(BBIF1_RXD_MARK, PORT91_FN2), | ||
1128 | PINMUX_DATA(SCIFA5_TXD_PORT91_MARK, PORT91_FN3, MSEL5CR_15_1, MSEL5CR_14_0), | ||
1129 | PINMUX_DATA(LCD1_D5_MARK, PORT91_FN7), | ||
1130 | |||
1131 | /* Port92 */ | ||
1132 | PINMUX_DATA(MEMC_AD1_MARK, PORT92_FN1), | ||
1133 | PINMUX_DATA(BBIF1_TSYNC_MARK, PORT92_FN2), | ||
1134 | PINMUX_DATA(SCIFA5_RXD_PORT92_MARK, PORT92_FN3, MSEL5CR_15_1, MSEL5CR_14_0), | ||
1135 | PINMUX_DATA(STP0_IPD1_MARK, PORT92_FN6), | ||
1136 | PINMUX_DATA(LCD1_D6_MARK, PORT92_FN7), | ||
1137 | |||
1138 | /* Port93 */ | ||
1139 | PINMUX_DATA(MEMC_AD2_MARK, PORT93_FN1), | ||
1140 | PINMUX_DATA(BBIF1_TSCK_MARK, PORT93_FN2), | ||
1141 | PINMUX_DATA(SCIFA4_TXD_PORT93_MARK, PORT93_FN3, MSEL5CR_12_1, MSEL5CR_11_0), | ||
1142 | PINMUX_DATA(STP0_IPD3_MARK, PORT93_FN6), | ||
1143 | PINMUX_DATA(LCD1_D8_MARK, PORT93_FN7), | ||
1144 | |||
1145 | /* Port94 */ | ||
1146 | PINMUX_DATA(MEMC_AD3_MARK, PORT94_FN1), | ||
1147 | PINMUX_DATA(BBIF1_TXD_MARK, PORT94_FN2), | ||
1148 | PINMUX_DATA(SCIFA4_RXD_PORT94_MARK, PORT94_FN3, MSEL5CR_12_1, MSEL5CR_11_0), | ||
1149 | PINMUX_DATA(STP0_IPD4_MARK, PORT94_FN6), | ||
1150 | PINMUX_DATA(LCD1_D9_MARK, PORT94_FN7), | ||
1151 | |||
1152 | /* Port95 */ | ||
1153 | PINMUX_DATA(MEMC_CS1_MARK, PORT95_FN1, MSEL4CR_6_0), | ||
1154 | PINMUX_DATA(MEMC_A1_MARK, PORT95_FN1, MSEL4CR_6_1), | ||
1155 | |||
1156 | PINMUX_DATA(SCIFA2_CTS_MARK, PORT95_FN2), | ||
1157 | PINMUX_DATA(SIM_RST_MARK, PORT95_FN4), | ||
1158 | PINMUX_DATA(VIO0_D14_PORT95_MARK, PORT95_FN7, MSEL5CR_27_1), | ||
1159 | PINMUX_DATA(IRQ22_MARK, PORT95_FN0), | ||
1160 | |||
1161 | /* Port96 */ | ||
1162 | PINMUX_DATA(MEMC_ADV_MARK, PORT96_FN1, MSEL4CR_6_0), | ||
1163 | PINMUX_DATA(MEMC_DREQ0_MARK, PORT96_FN1, MSEL4CR_6_1), | ||
1164 | |||
1165 | PINMUX_DATA(SCIFA2_RTS_MARK, PORT96_FN2), | ||
1166 | PINMUX_DATA(SIM_CLK_MARK, PORT96_FN4), | ||
1167 | PINMUX_DATA(VIO0_D15_PORT96_MARK, PORT96_FN7, MSEL5CR_27_1), | ||
1168 | PINMUX_DATA(IRQ23_MARK, PORT96_FN0), | ||
1169 | |||
1170 | /* Port97 */ | ||
1171 | PINMUX_DATA(MEMC_AD4_MARK, PORT97_FN1), | ||
1172 | PINMUX_DATA(BBIF1_RSCK_MARK, PORT97_FN2), | ||
1173 | PINMUX_DATA(LCD1_CS_MARK, PORT97_FN6), | ||
1174 | PINMUX_DATA(LCD1_HSYN_MARK, PORT97_FN7), | ||
1175 | PINMUX_DATA(IRQ12_PORT97_MARK, PORT97_FN0, MSEL1CR_12_0), | ||
1176 | |||
1177 | /* Port98 */ | ||
1178 | PINMUX_DATA(MEMC_AD5_MARK, PORT98_FN1), | ||
1179 | PINMUX_DATA(BBIF1_RSYNC_MARK, PORT98_FN2), | ||
1180 | PINMUX_DATA(LCD1_VSYN_MARK, PORT98_FN7), | ||
1181 | PINMUX_DATA(IRQ13_PORT98_MARK, PORT98_FN0, MSEL1CR_13_0), | ||
1182 | |||
1183 | /* Port99 */ | ||
1184 | PINMUX_DATA(MEMC_AD6_MARK, PORT99_FN1), | ||
1185 | PINMUX_DATA(BBIF1_FLOW_MARK, PORT99_FN2), | ||
1186 | PINMUX_DATA(LCD1_WR_MARK, PORT99_FN6), | ||
1187 | PINMUX_DATA(LCD1_DCK_MARK, PORT99_FN7), | ||
1188 | PINMUX_DATA(IRQ14_PORT99_MARK, PORT99_FN0, MSEL1CR_14_0), | ||
1189 | |||
1190 | /* Port100 */ | ||
1191 | PINMUX_DATA(MEMC_AD7_MARK, PORT100_FN1), | ||
1192 | PINMUX_DATA(BBIF1_RX_FLOW_N_MARK, PORT100_FN2), | ||
1193 | PINMUX_DATA(LCD1_DON_MARK, PORT100_FN7), | ||
1194 | PINMUX_DATA(IRQ15_PORT100_MARK, PORT100_FN0, MSEL1CR_15_0), | ||
1195 | |||
1196 | /* Port101 */ | ||
1197 | PINMUX_DATA(FCE0_MARK, PORT101_FN1), | ||
1198 | |||
1199 | /* Port102 */ | ||
1200 | PINMUX_DATA(FRB_MARK, PORT102_FN1), | ||
1201 | PINMUX_DATA(LCD0_LCLK_PORT102_MARK, PORT102_FN4, MSEL5CR_6_0), | ||
1202 | |||
1203 | /* Port103 */ | ||
1204 | PINMUX_DATA(CS5B_MARK, PORT103_FN1), | ||
1205 | PINMUX_DATA(FCE1_MARK, PORT103_FN2), | ||
1206 | PINMUX_DATA(MMC1_CLK_PORT103_MARK, PORT103_FN3, MSEL4CR_15_1), | ||
1207 | |||
1208 | /* Port104 */ | ||
1209 | PINMUX_DATA(CS6A_MARK, PORT104_FN1), | ||
1210 | PINMUX_DATA(MMC1_CMD_PORT104_MARK, PORT104_FN3, MSEL4CR_15_1), | ||
1211 | PINMUX_DATA(IRQ11_MARK, PORT104_FN0), | ||
1212 | |||
1213 | /* Port105 */ | ||
1214 | PINMUX_DATA(CS5A_PORT105_MARK, PORT105_FN1, MSEL5CR_2_0), | ||
1215 | PINMUX_DATA(SCIFA3_RTS_PORT105_MARK, PORT105_FN4, MSEL5CR_8_0), | ||
1216 | |||
1217 | /* Port106 */ | ||
1218 | PINMUX_DATA(IOIS16_MARK, PORT106_FN1), | ||
1219 | PINMUX_DATA(IDE_EXBUF_ENB_MARK, PORT106_FN6), | ||
1220 | |||
1221 | /* Port107 - Port115 Function */ | ||
1222 | PINMUX_DATA(WE3_ICIOWR_MARK, PORT107_FN1), | ||
1223 | PINMUX_DATA(WE2_ICIORD_MARK, PORT108_FN1), | ||
1224 | PINMUX_DATA(CS0_MARK, PORT109_FN1), | ||
1225 | PINMUX_DATA(CS2_MARK, PORT110_FN1), | ||
1226 | PINMUX_DATA(CS4_MARK, PORT111_FN1), | ||
1227 | PINMUX_DATA(WE1_MARK, PORT112_FN1), | ||
1228 | PINMUX_DATA(WE0_FWE_MARK, PORT113_FN1), | ||
1229 | PINMUX_DATA(RDWR_MARK, PORT114_FN1), | ||
1230 | PINMUX_DATA(RD_FSC_MARK, PORT115_FN1), | ||
1231 | |||
1232 | /* Port116 */ | ||
1233 | PINMUX_DATA(A25_MARK, PORT116_FN1), | ||
1234 | PINMUX_DATA(MSIOF0_SS2_MARK, PORT116_FN2), | ||
1235 | PINMUX_DATA(MSIOF1_SS2_PORT116_MARK, PORT116_FN3, MSEL4CR_10_0), | ||
1236 | PINMUX_DATA(SCIFA3_SCK_PORT116_MARK, PORT116_FN4, MSEL5CR_8_0), | ||
1237 | PINMUX_DATA(GPO1_MARK, PORT116_FN5), | ||
1238 | |||
1239 | /* Port117 */ | ||
1240 | PINMUX_DATA(A24_MARK, PORT117_FN1), | ||
1241 | PINMUX_DATA(MSIOF0_SS1_MARK, PORT117_FN2), | ||
1242 | PINMUX_DATA(MSIOF1_SS1_PORT117_MARK, PORT117_FN3, MSEL4CR_10_0), | ||
1243 | PINMUX_DATA(SCIFA3_CTS_PORT117_MARK, PORT117_FN4, MSEL5CR_8_0), | ||
1244 | PINMUX_DATA(GPO0_MARK, PORT117_FN5), | ||
1245 | |||
1246 | /* Port118 */ | ||
1247 | PINMUX_DATA(A23_MARK, PORT118_FN1), | ||
1248 | PINMUX_DATA(MSIOF0_MCK1_MARK, PORT118_FN2), | ||
1249 | PINMUX_DATA(MSIOF1_RXD_PORT118_MARK, PORT118_FN3, MSEL4CR_10_0), | ||
1250 | PINMUX_DATA(GPI1_MARK, PORT118_FN5), | ||
1251 | PINMUX_DATA(IRQ9_PORT118_MARK, PORT118_FN0, MSEL1CR_9_0), | ||
1252 | |||
1253 | /* Port119 */ | ||
1254 | PINMUX_DATA(A22_MARK, PORT119_FN1), | ||
1255 | PINMUX_DATA(MSIOF0_MCK0_MARK, PORT119_FN2), | ||
1256 | PINMUX_DATA(MSIOF1_TXD_PORT119_MARK, PORT119_FN3, MSEL4CR_10_0), | ||
1257 | PINMUX_DATA(GPI0_MARK, PORT119_FN5), | ||
1258 | PINMUX_DATA(IRQ8_MARK, PORT119_FN0), | ||
1259 | |||
1260 | /* Port120 */ | ||
1261 | PINMUX_DATA(A21_MARK, PORT120_FN1), | ||
1262 | PINMUX_DATA(MSIOF0_RSYNC_MARK, PORT120_FN2), | ||
1263 | PINMUX_DATA(MSIOF1_TSYNC_PORT120_MARK, PORT120_FN3, MSEL4CR_10_0), | ||
1264 | PINMUX_DATA(IRQ7_PORT120_MARK, PORT120_FN0, MSEL1CR_7_1), | ||
1265 | |||
1266 | /* Port121 */ | ||
1267 | PINMUX_DATA(A20_MARK, PORT121_FN1), | ||
1268 | PINMUX_DATA(MSIOF0_RSCK_MARK, PORT121_FN2), | ||
1269 | PINMUX_DATA(MSIOF1_TSCK_PORT121_MARK, PORT121_FN3, MSEL4CR_10_0), | ||
1270 | PINMUX_DATA(IRQ6_PORT121_MARK, PORT121_FN0, MSEL1CR_6_0), | ||
1271 | |||
1272 | /* Port122 */ | ||
1273 | PINMUX_DATA(A19_MARK, PORT122_FN1), | ||
1274 | PINMUX_DATA(MSIOF0_RXD_MARK, PORT122_FN2), | ||
1275 | |||
1276 | /* Port123 */ | ||
1277 | PINMUX_DATA(A18_MARK, PORT123_FN1), | ||
1278 | PINMUX_DATA(MSIOF0_TSCK_MARK, PORT123_FN2), | ||
1279 | |||
1280 | /* Port124 */ | ||
1281 | PINMUX_DATA(A17_MARK, PORT124_FN1), | ||
1282 | PINMUX_DATA(MSIOF0_TSYNC_MARK, PORT124_FN2), | ||
1283 | |||
1284 | /* Port125 - Port141 Function */ | ||
1285 | PINMUX_DATA(A16_MARK, PORT125_FN1), | ||
1286 | PINMUX_DATA(A15_MARK, PORT126_FN1), | ||
1287 | PINMUX_DATA(A14_MARK, PORT127_FN1), | ||
1288 | PINMUX_DATA(A13_MARK, PORT128_FN1), | ||
1289 | PINMUX_DATA(A12_MARK, PORT129_FN1), | ||
1290 | PINMUX_DATA(A11_MARK, PORT130_FN1), | ||
1291 | PINMUX_DATA(A10_MARK, PORT131_FN1), | ||
1292 | PINMUX_DATA(A9_MARK, PORT132_FN1), | ||
1293 | PINMUX_DATA(A8_MARK, PORT133_FN1), | ||
1294 | PINMUX_DATA(A7_MARK, PORT134_FN1), | ||
1295 | PINMUX_DATA(A6_MARK, PORT135_FN1), | ||
1296 | PINMUX_DATA(A5_FCDE_MARK, PORT136_FN1), | ||
1297 | PINMUX_DATA(A4_FOE_MARK, PORT137_FN1), | ||
1298 | PINMUX_DATA(A3_MARK, PORT138_FN1), | ||
1299 | PINMUX_DATA(A2_MARK, PORT139_FN1), | ||
1300 | PINMUX_DATA(A1_MARK, PORT140_FN1), | ||
1301 | PINMUX_DATA(CKO_MARK, PORT141_FN1), | ||
1302 | |||
1303 | /* Port142 - Port157 Function1 */ | ||
1304 | PINMUX_DATA(D15_NAF15_MARK, PORT142_FN1), | ||
1305 | PINMUX_DATA(D14_NAF14_MARK, PORT143_FN1), | ||
1306 | PINMUX_DATA(D13_NAF13_MARK, PORT144_FN1), | ||
1307 | PINMUX_DATA(D12_NAF12_MARK, PORT145_FN1), | ||
1308 | PINMUX_DATA(D11_NAF11_MARK, PORT146_FN1), | ||
1309 | PINMUX_DATA(D10_NAF10_MARK, PORT147_FN1), | ||
1310 | PINMUX_DATA(D9_NAF9_MARK, PORT148_FN1), | ||
1311 | PINMUX_DATA(D8_NAF8_MARK, PORT149_FN1), | ||
1312 | PINMUX_DATA(D7_NAF7_MARK, PORT150_FN1), | ||
1313 | PINMUX_DATA(D6_NAF6_MARK, PORT151_FN1), | ||
1314 | PINMUX_DATA(D5_NAF5_MARK, PORT152_FN1), | ||
1315 | PINMUX_DATA(D4_NAF4_MARK, PORT153_FN1), | ||
1316 | PINMUX_DATA(D3_NAF3_MARK, PORT154_FN1), | ||
1317 | PINMUX_DATA(D2_NAF2_MARK, PORT155_FN1), | ||
1318 | PINMUX_DATA(D1_NAF1_MARK, PORT156_FN1), | ||
1319 | PINMUX_DATA(D0_NAF0_MARK, PORT157_FN1), | ||
1320 | |||
1321 | /* Port142 - Port149 Function3 */ | ||
1322 | PINMUX_DATA(MMC1_D7_PORT142_MARK, PORT142_FN3, MSEL4CR_15_1), | ||
1323 | PINMUX_DATA(MMC1_D6_PORT143_MARK, PORT143_FN3, MSEL4CR_15_1), | ||
1324 | PINMUX_DATA(MMC1_D5_PORT144_MARK, PORT144_FN3, MSEL4CR_15_1), | ||
1325 | PINMUX_DATA(MMC1_D4_PORT145_MARK, PORT145_FN3, MSEL4CR_15_1), | ||
1326 | PINMUX_DATA(MMC1_D3_PORT146_MARK, PORT146_FN3, MSEL4CR_15_1), | ||
1327 | PINMUX_DATA(MMC1_D2_PORT147_MARK, PORT147_FN3, MSEL4CR_15_1), | ||
1328 | PINMUX_DATA(MMC1_D1_PORT148_MARK, PORT148_FN3, MSEL4CR_15_1), | ||
1329 | PINMUX_DATA(MMC1_D0_PORT149_MARK, PORT149_FN3, MSEL4CR_15_1), | ||
1330 | |||
1331 | /* Port158 */ | ||
1332 | PINMUX_DATA(D31_MARK, PORT158_FN1), | ||
1333 | PINMUX_DATA(SCIFA3_SCK_PORT158_MARK, PORT158_FN2, MSEL5CR_8_1), | ||
1334 | PINMUX_DATA(RMII_REF125CK_MARK, PORT158_FN3), | ||
1335 | PINMUX_DATA(LCD0_D21_PORT158_MARK, PORT158_FN4, MSEL5CR_6_1), | ||
1336 | PINMUX_DATA(IRDA_FIRSEL_MARK, PORT158_FN5), | ||
1337 | PINMUX_DATA(IDE_D15_MARK, PORT158_FN6), | ||
1338 | |||
1339 | /* Port159 */ | ||
1340 | PINMUX_DATA(D30_MARK, PORT159_FN1), | ||
1341 | PINMUX_DATA(SCIFA3_RXD_PORT159_MARK, PORT159_FN2, MSEL5CR_8_1), | ||
1342 | PINMUX_DATA(RMII_REF50CK_MARK, PORT159_FN3), | ||
1343 | PINMUX_DATA(LCD0_D23_PORT159_MARK, PORT159_FN4, MSEL5CR_6_1), | ||
1344 | PINMUX_DATA(IDE_D14_MARK, PORT159_FN6), | ||
1345 | |||
1346 | /* Port160 */ | ||
1347 | PINMUX_DATA(D29_MARK, PORT160_FN1), | ||
1348 | PINMUX_DATA(SCIFA3_TXD_PORT160_MARK, PORT160_FN2, MSEL5CR_8_1), | ||
1349 | PINMUX_DATA(LCD0_D22_PORT160_MARK, PORT160_FN4, MSEL5CR_6_1), | ||
1350 | PINMUX_DATA(VIO1_HD_MARK, PORT160_FN5), | ||
1351 | PINMUX_DATA(IDE_D13_MARK, PORT160_FN6), | ||
1352 | |||
1353 | /* Port161 */ | ||
1354 | PINMUX_DATA(D28_MARK, PORT161_FN1), | ||
1355 | PINMUX_DATA(SCIFA3_RTS_PORT161_MARK, PORT161_FN2, MSEL5CR_8_1), | ||
1356 | PINMUX_DATA(ET_RX_DV_MARK, PORT161_FN3), | ||
1357 | PINMUX_DATA(LCD0_D20_PORT161_MARK, PORT161_FN4, MSEL5CR_6_1), | ||
1358 | PINMUX_DATA(IRDA_IN_MARK, PORT161_FN5), | ||
1359 | PINMUX_DATA(IDE_D12_MARK, PORT161_FN6), | ||
1360 | |||
1361 | /* Port162 */ | ||
1362 | PINMUX_DATA(D27_MARK, PORT162_FN1), | ||
1363 | PINMUX_DATA(SCIFA3_CTS_PORT162_MARK, PORT162_FN2, MSEL5CR_8_1), | ||
1364 | PINMUX_DATA(LCD0_D19_PORT162_MARK, PORT162_FN4, MSEL5CR_6_1), | ||
1365 | PINMUX_DATA(IRDA_OUT_MARK, PORT162_FN5), | ||
1366 | PINMUX_DATA(IDE_D11_MARK, PORT162_FN6), | ||
1367 | |||
1368 | /* Port163 */ | ||
1369 | PINMUX_DATA(D26_MARK, PORT163_FN1), | ||
1370 | PINMUX_DATA(MSIOF2_SS2_MARK, PORT163_FN2), | ||
1371 | PINMUX_DATA(ET_COL_MARK, PORT163_FN3), | ||
1372 | PINMUX_DATA(LCD0_D18_PORT163_MARK, PORT163_FN4, MSEL5CR_6_1), | ||
1373 | PINMUX_DATA(IROUT_MARK, PORT163_FN5), | ||
1374 | PINMUX_DATA(IDE_D10_MARK, PORT163_FN6), | ||
1375 | |||
1376 | /* Port164 */ | ||
1377 | PINMUX_DATA(D25_MARK, PORT164_FN1), | ||
1378 | PINMUX_DATA(MSIOF2_TSYNC_MARK, PORT164_FN2), | ||
1379 | PINMUX_DATA(ET_PHY_INT_MARK, PORT164_FN3), | ||
1380 | PINMUX_DATA(LCD0_RD_MARK, PORT164_FN4), | ||
1381 | PINMUX_DATA(IDE_D9_MARK, PORT164_FN6), | ||
1382 | |||
1383 | /* Port165 */ | ||
1384 | PINMUX_DATA(D24_MARK, PORT165_FN1), | ||
1385 | PINMUX_DATA(MSIOF2_RXD_MARK, PORT165_FN2), | ||
1386 | PINMUX_DATA(LCD0_LCLK_PORT165_MARK, PORT165_FN4, MSEL5CR_6_1), | ||
1387 | PINMUX_DATA(IDE_D8_MARK, PORT165_FN6), | ||
1388 | |||
1389 | /* Port166 - Port171 Function1 */ | ||
1390 | PINMUX_DATA(D21_MARK, PORT166_FN1), | ||
1391 | PINMUX_DATA(D20_MARK, PORT167_FN1), | ||
1392 | PINMUX_DATA(D19_MARK, PORT168_FN1), | ||
1393 | PINMUX_DATA(D18_MARK, PORT169_FN1), | ||
1394 | PINMUX_DATA(D17_MARK, PORT170_FN1), | ||
1395 | PINMUX_DATA(D16_MARK, PORT171_FN1), | ||
1396 | |||
1397 | /* Port166 - Port171 Function3 */ | ||
1398 | PINMUX_DATA(ET_ETXD5_MARK, PORT166_FN3), | ||
1399 | PINMUX_DATA(ET_ETXD4_MARK, PORT167_FN3), | ||
1400 | PINMUX_DATA(ET_ETXD3_MARK, PORT168_FN3), | ||
1401 | PINMUX_DATA(ET_ETXD2_MARK, PORT169_FN3), | ||
1402 | PINMUX_DATA(ET_ETXD1_MARK, PORT170_FN3), | ||
1403 | PINMUX_DATA(ET_ETXD0_MARK, PORT171_FN3), | ||
1404 | |||
1405 | /* Port166 - Port171 Function6 */ | ||
1406 | PINMUX_DATA(IDE_D5_MARK, PORT166_FN6), | ||
1407 | PINMUX_DATA(IDE_D4_MARK, PORT167_FN6), | ||
1408 | PINMUX_DATA(IDE_D3_MARK, PORT168_FN6), | ||
1409 | PINMUX_DATA(IDE_D2_MARK, PORT169_FN6), | ||
1410 | PINMUX_DATA(IDE_D1_MARK, PORT170_FN6), | ||
1411 | PINMUX_DATA(IDE_D0_MARK, PORT171_FN6), | ||
1412 | |||
1413 | /* Port167 - Port171 IRQ */ | ||
1414 | PINMUX_DATA(IRQ31_PORT167_MARK, PORT167_FN0, MSEL1CR_31_0), | ||
1415 | PINMUX_DATA(IRQ27_PORT168_MARK, PORT168_FN0, MSEL1CR_27_0), | ||
1416 | PINMUX_DATA(IRQ28_PORT169_MARK, PORT169_FN0, MSEL1CR_28_0), | ||
1417 | PINMUX_DATA(IRQ29_PORT170_MARK, PORT170_FN0, MSEL1CR_29_0), | ||
1418 | PINMUX_DATA(IRQ30_PORT171_MARK, PORT171_FN0, MSEL1CR_30_0), | ||
1419 | |||
1420 | /* Port172 */ | ||
1421 | PINMUX_DATA(D23_MARK, PORT172_FN1), | ||
1422 | PINMUX_DATA(SCIFB_RTS_PORT172_MARK, PORT172_FN2, MSEL5CR_17_1), | ||
1423 | PINMUX_DATA(ET_ETXD7_MARK, PORT172_FN3), | ||
1424 | PINMUX_DATA(IDE_D7_MARK, PORT172_FN6), | ||
1425 | PINMUX_DATA(IRQ4_PORT172_MARK, PORT172_FN0, MSEL1CR_4_1), | ||
1426 | |||
1427 | /* Port173 */ | ||
1428 | PINMUX_DATA(D22_MARK, PORT173_FN1), | ||
1429 | PINMUX_DATA(SCIFB_CTS_PORT173_MARK, PORT173_FN2, MSEL5CR_17_1), | ||
1430 | PINMUX_DATA(ET_ETXD6_MARK, PORT173_FN3), | ||
1431 | PINMUX_DATA(IDE_D6_MARK, PORT173_FN6), | ||
1432 | PINMUX_DATA(IRQ6_PORT173_MARK, PORT173_FN0, MSEL1CR_6_1), | ||
1433 | |||
1434 | /* Port174 */ | ||
1435 | PINMUX_DATA(A26_MARK, PORT174_FN1), | ||
1436 | PINMUX_DATA(MSIOF0_TXD_MARK, PORT174_FN2), | ||
1437 | PINMUX_DATA(ET_RX_CLK_MARK, PORT174_FN3), | ||
1438 | PINMUX_DATA(SCIFA3_RXD_PORT174_MARK, PORT174_FN4, MSEL5CR_8_0), | ||
1439 | |||
1440 | /* Port175 */ | ||
1441 | PINMUX_DATA(A0_MARK, PORT175_FN1), | ||
1442 | PINMUX_DATA(BS_MARK, PORT175_FN2), | ||
1443 | PINMUX_DATA(ET_WOL_MARK, PORT175_FN3), | ||
1444 | PINMUX_DATA(SCIFA3_TXD_PORT175_MARK, PORT175_FN4, MSEL5CR_8_0), | ||
1445 | |||
1446 | /* Port176 */ | ||
1447 | PINMUX_DATA(ET_GTX_CLK_MARK, PORT176_FN3), | ||
1448 | |||
1449 | /* Port177 */ | ||
1450 | PINMUX_DATA(WAIT_PORT177_MARK, PORT177_FN1, MSEL5CR_2_0), | ||
1451 | PINMUX_DATA(ET_LINK_MARK, PORT177_FN3), | ||
1452 | PINMUX_DATA(IDE_IOWR_MARK, PORT177_FN6), | ||
1453 | PINMUX_DATA(SDHI2_WP_PORT177_MARK, PORT177_FN7, MSEL5CR_19_1), | ||
1454 | |||
1455 | /* Port178 */ | ||
1456 | PINMUX_DATA(VIO0_D12_MARK, PORT178_FN1), | ||
1457 | PINMUX_DATA(VIO1_D4_MARK, PORT178_FN5), | ||
1458 | PINMUX_DATA(IDE_IORD_MARK, PORT178_FN6), | ||
1459 | |||
1460 | /* Port179 */ | ||
1461 | PINMUX_DATA(VIO0_D11_MARK, PORT179_FN1), | ||
1462 | PINMUX_DATA(VIO1_D3_MARK, PORT179_FN5), | ||
1463 | PINMUX_DATA(IDE_IORDY_MARK, PORT179_FN6), | ||
1464 | |||
1465 | /* Port180 */ | ||
1466 | PINMUX_DATA(VIO0_D10_MARK, PORT180_FN1), | ||
1467 | PINMUX_DATA(TPU0TO3_MARK, PORT180_FN4), | ||
1468 | PINMUX_DATA(VIO1_D2_MARK, PORT180_FN5), | ||
1469 | PINMUX_DATA(IDE_INT_MARK, PORT180_FN6), | ||
1470 | PINMUX_DATA(IRQ24_MARK, PORT180_FN0), | ||
1471 | |||
1472 | /* Port181 */ | ||
1473 | PINMUX_DATA(VIO0_D9_MARK, PORT181_FN1), | ||
1474 | PINMUX_DATA(VIO1_D1_MARK, PORT181_FN5), | ||
1475 | PINMUX_DATA(IDE_RST_MARK, PORT181_FN6), | ||
1476 | |||
1477 | /* Port182 */ | ||
1478 | PINMUX_DATA(VIO0_D8_MARK, PORT182_FN1), | ||
1479 | PINMUX_DATA(VIO1_D0_MARK, PORT182_FN5), | ||
1480 | PINMUX_DATA(IDE_DIRECTION_MARK, PORT182_FN6), | ||
1481 | |||
1482 | /* Port183 */ | ||
1483 | PINMUX_DATA(DREQ1_MARK, PORT183_FN1), | ||
1484 | PINMUX_DATA(BBIF2_TXD2_PORT183_MARK, PORT183_FN2, MSEL5CR_0_1), | ||
1485 | PINMUX_DATA(ET_TX_EN_MARK, PORT183_FN3), | ||
1486 | |||
1487 | /* Port184 */ | ||
1488 | PINMUX_DATA(DACK1_MARK, PORT184_FN1), | ||
1489 | PINMUX_DATA(BBIF2_TSYNC2_PORT184_MARK, PORT184_FN2, MSEL5CR_0_1), | ||
1490 | PINMUX_DATA(ET_TX_CLK_MARK, PORT184_FN3), | ||
1491 | |||
1492 | /* Port185 - Port192 Function1 */ | ||
1493 | PINMUX_DATA(SCIFA1_SCK_MARK, PORT185_FN1), | ||
1494 | PINMUX_DATA(SCIFB_RTS_PORT186_MARK, PORT186_FN1, MSEL5CR_17_0), | ||
1495 | PINMUX_DATA(SCIFB_CTS_PORT187_MARK, PORT187_FN1, MSEL5CR_17_0), | ||
1496 | PINMUX_DATA(SCIFA0_SCK_MARK, PORT188_FN1), | ||
1497 | PINMUX_DATA(SCIFB_SCK_PORT190_MARK, PORT190_FN1, MSEL5CR_17_0), | ||
1498 | PINMUX_DATA(SCIFB_RXD_PORT191_MARK, PORT191_FN1, MSEL5CR_17_0), | ||
1499 | PINMUX_DATA(SCIFB_TXD_PORT192_MARK, PORT192_FN1, MSEL5CR_17_0), | ||
1500 | |||
1501 | /* Port185 - Port192 Function3 */ | ||
1502 | PINMUX_DATA(ET_ERXD0_MARK, PORT185_FN3), | ||
1503 | PINMUX_DATA(ET_ERXD1_MARK, PORT186_FN3), | ||
1504 | PINMUX_DATA(ET_ERXD2_MARK, PORT187_FN3), | ||
1505 | PINMUX_DATA(ET_ERXD3_MARK, PORT188_FN3), | ||
1506 | PINMUX_DATA(ET_ERXD4_MARK, PORT189_FN3), | ||
1507 | PINMUX_DATA(ET_ERXD5_MARK, PORT190_FN3), | ||
1508 | PINMUX_DATA(ET_ERXD6_MARK, PORT191_FN3), | ||
1509 | PINMUX_DATA(ET_ERXD7_MARK, PORT192_FN3), | ||
1510 | |||
1511 | /* Port185 - Port192 Function6 */ | ||
1512 | PINMUX_DATA(STP1_IPCLK_MARK, PORT185_FN6), | ||
1513 | PINMUX_DATA(STP1_IPD0_PORT186_MARK, PORT186_FN6, MSEL5CR_23_0), | ||
1514 | PINMUX_DATA(STP1_IPEN_PORT187_MARK, PORT187_FN6, MSEL5CR_23_0), | ||
1515 | PINMUX_DATA(STP1_IPSYNC_MARK, PORT188_FN6), | ||
1516 | PINMUX_DATA(STP0_IPCLK_MARK, PORT189_FN6), | ||
1517 | PINMUX_DATA(STP0_IPD0_MARK, PORT190_FN6), | ||
1518 | PINMUX_DATA(STP0_IPEN_MARK, PORT191_FN6), | ||
1519 | PINMUX_DATA(STP0_IPSYNC_MARK, PORT192_FN6), | ||
1520 | |||
1521 | /* Port193 */ | ||
1522 | PINMUX_DATA(SCIFA0_CTS_MARK, PORT193_FN1), | ||
1523 | PINMUX_DATA(RMII_CRS_DV_MARK, PORT193_FN3), | ||
1524 | PINMUX_DATA(STP1_IPEN_PORT193_MARK, PORT193_FN6, MSEL5CR_23_1), /* ? */ | ||
1525 | PINMUX_DATA(LCD1_D17_MARK, PORT193_FN7), | ||
1526 | |||
1527 | /* Port194 */ | ||
1528 | PINMUX_DATA(SCIFA0_RTS_MARK, PORT194_FN1), | ||
1529 | PINMUX_DATA(RMII_RX_ER_MARK, PORT194_FN3), | ||
1530 | PINMUX_DATA(STP1_IPD0_PORT194_MARK, PORT194_FN6, MSEL5CR_23_1), /* ? */ | ||
1531 | PINMUX_DATA(LCD1_D16_MARK, PORT194_FN7), | ||
1532 | |||
1533 | /* Port195 */ | ||
1534 | PINMUX_DATA(SCIFA1_RXD_MARK, PORT195_FN1), | ||
1535 | PINMUX_DATA(RMII_RXD0_MARK, PORT195_FN3), | ||
1536 | PINMUX_DATA(STP1_IPD3_MARK, PORT195_FN6), | ||
1537 | PINMUX_DATA(LCD1_D15_MARK, PORT195_FN7), | ||
1538 | |||
1539 | /* Port196 */ | ||
1540 | PINMUX_DATA(SCIFA1_TXD_MARK, PORT196_FN1), | ||
1541 | PINMUX_DATA(RMII_RXD1_MARK, PORT196_FN3), | ||
1542 | PINMUX_DATA(STP1_IPD2_MARK, PORT196_FN6), | ||
1543 | PINMUX_DATA(LCD1_D14_MARK, PORT196_FN7), | ||
1544 | |||
1545 | /* Port197 */ | ||
1546 | PINMUX_DATA(SCIFA0_RXD_MARK, PORT197_FN1), | ||
1547 | PINMUX_DATA(VIO1_CLK_MARK, PORT197_FN5), | ||
1548 | PINMUX_DATA(STP1_IPD5_MARK, PORT197_FN6), | ||
1549 | PINMUX_DATA(LCD1_D19_MARK, PORT197_FN7), | ||
1550 | |||
1551 | /* Port198 */ | ||
1552 | PINMUX_DATA(SCIFA0_TXD_MARK, PORT198_FN1), | ||
1553 | PINMUX_DATA(VIO1_VD_MARK, PORT198_FN5), | ||
1554 | PINMUX_DATA(STP1_IPD4_MARK, PORT198_FN6), | ||
1555 | PINMUX_DATA(LCD1_D18_MARK, PORT198_FN7), | ||
1556 | |||
1557 | /* Port199 */ | ||
1558 | PINMUX_DATA(MEMC_NWE_MARK, PORT199_FN1), | ||
1559 | PINMUX_DATA(SCIFA2_SCK_PORT199_MARK, PORT199_FN2, MSEL5CR_7_1), | ||
1560 | PINMUX_DATA(RMII_TX_EN_MARK, PORT199_FN3), | ||
1561 | PINMUX_DATA(SIM_D_PORT199_MARK, PORT199_FN4, MSEL5CR_21_1), | ||
1562 | PINMUX_DATA(STP1_IPD1_MARK, PORT199_FN6), | ||
1563 | PINMUX_DATA(LCD1_D13_MARK, PORT199_FN7), | ||
1564 | |||
1565 | /* Port200 */ | ||
1566 | PINMUX_DATA(MEMC_NOE_MARK, PORT200_FN1), | ||
1567 | PINMUX_DATA(SCIFA2_RXD_MARK, PORT200_FN2), | ||
1568 | PINMUX_DATA(RMII_TXD0_MARK, PORT200_FN3), | ||
1569 | PINMUX_DATA(STP0_IPD7_MARK, PORT200_FN6), | ||
1570 | PINMUX_DATA(LCD1_D12_MARK, PORT200_FN7), | ||
1571 | |||
1572 | /* Port201 */ | ||
1573 | PINMUX_DATA(MEMC_WAIT_MARK, PORT201_FN1, MSEL4CR_6_0), | ||
1574 | PINMUX_DATA(MEMC_DREQ1_MARK, PORT201_FN1, MSEL4CR_6_1), | ||
1575 | |||
1576 | PINMUX_DATA(SCIFA2_TXD_MARK, PORT201_FN2), | ||
1577 | PINMUX_DATA(RMII_TXD1_MARK, PORT201_FN3), | ||
1578 | PINMUX_DATA(STP0_IPD6_MARK, PORT201_FN6), | ||
1579 | PINMUX_DATA(LCD1_D11_MARK, PORT201_FN7), | ||
1580 | |||
1581 | /* Port202 */ | ||
1582 | PINMUX_DATA(MEMC_BUSCLK_MARK, PORT202_FN1, MSEL4CR_6_0), | ||
1583 | PINMUX_DATA(MEMC_A0_MARK, PORT202_FN1, MSEL4CR_6_1), | ||
1584 | |||
1585 | PINMUX_DATA(MSIOF1_SS2_PORT202_MARK, PORT202_FN2, MSEL4CR_10_1), | ||
1586 | PINMUX_DATA(RMII_MDC_MARK, PORT202_FN3), | ||
1587 | PINMUX_DATA(TPU0TO2_PORT202_MARK, PORT202_FN4, MSEL5CR_25_1), | ||
1588 | PINMUX_DATA(IDE_CS0_MARK, PORT202_FN6), | ||
1589 | PINMUX_DATA(SDHI2_CD_PORT202_MARK, PORT202_FN7, MSEL5CR_19_1), | ||
1590 | PINMUX_DATA(IRQ21_MARK, PORT202_FN0), | ||
1591 | |||
1592 | /* Port203 - Port208 Function1 */ | ||
1593 | PINMUX_DATA(SDHI2_CLK_MARK, PORT203_FN1), | ||
1594 | PINMUX_DATA(SDHI2_CMD_MARK, PORT204_FN1), | ||
1595 | PINMUX_DATA(SDHI2_D0_MARK, PORT205_FN1), | ||
1596 | PINMUX_DATA(SDHI2_D1_MARK, PORT206_FN1), | ||
1597 | PINMUX_DATA(SDHI2_D2_MARK, PORT207_FN1), | ||
1598 | PINMUX_DATA(SDHI2_D3_MARK, PORT208_FN1), | ||
1599 | |||
1600 | /* Port203 - Port208 Function3 */ | ||
1601 | PINMUX_DATA(ET_TX_ER_MARK, PORT203_FN3), | ||
1602 | PINMUX_DATA(ET_RX_ER_MARK, PORT204_FN3), | ||
1603 | PINMUX_DATA(ET_CRS_MARK, PORT205_FN3), | ||
1604 | PINMUX_DATA(ET_MDC_MARK, PORT206_FN3), | ||
1605 | PINMUX_DATA(ET_MDIO_MARK, PORT207_FN3), | ||
1606 | PINMUX_DATA(RMII_MDIO_MARK, PORT208_FN3), | ||
1607 | |||
1608 | /* Port203 - Port208 Function6 */ | ||
1609 | PINMUX_DATA(IDE_A2_MARK, PORT203_FN6), | ||
1610 | PINMUX_DATA(IDE_A1_MARK, PORT204_FN6), | ||
1611 | PINMUX_DATA(IDE_A0_MARK, PORT205_FN6), | ||
1612 | PINMUX_DATA(IDE_IODACK_MARK, PORT206_FN6), | ||
1613 | PINMUX_DATA(IDE_IODREQ_MARK, PORT207_FN6), | ||
1614 | PINMUX_DATA(IDE_CS1_MARK, PORT208_FN6), | ||
1615 | |||
1616 | /* Port203 - Port208 Function7 */ | ||
1617 | PINMUX_DATA(SCIFA4_TXD_PORT203_MARK, PORT203_FN7, MSEL5CR_12_0, MSEL5CR_11_1), | ||
1618 | PINMUX_DATA(SCIFA4_RXD_PORT204_MARK, PORT204_FN7, MSEL5CR_12_0, MSEL5CR_11_1), | ||
1619 | PINMUX_DATA(SCIFA4_SCK_PORT205_MARK, PORT205_FN7, MSEL5CR_10_1), | ||
1620 | PINMUX_DATA(SCIFA5_SCK_PORT206_MARK, PORT206_FN7, MSEL5CR_13_1), | ||
1621 | PINMUX_DATA(SCIFA5_RXD_PORT207_MARK, PORT207_FN7, MSEL5CR_15_0, MSEL5CR_14_1), | ||
1622 | PINMUX_DATA(SCIFA5_TXD_PORT208_MARK, PORT208_FN7, MSEL5CR_15_0, MSEL5CR_14_1), | ||
1623 | |||
1624 | /* Port209 */ | ||
1625 | PINMUX_DATA(VBUS_MARK, PORT209_FN1), | ||
1626 | PINMUX_DATA(IRQ7_PORT209_MARK, PORT209_FN0, MSEL1CR_7_0), | ||
1627 | |||
1628 | /* Port210 */ | ||
1629 | PINMUX_DATA(IRQ9_PORT210_MARK, PORT210_FN0, MSEL1CR_9_1), | ||
1630 | PINMUX_DATA(HDMI_HPD_MARK, PORT210_FN1), | ||
1631 | |||
1632 | /* Port211 */ | ||
1633 | PINMUX_DATA(IRQ16_PORT211_MARK, PORT211_FN0, MSEL1CR_16_1), | ||
1634 | PINMUX_DATA(HDMI_CEC_MARK, PORT211_FN1), | ||
1635 | |||
1636 | /* LCDC select */ | ||
1637 | PINMUX_DATA(LCDC0_SELECT_MARK, MSEL3CR_6_0), | ||
1638 | PINMUX_DATA(LCDC1_SELECT_MARK, MSEL3CR_6_1), | ||
1639 | |||
1640 | /* SDENC */ | ||
1641 | PINMUX_DATA(SDENC_CPG_MARK, MSEL4CR_19_0), | ||
1642 | PINMUX_DATA(SDENC_DV_CLKI_MARK, MSEL4CR_19_1), | ||
1643 | |||
1644 | /* SYSC */ | ||
1645 | PINMUX_DATA(RESETP_PULLUP_MARK, MSEL4CR_4_0), | ||
1646 | PINMUX_DATA(RESETP_PLAIN_MARK, MSEL4CR_4_1), | ||
1647 | |||
1648 | /* DEBUG */ | ||
1649 | PINMUX_DATA(EDEBGREQ_PULLDOWN_MARK, MSEL4CR_1_0), | ||
1650 | PINMUX_DATA(EDEBGREQ_PULLUP_MARK, MSEL4CR_1_1), | ||
1651 | |||
1652 | PINMUX_DATA(TRACEAUD_FROM_VIO_MARK, MSEL5CR_30_0, MSEL5CR_29_0), | ||
1653 | PINMUX_DATA(TRACEAUD_FROM_LCDC0_MARK, MSEL5CR_30_0, MSEL5CR_29_1), | ||
1654 | PINMUX_DATA(TRACEAUD_FROM_MEMC_MARK, MSEL5CR_30_1, MSEL5CR_29_0), | ||
1655 | }; | ||
1656 | |||
1657 | static struct pinmux_gpio pinmux_gpios[] = { | ||
1658 | |||
1659 | /* PORT */ | ||
1660 | GPIO_PORT_ALL(), | ||
1661 | |||
1662 | /* IRQ */ | ||
1663 | GPIO_FN(IRQ0_PORT2), GPIO_FN(IRQ0_PORT13), | ||
1664 | GPIO_FN(IRQ1), | ||
1665 | GPIO_FN(IRQ2_PORT11), GPIO_FN(IRQ2_PORT12), | ||
1666 | GPIO_FN(IRQ3_PORT10), GPIO_FN(IRQ3_PORT14), | ||
1667 | GPIO_FN(IRQ4_PORT15), GPIO_FN(IRQ4_PORT172), | ||
1668 | GPIO_FN(IRQ5_PORT0), GPIO_FN(IRQ5_PORT1), | ||
1669 | GPIO_FN(IRQ6_PORT121), GPIO_FN(IRQ6_PORT173), | ||
1670 | GPIO_FN(IRQ7_PORT120), GPIO_FN(IRQ7_PORT209), | ||
1671 | GPIO_FN(IRQ8), | ||
1672 | GPIO_FN(IRQ9_PORT118), GPIO_FN(IRQ9_PORT210), | ||
1673 | GPIO_FN(IRQ10), | ||
1674 | GPIO_FN(IRQ11), | ||
1675 | GPIO_FN(IRQ12_PORT42), GPIO_FN(IRQ12_PORT97), | ||
1676 | GPIO_FN(IRQ13_PORT64), GPIO_FN(IRQ13_PORT98), | ||
1677 | GPIO_FN(IRQ14_PORT63), GPIO_FN(IRQ14_PORT99), | ||
1678 | GPIO_FN(IRQ15_PORT62), GPIO_FN(IRQ15_PORT100), | ||
1679 | GPIO_FN(IRQ16_PORT68), GPIO_FN(IRQ16_PORT211), | ||
1680 | GPIO_FN(IRQ17), | ||
1681 | GPIO_FN(IRQ18), | ||
1682 | GPIO_FN(IRQ19), | ||
1683 | GPIO_FN(IRQ20), | ||
1684 | GPIO_FN(IRQ21), | ||
1685 | GPIO_FN(IRQ22), | ||
1686 | GPIO_FN(IRQ23), | ||
1687 | GPIO_FN(IRQ24), | ||
1688 | GPIO_FN(IRQ25), | ||
1689 | GPIO_FN(IRQ26_PORT58), GPIO_FN(IRQ26_PORT81), | ||
1690 | GPIO_FN(IRQ27_PORT57), GPIO_FN(IRQ27_PORT168), | ||
1691 | GPIO_FN(IRQ28_PORT56), GPIO_FN(IRQ28_PORT169), | ||
1692 | GPIO_FN(IRQ29_PORT50), GPIO_FN(IRQ29_PORT170), | ||
1693 | GPIO_FN(IRQ30_PORT49), GPIO_FN(IRQ30_PORT171), | ||
1694 | GPIO_FN(IRQ31_PORT41), GPIO_FN(IRQ31_PORT167), | ||
1695 | |||
1696 | /* Function */ | ||
1697 | |||
1698 | /* DBGT */ | ||
1699 | GPIO_FN(DBGMDT2), GPIO_FN(DBGMDT1), GPIO_FN(DBGMDT0), | ||
1700 | GPIO_FN(DBGMD10), GPIO_FN(DBGMD11), GPIO_FN(DBGMD20), | ||
1701 | GPIO_FN(DBGMD21), | ||
1702 | |||
1703 | /* FSI-A */ | ||
1704 | GPIO_FN(FSIAISLD_PORT0), /* FSIAISLD Port 0/5 */ | ||
1705 | GPIO_FN(FSIAISLD_PORT5), | ||
1706 | GPIO_FN(FSIASPDIF_PORT9), /* FSIASPDIF Port 9/18 */ | ||
1707 | GPIO_FN(FSIASPDIF_PORT18), | ||
1708 | GPIO_FN(FSIAOSLD1), GPIO_FN(FSIAOSLD2), GPIO_FN(FSIAOLR), | ||
1709 | GPIO_FN(FSIAOBT), GPIO_FN(FSIAOSLD), GPIO_FN(FSIAOMC), | ||
1710 | GPIO_FN(FSIACK), GPIO_FN(FSIAILR), GPIO_FN(FSIAIBT), | ||
1711 | |||
1712 | /* FSI-B */ | ||
1713 | GPIO_FN(FSIBCK), | ||
1714 | |||
1715 | /* FMSI */ | ||
1716 | GPIO_FN(FMSISLD_PORT1), /* FMSISLD Port 1/6 */ | ||
1717 | GPIO_FN(FMSISLD_PORT6), | ||
1718 | GPIO_FN(FMSIILR), GPIO_FN(FMSIIBT), GPIO_FN(FMSIOLR), | ||
1719 | GPIO_FN(FMSIOBT), GPIO_FN(FMSICK), GPIO_FN(FMSOILR), | ||
1720 | GPIO_FN(FMSOIBT), GPIO_FN(FMSOOLR), GPIO_FN(FMSOOBT), | ||
1721 | GPIO_FN(FMSOSLD), GPIO_FN(FMSOCK), | ||
1722 | |||
1723 | /* SCIFA0 */ | ||
1724 | GPIO_FN(SCIFA0_SCK), GPIO_FN(SCIFA0_CTS), GPIO_FN(SCIFA0_RTS), | ||
1725 | GPIO_FN(SCIFA0_RXD), GPIO_FN(SCIFA0_TXD), | ||
1726 | |||
1727 | /* SCIFA1 */ | ||
1728 | GPIO_FN(SCIFA1_CTS), GPIO_FN(SCIFA1_SCK), | ||
1729 | GPIO_FN(SCIFA1_RXD), GPIO_FN(SCIFA1_TXD), GPIO_FN(SCIFA1_RTS), | ||
1730 | |||
1731 | /* SCIFA2 */ | ||
1732 | GPIO_FN(SCIFA2_SCK_PORT22), /* SCIFA2_SCK Port 22/199 */ | ||
1733 | GPIO_FN(SCIFA2_SCK_PORT199), | ||
1734 | GPIO_FN(SCIFA2_RXD), GPIO_FN(SCIFA2_TXD), | ||
1735 | GPIO_FN(SCIFA2_CTS), GPIO_FN(SCIFA2_RTS), | ||
1736 | |||
1737 | /* SCIFA3 */ | ||
1738 | GPIO_FN(SCIFA3_RTS_PORT105), /* MSEL5CR_8_0 */ | ||
1739 | GPIO_FN(SCIFA3_SCK_PORT116), | ||
1740 | GPIO_FN(SCIFA3_CTS_PORT117), | ||
1741 | GPIO_FN(SCIFA3_RXD_PORT174), | ||
1742 | GPIO_FN(SCIFA3_TXD_PORT175), | ||
1743 | |||
1744 | GPIO_FN(SCIFA3_RTS_PORT161), /* MSEL5CR_8_1 */ | ||
1745 | GPIO_FN(SCIFA3_SCK_PORT158), | ||
1746 | GPIO_FN(SCIFA3_CTS_PORT162), | ||
1747 | GPIO_FN(SCIFA3_RXD_PORT159), | ||
1748 | GPIO_FN(SCIFA3_TXD_PORT160), | ||
1749 | |||
1750 | /* SCIFA4 */ | ||
1751 | GPIO_FN(SCIFA4_RXD_PORT12), /* MSEL5CR[12:11] = 00 */ | ||
1752 | GPIO_FN(SCIFA4_TXD_PORT13), | ||
1753 | |||
1754 | GPIO_FN(SCIFA4_RXD_PORT204), /* MSEL5CR[12:11] = 01 */ | ||
1755 | GPIO_FN(SCIFA4_TXD_PORT203), | ||
1756 | |||
1757 | GPIO_FN(SCIFA4_RXD_PORT94), /* MSEL5CR[12:11] = 10 */ | ||
1758 | GPIO_FN(SCIFA4_TXD_PORT93), | ||
1759 | |||
1760 | GPIO_FN(SCIFA4_SCK_PORT21), /* SCIFA4_SCK Port 21/205 */ | ||
1761 | GPIO_FN(SCIFA4_SCK_PORT205), | ||
1762 | |||
1763 | /* SCIFA5 */ | ||
1764 | GPIO_FN(SCIFA5_TXD_PORT20), /* MSEL5CR[15:14] = 00 */ | ||
1765 | GPIO_FN(SCIFA5_RXD_PORT10), | ||
1766 | |||
1767 | GPIO_FN(SCIFA5_RXD_PORT207), /* MSEL5CR[15:14] = 01 */ | ||
1768 | GPIO_FN(SCIFA5_TXD_PORT208), | ||
1769 | |||
1770 | GPIO_FN(SCIFA5_TXD_PORT91), /* MSEL5CR[15:14] = 10 */ | ||
1771 | GPIO_FN(SCIFA5_RXD_PORT92), | ||
1772 | |||
1773 | GPIO_FN(SCIFA5_SCK_PORT23), /* SCIFA5_SCK Port 23/206 */ | ||
1774 | GPIO_FN(SCIFA5_SCK_PORT206), | ||
1775 | |||
1776 | /* SCIFA6 */ | ||
1777 | GPIO_FN(SCIFA6_SCK), GPIO_FN(SCIFA6_RXD), GPIO_FN(SCIFA6_TXD), | ||
1778 | |||
1779 | /* SCIFA7 */ | ||
1780 | GPIO_FN(SCIFA7_TXD), GPIO_FN(SCIFA7_RXD), | ||
1781 | |||
1782 | /* SCIFAB */ | ||
1783 | GPIO_FN(SCIFB_SCK_PORT190), /* MSEL5CR_17_0 */ | ||
1784 | GPIO_FN(SCIFB_RXD_PORT191), | ||
1785 | GPIO_FN(SCIFB_TXD_PORT192), | ||
1786 | GPIO_FN(SCIFB_RTS_PORT186), | ||
1787 | GPIO_FN(SCIFB_CTS_PORT187), | ||
1788 | |||
1789 | GPIO_FN(SCIFB_SCK_PORT2), /* MSEL5CR_17_1 */ | ||
1790 | GPIO_FN(SCIFB_RXD_PORT3), | ||
1791 | GPIO_FN(SCIFB_TXD_PORT4), | ||
1792 | GPIO_FN(SCIFB_RTS_PORT172), | ||
1793 | GPIO_FN(SCIFB_CTS_PORT173), | ||
1794 | |||
1795 | /* LCD0 */ | ||
1796 | GPIO_FN(LCD0_D0), GPIO_FN(LCD0_D1), GPIO_FN(LCD0_D2), | ||
1797 | GPIO_FN(LCD0_D3), GPIO_FN(LCD0_D4), GPIO_FN(LCD0_D5), | ||
1798 | GPIO_FN(LCD0_D6), GPIO_FN(LCD0_D7), GPIO_FN(LCD0_D8), | ||
1799 | GPIO_FN(LCD0_D9), GPIO_FN(LCD0_D10), GPIO_FN(LCD0_D11), | ||
1800 | GPIO_FN(LCD0_D12), GPIO_FN(LCD0_D13), GPIO_FN(LCD0_D14), | ||
1801 | GPIO_FN(LCD0_D15), GPIO_FN(LCD0_D16), GPIO_FN(LCD0_D17), | ||
1802 | GPIO_FN(LCD0_DON), GPIO_FN(LCD0_VCPWC), GPIO_FN(LCD0_VEPWC), | ||
1803 | GPIO_FN(LCD0_DCK), GPIO_FN(LCD0_VSYN), | ||
1804 | GPIO_FN(LCD0_HSYN), GPIO_FN(LCD0_DISP), | ||
1805 | GPIO_FN(LCD0_WR), GPIO_FN(LCD0_RD), | ||
1806 | GPIO_FN(LCD0_CS), GPIO_FN(LCD0_RS), | ||
1807 | |||
1808 | GPIO_FN(LCD0_D18_PORT163), GPIO_FN(LCD0_D19_PORT162), | ||
1809 | GPIO_FN(LCD0_D20_PORT161), GPIO_FN(LCD0_D21_PORT158), | ||
1810 | GPIO_FN(LCD0_D22_PORT160), GPIO_FN(LCD0_D23_PORT159), | ||
1811 | GPIO_FN(LCD0_LCLK_PORT165), /* MSEL5CR_6_1 */ | ||
1812 | |||
1813 | GPIO_FN(LCD0_D18_PORT40), GPIO_FN(LCD0_D19_PORT4), | ||
1814 | GPIO_FN(LCD0_D20_PORT3), GPIO_FN(LCD0_D21_PORT2), | ||
1815 | GPIO_FN(LCD0_D22_PORT0), GPIO_FN(LCD0_D23_PORT1), | ||
1816 | GPIO_FN(LCD0_LCLK_PORT102), /* MSEL5CR_6_0 */ | ||
1817 | |||
1818 | /* LCD1 */ | ||
1819 | GPIO_FN(LCD1_D0), GPIO_FN(LCD1_D1), GPIO_FN(LCD1_D2), | ||
1820 | GPIO_FN(LCD1_D3), GPIO_FN(LCD1_D4), GPIO_FN(LCD1_D5), | ||
1821 | GPIO_FN(LCD1_D6), GPIO_FN(LCD1_D7), GPIO_FN(LCD1_D8), | ||
1822 | GPIO_FN(LCD1_D9), GPIO_FN(LCD1_D10), GPIO_FN(LCD1_D11), | ||
1823 | GPIO_FN(LCD1_D12), GPIO_FN(LCD1_D13), GPIO_FN(LCD1_D14), | ||
1824 | GPIO_FN(LCD1_D15), GPIO_FN(LCD1_D16), GPIO_FN(LCD1_D17), | ||
1825 | GPIO_FN(LCD1_D18), GPIO_FN(LCD1_D19), GPIO_FN(LCD1_D20), | ||
1826 | GPIO_FN(LCD1_D21), GPIO_FN(LCD1_D22), GPIO_FN(LCD1_D23), | ||
1827 | GPIO_FN(LCD1_RS), GPIO_FN(LCD1_RD), GPIO_FN(LCD1_CS), | ||
1828 | GPIO_FN(LCD1_WR), GPIO_FN(LCD1_DCK), GPIO_FN(LCD1_DON), | ||
1829 | GPIO_FN(LCD1_VCPWC), GPIO_FN(LCD1_LCLK), GPIO_FN(LCD1_HSYN), | ||
1830 | GPIO_FN(LCD1_VSYN), GPIO_FN(LCD1_VEPWC), GPIO_FN(LCD1_DISP), | ||
1831 | |||
1832 | /* RSPI */ | ||
1833 | GPIO_FN(RSPI_SSL0_A), GPIO_FN(RSPI_SSL1_A), GPIO_FN(RSPI_SSL2_A), | ||
1834 | GPIO_FN(RSPI_SSL3_A), GPIO_FN(RSPI_CK_A), GPIO_FN(RSPI_MOSI_A), | ||
1835 | GPIO_FN(RSPI_MISO_A), | ||
1836 | |||
1837 | /* VIO CKO */ | ||
1838 | GPIO_FN(VIO_CKO1), | ||
1839 | GPIO_FN(VIO_CKO2), | ||
1840 | GPIO_FN(VIO_CKO_1), | ||
1841 | GPIO_FN(VIO_CKO), | ||
1842 | |||
1843 | /* VIO0 */ | ||
1844 | GPIO_FN(VIO0_D0), GPIO_FN(VIO0_D1), GPIO_FN(VIO0_D2), | ||
1845 | GPIO_FN(VIO0_D3), GPIO_FN(VIO0_D4), GPIO_FN(VIO0_D5), | ||
1846 | GPIO_FN(VIO0_D6), GPIO_FN(VIO0_D7), GPIO_FN(VIO0_D8), | ||
1847 | GPIO_FN(VIO0_D9), GPIO_FN(VIO0_D10), GPIO_FN(VIO0_D11), | ||
1848 | GPIO_FN(VIO0_D12), GPIO_FN(VIO0_VD), GPIO_FN(VIO0_HD), | ||
1849 | GPIO_FN(VIO0_CLK), GPIO_FN(VIO0_FIELD), | ||
1850 | |||
1851 | GPIO_FN(VIO0_D13_PORT26), /* MSEL5CR_27_0 */ | ||
1852 | GPIO_FN(VIO0_D14_PORT25), | ||
1853 | GPIO_FN(VIO0_D15_PORT24), | ||
1854 | |||
1855 | GPIO_FN(VIO0_D13_PORT22), /* MSEL5CR_27_1 */ | ||
1856 | GPIO_FN(VIO0_D14_PORT95), | ||
1857 | GPIO_FN(VIO0_D15_PORT96), | ||
1858 | |||
1859 | /* VIO1 */ | ||
1860 | GPIO_FN(VIO1_D0), GPIO_FN(VIO1_D1), GPIO_FN(VIO1_D2), | ||
1861 | GPIO_FN(VIO1_D3), GPIO_FN(VIO1_D4), GPIO_FN(VIO1_D5), | ||
1862 | GPIO_FN(VIO1_D6), GPIO_FN(VIO1_D7), GPIO_FN(VIO1_VD), | ||
1863 | GPIO_FN(VIO1_HD), GPIO_FN(VIO1_CLK), GPIO_FN(VIO1_FIELD), | ||
1864 | |||
1865 | /* TPU0 */ | ||
1866 | GPIO_FN(TPU0TO0), GPIO_FN(TPU0TO1), GPIO_FN(TPU0TO3), | ||
1867 | GPIO_FN(TPU0TO2_PORT66), /* TPU0TO2 Port 66/202 */ | ||
1868 | GPIO_FN(TPU0TO2_PORT202), | ||
1869 | |||
1870 | /* SSP1 0 */ | ||
1871 | GPIO_FN(STP0_IPD0), GPIO_FN(STP0_IPD1), GPIO_FN(STP0_IPD2), | ||
1872 | GPIO_FN(STP0_IPD3), GPIO_FN(STP0_IPD4), GPIO_FN(STP0_IPD5), | ||
1873 | GPIO_FN(STP0_IPD6), GPIO_FN(STP0_IPD7), GPIO_FN(STP0_IPEN), | ||
1874 | GPIO_FN(STP0_IPCLK), GPIO_FN(STP0_IPSYNC), | ||
1875 | |||
1876 | /* SSP1 1 */ | ||
1877 | GPIO_FN(STP1_IPD1), GPIO_FN(STP1_IPD2), GPIO_FN(STP1_IPD3), | ||
1878 | GPIO_FN(STP1_IPD4), GPIO_FN(STP1_IPD5), GPIO_FN(STP1_IPD6), | ||
1879 | GPIO_FN(STP1_IPD7), GPIO_FN(STP1_IPCLK), GPIO_FN(STP1_IPSYNC), | ||
1880 | |||
1881 | GPIO_FN(STP1_IPD0_PORT186), /* MSEL5CR_23_0 */ | ||
1882 | GPIO_FN(STP1_IPEN_PORT187), | ||
1883 | |||
1884 | GPIO_FN(STP1_IPD0_PORT194), /* MSEL5CR_23_1 */ | ||
1885 | GPIO_FN(STP1_IPEN_PORT193), | ||
1886 | |||
1887 | /* SIM */ | ||
1888 | GPIO_FN(SIM_RST), GPIO_FN(SIM_CLK), | ||
1889 | GPIO_FN(SIM_D_PORT22), /* SIM_D Port 22/199 */ | ||
1890 | GPIO_FN(SIM_D_PORT199), | ||
1891 | |||
1892 | /* SDHI0 */ | ||
1893 | GPIO_FN(SDHI0_D0), GPIO_FN(SDHI0_D1), GPIO_FN(SDHI0_D2), | ||
1894 | GPIO_FN(SDHI0_D3), GPIO_FN(SDHI0_CD), GPIO_FN(SDHI0_WP), | ||
1895 | GPIO_FN(SDHI0_CMD), GPIO_FN(SDHI0_CLK), | ||
1896 | |||
1897 | /* SDHI1 */ | ||
1898 | GPIO_FN(SDHI1_D0), GPIO_FN(SDHI1_D1), GPIO_FN(SDHI1_D2), | ||
1899 | GPIO_FN(SDHI1_D3), GPIO_FN(SDHI1_CD), GPIO_FN(SDHI1_WP), | ||
1900 | GPIO_FN(SDHI1_CMD), GPIO_FN(SDHI1_CLK), | ||
1901 | |||
1902 | /* SDHI2 */ | ||
1903 | GPIO_FN(SDHI2_D0), GPIO_FN(SDHI2_D1), GPIO_FN(SDHI2_D2), | ||
1904 | GPIO_FN(SDHI2_D3), GPIO_FN(SDHI2_CLK), GPIO_FN(SDHI2_CMD), | ||
1905 | |||
1906 | GPIO_FN(SDHI2_CD_PORT24), /* MSEL5CR_19_0 */ | ||
1907 | GPIO_FN(SDHI2_WP_PORT25), | ||
1908 | |||
1909 | GPIO_FN(SDHI2_WP_PORT177), /* MSEL5CR_19_1 */ | ||
1910 | GPIO_FN(SDHI2_CD_PORT202), | ||
1911 | |||
1912 | /* MSIOF2 */ | ||
1913 | GPIO_FN(MSIOF2_TXD), GPIO_FN(MSIOF2_RXD), GPIO_FN(MSIOF2_TSCK), | ||
1914 | GPIO_FN(MSIOF2_SS2), GPIO_FN(MSIOF2_TSYNC), GPIO_FN(MSIOF2_SS1), | ||
1915 | GPIO_FN(MSIOF2_MCK1), GPIO_FN(MSIOF2_MCK0), GPIO_FN(MSIOF2_RSYNC), | ||
1916 | GPIO_FN(MSIOF2_RSCK), | ||
1917 | |||
1918 | /* KEYSC */ | ||
1919 | GPIO_FN(KEYIN4), GPIO_FN(KEYIN5), | ||
1920 | GPIO_FN(KEYIN6), GPIO_FN(KEYIN7), | ||
1921 | GPIO_FN(KEYOUT0), GPIO_FN(KEYOUT1), GPIO_FN(KEYOUT2), | ||
1922 | GPIO_FN(KEYOUT3), GPIO_FN(KEYOUT4), GPIO_FN(KEYOUT5), | ||
1923 | GPIO_FN(KEYOUT6), GPIO_FN(KEYOUT7), | ||
1924 | |||
1925 | GPIO_FN(KEYIN0_PORT43), /* MSEL4CR_18_0 */ | ||
1926 | GPIO_FN(KEYIN1_PORT44), | ||
1927 | GPIO_FN(KEYIN2_PORT45), | ||
1928 | GPIO_FN(KEYIN3_PORT46), | ||
1929 | |||
1930 | GPIO_FN(KEYIN0_PORT58), /* MSEL4CR_18_1 */ | ||
1931 | GPIO_FN(KEYIN1_PORT57), | ||
1932 | GPIO_FN(KEYIN2_PORT56), | ||
1933 | GPIO_FN(KEYIN3_PORT55), | ||
1934 | |||
1935 | /* VOU */ | ||
1936 | GPIO_FN(DV_D0), GPIO_FN(DV_D1), GPIO_FN(DV_D2), | ||
1937 | GPIO_FN(DV_D3), GPIO_FN(DV_D4), GPIO_FN(DV_D5), | ||
1938 | GPIO_FN(DV_D6), GPIO_FN(DV_D7), GPIO_FN(DV_D8), | ||
1939 | GPIO_FN(DV_D9), GPIO_FN(DV_D10), GPIO_FN(DV_D11), | ||
1940 | GPIO_FN(DV_D12), GPIO_FN(DV_D13), GPIO_FN(DV_D14), | ||
1941 | GPIO_FN(DV_D15), GPIO_FN(DV_CLK), | ||
1942 | GPIO_FN(DV_VSYNC), GPIO_FN(DV_HSYNC), | ||
1943 | |||
1944 | /* MEMC */ | ||
1945 | GPIO_FN(MEMC_AD0), GPIO_FN(MEMC_AD1), GPIO_FN(MEMC_AD2), | ||
1946 | GPIO_FN(MEMC_AD3), GPIO_FN(MEMC_AD4), GPIO_FN(MEMC_AD5), | ||
1947 | GPIO_FN(MEMC_AD6), GPIO_FN(MEMC_AD7), GPIO_FN(MEMC_AD8), | ||
1948 | GPIO_FN(MEMC_AD9), GPIO_FN(MEMC_AD10), GPIO_FN(MEMC_AD11), | ||
1949 | GPIO_FN(MEMC_AD12), GPIO_FN(MEMC_AD13), GPIO_FN(MEMC_AD14), | ||
1950 | GPIO_FN(MEMC_AD15), GPIO_FN(MEMC_CS0), GPIO_FN(MEMC_INT), | ||
1951 | GPIO_FN(MEMC_NWE), GPIO_FN(MEMC_NOE), GPIO_FN(MEMC_CS1), | ||
1952 | GPIO_FN(MEMC_A1), GPIO_FN(MEMC_ADV), GPIO_FN(MEMC_DREQ0), | ||
1953 | GPIO_FN(MEMC_WAIT), GPIO_FN(MEMC_DREQ1), GPIO_FN(MEMC_BUSCLK), | ||
1954 | GPIO_FN(MEMC_A0), | ||
1955 | |||
1956 | /* MMC */ | ||
1957 | GPIO_FN(MMC0_D0_PORT68), GPIO_FN(MMC0_D1_PORT69), | ||
1958 | GPIO_FN(MMC0_D2_PORT70), GPIO_FN(MMC0_D3_PORT71), | ||
1959 | GPIO_FN(MMC0_D4_PORT72), GPIO_FN(MMC0_D5_PORT73), | ||
1960 | GPIO_FN(MMC0_D6_PORT74), GPIO_FN(MMC0_D7_PORT75), | ||
1961 | GPIO_FN(MMC0_CLK_PORT66), | ||
1962 | GPIO_FN(MMC0_CMD_PORT67), /* MSEL4CR_15_0 */ | ||
1963 | |||
1964 | GPIO_FN(MMC1_D0_PORT149), GPIO_FN(MMC1_D1_PORT148), | ||
1965 | GPIO_FN(MMC1_D2_PORT147), GPIO_FN(MMC1_D3_PORT146), | ||
1966 | GPIO_FN(MMC1_D4_PORT145), GPIO_FN(MMC1_D5_PORT144), | ||
1967 | GPIO_FN(MMC1_D6_PORT143), GPIO_FN(MMC1_D7_PORT142), | ||
1968 | GPIO_FN(MMC1_CLK_PORT103), | ||
1969 | GPIO_FN(MMC1_CMD_PORT104), /* MSEL4CR_15_1 */ | ||
1970 | |||
1971 | /* MSIOF0 */ | ||
1972 | GPIO_FN(MSIOF0_SS1), GPIO_FN(MSIOF0_SS2), GPIO_FN(MSIOF0_RXD), | ||
1973 | GPIO_FN(MSIOF0_TXD), GPIO_FN(MSIOF0_MCK0), GPIO_FN(MSIOF0_MCK1), | ||
1974 | GPIO_FN(MSIOF0_RSYNC), GPIO_FN(MSIOF0_RSCK), GPIO_FN(MSIOF0_TSCK), | ||
1975 | GPIO_FN(MSIOF0_TSYNC), | ||
1976 | |||
1977 | /* MSIOF1 */ | ||
1978 | GPIO_FN(MSIOF1_RSCK), GPIO_FN(MSIOF1_RSYNC), | ||
1979 | GPIO_FN(MSIOF1_MCK0), GPIO_FN(MSIOF1_MCK1), | ||
1980 | |||
1981 | GPIO_FN(MSIOF1_SS2_PORT116), GPIO_FN(MSIOF1_SS1_PORT117), | ||
1982 | GPIO_FN(MSIOF1_RXD_PORT118), GPIO_FN(MSIOF1_TXD_PORT119), | ||
1983 | GPIO_FN(MSIOF1_TSYNC_PORT120), | ||
1984 | GPIO_FN(MSIOF1_TSCK_PORT121), /* MSEL4CR_10_0 */ | ||
1985 | |||
1986 | GPIO_FN(MSIOF1_SS1_PORT67), GPIO_FN(MSIOF1_TSCK_PORT72), | ||
1987 | GPIO_FN(MSIOF1_TSYNC_PORT73), GPIO_FN(MSIOF1_TXD_PORT74), | ||
1988 | GPIO_FN(MSIOF1_RXD_PORT75), | ||
1989 | GPIO_FN(MSIOF1_SS2_PORT202), /* MSEL4CR_10_1 */ | ||
1990 | |||
1991 | /* GPIO */ | ||
1992 | GPIO_FN(GPO0), GPIO_FN(GPI0), | ||
1993 | GPIO_FN(GPO1), GPIO_FN(GPI1), | ||
1994 | |||
1995 | /* USB0 */ | ||
1996 | GPIO_FN(USB0_OCI), GPIO_FN(USB0_PPON), GPIO_FN(VBUS), | ||
1997 | |||
1998 | /* USB1 */ | ||
1999 | GPIO_FN(USB1_OCI), GPIO_FN(USB1_PPON), | ||
2000 | |||
2001 | /* BBIF1 */ | ||
2002 | GPIO_FN(BBIF1_RXD), GPIO_FN(BBIF1_TXD), GPIO_FN(BBIF1_TSYNC), | ||
2003 | GPIO_FN(BBIF1_TSCK), GPIO_FN(BBIF1_RSCK), GPIO_FN(BBIF1_RSYNC), | ||
2004 | GPIO_FN(BBIF1_FLOW), GPIO_FN(BBIF1_RX_FLOW_N), | ||
2005 | |||
2006 | /* BBIF2 */ | ||
2007 | GPIO_FN(BBIF2_TXD2_PORT5), /* MSEL5CR_0_0 */ | ||
2008 | GPIO_FN(BBIF2_RXD2_PORT60), | ||
2009 | GPIO_FN(BBIF2_TSYNC2_PORT6), | ||
2010 | GPIO_FN(BBIF2_TSCK2_PORT59), | ||
2011 | |||
2012 | GPIO_FN(BBIF2_RXD2_PORT90), /* MSEL5CR_0_1 */ | ||
2013 | GPIO_FN(BBIF2_TXD2_PORT183), | ||
2014 | GPIO_FN(BBIF2_TSCK2_PORT89), | ||
2015 | GPIO_FN(BBIF2_TSYNC2_PORT184), | ||
2016 | |||
2017 | /* BSC / FLCTL / PCMCIA */ | ||
2018 | GPIO_FN(CS0), GPIO_FN(CS2), GPIO_FN(CS4), | ||
2019 | GPIO_FN(CS5B), GPIO_FN(CS6A), | ||
2020 | GPIO_FN(CS5A_PORT105), /* CS5A PORT 19/105 */ | ||
2021 | GPIO_FN(CS5A_PORT19), | ||
2022 | GPIO_FN(IOIS16), /* ? */ | ||
2023 | |||
2024 | GPIO_FN(A0), GPIO_FN(A1), GPIO_FN(A2), GPIO_FN(A3), | ||
2025 | GPIO_FN(A4_FOE), GPIO_FN(A5_FCDE), /* share with FLCTL */ | ||
2026 | GPIO_FN(A6), GPIO_FN(A7), GPIO_FN(A8), GPIO_FN(A9), | ||
2027 | GPIO_FN(A10), GPIO_FN(A11), GPIO_FN(A12), GPIO_FN(A13), | ||
2028 | GPIO_FN(A14), GPIO_FN(A15), GPIO_FN(A16), GPIO_FN(A17), | ||
2029 | GPIO_FN(A18), GPIO_FN(A19), GPIO_FN(A20), GPIO_FN(A21), | ||
2030 | GPIO_FN(A22), GPIO_FN(A23), GPIO_FN(A24), GPIO_FN(A25), | ||
2031 | GPIO_FN(A26), | ||
2032 | |||
2033 | GPIO_FN(D0_NAF0), GPIO_FN(D1_NAF1), /* share with FLCTL */ | ||
2034 | GPIO_FN(D2_NAF2), GPIO_FN(D3_NAF3), /* share with FLCTL */ | ||
2035 | GPIO_FN(D4_NAF4), GPIO_FN(D5_NAF5), /* share with FLCTL */ | ||
2036 | GPIO_FN(D6_NAF6), GPIO_FN(D7_NAF7), /* share with FLCTL */ | ||
2037 | GPIO_FN(D8_NAF8), GPIO_FN(D9_NAF9), /* share with FLCTL */ | ||
2038 | GPIO_FN(D10_NAF10), GPIO_FN(D11_NAF11), /* share with FLCTL */ | ||
2039 | GPIO_FN(D12_NAF12), GPIO_FN(D13_NAF13), /* share with FLCTL */ | ||
2040 | GPIO_FN(D14_NAF14), GPIO_FN(D15_NAF15), /* share with FLCTL */ | ||
2041 | GPIO_FN(D16), GPIO_FN(D17), GPIO_FN(D18), GPIO_FN(D19), | ||
2042 | GPIO_FN(D20), GPIO_FN(D21), GPIO_FN(D22), GPIO_FN(D23), | ||
2043 | GPIO_FN(D24), GPIO_FN(D25), GPIO_FN(D26), GPIO_FN(D27), | ||
2044 | GPIO_FN(D28), GPIO_FN(D29), GPIO_FN(D30), GPIO_FN(D31), | ||
2045 | |||
2046 | GPIO_FN(WE0_FWE), /* share with FLCTL */ | ||
2047 | GPIO_FN(WE1), | ||
2048 | GPIO_FN(WE2_ICIORD), /* share with PCMCIA */ | ||
2049 | GPIO_FN(WE3_ICIOWR), /* share with PCMCIA */ | ||
2050 | GPIO_FN(CKO), GPIO_FN(BS), GPIO_FN(RDWR), | ||
2051 | GPIO_FN(RD_FSC), /* share with FLCTL */ | ||
2052 | GPIO_FN(WAIT_PORT177), /* WAIT Port 90/177 */ | ||
2053 | GPIO_FN(WAIT_PORT90), | ||
2054 | |||
2055 | GPIO_FN(FCE0), GPIO_FN(FCE1), GPIO_FN(FRB), /* FLCTL */ | ||
2056 | |||
2057 | /* IRDA */ | ||
2058 | GPIO_FN(IRDA_FIRSEL), GPIO_FN(IRDA_IN), GPIO_FN(IRDA_OUT), | ||
2059 | |||
2060 | /* ATAPI */ | ||
2061 | GPIO_FN(IDE_D0), GPIO_FN(IDE_D1), GPIO_FN(IDE_D2), | ||
2062 | GPIO_FN(IDE_D3), GPIO_FN(IDE_D4), GPIO_FN(IDE_D5), | ||
2063 | GPIO_FN(IDE_D6), GPIO_FN(IDE_D7), GPIO_FN(IDE_D8), | ||
2064 | GPIO_FN(IDE_D9), GPIO_FN(IDE_D10), GPIO_FN(IDE_D11), | ||
2065 | GPIO_FN(IDE_D12), GPIO_FN(IDE_D13), GPIO_FN(IDE_D14), | ||
2066 | GPIO_FN(IDE_D15), GPIO_FN(IDE_A0), GPIO_FN(IDE_A1), | ||
2067 | GPIO_FN(IDE_A2), GPIO_FN(IDE_CS0), GPIO_FN(IDE_CS1), | ||
2068 | GPIO_FN(IDE_IOWR), GPIO_FN(IDE_IORD), GPIO_FN(IDE_IORDY), | ||
2069 | GPIO_FN(IDE_INT), GPIO_FN(IDE_RST), GPIO_FN(IDE_DIRECTION), | ||
2070 | GPIO_FN(IDE_EXBUF_ENB), GPIO_FN(IDE_IODACK), GPIO_FN(IDE_IODREQ), | ||
2071 | |||
2072 | /* RMII */ | ||
2073 | GPIO_FN(RMII_CRS_DV), GPIO_FN(RMII_RX_ER), GPIO_FN(RMII_RXD0), | ||
2074 | GPIO_FN(RMII_RXD1), GPIO_FN(RMII_TX_EN), GPIO_FN(RMII_TXD0), | ||
2075 | GPIO_FN(RMII_MDC), GPIO_FN(RMII_TXD1), GPIO_FN(RMII_MDIO), | ||
2076 | GPIO_FN(RMII_REF50CK), GPIO_FN(RMII_REF125CK), /* for GMII */ | ||
2077 | |||
2078 | /* GEther */ | ||
2079 | GPIO_FN(ET_TX_CLK), GPIO_FN(ET_TX_EN), GPIO_FN(ET_ETXD0), | ||
2080 | GPIO_FN(ET_ETXD1), GPIO_FN(ET_ETXD2), GPIO_FN(ET_ETXD3), | ||
2081 | GPIO_FN(ET_ETXD4), GPIO_FN(ET_ETXD5), /* for GEther */ | ||
2082 | GPIO_FN(ET_ETXD6), GPIO_FN(ET_ETXD7), /* for GEther */ | ||
2083 | GPIO_FN(ET_COL), GPIO_FN(ET_TX_ER), GPIO_FN(ET_RX_CLK), | ||
2084 | GPIO_FN(ET_RX_DV), GPIO_FN(ET_ERXD0), GPIO_FN(ET_ERXD1), | ||
2085 | GPIO_FN(ET_ERXD2), GPIO_FN(ET_ERXD3), | ||
2086 | GPIO_FN(ET_ERXD4), GPIO_FN(ET_ERXD5), /* for GEther */ | ||
2087 | GPIO_FN(ET_ERXD6), GPIO_FN(ET_ERXD7), /* for GEther */ | ||
2088 | GPIO_FN(ET_RX_ER), GPIO_FN(ET_CRS), GPIO_FN(ET_MDC), | ||
2089 | GPIO_FN(ET_MDIO), GPIO_FN(ET_LINK), GPIO_FN(ET_PHY_INT), | ||
2090 | GPIO_FN(ET_WOL), GPIO_FN(ET_GTX_CLK), | ||
2091 | |||
2092 | /* DMA0 */ | ||
2093 | GPIO_FN(DREQ0), GPIO_FN(DACK0), | ||
2094 | |||
2095 | /* DMA1 */ | ||
2096 | GPIO_FN(DREQ1), GPIO_FN(DACK1), | ||
2097 | |||
2098 | /* SYSC */ | ||
2099 | GPIO_FN(RESETOUTS), | ||
2100 | |||
2101 | /* IRREM */ | ||
2102 | GPIO_FN(IROUT), | ||
2103 | |||
2104 | /* LCDC */ | ||
2105 | GPIO_FN(LCDC0_SELECT), | ||
2106 | GPIO_FN(LCDC1_SELECT), | ||
2107 | |||
2108 | /* SDENC */ | ||
2109 | GPIO_FN(SDENC_CPG), | ||
2110 | GPIO_FN(SDENC_DV_CLKI), | ||
2111 | |||
2112 | /* HDMI */ | ||
2113 | GPIO_FN(HDMI_HPD), | ||
2114 | GPIO_FN(HDMI_CEC), | ||
2115 | |||
2116 | /* SYSC */ | ||
2117 | GPIO_FN(RESETP_PULLUP), | ||
2118 | GPIO_FN(RESETP_PLAIN), | ||
2119 | |||
2120 | /* DEBUG */ | ||
2121 | GPIO_FN(EDEBGREQ_PULLDOWN), | ||
2122 | GPIO_FN(EDEBGREQ_PULLUP), | ||
2123 | |||
2124 | GPIO_FN(TRACEAUD_FROM_VIO), | ||
2125 | GPIO_FN(TRACEAUD_FROM_LCDC0), | ||
2126 | GPIO_FN(TRACEAUD_FROM_MEMC), | ||
2127 | }; | ||
2128 | |||
2129 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | ||
2130 | PORTCR(0, 0xe6050000), /* PORT0CR */ | ||
2131 | PORTCR(1, 0xe6050001), /* PORT1CR */ | ||
2132 | PORTCR(2, 0xe6050002), /* PORT2CR */ | ||
2133 | PORTCR(3, 0xe6050003), /* PORT3CR */ | ||
2134 | PORTCR(4, 0xe6050004), /* PORT4CR */ | ||
2135 | PORTCR(5, 0xe6050005), /* PORT5CR */ | ||
2136 | PORTCR(6, 0xe6050006), /* PORT6CR */ | ||
2137 | PORTCR(7, 0xe6050007), /* PORT7CR */ | ||
2138 | PORTCR(8, 0xe6050008), /* PORT8CR */ | ||
2139 | PORTCR(9, 0xe6050009), /* PORT9CR */ | ||
2140 | PORTCR(10, 0xe605000a), /* PORT10CR */ | ||
2141 | PORTCR(11, 0xe605000b), /* PORT11CR */ | ||
2142 | PORTCR(12, 0xe605000c), /* PORT12CR */ | ||
2143 | PORTCR(13, 0xe605000d), /* PORT13CR */ | ||
2144 | PORTCR(14, 0xe605000e), /* PORT14CR */ | ||
2145 | PORTCR(15, 0xe605000f), /* PORT15CR */ | ||
2146 | PORTCR(16, 0xe6050010), /* PORT16CR */ | ||
2147 | PORTCR(17, 0xe6050011), /* PORT17CR */ | ||
2148 | PORTCR(18, 0xe6050012), /* PORT18CR */ | ||
2149 | PORTCR(19, 0xe6050013), /* PORT19CR */ | ||
2150 | PORTCR(20, 0xe6050014), /* PORT20CR */ | ||
2151 | PORTCR(21, 0xe6050015), /* PORT21CR */ | ||
2152 | PORTCR(22, 0xe6050016), /* PORT22CR */ | ||
2153 | PORTCR(23, 0xe6050017), /* PORT23CR */ | ||
2154 | PORTCR(24, 0xe6050018), /* PORT24CR */ | ||
2155 | PORTCR(25, 0xe6050019), /* PORT25CR */ | ||
2156 | PORTCR(26, 0xe605001a), /* PORT26CR */ | ||
2157 | PORTCR(27, 0xe605001b), /* PORT27CR */ | ||
2158 | PORTCR(28, 0xe605001c), /* PORT28CR */ | ||
2159 | PORTCR(29, 0xe605001d), /* PORT29CR */ | ||
2160 | PORTCR(30, 0xe605001e), /* PORT30CR */ | ||
2161 | PORTCR(31, 0xe605001f), /* PORT31CR */ | ||
2162 | PORTCR(32, 0xe6050020), /* PORT32CR */ | ||
2163 | PORTCR(33, 0xe6050021), /* PORT33CR */ | ||
2164 | PORTCR(34, 0xe6050022), /* PORT34CR */ | ||
2165 | PORTCR(35, 0xe6050023), /* PORT35CR */ | ||
2166 | PORTCR(36, 0xe6050024), /* PORT36CR */ | ||
2167 | PORTCR(37, 0xe6050025), /* PORT37CR */ | ||
2168 | PORTCR(38, 0xe6050026), /* PORT38CR */ | ||
2169 | PORTCR(39, 0xe6050027), /* PORT39CR */ | ||
2170 | PORTCR(40, 0xe6050028), /* PORT40CR */ | ||
2171 | PORTCR(41, 0xe6050029), /* PORT41CR */ | ||
2172 | PORTCR(42, 0xe605002a), /* PORT42CR */ | ||
2173 | PORTCR(43, 0xe605002b), /* PORT43CR */ | ||
2174 | PORTCR(44, 0xe605002c), /* PORT44CR */ | ||
2175 | PORTCR(45, 0xe605002d), /* PORT45CR */ | ||
2176 | PORTCR(46, 0xe605002e), /* PORT46CR */ | ||
2177 | PORTCR(47, 0xe605002f), /* PORT47CR */ | ||
2178 | PORTCR(48, 0xe6050030), /* PORT48CR */ | ||
2179 | PORTCR(49, 0xe6050031), /* PORT49CR */ | ||
2180 | PORTCR(50, 0xe6050032), /* PORT50CR */ | ||
2181 | PORTCR(51, 0xe6050033), /* PORT51CR */ | ||
2182 | PORTCR(52, 0xe6050034), /* PORT52CR */ | ||
2183 | PORTCR(53, 0xe6050035), /* PORT53CR */ | ||
2184 | PORTCR(54, 0xe6050036), /* PORT54CR */ | ||
2185 | PORTCR(55, 0xe6050037), /* PORT55CR */ | ||
2186 | PORTCR(56, 0xe6050038), /* PORT56CR */ | ||
2187 | PORTCR(57, 0xe6050039), /* PORT57CR */ | ||
2188 | PORTCR(58, 0xe605003a), /* PORT58CR */ | ||
2189 | PORTCR(59, 0xe605003b), /* PORT59CR */ | ||
2190 | PORTCR(60, 0xe605003c), /* PORT60CR */ | ||
2191 | PORTCR(61, 0xe605003d), /* PORT61CR */ | ||
2192 | PORTCR(62, 0xe605003e), /* PORT62CR */ | ||
2193 | PORTCR(63, 0xe605003f), /* PORT63CR */ | ||
2194 | PORTCR(64, 0xe6050040), /* PORT64CR */ | ||
2195 | PORTCR(65, 0xe6050041), /* PORT65CR */ | ||
2196 | PORTCR(66, 0xe6050042), /* PORT66CR */ | ||
2197 | PORTCR(67, 0xe6050043), /* PORT67CR */ | ||
2198 | PORTCR(68, 0xe6050044), /* PORT68CR */ | ||
2199 | PORTCR(69, 0xe6050045), /* PORT69CR */ | ||
2200 | PORTCR(70, 0xe6050046), /* PORT70CR */ | ||
2201 | PORTCR(71, 0xe6050047), /* PORT71CR */ | ||
2202 | PORTCR(72, 0xe6050048), /* PORT72CR */ | ||
2203 | PORTCR(73, 0xe6050049), /* PORT73CR */ | ||
2204 | PORTCR(74, 0xe605004a), /* PORT74CR */ | ||
2205 | PORTCR(75, 0xe605004b), /* PORT75CR */ | ||
2206 | PORTCR(76, 0xe605004c), /* PORT76CR */ | ||
2207 | PORTCR(77, 0xe605004d), /* PORT77CR */ | ||
2208 | PORTCR(78, 0xe605004e), /* PORT78CR */ | ||
2209 | PORTCR(79, 0xe605004f), /* PORT79CR */ | ||
2210 | PORTCR(80, 0xe6050050), /* PORT80CR */ | ||
2211 | PORTCR(81, 0xe6050051), /* PORT81CR */ | ||
2212 | PORTCR(82, 0xe6050052), /* PORT82CR */ | ||
2213 | PORTCR(83, 0xe6050053), /* PORT83CR */ | ||
2214 | |||
2215 | PORTCR(84, 0xe6051054), /* PORT84CR */ | ||
2216 | PORTCR(85, 0xe6051055), /* PORT85CR */ | ||
2217 | PORTCR(86, 0xe6051056), /* PORT86CR */ | ||
2218 | PORTCR(87, 0xe6051057), /* PORT87CR */ | ||
2219 | PORTCR(88, 0xe6051058), /* PORT88CR */ | ||
2220 | PORTCR(89, 0xe6051059), /* PORT89CR */ | ||
2221 | PORTCR(90, 0xe605105a), /* PORT90CR */ | ||
2222 | PORTCR(91, 0xe605105b), /* PORT91CR */ | ||
2223 | PORTCR(92, 0xe605105c), /* PORT92CR */ | ||
2224 | PORTCR(93, 0xe605105d), /* PORT93CR */ | ||
2225 | PORTCR(94, 0xe605105e), /* PORT94CR */ | ||
2226 | PORTCR(95, 0xe605105f), /* PORT95CR */ | ||
2227 | PORTCR(96, 0xe6051060), /* PORT96CR */ | ||
2228 | PORTCR(97, 0xe6051061), /* PORT97CR */ | ||
2229 | PORTCR(98, 0xe6051062), /* PORT98CR */ | ||
2230 | PORTCR(99, 0xe6051063), /* PORT99CR */ | ||
2231 | PORTCR(100, 0xe6051064), /* PORT100CR */ | ||
2232 | PORTCR(101, 0xe6051065), /* PORT101CR */ | ||
2233 | PORTCR(102, 0xe6051066), /* PORT102CR */ | ||
2234 | PORTCR(103, 0xe6051067), /* PORT103CR */ | ||
2235 | PORTCR(104, 0xe6051068), /* PORT104CR */ | ||
2236 | PORTCR(105, 0xe6051069), /* PORT105CR */ | ||
2237 | PORTCR(106, 0xe605106a), /* PORT106CR */ | ||
2238 | PORTCR(107, 0xe605106b), /* PORT107CR */ | ||
2239 | PORTCR(108, 0xe605106c), /* PORT108CR */ | ||
2240 | PORTCR(109, 0xe605106d), /* PORT109CR */ | ||
2241 | PORTCR(110, 0xe605106e), /* PORT110CR */ | ||
2242 | PORTCR(111, 0xe605106f), /* PORT111CR */ | ||
2243 | PORTCR(112, 0xe6051070), /* PORT112CR */ | ||
2244 | PORTCR(113, 0xe6051071), /* PORT113CR */ | ||
2245 | PORTCR(114, 0xe6051072), /* PORT114CR */ | ||
2246 | |||
2247 | PORTCR(115, 0xe6052073), /* PORT115CR */ | ||
2248 | PORTCR(116, 0xe6052074), /* PORT116CR */ | ||
2249 | PORTCR(117, 0xe6052075), /* PORT117CR */ | ||
2250 | PORTCR(118, 0xe6052076), /* PORT118CR */ | ||
2251 | PORTCR(119, 0xe6052077), /* PORT119CR */ | ||
2252 | PORTCR(120, 0xe6052078), /* PORT120CR */ | ||
2253 | PORTCR(121, 0xe6052079), /* PORT121CR */ | ||
2254 | PORTCR(122, 0xe605207a), /* PORT122CR */ | ||
2255 | PORTCR(123, 0xe605207b), /* PORT123CR */ | ||
2256 | PORTCR(124, 0xe605207c), /* PORT124CR */ | ||
2257 | PORTCR(125, 0xe605207d), /* PORT125CR */ | ||
2258 | PORTCR(126, 0xe605207e), /* PORT126CR */ | ||
2259 | PORTCR(127, 0xe605207f), /* PORT127CR */ | ||
2260 | PORTCR(128, 0xe6052080), /* PORT128CR */ | ||
2261 | PORTCR(129, 0xe6052081), /* PORT129CR */ | ||
2262 | PORTCR(130, 0xe6052082), /* PORT130CR */ | ||
2263 | PORTCR(131, 0xe6052083), /* PORT131CR */ | ||
2264 | PORTCR(132, 0xe6052084), /* PORT132CR */ | ||
2265 | PORTCR(133, 0xe6052085), /* PORT133CR */ | ||
2266 | PORTCR(134, 0xe6052086), /* PORT134CR */ | ||
2267 | PORTCR(135, 0xe6052087), /* PORT135CR */ | ||
2268 | PORTCR(136, 0xe6052088), /* PORT136CR */ | ||
2269 | PORTCR(137, 0xe6052089), /* PORT137CR */ | ||
2270 | PORTCR(138, 0xe605208a), /* PORT138CR */ | ||
2271 | PORTCR(139, 0xe605208b), /* PORT139CR */ | ||
2272 | PORTCR(140, 0xe605208c), /* PORT140CR */ | ||
2273 | PORTCR(141, 0xe605208d), /* PORT141CR */ | ||
2274 | PORTCR(142, 0xe605208e), /* PORT142CR */ | ||
2275 | PORTCR(143, 0xe605208f), /* PORT143CR */ | ||
2276 | PORTCR(144, 0xe6052090), /* PORT144CR */ | ||
2277 | PORTCR(145, 0xe6052091), /* PORT145CR */ | ||
2278 | PORTCR(146, 0xe6052092), /* PORT146CR */ | ||
2279 | PORTCR(147, 0xe6052093), /* PORT147CR */ | ||
2280 | PORTCR(148, 0xe6052094), /* PORT148CR */ | ||
2281 | PORTCR(149, 0xe6052095), /* PORT149CR */ | ||
2282 | PORTCR(150, 0xe6052096), /* PORT150CR */ | ||
2283 | PORTCR(151, 0xe6052097), /* PORT151CR */ | ||
2284 | PORTCR(152, 0xe6052098), /* PORT152CR */ | ||
2285 | PORTCR(153, 0xe6052099), /* PORT153CR */ | ||
2286 | PORTCR(154, 0xe605209a), /* PORT154CR */ | ||
2287 | PORTCR(155, 0xe605209b), /* PORT155CR */ | ||
2288 | PORTCR(156, 0xe605209c), /* PORT156CR */ | ||
2289 | PORTCR(157, 0xe605209d), /* PORT157CR */ | ||
2290 | PORTCR(158, 0xe605209e), /* PORT158CR */ | ||
2291 | PORTCR(159, 0xe605209f), /* PORT159CR */ | ||
2292 | PORTCR(160, 0xe60520a0), /* PORT160CR */ | ||
2293 | PORTCR(161, 0xe60520a1), /* PORT161CR */ | ||
2294 | PORTCR(162, 0xe60520a2), /* PORT162CR */ | ||
2295 | PORTCR(163, 0xe60520a3), /* PORT163CR */ | ||
2296 | PORTCR(164, 0xe60520a4), /* PORT164CR */ | ||
2297 | PORTCR(165, 0xe60520a5), /* PORT165CR */ | ||
2298 | PORTCR(166, 0xe60520a6), /* PORT166CR */ | ||
2299 | PORTCR(167, 0xe60520a7), /* PORT167CR */ | ||
2300 | PORTCR(168, 0xe60520a8), /* PORT168CR */ | ||
2301 | PORTCR(169, 0xe60520a9), /* PORT169CR */ | ||
2302 | PORTCR(170, 0xe60520aa), /* PORT170CR */ | ||
2303 | PORTCR(171, 0xe60520ab), /* PORT171CR */ | ||
2304 | PORTCR(172, 0xe60520ac), /* PORT172CR */ | ||
2305 | PORTCR(173, 0xe60520ad), /* PORT173CR */ | ||
2306 | PORTCR(174, 0xe60520ae), /* PORT174CR */ | ||
2307 | PORTCR(175, 0xe60520af), /* PORT175CR */ | ||
2308 | PORTCR(176, 0xe60520b0), /* PORT176CR */ | ||
2309 | PORTCR(177, 0xe60520b1), /* PORT177CR */ | ||
2310 | PORTCR(178, 0xe60520b2), /* PORT178CR */ | ||
2311 | PORTCR(179, 0xe60520b3), /* PORT179CR */ | ||
2312 | PORTCR(180, 0xe60520b4), /* PORT180CR */ | ||
2313 | PORTCR(181, 0xe60520b5), /* PORT181CR */ | ||
2314 | PORTCR(182, 0xe60520b6), /* PORT182CR */ | ||
2315 | PORTCR(183, 0xe60520b7), /* PORT183CR */ | ||
2316 | PORTCR(184, 0xe60520b8), /* PORT184CR */ | ||
2317 | PORTCR(185, 0xe60520b9), /* PORT185CR */ | ||
2318 | PORTCR(186, 0xe60520ba), /* PORT186CR */ | ||
2319 | PORTCR(187, 0xe60520bb), /* PORT187CR */ | ||
2320 | PORTCR(188, 0xe60520bc), /* PORT188CR */ | ||
2321 | PORTCR(189, 0xe60520bd), /* PORT189CR */ | ||
2322 | PORTCR(190, 0xe60520be), /* PORT190CR */ | ||
2323 | PORTCR(191, 0xe60520bf), /* PORT191CR */ | ||
2324 | PORTCR(192, 0xe60520c0), /* PORT192CR */ | ||
2325 | PORTCR(193, 0xe60520c1), /* PORT193CR */ | ||
2326 | PORTCR(194, 0xe60520c2), /* PORT194CR */ | ||
2327 | PORTCR(195, 0xe60520c3), /* PORT195CR */ | ||
2328 | PORTCR(196, 0xe60520c4), /* PORT196CR */ | ||
2329 | PORTCR(197, 0xe60520c5), /* PORT197CR */ | ||
2330 | PORTCR(198, 0xe60520c6), /* PORT198CR */ | ||
2331 | PORTCR(199, 0xe60520c7), /* PORT199CR */ | ||
2332 | PORTCR(200, 0xe60520c8), /* PORT200CR */ | ||
2333 | PORTCR(201, 0xe60520c9), /* PORT201CR */ | ||
2334 | PORTCR(202, 0xe60520ca), /* PORT202CR */ | ||
2335 | PORTCR(203, 0xe60520cb), /* PORT203CR */ | ||
2336 | PORTCR(204, 0xe60520cc), /* PORT204CR */ | ||
2337 | PORTCR(205, 0xe60520cd), /* PORT205CR */ | ||
2338 | PORTCR(206, 0xe60520ce), /* PORT206CR */ | ||
2339 | PORTCR(207, 0xe60520cf), /* PORT207CR */ | ||
2340 | PORTCR(208, 0xe60520d0), /* PORT208CR */ | ||
2341 | PORTCR(209, 0xe60520d1), /* PORT209CR */ | ||
2342 | |||
2343 | PORTCR(210, 0xe60530d2), /* PORT210CR */ | ||
2344 | PORTCR(211, 0xe60530d3), /* PORT211CR */ | ||
2345 | |||
2346 | { PINMUX_CFG_REG("MSEL1CR", 0xe605800c, 32, 1) { | ||
2347 | MSEL1CR_31_0, MSEL1CR_31_1, | ||
2348 | MSEL1CR_30_0, MSEL1CR_30_1, | ||
2349 | MSEL1CR_29_0, MSEL1CR_29_1, | ||
2350 | MSEL1CR_28_0, MSEL1CR_28_1, | ||
2351 | MSEL1CR_27_0, MSEL1CR_27_1, | ||
2352 | MSEL1CR_26_0, MSEL1CR_26_1, | ||
2353 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
2354 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2355 | MSEL1CR_16_0, MSEL1CR_16_1, | ||
2356 | MSEL1CR_15_0, MSEL1CR_15_1, | ||
2357 | MSEL1CR_14_0, MSEL1CR_14_1, | ||
2358 | MSEL1CR_13_0, MSEL1CR_13_1, | ||
2359 | MSEL1CR_12_0, MSEL1CR_12_1, | ||
2360 | 0, 0, 0, 0, | ||
2361 | MSEL1CR_9_0, MSEL1CR_9_1, | ||
2362 | 0, 0, | ||
2363 | MSEL1CR_7_0, MSEL1CR_7_1, | ||
2364 | MSEL1CR_6_0, MSEL1CR_6_1, | ||
2365 | MSEL1CR_5_0, MSEL1CR_5_1, | ||
2366 | MSEL1CR_4_0, MSEL1CR_4_1, | ||
2367 | MSEL1CR_3_0, MSEL1CR_3_1, | ||
2368 | MSEL1CR_2_0, MSEL1CR_2_1, | ||
2369 | 0, 0, | ||
2370 | MSEL1CR_0_0, MSEL1CR_0_1, | ||
2371 | } | ||
2372 | }, | ||
2373 | { PINMUX_CFG_REG("MSEL3CR", 0xE6058020, 32, 1) { | ||
2374 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2375 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2376 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2377 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2378 | MSEL3CR_15_0, MSEL3CR_15_1, | ||
2379 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2380 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2381 | MSEL3CR_6_0, MSEL3CR_6_1, | ||
2382 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2383 | 0, 0, 0, 0, | ||
2384 | } | ||
2385 | }, | ||
2386 | { PINMUX_CFG_REG("MSEL4CR", 0xE6058024, 32, 1) { | ||
2387 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2388 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2389 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2390 | MSEL4CR_19_0, MSEL4CR_19_1, | ||
2391 | MSEL4CR_18_0, MSEL4CR_18_1, | ||
2392 | 0, 0, 0, 0, | ||
2393 | MSEL4CR_15_0, MSEL4CR_15_1, | ||
2394 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2395 | MSEL4CR_10_0, MSEL4CR_10_1, | ||
2396 | 0, 0, 0, 0, 0, 0, | ||
2397 | MSEL4CR_6_0, MSEL4CR_6_1, | ||
2398 | 0, 0, | ||
2399 | MSEL4CR_4_0, MSEL4CR_4_1, | ||
2400 | 0, 0, 0, 0, | ||
2401 | MSEL4CR_1_0, MSEL4CR_1_1, | ||
2402 | 0, 0, | ||
2403 | } | ||
2404 | }, | ||
2405 | { PINMUX_CFG_REG("MSEL5CR", 0xE6058028, 32, 1) { | ||
2406 | MSEL5CR_31_0, MSEL5CR_31_1, | ||
2407 | MSEL5CR_30_0, MSEL5CR_30_1, | ||
2408 | MSEL5CR_29_0, MSEL5CR_29_1, | ||
2409 | 0, 0, | ||
2410 | MSEL5CR_27_0, MSEL5CR_27_1, | ||
2411 | 0, 0, | ||
2412 | MSEL5CR_25_0, MSEL5CR_25_1, | ||
2413 | 0, 0, | ||
2414 | MSEL5CR_23_0, MSEL5CR_23_1, | ||
2415 | 0, 0, | ||
2416 | MSEL5CR_21_0, MSEL5CR_21_1, | ||
2417 | 0, 0, | ||
2418 | MSEL5CR_19_0, MSEL5CR_19_1, | ||
2419 | 0, 0, | ||
2420 | MSEL5CR_17_0, MSEL5CR_17_1, | ||
2421 | 0, 0, | ||
2422 | MSEL5CR_15_0, MSEL5CR_15_1, | ||
2423 | MSEL5CR_14_0, MSEL5CR_14_1, | ||
2424 | MSEL5CR_13_0, MSEL5CR_13_1, | ||
2425 | MSEL5CR_12_0, MSEL5CR_12_1, | ||
2426 | MSEL5CR_11_0, MSEL5CR_11_1, | ||
2427 | MSEL5CR_10_0, MSEL5CR_10_1, | ||
2428 | 0, 0, | ||
2429 | MSEL5CR_8_0, MSEL5CR_8_1, | ||
2430 | MSEL5CR_7_0, MSEL5CR_7_1, | ||
2431 | MSEL5CR_6_0, MSEL5CR_6_1, | ||
2432 | MSEL5CR_5_0, MSEL5CR_5_1, | ||
2433 | MSEL5CR_4_0, MSEL5CR_4_1, | ||
2434 | MSEL5CR_3_0, MSEL5CR_3_1, | ||
2435 | MSEL5CR_2_0, MSEL5CR_2_1, | ||
2436 | 0, 0, | ||
2437 | MSEL5CR_0_0, MSEL5CR_0_1, | ||
2438 | } | ||
2439 | }, | ||
2440 | { }, | ||
2441 | }; | ||
2442 | |||
2443 | static struct pinmux_data_reg pinmux_data_regs[] = { | ||
2444 | { PINMUX_DATA_REG("PORTL031_000DR", 0xe6054800, 32) { | ||
2445 | PORT31_DATA, PORT30_DATA, PORT29_DATA, PORT28_DATA, | ||
2446 | PORT27_DATA, PORT26_DATA, PORT25_DATA, PORT24_DATA, | ||
2447 | PORT23_DATA, PORT22_DATA, PORT21_DATA, PORT20_DATA, | ||
2448 | PORT19_DATA, PORT18_DATA, PORT17_DATA, PORT16_DATA, | ||
2449 | PORT15_DATA, PORT14_DATA, PORT13_DATA, PORT12_DATA, | ||
2450 | PORT11_DATA, PORT10_DATA, PORT9_DATA, PORT8_DATA, | ||
2451 | PORT7_DATA, PORT6_DATA, PORT5_DATA, PORT4_DATA, | ||
2452 | PORT3_DATA, PORT2_DATA, PORT1_DATA, PORT0_DATA } | ||
2453 | }, | ||
2454 | { PINMUX_DATA_REG("PORTL063_032DR", 0xe6054804, 32) { | ||
2455 | PORT63_DATA, PORT62_DATA, PORT61_DATA, PORT60_DATA, | ||
2456 | PORT59_DATA, PORT58_DATA, PORT57_DATA, PORT56_DATA, | ||
2457 | PORT55_DATA, PORT54_DATA, PORT53_DATA, PORT52_DATA, | ||
2458 | PORT51_DATA, PORT50_DATA, PORT49_DATA, PORT48_DATA, | ||
2459 | PORT47_DATA, PORT46_DATA, PORT45_DATA, PORT44_DATA, | ||
2460 | PORT43_DATA, PORT42_DATA, PORT41_DATA, PORT40_DATA, | ||
2461 | PORT39_DATA, PORT38_DATA, PORT37_DATA, PORT36_DATA, | ||
2462 | PORT35_DATA, PORT34_DATA, PORT33_DATA, PORT32_DATA } | ||
2463 | }, | ||
2464 | { PINMUX_DATA_REG("PORTL095_064DR", 0xe6054808, 32) { | ||
2465 | 0, 0, 0, 0, | ||
2466 | 0, 0, 0, 0, | ||
2467 | 0, 0, 0, 0, | ||
2468 | PORT83_DATA, PORT82_DATA, PORT81_DATA, PORT80_DATA, | ||
2469 | PORT79_DATA, PORT78_DATA, PORT77_DATA, PORT76_DATA, | ||
2470 | PORT75_DATA, PORT74_DATA, PORT73_DATA, PORT72_DATA, | ||
2471 | PORT71_DATA, PORT70_DATA, PORT69_DATA, PORT68_DATA, | ||
2472 | PORT67_DATA, PORT66_DATA, PORT65_DATA, PORT64_DATA } | ||
2473 | }, | ||
2474 | { PINMUX_DATA_REG("PORTD095_064DR", 0xe6055808, 32) { | ||
2475 | PORT95_DATA, PORT94_DATA, PORT93_DATA, PORT92_DATA, | ||
2476 | PORT91_DATA, PORT90_DATA, PORT89_DATA, PORT88_DATA, | ||
2477 | PORT87_DATA, PORT86_DATA, PORT85_DATA, PORT84_DATA, | ||
2478 | 0, 0, 0, 0, | ||
2479 | 0, 0, 0, 0, | ||
2480 | 0, 0, 0, 0, | ||
2481 | 0, 0, 0, 0, | ||
2482 | 0, 0, 0, 0 } | ||
2483 | }, | ||
2484 | { PINMUX_DATA_REG("PORTD127_096DR", 0xe605580c, 32) { | ||
2485 | 0, 0, 0, 0, | ||
2486 | 0, 0, 0, 0, | ||
2487 | 0, 0, 0, 0, | ||
2488 | 0, PORT114_DATA, PORT113_DATA, PORT112_DATA, | ||
2489 | PORT111_DATA, PORT110_DATA, PORT109_DATA, PORT108_DATA, | ||
2490 | PORT107_DATA, PORT106_DATA, PORT105_DATA, PORT104_DATA, | ||
2491 | PORT103_DATA, PORT102_DATA, PORT101_DATA, PORT100_DATA, | ||
2492 | PORT99_DATA, PORT98_DATA, PORT97_DATA, PORT96_DATA } | ||
2493 | }, | ||
2494 | { PINMUX_DATA_REG("PORTR127_096DR", 0xe605680C, 32) { | ||
2495 | PORT127_DATA, PORT126_DATA, PORT125_DATA, PORT124_DATA, | ||
2496 | PORT123_DATA, PORT122_DATA, PORT121_DATA, PORT120_DATA, | ||
2497 | PORT119_DATA, PORT118_DATA, PORT117_DATA, PORT116_DATA, | ||
2498 | PORT115_DATA, 0, 0, 0, | ||
2499 | 0, 0, 0, 0, | ||
2500 | 0, 0, 0, 0, | ||
2501 | 0, 0, 0, 0, | ||
2502 | 0, 0, 0, 0 } | ||
2503 | }, | ||
2504 | { PINMUX_DATA_REG("PORTR159_128DR", 0xe6056810, 32) { | ||
2505 | PORT159_DATA, PORT158_DATA, PORT157_DATA, PORT156_DATA, | ||
2506 | PORT155_DATA, PORT154_DATA, PORT153_DATA, PORT152_DATA, | ||
2507 | PORT151_DATA, PORT150_DATA, PORT149_DATA, PORT148_DATA, | ||
2508 | PORT147_DATA, PORT146_DATA, PORT145_DATA, PORT144_DATA, | ||
2509 | PORT143_DATA, PORT142_DATA, PORT141_DATA, PORT140_DATA, | ||
2510 | PORT139_DATA, PORT138_DATA, PORT137_DATA, PORT136_DATA, | ||
2511 | PORT135_DATA, PORT134_DATA, PORT133_DATA, PORT132_DATA, | ||
2512 | PORT131_DATA, PORT130_DATA, PORT129_DATA, PORT128_DATA } | ||
2513 | }, | ||
2514 | { PINMUX_DATA_REG("PORTR191_160DR", 0xe6056814, 32) { | ||
2515 | PORT191_DATA, PORT190_DATA, PORT189_DATA, PORT188_DATA, | ||
2516 | PORT187_DATA, PORT186_DATA, PORT185_DATA, PORT184_DATA, | ||
2517 | PORT183_DATA, PORT182_DATA, PORT181_DATA, PORT180_DATA, | ||
2518 | PORT179_DATA, PORT178_DATA, PORT177_DATA, PORT176_DATA, | ||
2519 | PORT175_DATA, PORT174_DATA, PORT173_DATA, PORT172_DATA, | ||
2520 | PORT171_DATA, PORT170_DATA, PORT169_DATA, PORT168_DATA, | ||
2521 | PORT167_DATA, PORT166_DATA, PORT165_DATA, PORT164_DATA, | ||
2522 | PORT163_DATA, PORT162_DATA, PORT161_DATA, PORT160_DATA } | ||
2523 | }, | ||
2524 | { PINMUX_DATA_REG("PORTR223_192DR", 0xe6056818, 32) { | ||
2525 | 0, 0, 0, 0, | ||
2526 | 0, 0, 0, 0, | ||
2527 | 0, 0, 0, 0, | ||
2528 | 0, 0, PORT209_DATA, PORT208_DATA, | ||
2529 | PORT207_DATA, PORT206_DATA, PORT205_DATA, PORT204_DATA, | ||
2530 | PORT203_DATA, PORT202_DATA, PORT201_DATA, PORT200_DATA, | ||
2531 | PORT199_DATA, PORT198_DATA, PORT197_DATA, PORT196_DATA, | ||
2532 | PORT195_DATA, PORT194_DATA, PORT193_DATA, PORT192_DATA } | ||
2533 | }, | ||
2534 | { PINMUX_DATA_REG("PORTU223_192DR", 0xe6057818, 32) { | ||
2535 | 0, 0, 0, 0, | ||
2536 | 0, 0, 0, 0, | ||
2537 | 0, 0, 0, 0, | ||
2538 | PORT211_DATA, PORT210_DATA, 0, 0, | ||
2539 | 0, 0, 0, 0, | ||
2540 | 0, 0, 0, 0, | ||
2541 | 0, 0, 0, 0, | ||
2542 | 0, 0, 0, 0 } | ||
2543 | }, | ||
2544 | { }, | ||
2545 | }; | ||
2546 | |||
2547 | static struct pinmux_irq pinmux_irqs[] = { | ||
2548 | PINMUX_IRQ(evt2irq(0x0200), PORT2_FN0, PORT13_FN0), /* IRQ0A */ | ||
2549 | PINMUX_IRQ(evt2irq(0x0220), PORT20_FN0), /* IRQ1A */ | ||
2550 | PINMUX_IRQ(evt2irq(0x0240), PORT11_FN0, PORT12_FN0), /* IRQ2A */ | ||
2551 | PINMUX_IRQ(evt2irq(0x0260), PORT10_FN0, PORT14_FN0), /* IRQ3A */ | ||
2552 | PINMUX_IRQ(evt2irq(0x0280), PORT15_FN0, PORT172_FN0), /* IRQ4A */ | ||
2553 | PINMUX_IRQ(evt2irq(0x02A0), PORT0_FN0, PORT1_FN0), /* IRQ5A */ | ||
2554 | PINMUX_IRQ(evt2irq(0x02C0), PORT121_FN0, PORT173_FN0), /* IRQ6A */ | ||
2555 | PINMUX_IRQ(evt2irq(0x02E0), PORT120_FN0, PORT209_FN0), /* IRQ7A */ | ||
2556 | PINMUX_IRQ(evt2irq(0x0300), PORT119_FN0), /* IRQ8A */ | ||
2557 | PINMUX_IRQ(evt2irq(0x0320), PORT118_FN0, PORT210_FN0), /* IRQ9A */ | ||
2558 | PINMUX_IRQ(evt2irq(0x0340), PORT19_FN0), /* IRQ10A */ | ||
2559 | PINMUX_IRQ(evt2irq(0x0360), PORT104_FN0), /* IRQ11A */ | ||
2560 | PINMUX_IRQ(evt2irq(0x0380), PORT42_FN0, PORT97_FN0), /* IRQ12A */ | ||
2561 | PINMUX_IRQ(evt2irq(0x03A0), PORT64_FN0, PORT98_FN0), /* IRQ13A */ | ||
2562 | PINMUX_IRQ(evt2irq(0x03C0), PORT63_FN0, PORT99_FN0), /* IRQ14A */ | ||
2563 | PINMUX_IRQ(evt2irq(0x03E0), PORT62_FN0, PORT100_FN0), /* IRQ15A */ | ||
2564 | PINMUX_IRQ(evt2irq(0x3200), PORT68_FN0, PORT211_FN0), /* IRQ16A */ | ||
2565 | PINMUX_IRQ(evt2irq(0x3220), PORT69_FN0), /* IRQ17A */ | ||
2566 | PINMUX_IRQ(evt2irq(0x3240), PORT70_FN0), /* IRQ18A */ | ||
2567 | PINMUX_IRQ(evt2irq(0x3260), PORT71_FN0), /* IRQ19A */ | ||
2568 | PINMUX_IRQ(evt2irq(0x3280), PORT67_FN0), /* IRQ20A */ | ||
2569 | PINMUX_IRQ(evt2irq(0x32A0), PORT202_FN0), /* IRQ21A */ | ||
2570 | PINMUX_IRQ(evt2irq(0x32C0), PORT95_FN0), /* IRQ22A */ | ||
2571 | PINMUX_IRQ(evt2irq(0x32E0), PORT96_FN0), /* IRQ23A */ | ||
2572 | PINMUX_IRQ(evt2irq(0x3300), PORT180_FN0), /* IRQ24A */ | ||
2573 | PINMUX_IRQ(evt2irq(0x3320), PORT38_FN0), /* IRQ25A */ | ||
2574 | PINMUX_IRQ(evt2irq(0x3340), PORT58_FN0, PORT81_FN0), /* IRQ26A */ | ||
2575 | PINMUX_IRQ(evt2irq(0x3360), PORT57_FN0, PORT168_FN0), /* IRQ27A */ | ||
2576 | PINMUX_IRQ(evt2irq(0x3380), PORT56_FN0, PORT169_FN0), /* IRQ28A */ | ||
2577 | PINMUX_IRQ(evt2irq(0x33A0), PORT50_FN0, PORT170_FN0), /* IRQ29A */ | ||
2578 | PINMUX_IRQ(evt2irq(0x33C0), PORT49_FN0, PORT171_FN0), /* IRQ30A */ | ||
2579 | PINMUX_IRQ(evt2irq(0x33E0), PORT41_FN0, PORT167_FN0), /* IRQ31A */ | ||
2580 | }; | ||
2581 | |||
2582 | static struct pinmux_info r8a7740_pinmux_info = { | ||
2583 | .name = "r8a7740_pfc", | ||
2584 | .reserved_id = PINMUX_RESERVED, | ||
2585 | .data = { PINMUX_DATA_BEGIN, | ||
2586 | PINMUX_DATA_END }, | ||
2587 | .input = { PINMUX_INPUT_BEGIN, | ||
2588 | PINMUX_INPUT_END }, | ||
2589 | .input_pu = { PINMUX_INPUT_PULLUP_BEGIN, | ||
2590 | PINMUX_INPUT_PULLUP_END }, | ||
2591 | .input_pd = { PINMUX_INPUT_PULLDOWN_BEGIN, | ||
2592 | PINMUX_INPUT_PULLDOWN_END }, | ||
2593 | .output = { PINMUX_OUTPUT_BEGIN, | ||
2594 | PINMUX_OUTPUT_END }, | ||
2595 | .mark = { PINMUX_MARK_BEGIN, | ||
2596 | PINMUX_MARK_END }, | ||
2597 | .function = { PINMUX_FUNCTION_BEGIN, | ||
2598 | PINMUX_FUNCTION_END }, | ||
2599 | |||
2600 | .first_gpio = GPIO_PORT0, | ||
2601 | .last_gpio = GPIO_FN_TRACEAUD_FROM_MEMC, | ||
2602 | |||
2603 | .gpios = pinmux_gpios, | ||
2604 | .cfg_regs = pinmux_config_regs, | ||
2605 | .data_regs = pinmux_data_regs, | ||
2606 | |||
2607 | .gpio_data = pinmux_data, | ||
2608 | .gpio_data_size = ARRAY_SIZE(pinmux_data), | ||
2609 | |||
2610 | .gpio_irq = pinmux_irqs, | ||
2611 | .gpio_irq_size = ARRAY_SIZE(pinmux_irqs), | ||
2612 | }; | ||
2613 | |||
2614 | void r8a7740_pinmux_init(void) | ||
2615 | { | ||
2616 | register_pinmux(&r8a7740_pinmux_info); | ||
2617 | } | ||
diff --git a/arch/arm/mach-shmobile/pfc-r8a7779.c b/arch/arm/mach-shmobile/pfc-r8a7779.c deleted file mode 100644 index 9513234d322b..000000000000 --- a/arch/arm/mach-shmobile/pfc-r8a7779.c +++ /dev/null | |||
@@ -1,2645 +0,0 @@ | |||
1 | /* | ||
2 | * r8a7779 processor support - PFC hardware block | ||
3 | * | ||
4 | * Copyright (C) 2011 Renesas Solutions Corp. | ||
5 | * Copyright (C) 2011 Magnus Damm | ||
6 | * | ||
7 | * 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 | * the Free Software Foundation; version 2 of the License. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
19 | */ | ||
20 | #include <linux/init.h> | ||
21 | #include <linux/kernel.h> | ||
22 | #include <linux/sh_pfc.h> | ||
23 | #include <linux/ioport.h> | ||
24 | #include <mach/r8a7779.h> | ||
25 | |||
26 | #define CPU_32_PORT(fn, pfx, sfx) \ | ||
27 | PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ | ||
28 | PORT_10(fn, pfx##2, sfx), PORT_1(fn, pfx##30, sfx), \ | ||
29 | PORT_1(fn, pfx##31, sfx) | ||
30 | |||
31 | #define CPU_32_PORT6(fn, pfx, sfx) \ | ||
32 | PORT_1(fn, pfx##0, sfx), PORT_1(fn, pfx##1, sfx), \ | ||
33 | PORT_1(fn, pfx##2, sfx), PORT_1(fn, pfx##3, sfx), \ | ||
34 | PORT_1(fn, pfx##4, sfx), PORT_1(fn, pfx##5, sfx), \ | ||
35 | PORT_1(fn, pfx##6, sfx), PORT_1(fn, pfx##7, sfx), \ | ||
36 | PORT_1(fn, pfx##8, sfx) | ||
37 | |||
38 | #define CPU_ALL_PORT(fn, pfx, sfx) \ | ||
39 | CPU_32_PORT(fn, pfx##_0_, sfx), \ | ||
40 | CPU_32_PORT(fn, pfx##_1_, sfx), \ | ||
41 | CPU_32_PORT(fn, pfx##_2_, sfx), \ | ||
42 | CPU_32_PORT(fn, pfx##_3_, sfx), \ | ||
43 | CPU_32_PORT(fn, pfx##_4_, sfx), \ | ||
44 | CPU_32_PORT(fn, pfx##_5_, sfx), \ | ||
45 | CPU_32_PORT6(fn, pfx##_6_, sfx) | ||
46 | |||
47 | #define _GP_GPIO(pfx, sfx) PINMUX_GPIO(GPIO_GP##pfx, GP##pfx##_DATA) | ||
48 | #define _GP_DATA(pfx, sfx) PINMUX_DATA(GP##pfx##_DATA, GP##pfx##_FN, \ | ||
49 | GP##pfx##_IN, GP##pfx##_OUT) | ||
50 | |||
51 | #define _GP_INOUTSEL(pfx, sfx) GP##pfx##_IN, GP##pfx##_OUT | ||
52 | #define _GP_INDT(pfx, sfx) GP##pfx##_DATA | ||
53 | |||
54 | #define GP_ALL(str) CPU_ALL_PORT(_PORT_ALL, GP, str) | ||
55 | #define PINMUX_GPIO_GP_ALL() CPU_ALL_PORT(_GP_GPIO, , unused) | ||
56 | #define PINMUX_DATA_GP_ALL() CPU_ALL_PORT(_GP_DATA, , unused) | ||
57 | |||
58 | |||
59 | #define PORT_10_REV(fn, pfx, sfx) \ | ||
60 | PORT_1(fn, pfx##9, sfx), PORT_1(fn, pfx##8, sfx), \ | ||
61 | PORT_1(fn, pfx##7, sfx), PORT_1(fn, pfx##6, sfx), \ | ||
62 | PORT_1(fn, pfx##5, sfx), PORT_1(fn, pfx##4, sfx), \ | ||
63 | PORT_1(fn, pfx##3, sfx), PORT_1(fn, pfx##2, sfx), \ | ||
64 | PORT_1(fn, pfx##1, sfx), PORT_1(fn, pfx##0, sfx) | ||
65 | |||
66 | #define CPU_32_PORT_REV(fn, pfx, sfx) \ | ||
67 | PORT_1(fn, pfx##31, sfx), PORT_1(fn, pfx##30, sfx), \ | ||
68 | PORT_10_REV(fn, pfx##2, sfx), PORT_10_REV(fn, pfx##1, sfx), \ | ||
69 | PORT_10_REV(fn, pfx, sfx) | ||
70 | |||
71 | #define GP_INOUTSEL(bank) CPU_32_PORT_REV(_GP_INOUTSEL, _##bank##_, unused) | ||
72 | #define GP_INDT(bank) CPU_32_PORT_REV(_GP_INDT, _##bank##_, unused) | ||
73 | |||
74 | #define PINMUX_IPSR_DATA(ipsr, fn) PINMUX_DATA(fn##_MARK, FN_##ipsr, FN_##fn) | ||
75 | #define PINMUX_IPSR_MODSEL_DATA(ipsr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##ms, \ | ||
76 | FN_##ipsr, FN_##fn) | ||
77 | |||
78 | enum { | ||
79 | PINMUX_RESERVED = 0, | ||
80 | |||
81 | PINMUX_DATA_BEGIN, | ||
82 | GP_ALL(DATA), /* GP_0_0_DATA -> GP_6_8_DATA */ | ||
83 | PINMUX_DATA_END, | ||
84 | |||
85 | PINMUX_INPUT_BEGIN, | ||
86 | GP_ALL(IN), /* GP_0_0_IN -> GP_6_8_IN */ | ||
87 | PINMUX_INPUT_END, | ||
88 | |||
89 | PINMUX_OUTPUT_BEGIN, | ||
90 | GP_ALL(OUT), /* GP_0_0_OUT -> GP_6_8_OUT */ | ||
91 | PINMUX_OUTPUT_END, | ||
92 | |||
93 | PINMUX_FUNCTION_BEGIN, | ||
94 | GP_ALL(FN), /* GP_0_0_FN -> GP_6_8_FN */ | ||
95 | |||
96 | /* GPSR0 */ | ||
97 | FN_AVS1, FN_AVS2, FN_IP0_7_6, FN_A17, | ||
98 | FN_A18, FN_A19, FN_IP0_9_8, FN_IP0_11_10, | ||
99 | FN_IP0_13_12, FN_IP0_15_14, FN_IP0_18_16, FN_IP0_22_19, | ||
100 | FN_IP0_24_23, FN_IP0_25, FN_IP0_27_26, FN_IP1_1_0, | ||
101 | FN_IP1_3_2, FN_IP1_6_4, FN_IP1_10_7, FN_IP1_14_11, | ||
102 | FN_IP1_18_15, FN_IP0_5_3, FN_IP0_30_28, FN_IP2_18_16, | ||
103 | FN_IP2_21_19, FN_IP2_30_28, FN_IP3_2_0, FN_IP3_11_9, | ||
104 | FN_IP3_14_12, FN_IP3_22_21, FN_IP3_26_24, FN_IP3_31_29, | ||
105 | |||
106 | /* GPSR1 */ | ||
107 | FN_IP4_1_0, FN_IP4_4_2, FN_IP4_7_5, FN_IP4_10_8, | ||
108 | FN_IP4_11, FN_IP4_12, FN_IP4_13, FN_IP4_14, | ||
109 | FN_IP4_15, FN_IP4_16, FN_IP4_19_17, FN_IP4_22_20, | ||
110 | FN_IP4_23, FN_IP4_24, FN_IP4_25, FN_IP4_26, | ||
111 | FN_IP4_27, FN_IP4_28, FN_IP4_31_29, FN_IP5_2_0, | ||
112 | FN_IP5_3, FN_IP5_4, FN_IP5_5, FN_IP5_6, | ||
113 | FN_IP5_7, FN_IP5_8, FN_IP5_10_9, FN_IP5_12_11, | ||
114 | FN_IP5_14_13, FN_IP5_16_15, FN_IP5_20_17, FN_IP5_23_21, | ||
115 | |||
116 | /* GPSR2 */ | ||
117 | FN_IP5_27_24, FN_IP8_20, FN_IP8_22_21, FN_IP8_24_23, | ||
118 | FN_IP8_27_25, FN_IP8_30_28, FN_IP9_1_0, FN_IP9_3_2, | ||
119 | FN_IP9_4, FN_IP9_5, FN_IP9_6, FN_IP9_7, | ||
120 | FN_IP9_9_8, FN_IP9_11_10, FN_IP9_13_12, FN_IP9_15_14, | ||
121 | FN_IP9_18_16, FN_IP9_21_19, FN_IP9_23_22, FN_IP9_25_24, | ||
122 | FN_IP9_27_26, FN_IP9_29_28, FN_IP10_2_0, FN_IP10_5_3, | ||
123 | FN_IP10_8_6, FN_IP10_11_9, FN_IP10_14_12, FN_IP10_17_15, | ||
124 | FN_IP10_20_18, FN_IP10_23_21, FN_IP10_25_24, FN_IP10_28_26, | ||
125 | |||
126 | /* GPSR3 */ | ||
127 | FN_IP10_31_29, FN_IP11_2_0, FN_IP11_5_3, FN_IP11_8_6, | ||
128 | FN_IP11_11_9, FN_IP11_14_12, FN_IP11_17_15, FN_IP11_20_18, | ||
129 | FN_IP11_23_21, FN_IP11_26_24, FN_IP11_29_27, FN_IP12_2_0, | ||
130 | FN_IP12_5_3, FN_IP12_8_6, FN_IP12_11_9, FN_IP12_14_12, | ||
131 | FN_IP12_17_15, FN_IP7_16_15, FN_IP7_18_17, FN_IP7_28_27, | ||
132 | FN_IP7_30_29, FN_IP7_20_19, FN_IP7_22_21, FN_IP7_24_23, | ||
133 | FN_IP7_26_25, FN_IP1_20_19, FN_IP1_22_21, FN_IP1_24_23, | ||
134 | FN_IP5_28, FN_IP5_30_29, FN_IP6_1_0, FN_IP6_3_2, | ||
135 | |||
136 | /* GPSR4 */ | ||
137 | FN_IP6_5_4, FN_IP6_7_6, FN_IP6_8, FN_IP6_11_9, | ||
138 | FN_IP6_14_12, FN_IP6_17_15, FN_IP6_19_18, FN_IP6_22_20, | ||
139 | FN_IP6_24_23, FN_IP6_26_25, FN_IP6_30_29, FN_IP7_1_0, | ||
140 | FN_IP7_3_2, FN_IP7_6_4, FN_IP7_9_7, FN_IP7_12_10, | ||
141 | FN_IP7_14_13, FN_IP2_7_4, FN_IP2_11_8, FN_IP2_15_12, | ||
142 | FN_IP1_28_25, FN_IP2_3_0, FN_IP8_3_0, FN_IP8_7_4, | ||
143 | FN_IP8_11_8, FN_IP8_15_12, FN_USB_PENC0, FN_USB_PENC1, | ||
144 | FN_IP0_2_0, FN_IP8_17_16, FN_IP8_18, FN_IP8_19, | ||
145 | |||
146 | /* GPSR5 */ | ||
147 | FN_A1, FN_A2, FN_A3, FN_A4, | ||
148 | FN_A5, FN_A6, FN_A7, FN_A8, | ||
149 | FN_A9, FN_A10, FN_A11, FN_A12, | ||
150 | FN_A13, FN_A14, FN_A15, FN_A16, | ||
151 | FN_RD, FN_WE0, FN_WE1, FN_EX_WAIT0, | ||
152 | FN_IP3_23, FN_IP3_27, FN_IP3_28, FN_IP2_22, | ||
153 | FN_IP2_23, FN_IP2_24, FN_IP2_25, FN_IP2_26, | ||
154 | FN_IP2_27, FN_IP3_3, FN_IP3_4, FN_IP3_5, | ||
155 | |||
156 | /* GPSR6 */ | ||
157 | FN_IP3_6, FN_IP3_7, FN_IP3_8, FN_IP3_15, | ||
158 | FN_IP3_16, FN_IP3_17, FN_IP3_18, FN_IP3_19, | ||
159 | FN_IP3_20, | ||
160 | |||
161 | /* IPSR0 */ | ||
162 | FN_RD_WR, FN_FWE, FN_ATAG0, FN_VI1_R7, | ||
163 | FN_HRTS1, FN_RX4_C, | ||
164 | FN_CS1_A26, FN_HSPI_TX2, FN_SDSELF_B, | ||
165 | FN_CS0, FN_HSPI_CS2_B, | ||
166 | FN_CLKOUT, FN_TX3C_IRDA_TX_C, FN_PWM0_B, | ||
167 | FN_A25, FN_SD1_WP, FN_MMC0_D5, FN_FD5, | ||
168 | FN_HSPI_RX2, FN_VI1_R3, FN_TX5_B, FN_SSI_SDATA7_B, | ||
169 | FN_CTS0_B, | ||
170 | FN_A24, FN_SD1_CD, FN_MMC0_D4, FN_FD4, | ||
171 | FN_HSPI_CS2, FN_VI1_R2, FN_SSI_WS78_B, | ||
172 | FN_A23, FN_FCLE, FN_HSPI_CLK2, FN_VI1_R1, | ||
173 | FN_A22, FN_RX5_D, FN_HSPI_RX2_B, FN_VI1_R0, | ||
174 | FN_A21, FN_SCK5_D, FN_HSPI_CLK2_B, | ||
175 | FN_A20, FN_TX5_D, FN_HSPI_TX2_B, | ||
176 | FN_A0, FN_SD1_DAT3, FN_MMC0_D3, FN_FD3, | ||
177 | FN_BS, FN_SD1_DAT2, FN_MMC0_D2, FN_FD2, | ||
178 | FN_ATADIR0, FN_SDSELF, FN_HCTS1, FN_TX4_C, | ||
179 | FN_USB_PENC2, FN_SCK0, FN_PWM1, FN_PWMFSW0, | ||
180 | FN_SCIF_CLK, FN_TCLK0_C, | ||
181 | |||
182 | /* IPSR1 */ | ||
183 | FN_EX_CS0, FN_RX3_C_IRDA_RX_C, FN_MMC0_D6, | ||
184 | FN_FD6, FN_EX_CS1, FN_MMC0_D7, FN_FD7, | ||
185 | FN_EX_CS2, FN_SD1_CLK, FN_MMC0_CLK, FN_FALE, | ||
186 | FN_ATACS00, FN_EX_CS3, FN_SD1_CMD, FN_MMC0_CMD, | ||
187 | FN_FRE, FN_ATACS10, FN_VI1_R4, FN_RX5_B, | ||
188 | FN_HSCK1, FN_SSI_SDATA8_B, FN_RTS0_B_TANS_B, FN_SSI_SDATA9, | ||
189 | FN_EX_CS4, FN_SD1_DAT0, FN_MMC0_D0, FN_FD0, | ||
190 | FN_ATARD0, FN_VI1_R5, FN_SCK5_B, FN_HTX1, | ||
191 | FN_TX2_E, FN_TX0_B, FN_SSI_SCK9, FN_EX_CS5, | ||
192 | FN_SD1_DAT1, FN_MMC0_D1, FN_FD1, FN_ATAWR0, | ||
193 | FN_VI1_R6, FN_HRX1, FN_RX2_E, FN_RX0_B, | ||
194 | FN_SSI_WS9, FN_MLB_CLK, FN_PWM2, FN_SCK4, | ||
195 | FN_MLB_SIG, FN_PWM3, FN_TX4, FN_MLB_DAT, | ||
196 | FN_PWM4, FN_RX4, FN_HTX0, FN_TX1, | ||
197 | FN_SDATA, FN_CTS0_C, FN_SUB_TCK, FN_CC5_STATE2, | ||
198 | FN_CC5_STATE10, FN_CC5_STATE18, FN_CC5_STATE26, FN_CC5_STATE34, | ||
199 | |||
200 | /* IPSR2 */ | ||
201 | FN_HRX0, FN_RX1, FN_SCKZ, FN_RTS0_C_TANS_C, | ||
202 | FN_SUB_TDI, FN_CC5_STATE3, FN_CC5_STATE11, FN_CC5_STATE19, | ||
203 | FN_CC5_STATE27, FN_CC5_STATE35, FN_HSCK0, FN_SCK1, | ||
204 | FN_MTS, FN_PWM5, FN_SCK0_C, FN_SSI_SDATA9_B, | ||
205 | FN_SUB_TDO, FN_CC5_STATE0, FN_CC5_STATE8, FN_CC5_STATE16, | ||
206 | FN_CC5_STATE24, FN_CC5_STATE32, FN_HCTS0, FN_CTS1, | ||
207 | FN_STM, FN_PWM0_D, FN_RX0_C, FN_SCIF_CLK_C, | ||
208 | FN_SUB_TRST, FN_TCLK1_B, FN_CC5_OSCOUT, FN_HRTS0, | ||
209 | FN_RTS1_TANS, FN_MDATA, FN_TX0_C, FN_SUB_TMS, | ||
210 | FN_CC5_STATE1, FN_CC5_STATE9, FN_CC5_STATE17, FN_CC5_STATE25, | ||
211 | FN_CC5_STATE33, FN_DU0_DR0, FN_LCDOUT0, FN_DREQ0, | ||
212 | FN_GPS_CLK_B, FN_AUDATA0, FN_TX5_C, FN_DU0_DR1, | ||
213 | FN_LCDOUT1, FN_DACK0, FN_DRACK0, FN_GPS_SIGN_B, | ||
214 | FN_AUDATA1, FN_RX5_C, FN_DU0_DR2, FN_LCDOUT2, | ||
215 | FN_DU0_DR3, FN_LCDOUT3, FN_DU0_DR4, FN_LCDOUT4, | ||
216 | FN_DU0_DR5, FN_LCDOUT5, FN_DU0_DR6, FN_LCDOUT6, | ||
217 | FN_DU0_DR7, FN_LCDOUT7, FN_DU0_DG0, FN_LCDOUT8, | ||
218 | FN_DREQ1, FN_SCL2, FN_AUDATA2, | ||
219 | |||
220 | /* IPSR3 */ | ||
221 | FN_DU0_DG1, FN_LCDOUT9, FN_DACK1, FN_SDA2, | ||
222 | FN_AUDATA3, FN_DU0_DG2, FN_LCDOUT10, FN_DU0_DG3, | ||
223 | FN_LCDOUT11, FN_DU0_DG4, FN_LCDOUT12, FN_DU0_DG5, | ||
224 | FN_LCDOUT13, FN_DU0_DG6, FN_LCDOUT14, FN_DU0_DG7, | ||
225 | FN_LCDOUT15, FN_DU0_DB0, FN_LCDOUT16, FN_EX_WAIT1, | ||
226 | FN_SCL1, FN_TCLK1, FN_AUDATA4, FN_DU0_DB1, | ||
227 | FN_LCDOUT17, FN_EX_WAIT2, FN_SDA1, FN_GPS_MAG_B, | ||
228 | FN_AUDATA5, FN_SCK5_C, FN_DU0_DB2, FN_LCDOUT18, | ||
229 | FN_DU0_DB3, FN_LCDOUT19, FN_DU0_DB4, FN_LCDOUT20, | ||
230 | FN_DU0_DB5, FN_LCDOUT21, FN_DU0_DB6, FN_LCDOUT22, | ||
231 | FN_DU0_DB7, FN_LCDOUT23, FN_DU0_DOTCLKIN, FN_QSTVA_QVS, | ||
232 | FN_TX3_D_IRDA_TX_D, FN_SCL3_B, FN_DU0_DOTCLKOUT0, FN_QCLK, | ||
233 | FN_DU0_DOTCLKOUT1, FN_QSTVB_QVE, FN_RX3_D_IRDA_RX_D, FN_SDA3_B, | ||
234 | FN_SDA2_C, FN_DACK0_B, FN_DRACK0_B, FN_DU0_EXHSYNC_DU0_HSYNC, | ||
235 | FN_QSTH_QHS, FN_DU0_EXVSYNC_DU0_VSYNC, FN_QSTB_QHE, | ||
236 | FN_DU0_EXODDF_DU0_ODDF_DISP_CDE, FN_QCPV_QDE, FN_CAN1_TX, | ||
237 | FN_TX2_C, FN_SCL2_C, FN_REMOCON, | ||
238 | |||
239 | /* IPSR4 */ | ||
240 | FN_DU0_DISP, FN_QPOLA, FN_CAN_CLK_C, FN_SCK2_C, | ||
241 | FN_DU0_CDE, FN_QPOLB, FN_CAN1_RX, FN_RX2_C, | ||
242 | FN_DREQ0_B, FN_SSI_SCK78_B, FN_SCK0_B, FN_DU1_DR0, | ||
243 | FN_VI2_DATA0_VI2_B0, FN_PWM6, FN_SD3_CLK, FN_TX3_E_IRDA_TX_E, | ||
244 | FN_AUDCK, FN_PWMFSW0_B, FN_DU1_DR1, FN_VI2_DATA1_VI2_B1, | ||
245 | FN_PWM0, FN_SD3_CMD, FN_RX3_E_IRDA_RX_E, FN_AUDSYNC, | ||
246 | FN_CTS0_D, FN_DU1_DR2, FN_VI2_G0, FN_DU1_DR3, | ||
247 | FN_VI2_G1, FN_DU1_DR4, FN_VI2_G2, FN_DU1_DR5, | ||
248 | FN_VI2_G3, FN_DU1_DR6, FN_VI2_G4, FN_DU1_DR7, | ||
249 | FN_VI2_G5, FN_DU1_DG0, FN_VI2_DATA2_VI2_B2, FN_SCL1_B, | ||
250 | FN_SD3_DAT2, FN_SCK3_E, FN_AUDATA6, FN_TX0_D, | ||
251 | FN_DU1_DG1, FN_VI2_DATA3_VI2_B3, FN_SDA1_B, FN_SD3_DAT3, | ||
252 | FN_SCK5, FN_AUDATA7, FN_RX0_D, FN_DU1_DG2, | ||
253 | FN_VI2_G6, FN_DU1_DG3, FN_VI2_G7, FN_DU1_DG4, | ||
254 | FN_VI2_R0, FN_DU1_DG5, FN_VI2_R1, FN_DU1_DG6, | ||
255 | FN_VI2_R2, FN_DU1_DG7, FN_VI2_R3, FN_DU1_DB0, | ||
256 | FN_VI2_DATA4_VI2_B4, FN_SCL2_B, FN_SD3_DAT0, FN_TX5, | ||
257 | FN_SCK0_D, | ||
258 | |||
259 | /* IPSR5 */ | ||
260 | FN_DU1_DB1, FN_VI2_DATA5_VI2_B5, FN_SDA2_B, FN_SD3_DAT1, | ||
261 | FN_RX5, FN_RTS0_D_TANS_D, FN_DU1_DB2, FN_VI2_R4, | ||
262 | FN_DU1_DB3, FN_VI2_R5, FN_DU1_DB4, FN_VI2_R6, | ||
263 | FN_DU1_DB5, FN_VI2_R7, FN_DU1_DB6, FN_SCL2_D, | ||
264 | FN_DU1_DB7, FN_SDA2_D, FN_DU1_DOTCLKIN, FN_VI2_CLKENB, | ||
265 | FN_HSPI_CS1, FN_SCL1_D, FN_DU1_DOTCLKOUT, FN_VI2_FIELD, | ||
266 | FN_SDA1_D, FN_DU1_EXHSYNC_DU1_HSYNC, FN_VI2_HSYNC, | ||
267 | FN_VI3_HSYNC, FN_DU1_EXVSYNC_DU1_VSYNC, FN_VI2_VSYNC, FN_VI3_VSYNC, | ||
268 | FN_DU1_EXODDF_DU1_ODDF_DISP_CDE, FN_VI2_CLK, FN_TX3_B_IRDA_TX_B, | ||
269 | FN_SD3_CD, FN_HSPI_TX1, FN_VI1_CLKENB, FN_VI3_CLKENB, | ||
270 | FN_AUDIO_CLKC, FN_TX2_D, FN_SPEEDIN, FN_GPS_SIGN_D, | ||
271 | FN_DU1_DISP, FN_VI2_DATA6_VI2_B6, FN_TCLK0, FN_QSTVA_B_QVS_B, | ||
272 | FN_HSPI_CLK1, FN_SCK2_D, FN_AUDIO_CLKOUT_B, FN_GPS_MAG_D, | ||
273 | FN_DU1_CDE, FN_VI2_DATA7_VI2_B7, FN_RX3_B_IRDA_RX_B, | ||
274 | FN_SD3_WP, FN_HSPI_RX1, FN_VI1_FIELD, FN_VI3_FIELD, | ||
275 | FN_AUDIO_CLKOUT, FN_RX2_D, FN_GPS_CLK_C, FN_GPS_CLK_D, | ||
276 | FN_AUDIO_CLKA, FN_CAN_TXCLK, FN_AUDIO_CLKB, FN_USB_OVC2, | ||
277 | FN_CAN_DEBUGOUT0, FN_MOUT0, | ||
278 | |||
279 | /* IPSR6 */ | ||
280 | FN_SSI_SCK0129, FN_CAN_DEBUGOUT1, FN_MOUT1, FN_SSI_WS0129, | ||
281 | FN_CAN_DEBUGOUT2, FN_MOUT2, FN_SSI_SDATA0, FN_CAN_DEBUGOUT3, | ||
282 | FN_MOUT5, FN_SSI_SDATA1, FN_CAN_DEBUGOUT4, FN_MOUT6, | ||
283 | FN_SSI_SDATA2, FN_CAN_DEBUGOUT5, FN_SSI_SCK34, FN_CAN_DEBUGOUT6, | ||
284 | FN_CAN0_TX_B, FN_IERX, FN_SSI_SCK9_C, FN_SSI_WS34, | ||
285 | FN_CAN_DEBUGOUT7, FN_CAN0_RX_B, FN_IETX, FN_SSI_WS9_C, | ||
286 | FN_SSI_SDATA3, FN_PWM0_C, FN_CAN_DEBUGOUT8, FN_CAN_CLK_B, | ||
287 | FN_IECLK, FN_SCIF_CLK_B, FN_TCLK0_B, FN_SSI_SDATA4, | ||
288 | FN_CAN_DEBUGOUT9, FN_SSI_SDATA9_C, FN_SSI_SCK5, FN_ADICLK, | ||
289 | FN_CAN_DEBUGOUT10, FN_SCK3, FN_TCLK0_D, FN_SSI_WS5, | ||
290 | FN_ADICS_SAMP, FN_CAN_DEBUGOUT11, FN_TX3_IRDA_TX, FN_SSI_SDATA5, | ||
291 | FN_ADIDATA, FN_CAN_DEBUGOUT12, FN_RX3_IRDA_RX, FN_SSI_SCK6, | ||
292 | FN_ADICHS0, FN_CAN0_TX, FN_IERX_B, | ||
293 | |||
294 | /* IPSR7 */ | ||
295 | FN_SSI_WS6, FN_ADICHS1, FN_CAN0_RX, FN_IETX_B, | ||
296 | FN_SSI_SDATA6, FN_ADICHS2, FN_CAN_CLK, FN_IECLK_B, | ||
297 | FN_SSI_SCK78, FN_CAN_DEBUGOUT13, FN_IRQ0_B, FN_SSI_SCK9_B, | ||
298 | FN_HSPI_CLK1_C, FN_SSI_WS78, FN_CAN_DEBUGOUT14, FN_IRQ1_B, | ||
299 | FN_SSI_WS9_B, FN_HSPI_CS1_C, FN_SSI_SDATA7, FN_CAN_DEBUGOUT15, | ||
300 | FN_IRQ2_B, FN_TCLK1_C, FN_HSPI_TX1_C, FN_SSI_SDATA8, | ||
301 | FN_VSP, FN_IRQ3_B, FN_HSPI_RX1_C, FN_SD0_CLK, | ||
302 | FN_ATACS01, FN_SCK1_B, FN_SD0_CMD, FN_ATACS11, | ||
303 | FN_TX1_B, FN_CC5_TDO, FN_SD0_DAT0, FN_ATADIR1, | ||
304 | FN_RX1_B, FN_CC5_TRST, FN_SD0_DAT1, FN_ATAG1, | ||
305 | FN_SCK2_B, FN_CC5_TMS, FN_SD0_DAT2, FN_ATARD1, | ||
306 | FN_TX2_B, FN_CC5_TCK, FN_SD0_DAT3, FN_ATAWR1, | ||
307 | FN_RX2_B, FN_CC5_TDI, FN_SD0_CD, FN_DREQ2, | ||
308 | FN_RTS1_B_TANS_B, FN_SD0_WP, FN_DACK2, FN_CTS1_B, | ||
309 | |||
310 | /* IPSR8 */ | ||
311 | FN_HSPI_CLK0, FN_CTS0, FN_USB_OVC0, FN_AD_CLK, | ||
312 | FN_CC5_STATE4, FN_CC5_STATE12, FN_CC5_STATE20, FN_CC5_STATE28, | ||
313 | FN_CC5_STATE36, FN_HSPI_CS0, FN_RTS0_TANS, FN_USB_OVC1, | ||
314 | FN_AD_DI, FN_CC5_STATE5, FN_CC5_STATE13, FN_CC5_STATE21, | ||
315 | FN_CC5_STATE29, FN_CC5_STATE37, FN_HSPI_TX0, FN_TX0, | ||
316 | FN_CAN_DEBUG_HW_TRIGGER, FN_AD_DO, FN_CC5_STATE6, FN_CC5_STATE14, | ||
317 | FN_CC5_STATE22, FN_CC5_STATE30, FN_CC5_STATE38, FN_HSPI_RX0, | ||
318 | FN_RX0, FN_CAN_STEP0, FN_AD_NCS, FN_CC5_STATE7, | ||
319 | FN_CC5_STATE15, FN_CC5_STATE23, FN_CC5_STATE31, FN_CC5_STATE39, | ||
320 | FN_FMCLK, FN_RDS_CLK, FN_PCMOE, FN_BPFCLK, | ||
321 | FN_PCMWE, FN_FMIN, FN_RDS_DATA, FN_VI0_CLK, | ||
322 | FN_MMC1_CLK, FN_VI0_CLKENB, FN_TX1_C, FN_HTX1_B, | ||
323 | FN_MT1_SYNC, FN_VI0_FIELD, FN_RX1_C, FN_HRX1_B, | ||
324 | FN_VI0_HSYNC, FN_VI0_DATA0_B_VI0_B0_B, FN_CTS1_C, FN_TX4_D, | ||
325 | FN_MMC1_CMD, FN_HSCK1_B, FN_VI0_VSYNC, FN_VI0_DATA1_B_VI0_B1_B, | ||
326 | FN_RTS1_C_TANS_C, FN_RX4_D, FN_PWMFSW0_C, | ||
327 | |||
328 | /* IPSR9 */ | ||
329 | FN_VI0_DATA0_VI0_B0, FN_HRTS1_B, FN_MT1_VCXO, FN_VI0_DATA1_VI0_B1, | ||
330 | FN_HCTS1_B, FN_MT1_PWM, FN_VI0_DATA2_VI0_B2, FN_MMC1_D0, | ||
331 | FN_VI0_DATA3_VI0_B3, FN_MMC1_D1, FN_VI0_DATA4_VI0_B4, FN_MMC1_D2, | ||
332 | FN_VI0_DATA5_VI0_B5, FN_MMC1_D3, FN_VI0_DATA6_VI0_B6, FN_MMC1_D4, | ||
333 | FN_ARM_TRACEDATA_0, FN_VI0_DATA7_VI0_B7, FN_MMC1_D5, | ||
334 | FN_ARM_TRACEDATA_1, FN_VI0_G0, FN_SSI_SCK78_C, FN_IRQ0, | ||
335 | FN_ARM_TRACEDATA_2, FN_VI0_G1, FN_SSI_WS78_C, FN_IRQ1, | ||
336 | FN_ARM_TRACEDATA_3, FN_VI0_G2, FN_ETH_TXD1, FN_MMC1_D6, | ||
337 | FN_ARM_TRACEDATA_4, FN_TS_SPSYNC0, FN_VI0_G3, FN_ETH_CRS_DV, | ||
338 | FN_MMC1_D7, FN_ARM_TRACEDATA_5, FN_TS_SDAT0, FN_VI0_G4, | ||
339 | FN_ETH_TX_EN, FN_SD2_DAT0_B, FN_ARM_TRACEDATA_6, FN_VI0_G5, | ||
340 | FN_ETH_RX_ER, FN_SD2_DAT1_B, FN_ARM_TRACEDATA_7, FN_VI0_G6, | ||
341 | FN_ETH_RXD0, FN_SD2_DAT2_B, FN_ARM_TRACEDATA_8, FN_VI0_G7, | ||
342 | FN_ETH_RXD1, FN_SD2_DAT3_B, FN_ARM_TRACEDATA_9, | ||
343 | |||
344 | /* IPSR10 */ | ||
345 | FN_VI0_R0, FN_SSI_SDATA7_C, FN_SCK1_C, FN_DREQ1_B, | ||
346 | FN_ARM_TRACEDATA_10, FN_DREQ0_C, FN_VI0_R1, FN_SSI_SDATA8_C, | ||
347 | FN_DACK1_B, FN_ARM_TRACEDATA_11, FN_DACK0_C, FN_DRACK0_C, | ||
348 | FN_VI0_R2, FN_ETH_LINK, FN_SD2_CLK_B, FN_IRQ2, | ||
349 | FN_ARM_TRACEDATA_12, FN_VI0_R3, FN_ETH_MAGIC, FN_SD2_CMD_B, | ||
350 | FN_IRQ3, FN_ARM_TRACEDATA_13, FN_VI0_R4, FN_ETH_REFCLK, | ||
351 | FN_SD2_CD_B, FN_HSPI_CLK1_B, FN_ARM_TRACEDATA_14, FN_MT1_CLK, | ||
352 | FN_TS_SCK0, FN_VI0_R5, FN_ETH_TXD0, FN_SD2_WP_B, FN_HSPI_CS1_B, | ||
353 | FN_ARM_TRACEDATA_15, FN_MT1_D, FN_TS_SDEN0, FN_VI0_R6, | ||
354 | FN_ETH_MDC, FN_DREQ2_C, FN_HSPI_TX1_B, FN_TRACECLK, | ||
355 | FN_MT1_BEN, FN_PWMFSW0_D, FN_VI0_R7, FN_ETH_MDIO, | ||
356 | FN_DACK2_C, FN_HSPI_RX1_B, FN_SCIF_CLK_D, FN_TRACECTL, | ||
357 | FN_MT1_PEN, FN_VI1_CLK, FN_SIM_D, FN_SDA3, | ||
358 | FN_VI1_HSYNC, FN_VI3_CLK, FN_SSI_SCK4, FN_GPS_SIGN_C, | ||
359 | FN_PWMFSW0_E, FN_VI1_VSYNC, FN_AUDIO_CLKOUT_C, FN_SSI_WS4, | ||
360 | FN_SIM_CLK, FN_GPS_MAG_C, FN_SPV_TRST, FN_SCL3, | ||
361 | |||
362 | /* IPSR11 */ | ||
363 | FN_VI1_DATA0_VI1_B0, FN_SD2_DAT0, FN_SIM_RST, FN_SPV_TCK, | ||
364 | FN_ADICLK_B, FN_VI1_DATA1_VI1_B1, FN_SD2_DAT1, FN_MT0_CLK, | ||
365 | FN_SPV_TMS, FN_ADICS_B_SAMP_B, FN_VI1_DATA2_VI1_B2, FN_SD2_DAT2, | ||
366 | FN_MT0_D, FN_SPVTDI, FN_ADIDATA_B, FN_VI1_DATA3_VI1_B3, | ||
367 | FN_SD2_DAT3, FN_MT0_BEN, FN_SPV_TDO, FN_ADICHS0_B, | ||
368 | FN_VI1_DATA4_VI1_B4, FN_SD2_CLK, FN_MT0_PEN, FN_SPA_TRST, | ||
369 | FN_HSPI_CLK1_D, FN_ADICHS1_B, FN_VI1_DATA5_VI1_B5, FN_SD2_CMD, | ||
370 | FN_MT0_SYNC, FN_SPA_TCK, FN_HSPI_CS1_D, FN_ADICHS2_B, | ||
371 | FN_VI1_DATA6_VI1_B6, FN_SD2_CD, FN_MT0_VCXO, FN_SPA_TMS, | ||
372 | FN_HSPI_TX1_D, FN_VI1_DATA7_VI1_B7, FN_SD2_WP, FN_MT0_PWM, | ||
373 | FN_SPA_TDI, FN_HSPI_RX1_D, FN_VI1_G0, FN_VI3_DATA0, | ||
374 | FN_DU1_DOTCLKOUT1, FN_TS_SCK1, FN_DREQ2_B, FN_TX2, | ||
375 | FN_SPA_TDO, FN_HCTS0_B, FN_VI1_G1, FN_VI3_DATA1, | ||
376 | FN_SSI_SCK1, FN_TS_SDEN1, FN_DACK2_B, FN_RX2, FN_HRTS0_B, | ||
377 | |||
378 | /* IPSR12 */ | ||
379 | FN_VI1_G2, FN_VI3_DATA2, FN_SSI_WS1, FN_TS_SPSYNC1, | ||
380 | FN_SCK2, FN_HSCK0_B, FN_VI1_G3, FN_VI3_DATA3, | ||
381 | FN_SSI_SCK2, FN_TS_SDAT1, FN_SCL1_C, FN_HTX0_B, | ||
382 | FN_VI1_G4, FN_VI3_DATA4, FN_SSI_WS2, FN_SDA1_C, | ||
383 | FN_SIM_RST_B, FN_HRX0_B, FN_VI1_G5, FN_VI3_DATA5, | ||
384 | FN_GPS_CLK, FN_FSE, FN_TX4_B, FN_SIM_D_B, | ||
385 | FN_VI1_G6, FN_VI3_DATA6, FN_GPS_SIGN, FN_FRB, | ||
386 | FN_RX4_B, FN_SIM_CLK_B, FN_VI1_G7, FN_VI3_DATA7, | ||
387 | FN_GPS_MAG, FN_FCE, FN_SCK4_B, | ||
388 | |||
389 | FN_SEL_SCIF5_0, FN_SEL_SCIF5_1, FN_SEL_SCIF5_2, FN_SEL_SCIF5_3, | ||
390 | FN_SEL_SCIF4_0, FN_SEL_SCIF4_1, FN_SEL_SCIF4_2, FN_SEL_SCIF4_3, | ||
391 | FN_SEL_SCIF3_0, FN_SEL_SCIF3_1, FN_SEL_SCIF3_2, | ||
392 | FN_SEL_SCIF3_3, FN_SEL_SCIF3_4, | ||
393 | FN_SEL_SCIF2_0, FN_SEL_SCIF2_1, FN_SEL_SCIF2_2, | ||
394 | FN_SEL_SCIF2_3, FN_SEL_SCIF2_4, | ||
395 | FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, | ||
396 | FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, FN_SEL_SCIF0_2, FN_SEL_SCIF0_3, | ||
397 | FN_SEL_SSI9_0, FN_SEL_SSI9_1, FN_SEL_SSI9_2, | ||
398 | FN_SEL_SSI8_0, FN_SEL_SSI8_1, FN_SEL_SSI8_2, | ||
399 | FN_SEL_SSI7_0, FN_SEL_SSI7_1, FN_SEL_SSI7_2, | ||
400 | FN_SEL_VI0_0, FN_SEL_VI0_1, | ||
401 | FN_SEL_SD2_0, FN_SEL_SD2_1, | ||
402 | FN_SEL_INT3_0, FN_SEL_INT3_1, | ||
403 | FN_SEL_INT2_0, FN_SEL_INT2_1, | ||
404 | FN_SEL_INT1_0, FN_SEL_INT1_1, | ||
405 | FN_SEL_INT0_0, FN_SEL_INT0_1, | ||
406 | FN_SEL_IE_0, FN_SEL_IE_1, | ||
407 | FN_SEL_EXBUS2_0, FN_SEL_EXBUS2_1, FN_SEL_EXBUS2_2, | ||
408 | FN_SEL_EXBUS1_0, FN_SEL_EXBUS1_1, | ||
409 | FN_SEL_EXBUS0_0, FN_SEL_EXBUS0_1, FN_SEL_EXBUS0_2, | ||
410 | |||
411 | FN_SEL_TMU1_0, FN_SEL_TMU1_1, FN_SEL_TMU1_2, | ||
412 | FN_SEL_TMU0_0, FN_SEL_TMU0_1, FN_SEL_TMU0_2, FN_SEL_TMU0_3, | ||
413 | FN_SEL_SCIF_0, FN_SEL_SCIF_1, FN_SEL_SCIF_2, FN_SEL_SCIF_3, | ||
414 | FN_SEL_CANCLK_0, FN_SEL_CANCLK_1, FN_SEL_CANCLK_2, | ||
415 | FN_SEL_CAN0_0, FN_SEL_CAN0_1, | ||
416 | FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1, | ||
417 | FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1, | ||
418 | FN_SEL_PWMFSW_0, FN_SEL_PWMFSW_1, FN_SEL_PWMFSW_2, | ||
419 | FN_SEL_PWMFSW_3, FN_SEL_PWMFSW_4, | ||
420 | FN_SEL_ADI_0, FN_SEL_ADI_1, | ||
421 | FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, FN_SEL_GPS_3, | ||
422 | FN_SEL_SIM_0, FN_SEL_SIM_1, | ||
423 | FN_SEL_HSPI2_0, FN_SEL_HSPI2_1, | ||
424 | FN_SEL_HSPI1_0, FN_SEL_HSPI1_1, FN_SEL_HSPI1_2, FN_SEL_HSPI1_3, | ||
425 | FN_SEL_I2C3_0, FN_SEL_I2C3_1, | ||
426 | FN_SEL_I2C2_0, FN_SEL_I2C2_1, FN_SEL_I2C2_2, FN_SEL_I2C2_3, | ||
427 | FN_SEL_I2C1_0, FN_SEL_I2C1_1, FN_SEL_I2C1_2, FN_SEL_I2C1_3, | ||
428 | PINMUX_FUNCTION_END, | ||
429 | |||
430 | PINMUX_MARK_BEGIN, | ||
431 | AVS1_MARK, AVS2_MARK, A17_MARK, A18_MARK, | ||
432 | A19_MARK, | ||
433 | |||
434 | RD_WR_MARK, FWE_MARK, ATAG0_MARK, VI1_R7_MARK, | ||
435 | HRTS1_MARK, RX4_C_MARK, | ||
436 | CS1_A26_MARK, HSPI_TX2_MARK, SDSELF_B_MARK, | ||
437 | CS0_MARK, HSPI_CS2_B_MARK, | ||
438 | CLKOUT_MARK, TX3C_IRDA_TX_C_MARK, PWM0_B_MARK, | ||
439 | A25_MARK, SD1_WP_MARK, MMC0_D5_MARK, FD5_MARK, | ||
440 | HSPI_RX2_MARK, VI1_R3_MARK, TX5_B_MARK, SSI_SDATA7_B_MARK, CTS0_B_MARK, | ||
441 | A24_MARK, SD1_CD_MARK, MMC0_D4_MARK, FD4_MARK, | ||
442 | HSPI_CS2_MARK, VI1_R2_MARK, SSI_WS78_B_MARK, | ||
443 | A23_MARK, FCLE_MARK, HSPI_CLK2_MARK, VI1_R1_MARK, | ||
444 | A22_MARK, RX5_D_MARK, HSPI_RX2_B_MARK, VI1_R0_MARK, | ||
445 | A21_MARK, SCK5_D_MARK, HSPI_CLK2_B_MARK, | ||
446 | A20_MARK, TX5_D_MARK, HSPI_TX2_B_MARK, | ||
447 | A0_MARK, SD1_DAT3_MARK, MMC0_D3_MARK, FD3_MARK, | ||
448 | BS_MARK, SD1_DAT2_MARK, MMC0_D2_MARK, FD2_MARK, | ||
449 | ATADIR0_MARK, SDSELF_MARK, HCTS1_MARK, TX4_C_MARK, | ||
450 | USB_PENC2_MARK, SCK0_MARK, PWM1_MARK, PWMFSW0_MARK, | ||
451 | SCIF_CLK_MARK, TCLK0_C_MARK, | ||
452 | |||
453 | EX_CS0_MARK, RX3_C_IRDA_RX_C_MARK, MMC0_D6_MARK, | ||
454 | FD6_MARK, EX_CS1_MARK, MMC0_D7_MARK, FD7_MARK, | ||
455 | EX_CS2_MARK, SD1_CLK_MARK, MMC0_CLK_MARK, FALE_MARK, | ||
456 | ATACS00_MARK, EX_CS3_MARK, SD1_CMD_MARK, MMC0_CMD_MARK, | ||
457 | FRE_MARK, ATACS10_MARK, VI1_R4_MARK, RX5_B_MARK, | ||
458 | HSCK1_MARK, SSI_SDATA8_B_MARK, RTS0_B_TANS_B_MARK, SSI_SDATA9_MARK, | ||
459 | EX_CS4_MARK, SD1_DAT0_MARK, MMC0_D0_MARK, FD0_MARK, | ||
460 | ATARD0_MARK, VI1_R5_MARK, SCK5_B_MARK, HTX1_MARK, | ||
461 | TX2_E_MARK, TX0_B_MARK, SSI_SCK9_MARK, EX_CS5_MARK, | ||
462 | SD1_DAT1_MARK, MMC0_D1_MARK, FD1_MARK, ATAWR0_MARK, | ||
463 | VI1_R6_MARK, HRX1_MARK, RX2_E_MARK, RX0_B_MARK, | ||
464 | SSI_WS9_MARK, MLB_CLK_MARK, PWM2_MARK, SCK4_MARK, | ||
465 | MLB_SIG_MARK, PWM3_MARK, TX4_MARK, MLB_DAT_MARK, | ||
466 | PWM4_MARK, RX4_MARK, HTX0_MARK, TX1_MARK, | ||
467 | SDATA_MARK, CTS0_C_MARK, SUB_TCK_MARK, CC5_STATE2_MARK, | ||
468 | CC5_STATE10_MARK, CC5_STATE18_MARK, CC5_STATE26_MARK, CC5_STATE34_MARK, | ||
469 | |||
470 | HRX0_MARK, RX1_MARK, SCKZ_MARK, RTS0_C_TANS_C_MARK, | ||
471 | SUB_TDI_MARK, CC5_STATE3_MARK, CC5_STATE11_MARK, CC5_STATE19_MARK, | ||
472 | CC5_STATE27_MARK, CC5_STATE35_MARK, HSCK0_MARK, SCK1_MARK, | ||
473 | MTS_MARK, PWM5_MARK, SCK0_C_MARK, SSI_SDATA9_B_MARK, | ||
474 | SUB_TDO_MARK, CC5_STATE0_MARK, CC5_STATE8_MARK, CC5_STATE16_MARK, | ||
475 | CC5_STATE24_MARK, CC5_STATE32_MARK, HCTS0_MARK, CTS1_MARK, | ||
476 | STM_MARK, PWM0_D_MARK, RX0_C_MARK, SCIF_CLK_C_MARK, | ||
477 | SUB_TRST_MARK, TCLK1_B_MARK, CC5_OSCOUT_MARK, HRTS0_MARK, | ||
478 | RTS1_TANS_MARK, MDATA_MARK, TX0_C_MARK, SUB_TMS_MARK, | ||
479 | CC5_STATE1_MARK, CC5_STATE9_MARK, CC5_STATE17_MARK, CC5_STATE25_MARK, | ||
480 | CC5_STATE33_MARK, DU0_DR0_MARK, LCDOUT0_MARK, DREQ0_MARK, | ||
481 | GPS_CLK_B_MARK, AUDATA0_MARK, TX5_C_MARK, DU0_DR1_MARK, | ||
482 | LCDOUT1_MARK, DACK0_MARK, DRACK0_MARK, GPS_SIGN_B_MARK, | ||
483 | AUDATA1_MARK, RX5_C_MARK, DU0_DR2_MARK, LCDOUT2_MARK, | ||
484 | DU0_DR3_MARK, LCDOUT3_MARK, DU0_DR4_MARK, LCDOUT4_MARK, | ||
485 | DU0_DR5_MARK, LCDOUT5_MARK, DU0_DR6_MARK, LCDOUT6_MARK, | ||
486 | DU0_DR7_MARK, LCDOUT7_MARK, DU0_DG0_MARK, LCDOUT8_MARK, | ||
487 | DREQ1_MARK, SCL2_MARK, AUDATA2_MARK, | ||
488 | |||
489 | DU0_DG1_MARK, LCDOUT9_MARK, DACK1_MARK, SDA2_MARK, | ||
490 | AUDATA3_MARK, DU0_DG2_MARK, LCDOUT10_MARK, DU0_DG3_MARK, | ||
491 | LCDOUT11_MARK, DU0_DG4_MARK, LCDOUT12_MARK, DU0_DG5_MARK, | ||
492 | LCDOUT13_MARK, DU0_DG6_MARK, LCDOUT14_MARK, DU0_DG7_MARK, | ||
493 | LCDOUT15_MARK, DU0_DB0_MARK, LCDOUT16_MARK, EX_WAIT1_MARK, | ||
494 | SCL1_MARK, TCLK1_MARK, AUDATA4_MARK, DU0_DB1_MARK, | ||
495 | LCDOUT17_MARK, EX_WAIT2_MARK, SDA1_MARK, GPS_MAG_B_MARK, | ||
496 | AUDATA5_MARK, SCK5_C_MARK, DU0_DB2_MARK, LCDOUT18_MARK, | ||
497 | DU0_DB3_MARK, LCDOUT19_MARK, DU0_DB4_MARK, LCDOUT20_MARK, | ||
498 | DU0_DB5_MARK, LCDOUT21_MARK, DU0_DB6_MARK, LCDOUT22_MARK, | ||
499 | DU0_DB7_MARK, LCDOUT23_MARK, DU0_DOTCLKIN_MARK, QSTVA_QVS_MARK, | ||
500 | TX3_D_IRDA_TX_D_MARK, SCL3_B_MARK, DU0_DOTCLKOUT0_MARK, QCLK_MARK, | ||
501 | DU0_DOTCLKOUT1_MARK, QSTVB_QVE_MARK, RX3_D_IRDA_RX_D_MARK, SDA3_B_MARK, | ||
502 | SDA2_C_MARK, DACK0_B_MARK, DRACK0_B_MARK, DU0_EXHSYNC_DU0_HSYNC_MARK, | ||
503 | QSTH_QHS_MARK, DU0_EXVSYNC_DU0_VSYNC_MARK, QSTB_QHE_MARK, | ||
504 | DU0_EXODDF_DU0_ODDF_DISP_CDE_MARK, QCPV_QDE_MARK, CAN1_TX_MARK, | ||
505 | TX2_C_MARK, SCL2_C_MARK, REMOCON_MARK, | ||
506 | |||
507 | DU0_DISP_MARK, QPOLA_MARK, CAN_CLK_C_MARK, SCK2_C_MARK, | ||
508 | DU0_CDE_MARK, QPOLB_MARK, CAN1_RX_MARK, RX2_C_MARK, | ||
509 | DREQ0_B_MARK, SSI_SCK78_B_MARK, SCK0_B_MARK, DU1_DR0_MARK, | ||
510 | VI2_DATA0_VI2_B0_MARK, PWM6_MARK, SD3_CLK_MARK, TX3_E_IRDA_TX_E_MARK, | ||
511 | AUDCK_MARK, PWMFSW0_B_MARK, DU1_DR1_MARK, VI2_DATA1_VI2_B1_MARK, | ||
512 | PWM0_MARK, SD3_CMD_MARK, RX3_E_IRDA_RX_E_MARK, AUDSYNC_MARK, | ||
513 | CTS0_D_MARK, DU1_DR2_MARK, VI2_G0_MARK, DU1_DR3_MARK, | ||
514 | VI2_G1_MARK, DU1_DR4_MARK, VI2_G2_MARK, DU1_DR5_MARK, | ||
515 | VI2_G3_MARK, DU1_DR6_MARK, VI2_G4_MARK, DU1_DR7_MARK, | ||
516 | VI2_G5_MARK, DU1_DG0_MARK, VI2_DATA2_VI2_B2_MARK, SCL1_B_MARK, | ||
517 | SD3_DAT2_MARK, SCK3_E_MARK, AUDATA6_MARK, TX0_D_MARK, | ||
518 | DU1_DG1_MARK, VI2_DATA3_VI2_B3_MARK, SDA1_B_MARK, SD3_DAT3_MARK, | ||
519 | SCK5_MARK, AUDATA7_MARK, RX0_D_MARK, DU1_DG2_MARK, | ||
520 | VI2_G6_MARK, DU1_DG3_MARK, VI2_G7_MARK, DU1_DG4_MARK, | ||
521 | VI2_R0_MARK, DU1_DG5_MARK, VI2_R1_MARK, DU1_DG6_MARK, | ||
522 | VI2_R2_MARK, DU1_DG7_MARK, VI2_R3_MARK, DU1_DB0_MARK, | ||
523 | VI2_DATA4_VI2_B4_MARK, SCL2_B_MARK, SD3_DAT0_MARK, TX5_MARK, | ||
524 | SCK0_D_MARK, | ||
525 | |||
526 | DU1_DB1_MARK, VI2_DATA5_VI2_B5_MARK, SDA2_B_MARK, SD3_DAT1_MARK, | ||
527 | RX5_MARK, RTS0_D_TANS_D_MARK, DU1_DB2_MARK, VI2_R4_MARK, | ||
528 | DU1_DB3_MARK, VI2_R5_MARK, DU1_DB4_MARK, VI2_R6_MARK, | ||
529 | DU1_DB5_MARK, VI2_R7_MARK, DU1_DB6_MARK, SCL2_D_MARK, | ||
530 | DU1_DB7_MARK, SDA2_D_MARK, DU1_DOTCLKIN_MARK, VI2_CLKENB_MARK, | ||
531 | HSPI_CS1_MARK, SCL1_D_MARK, DU1_DOTCLKOUT_MARK, VI2_FIELD_MARK, | ||
532 | SDA1_D_MARK, DU1_EXHSYNC_DU1_HSYNC_MARK, VI2_HSYNC_MARK, | ||
533 | VI3_HSYNC_MARK, DU1_EXVSYNC_DU1_VSYNC_MARK, VI2_VSYNC_MARK, | ||
534 | VI3_VSYNC_MARK, DU1_EXODDF_DU1_ODDF_DISP_CDE_MARK, VI2_CLK_MARK, | ||
535 | TX3_B_IRDA_TX_B_MARK, SD3_CD_MARK, HSPI_TX1_MARK, VI1_CLKENB_MARK, | ||
536 | VI3_CLKENB_MARK, AUDIO_CLKC_MARK, TX2_D_MARK, SPEEDIN_MARK, | ||
537 | GPS_SIGN_D_MARK, DU1_DISP_MARK, VI2_DATA6_VI2_B6_MARK, TCLK0_MARK, | ||
538 | QSTVA_B_QVS_B_MARK, HSPI_CLK1_MARK, SCK2_D_MARK, AUDIO_CLKOUT_B_MARK, | ||
539 | GPS_MAG_D_MARK, DU1_CDE_MARK, VI2_DATA7_VI2_B7_MARK, | ||
540 | RX3_B_IRDA_RX_B_MARK, SD3_WP_MARK, HSPI_RX1_MARK, VI1_FIELD_MARK, | ||
541 | VI3_FIELD_MARK, AUDIO_CLKOUT_MARK, RX2_D_MARK, GPS_CLK_C_MARK, | ||
542 | GPS_CLK_D_MARK, AUDIO_CLKA_MARK, CAN_TXCLK_MARK, AUDIO_CLKB_MARK, | ||
543 | USB_OVC2_MARK, CAN_DEBUGOUT0_MARK, MOUT0_MARK, | ||
544 | |||
545 | SSI_SCK0129_MARK, CAN_DEBUGOUT1_MARK, MOUT1_MARK, SSI_WS0129_MARK, | ||
546 | CAN_DEBUGOUT2_MARK, MOUT2_MARK, SSI_SDATA0_MARK, CAN_DEBUGOUT3_MARK, | ||
547 | MOUT5_MARK, SSI_SDATA1_MARK, CAN_DEBUGOUT4_MARK, MOUT6_MARK, | ||
548 | SSI_SDATA2_MARK, CAN_DEBUGOUT5_MARK, SSI_SCK34_MARK, | ||
549 | CAN_DEBUGOUT6_MARK, CAN0_TX_B_MARK, IERX_MARK, SSI_SCK9_C_MARK, | ||
550 | SSI_WS34_MARK, CAN_DEBUGOUT7_MARK, CAN0_RX_B_MARK, IETX_MARK, | ||
551 | SSI_WS9_C_MARK, SSI_SDATA3_MARK, PWM0_C_MARK, CAN_DEBUGOUT8_MARK, | ||
552 | CAN_CLK_B_MARK, IECLK_MARK, SCIF_CLK_B_MARK, TCLK0_B_MARK, | ||
553 | SSI_SDATA4_MARK, CAN_DEBUGOUT9_MARK, SSI_SDATA9_C_MARK, SSI_SCK5_MARK, | ||
554 | ADICLK_MARK, CAN_DEBUGOUT10_MARK, SCK3_MARK, TCLK0_D_MARK, | ||
555 | SSI_WS5_MARK, ADICS_SAMP_MARK, CAN_DEBUGOUT11_MARK, TX3_IRDA_TX_MARK, | ||
556 | SSI_SDATA5_MARK, ADIDATA_MARK, CAN_DEBUGOUT12_MARK, RX3_IRDA_RX_MARK, | ||
557 | SSI_SCK6_MARK, ADICHS0_MARK, CAN0_TX_MARK, IERX_B_MARK, | ||
558 | |||
559 | SSI_WS6_MARK, ADICHS1_MARK, CAN0_RX_MARK, IETX_B_MARK, | ||
560 | SSI_SDATA6_MARK, ADICHS2_MARK, CAN_CLK_MARK, IECLK_B_MARK, | ||
561 | SSI_SCK78_MARK, CAN_DEBUGOUT13_MARK, IRQ0_B_MARK, SSI_SCK9_B_MARK, | ||
562 | HSPI_CLK1_C_MARK, SSI_WS78_MARK, CAN_DEBUGOUT14_MARK, IRQ1_B_MARK, | ||
563 | SSI_WS9_B_MARK, HSPI_CS1_C_MARK, SSI_SDATA7_MARK, CAN_DEBUGOUT15_MARK, | ||
564 | IRQ2_B_MARK, TCLK1_C_MARK, HSPI_TX1_C_MARK, SSI_SDATA8_MARK, | ||
565 | VSP_MARK, IRQ3_B_MARK, HSPI_RX1_C_MARK, SD0_CLK_MARK, | ||
566 | ATACS01_MARK, SCK1_B_MARK, SD0_CMD_MARK, ATACS11_MARK, | ||
567 | TX1_B_MARK, CC5_TDO_MARK, SD0_DAT0_MARK, ATADIR1_MARK, | ||
568 | RX1_B_MARK, CC5_TRST_MARK, SD0_DAT1_MARK, ATAG1_MARK, | ||
569 | SCK2_B_MARK, CC5_TMS_MARK, SD0_DAT2_MARK, ATARD1_MARK, | ||
570 | TX2_B_MARK, CC5_TCK_MARK, SD0_DAT3_MARK, ATAWR1_MARK, | ||
571 | RX2_B_MARK, CC5_TDI_MARK, SD0_CD_MARK, DREQ2_MARK, | ||
572 | RTS1_B_TANS_B_MARK, SD0_WP_MARK, DACK2_MARK, CTS1_B_MARK, | ||
573 | |||
574 | HSPI_CLK0_MARK, CTS0_MARK, USB_OVC0_MARK, AD_CLK_MARK, | ||
575 | CC5_STATE4_MARK, CC5_STATE12_MARK, CC5_STATE20_MARK, CC5_STATE28_MARK, | ||
576 | CC5_STATE36_MARK, HSPI_CS0_MARK, RTS0_TANS_MARK, USB_OVC1_MARK, | ||
577 | AD_DI_MARK, CC5_STATE5_MARK, CC5_STATE13_MARK, CC5_STATE21_MARK, | ||
578 | CC5_STATE29_MARK, CC5_STATE37_MARK, HSPI_TX0_MARK, TX0_MARK, | ||
579 | CAN_DEBUG_HW_TRIGGER_MARK, AD_DO_MARK, CC5_STATE6_MARK, | ||
580 | CC5_STATE14_MARK, CC5_STATE22_MARK, CC5_STATE30_MARK, | ||
581 | CC5_STATE38_MARK, HSPI_RX0_MARK, RX0_MARK, CAN_STEP0_MARK, | ||
582 | AD_NCS_MARK, CC5_STATE7_MARK, CC5_STATE15_MARK, CC5_STATE23_MARK, | ||
583 | CC5_STATE31_MARK, CC5_STATE39_MARK, FMCLK_MARK, RDS_CLK_MARK, | ||
584 | PCMOE_MARK, BPFCLK_MARK, PCMWE_MARK, FMIN_MARK, RDS_DATA_MARK, | ||
585 | VI0_CLK_MARK, MMC1_CLK_MARK, VI0_CLKENB_MARK, TX1_C_MARK, HTX1_B_MARK, | ||
586 | MT1_SYNC_MARK, VI0_FIELD_MARK, RX1_C_MARK, HRX1_B_MARK, | ||
587 | VI0_HSYNC_MARK, VI0_DATA0_B_VI0_B0_B_MARK, CTS1_C_MARK, TX4_D_MARK, | ||
588 | MMC1_CMD_MARK, HSCK1_B_MARK, VI0_VSYNC_MARK, VI0_DATA1_B_VI0_B1_B_MARK, | ||
589 | RTS1_C_TANS_C_MARK, RX4_D_MARK, PWMFSW0_C_MARK, | ||
590 | |||
591 | VI0_DATA0_VI0_B0_MARK, HRTS1_B_MARK, MT1_VCXO_MARK, | ||
592 | VI0_DATA1_VI0_B1_MARK, HCTS1_B_MARK, MT1_PWM_MARK, | ||
593 | VI0_DATA2_VI0_B2_MARK, MMC1_D0_MARK, VI0_DATA3_VI0_B3_MARK, | ||
594 | MMC1_D1_MARK, VI0_DATA4_VI0_B4_MARK, MMC1_D2_MARK, | ||
595 | VI0_DATA5_VI0_B5_MARK, MMC1_D3_MARK, VI0_DATA6_VI0_B6_MARK, | ||
596 | MMC1_D4_MARK, ARM_TRACEDATA_0_MARK, VI0_DATA7_VI0_B7_MARK, | ||
597 | MMC1_D5_MARK, ARM_TRACEDATA_1_MARK, VI0_G0_MARK, SSI_SCK78_C_MARK, | ||
598 | IRQ0_MARK, ARM_TRACEDATA_2_MARK, VI0_G1_MARK, SSI_WS78_C_MARK, | ||
599 | IRQ1_MARK, ARM_TRACEDATA_3_MARK, VI0_G2_MARK, ETH_TXD1_MARK, | ||
600 | MMC1_D6_MARK, ARM_TRACEDATA_4_MARK, TS_SPSYNC0_MARK, VI0_G3_MARK, | ||
601 | ETH_CRS_DV_MARK, MMC1_D7_MARK, ARM_TRACEDATA_5_MARK, TS_SDAT0_MARK, | ||
602 | VI0_G4_MARK, ETH_TX_EN_MARK, SD2_DAT0_B_MARK, ARM_TRACEDATA_6_MARK, | ||
603 | VI0_G5_MARK, ETH_RX_ER_MARK, SD2_DAT1_B_MARK, ARM_TRACEDATA_7_MARK, | ||
604 | VI0_G6_MARK, ETH_RXD0_MARK, SD2_DAT2_B_MARK, ARM_TRACEDATA_8_MARK, | ||
605 | VI0_G7_MARK, ETH_RXD1_MARK, SD2_DAT3_B_MARK, ARM_TRACEDATA_9_MARK, | ||
606 | |||
607 | VI0_R0_MARK, SSI_SDATA7_C_MARK, SCK1_C_MARK, DREQ1_B_MARK, | ||
608 | ARM_TRACEDATA_10_MARK, DREQ0_C_MARK, VI0_R1_MARK, SSI_SDATA8_C_MARK, | ||
609 | DACK1_B_MARK, ARM_TRACEDATA_11_MARK, DACK0_C_MARK, DRACK0_C_MARK, | ||
610 | VI0_R2_MARK, ETH_LINK_MARK, SD2_CLK_B_MARK, IRQ2_MARK, | ||
611 | ARM_TRACEDATA_12_MARK, VI0_R3_MARK, ETH_MAGIC_MARK, SD2_CMD_B_MARK, | ||
612 | IRQ3_MARK, ARM_TRACEDATA_13_MARK, VI0_R4_MARK, ETH_REFCLK_MARK, | ||
613 | SD2_CD_B_MARK, HSPI_CLK1_B_MARK, ARM_TRACEDATA_14_MARK, MT1_CLK_MARK, | ||
614 | TS_SCK0_MARK, VI0_R5_MARK, ETH_TXD0_MARK, SD2_WP_B_MARK, | ||
615 | HSPI_CS1_B_MARK, ARM_TRACEDATA_15_MARK, MT1_D_MARK, TS_SDEN0_MARK, | ||
616 | VI0_R6_MARK, ETH_MDC_MARK, DREQ2_C_MARK, HSPI_TX1_B_MARK, | ||
617 | TRACECLK_MARK, MT1_BEN_MARK, PWMFSW0_D_MARK, VI0_R7_MARK, | ||
618 | ETH_MDIO_MARK, DACK2_C_MARK, HSPI_RX1_B_MARK, SCIF_CLK_D_MARK, | ||
619 | TRACECTL_MARK, MT1_PEN_MARK, VI1_CLK_MARK, SIM_D_MARK, SDA3_MARK, | ||
620 | VI1_HSYNC_MARK, VI3_CLK_MARK, SSI_SCK4_MARK, GPS_SIGN_C_MARK, | ||
621 | PWMFSW0_E_MARK, VI1_VSYNC_MARK, AUDIO_CLKOUT_C_MARK, SSI_WS4_MARK, | ||
622 | SIM_CLK_MARK, GPS_MAG_C_MARK, SPV_TRST_MARK, SCL3_MARK, | ||
623 | |||
624 | VI1_DATA0_VI1_B0_MARK, SD2_DAT0_MARK, SIM_RST_MARK, SPV_TCK_MARK, | ||
625 | ADICLK_B_MARK, VI1_DATA1_VI1_B1_MARK, SD2_DAT1_MARK, MT0_CLK_MARK, | ||
626 | SPV_TMS_MARK, ADICS_B_SAMP_B_MARK, VI1_DATA2_VI1_B2_MARK, | ||
627 | SD2_DAT2_MARK, MT0_D_MARK, SPVTDI_MARK, ADIDATA_B_MARK, | ||
628 | VI1_DATA3_VI1_B3_MARK, SD2_DAT3_MARK, MT0_BEN_MARK, SPV_TDO_MARK, | ||
629 | ADICHS0_B_MARK, VI1_DATA4_VI1_B4_MARK, SD2_CLK_MARK, MT0_PEN_MARK, | ||
630 | SPA_TRST_MARK, HSPI_CLK1_D_MARK, ADICHS1_B_MARK, | ||
631 | VI1_DATA5_VI1_B5_MARK, SD2_CMD_MARK, MT0_SYNC_MARK, SPA_TCK_MARK, | ||
632 | HSPI_CS1_D_MARK, ADICHS2_B_MARK, VI1_DATA6_VI1_B6_MARK, SD2_CD_MARK, | ||
633 | MT0_VCXO_MARK, SPA_TMS_MARK, HSPI_TX1_D_MARK, VI1_DATA7_VI1_B7_MARK, | ||
634 | SD2_WP_MARK, MT0_PWM_MARK, SPA_TDI_MARK, HSPI_RX1_D_MARK, | ||
635 | VI1_G0_MARK, VI3_DATA0_MARK, DU1_DOTCLKOUT1_MARK, TS_SCK1_MARK, | ||
636 | DREQ2_B_MARK, TX2_MARK, SPA_TDO_MARK, HCTS0_B_MARK, | ||
637 | VI1_G1_MARK, VI3_DATA1_MARK, SSI_SCK1_MARK, TS_SDEN1_MARK, | ||
638 | DACK2_B_MARK, RX2_MARK, HRTS0_B_MARK, | ||
639 | |||
640 | VI1_G2_MARK, VI3_DATA2_MARK, SSI_WS1_MARK, TS_SPSYNC1_MARK, | ||
641 | SCK2_MARK, HSCK0_B_MARK, VI1_G3_MARK, VI3_DATA3_MARK, | ||
642 | SSI_SCK2_MARK, TS_SDAT1_MARK, SCL1_C_MARK, HTX0_B_MARK, | ||
643 | VI1_G4_MARK, VI3_DATA4_MARK, SSI_WS2_MARK, SDA1_C_MARK, | ||
644 | SIM_RST_B_MARK, HRX0_B_MARK, VI1_G5_MARK, VI3_DATA5_MARK, | ||
645 | GPS_CLK_MARK, FSE_MARK, TX4_B_MARK, SIM_D_B_MARK, | ||
646 | VI1_G6_MARK, VI3_DATA6_MARK, GPS_SIGN_MARK, FRB_MARK, | ||
647 | RX4_B_MARK, SIM_CLK_B_MARK, VI1_G7_MARK, VI3_DATA7_MARK, | ||
648 | GPS_MAG_MARK, FCE_MARK, SCK4_B_MARK, | ||
649 | PINMUX_MARK_END, | ||
650 | }; | ||
651 | |||
652 | static pinmux_enum_t pinmux_data[] = { | ||
653 | PINMUX_DATA_GP_ALL(), /* PINMUX_DATA(GP_M_N_DATA, GP_M_N_FN...), */ | ||
654 | |||
655 | PINMUX_DATA(AVS1_MARK, FN_AVS1), | ||
656 | PINMUX_DATA(AVS1_MARK, FN_AVS1), | ||
657 | PINMUX_DATA(A17_MARK, FN_A17), | ||
658 | PINMUX_DATA(A18_MARK, FN_A18), | ||
659 | PINMUX_DATA(A19_MARK, FN_A19), | ||
660 | |||
661 | PINMUX_IPSR_DATA(IP0_2_0, USB_PENC2), | ||
662 | PINMUX_IPSR_MODSEL_DATA(IP0_2_0, SCK0, SEL_SCIF0_0), | ||
663 | PINMUX_IPSR_DATA(IP0_2_0, PWM1), | ||
664 | PINMUX_IPSR_MODSEL_DATA(IP0_2_0, PWMFSW0, SEL_PWMFSW_0), | ||
665 | PINMUX_IPSR_MODSEL_DATA(IP0_2_0, SCIF_CLK, SEL_SCIF_0), | ||
666 | PINMUX_IPSR_MODSEL_DATA(IP0_2_0, TCLK0_C, SEL_TMU0_2), | ||
667 | PINMUX_IPSR_DATA(IP0_5_3, BS), | ||
668 | PINMUX_IPSR_DATA(IP0_5_3, SD1_DAT2), | ||
669 | PINMUX_IPSR_DATA(IP0_5_3, MMC0_D2), | ||
670 | PINMUX_IPSR_DATA(IP0_5_3, FD2), | ||
671 | PINMUX_IPSR_DATA(IP0_5_3, ATADIR0), | ||
672 | PINMUX_IPSR_DATA(IP0_5_3, SDSELF), | ||
673 | PINMUX_IPSR_MODSEL_DATA(IP0_5_3, HCTS1, SEL_HSCIF1_0), | ||
674 | PINMUX_IPSR_DATA(IP0_5_3, TX4_C), | ||
675 | PINMUX_IPSR_DATA(IP0_7_6, A0), | ||
676 | PINMUX_IPSR_DATA(IP0_7_6, SD1_DAT3), | ||
677 | PINMUX_IPSR_DATA(IP0_7_6, MMC0_D3), | ||
678 | PINMUX_IPSR_DATA(IP0_7_6, FD3), | ||
679 | PINMUX_IPSR_DATA(IP0_9_8, A20), | ||
680 | PINMUX_IPSR_DATA(IP0_9_8, TX5_D), | ||
681 | PINMUX_IPSR_DATA(IP0_9_8, HSPI_TX2_B), | ||
682 | PINMUX_IPSR_DATA(IP0_11_10, A21), | ||
683 | PINMUX_IPSR_MODSEL_DATA(IP0_11_10, SCK5_D, SEL_SCIF5_3), | ||
684 | PINMUX_IPSR_MODSEL_DATA(IP0_11_10, HSPI_CLK2_B, SEL_HSPI2_1), | ||
685 | PINMUX_IPSR_DATA(IP0_13_12, A22), | ||
686 | PINMUX_IPSR_MODSEL_DATA(IP0_13_12, RX5_D, SEL_SCIF5_3), | ||
687 | PINMUX_IPSR_MODSEL_DATA(IP0_13_12, HSPI_RX2_B, SEL_HSPI2_1), | ||
688 | PINMUX_IPSR_DATA(IP0_13_12, VI1_R0), | ||
689 | PINMUX_IPSR_DATA(IP0_15_14, A23), | ||
690 | PINMUX_IPSR_DATA(IP0_15_14, FCLE), | ||
691 | PINMUX_IPSR_MODSEL_DATA(IP0_15_14, HSPI_CLK2, SEL_HSPI2_0), | ||
692 | PINMUX_IPSR_DATA(IP0_15_14, VI1_R1), | ||
693 | PINMUX_IPSR_DATA(IP0_18_16, A24), | ||
694 | PINMUX_IPSR_DATA(IP0_18_16, SD1_CD), | ||
695 | PINMUX_IPSR_DATA(IP0_18_16, MMC0_D4), | ||
696 | PINMUX_IPSR_DATA(IP0_18_16, FD4), | ||
697 | PINMUX_IPSR_MODSEL_DATA(IP0_18_16, HSPI_CS2, SEL_HSPI2_0), | ||
698 | PINMUX_IPSR_DATA(IP0_18_16, VI1_R2), | ||
699 | PINMUX_IPSR_MODSEL_DATA(IP0_18_16, SSI_WS78_B, SEL_SSI7_1), | ||
700 | PINMUX_IPSR_DATA(IP0_22_19, A25), | ||
701 | PINMUX_IPSR_DATA(IP0_22_19, SD1_WP), | ||
702 | PINMUX_IPSR_DATA(IP0_22_19, MMC0_D5), | ||
703 | PINMUX_IPSR_DATA(IP0_22_19, FD5), | ||
704 | PINMUX_IPSR_MODSEL_DATA(IP0_22_19, HSPI_RX2, SEL_HSPI2_0), | ||
705 | PINMUX_IPSR_DATA(IP0_22_19, VI1_R3), | ||
706 | PINMUX_IPSR_DATA(IP0_22_19, TX5_B), | ||
707 | PINMUX_IPSR_MODSEL_DATA(IP0_22_19, SSI_SDATA7_B, SEL_SSI7_1), | ||
708 | PINMUX_IPSR_MODSEL_DATA(IP0_22_19, CTS0_B, SEL_SCIF0_1), | ||
709 | PINMUX_IPSR_DATA(IP0_24_23, CLKOUT), | ||
710 | PINMUX_IPSR_DATA(IP0_24_23, TX3C_IRDA_TX_C), | ||
711 | PINMUX_IPSR_DATA(IP0_24_23, PWM0_B), | ||
712 | PINMUX_IPSR_DATA(IP0_25, CS0), | ||
713 | PINMUX_IPSR_MODSEL_DATA(IP0_25, HSPI_CS2_B, SEL_HSPI2_1), | ||
714 | PINMUX_IPSR_DATA(IP0_27_26, CS1_A26), | ||
715 | PINMUX_IPSR_DATA(IP0_27_26, HSPI_TX2), | ||
716 | PINMUX_IPSR_DATA(IP0_27_26, SDSELF_B), | ||
717 | PINMUX_IPSR_DATA(IP0_30_28, RD_WR), | ||
718 | PINMUX_IPSR_DATA(IP0_30_28, FWE), | ||
719 | PINMUX_IPSR_DATA(IP0_30_28, ATAG0), | ||
720 | PINMUX_IPSR_DATA(IP0_30_28, VI1_R7), | ||
721 | PINMUX_IPSR_MODSEL_DATA(IP0_30_28, HRTS1, SEL_HSCIF1_0), | ||
722 | PINMUX_IPSR_MODSEL_DATA(IP0_30_28, RX4_C, SEL_SCIF4_2), | ||
723 | |||
724 | PINMUX_IPSR_DATA(IP1_1_0, EX_CS0), | ||
725 | PINMUX_IPSR_MODSEL_DATA(IP1_1_0, RX3_C_IRDA_RX_C, SEL_SCIF3_2), | ||
726 | PINMUX_IPSR_DATA(IP1_1_0, MMC0_D6), | ||
727 | PINMUX_IPSR_DATA(IP1_1_0, FD6), | ||
728 | PINMUX_IPSR_DATA(IP1_3_2, EX_CS1), | ||
729 | PINMUX_IPSR_DATA(IP1_3_2, MMC0_D7), | ||
730 | PINMUX_IPSR_DATA(IP1_3_2, FD7), | ||
731 | PINMUX_IPSR_DATA(IP1_6_4, EX_CS2), | ||
732 | PINMUX_IPSR_DATA(IP1_6_4, SD1_CLK), | ||
733 | PINMUX_IPSR_DATA(IP1_6_4, MMC0_CLK), | ||
734 | PINMUX_IPSR_DATA(IP1_6_4, FALE), | ||
735 | PINMUX_IPSR_DATA(IP1_6_4, ATACS00), | ||
736 | PINMUX_IPSR_DATA(IP1_10_7, EX_CS3), | ||
737 | PINMUX_IPSR_DATA(IP1_10_7, SD1_CMD), | ||
738 | PINMUX_IPSR_DATA(IP1_10_7, MMC0_CMD), | ||
739 | PINMUX_IPSR_DATA(IP1_10_7, FRE), | ||
740 | PINMUX_IPSR_DATA(IP1_10_7, ATACS10), | ||
741 | PINMUX_IPSR_DATA(IP1_10_7, VI1_R4), | ||
742 | PINMUX_IPSR_MODSEL_DATA(IP1_10_7, RX5_B, SEL_SCIF5_1), | ||
743 | PINMUX_IPSR_MODSEL_DATA(IP1_10_7, HSCK1, SEL_HSCIF1_0), | ||
744 | PINMUX_IPSR_MODSEL_DATA(IP1_10_7, SSI_SDATA8_B, SEL_SSI8_1), | ||
745 | PINMUX_IPSR_MODSEL_DATA(IP1_10_7, RTS0_B_TANS_B, SEL_SCIF0_1), | ||
746 | PINMUX_IPSR_MODSEL_DATA(IP1_10_7, SSI_SDATA9, SEL_SSI9_0), | ||
747 | PINMUX_IPSR_DATA(IP1_14_11, EX_CS4), | ||
748 | PINMUX_IPSR_DATA(IP1_14_11, SD1_DAT0), | ||
749 | PINMUX_IPSR_DATA(IP1_14_11, MMC0_D0), | ||
750 | PINMUX_IPSR_DATA(IP1_14_11, FD0), | ||
751 | PINMUX_IPSR_DATA(IP1_14_11, ATARD0), | ||
752 | PINMUX_IPSR_DATA(IP1_14_11, VI1_R5), | ||
753 | PINMUX_IPSR_MODSEL_DATA(IP1_14_11, SCK5_B, SEL_SCIF5_1), | ||
754 | PINMUX_IPSR_DATA(IP1_14_11, HTX1), | ||
755 | PINMUX_IPSR_DATA(IP1_14_11, TX2_E), | ||
756 | PINMUX_IPSR_DATA(IP1_14_11, TX0_B), | ||
757 | PINMUX_IPSR_MODSEL_DATA(IP1_14_11, SSI_SCK9, SEL_SSI9_0), | ||
758 | PINMUX_IPSR_DATA(IP1_18_15, EX_CS5), | ||
759 | PINMUX_IPSR_DATA(IP1_18_15, SD1_DAT1), | ||
760 | PINMUX_IPSR_DATA(IP1_18_15, MMC0_D1), | ||
761 | PINMUX_IPSR_DATA(IP1_18_15, FD1), | ||
762 | PINMUX_IPSR_DATA(IP1_18_15, ATAWR0), | ||
763 | PINMUX_IPSR_DATA(IP1_18_15, VI1_R6), | ||
764 | PINMUX_IPSR_MODSEL_DATA(IP1_18_15, HRX1, SEL_HSCIF1_0), | ||
765 | PINMUX_IPSR_MODSEL_DATA(IP1_18_15, RX2_E, SEL_SCIF2_4), | ||
766 | PINMUX_IPSR_MODSEL_DATA(IP1_18_15, RX0_B, SEL_SCIF0_1), | ||
767 | PINMUX_IPSR_MODSEL_DATA(IP1_18_15, SSI_WS9, SEL_SSI9_0), | ||
768 | PINMUX_IPSR_DATA(IP1_20_19, MLB_CLK), | ||
769 | PINMUX_IPSR_DATA(IP1_20_19, PWM2), | ||
770 | PINMUX_IPSR_MODSEL_DATA(IP1_20_19, SCK4, SEL_SCIF4_0), | ||
771 | PINMUX_IPSR_DATA(IP1_22_21, MLB_SIG), | ||
772 | PINMUX_IPSR_DATA(IP1_22_21, PWM3), | ||
773 | PINMUX_IPSR_DATA(IP1_22_21, TX4), | ||
774 | PINMUX_IPSR_DATA(IP1_24_23, MLB_DAT), | ||
775 | PINMUX_IPSR_DATA(IP1_24_23, PWM4), | ||
776 | PINMUX_IPSR_MODSEL_DATA(IP1_24_23, RX4, SEL_SCIF4_0), | ||
777 | PINMUX_IPSR_DATA(IP1_28_25, HTX0), | ||
778 | PINMUX_IPSR_DATA(IP1_28_25, TX1), | ||
779 | PINMUX_IPSR_DATA(IP1_28_25, SDATA), | ||
780 | PINMUX_IPSR_MODSEL_DATA(IP1_28_25, CTS0_C, SEL_SCIF0_2), | ||
781 | PINMUX_IPSR_DATA(IP1_28_25, SUB_TCK), | ||
782 | PINMUX_IPSR_DATA(IP1_28_25, CC5_STATE2), | ||
783 | PINMUX_IPSR_DATA(IP1_28_25, CC5_STATE10), | ||
784 | PINMUX_IPSR_DATA(IP1_28_25, CC5_STATE18), | ||
785 | PINMUX_IPSR_DATA(IP1_28_25, CC5_STATE26), | ||
786 | PINMUX_IPSR_DATA(IP1_28_25, CC5_STATE34), | ||
787 | |||
788 | PINMUX_IPSR_MODSEL_DATA(IP2_3_0, HRX0, SEL_HSCIF0_0), | ||
789 | PINMUX_IPSR_MODSEL_DATA(IP2_3_0, RX1, SEL_SCIF1_0), | ||
790 | PINMUX_IPSR_DATA(IP2_3_0, SCKZ), | ||
791 | PINMUX_IPSR_MODSEL_DATA(IP2_3_0, RTS0_C_TANS_C, SEL_SCIF0_2), | ||
792 | PINMUX_IPSR_DATA(IP2_3_0, SUB_TDI), | ||
793 | PINMUX_IPSR_DATA(IP2_3_0, CC5_STATE3), | ||
794 | PINMUX_IPSR_DATA(IP2_3_0, CC5_STATE11), | ||
795 | PINMUX_IPSR_DATA(IP2_3_0, CC5_STATE19), | ||
796 | PINMUX_IPSR_DATA(IP2_3_0, CC5_STATE27), | ||
797 | PINMUX_IPSR_DATA(IP2_3_0, CC5_STATE35), | ||
798 | PINMUX_IPSR_MODSEL_DATA(IP2_7_4, HSCK0, SEL_HSCIF0_0), | ||
799 | PINMUX_IPSR_MODSEL_DATA(IP2_7_4, SCK1, SEL_SCIF1_0), | ||
800 | PINMUX_IPSR_DATA(IP2_7_4, MTS), | ||
801 | PINMUX_IPSR_DATA(IP2_7_4, PWM5), | ||
802 | PINMUX_IPSR_MODSEL_DATA(IP2_7_4, SCK0_C, SEL_SCIF0_2), | ||
803 | PINMUX_IPSR_MODSEL_DATA(IP2_7_4, SSI_SDATA9_B, SEL_SSI9_1), | ||
804 | PINMUX_IPSR_DATA(IP2_7_4, SUB_TDO), | ||
805 | PINMUX_IPSR_DATA(IP2_7_4, CC5_STATE0), | ||
806 | PINMUX_IPSR_DATA(IP2_7_4, CC5_STATE8), | ||
807 | PINMUX_IPSR_DATA(IP2_7_4, CC5_STATE16), | ||
808 | PINMUX_IPSR_DATA(IP2_7_4, CC5_STATE24), | ||
809 | PINMUX_IPSR_DATA(IP2_7_4, CC5_STATE32), | ||
810 | PINMUX_IPSR_MODSEL_DATA(IP2_11_8, HCTS0, SEL_HSCIF0_0), | ||
811 | PINMUX_IPSR_MODSEL_DATA(IP2_11_8, CTS1, SEL_SCIF1_0), | ||
812 | PINMUX_IPSR_DATA(IP2_11_8, STM), | ||
813 | PINMUX_IPSR_DATA(IP2_11_8, PWM0_D), | ||
814 | PINMUX_IPSR_MODSEL_DATA(IP2_11_8, RX0_C, SEL_SCIF0_2), | ||
815 | PINMUX_IPSR_MODSEL_DATA(IP2_11_8, SCIF_CLK_C, SEL_SCIF_2), | ||
816 | PINMUX_IPSR_DATA(IP2_11_8, SUB_TRST), | ||
817 | PINMUX_IPSR_MODSEL_DATA(IP2_11_8, TCLK1_B, SEL_TMU1_1), | ||
818 | PINMUX_IPSR_DATA(IP2_11_8, CC5_OSCOUT), | ||
819 | PINMUX_IPSR_MODSEL_DATA(IP2_15_12, HRTS0, SEL_HSCIF0_0), | ||
820 | PINMUX_IPSR_MODSEL_DATA(IP2_15_12, RTS1_TANS, SEL_SCIF1_0), | ||
821 | PINMUX_IPSR_DATA(IP2_15_12, MDATA), | ||
822 | PINMUX_IPSR_DATA(IP2_15_12, TX0_C), | ||
823 | PINMUX_IPSR_DATA(IP2_15_12, SUB_TMS), | ||
824 | PINMUX_IPSR_DATA(IP2_15_12, CC5_STATE1), | ||
825 | PINMUX_IPSR_DATA(IP2_15_12, CC5_STATE9), | ||
826 | PINMUX_IPSR_DATA(IP2_15_12, CC5_STATE17), | ||
827 | PINMUX_IPSR_DATA(IP2_15_12, CC5_STATE25), | ||
828 | PINMUX_IPSR_DATA(IP2_15_12, CC5_STATE33), | ||
829 | PINMUX_IPSR_DATA(IP2_18_16, DU0_DR0), | ||
830 | PINMUX_IPSR_DATA(IP2_18_16, LCDOUT0), | ||
831 | PINMUX_IPSR_MODSEL_DATA(IP2_18_16, DREQ0, SEL_EXBUS0_0), | ||
832 | PINMUX_IPSR_MODSEL_DATA(IP2_18_16, GPS_CLK_B, SEL_GPS_1), | ||
833 | PINMUX_IPSR_DATA(IP2_18_16, AUDATA0), | ||
834 | PINMUX_IPSR_DATA(IP2_18_16, TX5_C), | ||
835 | PINMUX_IPSR_DATA(IP2_21_19, DU0_DR1), | ||
836 | PINMUX_IPSR_DATA(IP2_21_19, LCDOUT1), | ||
837 | PINMUX_IPSR_DATA(IP2_21_19, DACK0), | ||
838 | PINMUX_IPSR_DATA(IP2_21_19, DRACK0), | ||
839 | PINMUX_IPSR_MODSEL_DATA(IP2_21_19, GPS_SIGN_B, SEL_GPS_1), | ||
840 | PINMUX_IPSR_DATA(IP2_21_19, AUDATA1), | ||
841 | PINMUX_IPSR_MODSEL_DATA(IP2_21_19, RX5_C, SEL_SCIF5_2), | ||
842 | PINMUX_IPSR_DATA(IP2_22, DU0_DR2), | ||
843 | PINMUX_IPSR_DATA(IP2_22, LCDOUT2), | ||
844 | PINMUX_IPSR_DATA(IP2_23, DU0_DR3), | ||
845 | PINMUX_IPSR_DATA(IP2_23, LCDOUT3), | ||
846 | PINMUX_IPSR_DATA(IP2_24, DU0_DR4), | ||
847 | PINMUX_IPSR_DATA(IP2_24, LCDOUT4), | ||
848 | PINMUX_IPSR_DATA(IP2_25, DU0_DR5), | ||
849 | PINMUX_IPSR_DATA(IP2_25, LCDOUT5), | ||
850 | PINMUX_IPSR_DATA(IP2_26, DU0_DR6), | ||
851 | PINMUX_IPSR_DATA(IP2_26, LCDOUT6), | ||
852 | PINMUX_IPSR_DATA(IP2_27, DU0_DR7), | ||
853 | PINMUX_IPSR_DATA(IP2_27, LCDOUT7), | ||
854 | PINMUX_IPSR_DATA(IP2_30_28, DU0_DG0), | ||
855 | PINMUX_IPSR_DATA(IP2_30_28, LCDOUT8), | ||
856 | PINMUX_IPSR_MODSEL_DATA(IP2_30_28, DREQ1, SEL_EXBUS1_0), | ||
857 | PINMUX_IPSR_MODSEL_DATA(IP2_30_28, SCL2, SEL_I2C2_0), | ||
858 | PINMUX_IPSR_DATA(IP2_30_28, AUDATA2), | ||
859 | |||
860 | PINMUX_IPSR_DATA(IP3_2_0, DU0_DG1), | ||
861 | PINMUX_IPSR_DATA(IP3_2_0, LCDOUT9), | ||
862 | PINMUX_IPSR_DATA(IP3_2_0, DACK1), | ||
863 | PINMUX_IPSR_MODSEL_DATA(IP3_2_0, SDA2, SEL_I2C2_0), | ||
864 | PINMUX_IPSR_DATA(IP3_2_0, AUDATA3), | ||
865 | PINMUX_IPSR_DATA(IP3_3, DU0_DG2), | ||
866 | PINMUX_IPSR_DATA(IP3_3, LCDOUT10), | ||
867 | PINMUX_IPSR_DATA(IP3_4, DU0_DG3), | ||
868 | PINMUX_IPSR_DATA(IP3_4, LCDOUT11), | ||
869 | PINMUX_IPSR_DATA(IP3_5, DU0_DG4), | ||
870 | PINMUX_IPSR_DATA(IP3_5, LCDOUT12), | ||
871 | PINMUX_IPSR_DATA(IP3_6, DU0_DG5), | ||
872 | PINMUX_IPSR_DATA(IP3_6, LCDOUT13), | ||
873 | PINMUX_IPSR_DATA(IP3_7, DU0_DG6), | ||
874 | PINMUX_IPSR_DATA(IP3_7, LCDOUT14), | ||
875 | PINMUX_IPSR_DATA(IP3_8, DU0_DG7), | ||
876 | PINMUX_IPSR_DATA(IP3_8, LCDOUT15), | ||
877 | PINMUX_IPSR_DATA(IP3_11_9, DU0_DB0), | ||
878 | PINMUX_IPSR_DATA(IP3_11_9, LCDOUT16), | ||
879 | PINMUX_IPSR_DATA(IP3_11_9, EX_WAIT1), | ||
880 | PINMUX_IPSR_MODSEL_DATA(IP3_11_9, SCL1, SEL_I2C1_0), | ||
881 | PINMUX_IPSR_MODSEL_DATA(IP3_11_9, TCLK1, SEL_TMU1_0), | ||
882 | PINMUX_IPSR_DATA(IP3_11_9, AUDATA4), | ||
883 | PINMUX_IPSR_DATA(IP3_14_12, DU0_DB1), | ||
884 | PINMUX_IPSR_DATA(IP3_14_12, LCDOUT17), | ||
885 | PINMUX_IPSR_DATA(IP3_14_12, EX_WAIT2), | ||
886 | PINMUX_IPSR_MODSEL_DATA(IP3_14_12, SDA1, SEL_I2C1_0), | ||
887 | PINMUX_IPSR_MODSEL_DATA(IP3_14_12, GPS_MAG_B, SEL_GPS_1), | ||
888 | PINMUX_IPSR_DATA(IP3_14_12, AUDATA5), | ||
889 | PINMUX_IPSR_MODSEL_DATA(IP3_14_12, SCK5_C, SEL_SCIF5_2), | ||
890 | PINMUX_IPSR_DATA(IP3_15, DU0_DB2), | ||
891 | PINMUX_IPSR_DATA(IP3_15, LCDOUT18), | ||
892 | PINMUX_IPSR_DATA(IP3_16, DU0_DB3), | ||
893 | PINMUX_IPSR_DATA(IP3_16, LCDOUT19), | ||
894 | PINMUX_IPSR_DATA(IP3_17, DU0_DB4), | ||
895 | PINMUX_IPSR_DATA(IP3_17, LCDOUT20), | ||
896 | PINMUX_IPSR_DATA(IP3_18, DU0_DB5), | ||
897 | PINMUX_IPSR_DATA(IP3_18, LCDOUT21), | ||
898 | PINMUX_IPSR_DATA(IP3_19, DU0_DB6), | ||
899 | PINMUX_IPSR_DATA(IP3_19, LCDOUT22), | ||
900 | PINMUX_IPSR_DATA(IP3_20, DU0_DB7), | ||
901 | PINMUX_IPSR_DATA(IP3_20, LCDOUT23), | ||
902 | PINMUX_IPSR_DATA(IP3_22_21, DU0_DOTCLKIN), | ||
903 | PINMUX_IPSR_DATA(IP3_22_21, QSTVA_QVS), | ||
904 | PINMUX_IPSR_DATA(IP3_22_21, TX3_D_IRDA_TX_D), | ||
905 | PINMUX_IPSR_MODSEL_DATA(IP3_22_21, SCL3_B, SEL_I2C3_1), | ||
906 | PINMUX_IPSR_DATA(IP3_23, DU0_DOTCLKOUT0), | ||
907 | PINMUX_IPSR_DATA(IP3_23, QCLK), | ||
908 | PINMUX_IPSR_DATA(IP3_26_24, DU0_DOTCLKOUT1), | ||
909 | PINMUX_IPSR_DATA(IP3_26_24, QSTVB_QVE), | ||
910 | PINMUX_IPSR_MODSEL_DATA(IP3_26_24, RX3_D_IRDA_RX_D, SEL_SCIF3_3), | ||
911 | PINMUX_IPSR_MODSEL_DATA(IP3_26_24, SDA3_B, SEL_I2C3_1), | ||
912 | PINMUX_IPSR_MODSEL_DATA(IP3_26_24, SDA2_C, SEL_I2C2_2), | ||
913 | PINMUX_IPSR_DATA(IP3_26_24, DACK0_B), | ||
914 | PINMUX_IPSR_DATA(IP3_26_24, DRACK0_B), | ||
915 | PINMUX_IPSR_DATA(IP3_27, DU0_EXHSYNC_DU0_HSYNC), | ||
916 | PINMUX_IPSR_DATA(IP3_27, QSTH_QHS), | ||
917 | PINMUX_IPSR_DATA(IP3_28, DU0_EXVSYNC_DU0_VSYNC), | ||
918 | PINMUX_IPSR_DATA(IP3_28, QSTB_QHE), | ||
919 | PINMUX_IPSR_DATA(IP3_31_29, DU0_EXODDF_DU0_ODDF_DISP_CDE), | ||
920 | PINMUX_IPSR_DATA(IP3_31_29, QCPV_QDE), | ||
921 | PINMUX_IPSR_DATA(IP3_31_29, CAN1_TX), | ||
922 | PINMUX_IPSR_DATA(IP3_31_29, TX2_C), | ||
923 | PINMUX_IPSR_MODSEL_DATA(IP3_31_29, SCL2_C, SEL_I2C2_2), | ||
924 | PINMUX_IPSR_DATA(IP3_31_29, REMOCON), | ||
925 | |||
926 | PINMUX_IPSR_DATA(IP4_1_0, DU0_DISP), | ||
927 | PINMUX_IPSR_DATA(IP4_1_0, QPOLA), | ||
928 | PINMUX_IPSR_MODSEL_DATA(IP4_1_0, CAN_CLK_C, SEL_CANCLK_2), | ||
929 | PINMUX_IPSR_MODSEL_DATA(IP4_1_0, SCK2_C, SEL_SCIF2_2), | ||
930 | PINMUX_IPSR_DATA(IP4_4_2, DU0_CDE), | ||
931 | PINMUX_IPSR_DATA(IP4_4_2, QPOLB), | ||
932 | PINMUX_IPSR_DATA(IP4_4_2, CAN1_RX), | ||
933 | PINMUX_IPSR_MODSEL_DATA(IP4_4_2, RX2_C, SEL_SCIF2_2), | ||
934 | PINMUX_IPSR_MODSEL_DATA(IP4_4_2, DREQ0_B, SEL_EXBUS0_1), | ||
935 | PINMUX_IPSR_MODSEL_DATA(IP4_4_2, SSI_SCK78_B, SEL_SSI7_1), | ||
936 | PINMUX_IPSR_MODSEL_DATA(IP4_4_2, SCK0_B, SEL_SCIF0_1), | ||
937 | PINMUX_IPSR_DATA(IP4_7_5, DU1_DR0), | ||
938 | PINMUX_IPSR_DATA(IP4_7_5, VI2_DATA0_VI2_B0), | ||
939 | PINMUX_IPSR_DATA(IP4_7_5, PWM6), | ||
940 | PINMUX_IPSR_DATA(IP4_7_5, SD3_CLK), | ||
941 | PINMUX_IPSR_DATA(IP4_7_5, TX3_E_IRDA_TX_E), | ||
942 | PINMUX_IPSR_DATA(IP4_7_5, AUDCK), | ||
943 | PINMUX_IPSR_MODSEL_DATA(IP4_7_5, PWMFSW0_B, SEL_PWMFSW_1), | ||
944 | PINMUX_IPSR_DATA(IP4_10_8, DU1_DR1), | ||
945 | PINMUX_IPSR_DATA(IP4_10_8, VI2_DATA1_VI2_B1), | ||
946 | PINMUX_IPSR_DATA(IP4_10_8, PWM0), | ||
947 | PINMUX_IPSR_DATA(IP4_10_8, SD3_CMD), | ||
948 | PINMUX_IPSR_MODSEL_DATA(IP4_10_8, RX3_E_IRDA_RX_E, SEL_SCIF3_4), | ||
949 | PINMUX_IPSR_DATA(IP4_10_8, AUDSYNC), | ||
950 | PINMUX_IPSR_MODSEL_DATA(IP4_10_8, CTS0_D, SEL_SCIF0_3), | ||
951 | PINMUX_IPSR_DATA(IP4_11, DU1_DR2), | ||
952 | PINMUX_IPSR_DATA(IP4_11, VI2_G0), | ||
953 | PINMUX_IPSR_DATA(IP4_12, DU1_DR3), | ||
954 | PINMUX_IPSR_DATA(IP4_12, VI2_G1), | ||
955 | PINMUX_IPSR_DATA(IP4_13, DU1_DR4), | ||
956 | PINMUX_IPSR_DATA(IP4_13, VI2_G2), | ||
957 | PINMUX_IPSR_DATA(IP4_14, DU1_DR5), | ||
958 | PINMUX_IPSR_DATA(IP4_14, VI2_G3), | ||
959 | PINMUX_IPSR_DATA(IP4_15, DU1_DR6), | ||
960 | PINMUX_IPSR_DATA(IP4_15, VI2_G4), | ||
961 | PINMUX_IPSR_DATA(IP4_16, DU1_DR7), | ||
962 | PINMUX_IPSR_DATA(IP4_16, VI2_G5), | ||
963 | PINMUX_IPSR_DATA(IP4_19_17, DU1_DG0), | ||
964 | PINMUX_IPSR_DATA(IP4_19_17, VI2_DATA2_VI2_B2), | ||
965 | PINMUX_IPSR_MODSEL_DATA(IP4_19_17, SCL1_B, SEL_I2C1_1), | ||
966 | PINMUX_IPSR_DATA(IP4_19_17, SD3_DAT2), | ||
967 | PINMUX_IPSR_MODSEL_DATA(IP4_19_17, SCK3_E, SEL_SCIF3_4), | ||
968 | PINMUX_IPSR_DATA(IP4_19_17, AUDATA6), | ||
969 | PINMUX_IPSR_DATA(IP4_19_17, TX0_D), | ||
970 | PINMUX_IPSR_DATA(IP4_22_20, DU1_DG1), | ||
971 | PINMUX_IPSR_DATA(IP4_22_20, VI2_DATA3_VI2_B3), | ||
972 | PINMUX_IPSR_MODSEL_DATA(IP4_22_20, SDA1_B, SEL_I2C1_1), | ||
973 | PINMUX_IPSR_DATA(IP4_22_20, SD3_DAT3), | ||
974 | PINMUX_IPSR_MODSEL_DATA(IP4_22_20, SCK5, SEL_SCIF5_0), | ||
975 | PINMUX_IPSR_DATA(IP4_22_20, AUDATA7), | ||
976 | PINMUX_IPSR_MODSEL_DATA(IP4_22_20, RX0_D, SEL_SCIF0_3), | ||
977 | PINMUX_IPSR_DATA(IP4_23, DU1_DG2), | ||
978 | PINMUX_IPSR_DATA(IP4_23, VI2_G6), | ||
979 | PINMUX_IPSR_DATA(IP4_24, DU1_DG3), | ||
980 | PINMUX_IPSR_DATA(IP4_24, VI2_G7), | ||
981 | PINMUX_IPSR_DATA(IP4_25, DU1_DG4), | ||
982 | PINMUX_IPSR_DATA(IP4_25, VI2_R0), | ||
983 | PINMUX_IPSR_DATA(IP4_26, DU1_DG5), | ||
984 | PINMUX_IPSR_DATA(IP4_26, VI2_R1), | ||
985 | PINMUX_IPSR_DATA(IP4_27, DU1_DG6), | ||
986 | PINMUX_IPSR_DATA(IP4_27, VI2_R2), | ||
987 | PINMUX_IPSR_DATA(IP4_28, DU1_DG7), | ||
988 | PINMUX_IPSR_DATA(IP4_28, VI2_R3), | ||
989 | PINMUX_IPSR_DATA(IP4_31_29, DU1_DB0), | ||
990 | PINMUX_IPSR_DATA(IP4_31_29, VI2_DATA4_VI2_B4), | ||
991 | PINMUX_IPSR_MODSEL_DATA(IP4_31_29, SCL2_B, SEL_I2C2_1), | ||
992 | PINMUX_IPSR_DATA(IP4_31_29, SD3_DAT0), | ||
993 | PINMUX_IPSR_DATA(IP4_31_29, TX5), | ||
994 | PINMUX_IPSR_MODSEL_DATA(IP4_31_29, SCK0_D, SEL_SCIF0_3), | ||
995 | |||
996 | PINMUX_IPSR_DATA(IP5_2_0, DU1_DB1), | ||
997 | PINMUX_IPSR_DATA(IP5_2_0, VI2_DATA5_VI2_B5), | ||
998 | PINMUX_IPSR_MODSEL_DATA(IP5_2_0, SDA2_B, SEL_I2C2_1), | ||
999 | PINMUX_IPSR_DATA(IP5_2_0, SD3_DAT1), | ||
1000 | PINMUX_IPSR_MODSEL_DATA(IP5_2_0, RX5, SEL_SCIF5_0), | ||
1001 | PINMUX_IPSR_MODSEL_DATA(IP5_2_0, RTS0_D_TANS_D, SEL_SCIF0_3), | ||
1002 | PINMUX_IPSR_DATA(IP5_3, DU1_DB2), | ||
1003 | PINMUX_IPSR_DATA(IP5_3, VI2_R4), | ||
1004 | PINMUX_IPSR_DATA(IP5_4, DU1_DB3), | ||
1005 | PINMUX_IPSR_DATA(IP5_4, VI2_R5), | ||
1006 | PINMUX_IPSR_DATA(IP5_5, DU1_DB4), | ||
1007 | PINMUX_IPSR_DATA(IP5_5, VI2_R6), | ||
1008 | PINMUX_IPSR_DATA(IP5_6, DU1_DB5), | ||
1009 | PINMUX_IPSR_DATA(IP5_6, VI2_R7), | ||
1010 | PINMUX_IPSR_DATA(IP5_7, DU1_DB6), | ||
1011 | PINMUX_IPSR_MODSEL_DATA(IP5_7, SCL2_D, SEL_I2C2_3), | ||
1012 | PINMUX_IPSR_DATA(IP5_8, DU1_DB7), | ||
1013 | PINMUX_IPSR_MODSEL_DATA(IP5_8, SDA2_D, SEL_I2C2_3), | ||
1014 | PINMUX_IPSR_DATA(IP5_10_9, DU1_DOTCLKIN), | ||
1015 | PINMUX_IPSR_DATA(IP5_10_9, VI2_CLKENB), | ||
1016 | PINMUX_IPSR_MODSEL_DATA(IP5_10_9, HSPI_CS1, SEL_HSPI1_0), | ||
1017 | PINMUX_IPSR_MODSEL_DATA(IP5_10_9, SCL1_D, SEL_I2C1_3), | ||
1018 | PINMUX_IPSR_DATA(IP5_12_11, DU1_DOTCLKOUT), | ||
1019 | PINMUX_IPSR_DATA(IP5_12_11, VI2_FIELD), | ||
1020 | PINMUX_IPSR_MODSEL_DATA(IP5_12_11, SDA1_D, SEL_I2C1_3), | ||
1021 | PINMUX_IPSR_DATA(IP5_14_13, DU1_EXHSYNC_DU1_HSYNC), | ||
1022 | PINMUX_IPSR_DATA(IP5_14_13, VI2_HSYNC), | ||
1023 | PINMUX_IPSR_DATA(IP5_14_13, VI3_HSYNC), | ||
1024 | PINMUX_IPSR_DATA(IP5_16_15, DU1_EXVSYNC_DU1_VSYNC), | ||
1025 | PINMUX_IPSR_DATA(IP5_16_15, VI2_VSYNC), | ||
1026 | PINMUX_IPSR_DATA(IP5_16_15, VI3_VSYNC), | ||
1027 | PINMUX_IPSR_DATA(IP5_20_17, DU1_EXODDF_DU1_ODDF_DISP_CDE), | ||
1028 | PINMUX_IPSR_DATA(IP5_20_17, VI2_CLK), | ||
1029 | PINMUX_IPSR_DATA(IP5_20_17, TX3_B_IRDA_TX_B), | ||
1030 | PINMUX_IPSR_DATA(IP5_20_17, SD3_CD), | ||
1031 | PINMUX_IPSR_DATA(IP5_20_17, HSPI_TX1), | ||
1032 | PINMUX_IPSR_DATA(IP5_20_17, VI1_CLKENB), | ||
1033 | PINMUX_IPSR_DATA(IP5_20_17, VI3_CLKENB), | ||
1034 | PINMUX_IPSR_DATA(IP5_20_17, AUDIO_CLKC), | ||
1035 | PINMUX_IPSR_DATA(IP5_20_17, TX2_D), | ||
1036 | PINMUX_IPSR_DATA(IP5_20_17, SPEEDIN), | ||
1037 | PINMUX_IPSR_MODSEL_DATA(IP5_20_17, GPS_SIGN_D, SEL_GPS_3), | ||
1038 | PINMUX_IPSR_DATA(IP5_23_21, DU1_DISP), | ||
1039 | PINMUX_IPSR_DATA(IP5_23_21, VI2_DATA6_VI2_B6), | ||
1040 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, TCLK0, SEL_TMU0_0), | ||
1041 | PINMUX_IPSR_DATA(IP5_23_21, QSTVA_B_QVS_B), | ||
1042 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, HSPI_CLK1, SEL_HSPI1_0), | ||
1043 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, SCK2_D, SEL_SCIF2_3), | ||
1044 | PINMUX_IPSR_DATA(IP5_23_21, AUDIO_CLKOUT_B), | ||
1045 | PINMUX_IPSR_MODSEL_DATA(IP5_23_21, GPS_MAG_D, SEL_GPS_3), | ||
1046 | PINMUX_IPSR_DATA(IP5_27_24, DU1_CDE), | ||
1047 | PINMUX_IPSR_DATA(IP5_27_24, VI2_DATA7_VI2_B7), | ||
1048 | PINMUX_IPSR_MODSEL_DATA(IP5_27_24, RX3_B_IRDA_RX_B, SEL_SCIF3_1), | ||
1049 | PINMUX_IPSR_DATA(IP5_27_24, SD3_WP), | ||
1050 | PINMUX_IPSR_MODSEL_DATA(IP5_27_24, HSPI_RX1, SEL_HSPI1_0), | ||
1051 | PINMUX_IPSR_DATA(IP5_27_24, VI1_FIELD), | ||
1052 | PINMUX_IPSR_DATA(IP5_27_24, VI3_FIELD), | ||
1053 | PINMUX_IPSR_DATA(IP5_27_24, AUDIO_CLKOUT), | ||
1054 | PINMUX_IPSR_MODSEL_DATA(IP5_27_24, RX2_D, SEL_SCIF2_3), | ||
1055 | PINMUX_IPSR_MODSEL_DATA(IP5_27_24, GPS_CLK_C, SEL_GPS_2), | ||
1056 | PINMUX_IPSR_MODSEL_DATA(IP5_27_24, GPS_CLK_D, SEL_GPS_3), | ||
1057 | PINMUX_IPSR_DATA(IP5_28, AUDIO_CLKA), | ||
1058 | PINMUX_IPSR_DATA(IP5_28, CAN_TXCLK), | ||
1059 | PINMUX_IPSR_DATA(IP5_30_29, AUDIO_CLKB), | ||
1060 | PINMUX_IPSR_DATA(IP5_30_29, USB_OVC2), | ||
1061 | PINMUX_IPSR_DATA(IP5_30_29, CAN_DEBUGOUT0), | ||
1062 | PINMUX_IPSR_DATA(IP5_30_29, MOUT0), | ||
1063 | |||
1064 | PINMUX_IPSR_DATA(IP6_1_0, SSI_SCK0129), | ||
1065 | PINMUX_IPSR_DATA(IP6_1_0, CAN_DEBUGOUT1), | ||
1066 | PINMUX_IPSR_DATA(IP6_1_0, MOUT1), | ||
1067 | PINMUX_IPSR_DATA(IP6_3_2, SSI_WS0129), | ||
1068 | PINMUX_IPSR_DATA(IP6_3_2, CAN_DEBUGOUT2), | ||
1069 | PINMUX_IPSR_DATA(IP6_3_2, MOUT2), | ||
1070 | PINMUX_IPSR_DATA(IP6_5_4, SSI_SDATA0), | ||
1071 | PINMUX_IPSR_DATA(IP6_5_4, CAN_DEBUGOUT3), | ||
1072 | PINMUX_IPSR_DATA(IP6_5_4, MOUT5), | ||
1073 | PINMUX_IPSR_DATA(IP6_7_6, SSI_SDATA1), | ||
1074 | PINMUX_IPSR_DATA(IP6_7_6, CAN_DEBUGOUT4), | ||
1075 | PINMUX_IPSR_DATA(IP6_7_6, MOUT6), | ||
1076 | PINMUX_IPSR_DATA(IP6_8, SSI_SDATA2), | ||
1077 | PINMUX_IPSR_DATA(IP6_8, CAN_DEBUGOUT5), | ||
1078 | PINMUX_IPSR_DATA(IP6_11_9, SSI_SCK34), | ||
1079 | PINMUX_IPSR_DATA(IP6_11_9, CAN_DEBUGOUT6), | ||
1080 | PINMUX_IPSR_DATA(IP6_11_9, CAN0_TX_B), | ||
1081 | PINMUX_IPSR_MODSEL_DATA(IP6_11_9, IERX, SEL_IE_0), | ||
1082 | PINMUX_IPSR_MODSEL_DATA(IP6_11_9, SSI_SCK9_C, SEL_SSI9_2), | ||
1083 | PINMUX_IPSR_DATA(IP6_14_12, SSI_WS34), | ||
1084 | PINMUX_IPSR_DATA(IP6_14_12, CAN_DEBUGOUT7), | ||
1085 | PINMUX_IPSR_MODSEL_DATA(IP6_14_12, CAN0_RX_B, SEL_CAN0_1), | ||
1086 | PINMUX_IPSR_DATA(IP6_14_12, IETX), | ||
1087 | PINMUX_IPSR_MODSEL_DATA(IP6_14_12, SSI_WS9_C, SEL_SSI9_2), | ||
1088 | PINMUX_IPSR_DATA(IP6_17_15, SSI_SDATA3), | ||
1089 | PINMUX_IPSR_DATA(IP6_17_15, PWM0_C), | ||
1090 | PINMUX_IPSR_DATA(IP6_17_15, CAN_DEBUGOUT8), | ||
1091 | PINMUX_IPSR_MODSEL_DATA(IP6_17_15, CAN_CLK_B, SEL_CANCLK_1), | ||
1092 | PINMUX_IPSR_MODSEL_DATA(IP6_17_15, IECLK, SEL_IE_0), | ||
1093 | PINMUX_IPSR_MODSEL_DATA(IP6_17_15, SCIF_CLK_B, SEL_SCIF_1), | ||
1094 | PINMUX_IPSR_MODSEL_DATA(IP6_17_15, TCLK0_B, SEL_TMU0_1), | ||
1095 | PINMUX_IPSR_DATA(IP6_19_18, SSI_SDATA4), | ||
1096 | PINMUX_IPSR_DATA(IP6_19_18, CAN_DEBUGOUT9), | ||
1097 | PINMUX_IPSR_MODSEL_DATA(IP6_19_18, SSI_SDATA9_C, SEL_SSI9_2), | ||
1098 | PINMUX_IPSR_DATA(IP6_22_20, SSI_SCK5), | ||
1099 | PINMUX_IPSR_DATA(IP6_22_20, ADICLK), | ||
1100 | PINMUX_IPSR_DATA(IP6_22_20, CAN_DEBUGOUT10), | ||
1101 | PINMUX_IPSR_MODSEL_DATA(IP6_22_20, SCK3, SEL_SCIF3_0), | ||
1102 | PINMUX_IPSR_MODSEL_DATA(IP6_22_20, TCLK0_D, SEL_TMU0_3), | ||
1103 | PINMUX_IPSR_DATA(IP6_24_23, SSI_WS5), | ||
1104 | PINMUX_IPSR_MODSEL_DATA(IP6_24_23, ADICS_SAMP, SEL_ADI_0), | ||
1105 | PINMUX_IPSR_DATA(IP6_24_23, CAN_DEBUGOUT11), | ||
1106 | PINMUX_IPSR_DATA(IP6_24_23, TX3_IRDA_TX), | ||
1107 | PINMUX_IPSR_DATA(IP6_26_25, SSI_SDATA5), | ||
1108 | PINMUX_IPSR_MODSEL_DATA(IP6_26_25, ADIDATA, SEL_ADI_0), | ||
1109 | PINMUX_IPSR_DATA(IP6_26_25, CAN_DEBUGOUT12), | ||
1110 | PINMUX_IPSR_MODSEL_DATA(IP6_26_25, RX3_IRDA_RX, SEL_SCIF3_0), | ||
1111 | PINMUX_IPSR_DATA(IP6_30_29, SSI_SCK6), | ||
1112 | PINMUX_IPSR_DATA(IP6_30_29, ADICHS0), | ||
1113 | PINMUX_IPSR_DATA(IP6_30_29, CAN0_TX), | ||
1114 | PINMUX_IPSR_MODSEL_DATA(IP6_30_29, IERX_B, SEL_IE_1), | ||
1115 | |||
1116 | PINMUX_IPSR_DATA(IP7_1_0, SSI_WS6), | ||
1117 | PINMUX_IPSR_DATA(IP7_1_0, ADICHS1), | ||
1118 | PINMUX_IPSR_MODSEL_DATA(IP7_1_0, CAN0_RX, SEL_CAN0_0), | ||
1119 | PINMUX_IPSR_DATA(IP7_1_0, IETX_B), | ||
1120 | PINMUX_IPSR_DATA(IP7_3_2, SSI_SDATA6), | ||
1121 | PINMUX_IPSR_DATA(IP7_3_2, ADICHS2), | ||
1122 | PINMUX_IPSR_MODSEL_DATA(IP7_3_2, CAN_CLK, SEL_CANCLK_0), | ||
1123 | PINMUX_IPSR_MODSEL_DATA(IP7_3_2, IECLK_B, SEL_IE_1), | ||
1124 | PINMUX_IPSR_MODSEL_DATA(IP7_6_4, SSI_SCK78, SEL_SSI7_0), | ||
1125 | PINMUX_IPSR_DATA(IP7_6_4, CAN_DEBUGOUT13), | ||
1126 | PINMUX_IPSR_MODSEL_DATA(IP7_6_4, IRQ0_B, SEL_INT0_1), | ||
1127 | PINMUX_IPSR_MODSEL_DATA(IP7_6_4, SSI_SCK9_B, SEL_SSI9_1), | ||
1128 | PINMUX_IPSR_MODSEL_DATA(IP7_6_4, HSPI_CLK1_C, SEL_HSPI1_2), | ||
1129 | PINMUX_IPSR_MODSEL_DATA(IP7_9_7, SSI_WS78, SEL_SSI7_0), | ||
1130 | PINMUX_IPSR_DATA(IP7_9_7, CAN_DEBUGOUT14), | ||
1131 | PINMUX_IPSR_MODSEL_DATA(IP7_9_7, IRQ1_B, SEL_INT1_1), | ||
1132 | PINMUX_IPSR_MODSEL_DATA(IP7_9_7, SSI_WS9_B, SEL_SSI9_1), | ||
1133 | PINMUX_IPSR_MODSEL_DATA(IP7_9_7, HSPI_CS1_C, SEL_HSPI1_2), | ||
1134 | PINMUX_IPSR_MODSEL_DATA(IP7_12_10, SSI_SDATA7, SEL_SSI7_0), | ||
1135 | PINMUX_IPSR_DATA(IP7_12_10, CAN_DEBUGOUT15), | ||
1136 | PINMUX_IPSR_MODSEL_DATA(IP7_12_10, IRQ2_B, SEL_INT2_1), | ||
1137 | PINMUX_IPSR_MODSEL_DATA(IP7_12_10, TCLK1_C, SEL_TMU1_2), | ||
1138 | PINMUX_IPSR_DATA(IP7_12_10, HSPI_TX1_C), | ||
1139 | PINMUX_IPSR_MODSEL_DATA(IP7_14_13, SSI_SDATA8, SEL_SSI8_0), | ||
1140 | PINMUX_IPSR_DATA(IP7_14_13, VSP), | ||
1141 | PINMUX_IPSR_MODSEL_DATA(IP7_14_13, IRQ3_B, SEL_INT3_1), | ||
1142 | PINMUX_IPSR_MODSEL_DATA(IP7_14_13, HSPI_RX1_C, SEL_HSPI1_2), | ||
1143 | PINMUX_IPSR_DATA(IP7_16_15, SD0_CLK), | ||
1144 | PINMUX_IPSR_DATA(IP7_16_15, ATACS01), | ||
1145 | PINMUX_IPSR_MODSEL_DATA(IP7_16_15, SCK1_B, SEL_SCIF1_1), | ||
1146 | PINMUX_IPSR_DATA(IP7_18_17, SD0_CMD), | ||
1147 | PINMUX_IPSR_DATA(IP7_18_17, ATACS11), | ||
1148 | PINMUX_IPSR_DATA(IP7_18_17, TX1_B), | ||
1149 | PINMUX_IPSR_DATA(IP7_18_17, CC5_TDO), | ||
1150 | PINMUX_IPSR_DATA(IP7_20_19, SD0_DAT0), | ||
1151 | PINMUX_IPSR_DATA(IP7_20_19, ATADIR1), | ||
1152 | PINMUX_IPSR_MODSEL_DATA(IP7_20_19, RX1_B, SEL_SCIF1_1), | ||
1153 | PINMUX_IPSR_DATA(IP7_20_19, CC5_TRST), | ||
1154 | PINMUX_IPSR_DATA(IP7_22_21, SD0_DAT1), | ||
1155 | PINMUX_IPSR_DATA(IP7_22_21, ATAG1), | ||
1156 | PINMUX_IPSR_MODSEL_DATA(IP7_22_21, SCK2_B, SEL_SCIF2_1), | ||
1157 | PINMUX_IPSR_DATA(IP7_22_21, CC5_TMS), | ||
1158 | PINMUX_IPSR_DATA(IP7_24_23, SD0_DAT2), | ||
1159 | PINMUX_IPSR_DATA(IP7_24_23, ATARD1), | ||
1160 | PINMUX_IPSR_DATA(IP7_24_23, TX2_B), | ||
1161 | PINMUX_IPSR_DATA(IP7_24_23, CC5_TCK), | ||
1162 | PINMUX_IPSR_DATA(IP7_26_25, SD0_DAT3), | ||
1163 | PINMUX_IPSR_DATA(IP7_26_25, ATAWR1), | ||
1164 | PINMUX_IPSR_MODSEL_DATA(IP7_26_25, RX2_B, SEL_SCIF2_1), | ||
1165 | PINMUX_IPSR_DATA(IP7_26_25, CC5_TDI), | ||
1166 | PINMUX_IPSR_DATA(IP7_28_27, SD0_CD), | ||
1167 | PINMUX_IPSR_MODSEL_DATA(IP7_28_27, DREQ2, SEL_EXBUS2_0), | ||
1168 | PINMUX_IPSR_MODSEL_DATA(IP7_28_27, RTS1_B_TANS_B, SEL_SCIF1_1), | ||
1169 | PINMUX_IPSR_DATA(IP7_30_29, SD0_WP), | ||
1170 | PINMUX_IPSR_DATA(IP7_30_29, DACK2), | ||
1171 | PINMUX_IPSR_MODSEL_DATA(IP7_30_29, CTS1_B, SEL_SCIF1_1), | ||
1172 | |||
1173 | PINMUX_IPSR_DATA(IP8_3_0, HSPI_CLK0), | ||
1174 | PINMUX_IPSR_MODSEL_DATA(IP8_3_0, CTS0, SEL_SCIF0_0), | ||
1175 | PINMUX_IPSR_DATA(IP8_3_0, USB_OVC0), | ||
1176 | PINMUX_IPSR_DATA(IP8_3_0, AD_CLK), | ||
1177 | PINMUX_IPSR_DATA(IP8_3_0, CC5_STATE4), | ||
1178 | PINMUX_IPSR_DATA(IP8_3_0, CC5_STATE12), | ||
1179 | PINMUX_IPSR_DATA(IP8_3_0, CC5_STATE20), | ||
1180 | PINMUX_IPSR_DATA(IP8_3_0, CC5_STATE28), | ||
1181 | PINMUX_IPSR_DATA(IP8_3_0, CC5_STATE36), | ||
1182 | PINMUX_IPSR_DATA(IP8_7_4, HSPI_CS0), | ||
1183 | PINMUX_IPSR_MODSEL_DATA(IP8_7_4, RTS0_TANS, SEL_SCIF0_0), | ||
1184 | PINMUX_IPSR_DATA(IP8_7_4, USB_OVC1), | ||
1185 | PINMUX_IPSR_DATA(IP8_7_4, AD_DI), | ||
1186 | PINMUX_IPSR_DATA(IP8_7_4, CC5_STATE5), | ||
1187 | PINMUX_IPSR_DATA(IP8_7_4, CC5_STATE13), | ||
1188 | PINMUX_IPSR_DATA(IP8_7_4, CC5_STATE21), | ||
1189 | PINMUX_IPSR_DATA(IP8_7_4, CC5_STATE29), | ||
1190 | PINMUX_IPSR_DATA(IP8_7_4, CC5_STATE37), | ||
1191 | PINMUX_IPSR_DATA(IP8_11_8, HSPI_TX0), | ||
1192 | PINMUX_IPSR_DATA(IP8_11_8, TX0), | ||
1193 | PINMUX_IPSR_DATA(IP8_11_8, CAN_DEBUG_HW_TRIGGER), | ||
1194 | PINMUX_IPSR_DATA(IP8_11_8, AD_DO), | ||
1195 | PINMUX_IPSR_DATA(IP8_11_8, CC5_STATE6), | ||
1196 | PINMUX_IPSR_DATA(IP8_11_8, CC5_STATE14), | ||
1197 | PINMUX_IPSR_DATA(IP8_11_8, CC5_STATE22), | ||
1198 | PINMUX_IPSR_DATA(IP8_11_8, CC5_STATE30), | ||
1199 | PINMUX_IPSR_DATA(IP8_11_8, CC5_STATE38), | ||
1200 | PINMUX_IPSR_DATA(IP8_15_12, HSPI_RX0), | ||
1201 | PINMUX_IPSR_MODSEL_DATA(IP8_15_12, RX0, SEL_SCIF0_0), | ||
1202 | PINMUX_IPSR_DATA(IP8_15_12, CAN_STEP0), | ||
1203 | PINMUX_IPSR_DATA(IP8_15_12, AD_NCS), | ||
1204 | PINMUX_IPSR_DATA(IP8_15_12, CC5_STATE7), | ||
1205 | PINMUX_IPSR_DATA(IP8_15_12, CC5_STATE15), | ||
1206 | PINMUX_IPSR_DATA(IP8_15_12, CC5_STATE23), | ||
1207 | PINMUX_IPSR_DATA(IP8_15_12, CC5_STATE31), | ||
1208 | PINMUX_IPSR_DATA(IP8_15_12, CC5_STATE39), | ||
1209 | PINMUX_IPSR_DATA(IP8_17_16, FMCLK), | ||
1210 | PINMUX_IPSR_DATA(IP8_17_16, RDS_CLK), | ||
1211 | PINMUX_IPSR_DATA(IP8_17_16, PCMOE), | ||
1212 | PINMUX_IPSR_DATA(IP8_18, BPFCLK), | ||
1213 | PINMUX_IPSR_DATA(IP8_18, PCMWE), | ||
1214 | PINMUX_IPSR_DATA(IP8_19, FMIN), | ||
1215 | PINMUX_IPSR_DATA(IP8_19, RDS_DATA), | ||
1216 | PINMUX_IPSR_DATA(IP8_20, VI0_CLK), | ||
1217 | PINMUX_IPSR_DATA(IP8_20, MMC1_CLK), | ||
1218 | PINMUX_IPSR_DATA(IP8_22_21, VI0_CLKENB), | ||
1219 | PINMUX_IPSR_DATA(IP8_22_21, TX1_C), | ||
1220 | PINMUX_IPSR_DATA(IP8_22_21, HTX1_B), | ||
1221 | PINMUX_IPSR_DATA(IP8_22_21, MT1_SYNC), | ||
1222 | PINMUX_IPSR_DATA(IP8_24_23, VI0_FIELD), | ||
1223 | PINMUX_IPSR_MODSEL_DATA(IP8_24_23, RX1_C, SEL_SCIF1_2), | ||
1224 | PINMUX_IPSR_MODSEL_DATA(IP8_24_23, HRX1_B, SEL_HSCIF1_1), | ||
1225 | PINMUX_IPSR_DATA(IP8_27_25, VI0_HSYNC), | ||
1226 | PINMUX_IPSR_MODSEL_DATA(IP8_27_25, VI0_DATA0_B_VI0_B0_B, SEL_VI0_1), | ||
1227 | PINMUX_IPSR_MODSEL_DATA(IP8_27_25, CTS1_C, SEL_SCIF1_2), | ||
1228 | PINMUX_IPSR_DATA(IP8_27_25, TX4_D), | ||
1229 | PINMUX_IPSR_DATA(IP8_27_25, MMC1_CMD), | ||
1230 | PINMUX_IPSR_MODSEL_DATA(IP8_27_25, HSCK1_B, SEL_HSCIF1_1), | ||
1231 | PINMUX_IPSR_DATA(IP8_30_28, VI0_VSYNC), | ||
1232 | PINMUX_IPSR_MODSEL_DATA(IP8_30_28, VI0_DATA1_B_VI0_B1_B, SEL_VI0_1), | ||
1233 | PINMUX_IPSR_MODSEL_DATA(IP8_30_28, RTS1_C_TANS_C, SEL_SCIF1_2), | ||
1234 | PINMUX_IPSR_MODSEL_DATA(IP8_30_28, RX4_D, SEL_SCIF4_3), | ||
1235 | PINMUX_IPSR_MODSEL_DATA(IP8_30_28, PWMFSW0_C, SEL_PWMFSW_2), | ||
1236 | |||
1237 | PINMUX_IPSR_MODSEL_DATA(IP9_1_0, VI0_DATA0_VI0_B0, SEL_VI0_0), | ||
1238 | PINMUX_IPSR_MODSEL_DATA(IP9_1_0, HRTS1_B, SEL_HSCIF1_1), | ||
1239 | PINMUX_IPSR_DATA(IP9_1_0, MT1_VCXO), | ||
1240 | PINMUX_IPSR_MODSEL_DATA(IP9_3_2, VI0_DATA1_VI0_B1, SEL_VI0_0), | ||
1241 | PINMUX_IPSR_MODSEL_DATA(IP9_3_2, HCTS1_B, SEL_HSCIF1_1), | ||
1242 | PINMUX_IPSR_DATA(IP9_3_2, MT1_PWM), | ||
1243 | PINMUX_IPSR_DATA(IP9_4, VI0_DATA2_VI0_B2), | ||
1244 | PINMUX_IPSR_DATA(IP9_4, MMC1_D0), | ||
1245 | PINMUX_IPSR_DATA(IP9_5, VI0_DATA3_VI0_B3), | ||
1246 | PINMUX_IPSR_DATA(IP9_5, MMC1_D1), | ||
1247 | PINMUX_IPSR_DATA(IP9_6, VI0_DATA4_VI0_B4), | ||
1248 | PINMUX_IPSR_DATA(IP9_6, MMC1_D2), | ||
1249 | PINMUX_IPSR_DATA(IP9_7, VI0_DATA5_VI0_B5), | ||
1250 | PINMUX_IPSR_DATA(IP9_7, MMC1_D3), | ||
1251 | PINMUX_IPSR_DATA(IP9_9_8, VI0_DATA6_VI0_B6), | ||
1252 | PINMUX_IPSR_DATA(IP9_9_8, MMC1_D4), | ||
1253 | PINMUX_IPSR_DATA(IP9_9_8, ARM_TRACEDATA_0), | ||
1254 | PINMUX_IPSR_DATA(IP9_11_10, VI0_DATA7_VI0_B7), | ||
1255 | PINMUX_IPSR_DATA(IP9_11_10, MMC1_D5), | ||
1256 | PINMUX_IPSR_DATA(IP9_11_10, ARM_TRACEDATA_1), | ||
1257 | PINMUX_IPSR_DATA(IP9_13_12, VI0_G0), | ||
1258 | PINMUX_IPSR_MODSEL_DATA(IP9_13_12, SSI_SCK78_C, SEL_SSI7_2), | ||
1259 | PINMUX_IPSR_MODSEL_DATA(IP9_13_12, IRQ0, SEL_INT0_0), | ||
1260 | PINMUX_IPSR_DATA(IP9_13_12, ARM_TRACEDATA_2), | ||
1261 | PINMUX_IPSR_DATA(IP9_15_14, VI0_G1), | ||
1262 | PINMUX_IPSR_MODSEL_DATA(IP9_15_14, SSI_WS78_C, SEL_SSI7_2), | ||
1263 | PINMUX_IPSR_MODSEL_DATA(IP9_15_14, IRQ1, SEL_INT1_0), | ||
1264 | PINMUX_IPSR_DATA(IP9_15_14, ARM_TRACEDATA_3), | ||
1265 | PINMUX_IPSR_DATA(IP9_18_16, VI0_G2), | ||
1266 | PINMUX_IPSR_DATA(IP9_18_16, ETH_TXD1), | ||
1267 | PINMUX_IPSR_DATA(IP9_18_16, MMC1_D6), | ||
1268 | PINMUX_IPSR_DATA(IP9_18_16, ARM_TRACEDATA_4), | ||
1269 | PINMUX_IPSR_DATA(IP9_18_16, TS_SPSYNC0), | ||
1270 | PINMUX_IPSR_DATA(IP9_21_19, VI0_G3), | ||
1271 | PINMUX_IPSR_DATA(IP9_21_19, ETH_CRS_DV), | ||
1272 | PINMUX_IPSR_DATA(IP9_21_19, MMC1_D7), | ||
1273 | PINMUX_IPSR_DATA(IP9_21_19, ARM_TRACEDATA_5), | ||
1274 | PINMUX_IPSR_DATA(IP9_21_19, TS_SDAT0), | ||
1275 | PINMUX_IPSR_DATA(IP9_23_22, VI0_G4), | ||
1276 | PINMUX_IPSR_DATA(IP9_23_22, ETH_TX_EN), | ||
1277 | PINMUX_IPSR_MODSEL_DATA(IP9_23_22, SD2_DAT0_B, SEL_SD2_1), | ||
1278 | PINMUX_IPSR_DATA(IP9_23_22, ARM_TRACEDATA_6), | ||
1279 | PINMUX_IPSR_DATA(IP9_25_24, VI0_G5), | ||
1280 | PINMUX_IPSR_DATA(IP9_25_24, ETH_RX_ER), | ||
1281 | PINMUX_IPSR_MODSEL_DATA(IP9_25_24, SD2_DAT1_B, SEL_SD2_1), | ||
1282 | PINMUX_IPSR_DATA(IP9_25_24, ARM_TRACEDATA_7), | ||
1283 | PINMUX_IPSR_DATA(IP9_27_26, VI0_G6), | ||
1284 | PINMUX_IPSR_DATA(IP9_27_26, ETH_RXD0), | ||
1285 | PINMUX_IPSR_MODSEL_DATA(IP9_27_26, SD2_DAT2_B, SEL_SD2_1), | ||
1286 | PINMUX_IPSR_DATA(IP9_27_26, ARM_TRACEDATA_8), | ||
1287 | PINMUX_IPSR_DATA(IP9_29_28, VI0_G7), | ||
1288 | PINMUX_IPSR_DATA(IP9_29_28, ETH_RXD1), | ||
1289 | PINMUX_IPSR_MODSEL_DATA(IP9_29_28, SD2_DAT3_B, SEL_SD2_1), | ||
1290 | PINMUX_IPSR_DATA(IP9_29_28, ARM_TRACEDATA_9), | ||
1291 | |||
1292 | PINMUX_IPSR_DATA(IP10_2_0, VI0_R0), | ||
1293 | PINMUX_IPSR_MODSEL_DATA(IP10_2_0, SSI_SDATA7_C, SEL_SSI7_2), | ||
1294 | PINMUX_IPSR_MODSEL_DATA(IP10_2_0, SCK1_C, SEL_SCIF1_2), | ||
1295 | PINMUX_IPSR_MODSEL_DATA(IP10_2_0, DREQ1_B, SEL_EXBUS1_0), | ||
1296 | PINMUX_IPSR_DATA(IP10_2_0, ARM_TRACEDATA_10), | ||
1297 | PINMUX_IPSR_MODSEL_DATA(IP10_2_0, DREQ0_C, SEL_EXBUS0_2), | ||
1298 | PINMUX_IPSR_DATA(IP10_5_3, VI0_R1), | ||
1299 | PINMUX_IPSR_MODSEL_DATA(IP10_5_3, SSI_SDATA8_C, SEL_SSI8_2), | ||
1300 | PINMUX_IPSR_DATA(IP10_5_3, DACK1_B), | ||
1301 | PINMUX_IPSR_DATA(IP10_5_3, ARM_TRACEDATA_11), | ||
1302 | PINMUX_IPSR_DATA(IP10_5_3, DACK0_C), | ||
1303 | PINMUX_IPSR_DATA(IP10_5_3, DRACK0_C), | ||
1304 | PINMUX_IPSR_DATA(IP10_8_6, VI0_R2), | ||
1305 | PINMUX_IPSR_DATA(IP10_8_6, ETH_LINK), | ||
1306 | PINMUX_IPSR_DATA(IP10_8_6, SD2_CLK_B), | ||
1307 | PINMUX_IPSR_MODSEL_DATA(IP10_8_6, IRQ2, SEL_INT2_0), | ||
1308 | PINMUX_IPSR_DATA(IP10_8_6, ARM_TRACEDATA_12), | ||
1309 | PINMUX_IPSR_DATA(IP10_11_9, VI0_R3), | ||
1310 | PINMUX_IPSR_DATA(IP10_11_9, ETH_MAGIC), | ||
1311 | PINMUX_IPSR_MODSEL_DATA(IP10_11_9, SD2_CMD_B, SEL_SD2_1), | ||
1312 | PINMUX_IPSR_MODSEL_DATA(IP10_11_9, IRQ3, SEL_INT3_0), | ||
1313 | PINMUX_IPSR_DATA(IP10_11_9, ARM_TRACEDATA_13), | ||
1314 | PINMUX_IPSR_DATA(IP10_14_12, VI0_R4), | ||
1315 | PINMUX_IPSR_DATA(IP10_14_12, ETH_REFCLK), | ||
1316 | PINMUX_IPSR_MODSEL_DATA(IP10_14_12, SD2_CD_B, SEL_SD2_1), | ||
1317 | PINMUX_IPSR_MODSEL_DATA(IP10_14_12, HSPI_CLK1_B, SEL_HSPI1_1), | ||
1318 | PINMUX_IPSR_DATA(IP10_14_12, ARM_TRACEDATA_14), | ||
1319 | PINMUX_IPSR_DATA(IP10_14_12, MT1_CLK), | ||
1320 | PINMUX_IPSR_DATA(IP10_14_12, TS_SCK0), | ||
1321 | PINMUX_IPSR_DATA(IP10_17_15, VI0_R5), | ||
1322 | PINMUX_IPSR_DATA(IP10_17_15, ETH_TXD0), | ||
1323 | PINMUX_IPSR_MODSEL_DATA(IP10_17_15, SD2_WP_B, SEL_SD2_1), | ||
1324 | PINMUX_IPSR_MODSEL_DATA(IP10_17_15, HSPI_CS1_B, SEL_HSPI1_1), | ||
1325 | PINMUX_IPSR_DATA(IP10_17_15, ARM_TRACEDATA_15), | ||
1326 | PINMUX_IPSR_DATA(IP10_17_15, MT1_D), | ||
1327 | PINMUX_IPSR_DATA(IP10_17_15, TS_SDEN0), | ||
1328 | PINMUX_IPSR_DATA(IP10_20_18, VI0_R6), | ||
1329 | PINMUX_IPSR_DATA(IP10_20_18, ETH_MDC), | ||
1330 | PINMUX_IPSR_MODSEL_DATA(IP10_20_18, DREQ2_C, SEL_EXBUS2_2), | ||
1331 | PINMUX_IPSR_DATA(IP10_20_18, HSPI_TX1_B), | ||
1332 | PINMUX_IPSR_DATA(IP10_20_18, TRACECLK), | ||
1333 | PINMUX_IPSR_DATA(IP10_20_18, MT1_BEN), | ||
1334 | PINMUX_IPSR_MODSEL_DATA(IP10_20_18, PWMFSW0_D, SEL_PWMFSW_3), | ||
1335 | PINMUX_IPSR_DATA(IP10_23_21, VI0_R7), | ||
1336 | PINMUX_IPSR_DATA(IP10_23_21, ETH_MDIO), | ||
1337 | PINMUX_IPSR_DATA(IP10_23_21, DACK2_C), | ||
1338 | PINMUX_IPSR_MODSEL_DATA(IP10_23_21, HSPI_RX1_B, SEL_HSPI1_1), | ||
1339 | PINMUX_IPSR_MODSEL_DATA(IP10_23_21, SCIF_CLK_D, SEL_SCIF_3), | ||
1340 | PINMUX_IPSR_DATA(IP10_23_21, TRACECTL), | ||
1341 | PINMUX_IPSR_DATA(IP10_23_21, MT1_PEN), | ||
1342 | PINMUX_IPSR_DATA(IP10_25_24, VI1_CLK), | ||
1343 | PINMUX_IPSR_MODSEL_DATA(IP10_25_24, SIM_D, SEL_SIM_0), | ||
1344 | PINMUX_IPSR_MODSEL_DATA(IP10_25_24, SDA3, SEL_I2C3_0), | ||
1345 | PINMUX_IPSR_DATA(IP10_28_26, VI1_HSYNC), | ||
1346 | PINMUX_IPSR_DATA(IP10_28_26, VI3_CLK), | ||
1347 | PINMUX_IPSR_DATA(IP10_28_26, SSI_SCK4), | ||
1348 | PINMUX_IPSR_MODSEL_DATA(IP10_28_26, GPS_SIGN_C, SEL_GPS_2), | ||
1349 | PINMUX_IPSR_MODSEL_DATA(IP10_28_26, PWMFSW0_E, SEL_PWMFSW_4), | ||
1350 | PINMUX_IPSR_DATA(IP10_31_29, VI1_VSYNC), | ||
1351 | PINMUX_IPSR_DATA(IP10_31_29, AUDIO_CLKOUT_C), | ||
1352 | PINMUX_IPSR_DATA(IP10_31_29, SSI_WS4), | ||
1353 | PINMUX_IPSR_DATA(IP10_31_29, SIM_CLK), | ||
1354 | PINMUX_IPSR_MODSEL_DATA(IP10_31_29, GPS_MAG_C, SEL_GPS_2), | ||
1355 | PINMUX_IPSR_DATA(IP10_31_29, SPV_TRST), | ||
1356 | PINMUX_IPSR_MODSEL_DATA(IP10_31_29, SCL3, SEL_I2C3_0), | ||
1357 | |||
1358 | PINMUX_IPSR_DATA(IP11_2_0, VI1_DATA0_VI1_B0), | ||
1359 | PINMUX_IPSR_MODSEL_DATA(IP11_2_0, SD2_DAT0, SEL_SD2_0), | ||
1360 | PINMUX_IPSR_DATA(IP11_2_0, SIM_RST), | ||
1361 | PINMUX_IPSR_DATA(IP11_2_0, SPV_TCK), | ||
1362 | PINMUX_IPSR_DATA(IP11_2_0, ADICLK_B), | ||
1363 | PINMUX_IPSR_DATA(IP11_5_3, VI1_DATA1_VI1_B1), | ||
1364 | PINMUX_IPSR_MODSEL_DATA(IP11_5_3, SD2_DAT1, SEL_SD2_0), | ||
1365 | PINMUX_IPSR_DATA(IP11_5_3, MT0_CLK), | ||
1366 | PINMUX_IPSR_DATA(IP11_5_3, SPV_TMS), | ||
1367 | PINMUX_IPSR_MODSEL_DATA(IP11_5_3, ADICS_B_SAMP_B, SEL_ADI_1), | ||
1368 | PINMUX_IPSR_DATA(IP11_8_6, VI1_DATA2_VI1_B2), | ||
1369 | PINMUX_IPSR_MODSEL_DATA(IP11_8_6, SD2_DAT2, SEL_SD2_0), | ||
1370 | PINMUX_IPSR_DATA(IP11_8_6, MT0_D), | ||
1371 | PINMUX_IPSR_DATA(IP11_8_6, SPVTDI), | ||
1372 | PINMUX_IPSR_MODSEL_DATA(IP11_8_6, ADIDATA_B, SEL_ADI_1), | ||
1373 | PINMUX_IPSR_DATA(IP11_11_9, VI1_DATA3_VI1_B3), | ||
1374 | PINMUX_IPSR_MODSEL_DATA(IP11_11_9, SD2_DAT3, SEL_SD2_0), | ||
1375 | PINMUX_IPSR_DATA(IP11_11_9, MT0_BEN), | ||
1376 | PINMUX_IPSR_DATA(IP11_11_9, SPV_TDO), | ||
1377 | PINMUX_IPSR_DATA(IP11_11_9, ADICHS0_B), | ||
1378 | PINMUX_IPSR_DATA(IP11_14_12, VI1_DATA4_VI1_B4), | ||
1379 | PINMUX_IPSR_DATA(IP11_14_12, SD2_CLK), | ||
1380 | PINMUX_IPSR_DATA(IP11_14_12, MT0_PEN), | ||
1381 | PINMUX_IPSR_DATA(IP11_14_12, SPA_TRST), | ||
1382 | PINMUX_IPSR_MODSEL_DATA(IP11_14_12, HSPI_CLK1_D, SEL_HSPI1_3), | ||
1383 | PINMUX_IPSR_DATA(IP11_14_12, ADICHS1_B), | ||
1384 | PINMUX_IPSR_DATA(IP11_17_15, VI1_DATA5_VI1_B5), | ||
1385 | PINMUX_IPSR_MODSEL_DATA(IP11_17_15, SD2_CMD, SEL_SD2_0), | ||
1386 | PINMUX_IPSR_DATA(IP11_17_15, MT0_SYNC), | ||
1387 | PINMUX_IPSR_DATA(IP11_17_15, SPA_TCK), | ||
1388 | PINMUX_IPSR_MODSEL_DATA(IP11_17_15, HSPI_CS1_D, SEL_HSPI1_3), | ||
1389 | PINMUX_IPSR_DATA(IP11_17_15, ADICHS2_B), | ||
1390 | PINMUX_IPSR_DATA(IP11_20_18, VI1_DATA6_VI1_B6), | ||
1391 | PINMUX_IPSR_MODSEL_DATA(IP11_20_18, SD2_CD, SEL_SD2_0), | ||
1392 | PINMUX_IPSR_DATA(IP11_20_18, MT0_VCXO), | ||
1393 | PINMUX_IPSR_DATA(IP11_20_18, SPA_TMS), | ||
1394 | PINMUX_IPSR_DATA(IP11_20_18, HSPI_TX1_D), | ||
1395 | PINMUX_IPSR_DATA(IP11_23_21, VI1_DATA7_VI1_B7), | ||
1396 | PINMUX_IPSR_MODSEL_DATA(IP11_23_21, SD2_WP, SEL_SD2_0), | ||
1397 | PINMUX_IPSR_DATA(IP11_23_21, MT0_PWM), | ||
1398 | PINMUX_IPSR_DATA(IP11_23_21, SPA_TDI), | ||
1399 | PINMUX_IPSR_MODSEL_DATA(IP11_23_21, HSPI_RX1_D, SEL_HSPI1_3), | ||
1400 | PINMUX_IPSR_DATA(IP11_26_24, VI1_G0), | ||
1401 | PINMUX_IPSR_DATA(IP11_26_24, VI3_DATA0), | ||
1402 | PINMUX_IPSR_DATA(IP11_26_24, DU1_DOTCLKOUT1), | ||
1403 | PINMUX_IPSR_DATA(IP11_26_24, TS_SCK1), | ||
1404 | PINMUX_IPSR_MODSEL_DATA(IP11_26_24, DREQ2_B, SEL_EXBUS2_1), | ||
1405 | PINMUX_IPSR_DATA(IP11_26_24, TX2), | ||
1406 | PINMUX_IPSR_DATA(IP11_26_24, SPA_TDO), | ||
1407 | PINMUX_IPSR_MODSEL_DATA(IP11_26_24, HCTS0_B, SEL_HSCIF0_1), | ||
1408 | PINMUX_IPSR_DATA(IP11_29_27, VI1_G1), | ||
1409 | PINMUX_IPSR_DATA(IP11_29_27, VI3_DATA1), | ||
1410 | PINMUX_IPSR_DATA(IP11_29_27, SSI_SCK1), | ||
1411 | PINMUX_IPSR_DATA(IP11_29_27, TS_SDEN1), | ||
1412 | PINMUX_IPSR_DATA(IP11_29_27, DACK2_B), | ||
1413 | PINMUX_IPSR_MODSEL_DATA(IP11_29_27, RX2, SEL_SCIF2_0), | ||
1414 | PINMUX_IPSR_MODSEL_DATA(IP11_29_27, HRTS0_B, SEL_HSCIF0_1), | ||
1415 | |||
1416 | PINMUX_IPSR_DATA(IP12_2_0, VI1_G2), | ||
1417 | PINMUX_IPSR_DATA(IP12_2_0, VI3_DATA2), | ||
1418 | PINMUX_IPSR_DATA(IP12_2_0, SSI_WS1), | ||
1419 | PINMUX_IPSR_DATA(IP12_2_0, TS_SPSYNC1), | ||
1420 | PINMUX_IPSR_MODSEL_DATA(IP12_2_0, SCK2, SEL_SCIF2_0), | ||
1421 | PINMUX_IPSR_MODSEL_DATA(IP12_2_0, HSCK0_B, SEL_HSCIF0_1), | ||
1422 | PINMUX_IPSR_DATA(IP12_5_3, VI1_G3), | ||
1423 | PINMUX_IPSR_DATA(IP12_5_3, VI3_DATA3), | ||
1424 | PINMUX_IPSR_DATA(IP12_5_3, SSI_SCK2), | ||
1425 | PINMUX_IPSR_DATA(IP12_5_3, TS_SDAT1), | ||
1426 | PINMUX_IPSR_MODSEL_DATA(IP12_5_3, SCL1_C, SEL_I2C1_2), | ||
1427 | PINMUX_IPSR_DATA(IP12_5_3, HTX0_B), | ||
1428 | PINMUX_IPSR_DATA(IP12_8_6, VI1_G4), | ||
1429 | PINMUX_IPSR_DATA(IP12_8_6, VI3_DATA4), | ||
1430 | PINMUX_IPSR_DATA(IP12_8_6, SSI_WS2), | ||
1431 | PINMUX_IPSR_MODSEL_DATA(IP12_8_6, SDA1_C, SEL_I2C1_2), | ||
1432 | PINMUX_IPSR_DATA(IP12_8_6, SIM_RST_B), | ||
1433 | PINMUX_IPSR_MODSEL_DATA(IP12_8_6, HRX0_B, SEL_HSCIF0_1), | ||
1434 | PINMUX_IPSR_DATA(IP12_11_9, VI1_G5), | ||
1435 | PINMUX_IPSR_DATA(IP12_11_9, VI3_DATA5), | ||
1436 | PINMUX_IPSR_MODSEL_DATA(IP12_11_9, GPS_CLK, SEL_GPS_0), | ||
1437 | PINMUX_IPSR_DATA(IP12_11_9, FSE), | ||
1438 | PINMUX_IPSR_DATA(IP12_11_9, TX4_B), | ||
1439 | PINMUX_IPSR_MODSEL_DATA(IP12_11_9, SIM_D_B, SEL_SIM_1), | ||
1440 | PINMUX_IPSR_DATA(IP12_14_12, VI1_G6), | ||
1441 | PINMUX_IPSR_DATA(IP12_14_12, VI3_DATA6), | ||
1442 | PINMUX_IPSR_MODSEL_DATA(IP12_14_12, GPS_SIGN, SEL_GPS_0), | ||
1443 | PINMUX_IPSR_DATA(IP12_14_12, FRB), | ||
1444 | PINMUX_IPSR_MODSEL_DATA(IP12_14_12, RX4_B, SEL_SCIF4_1), | ||
1445 | PINMUX_IPSR_DATA(IP12_14_12, SIM_CLK_B), | ||
1446 | PINMUX_IPSR_DATA(IP12_17_15, VI1_G7), | ||
1447 | PINMUX_IPSR_DATA(IP12_17_15, VI3_DATA7), | ||
1448 | PINMUX_IPSR_MODSEL_DATA(IP12_17_15, GPS_MAG, SEL_GPS_0), | ||
1449 | PINMUX_IPSR_DATA(IP12_17_15, FCE), | ||
1450 | PINMUX_IPSR_MODSEL_DATA(IP12_17_15, SCK4_B, SEL_SCIF4_1), | ||
1451 | }; | ||
1452 | |||
1453 | static struct pinmux_gpio pinmux_gpios[] = { | ||
1454 | PINMUX_GPIO_GP_ALL(), | ||
1455 | GPIO_FN(AVS1), GPIO_FN(AVS2), GPIO_FN(A17), GPIO_FN(A18), | ||
1456 | GPIO_FN(A19), | ||
1457 | |||
1458 | /* IPSR0 */ | ||
1459 | GPIO_FN(USB_PENC2), GPIO_FN(SCK0), GPIO_FN(PWM1), GPIO_FN(PWMFSW0), | ||
1460 | GPIO_FN(SCIF_CLK), GPIO_FN(TCLK0_C), GPIO_FN(BS), GPIO_FN(SD1_DAT2), | ||
1461 | GPIO_FN(MMC0_D2), GPIO_FN(FD2), GPIO_FN(ATADIR0), GPIO_FN(SDSELF), | ||
1462 | GPIO_FN(HCTS1), GPIO_FN(TX4_C), GPIO_FN(A0), GPIO_FN(SD1_DAT3), | ||
1463 | GPIO_FN(MMC0_D3), GPIO_FN(FD3), GPIO_FN(A20), GPIO_FN(TX5_D), | ||
1464 | GPIO_FN(HSPI_TX2_B), GPIO_FN(A21), GPIO_FN(SCK5_D), | ||
1465 | GPIO_FN(HSPI_CLK2_B), GPIO_FN(A22), GPIO_FN(RX5_D), | ||
1466 | GPIO_FN(HSPI_RX2_B), GPIO_FN(VI1_R0), GPIO_FN(A23), GPIO_FN(FCLE), | ||
1467 | GPIO_FN(HSPI_CLK2), GPIO_FN(VI1_R1), GPIO_FN(A24), GPIO_FN(SD1_CD), | ||
1468 | GPIO_FN(MMC0_D4), GPIO_FN(FD4), GPIO_FN(HSPI_CS2), GPIO_FN(VI1_R2), | ||
1469 | GPIO_FN(SSI_WS78_B), GPIO_FN(A25), GPIO_FN(SD1_WP), GPIO_FN(MMC0_D5), | ||
1470 | GPIO_FN(FD5), GPIO_FN(HSPI_RX2), GPIO_FN(VI1_R3), GPIO_FN(TX5_B), | ||
1471 | GPIO_FN(SSI_SDATA7_B), GPIO_FN(CTS0_B), GPIO_FN(CLKOUT), | ||
1472 | GPIO_FN(TX3C_IRDA_TX_C), GPIO_FN(PWM0_B), GPIO_FN(CS0), | ||
1473 | GPIO_FN(HSPI_CS2_B), GPIO_FN(CS1_A26), GPIO_FN(HSPI_TX2), | ||
1474 | GPIO_FN(SDSELF_B), GPIO_FN(RD_WR), GPIO_FN(FWE), GPIO_FN(ATAG0), | ||
1475 | GPIO_FN(VI1_R7), GPIO_FN(HRTS1), GPIO_FN(RX4_C), | ||
1476 | |||
1477 | /* IPSR1 */ | ||
1478 | GPIO_FN(EX_CS0), GPIO_FN(RX3_C_IRDA_RX_C), GPIO_FN(MMC0_D6), | ||
1479 | GPIO_FN(FD6), GPIO_FN(EX_CS1), GPIO_FN(MMC0_D7), GPIO_FN(FD7), | ||
1480 | GPIO_FN(EX_CS2), GPIO_FN(SD1_CLK), GPIO_FN(MMC0_CLK), GPIO_FN(FALE), | ||
1481 | GPIO_FN(ATACS00), GPIO_FN(EX_CS3), GPIO_FN(SD1_CMD), GPIO_FN(MMC0_CMD), | ||
1482 | GPIO_FN(FRE), GPIO_FN(ATACS10), GPIO_FN(VI1_R4), GPIO_FN(RX5_B), | ||
1483 | GPIO_FN(HSCK1), GPIO_FN(SSI_SDATA8_B), GPIO_FN(RTS0_B_TANS_B), | ||
1484 | GPIO_FN(SSI_SDATA9), GPIO_FN(EX_CS4), GPIO_FN(SD1_DAT0), | ||
1485 | GPIO_FN(MMC0_D0), GPIO_FN(FD0), GPIO_FN(ATARD0), GPIO_FN(VI1_R5), | ||
1486 | GPIO_FN(SCK5_B), GPIO_FN(HTX1), GPIO_FN(TX2_E), GPIO_FN(TX0_B), | ||
1487 | GPIO_FN(SSI_SCK9), GPIO_FN(EX_CS5), GPIO_FN(SD1_DAT1), | ||
1488 | GPIO_FN(MMC0_D1), GPIO_FN(FD1), GPIO_FN(ATAWR0), GPIO_FN(VI1_R6), | ||
1489 | GPIO_FN(HRX1), GPIO_FN(RX2_E), GPIO_FN(RX0_B), GPIO_FN(SSI_WS9), | ||
1490 | GPIO_FN(MLB_CLK), GPIO_FN(PWM2), GPIO_FN(SCK4), GPIO_FN(MLB_SIG), | ||
1491 | GPIO_FN(PWM3), GPIO_FN(TX4), GPIO_FN(MLB_DAT), GPIO_FN(PWM4), | ||
1492 | GPIO_FN(RX4), GPIO_FN(HTX0), GPIO_FN(TX1), GPIO_FN(SDATA), | ||
1493 | GPIO_FN(CTS0_C), GPIO_FN(SUB_TCK), GPIO_FN(CC5_STATE2), | ||
1494 | GPIO_FN(CC5_STATE10), GPIO_FN(CC5_STATE18), GPIO_FN(CC5_STATE26), | ||
1495 | GPIO_FN(CC5_STATE34), | ||
1496 | |||
1497 | /* IPSR2 */ | ||
1498 | GPIO_FN(HRX0), GPIO_FN(RX1), GPIO_FN(SCKZ), GPIO_FN(RTS0_C_TANS_C), | ||
1499 | GPIO_FN(SUB_TDI), GPIO_FN(CC5_STATE3), GPIO_FN(CC5_STATE11), | ||
1500 | GPIO_FN(CC5_STATE19), GPIO_FN(CC5_STATE27), GPIO_FN(CC5_STATE35), | ||
1501 | GPIO_FN(HSCK0), GPIO_FN(SCK1), GPIO_FN(MTS), GPIO_FN(PWM5), | ||
1502 | GPIO_FN(SCK0_C), GPIO_FN(SSI_SDATA9_B), GPIO_FN(SUB_TDO), | ||
1503 | GPIO_FN(CC5_STATE0), GPIO_FN(CC5_STATE8), GPIO_FN(CC5_STATE16), | ||
1504 | GPIO_FN(CC5_STATE24), GPIO_FN(CC5_STATE32), GPIO_FN(HCTS0), | ||
1505 | GPIO_FN(CTS1), GPIO_FN(STM), GPIO_FN(PWM0_D), GPIO_FN(RX0_C), | ||
1506 | GPIO_FN(SCIF_CLK_C), GPIO_FN(SUB_TRST), GPIO_FN(TCLK1_B), | ||
1507 | GPIO_FN(CC5_OSCOUT), GPIO_FN(HRTS0), GPIO_FN(RTS1_TANS), | ||
1508 | GPIO_FN(MDATA), GPIO_FN(TX0_C), GPIO_FN(SUB_TMS), GPIO_FN(CC5_STATE1), | ||
1509 | GPIO_FN(CC5_STATE9), GPIO_FN(CC5_STATE17), GPIO_FN(CC5_STATE25), | ||
1510 | GPIO_FN(CC5_STATE33), GPIO_FN(DU0_DR0), GPIO_FN(LCDOUT0), | ||
1511 | GPIO_FN(DREQ0), GPIO_FN(GPS_CLK_B), GPIO_FN(AUDATA0), | ||
1512 | GPIO_FN(TX5_C), GPIO_FN(DU0_DR1), GPIO_FN(LCDOUT1), GPIO_FN(DACK0), | ||
1513 | GPIO_FN(DRACK0), GPIO_FN(GPS_SIGN_B), GPIO_FN(AUDATA1), GPIO_FN(RX5_C), | ||
1514 | GPIO_FN(DU0_DR2), GPIO_FN(LCDOUT2), GPIO_FN(DU0_DR3), GPIO_FN(LCDOUT3), | ||
1515 | GPIO_FN(DU0_DR4), GPIO_FN(LCDOUT4), GPIO_FN(DU0_DR5), GPIO_FN(LCDOUT5), | ||
1516 | GPIO_FN(DU0_DR6), GPIO_FN(LCDOUT6), GPIO_FN(DU0_DR7), GPIO_FN(LCDOUT7), | ||
1517 | GPIO_FN(DU0_DG0), GPIO_FN(LCDOUT8), GPIO_FN(DREQ1), GPIO_FN(SCL2), | ||
1518 | GPIO_FN(AUDATA2), | ||
1519 | |||
1520 | /* IPSR3 */ | ||
1521 | GPIO_FN(DU0_DG1), GPIO_FN(LCDOUT9), GPIO_FN(DACK1), GPIO_FN(SDA2), | ||
1522 | GPIO_FN(AUDATA3), GPIO_FN(DU0_DG2), GPIO_FN(LCDOUT10), | ||
1523 | GPIO_FN(DU0_DG3), GPIO_FN(LCDOUT11), GPIO_FN(DU0_DG4), | ||
1524 | GPIO_FN(LCDOUT12), GPIO_FN(DU0_DG5), GPIO_FN(LCDOUT13), | ||
1525 | GPIO_FN(DU0_DG6), GPIO_FN(LCDOUT14), GPIO_FN(DU0_DG7), | ||
1526 | GPIO_FN(LCDOUT15), GPIO_FN(DU0_DB0), GPIO_FN(LCDOUT16), | ||
1527 | GPIO_FN(EX_WAIT1), GPIO_FN(SCL1), GPIO_FN(TCLK1), GPIO_FN(AUDATA4), | ||
1528 | GPIO_FN(DU0_DB1), GPIO_FN(LCDOUT17), GPIO_FN(EX_WAIT2), GPIO_FN(SDA1), | ||
1529 | GPIO_FN(GPS_MAG_B), GPIO_FN(AUDATA5), GPIO_FN(SCK5_C), | ||
1530 | GPIO_FN(DU0_DB2), GPIO_FN(LCDOUT18), GPIO_FN(DU0_DB3), | ||
1531 | GPIO_FN(LCDOUT19), GPIO_FN(DU0_DB4), GPIO_FN(LCDOUT20), | ||
1532 | GPIO_FN(DU0_DB5), GPIO_FN(LCDOUT21), GPIO_FN(DU0_DB6), | ||
1533 | GPIO_FN(LCDOUT22), GPIO_FN(DU0_DB7), GPIO_FN(LCDOUT23), | ||
1534 | GPIO_FN(DU0_DOTCLKIN), GPIO_FN(QSTVA_QVS), GPIO_FN(TX3_D_IRDA_TX_D), | ||
1535 | GPIO_FN(SCL3_B), GPIO_FN(DU0_DOTCLKOUT0), GPIO_FN(QCLK), | ||
1536 | GPIO_FN(DU0_DOTCLKOUT1), GPIO_FN(QSTVB_QVE), GPIO_FN(RX3_D_IRDA_RX_D), | ||
1537 | GPIO_FN(SDA3_B), GPIO_FN(SDA2_C), GPIO_FN(DACK0_B), GPIO_FN(DRACK0_B), | ||
1538 | GPIO_FN(DU0_EXHSYNC_DU0_HSYNC), GPIO_FN(QSTH_QHS), | ||
1539 | GPIO_FN(DU0_EXVSYNC_DU0_VSYNC), GPIO_FN(QSTB_QHE), | ||
1540 | GPIO_FN(DU0_EXODDF_DU0_ODDF_DISP_CDE), GPIO_FN(QCPV_QDE), | ||
1541 | GPIO_FN(CAN1_TX), GPIO_FN(TX2_C), GPIO_FN(SCL2_C), GPIO_FN(REMOCON), | ||
1542 | |||
1543 | /* IPSR4 */ | ||
1544 | GPIO_FN(DU0_DISP), GPIO_FN(QPOLA), GPIO_FN(CAN_CLK_C), GPIO_FN(SCK2_C), | ||
1545 | GPIO_FN(DU0_CDE), GPIO_FN(QPOLB), GPIO_FN(CAN1_RX), GPIO_FN(RX2_C), | ||
1546 | GPIO_FN(DREQ0_B), GPIO_FN(SSI_SCK78_B), GPIO_FN(SCK0_B), | ||
1547 | GPIO_FN(DU1_DR0), GPIO_FN(VI2_DATA0_VI2_B0), GPIO_FN(PWM6), | ||
1548 | GPIO_FN(SD3_CLK), GPIO_FN(TX3_E_IRDA_TX_E), GPIO_FN(AUDCK), | ||
1549 | GPIO_FN(PWMFSW0_B), GPIO_FN(DU1_DR1), GPIO_FN(VI2_DATA1_VI2_B1), | ||
1550 | GPIO_FN(PWM0), GPIO_FN(SD3_CMD), GPIO_FN(RX3_E_IRDA_RX_E), | ||
1551 | GPIO_FN(AUDSYNC), GPIO_FN(CTS0_D), GPIO_FN(DU1_DR2), GPIO_FN(VI2_G0), | ||
1552 | GPIO_FN(DU1_DR3), GPIO_FN(VI2_G1), GPIO_FN(DU1_DR4), GPIO_FN(VI2_G2), | ||
1553 | GPIO_FN(DU1_DR5), GPIO_FN(VI2_G3), GPIO_FN(DU1_DR6), GPIO_FN(VI2_G4), | ||
1554 | GPIO_FN(DU1_DR7), GPIO_FN(VI2_G5), GPIO_FN(DU1_DG0), | ||
1555 | GPIO_FN(VI2_DATA2_VI2_B2), GPIO_FN(SCL1_B), GPIO_FN(SD3_DAT2), | ||
1556 | GPIO_FN(SCK3_E), GPIO_FN(AUDATA6), GPIO_FN(TX0_D), GPIO_FN(DU1_DG1), | ||
1557 | GPIO_FN(VI2_DATA3_VI2_B3), GPIO_FN(SDA1_B), GPIO_FN(SD3_DAT3), | ||
1558 | GPIO_FN(SCK5), GPIO_FN(AUDATA7), GPIO_FN(RX0_D), GPIO_FN(DU1_DG2), | ||
1559 | GPIO_FN(VI2_G6), GPIO_FN(DU1_DG3), GPIO_FN(VI2_G7), GPIO_FN(DU1_DG4), | ||
1560 | GPIO_FN(VI2_R0), GPIO_FN(DU1_DG5), GPIO_FN(VI2_R1), GPIO_FN(DU1_DG6), | ||
1561 | GPIO_FN(VI2_R2), GPIO_FN(DU1_DG7), GPIO_FN(VI2_R3), GPIO_FN(DU1_DB0), | ||
1562 | GPIO_FN(VI2_DATA4_VI2_B4), GPIO_FN(SCL2_B), GPIO_FN(SD3_DAT0), | ||
1563 | GPIO_FN(TX5), GPIO_FN(SCK0_D), | ||
1564 | |||
1565 | /* IPSR5 */ | ||
1566 | GPIO_FN(DU1_DB1), GPIO_FN(VI2_DATA5_VI2_B5), GPIO_FN(SDA2_B), | ||
1567 | GPIO_FN(SD3_DAT1), GPIO_FN(RX5), GPIO_FN(RTS0_D_TANS_D), | ||
1568 | GPIO_FN(DU1_DB2), GPIO_FN(VI2_R4), GPIO_FN(DU1_DB3), GPIO_FN(VI2_R5), | ||
1569 | GPIO_FN(DU1_DB4), GPIO_FN(VI2_R6), GPIO_FN(DU1_DB5), GPIO_FN(VI2_R7), | ||
1570 | GPIO_FN(DU1_DB6), GPIO_FN(SCL2_D), GPIO_FN(DU1_DB7), GPIO_FN(SDA2_D), | ||
1571 | GPIO_FN(DU1_DOTCLKIN), GPIO_FN(VI2_CLKENB), GPIO_FN(HSPI_CS1), | ||
1572 | GPIO_FN(SCL1_D), GPIO_FN(DU1_DOTCLKOUT), GPIO_FN(VI2_FIELD), | ||
1573 | GPIO_FN(SDA1_D), GPIO_FN(DU1_EXHSYNC_DU1_HSYNC), GPIO_FN(VI2_HSYNC), | ||
1574 | GPIO_FN(VI3_HSYNC), GPIO_FN(DU1_EXVSYNC_DU1_VSYNC), GPIO_FN(VI2_VSYNC), | ||
1575 | GPIO_FN(VI3_VSYNC), GPIO_FN(DU1_EXODDF_DU1_ODDF_DISP_CDE), | ||
1576 | GPIO_FN(VI2_CLK), GPIO_FN(TX3_B_IRDA_TX_B), GPIO_FN(SD3_CD), | ||
1577 | GPIO_FN(HSPI_TX1), GPIO_FN(VI1_CLKENB), GPIO_FN(VI3_CLKENB), | ||
1578 | GPIO_FN(AUDIO_CLKC), GPIO_FN(TX2_D), GPIO_FN(SPEEDIN), | ||
1579 | GPIO_FN(GPS_SIGN_D), GPIO_FN(DU1_DISP), GPIO_FN(VI2_DATA6_VI2_B6), | ||
1580 | GPIO_FN(TCLK0), GPIO_FN(QSTVA_B_QVS_B), GPIO_FN(HSPI_CLK1), | ||
1581 | GPIO_FN(SCK2_D), GPIO_FN(AUDIO_CLKOUT_B), GPIO_FN(GPS_MAG_D), | ||
1582 | GPIO_FN(DU1_CDE), GPIO_FN(VI2_DATA7_VI2_B7), GPIO_FN(RX3_B_IRDA_RX_B), | ||
1583 | GPIO_FN(SD3_WP), GPIO_FN(HSPI_RX1), GPIO_FN(VI1_FIELD), | ||
1584 | GPIO_FN(VI3_FIELD), GPIO_FN(AUDIO_CLKOUT), GPIO_FN(RX2_D), | ||
1585 | GPIO_FN(GPS_CLK_C), GPIO_FN(GPS_CLK_D), GPIO_FN(AUDIO_CLKA), | ||
1586 | GPIO_FN(CAN_TXCLK), GPIO_FN(AUDIO_CLKB), GPIO_FN(USB_OVC2), | ||
1587 | GPIO_FN(CAN_DEBUGOUT0), GPIO_FN(MOUT0), | ||
1588 | |||
1589 | /* IPSR6 */ | ||
1590 | GPIO_FN(SSI_SCK0129), GPIO_FN(CAN_DEBUGOUT1), GPIO_FN(MOUT1), | ||
1591 | GPIO_FN(SSI_WS0129), GPIO_FN(CAN_DEBUGOUT2), GPIO_FN(MOUT2), | ||
1592 | GPIO_FN(SSI_SDATA0), GPIO_FN(CAN_DEBUGOUT3), GPIO_FN(MOUT5), | ||
1593 | GPIO_FN(SSI_SDATA1), GPIO_FN(CAN_DEBUGOUT4), GPIO_FN(MOUT6), | ||
1594 | GPIO_FN(SSI_SDATA2), GPIO_FN(CAN_DEBUGOUT5), GPIO_FN(SSI_SCK34), | ||
1595 | GPIO_FN(CAN_DEBUGOUT6), GPIO_FN(CAN0_TX_B), GPIO_FN(IERX), | ||
1596 | GPIO_FN(SSI_SCK9_C), GPIO_FN(SSI_WS34), GPIO_FN(CAN_DEBUGOUT7), | ||
1597 | GPIO_FN(CAN0_RX_B), GPIO_FN(IETX), GPIO_FN(SSI_WS9_C), | ||
1598 | GPIO_FN(SSI_SDATA3), GPIO_FN(PWM0_C), GPIO_FN(CAN_DEBUGOUT8), | ||
1599 | GPIO_FN(CAN_CLK_B), GPIO_FN(IECLK), GPIO_FN(SCIF_CLK_B), | ||
1600 | GPIO_FN(TCLK0_B), GPIO_FN(SSI_SDATA4), GPIO_FN(CAN_DEBUGOUT9), | ||
1601 | GPIO_FN(SSI_SDATA9_C), GPIO_FN(SSI_SCK5), GPIO_FN(ADICLK), | ||
1602 | GPIO_FN(CAN_DEBUGOUT10), GPIO_FN(SCK3), GPIO_FN(TCLK0_D), | ||
1603 | GPIO_FN(SSI_WS5), GPIO_FN(ADICS_SAMP), GPIO_FN(CAN_DEBUGOUT11), | ||
1604 | GPIO_FN(TX3_IRDA_TX), GPIO_FN(SSI_SDATA5), GPIO_FN(ADIDATA), | ||
1605 | GPIO_FN(CAN_DEBUGOUT12), GPIO_FN(RX3_IRDA_RX), GPIO_FN(SSI_SCK6), | ||
1606 | GPIO_FN(ADICHS0), GPIO_FN(CAN0_TX), GPIO_FN(IERX_B), | ||
1607 | |||
1608 | /* IPSR7 */ | ||
1609 | GPIO_FN(SSI_WS6), GPIO_FN(ADICHS1), GPIO_FN(CAN0_RX), GPIO_FN(IETX_B), | ||
1610 | GPIO_FN(SSI_SDATA6), GPIO_FN(ADICHS2), GPIO_FN(CAN_CLK), | ||
1611 | GPIO_FN(IECLK_B), GPIO_FN(SSI_SCK78), GPIO_FN(CAN_DEBUGOUT13), | ||
1612 | GPIO_FN(IRQ0_B), GPIO_FN(SSI_SCK9_B), GPIO_FN(HSPI_CLK1_C), | ||
1613 | GPIO_FN(SSI_WS78), GPIO_FN(CAN_DEBUGOUT14), GPIO_FN(IRQ1_B), | ||
1614 | GPIO_FN(SSI_WS9_B), GPIO_FN(HSPI_CS1_C), GPIO_FN(SSI_SDATA7), | ||
1615 | GPIO_FN(CAN_DEBUGOUT15), GPIO_FN(IRQ2_B), GPIO_FN(TCLK1_C), | ||
1616 | GPIO_FN(HSPI_TX1_C), GPIO_FN(SSI_SDATA8), GPIO_FN(VSP), | ||
1617 | GPIO_FN(IRQ3_B), GPIO_FN(HSPI_RX1_C), GPIO_FN(SD0_CLK), | ||
1618 | GPIO_FN(ATACS01), GPIO_FN(SCK1_B), GPIO_FN(SD0_CMD), GPIO_FN(ATACS11), | ||
1619 | GPIO_FN(TX1_B), GPIO_FN(CC5_TDO), GPIO_FN(SD0_DAT0), GPIO_FN(ATADIR1), | ||
1620 | GPIO_FN(RX1_B), GPIO_FN(CC5_TRST), GPIO_FN(SD0_DAT1), GPIO_FN(ATAG1), | ||
1621 | GPIO_FN(SCK2_B), GPIO_FN(CC5_TMS), GPIO_FN(SD0_DAT2), GPIO_FN(ATARD1), | ||
1622 | GPIO_FN(TX2_B), GPIO_FN(CC5_TCK), GPIO_FN(SD0_DAT3), GPIO_FN(ATAWR1), | ||
1623 | GPIO_FN(RX2_B), GPIO_FN(CC5_TDI), GPIO_FN(SD0_CD), GPIO_FN(DREQ2), | ||
1624 | GPIO_FN(RTS1_B_TANS_B), GPIO_FN(SD0_WP), GPIO_FN(DACK2), | ||
1625 | GPIO_FN(CTS1_B), | ||
1626 | |||
1627 | /* IPSR8 */ | ||
1628 | GPIO_FN(HSPI_CLK0), GPIO_FN(CTS0), GPIO_FN(USB_OVC0), GPIO_FN(AD_CLK), | ||
1629 | GPIO_FN(CC5_STATE4), GPIO_FN(CC5_STATE12), GPIO_FN(CC5_STATE20), | ||
1630 | GPIO_FN(CC5_STATE28), GPIO_FN(CC5_STATE36), GPIO_FN(HSPI_CS0), | ||
1631 | GPIO_FN(RTS0_TANS), GPIO_FN(USB_OVC1), GPIO_FN(AD_DI), | ||
1632 | GPIO_FN(CC5_STATE5), GPIO_FN(CC5_STATE13), GPIO_FN(CC5_STATE21), | ||
1633 | GPIO_FN(CC5_STATE29), GPIO_FN(CC5_STATE37), GPIO_FN(HSPI_TX0), | ||
1634 | GPIO_FN(TX0), GPIO_FN(CAN_DEBUG_HW_TRIGGER), GPIO_FN(AD_DO), | ||
1635 | GPIO_FN(CC5_STATE6), GPIO_FN(CC5_STATE14), GPIO_FN(CC5_STATE22), | ||
1636 | GPIO_FN(CC5_STATE30), GPIO_FN(CC5_STATE38), GPIO_FN(HSPI_RX0), | ||
1637 | GPIO_FN(RX0), GPIO_FN(CAN_STEP0), GPIO_FN(AD_NCS), GPIO_FN(CC5_STATE7), | ||
1638 | GPIO_FN(CC5_STATE15), GPIO_FN(CC5_STATE23), GPIO_FN(CC5_STATE31), | ||
1639 | GPIO_FN(CC5_STATE39), GPIO_FN(FMCLK), GPIO_FN(RDS_CLK), GPIO_FN(PCMOE), | ||
1640 | GPIO_FN(BPFCLK), GPIO_FN(PCMWE), GPIO_FN(FMIN), GPIO_FN(RDS_DATA), | ||
1641 | GPIO_FN(VI0_CLK), GPIO_FN(MMC1_CLK), GPIO_FN(VI0_CLKENB), | ||
1642 | GPIO_FN(TX1_C), GPIO_FN(HTX1_B), GPIO_FN(MT1_SYNC), | ||
1643 | GPIO_FN(VI0_FIELD), GPIO_FN(RX1_C), GPIO_FN(HRX1_B), | ||
1644 | GPIO_FN(VI0_HSYNC), GPIO_FN(VI0_DATA0_B_VI0_B0_B), GPIO_FN(CTS1_C), | ||
1645 | GPIO_FN(TX4_D), GPIO_FN(MMC1_CMD), GPIO_FN(HSCK1_B), | ||
1646 | GPIO_FN(VI0_VSYNC), GPIO_FN(VI0_DATA1_B_VI0_B1_B), | ||
1647 | GPIO_FN(RTS1_C_TANS_C), GPIO_FN(RX4_D), GPIO_FN(PWMFSW0_C), | ||
1648 | |||
1649 | /* IPSR9 */ | ||
1650 | GPIO_FN(VI0_DATA0_VI0_B0), GPIO_FN(HRTS1_B), GPIO_FN(MT1_VCXO), | ||
1651 | GPIO_FN(VI0_DATA1_VI0_B1), GPIO_FN(HCTS1_B), GPIO_FN(MT1_PWM), | ||
1652 | GPIO_FN(VI0_DATA2_VI0_B2), GPIO_FN(MMC1_D0), GPIO_FN(VI0_DATA3_VI0_B3), | ||
1653 | GPIO_FN(MMC1_D1), GPIO_FN(VI0_DATA4_VI0_B4), GPIO_FN(MMC1_D2), | ||
1654 | GPIO_FN(VI0_DATA5_VI0_B5), GPIO_FN(MMC1_D3), GPIO_FN(VI0_DATA6_VI0_B6), | ||
1655 | GPIO_FN(MMC1_D4), GPIO_FN(ARM_TRACEDATA_0), GPIO_FN(VI0_DATA7_VI0_B7), | ||
1656 | GPIO_FN(MMC1_D5), GPIO_FN(ARM_TRACEDATA_1), GPIO_FN(VI0_G0), | ||
1657 | GPIO_FN(SSI_SCK78_C), GPIO_FN(IRQ0), GPIO_FN(ARM_TRACEDATA_2), | ||
1658 | GPIO_FN(VI0_G1), GPIO_FN(SSI_WS78_C), GPIO_FN(IRQ1), | ||
1659 | GPIO_FN(ARM_TRACEDATA_3), GPIO_FN(VI0_G2), GPIO_FN(ETH_TXD1), | ||
1660 | GPIO_FN(MMC1_D6), GPIO_FN(ARM_TRACEDATA_4), GPIO_FN(TS_SPSYNC0), | ||
1661 | GPIO_FN(VI0_G3), GPIO_FN(ETH_CRS_DV), GPIO_FN(MMC1_D7), | ||
1662 | GPIO_FN(ARM_TRACEDATA_5), GPIO_FN(TS_SDAT0), GPIO_FN(VI0_G4), | ||
1663 | GPIO_FN(ETH_TX_EN), GPIO_FN(SD2_DAT0_B), GPIO_FN(ARM_TRACEDATA_6), | ||
1664 | GPIO_FN(VI0_G5), GPIO_FN(ETH_RX_ER), GPIO_FN(SD2_DAT1_B), | ||
1665 | GPIO_FN(ARM_TRACEDATA_7), GPIO_FN(VI0_G6), GPIO_FN(ETH_RXD0), | ||
1666 | GPIO_FN(SD2_DAT2_B), GPIO_FN(ARM_TRACEDATA_8), GPIO_FN(VI0_G7), | ||
1667 | GPIO_FN(ETH_RXD1), GPIO_FN(SD2_DAT3_B), GPIO_FN(ARM_TRACEDATA_9), | ||
1668 | |||
1669 | /* IPSR10 */ | ||
1670 | GPIO_FN(VI0_R0), GPIO_FN(SSI_SDATA7_C), GPIO_FN(SCK1_C), | ||
1671 | GPIO_FN(DREQ1_B), GPIO_FN(ARM_TRACEDATA_10), GPIO_FN(DREQ0_C), | ||
1672 | GPIO_FN(VI0_R1), GPIO_FN(SSI_SDATA8_C), GPIO_FN(DACK1_B), | ||
1673 | GPIO_FN(ARM_TRACEDATA_11), GPIO_FN(DACK0_C), GPIO_FN(DRACK0_C), | ||
1674 | GPIO_FN(VI0_R2), GPIO_FN(ETH_LINK), GPIO_FN(SD2_CLK_B), GPIO_FN(IRQ2), | ||
1675 | GPIO_FN(ARM_TRACEDATA_12), GPIO_FN(VI0_R3), GPIO_FN(ETH_MAGIC), | ||
1676 | GPIO_FN(SD2_CMD_B), GPIO_FN(IRQ3), GPIO_FN(ARM_TRACEDATA_13), | ||
1677 | GPIO_FN(VI0_R4), GPIO_FN(ETH_REFCLK), GPIO_FN(SD2_CD_B), | ||
1678 | GPIO_FN(HSPI_CLK1_B), GPIO_FN(ARM_TRACEDATA_14), GPIO_FN(MT1_CLK), | ||
1679 | GPIO_FN(TS_SCK0), GPIO_FN(VI0_R5), GPIO_FN(ETH_TXD0), | ||
1680 | GPIO_FN(SD2_WP_B), GPIO_FN(HSPI_CS1_B), GPIO_FN(ARM_TRACEDATA_15), | ||
1681 | GPIO_FN(MT1_D), GPIO_FN(TS_SDEN0), GPIO_FN(VI0_R6), GPIO_FN(ETH_MDC), | ||
1682 | GPIO_FN(DREQ2_C), GPIO_FN(HSPI_TX1_B), GPIO_FN(TRACECLK), | ||
1683 | GPIO_FN(MT1_BEN), GPIO_FN(PWMFSW0_D), GPIO_FN(VI0_R7), | ||
1684 | GPIO_FN(ETH_MDIO), GPIO_FN(DACK2_C), GPIO_FN(HSPI_RX1_B), | ||
1685 | GPIO_FN(SCIF_CLK_D), GPIO_FN(TRACECTL), GPIO_FN(MT1_PEN), | ||
1686 | GPIO_FN(VI1_CLK), GPIO_FN(SIM_D), GPIO_FN(SDA3), GPIO_FN(VI1_HSYNC), | ||
1687 | GPIO_FN(VI3_CLK), GPIO_FN(SSI_SCK4), GPIO_FN(GPS_SIGN_C), | ||
1688 | GPIO_FN(PWMFSW0_E), GPIO_FN(VI1_VSYNC), GPIO_FN(AUDIO_CLKOUT_C), | ||
1689 | GPIO_FN(SSI_WS4), GPIO_FN(SIM_CLK), GPIO_FN(GPS_MAG_C), | ||
1690 | GPIO_FN(SPV_TRST), GPIO_FN(SCL3), | ||
1691 | |||
1692 | /* IPSR11 */ | ||
1693 | GPIO_FN(VI1_DATA0_VI1_B0), GPIO_FN(SD2_DAT0), GPIO_FN(SIM_RST), | ||
1694 | GPIO_FN(SPV_TCK), GPIO_FN(ADICLK_B), GPIO_FN(VI1_DATA1_VI1_B1), | ||
1695 | GPIO_FN(SD2_DAT1), GPIO_FN(MT0_CLK), GPIO_FN(SPV_TMS), | ||
1696 | GPIO_FN(ADICS_B_SAMP_B), GPIO_FN(VI1_DATA2_VI1_B2), GPIO_FN(SD2_DAT2), | ||
1697 | GPIO_FN(MT0_D), GPIO_FN(SPVTDI), GPIO_FN(ADIDATA_B), | ||
1698 | GPIO_FN(VI1_DATA3_VI1_B3), GPIO_FN(SD2_DAT3), GPIO_FN(MT0_BEN), | ||
1699 | GPIO_FN(SPV_TDO), GPIO_FN(ADICHS0_B), GPIO_FN(VI1_DATA4_VI1_B4), | ||
1700 | GPIO_FN(SD2_CLK), GPIO_FN(MT0_PEN), GPIO_FN(SPA_TRST), | ||
1701 | GPIO_FN(HSPI_CLK1_D), GPIO_FN(ADICHS1_B), GPIO_FN(VI1_DATA5_VI1_B5), | ||
1702 | GPIO_FN(SD2_CMD), GPIO_FN(MT0_SYNC), GPIO_FN(SPA_TCK), | ||
1703 | GPIO_FN(HSPI_CS1_D), GPIO_FN(ADICHS2_B), GPIO_FN(VI1_DATA6_VI1_B6), | ||
1704 | GPIO_FN(SD2_CD), GPIO_FN(MT0_VCXO), GPIO_FN(SPA_TMS), | ||
1705 | GPIO_FN(HSPI_TX1_D), GPIO_FN(VI1_DATA7_VI1_B7), GPIO_FN(SD2_WP), | ||
1706 | GPIO_FN(MT0_PWM), GPIO_FN(SPA_TDI), GPIO_FN(HSPI_RX1_D), | ||
1707 | GPIO_FN(VI1_G0), GPIO_FN(VI3_DATA0), GPIO_FN(DU1_DOTCLKOUT1), | ||
1708 | GPIO_FN(TS_SCK1), GPIO_FN(DREQ2_B), GPIO_FN(TX2), GPIO_FN(SPA_TDO), | ||
1709 | GPIO_FN(HCTS0_B), GPIO_FN(VI1_G1), GPIO_FN(VI3_DATA1), | ||
1710 | GPIO_FN(SSI_SCK1), GPIO_FN(TS_SDEN1), GPIO_FN(DACK2_B), GPIO_FN(RX2), | ||
1711 | GPIO_FN(HRTS0_B), | ||
1712 | |||
1713 | /* IPSR12 */ | ||
1714 | GPIO_FN(VI1_G2), GPIO_FN(VI3_DATA2), GPIO_FN(SSI_WS1), | ||
1715 | GPIO_FN(TS_SPSYNC1), GPIO_FN(SCK2), GPIO_FN(HSCK0_B), GPIO_FN(VI1_G3), | ||
1716 | GPIO_FN(VI3_DATA3), GPIO_FN(SSI_SCK2), GPIO_FN(TS_SDAT1), | ||
1717 | GPIO_FN(SCL1_C), GPIO_FN(HTX0_B), GPIO_FN(VI1_G4), GPIO_FN(VI3_DATA4), | ||
1718 | GPIO_FN(SSI_WS2), GPIO_FN(SDA1_C), GPIO_FN(SIM_RST_B), | ||
1719 | GPIO_FN(HRX0_B), GPIO_FN(VI1_G5), GPIO_FN(VI3_DATA5), | ||
1720 | GPIO_FN(GPS_CLK), GPIO_FN(FSE), GPIO_FN(TX4_B), GPIO_FN(SIM_D_B), | ||
1721 | GPIO_FN(VI1_G6), GPIO_FN(VI3_DATA6), GPIO_FN(GPS_SIGN), GPIO_FN(FRB), | ||
1722 | GPIO_FN(RX4_B), GPIO_FN(SIM_CLK_B), GPIO_FN(VI1_G7), | ||
1723 | GPIO_FN(VI3_DATA7), GPIO_FN(GPS_MAG), GPIO_FN(FCE), GPIO_FN(SCK4_B), | ||
1724 | }; | ||
1725 | |||
1726 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | ||
1727 | { PINMUX_CFG_REG("GPSR0", 0xfffc0004, 32, 1) { | ||
1728 | GP_0_31_FN, FN_IP3_31_29, | ||
1729 | GP_0_30_FN, FN_IP3_26_24, | ||
1730 | GP_0_29_FN, FN_IP3_22_21, | ||
1731 | GP_0_28_FN, FN_IP3_14_12, | ||
1732 | GP_0_27_FN, FN_IP3_11_9, | ||
1733 | GP_0_26_FN, FN_IP3_2_0, | ||
1734 | GP_0_25_FN, FN_IP2_30_28, | ||
1735 | GP_0_24_FN, FN_IP2_21_19, | ||
1736 | GP_0_23_FN, FN_IP2_18_16, | ||
1737 | GP_0_22_FN, FN_IP0_30_28, | ||
1738 | GP_0_21_FN, FN_IP0_5_3, | ||
1739 | GP_0_20_FN, FN_IP1_18_15, | ||
1740 | GP_0_19_FN, FN_IP1_14_11, | ||
1741 | GP_0_18_FN, FN_IP1_10_7, | ||
1742 | GP_0_17_FN, FN_IP1_6_4, | ||
1743 | GP_0_16_FN, FN_IP1_3_2, | ||
1744 | GP_0_15_FN, FN_IP1_1_0, | ||
1745 | GP_0_14_FN, FN_IP0_27_26, | ||
1746 | GP_0_13_FN, FN_IP0_25, | ||
1747 | GP_0_12_FN, FN_IP0_24_23, | ||
1748 | GP_0_11_FN, FN_IP0_22_19, | ||
1749 | GP_0_10_FN, FN_IP0_18_16, | ||
1750 | GP_0_9_FN, FN_IP0_15_14, | ||
1751 | GP_0_8_FN, FN_IP0_13_12, | ||
1752 | GP_0_7_FN, FN_IP0_11_10, | ||
1753 | GP_0_6_FN, FN_IP0_9_8, | ||
1754 | GP_0_5_FN, FN_A19, | ||
1755 | GP_0_4_FN, FN_A18, | ||
1756 | GP_0_3_FN, FN_A17, | ||
1757 | GP_0_2_FN, FN_IP0_7_6, | ||
1758 | GP_0_1_FN, FN_AVS2, | ||
1759 | GP_0_0_FN, FN_AVS1 } | ||
1760 | }, | ||
1761 | { PINMUX_CFG_REG("GPSR1", 0xfffc0008, 32, 1) { | ||
1762 | GP_1_31_FN, FN_IP5_23_21, | ||
1763 | GP_1_30_FN, FN_IP5_20_17, | ||
1764 | GP_1_29_FN, FN_IP5_16_15, | ||
1765 | GP_1_28_FN, FN_IP5_14_13, | ||
1766 | GP_1_27_FN, FN_IP5_12_11, | ||
1767 | GP_1_26_FN, FN_IP5_10_9, | ||
1768 | GP_1_25_FN, FN_IP5_8, | ||
1769 | GP_1_24_FN, FN_IP5_7, | ||
1770 | GP_1_23_FN, FN_IP5_6, | ||
1771 | GP_1_22_FN, FN_IP5_5, | ||
1772 | GP_1_21_FN, FN_IP5_4, | ||
1773 | GP_1_20_FN, FN_IP5_3, | ||
1774 | GP_1_19_FN, FN_IP5_2_0, | ||
1775 | GP_1_18_FN, FN_IP4_31_29, | ||
1776 | GP_1_17_FN, FN_IP4_28, | ||
1777 | GP_1_16_FN, FN_IP4_27, | ||
1778 | GP_1_15_FN, FN_IP4_26, | ||
1779 | GP_1_14_FN, FN_IP4_25, | ||
1780 | GP_1_13_FN, FN_IP4_24, | ||
1781 | GP_1_12_FN, FN_IP4_23, | ||
1782 | GP_1_11_FN, FN_IP4_22_20, | ||
1783 | GP_1_10_FN, FN_IP4_19_17, | ||
1784 | GP_1_9_FN, FN_IP4_16, | ||
1785 | GP_1_8_FN, FN_IP4_15, | ||
1786 | GP_1_7_FN, FN_IP4_14, | ||
1787 | GP_1_6_FN, FN_IP4_13, | ||
1788 | GP_1_5_FN, FN_IP4_12, | ||
1789 | GP_1_4_FN, FN_IP4_11, | ||
1790 | GP_1_3_FN, FN_IP4_10_8, | ||
1791 | GP_1_2_FN, FN_IP4_7_5, | ||
1792 | GP_1_1_FN, FN_IP4_4_2, | ||
1793 | GP_1_0_FN, FN_IP4_1_0 } | ||
1794 | }, | ||
1795 | { PINMUX_CFG_REG("GPSR2", 0xfffc000c, 32, 1) { | ||
1796 | GP_2_31_FN, FN_IP10_28_26, | ||
1797 | GP_2_30_FN, FN_IP10_25_24, | ||
1798 | GP_2_29_FN, FN_IP10_23_21, | ||
1799 | GP_2_28_FN, FN_IP10_20_18, | ||
1800 | GP_2_27_FN, FN_IP10_17_15, | ||
1801 | GP_2_26_FN, FN_IP10_14_12, | ||
1802 | GP_2_25_FN, FN_IP10_11_9, | ||
1803 | GP_2_24_FN, FN_IP10_8_6, | ||
1804 | GP_2_23_FN, FN_IP10_5_3, | ||
1805 | GP_2_22_FN, FN_IP10_2_0, | ||
1806 | GP_2_21_FN, FN_IP9_29_28, | ||
1807 | GP_2_20_FN, FN_IP9_27_26, | ||
1808 | GP_2_19_FN, FN_IP9_25_24, | ||
1809 | GP_2_18_FN, FN_IP9_23_22, | ||
1810 | GP_2_17_FN, FN_IP9_21_19, | ||
1811 | GP_2_16_FN, FN_IP9_18_16, | ||
1812 | GP_2_15_FN, FN_IP9_15_14, | ||
1813 | GP_2_14_FN, FN_IP9_13_12, | ||
1814 | GP_2_13_FN, FN_IP9_11_10, | ||
1815 | GP_2_12_FN, FN_IP9_9_8, | ||
1816 | GP_2_11_FN, FN_IP9_7, | ||
1817 | GP_2_10_FN, FN_IP9_6, | ||
1818 | GP_2_9_FN, FN_IP9_5, | ||
1819 | GP_2_8_FN, FN_IP9_4, | ||
1820 | GP_2_7_FN, FN_IP9_3_2, | ||
1821 | GP_2_6_FN, FN_IP9_1_0, | ||
1822 | GP_2_5_FN, FN_IP8_30_28, | ||
1823 | GP_2_4_FN, FN_IP8_27_25, | ||
1824 | GP_2_3_FN, FN_IP8_24_23, | ||
1825 | GP_2_2_FN, FN_IP8_22_21, | ||
1826 | GP_2_1_FN, FN_IP8_20, | ||
1827 | GP_2_0_FN, FN_IP5_27_24 } | ||
1828 | }, | ||
1829 | { PINMUX_CFG_REG("GPSR3", 0xfffc0010, 32, 1) { | ||
1830 | GP_3_31_FN, FN_IP6_3_2, | ||
1831 | GP_3_30_FN, FN_IP6_1_0, | ||
1832 | GP_3_29_FN, FN_IP5_30_29, | ||
1833 | GP_3_28_FN, FN_IP5_28, | ||
1834 | GP_3_27_FN, FN_IP1_24_23, | ||
1835 | GP_3_26_FN, FN_IP1_22_21, | ||
1836 | GP_3_25_FN, FN_IP1_20_19, | ||
1837 | GP_3_24_FN, FN_IP7_26_25, | ||
1838 | GP_3_23_FN, FN_IP7_24_23, | ||
1839 | GP_3_22_FN, FN_IP7_22_21, | ||
1840 | GP_3_21_FN, FN_IP7_20_19, | ||
1841 | GP_3_20_FN, FN_IP7_30_29, | ||
1842 | GP_3_19_FN, FN_IP7_28_27, | ||
1843 | GP_3_18_FN, FN_IP7_18_17, | ||
1844 | GP_3_17_FN, FN_IP7_16_15, | ||
1845 | GP_3_16_FN, FN_IP12_17_15, | ||
1846 | GP_3_15_FN, FN_IP12_14_12, | ||
1847 | GP_3_14_FN, FN_IP12_11_9, | ||
1848 | GP_3_13_FN, FN_IP12_8_6, | ||
1849 | GP_3_12_FN, FN_IP12_5_3, | ||
1850 | GP_3_11_FN, FN_IP12_2_0, | ||
1851 | GP_3_10_FN, FN_IP11_29_27, | ||
1852 | GP_3_9_FN, FN_IP11_26_24, | ||
1853 | GP_3_8_FN, FN_IP11_23_21, | ||
1854 | GP_3_7_FN, FN_IP11_20_18, | ||
1855 | GP_3_6_FN, FN_IP11_17_15, | ||
1856 | GP_3_5_FN, FN_IP11_14_12, | ||
1857 | GP_3_4_FN, FN_IP11_11_9, | ||
1858 | GP_3_3_FN, FN_IP11_8_6, | ||
1859 | GP_3_2_FN, FN_IP11_5_3, | ||
1860 | GP_3_1_FN, FN_IP11_2_0, | ||
1861 | GP_3_0_FN, FN_IP10_31_29 } | ||
1862 | }, | ||
1863 | { PINMUX_CFG_REG("GPSR4", 0xfffc0014, 32, 1) { | ||
1864 | GP_4_31_FN, FN_IP8_19, | ||
1865 | GP_4_30_FN, FN_IP8_18, | ||
1866 | GP_4_29_FN, FN_IP8_17_16, | ||
1867 | GP_4_28_FN, FN_IP0_2_0, | ||
1868 | GP_4_27_FN, FN_USB_PENC1, | ||
1869 | GP_4_26_FN, FN_USB_PENC0, | ||
1870 | GP_4_25_FN, FN_IP8_15_12, | ||
1871 | GP_4_24_FN, FN_IP8_11_8, | ||
1872 | GP_4_23_FN, FN_IP8_7_4, | ||
1873 | GP_4_22_FN, FN_IP8_3_0, | ||
1874 | GP_4_21_FN, FN_IP2_3_0, | ||
1875 | GP_4_20_FN, FN_IP1_28_25, | ||
1876 | GP_4_19_FN, FN_IP2_15_12, | ||
1877 | GP_4_18_FN, FN_IP2_11_8, | ||
1878 | GP_4_17_FN, FN_IP2_7_4, | ||
1879 | GP_4_16_FN, FN_IP7_14_13, | ||
1880 | GP_4_15_FN, FN_IP7_12_10, | ||
1881 | GP_4_14_FN, FN_IP7_9_7, | ||
1882 | GP_4_13_FN, FN_IP7_6_4, | ||
1883 | GP_4_12_FN, FN_IP7_3_2, | ||
1884 | GP_4_11_FN, FN_IP7_1_0, | ||
1885 | GP_4_10_FN, FN_IP6_30_29, | ||
1886 | GP_4_9_FN, FN_IP6_26_25, | ||
1887 | GP_4_8_FN, FN_IP6_24_23, | ||
1888 | GP_4_7_FN, FN_IP6_22_20, | ||
1889 | GP_4_6_FN, FN_IP6_19_18, | ||
1890 | GP_4_5_FN, FN_IP6_17_15, | ||
1891 | GP_4_4_FN, FN_IP6_14_12, | ||
1892 | GP_4_3_FN, FN_IP6_11_9, | ||
1893 | GP_4_2_FN, FN_IP6_8, | ||
1894 | GP_4_1_FN, FN_IP6_7_6, | ||
1895 | GP_4_0_FN, FN_IP6_5_4 } | ||
1896 | }, | ||
1897 | { PINMUX_CFG_REG("GPSR5", 0xfffc0018, 32, 1) { | ||
1898 | GP_5_31_FN, FN_IP3_5, | ||
1899 | GP_5_30_FN, FN_IP3_4, | ||
1900 | GP_5_29_FN, FN_IP3_3, | ||
1901 | GP_5_28_FN, FN_IP2_27, | ||
1902 | GP_5_27_FN, FN_IP2_26, | ||
1903 | GP_5_26_FN, FN_IP2_25, | ||
1904 | GP_5_25_FN, FN_IP2_24, | ||
1905 | GP_5_24_FN, FN_IP2_23, | ||
1906 | GP_5_23_FN, FN_IP2_22, | ||
1907 | GP_5_22_FN, FN_IP3_28, | ||
1908 | GP_5_21_FN, FN_IP3_27, | ||
1909 | GP_5_20_FN, FN_IP3_23, | ||
1910 | GP_5_19_FN, FN_EX_WAIT0, | ||
1911 | GP_5_18_FN, FN_WE1, | ||
1912 | GP_5_17_FN, FN_WE0, | ||
1913 | GP_5_16_FN, FN_RD, | ||
1914 | GP_5_15_FN, FN_A16, | ||
1915 | GP_5_14_FN, FN_A15, | ||
1916 | GP_5_13_FN, FN_A14, | ||
1917 | GP_5_12_FN, FN_A13, | ||
1918 | GP_5_11_FN, FN_A12, | ||
1919 | GP_5_10_FN, FN_A11, | ||
1920 | GP_5_9_FN, FN_A10, | ||
1921 | GP_5_8_FN, FN_A9, | ||
1922 | GP_5_7_FN, FN_A8, | ||
1923 | GP_5_6_FN, FN_A7, | ||
1924 | GP_5_5_FN, FN_A6, | ||
1925 | GP_5_4_FN, FN_A5, | ||
1926 | GP_5_3_FN, FN_A4, | ||
1927 | GP_5_2_FN, FN_A3, | ||
1928 | GP_5_1_FN, FN_A2, | ||
1929 | GP_5_0_FN, FN_A1 } | ||
1930 | }, | ||
1931 | { PINMUX_CFG_REG("GPSR6", 0xfffc001c, 32, 1) { | ||
1932 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
1933 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
1934 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
1935 | 0, 0, | ||
1936 | 0, 0, | ||
1937 | 0, 0, | ||
1938 | GP_6_8_FN, FN_IP3_20, | ||
1939 | GP_6_7_FN, FN_IP3_19, | ||
1940 | GP_6_6_FN, FN_IP3_18, | ||
1941 | GP_6_5_FN, FN_IP3_17, | ||
1942 | GP_6_4_FN, FN_IP3_16, | ||
1943 | GP_6_3_FN, FN_IP3_15, | ||
1944 | GP_6_2_FN, FN_IP3_8, | ||
1945 | GP_6_1_FN, FN_IP3_7, | ||
1946 | GP_6_0_FN, FN_IP3_6 } | ||
1947 | }, | ||
1948 | |||
1949 | { PINMUX_CFG_REG_VAR("IPSR0", 0xfffc0020, 32, | ||
1950 | 1, 3, 2, 1, 2, 4, 3, 2, 2, 2, 2, 2, 3, 3) { | ||
1951 | /* IP0_31 [1] */ | ||
1952 | 0, 0, | ||
1953 | /* IP0_30_28 [3] */ | ||
1954 | FN_RD_WR, FN_FWE, FN_ATAG0, FN_VI1_R7, | ||
1955 | FN_HRTS1, FN_RX4_C, 0, 0, | ||
1956 | /* IP0_27_26 [2] */ | ||
1957 | FN_CS1_A26, FN_HSPI_TX2, FN_SDSELF_B, 0, | ||
1958 | /* IP0_25 [1] */ | ||
1959 | FN_CS0, FN_HSPI_CS2_B, | ||
1960 | /* IP0_24_23 [2] */ | ||
1961 | FN_CLKOUT, FN_TX3C_IRDA_TX_C, FN_PWM0_B, 0, | ||
1962 | /* IP0_22_19 [4] */ | ||
1963 | FN_A25, FN_SD1_WP, FN_MMC0_D5, FN_FD5, | ||
1964 | FN_HSPI_RX2, FN_VI1_R3, FN_TX5_B, FN_SSI_SDATA7_B, | ||
1965 | FN_CTS0_B, 0, 0, 0, | ||
1966 | 0, 0, 0, 0, | ||
1967 | /* IP0_18_16 [3] */ | ||
1968 | FN_A24, FN_SD1_CD, FN_MMC0_D4, FN_FD4, | ||
1969 | FN_HSPI_CS2, FN_VI1_R2, FN_SSI_WS78_B, 0, | ||
1970 | /* IP0_15_14 [2] */ | ||
1971 | FN_A23, FN_FCLE, FN_HSPI_CLK2, FN_VI1_R1, | ||
1972 | /* IP0_13_12 [2] */ | ||
1973 | FN_A22, FN_RX5_D, FN_HSPI_RX2_B, FN_VI1_R0, | ||
1974 | /* IP0_11_10 [2] */ | ||
1975 | FN_A21, FN_SCK5_D, FN_HSPI_CLK2_B, 0, | ||
1976 | /* IP0_9_8 [2] */ | ||
1977 | FN_A20, FN_TX5_D, FN_HSPI_TX2_B, 0, | ||
1978 | /* IP0_7_6 [2] */ | ||
1979 | FN_A0, FN_SD1_DAT3, FN_MMC0_D3, FN_FD3, | ||
1980 | /* IP0_5_3 [3] */ | ||
1981 | FN_BS, FN_SD1_DAT2, FN_MMC0_D2, FN_FD2, | ||
1982 | FN_ATADIR0, FN_SDSELF, FN_HCTS1, FN_TX4_C, | ||
1983 | /* IP0_2_0 [3] */ | ||
1984 | FN_USB_PENC2, FN_SCK0, FN_PWM1, FN_PWMFSW0, | ||
1985 | FN_SCIF_CLK, FN_TCLK0_C, 0, 0 } | ||
1986 | }, | ||
1987 | { PINMUX_CFG_REG_VAR("IPSR1", 0xfffc0024, 32, | ||
1988 | 3, 4, 2, 2, 2, 4, 4, 4, 3, 2, 2) { | ||
1989 | /* IP1_31_29 [3] */ | ||
1990 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
1991 | /* IP1_28_25 [4] */ | ||
1992 | FN_HTX0, FN_TX1, FN_SDATA, FN_CTS0_C, | ||
1993 | FN_SUB_TCK, FN_CC5_STATE2, FN_CC5_STATE10, FN_CC5_STATE18, | ||
1994 | FN_CC5_STATE26, FN_CC5_STATE34, 0, 0, | ||
1995 | 0, 0, 0, 0, | ||
1996 | /* IP1_24_23 [2] */ | ||
1997 | FN_MLB_DAT, FN_PWM4, FN_RX4, 0, | ||
1998 | /* IP1_22_21 [2] */ | ||
1999 | FN_MLB_SIG, FN_PWM3, FN_TX4, 0, | ||
2000 | /* IP1_20_19 [2] */ | ||
2001 | FN_MLB_CLK, FN_PWM2, FN_SCK4, 0, | ||
2002 | /* IP1_18_15 [4] */ | ||
2003 | FN_EX_CS5, FN_SD1_DAT1, FN_MMC0_D1, FN_FD1, | ||
2004 | FN_ATAWR0, FN_VI1_R6, FN_HRX1, FN_RX2_E, | ||
2005 | FN_RX0_B, FN_SSI_WS9, 0, 0, | ||
2006 | 0, 0, 0, 0, | ||
2007 | /* IP1_14_11 [4] */ | ||
2008 | FN_EX_CS4, FN_SD1_DAT0, FN_MMC0_D0, FN_FD0, | ||
2009 | FN_ATARD0, FN_VI1_R5, FN_SCK5_B, FN_HTX1, | ||
2010 | FN_TX2_E, FN_TX0_B, FN_SSI_SCK9, 0, | ||
2011 | 0, 0, 0, 0, | ||
2012 | /* IP1_10_7 [4] */ | ||
2013 | FN_EX_CS3, FN_SD1_CMD, FN_MMC0_CMD, FN_FRE, | ||
2014 | FN_ATACS10, FN_VI1_R4, FN_RX5_B, FN_HSCK1, | ||
2015 | FN_SSI_SDATA8_B, FN_RTS0_B_TANS_B, FN_SSI_SDATA9, 0, | ||
2016 | 0, 0, 0, 0, | ||
2017 | /* IP1_6_4 [3] */ | ||
2018 | FN_EX_CS2, FN_SD1_CLK, FN_MMC0_CLK, FN_FALE, | ||
2019 | FN_ATACS00, 0, 0, 0, | ||
2020 | /* IP1_3_2 [2] */ | ||
2021 | FN_EX_CS1, FN_MMC0_D7, FN_FD7, 0, | ||
2022 | /* IP1_1_0 [2] */ | ||
2023 | FN_EX_CS0, FN_RX3_C_IRDA_RX_C, FN_MMC0_D6, FN_FD6 } | ||
2024 | }, | ||
2025 | { PINMUX_CFG_REG_VAR("IPSR2", 0xfffc0028, 32, | ||
2026 | 1, 3, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4) { | ||
2027 | /* IP2_31 [1] */ | ||
2028 | 0, 0, | ||
2029 | /* IP2_30_28 [3] */ | ||
2030 | FN_DU0_DG0, FN_LCDOUT8, FN_DREQ1, FN_SCL2, | ||
2031 | FN_AUDATA2, 0, 0, 0, | ||
2032 | /* IP2_27 [1] */ | ||
2033 | FN_DU0_DR7, FN_LCDOUT7, | ||
2034 | /* IP2_26 [1] */ | ||
2035 | FN_DU0_DR6, FN_LCDOUT6, | ||
2036 | /* IP2_25 [1] */ | ||
2037 | FN_DU0_DR5, FN_LCDOUT5, | ||
2038 | /* IP2_24 [1] */ | ||
2039 | FN_DU0_DR4, FN_LCDOUT4, | ||
2040 | /* IP2_23 [1] */ | ||
2041 | FN_DU0_DR3, FN_LCDOUT3, | ||
2042 | /* IP2_22 [1] */ | ||
2043 | FN_DU0_DR2, FN_LCDOUT2, | ||
2044 | /* IP2_21_19 [3] */ | ||
2045 | FN_DU0_DR1, FN_LCDOUT1, FN_DACK0, FN_DRACK0, | ||
2046 | FN_GPS_SIGN_B, FN_AUDATA1, FN_RX5_C, 0, | ||
2047 | /* IP2_18_16 [3] */ | ||
2048 | FN_DU0_DR0, FN_LCDOUT0, FN_DREQ0, FN_GPS_CLK_B, | ||
2049 | FN_AUDATA0, FN_TX5_C, 0, 0, | ||
2050 | /* IP2_15_12 [4] */ | ||
2051 | FN_HRTS0, FN_RTS1_TANS, FN_MDATA, FN_TX0_C, | ||
2052 | FN_SUB_TMS, FN_CC5_STATE1, FN_CC5_STATE9, FN_CC5_STATE17, | ||
2053 | FN_CC5_STATE25, FN_CC5_STATE33, 0, 0, | ||
2054 | 0, 0, 0, 0, | ||
2055 | /* IP2_11_8 [4] */ | ||
2056 | FN_HCTS0, FN_CTS1, FN_STM, FN_PWM0_D, | ||
2057 | FN_RX0_C, FN_SCIF_CLK_C, FN_SUB_TRST, FN_TCLK1_B, | ||
2058 | FN_CC5_OSCOUT, 0, 0, 0, | ||
2059 | 0, 0, 0, 0, | ||
2060 | /* IP2_7_4 [4] */ | ||
2061 | FN_HSCK0, FN_SCK1, FN_MTS, FN_PWM5, | ||
2062 | FN_SCK0_C, FN_SSI_SDATA9_B, FN_SUB_TDO, FN_CC5_STATE0, | ||
2063 | FN_CC5_STATE8, FN_CC5_STATE16, FN_CC5_STATE24, FN_CC5_STATE32, | ||
2064 | 0, 0, 0, 0, | ||
2065 | /* IP2_3_0 [4] */ | ||
2066 | FN_HRX0, FN_RX1, FN_SCKZ, FN_RTS0_C_TANS_C, | ||
2067 | FN_SUB_TDI, FN_CC5_STATE3, FN_CC5_STATE11, FN_CC5_STATE19, | ||
2068 | FN_CC5_STATE27, FN_CC5_STATE35, 0, 0, | ||
2069 | 0, 0, 0, 0 } | ||
2070 | }, | ||
2071 | { PINMUX_CFG_REG_VAR("IPSR3", 0xfffc002c, 32, | ||
2072 | 3, 1, 1, 3, 1, 2, 1, 1, 1, 1, 1, | ||
2073 | 1, 3, 3, 1, 1, 1, 1, 1, 1, 3) { | ||
2074 | /* IP3_31_29 [3] */ | ||
2075 | FN_DU0_EXODDF_DU0_ODDF_DISP_CDE, FN_QCPV_QDE, FN_CAN1_TX, FN_TX2_C, | ||
2076 | FN_SCL2_C, FN_REMOCON, 0, 0, | ||
2077 | /* IP3_28 [1] */ | ||
2078 | FN_DU0_EXVSYNC_DU0_VSYNC, FN_QSTB_QHE, | ||
2079 | /* IP3_27 [1] */ | ||
2080 | FN_DU0_EXHSYNC_DU0_HSYNC, FN_QSTH_QHS, | ||
2081 | /* IP3_26_24 [3] */ | ||
2082 | FN_DU0_DOTCLKOUT1, FN_QSTVB_QVE, FN_RX3_D_IRDA_RX_D, FN_SDA3_B, | ||
2083 | FN_SDA2_C, FN_DACK0_B, FN_DRACK0_B, 0, | ||
2084 | /* IP3_23 [1] */ | ||
2085 | FN_DU0_DOTCLKOUT0, FN_QCLK, | ||
2086 | /* IP3_22_21 [2] */ | ||
2087 | FN_DU0_DOTCLKIN, FN_QSTVA_QVS, FN_TX3_D_IRDA_TX_D, FN_SCL3_B, | ||
2088 | /* IP3_20 [1] */ | ||
2089 | FN_DU0_DB7, FN_LCDOUT23, | ||
2090 | /* IP3_19 [1] */ | ||
2091 | FN_DU0_DB6, FN_LCDOUT22, | ||
2092 | /* IP3_18 [1] */ | ||
2093 | FN_DU0_DB5, FN_LCDOUT21, | ||
2094 | /* IP3_17 [1] */ | ||
2095 | FN_DU0_DB4, FN_LCDOUT20, | ||
2096 | /* IP3_16 [1] */ | ||
2097 | FN_DU0_DB3, FN_LCDOUT19, | ||
2098 | /* IP3_15 [1] */ | ||
2099 | FN_DU0_DB2, FN_LCDOUT18, | ||
2100 | /* IP3_14_12 [3] */ | ||
2101 | FN_DU0_DB1, FN_LCDOUT17, FN_EX_WAIT2, FN_SDA1, | ||
2102 | FN_GPS_MAG_B, FN_AUDATA5, FN_SCK5_C, 0, | ||
2103 | /* IP3_11_9 [3] */ | ||
2104 | FN_DU0_DB0, FN_LCDOUT16, FN_EX_WAIT1, FN_SCL1, | ||
2105 | FN_TCLK1, FN_AUDATA4, 0, 0, | ||
2106 | /* IP3_8 [1] */ | ||
2107 | FN_DU0_DG7, FN_LCDOUT15, | ||
2108 | /* IP3_7 [1] */ | ||
2109 | FN_DU0_DG6, FN_LCDOUT14, | ||
2110 | /* IP3_6 [1] */ | ||
2111 | FN_DU0_DG5, FN_LCDOUT13, | ||
2112 | /* IP3_5 [1] */ | ||
2113 | FN_DU0_DG4, FN_LCDOUT12, | ||
2114 | /* IP3_4 [1] */ | ||
2115 | FN_DU0_DG3, FN_LCDOUT11, | ||
2116 | /* IP3_3 [1] */ | ||
2117 | FN_DU0_DG2, FN_LCDOUT10, | ||
2118 | /* IP3_2_0 [3] */ | ||
2119 | FN_DU0_DG1, FN_LCDOUT9, FN_DACK1, FN_SDA2, | ||
2120 | FN_AUDATA3, 0, 0, 0 } | ||
2121 | }, | ||
2122 | { PINMUX_CFG_REG_VAR("IPSR4", 0xfffc0030, 32, | ||
2123 | 3, 1, 1, 1, 1, 1, 1, 3, 3, | ||
2124 | 1, 1, 1, 1, 1, 1, 3, 3, 3, 2) { | ||
2125 | /* IP4_31_29 [3] */ | ||
2126 | FN_DU1_DB0, FN_VI2_DATA4_VI2_B4, FN_SCL2_B, FN_SD3_DAT0, | ||
2127 | FN_TX5, FN_SCK0_D, 0, 0, | ||
2128 | /* IP4_28 [1] */ | ||
2129 | FN_DU1_DG7, FN_VI2_R3, | ||
2130 | /* IP4_27 [1] */ | ||
2131 | FN_DU1_DG6, FN_VI2_R2, | ||
2132 | /* IP4_26 [1] */ | ||
2133 | FN_DU1_DG5, FN_VI2_R1, | ||
2134 | /* IP4_25 [1] */ | ||
2135 | FN_DU1_DG4, FN_VI2_R0, | ||
2136 | /* IP4_24 [1] */ | ||
2137 | FN_DU1_DG3, FN_VI2_G7, | ||
2138 | /* IP4_23 [1] */ | ||
2139 | FN_DU1_DG2, FN_VI2_G6, | ||
2140 | /* IP4_22_20 [3] */ | ||
2141 | FN_DU1_DG1, FN_VI2_DATA3_VI2_B3, FN_SDA1_B, FN_SD3_DAT3, | ||
2142 | FN_SCK5, FN_AUDATA7, FN_RX0_D, 0, | ||
2143 | /* IP4_19_17 [3] */ | ||
2144 | FN_DU1_DG0, FN_VI2_DATA2_VI2_B2, FN_SCL1_B, FN_SD3_DAT2, | ||
2145 | FN_SCK3_E, FN_AUDATA6, FN_TX0_D, 0, | ||
2146 | /* IP4_16 [1] */ | ||
2147 | FN_DU1_DR7, FN_VI2_G5, | ||
2148 | /* IP4_15 [1] */ | ||
2149 | FN_DU1_DR6, FN_VI2_G4, | ||
2150 | /* IP4_14 [1] */ | ||
2151 | FN_DU1_DR5, FN_VI2_G3, | ||
2152 | /* IP4_13 [1] */ | ||
2153 | FN_DU1_DR4, FN_VI2_G2, | ||
2154 | /* IP4_12 [1] */ | ||
2155 | FN_DU1_DR3, FN_VI2_G1, | ||
2156 | /* IP4_11 [1] */ | ||
2157 | FN_DU1_DR2, FN_VI2_G0, | ||
2158 | /* IP4_10_8 [3] */ | ||
2159 | FN_DU1_DR1, FN_VI2_DATA1_VI2_B1, FN_PWM0, FN_SD3_CMD, | ||
2160 | FN_RX3_E_IRDA_RX_E, FN_AUDSYNC, FN_CTS0_D, 0, | ||
2161 | /* IP4_7_5 [3] */ | ||
2162 | FN_DU1_DR0, FN_VI2_DATA0_VI2_B0, FN_PWM6, FN_SD3_CLK, | ||
2163 | FN_TX3_E_IRDA_TX_E, FN_AUDCK, FN_PWMFSW0_B, 0, | ||
2164 | /* IP4_4_2 [3] */ | ||
2165 | FN_DU0_CDE, FN_QPOLB, FN_CAN1_RX, FN_RX2_C, | ||
2166 | FN_DREQ0_B, FN_SSI_SCK78_B, FN_SCK0_B, 0, | ||
2167 | /* IP4_1_0 [2] */ | ||
2168 | FN_DU0_DISP, FN_QPOLA, FN_CAN_CLK_C, FN_SCK2_C } | ||
2169 | }, | ||
2170 | { PINMUX_CFG_REG_VAR("IPSR5", 0xfffc0034, 32, | ||
2171 | 1, 2, 1, 4, 3, 4, 2, 2, | ||
2172 | 2, 2, 1, 1, 1, 1, 1, 1, 3) { | ||
2173 | /* IP5_31 [1] */ | ||
2174 | 0, 0, | ||
2175 | /* IP5_30_29 [2] */ | ||
2176 | FN_AUDIO_CLKB, FN_USB_OVC2, FN_CAN_DEBUGOUT0, FN_MOUT0, | ||
2177 | /* IP5_28 [1] */ | ||
2178 | FN_AUDIO_CLKA, FN_CAN_TXCLK, | ||
2179 | /* IP5_27_24 [4] */ | ||
2180 | FN_DU1_CDE, FN_VI2_DATA7_VI2_B7, FN_RX3_B_IRDA_RX_B, FN_SD3_WP, | ||
2181 | FN_HSPI_RX1, FN_VI1_FIELD, FN_VI3_FIELD, FN_AUDIO_CLKOUT, | ||
2182 | FN_RX2_D, FN_GPS_CLK_C, FN_GPS_CLK_D, 0, | ||
2183 | 0, 0, 0, 0, | ||
2184 | /* IP5_23_21 [3] */ | ||
2185 | FN_DU1_DISP, FN_VI2_DATA6_VI2_B6, FN_TCLK0, FN_QSTVA_B_QVS_B, | ||
2186 | FN_HSPI_CLK1, FN_SCK2_D, FN_AUDIO_CLKOUT_B, FN_GPS_MAG_D, | ||
2187 | /* IP5_20_17 [4] */ | ||
2188 | FN_DU1_EXODDF_DU1_ODDF_DISP_CDE, FN_VI2_CLK, FN_TX3_B_IRDA_TX_B, | ||
2189 | FN_SD3_CD, FN_HSPI_TX1, FN_VI1_CLKENB, FN_VI3_CLKENB, | ||
2190 | FN_AUDIO_CLKC, FN_TX2_D, FN_SPEEDIN, FN_GPS_SIGN_D, 0, | ||
2191 | 0, 0, 0, 0, | ||
2192 | /* IP5_16_15 [2] */ | ||
2193 | FN_DU1_EXVSYNC_DU1_VSYNC, FN_VI2_VSYNC, FN_VI3_VSYNC, 0, | ||
2194 | /* IP5_14_13 [2] */ | ||
2195 | FN_DU1_EXHSYNC_DU1_HSYNC, FN_VI2_HSYNC, FN_VI3_HSYNC, 0, | ||
2196 | /* IP5_12_11 [2] */ | ||
2197 | FN_DU1_DOTCLKOUT, FN_VI2_FIELD, FN_SDA1_D, 0, | ||
2198 | /* IP5_10_9 [2] */ | ||
2199 | FN_DU1_DOTCLKIN, FN_VI2_CLKENB, FN_HSPI_CS1, FN_SCL1_D, | ||
2200 | /* IP5_8 [1] */ | ||
2201 | FN_DU1_DB7, FN_SDA2_D, | ||
2202 | /* IP5_7 [1] */ | ||
2203 | FN_DU1_DB6, FN_SCL2_D, | ||
2204 | /* IP5_6 [1] */ | ||
2205 | FN_DU1_DB5, FN_VI2_R7, | ||
2206 | /* IP5_5 [1] */ | ||
2207 | FN_DU1_DB4, FN_VI2_R6, | ||
2208 | /* IP5_4 [1] */ | ||
2209 | FN_DU1_DB3, FN_VI2_R5, | ||
2210 | /* IP5_3 [1] */ | ||
2211 | FN_DU1_DB2, FN_VI2_R4, | ||
2212 | /* IP5_2_0 [3] */ | ||
2213 | FN_DU1_DB1, FN_VI2_DATA5_VI2_B5, FN_SDA2_B, FN_SD3_DAT1, | ||
2214 | FN_RX5, FN_RTS0_D_TANS_D, 0, 0 } | ||
2215 | }, | ||
2216 | { PINMUX_CFG_REG_VAR("IPSR6", 0xfffc0038, 32, | ||
2217 | 1, 2, 2, 2, 2, 3, 2, 3, 3, 3, 1, 2, 2, 2, 2) { | ||
2218 | /* IP6_31 [1] */ | ||
2219 | 0, 0, | ||
2220 | /* IP6_30_29 [2] */ | ||
2221 | FN_SSI_SCK6, FN_ADICHS0, FN_CAN0_TX, FN_IERX_B, | ||
2222 | /* IP_28_27 [2] */ | ||
2223 | 0, 0, 0, 0, | ||
2224 | /* IP6_26_25 [2] */ | ||
2225 | FN_SSI_SDATA5, FN_ADIDATA, FN_CAN_DEBUGOUT12, FN_RX3_IRDA_RX, | ||
2226 | /* IP6_24_23 [2] */ | ||
2227 | FN_SSI_WS5, FN_ADICS_SAMP, FN_CAN_DEBUGOUT11, FN_TX3_IRDA_TX, | ||
2228 | /* IP6_22_20 [3] */ | ||
2229 | FN_SSI_SCK5, FN_ADICLK, FN_CAN_DEBUGOUT10, FN_SCK3, | ||
2230 | FN_TCLK0_D, 0, 0, 0, | ||
2231 | /* IP6_19_18 [2] */ | ||
2232 | FN_SSI_SDATA4, FN_CAN_DEBUGOUT9, FN_SSI_SDATA9_C, 0, | ||
2233 | /* IP6_17_15 [3] */ | ||
2234 | FN_SSI_SDATA3, FN_PWM0_C, FN_CAN_DEBUGOUT8, FN_CAN_CLK_B, | ||
2235 | FN_IECLK, FN_SCIF_CLK_B, FN_TCLK0_B, 0, | ||
2236 | /* IP6_14_12 [3] */ | ||
2237 | FN_SSI_WS34, FN_CAN_DEBUGOUT7, FN_CAN0_RX_B, FN_IETX, | ||
2238 | FN_SSI_WS9_C, 0, 0, 0, | ||
2239 | /* IP6_11_9 [3] */ | ||
2240 | FN_SSI_SCK34, FN_CAN_DEBUGOUT6, FN_CAN0_TX_B, FN_IERX, | ||
2241 | FN_SSI_SCK9_C, 0, 0, 0, | ||
2242 | /* IP6_8 [1] */ | ||
2243 | FN_SSI_SDATA2, FN_CAN_DEBUGOUT5, | ||
2244 | /* IP6_7_6 [2] */ | ||
2245 | FN_SSI_SDATA1, FN_CAN_DEBUGOUT4, FN_MOUT6, 0, | ||
2246 | /* IP6_5_4 [2] */ | ||
2247 | FN_SSI_SDATA0, FN_CAN_DEBUGOUT3, FN_MOUT5, 0, | ||
2248 | /* IP6_3_2 [2] */ | ||
2249 | FN_SSI_WS0129, FN_CAN_DEBUGOUT2, FN_MOUT2, 0, | ||
2250 | /* IP6_1_0 [2] */ | ||
2251 | FN_SSI_SCK0129, FN_CAN_DEBUGOUT1, FN_MOUT1, 0 } | ||
2252 | }, | ||
2253 | { PINMUX_CFG_REG_VAR("IPSR7", 0xfffc003c, 32, | ||
2254 | 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2) { | ||
2255 | /* IP7_31 [1] */ | ||
2256 | 0, 0, | ||
2257 | /* IP7_30_29 [2] */ | ||
2258 | FN_SD0_WP, FN_DACK2, FN_CTS1_B, 0, | ||
2259 | /* IP7_28_27 [2] */ | ||
2260 | FN_SD0_CD, FN_DREQ2, FN_RTS1_B_TANS_B, 0, | ||
2261 | /* IP7_26_25 [2] */ | ||
2262 | FN_SD0_DAT3, FN_ATAWR1, FN_RX2_B, FN_CC5_TDI, | ||
2263 | /* IP7_24_23 [2] */ | ||
2264 | FN_SD0_DAT2, FN_ATARD1, FN_TX2_B, FN_CC5_TCK, | ||
2265 | /* IP7_22_21 [2] */ | ||
2266 | FN_SD0_DAT1, FN_ATAG1, FN_SCK2_B, FN_CC5_TMS, | ||
2267 | /* IP7_20_19 [2] */ | ||
2268 | FN_SD0_DAT0, FN_ATADIR1, FN_RX1_B, FN_CC5_TRST, | ||
2269 | /* IP7_18_17 [2] */ | ||
2270 | FN_SD0_CMD, FN_ATACS11, FN_TX1_B, FN_CC5_TDO, | ||
2271 | /* IP7_16_15 [2] */ | ||
2272 | FN_SD0_CLK, FN_ATACS01, FN_SCK1_B, 0, | ||
2273 | /* IP7_14_13 [2] */ | ||
2274 | FN_SSI_SDATA8, FN_VSP, FN_IRQ3_B, FN_HSPI_RX1_C, | ||
2275 | /* IP7_12_10 [3] */ | ||
2276 | FN_SSI_SDATA7, FN_CAN_DEBUGOUT15, FN_IRQ2_B, FN_TCLK1_C, | ||
2277 | FN_HSPI_TX1_C, 0, 0, 0, | ||
2278 | /* IP7_9_7 [3] */ | ||
2279 | FN_SSI_WS78, FN_CAN_DEBUGOUT14, FN_IRQ1_B, FN_SSI_WS9_B, | ||
2280 | FN_HSPI_CS1_C, 0, 0, 0, | ||
2281 | /* IP7_6_4 [3] */ | ||
2282 | FN_SSI_SCK78, FN_CAN_DEBUGOUT13, FN_IRQ0_B, FN_SSI_SCK9_B, | ||
2283 | FN_HSPI_CLK1_C, 0, 0, 0, | ||
2284 | /* IP7_3_2 [2] */ | ||
2285 | FN_SSI_SDATA6, FN_ADICHS2, FN_CAN_CLK, FN_IECLK_B, | ||
2286 | /* IP7_1_0 [2] */ | ||
2287 | FN_SSI_WS6, FN_ADICHS1, FN_CAN0_RX, FN_IETX_B } | ||
2288 | }, | ||
2289 | { PINMUX_CFG_REG_VAR("IPSR8", 0xfffc0040, 32, | ||
2290 | 1, 3, 3, 2, 2, 1, 1, 1, 2, 4, 4, 4, 4) { | ||
2291 | /* IP8_31 [1] */ | ||
2292 | 0, 0, | ||
2293 | /* IP8_30_28 [3] */ | ||
2294 | FN_VI0_VSYNC, FN_VI0_DATA1_B_VI0_B1_B, FN_RTS1_C_TANS_C, FN_RX4_D, | ||
2295 | FN_PWMFSW0_C, 0, 0, 0, | ||
2296 | /* IP8_27_25 [3] */ | ||
2297 | FN_VI0_HSYNC, FN_VI0_DATA0_B_VI0_B0_B, FN_CTS1_C, FN_TX4_D, | ||
2298 | FN_MMC1_CMD, FN_HSCK1_B, 0, 0, | ||
2299 | /* IP8_24_23 [2] */ | ||
2300 | FN_VI0_FIELD, FN_RX1_C, FN_HRX1_B, 0, | ||
2301 | /* IP8_22_21 [2] */ | ||
2302 | FN_VI0_CLKENB, FN_TX1_C, FN_HTX1_B, FN_MT1_SYNC, | ||
2303 | /* IP8_20 [1] */ | ||
2304 | FN_VI0_CLK, FN_MMC1_CLK, | ||
2305 | /* IP8_19 [1] */ | ||
2306 | FN_FMIN, FN_RDS_DATA, | ||
2307 | /* IP8_18 [1] */ | ||
2308 | FN_BPFCLK, FN_PCMWE, | ||
2309 | /* IP8_17_16 [2] */ | ||
2310 | FN_FMCLK, FN_RDS_CLK, FN_PCMOE, 0, | ||
2311 | /* IP8_15_12 [4] */ | ||
2312 | FN_HSPI_RX0, FN_RX0, FN_CAN_STEP0, FN_AD_NCS, | ||
2313 | FN_CC5_STATE7, FN_CC5_STATE15, FN_CC5_STATE23, FN_CC5_STATE31, | ||
2314 | FN_CC5_STATE39, 0, 0, 0, | ||
2315 | 0, 0, 0, 0, | ||
2316 | /* IP8_11_8 [4] */ | ||
2317 | FN_HSPI_TX0, FN_TX0, FN_CAN_DEBUG_HW_TRIGGER, FN_AD_DO, | ||
2318 | FN_CC5_STATE6, FN_CC5_STATE14, FN_CC5_STATE22, FN_CC5_STATE30, | ||
2319 | FN_CC5_STATE38, 0, 0, 0, | ||
2320 | 0, 0, 0, 0, | ||
2321 | /* IP8_7_4 [4] */ | ||
2322 | FN_HSPI_CS0, FN_RTS0_TANS, FN_USB_OVC1, FN_AD_DI, | ||
2323 | FN_CC5_STATE5, FN_CC5_STATE13, FN_CC5_STATE21, FN_CC5_STATE29, | ||
2324 | FN_CC5_STATE37, 0, 0, 0, | ||
2325 | 0, 0, 0, 0, | ||
2326 | /* IP8_3_0 [4] */ | ||
2327 | FN_HSPI_CLK0, FN_CTS0, FN_USB_OVC0, FN_AD_CLK, | ||
2328 | FN_CC5_STATE4, FN_CC5_STATE12, FN_CC5_STATE20, FN_CC5_STATE28, | ||
2329 | FN_CC5_STATE36, 0, 0, 0, | ||
2330 | 0, 0, 0, 0 } | ||
2331 | }, | ||
2332 | { PINMUX_CFG_REG_VAR("IPSR9", 0xfffc0044, 32, | ||
2333 | 2, 2, 2, 2, 2, 3, 3, 2, 2, | ||
2334 | 2, 2, 1, 1, 1, 1, 2, 2) { | ||
2335 | /* IP9_31_30 [2] */ | ||
2336 | 0, 0, 0, 0, | ||
2337 | /* IP9_29_28 [2] */ | ||
2338 | FN_VI0_G7, FN_ETH_RXD1, FN_SD2_DAT3_B, FN_ARM_TRACEDATA_9, | ||
2339 | /* IP9_27_26 [2] */ | ||
2340 | FN_VI0_G6, FN_ETH_RXD0, FN_SD2_DAT2_B, FN_ARM_TRACEDATA_8, | ||
2341 | /* IP9_25_24 [2] */ | ||
2342 | FN_VI0_G5, FN_ETH_RX_ER, FN_SD2_DAT1_B, FN_ARM_TRACEDATA_7, | ||
2343 | /* IP9_23_22 [2] */ | ||
2344 | FN_VI0_G4, FN_ETH_TX_EN, FN_SD2_DAT0_B, FN_ARM_TRACEDATA_6, | ||
2345 | /* IP9_21_19 [3] */ | ||
2346 | FN_VI0_G3, FN_ETH_CRS_DV, FN_MMC1_D7, FN_ARM_TRACEDATA_5, | ||
2347 | FN_TS_SDAT0, 0, 0, 0, | ||
2348 | /* IP9_18_16 [3] */ | ||
2349 | FN_VI0_G2, FN_ETH_TXD1, FN_MMC1_D6, FN_ARM_TRACEDATA_4, | ||
2350 | FN_TS_SPSYNC0, 0, 0, 0, | ||
2351 | /* IP9_15_14 [2] */ | ||
2352 | FN_VI0_G1, FN_SSI_WS78_C, FN_IRQ1, FN_ARM_TRACEDATA_3, | ||
2353 | /* IP9_13_12 [2] */ | ||
2354 | FN_VI0_G0, FN_SSI_SCK78_C, FN_IRQ0, FN_ARM_TRACEDATA_2, | ||
2355 | /* IP9_11_10 [2] */ | ||
2356 | FN_VI0_DATA7_VI0_B7, FN_MMC1_D5, FN_ARM_TRACEDATA_1, 0, | ||
2357 | /* IP9_9_8 [2] */ | ||
2358 | FN_VI0_DATA6_VI0_B6, FN_MMC1_D4, FN_ARM_TRACEDATA_0, 0, | ||
2359 | /* IP9_7 [1] */ | ||
2360 | FN_VI0_DATA5_VI0_B5, FN_MMC1_D3, | ||
2361 | /* IP9_6 [1] */ | ||
2362 | FN_VI0_DATA4_VI0_B4, FN_MMC1_D2, | ||
2363 | /* IP9_5 [1] */ | ||
2364 | FN_VI0_DATA3_VI0_B3, FN_MMC1_D1, | ||
2365 | /* IP9_4 [1] */ | ||
2366 | FN_VI0_DATA2_VI0_B2, FN_MMC1_D0, | ||
2367 | /* IP9_3_2 [2] */ | ||
2368 | FN_VI0_DATA1_VI0_B1, FN_HCTS1_B, FN_MT1_PWM, 0, | ||
2369 | /* IP9_1_0 [2] */ | ||
2370 | FN_VI0_DATA0_VI0_B0, FN_HRTS1_B, FN_MT1_VCXO, 0 } | ||
2371 | }, | ||
2372 | { PINMUX_CFG_REG_VAR("IPSR10", 0xfffc0048, 32, | ||
2373 | 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3) { | ||
2374 | /* IP10_31_29 [3] */ | ||
2375 | FN_VI1_VSYNC, FN_AUDIO_CLKOUT_C, FN_SSI_WS4, FN_SIM_CLK, | ||
2376 | FN_GPS_MAG_C, FN_SPV_TRST, FN_SCL3, 0, | ||
2377 | /* IP10_28_26 [3] */ | ||
2378 | FN_VI1_HSYNC, FN_VI3_CLK, FN_SSI_SCK4, FN_GPS_SIGN_C, | ||
2379 | FN_PWMFSW0_E, 0, 0, 0, | ||
2380 | /* IP10_25_24 [2] */ | ||
2381 | FN_VI1_CLK, FN_SIM_D, FN_SDA3, 0, | ||
2382 | /* IP10_23_21 [3] */ | ||
2383 | FN_VI0_R7, FN_ETH_MDIO, FN_DACK2_C, FN_HSPI_RX1_B, | ||
2384 | FN_SCIF_CLK_D, FN_TRACECTL, FN_MT1_PEN, 0, | ||
2385 | /* IP10_20_18 [3] */ | ||
2386 | FN_VI0_R6, FN_ETH_MDC, FN_DREQ2_C, FN_HSPI_TX1_B, | ||
2387 | FN_TRACECLK, FN_MT1_BEN, FN_PWMFSW0_D, 0, | ||
2388 | /* IP10_17_15 [3] */ | ||
2389 | FN_VI0_R5, FN_ETH_TXD0, FN_SD2_WP_B, FN_HSPI_CS1_B, | ||
2390 | FN_ARM_TRACEDATA_15, FN_MT1_D, FN_TS_SDEN0, 0, | ||
2391 | /* IP10_14_12 [3] */ | ||
2392 | FN_VI0_R4, FN_ETH_REFCLK, FN_SD2_CD_B, FN_HSPI_CLK1_B, | ||
2393 | FN_ARM_TRACEDATA_14, FN_MT1_CLK, FN_TS_SCK0, 0, | ||
2394 | /* IP10_11_9 [3] */ | ||
2395 | FN_VI0_R3, FN_ETH_MAGIC, FN_SD2_CMD_B, FN_IRQ3, | ||
2396 | FN_ARM_TRACEDATA_13, 0, 0, 0, | ||
2397 | /* IP10_8_6 [3] */ | ||
2398 | FN_VI0_R2, FN_ETH_LINK, FN_SD2_CLK_B, FN_IRQ2, | ||
2399 | FN_ARM_TRACEDATA_12, 0, 0, 0, | ||
2400 | /* IP10_5_3 [3] */ | ||
2401 | FN_VI0_R1, FN_SSI_SDATA8_C, FN_DACK1_B, FN_ARM_TRACEDATA_11, | ||
2402 | FN_DACK0_C, FN_DRACK0_C, 0, 0, | ||
2403 | /* IP10_2_0 [3] */ | ||
2404 | FN_VI0_R0, FN_SSI_SDATA7_C, FN_SCK1_C, FN_DREQ1_B, | ||
2405 | FN_ARM_TRACEDATA_10, FN_DREQ0_C, 0, 0 } | ||
2406 | }, | ||
2407 | { PINMUX_CFG_REG_VAR("IPSR11", 0xfffc004c, 32, | ||
2408 | 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) { | ||
2409 | /* IP11_31_30 [2] */ | ||
2410 | 0, 0, 0, 0, | ||
2411 | /* IP11_29_27 [3] */ | ||
2412 | FN_VI1_G1, FN_VI3_DATA1, FN_SSI_SCK1, FN_TS_SDEN1, | ||
2413 | FN_DACK2_B, FN_RX2, FN_HRTS0_B, 0, | ||
2414 | /* IP11_26_24 [3] */ | ||
2415 | FN_VI1_G0, FN_VI3_DATA0, FN_DU1_DOTCLKOUT1, FN_TS_SCK1, | ||
2416 | FN_DREQ2_B, FN_TX2, FN_SPA_TDO, FN_HCTS0_B, | ||
2417 | /* IP11_23_21 [3] */ | ||
2418 | FN_VI1_DATA7_VI1_B7, FN_SD2_WP, FN_MT0_PWM, FN_SPA_TDI, | ||
2419 | FN_HSPI_RX1_D, 0, 0, 0, | ||
2420 | /* IP11_20_18 [3] */ | ||
2421 | FN_VI1_DATA6_VI1_B6, FN_SD2_CD, FN_MT0_VCXO, FN_SPA_TMS, | ||
2422 | FN_HSPI_TX1_D, 0, 0, 0, | ||
2423 | /* IP11_17_15 [3] */ | ||
2424 | FN_VI1_DATA5_VI1_B5, FN_SD2_CMD, FN_MT0_SYNC, FN_SPA_TCK, | ||
2425 | FN_HSPI_CS1_D, FN_ADICHS2_B, 0, 0, | ||
2426 | /* IP11_14_12 [3] */ | ||
2427 | FN_VI1_DATA4_VI1_B4, FN_SD2_CLK, FN_MT0_PEN, FN_SPA_TRST, | ||
2428 | FN_HSPI_CLK1_D, FN_ADICHS1_B, 0, 0, | ||
2429 | /* IP11_11_9 [3] */ | ||
2430 | FN_VI1_DATA3_VI1_B3, FN_SD2_DAT3, FN_MT0_BEN, FN_SPV_TDO, | ||
2431 | FN_ADICHS0_B, 0, 0, 0, | ||
2432 | /* IP11_8_6 [3] */ | ||
2433 | FN_VI1_DATA2_VI1_B2, FN_SD2_DAT2, FN_MT0_D, FN_SPVTDI, | ||
2434 | FN_ADIDATA_B, 0, 0, 0, | ||
2435 | /* IP11_5_3 [3] */ | ||
2436 | FN_VI1_DATA1_VI1_B1, FN_SD2_DAT1, FN_MT0_CLK, FN_SPV_TMS, | ||
2437 | FN_ADICS_B_SAMP_B, 0, 0, 0, | ||
2438 | /* IP11_2_0 [3] */ | ||
2439 | FN_VI1_DATA0_VI1_B0, FN_SD2_DAT0, FN_SIM_RST, FN_SPV_TCK, | ||
2440 | FN_ADICLK_B, 0, 0, 0 } | ||
2441 | }, | ||
2442 | { PINMUX_CFG_REG_VAR("IPSR12", 0xfffc0050, 32, | ||
2443 | 4, 4, 4, 2, 3, 3, 3, 3, 3, 3) { | ||
2444 | /* IP12_31_28 [4] */ | ||
2445 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2446 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2447 | /* IP12_27_24 [4] */ | ||
2448 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2449 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2450 | /* IP12_23_20 [4] */ | ||
2451 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2452 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2453 | /* IP12_19_18 [2] */ | ||
2454 | 0, 0, 0, 0, | ||
2455 | /* IP12_17_15 [3] */ | ||
2456 | FN_VI1_G7, FN_VI3_DATA7, FN_GPS_MAG, FN_FCE, | ||
2457 | FN_SCK4_B, 0, 0, 0, | ||
2458 | /* IP12_14_12 [3] */ | ||
2459 | FN_VI1_G6, FN_VI3_DATA6, FN_GPS_SIGN, FN_FRB, | ||
2460 | FN_RX4_B, FN_SIM_CLK_B, 0, 0, | ||
2461 | /* IP12_11_9 [3] */ | ||
2462 | FN_VI1_G5, FN_VI3_DATA5, FN_GPS_CLK, FN_FSE, | ||
2463 | FN_TX4_B, FN_SIM_D_B, 0, 0, | ||
2464 | /* IP12_8_6 [3] */ | ||
2465 | FN_VI1_G4, FN_VI3_DATA4, FN_SSI_WS2, FN_SDA1_C, | ||
2466 | FN_SIM_RST_B, FN_HRX0_B, 0, 0, | ||
2467 | /* IP12_5_3 [3] */ | ||
2468 | FN_VI1_G3, FN_VI3_DATA3, FN_SSI_SCK2, FN_TS_SDAT1, | ||
2469 | FN_SCL1_C, FN_HTX0_B, 0, 0, | ||
2470 | /* IP12_2_0 [3] */ | ||
2471 | FN_VI1_G2, FN_VI3_DATA2, FN_SSI_WS1, FN_TS_SPSYNC1, | ||
2472 | FN_SCK2, FN_HSCK0_B, 0, 0 } | ||
2473 | }, | ||
2474 | { PINMUX_CFG_REG_VAR("MOD_SEL", 0xfffc0090, 32, | ||
2475 | 2, 2, 3, 3, 2, 2, 2, 2, 2, | ||
2476 | 1, 1, 1, 1, 1, 1, 1, 2, 1, 2) { | ||
2477 | /* SEL_SCIF5 [2] */ | ||
2478 | FN_SEL_SCIF5_0, FN_SEL_SCIF5_1, FN_SEL_SCIF5_2, FN_SEL_SCIF5_3, | ||
2479 | /* SEL_SCIF4 [2] */ | ||
2480 | FN_SEL_SCIF4_0, FN_SEL_SCIF4_1, FN_SEL_SCIF4_2, FN_SEL_SCIF4_3, | ||
2481 | /* SEL_SCIF3 [3] */ | ||
2482 | FN_SEL_SCIF3_0, FN_SEL_SCIF3_1, FN_SEL_SCIF3_2, FN_SEL_SCIF3_3, | ||
2483 | FN_SEL_SCIF3_4, 0, 0, 0, | ||
2484 | /* SEL_SCIF2 [3] */ | ||
2485 | FN_SEL_SCIF2_0, FN_SEL_SCIF2_1, FN_SEL_SCIF2_2, FN_SEL_SCIF2_3, | ||
2486 | FN_SEL_SCIF2_4, 0, 0, 0, | ||
2487 | /* SEL_SCIF1 [2] */ | ||
2488 | FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, 0, | ||
2489 | /* SEL_SCIF0 [2] */ | ||
2490 | FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, FN_SEL_SCIF0_2, FN_SEL_SCIF0_3, | ||
2491 | /* SEL_SSI9 [2] */ | ||
2492 | FN_SEL_SSI9_0, FN_SEL_SSI9_1, FN_SEL_SSI9_2, 0, | ||
2493 | /* SEL_SSI8 [2] */ | ||
2494 | FN_SEL_SSI8_0, FN_SEL_SSI8_1, FN_SEL_SSI8_2, 0, | ||
2495 | /* SEL_SSI7 [2] */ | ||
2496 | FN_SEL_SSI7_0, FN_SEL_SSI7_1, FN_SEL_SSI7_2, 0, | ||
2497 | /* SEL_VI0 [1] */ | ||
2498 | FN_SEL_VI0_0, FN_SEL_VI0_1, | ||
2499 | /* SEL_SD2 [1] */ | ||
2500 | FN_SEL_SD2_0, FN_SEL_SD2_1, | ||
2501 | /* SEL_INT3 [1] */ | ||
2502 | FN_SEL_INT3_0, FN_SEL_INT3_1, | ||
2503 | /* SEL_INT2 [1] */ | ||
2504 | FN_SEL_INT2_0, FN_SEL_INT2_1, | ||
2505 | /* SEL_INT1 [1] */ | ||
2506 | FN_SEL_INT1_0, FN_SEL_INT1_1, | ||
2507 | /* SEL_INT0 [1] */ | ||
2508 | FN_SEL_INT0_0, FN_SEL_INT0_1, | ||
2509 | /* SEL_IE [1] */ | ||
2510 | FN_SEL_IE_0, FN_SEL_IE_1, | ||
2511 | /* SEL_EXBUS2 [2] */ | ||
2512 | FN_SEL_EXBUS2_0, FN_SEL_EXBUS2_1, FN_SEL_EXBUS2_2, 0, | ||
2513 | /* SEL_EXBUS1 [1] */ | ||
2514 | FN_SEL_EXBUS1_0, FN_SEL_EXBUS1_1, | ||
2515 | /* SEL_EXBUS0 [2] */ | ||
2516 | FN_SEL_EXBUS0_0, FN_SEL_EXBUS0_1, FN_SEL_EXBUS0_2, 0 } | ||
2517 | }, | ||
2518 | { PINMUX_CFG_REG_VAR("MOD_SEL2", 0xfffc0094, 32, | ||
2519 | 2, 2, 2, 2, 1, 1, 1, 3, 1, | ||
2520 | 2, 2, 2, 2, 1, 1, 2, 1, 2, 2) { | ||
2521 | /* SEL_TMU1 [2] */ | ||
2522 | FN_SEL_TMU1_0, FN_SEL_TMU1_1, FN_SEL_TMU1_2, 0, | ||
2523 | /* SEL_TMU0 [2] */ | ||
2524 | FN_SEL_TMU0_0, FN_SEL_TMU0_1, FN_SEL_TMU0_2, FN_SEL_TMU0_3, | ||
2525 | /* SEL_SCIF [2] */ | ||
2526 | FN_SEL_SCIF_0, FN_SEL_SCIF_1, FN_SEL_SCIF_2, FN_SEL_SCIF_3, | ||
2527 | /* SEL_CANCLK [2] */ | ||
2528 | FN_SEL_CANCLK_0, FN_SEL_CANCLK_1, FN_SEL_CANCLK_2, | ||
2529 | /* SEL_CAN0 [1] */ | ||
2530 | FN_SEL_CAN0_0, FN_SEL_CAN0_1, | ||
2531 | /* SEL_HSCIF1 [1] */ | ||
2532 | FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1, | ||
2533 | /* SEL_HSCIF0 [1] */ | ||
2534 | FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1, | ||
2535 | /* SEL_PWMFSW [3] */ | ||
2536 | FN_SEL_PWMFSW_0, FN_SEL_PWMFSW_1, FN_SEL_PWMFSW_2, | ||
2537 | FN_SEL_PWMFSW_3, FN_SEL_PWMFSW_4, 0, 0, 0, | ||
2538 | /* SEL_ADI [1] */ | ||
2539 | FN_SEL_ADI_0, FN_SEL_ADI_1, | ||
2540 | /* [2] */ | ||
2541 | 0, 0, 0, 0, | ||
2542 | /* [2] */ | ||
2543 | 0, 0, 0, 0, | ||
2544 | /* [2] */ | ||
2545 | 0, 0, 0, 0, | ||
2546 | /* SEL_GPS [2] */ | ||
2547 | FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, FN_SEL_GPS_3, | ||
2548 | /* SEL_SIM [1] */ | ||
2549 | FN_SEL_SIM_0, FN_SEL_SIM_1, | ||
2550 | /* SEL_HSPI2 [1] */ | ||
2551 | FN_SEL_HSPI2_0, FN_SEL_HSPI2_1, | ||
2552 | /* SEL_HSPI1 [2] */ | ||
2553 | FN_SEL_HSPI1_0, FN_SEL_HSPI1_1, FN_SEL_HSPI1_2, FN_SEL_HSPI1_3, | ||
2554 | /* SEL_I2C3 [1] */ | ||
2555 | FN_SEL_I2C3_0, FN_SEL_I2C3_1, | ||
2556 | /* SEL_I2C2 [2] */ | ||
2557 | FN_SEL_I2C2_0, FN_SEL_I2C2_1, FN_SEL_I2C2_2, FN_SEL_I2C2_3, | ||
2558 | /* SEL_I2C1 [2] */ | ||
2559 | FN_SEL_I2C1_0, FN_SEL_I2C1_1, FN_SEL_I2C1_2, FN_SEL_I2C1_3 } | ||
2560 | }, | ||
2561 | { PINMUX_CFG_REG("INOUTSEL0", 0xffc40004, 32, 1) { GP_INOUTSEL(0) } }, | ||
2562 | { PINMUX_CFG_REG("INOUTSEL1", 0xffc41004, 32, 1) { GP_INOUTSEL(1) } }, | ||
2563 | { PINMUX_CFG_REG("INOUTSEL2", 0xffc42004, 32, 1) { GP_INOUTSEL(2) } }, | ||
2564 | { PINMUX_CFG_REG("INOUTSEL3", 0xffc43004, 32, 1) { GP_INOUTSEL(3) } }, | ||
2565 | { PINMUX_CFG_REG("INOUTSEL4", 0xffc44004, 32, 1) { GP_INOUTSEL(4) } }, | ||
2566 | { PINMUX_CFG_REG("INOUTSEL5", 0xffc45004, 32, 1) { GP_INOUTSEL(5) } }, | ||
2567 | { PINMUX_CFG_REG("INOUTSEL6", 0xffc46004, 32, 1) { | ||
2568 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
2569 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
2570 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
2571 | 0, 0, | ||
2572 | 0, 0, | ||
2573 | 0, 0, | ||
2574 | GP_6_8_IN, GP_6_8_OUT, | ||
2575 | GP_6_7_IN, GP_6_7_OUT, | ||
2576 | GP_6_6_IN, GP_6_6_OUT, | ||
2577 | GP_6_5_IN, GP_6_5_OUT, | ||
2578 | GP_6_4_IN, GP_6_4_OUT, | ||
2579 | GP_6_3_IN, GP_6_3_OUT, | ||
2580 | GP_6_2_IN, GP_6_2_OUT, | ||
2581 | GP_6_1_IN, GP_6_1_OUT, | ||
2582 | GP_6_0_IN, GP_6_0_OUT, } | ||
2583 | }, | ||
2584 | { }, | ||
2585 | }; | ||
2586 | |||
2587 | static struct pinmux_data_reg pinmux_data_regs[] = { | ||
2588 | { PINMUX_DATA_REG("INDT0", 0xffc40008, 32) { GP_INDT(0) } }, | ||
2589 | { PINMUX_DATA_REG("INDT1", 0xffc41008, 32) { GP_INDT(1) } }, | ||
2590 | { PINMUX_DATA_REG("INDT2", 0xffc42008, 32) { GP_INDT(2) } }, | ||
2591 | { PINMUX_DATA_REG("INDT3", 0xffc43008, 32) { GP_INDT(3) } }, | ||
2592 | { PINMUX_DATA_REG("INDT4", 0xffc44008, 32) { GP_INDT(4) } }, | ||
2593 | { PINMUX_DATA_REG("INDT5", 0xffc45008, 32) { GP_INDT(5) } }, | ||
2594 | { PINMUX_DATA_REG("INDT6", 0xffc46008, 32) { | ||
2595 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
2596 | 0, 0, 0, 0, 0, 0, 0, GP_6_8_DATA, | ||
2597 | GP_6_7_DATA, GP_6_6_DATA, GP_6_5_DATA, GP_6_4_DATA, | ||
2598 | GP_6_3_DATA, GP_6_2_DATA, GP_6_1_DATA, GP_6_0_DATA } | ||
2599 | }, | ||
2600 | { }, | ||
2601 | }; | ||
2602 | |||
2603 | static struct resource r8a7779_pfc_resources[] = { | ||
2604 | [0] = { | ||
2605 | .start = 0xfffc0000, | ||
2606 | .end = 0xfffc023b, | ||
2607 | .flags = IORESOURCE_MEM, | ||
2608 | }, | ||
2609 | [1] = { | ||
2610 | .start = 0xffc40000, | ||
2611 | .end = 0xffc46fff, | ||
2612 | .flags = IORESOURCE_MEM, | ||
2613 | } | ||
2614 | }; | ||
2615 | |||
2616 | static struct pinmux_info r8a7779_pinmux_info = { | ||
2617 | .name = "r8a7779_pfc", | ||
2618 | |||
2619 | .resource = r8a7779_pfc_resources, | ||
2620 | .num_resources = ARRAY_SIZE(r8a7779_pfc_resources), | ||
2621 | |||
2622 | .unlock_reg = 0xfffc0000, /* PMMR */ | ||
2623 | |||
2624 | .reserved_id = PINMUX_RESERVED, | ||
2625 | .data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, | ||
2626 | .input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, | ||
2627 | .output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, | ||
2628 | .mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, | ||
2629 | .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, | ||
2630 | |||
2631 | .first_gpio = GPIO_GP_0_0, | ||
2632 | .last_gpio = GPIO_FN_SCK4_B, | ||
2633 | |||
2634 | .gpios = pinmux_gpios, | ||
2635 | .cfg_regs = pinmux_config_regs, | ||
2636 | .data_regs = pinmux_data_regs, | ||
2637 | |||
2638 | .gpio_data = pinmux_data, | ||
2639 | .gpio_data_size = ARRAY_SIZE(pinmux_data), | ||
2640 | }; | ||
2641 | |||
2642 | void r8a7779_pinmux_init(void) | ||
2643 | { | ||
2644 | register_pinmux(&r8a7779_pinmux_info); | ||
2645 | } | ||
diff --git a/arch/arm/mach-shmobile/pfc-sh7372.c b/arch/arm/mach-shmobile/pfc-sh7372.c deleted file mode 100644 index 7a1525fd6ada..000000000000 --- a/arch/arm/mach-shmobile/pfc-sh7372.c +++ /dev/null | |||
@@ -1,1663 +0,0 @@ | |||
1 | /* | ||
2 | * sh7372 processor support - PFC hardware block | ||
3 | * | ||
4 | * Copyright (C) 2010 Kuninori Morimoto <morimoto.kuninori@renesas.com> | ||
5 | * | ||
6 | * Based on | ||
7 | * sh7367 processor support - PFC hardware block | ||
8 | * Copyright (C) 2010 Magnus Damm | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; version 2 of the 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 | #include <linux/init.h> | ||
24 | #include <linux/kernel.h> | ||
25 | #include <linux/sh_pfc.h> | ||
26 | #include <mach/irqs.h> | ||
27 | #include <mach/sh7372.h> | ||
28 | |||
29 | #define CPU_ALL_PORT(fn, pfx, sfx) \ | ||
30 | PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \ | ||
31 | PORT_10(fn, pfx##10, sfx), PORT_10(fn, pfx##11, sfx), \ | ||
32 | PORT_10(fn, pfx##12, sfx), PORT_10(fn, pfx##13, sfx), \ | ||
33 | PORT_10(fn, pfx##14, sfx), PORT_10(fn, pfx##15, sfx), \ | ||
34 | 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) | ||
36 | |||
37 | enum { | ||
38 | PINMUX_RESERVED = 0, | ||
39 | |||
40 | /* PORT0_DATA -> PORT190_DATA */ | ||
41 | PINMUX_DATA_BEGIN, | ||
42 | PORT_ALL(DATA), | ||
43 | PINMUX_DATA_END, | ||
44 | |||
45 | /* PORT0_IN -> PORT190_IN */ | ||
46 | PINMUX_INPUT_BEGIN, | ||
47 | PORT_ALL(IN), | ||
48 | PINMUX_INPUT_END, | ||
49 | |||
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 */ | ||
61 | PINMUX_OUTPUT_BEGIN, | ||
62 | PORT_ALL(OUT), | ||
63 | PINMUX_OUTPUT_END, | ||
64 | |||
65 | PINMUX_FUNCTION_BEGIN, | ||
66 | PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT190_FN_IN */ | ||
67 | PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT190_FN_OUT */ | ||
68 | PORT_ALL(FN0), /* PORT0_FN0 -> PORT190_FN0 */ | ||
69 | PORT_ALL(FN1), /* PORT0_FN1 -> PORT190_FN1 */ | ||
70 | PORT_ALL(FN2), /* PORT0_FN2 -> PORT190_FN2 */ | ||
71 | PORT_ALL(FN3), /* PORT0_FN3 -> PORT190_FN3 */ | ||
72 | PORT_ALL(FN4), /* PORT0_FN4 -> PORT190_FN4 */ | ||
73 | PORT_ALL(FN5), /* PORT0_FN5 -> PORT190_FN5 */ | ||
74 | PORT_ALL(FN6), /* PORT0_FN6 -> PORT190_FN6 */ | ||
75 | PORT_ALL(FN7), /* PORT0_FN7 -> PORT190_FN7 */ | ||
76 | |||
77 | MSEL1CR_31_0, MSEL1CR_31_1, | ||
78 | MSEL1CR_30_0, MSEL1CR_30_1, | ||
79 | MSEL1CR_29_0, MSEL1CR_29_1, | ||
80 | MSEL1CR_28_0, MSEL1CR_28_1, | ||
81 | MSEL1CR_27_0, MSEL1CR_27_1, | ||
82 | MSEL1CR_26_0, MSEL1CR_26_1, | ||
83 | MSEL1CR_16_0, MSEL1CR_16_1, | ||
84 | MSEL1CR_15_0, MSEL1CR_15_1, | ||
85 | MSEL1CR_14_0, MSEL1CR_14_1, | ||
86 | MSEL1CR_13_0, MSEL1CR_13_1, | ||
87 | MSEL1CR_12_0, MSEL1CR_12_1, | ||
88 | MSEL1CR_9_0, MSEL1CR_9_1, | ||
89 | MSEL1CR_8_0, MSEL1CR_8_1, | ||
90 | MSEL1CR_7_0, MSEL1CR_7_1, | ||
91 | MSEL1CR_6_0, MSEL1CR_6_1, | ||
92 | MSEL1CR_4_0, MSEL1CR_4_1, | ||
93 | MSEL1CR_3_0, MSEL1CR_3_1, | ||
94 | MSEL1CR_2_0, MSEL1CR_2_1, | ||
95 | MSEL1CR_0_0, MSEL1CR_0_1, | ||
96 | |||
97 | MSEL3CR_27_0, MSEL3CR_27_1, | ||
98 | MSEL3CR_26_0, MSEL3CR_26_1, | ||
99 | MSEL3CR_21_0, MSEL3CR_21_1, | ||
100 | MSEL3CR_20_0, MSEL3CR_20_1, | ||
101 | MSEL3CR_15_0, MSEL3CR_15_1, | ||
102 | MSEL3CR_9_0, MSEL3CR_9_1, | ||
103 | MSEL3CR_6_0, MSEL3CR_6_1, | ||
104 | |||
105 | MSEL4CR_19_0, MSEL4CR_19_1, | ||
106 | MSEL4CR_18_0, MSEL4CR_18_1, | ||
107 | MSEL4CR_17_0, MSEL4CR_17_1, | ||
108 | MSEL4CR_16_0, MSEL4CR_16_1, | ||
109 | MSEL4CR_15_0, MSEL4CR_15_1, | ||
110 | MSEL4CR_14_0, MSEL4CR_14_1, | ||
111 | MSEL4CR_10_0, MSEL4CR_10_1, | ||
112 | MSEL4CR_6_0, MSEL4CR_6_1, | ||
113 | MSEL4CR_4_0, MSEL4CR_4_1, | ||
114 | MSEL4CR_1_0, MSEL4CR_1_1, | ||
115 | PINMUX_FUNCTION_END, | ||
116 | |||
117 | PINMUX_MARK_BEGIN, | ||
118 | |||
119 | /* IRQ */ | ||
120 | IRQ0_6_MARK, IRQ0_162_MARK, IRQ1_MARK, IRQ2_4_MARK, | ||
121 | IRQ2_5_MARK, IRQ3_8_MARK, IRQ3_16_MARK, IRQ4_17_MARK, | ||
122 | IRQ4_163_MARK, IRQ5_MARK, IRQ6_39_MARK, IRQ6_164_MARK, | ||
123 | IRQ7_40_MARK, IRQ7_167_MARK, IRQ8_41_MARK, IRQ8_168_MARK, | ||
124 | IRQ9_42_MARK, IRQ9_169_MARK, IRQ10_MARK, IRQ11_MARK, | ||
125 | IRQ12_80_MARK, IRQ12_137_MARK, IRQ13_81_MARK, IRQ13_145_MARK, | ||
126 | IRQ14_82_MARK, IRQ14_146_MARK, IRQ15_83_MARK, IRQ15_147_MARK, | ||
127 | IRQ16_84_MARK, IRQ16_170_MARK, IRQ17_MARK, IRQ18_MARK, | ||
128 | IRQ19_MARK, IRQ20_MARK, IRQ21_MARK, IRQ22_MARK, | ||
129 | IRQ23_MARK, IRQ24_MARK, IRQ25_MARK, IRQ26_121_MARK, | ||
130 | IRQ26_172_MARK, IRQ27_122_MARK, IRQ27_180_MARK, IRQ28_123_MARK, | ||
131 | IRQ28_181_MARK, IRQ29_129_MARK, IRQ29_182_MARK, IRQ30_130_MARK, | ||
132 | IRQ30_183_MARK, IRQ31_138_MARK, IRQ31_184_MARK, | ||
133 | |||
134 | /* MSIOF0 */ | ||
135 | MSIOF0_TSYNC_MARK, MSIOF0_TSCK_MARK, MSIOF0_RXD_MARK, | ||
136 | MSIOF0_RSCK_MARK, MSIOF0_RSYNC_MARK, MSIOF0_MCK0_MARK, | ||
137 | MSIOF0_MCK1_MARK, MSIOF0_SS1_MARK, MSIOF0_SS2_MARK, | ||
138 | MSIOF0_TXD_MARK, | ||
139 | |||
140 | /* MSIOF1 */ | ||
141 | MSIOF1_TSCK_39_MARK, MSIOF1_TSYNC_40_MARK, | ||
142 | MSIOF1_TSCK_88_MARK, MSIOF1_TSYNC_89_MARK, | ||
143 | MSIOF1_TXD_41_MARK, MSIOF1_RXD_42_MARK, | ||
144 | MSIOF1_TXD_90_MARK, MSIOF1_RXD_91_MARK, | ||
145 | MSIOF1_SS1_43_MARK, MSIOF1_SS2_44_MARK, | ||
146 | MSIOF1_SS1_92_MARK, MSIOF1_SS2_93_MARK, | ||
147 | MSIOF1_RSCK_MARK, MSIOF1_RSYNC_MARK, | ||
148 | MSIOF1_MCK0_MARK, MSIOF1_MCK1_MARK, | ||
149 | |||
150 | /* MSIOF2 */ | ||
151 | MSIOF2_RSCK_MARK, MSIOF2_RSYNC_MARK, MSIOF2_MCK0_MARK, | ||
152 | MSIOF2_MCK1_MARK, MSIOF2_SS1_MARK, MSIOF2_SS2_MARK, | ||
153 | MSIOF2_TSYNC_MARK, MSIOF2_TSCK_MARK, MSIOF2_RXD_MARK, | ||
154 | MSIOF2_TXD_MARK, | ||
155 | |||
156 | /* BBIF1 */ | ||
157 | BBIF1_RXD_MARK, BBIF1_TSYNC_MARK, BBIF1_TSCK_MARK, | ||
158 | BBIF1_TXD_MARK, BBIF1_RSCK_MARK, BBIF1_RSYNC_MARK, | ||
159 | BBIF1_FLOW_MARK, BB_RX_FLOW_N_MARK, | ||
160 | |||
161 | /* BBIF2 */ | ||
162 | BBIF2_TSCK1_MARK, BBIF2_TSYNC1_MARK, | ||
163 | BBIF2_TXD1_MARK, BBIF2_RXD_MARK, | ||
164 | |||
165 | /* FSI */ | ||
166 | FSIACK_MARK, FSIBCK_MARK, FSIAILR_MARK, FSIAIBT_MARK, | ||
167 | FSIAISLD_MARK, FSIAOMC_MARK, FSIAOLR_MARK, FSIAOBT_MARK, | ||
168 | FSIAOSLD_MARK, FSIASPDIF_11_MARK, FSIASPDIF_15_MARK, | ||
169 | |||
170 | /* FMSI */ | ||
171 | FMSOCK_MARK, FMSOOLR_MARK, FMSIOLR_MARK, FMSOOBT_MARK, | ||
172 | FMSIOBT_MARK, FMSOSLD_MARK, FMSOILR_MARK, FMSIILR_MARK, | ||
173 | FMSOIBT_MARK, FMSIIBT_MARK, FMSISLD_MARK, FMSICK_MARK, | ||
174 | |||
175 | /* SCIFA0 */ | ||
176 | SCIFA0_TXD_MARK, SCIFA0_RXD_MARK, SCIFA0_SCK_MARK, | ||
177 | SCIFA0_RTS_MARK, SCIFA0_CTS_MARK, | ||
178 | |||
179 | /* SCIFA1 */ | ||
180 | SCIFA1_TXD_MARK, SCIFA1_RXD_MARK, SCIFA1_SCK_MARK, | ||
181 | SCIFA1_RTS_MARK, SCIFA1_CTS_MARK, | ||
182 | |||
183 | /* SCIFA2 */ | ||
184 | SCIFA2_CTS1_MARK, SCIFA2_RTS1_MARK, SCIFA2_TXD1_MARK, | ||
185 | SCIFA2_RXD1_MARK, SCIFA2_SCK1_MARK, | ||
186 | |||
187 | /* SCIFA3 */ | ||
188 | SCIFA3_CTS_43_MARK, SCIFA3_CTS_140_MARK, SCIFA3_RTS_44_MARK, | ||
189 | SCIFA3_RTS_141_MARK, SCIFA3_SCK_MARK, SCIFA3_TXD_MARK, | ||
190 | SCIFA3_RXD_MARK, | ||
191 | |||
192 | /* SCIFA4 */ | ||
193 | SCIFA4_RXD_MARK, SCIFA4_TXD_MARK, | ||
194 | |||
195 | /* SCIFA5 */ | ||
196 | SCIFA5_RXD_MARK, SCIFA5_TXD_MARK, | ||
197 | |||
198 | /* SCIFB */ | ||
199 | SCIFB_SCK_MARK, SCIFB_RTS_MARK, SCIFB_CTS_MARK, | ||
200 | SCIFB_TXD_MARK, SCIFB_RXD_MARK, | ||
201 | |||
202 | /* CEU */ | ||
203 | VIO_HD_MARK, VIO_CKO1_MARK, VIO_CKO2_MARK, VIO_VD_MARK, | ||
204 | VIO_CLK_MARK, VIO_FIELD_MARK, VIO_CKO_MARK, | ||
205 | VIO_D0_MARK, VIO_D1_MARK, VIO_D2_MARK, VIO_D3_MARK, | ||
206 | VIO_D4_MARK, VIO_D5_MARK, VIO_D6_MARK, VIO_D7_MARK, | ||
207 | VIO_D8_MARK, VIO_D9_MARK, VIO_D10_MARK, VIO_D11_MARK, | ||
208 | VIO_D12_MARK, VIO_D13_MARK, VIO_D14_MARK, VIO_D15_MARK, | ||
209 | |||
210 | /* USB0 */ | ||
211 | IDIN_0_MARK, EXTLP_0_MARK, OVCN2_0_MARK, PWEN_0_MARK, | ||
212 | OVCN_0_MARK, VBUS0_0_MARK, | ||
213 | |||
214 | /* USB1 */ | ||
215 | IDIN_1_18_MARK, IDIN_1_113_MARK, | ||
216 | PWEN_1_115_MARK, PWEN_1_138_MARK, | ||
217 | OVCN_1_114_MARK, OVCN_1_162_MARK, | ||
218 | EXTLP_1_MARK, OVCN2_1_MARK, | ||
219 | VBUS0_1_MARK, | ||
220 | |||
221 | /* GPIO */ | ||
222 | GPI0_MARK, GPI1_MARK, GPO0_MARK, GPO1_MARK, | ||
223 | |||
224 | /* BSC */ | ||
225 | BS_MARK, WE1_MARK, | ||
226 | CKO_MARK, WAIT_MARK, RDWR_MARK, | ||
227 | |||
228 | A0_MARK, A1_MARK, A2_MARK, A3_MARK, | ||
229 | A6_MARK, A7_MARK, A8_MARK, A9_MARK, | ||
230 | A10_MARK, A11_MARK, A12_MARK, A13_MARK, | ||
231 | A14_MARK, A15_MARK, A16_MARK, A17_MARK, | ||
232 | A18_MARK, A19_MARK, A20_MARK, A21_MARK, | ||
233 | A22_MARK, A23_MARK, A24_MARK, A25_MARK, | ||
234 | A26_MARK, | ||
235 | |||
236 | CS0_MARK, CS2_MARK, CS4_MARK, | ||
237 | CS5A_MARK, CS5B_MARK, CS6A_MARK, | ||
238 | |||
239 | /* BSC/FLCTL */ | ||
240 | RD_FSC_MARK, WE0_FWE_MARK, A4_FOE_MARK, A5_FCDE_MARK, | ||
241 | D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK, | ||
242 | D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK, | ||
243 | D8_NAF8_MARK, D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK, | ||
244 | D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, D15_NAF15_MARK, | ||
245 | |||
246 | /* MMCIF(1) */ | ||
247 | MMCD0_0_MARK, MMCD0_1_MARK, MMCD0_2_MARK, MMCD0_3_MARK, | ||
248 | MMCD0_4_MARK, MMCD0_5_MARK, MMCD0_6_MARK, MMCD0_7_MARK, | ||
249 | MMCCMD0_MARK, MMCCLK0_MARK, | ||
250 | |||
251 | /* MMCIF(2) */ | ||
252 | MMCD1_0_MARK, MMCD1_1_MARK, MMCD1_2_MARK, MMCD1_3_MARK, | ||
253 | MMCD1_4_MARK, MMCD1_5_MARK, MMCD1_6_MARK, MMCD1_7_MARK, | ||
254 | MMCCLK1_MARK, MMCCMD1_MARK, | ||
255 | |||
256 | /* SPU2 */ | ||
257 | VINT_I_MARK, | ||
258 | |||
259 | /* FLCTL */ | ||
260 | FCE1_MARK, FCE0_MARK, FRB_MARK, | ||
261 | |||
262 | /* HSI */ | ||
263 | GP_RX_FLAG_MARK, GP_RX_DATA_MARK, GP_TX_READY_MARK, | ||
264 | GP_RX_WAKE_MARK, MP_TX_FLAG_MARK, MP_TX_DATA_MARK, | ||
265 | MP_RX_READY_MARK, MP_TX_WAKE_MARK, | ||
266 | |||
267 | /* MFI */ | ||
268 | MFIv6_MARK, | ||
269 | MFIv4_MARK, | ||
270 | |||
271 | MEMC_CS0_MARK, MEMC_BUSCLK_MEMC_A0_MARK, | ||
272 | MEMC_CS1_MEMC_A1_MARK, MEMC_ADV_MEMC_DREQ0_MARK, | ||
273 | MEMC_WAIT_MEMC_DREQ1_MARK, MEMC_NOE_MARK, | ||
274 | MEMC_NWE_MARK, MEMC_INT_MARK, | ||
275 | |||
276 | MEMC_AD0_MARK, MEMC_AD1_MARK, MEMC_AD2_MARK, | ||
277 | MEMC_AD3_MARK, MEMC_AD4_MARK, MEMC_AD5_MARK, | ||
278 | MEMC_AD6_MARK, MEMC_AD7_MARK, MEMC_AD8_MARK, | ||
279 | MEMC_AD9_MARK, MEMC_AD10_MARK, MEMC_AD11_MARK, | ||
280 | MEMC_AD12_MARK, MEMC_AD13_MARK, MEMC_AD14_MARK, | ||
281 | MEMC_AD15_MARK, | ||
282 | |||
283 | /* SIM */ | ||
284 | SIM_RST_MARK, SIM_CLK_MARK, SIM_D_MARK, | ||
285 | |||
286 | /* TPU */ | ||
287 | TPU0TO0_MARK, TPU0TO1_MARK, | ||
288 | TPU0TO2_93_MARK, TPU0TO2_99_MARK, | ||
289 | TPU0TO3_MARK, | ||
290 | |||
291 | /* I2C2 */ | ||
292 | I2C_SCL2_MARK, I2C_SDA2_MARK, | ||
293 | |||
294 | /* I2C3(1) */ | ||
295 | I2C_SCL3_MARK, I2C_SDA3_MARK, | ||
296 | |||
297 | /* I2C3(2) */ | ||
298 | I2C_SCL3S_MARK, I2C_SDA3S_MARK, | ||
299 | |||
300 | /* I2C4(2) */ | ||
301 | I2C_SCL4_MARK, I2C_SDA4_MARK, | ||
302 | |||
303 | /* I2C4(2) */ | ||
304 | I2C_SCL4S_MARK, I2C_SDA4S_MARK, | ||
305 | |||
306 | /* KEYSC */ | ||
307 | KEYOUT0_MARK, KEYIN0_121_MARK, KEYIN0_136_MARK, | ||
308 | KEYOUT1_MARK, KEYIN1_122_MARK, KEYIN1_135_MARK, | ||
309 | KEYOUT2_MARK, KEYIN2_123_MARK, KEYIN2_134_MARK, | ||
310 | KEYOUT3_MARK, KEYIN3_124_MARK, KEYIN3_133_MARK, | ||
311 | KEYOUT4_MARK, KEYIN4_MARK, | ||
312 | KEYOUT5_MARK, KEYIN5_MARK, | ||
313 | KEYOUT6_MARK, KEYIN6_MARK, | ||
314 | KEYOUT7_MARK, KEYIN7_MARK, | ||
315 | |||
316 | /* LCDC */ | ||
317 | LCDC0_SELECT_MARK, | ||
318 | LCDC1_SELECT_MARK, | ||
319 | LCDHSYN_MARK, LCDCS_MARK, LCDVSYN_MARK, LCDDCK_MARK, | ||
320 | LCDWR_MARK, LCDRD_MARK, LCDDISP_MARK, LCDRS_MARK, | ||
321 | LCDLCLK_MARK, LCDDON_MARK, | ||
322 | |||
323 | LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK, | ||
324 | LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK, | ||
325 | LCDD8_MARK, LCDD9_MARK, LCDD10_MARK, LCDD11_MARK, | ||
326 | LCDD12_MARK, LCDD13_MARK, LCDD14_MARK, LCDD15_MARK, | ||
327 | LCDD16_MARK, LCDD17_MARK, LCDD18_MARK, LCDD19_MARK, | ||
328 | LCDD20_MARK, LCDD21_MARK, LCDD22_MARK, LCDD23_MARK, | ||
329 | |||
330 | /* IRDA */ | ||
331 | IRDA_OUT_MARK, IRDA_IN_MARK, IRDA_FIRSEL_MARK, | ||
332 | IROUT_139_MARK, IROUT_140_MARK, | ||
333 | |||
334 | /* TSIF1 */ | ||
335 | TS0_1SELECT_MARK, | ||
336 | TS0_2SELECT_MARK, | ||
337 | TS1_1SELECT_MARK, | ||
338 | TS1_2SELECT_MARK, | ||
339 | |||
340 | TS_SPSYNC1_MARK, TS_SDAT1_MARK, | ||
341 | TS_SDEN1_MARK, TS_SCK1_MARK, | ||
342 | |||
343 | /* TSIF2 */ | ||
344 | TS_SPSYNC2_MARK, TS_SDAT2_MARK, | ||
345 | TS_SDEN2_MARK, TS_SCK2_MARK, | ||
346 | |||
347 | /* HDMI */ | ||
348 | HDMI_HPD_MARK, HDMI_CEC_MARK, | ||
349 | |||
350 | /* SDHI0 */ | ||
351 | SDHICLK0_MARK, SDHICD0_MARK, | ||
352 | SDHICMD0_MARK, SDHIWP0_MARK, | ||
353 | SDHID0_0_MARK, SDHID0_1_MARK, | ||
354 | SDHID0_2_MARK, SDHID0_3_MARK, | ||
355 | |||
356 | /* SDHI1 */ | ||
357 | SDHICLK1_MARK, SDHICMD1_MARK, SDHID1_0_MARK, | ||
358 | SDHID1_1_MARK, SDHID1_2_MARK, SDHID1_3_MARK, | ||
359 | |||
360 | /* SDHI2 */ | ||
361 | SDHICLK2_MARK, SDHICMD2_MARK, SDHID2_0_MARK, | ||
362 | SDHID2_1_MARK, SDHID2_2_MARK, SDHID2_3_MARK, | ||
363 | |||
364 | /* SDENC */ | ||
365 | SDENC_CPG_MARK, | ||
366 | SDENC_DV_CLKI_MARK, | ||
367 | |||
368 | PINMUX_MARK_END, | ||
369 | }; | ||
370 | |||
371 | static pinmux_enum_t pinmux_data[] = { | ||
372 | |||
373 | /* specify valid pin states for each pin in GPIO mode */ | ||
374 | PORT_DATA_IO_PD(0), PORT_DATA_IO_PD(1), | ||
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 | |||
490 | /* IRQ */ | ||
491 | PINMUX_DATA(IRQ0_6_MARK, PORT6_FN0, MSEL1CR_0_0), | ||
492 | PINMUX_DATA(IRQ0_162_MARK, PORT162_FN0, MSEL1CR_0_1), | ||
493 | PINMUX_DATA(IRQ1_MARK, PORT12_FN0), | ||
494 | PINMUX_DATA(IRQ2_4_MARK, PORT4_FN0, MSEL1CR_2_0), | ||
495 | PINMUX_DATA(IRQ2_5_MARK, PORT5_FN0, MSEL1CR_2_1), | ||
496 | PINMUX_DATA(IRQ3_8_MARK, PORT8_FN0, MSEL1CR_3_0), | ||
497 | PINMUX_DATA(IRQ3_16_MARK, PORT16_FN0, MSEL1CR_3_1), | ||
498 | PINMUX_DATA(IRQ4_17_MARK, PORT17_FN0, MSEL1CR_4_0), | ||
499 | PINMUX_DATA(IRQ4_163_MARK, PORT163_FN0, MSEL1CR_4_1), | ||
500 | PINMUX_DATA(IRQ5_MARK, PORT18_FN0), | ||
501 | PINMUX_DATA(IRQ6_39_MARK, PORT39_FN0, MSEL1CR_6_0), | ||
502 | PINMUX_DATA(IRQ6_164_MARK, PORT164_FN0, MSEL1CR_6_1), | ||
503 | PINMUX_DATA(IRQ7_40_MARK, PORT40_FN0, MSEL1CR_7_1), | ||
504 | PINMUX_DATA(IRQ7_167_MARK, PORT167_FN0, MSEL1CR_7_0), | ||
505 | PINMUX_DATA(IRQ8_41_MARK, PORT41_FN0, MSEL1CR_8_1), | ||
506 | PINMUX_DATA(IRQ8_168_MARK, PORT168_FN0, MSEL1CR_8_0), | ||
507 | PINMUX_DATA(IRQ9_42_MARK, PORT42_FN0, MSEL1CR_9_0), | ||
508 | PINMUX_DATA(IRQ9_169_MARK, PORT169_FN0, MSEL1CR_9_1), | ||
509 | PINMUX_DATA(IRQ10_MARK, PORT65_FN0, MSEL1CR_9_1), | ||
510 | PINMUX_DATA(IRQ11_MARK, PORT67_FN0), | ||
511 | PINMUX_DATA(IRQ12_80_MARK, PORT80_FN0, MSEL1CR_12_0), | ||
512 | PINMUX_DATA(IRQ12_137_MARK, PORT137_FN0, MSEL1CR_12_1), | ||
513 | PINMUX_DATA(IRQ13_81_MARK, PORT81_FN0, MSEL1CR_13_0), | ||
514 | PINMUX_DATA(IRQ13_145_MARK, PORT145_FN0, MSEL1CR_13_1), | ||
515 | PINMUX_DATA(IRQ14_82_MARK, PORT82_FN0, MSEL1CR_14_0), | ||
516 | PINMUX_DATA(IRQ14_146_MARK, PORT146_FN0, MSEL1CR_14_1), | ||
517 | PINMUX_DATA(IRQ15_83_MARK, PORT83_FN0, MSEL1CR_15_0), | ||
518 | PINMUX_DATA(IRQ15_147_MARK, PORT147_FN0, MSEL1CR_15_1), | ||
519 | PINMUX_DATA(IRQ16_84_MARK, PORT84_FN0, MSEL1CR_16_0), | ||
520 | PINMUX_DATA(IRQ16_170_MARK, PORT170_FN0, MSEL1CR_16_1), | ||
521 | PINMUX_DATA(IRQ17_MARK, PORT85_FN0), | ||
522 | PINMUX_DATA(IRQ18_MARK, PORT86_FN0), | ||
523 | PINMUX_DATA(IRQ19_MARK, PORT87_FN0), | ||
524 | PINMUX_DATA(IRQ20_MARK, PORT92_FN0), | ||
525 | PINMUX_DATA(IRQ21_MARK, PORT93_FN0), | ||
526 | PINMUX_DATA(IRQ22_MARK, PORT94_FN0), | ||
527 | PINMUX_DATA(IRQ23_MARK, PORT95_FN0), | ||
528 | PINMUX_DATA(IRQ24_MARK, PORT112_FN0), | ||
529 | PINMUX_DATA(IRQ25_MARK, PORT119_FN0), | ||
530 | PINMUX_DATA(IRQ26_121_MARK, PORT121_FN0, MSEL1CR_26_1), | ||
531 | PINMUX_DATA(IRQ26_172_MARK, PORT172_FN0, MSEL1CR_26_0), | ||
532 | PINMUX_DATA(IRQ27_122_MARK, PORT122_FN0, MSEL1CR_27_1), | ||
533 | PINMUX_DATA(IRQ27_180_MARK, PORT180_FN0, MSEL1CR_27_0), | ||
534 | PINMUX_DATA(IRQ28_123_MARK, PORT123_FN0, MSEL1CR_28_1), | ||
535 | PINMUX_DATA(IRQ28_181_MARK, PORT181_FN0, MSEL1CR_28_0), | ||
536 | PINMUX_DATA(IRQ29_129_MARK, PORT129_FN0, MSEL1CR_29_1), | ||
537 | PINMUX_DATA(IRQ29_182_MARK, PORT182_FN0, MSEL1CR_29_0), | ||
538 | PINMUX_DATA(IRQ30_130_MARK, PORT130_FN0, MSEL1CR_30_1), | ||
539 | PINMUX_DATA(IRQ30_183_MARK, PORT183_FN0, MSEL1CR_30_0), | ||
540 | PINMUX_DATA(IRQ31_138_MARK, PORT138_FN0, MSEL1CR_31_1), | ||
541 | PINMUX_DATA(IRQ31_184_MARK, PORT184_FN0, MSEL1CR_31_0), | ||
542 | |||
543 | /* Function 1 */ | ||
544 | PINMUX_DATA(BBIF2_TSCK1_MARK, PORT0_FN1), | ||
545 | PINMUX_DATA(BBIF2_TSYNC1_MARK, PORT1_FN1), | ||
546 | PINMUX_DATA(BBIF2_TXD1_MARK, PORT2_FN1), | ||
547 | PINMUX_DATA(BBIF2_RXD_MARK, PORT3_FN1), | ||
548 | PINMUX_DATA(FSIACK_MARK, PORT4_FN1), | ||
549 | PINMUX_DATA(FSIAILR_MARK, PORT5_FN1), | ||
550 | PINMUX_DATA(FSIAIBT_MARK, PORT6_FN1), | ||
551 | PINMUX_DATA(FSIAISLD_MARK, PORT7_FN1), | ||
552 | PINMUX_DATA(FSIAOMC_MARK, PORT8_FN1), | ||
553 | PINMUX_DATA(FSIAOLR_MARK, PORT9_FN1), | ||
554 | PINMUX_DATA(FSIAOBT_MARK, PORT10_FN1), | ||
555 | PINMUX_DATA(FSIAOSLD_MARK, PORT11_FN1), | ||
556 | PINMUX_DATA(FMSOCK_MARK, PORT12_FN1), | ||
557 | PINMUX_DATA(FMSOOLR_MARK, PORT13_FN1), | ||
558 | PINMUX_DATA(FMSOOBT_MARK, PORT14_FN1), | ||
559 | PINMUX_DATA(FMSOSLD_MARK, PORT15_FN1), | ||
560 | PINMUX_DATA(FMSOILR_MARK, PORT16_FN1), | ||
561 | PINMUX_DATA(FMSOIBT_MARK, PORT17_FN1), | ||
562 | PINMUX_DATA(FMSISLD_MARK, PORT18_FN1), | ||
563 | PINMUX_DATA(A0_MARK, PORT19_FN1), | ||
564 | PINMUX_DATA(A1_MARK, PORT20_FN1), | ||
565 | PINMUX_DATA(A2_MARK, PORT21_FN1), | ||
566 | PINMUX_DATA(A3_MARK, PORT22_FN1), | ||
567 | PINMUX_DATA(A4_FOE_MARK, PORT23_FN1), | ||
568 | PINMUX_DATA(A5_FCDE_MARK, PORT24_FN1), | ||
569 | PINMUX_DATA(A6_MARK, PORT25_FN1), | ||
570 | PINMUX_DATA(A7_MARK, PORT26_FN1), | ||
571 | PINMUX_DATA(A8_MARK, PORT27_FN1), | ||
572 | PINMUX_DATA(A9_MARK, PORT28_FN1), | ||
573 | PINMUX_DATA(A10_MARK, PORT29_FN1), | ||
574 | PINMUX_DATA(A11_MARK, PORT30_FN1), | ||
575 | PINMUX_DATA(A12_MARK, PORT31_FN1), | ||
576 | PINMUX_DATA(A13_MARK, PORT32_FN1), | ||
577 | PINMUX_DATA(A14_MARK, PORT33_FN1), | ||
578 | PINMUX_DATA(A15_MARK, PORT34_FN1), | ||
579 | PINMUX_DATA(A16_MARK, PORT35_FN1), | ||
580 | PINMUX_DATA(A17_MARK, PORT36_FN1), | ||
581 | PINMUX_DATA(A18_MARK, PORT37_FN1), | ||
582 | PINMUX_DATA(A19_MARK, PORT38_FN1), | ||
583 | PINMUX_DATA(A20_MARK, PORT39_FN1), | ||
584 | PINMUX_DATA(A21_MARK, PORT40_FN1), | ||
585 | PINMUX_DATA(A22_MARK, PORT41_FN1), | ||
586 | PINMUX_DATA(A23_MARK, PORT42_FN1), | ||
587 | PINMUX_DATA(A24_MARK, PORT43_FN1), | ||
588 | PINMUX_DATA(A25_MARK, PORT44_FN1), | ||
589 | PINMUX_DATA(A26_MARK, PORT45_FN1), | ||
590 | PINMUX_DATA(D0_NAF0_MARK, PORT46_FN1), | ||
591 | PINMUX_DATA(D1_NAF1_MARK, PORT47_FN1), | ||
592 | PINMUX_DATA(D2_NAF2_MARK, PORT48_FN1), | ||
593 | PINMUX_DATA(D3_NAF3_MARK, PORT49_FN1), | ||
594 | PINMUX_DATA(D4_NAF4_MARK, PORT50_FN1), | ||
595 | PINMUX_DATA(D5_NAF5_MARK, PORT51_FN1), | ||
596 | PINMUX_DATA(D6_NAF6_MARK, PORT52_FN1), | ||
597 | PINMUX_DATA(D7_NAF7_MARK, PORT53_FN1), | ||
598 | PINMUX_DATA(D8_NAF8_MARK, PORT54_FN1), | ||
599 | PINMUX_DATA(D9_NAF9_MARK, PORT55_FN1), | ||
600 | PINMUX_DATA(D10_NAF10_MARK, PORT56_FN1), | ||
601 | PINMUX_DATA(D11_NAF11_MARK, PORT57_FN1), | ||
602 | PINMUX_DATA(D12_NAF12_MARK, PORT58_FN1), | ||
603 | PINMUX_DATA(D13_NAF13_MARK, PORT59_FN1), | ||
604 | PINMUX_DATA(D14_NAF14_MARK, PORT60_FN1), | ||
605 | PINMUX_DATA(D15_NAF15_MARK, PORT61_FN1), | ||
606 | PINMUX_DATA(CS0_MARK, PORT62_FN1), | ||
607 | PINMUX_DATA(CS2_MARK, PORT63_FN1), | ||
608 | PINMUX_DATA(CS4_MARK, PORT64_FN1), | ||
609 | PINMUX_DATA(CS5A_MARK, PORT65_FN1), | ||
610 | PINMUX_DATA(CS5B_MARK, PORT66_FN1), | ||
611 | PINMUX_DATA(CS6A_MARK, PORT67_FN1), | ||
612 | PINMUX_DATA(FCE0_MARK, PORT68_FN1), | ||
613 | PINMUX_DATA(RD_FSC_MARK, PORT69_FN1), | ||
614 | PINMUX_DATA(WE0_FWE_MARK, PORT70_FN1), | ||
615 | PINMUX_DATA(WE1_MARK, PORT71_FN1), | ||
616 | PINMUX_DATA(CKO_MARK, PORT72_FN1), | ||
617 | PINMUX_DATA(FRB_MARK, PORT73_FN1), | ||
618 | PINMUX_DATA(WAIT_MARK, PORT74_FN1), | ||
619 | PINMUX_DATA(RDWR_MARK, PORT75_FN1), | ||
620 | PINMUX_DATA(MEMC_AD0_MARK, PORT76_FN1), | ||
621 | PINMUX_DATA(MEMC_AD1_MARK, PORT77_FN1), | ||
622 | PINMUX_DATA(MEMC_AD2_MARK, PORT78_FN1), | ||
623 | PINMUX_DATA(MEMC_AD3_MARK, PORT79_FN1), | ||
624 | PINMUX_DATA(MEMC_AD4_MARK, PORT80_FN1), | ||
625 | PINMUX_DATA(MEMC_AD5_MARK, PORT81_FN1), | ||
626 | PINMUX_DATA(MEMC_AD6_MARK, PORT82_FN1), | ||
627 | PINMUX_DATA(MEMC_AD7_MARK, PORT83_FN1), | ||
628 | PINMUX_DATA(MEMC_AD8_MARK, PORT84_FN1), | ||
629 | PINMUX_DATA(MEMC_AD9_MARK, PORT85_FN1), | ||
630 | PINMUX_DATA(MEMC_AD10_MARK, PORT86_FN1), | ||
631 | PINMUX_DATA(MEMC_AD11_MARK, PORT87_FN1), | ||
632 | PINMUX_DATA(MEMC_AD12_MARK, PORT88_FN1), | ||
633 | PINMUX_DATA(MEMC_AD13_MARK, PORT89_FN1), | ||
634 | PINMUX_DATA(MEMC_AD14_MARK, PORT90_FN1), | ||
635 | PINMUX_DATA(MEMC_AD15_MARK, PORT91_FN1), | ||
636 | PINMUX_DATA(MEMC_CS0_MARK, PORT92_FN1), | ||
637 | PINMUX_DATA(MEMC_BUSCLK_MEMC_A0_MARK, PORT93_FN1), | ||
638 | PINMUX_DATA(MEMC_CS1_MEMC_A1_MARK, PORT94_FN1), | ||
639 | PINMUX_DATA(MEMC_ADV_MEMC_DREQ0_MARK, PORT95_FN1), | ||
640 | PINMUX_DATA(MEMC_WAIT_MEMC_DREQ1_MARK, PORT96_FN1), | ||
641 | PINMUX_DATA(MEMC_NOE_MARK, PORT97_FN1), | ||
642 | PINMUX_DATA(MEMC_NWE_MARK, PORT98_FN1), | ||
643 | PINMUX_DATA(MEMC_INT_MARK, PORT99_FN1), | ||
644 | PINMUX_DATA(VIO_VD_MARK, PORT100_FN1), | ||
645 | PINMUX_DATA(VIO_HD_MARK, PORT101_FN1), | ||
646 | PINMUX_DATA(VIO_D0_MARK, PORT102_FN1), | ||
647 | PINMUX_DATA(VIO_D1_MARK, PORT103_FN1), | ||
648 | PINMUX_DATA(VIO_D2_MARK, PORT104_FN1), | ||
649 | PINMUX_DATA(VIO_D3_MARK, PORT105_FN1), | ||
650 | PINMUX_DATA(VIO_D4_MARK, PORT106_FN1), | ||
651 | PINMUX_DATA(VIO_D5_MARK, PORT107_FN1), | ||
652 | PINMUX_DATA(VIO_D6_MARK, PORT108_FN1), | ||
653 | PINMUX_DATA(VIO_D7_MARK, PORT109_FN1), | ||
654 | PINMUX_DATA(VIO_D8_MARK, PORT110_FN1), | ||
655 | PINMUX_DATA(VIO_D9_MARK, PORT111_FN1), | ||
656 | PINMUX_DATA(VIO_D10_MARK, PORT112_FN1), | ||
657 | PINMUX_DATA(VIO_D11_MARK, PORT113_FN1), | ||
658 | PINMUX_DATA(VIO_D12_MARK, PORT114_FN1), | ||
659 | PINMUX_DATA(VIO_D13_MARK, PORT115_FN1), | ||
660 | PINMUX_DATA(VIO_D14_MARK, PORT116_FN1), | ||
661 | PINMUX_DATA(VIO_D15_MARK, PORT117_FN1), | ||
662 | PINMUX_DATA(VIO_CLK_MARK, PORT118_FN1), | ||
663 | PINMUX_DATA(VIO_FIELD_MARK, PORT119_FN1), | ||
664 | PINMUX_DATA(VIO_CKO_MARK, PORT120_FN1), | ||
665 | PINMUX_DATA(LCDD0_MARK, PORT121_FN1), | ||
666 | PINMUX_DATA(LCDD1_MARK, PORT122_FN1), | ||
667 | PINMUX_DATA(LCDD2_MARK, PORT123_FN1), | ||
668 | PINMUX_DATA(LCDD3_MARK, PORT124_FN1), | ||
669 | PINMUX_DATA(LCDD4_MARK, PORT125_FN1), | ||
670 | PINMUX_DATA(LCDD5_MARK, PORT126_FN1), | ||
671 | PINMUX_DATA(LCDD6_MARK, PORT127_FN1), | ||
672 | PINMUX_DATA(LCDD7_MARK, PORT128_FN1), | ||
673 | PINMUX_DATA(LCDD8_MARK, PORT129_FN1), | ||
674 | PINMUX_DATA(LCDD9_MARK, PORT130_FN1), | ||
675 | PINMUX_DATA(LCDD10_MARK, PORT131_FN1), | ||
676 | PINMUX_DATA(LCDD11_MARK, PORT132_FN1), | ||
677 | PINMUX_DATA(LCDD12_MARK, PORT133_FN1), | ||
678 | PINMUX_DATA(LCDD13_MARK, PORT134_FN1), | ||
679 | PINMUX_DATA(LCDD14_MARK, PORT135_FN1), | ||
680 | PINMUX_DATA(LCDD15_MARK, PORT136_FN1), | ||
681 | PINMUX_DATA(LCDD16_MARK, PORT137_FN1), | ||
682 | PINMUX_DATA(LCDD17_MARK, PORT138_FN1), | ||
683 | PINMUX_DATA(LCDD18_MARK, PORT139_FN1), | ||
684 | PINMUX_DATA(LCDD19_MARK, PORT140_FN1), | ||
685 | PINMUX_DATA(LCDD20_MARK, PORT141_FN1), | ||
686 | PINMUX_DATA(LCDD21_MARK, PORT142_FN1), | ||
687 | PINMUX_DATA(LCDD22_MARK, PORT143_FN1), | ||
688 | PINMUX_DATA(LCDD23_MARK, PORT144_FN1), | ||
689 | PINMUX_DATA(LCDHSYN_MARK, PORT145_FN1), | ||
690 | PINMUX_DATA(LCDVSYN_MARK, PORT146_FN1), | ||
691 | PINMUX_DATA(LCDDCK_MARK, PORT147_FN1), | ||
692 | PINMUX_DATA(LCDRD_MARK, PORT148_FN1), | ||
693 | PINMUX_DATA(LCDDISP_MARK, PORT149_FN1), | ||
694 | PINMUX_DATA(LCDLCLK_MARK, PORT150_FN1), | ||
695 | PINMUX_DATA(LCDDON_MARK, PORT151_FN1), | ||
696 | PINMUX_DATA(SCIFA0_TXD_MARK, PORT152_FN1), | ||
697 | PINMUX_DATA(SCIFA0_RXD_MARK, PORT153_FN1), | ||
698 | PINMUX_DATA(SCIFA1_TXD_MARK, PORT154_FN1), | ||
699 | PINMUX_DATA(SCIFA1_RXD_MARK, PORT155_FN1), | ||
700 | PINMUX_DATA(TS_SPSYNC1_MARK, PORT156_FN1), | ||
701 | PINMUX_DATA(TS_SDAT1_MARK, PORT157_FN1), | ||
702 | PINMUX_DATA(TS_SDEN1_MARK, PORT158_FN1), | ||
703 | PINMUX_DATA(TS_SCK1_MARK, PORT159_FN1), | ||
704 | PINMUX_DATA(TPU0TO0_MARK, PORT160_FN1), | ||
705 | PINMUX_DATA(TPU0TO1_MARK, PORT161_FN1), | ||
706 | PINMUX_DATA(SCIFB_SCK_MARK, PORT162_FN1), | ||
707 | PINMUX_DATA(SCIFB_RTS_MARK, PORT163_FN1), | ||
708 | PINMUX_DATA(SCIFB_CTS_MARK, PORT164_FN1), | ||
709 | PINMUX_DATA(SCIFB_TXD_MARK, PORT165_FN1), | ||
710 | PINMUX_DATA(SCIFB_RXD_MARK, PORT166_FN1), | ||
711 | PINMUX_DATA(VBUS0_0_MARK, PORT167_FN1), | ||
712 | PINMUX_DATA(VBUS0_1_MARK, PORT168_FN1), | ||
713 | PINMUX_DATA(HDMI_HPD_MARK, PORT169_FN1), | ||
714 | PINMUX_DATA(HDMI_CEC_MARK, PORT170_FN1), | ||
715 | PINMUX_DATA(SDHICLK0_MARK, PORT171_FN1), | ||
716 | PINMUX_DATA(SDHICD0_MARK, PORT172_FN1), | ||
717 | PINMUX_DATA(SDHID0_0_MARK, PORT173_FN1), | ||
718 | PINMUX_DATA(SDHID0_1_MARK, PORT174_FN1), | ||
719 | PINMUX_DATA(SDHID0_2_MARK, PORT175_FN1), | ||
720 | PINMUX_DATA(SDHID0_3_MARK, PORT176_FN1), | ||
721 | PINMUX_DATA(SDHICMD0_MARK, PORT177_FN1), | ||
722 | PINMUX_DATA(SDHIWP0_MARK, PORT178_FN1), | ||
723 | PINMUX_DATA(SDHICLK1_MARK, PORT179_FN1), | ||
724 | PINMUX_DATA(SDHID1_0_MARK, PORT180_FN1), | ||
725 | PINMUX_DATA(SDHID1_1_MARK, PORT181_FN1), | ||
726 | PINMUX_DATA(SDHID1_2_MARK, PORT182_FN1), | ||
727 | PINMUX_DATA(SDHID1_3_MARK, PORT183_FN1), | ||
728 | PINMUX_DATA(SDHICMD1_MARK, PORT184_FN1), | ||
729 | PINMUX_DATA(SDHICLK2_MARK, PORT185_FN1), | ||
730 | PINMUX_DATA(SDHID2_0_MARK, PORT186_FN1), | ||
731 | PINMUX_DATA(SDHID2_1_MARK, PORT187_FN1), | ||
732 | PINMUX_DATA(SDHID2_2_MARK, PORT188_FN1), | ||
733 | PINMUX_DATA(SDHID2_3_MARK, PORT189_FN1), | ||
734 | PINMUX_DATA(SDHICMD2_MARK, PORT190_FN1), | ||
735 | |||
736 | /* Function 2 */ | ||
737 | PINMUX_DATA(FSIBCK_MARK, PORT4_FN2), | ||
738 | PINMUX_DATA(SCIFA4_RXD_MARK, PORT5_FN2), | ||
739 | PINMUX_DATA(SCIFA4_TXD_MARK, PORT6_FN2), | ||
740 | PINMUX_DATA(SCIFA5_RXD_MARK, PORT8_FN2), | ||
741 | PINMUX_DATA(FSIASPDIF_11_MARK, PORT11_FN2), | ||
742 | PINMUX_DATA(SCIFA5_TXD_MARK, PORT12_FN2), | ||
743 | PINMUX_DATA(FMSIOLR_MARK, PORT13_FN2), | ||
744 | PINMUX_DATA(FMSIOBT_MARK, PORT14_FN2), | ||
745 | PINMUX_DATA(FSIASPDIF_15_MARK, PORT15_FN2), | ||
746 | PINMUX_DATA(FMSIILR_MARK, PORT16_FN2), | ||
747 | PINMUX_DATA(FMSIIBT_MARK, PORT17_FN2), | ||
748 | PINMUX_DATA(BS_MARK, PORT19_FN2), | ||
749 | PINMUX_DATA(MSIOF0_TSYNC_MARK, PORT36_FN2), | ||
750 | PINMUX_DATA(MSIOF0_TSCK_MARK, PORT37_FN2), | ||
751 | PINMUX_DATA(MSIOF0_RXD_MARK, PORT38_FN2), | ||
752 | PINMUX_DATA(MSIOF0_RSCK_MARK, PORT39_FN2), | ||
753 | PINMUX_DATA(MSIOF0_RSYNC_MARK, PORT40_FN2), | ||
754 | PINMUX_DATA(MSIOF0_MCK0_MARK, PORT41_FN2), | ||
755 | PINMUX_DATA(MSIOF0_MCK1_MARK, PORT42_FN2), | ||
756 | PINMUX_DATA(MSIOF0_SS1_MARK, PORT43_FN2), | ||
757 | PINMUX_DATA(MSIOF0_SS2_MARK, PORT44_FN2), | ||
758 | PINMUX_DATA(MSIOF0_TXD_MARK, PORT45_FN2), | ||
759 | PINMUX_DATA(FMSICK_MARK, PORT65_FN2), | ||
760 | PINMUX_DATA(FCE1_MARK, PORT66_FN2), | ||
761 | PINMUX_DATA(BBIF1_RXD_MARK, PORT76_FN2), | ||
762 | PINMUX_DATA(BBIF1_TSYNC_MARK, PORT77_FN2), | ||
763 | PINMUX_DATA(BBIF1_TSCK_MARK, PORT78_FN2), | ||
764 | PINMUX_DATA(BBIF1_TXD_MARK, PORT79_FN2), | ||
765 | PINMUX_DATA(BBIF1_RSCK_MARK, PORT80_FN2), | ||
766 | PINMUX_DATA(BBIF1_RSYNC_MARK, PORT81_FN2), | ||
767 | PINMUX_DATA(BBIF1_FLOW_MARK, PORT82_FN2), | ||
768 | PINMUX_DATA(BB_RX_FLOW_N_MARK, PORT83_FN2), | ||
769 | PINMUX_DATA(MSIOF1_RSCK_MARK, PORT84_FN2), | ||
770 | PINMUX_DATA(MSIOF1_RSYNC_MARK, PORT85_FN2), | ||
771 | PINMUX_DATA(MSIOF1_MCK0_MARK, PORT86_FN2), | ||
772 | PINMUX_DATA(MSIOF1_MCK1_MARK, PORT87_FN2), | ||
773 | PINMUX_DATA(MSIOF1_TSCK_88_MARK, PORT88_FN2, MSEL4CR_10_1), | ||
774 | PINMUX_DATA(MSIOF1_TSYNC_89_MARK, PORT89_FN2, MSEL4CR_10_1), | ||
775 | PINMUX_DATA(MSIOF1_TXD_90_MARK, PORT90_FN2, MSEL4CR_10_1), | ||
776 | PINMUX_DATA(MSIOF1_RXD_91_MARK, PORT91_FN2, MSEL4CR_10_1), | ||
777 | PINMUX_DATA(MSIOF1_SS1_92_MARK, PORT92_FN2, MSEL4CR_10_1), | ||
778 | PINMUX_DATA(MSIOF1_SS2_93_MARK, PORT93_FN2, MSEL4CR_10_1), | ||
779 | PINMUX_DATA(SCIFA2_CTS1_MARK, PORT94_FN2), | ||
780 | PINMUX_DATA(SCIFA2_RTS1_MARK, PORT95_FN2), | ||
781 | PINMUX_DATA(SCIFA2_TXD1_MARK, PORT96_FN2), | ||
782 | PINMUX_DATA(SCIFA2_RXD1_MARK, PORT97_FN2), | ||
783 | PINMUX_DATA(SCIFA2_SCK1_MARK, PORT98_FN2), | ||
784 | PINMUX_DATA(I2C_SCL2_MARK, PORT110_FN2), | ||
785 | PINMUX_DATA(I2C_SDA2_MARK, PORT111_FN2), | ||
786 | PINMUX_DATA(I2C_SCL3_MARK, PORT114_FN2, MSEL4CR_16_1), | ||
787 | PINMUX_DATA(I2C_SDA3_MARK, PORT115_FN2, MSEL4CR_16_1), | ||
788 | PINMUX_DATA(I2C_SCL4_MARK, PORT116_FN2, MSEL4CR_17_1), | ||
789 | PINMUX_DATA(I2C_SDA4_MARK, PORT117_FN2, MSEL4CR_17_1), | ||
790 | PINMUX_DATA(MSIOF2_RSCK_MARK, PORT134_FN2), | ||
791 | PINMUX_DATA(MSIOF2_RSYNC_MARK, PORT135_FN2), | ||
792 | PINMUX_DATA(MSIOF2_MCK0_MARK, PORT136_FN2), | ||
793 | PINMUX_DATA(MSIOF2_MCK1_MARK, PORT137_FN2), | ||
794 | PINMUX_DATA(MSIOF2_SS1_MARK, PORT138_FN2), | ||
795 | PINMUX_DATA(MSIOF2_SS2_MARK, PORT139_FN2), | ||
796 | PINMUX_DATA(SCIFA3_CTS_140_MARK, PORT140_FN2, MSEL3CR_9_1), | ||
797 | PINMUX_DATA(SCIFA3_RTS_141_MARK, PORT141_FN2), | ||
798 | PINMUX_DATA(SCIFA3_SCK_MARK, PORT142_FN2), | ||
799 | PINMUX_DATA(SCIFA3_TXD_MARK, PORT143_FN2), | ||
800 | PINMUX_DATA(SCIFA3_RXD_MARK, PORT144_FN2), | ||
801 | PINMUX_DATA(MSIOF2_TSYNC_MARK, PORT148_FN2), | ||
802 | PINMUX_DATA(MSIOF2_TSCK_MARK, PORT149_FN2), | ||
803 | PINMUX_DATA(MSIOF2_RXD_MARK, PORT150_FN2), | ||
804 | PINMUX_DATA(MSIOF2_TXD_MARK, PORT151_FN2), | ||
805 | PINMUX_DATA(SCIFA0_SCK_MARK, PORT156_FN2), | ||
806 | PINMUX_DATA(SCIFA0_RTS_MARK, PORT157_FN2), | ||
807 | PINMUX_DATA(SCIFA0_CTS_MARK, PORT158_FN2), | ||
808 | PINMUX_DATA(SCIFA1_SCK_MARK, PORT159_FN2), | ||
809 | PINMUX_DATA(SCIFA1_RTS_MARK, PORT160_FN2), | ||
810 | PINMUX_DATA(SCIFA1_CTS_MARK, PORT161_FN2), | ||
811 | |||
812 | /* Function 3 */ | ||
813 | PINMUX_DATA(VIO_CKO1_MARK, PORT16_FN3), | ||
814 | PINMUX_DATA(VIO_CKO2_MARK, PORT17_FN3), | ||
815 | PINMUX_DATA(IDIN_1_18_MARK, PORT18_FN3, MSEL4CR_14_1), | ||
816 | PINMUX_DATA(MSIOF1_TSCK_39_MARK, PORT39_FN3, MSEL4CR_10_0), | ||
817 | PINMUX_DATA(MSIOF1_TSYNC_40_MARK, PORT40_FN3, MSEL4CR_10_0), | ||
818 | PINMUX_DATA(MSIOF1_TXD_41_MARK, PORT41_FN3, MSEL4CR_10_0), | ||
819 | PINMUX_DATA(MSIOF1_RXD_42_MARK, PORT42_FN3, MSEL4CR_10_0), | ||
820 | PINMUX_DATA(MSIOF1_SS1_43_MARK, PORT43_FN3, MSEL4CR_10_0), | ||
821 | PINMUX_DATA(MSIOF1_SS2_44_MARK, PORT44_FN3, MSEL4CR_10_0), | ||
822 | PINMUX_DATA(MMCD1_0_MARK, PORT54_FN3, MSEL4CR_15_1), | ||
823 | PINMUX_DATA(MMCD1_1_MARK, PORT55_FN3, MSEL4CR_15_1), | ||
824 | PINMUX_DATA(MMCD1_2_MARK, PORT56_FN3, MSEL4CR_15_1), | ||
825 | PINMUX_DATA(MMCD1_3_MARK, PORT57_FN3, MSEL4CR_15_1), | ||
826 | PINMUX_DATA(MMCD1_4_MARK, PORT58_FN3, MSEL4CR_15_1), | ||
827 | PINMUX_DATA(MMCD1_5_MARK, PORT59_FN3, MSEL4CR_15_1), | ||
828 | PINMUX_DATA(MMCD1_6_MARK, PORT60_FN3, MSEL4CR_15_1), | ||
829 | PINMUX_DATA(MMCD1_7_MARK, PORT61_FN3, MSEL4CR_15_1), | ||
830 | PINMUX_DATA(VINT_I_MARK, PORT65_FN3), | ||
831 | PINMUX_DATA(MMCCLK1_MARK, PORT66_FN3, MSEL4CR_15_1), | ||
832 | PINMUX_DATA(MMCCMD1_MARK, PORT67_FN3, MSEL4CR_15_1), | ||
833 | PINMUX_DATA(TPU0TO2_93_MARK, PORT93_FN3), | ||
834 | PINMUX_DATA(TPU0TO2_99_MARK, PORT99_FN3), | ||
835 | PINMUX_DATA(TPU0TO3_MARK, PORT112_FN3), | ||
836 | PINMUX_DATA(IDIN_0_MARK, PORT113_FN3), | ||
837 | PINMUX_DATA(EXTLP_0_MARK, PORT114_FN3), | ||
838 | PINMUX_DATA(OVCN2_0_MARK, PORT115_FN3), | ||
839 | PINMUX_DATA(PWEN_0_MARK, PORT116_FN3), | ||
840 | PINMUX_DATA(OVCN_0_MARK, PORT117_FN3), | ||
841 | PINMUX_DATA(KEYOUT7_MARK, PORT121_FN3), | ||
842 | PINMUX_DATA(KEYOUT6_MARK, PORT122_FN3), | ||
843 | PINMUX_DATA(KEYOUT5_MARK, PORT123_FN3), | ||
844 | PINMUX_DATA(KEYOUT4_MARK, PORT124_FN3), | ||
845 | PINMUX_DATA(KEYOUT3_MARK, PORT125_FN3), | ||
846 | PINMUX_DATA(KEYOUT2_MARK, PORT126_FN3), | ||
847 | PINMUX_DATA(KEYOUT1_MARK, PORT127_FN3), | ||
848 | PINMUX_DATA(KEYOUT0_MARK, PORT128_FN3), | ||
849 | PINMUX_DATA(KEYIN7_MARK, PORT129_FN3), | ||
850 | PINMUX_DATA(KEYIN6_MARK, PORT130_FN3), | ||
851 | PINMUX_DATA(KEYIN5_MARK, PORT131_FN3), | ||
852 | PINMUX_DATA(KEYIN4_MARK, PORT132_FN3), | ||
853 | PINMUX_DATA(KEYIN3_133_MARK, PORT133_FN3, MSEL4CR_18_0), | ||
854 | PINMUX_DATA(KEYIN2_134_MARK, PORT134_FN3, MSEL4CR_18_0), | ||
855 | PINMUX_DATA(KEYIN1_135_MARK, PORT135_FN3, MSEL4CR_18_0), | ||
856 | PINMUX_DATA(KEYIN0_136_MARK, PORT136_FN3, MSEL4CR_18_0), | ||
857 | PINMUX_DATA(TS_SPSYNC2_MARK, PORT137_FN3), | ||
858 | PINMUX_DATA(IROUT_139_MARK, PORT139_FN3), | ||
859 | PINMUX_DATA(IRDA_OUT_MARK, PORT140_FN3), | ||
860 | PINMUX_DATA(IRDA_IN_MARK, PORT141_FN3), | ||
861 | PINMUX_DATA(IRDA_FIRSEL_MARK, PORT142_FN3), | ||
862 | PINMUX_DATA(TS_SDAT2_MARK, PORT145_FN3), | ||
863 | PINMUX_DATA(TS_SDEN2_MARK, PORT146_FN3), | ||
864 | PINMUX_DATA(TS_SCK2_MARK, PORT147_FN3), | ||
865 | |||
866 | /* Function 4 */ | ||
867 | PINMUX_DATA(SCIFA3_CTS_43_MARK, PORT43_FN4, MSEL3CR_9_0), | ||
868 | PINMUX_DATA(SCIFA3_RTS_44_MARK, PORT44_FN4), | ||
869 | PINMUX_DATA(GP_RX_FLAG_MARK, PORT76_FN4), | ||
870 | PINMUX_DATA(GP_RX_DATA_MARK, PORT77_FN4), | ||
871 | PINMUX_DATA(GP_TX_READY_MARK, PORT78_FN4), | ||
872 | PINMUX_DATA(GP_RX_WAKE_MARK, PORT79_FN4), | ||
873 | PINMUX_DATA(MP_TX_FLAG_MARK, PORT80_FN4), | ||
874 | PINMUX_DATA(MP_TX_DATA_MARK, PORT81_FN4), | ||
875 | PINMUX_DATA(MP_RX_READY_MARK, PORT82_FN4), | ||
876 | PINMUX_DATA(MP_TX_WAKE_MARK, PORT83_FN4), | ||
877 | PINMUX_DATA(MMCD0_0_MARK, PORT84_FN4, MSEL4CR_15_0), | ||
878 | PINMUX_DATA(MMCD0_1_MARK, PORT85_FN4, MSEL4CR_15_0), | ||
879 | PINMUX_DATA(MMCD0_2_MARK, PORT86_FN4, MSEL4CR_15_0), | ||
880 | PINMUX_DATA(MMCD0_3_MARK, PORT87_FN4, MSEL4CR_15_0), | ||
881 | PINMUX_DATA(MMCD0_4_MARK, PORT88_FN4, MSEL4CR_15_0), | ||
882 | PINMUX_DATA(MMCD0_5_MARK, PORT89_FN4, MSEL4CR_15_0), | ||
883 | PINMUX_DATA(MMCD0_6_MARK, PORT90_FN4, MSEL4CR_15_0), | ||
884 | PINMUX_DATA(MMCD0_7_MARK, PORT91_FN4, MSEL4CR_15_0), | ||
885 | PINMUX_DATA(MMCCMD0_MARK, PORT92_FN4, MSEL4CR_15_0), | ||
886 | PINMUX_DATA(SIM_RST_MARK, PORT94_FN4), | ||
887 | PINMUX_DATA(SIM_CLK_MARK, PORT95_FN4), | ||
888 | PINMUX_DATA(SIM_D_MARK, PORT98_FN4), | ||
889 | PINMUX_DATA(MMCCLK0_MARK, PORT99_FN4, MSEL4CR_15_0), | ||
890 | PINMUX_DATA(IDIN_1_113_MARK, PORT113_FN4, MSEL4CR_14_0), | ||
891 | PINMUX_DATA(OVCN_1_114_MARK, PORT114_FN4, MSEL4CR_14_0), | ||
892 | PINMUX_DATA(PWEN_1_115_MARK, PORT115_FN4), | ||
893 | PINMUX_DATA(EXTLP_1_MARK, PORT116_FN4), | ||
894 | PINMUX_DATA(OVCN2_1_MARK, PORT117_FN4), | ||
895 | PINMUX_DATA(KEYIN0_121_MARK, PORT121_FN4, MSEL4CR_18_1), | ||
896 | PINMUX_DATA(KEYIN1_122_MARK, PORT122_FN4, MSEL4CR_18_1), | ||
897 | PINMUX_DATA(KEYIN2_123_MARK, PORT123_FN4, MSEL4CR_18_1), | ||
898 | PINMUX_DATA(KEYIN3_124_MARK, PORT124_FN4, MSEL4CR_18_1), | ||
899 | PINMUX_DATA(PWEN_1_138_MARK, PORT138_FN4), | ||
900 | PINMUX_DATA(IROUT_140_MARK, PORT140_FN4), | ||
901 | PINMUX_DATA(LCDCS_MARK, PORT145_FN4), | ||
902 | PINMUX_DATA(LCDWR_MARK, PORT147_FN4), | ||
903 | PINMUX_DATA(LCDRS_MARK, PORT149_FN4), | ||
904 | PINMUX_DATA(OVCN_1_162_MARK, PORT162_FN4, MSEL4CR_14_1), | ||
905 | |||
906 | /* Function 5 */ | ||
907 | PINMUX_DATA(GPI0_MARK, PORT41_FN5), | ||
908 | PINMUX_DATA(GPI1_MARK, PORT42_FN5), | ||
909 | PINMUX_DATA(GPO0_MARK, PORT43_FN5), | ||
910 | PINMUX_DATA(GPO1_MARK, PORT44_FN5), | ||
911 | PINMUX_DATA(I2C_SCL3S_MARK, PORT137_FN5, MSEL4CR_16_0), | ||
912 | PINMUX_DATA(I2C_SDA3S_MARK, PORT145_FN5, MSEL4CR_16_0), | ||
913 | PINMUX_DATA(I2C_SCL4S_MARK, PORT146_FN5, MSEL4CR_17_0), | ||
914 | PINMUX_DATA(I2C_SDA4S_MARK, PORT147_FN5, MSEL4CR_17_0), | ||
915 | |||
916 | /* Function select */ | ||
917 | PINMUX_DATA(LCDC0_SELECT_MARK, MSEL3CR_6_0), | ||
918 | PINMUX_DATA(LCDC1_SELECT_MARK, MSEL3CR_6_1), | ||
919 | |||
920 | PINMUX_DATA(TS0_1SELECT_MARK, MSEL3CR_21_0, MSEL3CR_20_0), | ||
921 | PINMUX_DATA(TS0_2SELECT_MARK, MSEL3CR_21_0, MSEL3CR_20_1), | ||
922 | PINMUX_DATA(TS1_1SELECT_MARK, MSEL3CR_27_0, MSEL3CR_26_0), | ||
923 | PINMUX_DATA(TS1_2SELECT_MARK, MSEL3CR_27_0, MSEL3CR_26_1), | ||
924 | |||
925 | PINMUX_DATA(SDENC_CPG_MARK, MSEL4CR_19_0), | ||
926 | PINMUX_DATA(SDENC_DV_CLKI_MARK, MSEL4CR_19_1), | ||
927 | |||
928 | PINMUX_DATA(MFIv6_MARK, MSEL4CR_6_0), | ||
929 | PINMUX_DATA(MFIv4_MARK, MSEL4CR_6_1), | ||
930 | }; | ||
931 | |||
932 | static struct pinmux_gpio pinmux_gpios[] = { | ||
933 | |||
934 | /* PORT */ | ||
935 | GPIO_PORT_ALL(), | ||
936 | |||
937 | /* IRQ */ | ||
938 | GPIO_FN(IRQ0_6), GPIO_FN(IRQ0_162), GPIO_FN(IRQ1), | ||
939 | GPIO_FN(IRQ2_4), GPIO_FN(IRQ2_5), GPIO_FN(IRQ3_8), | ||
940 | GPIO_FN(IRQ3_16), GPIO_FN(IRQ4_17), GPIO_FN(IRQ4_163), | ||
941 | GPIO_FN(IRQ5), GPIO_FN(IRQ6_39), GPIO_FN(IRQ6_164), | ||
942 | GPIO_FN(IRQ7_40), GPIO_FN(IRQ7_167), GPIO_FN(IRQ8_41), | ||
943 | GPIO_FN(IRQ8_168), GPIO_FN(IRQ9_42), GPIO_FN(IRQ9_169), | ||
944 | GPIO_FN(IRQ10), GPIO_FN(IRQ11), GPIO_FN(IRQ12_80), | ||
945 | GPIO_FN(IRQ12_137), GPIO_FN(IRQ13_81), GPIO_FN(IRQ13_145), | ||
946 | GPIO_FN(IRQ14_82), GPIO_FN(IRQ14_146), GPIO_FN(IRQ15_83), | ||
947 | GPIO_FN(IRQ15_147), GPIO_FN(IRQ16_84), GPIO_FN(IRQ16_170), | ||
948 | GPIO_FN(IRQ17), GPIO_FN(IRQ18), GPIO_FN(IRQ19), | ||
949 | GPIO_FN(IRQ20), GPIO_FN(IRQ21), GPIO_FN(IRQ22), | ||
950 | GPIO_FN(IRQ23), GPIO_FN(IRQ24), GPIO_FN(IRQ25), | ||
951 | GPIO_FN(IRQ26_121), GPIO_FN(IRQ26_172), GPIO_FN(IRQ27_122), | ||
952 | GPIO_FN(IRQ27_180), GPIO_FN(IRQ28_123), GPIO_FN(IRQ28_181), | ||
953 | GPIO_FN(IRQ29_129), GPIO_FN(IRQ29_182), GPIO_FN(IRQ30_130), | ||
954 | GPIO_FN(IRQ30_183), GPIO_FN(IRQ31_138), GPIO_FN(IRQ31_184), | ||
955 | |||
956 | /* MSIOF0 */ | ||
957 | GPIO_FN(MSIOF0_TSYNC), GPIO_FN(MSIOF0_TSCK), GPIO_FN(MSIOF0_RXD), | ||
958 | GPIO_FN(MSIOF0_RSCK), GPIO_FN(MSIOF0_RSYNC), GPIO_FN(MSIOF0_MCK0), | ||
959 | GPIO_FN(MSIOF0_MCK1), GPIO_FN(MSIOF0_SS1), GPIO_FN(MSIOF0_SS2), | ||
960 | GPIO_FN(MSIOF0_TXD), | ||
961 | |||
962 | /* MSIOF1 */ | ||
963 | GPIO_FN(MSIOF1_TSCK_39), GPIO_FN(MSIOF1_TSCK_88), | ||
964 | GPIO_FN(MSIOF1_TSYNC_40), GPIO_FN(MSIOF1_TSYNC_89), | ||
965 | GPIO_FN(MSIOF1_TXD_41), GPIO_FN(MSIOF1_TXD_90), | ||
966 | GPIO_FN(MSIOF1_RXD_42), GPIO_FN(MSIOF1_RXD_91), | ||
967 | GPIO_FN(MSIOF1_SS1_43), GPIO_FN(MSIOF1_SS1_92), | ||
968 | GPIO_FN(MSIOF1_SS2_44), GPIO_FN(MSIOF1_SS2_93), | ||
969 | GPIO_FN(MSIOF1_RSCK), GPIO_FN(MSIOF1_RSYNC), | ||
970 | GPIO_FN(MSIOF1_MCK0), GPIO_FN(MSIOF1_MCK1), | ||
971 | |||
972 | /* MSIOF2 */ | ||
973 | GPIO_FN(MSIOF2_RSCK), GPIO_FN(MSIOF2_RSYNC), GPIO_FN(MSIOF2_MCK0), | ||
974 | GPIO_FN(MSIOF2_MCK1), GPIO_FN(MSIOF2_SS1), GPIO_FN(MSIOF2_SS2), | ||
975 | GPIO_FN(MSIOF2_TSYNC), GPIO_FN(MSIOF2_TSCK), GPIO_FN(MSIOF2_RXD), | ||
976 | GPIO_FN(MSIOF2_TXD), | ||
977 | |||
978 | /* BBIF1 */ | ||
979 | GPIO_FN(BBIF1_RXD), GPIO_FN(BBIF1_TSYNC), GPIO_FN(BBIF1_TSCK), | ||
980 | GPIO_FN(BBIF1_TXD), GPIO_FN(BBIF1_RSCK), GPIO_FN(BBIF1_RSYNC), | ||
981 | GPIO_FN(BBIF1_FLOW), GPIO_FN(BB_RX_FLOW_N), | ||
982 | |||
983 | /* BBIF2 */ | ||
984 | GPIO_FN(BBIF2_TSCK1), GPIO_FN(BBIF2_TSYNC1), | ||
985 | GPIO_FN(BBIF2_TXD1), GPIO_FN(BBIF2_RXD), | ||
986 | |||
987 | /* FSI */ | ||
988 | GPIO_FN(FSIACK), GPIO_FN(FSIBCK), GPIO_FN(FSIAILR), | ||
989 | GPIO_FN(FSIAIBT), GPIO_FN(FSIAISLD), GPIO_FN(FSIAOMC), | ||
990 | GPIO_FN(FSIAOLR), GPIO_FN(FSIAOBT), GPIO_FN(FSIAOSLD), | ||
991 | GPIO_FN(FSIASPDIF_11), GPIO_FN(FSIASPDIF_15), | ||
992 | |||
993 | /* FMSI */ | ||
994 | GPIO_FN(FMSOCK), GPIO_FN(FMSOOLR), GPIO_FN(FMSIOLR), | ||
995 | GPIO_FN(FMSOOBT), GPIO_FN(FMSIOBT), GPIO_FN(FMSOSLD), | ||
996 | GPIO_FN(FMSOILR), GPIO_FN(FMSIILR), GPIO_FN(FMSOIBT), | ||
997 | GPIO_FN(FMSIIBT), GPIO_FN(FMSISLD), GPIO_FN(FMSICK), | ||
998 | |||
999 | /* SCIFA0 */ | ||
1000 | GPIO_FN(SCIFA0_TXD), GPIO_FN(SCIFA0_RXD), GPIO_FN(SCIFA0_SCK), | ||
1001 | GPIO_FN(SCIFA0_RTS), GPIO_FN(SCIFA0_CTS), | ||
1002 | |||
1003 | /* SCIFA1 */ | ||
1004 | GPIO_FN(SCIFA1_TXD), GPIO_FN(SCIFA1_RXD), GPIO_FN(SCIFA1_SCK), | ||
1005 | GPIO_FN(SCIFA1_RTS), GPIO_FN(SCIFA1_CTS), | ||
1006 | |||
1007 | /* SCIFA2 */ | ||
1008 | GPIO_FN(SCIFA2_CTS1), GPIO_FN(SCIFA2_RTS1), GPIO_FN(SCIFA2_TXD1), | ||
1009 | GPIO_FN(SCIFA2_RXD1), GPIO_FN(SCIFA2_SCK1), | ||
1010 | |||
1011 | /* SCIFA3 */ | ||
1012 | GPIO_FN(SCIFA3_CTS_43), GPIO_FN(SCIFA3_CTS_140), | ||
1013 | GPIO_FN(SCIFA3_RTS_44), GPIO_FN(SCIFA3_RTS_141), | ||
1014 | GPIO_FN(SCIFA3_SCK), GPIO_FN(SCIFA3_TXD), | ||
1015 | GPIO_FN(SCIFA3_RXD), | ||
1016 | |||
1017 | /* SCIFA4 */ | ||
1018 | GPIO_FN(SCIFA4_RXD), GPIO_FN(SCIFA4_TXD), | ||
1019 | |||
1020 | /* SCIFA5 */ | ||
1021 | GPIO_FN(SCIFA5_RXD), GPIO_FN(SCIFA5_TXD), | ||
1022 | |||
1023 | /* SCIFB */ | ||
1024 | GPIO_FN(SCIFB_SCK), GPIO_FN(SCIFB_RTS), GPIO_FN(SCIFB_CTS), | ||
1025 | GPIO_FN(SCIFB_TXD), GPIO_FN(SCIFB_RXD), | ||
1026 | |||
1027 | /* CEU */ | ||
1028 | GPIO_FN(VIO_HD), GPIO_FN(VIO_CKO1), GPIO_FN(VIO_CKO2), | ||
1029 | GPIO_FN(VIO_VD), GPIO_FN(VIO_CLK), GPIO_FN(VIO_FIELD), | ||
1030 | GPIO_FN(VIO_CKO), GPIO_FN(VIO_D0), GPIO_FN(VIO_D1), | ||
1031 | GPIO_FN(VIO_D2), GPIO_FN(VIO_D3), GPIO_FN(VIO_D4), | ||
1032 | GPIO_FN(VIO_D5), GPIO_FN(VIO_D6), GPIO_FN(VIO_D7), | ||
1033 | GPIO_FN(VIO_D8), GPIO_FN(VIO_D9), GPIO_FN(VIO_D10), | ||
1034 | GPIO_FN(VIO_D11), GPIO_FN(VIO_D12), GPIO_FN(VIO_D13), | ||
1035 | GPIO_FN(VIO_D14), GPIO_FN(VIO_D15), | ||
1036 | |||
1037 | /* USB0 */ | ||
1038 | GPIO_FN(IDIN_0), GPIO_FN(EXTLP_0), GPIO_FN(OVCN2_0), | ||
1039 | GPIO_FN(PWEN_0), GPIO_FN(OVCN_0), GPIO_FN(VBUS0_0), | ||
1040 | |||
1041 | /* USB1 */ | ||
1042 | GPIO_FN(IDIN_1_18), GPIO_FN(IDIN_1_113), | ||
1043 | GPIO_FN(OVCN_1_114), GPIO_FN(OVCN_1_162), | ||
1044 | GPIO_FN(PWEN_1_115), GPIO_FN(PWEN_1_138), | ||
1045 | GPIO_FN(EXTLP_1), GPIO_FN(OVCN2_1), | ||
1046 | GPIO_FN(VBUS0_1), | ||
1047 | |||
1048 | /* GPIO */ | ||
1049 | GPIO_FN(GPI0), GPIO_FN(GPI1), GPIO_FN(GPO0), GPIO_FN(GPO1), | ||
1050 | |||
1051 | /* BSC */ | ||
1052 | GPIO_FN(BS), GPIO_FN(WE1), GPIO_FN(CKO), | ||
1053 | GPIO_FN(WAIT), GPIO_FN(RDWR), | ||
1054 | |||
1055 | GPIO_FN(A0), GPIO_FN(A1), GPIO_FN(A2), | ||
1056 | GPIO_FN(A3), GPIO_FN(A6), GPIO_FN(A7), | ||
1057 | GPIO_FN(A8), GPIO_FN(A9), GPIO_FN(A10), | ||
1058 | GPIO_FN(A11), GPIO_FN(A12), GPIO_FN(A13), | ||
1059 | GPIO_FN(A14), GPIO_FN(A15), GPIO_FN(A16), | ||
1060 | GPIO_FN(A17), GPIO_FN(A18), GPIO_FN(A19), | ||
1061 | GPIO_FN(A20), GPIO_FN(A21), GPIO_FN(A22), | ||
1062 | GPIO_FN(A23), GPIO_FN(A24), GPIO_FN(A25), | ||
1063 | GPIO_FN(A26), | ||
1064 | |||
1065 | GPIO_FN(CS0), GPIO_FN(CS2), GPIO_FN(CS4), | ||
1066 | GPIO_FN(CS5A), GPIO_FN(CS5B), GPIO_FN(CS6A), | ||
1067 | |||
1068 | /* BSC/FLCTL */ | ||
1069 | GPIO_FN(RD_FSC), GPIO_FN(WE0_FWE), GPIO_FN(A4_FOE), | ||
1070 | GPIO_FN(A5_FCDE), GPIO_FN(D0_NAF0), GPIO_FN(D1_NAF1), | ||
1071 | GPIO_FN(D2_NAF2), GPIO_FN(D3_NAF3), GPIO_FN(D4_NAF4), | ||
1072 | GPIO_FN(D5_NAF5), GPIO_FN(D6_NAF6), GPIO_FN(D7_NAF7), | ||
1073 | GPIO_FN(D8_NAF8), GPIO_FN(D9_NAF9), GPIO_FN(D10_NAF10), | ||
1074 | GPIO_FN(D11_NAF11), GPIO_FN(D12_NAF12), GPIO_FN(D13_NAF13), | ||
1075 | GPIO_FN(D14_NAF14), GPIO_FN(D15_NAF15), | ||
1076 | |||
1077 | /* MMCIF(1) */ | ||
1078 | GPIO_FN(MMCD0_0), GPIO_FN(MMCD0_1), GPIO_FN(MMCD0_2), | ||
1079 | GPIO_FN(MMCD0_3), GPIO_FN(MMCD0_4), GPIO_FN(MMCD0_5), | ||
1080 | GPIO_FN(MMCD0_6), GPIO_FN(MMCD0_7), GPIO_FN(MMCCMD0), | ||
1081 | GPIO_FN(MMCCLK0), | ||
1082 | |||
1083 | /* MMCIF(2) */ | ||
1084 | GPIO_FN(MMCD1_0), GPIO_FN(MMCD1_1), GPIO_FN(MMCD1_2), | ||
1085 | GPIO_FN(MMCD1_3), GPIO_FN(MMCD1_4), GPIO_FN(MMCD1_5), | ||
1086 | GPIO_FN(MMCD1_6), GPIO_FN(MMCD1_7), GPIO_FN(MMCCLK1), | ||
1087 | GPIO_FN(MMCCMD1), | ||
1088 | |||
1089 | /* SPU2 */ | ||
1090 | GPIO_FN(VINT_I), | ||
1091 | |||
1092 | /* FLCTL */ | ||
1093 | GPIO_FN(FCE1), GPIO_FN(FCE0), GPIO_FN(FRB), | ||
1094 | |||
1095 | /* HSI */ | ||
1096 | GPIO_FN(GP_RX_FLAG), GPIO_FN(GP_RX_DATA), GPIO_FN(GP_TX_READY), | ||
1097 | GPIO_FN(GP_RX_WAKE), GPIO_FN(MP_TX_FLAG), GPIO_FN(MP_TX_DATA), | ||
1098 | GPIO_FN(MP_RX_READY), GPIO_FN(MP_TX_WAKE), | ||
1099 | |||
1100 | /* MFI */ | ||
1101 | GPIO_FN(MFIv6), | ||
1102 | GPIO_FN(MFIv4), | ||
1103 | |||
1104 | GPIO_FN(MEMC_BUSCLK_MEMC_A0), GPIO_FN(MEMC_ADV_MEMC_DREQ0), | ||
1105 | GPIO_FN(MEMC_WAIT_MEMC_DREQ1), GPIO_FN(MEMC_CS1_MEMC_A1), | ||
1106 | GPIO_FN(MEMC_CS0), GPIO_FN(MEMC_NOE), | ||
1107 | GPIO_FN(MEMC_NWE), GPIO_FN(MEMC_INT), | ||
1108 | |||
1109 | GPIO_FN(MEMC_AD0), GPIO_FN(MEMC_AD1), GPIO_FN(MEMC_AD2), | ||
1110 | GPIO_FN(MEMC_AD3), GPIO_FN(MEMC_AD4), GPIO_FN(MEMC_AD5), | ||
1111 | GPIO_FN(MEMC_AD6), GPIO_FN(MEMC_AD7), GPIO_FN(MEMC_AD8), | ||
1112 | GPIO_FN(MEMC_AD9), GPIO_FN(MEMC_AD10), GPIO_FN(MEMC_AD11), | ||
1113 | GPIO_FN(MEMC_AD12), GPIO_FN(MEMC_AD13), GPIO_FN(MEMC_AD14), | ||
1114 | GPIO_FN(MEMC_AD15), | ||
1115 | |||
1116 | /* SIM */ | ||
1117 | GPIO_FN(SIM_RST), GPIO_FN(SIM_CLK), GPIO_FN(SIM_D), | ||
1118 | |||
1119 | /* TPU */ | ||
1120 | GPIO_FN(TPU0TO0), GPIO_FN(TPU0TO1), GPIO_FN(TPU0TO2_93), | ||
1121 | GPIO_FN(TPU0TO2_99), GPIO_FN(TPU0TO3), | ||
1122 | |||
1123 | /* I2C2 */ | ||
1124 | GPIO_FN(I2C_SCL2), GPIO_FN(I2C_SDA2), | ||
1125 | |||
1126 | /* I2C3(1) */ | ||
1127 | GPIO_FN(I2C_SCL3), GPIO_FN(I2C_SDA3), | ||
1128 | |||
1129 | /* I2C3(2) */ | ||
1130 | GPIO_FN(I2C_SCL3S), GPIO_FN(I2C_SDA3S), | ||
1131 | |||
1132 | /* I2C4(2) */ | ||
1133 | GPIO_FN(I2C_SCL4), GPIO_FN(I2C_SDA4), | ||
1134 | |||
1135 | /* I2C4(2) */ | ||
1136 | GPIO_FN(I2C_SCL4S), GPIO_FN(I2C_SDA4S), | ||
1137 | |||
1138 | /* KEYSC */ | ||
1139 | GPIO_FN(KEYOUT0), GPIO_FN(KEYIN0_121), GPIO_FN(KEYIN0_136), | ||
1140 | GPIO_FN(KEYOUT1), GPIO_FN(KEYIN1_122), GPIO_FN(KEYIN1_135), | ||
1141 | GPIO_FN(KEYOUT2), GPIO_FN(KEYIN2_123), GPIO_FN(KEYIN2_134), | ||
1142 | GPIO_FN(KEYOUT3), GPIO_FN(KEYIN3_124), GPIO_FN(KEYIN3_133), | ||
1143 | GPIO_FN(KEYOUT4), GPIO_FN(KEYIN4), GPIO_FN(KEYOUT5), | ||
1144 | GPIO_FN(KEYIN5), GPIO_FN(KEYOUT6), GPIO_FN(KEYIN6), | ||
1145 | GPIO_FN(KEYOUT7), GPIO_FN(KEYIN7), | ||
1146 | |||
1147 | /* LCDC */ | ||
1148 | GPIO_FN(LCDHSYN), GPIO_FN(LCDCS), GPIO_FN(LCDVSYN), | ||
1149 | GPIO_FN(LCDDCK), GPIO_FN(LCDWR), GPIO_FN(LCDRD), | ||
1150 | GPIO_FN(LCDDISP), GPIO_FN(LCDRS), GPIO_FN(LCDLCLK), | ||
1151 | GPIO_FN(LCDDON), | ||
1152 | |||
1153 | GPIO_FN(LCDD0), GPIO_FN(LCDD1), GPIO_FN(LCDD2), | ||
1154 | GPIO_FN(LCDD3), GPIO_FN(LCDD4), GPIO_FN(LCDD5), | ||
1155 | GPIO_FN(LCDD6), GPIO_FN(LCDD7), GPIO_FN(LCDD8), | ||
1156 | GPIO_FN(LCDD9), GPIO_FN(LCDD10), GPIO_FN(LCDD11), | ||
1157 | GPIO_FN(LCDD12), GPIO_FN(LCDD13), GPIO_FN(LCDD14), | ||
1158 | GPIO_FN(LCDD15), GPIO_FN(LCDD16), GPIO_FN(LCDD17), | ||
1159 | GPIO_FN(LCDD18), GPIO_FN(LCDD19), GPIO_FN(LCDD20), | ||
1160 | GPIO_FN(LCDD21), GPIO_FN(LCDD22), GPIO_FN(LCDD23), | ||
1161 | |||
1162 | GPIO_FN(LCDC0_SELECT), | ||
1163 | GPIO_FN(LCDC1_SELECT), | ||
1164 | |||
1165 | /* IRDA */ | ||
1166 | GPIO_FN(IRDA_OUT), GPIO_FN(IRDA_IN), GPIO_FN(IRDA_FIRSEL), | ||
1167 | GPIO_FN(IROUT_139), GPIO_FN(IROUT_140), | ||
1168 | |||
1169 | /* TSIF1 */ | ||
1170 | GPIO_FN(TS0_1SELECT), | ||
1171 | GPIO_FN(TS0_2SELECT), | ||
1172 | GPIO_FN(TS1_1SELECT), | ||
1173 | GPIO_FN(TS1_2SELECT), | ||
1174 | |||
1175 | GPIO_FN(TS_SPSYNC1), GPIO_FN(TS_SDAT1), | ||
1176 | GPIO_FN(TS_SDEN1), GPIO_FN(TS_SCK1), | ||
1177 | |||
1178 | /* TSIF2 */ | ||
1179 | GPIO_FN(TS_SPSYNC2), GPIO_FN(TS_SDAT2), | ||
1180 | GPIO_FN(TS_SDEN2), GPIO_FN(TS_SCK2), | ||
1181 | |||
1182 | /* HDMI */ | ||
1183 | GPIO_FN(HDMI_HPD), GPIO_FN(HDMI_CEC), | ||
1184 | |||
1185 | /* SDHI0 */ | ||
1186 | GPIO_FN(SDHICLK0), GPIO_FN(SDHICD0), GPIO_FN(SDHICMD0), | ||
1187 | GPIO_FN(SDHIWP0), GPIO_FN(SDHID0_0), GPIO_FN(SDHID0_1), | ||
1188 | GPIO_FN(SDHID0_2), GPIO_FN(SDHID0_3), | ||
1189 | |||
1190 | /* SDHI1 */ | ||
1191 | GPIO_FN(SDHICLK1), GPIO_FN(SDHICMD1), GPIO_FN(SDHID1_0), | ||
1192 | GPIO_FN(SDHID1_1), GPIO_FN(SDHID1_2), GPIO_FN(SDHID1_3), | ||
1193 | |||
1194 | /* SDHI2 */ | ||
1195 | GPIO_FN(SDHICLK2), GPIO_FN(SDHICMD2), GPIO_FN(SDHID2_0), | ||
1196 | GPIO_FN(SDHID2_1), GPIO_FN(SDHID2_2), GPIO_FN(SDHID2_3), | ||
1197 | |||
1198 | /* SDENC */ | ||
1199 | GPIO_FN(SDENC_CPG), | ||
1200 | GPIO_FN(SDENC_DV_CLKI), | ||
1201 | }; | ||
1202 | |||
1203 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | ||
1204 | PORTCR(0, 0xE6051000), /* PORT0CR */ | ||
1205 | PORTCR(1, 0xE6051001), /* PORT1CR */ | ||
1206 | PORTCR(2, 0xE6051002), /* PORT2CR */ | ||
1207 | PORTCR(3, 0xE6051003), /* PORT3CR */ | ||
1208 | PORTCR(4, 0xE6051004), /* PORT4CR */ | ||
1209 | PORTCR(5, 0xE6051005), /* PORT5CR */ | ||
1210 | PORTCR(6, 0xE6051006), /* PORT6CR */ | ||
1211 | PORTCR(7, 0xE6051007), /* PORT7CR */ | ||
1212 | PORTCR(8, 0xE6051008), /* PORT8CR */ | ||
1213 | PORTCR(9, 0xE6051009), /* PORT9CR */ | ||
1214 | PORTCR(10, 0xE605100A), /* PORT10CR */ | ||
1215 | PORTCR(11, 0xE605100B), /* PORT11CR */ | ||
1216 | PORTCR(12, 0xE605100C), /* PORT12CR */ | ||
1217 | PORTCR(13, 0xE605100D), /* PORT13CR */ | ||
1218 | PORTCR(14, 0xE605100E), /* PORT14CR */ | ||
1219 | PORTCR(15, 0xE605100F), /* PORT15CR */ | ||
1220 | PORTCR(16, 0xE6051010), /* PORT16CR */ | ||
1221 | PORTCR(17, 0xE6051011), /* PORT17CR */ | ||
1222 | PORTCR(18, 0xE6051012), /* PORT18CR */ | ||
1223 | PORTCR(19, 0xE6051013), /* PORT19CR */ | ||
1224 | PORTCR(20, 0xE6051014), /* PORT20CR */ | ||
1225 | PORTCR(21, 0xE6051015), /* PORT21CR */ | ||
1226 | PORTCR(22, 0xE6051016), /* PORT22CR */ | ||
1227 | PORTCR(23, 0xE6051017), /* PORT23CR */ | ||
1228 | PORTCR(24, 0xE6051018), /* PORT24CR */ | ||
1229 | PORTCR(25, 0xE6051019), /* PORT25CR */ | ||
1230 | PORTCR(26, 0xE605101A), /* PORT26CR */ | ||
1231 | PORTCR(27, 0xE605101B), /* PORT27CR */ | ||
1232 | PORTCR(28, 0xE605101C), /* PORT28CR */ | ||
1233 | PORTCR(29, 0xE605101D), /* PORT29CR */ | ||
1234 | PORTCR(30, 0xE605101E), /* PORT30CR */ | ||
1235 | PORTCR(31, 0xE605101F), /* PORT31CR */ | ||
1236 | PORTCR(32, 0xE6051020), /* PORT32CR */ | ||
1237 | PORTCR(33, 0xE6051021), /* PORT33CR */ | ||
1238 | PORTCR(34, 0xE6051022), /* PORT34CR */ | ||
1239 | PORTCR(35, 0xE6051023), /* PORT35CR */ | ||
1240 | PORTCR(36, 0xE6051024), /* PORT36CR */ | ||
1241 | PORTCR(37, 0xE6051025), /* PORT37CR */ | ||
1242 | PORTCR(38, 0xE6051026), /* PORT38CR */ | ||
1243 | PORTCR(39, 0xE6051027), /* PORT39CR */ | ||
1244 | PORTCR(40, 0xE6051028), /* PORT40CR */ | ||
1245 | PORTCR(41, 0xE6051029), /* PORT41CR */ | ||
1246 | PORTCR(42, 0xE605102A), /* PORT42CR */ | ||
1247 | PORTCR(43, 0xE605102B), /* PORT43CR */ | ||
1248 | PORTCR(44, 0xE605102C), /* PORT44CR */ | ||
1249 | PORTCR(45, 0xE605102D), /* PORT45CR */ | ||
1250 | PORTCR(46, 0xE605202E), /* PORT46CR */ | ||
1251 | PORTCR(47, 0xE605202F), /* PORT47CR */ | ||
1252 | PORTCR(48, 0xE6052030), /* PORT48CR */ | ||
1253 | PORTCR(49, 0xE6052031), /* PORT49CR */ | ||
1254 | PORTCR(50, 0xE6052032), /* PORT50CR */ | ||
1255 | PORTCR(51, 0xE6052033), /* PORT51CR */ | ||
1256 | PORTCR(52, 0xE6052034), /* PORT52CR */ | ||
1257 | PORTCR(53, 0xE6052035), /* PORT53CR */ | ||
1258 | PORTCR(54, 0xE6052036), /* PORT54CR */ | ||
1259 | PORTCR(55, 0xE6052037), /* PORT55CR */ | ||
1260 | PORTCR(56, 0xE6052038), /* PORT56CR */ | ||
1261 | PORTCR(57, 0xE6052039), /* PORT57CR */ | ||
1262 | PORTCR(58, 0xE605203A), /* PORT58CR */ | ||
1263 | PORTCR(59, 0xE605203B), /* PORT59CR */ | ||
1264 | PORTCR(60, 0xE605203C), /* PORT60CR */ | ||
1265 | PORTCR(61, 0xE605203D), /* PORT61CR */ | ||
1266 | PORTCR(62, 0xE605203E), /* PORT62CR */ | ||
1267 | PORTCR(63, 0xE605203F), /* PORT63CR */ | ||
1268 | PORTCR(64, 0xE6052040), /* PORT64CR */ | ||
1269 | PORTCR(65, 0xE6052041), /* PORT65CR */ | ||
1270 | PORTCR(66, 0xE6052042), /* PORT66CR */ | ||
1271 | PORTCR(67, 0xE6052043), /* PORT67CR */ | ||
1272 | PORTCR(68, 0xE6052044), /* PORT68CR */ | ||
1273 | PORTCR(69, 0xE6052045), /* PORT69CR */ | ||
1274 | PORTCR(70, 0xE6052046), /* PORT70CR */ | ||
1275 | PORTCR(71, 0xE6052047), /* PORT71CR */ | ||
1276 | PORTCR(72, 0xE6052048), /* PORT72CR */ | ||
1277 | PORTCR(73, 0xE6052049), /* PORT73CR */ | ||
1278 | PORTCR(74, 0xE605204A), /* PORT74CR */ | ||
1279 | PORTCR(75, 0xE605204B), /* PORT75CR */ | ||
1280 | PORTCR(76, 0xE605004C), /* PORT76CR */ | ||
1281 | PORTCR(77, 0xE605004D), /* PORT77CR */ | ||
1282 | PORTCR(78, 0xE605004E), /* PORT78CR */ | ||
1283 | PORTCR(79, 0xE605004F), /* PORT79CR */ | ||
1284 | PORTCR(80, 0xE6050050), /* PORT80CR */ | ||
1285 | PORTCR(81, 0xE6050051), /* PORT81CR */ | ||
1286 | PORTCR(82, 0xE6050052), /* PORT82CR */ | ||
1287 | PORTCR(83, 0xE6050053), /* PORT83CR */ | ||
1288 | PORTCR(84, 0xE6050054), /* PORT84CR */ | ||
1289 | PORTCR(85, 0xE6050055), /* PORT85CR */ | ||
1290 | PORTCR(86, 0xE6050056), /* PORT86CR */ | ||
1291 | PORTCR(87, 0xE6050057), /* PORT87CR */ | ||
1292 | PORTCR(88, 0xE6050058), /* PORT88CR */ | ||
1293 | PORTCR(89, 0xE6050059), /* PORT89CR */ | ||
1294 | PORTCR(90, 0xE605005A), /* PORT90CR */ | ||
1295 | PORTCR(91, 0xE605005B), /* PORT91CR */ | ||
1296 | PORTCR(92, 0xE605005C), /* PORT92CR */ | ||
1297 | PORTCR(93, 0xE605005D), /* PORT93CR */ | ||
1298 | PORTCR(94, 0xE605005E), /* PORT94CR */ | ||
1299 | PORTCR(95, 0xE605005F), /* PORT95CR */ | ||
1300 | PORTCR(96, 0xE6050060), /* PORT96CR */ | ||
1301 | PORTCR(97, 0xE6050061), /* PORT97CR */ | ||
1302 | PORTCR(98, 0xE6050062), /* PORT98CR */ | ||
1303 | PORTCR(99, 0xE6050063), /* PORT99CR */ | ||
1304 | PORTCR(100, 0xE6053064), /* PORT100CR */ | ||
1305 | PORTCR(101, 0xE6053065), /* PORT101CR */ | ||
1306 | PORTCR(102, 0xE6053066), /* PORT102CR */ | ||
1307 | PORTCR(103, 0xE6053067), /* PORT103CR */ | ||
1308 | PORTCR(104, 0xE6053068), /* PORT104CR */ | ||
1309 | PORTCR(105, 0xE6053069), /* PORT105CR */ | ||
1310 | PORTCR(106, 0xE605306A), /* PORT106CR */ | ||
1311 | PORTCR(107, 0xE605306B), /* PORT107CR */ | ||
1312 | PORTCR(108, 0xE605306C), /* PORT108CR */ | ||
1313 | PORTCR(109, 0xE605306D), /* PORT109CR */ | ||
1314 | PORTCR(110, 0xE605306E), /* PORT110CR */ | ||
1315 | PORTCR(111, 0xE605306F), /* PORT111CR */ | ||
1316 | PORTCR(112, 0xE6053070), /* PORT112CR */ | ||
1317 | PORTCR(113, 0xE6053071), /* PORT113CR */ | ||
1318 | PORTCR(114, 0xE6053072), /* PORT114CR */ | ||
1319 | PORTCR(115, 0xE6053073), /* PORT115CR */ | ||
1320 | PORTCR(116, 0xE6053074), /* PORT116CR */ | ||
1321 | PORTCR(117, 0xE6053075), /* PORT117CR */ | ||
1322 | PORTCR(118, 0xE6053076), /* PORT118CR */ | ||
1323 | PORTCR(119, 0xE6053077), /* PORT119CR */ | ||
1324 | PORTCR(120, 0xE6053078), /* PORT120CR */ | ||
1325 | PORTCR(121, 0xE6050079), /* PORT121CR */ | ||
1326 | PORTCR(122, 0xE605007A), /* PORT122CR */ | ||
1327 | PORTCR(123, 0xE605007B), /* PORT123CR */ | ||
1328 | PORTCR(124, 0xE605007C), /* PORT124CR */ | ||
1329 | PORTCR(125, 0xE605007D), /* PORT125CR */ | ||
1330 | PORTCR(126, 0xE605007E), /* PORT126CR */ | ||
1331 | PORTCR(127, 0xE605007F), /* PORT127CR */ | ||
1332 | PORTCR(128, 0xE6050080), /* PORT128CR */ | ||
1333 | PORTCR(129, 0xE6050081), /* PORT129CR */ | ||
1334 | PORTCR(130, 0xE6050082), /* PORT130CR */ | ||
1335 | PORTCR(131, 0xE6050083), /* PORT131CR */ | ||
1336 | PORTCR(132, 0xE6050084), /* PORT132CR */ | ||
1337 | PORTCR(133, 0xE6050085), /* PORT133CR */ | ||
1338 | PORTCR(134, 0xE6050086), /* PORT134CR */ | ||
1339 | PORTCR(135, 0xE6050087), /* PORT135CR */ | ||
1340 | PORTCR(136, 0xE6050088), /* PORT136CR */ | ||
1341 | PORTCR(137, 0xE6050089), /* PORT137CR */ | ||
1342 | PORTCR(138, 0xE605008A), /* PORT138CR */ | ||
1343 | PORTCR(139, 0xE605008B), /* PORT139CR */ | ||
1344 | PORTCR(140, 0xE605008C), /* PORT140CR */ | ||
1345 | PORTCR(141, 0xE605008D), /* PORT141CR */ | ||
1346 | PORTCR(142, 0xE605008E), /* PORT142CR */ | ||
1347 | PORTCR(143, 0xE605008F), /* PORT143CR */ | ||
1348 | PORTCR(144, 0xE6050090), /* PORT144CR */ | ||
1349 | PORTCR(145, 0xE6050091), /* PORT145CR */ | ||
1350 | PORTCR(146, 0xE6050092), /* PORT146CR */ | ||
1351 | PORTCR(147, 0xE6050093), /* PORT147CR */ | ||
1352 | PORTCR(148, 0xE6050094), /* PORT148CR */ | ||
1353 | PORTCR(149, 0xE6050095), /* PORT149CR */ | ||
1354 | PORTCR(150, 0xE6050096), /* PORT150CR */ | ||
1355 | PORTCR(151, 0xE6050097), /* PORT151CR */ | ||
1356 | PORTCR(152, 0xE6053098), /* PORT152CR */ | ||
1357 | PORTCR(153, 0xE6053099), /* PORT153CR */ | ||
1358 | PORTCR(154, 0xE605309A), /* PORT154CR */ | ||
1359 | PORTCR(155, 0xE605309B), /* PORT155CR */ | ||
1360 | PORTCR(156, 0xE605009C), /* PORT156CR */ | ||
1361 | PORTCR(157, 0xE605009D), /* PORT157CR */ | ||
1362 | PORTCR(158, 0xE605009E), /* PORT158CR */ | ||
1363 | PORTCR(159, 0xE605009F), /* PORT159CR */ | ||
1364 | PORTCR(160, 0xE60500A0), /* PORT160CR */ | ||
1365 | PORTCR(161, 0xE60500A1), /* PORT161CR */ | ||
1366 | PORTCR(162, 0xE60500A2), /* PORT162CR */ | ||
1367 | PORTCR(163, 0xE60500A3), /* PORT163CR */ | ||
1368 | PORTCR(164, 0xE60500A4), /* PORT164CR */ | ||
1369 | PORTCR(165, 0xE60500A5), /* PORT165CR */ | ||
1370 | PORTCR(166, 0xE60500A6), /* PORT166CR */ | ||
1371 | PORTCR(167, 0xE60520A7), /* PORT167CR */ | ||
1372 | PORTCR(168, 0xE60520A8), /* PORT168CR */ | ||
1373 | PORTCR(169, 0xE60520A9), /* PORT169CR */ | ||
1374 | PORTCR(170, 0xE60520AA), /* PORT170CR */ | ||
1375 | PORTCR(171, 0xE60520AB), /* PORT171CR */ | ||
1376 | PORTCR(172, 0xE60520AC), /* PORT172CR */ | ||
1377 | PORTCR(173, 0xE60520AD), /* PORT173CR */ | ||
1378 | PORTCR(174, 0xE60520AE), /* PORT174CR */ | ||
1379 | PORTCR(175, 0xE60520AF), /* PORT175CR */ | ||
1380 | PORTCR(176, 0xE60520B0), /* PORT176CR */ | ||
1381 | PORTCR(177, 0xE60520B1), /* PORT177CR */ | ||
1382 | PORTCR(178, 0xE60520B2), /* PORT178CR */ | ||
1383 | PORTCR(179, 0xE60520B3), /* PORT179CR */ | ||
1384 | PORTCR(180, 0xE60520B4), /* PORT180CR */ | ||
1385 | PORTCR(181, 0xE60520B5), /* PORT181CR */ | ||
1386 | PORTCR(182, 0xE60520B6), /* PORT182CR */ | ||
1387 | PORTCR(183, 0xE60520B7), /* PORT183CR */ | ||
1388 | PORTCR(184, 0xE60520B8), /* PORT184CR */ | ||
1389 | PORTCR(185, 0xE60520B9), /* PORT185CR */ | ||
1390 | PORTCR(186, 0xE60520BA), /* PORT186CR */ | ||
1391 | PORTCR(187, 0xE60520BB), /* PORT187CR */ | ||
1392 | PORTCR(188, 0xE60520BC), /* PORT188CR */ | ||
1393 | PORTCR(189, 0xE60520BD), /* PORT189CR */ | ||
1394 | PORTCR(190, 0xE60520BE), /* PORT190CR */ | ||
1395 | |||
1396 | { PINMUX_CFG_REG("MSEL1CR", 0xE605800C, 32, 1) { | ||
1397 | MSEL1CR_31_0, MSEL1CR_31_1, | ||
1398 | MSEL1CR_30_0, MSEL1CR_30_1, | ||
1399 | MSEL1CR_29_0, MSEL1CR_29_1, | ||
1400 | MSEL1CR_28_0, MSEL1CR_28_1, | ||
1401 | MSEL1CR_27_0, MSEL1CR_27_1, | ||
1402 | MSEL1CR_26_0, MSEL1CR_26_1, | ||
1403 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
1404 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
1405 | MSEL1CR_16_0, MSEL1CR_16_1, | ||
1406 | MSEL1CR_15_0, MSEL1CR_15_1, | ||
1407 | MSEL1CR_14_0, MSEL1CR_14_1, | ||
1408 | MSEL1CR_13_0, MSEL1CR_13_1, | ||
1409 | MSEL1CR_12_0, MSEL1CR_12_1, | ||
1410 | 0, 0, 0, 0, | ||
1411 | MSEL1CR_9_0, MSEL1CR_9_1, | ||
1412 | MSEL1CR_8_0, MSEL1CR_8_1, | ||
1413 | MSEL1CR_7_0, MSEL1CR_7_1, | ||
1414 | MSEL1CR_6_0, MSEL1CR_6_1, | ||
1415 | 0, 0, | ||
1416 | MSEL1CR_4_0, MSEL1CR_4_1, | ||
1417 | MSEL1CR_3_0, MSEL1CR_3_1, | ||
1418 | MSEL1CR_2_0, MSEL1CR_2_1, | ||
1419 | 0, 0, | ||
1420 | MSEL1CR_0_0, MSEL1CR_0_1, | ||
1421 | } | ||
1422 | }, | ||
1423 | { PINMUX_CFG_REG("MSEL3CR", 0xE6058020, 32, 1) { | ||
1424 | 0, 0, 0, 0, | ||
1425 | 0, 0, 0, 0, | ||
1426 | MSEL3CR_27_0, MSEL3CR_27_1, | ||
1427 | MSEL3CR_26_0, MSEL3CR_26_1, | ||
1428 | 0, 0, 0, 0, | ||
1429 | 0, 0, 0, 0, | ||
1430 | MSEL3CR_21_0, MSEL3CR_21_1, | ||
1431 | MSEL3CR_20_0, MSEL3CR_20_1, | ||
1432 | 0, 0, 0, 0, | ||
1433 | 0, 0, 0, 0, | ||
1434 | MSEL3CR_15_0, MSEL3CR_15_1, | ||
1435 | 0, 0, 0, 0, | ||
1436 | 0, 0, 0, 0, | ||
1437 | 0, 0, | ||
1438 | MSEL3CR_9_0, MSEL3CR_9_1, | ||
1439 | 0, 0, 0, 0, | ||
1440 | MSEL3CR_6_0, MSEL3CR_6_1, | ||
1441 | 0, 0, 0, 0, | ||
1442 | 0, 0, 0, 0, | ||
1443 | 0, 0, 0, 0, | ||
1444 | } | ||
1445 | }, | ||
1446 | { PINMUX_CFG_REG("MSEL4CR", 0xE6058024, 32, 1) { | ||
1447 | 0, 0, 0, 0, | ||
1448 | 0, 0, 0, 0, | ||
1449 | 0, 0, 0, 0, | ||
1450 | 0, 0, 0, 0, | ||
1451 | 0, 0, 0, 0, | ||
1452 | 0, 0, 0, 0, | ||
1453 | MSEL4CR_19_0, MSEL4CR_19_1, | ||
1454 | MSEL4CR_18_0, MSEL4CR_18_1, | ||
1455 | MSEL4CR_17_0, MSEL4CR_17_1, | ||
1456 | MSEL4CR_16_0, MSEL4CR_16_1, | ||
1457 | MSEL4CR_15_0, MSEL4CR_15_1, | ||
1458 | MSEL4CR_14_0, MSEL4CR_14_1, | ||
1459 | 0, 0, 0, 0, | ||
1460 | 0, 0, | ||
1461 | MSEL4CR_10_0, MSEL4CR_10_1, | ||
1462 | 0, 0, 0, 0, | ||
1463 | 0, 0, | ||
1464 | MSEL4CR_6_0, MSEL4CR_6_1, | ||
1465 | 0, 0, | ||
1466 | MSEL4CR_4_0, MSEL4CR_4_1, | ||
1467 | 0, 0, 0, 0, | ||
1468 | MSEL4CR_1_0, MSEL4CR_1_1, | ||
1469 | 0, 0, | ||
1470 | } | ||
1471 | }, | ||
1472 | { }, | ||
1473 | }; | ||
1474 | |||
1475 | static struct pinmux_data_reg pinmux_data_regs[] = { | ||
1476 | { PINMUX_DATA_REG("PORTL095_064DR", 0xE6054008, 32) { | ||
1477 | PORT95_DATA, PORT94_DATA, PORT93_DATA, PORT92_DATA, | ||
1478 | PORT91_DATA, PORT90_DATA, PORT89_DATA, PORT88_DATA, | ||
1479 | PORT87_DATA, PORT86_DATA, PORT85_DATA, PORT84_DATA, | ||
1480 | PORT83_DATA, PORT82_DATA, PORT81_DATA, PORT80_DATA, | ||
1481 | PORT79_DATA, PORT78_DATA, PORT77_DATA, PORT76_DATA, | ||
1482 | 0, 0, 0, 0, | ||
1483 | 0, 0, 0, 0, | ||
1484 | 0, 0, 0, 0, | ||
1485 | } | ||
1486 | }, | ||
1487 | { PINMUX_DATA_REG("PORTL127_096DR", 0xE605400C, 32) { | ||
1488 | PORT127_DATA, PORT126_DATA, PORT125_DATA, PORT124_DATA, | ||
1489 | PORT123_DATA, PORT122_DATA, PORT121_DATA, 0, | ||
1490 | 0, 0, 0, 0, | ||
1491 | 0, 0, 0, 0, | ||
1492 | 0, 0, 0, 0, | ||
1493 | 0, 0, 0, 0, | ||
1494 | 0, 0, 0, 0, | ||
1495 | PORT99_DATA, PORT98_DATA, PORT97_DATA, PORT96_DATA, | ||
1496 | } | ||
1497 | }, | ||
1498 | { PINMUX_DATA_REG("PORTL159_128DR", 0xE6054010, 32) { | ||
1499 | PORT159_DATA, PORT158_DATA, PORT157_DATA, PORT156_DATA, | ||
1500 | 0, 0, 0, 0, | ||
1501 | PORT151_DATA, PORT150_DATA, PORT149_DATA, PORT148_DATA, | ||
1502 | PORT147_DATA, PORT146_DATA, PORT145_DATA, PORT144_DATA, | ||
1503 | PORT143_DATA, PORT142_DATA, PORT141_DATA, PORT140_DATA, | ||
1504 | PORT139_DATA, PORT138_DATA, PORT137_DATA, PORT136_DATA, | ||
1505 | PORT135_DATA, PORT134_DATA, PORT133_DATA, PORT132_DATA, | ||
1506 | PORT131_DATA, PORT130_DATA, PORT129_DATA, PORT128_DATA, | ||
1507 | } | ||
1508 | }, | ||
1509 | { PINMUX_DATA_REG("PORTL191_160DR", 0xE6054014, 32) { | ||
1510 | 0, 0, 0, 0, | ||
1511 | 0, 0, 0, 0, | ||
1512 | 0, 0, 0, 0, | ||
1513 | 0, 0, 0, 0, | ||
1514 | 0, 0, 0, 0, | ||
1515 | 0, 0, 0, 0, | ||
1516 | 0, PORT166_DATA, PORT165_DATA, PORT164_DATA, | ||
1517 | PORT163_DATA, PORT162_DATA, PORT161_DATA, PORT160_DATA, | ||
1518 | } | ||
1519 | }, | ||
1520 | { PINMUX_DATA_REG("PORTD031_000DR", 0xE6055000, 32) { | ||
1521 | PORT31_DATA, PORT30_DATA, PORT29_DATA, PORT28_DATA, | ||
1522 | PORT27_DATA, PORT26_DATA, PORT25_DATA, PORT24_DATA, | ||
1523 | PORT23_DATA, PORT22_DATA, PORT21_DATA, PORT20_DATA, | ||
1524 | PORT19_DATA, PORT18_DATA, PORT17_DATA, PORT16_DATA, | ||
1525 | PORT15_DATA, PORT14_DATA, PORT13_DATA, PORT12_DATA, | ||
1526 | PORT11_DATA, PORT10_DATA, PORT9_DATA, PORT8_DATA, | ||
1527 | PORT7_DATA, PORT6_DATA, PORT5_DATA, PORT4_DATA, | ||
1528 | PORT3_DATA, PORT2_DATA, PORT1_DATA, PORT0_DATA, | ||
1529 | } | ||
1530 | }, | ||
1531 | { PINMUX_DATA_REG("PORTD063_032DR", 0xE6055004, 32) { | ||
1532 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
1533 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
1534 | 0, 0, PORT45_DATA, PORT44_DATA, | ||
1535 | PORT43_DATA, PORT42_DATA, PORT41_DATA, PORT40_DATA, | ||
1536 | PORT39_DATA, PORT38_DATA, PORT37_DATA, PORT36_DATA, | ||
1537 | PORT35_DATA, PORT34_DATA, PORT33_DATA, PORT32_DATA, | ||
1538 | } | ||
1539 | }, | ||
1540 | { PINMUX_DATA_REG("PORTR063_032DR", 0xE6056004, 32) { | ||
1541 | PORT63_DATA, PORT62_DATA, PORT61_DATA, PORT60_DATA, | ||
1542 | PORT59_DATA, PORT58_DATA, PORT57_DATA, PORT56_DATA, | ||
1543 | PORT55_DATA, PORT54_DATA, PORT53_DATA, PORT52_DATA, | ||
1544 | PORT51_DATA, PORT50_DATA, PORT49_DATA, PORT48_DATA, | ||
1545 | PORT47_DATA, PORT46_DATA, 0, 0, | ||
1546 | 0, 0, 0, 0, | ||
1547 | 0, 0, 0, 0, | ||
1548 | 0, 0, 0, 0, | ||
1549 | } | ||
1550 | }, | ||
1551 | { PINMUX_DATA_REG("PORTR095_064DR", 0xE6056008, 32) { | ||
1552 | 0, 0, 0, 0, | ||
1553 | 0, 0, 0, 0, | ||
1554 | 0, 0, 0, 0, | ||
1555 | 0, 0, 0, 0, | ||
1556 | 0, 0, 0, 0, | ||
1557 | PORT75_DATA, PORT74_DATA, PORT73_DATA, PORT72_DATA, | ||
1558 | PORT71_DATA, PORT70_DATA, PORT69_DATA, PORT68_DATA, | ||
1559 | PORT67_DATA, PORT66_DATA, PORT65_DATA, PORT64_DATA, | ||
1560 | } | ||
1561 | }, | ||
1562 | { PINMUX_DATA_REG("PORTR191_160DR", 0xE6056014, 32) { | ||
1563 | 0, PORT190_DATA, PORT189_DATA, PORT188_DATA, | ||
1564 | PORT187_DATA, PORT186_DATA, PORT185_DATA, PORT184_DATA, | ||
1565 | PORT183_DATA, PORT182_DATA, PORT181_DATA, PORT180_DATA, | ||
1566 | PORT179_DATA, PORT178_DATA, PORT177_DATA, PORT176_DATA, | ||
1567 | PORT175_DATA, PORT174_DATA, PORT173_DATA, PORT172_DATA, | ||
1568 | PORT171_DATA, PORT170_DATA, PORT169_DATA, PORT168_DATA, | ||
1569 | PORT167_DATA, 0, 0, 0, | ||
1570 | 0, 0, 0, 0, | ||
1571 | } | ||
1572 | }, | ||
1573 | { PINMUX_DATA_REG("PORTU127_096DR", 0xE605700C, 32) { | ||
1574 | 0, 0, 0, 0, | ||
1575 | 0, 0, 0, PORT120_DATA, | ||
1576 | PORT119_DATA, PORT118_DATA, PORT117_DATA, PORT116_DATA, | ||
1577 | PORT115_DATA, PORT114_DATA, PORT113_DATA, PORT112_DATA, | ||
1578 | PORT111_DATA, PORT110_DATA, PORT109_DATA, PORT108_DATA, | ||
1579 | PORT107_DATA, PORT106_DATA, PORT105_DATA, PORT104_DATA, | ||
1580 | PORT103_DATA, PORT102_DATA, PORT101_DATA, PORT100_DATA, | ||
1581 | 0, 0, 0, 0, | ||
1582 | } | ||
1583 | }, | ||
1584 | { PINMUX_DATA_REG("PORTU159_128DR", 0xE6057010, 32) { | ||
1585 | 0, 0, 0, 0, | ||
1586 | PORT155_DATA, PORT154_DATA, PORT153_DATA, PORT152_DATA, | ||
1587 | 0, 0, 0, 0, | ||
1588 | 0, 0, 0, 0, | ||
1589 | 0, 0, 0, 0, | ||
1590 | 0, 0, 0, 0, | ||
1591 | 0, 0, 0, 0, | ||
1592 | 0, 0, 0, 0, | ||
1593 | } | ||
1594 | }, | ||
1595 | { }, | ||
1596 | }; | ||
1597 | |||
1598 | #define EXT_IRQ16L(n) evt2irq(0x200 + ((n) << 5)) | ||
1599 | #define EXT_IRQ16H(n) evt2irq(0x3200 + (((n) - 16) << 5)) | ||
1600 | static struct pinmux_irq pinmux_irqs[] = { | ||
1601 | PINMUX_IRQ(EXT_IRQ16L(0), PORT6_FN0, PORT162_FN0), | ||
1602 | PINMUX_IRQ(EXT_IRQ16L(1), PORT12_FN0), | ||
1603 | PINMUX_IRQ(EXT_IRQ16L(2), PORT4_FN0, PORT5_FN0), | ||
1604 | PINMUX_IRQ(EXT_IRQ16L(3), PORT8_FN0, PORT16_FN0), | ||
1605 | PINMUX_IRQ(EXT_IRQ16L(4), PORT17_FN0, PORT163_FN0), | ||
1606 | PINMUX_IRQ(EXT_IRQ16L(5), PORT18_FN0), | ||
1607 | PINMUX_IRQ(EXT_IRQ16L(6), PORT39_FN0, PORT164_FN0), | ||
1608 | PINMUX_IRQ(EXT_IRQ16L(7), PORT40_FN0, PORT167_FN0), | ||
1609 | PINMUX_IRQ(EXT_IRQ16L(8), PORT41_FN0, PORT168_FN0), | ||
1610 | PINMUX_IRQ(EXT_IRQ16L(9), PORT42_FN0, PORT169_FN0), | ||
1611 | PINMUX_IRQ(EXT_IRQ16L(10), PORT65_FN0), | ||
1612 | PINMUX_IRQ(EXT_IRQ16L(11), PORT67_FN0), | ||
1613 | PINMUX_IRQ(EXT_IRQ16L(12), PORT80_FN0, PORT137_FN0), | ||
1614 | PINMUX_IRQ(EXT_IRQ16L(13), PORT81_FN0, PORT145_FN0), | ||
1615 | PINMUX_IRQ(EXT_IRQ16L(14), PORT82_FN0, PORT146_FN0), | ||
1616 | PINMUX_IRQ(EXT_IRQ16L(15), PORT83_FN0, PORT147_FN0), | ||
1617 | PINMUX_IRQ(EXT_IRQ16H(16), PORT84_FN0, PORT170_FN0), | ||
1618 | PINMUX_IRQ(EXT_IRQ16H(17), PORT85_FN0), | ||
1619 | PINMUX_IRQ(EXT_IRQ16H(18), PORT86_FN0), | ||
1620 | PINMUX_IRQ(EXT_IRQ16H(19), PORT87_FN0), | ||
1621 | PINMUX_IRQ(EXT_IRQ16H(20), PORT92_FN0), | ||
1622 | PINMUX_IRQ(EXT_IRQ16H(21), PORT93_FN0), | ||
1623 | PINMUX_IRQ(EXT_IRQ16H(22), PORT94_FN0), | ||
1624 | PINMUX_IRQ(EXT_IRQ16H(23), PORT95_FN0), | ||
1625 | PINMUX_IRQ(EXT_IRQ16H(24), PORT112_FN0), | ||
1626 | PINMUX_IRQ(EXT_IRQ16H(25), PORT119_FN0), | ||
1627 | PINMUX_IRQ(EXT_IRQ16H(26), PORT121_FN0, PORT172_FN0), | ||
1628 | PINMUX_IRQ(EXT_IRQ16H(27), PORT122_FN0, PORT180_FN0), | ||
1629 | PINMUX_IRQ(EXT_IRQ16H(28), PORT123_FN0, PORT181_FN0), | ||
1630 | PINMUX_IRQ(EXT_IRQ16H(29), PORT129_FN0, PORT182_FN0), | ||
1631 | PINMUX_IRQ(EXT_IRQ16H(30), PORT130_FN0, PORT183_FN0), | ||
1632 | PINMUX_IRQ(EXT_IRQ16H(31), PORT138_FN0, PORT184_FN0), | ||
1633 | }; | ||
1634 | |||
1635 | static struct pinmux_info sh7372_pinmux_info = { | ||
1636 | .name = "sh7372_pfc", | ||
1637 | .reserved_id = PINMUX_RESERVED, | ||
1638 | .data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, | ||
1639 | .input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, | ||
1640 | .input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, | ||
1641 | .input_pd = { PINMUX_INPUT_PULLDOWN_BEGIN, PINMUX_INPUT_PULLDOWN_END }, | ||
1642 | .output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, | ||
1643 | .mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, | ||
1644 | .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, | ||
1645 | |||
1646 | .first_gpio = GPIO_PORT0, | ||
1647 | .last_gpio = GPIO_FN_SDENC_DV_CLKI, | ||
1648 | |||
1649 | .gpios = pinmux_gpios, | ||
1650 | .cfg_regs = pinmux_config_regs, | ||
1651 | .data_regs = pinmux_data_regs, | ||
1652 | |||
1653 | .gpio_data = pinmux_data, | ||
1654 | .gpio_data_size = ARRAY_SIZE(pinmux_data), | ||
1655 | |||
1656 | .gpio_irq = pinmux_irqs, | ||
1657 | .gpio_irq_size = ARRAY_SIZE(pinmux_irqs), | ||
1658 | }; | ||
1659 | |||
1660 | void sh7372_pinmux_init(void) | ||
1661 | { | ||
1662 | register_pinmux(&sh7372_pinmux_info); | ||
1663 | } | ||
diff --git a/arch/arm/mach-shmobile/pfc-sh73a0.c b/arch/arm/mach-shmobile/pfc-sh73a0.c deleted file mode 100644 index b442f9d8c716..000000000000 --- a/arch/arm/mach-shmobile/pfc-sh73a0.c +++ /dev/null | |||
@@ -1,2803 +0,0 @@ | |||
1 | /* | ||
2 | * sh73a0 processor support - PFC hardware block | ||
3 | * | ||
4 | * Copyright (C) 2010 Renesas Solutions Corp. | ||
5 | * Copyright (C) 2010 NISHIMOTO Hiroki | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License as | ||
9 | * published by the Free Software Foundation; version 2 of the | ||
10 | * License. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
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 | ||
20 | */ | ||
21 | #include <linux/init.h> | ||
22 | #include <linux/kernel.h> | ||
23 | #include <linux/sh_pfc.h> | ||
24 | #include <mach/sh73a0.h> | ||
25 | #include <mach/irqs.h> | ||
26 | |||
27 | #define CPU_ALL_PORT(fn, pfx, sfx) \ | ||
28 | PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ | ||
29 | PORT_10(fn, pfx##2, sfx), PORT_10(fn, pfx##3, sfx), \ | ||
30 | PORT_10(fn, pfx##4, sfx), PORT_10(fn, pfx##5, sfx), \ | ||
31 | PORT_10(fn, pfx##6, sfx), PORT_10(fn, pfx##7, sfx), \ | ||
32 | PORT_10(fn, pfx##8, sfx), PORT_10(fn, pfx##9, sfx), \ | ||
33 | PORT_10(fn, pfx##10, sfx), \ | ||
34 | PORT_1(fn, pfx##110, sfx), PORT_1(fn, pfx##111, sfx), \ | ||
35 | PORT_1(fn, pfx##112, sfx), PORT_1(fn, pfx##113, sfx), \ | ||
36 | PORT_1(fn, pfx##114, sfx), PORT_1(fn, pfx##115, sfx), \ | ||
37 | PORT_1(fn, pfx##116, sfx), PORT_1(fn, pfx##117, sfx), \ | ||
38 | PORT_1(fn, pfx##118, sfx), \ | ||
39 | PORT_1(fn, pfx##128, sfx), PORT_1(fn, pfx##129, sfx), \ | ||
40 | PORT_10(fn, pfx##13, sfx), PORT_10(fn, pfx##14, sfx), \ | ||
41 | PORT_10(fn, pfx##15, sfx), \ | ||
42 | PORT_1(fn, pfx##160, sfx), PORT_1(fn, pfx##161, sfx), \ | ||
43 | PORT_1(fn, pfx##162, sfx), PORT_1(fn, pfx##163, sfx), \ | ||
44 | PORT_1(fn, pfx##164, sfx), \ | ||
45 | PORT_1(fn, pfx##192, sfx), PORT_1(fn, pfx##193, sfx), \ | ||
46 | PORT_1(fn, pfx##194, sfx), PORT_1(fn, pfx##195, sfx), \ | ||
47 | PORT_1(fn, pfx##196, sfx), PORT_1(fn, pfx##197, sfx), \ | ||
48 | PORT_1(fn, pfx##198, sfx), PORT_1(fn, pfx##199, sfx), \ | ||
49 | PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \ | ||
50 | PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \ | ||
51 | PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \ | ||
52 | PORT_10(fn, pfx##26, sfx), PORT_10(fn, pfx##27, sfx), \ | ||
53 | PORT_1(fn, pfx##280, sfx), PORT_1(fn, pfx##281, sfx), \ | ||
54 | PORT_1(fn, pfx##282, sfx), \ | ||
55 | PORT_1(fn, pfx##288, sfx), PORT_1(fn, pfx##289, sfx), \ | ||
56 | PORT_10(fn, pfx##29, sfx), PORT_10(fn, pfx##30, sfx) | ||
57 | |||
58 | enum { | ||
59 | PINMUX_RESERVED = 0, | ||
60 | |||
61 | PINMUX_DATA_BEGIN, | ||
62 | PORT_ALL(DATA), /* PORT0_DATA -> PORT309_DATA */ | ||
63 | PINMUX_DATA_END, | ||
64 | |||
65 | PINMUX_INPUT_BEGIN, | ||
66 | PORT_ALL(IN), /* PORT0_IN -> PORT309_IN */ | ||
67 | PINMUX_INPUT_END, | ||
68 | |||
69 | PINMUX_INPUT_PULLUP_BEGIN, | ||
70 | PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT309_IN_PU */ | ||
71 | PINMUX_INPUT_PULLUP_END, | ||
72 | |||
73 | PINMUX_INPUT_PULLDOWN_BEGIN, | ||
74 | PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT309_IN_PD */ | ||
75 | PINMUX_INPUT_PULLDOWN_END, | ||
76 | |||
77 | PINMUX_OUTPUT_BEGIN, | ||
78 | PORT_ALL(OUT), /* PORT0_OUT -> PORT309_OUT */ | ||
79 | PINMUX_OUTPUT_END, | ||
80 | |||
81 | PINMUX_FUNCTION_BEGIN, | ||
82 | PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT309_FN_IN */ | ||
83 | PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT309_FN_OUT */ | ||
84 | PORT_ALL(FN0), /* PORT0_FN0 -> PORT309_FN0 */ | ||
85 | PORT_ALL(FN1), /* PORT0_FN1 -> PORT309_FN1 */ | ||
86 | PORT_ALL(FN2), /* PORT0_FN2 -> PORT309_FN2 */ | ||
87 | PORT_ALL(FN3), /* PORT0_FN3 -> PORT309_FN3 */ | ||
88 | PORT_ALL(FN4), /* PORT0_FN4 -> PORT309_FN4 */ | ||
89 | PORT_ALL(FN5), /* PORT0_FN5 -> PORT309_FN5 */ | ||
90 | PORT_ALL(FN6), /* PORT0_FN6 -> PORT309_FN6 */ | ||
91 | PORT_ALL(FN7), /* PORT0_FN7 -> PORT309_FN7 */ | ||
92 | |||
93 | MSEL2CR_MSEL19_0, MSEL2CR_MSEL19_1, | ||
94 | MSEL2CR_MSEL18_0, MSEL2CR_MSEL18_1, | ||
95 | MSEL2CR_MSEL17_0, MSEL2CR_MSEL17_1, | ||
96 | MSEL2CR_MSEL16_0, MSEL2CR_MSEL16_1, | ||
97 | MSEL2CR_MSEL14_0, MSEL2CR_MSEL14_1, | ||
98 | MSEL2CR_MSEL13_0, MSEL2CR_MSEL13_1, | ||
99 | MSEL2CR_MSEL12_0, MSEL2CR_MSEL12_1, | ||
100 | MSEL2CR_MSEL11_0, MSEL2CR_MSEL11_1, | ||
101 | MSEL2CR_MSEL10_0, MSEL2CR_MSEL10_1, | ||
102 | MSEL2CR_MSEL9_0, MSEL2CR_MSEL9_1, | ||
103 | MSEL2CR_MSEL8_0, MSEL2CR_MSEL8_1, | ||
104 | MSEL2CR_MSEL7_0, MSEL2CR_MSEL7_1, | ||
105 | MSEL2CR_MSEL6_0, MSEL2CR_MSEL6_1, | ||
106 | MSEL2CR_MSEL4_0, MSEL2CR_MSEL4_1, | ||
107 | MSEL2CR_MSEL5_0, MSEL2CR_MSEL5_1, | ||
108 | MSEL2CR_MSEL3_0, MSEL2CR_MSEL3_1, | ||
109 | MSEL2CR_MSEL2_0, MSEL2CR_MSEL2_1, | ||
110 | MSEL2CR_MSEL1_0, MSEL2CR_MSEL1_1, | ||
111 | MSEL2CR_MSEL0_0, MSEL2CR_MSEL0_1, | ||
112 | MSEL3CR_MSEL28_0, MSEL3CR_MSEL28_1, | ||
113 | MSEL3CR_MSEL15_0, MSEL3CR_MSEL15_1, | ||
114 | MSEL3CR_MSEL11_0, MSEL3CR_MSEL11_1, | ||
115 | MSEL3CR_MSEL9_0, MSEL3CR_MSEL9_1, | ||
116 | MSEL3CR_MSEL6_0, MSEL3CR_MSEL6_1, | ||
117 | MSEL3CR_MSEL2_0, MSEL3CR_MSEL2_1, | ||
118 | MSEL4CR_MSEL29_0, MSEL4CR_MSEL29_1, | ||
119 | MSEL4CR_MSEL27_0, MSEL4CR_MSEL27_1, | ||
120 | MSEL4CR_MSEL26_0, MSEL4CR_MSEL26_1, | ||
121 | MSEL4CR_MSEL22_0, MSEL4CR_MSEL22_1, | ||
122 | MSEL4CR_MSEL21_0, MSEL4CR_MSEL21_1, | ||
123 | MSEL4CR_MSEL20_0, MSEL4CR_MSEL20_1, | ||
124 | MSEL4CR_MSEL19_0, MSEL4CR_MSEL19_1, | ||
125 | MSEL4CR_MSEL15_0, MSEL4CR_MSEL15_1, | ||
126 | MSEL4CR_MSEL13_0, MSEL4CR_MSEL13_1, | ||
127 | MSEL4CR_MSEL12_0, MSEL4CR_MSEL12_1, | ||
128 | MSEL4CR_MSEL11_0, MSEL4CR_MSEL11_1, | ||
129 | MSEL4CR_MSEL10_0, MSEL4CR_MSEL10_1, | ||
130 | MSEL4CR_MSEL9_0, MSEL4CR_MSEL9_1, | ||
131 | MSEL4CR_MSEL8_0, MSEL4CR_MSEL8_1, | ||
132 | MSEL4CR_MSEL7_0, MSEL4CR_MSEL7_1, | ||
133 | MSEL4CR_MSEL4_0, MSEL4CR_MSEL4_1, | ||
134 | MSEL4CR_MSEL1_0, MSEL4CR_MSEL1_1, | ||
135 | PINMUX_FUNCTION_END, | ||
136 | |||
137 | PINMUX_MARK_BEGIN, | ||
138 | /* Hardware manual Table 25-1 (Function 0-7) */ | ||
139 | VBUS_0_MARK, | ||
140 | GPI0_MARK, | ||
141 | GPI1_MARK, | ||
142 | GPI2_MARK, | ||
143 | GPI3_MARK, | ||
144 | GPI4_MARK, | ||
145 | GPI5_MARK, | ||
146 | GPI6_MARK, | ||
147 | GPI7_MARK, | ||
148 | SCIFA7_RXD_MARK, | ||
149 | SCIFA7_CTS__MARK, | ||
150 | GPO7_MARK, MFG0_OUT2_MARK, | ||
151 | GPO6_MARK, MFG1_OUT2_MARK, | ||
152 | GPO5_MARK, SCIFA0_SCK_MARK, FSICOSLDT3_MARK, PORT16_VIO_CKOR_MARK, | ||
153 | SCIFA0_TXD_MARK, | ||
154 | SCIFA7_TXD_MARK, | ||
155 | SCIFA7_RTS__MARK, PORT19_VIO_CKO2_MARK, | ||
156 | GPO0_MARK, | ||
157 | GPO1_MARK, | ||
158 | GPO2_MARK, STATUS0_MARK, | ||
159 | GPO3_MARK, STATUS1_MARK, | ||
160 | GPO4_MARK, STATUS2_MARK, | ||
161 | VINT_MARK, | ||
162 | TCKON_MARK, | ||
163 | XDVFS1_MARK, PORT27_I2C_SCL2_MARK, PORT27_I2C_SCL3_MARK, \ | ||
164 | MFG0_OUT1_MARK, PORT27_IROUT_MARK, | ||
165 | XDVFS2_MARK, PORT28_I2C_SDA2_MARK, PORT28_I2C_SDA3_MARK, \ | ||
166 | PORT28_TPU1TO1_MARK, | ||
167 | SIM_RST_MARK, PORT29_TPU1TO1_MARK, | ||
168 | SIM_CLK_MARK, PORT30_VIO_CKOR_MARK, | ||
169 | SIM_D_MARK, PORT31_IROUT_MARK, | ||
170 | SCIFA4_TXD_MARK, | ||
171 | SCIFA4_RXD_MARK, XWUP_MARK, | ||
172 | SCIFA4_RTS__MARK, | ||
173 | SCIFA4_CTS__MARK, | ||
174 | FSIBOBT_MARK, FSIBIBT_MARK, | ||
175 | FSIBOLR_MARK, FSIBILR_MARK, | ||
176 | FSIBOSLD_MARK, | ||
177 | FSIBISLD_MARK, | ||
178 | VACK_MARK, | ||
179 | XTAL1L_MARK, | ||
180 | SCIFA0_RTS__MARK, FSICOSLDT2_MARK, | ||
181 | SCIFA0_RXD_MARK, | ||
182 | SCIFA0_CTS__MARK, FSICOSLDT1_MARK, | ||
183 | FSICOBT_MARK, FSICIBT_MARK, FSIDOBT_MARK, FSIDIBT_MARK, | ||
184 | FSICOLR_MARK, FSICILR_MARK, FSIDOLR_MARK, FSIDILR_MARK, | ||
185 | FSICOSLD_MARK, PORT47_FSICSPDIF_MARK, | ||
186 | FSICISLD_MARK, FSIDISLD_MARK, | ||
187 | FSIACK_MARK, PORT49_IRDA_OUT_MARK, PORT49_IROUT_MARK, FSIAOMC_MARK, | ||
188 | FSIAOLR_MARK, BBIF2_TSYNC2_MARK, TPU2TO2_MARK, FSIAILR_MARK, | ||
189 | |||
190 | FSIAOBT_MARK, BBIF2_TSCK2_MARK, TPU2TO3_MARK, FSIAIBT_MARK, | ||
191 | FSIAOSLD_MARK, BBIF2_TXD2_MARK, | ||
192 | FSIASPDIF_MARK, PORT53_IRDA_IN_MARK, TPU3TO3_MARK, FSIBSPDIF_MARK, \ | ||
193 | PORT53_FSICSPDIF_MARK, | ||
194 | FSIBCK_MARK, PORT54_IRDA_FIRSEL_MARK, TPU3TO2_MARK, FSIBOMC_MARK, \ | ||
195 | FSICCK_MARK, FSICOMC_MARK, | ||
196 | FSIAISLD_MARK, TPU0TO0_MARK, | ||
197 | A0_MARK, BS__MARK, | ||
198 | A12_MARK, PORT58_KEYOUT7_MARK, TPU4TO2_MARK, | ||
199 | A13_MARK, PORT59_KEYOUT6_MARK, TPU0TO1_MARK, | ||
200 | A14_MARK, KEYOUT5_MARK, | ||
201 | A15_MARK, KEYOUT4_MARK, | ||
202 | A16_MARK, KEYOUT3_MARK, MSIOF0_SS1_MARK, | ||
203 | A17_MARK, KEYOUT2_MARK, MSIOF0_TSYNC_MARK, | ||
204 | A18_MARK, KEYOUT1_MARK, MSIOF0_TSCK_MARK, | ||
205 | A19_MARK, KEYOUT0_MARK, MSIOF0_TXD_MARK, | ||
206 | A20_MARK, KEYIN0_MARK, MSIOF0_RSCK_MARK, | ||
207 | A21_MARK, KEYIN1_MARK, MSIOF0_RSYNC_MARK, | ||
208 | A22_MARK, KEYIN2_MARK, MSIOF0_MCK0_MARK, | ||
209 | A23_MARK, KEYIN3_MARK, MSIOF0_MCK1_MARK, | ||
210 | A24_MARK, KEYIN4_MARK, MSIOF0_RXD_MARK, | ||
211 | A25_MARK, KEYIN5_MARK, MSIOF0_SS2_MARK, | ||
212 | A26_MARK, KEYIN6_MARK, | ||
213 | KEYIN7_MARK, | ||
214 | D0_NAF0_MARK, | ||
215 | D1_NAF1_MARK, | ||
216 | D2_NAF2_MARK, | ||
217 | D3_NAF3_MARK, | ||
218 | D4_NAF4_MARK, | ||
219 | D5_NAF5_MARK, | ||
220 | D6_NAF6_MARK, | ||
221 | D7_NAF7_MARK, | ||
222 | D8_NAF8_MARK, | ||
223 | D9_NAF9_MARK, | ||
224 | D10_NAF10_MARK, | ||
225 | D11_NAF11_MARK, | ||
226 | D12_NAF12_MARK, | ||
227 | D13_NAF13_MARK, | ||
228 | D14_NAF14_MARK, | ||
229 | D15_NAF15_MARK, | ||
230 | CS4__MARK, | ||
231 | CS5A__MARK, PORT91_RDWR_MARK, | ||
232 | CS5B__MARK, FCE1__MARK, | ||
233 | CS6B__MARK, DACK0_MARK, | ||
234 | FCE0__MARK, CS6A__MARK, | ||
235 | WAIT__MARK, DREQ0_MARK, | ||
236 | RD__FSC_MARK, | ||
237 | WE0__FWE_MARK, RDWR_FWE_MARK, | ||
238 | WE1__MARK, | ||
239 | FRB_MARK, | ||
240 | CKO_MARK, | ||
241 | NBRSTOUT__MARK, | ||
242 | NBRST__MARK, | ||
243 | BBIF2_TXD_MARK, | ||
244 | BBIF2_RXD_MARK, | ||
245 | BBIF2_SYNC_MARK, | ||
246 | BBIF2_SCK_MARK, | ||
247 | SCIFA3_CTS__MARK, MFG3_IN2_MARK, | ||
248 | SCIFA3_RXD_MARK, MFG3_IN1_MARK, | ||
249 | BBIF1_SS2_MARK, SCIFA3_RTS__MARK, MFG3_OUT1_MARK, | ||
250 | SCIFA3_TXD_MARK, | ||
251 | HSI_RX_DATA_MARK, BBIF1_RXD_MARK, | ||
252 | HSI_TX_WAKE_MARK, BBIF1_TSCK_MARK, | ||
253 | HSI_TX_DATA_MARK, BBIF1_TSYNC_MARK, | ||
254 | HSI_TX_READY_MARK, BBIF1_TXD_MARK, | ||
255 | HSI_RX_READY_MARK, BBIF1_RSCK_MARK, PORT115_I2C_SCL2_MARK, \ | ||
256 | PORT115_I2C_SCL3_MARK, | ||
257 | HSI_RX_WAKE_MARK, BBIF1_RSYNC_MARK, PORT116_I2C_SDA2_MARK, \ | ||
258 | PORT116_I2C_SDA3_MARK, | ||
259 | HSI_RX_FLAG_MARK, BBIF1_SS1_MARK, BBIF1_FLOW_MARK, | ||
260 | HSI_TX_FLAG_MARK, | ||
261 | VIO_VD_MARK, PORT128_LCD2VSYN_MARK, VIO2_VD_MARK, LCD2D0_MARK, | ||
262 | |||
263 | VIO_HD_MARK, PORT129_LCD2HSYN_MARK, PORT129_LCD2CS__MARK, \ | ||
264 | VIO2_HD_MARK, LCD2D1_MARK, | ||
265 | VIO_D0_MARK, PORT130_MSIOF2_RXD_MARK, LCD2D10_MARK, | ||
266 | VIO_D1_MARK, PORT131_KEYOUT6_MARK, PORT131_MSIOF2_SS1_MARK, \ | ||
267 | PORT131_KEYOUT11_MARK, LCD2D11_MARK, | ||
268 | VIO_D2_MARK, PORT132_KEYOUT7_MARK, PORT132_MSIOF2_SS2_MARK, \ | ||
269 | PORT132_KEYOUT10_MARK, LCD2D12_MARK, | ||
270 | VIO_D3_MARK, MSIOF2_TSYNC_MARK, LCD2D13_MARK, | ||
271 | VIO_D4_MARK, MSIOF2_TXD_MARK, LCD2D14_MARK, | ||
272 | VIO_D5_MARK, MSIOF2_TSCK_MARK, LCD2D15_MARK, | ||
273 | VIO_D6_MARK, PORT136_KEYOUT8_MARK, LCD2D16_MARK, | ||
274 | VIO_D7_MARK, PORT137_KEYOUT9_MARK, LCD2D17_MARK, | ||
275 | VIO_D8_MARK, PORT138_KEYOUT8_MARK, VIO2_D0_MARK, LCD2D6_MARK, | ||
276 | VIO_D9_MARK, PORT139_KEYOUT9_MARK, VIO2_D1_MARK, LCD2D7_MARK, | ||
277 | VIO_D10_MARK, TPU0TO2_MARK, VIO2_D2_MARK, LCD2D8_MARK, | ||
278 | VIO_D11_MARK, TPU0TO3_MARK, VIO2_D3_MARK, LCD2D9_MARK, | ||
279 | VIO_D12_MARK, PORT142_KEYOUT10_MARK, VIO2_D4_MARK, LCD2D2_MARK, | ||
280 | VIO_D13_MARK, PORT143_KEYOUT11_MARK, PORT143_KEYOUT6_MARK, \ | ||
281 | VIO2_D5_MARK, LCD2D3_MARK, | ||
282 | VIO_D14_MARK, PORT144_KEYOUT7_MARK, VIO2_D6_MARK, LCD2D4_MARK, | ||
283 | VIO_D15_MARK, TPU1TO3_MARK, PORT145_LCD2DISP_MARK, \ | ||
284 | PORT145_LCD2RS_MARK, VIO2_D7_MARK, LCD2D5_MARK, | ||
285 | VIO_CLK_MARK, LCD2DCK_MARK, PORT146_LCD2WR__MARK, VIO2_CLK_MARK, \ | ||
286 | LCD2D18_MARK, | ||
287 | VIO_FIELD_MARK, LCD2RD__MARK, VIO2_FIELD_MARK, LCD2D19_MARK, | ||
288 | VIO_CKO_MARK, | ||
289 | A27_MARK, PORT149_RDWR_MARK, MFG0_IN1_MARK, PORT149_KEYOUT9_MARK, | ||
290 | MFG0_IN2_MARK, | ||
291 | TS_SPSYNC3_MARK, MSIOF2_RSCK_MARK, | ||
292 | TS_SDAT3_MARK, MSIOF2_RSYNC_MARK, | ||
293 | TPU1TO2_MARK, TS_SDEN3_MARK, PORT153_MSIOF2_SS1_MARK, | ||
294 | SCIFA2_TXD1_MARK, MSIOF2_MCK0_MARK, | ||
295 | SCIFA2_RXD1_MARK, MSIOF2_MCK1_MARK, | ||
296 | SCIFA2_RTS1__MARK, PORT156_MSIOF2_SS2_MARK, | ||
297 | SCIFA2_CTS1__MARK, PORT157_MSIOF2_RXD_MARK, | ||
298 | DINT__MARK, SCIFA2_SCK1_MARK, TS_SCK3_MARK, | ||
299 | PORT159_SCIFB_SCK_MARK, PORT159_SCIFA5_SCK_MARK, NMI_MARK, | ||
300 | PORT160_SCIFB_TXD_MARK, PORT160_SCIFA5_TXD_MARK, | ||
301 | PORT161_SCIFB_CTS__MARK, PORT161_SCIFA5_CTS__MARK, | ||
302 | PORT162_SCIFB_RXD_MARK, PORT162_SCIFA5_RXD_MARK, | ||
303 | PORT163_SCIFB_RTS__MARK, PORT163_SCIFA5_RTS__MARK, TPU3TO0_MARK, | ||
304 | LCDD0_MARK, | ||
305 | LCDD1_MARK, PORT193_SCIFA5_CTS__MARK, BBIF2_TSYNC1_MARK, | ||
306 | LCDD2_MARK, PORT194_SCIFA5_RTS__MARK, BBIF2_TSCK1_MARK, | ||
307 | LCDD3_MARK, PORT195_SCIFA5_RXD_MARK, BBIF2_TXD1_MARK, | ||
308 | LCDD4_MARK, PORT196_SCIFA5_TXD_MARK, | ||
309 | LCDD5_MARK, PORT197_SCIFA5_SCK_MARK, MFG2_OUT2_MARK, TPU2TO1_MARK, | ||
310 | LCDD6_MARK, | ||
311 | LCDD7_MARK, TPU4TO1_MARK, MFG4_OUT2_MARK, | ||
312 | LCDD8_MARK, D16_MARK, | ||
313 | LCDD9_MARK, D17_MARK, | ||
314 | LCDD10_MARK, D18_MARK, | ||
315 | LCDD11_MARK, D19_MARK, | ||
316 | LCDD12_MARK, D20_MARK, | ||
317 | LCDD13_MARK, D21_MARK, | ||
318 | LCDD14_MARK, D22_MARK, | ||
319 | LCDD15_MARK, PORT207_MSIOF0L_SS1_MARK, D23_MARK, | ||
320 | LCDD16_MARK, PORT208_MSIOF0L_SS2_MARK, D24_MARK, | ||
321 | LCDD17_MARK, D25_MARK, | ||
322 | LCDD18_MARK, DREQ2_MARK, PORT210_MSIOF0L_SS1_MARK, D26_MARK, | ||
323 | LCDD19_MARK, PORT211_MSIOF0L_SS2_MARK, D27_MARK, | ||
324 | LCDD20_MARK, TS_SPSYNC1_MARK, MSIOF0L_MCK0_MARK, D28_MARK, | ||
325 | LCDD21_MARK, TS_SDAT1_MARK, MSIOF0L_MCK1_MARK, D29_MARK, | ||
326 | LCDD22_MARK, TS_SDEN1_MARK, MSIOF0L_RSCK_MARK, D30_MARK, | ||
327 | LCDD23_MARK, TS_SCK1_MARK, MSIOF0L_RSYNC_MARK, D31_MARK, | ||
328 | LCDDCK_MARK, LCDWR__MARK, | ||
329 | LCDRD__MARK, DACK2_MARK, PORT217_LCD2RS_MARK, MSIOF0L_TSYNC_MARK, \ | ||
330 | VIO2_FIELD3_MARK, PORT217_LCD2DISP_MARK, | ||
331 | LCDHSYN_MARK, LCDCS__MARK, LCDCS2__MARK, DACK3_MARK, \ | ||
332 | PORT218_VIO_CKOR_MARK, | ||
333 | LCDDISP_MARK, LCDRS_MARK, PORT219_LCD2WR__MARK, DREQ3_MARK, \ | ||
334 | MSIOF0L_TSCK_MARK, VIO2_CLK3_MARK, LCD2DCK_2_MARK, | ||
335 | LCDVSYN_MARK, LCDVSYN2_MARK, | ||
336 | LCDLCLK_MARK, DREQ1_MARK, PORT221_LCD2CS__MARK, PWEN_MARK, \ | ||
337 | MSIOF0L_RXD_MARK, VIO2_HD3_MARK, PORT221_LCD2HSYN_MARK, | ||
338 | LCDDON_MARK, LCDDON2_MARK, DACK1_MARK, OVCN_MARK, MSIOF0L_TXD_MARK, \ | ||
339 | VIO2_VD3_MARK, PORT222_LCD2VSYN_MARK, | ||
340 | |||
341 | SCIFA1_TXD_MARK, OVCN2_MARK, | ||
342 | EXTLP_MARK, SCIFA1_SCK_MARK, PORT226_VIO_CKO2_MARK, | ||
343 | SCIFA1_RTS__MARK, IDIN_MARK, | ||
344 | SCIFA1_RXD_MARK, | ||
345 | SCIFA1_CTS__MARK, MFG1_IN1_MARK, | ||
346 | MSIOF1_TXD_MARK, SCIFA2_TXD2_MARK, | ||
347 | MSIOF1_TSYNC_MARK, SCIFA2_CTS2__MARK, | ||
348 | MSIOF1_TSCK_MARK, SCIFA2_SCK2_MARK, | ||
349 | MSIOF1_RXD_MARK, SCIFA2_RXD2_MARK, | ||
350 | MSIOF1_RSCK_MARK, SCIFA2_RTS2__MARK, VIO2_CLK2_MARK, LCD2D20_MARK, | ||
351 | MSIOF1_RSYNC_MARK, MFG1_IN2_MARK, VIO2_VD2_MARK, LCD2D21_MARK, | ||
352 | MSIOF1_MCK0_MARK, PORT236_I2C_SDA2_MARK, | ||
353 | MSIOF1_MCK1_MARK, PORT237_I2C_SCL2_MARK, | ||
354 | MSIOF1_SS1_MARK, VIO2_FIELD2_MARK, LCD2D22_MARK, | ||
355 | MSIOF1_SS2_MARK, VIO2_HD2_MARK, LCD2D23_MARK, | ||
356 | SCIFA6_TXD_MARK, | ||
357 | PORT241_IRDA_OUT_MARK, PORT241_IROUT_MARK, MFG4_OUT1_MARK, TPU4TO0_MARK, | ||
358 | PORT242_IRDA_IN_MARK, MFG4_IN2_MARK, | ||
359 | PORT243_IRDA_FIRSEL_MARK, PORT243_VIO_CKO2_MARK, | ||
360 | PORT244_SCIFA5_CTS__MARK, MFG2_IN1_MARK, PORT244_SCIFB_CTS__MARK, \ | ||
361 | MSIOF2R_RXD_MARK, | ||
362 | PORT245_SCIFA5_RTS__MARK, MFG2_IN2_MARK, PORT245_SCIFB_RTS__MARK, \ | ||
363 | MSIOF2R_TXD_MARK, | ||
364 | PORT246_SCIFA5_RXD_MARK, MFG1_OUT1_MARK, PORT246_SCIFB_RXD_MARK, \ | ||
365 | TPU1TO0_MARK, | ||
366 | PORT247_SCIFA5_TXD_MARK, MFG3_OUT2_MARK, PORT247_SCIFB_TXD_MARK, \ | ||
367 | TPU3TO1_MARK, | ||
368 | PORT248_SCIFA5_SCK_MARK, MFG2_OUT1_MARK, PORT248_SCIFB_SCK_MARK, \ | ||
369 | TPU2TO0_MARK, PORT248_I2C_SCL3_MARK, MSIOF2R_TSCK_MARK, | ||
370 | PORT249_IROUT_MARK, MFG4_IN1_MARK, PORT249_I2C_SDA3_MARK, \ | ||
371 | MSIOF2R_TSYNC_MARK, | ||
372 | SDHICLK0_MARK, | ||
373 | SDHICD0_MARK, | ||
374 | SDHID0_0_MARK, | ||
375 | SDHID0_1_MARK, | ||
376 | SDHID0_2_MARK, | ||
377 | SDHID0_3_MARK, | ||
378 | SDHICMD0_MARK, | ||
379 | SDHIWP0_MARK, | ||
380 | SDHICLK1_MARK, | ||
381 | SDHID1_0_MARK, TS_SPSYNC2_MARK, | ||
382 | SDHID1_1_MARK, TS_SDAT2_MARK, | ||
383 | SDHID1_2_MARK, TS_SDEN2_MARK, | ||
384 | SDHID1_3_MARK, TS_SCK2_MARK, | ||
385 | SDHICMD1_MARK, | ||
386 | SDHICLK2_MARK, | ||
387 | SDHID2_0_MARK, TS_SPSYNC4_MARK, | ||
388 | SDHID2_1_MARK, TS_SDAT4_MARK, | ||
389 | SDHID2_2_MARK, TS_SDEN4_MARK, | ||
390 | SDHID2_3_MARK, TS_SCK4_MARK, | ||
391 | SDHICMD2_MARK, | ||
392 | MMCCLK0_MARK, | ||
393 | MMCD0_0_MARK, | ||
394 | MMCD0_1_MARK, | ||
395 | MMCD0_2_MARK, | ||
396 | MMCD0_3_MARK, | ||
397 | MMCD0_4_MARK, TS_SPSYNC5_MARK, | ||
398 | MMCD0_5_MARK, TS_SDAT5_MARK, | ||
399 | MMCD0_6_MARK, TS_SDEN5_MARK, | ||
400 | MMCD0_7_MARK, TS_SCK5_MARK, | ||
401 | MMCCMD0_MARK, | ||
402 | RESETOUTS__MARK, EXTAL2OUT_MARK, | ||
403 | MCP_WAIT__MCP_FRB_MARK, | ||
404 | MCP_CKO_MARK, MMCCLK1_MARK, | ||
405 | MCP_D15_MCP_NAF15_MARK, | ||
406 | MCP_D14_MCP_NAF14_MARK, | ||
407 | MCP_D13_MCP_NAF13_MARK, | ||
408 | MCP_D12_MCP_NAF12_MARK, | ||
409 | MCP_D11_MCP_NAF11_MARK, | ||
410 | MCP_D10_MCP_NAF10_MARK, | ||
411 | MCP_D9_MCP_NAF9_MARK, | ||
412 | MCP_D8_MCP_NAF8_MARK, MMCCMD1_MARK, | ||
413 | MCP_D7_MCP_NAF7_MARK, MMCD1_7_MARK, | ||
414 | |||
415 | MCP_D6_MCP_NAF6_MARK, MMCD1_6_MARK, | ||
416 | MCP_D5_MCP_NAF5_MARK, MMCD1_5_MARK, | ||
417 | MCP_D4_MCP_NAF4_MARK, MMCD1_4_MARK, | ||
418 | MCP_D3_MCP_NAF3_MARK, MMCD1_3_MARK, | ||
419 | MCP_D2_MCP_NAF2_MARK, MMCD1_2_MARK, | ||
420 | MCP_D1_MCP_NAF1_MARK, MMCD1_1_MARK, | ||
421 | MCP_D0_MCP_NAF0_MARK, MMCD1_0_MARK, | ||
422 | MCP_NBRSTOUT__MARK, | ||
423 | MCP_WE0__MCP_FWE_MARK, MCP_RDWR_MCP_FWE_MARK, | ||
424 | |||
425 | /* MSEL2 special cases */ | ||
426 | TSIF2_TS_XX1_MARK, | ||
427 | TSIF2_TS_XX2_MARK, | ||
428 | TSIF2_TS_XX3_MARK, | ||
429 | TSIF2_TS_XX4_MARK, | ||
430 | TSIF2_TS_XX5_MARK, | ||
431 | TSIF1_TS_XX1_MARK, | ||
432 | TSIF1_TS_XX2_MARK, | ||
433 | TSIF1_TS_XX3_MARK, | ||
434 | TSIF1_TS_XX4_MARK, | ||
435 | TSIF1_TS_XX5_MARK, | ||
436 | TSIF0_TS_XX1_MARK, | ||
437 | TSIF0_TS_XX2_MARK, | ||
438 | TSIF0_TS_XX3_MARK, | ||
439 | TSIF0_TS_XX4_MARK, | ||
440 | TSIF0_TS_XX5_MARK, | ||
441 | MST1_TS_XX1_MARK, | ||
442 | MST1_TS_XX2_MARK, | ||
443 | MST1_TS_XX3_MARK, | ||
444 | MST1_TS_XX4_MARK, | ||
445 | MST1_TS_XX5_MARK, | ||
446 | MST0_TS_XX1_MARK, | ||
447 | MST0_TS_XX2_MARK, | ||
448 | MST0_TS_XX3_MARK, | ||
449 | MST0_TS_XX4_MARK, | ||
450 | MST0_TS_XX5_MARK, | ||
451 | |||
452 | /* MSEL3 special cases */ | ||
453 | SDHI0_VCCQ_MC0_ON_MARK, | ||
454 | SDHI0_VCCQ_MC0_OFF_MARK, | ||
455 | DEBUG_MON_VIO_MARK, | ||
456 | DEBUG_MON_LCDD_MARK, | ||
457 | LCDC_LCDC0_MARK, | ||
458 | LCDC_LCDC1_MARK, | ||
459 | |||
460 | /* MSEL4 special cases */ | ||
461 | IRQ9_MEM_INT_MARK, | ||
462 | IRQ9_MCP_INT_MARK, | ||
463 | A11_MARK, | ||
464 | KEYOUT8_MARK, | ||
465 | TPU4TO3_MARK, | ||
466 | RESETA_N_PU_ON_MARK, | ||
467 | RESETA_N_PU_OFF_MARK, | ||
468 | EDBGREQ_PD_MARK, | ||
469 | EDBGREQ_PU_MARK, | ||
470 | |||
471 | /* Functions with pull-ups */ | ||
472 | KEYIN0_PU_MARK, | ||
473 | KEYIN1_PU_MARK, | ||
474 | KEYIN2_PU_MARK, | ||
475 | KEYIN3_PU_MARK, | ||
476 | KEYIN4_PU_MARK, | ||
477 | KEYIN5_PU_MARK, | ||
478 | KEYIN6_PU_MARK, | ||
479 | KEYIN7_PU_MARK, | ||
480 | SDHICD0_PU_MARK, | ||
481 | SDHID0_0_PU_MARK, | ||
482 | SDHID0_1_PU_MARK, | ||
483 | SDHID0_2_PU_MARK, | ||
484 | SDHID0_3_PU_MARK, | ||
485 | SDHICMD0_PU_MARK, | ||
486 | SDHIWP0_PU_MARK, | ||
487 | SDHID1_0_PU_MARK, | ||
488 | SDHID1_1_PU_MARK, | ||
489 | SDHID1_2_PU_MARK, | ||
490 | SDHID1_3_PU_MARK, | ||
491 | SDHICMD1_PU_MARK, | ||
492 | SDHID2_0_PU_MARK, | ||
493 | SDHID2_1_PU_MARK, | ||
494 | SDHID2_2_PU_MARK, | ||
495 | SDHID2_3_PU_MARK, | ||
496 | SDHICMD2_PU_MARK, | ||
497 | MMCCMD0_PU_MARK, | ||
498 | MMCCMD1_PU_MARK, | ||
499 | MMCD0_0_PU_MARK, | ||
500 | MMCD0_1_PU_MARK, | ||
501 | MMCD0_2_PU_MARK, | ||
502 | MMCD0_3_PU_MARK, | ||
503 | MMCD0_4_PU_MARK, | ||
504 | MMCD0_5_PU_MARK, | ||
505 | MMCD0_6_PU_MARK, | ||
506 | MMCD0_7_PU_MARK, | ||
507 | FSIBISLD_PU_MARK, | ||
508 | FSIACK_PU_MARK, | ||
509 | FSIAILR_PU_MARK, | ||
510 | FSIAIBT_PU_MARK, | ||
511 | FSIAISLD_PU_MARK, | ||
512 | |||
513 | PINMUX_MARK_END, | ||
514 | }; | ||
515 | |||
516 | static pinmux_enum_t pinmux_data[] = { | ||
517 | /* specify valid pin states for each pin in GPIO mode */ | ||
518 | |||
519 | /* Table 25-1 (I/O and Pull U/D) */ | ||
520 | PORT_DATA_I_PD(0), | ||
521 | PORT_DATA_I_PU(1), | ||
522 | PORT_DATA_I_PU(2), | ||
523 | PORT_DATA_I_PU(3), | ||
524 | PORT_DATA_I_PU(4), | ||
525 | PORT_DATA_I_PU(5), | ||
526 | PORT_DATA_I_PU(6), | ||
527 | PORT_DATA_I_PU(7), | ||
528 | PORT_DATA_I_PU(8), | ||
529 | PORT_DATA_I_PD(9), | ||
530 | PORT_DATA_I_PD(10), | ||
531 | PORT_DATA_I_PU_PD(11), | ||
532 | PORT_DATA_IO_PU_PD(12), | ||
533 | PORT_DATA_IO_PU_PD(13), | ||
534 | PORT_DATA_IO_PU_PD(14), | ||
535 | PORT_DATA_IO_PU_PD(15), | ||
536 | PORT_DATA_IO_PD(16), | ||
537 | PORT_DATA_IO_PD(17), | ||
538 | PORT_DATA_IO_PU(18), | ||
539 | PORT_DATA_IO_PU(19), | ||
540 | PORT_DATA_O(20), | ||
541 | PORT_DATA_O(21), | ||
542 | PORT_DATA_O(22), | ||
543 | PORT_DATA_O(23), | ||
544 | PORT_DATA_O(24), | ||
545 | PORT_DATA_I_PD(25), | ||
546 | PORT_DATA_I_PD(26), | ||
547 | PORT_DATA_IO_PU(27), | ||
548 | PORT_DATA_IO_PU(28), | ||
549 | PORT_DATA_IO_PD(29), | ||
550 | PORT_DATA_IO_PD(30), | ||
551 | PORT_DATA_IO_PU(31), | ||
552 | PORT_DATA_IO_PD(32), | ||
553 | PORT_DATA_I_PU_PD(33), | ||
554 | PORT_DATA_IO_PD(34), | ||
555 | PORT_DATA_I_PU_PD(35), | ||
556 | PORT_DATA_IO_PD(36), | ||
557 | PORT_DATA_IO(37), | ||
558 | PORT_DATA_O(38), | ||
559 | PORT_DATA_I_PU(39), | ||
560 | PORT_DATA_I_PU_PD(40), | ||
561 | PORT_DATA_O(41), | ||
562 | PORT_DATA_IO_PD(42), | ||
563 | PORT_DATA_IO_PU_PD(43), | ||
564 | PORT_DATA_IO_PU_PD(44), | ||
565 | PORT_DATA_IO_PD(45), | ||
566 | PORT_DATA_IO_PD(46), | ||
567 | PORT_DATA_IO_PD(47), | ||
568 | PORT_DATA_I_PD(48), | ||
569 | PORT_DATA_IO_PU_PD(49), | ||
570 | PORT_DATA_IO_PD(50), | ||
571 | |||
572 | PORT_DATA_IO_PD(51), | ||
573 | PORT_DATA_O(52), | ||
574 | PORT_DATA_IO_PU_PD(53), | ||
575 | PORT_DATA_IO_PU_PD(54), | ||
576 | PORT_DATA_IO_PD(55), | ||
577 | PORT_DATA_I_PU_PD(56), | ||
578 | PORT_DATA_IO(57), | ||
579 | PORT_DATA_IO(58), | ||
580 | PORT_DATA_IO(59), | ||
581 | PORT_DATA_IO(60), | ||
582 | PORT_DATA_IO(61), | ||
583 | PORT_DATA_IO_PD(62), | ||
584 | PORT_DATA_IO_PD(63), | ||
585 | PORT_DATA_IO_PU_PD(64), | ||
586 | PORT_DATA_IO_PD(65), | ||
587 | PORT_DATA_IO_PU_PD(66), | ||
588 | PORT_DATA_IO_PU_PD(67), | ||
589 | PORT_DATA_IO_PU_PD(68), | ||
590 | PORT_DATA_IO_PU_PD(69), | ||
591 | PORT_DATA_IO_PU_PD(70), | ||
592 | PORT_DATA_IO_PU_PD(71), | ||
593 | PORT_DATA_IO_PU_PD(72), | ||
594 | PORT_DATA_I_PU_PD(73), | ||
595 | PORT_DATA_IO_PU(74), | ||
596 | PORT_DATA_IO_PU(75), | ||
597 | PORT_DATA_IO_PU(76), | ||
598 | PORT_DATA_IO_PU(77), | ||
599 | PORT_DATA_IO_PU(78), | ||
600 | PORT_DATA_IO_PU(79), | ||
601 | PORT_DATA_IO_PU(80), | ||
602 | PORT_DATA_IO_PU(81), | ||
603 | PORT_DATA_IO_PU(82), | ||
604 | PORT_DATA_IO_PU(83), | ||
605 | PORT_DATA_IO_PU(84), | ||
606 | PORT_DATA_IO_PU(85), | ||
607 | PORT_DATA_IO_PU(86), | ||
608 | PORT_DATA_IO_PU(87), | ||
609 | PORT_DATA_IO_PU(88), | ||
610 | PORT_DATA_IO_PU(89), | ||
611 | PORT_DATA_O(90), | ||
612 | PORT_DATA_IO_PU(91), | ||
613 | PORT_DATA_O(92), | ||
614 | PORT_DATA_IO_PU(93), | ||
615 | PORT_DATA_O(94), | ||
616 | PORT_DATA_I_PU_PD(95), | ||
617 | PORT_DATA_IO(96), | ||
618 | PORT_DATA_IO(97), | ||
619 | PORT_DATA_IO(98), | ||
620 | PORT_DATA_I_PU(99), | ||
621 | PORT_DATA_O(100), | ||
622 | PORT_DATA_O(101), | ||
623 | PORT_DATA_I_PU(102), | ||
624 | PORT_DATA_IO_PD(103), | ||
625 | PORT_DATA_I_PU_PD(104), | ||
626 | PORT_DATA_I_PD(105), | ||
627 | PORT_DATA_I_PD(106), | ||
628 | PORT_DATA_I_PU_PD(107), | ||
629 | PORT_DATA_I_PU_PD(108), | ||
630 | PORT_DATA_IO_PD(109), | ||
631 | PORT_DATA_IO_PD(110), | ||
632 | PORT_DATA_IO_PU_PD(111), | ||
633 | PORT_DATA_IO_PU_PD(112), | ||
634 | PORT_DATA_IO_PU_PD(113), | ||
635 | PORT_DATA_IO_PD(114), | ||
636 | PORT_DATA_IO_PU(115), | ||
637 | PORT_DATA_IO_PU(116), | ||
638 | PORT_DATA_IO_PU_PD(117), | ||
639 | PORT_DATA_IO_PU_PD(118), | ||
640 | PORT_DATA_IO_PD(128), | ||
641 | |||
642 | PORT_DATA_IO_PD(129), | ||
643 | PORT_DATA_IO_PU_PD(130), | ||
644 | PORT_DATA_IO_PD(131), | ||
645 | PORT_DATA_IO_PD(132), | ||
646 | PORT_DATA_IO_PD(133), | ||
647 | PORT_DATA_IO_PU_PD(134), | ||
648 | PORT_DATA_IO_PU_PD(135), | ||
649 | PORT_DATA_IO_PU_PD(136), | ||
650 | PORT_DATA_IO_PU_PD(137), | ||
651 | PORT_DATA_IO_PD(138), | ||
652 | PORT_DATA_IO_PD(139), | ||
653 | PORT_DATA_IO_PD(140), | ||
654 | PORT_DATA_IO_PD(141), | ||
655 | PORT_DATA_IO_PD(142), | ||
656 | PORT_DATA_IO_PD(143), | ||
657 | PORT_DATA_IO_PU_PD(144), | ||
658 | PORT_DATA_IO_PD(145), | ||
659 | PORT_DATA_IO_PU_PD(146), | ||
660 | PORT_DATA_IO_PU_PD(147), | ||
661 | PORT_DATA_IO_PU_PD(148), | ||
662 | PORT_DATA_IO_PU_PD(149), | ||
663 | PORT_DATA_I_PU_PD(150), | ||
664 | PORT_DATA_IO_PU_PD(151), | ||
665 | PORT_DATA_IO_PU_PD(152), | ||
666 | PORT_DATA_IO_PD(153), | ||
667 | PORT_DATA_IO_PD(154), | ||
668 | PORT_DATA_I_PU_PD(155), | ||
669 | PORT_DATA_IO_PU_PD(156), | ||
670 | PORT_DATA_I_PD(157), | ||
671 | PORT_DATA_IO_PD(158), | ||
672 | PORT_DATA_IO_PU_PD(159), | ||
673 | PORT_DATA_IO_PU_PD(160), | ||
674 | PORT_DATA_I_PU_PD(161), | ||
675 | PORT_DATA_I_PU_PD(162), | ||
676 | PORT_DATA_IO_PU_PD(163), | ||
677 | PORT_DATA_I_PU_PD(164), | ||
678 | PORT_DATA_IO_PD(192), | ||
679 | PORT_DATA_IO_PU_PD(193), | ||
680 | PORT_DATA_IO_PD(194), | ||
681 | PORT_DATA_IO_PU_PD(195), | ||
682 | PORT_DATA_IO_PD(196), | ||
683 | PORT_DATA_IO_PD(197), | ||
684 | PORT_DATA_IO_PD(198), | ||
685 | PORT_DATA_IO_PD(199), | ||
686 | PORT_DATA_IO_PU_PD(200), | ||
687 | PORT_DATA_IO_PU_PD(201), | ||
688 | PORT_DATA_IO_PU_PD(202), | ||
689 | PORT_DATA_IO_PU_PD(203), | ||
690 | PORT_DATA_IO_PU_PD(204), | ||
691 | PORT_DATA_IO_PU_PD(205), | ||
692 | PORT_DATA_IO_PU_PD(206), | ||
693 | PORT_DATA_IO_PD(207), | ||
694 | PORT_DATA_IO_PD(208), | ||
695 | PORT_DATA_IO_PD(209), | ||
696 | PORT_DATA_IO_PD(210), | ||
697 | PORT_DATA_IO_PD(211), | ||
698 | PORT_DATA_IO_PD(212), | ||
699 | PORT_DATA_IO_PD(213), | ||
700 | PORT_DATA_IO_PU_PD(214), | ||
701 | PORT_DATA_IO_PU_PD(215), | ||
702 | PORT_DATA_IO_PD(216), | ||
703 | PORT_DATA_IO_PD(217), | ||
704 | PORT_DATA_O(218), | ||
705 | PORT_DATA_IO_PD(219), | ||
706 | PORT_DATA_IO_PD(220), | ||
707 | PORT_DATA_IO_PU_PD(221), | ||
708 | PORT_DATA_IO_PU_PD(222), | ||
709 | PORT_DATA_I_PU_PD(223), | ||
710 | PORT_DATA_I_PU_PD(224), | ||
711 | |||
712 | PORT_DATA_IO_PU_PD(225), | ||
713 | PORT_DATA_O(226), | ||
714 | PORT_DATA_IO_PU_PD(227), | ||
715 | PORT_DATA_I_PU_PD(228), | ||
716 | PORT_DATA_I_PD(229), | ||
717 | PORT_DATA_IO(230), | ||
718 | PORT_DATA_IO_PU_PD(231), | ||
719 | PORT_DATA_IO_PU_PD(232), | ||
720 | PORT_DATA_I_PU_PD(233), | ||
721 | PORT_DATA_IO_PU_PD(234), | ||
722 | PORT_DATA_IO_PU_PD(235), | ||
723 | PORT_DATA_IO_PU_PD(236), | ||
724 | PORT_DATA_IO_PD(237), | ||
725 | PORT_DATA_IO_PU_PD(238), | ||
726 | PORT_DATA_IO_PU_PD(239), | ||
727 | PORT_DATA_IO_PU_PD(240), | ||
728 | PORT_DATA_O(241), | ||
729 | PORT_DATA_I_PD(242), | ||
730 | PORT_DATA_IO_PU_PD(243), | ||
731 | PORT_DATA_IO_PU_PD(244), | ||
732 | PORT_DATA_IO_PU_PD(245), | ||
733 | PORT_DATA_IO_PU_PD(246), | ||
734 | PORT_DATA_IO_PU_PD(247), | ||
735 | PORT_DATA_IO_PU_PD(248), | ||
736 | PORT_DATA_IO_PU_PD(249), | ||
737 | PORT_DATA_IO_PU_PD(250), | ||
738 | PORT_DATA_IO_PU_PD(251), | ||
739 | PORT_DATA_IO_PU_PD(252), | ||
740 | PORT_DATA_IO_PU_PD(253), | ||
741 | PORT_DATA_IO_PU_PD(254), | ||
742 | PORT_DATA_IO_PU_PD(255), | ||
743 | PORT_DATA_IO_PU_PD(256), | ||
744 | PORT_DATA_IO_PU_PD(257), | ||
745 | PORT_DATA_IO_PU_PD(258), | ||
746 | PORT_DATA_IO_PU_PD(259), | ||
747 | PORT_DATA_IO_PU_PD(260), | ||
748 | PORT_DATA_IO_PU_PD(261), | ||
749 | PORT_DATA_IO_PU_PD(262), | ||
750 | PORT_DATA_IO_PU_PD(263), | ||
751 | PORT_DATA_IO_PU_PD(264), | ||
752 | PORT_DATA_IO_PU_PD(265), | ||
753 | PORT_DATA_IO_PU_PD(266), | ||
754 | PORT_DATA_IO_PU_PD(267), | ||
755 | PORT_DATA_IO_PU_PD(268), | ||
756 | PORT_DATA_IO_PU_PD(269), | ||
757 | PORT_DATA_IO_PU_PD(270), | ||
758 | PORT_DATA_IO_PU_PD(271), | ||
759 | PORT_DATA_IO_PU_PD(272), | ||
760 | PORT_DATA_IO_PU_PD(273), | ||
761 | PORT_DATA_IO_PU_PD(274), | ||
762 | PORT_DATA_IO_PU_PD(275), | ||
763 | PORT_DATA_IO_PU_PD(276), | ||
764 | PORT_DATA_IO_PU_PD(277), | ||
765 | PORT_DATA_IO_PU_PD(278), | ||
766 | PORT_DATA_IO_PU_PD(279), | ||
767 | PORT_DATA_IO_PU_PD(280), | ||
768 | PORT_DATA_O(281), | ||
769 | PORT_DATA_O(282), | ||
770 | PORT_DATA_I_PU(288), | ||
771 | PORT_DATA_IO_PU_PD(289), | ||
772 | PORT_DATA_IO_PU_PD(290), | ||
773 | PORT_DATA_IO_PU_PD(291), | ||
774 | PORT_DATA_IO_PU_PD(292), | ||
775 | PORT_DATA_IO_PU_PD(293), | ||
776 | PORT_DATA_IO_PU_PD(294), | ||
777 | PORT_DATA_IO_PU_PD(295), | ||
778 | PORT_DATA_IO_PU_PD(296), | ||
779 | PORT_DATA_IO_PU_PD(297), | ||
780 | PORT_DATA_IO_PU_PD(298), | ||
781 | |||
782 | PORT_DATA_IO_PU_PD(299), | ||
783 | PORT_DATA_IO_PU_PD(300), | ||
784 | PORT_DATA_IO_PU_PD(301), | ||
785 | PORT_DATA_IO_PU_PD(302), | ||
786 | PORT_DATA_IO_PU_PD(303), | ||
787 | PORT_DATA_IO_PU_PD(304), | ||
788 | PORT_DATA_IO_PU_PD(305), | ||
789 | PORT_DATA_O(306), | ||
790 | PORT_DATA_O(307), | ||
791 | PORT_DATA_I_PU(308), | ||
792 | PORT_DATA_O(309), | ||
793 | |||
794 | /* Table 25-1 (Function 0-7) */ | ||
795 | PINMUX_DATA(VBUS_0_MARK, PORT0_FN1), | ||
796 | PINMUX_DATA(GPI0_MARK, PORT1_FN1), | ||
797 | PINMUX_DATA(GPI1_MARK, PORT2_FN1), | ||
798 | PINMUX_DATA(GPI2_MARK, PORT3_FN1), | ||
799 | PINMUX_DATA(GPI3_MARK, PORT4_FN1), | ||
800 | PINMUX_DATA(GPI4_MARK, PORT5_FN1), | ||
801 | PINMUX_DATA(GPI5_MARK, PORT6_FN1), | ||
802 | PINMUX_DATA(GPI6_MARK, PORT7_FN1), | ||
803 | PINMUX_DATA(GPI7_MARK, PORT8_FN1), | ||
804 | PINMUX_DATA(SCIFA7_RXD_MARK, PORT12_FN2), | ||
805 | PINMUX_DATA(SCIFA7_CTS__MARK, PORT13_FN2), | ||
806 | PINMUX_DATA(GPO7_MARK, PORT14_FN1), \ | ||
807 | PINMUX_DATA(MFG0_OUT2_MARK, PORT14_FN4), | ||
808 | PINMUX_DATA(GPO6_MARK, PORT15_FN1), \ | ||
809 | PINMUX_DATA(MFG1_OUT2_MARK, PORT15_FN4), | ||
810 | PINMUX_DATA(GPO5_MARK, PORT16_FN1), \ | ||
811 | PINMUX_DATA(SCIFA0_SCK_MARK, PORT16_FN2), \ | ||
812 | PINMUX_DATA(FSICOSLDT3_MARK, PORT16_FN3), \ | ||
813 | PINMUX_DATA(PORT16_VIO_CKOR_MARK, PORT16_FN4), | ||
814 | PINMUX_DATA(SCIFA0_TXD_MARK, PORT17_FN2), | ||
815 | PINMUX_DATA(SCIFA7_TXD_MARK, PORT18_FN2), | ||
816 | PINMUX_DATA(SCIFA7_RTS__MARK, PORT19_FN2), \ | ||
817 | PINMUX_DATA(PORT19_VIO_CKO2_MARK, PORT19_FN3), | ||
818 | PINMUX_DATA(GPO0_MARK, PORT20_FN1), | ||
819 | PINMUX_DATA(GPO1_MARK, PORT21_FN1), | ||
820 | PINMUX_DATA(GPO2_MARK, PORT22_FN1), \ | ||
821 | PINMUX_DATA(STATUS0_MARK, PORT22_FN2), | ||
822 | PINMUX_DATA(GPO3_MARK, PORT23_FN1), \ | ||
823 | PINMUX_DATA(STATUS1_MARK, PORT23_FN2), | ||
824 | PINMUX_DATA(GPO4_MARK, PORT24_FN1), \ | ||
825 | PINMUX_DATA(STATUS2_MARK, PORT24_FN2), | ||
826 | PINMUX_DATA(VINT_MARK, PORT25_FN1), | ||
827 | PINMUX_DATA(TCKON_MARK, PORT26_FN1), | ||
828 | PINMUX_DATA(XDVFS1_MARK, PORT27_FN1), \ | ||
829 | PINMUX_DATA(PORT27_I2C_SCL2_MARK, PORT27_FN2, MSEL2CR_MSEL17_0, | ||
830 | MSEL2CR_MSEL16_1), \ | ||
831 | PINMUX_DATA(PORT27_I2C_SCL3_MARK, PORT27_FN3, MSEL2CR_MSEL19_0, | ||
832 | MSEL2CR_MSEL18_1), \ | ||
833 | PINMUX_DATA(MFG0_OUT1_MARK, PORT27_FN4), \ | ||
834 | PINMUX_DATA(PORT27_IROUT_MARK, PORT27_FN7), | ||
835 | PINMUX_DATA(XDVFS2_MARK, PORT28_FN1), \ | ||
836 | PINMUX_DATA(PORT28_I2C_SDA2_MARK, PORT28_FN2, MSEL2CR_MSEL17_0, | ||
837 | MSEL2CR_MSEL16_1), \ | ||
838 | PINMUX_DATA(PORT28_I2C_SDA3_MARK, PORT28_FN3, MSEL2CR_MSEL19_0, | ||
839 | MSEL2CR_MSEL18_1), \ | ||
840 | PINMUX_DATA(PORT28_TPU1TO1_MARK, PORT28_FN7), | ||
841 | PINMUX_DATA(SIM_RST_MARK, PORT29_FN1), \ | ||
842 | PINMUX_DATA(PORT29_TPU1TO1_MARK, PORT29_FN4), | ||
843 | PINMUX_DATA(SIM_CLK_MARK, PORT30_FN1), \ | ||
844 | PINMUX_DATA(PORT30_VIO_CKOR_MARK, PORT30_FN4), | ||
845 | PINMUX_DATA(SIM_D_MARK, PORT31_FN1), \ | ||
846 | PINMUX_DATA(PORT31_IROUT_MARK, PORT31_FN4), | ||
847 | PINMUX_DATA(SCIFA4_TXD_MARK, PORT32_FN2), | ||
848 | PINMUX_DATA(SCIFA4_RXD_MARK, PORT33_FN2), \ | ||
849 | PINMUX_DATA(XWUP_MARK, PORT33_FN3), | ||
850 | PINMUX_DATA(SCIFA4_RTS__MARK, PORT34_FN2), | ||
851 | PINMUX_DATA(SCIFA4_CTS__MARK, PORT35_FN2), | ||
852 | PINMUX_DATA(FSIBOBT_MARK, PORT36_FN1), \ | ||
853 | PINMUX_DATA(FSIBIBT_MARK, PORT36_FN2), | ||
854 | PINMUX_DATA(FSIBOLR_MARK, PORT37_FN1), \ | ||
855 | PINMUX_DATA(FSIBILR_MARK, PORT37_FN2), | ||
856 | PINMUX_DATA(FSIBOSLD_MARK, PORT38_FN1), | ||
857 | PINMUX_DATA(FSIBISLD_MARK, PORT39_FN1), | ||
858 | PINMUX_DATA(VACK_MARK, PORT40_FN1), | ||
859 | PINMUX_DATA(XTAL1L_MARK, PORT41_FN1), | ||
860 | PINMUX_DATA(SCIFA0_RTS__MARK, PORT42_FN2), \ | ||
861 | PINMUX_DATA(FSICOSLDT2_MARK, PORT42_FN3), | ||
862 | PINMUX_DATA(SCIFA0_RXD_MARK, PORT43_FN2), | ||
863 | PINMUX_DATA(SCIFA0_CTS__MARK, PORT44_FN2), \ | ||
864 | PINMUX_DATA(FSICOSLDT1_MARK, PORT44_FN3), | ||
865 | PINMUX_DATA(FSICOBT_MARK, PORT45_FN1), \ | ||
866 | PINMUX_DATA(FSICIBT_MARK, PORT45_FN2), \ | ||
867 | PINMUX_DATA(FSIDOBT_MARK, PORT45_FN3), \ | ||
868 | PINMUX_DATA(FSIDIBT_MARK, PORT45_FN4), | ||
869 | PINMUX_DATA(FSICOLR_MARK, PORT46_FN1), \ | ||
870 | PINMUX_DATA(FSICILR_MARK, PORT46_FN2), \ | ||
871 | PINMUX_DATA(FSIDOLR_MARK, PORT46_FN3), \ | ||
872 | PINMUX_DATA(FSIDILR_MARK, PORT46_FN4), | ||
873 | PINMUX_DATA(FSICOSLD_MARK, PORT47_FN1), \ | ||
874 | PINMUX_DATA(PORT47_FSICSPDIF_MARK, PORT47_FN2), | ||
875 | PINMUX_DATA(FSICISLD_MARK, PORT48_FN1), \ | ||
876 | PINMUX_DATA(FSIDISLD_MARK, PORT48_FN3), | ||
877 | PINMUX_DATA(FSIACK_MARK, PORT49_FN1), \ | ||
878 | PINMUX_DATA(PORT49_IRDA_OUT_MARK, PORT49_FN2, MSEL4CR_MSEL19_1), \ | ||
879 | PINMUX_DATA(PORT49_IROUT_MARK, PORT49_FN4), \ | ||
880 | PINMUX_DATA(FSIAOMC_MARK, PORT49_FN5), | ||
881 | PINMUX_DATA(FSIAOLR_MARK, PORT50_FN1), \ | ||
882 | PINMUX_DATA(BBIF2_TSYNC2_MARK, PORT50_FN2), \ | ||
883 | PINMUX_DATA(TPU2TO2_MARK, PORT50_FN3), \ | ||
884 | PINMUX_DATA(FSIAILR_MARK, PORT50_FN5), | ||
885 | |||
886 | PINMUX_DATA(FSIAOBT_MARK, PORT51_FN1), \ | ||
887 | PINMUX_DATA(BBIF2_TSCK2_MARK, PORT51_FN2), \ | ||
888 | PINMUX_DATA(TPU2TO3_MARK, PORT51_FN3), \ | ||
889 | PINMUX_DATA(FSIAIBT_MARK, PORT51_FN5), | ||
890 | PINMUX_DATA(FSIAOSLD_MARK, PORT52_FN1), \ | ||
891 | PINMUX_DATA(BBIF2_TXD2_MARK, PORT52_FN2), | ||
892 | PINMUX_DATA(FSIASPDIF_MARK, PORT53_FN1), \ | ||
893 | PINMUX_DATA(PORT53_IRDA_IN_MARK, PORT53_FN2, MSEL4CR_MSEL19_1), \ | ||
894 | PINMUX_DATA(TPU3TO3_MARK, PORT53_FN3), \ | ||
895 | PINMUX_DATA(FSIBSPDIF_MARK, PORT53_FN5), \ | ||
896 | PINMUX_DATA(PORT53_FSICSPDIF_MARK, PORT53_FN6), | ||
897 | PINMUX_DATA(FSIBCK_MARK, PORT54_FN1), \ | ||
898 | PINMUX_DATA(PORT54_IRDA_FIRSEL_MARK, PORT54_FN2, MSEL4CR_MSEL19_1), \ | ||
899 | PINMUX_DATA(TPU3TO2_MARK, PORT54_FN3), \ | ||
900 | PINMUX_DATA(FSIBOMC_MARK, PORT54_FN5), \ | ||
901 | PINMUX_DATA(FSICCK_MARK, PORT54_FN6), \ | ||
902 | PINMUX_DATA(FSICOMC_MARK, PORT54_FN7), | ||
903 | PINMUX_DATA(FSIAISLD_MARK, PORT55_FN1), \ | ||
904 | PINMUX_DATA(TPU0TO0_MARK, PORT55_FN3), | ||
905 | PINMUX_DATA(A0_MARK, PORT57_FN1), \ | ||
906 | PINMUX_DATA(BS__MARK, PORT57_FN2), | ||
907 | PINMUX_DATA(A12_MARK, PORT58_FN1), \ | ||
908 | PINMUX_DATA(PORT58_KEYOUT7_MARK, PORT58_FN2), \ | ||
909 | PINMUX_DATA(TPU4TO2_MARK, PORT58_FN4), | ||
910 | PINMUX_DATA(A13_MARK, PORT59_FN1), \ | ||
911 | PINMUX_DATA(PORT59_KEYOUT6_MARK, PORT59_FN2), \ | ||
912 | PINMUX_DATA(TPU0TO1_MARK, PORT59_FN4), | ||
913 | PINMUX_DATA(A14_MARK, PORT60_FN1), \ | ||
914 | PINMUX_DATA(KEYOUT5_MARK, PORT60_FN2), | ||
915 | PINMUX_DATA(A15_MARK, PORT61_FN1), \ | ||
916 | PINMUX_DATA(KEYOUT4_MARK, PORT61_FN2), | ||
917 | PINMUX_DATA(A16_MARK, PORT62_FN1), \ | ||
918 | PINMUX_DATA(KEYOUT3_MARK, PORT62_FN2), \ | ||
919 | PINMUX_DATA(MSIOF0_SS1_MARK, PORT62_FN4, MSEL3CR_MSEL11_0), | ||
920 | PINMUX_DATA(A17_MARK, PORT63_FN1), \ | ||
921 | PINMUX_DATA(KEYOUT2_MARK, PORT63_FN2), \ | ||
922 | PINMUX_DATA(MSIOF0_TSYNC_MARK, PORT63_FN4, MSEL3CR_MSEL11_0), | ||
923 | PINMUX_DATA(A18_MARK, PORT64_FN1), \ | ||
924 | PINMUX_DATA(KEYOUT1_MARK, PORT64_FN2), \ | ||
925 | PINMUX_DATA(MSIOF0_TSCK_MARK, PORT64_FN4, MSEL3CR_MSEL11_0), | ||
926 | PINMUX_DATA(A19_MARK, PORT65_FN1), \ | ||
927 | PINMUX_DATA(KEYOUT0_MARK, PORT65_FN2), \ | ||
928 | PINMUX_DATA(MSIOF0_TXD_MARK, PORT65_FN4, MSEL3CR_MSEL11_0), | ||
929 | PINMUX_DATA(A20_MARK, PORT66_FN1), \ | ||
930 | PINMUX_DATA(KEYIN0_MARK, PORT66_FN2), \ | ||
931 | PINMUX_DATA(MSIOF0_RSCK_MARK, PORT66_FN4, MSEL3CR_MSEL11_0), | ||
932 | PINMUX_DATA(A21_MARK, PORT67_FN1), \ | ||
933 | PINMUX_DATA(KEYIN1_MARK, PORT67_FN2), \ | ||
934 | PINMUX_DATA(MSIOF0_RSYNC_MARK, PORT67_FN4, MSEL3CR_MSEL11_0), | ||
935 | PINMUX_DATA(A22_MARK, PORT68_FN1), \ | ||
936 | PINMUX_DATA(KEYIN2_MARK, PORT68_FN2), \ | ||
937 | PINMUX_DATA(MSIOF0_MCK0_MARK, PORT68_FN4, MSEL3CR_MSEL11_0), | ||
938 | PINMUX_DATA(A23_MARK, PORT69_FN1), \ | ||
939 | PINMUX_DATA(KEYIN3_MARK, PORT69_FN2), \ | ||
940 | PINMUX_DATA(MSIOF0_MCK1_MARK, PORT69_FN4, MSEL3CR_MSEL11_0), | ||
941 | PINMUX_DATA(A24_MARK, PORT70_FN1), \ | ||
942 | PINMUX_DATA(KEYIN4_MARK, PORT70_FN2), \ | ||
943 | PINMUX_DATA(MSIOF0_RXD_MARK, PORT70_FN4, MSEL3CR_MSEL11_0), | ||
944 | PINMUX_DATA(A25_MARK, PORT71_FN1), \ | ||
945 | PINMUX_DATA(KEYIN5_MARK, PORT71_FN2), \ | ||
946 | PINMUX_DATA(MSIOF0_SS2_MARK, PORT71_FN4, MSEL3CR_MSEL11_0), | ||
947 | PINMUX_DATA(A26_MARK, PORT72_FN1), \ | ||
948 | PINMUX_DATA(KEYIN6_MARK, PORT72_FN2), | ||
949 | PINMUX_DATA(KEYIN7_MARK, PORT73_FN2), | ||
950 | PINMUX_DATA(D0_NAF0_MARK, PORT74_FN1), | ||
951 | PINMUX_DATA(D1_NAF1_MARK, PORT75_FN1), | ||
952 | PINMUX_DATA(D2_NAF2_MARK, PORT76_FN1), | ||
953 | PINMUX_DATA(D3_NAF3_MARK, PORT77_FN1), | ||
954 | PINMUX_DATA(D4_NAF4_MARK, PORT78_FN1), | ||
955 | PINMUX_DATA(D5_NAF5_MARK, PORT79_FN1), | ||
956 | PINMUX_DATA(D6_NAF6_MARK, PORT80_FN1), | ||
957 | PINMUX_DATA(D7_NAF7_MARK, PORT81_FN1), | ||
958 | PINMUX_DATA(D8_NAF8_MARK, PORT82_FN1), | ||
959 | PINMUX_DATA(D9_NAF9_MARK, PORT83_FN1), | ||
960 | PINMUX_DATA(D10_NAF10_MARK, PORT84_FN1), | ||
961 | PINMUX_DATA(D11_NAF11_MARK, PORT85_FN1), | ||
962 | PINMUX_DATA(D12_NAF12_MARK, PORT86_FN1), | ||
963 | PINMUX_DATA(D13_NAF13_MARK, PORT87_FN1), | ||
964 | PINMUX_DATA(D14_NAF14_MARK, PORT88_FN1), | ||
965 | PINMUX_DATA(D15_NAF15_MARK, PORT89_FN1), | ||
966 | PINMUX_DATA(CS4__MARK, PORT90_FN1), | ||
967 | PINMUX_DATA(CS5A__MARK, PORT91_FN1), \ | ||
968 | PINMUX_DATA(PORT91_RDWR_MARK, PORT91_FN2), | ||
969 | PINMUX_DATA(CS5B__MARK, PORT92_FN1), \ | ||
970 | PINMUX_DATA(FCE1__MARK, PORT92_FN2), | ||
971 | PINMUX_DATA(CS6B__MARK, PORT93_FN1), \ | ||
972 | PINMUX_DATA(DACK0_MARK, PORT93_FN4), | ||
973 | PINMUX_DATA(FCE0__MARK, PORT94_FN1), \ | ||
974 | PINMUX_DATA(CS6A__MARK, PORT94_FN2), | ||
975 | PINMUX_DATA(WAIT__MARK, PORT95_FN1), \ | ||
976 | PINMUX_DATA(DREQ0_MARK, PORT95_FN2), | ||
977 | PINMUX_DATA(RD__FSC_MARK, PORT96_FN1), | ||
978 | PINMUX_DATA(WE0__FWE_MARK, PORT97_FN1), \ | ||
979 | PINMUX_DATA(RDWR_FWE_MARK, PORT97_FN2), | ||
980 | PINMUX_DATA(WE1__MARK, PORT98_FN1), | ||
981 | PINMUX_DATA(FRB_MARK, PORT99_FN1), | ||
982 | PINMUX_DATA(CKO_MARK, PORT100_FN1), | ||
983 | PINMUX_DATA(NBRSTOUT__MARK, PORT101_FN1), | ||
984 | PINMUX_DATA(NBRST__MARK, PORT102_FN1), | ||
985 | PINMUX_DATA(BBIF2_TXD_MARK, PORT103_FN3), | ||
986 | PINMUX_DATA(BBIF2_RXD_MARK, PORT104_FN3), | ||
987 | PINMUX_DATA(BBIF2_SYNC_MARK, PORT105_FN3), | ||
988 | PINMUX_DATA(BBIF2_SCK_MARK, PORT106_FN3), | ||
989 | PINMUX_DATA(SCIFA3_CTS__MARK, PORT107_FN3), \ | ||
990 | PINMUX_DATA(MFG3_IN2_MARK, PORT107_FN4), | ||
991 | PINMUX_DATA(SCIFA3_RXD_MARK, PORT108_FN3), \ | ||
992 | PINMUX_DATA(MFG3_IN1_MARK, PORT108_FN4), | ||
993 | PINMUX_DATA(BBIF1_SS2_MARK, PORT109_FN2), \ | ||
994 | PINMUX_DATA(SCIFA3_RTS__MARK, PORT109_FN3), \ | ||
995 | PINMUX_DATA(MFG3_OUT1_MARK, PORT109_FN4), | ||
996 | PINMUX_DATA(SCIFA3_TXD_MARK, PORT110_FN3), | ||
997 | PINMUX_DATA(HSI_RX_DATA_MARK, PORT111_FN1), \ | ||
998 | PINMUX_DATA(BBIF1_RXD_MARK, PORT111_FN3), | ||
999 | PINMUX_DATA(HSI_TX_WAKE_MARK, PORT112_FN1), \ | ||
1000 | PINMUX_DATA(BBIF1_TSCK_MARK, PORT112_FN3), | ||
1001 | PINMUX_DATA(HSI_TX_DATA_MARK, PORT113_FN1), \ | ||
1002 | PINMUX_DATA(BBIF1_TSYNC_MARK, PORT113_FN3), | ||
1003 | PINMUX_DATA(HSI_TX_READY_MARK, PORT114_FN1), \ | ||
1004 | PINMUX_DATA(BBIF1_TXD_MARK, PORT114_FN3), | ||
1005 | PINMUX_DATA(HSI_RX_READY_MARK, PORT115_FN1), \ | ||
1006 | PINMUX_DATA(BBIF1_RSCK_MARK, PORT115_FN3), \ | ||
1007 | PINMUX_DATA(PORT115_I2C_SCL2_MARK, PORT115_FN5, MSEL2CR_MSEL17_1), \ | ||
1008 | PINMUX_DATA(PORT115_I2C_SCL3_MARK, PORT115_FN6, MSEL2CR_MSEL19_1), | ||
1009 | PINMUX_DATA(HSI_RX_WAKE_MARK, PORT116_FN1), \ | ||
1010 | PINMUX_DATA(BBIF1_RSYNC_MARK, PORT116_FN3), \ | ||
1011 | PINMUX_DATA(PORT116_I2C_SDA2_MARK, PORT116_FN5, MSEL2CR_MSEL17_1), \ | ||
1012 | PINMUX_DATA(PORT116_I2C_SDA3_MARK, PORT116_FN6, MSEL2CR_MSEL19_1), | ||
1013 | PINMUX_DATA(HSI_RX_FLAG_MARK, PORT117_FN1), \ | ||
1014 | PINMUX_DATA(BBIF1_SS1_MARK, PORT117_FN2), \ | ||
1015 | PINMUX_DATA(BBIF1_FLOW_MARK, PORT117_FN3), | ||
1016 | PINMUX_DATA(HSI_TX_FLAG_MARK, PORT118_FN1), | ||
1017 | PINMUX_DATA(VIO_VD_MARK, PORT128_FN1), \ | ||
1018 | PINMUX_DATA(PORT128_LCD2VSYN_MARK, PORT128_FN4, MSEL3CR_MSEL2_0), \ | ||
1019 | PINMUX_DATA(VIO2_VD_MARK, PORT128_FN6, MSEL4CR_MSEL27_0), \ | ||
1020 | PINMUX_DATA(LCD2D0_MARK, PORT128_FN7), | ||
1021 | |||
1022 | PINMUX_DATA(VIO_HD_MARK, PORT129_FN1), \ | ||
1023 | PINMUX_DATA(PORT129_LCD2HSYN_MARK, PORT129_FN4), \ | ||
1024 | PINMUX_DATA(PORT129_LCD2CS__MARK, PORT129_FN5), \ | ||
1025 | PINMUX_DATA(VIO2_HD_MARK, PORT129_FN6, MSEL4CR_MSEL27_0), \ | ||
1026 | PINMUX_DATA(LCD2D1_MARK, PORT129_FN7), | ||
1027 | PINMUX_DATA(VIO_D0_MARK, PORT130_FN1), \ | ||
1028 | PINMUX_DATA(PORT130_MSIOF2_RXD_MARK, PORT130_FN3, MSEL4CR_MSEL11_0, | ||
1029 | MSEL4CR_MSEL10_1), \ | ||
1030 | PINMUX_DATA(LCD2D10_MARK, PORT130_FN7), | ||
1031 | PINMUX_DATA(VIO_D1_MARK, PORT131_FN1), \ | ||
1032 | PINMUX_DATA(PORT131_KEYOUT6_MARK, PORT131_FN2), \ | ||
1033 | PINMUX_DATA(PORT131_MSIOF2_SS1_MARK, PORT131_FN3), \ | ||
1034 | PINMUX_DATA(PORT131_KEYOUT11_MARK, PORT131_FN4), \ | ||
1035 | PINMUX_DATA(LCD2D11_MARK, PORT131_FN7), | ||
1036 | PINMUX_DATA(VIO_D2_MARK, PORT132_FN1), \ | ||
1037 | PINMUX_DATA(PORT132_KEYOUT7_MARK, PORT132_FN2), \ | ||
1038 | PINMUX_DATA(PORT132_MSIOF2_SS2_MARK, PORT132_FN3), \ | ||
1039 | PINMUX_DATA(PORT132_KEYOUT10_MARK, PORT132_FN4), \ | ||
1040 | PINMUX_DATA(LCD2D12_MARK, PORT132_FN7), | ||
1041 | PINMUX_DATA(VIO_D3_MARK, PORT133_FN1), \ | ||
1042 | PINMUX_DATA(MSIOF2_TSYNC_MARK, PORT133_FN3, MSEL4CR_MSEL11_0), \ | ||
1043 | PINMUX_DATA(LCD2D13_MARK, PORT133_FN7), | ||
1044 | PINMUX_DATA(VIO_D4_MARK, PORT134_FN1), \ | ||
1045 | PINMUX_DATA(MSIOF2_TXD_MARK, PORT134_FN3, MSEL4CR_MSEL11_0), \ | ||
1046 | PINMUX_DATA(LCD2D14_MARK, PORT134_FN7), | ||
1047 | PINMUX_DATA(VIO_D5_MARK, PORT135_FN1), \ | ||
1048 | PINMUX_DATA(MSIOF2_TSCK_MARK, PORT135_FN3, MSEL4CR_MSEL11_0), \ | ||
1049 | PINMUX_DATA(LCD2D15_MARK, PORT135_FN7), | ||
1050 | PINMUX_DATA(VIO_D6_MARK, PORT136_FN1), \ | ||
1051 | PINMUX_DATA(PORT136_KEYOUT8_MARK, PORT136_FN2), \ | ||
1052 | PINMUX_DATA(LCD2D16_MARK, PORT136_FN7), | ||
1053 | PINMUX_DATA(VIO_D7_MARK, PORT137_FN1), \ | ||
1054 | PINMUX_DATA(PORT137_KEYOUT9_MARK, PORT137_FN2), \ | ||
1055 | PINMUX_DATA(LCD2D17_MARK, PORT137_FN7), | ||
1056 | PINMUX_DATA(VIO_D8_MARK, PORT138_FN1), \ | ||
1057 | PINMUX_DATA(PORT138_KEYOUT8_MARK, PORT138_FN2), \ | ||
1058 | PINMUX_DATA(VIO2_D0_MARK, PORT138_FN6), \ | ||
1059 | PINMUX_DATA(LCD2D6_MARK, PORT138_FN7), | ||
1060 | PINMUX_DATA(VIO_D9_MARK, PORT139_FN1), \ | ||
1061 | PINMUX_DATA(PORT139_KEYOUT9_MARK, PORT139_FN2), \ | ||
1062 | PINMUX_DATA(VIO2_D1_MARK, PORT139_FN6), \ | ||
1063 | PINMUX_DATA(LCD2D7_MARK, PORT139_FN7), | ||
1064 | PINMUX_DATA(VIO_D10_MARK, PORT140_FN1), \ | ||
1065 | PINMUX_DATA(TPU0TO2_MARK, PORT140_FN4), \ | ||
1066 | PINMUX_DATA(VIO2_D2_MARK, PORT140_FN6), \ | ||
1067 | PINMUX_DATA(LCD2D8_MARK, PORT140_FN7), | ||
1068 | PINMUX_DATA(VIO_D11_MARK, PORT141_FN1), \ | ||
1069 | PINMUX_DATA(TPU0TO3_MARK, PORT141_FN4), \ | ||
1070 | PINMUX_DATA(VIO2_D3_MARK, PORT141_FN6), \ | ||
1071 | PINMUX_DATA(LCD2D9_MARK, PORT141_FN7), | ||
1072 | PINMUX_DATA(VIO_D12_MARK, PORT142_FN1), \ | ||
1073 | PINMUX_DATA(PORT142_KEYOUT10_MARK, PORT142_FN2), \ | ||
1074 | PINMUX_DATA(VIO2_D4_MARK, PORT142_FN6), \ | ||
1075 | PINMUX_DATA(LCD2D2_MARK, PORT142_FN7), | ||
1076 | PINMUX_DATA(VIO_D13_MARK, PORT143_FN1), \ | ||
1077 | PINMUX_DATA(PORT143_KEYOUT11_MARK, PORT143_FN2), \ | ||
1078 | PINMUX_DATA(PORT143_KEYOUT6_MARK, PORT143_FN3), \ | ||
1079 | PINMUX_DATA(VIO2_D5_MARK, PORT143_FN6), \ | ||
1080 | PINMUX_DATA(LCD2D3_MARK, PORT143_FN7), | ||
1081 | PINMUX_DATA(VIO_D14_MARK, PORT144_FN1), \ | ||
1082 | PINMUX_DATA(PORT144_KEYOUT7_MARK, PORT144_FN2), \ | ||
1083 | PINMUX_DATA(VIO2_D6_MARK, PORT144_FN6), \ | ||
1084 | PINMUX_DATA(LCD2D4_MARK, PORT144_FN7), | ||
1085 | PINMUX_DATA(VIO_D15_MARK, PORT145_FN1), \ | ||
1086 | PINMUX_DATA(TPU1TO3_MARK, PORT145_FN3), \ | ||
1087 | PINMUX_DATA(PORT145_LCD2DISP_MARK, PORT145_FN4), \ | ||
1088 | PINMUX_DATA(PORT145_LCD2RS_MARK, PORT145_FN5), \ | ||
1089 | PINMUX_DATA(VIO2_D7_MARK, PORT145_FN6), \ | ||
1090 | PINMUX_DATA(LCD2D5_MARK, PORT145_FN7), | ||
1091 | PINMUX_DATA(VIO_CLK_MARK, PORT146_FN1), \ | ||
1092 | PINMUX_DATA(LCD2DCK_MARK, PORT146_FN4), \ | ||
1093 | PINMUX_DATA(PORT146_LCD2WR__MARK, PORT146_FN5), \ | ||
1094 | PINMUX_DATA(VIO2_CLK_MARK, PORT146_FN6, MSEL4CR_MSEL27_0), \ | ||
1095 | PINMUX_DATA(LCD2D18_MARK, PORT146_FN7), | ||
1096 | PINMUX_DATA(VIO_FIELD_MARK, PORT147_FN1), \ | ||
1097 | PINMUX_DATA(LCD2RD__MARK, PORT147_FN4), \ | ||
1098 | PINMUX_DATA(VIO2_FIELD_MARK, PORT147_FN6, MSEL4CR_MSEL27_0), \ | ||
1099 | PINMUX_DATA(LCD2D19_MARK, PORT147_FN7), | ||
1100 | PINMUX_DATA(VIO_CKO_MARK, PORT148_FN1), | ||
1101 | PINMUX_DATA(A27_MARK, PORT149_FN1), \ | ||
1102 | PINMUX_DATA(PORT149_RDWR_MARK, PORT149_FN2), \ | ||
1103 | PINMUX_DATA(MFG0_IN1_MARK, PORT149_FN3), \ | ||
1104 | PINMUX_DATA(PORT149_KEYOUT9_MARK, PORT149_FN4), | ||
1105 | PINMUX_DATA(MFG0_IN2_MARK, PORT150_FN3), | ||
1106 | PINMUX_DATA(TS_SPSYNC3_MARK, PORT151_FN4), \ | ||
1107 | PINMUX_DATA(MSIOF2_RSCK_MARK, PORT151_FN5), | ||
1108 | PINMUX_DATA(TS_SDAT3_MARK, PORT152_FN4), \ | ||
1109 | PINMUX_DATA(MSIOF2_RSYNC_MARK, PORT152_FN5), | ||
1110 | PINMUX_DATA(TPU1TO2_MARK, PORT153_FN3), \ | ||
1111 | PINMUX_DATA(TS_SDEN3_MARK, PORT153_FN4), \ | ||
1112 | PINMUX_DATA(PORT153_MSIOF2_SS1_MARK, PORT153_FN5), | ||
1113 | PINMUX_DATA(SCIFA2_TXD1_MARK, PORT154_FN2, MSEL3CR_MSEL9_0), \ | ||
1114 | PINMUX_DATA(MSIOF2_MCK0_MARK, PORT154_FN5), | ||
1115 | PINMUX_DATA(SCIFA2_RXD1_MARK, PORT155_FN2, MSEL3CR_MSEL9_0), \ | ||
1116 | PINMUX_DATA(MSIOF2_MCK1_MARK, PORT155_FN5), | ||
1117 | PINMUX_DATA(SCIFA2_RTS1__MARK, PORT156_FN2, MSEL3CR_MSEL9_0), \ | ||
1118 | PINMUX_DATA(PORT156_MSIOF2_SS2_MARK, PORT156_FN5), | ||
1119 | PINMUX_DATA(SCIFA2_CTS1__MARK, PORT157_FN2, MSEL3CR_MSEL9_0), \ | ||
1120 | PINMUX_DATA(PORT157_MSIOF2_RXD_MARK, PORT157_FN5, MSEL4CR_MSEL11_0, | ||
1121 | MSEL4CR_MSEL10_0), | ||
1122 | PINMUX_DATA(DINT__MARK, PORT158_FN1), \ | ||
1123 | PINMUX_DATA(SCIFA2_SCK1_MARK, PORT158_FN2, MSEL3CR_MSEL9_0), \ | ||
1124 | PINMUX_DATA(TS_SCK3_MARK, PORT158_FN4), | ||
1125 | PINMUX_DATA(PORT159_SCIFB_SCK_MARK, PORT159_FN1, MSEL4CR_MSEL22_0), \ | ||
1126 | PINMUX_DATA(PORT159_SCIFA5_SCK_MARK, PORT159_FN2, MSEL4CR_MSEL21_1), \ | ||
1127 | PINMUX_DATA(NMI_MARK, PORT159_FN3), | ||
1128 | PINMUX_DATA(PORT160_SCIFB_TXD_MARK, PORT160_FN1, MSEL4CR_MSEL22_0), \ | ||
1129 | PINMUX_DATA(PORT160_SCIFA5_TXD_MARK, PORT160_FN2, MSEL4CR_MSEL21_1), | ||
1130 | PINMUX_DATA(PORT161_SCIFB_CTS__MARK, PORT161_FN1, MSEL4CR_MSEL22_0), \ | ||
1131 | PINMUX_DATA(PORT161_SCIFA5_CTS__MARK, PORT161_FN2, MSEL4CR_MSEL21_1), | ||
1132 | PINMUX_DATA(PORT162_SCIFB_RXD_MARK, PORT162_FN1, MSEL4CR_MSEL22_0), \ | ||
1133 | PINMUX_DATA(PORT162_SCIFA5_RXD_MARK, PORT162_FN2, MSEL4CR_MSEL21_1), | ||
1134 | PINMUX_DATA(PORT163_SCIFB_RTS__MARK, PORT163_FN1, MSEL4CR_MSEL22_0), \ | ||
1135 | PINMUX_DATA(PORT163_SCIFA5_RTS__MARK, PORT163_FN2, MSEL4CR_MSEL21_1), \ | ||
1136 | PINMUX_DATA(TPU3TO0_MARK, PORT163_FN5), | ||
1137 | PINMUX_DATA(LCDD0_MARK, PORT192_FN1), | ||
1138 | PINMUX_DATA(LCDD1_MARK, PORT193_FN1), \ | ||
1139 | PINMUX_DATA(PORT193_SCIFA5_CTS__MARK, PORT193_FN3, MSEL4CR_MSEL21_0, | ||
1140 | MSEL4CR_MSEL20_1), \ | ||
1141 | PINMUX_DATA(BBIF2_TSYNC1_MARK, PORT193_FN5), | ||
1142 | PINMUX_DATA(LCDD2_MARK, PORT194_FN1), \ | ||
1143 | PINMUX_DATA(PORT194_SCIFA5_RTS__MARK, PORT194_FN3, MSEL4CR_MSEL21_0, | ||
1144 | MSEL4CR_MSEL20_1), \ | ||
1145 | PINMUX_DATA(BBIF2_TSCK1_MARK, PORT194_FN5), | ||
1146 | PINMUX_DATA(LCDD3_MARK, PORT195_FN1), \ | ||
1147 | PINMUX_DATA(PORT195_SCIFA5_RXD_MARK, PORT195_FN3, MSEL4CR_MSEL21_0, | ||
1148 | MSEL4CR_MSEL20_1), \ | ||
1149 | PINMUX_DATA(BBIF2_TXD1_MARK, PORT195_FN5), | ||
1150 | PINMUX_DATA(LCDD4_MARK, PORT196_FN1), \ | ||
1151 | PINMUX_DATA(PORT196_SCIFA5_TXD_MARK, PORT196_FN3, MSEL4CR_MSEL21_0, | ||
1152 | MSEL4CR_MSEL20_1), | ||
1153 | PINMUX_DATA(LCDD5_MARK, PORT197_FN1), \ | ||
1154 | PINMUX_DATA(PORT197_SCIFA5_SCK_MARK, PORT197_FN3, MSEL4CR_MSEL21_0, | ||
1155 | MSEL4CR_MSEL20_1), \ | ||
1156 | PINMUX_DATA(MFG2_OUT2_MARK, PORT197_FN5), \ | ||
1157 | PINMUX_DATA(TPU2TO1_MARK, PORT197_FN7), | ||
1158 | PINMUX_DATA(LCDD6_MARK, PORT198_FN1), | ||
1159 | PINMUX_DATA(LCDD7_MARK, PORT199_FN1), \ | ||
1160 | PINMUX_DATA(TPU4TO1_MARK, PORT199_FN2), \ | ||
1161 | PINMUX_DATA(MFG4_OUT2_MARK, PORT199_FN5), | ||
1162 | PINMUX_DATA(LCDD8_MARK, PORT200_FN1), \ | ||
1163 | PINMUX_DATA(D16_MARK, PORT200_FN6), | ||
1164 | PINMUX_DATA(LCDD9_MARK, PORT201_FN1), \ | ||
1165 | PINMUX_DATA(D17_MARK, PORT201_FN6), | ||
1166 | PINMUX_DATA(LCDD10_MARK, PORT202_FN1), \ | ||
1167 | PINMUX_DATA(D18_MARK, PORT202_FN6), | ||
1168 | PINMUX_DATA(LCDD11_MARK, PORT203_FN1), \ | ||
1169 | PINMUX_DATA(D19_MARK, PORT203_FN6), | ||
1170 | PINMUX_DATA(LCDD12_MARK, PORT204_FN1), \ | ||
1171 | PINMUX_DATA(D20_MARK, PORT204_FN6), | ||
1172 | PINMUX_DATA(LCDD13_MARK, PORT205_FN1), \ | ||
1173 | PINMUX_DATA(D21_MARK, PORT205_FN6), | ||
1174 | PINMUX_DATA(LCDD14_MARK, PORT206_FN1), \ | ||
1175 | PINMUX_DATA(D22_MARK, PORT206_FN6), | ||
1176 | PINMUX_DATA(LCDD15_MARK, PORT207_FN1), \ | ||
1177 | PINMUX_DATA(PORT207_MSIOF0L_SS1_MARK, PORT207_FN2, MSEL3CR_MSEL11_1), \ | ||
1178 | PINMUX_DATA(D23_MARK, PORT207_FN6), | ||
1179 | PINMUX_DATA(LCDD16_MARK, PORT208_FN1), \ | ||
1180 | PINMUX_DATA(PORT208_MSIOF0L_SS2_MARK, PORT208_FN2, MSEL3CR_MSEL11_1), \ | ||
1181 | PINMUX_DATA(D24_MARK, PORT208_FN6), | ||
1182 | PINMUX_DATA(LCDD17_MARK, PORT209_FN1), \ | ||
1183 | PINMUX_DATA(D25_MARK, PORT209_FN6), | ||
1184 | PINMUX_DATA(LCDD18_MARK, PORT210_FN1), \ | ||
1185 | PINMUX_DATA(DREQ2_MARK, PORT210_FN2), \ | ||
1186 | PINMUX_DATA(PORT210_MSIOF0L_SS1_MARK, PORT210_FN5, MSEL3CR_MSEL11_1), \ | ||
1187 | PINMUX_DATA(D26_MARK, PORT210_FN6), | ||
1188 | PINMUX_DATA(LCDD19_MARK, PORT211_FN1), \ | ||
1189 | PINMUX_DATA(PORT211_MSIOF0L_SS2_MARK, PORT211_FN5, MSEL3CR_MSEL11_1), \ | ||
1190 | PINMUX_DATA(D27_MARK, PORT211_FN6), | ||
1191 | PINMUX_DATA(LCDD20_MARK, PORT212_FN1), \ | ||
1192 | PINMUX_DATA(TS_SPSYNC1_MARK, PORT212_FN2), \ | ||
1193 | PINMUX_DATA(MSIOF0L_MCK0_MARK, PORT212_FN5, MSEL3CR_MSEL11_1), \ | ||
1194 | PINMUX_DATA(D28_MARK, PORT212_FN6), | ||
1195 | PINMUX_DATA(LCDD21_MARK, PORT213_FN1), \ | ||
1196 | PINMUX_DATA(TS_SDAT1_MARK, PORT213_FN2), \ | ||
1197 | PINMUX_DATA(MSIOF0L_MCK1_MARK, PORT213_FN5, MSEL3CR_MSEL11_1), \ | ||
1198 | PINMUX_DATA(D29_MARK, PORT213_FN6), | ||
1199 | PINMUX_DATA(LCDD22_MARK, PORT214_FN1), \ | ||
1200 | PINMUX_DATA(TS_SDEN1_MARK, PORT214_FN2), \ | ||
1201 | PINMUX_DATA(MSIOF0L_RSCK_MARK, PORT214_FN5, MSEL3CR_MSEL11_1), \ | ||
1202 | PINMUX_DATA(D30_MARK, PORT214_FN6), | ||
1203 | PINMUX_DATA(LCDD23_MARK, PORT215_FN1), \ | ||
1204 | PINMUX_DATA(TS_SCK1_MARK, PORT215_FN2), \ | ||
1205 | PINMUX_DATA(MSIOF0L_RSYNC_MARK, PORT215_FN5, MSEL3CR_MSEL11_1), \ | ||
1206 | PINMUX_DATA(D31_MARK, PORT215_FN6), | ||
1207 | PINMUX_DATA(LCDDCK_MARK, PORT216_FN1), \ | ||
1208 | PINMUX_DATA(LCDWR__MARK, PORT216_FN2), | ||
1209 | PINMUX_DATA(LCDRD__MARK, PORT217_FN1), \ | ||
1210 | PINMUX_DATA(DACK2_MARK, PORT217_FN2), \ | ||
1211 | PINMUX_DATA(PORT217_LCD2RS_MARK, PORT217_FN3), \ | ||
1212 | PINMUX_DATA(MSIOF0L_TSYNC_MARK, PORT217_FN5, MSEL3CR_MSEL11_1), \ | ||
1213 | PINMUX_DATA(VIO2_FIELD3_MARK, PORT217_FN6, MSEL4CR_MSEL27_1, | ||
1214 | MSEL4CR_MSEL26_1), \ | ||
1215 | PINMUX_DATA(PORT217_LCD2DISP_MARK, PORT217_FN7), | ||
1216 | PINMUX_DATA(LCDHSYN_MARK, PORT218_FN1), \ | ||
1217 | PINMUX_DATA(LCDCS__MARK, PORT218_FN2), \ | ||
1218 | PINMUX_DATA(LCDCS2__MARK, PORT218_FN3), \ | ||
1219 | PINMUX_DATA(DACK3_MARK, PORT218_FN4), \ | ||
1220 | PINMUX_DATA(PORT218_VIO_CKOR_MARK, PORT218_FN5), | ||
1221 | PINMUX_DATA(LCDDISP_MARK, PORT219_FN1), \ | ||
1222 | PINMUX_DATA(LCDRS_MARK, PORT219_FN2), \ | ||
1223 | PINMUX_DATA(PORT219_LCD2WR__MARK, PORT219_FN3), \ | ||
1224 | PINMUX_DATA(DREQ3_MARK, PORT219_FN4), \ | ||
1225 | PINMUX_DATA(MSIOF0L_TSCK_MARK, PORT219_FN5, MSEL3CR_MSEL11_1), \ | ||
1226 | PINMUX_DATA(VIO2_CLK3_MARK, PORT219_FN6, MSEL4CR_MSEL27_1, | ||
1227 | MSEL4CR_MSEL26_1), \ | ||
1228 | PINMUX_DATA(LCD2DCK_2_MARK, PORT219_FN7), | ||
1229 | PINMUX_DATA(LCDVSYN_MARK, PORT220_FN1), \ | ||
1230 | PINMUX_DATA(LCDVSYN2_MARK, PORT220_FN2), | ||
1231 | PINMUX_DATA(LCDLCLK_MARK, PORT221_FN1), \ | ||
1232 | PINMUX_DATA(DREQ1_MARK, PORT221_FN2), \ | ||
1233 | PINMUX_DATA(PORT221_LCD2CS__MARK, PORT221_FN3), \ | ||
1234 | PINMUX_DATA(PWEN_MARK, PORT221_FN4), \ | ||
1235 | PINMUX_DATA(MSIOF0L_RXD_MARK, PORT221_FN5, MSEL3CR_MSEL11_1), \ | ||
1236 | PINMUX_DATA(VIO2_HD3_MARK, PORT221_FN6, MSEL4CR_MSEL27_1, | ||
1237 | MSEL4CR_MSEL26_1), \ | ||
1238 | PINMUX_DATA(PORT221_LCD2HSYN_MARK, PORT221_FN7), | ||
1239 | PINMUX_DATA(LCDDON_MARK, PORT222_FN1), \ | ||
1240 | PINMUX_DATA(LCDDON2_MARK, PORT222_FN2), \ | ||
1241 | PINMUX_DATA(DACK1_MARK, PORT222_FN3), \ | ||
1242 | PINMUX_DATA(OVCN_MARK, PORT222_FN4), \ | ||
1243 | PINMUX_DATA(MSIOF0L_TXD_MARK, PORT222_FN5, MSEL3CR_MSEL11_1), \ | ||
1244 | PINMUX_DATA(VIO2_VD3_MARK, PORT222_FN6, MSEL4CR_MSEL27_1, | ||
1245 | MSEL4CR_MSEL26_1), \ | ||
1246 | PINMUX_DATA(PORT222_LCD2VSYN_MARK, PORT222_FN7, MSEL3CR_MSEL2_1), | ||
1247 | |||
1248 | PINMUX_DATA(SCIFA1_TXD_MARK, PORT225_FN2), \ | ||
1249 | PINMUX_DATA(OVCN2_MARK, PORT225_FN4), | ||
1250 | PINMUX_DATA(EXTLP_MARK, PORT226_FN1), \ | ||
1251 | PINMUX_DATA(SCIFA1_SCK_MARK, PORT226_FN2), \ | ||
1252 | PINMUX_DATA(PORT226_VIO_CKO2_MARK, PORT226_FN5), | ||
1253 | PINMUX_DATA(SCIFA1_RTS__MARK, PORT227_FN2), \ | ||
1254 | PINMUX_DATA(IDIN_MARK, PORT227_FN4), | ||
1255 | PINMUX_DATA(SCIFA1_RXD_MARK, PORT228_FN2), | ||
1256 | PINMUX_DATA(SCIFA1_CTS__MARK, PORT229_FN2), \ | ||
1257 | PINMUX_DATA(MFG1_IN1_MARK, PORT229_FN3), | ||
1258 | PINMUX_DATA(MSIOF1_TXD_MARK, PORT230_FN1), \ | ||
1259 | PINMUX_DATA(SCIFA2_TXD2_MARK, PORT230_FN2, MSEL3CR_MSEL9_1), | ||
1260 | PINMUX_DATA(MSIOF1_TSYNC_MARK, PORT231_FN1), \ | ||
1261 | PINMUX_DATA(SCIFA2_CTS2__MARK, PORT231_FN2, MSEL3CR_MSEL9_1), | ||
1262 | PINMUX_DATA(MSIOF1_TSCK_MARK, PORT232_FN1), \ | ||
1263 | PINMUX_DATA(SCIFA2_SCK2_MARK, PORT232_FN2, MSEL3CR_MSEL9_1), | ||
1264 | PINMUX_DATA(MSIOF1_RXD_MARK, PORT233_FN1), \ | ||
1265 | PINMUX_DATA(SCIFA2_RXD2_MARK, PORT233_FN2, MSEL3CR_MSEL9_1), | ||
1266 | PINMUX_DATA(MSIOF1_RSCK_MARK, PORT234_FN1), \ | ||
1267 | PINMUX_DATA(SCIFA2_RTS2__MARK, PORT234_FN2, MSEL3CR_MSEL9_1), \ | ||
1268 | PINMUX_DATA(VIO2_CLK2_MARK, PORT234_FN6, MSEL4CR_MSEL27_1, | ||
1269 | MSEL4CR_MSEL26_0), \ | ||
1270 | PINMUX_DATA(LCD2D20_MARK, PORT234_FN7), | ||
1271 | PINMUX_DATA(MSIOF1_RSYNC_MARK, PORT235_FN1), \ | ||
1272 | PINMUX_DATA(MFG1_IN2_MARK, PORT235_FN3), \ | ||
1273 | PINMUX_DATA(VIO2_VD2_MARK, PORT235_FN6, MSEL4CR_MSEL27_1, | ||
1274 | MSEL4CR_MSEL26_0), \ | ||
1275 | PINMUX_DATA(LCD2D21_MARK, PORT235_FN7), | ||
1276 | PINMUX_DATA(MSIOF1_MCK0_MARK, PORT236_FN1), \ | ||
1277 | PINMUX_DATA(PORT236_I2C_SDA2_MARK, PORT236_FN2, MSEL2CR_MSEL17_0, | ||
1278 | MSEL2CR_MSEL16_0), | ||
1279 | PINMUX_DATA(MSIOF1_MCK1_MARK, PORT237_FN1), \ | ||
1280 | PINMUX_DATA(PORT237_I2C_SCL2_MARK, PORT237_FN2, MSEL2CR_MSEL17_0, | ||
1281 | MSEL2CR_MSEL16_0), | ||
1282 | PINMUX_DATA(MSIOF1_SS1_MARK, PORT238_FN1), \ | ||
1283 | PINMUX_DATA(VIO2_FIELD2_MARK, PORT238_FN6, MSEL4CR_MSEL27_1, | ||
1284 | MSEL4CR_MSEL26_0), \ | ||
1285 | PINMUX_DATA(LCD2D22_MARK, PORT238_FN7), | ||
1286 | PINMUX_DATA(MSIOF1_SS2_MARK, PORT239_FN1), \ | ||
1287 | PINMUX_DATA(VIO2_HD2_MARK, PORT239_FN6, MSEL4CR_MSEL27_1, | ||
1288 | MSEL4CR_MSEL26_0), \ | ||
1289 | PINMUX_DATA(LCD2D23_MARK, PORT239_FN7), | ||
1290 | PINMUX_DATA(SCIFA6_TXD_MARK, PORT240_FN1), | ||
1291 | PINMUX_DATA(PORT241_IRDA_OUT_MARK, PORT241_FN1, MSEL4CR_MSEL19_0), \ | ||
1292 | PINMUX_DATA(PORT241_IROUT_MARK, PORT241_FN2), \ | ||
1293 | PINMUX_DATA(MFG4_OUT1_MARK, PORT241_FN3), \ | ||
1294 | PINMUX_DATA(TPU4TO0_MARK, PORT241_FN4), | ||
1295 | PINMUX_DATA(PORT242_IRDA_IN_MARK, PORT242_FN1, MSEL4CR_MSEL19_0), \ | ||
1296 | PINMUX_DATA(MFG4_IN2_MARK, PORT242_FN3), | ||
1297 | PINMUX_DATA(PORT243_IRDA_FIRSEL_MARK, PORT243_FN1, MSEL4CR_MSEL19_0), \ | ||
1298 | PINMUX_DATA(PORT243_VIO_CKO2_MARK, PORT243_FN2), | ||
1299 | PINMUX_DATA(PORT244_SCIFA5_CTS__MARK, PORT244_FN1, MSEL4CR_MSEL21_0, | ||
1300 | MSEL4CR_MSEL20_0), \ | ||
1301 | PINMUX_DATA(MFG2_IN1_MARK, PORT244_FN2), \ | ||
1302 | PINMUX_DATA(PORT244_SCIFB_CTS__MARK, PORT244_FN3, MSEL4CR_MSEL22_1), \ | ||
1303 | PINMUX_DATA(MSIOF2R_RXD_MARK, PORT244_FN7, MSEL4CR_MSEL11_1), | ||
1304 | PINMUX_DATA(PORT245_SCIFA5_RTS__MARK, PORT245_FN1, MSEL4CR_MSEL21_0, | ||
1305 | MSEL4CR_MSEL20_0), \ | ||
1306 | PINMUX_DATA(MFG2_IN2_MARK, PORT245_FN2), \ | ||
1307 | PINMUX_DATA(PORT245_SCIFB_RTS__MARK, PORT245_FN3, MSEL4CR_MSEL22_1), \ | ||
1308 | PINMUX_DATA(MSIOF2R_TXD_MARK, PORT245_FN7, MSEL4CR_MSEL11_1), | ||
1309 | PINMUX_DATA(PORT246_SCIFA5_RXD_MARK, PORT246_FN1, MSEL4CR_MSEL21_0, | ||
1310 | MSEL4CR_MSEL20_0), \ | ||
1311 | PINMUX_DATA(MFG1_OUT1_MARK, PORT246_FN2), \ | ||
1312 | PINMUX_DATA(PORT246_SCIFB_RXD_MARK, PORT246_FN3, MSEL4CR_MSEL22_1), \ | ||
1313 | PINMUX_DATA(TPU1TO0_MARK, PORT246_FN4), | ||
1314 | PINMUX_DATA(PORT247_SCIFA5_TXD_MARK, PORT247_FN1, MSEL4CR_MSEL21_0, | ||
1315 | MSEL4CR_MSEL20_0), \ | ||
1316 | PINMUX_DATA(MFG3_OUT2_MARK, PORT247_FN2), \ | ||
1317 | PINMUX_DATA(PORT247_SCIFB_TXD_MARK, PORT247_FN3, MSEL4CR_MSEL22_1), \ | ||
1318 | PINMUX_DATA(TPU3TO1_MARK, PORT247_FN4), | ||
1319 | PINMUX_DATA(PORT248_SCIFA5_SCK_MARK, PORT248_FN1, MSEL4CR_MSEL21_0, | ||
1320 | MSEL4CR_MSEL20_0), \ | ||
1321 | PINMUX_DATA(MFG2_OUT1_MARK, PORT248_FN2), \ | ||
1322 | PINMUX_DATA(PORT248_SCIFB_SCK_MARK, PORT248_FN3, MSEL4CR_MSEL22_1), \ | ||
1323 | PINMUX_DATA(TPU2TO0_MARK, PORT248_FN4), \ | ||
1324 | PINMUX_DATA(PORT248_I2C_SCL3_MARK, PORT248_FN5, MSEL2CR_MSEL19_0, | ||
1325 | MSEL2CR_MSEL18_0), \ | ||
1326 | PINMUX_DATA(MSIOF2R_TSCK_MARK, PORT248_FN7, MSEL4CR_MSEL11_1), | ||
1327 | PINMUX_DATA(PORT249_IROUT_MARK, PORT249_FN1), \ | ||
1328 | PINMUX_DATA(MFG4_IN1_MARK, PORT249_FN2), \ | ||
1329 | PINMUX_DATA(PORT249_I2C_SDA3_MARK, PORT249_FN5, MSEL2CR_MSEL19_0, | ||
1330 | MSEL2CR_MSEL18_0), \ | ||
1331 | PINMUX_DATA(MSIOF2R_TSYNC_MARK, PORT249_FN7, MSEL4CR_MSEL11_1), | ||
1332 | PINMUX_DATA(SDHICLK0_MARK, PORT250_FN1), | ||
1333 | PINMUX_DATA(SDHICD0_MARK, PORT251_FN1), | ||
1334 | PINMUX_DATA(SDHID0_0_MARK, PORT252_FN1), | ||
1335 | PINMUX_DATA(SDHID0_1_MARK, PORT253_FN1), | ||
1336 | PINMUX_DATA(SDHID0_2_MARK, PORT254_FN1), | ||
1337 | PINMUX_DATA(SDHID0_3_MARK, PORT255_FN1), | ||
1338 | PINMUX_DATA(SDHICMD0_MARK, PORT256_FN1), | ||
1339 | PINMUX_DATA(SDHIWP0_MARK, PORT257_FN1), | ||
1340 | PINMUX_DATA(SDHICLK1_MARK, PORT258_FN1), | ||
1341 | PINMUX_DATA(SDHID1_0_MARK, PORT259_FN1), \ | ||
1342 | PINMUX_DATA(TS_SPSYNC2_MARK, PORT259_FN3), | ||
1343 | PINMUX_DATA(SDHID1_1_MARK, PORT260_FN1), \ | ||
1344 | PINMUX_DATA(TS_SDAT2_MARK, PORT260_FN3), | ||
1345 | PINMUX_DATA(SDHID1_2_MARK, PORT261_FN1), \ | ||
1346 | PINMUX_DATA(TS_SDEN2_MARK, PORT261_FN3), | ||
1347 | PINMUX_DATA(SDHID1_3_MARK, PORT262_FN1), \ | ||
1348 | PINMUX_DATA(TS_SCK2_MARK, PORT262_FN3), | ||
1349 | PINMUX_DATA(SDHICMD1_MARK, PORT263_FN1), | ||
1350 | PINMUX_DATA(SDHICLK2_MARK, PORT264_FN1), | ||
1351 | PINMUX_DATA(SDHID2_0_MARK, PORT265_FN1), \ | ||
1352 | PINMUX_DATA(TS_SPSYNC4_MARK, PORT265_FN3), | ||
1353 | PINMUX_DATA(SDHID2_1_MARK, PORT266_FN1), \ | ||
1354 | PINMUX_DATA(TS_SDAT4_MARK, PORT266_FN3), | ||
1355 | PINMUX_DATA(SDHID2_2_MARK, PORT267_FN1), \ | ||
1356 | PINMUX_DATA(TS_SDEN4_MARK, PORT267_FN3), | ||
1357 | PINMUX_DATA(SDHID2_3_MARK, PORT268_FN1), \ | ||
1358 | PINMUX_DATA(TS_SCK4_MARK, PORT268_FN3), | ||
1359 | PINMUX_DATA(SDHICMD2_MARK, PORT269_FN1), | ||
1360 | PINMUX_DATA(MMCCLK0_MARK, PORT270_FN1, MSEL4CR_MSEL15_0), | ||
1361 | PINMUX_DATA(MMCD0_0_MARK, PORT271_FN1, PORT271_IN_PU, | ||
1362 | MSEL4CR_MSEL15_0), | ||
1363 | PINMUX_DATA(MMCD0_1_MARK, PORT272_FN1, PORT272_IN_PU, | ||
1364 | MSEL4CR_MSEL15_0), | ||
1365 | PINMUX_DATA(MMCD0_2_MARK, PORT273_FN1, PORT273_IN_PU, | ||
1366 | MSEL4CR_MSEL15_0), | ||
1367 | PINMUX_DATA(MMCD0_3_MARK, PORT274_FN1, PORT274_IN_PU, | ||
1368 | MSEL4CR_MSEL15_0), | ||
1369 | PINMUX_DATA(MMCD0_4_MARK, PORT275_FN1, PORT275_IN_PU, | ||
1370 | MSEL4CR_MSEL15_0), \ | ||
1371 | PINMUX_DATA(TS_SPSYNC5_MARK, PORT275_FN3), | ||
1372 | PINMUX_DATA(MMCD0_5_MARK, PORT276_FN1, PORT276_IN_PU, | ||
1373 | MSEL4CR_MSEL15_0), \ | ||
1374 | PINMUX_DATA(TS_SDAT5_MARK, PORT276_FN3), | ||
1375 | PINMUX_DATA(MMCD0_6_MARK, PORT277_FN1, PORT277_IN_PU, | ||
1376 | MSEL4CR_MSEL15_0), \ | ||
1377 | PINMUX_DATA(TS_SDEN5_MARK, PORT277_FN3), | ||
1378 | PINMUX_DATA(MMCD0_7_MARK, PORT278_FN1, PORT278_IN_PU, | ||
1379 | MSEL4CR_MSEL15_0), \ | ||
1380 | PINMUX_DATA(TS_SCK5_MARK, PORT278_FN3), | ||
1381 | PINMUX_DATA(MMCCMD0_MARK, PORT279_FN1, PORT279_IN_PU, | ||
1382 | MSEL4CR_MSEL15_0), | ||
1383 | PINMUX_DATA(RESETOUTS__MARK, PORT281_FN1), \ | ||
1384 | PINMUX_DATA(EXTAL2OUT_MARK, PORT281_FN2), | ||
1385 | PINMUX_DATA(MCP_WAIT__MCP_FRB_MARK, PORT288_FN1), | ||
1386 | PINMUX_DATA(MCP_CKO_MARK, PORT289_FN1), \ | ||
1387 | PINMUX_DATA(MMCCLK1_MARK, PORT289_FN2, MSEL4CR_MSEL15_1), | ||
1388 | PINMUX_DATA(MCP_D15_MCP_NAF15_MARK, PORT290_FN1), | ||
1389 | PINMUX_DATA(MCP_D14_MCP_NAF14_MARK, PORT291_FN1), | ||
1390 | PINMUX_DATA(MCP_D13_MCP_NAF13_MARK, PORT292_FN1), | ||
1391 | PINMUX_DATA(MCP_D12_MCP_NAF12_MARK, PORT293_FN1), | ||
1392 | PINMUX_DATA(MCP_D11_MCP_NAF11_MARK, PORT294_FN1), | ||
1393 | PINMUX_DATA(MCP_D10_MCP_NAF10_MARK, PORT295_FN1), | ||
1394 | PINMUX_DATA(MCP_D9_MCP_NAF9_MARK, PORT296_FN1), | ||
1395 | PINMUX_DATA(MCP_D8_MCP_NAF8_MARK, PORT297_FN1), \ | ||
1396 | PINMUX_DATA(MMCCMD1_MARK, PORT297_FN2, MSEL4CR_MSEL15_1), | ||
1397 | PINMUX_DATA(MCP_D7_MCP_NAF7_MARK, PORT298_FN1), \ | ||
1398 | PINMUX_DATA(MMCD1_7_MARK, PORT298_FN2, MSEL4CR_MSEL15_1), | ||
1399 | |||
1400 | PINMUX_DATA(MCP_D6_MCP_NAF6_MARK, PORT299_FN1), \ | ||
1401 | PINMUX_DATA(MMCD1_6_MARK, PORT299_FN2, MSEL4CR_MSEL15_1), | ||
1402 | PINMUX_DATA(MCP_D5_MCP_NAF5_MARK, PORT300_FN1), \ | ||
1403 | PINMUX_DATA(MMCD1_5_MARK, PORT300_FN2, MSEL4CR_MSEL15_1), | ||
1404 | PINMUX_DATA(MCP_D4_MCP_NAF4_MARK, PORT301_FN1), \ | ||
1405 | PINMUX_DATA(MMCD1_4_MARK, PORT301_FN2, MSEL4CR_MSEL15_1), | ||
1406 | PINMUX_DATA(MCP_D3_MCP_NAF3_MARK, PORT302_FN1), \ | ||
1407 | PINMUX_DATA(MMCD1_3_MARK, PORT302_FN2, MSEL4CR_MSEL15_1), | ||
1408 | PINMUX_DATA(MCP_D2_MCP_NAF2_MARK, PORT303_FN1), \ | ||
1409 | PINMUX_DATA(MMCD1_2_MARK, PORT303_FN2, MSEL4CR_MSEL15_1), | ||
1410 | PINMUX_DATA(MCP_D1_MCP_NAF1_MARK, PORT304_FN1), \ | ||
1411 | PINMUX_DATA(MMCD1_1_MARK, PORT304_FN2, MSEL4CR_MSEL15_1), | ||
1412 | PINMUX_DATA(MCP_D0_MCP_NAF0_MARK, PORT305_FN1), \ | ||
1413 | PINMUX_DATA(MMCD1_0_MARK, PORT305_FN2, MSEL4CR_MSEL15_1), | ||
1414 | PINMUX_DATA(MCP_NBRSTOUT__MARK, PORT306_FN1), | ||
1415 | PINMUX_DATA(MCP_WE0__MCP_FWE_MARK, PORT309_FN1), \ | ||
1416 | PINMUX_DATA(MCP_RDWR_MCP_FWE_MARK, PORT309_FN2), | ||
1417 | |||
1418 | /* MSEL2 special cases */ | ||
1419 | PINMUX_DATA(TSIF2_TS_XX1_MARK, MSEL2CR_MSEL14_0, MSEL2CR_MSEL13_0, | ||
1420 | MSEL2CR_MSEL12_0), | ||
1421 | PINMUX_DATA(TSIF2_TS_XX2_MARK, MSEL2CR_MSEL14_0, MSEL2CR_MSEL13_0, | ||
1422 | MSEL2CR_MSEL12_1), | ||
1423 | PINMUX_DATA(TSIF2_TS_XX3_MARK, MSEL2CR_MSEL14_0, MSEL2CR_MSEL13_1, | ||
1424 | MSEL2CR_MSEL12_0), | ||
1425 | PINMUX_DATA(TSIF2_TS_XX4_MARK, MSEL2CR_MSEL14_0, MSEL2CR_MSEL13_1, | ||
1426 | MSEL2CR_MSEL12_1), | ||
1427 | PINMUX_DATA(TSIF2_TS_XX5_MARK, MSEL2CR_MSEL14_1, MSEL2CR_MSEL13_0, | ||
1428 | MSEL2CR_MSEL12_0), | ||
1429 | PINMUX_DATA(TSIF1_TS_XX1_MARK, MSEL2CR_MSEL11_0, MSEL2CR_MSEL10_0, | ||
1430 | MSEL2CR_MSEL9_0), | ||
1431 | PINMUX_DATA(TSIF1_TS_XX2_MARK, MSEL2CR_MSEL11_0, MSEL2CR_MSEL10_0, | ||
1432 | MSEL2CR_MSEL9_1), | ||
1433 | PINMUX_DATA(TSIF1_TS_XX3_MARK, MSEL2CR_MSEL11_0, MSEL2CR_MSEL10_1, | ||
1434 | MSEL2CR_MSEL9_0), | ||
1435 | PINMUX_DATA(TSIF1_TS_XX4_MARK, MSEL2CR_MSEL11_0, MSEL2CR_MSEL10_1, | ||
1436 | MSEL2CR_MSEL9_1), | ||
1437 | PINMUX_DATA(TSIF1_TS_XX5_MARK, MSEL2CR_MSEL11_1, MSEL2CR_MSEL10_0, | ||
1438 | MSEL2CR_MSEL9_0), | ||
1439 | PINMUX_DATA(TSIF0_TS_XX1_MARK, MSEL2CR_MSEL8_0, MSEL2CR_MSEL7_0, | ||
1440 | MSEL2CR_MSEL6_0), | ||
1441 | PINMUX_DATA(TSIF0_TS_XX2_MARK, MSEL2CR_MSEL8_0, MSEL2CR_MSEL7_0, | ||
1442 | MSEL2CR_MSEL6_1), | ||
1443 | PINMUX_DATA(TSIF0_TS_XX3_MARK, MSEL2CR_MSEL8_0, MSEL2CR_MSEL7_1, | ||
1444 | MSEL2CR_MSEL6_0), | ||
1445 | PINMUX_DATA(TSIF0_TS_XX4_MARK, MSEL2CR_MSEL8_0, MSEL2CR_MSEL7_1, | ||
1446 | MSEL2CR_MSEL6_1), | ||
1447 | PINMUX_DATA(TSIF0_TS_XX5_MARK, MSEL2CR_MSEL8_1, MSEL2CR_MSEL7_0, | ||
1448 | MSEL2CR_MSEL6_0), | ||
1449 | PINMUX_DATA(MST1_TS_XX1_MARK, MSEL2CR_MSEL5_0, MSEL2CR_MSEL4_0, | ||
1450 | MSEL2CR_MSEL3_0), | ||
1451 | PINMUX_DATA(MST1_TS_XX2_MARK, MSEL2CR_MSEL5_0, MSEL2CR_MSEL4_0, | ||
1452 | MSEL2CR_MSEL3_1), | ||
1453 | PINMUX_DATA(MST1_TS_XX3_MARK, MSEL2CR_MSEL5_0, MSEL2CR_MSEL4_1, | ||
1454 | MSEL2CR_MSEL3_0), | ||
1455 | PINMUX_DATA(MST1_TS_XX4_MARK, MSEL2CR_MSEL5_0, MSEL2CR_MSEL4_1, | ||
1456 | MSEL2CR_MSEL3_1), | ||
1457 | PINMUX_DATA(MST1_TS_XX5_MARK, MSEL2CR_MSEL5_1, MSEL2CR_MSEL4_0, | ||
1458 | MSEL2CR_MSEL3_0), | ||
1459 | PINMUX_DATA(MST0_TS_XX1_MARK, MSEL2CR_MSEL2_0, MSEL2CR_MSEL1_0, | ||
1460 | MSEL2CR_MSEL0_0), | ||
1461 | PINMUX_DATA(MST0_TS_XX2_MARK, MSEL2CR_MSEL2_0, MSEL2CR_MSEL1_0, | ||
1462 | MSEL2CR_MSEL0_1), | ||
1463 | PINMUX_DATA(MST0_TS_XX3_MARK, MSEL2CR_MSEL2_0, MSEL2CR_MSEL1_1, | ||
1464 | MSEL2CR_MSEL0_0), | ||
1465 | PINMUX_DATA(MST0_TS_XX4_MARK, MSEL2CR_MSEL2_0, MSEL2CR_MSEL1_1, | ||
1466 | MSEL2CR_MSEL0_1), | ||
1467 | PINMUX_DATA(MST0_TS_XX5_MARK, MSEL2CR_MSEL2_1, MSEL2CR_MSEL1_0, | ||
1468 | MSEL2CR_MSEL0_0), | ||
1469 | |||
1470 | /* MSEL3 special cases */ | ||
1471 | PINMUX_DATA(SDHI0_VCCQ_MC0_ON_MARK, MSEL3CR_MSEL28_1), | ||
1472 | PINMUX_DATA(SDHI0_VCCQ_MC0_OFF_MARK, MSEL3CR_MSEL28_0), | ||
1473 | PINMUX_DATA(DEBUG_MON_VIO_MARK, MSEL3CR_MSEL15_0), | ||
1474 | PINMUX_DATA(DEBUG_MON_LCDD_MARK, MSEL3CR_MSEL15_1), | ||
1475 | PINMUX_DATA(LCDC_LCDC0_MARK, MSEL3CR_MSEL6_0), | ||
1476 | PINMUX_DATA(LCDC_LCDC1_MARK, MSEL3CR_MSEL6_1), | ||
1477 | |||
1478 | /* MSEL4 special cases */ | ||
1479 | PINMUX_DATA(IRQ9_MEM_INT_MARK, MSEL4CR_MSEL29_0), | ||
1480 | PINMUX_DATA(IRQ9_MCP_INT_MARK, MSEL4CR_MSEL29_1), | ||
1481 | PINMUX_DATA(A11_MARK, MSEL4CR_MSEL13_0, MSEL4CR_MSEL12_0), | ||
1482 | PINMUX_DATA(KEYOUT8_MARK, MSEL4CR_MSEL13_0, MSEL4CR_MSEL12_1), | ||
1483 | PINMUX_DATA(TPU4TO3_MARK, MSEL4CR_MSEL13_1, MSEL4CR_MSEL12_0), | ||
1484 | PINMUX_DATA(RESETA_N_PU_ON_MARK, MSEL4CR_MSEL4_0), | ||
1485 | PINMUX_DATA(RESETA_N_PU_OFF_MARK, MSEL4CR_MSEL4_1), | ||
1486 | PINMUX_DATA(EDBGREQ_PD_MARK, MSEL4CR_MSEL1_0), | ||
1487 | PINMUX_DATA(EDBGREQ_PU_MARK, MSEL4CR_MSEL1_1), | ||
1488 | |||
1489 | /* Functions with pull-ups */ | ||
1490 | PINMUX_DATA(KEYIN0_PU_MARK, PORT66_FN2, PORT66_IN_PU), | ||
1491 | PINMUX_DATA(KEYIN1_PU_MARK, PORT67_FN2, PORT67_IN_PU), | ||
1492 | PINMUX_DATA(KEYIN2_PU_MARK, PORT68_FN2, PORT68_IN_PU), | ||
1493 | PINMUX_DATA(KEYIN3_PU_MARK, PORT69_FN2, PORT69_IN_PU), | ||
1494 | PINMUX_DATA(KEYIN4_PU_MARK, PORT70_FN2, PORT70_IN_PU), | ||
1495 | PINMUX_DATA(KEYIN5_PU_MARK, PORT71_FN2, PORT71_IN_PU), | ||
1496 | PINMUX_DATA(KEYIN6_PU_MARK, PORT72_FN2, PORT72_IN_PU), | ||
1497 | PINMUX_DATA(KEYIN7_PU_MARK, PORT73_FN2, PORT73_IN_PU), | ||
1498 | |||
1499 | PINMUX_DATA(SDHICD0_PU_MARK, PORT251_FN1, PORT251_IN_PU), | ||
1500 | PINMUX_DATA(SDHID0_0_PU_MARK, PORT252_FN1, PORT252_IN_PU), | ||
1501 | PINMUX_DATA(SDHID0_1_PU_MARK, PORT253_FN1, PORT253_IN_PU), | ||
1502 | PINMUX_DATA(SDHID0_2_PU_MARK, PORT254_FN1, PORT254_IN_PU), | ||
1503 | PINMUX_DATA(SDHID0_3_PU_MARK, PORT255_FN1, PORT255_IN_PU), | ||
1504 | PINMUX_DATA(SDHICMD0_PU_MARK, PORT256_FN1, PORT256_IN_PU), | ||
1505 | PINMUX_DATA(SDHIWP0_PU_MARK, PORT257_FN1, PORT256_IN_PU), | ||
1506 | PINMUX_DATA(SDHID1_0_PU_MARK, PORT259_FN1, PORT259_IN_PU), | ||
1507 | PINMUX_DATA(SDHID1_1_PU_MARK, PORT260_FN1, PORT260_IN_PU), | ||
1508 | PINMUX_DATA(SDHID1_2_PU_MARK, PORT261_FN1, PORT261_IN_PU), | ||
1509 | PINMUX_DATA(SDHID1_3_PU_MARK, PORT262_FN1, PORT262_IN_PU), | ||
1510 | PINMUX_DATA(SDHICMD1_PU_MARK, PORT263_FN1, PORT263_IN_PU), | ||
1511 | PINMUX_DATA(SDHID2_0_PU_MARK, PORT265_FN1, PORT265_IN_PU), | ||
1512 | PINMUX_DATA(SDHID2_1_PU_MARK, PORT266_FN1, PORT266_IN_PU), | ||
1513 | PINMUX_DATA(SDHID2_2_PU_MARK, PORT267_FN1, PORT267_IN_PU), | ||
1514 | PINMUX_DATA(SDHID2_3_PU_MARK, PORT268_FN1, PORT268_IN_PU), | ||
1515 | PINMUX_DATA(SDHICMD2_PU_MARK, PORT269_FN1, PORT269_IN_PU), | ||
1516 | |||
1517 | PINMUX_DATA(MMCCMD0_PU_MARK, PORT279_FN1, PORT279_IN_PU, | ||
1518 | MSEL4CR_MSEL15_0), | ||
1519 | PINMUX_DATA(MMCCMD1_PU_MARK, PORT297_FN2, PORT297_IN_PU, | ||
1520 | MSEL4CR_MSEL15_1), | ||
1521 | |||
1522 | PINMUX_DATA(MMCD0_0_PU_MARK, | ||
1523 | PORT271_FN1, PORT271_IN_PU, MSEL4CR_MSEL15_0), | ||
1524 | PINMUX_DATA(MMCD0_1_PU_MARK, | ||
1525 | PORT272_FN1, PORT272_IN_PU, MSEL4CR_MSEL15_0), | ||
1526 | PINMUX_DATA(MMCD0_2_PU_MARK, | ||
1527 | PORT273_FN1, PORT273_IN_PU, MSEL4CR_MSEL15_0), | ||
1528 | PINMUX_DATA(MMCD0_3_PU_MARK, | ||
1529 | PORT274_FN1, PORT274_IN_PU, MSEL4CR_MSEL15_0), | ||
1530 | PINMUX_DATA(MMCD0_4_PU_MARK, | ||
1531 | PORT275_FN1, PORT275_IN_PU, MSEL4CR_MSEL15_0), | ||
1532 | PINMUX_DATA(MMCD0_5_PU_MARK, | ||
1533 | PORT276_FN1, PORT276_IN_PU, MSEL4CR_MSEL15_0), | ||
1534 | PINMUX_DATA(MMCD0_6_PU_MARK, | ||
1535 | PORT277_FN1, PORT277_IN_PU, MSEL4CR_MSEL15_0), | ||
1536 | PINMUX_DATA(MMCD0_7_PU_MARK, | ||
1537 | PORT278_FN1, PORT278_IN_PU, MSEL4CR_MSEL15_0), | ||
1538 | |||
1539 | PINMUX_DATA(FSIBISLD_PU_MARK, PORT39_FN1, PORT39_IN_PU), | ||
1540 | PINMUX_DATA(FSIACK_PU_MARK, PORT49_FN1, PORT49_IN_PU), | ||
1541 | PINMUX_DATA(FSIAILR_PU_MARK, PORT50_FN5, PORT50_IN_PU), | ||
1542 | PINMUX_DATA(FSIAIBT_PU_MARK, PORT51_FN5, PORT51_IN_PU), | ||
1543 | PINMUX_DATA(FSIAISLD_PU_MARK, PORT55_FN1, PORT55_IN_PU), | ||
1544 | }; | ||
1545 | |||
1546 | static struct pinmux_gpio pinmux_gpios[] = { | ||
1547 | GPIO_PORT_ALL(), | ||
1548 | |||
1549 | /* Table 25-1 (Functions 0-7) */ | ||
1550 | GPIO_FN(VBUS_0), | ||
1551 | GPIO_FN(GPI0), | ||
1552 | GPIO_FN(GPI1), | ||
1553 | GPIO_FN(GPI2), | ||
1554 | GPIO_FN(GPI3), | ||
1555 | GPIO_FN(GPI4), | ||
1556 | GPIO_FN(GPI5), | ||
1557 | GPIO_FN(GPI6), | ||
1558 | GPIO_FN(GPI7), | ||
1559 | GPIO_FN(SCIFA7_RXD), | ||
1560 | GPIO_FN(SCIFA7_CTS_), | ||
1561 | GPIO_FN(GPO7), \ | ||
1562 | GPIO_FN(MFG0_OUT2), | ||
1563 | GPIO_FN(GPO6), \ | ||
1564 | GPIO_FN(MFG1_OUT2), | ||
1565 | GPIO_FN(GPO5), \ | ||
1566 | GPIO_FN(SCIFA0_SCK), \ | ||
1567 | GPIO_FN(FSICOSLDT3), \ | ||
1568 | GPIO_FN(PORT16_VIO_CKOR), | ||
1569 | GPIO_FN(SCIFA0_TXD), | ||
1570 | GPIO_FN(SCIFA7_TXD), | ||
1571 | GPIO_FN(SCIFA7_RTS_), \ | ||
1572 | GPIO_FN(PORT19_VIO_CKO2), | ||
1573 | GPIO_FN(GPO0), | ||
1574 | GPIO_FN(GPO1), | ||
1575 | GPIO_FN(GPO2), \ | ||
1576 | GPIO_FN(STATUS0), | ||
1577 | GPIO_FN(GPO3), \ | ||
1578 | GPIO_FN(STATUS1), | ||
1579 | GPIO_FN(GPO4), \ | ||
1580 | GPIO_FN(STATUS2), | ||
1581 | GPIO_FN(VINT), | ||
1582 | GPIO_FN(TCKON), | ||
1583 | GPIO_FN(XDVFS1), \ | ||
1584 | GPIO_FN(PORT27_I2C_SCL2), \ | ||
1585 | GPIO_FN(PORT27_I2C_SCL3), \ | ||
1586 | GPIO_FN(MFG0_OUT1), \ | ||
1587 | GPIO_FN(PORT27_IROUT), | ||
1588 | GPIO_FN(XDVFS2), \ | ||
1589 | GPIO_FN(PORT28_I2C_SDA2), \ | ||
1590 | GPIO_FN(PORT28_I2C_SDA3), \ | ||
1591 | GPIO_FN(PORT28_TPU1TO1), | ||
1592 | GPIO_FN(SIM_RST), \ | ||
1593 | GPIO_FN(PORT29_TPU1TO1), | ||
1594 | GPIO_FN(SIM_CLK), \ | ||
1595 | GPIO_FN(PORT30_VIO_CKOR), | ||
1596 | GPIO_FN(SIM_D), \ | ||
1597 | GPIO_FN(PORT31_IROUT), | ||
1598 | GPIO_FN(SCIFA4_TXD), | ||
1599 | GPIO_FN(SCIFA4_RXD), \ | ||
1600 | GPIO_FN(XWUP), | ||
1601 | GPIO_FN(SCIFA4_RTS_), | ||
1602 | GPIO_FN(SCIFA4_CTS_), | ||
1603 | GPIO_FN(FSIBOBT), \ | ||
1604 | GPIO_FN(FSIBIBT), | ||
1605 | GPIO_FN(FSIBOLR), \ | ||
1606 | GPIO_FN(FSIBILR), | ||
1607 | GPIO_FN(FSIBOSLD), | ||
1608 | GPIO_FN(FSIBISLD), | ||
1609 | GPIO_FN(VACK), | ||
1610 | GPIO_FN(XTAL1L), | ||
1611 | GPIO_FN(SCIFA0_RTS_), \ | ||
1612 | GPIO_FN(FSICOSLDT2), | ||
1613 | GPIO_FN(SCIFA0_RXD), | ||
1614 | GPIO_FN(SCIFA0_CTS_), \ | ||
1615 | GPIO_FN(FSICOSLDT1), | ||
1616 | GPIO_FN(FSICOBT), \ | ||
1617 | GPIO_FN(FSICIBT), \ | ||
1618 | GPIO_FN(FSIDOBT), \ | ||
1619 | GPIO_FN(FSIDIBT), | ||
1620 | GPIO_FN(FSICOLR), \ | ||
1621 | GPIO_FN(FSICILR), \ | ||
1622 | GPIO_FN(FSIDOLR), \ | ||
1623 | GPIO_FN(FSIDILR), | ||
1624 | GPIO_FN(FSICOSLD), \ | ||
1625 | GPIO_FN(PORT47_FSICSPDIF), | ||
1626 | GPIO_FN(FSICISLD), \ | ||
1627 | GPIO_FN(FSIDISLD), | ||
1628 | GPIO_FN(FSIACK), \ | ||
1629 | GPIO_FN(PORT49_IRDA_OUT), \ | ||
1630 | GPIO_FN(PORT49_IROUT), \ | ||
1631 | GPIO_FN(FSIAOMC), | ||
1632 | GPIO_FN(FSIAOLR), \ | ||
1633 | GPIO_FN(BBIF2_TSYNC2), \ | ||
1634 | GPIO_FN(TPU2TO2), \ | ||
1635 | GPIO_FN(FSIAILR), | ||
1636 | |||
1637 | GPIO_FN(FSIAOBT), \ | ||
1638 | GPIO_FN(BBIF2_TSCK2), \ | ||
1639 | GPIO_FN(TPU2TO3), \ | ||
1640 | GPIO_FN(FSIAIBT), | ||
1641 | GPIO_FN(FSIAOSLD), \ | ||
1642 | GPIO_FN(BBIF2_TXD2), | ||
1643 | GPIO_FN(FSIASPDIF), \ | ||
1644 | GPIO_FN(PORT53_IRDA_IN), \ | ||
1645 | GPIO_FN(TPU3TO3), \ | ||
1646 | GPIO_FN(FSIBSPDIF), \ | ||
1647 | GPIO_FN(PORT53_FSICSPDIF), | ||
1648 | GPIO_FN(FSIBCK), \ | ||
1649 | GPIO_FN(PORT54_IRDA_FIRSEL), \ | ||
1650 | GPIO_FN(TPU3TO2), \ | ||
1651 | GPIO_FN(FSIBOMC), \ | ||
1652 | GPIO_FN(FSICCK), \ | ||
1653 | GPIO_FN(FSICOMC), | ||
1654 | GPIO_FN(FSIAISLD), \ | ||
1655 | GPIO_FN(TPU0TO0), | ||
1656 | GPIO_FN(A0), \ | ||
1657 | GPIO_FN(BS_), | ||
1658 | GPIO_FN(A12), \ | ||
1659 | GPIO_FN(PORT58_KEYOUT7), \ | ||
1660 | GPIO_FN(TPU4TO2), | ||
1661 | GPIO_FN(A13), \ | ||
1662 | GPIO_FN(PORT59_KEYOUT6), \ | ||
1663 | GPIO_FN(TPU0TO1), | ||
1664 | GPIO_FN(A14), \ | ||
1665 | GPIO_FN(KEYOUT5), | ||
1666 | GPIO_FN(A15), \ | ||
1667 | GPIO_FN(KEYOUT4), | ||
1668 | GPIO_FN(A16), \ | ||
1669 | GPIO_FN(KEYOUT3), \ | ||
1670 | GPIO_FN(MSIOF0_SS1), | ||
1671 | GPIO_FN(A17), \ | ||
1672 | GPIO_FN(KEYOUT2), \ | ||
1673 | GPIO_FN(MSIOF0_TSYNC), | ||
1674 | GPIO_FN(A18), \ | ||
1675 | GPIO_FN(KEYOUT1), \ | ||
1676 | GPIO_FN(MSIOF0_TSCK), | ||
1677 | GPIO_FN(A19), \ | ||
1678 | GPIO_FN(KEYOUT0), \ | ||
1679 | GPIO_FN(MSIOF0_TXD), | ||
1680 | GPIO_FN(A20), \ | ||
1681 | GPIO_FN(KEYIN0), \ | ||
1682 | GPIO_FN(MSIOF0_RSCK), | ||
1683 | GPIO_FN(A21), \ | ||
1684 | GPIO_FN(KEYIN1), \ | ||
1685 | GPIO_FN(MSIOF0_RSYNC), | ||
1686 | GPIO_FN(A22), \ | ||
1687 | GPIO_FN(KEYIN2), \ | ||
1688 | GPIO_FN(MSIOF0_MCK0), | ||
1689 | GPIO_FN(A23), \ | ||
1690 | GPIO_FN(KEYIN3), \ | ||
1691 | GPIO_FN(MSIOF0_MCK1), | ||
1692 | GPIO_FN(A24), \ | ||
1693 | GPIO_FN(KEYIN4), \ | ||
1694 | GPIO_FN(MSIOF0_RXD), | ||
1695 | GPIO_FN(A25), \ | ||
1696 | GPIO_FN(KEYIN5), \ | ||
1697 | GPIO_FN(MSIOF0_SS2), | ||
1698 | GPIO_FN(A26), \ | ||
1699 | GPIO_FN(KEYIN6), | ||
1700 | GPIO_FN(KEYIN7), | ||
1701 | GPIO_FN(D0_NAF0), | ||
1702 | GPIO_FN(D1_NAF1), | ||
1703 | GPIO_FN(D2_NAF2), | ||
1704 | GPIO_FN(D3_NAF3), | ||
1705 | GPIO_FN(D4_NAF4), | ||
1706 | GPIO_FN(D5_NAF5), | ||
1707 | GPIO_FN(D6_NAF6), | ||
1708 | GPIO_FN(D7_NAF7), | ||
1709 | GPIO_FN(D8_NAF8), | ||
1710 | GPIO_FN(D9_NAF9), | ||
1711 | GPIO_FN(D10_NAF10), | ||
1712 | GPIO_FN(D11_NAF11), | ||
1713 | GPIO_FN(D12_NAF12), | ||
1714 | GPIO_FN(D13_NAF13), | ||
1715 | GPIO_FN(D14_NAF14), | ||
1716 | GPIO_FN(D15_NAF15), | ||
1717 | GPIO_FN(CS4_), | ||
1718 | GPIO_FN(CS5A_), \ | ||
1719 | GPIO_FN(PORT91_RDWR), | ||
1720 | GPIO_FN(CS5B_), \ | ||
1721 | GPIO_FN(FCE1_), | ||
1722 | GPIO_FN(CS6B_), \ | ||
1723 | GPIO_FN(DACK0), | ||
1724 | GPIO_FN(FCE0_), \ | ||
1725 | GPIO_FN(CS6A_), | ||
1726 | GPIO_FN(WAIT_), \ | ||
1727 | GPIO_FN(DREQ0), | ||
1728 | GPIO_FN(RD__FSC), | ||
1729 | GPIO_FN(WE0__FWE), \ | ||
1730 | GPIO_FN(RDWR_FWE), | ||
1731 | GPIO_FN(WE1_), | ||
1732 | GPIO_FN(FRB), | ||
1733 | GPIO_FN(CKO), | ||
1734 | GPIO_FN(NBRSTOUT_), | ||
1735 | GPIO_FN(NBRST_), | ||
1736 | GPIO_FN(BBIF2_TXD), | ||
1737 | GPIO_FN(BBIF2_RXD), | ||
1738 | GPIO_FN(BBIF2_SYNC), | ||
1739 | GPIO_FN(BBIF2_SCK), | ||
1740 | GPIO_FN(SCIFA3_CTS_), \ | ||
1741 | GPIO_FN(MFG3_IN2), | ||
1742 | GPIO_FN(SCIFA3_RXD), \ | ||
1743 | GPIO_FN(MFG3_IN1), | ||
1744 | GPIO_FN(BBIF1_SS2), \ | ||
1745 | GPIO_FN(SCIFA3_RTS_), \ | ||
1746 | GPIO_FN(MFG3_OUT1), | ||
1747 | GPIO_FN(SCIFA3_TXD), | ||
1748 | GPIO_FN(HSI_RX_DATA), \ | ||
1749 | GPIO_FN(BBIF1_RXD), | ||
1750 | GPIO_FN(HSI_TX_WAKE), \ | ||
1751 | GPIO_FN(BBIF1_TSCK), | ||
1752 | GPIO_FN(HSI_TX_DATA), \ | ||
1753 | GPIO_FN(BBIF1_TSYNC), | ||
1754 | GPIO_FN(HSI_TX_READY), \ | ||
1755 | GPIO_FN(BBIF1_TXD), | ||
1756 | GPIO_FN(HSI_RX_READY), \ | ||
1757 | GPIO_FN(BBIF1_RSCK), \ | ||
1758 | GPIO_FN(PORT115_I2C_SCL2), \ | ||
1759 | GPIO_FN(PORT115_I2C_SCL3), | ||
1760 | GPIO_FN(HSI_RX_WAKE), \ | ||
1761 | GPIO_FN(BBIF1_RSYNC), \ | ||
1762 | GPIO_FN(PORT116_I2C_SDA2), \ | ||
1763 | GPIO_FN(PORT116_I2C_SDA3), | ||
1764 | GPIO_FN(HSI_RX_FLAG), \ | ||
1765 | GPIO_FN(BBIF1_SS1), \ | ||
1766 | GPIO_FN(BBIF1_FLOW), | ||
1767 | GPIO_FN(HSI_TX_FLAG), | ||
1768 | GPIO_FN(VIO_VD), \ | ||
1769 | GPIO_FN(PORT128_LCD2VSYN), \ | ||
1770 | GPIO_FN(VIO2_VD), \ | ||
1771 | GPIO_FN(LCD2D0), | ||
1772 | |||
1773 | GPIO_FN(VIO_HD), \ | ||
1774 | GPIO_FN(PORT129_LCD2HSYN), \ | ||
1775 | GPIO_FN(PORT129_LCD2CS_), \ | ||
1776 | GPIO_FN(VIO2_HD), \ | ||
1777 | GPIO_FN(LCD2D1), | ||
1778 | GPIO_FN(VIO_D0), \ | ||
1779 | GPIO_FN(PORT130_MSIOF2_RXD), \ | ||
1780 | GPIO_FN(LCD2D10), | ||
1781 | GPIO_FN(VIO_D1), \ | ||
1782 | GPIO_FN(PORT131_KEYOUT6), \ | ||
1783 | GPIO_FN(PORT131_MSIOF2_SS1), \ | ||
1784 | GPIO_FN(PORT131_KEYOUT11), \ | ||
1785 | GPIO_FN(LCD2D11), | ||
1786 | GPIO_FN(VIO_D2), \ | ||
1787 | GPIO_FN(PORT132_KEYOUT7), \ | ||
1788 | GPIO_FN(PORT132_MSIOF2_SS2), \ | ||
1789 | GPIO_FN(PORT132_KEYOUT10), \ | ||
1790 | GPIO_FN(LCD2D12), | ||
1791 | GPIO_FN(VIO_D3), \ | ||
1792 | GPIO_FN(MSIOF2_TSYNC), \ | ||
1793 | GPIO_FN(LCD2D13), | ||
1794 | GPIO_FN(VIO_D4), \ | ||
1795 | GPIO_FN(MSIOF2_TXD), \ | ||
1796 | GPIO_FN(LCD2D14), | ||
1797 | GPIO_FN(VIO_D5), \ | ||
1798 | GPIO_FN(MSIOF2_TSCK), \ | ||
1799 | GPIO_FN(LCD2D15), | ||
1800 | GPIO_FN(VIO_D6), \ | ||
1801 | GPIO_FN(PORT136_KEYOUT8), \ | ||
1802 | GPIO_FN(LCD2D16), | ||
1803 | GPIO_FN(VIO_D7), \ | ||
1804 | GPIO_FN(PORT137_KEYOUT9), \ | ||
1805 | GPIO_FN(LCD2D17), | ||
1806 | GPIO_FN(VIO_D8), \ | ||
1807 | GPIO_FN(PORT138_KEYOUT8), \ | ||
1808 | GPIO_FN(VIO2_D0), \ | ||
1809 | GPIO_FN(LCD2D6), | ||
1810 | GPIO_FN(VIO_D9), \ | ||
1811 | GPIO_FN(PORT139_KEYOUT9), \ | ||
1812 | GPIO_FN(VIO2_D1), \ | ||
1813 | GPIO_FN(LCD2D7), | ||
1814 | GPIO_FN(VIO_D10), \ | ||
1815 | GPIO_FN(TPU0TO2), \ | ||
1816 | GPIO_FN(VIO2_D2), \ | ||
1817 | GPIO_FN(LCD2D8), | ||
1818 | GPIO_FN(VIO_D11), \ | ||
1819 | GPIO_FN(TPU0TO3), \ | ||
1820 | GPIO_FN(VIO2_D3), \ | ||
1821 | GPIO_FN(LCD2D9), | ||
1822 | GPIO_FN(VIO_D12), \ | ||
1823 | GPIO_FN(PORT142_KEYOUT10), \ | ||
1824 | GPIO_FN(VIO2_D4), \ | ||
1825 | GPIO_FN(LCD2D2), | ||
1826 | GPIO_FN(VIO_D13), \ | ||
1827 | GPIO_FN(PORT143_KEYOUT11), \ | ||
1828 | GPIO_FN(PORT143_KEYOUT6), \ | ||
1829 | GPIO_FN(VIO2_D5), \ | ||
1830 | GPIO_FN(LCD2D3), | ||
1831 | GPIO_FN(VIO_D14), \ | ||
1832 | GPIO_FN(PORT144_KEYOUT7), \ | ||
1833 | GPIO_FN(VIO2_D6), \ | ||
1834 | GPIO_FN(LCD2D4), | ||
1835 | GPIO_FN(VIO_D15), \ | ||
1836 | GPIO_FN(TPU1TO3), \ | ||
1837 | GPIO_FN(PORT145_LCD2DISP), \ | ||
1838 | GPIO_FN(PORT145_LCD2RS), \ | ||
1839 | GPIO_FN(VIO2_D7), \ | ||
1840 | GPIO_FN(LCD2D5), | ||
1841 | GPIO_FN(VIO_CLK), \ | ||
1842 | GPIO_FN(LCD2DCK), \ | ||
1843 | GPIO_FN(PORT146_LCD2WR_), \ | ||
1844 | GPIO_FN(VIO2_CLK), \ | ||
1845 | GPIO_FN(LCD2D18), | ||
1846 | GPIO_FN(VIO_FIELD), \ | ||
1847 | GPIO_FN(LCD2RD_), \ | ||
1848 | GPIO_FN(VIO2_FIELD), \ | ||
1849 | GPIO_FN(LCD2D19), | ||
1850 | GPIO_FN(VIO_CKO), | ||
1851 | GPIO_FN(A27), \ | ||
1852 | GPIO_FN(PORT149_RDWR), \ | ||
1853 | GPIO_FN(MFG0_IN1), \ | ||
1854 | GPIO_FN(PORT149_KEYOUT9), | ||
1855 | GPIO_FN(MFG0_IN2), | ||
1856 | GPIO_FN(TS_SPSYNC3), \ | ||
1857 | GPIO_FN(MSIOF2_RSCK), | ||
1858 | GPIO_FN(TS_SDAT3), \ | ||
1859 | GPIO_FN(MSIOF2_RSYNC), | ||
1860 | GPIO_FN(TPU1TO2), \ | ||
1861 | GPIO_FN(TS_SDEN3), \ | ||
1862 | GPIO_FN(PORT153_MSIOF2_SS1), | ||
1863 | GPIO_FN(SCIFA2_TXD1), \ | ||
1864 | GPIO_FN(MSIOF2_MCK0), | ||
1865 | GPIO_FN(SCIFA2_RXD1), \ | ||
1866 | GPIO_FN(MSIOF2_MCK1), | ||
1867 | GPIO_FN(SCIFA2_RTS1_), \ | ||
1868 | GPIO_FN(PORT156_MSIOF2_SS2), | ||
1869 | GPIO_FN(SCIFA2_CTS1_), \ | ||
1870 | GPIO_FN(PORT157_MSIOF2_RXD), | ||
1871 | GPIO_FN(DINT_), \ | ||
1872 | GPIO_FN(SCIFA2_SCK1), \ | ||
1873 | GPIO_FN(TS_SCK3), | ||
1874 | GPIO_FN(PORT159_SCIFB_SCK), \ | ||
1875 | GPIO_FN(PORT159_SCIFA5_SCK), \ | ||
1876 | GPIO_FN(NMI), | ||
1877 | GPIO_FN(PORT160_SCIFB_TXD), \ | ||
1878 | GPIO_FN(PORT160_SCIFA5_TXD), | ||
1879 | GPIO_FN(PORT161_SCIFB_CTS_), \ | ||
1880 | GPIO_FN(PORT161_SCIFA5_CTS_), | ||
1881 | GPIO_FN(PORT162_SCIFB_RXD), \ | ||
1882 | GPIO_FN(PORT162_SCIFA5_RXD), | ||
1883 | GPIO_FN(PORT163_SCIFB_RTS_), \ | ||
1884 | GPIO_FN(PORT163_SCIFA5_RTS_), \ | ||
1885 | GPIO_FN(TPU3TO0), | ||
1886 | GPIO_FN(LCDD0), | ||
1887 | GPIO_FN(LCDD1), \ | ||
1888 | GPIO_FN(PORT193_SCIFA5_CTS_), \ | ||
1889 | GPIO_FN(BBIF2_TSYNC1), | ||
1890 | GPIO_FN(LCDD2), \ | ||
1891 | GPIO_FN(PORT194_SCIFA5_RTS_), \ | ||
1892 | GPIO_FN(BBIF2_TSCK1), | ||
1893 | GPIO_FN(LCDD3), \ | ||
1894 | GPIO_FN(PORT195_SCIFA5_RXD), \ | ||
1895 | GPIO_FN(BBIF2_TXD1), | ||
1896 | GPIO_FN(LCDD4), \ | ||
1897 | GPIO_FN(PORT196_SCIFA5_TXD), | ||
1898 | GPIO_FN(LCDD5), \ | ||
1899 | GPIO_FN(PORT197_SCIFA5_SCK), \ | ||
1900 | GPIO_FN(MFG2_OUT2), \ | ||
1901 | GPIO_FN(TPU2TO1), | ||
1902 | GPIO_FN(LCDD6), | ||
1903 | GPIO_FN(LCDD7), \ | ||
1904 | GPIO_FN(TPU4TO1), \ | ||
1905 | GPIO_FN(MFG4_OUT2), | ||
1906 | GPIO_FN(LCDD8), \ | ||
1907 | GPIO_FN(D16), | ||
1908 | GPIO_FN(LCDD9), \ | ||
1909 | GPIO_FN(D17), | ||
1910 | GPIO_FN(LCDD10), \ | ||
1911 | GPIO_FN(D18), | ||
1912 | GPIO_FN(LCDD11), \ | ||
1913 | GPIO_FN(D19), | ||
1914 | GPIO_FN(LCDD12), \ | ||
1915 | GPIO_FN(D20), | ||
1916 | GPIO_FN(LCDD13), \ | ||
1917 | GPIO_FN(D21), | ||
1918 | GPIO_FN(LCDD14), \ | ||
1919 | GPIO_FN(D22), | ||
1920 | GPIO_FN(LCDD15), \ | ||
1921 | GPIO_FN(PORT207_MSIOF0L_SS1), \ | ||
1922 | GPIO_FN(D23), | ||
1923 | GPIO_FN(LCDD16), \ | ||
1924 | GPIO_FN(PORT208_MSIOF0L_SS2), \ | ||
1925 | GPIO_FN(D24), | ||
1926 | GPIO_FN(LCDD17), \ | ||
1927 | GPIO_FN(D25), | ||
1928 | GPIO_FN(LCDD18), \ | ||
1929 | GPIO_FN(DREQ2), \ | ||
1930 | GPIO_FN(PORT210_MSIOF0L_SS1), \ | ||
1931 | GPIO_FN(D26), | ||
1932 | GPIO_FN(LCDD19), \ | ||
1933 | GPIO_FN(PORT211_MSIOF0L_SS2), \ | ||
1934 | GPIO_FN(D27), | ||
1935 | GPIO_FN(LCDD20), \ | ||
1936 | GPIO_FN(TS_SPSYNC1), \ | ||
1937 | GPIO_FN(MSIOF0L_MCK0), \ | ||
1938 | GPIO_FN(D28), | ||
1939 | GPIO_FN(LCDD21), \ | ||
1940 | GPIO_FN(TS_SDAT1), \ | ||
1941 | GPIO_FN(MSIOF0L_MCK1), \ | ||
1942 | GPIO_FN(D29), | ||
1943 | GPIO_FN(LCDD22), \ | ||
1944 | GPIO_FN(TS_SDEN1), \ | ||
1945 | GPIO_FN(MSIOF0L_RSCK), \ | ||
1946 | GPIO_FN(D30), | ||
1947 | GPIO_FN(LCDD23), \ | ||
1948 | GPIO_FN(TS_SCK1), \ | ||
1949 | GPIO_FN(MSIOF0L_RSYNC), \ | ||
1950 | GPIO_FN(D31), | ||
1951 | GPIO_FN(LCDDCK), \ | ||
1952 | GPIO_FN(LCDWR_), | ||
1953 | GPIO_FN(LCDRD_), \ | ||
1954 | GPIO_FN(DACK2), \ | ||
1955 | GPIO_FN(PORT217_LCD2RS), \ | ||
1956 | GPIO_FN(MSIOF0L_TSYNC), \ | ||
1957 | GPIO_FN(VIO2_FIELD3), \ | ||
1958 | GPIO_FN(PORT217_LCD2DISP), | ||
1959 | GPIO_FN(LCDHSYN), \ | ||
1960 | GPIO_FN(LCDCS_), \ | ||
1961 | GPIO_FN(LCDCS2_), \ | ||
1962 | GPIO_FN(DACK3), \ | ||
1963 | GPIO_FN(PORT218_VIO_CKOR), | ||
1964 | GPIO_FN(LCDDISP), \ | ||
1965 | GPIO_FN(LCDRS), \ | ||
1966 | GPIO_FN(PORT219_LCD2WR_), \ | ||
1967 | GPIO_FN(DREQ3), \ | ||
1968 | GPIO_FN(MSIOF0L_TSCK), \ | ||
1969 | GPIO_FN(VIO2_CLK3), \ | ||
1970 | GPIO_FN(LCD2DCK_2), | ||
1971 | GPIO_FN(LCDVSYN), \ | ||
1972 | GPIO_FN(LCDVSYN2), | ||
1973 | GPIO_FN(LCDLCLK), \ | ||
1974 | GPIO_FN(DREQ1), \ | ||
1975 | GPIO_FN(PORT221_LCD2CS_), \ | ||
1976 | GPIO_FN(PWEN), \ | ||
1977 | GPIO_FN(MSIOF0L_RXD), \ | ||
1978 | GPIO_FN(VIO2_HD3), \ | ||
1979 | GPIO_FN(PORT221_LCD2HSYN), | ||
1980 | GPIO_FN(LCDDON), \ | ||
1981 | GPIO_FN(LCDDON2), \ | ||
1982 | GPIO_FN(DACK1), \ | ||
1983 | GPIO_FN(OVCN), \ | ||
1984 | GPIO_FN(MSIOF0L_TXD), \ | ||
1985 | GPIO_FN(VIO2_VD3), \ | ||
1986 | GPIO_FN(PORT222_LCD2VSYN), | ||
1987 | |||
1988 | GPIO_FN(SCIFA1_TXD), \ | ||
1989 | GPIO_FN(OVCN2), | ||
1990 | GPIO_FN(EXTLP), \ | ||
1991 | GPIO_FN(SCIFA1_SCK), \ | ||
1992 | GPIO_FN(PORT226_VIO_CKO2), | ||
1993 | GPIO_FN(SCIFA1_RTS_), \ | ||
1994 | GPIO_FN(IDIN), | ||
1995 | GPIO_FN(SCIFA1_RXD), | ||
1996 | GPIO_FN(SCIFA1_CTS_), \ | ||
1997 | GPIO_FN(MFG1_IN1), | ||
1998 | GPIO_FN(MSIOF1_TXD), \ | ||
1999 | GPIO_FN(SCIFA2_TXD2), | ||
2000 | GPIO_FN(MSIOF1_TSYNC), \ | ||
2001 | GPIO_FN(SCIFA2_CTS2_), | ||
2002 | GPIO_FN(MSIOF1_TSCK), \ | ||
2003 | GPIO_FN(SCIFA2_SCK2), | ||
2004 | GPIO_FN(MSIOF1_RXD), \ | ||
2005 | GPIO_FN(SCIFA2_RXD2), | ||
2006 | GPIO_FN(MSIOF1_RSCK), \ | ||
2007 | GPIO_FN(SCIFA2_RTS2_), \ | ||
2008 | GPIO_FN(VIO2_CLK2), \ | ||
2009 | GPIO_FN(LCD2D20), | ||
2010 | GPIO_FN(MSIOF1_RSYNC), \ | ||
2011 | GPIO_FN(MFG1_IN2), \ | ||
2012 | GPIO_FN(VIO2_VD2), \ | ||
2013 | GPIO_FN(LCD2D21), | ||
2014 | GPIO_FN(MSIOF1_MCK0), \ | ||
2015 | GPIO_FN(PORT236_I2C_SDA2), | ||
2016 | GPIO_FN(MSIOF1_MCK1), \ | ||
2017 | GPIO_FN(PORT237_I2C_SCL2), | ||
2018 | GPIO_FN(MSIOF1_SS1), \ | ||
2019 | GPIO_FN(VIO2_FIELD2), \ | ||
2020 | GPIO_FN(LCD2D22), | ||
2021 | GPIO_FN(MSIOF1_SS2), \ | ||
2022 | GPIO_FN(VIO2_HD2), \ | ||
2023 | GPIO_FN(LCD2D23), | ||
2024 | GPIO_FN(SCIFA6_TXD), | ||
2025 | GPIO_FN(PORT241_IRDA_OUT), \ | ||
2026 | GPIO_FN(PORT241_IROUT), \ | ||
2027 | GPIO_FN(MFG4_OUT1), \ | ||
2028 | GPIO_FN(TPU4TO0), | ||
2029 | GPIO_FN(PORT242_IRDA_IN), \ | ||
2030 | GPIO_FN(MFG4_IN2), | ||
2031 | GPIO_FN(PORT243_IRDA_FIRSEL), \ | ||
2032 | GPIO_FN(PORT243_VIO_CKO2), | ||
2033 | GPIO_FN(PORT244_SCIFA5_CTS_), \ | ||
2034 | GPIO_FN(MFG2_IN1), \ | ||
2035 | GPIO_FN(PORT244_SCIFB_CTS_), \ | ||
2036 | GPIO_FN(MSIOF2R_RXD), | ||
2037 | GPIO_FN(PORT245_SCIFA5_RTS_), \ | ||
2038 | GPIO_FN(MFG2_IN2), \ | ||
2039 | GPIO_FN(PORT245_SCIFB_RTS_), \ | ||
2040 | GPIO_FN(MSIOF2R_TXD), | ||
2041 | GPIO_FN(PORT246_SCIFA5_RXD), \ | ||
2042 | GPIO_FN(MFG1_OUT1), \ | ||
2043 | GPIO_FN(PORT246_SCIFB_RXD), \ | ||
2044 | GPIO_FN(TPU1TO0), | ||
2045 | GPIO_FN(PORT247_SCIFA5_TXD), \ | ||
2046 | GPIO_FN(MFG3_OUT2), \ | ||
2047 | GPIO_FN(PORT247_SCIFB_TXD), \ | ||
2048 | GPIO_FN(TPU3TO1), | ||
2049 | GPIO_FN(PORT248_SCIFA5_SCK), \ | ||
2050 | GPIO_FN(MFG2_OUT1), \ | ||
2051 | GPIO_FN(PORT248_SCIFB_SCK), \ | ||
2052 | GPIO_FN(TPU2TO0), \ | ||
2053 | GPIO_FN(PORT248_I2C_SCL3), \ | ||
2054 | GPIO_FN(MSIOF2R_TSCK), | ||
2055 | GPIO_FN(PORT249_IROUT), \ | ||
2056 | GPIO_FN(MFG4_IN1), \ | ||
2057 | GPIO_FN(PORT249_I2C_SDA3), \ | ||
2058 | GPIO_FN(MSIOF2R_TSYNC), | ||
2059 | GPIO_FN(SDHICLK0), | ||
2060 | GPIO_FN(SDHICD0), | ||
2061 | GPIO_FN(SDHID0_0), | ||
2062 | GPIO_FN(SDHID0_1), | ||
2063 | GPIO_FN(SDHID0_2), | ||
2064 | GPIO_FN(SDHID0_3), | ||
2065 | GPIO_FN(SDHICMD0), | ||
2066 | GPIO_FN(SDHIWP0), | ||
2067 | GPIO_FN(SDHICLK1), | ||
2068 | GPIO_FN(SDHID1_0), \ | ||
2069 | GPIO_FN(TS_SPSYNC2), | ||
2070 | GPIO_FN(SDHID1_1), \ | ||
2071 | GPIO_FN(TS_SDAT2), | ||
2072 | GPIO_FN(SDHID1_2), \ | ||
2073 | GPIO_FN(TS_SDEN2), | ||
2074 | GPIO_FN(SDHID1_3), \ | ||
2075 | GPIO_FN(TS_SCK2), | ||
2076 | GPIO_FN(SDHICMD1), | ||
2077 | GPIO_FN(SDHICLK2), | ||
2078 | GPIO_FN(SDHID2_0), \ | ||
2079 | GPIO_FN(TS_SPSYNC4), | ||
2080 | GPIO_FN(SDHID2_1), \ | ||
2081 | GPIO_FN(TS_SDAT4), | ||
2082 | GPIO_FN(SDHID2_2), \ | ||
2083 | GPIO_FN(TS_SDEN4), | ||
2084 | GPIO_FN(SDHID2_3), \ | ||
2085 | GPIO_FN(TS_SCK4), | ||
2086 | GPIO_FN(SDHICMD2), | ||
2087 | GPIO_FN(MMCCLK0), | ||
2088 | GPIO_FN(MMCD0_0), | ||
2089 | GPIO_FN(MMCD0_1), | ||
2090 | GPIO_FN(MMCD0_2), | ||
2091 | GPIO_FN(MMCD0_3), | ||
2092 | GPIO_FN(MMCD0_4), \ | ||
2093 | GPIO_FN(TS_SPSYNC5), | ||
2094 | GPIO_FN(MMCD0_5), \ | ||
2095 | GPIO_FN(TS_SDAT5), | ||
2096 | GPIO_FN(MMCD0_6), \ | ||
2097 | GPIO_FN(TS_SDEN5), | ||
2098 | GPIO_FN(MMCD0_7), \ | ||
2099 | GPIO_FN(TS_SCK5), | ||
2100 | GPIO_FN(MMCCMD0), | ||
2101 | GPIO_FN(RESETOUTS_), \ | ||
2102 | GPIO_FN(EXTAL2OUT), | ||
2103 | GPIO_FN(MCP_WAIT__MCP_FRB), | ||
2104 | GPIO_FN(MCP_CKO), \ | ||
2105 | GPIO_FN(MMCCLK1), | ||
2106 | GPIO_FN(MCP_D15_MCP_NAF15), | ||
2107 | GPIO_FN(MCP_D14_MCP_NAF14), | ||
2108 | GPIO_FN(MCP_D13_MCP_NAF13), | ||
2109 | GPIO_FN(MCP_D12_MCP_NAF12), | ||
2110 | GPIO_FN(MCP_D11_MCP_NAF11), | ||
2111 | GPIO_FN(MCP_D10_MCP_NAF10), | ||
2112 | GPIO_FN(MCP_D9_MCP_NAF9), | ||
2113 | GPIO_FN(MCP_D8_MCP_NAF8), \ | ||
2114 | GPIO_FN(MMCCMD1), | ||
2115 | GPIO_FN(MCP_D7_MCP_NAF7), \ | ||
2116 | GPIO_FN(MMCD1_7), | ||
2117 | |||
2118 | GPIO_FN(MCP_D6_MCP_NAF6), \ | ||
2119 | GPIO_FN(MMCD1_6), | ||
2120 | GPIO_FN(MCP_D5_MCP_NAF5), \ | ||
2121 | GPIO_FN(MMCD1_5), | ||
2122 | GPIO_FN(MCP_D4_MCP_NAF4), \ | ||
2123 | GPIO_FN(MMCD1_4), | ||
2124 | GPIO_FN(MCP_D3_MCP_NAF3), \ | ||
2125 | GPIO_FN(MMCD1_3), | ||
2126 | GPIO_FN(MCP_D2_MCP_NAF2), \ | ||
2127 | GPIO_FN(MMCD1_2), | ||
2128 | GPIO_FN(MCP_D1_MCP_NAF1), \ | ||
2129 | GPIO_FN(MMCD1_1), | ||
2130 | GPIO_FN(MCP_D0_MCP_NAF0), \ | ||
2131 | GPIO_FN(MMCD1_0), | ||
2132 | GPIO_FN(MCP_NBRSTOUT_), | ||
2133 | GPIO_FN(MCP_WE0__MCP_FWE), \ | ||
2134 | GPIO_FN(MCP_RDWR_MCP_FWE), | ||
2135 | |||
2136 | /* MSEL2 special cases */ | ||
2137 | GPIO_FN(TSIF2_TS_XX1), | ||
2138 | GPIO_FN(TSIF2_TS_XX2), | ||
2139 | GPIO_FN(TSIF2_TS_XX3), | ||
2140 | GPIO_FN(TSIF2_TS_XX4), | ||
2141 | GPIO_FN(TSIF2_TS_XX5), | ||
2142 | GPIO_FN(TSIF1_TS_XX1), | ||
2143 | GPIO_FN(TSIF1_TS_XX2), | ||
2144 | GPIO_FN(TSIF1_TS_XX3), | ||
2145 | GPIO_FN(TSIF1_TS_XX4), | ||
2146 | GPIO_FN(TSIF1_TS_XX5), | ||
2147 | GPIO_FN(TSIF0_TS_XX1), | ||
2148 | GPIO_FN(TSIF0_TS_XX2), | ||
2149 | GPIO_FN(TSIF0_TS_XX3), | ||
2150 | GPIO_FN(TSIF0_TS_XX4), | ||
2151 | GPIO_FN(TSIF0_TS_XX5), | ||
2152 | GPIO_FN(MST1_TS_XX1), | ||
2153 | GPIO_FN(MST1_TS_XX2), | ||
2154 | GPIO_FN(MST1_TS_XX3), | ||
2155 | GPIO_FN(MST1_TS_XX4), | ||
2156 | GPIO_FN(MST1_TS_XX5), | ||
2157 | GPIO_FN(MST0_TS_XX1), | ||
2158 | GPIO_FN(MST0_TS_XX2), | ||
2159 | GPIO_FN(MST0_TS_XX3), | ||
2160 | GPIO_FN(MST0_TS_XX4), | ||
2161 | GPIO_FN(MST0_TS_XX5), | ||
2162 | |||
2163 | /* MSEL3 special cases */ | ||
2164 | GPIO_FN(SDHI0_VCCQ_MC0_ON), | ||
2165 | GPIO_FN(SDHI0_VCCQ_MC0_OFF), | ||
2166 | GPIO_FN(DEBUG_MON_VIO), | ||
2167 | GPIO_FN(DEBUG_MON_LCDD), | ||
2168 | GPIO_FN(LCDC_LCDC0), | ||
2169 | GPIO_FN(LCDC_LCDC1), | ||
2170 | |||
2171 | /* MSEL4 special cases */ | ||
2172 | GPIO_FN(IRQ9_MEM_INT), | ||
2173 | GPIO_FN(IRQ9_MCP_INT), | ||
2174 | GPIO_FN(A11), | ||
2175 | GPIO_FN(KEYOUT8), | ||
2176 | GPIO_FN(TPU4TO3), | ||
2177 | GPIO_FN(RESETA_N_PU_ON), | ||
2178 | GPIO_FN(RESETA_N_PU_OFF), | ||
2179 | GPIO_FN(EDBGREQ_PD), | ||
2180 | GPIO_FN(EDBGREQ_PU), | ||
2181 | |||
2182 | /* Functions with pull-ups */ | ||
2183 | GPIO_FN(KEYIN0_PU), | ||
2184 | GPIO_FN(KEYIN1_PU), | ||
2185 | GPIO_FN(KEYIN2_PU), | ||
2186 | GPIO_FN(KEYIN3_PU), | ||
2187 | GPIO_FN(KEYIN4_PU), | ||
2188 | GPIO_FN(KEYIN5_PU), | ||
2189 | GPIO_FN(KEYIN6_PU), | ||
2190 | GPIO_FN(KEYIN7_PU), | ||
2191 | GPIO_FN(SDHICD0_PU), | ||
2192 | GPIO_FN(SDHID0_0_PU), | ||
2193 | GPIO_FN(SDHID0_1_PU), | ||
2194 | GPIO_FN(SDHID0_2_PU), | ||
2195 | GPIO_FN(SDHID0_3_PU), | ||
2196 | GPIO_FN(SDHICMD0_PU), | ||
2197 | GPIO_FN(SDHIWP0_PU), | ||
2198 | GPIO_FN(SDHID1_0_PU), | ||
2199 | GPIO_FN(SDHID1_1_PU), | ||
2200 | GPIO_FN(SDHID1_2_PU), | ||
2201 | GPIO_FN(SDHID1_3_PU), | ||
2202 | GPIO_FN(SDHICMD1_PU), | ||
2203 | GPIO_FN(SDHID2_0_PU), | ||
2204 | GPIO_FN(SDHID2_1_PU), | ||
2205 | GPIO_FN(SDHID2_2_PU), | ||
2206 | GPIO_FN(SDHID2_3_PU), | ||
2207 | GPIO_FN(SDHICMD2_PU), | ||
2208 | GPIO_FN(MMCCMD0_PU), | ||
2209 | GPIO_FN(MMCCMD1_PU), | ||
2210 | GPIO_FN(MMCD0_0_PU), | ||
2211 | GPIO_FN(MMCD0_1_PU), | ||
2212 | GPIO_FN(MMCD0_2_PU), | ||
2213 | GPIO_FN(MMCD0_3_PU), | ||
2214 | GPIO_FN(MMCD0_4_PU), | ||
2215 | GPIO_FN(MMCD0_5_PU), | ||
2216 | GPIO_FN(MMCD0_6_PU), | ||
2217 | GPIO_FN(MMCD0_7_PU), | ||
2218 | GPIO_FN(FSIACK_PU), | ||
2219 | GPIO_FN(FSIAILR_PU), | ||
2220 | GPIO_FN(FSIAIBT_PU), | ||
2221 | GPIO_FN(FSIAISLD_PU), | ||
2222 | }; | ||
2223 | |||
2224 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | ||
2225 | PORTCR(0, 0xe6050000), /* PORT0CR */ | ||
2226 | PORTCR(1, 0xe6050001), /* PORT1CR */ | ||
2227 | PORTCR(2, 0xe6050002), /* PORT2CR */ | ||
2228 | PORTCR(3, 0xe6050003), /* PORT3CR */ | ||
2229 | PORTCR(4, 0xe6050004), /* PORT4CR */ | ||
2230 | PORTCR(5, 0xe6050005), /* PORT5CR */ | ||
2231 | PORTCR(6, 0xe6050006), /* PORT6CR */ | ||
2232 | PORTCR(7, 0xe6050007), /* PORT7CR */ | ||
2233 | PORTCR(8, 0xe6050008), /* PORT8CR */ | ||
2234 | PORTCR(9, 0xe6050009), /* PORT9CR */ | ||
2235 | |||
2236 | PORTCR(10, 0xe605000a), /* PORT10CR */ | ||
2237 | PORTCR(11, 0xe605000b), /* PORT11CR */ | ||
2238 | PORTCR(12, 0xe605000c), /* PORT12CR */ | ||
2239 | PORTCR(13, 0xe605000d), /* PORT13CR */ | ||
2240 | PORTCR(14, 0xe605000e), /* PORT14CR */ | ||
2241 | PORTCR(15, 0xe605000f), /* PORT15CR */ | ||
2242 | PORTCR(16, 0xe6050010), /* PORT16CR */ | ||
2243 | PORTCR(17, 0xe6050011), /* PORT17CR */ | ||
2244 | PORTCR(18, 0xe6050012), /* PORT18CR */ | ||
2245 | PORTCR(19, 0xe6050013), /* PORT19CR */ | ||
2246 | |||
2247 | PORTCR(20, 0xe6050014), /* PORT20CR */ | ||
2248 | PORTCR(21, 0xe6050015), /* PORT21CR */ | ||
2249 | PORTCR(22, 0xe6050016), /* PORT22CR */ | ||
2250 | PORTCR(23, 0xe6050017), /* PORT23CR */ | ||
2251 | PORTCR(24, 0xe6050018), /* PORT24CR */ | ||
2252 | PORTCR(25, 0xe6050019), /* PORT25CR */ | ||
2253 | PORTCR(26, 0xe605001a), /* PORT26CR */ | ||
2254 | PORTCR(27, 0xe605001b), /* PORT27CR */ | ||
2255 | PORTCR(28, 0xe605001c), /* PORT28CR */ | ||
2256 | PORTCR(29, 0xe605001d), /* PORT29CR */ | ||
2257 | |||
2258 | PORTCR(30, 0xe605001e), /* PORT30CR */ | ||
2259 | PORTCR(31, 0xe605001f), /* PORT31CR */ | ||
2260 | PORTCR(32, 0xe6051020), /* PORT32CR */ | ||
2261 | PORTCR(33, 0xe6051021), /* PORT33CR */ | ||
2262 | PORTCR(34, 0xe6051022), /* PORT34CR */ | ||
2263 | PORTCR(35, 0xe6051023), /* PORT35CR */ | ||
2264 | PORTCR(36, 0xe6051024), /* PORT36CR */ | ||
2265 | PORTCR(37, 0xe6051025), /* PORT37CR */ | ||
2266 | PORTCR(38, 0xe6051026), /* PORT38CR */ | ||
2267 | PORTCR(39, 0xe6051027), /* PORT39CR */ | ||
2268 | |||
2269 | PORTCR(40, 0xe6051028), /* PORT40CR */ | ||
2270 | PORTCR(41, 0xe6051029), /* PORT41CR */ | ||
2271 | PORTCR(42, 0xe605102a), /* PORT42CR */ | ||
2272 | PORTCR(43, 0xe605102b), /* PORT43CR */ | ||
2273 | PORTCR(44, 0xe605102c), /* PORT44CR */ | ||
2274 | PORTCR(45, 0xe605102d), /* PORT45CR */ | ||
2275 | PORTCR(46, 0xe605102e), /* PORT46CR */ | ||
2276 | PORTCR(47, 0xe605102f), /* PORT47CR */ | ||
2277 | PORTCR(48, 0xe6051030), /* PORT48CR */ | ||
2278 | PORTCR(49, 0xe6051031), /* PORT49CR */ | ||
2279 | |||
2280 | PORTCR(50, 0xe6051032), /* PORT50CR */ | ||
2281 | PORTCR(51, 0xe6051033), /* PORT51CR */ | ||
2282 | PORTCR(52, 0xe6051034), /* PORT52CR */ | ||
2283 | PORTCR(53, 0xe6051035), /* PORT53CR */ | ||
2284 | PORTCR(54, 0xe6051036), /* PORT54CR */ | ||
2285 | PORTCR(55, 0xe6051037), /* PORT55CR */ | ||
2286 | PORTCR(56, 0xe6051038), /* PORT56CR */ | ||
2287 | PORTCR(57, 0xe6051039), /* PORT57CR */ | ||
2288 | PORTCR(58, 0xe605103a), /* PORT58CR */ | ||
2289 | PORTCR(59, 0xe605103b), /* PORT59CR */ | ||
2290 | |||
2291 | PORTCR(60, 0xe605103c), /* PORT60CR */ | ||
2292 | PORTCR(61, 0xe605103d), /* PORT61CR */ | ||
2293 | PORTCR(62, 0xe605103e), /* PORT62CR */ | ||
2294 | PORTCR(63, 0xe605103f), /* PORT63CR */ | ||
2295 | PORTCR(64, 0xe6051040), /* PORT64CR */ | ||
2296 | PORTCR(65, 0xe6051041), /* PORT65CR */ | ||
2297 | PORTCR(66, 0xe6051042), /* PORT66CR */ | ||
2298 | PORTCR(67, 0xe6051043), /* PORT67CR */ | ||
2299 | PORTCR(68, 0xe6051044), /* PORT68CR */ | ||
2300 | PORTCR(69, 0xe6051045), /* PORT69CR */ | ||
2301 | |||
2302 | PORTCR(70, 0xe6051046), /* PORT70CR */ | ||
2303 | PORTCR(71, 0xe6051047), /* PORT71CR */ | ||
2304 | PORTCR(72, 0xe6051048), /* PORT72CR */ | ||
2305 | PORTCR(73, 0xe6051049), /* PORT73CR */ | ||
2306 | PORTCR(74, 0xe605104a), /* PORT74CR */ | ||
2307 | PORTCR(75, 0xe605104b), /* PORT75CR */ | ||
2308 | PORTCR(76, 0xe605104c), /* PORT76CR */ | ||
2309 | PORTCR(77, 0xe605104d), /* PORT77CR */ | ||
2310 | PORTCR(78, 0xe605104e), /* PORT78CR */ | ||
2311 | PORTCR(79, 0xe605104f), /* PORT79CR */ | ||
2312 | |||
2313 | PORTCR(80, 0xe6051050), /* PORT80CR */ | ||
2314 | PORTCR(81, 0xe6051051), /* PORT81CR */ | ||
2315 | PORTCR(82, 0xe6051052), /* PORT82CR */ | ||
2316 | PORTCR(83, 0xe6051053), /* PORT83CR */ | ||
2317 | PORTCR(84, 0xe6051054), /* PORT84CR */ | ||
2318 | PORTCR(85, 0xe6051055), /* PORT85CR */ | ||
2319 | PORTCR(86, 0xe6051056), /* PORT86CR */ | ||
2320 | PORTCR(87, 0xe6051057), /* PORT87CR */ | ||
2321 | PORTCR(88, 0xe6051058), /* PORT88CR */ | ||
2322 | PORTCR(89, 0xe6051059), /* PORT89CR */ | ||
2323 | |||
2324 | PORTCR(90, 0xe605105a), /* PORT90CR */ | ||
2325 | PORTCR(91, 0xe605105b), /* PORT91CR */ | ||
2326 | PORTCR(92, 0xe605105c), /* PORT92CR */ | ||
2327 | PORTCR(93, 0xe605105d), /* PORT93CR */ | ||
2328 | PORTCR(94, 0xe605105e), /* PORT94CR */ | ||
2329 | PORTCR(95, 0xe605105f), /* PORT95CR */ | ||
2330 | PORTCR(96, 0xe6052060), /* PORT96CR */ | ||
2331 | PORTCR(97, 0xe6052061), /* PORT97CR */ | ||
2332 | PORTCR(98, 0xe6052062), /* PORT98CR */ | ||
2333 | PORTCR(99, 0xe6052063), /* PORT99CR */ | ||
2334 | |||
2335 | PORTCR(100, 0xe6052064), /* PORT100CR */ | ||
2336 | PORTCR(101, 0xe6052065), /* PORT101CR */ | ||
2337 | PORTCR(102, 0xe6052066), /* PORT102CR */ | ||
2338 | PORTCR(103, 0xe6052067), /* PORT103CR */ | ||
2339 | PORTCR(104, 0xe6052068), /* PORT104CR */ | ||
2340 | PORTCR(105, 0xe6052069), /* PORT105CR */ | ||
2341 | PORTCR(106, 0xe605206a), /* PORT106CR */ | ||
2342 | PORTCR(107, 0xe605206b), /* PORT107CR */ | ||
2343 | PORTCR(108, 0xe605206c), /* PORT108CR */ | ||
2344 | PORTCR(109, 0xe605206d), /* PORT109CR */ | ||
2345 | |||
2346 | PORTCR(110, 0xe605206e), /* PORT110CR */ | ||
2347 | PORTCR(111, 0xe605206f), /* PORT111CR */ | ||
2348 | PORTCR(112, 0xe6052070), /* PORT112CR */ | ||
2349 | PORTCR(113, 0xe6052071), /* PORT113CR */ | ||
2350 | PORTCR(114, 0xe6052072), /* PORT114CR */ | ||
2351 | PORTCR(115, 0xe6052073), /* PORT115CR */ | ||
2352 | PORTCR(116, 0xe6052074), /* PORT116CR */ | ||
2353 | PORTCR(117, 0xe6052075), /* PORT117CR */ | ||
2354 | PORTCR(118, 0xe6052076), /* PORT118CR */ | ||
2355 | |||
2356 | PORTCR(128, 0xe6052080), /* PORT128CR */ | ||
2357 | PORTCR(129, 0xe6052081), /* PORT129CR */ | ||
2358 | |||
2359 | PORTCR(130, 0xe6052082), /* PORT130CR */ | ||
2360 | PORTCR(131, 0xe6052083), /* PORT131CR */ | ||
2361 | PORTCR(132, 0xe6052084), /* PORT132CR */ | ||
2362 | PORTCR(133, 0xe6052085), /* PORT133CR */ | ||
2363 | PORTCR(134, 0xe6052086), /* PORT134CR */ | ||
2364 | PORTCR(135, 0xe6052087), /* PORT135CR */ | ||
2365 | PORTCR(136, 0xe6052088), /* PORT136CR */ | ||
2366 | PORTCR(137, 0xe6052089), /* PORT137CR */ | ||
2367 | PORTCR(138, 0xe605208a), /* PORT138CR */ | ||
2368 | PORTCR(139, 0xe605208b), /* PORT139CR */ | ||
2369 | |||
2370 | PORTCR(140, 0xe605208c), /* PORT140CR */ | ||
2371 | PORTCR(141, 0xe605208d), /* PORT141CR */ | ||
2372 | PORTCR(142, 0xe605208e), /* PORT142CR */ | ||
2373 | PORTCR(143, 0xe605208f), /* PORT143CR */ | ||
2374 | PORTCR(144, 0xe6052090), /* PORT144CR */ | ||
2375 | PORTCR(145, 0xe6052091), /* PORT145CR */ | ||
2376 | PORTCR(146, 0xe6052092), /* PORT146CR */ | ||
2377 | PORTCR(147, 0xe6052093), /* PORT147CR */ | ||
2378 | PORTCR(148, 0xe6052094), /* PORT148CR */ | ||
2379 | PORTCR(149, 0xe6052095), /* PORT149CR */ | ||
2380 | |||
2381 | PORTCR(150, 0xe6052096), /* PORT150CR */ | ||
2382 | PORTCR(151, 0xe6052097), /* PORT151CR */ | ||
2383 | PORTCR(152, 0xe6052098), /* PORT152CR */ | ||
2384 | PORTCR(153, 0xe6052099), /* PORT153CR */ | ||
2385 | PORTCR(154, 0xe605209a), /* PORT154CR */ | ||
2386 | PORTCR(155, 0xe605209b), /* PORT155CR */ | ||
2387 | PORTCR(156, 0xe605209c), /* PORT156CR */ | ||
2388 | PORTCR(157, 0xe605209d), /* PORT157CR */ | ||
2389 | PORTCR(158, 0xe605209e), /* PORT158CR */ | ||
2390 | PORTCR(159, 0xe605209f), /* PORT159CR */ | ||
2391 | |||
2392 | PORTCR(160, 0xe60520a0), /* PORT160CR */ | ||
2393 | PORTCR(161, 0xe60520a1), /* PORT161CR */ | ||
2394 | PORTCR(162, 0xe60520a2), /* PORT162CR */ | ||
2395 | PORTCR(163, 0xe60520a3), /* PORT163CR */ | ||
2396 | PORTCR(164, 0xe60520a4), /* PORT164CR */ | ||
2397 | |||
2398 | PORTCR(192, 0xe60520c0), /* PORT192CR */ | ||
2399 | PORTCR(193, 0xe60520c1), /* PORT193CR */ | ||
2400 | PORTCR(194, 0xe60520c2), /* PORT194CR */ | ||
2401 | PORTCR(195, 0xe60520c3), /* PORT195CR */ | ||
2402 | PORTCR(196, 0xe60520c4), /* PORT196CR */ | ||
2403 | PORTCR(197, 0xe60520c5), /* PORT197CR */ | ||
2404 | PORTCR(198, 0xe60520c6), /* PORT198CR */ | ||
2405 | PORTCR(199, 0xe60520c7), /* PORT199CR */ | ||
2406 | |||
2407 | PORTCR(200, 0xe60520c8), /* PORT200CR */ | ||
2408 | PORTCR(201, 0xe60520c9), /* PORT201CR */ | ||
2409 | PORTCR(202, 0xe60520ca), /* PORT202CR */ | ||
2410 | PORTCR(203, 0xe60520cb), /* PORT203CR */ | ||
2411 | PORTCR(204, 0xe60520cc), /* PORT204CR */ | ||
2412 | PORTCR(205, 0xe60520cd), /* PORT205CR */ | ||
2413 | PORTCR(206, 0xe60520ce), /* PORT206CR */ | ||
2414 | PORTCR(207, 0xe60520cf), /* PORT207CR */ | ||
2415 | PORTCR(208, 0xe60520d0), /* PORT208CR */ | ||
2416 | PORTCR(209, 0xe60520d1), /* PORT209CR */ | ||
2417 | |||
2418 | PORTCR(210, 0xe60520d2), /* PORT210CR */ | ||
2419 | PORTCR(211, 0xe60520d3), /* PORT211CR */ | ||
2420 | PORTCR(212, 0xe60520d4), /* PORT212CR */ | ||
2421 | PORTCR(213, 0xe60520d5), /* PORT213CR */ | ||
2422 | PORTCR(214, 0xe60520d6), /* PORT214CR */ | ||
2423 | PORTCR(215, 0xe60520d7), /* PORT215CR */ | ||
2424 | PORTCR(216, 0xe60520d8), /* PORT216CR */ | ||
2425 | PORTCR(217, 0xe60520d9), /* PORT217CR */ | ||
2426 | PORTCR(218, 0xe60520da), /* PORT218CR */ | ||
2427 | PORTCR(219, 0xe60520db), /* PORT219CR */ | ||
2428 | |||
2429 | PORTCR(220, 0xe60520dc), /* PORT220CR */ | ||
2430 | PORTCR(221, 0xe60520dd), /* PORT221CR */ | ||
2431 | PORTCR(222, 0xe60520de), /* PORT222CR */ | ||
2432 | PORTCR(223, 0xe60520df), /* PORT223CR */ | ||
2433 | PORTCR(224, 0xe60530e0), /* PORT224CR */ | ||
2434 | PORTCR(225, 0xe60530e1), /* PORT225CR */ | ||
2435 | PORTCR(226, 0xe60530e2), /* PORT226CR */ | ||
2436 | PORTCR(227, 0xe60530e3), /* PORT227CR */ | ||
2437 | PORTCR(228, 0xe60530e4), /* PORT228CR */ | ||
2438 | PORTCR(229, 0xe60530e5), /* PORT229CR */ | ||
2439 | |||
2440 | PORTCR(230, 0xe60530e6), /* PORT230CR */ | ||
2441 | PORTCR(231, 0xe60530e7), /* PORT231CR */ | ||
2442 | PORTCR(232, 0xe60530e8), /* PORT232CR */ | ||
2443 | PORTCR(233, 0xe60530e9), /* PORT233CR */ | ||
2444 | PORTCR(234, 0xe60530ea), /* PORT234CR */ | ||
2445 | PORTCR(235, 0xe60530eb), /* PORT235CR */ | ||
2446 | PORTCR(236, 0xe60530ec), /* PORT236CR */ | ||
2447 | PORTCR(237, 0xe60530ed), /* PORT237CR */ | ||
2448 | PORTCR(238, 0xe60530ee), /* PORT238CR */ | ||
2449 | PORTCR(239, 0xe60530ef), /* PORT239CR */ | ||
2450 | |||
2451 | PORTCR(240, 0xe60530f0), /* PORT240CR */ | ||
2452 | PORTCR(241, 0xe60530f1), /* PORT241CR */ | ||
2453 | PORTCR(242, 0xe60530f2), /* PORT242CR */ | ||
2454 | PORTCR(243, 0xe60530f3), /* PORT243CR */ | ||
2455 | PORTCR(244, 0xe60530f4), /* PORT244CR */ | ||
2456 | PORTCR(245, 0xe60530f5), /* PORT245CR */ | ||
2457 | PORTCR(246, 0xe60530f6), /* PORT246CR */ | ||
2458 | PORTCR(247, 0xe60530f7), /* PORT247CR */ | ||
2459 | PORTCR(248, 0xe60530f8), /* PORT248CR */ | ||
2460 | PORTCR(249, 0xe60530f9), /* PORT249CR */ | ||
2461 | |||
2462 | PORTCR(250, 0xe60530fa), /* PORT250CR */ | ||
2463 | PORTCR(251, 0xe60530fb), /* PORT251CR */ | ||
2464 | PORTCR(252, 0xe60530fc), /* PORT252CR */ | ||
2465 | PORTCR(253, 0xe60530fd), /* PORT253CR */ | ||
2466 | PORTCR(254, 0xe60530fe), /* PORT254CR */ | ||
2467 | PORTCR(255, 0xe60530ff), /* PORT255CR */ | ||
2468 | PORTCR(256, 0xe6053100), /* PORT256CR */ | ||
2469 | PORTCR(257, 0xe6053101), /* PORT257CR */ | ||
2470 | PORTCR(258, 0xe6053102), /* PORT258CR */ | ||
2471 | PORTCR(259, 0xe6053103), /* PORT259CR */ | ||
2472 | |||
2473 | PORTCR(260, 0xe6053104), /* PORT260CR */ | ||
2474 | PORTCR(261, 0xe6053105), /* PORT261CR */ | ||
2475 | PORTCR(262, 0xe6053106), /* PORT262CR */ | ||
2476 | PORTCR(263, 0xe6053107), /* PORT263CR */ | ||
2477 | PORTCR(264, 0xe6053108), /* PORT264CR */ | ||
2478 | PORTCR(265, 0xe6053109), /* PORT265CR */ | ||
2479 | PORTCR(266, 0xe605310a), /* PORT266CR */ | ||
2480 | PORTCR(267, 0xe605310b), /* PORT267CR */ | ||
2481 | PORTCR(268, 0xe605310c), /* PORT268CR */ | ||
2482 | PORTCR(269, 0xe605310d), /* PORT269CR */ | ||
2483 | |||
2484 | PORTCR(270, 0xe605310e), /* PORT270CR */ | ||
2485 | PORTCR(271, 0xe605310f), /* PORT271CR */ | ||
2486 | PORTCR(272, 0xe6053110), /* PORT272CR */ | ||
2487 | PORTCR(273, 0xe6053111), /* PORT273CR */ | ||
2488 | PORTCR(274, 0xe6053112), /* PORT274CR */ | ||
2489 | PORTCR(275, 0xe6053113), /* PORT275CR */ | ||
2490 | PORTCR(276, 0xe6053114), /* PORT276CR */ | ||
2491 | PORTCR(277, 0xe6053115), /* PORT277CR */ | ||
2492 | PORTCR(278, 0xe6053116), /* PORT278CR */ | ||
2493 | PORTCR(279, 0xe6053117), /* PORT279CR */ | ||
2494 | |||
2495 | PORTCR(280, 0xe6053118), /* PORT280CR */ | ||
2496 | PORTCR(281, 0xe6053119), /* PORT281CR */ | ||
2497 | PORTCR(282, 0xe605311a), /* PORT282CR */ | ||
2498 | |||
2499 | PORTCR(288, 0xe6052120), /* PORT288CR */ | ||
2500 | PORTCR(289, 0xe6052121), /* PORT289CR */ | ||
2501 | |||
2502 | PORTCR(290, 0xe6052122), /* PORT290CR */ | ||
2503 | PORTCR(291, 0xe6052123), /* PORT291CR */ | ||
2504 | PORTCR(292, 0xe6052124), /* PORT292CR */ | ||
2505 | PORTCR(293, 0xe6052125), /* PORT293CR */ | ||
2506 | PORTCR(294, 0xe6052126), /* PORT294CR */ | ||
2507 | PORTCR(295, 0xe6052127), /* PORT295CR */ | ||
2508 | PORTCR(296, 0xe6052128), /* PORT296CR */ | ||
2509 | PORTCR(297, 0xe6052129), /* PORT297CR */ | ||
2510 | PORTCR(298, 0xe605212a), /* PORT298CR */ | ||
2511 | PORTCR(299, 0xe605212b), /* PORT299CR */ | ||
2512 | |||
2513 | PORTCR(300, 0xe605212c), /* PORT300CR */ | ||
2514 | PORTCR(301, 0xe605212d), /* PORT301CR */ | ||
2515 | PORTCR(302, 0xe605212e), /* PORT302CR */ | ||
2516 | PORTCR(303, 0xe605212f), /* PORT303CR */ | ||
2517 | PORTCR(304, 0xe6052130), /* PORT304CR */ | ||
2518 | PORTCR(305, 0xe6052131), /* PORT305CR */ | ||
2519 | PORTCR(306, 0xe6052132), /* PORT306CR */ | ||
2520 | PORTCR(307, 0xe6052133), /* PORT307CR */ | ||
2521 | PORTCR(308, 0xe6052134), /* PORT308CR */ | ||
2522 | PORTCR(309, 0xe6052135), /* PORT309CR */ | ||
2523 | |||
2524 | { PINMUX_CFG_REG("MSEL2CR", 0xe605801c, 32, 1) { | ||
2525 | 0, 0, | ||
2526 | 0, 0, | ||
2527 | 0, 0, | ||
2528 | 0, 0, | ||
2529 | 0, 0, | ||
2530 | 0, 0, | ||
2531 | 0, 0, | ||
2532 | 0, 0, | ||
2533 | 0, 0, | ||
2534 | 0, 0, | ||
2535 | 0, 0, | ||
2536 | 0, 0, | ||
2537 | MSEL2CR_MSEL19_0, MSEL2CR_MSEL19_1, | ||
2538 | MSEL2CR_MSEL18_0, MSEL2CR_MSEL18_1, | ||
2539 | MSEL2CR_MSEL17_0, MSEL2CR_MSEL17_1, | ||
2540 | MSEL2CR_MSEL16_0, MSEL2CR_MSEL16_1, | ||
2541 | 0, 0, | ||
2542 | MSEL2CR_MSEL14_0, MSEL2CR_MSEL14_1, | ||
2543 | MSEL2CR_MSEL13_0, MSEL2CR_MSEL13_1, | ||
2544 | MSEL2CR_MSEL12_0, MSEL2CR_MSEL12_1, | ||
2545 | MSEL2CR_MSEL11_0, MSEL2CR_MSEL11_1, | ||
2546 | MSEL2CR_MSEL10_0, MSEL2CR_MSEL10_1, | ||
2547 | MSEL2CR_MSEL9_0, MSEL2CR_MSEL9_1, | ||
2548 | MSEL2CR_MSEL8_0, MSEL2CR_MSEL8_1, | ||
2549 | MSEL2CR_MSEL7_0, MSEL2CR_MSEL7_1, | ||
2550 | MSEL2CR_MSEL6_0, MSEL2CR_MSEL6_1, | ||
2551 | MSEL2CR_MSEL5_0, MSEL2CR_MSEL5_1, | ||
2552 | MSEL2CR_MSEL4_0, MSEL2CR_MSEL4_1, | ||
2553 | MSEL2CR_MSEL3_0, MSEL2CR_MSEL3_1, | ||
2554 | MSEL2CR_MSEL2_0, MSEL2CR_MSEL2_1, | ||
2555 | MSEL2CR_MSEL1_0, MSEL2CR_MSEL1_1, | ||
2556 | MSEL2CR_MSEL0_0, MSEL2CR_MSEL0_1, | ||
2557 | } | ||
2558 | }, | ||
2559 | { PINMUX_CFG_REG("MSEL3CR", 0xe6058020, 32, 1) { | ||
2560 | 0, 0, | ||
2561 | 0, 0, | ||
2562 | 0, 0, | ||
2563 | MSEL3CR_MSEL28_0, MSEL3CR_MSEL28_1, | ||
2564 | 0, 0, | ||
2565 | 0, 0, | ||
2566 | 0, 0, | ||
2567 | 0, 0, | ||
2568 | 0, 0, | ||
2569 | 0, 0, | ||
2570 | 0, 0, | ||
2571 | 0, 0, | ||
2572 | 0, 0, | ||
2573 | 0, 0, | ||
2574 | 0, 0, | ||
2575 | 0, 0, | ||
2576 | MSEL3CR_MSEL15_0, MSEL3CR_MSEL15_1, | ||
2577 | 0, 0, | ||
2578 | 0, 0, | ||
2579 | 0, 0, | ||
2580 | MSEL3CR_MSEL11_0, MSEL3CR_MSEL11_1, | ||
2581 | 0, 0, | ||
2582 | MSEL3CR_MSEL9_0, MSEL3CR_MSEL9_1, | ||
2583 | 0, 0, | ||
2584 | 0, 0, | ||
2585 | MSEL3CR_MSEL6_0, MSEL3CR_MSEL6_1, | ||
2586 | 0, 0, | ||
2587 | 0, 0, | ||
2588 | 0, 0, | ||
2589 | MSEL3CR_MSEL2_0, MSEL3CR_MSEL2_1, | ||
2590 | 0, 0, | ||
2591 | 0, 0, | ||
2592 | } | ||
2593 | }, | ||
2594 | { PINMUX_CFG_REG("MSEL4CR", 0xe6058024, 32, 1) { | ||
2595 | 0, 0, | ||
2596 | 0, 0, | ||
2597 | MSEL4CR_MSEL29_0, MSEL4CR_MSEL29_1, | ||
2598 | 0, 0, | ||
2599 | MSEL4CR_MSEL27_0, MSEL4CR_MSEL27_1, | ||
2600 | MSEL4CR_MSEL26_0, MSEL4CR_MSEL26_1, | ||
2601 | 0, 0, | ||
2602 | 0, 0, | ||
2603 | 0, 0, | ||
2604 | MSEL4CR_MSEL22_0, MSEL4CR_MSEL22_1, | ||
2605 | MSEL4CR_MSEL21_0, MSEL4CR_MSEL21_1, | ||
2606 | MSEL4CR_MSEL20_0, MSEL4CR_MSEL20_1, | ||
2607 | MSEL4CR_MSEL19_0, MSEL4CR_MSEL19_1, | ||
2608 | 0, 0, | ||
2609 | 0, 0, | ||
2610 | 0, 0, | ||
2611 | MSEL4CR_MSEL15_0, MSEL4CR_MSEL15_1, | ||
2612 | 0, 0, | ||
2613 | MSEL4CR_MSEL13_0, MSEL4CR_MSEL13_1, | ||
2614 | MSEL4CR_MSEL12_0, MSEL4CR_MSEL12_1, | ||
2615 | MSEL4CR_MSEL11_0, MSEL4CR_MSEL11_1, | ||
2616 | MSEL4CR_MSEL10_0, MSEL4CR_MSEL10_1, | ||
2617 | MSEL4CR_MSEL9_0, MSEL4CR_MSEL9_1, | ||
2618 | MSEL4CR_MSEL8_0, MSEL4CR_MSEL8_1, | ||
2619 | MSEL4CR_MSEL7_0, MSEL4CR_MSEL7_1, | ||
2620 | 0, 0, | ||
2621 | 0, 0, | ||
2622 | MSEL4CR_MSEL4_0, MSEL4CR_MSEL4_1, | ||
2623 | 0, 0, | ||
2624 | 0, 0, | ||
2625 | MSEL4CR_MSEL1_0, MSEL4CR_MSEL1_1, | ||
2626 | 0, 0, | ||
2627 | } | ||
2628 | }, | ||
2629 | { }, | ||
2630 | }; | ||
2631 | |||
2632 | static struct pinmux_data_reg pinmux_data_regs[] = { | ||
2633 | { PINMUX_DATA_REG("PORTL031_000DR", 0xe6054000, 32) { | ||
2634 | PORT31_DATA, PORT30_DATA, PORT29_DATA, PORT28_DATA, | ||
2635 | PORT27_DATA, PORT26_DATA, PORT25_DATA, PORT24_DATA, | ||
2636 | PORT23_DATA, PORT22_DATA, PORT21_DATA, PORT20_DATA, | ||
2637 | PORT19_DATA, PORT18_DATA, PORT17_DATA, PORT16_DATA, | ||
2638 | PORT15_DATA, PORT14_DATA, PORT13_DATA, PORT12_DATA, | ||
2639 | PORT11_DATA, PORT10_DATA, PORT9_DATA, PORT8_DATA, | ||
2640 | PORT7_DATA, PORT6_DATA, PORT5_DATA, PORT4_DATA, | ||
2641 | PORT3_DATA, PORT2_DATA, PORT1_DATA, PORT0_DATA } | ||
2642 | }, | ||
2643 | { PINMUX_DATA_REG("PORTD063_032DR", 0xe6055000, 32) { | ||
2644 | PORT63_DATA, PORT62_DATA, PORT61_DATA, PORT60_DATA, | ||
2645 | PORT59_DATA, PORT58_DATA, PORT57_DATA, PORT56_DATA, | ||
2646 | PORT55_DATA, PORT54_DATA, PORT53_DATA, PORT52_DATA, | ||
2647 | PORT51_DATA, PORT50_DATA, PORT49_DATA, PORT48_DATA, | ||
2648 | PORT47_DATA, PORT46_DATA, PORT45_DATA, PORT44_DATA, | ||
2649 | PORT43_DATA, PORT42_DATA, PORT41_DATA, PORT40_DATA, | ||
2650 | PORT39_DATA, PORT38_DATA, PORT37_DATA, PORT36_DATA, | ||
2651 | PORT35_DATA, PORT34_DATA, PORT33_DATA, PORT32_DATA } | ||
2652 | }, | ||
2653 | { PINMUX_DATA_REG("PORTD095_064DR", 0xe6055004, 32) { | ||
2654 | PORT95_DATA, PORT94_DATA, PORT93_DATA, PORT92_DATA, | ||
2655 | PORT91_DATA, PORT90_DATA, PORT89_DATA, PORT88_DATA, | ||
2656 | PORT87_DATA, PORT86_DATA, PORT85_DATA, PORT84_DATA, | ||
2657 | PORT83_DATA, PORT82_DATA, PORT81_DATA, PORT80_DATA, | ||
2658 | PORT79_DATA, PORT78_DATA, PORT77_DATA, PORT76_DATA, | ||
2659 | PORT75_DATA, PORT74_DATA, PORT73_DATA, PORT72_DATA, | ||
2660 | PORT71_DATA, PORT70_DATA, PORT69_DATA, PORT68_DATA, | ||
2661 | PORT67_DATA, PORT66_DATA, PORT65_DATA, PORT64_DATA } | ||
2662 | }, | ||
2663 | { PINMUX_DATA_REG("PORTR127_096DR", 0xe6056000, 32) { | ||
2664 | 0, 0, 0, 0, | ||
2665 | 0, 0, 0, 0, | ||
2666 | 0, PORT118_DATA, PORT117_DATA, PORT116_DATA, | ||
2667 | PORT115_DATA, PORT114_DATA, PORT113_DATA, PORT112_DATA, | ||
2668 | PORT111_DATA, PORT110_DATA, PORT109_DATA, PORT108_DATA, | ||
2669 | PORT107_DATA, PORT106_DATA, PORT105_DATA, PORT104_DATA, | ||
2670 | PORT103_DATA, PORT102_DATA, PORT101_DATA, PORT100_DATA, | ||
2671 | PORT99_DATA, PORT98_DATA, PORT97_DATA, PORT96_DATA } | ||
2672 | }, | ||
2673 | { PINMUX_DATA_REG("PORTR159_128DR", 0xe6056004, 32) { | ||
2674 | PORT159_DATA, PORT158_DATA, PORT157_DATA, PORT156_DATA, | ||
2675 | PORT155_DATA, PORT154_DATA, PORT153_DATA, PORT152_DATA, | ||
2676 | PORT151_DATA, PORT150_DATA, PORT149_DATA, PORT148_DATA, | ||
2677 | PORT147_DATA, PORT146_DATA, PORT145_DATA, PORT144_DATA, | ||
2678 | PORT143_DATA, PORT142_DATA, PORT141_DATA, PORT140_DATA, | ||
2679 | PORT139_DATA, PORT138_DATA, PORT137_DATA, PORT136_DATA, | ||
2680 | PORT135_DATA, PORT134_DATA, PORT133_DATA, PORT132_DATA, | ||
2681 | PORT131_DATA, PORT130_DATA, PORT129_DATA, PORT128_DATA } | ||
2682 | }, | ||
2683 | { PINMUX_DATA_REG("PORTR191_160DR", 0xe6056008, 32) { | ||
2684 | 0, 0, 0, 0, | ||
2685 | 0, 0, 0, 0, | ||
2686 | 0, 0, 0, 0, | ||
2687 | 0, 0, 0, 0, | ||
2688 | 0, 0, 0, 0, | ||
2689 | 0, 0, 0, 0, | ||
2690 | 0, 0, 0, PORT164_DATA, | ||
2691 | PORT163_DATA, PORT162_DATA, PORT161_DATA, PORT160_DATA } | ||
2692 | }, | ||
2693 | { PINMUX_DATA_REG("PORTR223_192DR", 0xe605600C, 32) { | ||
2694 | PORT223_DATA, PORT222_DATA, PORT221_DATA, PORT220_DATA, | ||
2695 | PORT219_DATA, PORT218_DATA, PORT217_DATA, PORT216_DATA, | ||
2696 | PORT215_DATA, PORT214_DATA, PORT213_DATA, PORT212_DATA, | ||
2697 | PORT211_DATA, PORT210_DATA, PORT209_DATA, PORT208_DATA, | ||
2698 | PORT207_DATA, PORT206_DATA, PORT205_DATA, PORT204_DATA, | ||
2699 | PORT203_DATA, PORT202_DATA, PORT201_DATA, PORT200_DATA, | ||
2700 | PORT199_DATA, PORT198_DATA, PORT197_DATA, PORT196_DATA, | ||
2701 | PORT195_DATA, PORT194_DATA, PORT193_DATA, PORT192_DATA } | ||
2702 | }, | ||
2703 | { PINMUX_DATA_REG("PORTU255_224DR", 0xe6057000, 32) { | ||
2704 | PORT255_DATA, PORT254_DATA, PORT253_DATA, PORT252_DATA, | ||
2705 | PORT251_DATA, PORT250_DATA, PORT249_DATA, PORT248_DATA, | ||
2706 | PORT247_DATA, PORT246_DATA, PORT245_DATA, PORT244_DATA, | ||
2707 | PORT243_DATA, PORT242_DATA, PORT241_DATA, PORT240_DATA, | ||
2708 | PORT239_DATA, PORT238_DATA, PORT237_DATA, PORT236_DATA, | ||
2709 | PORT235_DATA, PORT234_DATA, PORT233_DATA, PORT232_DATA, | ||
2710 | PORT231_DATA, PORT230_DATA, PORT229_DATA, PORT228_DATA, | ||
2711 | PORT227_DATA, PORT226_DATA, PORT225_DATA, PORT224_DATA } | ||
2712 | }, | ||
2713 | { PINMUX_DATA_REG("PORTU287_256DR", 0xe6057004, 32) { | ||
2714 | 0, 0, 0, 0, | ||
2715 | 0, PORT282_DATA, PORT281_DATA, PORT280_DATA, | ||
2716 | PORT279_DATA, PORT278_DATA, PORT277_DATA, PORT276_DATA, | ||
2717 | PORT275_DATA, PORT274_DATA, PORT273_DATA, PORT272_DATA, | ||
2718 | PORT271_DATA, PORT270_DATA, PORT269_DATA, PORT268_DATA, | ||
2719 | PORT267_DATA, PORT266_DATA, PORT265_DATA, PORT264_DATA, | ||
2720 | PORT263_DATA, PORT262_DATA, PORT261_DATA, PORT260_DATA, | ||
2721 | PORT259_DATA, PORT258_DATA, PORT257_DATA, PORT256_DATA } | ||
2722 | }, | ||
2723 | { PINMUX_DATA_REG("PORTR319_288DR", 0xe6056010, 32) { | ||
2724 | 0, 0, 0, 0, | ||
2725 | 0, 0, 0, 0, | ||
2726 | 0, 0, PORT309_DATA, PORT308_DATA, | ||
2727 | PORT307_DATA, PORT306_DATA, PORT305_DATA, PORT304_DATA, | ||
2728 | PORT303_DATA, PORT302_DATA, PORT301_DATA, PORT300_DATA, | ||
2729 | PORT299_DATA, PORT298_DATA, PORT297_DATA, PORT296_DATA, | ||
2730 | PORT295_DATA, PORT294_DATA, PORT293_DATA, PORT292_DATA, | ||
2731 | PORT291_DATA, PORT290_DATA, PORT289_DATA, PORT288_DATA } | ||
2732 | }, | ||
2733 | { }, | ||
2734 | }; | ||
2735 | |||
2736 | /* IRQ pins through INTCS with IRQ0->15 from 0x200 and IRQ16-31 from 0x3200 */ | ||
2737 | #define EXT_IRQ16L(n) intcs_evt2irq(0x200 + ((n) << 5)) | ||
2738 | #define EXT_IRQ16H(n) intcs_evt2irq(0x3200 + ((n - 16) << 5)) | ||
2739 | |||
2740 | static struct pinmux_irq pinmux_irqs[] = { | ||
2741 | PINMUX_IRQ(EXT_IRQ16H(19), PORT9_FN0), | ||
2742 | PINMUX_IRQ(EXT_IRQ16L(1), PORT10_FN0), | ||
2743 | PINMUX_IRQ(EXT_IRQ16L(0), PORT11_FN0), | ||
2744 | PINMUX_IRQ(EXT_IRQ16H(18), PORT13_FN0), | ||
2745 | PINMUX_IRQ(EXT_IRQ16H(20), PORT14_FN0), | ||
2746 | PINMUX_IRQ(EXT_IRQ16H(21), PORT15_FN0), | ||
2747 | PINMUX_IRQ(EXT_IRQ16H(31), PORT26_FN0), | ||
2748 | PINMUX_IRQ(EXT_IRQ16H(30), PORT27_FN0), | ||
2749 | PINMUX_IRQ(EXT_IRQ16H(29), PORT28_FN0), | ||
2750 | PINMUX_IRQ(EXT_IRQ16H(22), PORT40_FN0), | ||
2751 | PINMUX_IRQ(EXT_IRQ16H(23), PORT53_FN0), | ||
2752 | PINMUX_IRQ(EXT_IRQ16L(10), PORT54_FN0), | ||
2753 | PINMUX_IRQ(EXT_IRQ16L(9), PORT56_FN0), | ||
2754 | PINMUX_IRQ(EXT_IRQ16H(26), PORT115_FN0), | ||
2755 | PINMUX_IRQ(EXT_IRQ16H(27), PORT116_FN0), | ||
2756 | PINMUX_IRQ(EXT_IRQ16H(28), PORT117_FN0), | ||
2757 | PINMUX_IRQ(EXT_IRQ16H(24), PORT118_FN0), | ||
2758 | PINMUX_IRQ(EXT_IRQ16L(6), PORT147_FN0), | ||
2759 | PINMUX_IRQ(EXT_IRQ16L(2), PORT149_FN0), | ||
2760 | PINMUX_IRQ(EXT_IRQ16L(7), PORT150_FN0), | ||
2761 | PINMUX_IRQ(EXT_IRQ16L(12), PORT156_FN0), | ||
2762 | PINMUX_IRQ(EXT_IRQ16L(4), PORT159_FN0), | ||
2763 | PINMUX_IRQ(EXT_IRQ16H(25), PORT164_FN0), | ||
2764 | PINMUX_IRQ(EXT_IRQ16L(8), PORT223_FN0), | ||
2765 | PINMUX_IRQ(EXT_IRQ16L(3), PORT224_FN0), | ||
2766 | PINMUX_IRQ(EXT_IRQ16L(5), PORT227_FN0), | ||
2767 | PINMUX_IRQ(EXT_IRQ16H(17), PORT234_FN0), | ||
2768 | PINMUX_IRQ(EXT_IRQ16L(11), PORT238_FN0), | ||
2769 | PINMUX_IRQ(EXT_IRQ16L(13), PORT239_FN0), | ||
2770 | PINMUX_IRQ(EXT_IRQ16H(16), PORT249_FN0), | ||
2771 | PINMUX_IRQ(EXT_IRQ16L(14), PORT251_FN0), | ||
2772 | PINMUX_IRQ(EXT_IRQ16L(9), PORT308_FN0), | ||
2773 | }; | ||
2774 | |||
2775 | static struct pinmux_info sh73a0_pinmux_info = { | ||
2776 | .name = "sh73a0_pfc", | ||
2777 | .reserved_id = PINMUX_RESERVED, | ||
2778 | .data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, | ||
2779 | .input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, | ||
2780 | .input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, | ||
2781 | .input_pd = { PINMUX_INPUT_PULLDOWN_BEGIN, PINMUX_INPUT_PULLDOWN_END }, | ||
2782 | .output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, | ||
2783 | .mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, | ||
2784 | .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, | ||
2785 | |||
2786 | .first_gpio = GPIO_PORT0, | ||
2787 | .last_gpio = GPIO_FN_FSIAISLD_PU, | ||
2788 | |||
2789 | .gpios = pinmux_gpios, | ||
2790 | .cfg_regs = pinmux_config_regs, | ||
2791 | .data_regs = pinmux_data_regs, | ||
2792 | |||
2793 | .gpio_data = pinmux_data, | ||
2794 | .gpio_data_size = ARRAY_SIZE(pinmux_data), | ||
2795 | |||
2796 | .gpio_irq = pinmux_irqs, | ||
2797 | .gpio_irq_size = ARRAY_SIZE(pinmux_irqs), | ||
2798 | }; | ||
2799 | |||
2800 | void sh73a0_pinmux_init(void) | ||
2801 | { | ||
2802 | register_pinmux(&sh73a0_pinmux_info); | ||
2803 | } | ||
diff --git a/arch/arm/mach-shmobile/setup-r8a7740.c b/arch/arm/mach-shmobile/setup-r8a7740.c index 847567d55487..30ac79c7c687 100644 --- a/arch/arm/mach-shmobile/setup-r8a7740.c +++ b/arch/arm/mach-shmobile/setup-r8a7740.c | |||
@@ -67,6 +67,32 @@ void __init r8a7740_map_io(void) | |||
67 | iotable_init(r8a7740_io_desc, ARRAY_SIZE(r8a7740_io_desc)); | 67 | iotable_init(r8a7740_io_desc, ARRAY_SIZE(r8a7740_io_desc)); |
68 | } | 68 | } |
69 | 69 | ||
70 | /* PFC */ | ||
71 | static struct resource r8a7740_pfc_resources[] = { | ||
72 | [0] = { | ||
73 | .start = 0xe6050000, | ||
74 | .end = 0xe6057fff, | ||
75 | .flags = IORESOURCE_MEM, | ||
76 | }, | ||
77 | [1] = { | ||
78 | .start = 0xe605800c, | ||
79 | .end = 0xe605802b, | ||
80 | .flags = IORESOURCE_MEM, | ||
81 | } | ||
82 | }; | ||
83 | |||
84 | static struct platform_device r8a7740_pfc_device = { | ||
85 | .name = "pfc-r8a7740", | ||
86 | .id = -1, | ||
87 | .resource = r8a7740_pfc_resources, | ||
88 | .num_resources = ARRAY_SIZE(r8a7740_pfc_resources), | ||
89 | }; | ||
90 | |||
91 | void __init r8a7740_pinmux_init(void) | ||
92 | { | ||
93 | platform_device_register(&r8a7740_pfc_device); | ||
94 | } | ||
95 | |||
70 | /* SCIFA0 */ | 96 | /* SCIFA0 */ |
71 | static struct plat_sci_port scif0_platform_data = { | 97 | static struct plat_sci_port scif0_platform_data = { |
72 | .mapbase = 0xe6c40000, | 98 | .mapbase = 0xe6c40000, |
diff --git a/arch/arm/mach-shmobile/setup-r8a7779.c b/arch/arm/mach-shmobile/setup-r8a7779.c index 7e87ab3eb8d3..c54ff9b29fe5 100644 --- a/arch/arm/mach-shmobile/setup-r8a7779.c +++ b/arch/arm/mach-shmobile/setup-r8a7779.c | |||
@@ -60,6 +60,31 @@ void __init r8a7779_map_io(void) | |||
60 | iotable_init(r8a7779_io_desc, ARRAY_SIZE(r8a7779_io_desc)); | 60 | iotable_init(r8a7779_io_desc, ARRAY_SIZE(r8a7779_io_desc)); |
61 | } | 61 | } |
62 | 62 | ||
63 | static struct resource r8a7779_pfc_resources[] = { | ||
64 | [0] = { | ||
65 | .start = 0xfffc0000, | ||
66 | .end = 0xfffc023b, | ||
67 | .flags = IORESOURCE_MEM, | ||
68 | }, | ||
69 | [1] = { | ||
70 | .start = 0xffc40000, | ||
71 | .end = 0xffc46fff, | ||
72 | .flags = IORESOURCE_MEM, | ||
73 | } | ||
74 | }; | ||
75 | |||
76 | static struct platform_device r8a7779_pfc_device = { | ||
77 | .name = "pfc-r8a7779", | ||
78 | .id = -1, | ||
79 | .resource = r8a7779_pfc_resources, | ||
80 | .num_resources = ARRAY_SIZE(r8a7779_pfc_resources), | ||
81 | }; | ||
82 | |||
83 | void __init r8a7779_pinmux_init(void) | ||
84 | { | ||
85 | platform_device_register(&r8a7779_pfc_device); | ||
86 | } | ||
87 | |||
63 | static struct plat_sci_port scif0_platform_data = { | 88 | static struct plat_sci_port scif0_platform_data = { |
64 | .mapbase = 0xffe40000, | 89 | .mapbase = 0xffe40000, |
65 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, | 90 | .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, |
diff --git a/arch/arm/mach-shmobile/setup-sh7372.c b/arch/arm/mach-shmobile/setup-sh7372.c index 191ae72e21ba..d2079d5e3334 100644 --- a/arch/arm/mach-shmobile/setup-sh7372.c +++ b/arch/arm/mach-shmobile/setup-sh7372.c | |||
@@ -60,6 +60,32 @@ void __init sh7372_map_io(void) | |||
60 | iotable_init(sh7372_io_desc, ARRAY_SIZE(sh7372_io_desc)); | 60 | iotable_init(sh7372_io_desc, ARRAY_SIZE(sh7372_io_desc)); |
61 | } | 61 | } |
62 | 62 | ||
63 | /* PFC */ | ||
64 | static struct resource sh7372_pfc_resources[] = { | ||
65 | [0] = { | ||
66 | .start = 0xe6050000, | ||
67 | .end = 0xe6057fff, | ||
68 | .flags = IORESOURCE_MEM, | ||
69 | }, | ||
70 | [1] = { | ||
71 | .start = 0xe605800c, | ||
72 | .end = 0xe6058027, | ||
73 | .flags = IORESOURCE_MEM, | ||
74 | } | ||
75 | }; | ||
76 | |||
77 | static struct platform_device sh7372_pfc_device = { | ||
78 | .name = "pfc-sh7372", | ||
79 | .id = -1, | ||
80 | .resource = sh7372_pfc_resources, | ||
81 | .num_resources = ARRAY_SIZE(sh7372_pfc_resources), | ||
82 | }; | ||
83 | |||
84 | void __init sh7372_pinmux_init(void) | ||
85 | { | ||
86 | platform_device_register(&sh7372_pfc_device); | ||
87 | } | ||
88 | |||
63 | /* SCIFA0 */ | 89 | /* SCIFA0 */ |
64 | static struct plat_sci_port scif0_platform_data = { | 90 | static struct plat_sci_port scif0_platform_data = { |
65 | .mapbase = 0xe6c40000, | 91 | .mapbase = 0xe6c40000, |
diff --git a/arch/arm/mach-shmobile/setup-sh73a0.c b/arch/arm/mach-shmobile/setup-sh73a0.c index f7ecb0bc1bec..2ecd6681692f 100644 --- a/arch/arm/mach-shmobile/setup-sh73a0.c +++ b/arch/arm/mach-shmobile/setup-sh73a0.c | |||
@@ -58,6 +58,31 @@ void __init sh73a0_map_io(void) | |||
58 | iotable_init(sh73a0_io_desc, ARRAY_SIZE(sh73a0_io_desc)); | 58 | iotable_init(sh73a0_io_desc, ARRAY_SIZE(sh73a0_io_desc)); |
59 | } | 59 | } |
60 | 60 | ||
61 | static struct resource sh73a0_pfc_resources[] = { | ||
62 | [0] = { | ||
63 | .start = 0xe6050000, | ||
64 | .end = 0xe6057fff, | ||
65 | .flags = IORESOURCE_MEM, | ||
66 | }, | ||
67 | [1] = { | ||
68 | .start = 0xe605801c, | ||
69 | .end = 0xe6058027, | ||
70 | .flags = IORESOURCE_MEM, | ||
71 | } | ||
72 | }; | ||
73 | |||
74 | static struct platform_device sh73a0_pfc_device = { | ||
75 | .name = "pfc-sh73a0", | ||
76 | .id = -1, | ||
77 | .resource = sh73a0_pfc_resources, | ||
78 | .num_resources = ARRAY_SIZE(sh73a0_pfc_resources), | ||
79 | }; | ||
80 | |||
81 | void __init sh73a0_pinmux_init(void) | ||
82 | { | ||
83 | platform_device_register(&sh73a0_pfc_device); | ||
84 | } | ||
85 | |||
61 | static struct plat_sci_port scif0_platform_data = { | 86 | static struct plat_sci_port scif0_platform_data = { |
62 | .mapbase = 0xe6c40000, | 87 | .mapbase = 0xe6c40000, |
63 | .flags = UPF_BOOT_AUTOCONF, | 88 | .flags = UPF_BOOT_AUTOCONF, |
diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig index 3fdd0085e306..8709a39bd34c 100644 --- a/arch/arm/mach-sunxi/Kconfig +++ b/arch/arm/mach-sunxi/Kconfig | |||
@@ -7,3 +7,4 @@ config ARCH_SUNXI | |||
7 | select PINCTRL | 7 | select PINCTRL |
8 | select SPARSE_IRQ | 8 | select SPARSE_IRQ |
9 | select SUNXI_TIMER | 9 | select SUNXI_TIMER |
10 | select PINCTRL_SUNXI \ No newline at end of file | ||
diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c index fb8fbcecb17f..23afb732cb40 100644 --- a/arch/arm/mach-sunxi/sunxi.c +++ b/arch/arm/mach-sunxi/sunxi.c | |||
@@ -27,7 +27,10 @@ | |||
27 | #include "sunxi.h" | 27 | #include "sunxi.h" |
28 | 28 | ||
29 | #define WATCHDOG_CTRL_REG 0x00 | 29 | #define WATCHDOG_CTRL_REG 0x00 |
30 | #define WATCHDOG_CTRL_RESTART (1 << 0) | ||
30 | #define WATCHDOG_MODE_REG 0x04 | 31 | #define WATCHDOG_MODE_REG 0x04 |
32 | #define WATCHDOG_MODE_ENABLE (1 << 0) | ||
33 | #define WATCHDOG_MODE_RESET_ENABLE (1 << 1) | ||
31 | 34 | ||
32 | static void __iomem *wdt_base; | 35 | static void __iomem *wdt_base; |
33 | 36 | ||
@@ -48,11 +51,19 @@ static void sunxi_restart(char mode, const char *cmd) | |||
48 | return; | 51 | return; |
49 | 52 | ||
50 | /* Enable timer and set reset bit in the watchdog */ | 53 | /* Enable timer and set reset bit in the watchdog */ |
51 | writel(3, wdt_base + WATCHDOG_MODE_REG); | 54 | writel(WATCHDOG_MODE_ENABLE | WATCHDOG_MODE_RESET_ENABLE, |
52 | writel(0xa57 << 1 | 1, wdt_base + WATCHDOG_CTRL_REG); | 55 | wdt_base + WATCHDOG_MODE_REG); |
53 | while(1) { | 56 | |
57 | /* | ||
58 | * Restart the watchdog. The default (and lowest) interval | ||
59 | * value for the watchdog is 0.5s. | ||
60 | */ | ||
61 | writel(WATCHDOG_CTRL_RESTART, wdt_base + WATCHDOG_CTRL_REG); | ||
62 | |||
63 | while (1) { | ||
54 | mdelay(5); | 64 | mdelay(5); |
55 | writel(3, wdt_base + WATCHDOG_MODE_REG); | 65 | writel(WATCHDOG_MODE_ENABLE | WATCHDOG_MODE_RESET_ENABLE, |
66 | wdt_base + WATCHDOG_MODE_REG); | ||
56 | } | 67 | } |
57 | } | 68 | } |
58 | 69 | ||
diff --git a/arch/arm/mach-tegra/cpu-tegra.c b/arch/arm/mach-tegra/cpu-tegra.c index ebffed67e2f5..e3d6e15ff188 100644 --- a/arch/arm/mach-tegra/cpu-tegra.c +++ b/arch/arm/mach-tegra/cpu-tegra.c | |||
@@ -225,8 +225,7 @@ static int tegra_cpu_init(struct cpufreq_policy *policy) | |||
225 | /* FIXME: what's the actual transition time? */ | 225 | /* FIXME: what's the actual transition time? */ |
226 | policy->cpuinfo.transition_latency = 300 * 1000; | 226 | policy->cpuinfo.transition_latency = 300 * 1000; |
227 | 227 | ||
228 | policy->shared_type = CPUFREQ_SHARED_TYPE_ALL; | 228 | cpumask_copy(policy->cpus, cpu_possible_mask); |
229 | cpumask_copy(policy->related_cpus, cpu_possible_mask); | ||
230 | 229 | ||
231 | if (policy->cpu == 0) | 230 | if (policy->cpu == 0) |
232 | register_pm_notifier(&tegra_cpu_pm_notifier); | 231 | register_pm_notifier(&tegra_cpu_pm_notifier); |
diff --git a/arch/arm/mach-tegra/include/mach/uncompress.h b/arch/arm/mach-tegra/include/mach/uncompress.h index 485003f9b636..08386418196f 100644 --- a/arch/arm/mach-tegra/include/mach/uncompress.h +++ b/arch/arm/mach-tegra/include/mach/uncompress.h | |||
@@ -172,8 +172,4 @@ static inline void arch_decomp_setup(void) | |||
172 | uart[UART_LCR << DEBUG_UART_SHIFT] = 3; | 172 | uart[UART_LCR << DEBUG_UART_SHIFT] = 3; |
173 | } | 173 | } |
174 | 174 | ||
175 | static inline void arch_decomp_wdog(void) | ||
176 | { | ||
177 | } | ||
178 | |||
179 | #endif | 175 | #endif |
diff --git a/arch/arm/mach-tegra/tegra2_emc.c b/arch/arm/mach-tegra/tegra2_emc.c index e18aa2f83ebf..ce7ce42a1ac9 100644 --- a/arch/arm/mach-tegra/tegra2_emc.c +++ b/arch/arm/mach-tegra/tegra2_emc.c | |||
@@ -312,11 +312,9 @@ static int tegra_emc_probe(struct platform_device *pdev) | |||
312 | return -ENOMEM; | 312 | return -ENOMEM; |
313 | } | 313 | } |
314 | 314 | ||
315 | emc_regbase = devm_request_and_ioremap(&pdev->dev, res); | 315 | emc_regbase = devm_ioremap_resource(&pdev->dev, res); |
316 | if (!emc_regbase) { | 316 | if (IS_ERR(emc_regbase)) |
317 | dev_err(&pdev->dev, "failed to remap registers\n"); | 317 | return PTR_ERR(emc_regbase); |
318 | return -ENOMEM; | ||
319 | } | ||
320 | 318 | ||
321 | pdata = pdev->dev.platform_data; | 319 | pdata = pdev->dev.platform_data; |
322 | 320 | ||
diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c index 12060ae4e8f1..a683d17b2ce4 100644 --- a/arch/arm/mach-u300/core.c +++ b/arch/arm/mach-u300/core.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/dma-mapping.h> | 31 | #include <linux/dma-mapping.h> |
32 | #include <linux/platform_data/clk-u300.h> | 32 | #include <linux/platform_data/clk-u300.h> |
33 | #include <linux/platform_data/pinctrl-coh901.h> | 33 | #include <linux/platform_data/pinctrl-coh901.h> |
34 | #include <linux/platform_data/dma-coh901318.h> | ||
34 | #include <linux/irqchip/arm-vic.h> | 35 | #include <linux/irqchip/arm-vic.h> |
35 | 36 | ||
36 | #include <asm/types.h> | 37 | #include <asm/types.h> |
@@ -40,7 +41,6 @@ | |||
40 | #include <asm/mach-types.h> | 41 | #include <asm/mach-types.h> |
41 | #include <asm/mach/arch.h> | 42 | #include <asm/mach/arch.h> |
42 | 43 | ||
43 | #include <mach/coh901318.h> | ||
44 | #include <mach/hardware.h> | 44 | #include <mach/hardware.h> |
45 | #include <mach/syscon.h> | 45 | #include <mach/syscon.h> |
46 | #include <mach/irqs.h> | 46 | #include <mach/irqs.h> |
@@ -49,7 +49,6 @@ | |||
49 | #include "spi.h" | 49 | #include "spi.h" |
50 | #include "i2c.h" | 50 | #include "i2c.h" |
51 | #include "u300-gpio.h" | 51 | #include "u300-gpio.h" |
52 | #include "dma_channels.h" | ||
53 | 52 | ||
54 | /* | 53 | /* |
55 | * Static I/O mappings that are needed for booting the U300 platforms. The | 54 | * Static I/O mappings that are needed for booting the U300 platforms. The |
@@ -327,1089 +326,6 @@ static struct resource dma_resource[] = { | |||
327 | } | 326 | } |
328 | }; | 327 | }; |
329 | 328 | ||
330 | /* points out all dma slave channels. | ||
331 | * Syntax is [A1, B1, A2, B2, .... ,-1,-1] | ||
332 | * Select all channels from A to B, end of list is marked with -1,-1 | ||
333 | */ | ||
334 | static int dma_slave_channels[] = { | ||
335 | U300_DMA_MSL_TX_0, U300_DMA_SPI_RX, | ||
336 | U300_DMA_UART1_TX, U300_DMA_UART1_RX, -1, -1}; | ||
337 | |||
338 | /* points out all dma memcpy channels. */ | ||
339 | static int dma_memcpy_channels[] = { | ||
340 | U300_DMA_GENERAL_PURPOSE_0, U300_DMA_GENERAL_PURPOSE_8, -1, -1}; | ||
341 | |||
342 | /** register dma for memory access | ||
343 | * | ||
344 | * active 1 means dma intends to access memory | ||
345 | * 0 means dma wont access memory | ||
346 | */ | ||
347 | static void coh901318_access_memory_state(struct device *dev, bool active) | ||
348 | { | ||
349 | } | ||
350 | |||
351 | #define flags_memcpy_config (COH901318_CX_CFG_CH_DISABLE | \ | ||
352 | COH901318_CX_CFG_RM_MEMORY_TO_MEMORY | \ | ||
353 | COH901318_CX_CFG_LCR_DISABLE | \ | ||
354 | COH901318_CX_CFG_TC_IRQ_ENABLE | \ | ||
355 | COH901318_CX_CFG_BE_IRQ_ENABLE) | ||
356 | #define flags_memcpy_lli_chained (COH901318_CX_CTRL_TC_ENABLE | \ | ||
357 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \ | ||
358 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \ | ||
359 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \ | ||
360 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \ | ||
361 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \ | ||
362 | COH901318_CX_CTRL_MASTER_MODE_M1RW | \ | ||
363 | COH901318_CX_CTRL_TCP_DISABLE | \ | ||
364 | COH901318_CX_CTRL_TC_IRQ_DISABLE | \ | ||
365 | COH901318_CX_CTRL_HSP_DISABLE | \ | ||
366 | COH901318_CX_CTRL_HSS_DISABLE | \ | ||
367 | COH901318_CX_CTRL_DDMA_LEGACY | \ | ||
368 | COH901318_CX_CTRL_PRDD_SOURCE) | ||
369 | #define flags_memcpy_lli (COH901318_CX_CTRL_TC_ENABLE | \ | ||
370 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \ | ||
371 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \ | ||
372 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \ | ||
373 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \ | ||
374 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \ | ||
375 | COH901318_CX_CTRL_MASTER_MODE_M1RW | \ | ||
376 | COH901318_CX_CTRL_TCP_DISABLE | \ | ||
377 | COH901318_CX_CTRL_TC_IRQ_DISABLE | \ | ||
378 | COH901318_CX_CTRL_HSP_DISABLE | \ | ||
379 | COH901318_CX_CTRL_HSS_DISABLE | \ | ||
380 | COH901318_CX_CTRL_DDMA_LEGACY | \ | ||
381 | COH901318_CX_CTRL_PRDD_SOURCE) | ||
382 | #define flags_memcpy_lli_last (COH901318_CX_CTRL_TC_ENABLE | \ | ||
383 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | \ | ||
384 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | \ | ||
385 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | \ | ||
386 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | \ | ||
387 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | \ | ||
388 | COH901318_CX_CTRL_MASTER_MODE_M1RW | \ | ||
389 | COH901318_CX_CTRL_TCP_DISABLE | \ | ||
390 | COH901318_CX_CTRL_TC_IRQ_ENABLE | \ | ||
391 | COH901318_CX_CTRL_HSP_DISABLE | \ | ||
392 | COH901318_CX_CTRL_HSS_DISABLE | \ | ||
393 | COH901318_CX_CTRL_DDMA_LEGACY | \ | ||
394 | COH901318_CX_CTRL_PRDD_SOURCE) | ||
395 | |||
396 | const struct coh_dma_channel chan_config[U300_DMA_CHANNELS] = { | ||
397 | { | ||
398 | .number = U300_DMA_MSL_TX_0, | ||
399 | .name = "MSL TX 0", | ||
400 | .priority_high = 0, | ||
401 | .dev_addr = U300_MSL_BASE + 0 * 0x40 + 0x20, | ||
402 | }, | ||
403 | { | ||
404 | .number = U300_DMA_MSL_TX_1, | ||
405 | .name = "MSL TX 1", | ||
406 | .priority_high = 0, | ||
407 | .dev_addr = U300_MSL_BASE + 1 * 0x40 + 0x20, | ||
408 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
409 | COH901318_CX_CFG_LCR_DISABLE | | ||
410 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
411 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
412 | .param.ctrl_lli_chained = 0 | | ||
413 | COH901318_CX_CTRL_TC_ENABLE | | ||
414 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
415 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
416 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
417 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
418 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
419 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
420 | COH901318_CX_CTRL_TCP_DISABLE | | ||
421 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
422 | COH901318_CX_CTRL_HSP_ENABLE | | ||
423 | COH901318_CX_CTRL_HSS_DISABLE | | ||
424 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
425 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
426 | .param.ctrl_lli = 0 | | ||
427 | COH901318_CX_CTRL_TC_ENABLE | | ||
428 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
429 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
430 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
431 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
432 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
433 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
434 | COH901318_CX_CTRL_TCP_ENABLE | | ||
435 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
436 | COH901318_CX_CTRL_HSP_ENABLE | | ||
437 | COH901318_CX_CTRL_HSS_DISABLE | | ||
438 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
439 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
440 | .param.ctrl_lli_last = 0 | | ||
441 | COH901318_CX_CTRL_TC_ENABLE | | ||
442 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
443 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
444 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
445 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
446 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
447 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
448 | COH901318_CX_CTRL_TCP_ENABLE | | ||
449 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
450 | COH901318_CX_CTRL_HSP_ENABLE | | ||
451 | COH901318_CX_CTRL_HSS_DISABLE | | ||
452 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
453 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
454 | }, | ||
455 | { | ||
456 | .number = U300_DMA_MSL_TX_2, | ||
457 | .name = "MSL TX 2", | ||
458 | .priority_high = 0, | ||
459 | .dev_addr = U300_MSL_BASE + 2 * 0x40 + 0x20, | ||
460 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
461 | COH901318_CX_CFG_LCR_DISABLE | | ||
462 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
463 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
464 | .param.ctrl_lli_chained = 0 | | ||
465 | COH901318_CX_CTRL_TC_ENABLE | | ||
466 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
467 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
468 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
469 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
470 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
471 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
472 | COH901318_CX_CTRL_TCP_DISABLE | | ||
473 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
474 | COH901318_CX_CTRL_HSP_ENABLE | | ||
475 | COH901318_CX_CTRL_HSS_DISABLE | | ||
476 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
477 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
478 | .param.ctrl_lli = 0 | | ||
479 | COH901318_CX_CTRL_TC_ENABLE | | ||
480 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
481 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
482 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
483 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
484 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
485 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
486 | COH901318_CX_CTRL_TCP_ENABLE | | ||
487 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
488 | COH901318_CX_CTRL_HSP_ENABLE | | ||
489 | COH901318_CX_CTRL_HSS_DISABLE | | ||
490 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
491 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
492 | .param.ctrl_lli_last = 0 | | ||
493 | COH901318_CX_CTRL_TC_ENABLE | | ||
494 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
495 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
496 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
497 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
498 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
499 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
500 | COH901318_CX_CTRL_TCP_ENABLE | | ||
501 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
502 | COH901318_CX_CTRL_HSP_ENABLE | | ||
503 | COH901318_CX_CTRL_HSS_DISABLE | | ||
504 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
505 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
506 | .desc_nbr_max = 10, | ||
507 | }, | ||
508 | { | ||
509 | .number = U300_DMA_MSL_TX_3, | ||
510 | .name = "MSL TX 3", | ||
511 | .priority_high = 0, | ||
512 | .dev_addr = U300_MSL_BASE + 3 * 0x40 + 0x20, | ||
513 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
514 | COH901318_CX_CFG_LCR_DISABLE | | ||
515 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
516 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
517 | .param.ctrl_lli_chained = 0 | | ||
518 | COH901318_CX_CTRL_TC_ENABLE | | ||
519 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
520 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
521 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
522 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
523 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
524 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
525 | COH901318_CX_CTRL_TCP_DISABLE | | ||
526 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
527 | COH901318_CX_CTRL_HSP_ENABLE | | ||
528 | COH901318_CX_CTRL_HSS_DISABLE | | ||
529 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
530 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
531 | .param.ctrl_lli = 0 | | ||
532 | COH901318_CX_CTRL_TC_ENABLE | | ||
533 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
534 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
535 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
536 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
537 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
538 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
539 | COH901318_CX_CTRL_TCP_ENABLE | | ||
540 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
541 | COH901318_CX_CTRL_HSP_ENABLE | | ||
542 | COH901318_CX_CTRL_HSS_DISABLE | | ||
543 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
544 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
545 | .param.ctrl_lli_last = 0 | | ||
546 | COH901318_CX_CTRL_TC_ENABLE | | ||
547 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
548 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
549 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
550 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
551 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
552 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
553 | COH901318_CX_CTRL_TCP_ENABLE | | ||
554 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
555 | COH901318_CX_CTRL_HSP_ENABLE | | ||
556 | COH901318_CX_CTRL_HSS_DISABLE | | ||
557 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
558 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
559 | }, | ||
560 | { | ||
561 | .number = U300_DMA_MSL_TX_4, | ||
562 | .name = "MSL TX 4", | ||
563 | .priority_high = 0, | ||
564 | .dev_addr = U300_MSL_BASE + 4 * 0x40 + 0x20, | ||
565 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
566 | COH901318_CX_CFG_LCR_DISABLE | | ||
567 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
568 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
569 | .param.ctrl_lli_chained = 0 | | ||
570 | COH901318_CX_CTRL_TC_ENABLE | | ||
571 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
572 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
573 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
574 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
575 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
576 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
577 | COH901318_CX_CTRL_TCP_DISABLE | | ||
578 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
579 | COH901318_CX_CTRL_HSP_ENABLE | | ||
580 | COH901318_CX_CTRL_HSS_DISABLE | | ||
581 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
582 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
583 | .param.ctrl_lli = 0 | | ||
584 | COH901318_CX_CTRL_TC_ENABLE | | ||
585 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
586 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
587 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
588 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
589 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
590 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
591 | COH901318_CX_CTRL_TCP_ENABLE | | ||
592 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
593 | COH901318_CX_CTRL_HSP_ENABLE | | ||
594 | COH901318_CX_CTRL_HSS_DISABLE | | ||
595 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
596 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
597 | .param.ctrl_lli_last = 0 | | ||
598 | COH901318_CX_CTRL_TC_ENABLE | | ||
599 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
600 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
601 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
602 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
603 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
604 | COH901318_CX_CTRL_MASTER_MODE_M1R_M2W | | ||
605 | COH901318_CX_CTRL_TCP_ENABLE | | ||
606 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
607 | COH901318_CX_CTRL_HSP_ENABLE | | ||
608 | COH901318_CX_CTRL_HSS_DISABLE | | ||
609 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
610 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
611 | }, | ||
612 | { | ||
613 | .number = U300_DMA_MSL_TX_5, | ||
614 | .name = "MSL TX 5", | ||
615 | .priority_high = 0, | ||
616 | .dev_addr = U300_MSL_BASE + 5 * 0x40 + 0x20, | ||
617 | }, | ||
618 | { | ||
619 | .number = U300_DMA_MSL_TX_6, | ||
620 | .name = "MSL TX 6", | ||
621 | .priority_high = 0, | ||
622 | .dev_addr = U300_MSL_BASE + 6 * 0x40 + 0x20, | ||
623 | }, | ||
624 | { | ||
625 | .number = U300_DMA_MSL_RX_0, | ||
626 | .name = "MSL RX 0", | ||
627 | .priority_high = 0, | ||
628 | .dev_addr = U300_MSL_BASE + 0 * 0x40 + 0x220, | ||
629 | }, | ||
630 | { | ||
631 | .number = U300_DMA_MSL_RX_1, | ||
632 | .name = "MSL RX 1", | ||
633 | .priority_high = 0, | ||
634 | .dev_addr = U300_MSL_BASE + 1 * 0x40 + 0x220, | ||
635 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
636 | COH901318_CX_CFG_LCR_DISABLE | | ||
637 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
638 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
639 | .param.ctrl_lli_chained = 0 | | ||
640 | COH901318_CX_CTRL_TC_ENABLE | | ||
641 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
642 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
643 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
644 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
645 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
646 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
647 | COH901318_CX_CTRL_TCP_DISABLE | | ||
648 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
649 | COH901318_CX_CTRL_HSP_ENABLE | | ||
650 | COH901318_CX_CTRL_HSS_DISABLE | | ||
651 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
652 | COH901318_CX_CTRL_PRDD_DEST, | ||
653 | .param.ctrl_lli = 0, | ||
654 | .param.ctrl_lli_last = 0 | | ||
655 | COH901318_CX_CTRL_TC_ENABLE | | ||
656 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
657 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
658 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
659 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
660 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
661 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
662 | COH901318_CX_CTRL_TCP_DISABLE | | ||
663 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
664 | COH901318_CX_CTRL_HSP_ENABLE | | ||
665 | COH901318_CX_CTRL_HSS_DISABLE | | ||
666 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
667 | COH901318_CX_CTRL_PRDD_DEST, | ||
668 | }, | ||
669 | { | ||
670 | .number = U300_DMA_MSL_RX_2, | ||
671 | .name = "MSL RX 2", | ||
672 | .priority_high = 0, | ||
673 | .dev_addr = U300_MSL_BASE + 2 * 0x40 + 0x220, | ||
674 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
675 | COH901318_CX_CFG_LCR_DISABLE | | ||
676 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
677 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
678 | .param.ctrl_lli_chained = 0 | | ||
679 | COH901318_CX_CTRL_TC_ENABLE | | ||
680 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
681 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
682 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
683 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
684 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
685 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
686 | COH901318_CX_CTRL_TCP_DISABLE | | ||
687 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
688 | COH901318_CX_CTRL_HSP_ENABLE | | ||
689 | COH901318_CX_CTRL_HSS_DISABLE | | ||
690 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
691 | COH901318_CX_CTRL_PRDD_DEST, | ||
692 | .param.ctrl_lli = 0 | | ||
693 | COH901318_CX_CTRL_TC_ENABLE | | ||
694 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
695 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
696 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
697 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
698 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
699 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
700 | COH901318_CX_CTRL_TCP_DISABLE | | ||
701 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
702 | COH901318_CX_CTRL_HSP_ENABLE | | ||
703 | COH901318_CX_CTRL_HSS_DISABLE | | ||
704 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
705 | COH901318_CX_CTRL_PRDD_DEST, | ||
706 | .param.ctrl_lli_last = 0 | | ||
707 | COH901318_CX_CTRL_TC_ENABLE | | ||
708 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
709 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
710 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
711 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
712 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
713 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
714 | COH901318_CX_CTRL_TCP_DISABLE | | ||
715 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
716 | COH901318_CX_CTRL_HSP_ENABLE | | ||
717 | COH901318_CX_CTRL_HSS_DISABLE | | ||
718 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
719 | COH901318_CX_CTRL_PRDD_DEST, | ||
720 | }, | ||
721 | { | ||
722 | .number = U300_DMA_MSL_RX_3, | ||
723 | .name = "MSL RX 3", | ||
724 | .priority_high = 0, | ||
725 | .dev_addr = U300_MSL_BASE + 3 * 0x40 + 0x220, | ||
726 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
727 | COH901318_CX_CFG_LCR_DISABLE | | ||
728 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
729 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
730 | .param.ctrl_lli_chained = 0 | | ||
731 | COH901318_CX_CTRL_TC_ENABLE | | ||
732 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
733 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
734 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
735 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
736 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
737 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
738 | COH901318_CX_CTRL_TCP_DISABLE | | ||
739 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
740 | COH901318_CX_CTRL_HSP_ENABLE | | ||
741 | COH901318_CX_CTRL_HSS_DISABLE | | ||
742 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
743 | COH901318_CX_CTRL_PRDD_DEST, | ||
744 | .param.ctrl_lli = 0 | | ||
745 | COH901318_CX_CTRL_TC_ENABLE | | ||
746 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
747 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
748 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
749 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
750 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
751 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
752 | COH901318_CX_CTRL_TCP_DISABLE | | ||
753 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
754 | COH901318_CX_CTRL_HSP_ENABLE | | ||
755 | COH901318_CX_CTRL_HSS_DISABLE | | ||
756 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
757 | COH901318_CX_CTRL_PRDD_DEST, | ||
758 | .param.ctrl_lli_last = 0 | | ||
759 | COH901318_CX_CTRL_TC_ENABLE | | ||
760 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
761 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
762 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
763 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
764 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
765 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
766 | COH901318_CX_CTRL_TCP_DISABLE | | ||
767 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
768 | COH901318_CX_CTRL_HSP_ENABLE | | ||
769 | COH901318_CX_CTRL_HSS_DISABLE | | ||
770 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
771 | COH901318_CX_CTRL_PRDD_DEST, | ||
772 | }, | ||
773 | { | ||
774 | .number = U300_DMA_MSL_RX_4, | ||
775 | .name = "MSL RX 4", | ||
776 | .priority_high = 0, | ||
777 | .dev_addr = U300_MSL_BASE + 4 * 0x40 + 0x220, | ||
778 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
779 | COH901318_CX_CFG_LCR_DISABLE | | ||
780 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
781 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
782 | .param.ctrl_lli_chained = 0 | | ||
783 | COH901318_CX_CTRL_TC_ENABLE | | ||
784 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
785 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
786 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
787 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
788 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
789 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
790 | COH901318_CX_CTRL_TCP_DISABLE | | ||
791 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
792 | COH901318_CX_CTRL_HSP_ENABLE | | ||
793 | COH901318_CX_CTRL_HSS_DISABLE | | ||
794 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
795 | COH901318_CX_CTRL_PRDD_DEST, | ||
796 | .param.ctrl_lli = 0 | | ||
797 | COH901318_CX_CTRL_TC_ENABLE | | ||
798 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
799 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
800 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
801 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
802 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
803 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
804 | COH901318_CX_CTRL_TCP_DISABLE | | ||
805 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
806 | COH901318_CX_CTRL_HSP_ENABLE | | ||
807 | COH901318_CX_CTRL_HSS_DISABLE | | ||
808 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
809 | COH901318_CX_CTRL_PRDD_DEST, | ||
810 | .param.ctrl_lli_last = 0 | | ||
811 | COH901318_CX_CTRL_TC_ENABLE | | ||
812 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
813 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
814 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
815 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
816 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
817 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
818 | COH901318_CX_CTRL_TCP_DISABLE | | ||
819 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
820 | COH901318_CX_CTRL_HSP_ENABLE | | ||
821 | COH901318_CX_CTRL_HSS_DISABLE | | ||
822 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
823 | COH901318_CX_CTRL_PRDD_DEST, | ||
824 | }, | ||
825 | { | ||
826 | .number = U300_DMA_MSL_RX_5, | ||
827 | .name = "MSL RX 5", | ||
828 | .priority_high = 0, | ||
829 | .dev_addr = U300_MSL_BASE + 5 * 0x40 + 0x220, | ||
830 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
831 | COH901318_CX_CFG_LCR_DISABLE | | ||
832 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
833 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
834 | .param.ctrl_lli_chained = 0 | | ||
835 | COH901318_CX_CTRL_TC_ENABLE | | ||
836 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
837 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
838 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
839 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
840 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
841 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
842 | COH901318_CX_CTRL_TCP_DISABLE | | ||
843 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
844 | COH901318_CX_CTRL_HSP_ENABLE | | ||
845 | COH901318_CX_CTRL_HSS_DISABLE | | ||
846 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
847 | COH901318_CX_CTRL_PRDD_DEST, | ||
848 | .param.ctrl_lli = 0 | | ||
849 | COH901318_CX_CTRL_TC_ENABLE | | ||
850 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
851 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
852 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
853 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
854 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
855 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
856 | COH901318_CX_CTRL_TCP_DISABLE | | ||
857 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
858 | COH901318_CX_CTRL_HSP_ENABLE | | ||
859 | COH901318_CX_CTRL_HSS_DISABLE | | ||
860 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
861 | COH901318_CX_CTRL_PRDD_DEST, | ||
862 | .param.ctrl_lli_last = 0 | | ||
863 | COH901318_CX_CTRL_TC_ENABLE | | ||
864 | COH901318_CX_CTRL_BURST_COUNT_32_BYTES | | ||
865 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
866 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
867 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
868 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
869 | COH901318_CX_CTRL_MASTER_MODE_M2R_M1W | | ||
870 | COH901318_CX_CTRL_TCP_DISABLE | | ||
871 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
872 | COH901318_CX_CTRL_HSP_ENABLE | | ||
873 | COH901318_CX_CTRL_HSS_DISABLE | | ||
874 | COH901318_CX_CTRL_DDMA_DEMAND_DMA1 | | ||
875 | COH901318_CX_CTRL_PRDD_DEST, | ||
876 | }, | ||
877 | { | ||
878 | .number = U300_DMA_MSL_RX_6, | ||
879 | .name = "MSL RX 6", | ||
880 | .priority_high = 0, | ||
881 | .dev_addr = U300_MSL_BASE + 6 * 0x40 + 0x220, | ||
882 | }, | ||
883 | /* | ||
884 | * Don't set up device address, burst count or size of src | ||
885 | * or dst bus for this peripheral - handled by PrimeCell | ||
886 | * DMA extension. | ||
887 | */ | ||
888 | { | ||
889 | .number = U300_DMA_MMCSD_RX_TX, | ||
890 | .name = "MMCSD RX TX", | ||
891 | .priority_high = 0, | ||
892 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
893 | COH901318_CX_CFG_LCR_DISABLE | | ||
894 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
895 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
896 | .param.ctrl_lli_chained = 0 | | ||
897 | COH901318_CX_CTRL_TC_ENABLE | | ||
898 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
899 | COH901318_CX_CTRL_TCP_ENABLE | | ||
900 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
901 | COH901318_CX_CTRL_HSP_ENABLE | | ||
902 | COH901318_CX_CTRL_HSS_DISABLE | | ||
903 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
904 | .param.ctrl_lli = 0 | | ||
905 | COH901318_CX_CTRL_TC_ENABLE | | ||
906 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
907 | COH901318_CX_CTRL_TCP_ENABLE | | ||
908 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
909 | COH901318_CX_CTRL_HSP_ENABLE | | ||
910 | COH901318_CX_CTRL_HSS_DISABLE | | ||
911 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
912 | .param.ctrl_lli_last = 0 | | ||
913 | COH901318_CX_CTRL_TC_ENABLE | | ||
914 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
915 | COH901318_CX_CTRL_TCP_DISABLE | | ||
916 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
917 | COH901318_CX_CTRL_HSP_ENABLE | | ||
918 | COH901318_CX_CTRL_HSS_DISABLE | | ||
919 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
920 | |||
921 | }, | ||
922 | { | ||
923 | .number = U300_DMA_MSPRO_TX, | ||
924 | .name = "MSPRO TX", | ||
925 | .priority_high = 0, | ||
926 | }, | ||
927 | { | ||
928 | .number = U300_DMA_MSPRO_RX, | ||
929 | .name = "MSPRO RX", | ||
930 | .priority_high = 0, | ||
931 | }, | ||
932 | /* | ||
933 | * Don't set up device address, burst count or size of src | ||
934 | * or dst bus for this peripheral - handled by PrimeCell | ||
935 | * DMA extension. | ||
936 | */ | ||
937 | { | ||
938 | .number = U300_DMA_UART0_TX, | ||
939 | .name = "UART0 TX", | ||
940 | .priority_high = 0, | ||
941 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
942 | COH901318_CX_CFG_LCR_DISABLE | | ||
943 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
944 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
945 | .param.ctrl_lli_chained = 0 | | ||
946 | COH901318_CX_CTRL_TC_ENABLE | | ||
947 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
948 | COH901318_CX_CTRL_TCP_ENABLE | | ||
949 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
950 | COH901318_CX_CTRL_HSP_ENABLE | | ||
951 | COH901318_CX_CTRL_HSS_DISABLE | | ||
952 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
953 | .param.ctrl_lli = 0 | | ||
954 | COH901318_CX_CTRL_TC_ENABLE | | ||
955 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
956 | COH901318_CX_CTRL_TCP_ENABLE | | ||
957 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
958 | COH901318_CX_CTRL_HSP_ENABLE | | ||
959 | COH901318_CX_CTRL_HSS_DISABLE | | ||
960 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
961 | .param.ctrl_lli_last = 0 | | ||
962 | COH901318_CX_CTRL_TC_ENABLE | | ||
963 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
964 | COH901318_CX_CTRL_TCP_ENABLE | | ||
965 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
966 | COH901318_CX_CTRL_HSP_ENABLE | | ||
967 | COH901318_CX_CTRL_HSS_DISABLE | | ||
968 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
969 | }, | ||
970 | { | ||
971 | .number = U300_DMA_UART0_RX, | ||
972 | .name = "UART0 RX", | ||
973 | .priority_high = 0, | ||
974 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
975 | COH901318_CX_CFG_LCR_DISABLE | | ||
976 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
977 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
978 | .param.ctrl_lli_chained = 0 | | ||
979 | COH901318_CX_CTRL_TC_ENABLE | | ||
980 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
981 | COH901318_CX_CTRL_TCP_ENABLE | | ||
982 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
983 | COH901318_CX_CTRL_HSP_ENABLE | | ||
984 | COH901318_CX_CTRL_HSS_DISABLE | | ||
985 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
986 | .param.ctrl_lli = 0 | | ||
987 | COH901318_CX_CTRL_TC_ENABLE | | ||
988 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
989 | COH901318_CX_CTRL_TCP_ENABLE | | ||
990 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
991 | COH901318_CX_CTRL_HSP_ENABLE | | ||
992 | COH901318_CX_CTRL_HSS_DISABLE | | ||
993 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
994 | .param.ctrl_lli_last = 0 | | ||
995 | COH901318_CX_CTRL_TC_ENABLE | | ||
996 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
997 | COH901318_CX_CTRL_TCP_ENABLE | | ||
998 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
999 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1000 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1001 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
1002 | }, | ||
1003 | { | ||
1004 | .number = U300_DMA_APEX_TX, | ||
1005 | .name = "APEX TX", | ||
1006 | .priority_high = 0, | ||
1007 | }, | ||
1008 | { | ||
1009 | .number = U300_DMA_APEX_RX, | ||
1010 | .name = "APEX RX", | ||
1011 | .priority_high = 0, | ||
1012 | }, | ||
1013 | { | ||
1014 | .number = U300_DMA_PCM_I2S0_TX, | ||
1015 | .name = "PCM I2S0 TX", | ||
1016 | .priority_high = 1, | ||
1017 | .dev_addr = U300_PCM_I2S0_BASE + 0x14, | ||
1018 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
1019 | COH901318_CX_CFG_LCR_DISABLE | | ||
1020 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
1021 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
1022 | .param.ctrl_lli_chained = 0 | | ||
1023 | COH901318_CX_CTRL_TC_ENABLE | | ||
1024 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1025 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1026 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
1027 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1028 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
1029 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1030 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1031 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1032 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1033 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1034 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1035 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
1036 | .param.ctrl_lli = 0 | | ||
1037 | COH901318_CX_CTRL_TC_ENABLE | | ||
1038 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1039 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1040 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
1041 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1042 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
1043 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1044 | COH901318_CX_CTRL_TCP_ENABLE | | ||
1045 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1046 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1047 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1048 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1049 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
1050 | .param.ctrl_lli_last = 0 | | ||
1051 | COH901318_CX_CTRL_TC_ENABLE | | ||
1052 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1053 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1054 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
1055 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1056 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
1057 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1058 | COH901318_CX_CTRL_TCP_ENABLE | | ||
1059 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1060 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1061 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1062 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1063 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
1064 | }, | ||
1065 | { | ||
1066 | .number = U300_DMA_PCM_I2S0_RX, | ||
1067 | .name = "PCM I2S0 RX", | ||
1068 | .priority_high = 1, | ||
1069 | .dev_addr = U300_PCM_I2S0_BASE + 0x10, | ||
1070 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
1071 | COH901318_CX_CFG_LCR_DISABLE | | ||
1072 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
1073 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
1074 | .param.ctrl_lli_chained = 0 | | ||
1075 | COH901318_CX_CTRL_TC_ENABLE | | ||
1076 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1077 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1078 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
1079 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1080 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
1081 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1082 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1083 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1084 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1085 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1086 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1087 | COH901318_CX_CTRL_PRDD_DEST, | ||
1088 | .param.ctrl_lli = 0 | | ||
1089 | COH901318_CX_CTRL_TC_ENABLE | | ||
1090 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1091 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1092 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
1093 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1094 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
1095 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1096 | COH901318_CX_CTRL_TCP_ENABLE | | ||
1097 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1098 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1099 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1100 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1101 | COH901318_CX_CTRL_PRDD_DEST, | ||
1102 | .param.ctrl_lli_last = 0 | | ||
1103 | COH901318_CX_CTRL_TC_ENABLE | | ||
1104 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1105 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1106 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
1107 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1108 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
1109 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1110 | COH901318_CX_CTRL_TCP_ENABLE | | ||
1111 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
1112 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1113 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1114 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1115 | COH901318_CX_CTRL_PRDD_DEST, | ||
1116 | }, | ||
1117 | { | ||
1118 | .number = U300_DMA_PCM_I2S1_TX, | ||
1119 | .name = "PCM I2S1 TX", | ||
1120 | .priority_high = 1, | ||
1121 | .dev_addr = U300_PCM_I2S1_BASE + 0x14, | ||
1122 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
1123 | COH901318_CX_CFG_LCR_DISABLE | | ||
1124 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
1125 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
1126 | .param.ctrl_lli_chained = 0 | | ||
1127 | COH901318_CX_CTRL_TC_ENABLE | | ||
1128 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1129 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1130 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
1131 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1132 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
1133 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1134 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1135 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1136 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1137 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1138 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1139 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
1140 | .param.ctrl_lli = 0 | | ||
1141 | COH901318_CX_CTRL_TC_ENABLE | | ||
1142 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1143 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1144 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
1145 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1146 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
1147 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1148 | COH901318_CX_CTRL_TCP_ENABLE | | ||
1149 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1150 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1151 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1152 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1153 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
1154 | .param.ctrl_lli_last = 0 | | ||
1155 | COH901318_CX_CTRL_TC_ENABLE | | ||
1156 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1157 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1158 | COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE | | ||
1159 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1160 | COH901318_CX_CTRL_DST_ADDR_INC_DISABLE | | ||
1161 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1162 | COH901318_CX_CTRL_TCP_ENABLE | | ||
1163 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
1164 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1165 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1166 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1167 | COH901318_CX_CTRL_PRDD_SOURCE, | ||
1168 | }, | ||
1169 | { | ||
1170 | .number = U300_DMA_PCM_I2S1_RX, | ||
1171 | .name = "PCM I2S1 RX", | ||
1172 | .priority_high = 1, | ||
1173 | .dev_addr = U300_PCM_I2S1_BASE + 0x10, | ||
1174 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
1175 | COH901318_CX_CFG_LCR_DISABLE | | ||
1176 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
1177 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
1178 | .param.ctrl_lli_chained = 0 | | ||
1179 | COH901318_CX_CTRL_TC_ENABLE | | ||
1180 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1181 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1182 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
1183 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1184 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
1185 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1186 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1187 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1188 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1189 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1190 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1191 | COH901318_CX_CTRL_PRDD_DEST, | ||
1192 | .param.ctrl_lli = 0 | | ||
1193 | COH901318_CX_CTRL_TC_ENABLE | | ||
1194 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1195 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1196 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
1197 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1198 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
1199 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1200 | COH901318_CX_CTRL_TCP_ENABLE | | ||
1201 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1202 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1203 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1204 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1205 | COH901318_CX_CTRL_PRDD_DEST, | ||
1206 | .param.ctrl_lli_last = 0 | | ||
1207 | COH901318_CX_CTRL_TC_ENABLE | | ||
1208 | COH901318_CX_CTRL_BURST_COUNT_16_BYTES | | ||
1209 | COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS | | ||
1210 | COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE | | ||
1211 | COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS | | ||
1212 | COH901318_CX_CTRL_DST_ADDR_INC_ENABLE | | ||
1213 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1214 | COH901318_CX_CTRL_TCP_ENABLE | | ||
1215 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
1216 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1217 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1218 | COH901318_CX_CTRL_DDMA_LEGACY | | ||
1219 | COH901318_CX_CTRL_PRDD_DEST, | ||
1220 | }, | ||
1221 | { | ||
1222 | .number = U300_DMA_XGAM_CDI, | ||
1223 | .name = "XGAM CDI", | ||
1224 | .priority_high = 0, | ||
1225 | }, | ||
1226 | { | ||
1227 | .number = U300_DMA_XGAM_PDI, | ||
1228 | .name = "XGAM PDI", | ||
1229 | .priority_high = 0, | ||
1230 | }, | ||
1231 | /* | ||
1232 | * Don't set up device address, burst count or size of src | ||
1233 | * or dst bus for this peripheral - handled by PrimeCell | ||
1234 | * DMA extension. | ||
1235 | */ | ||
1236 | { | ||
1237 | .number = U300_DMA_SPI_TX, | ||
1238 | .name = "SPI TX", | ||
1239 | .priority_high = 0, | ||
1240 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
1241 | COH901318_CX_CFG_LCR_DISABLE | | ||
1242 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
1243 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
1244 | .param.ctrl_lli_chained = 0 | | ||
1245 | COH901318_CX_CTRL_TC_ENABLE | | ||
1246 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1247 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1248 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1249 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1250 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1251 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
1252 | .param.ctrl_lli = 0 | | ||
1253 | COH901318_CX_CTRL_TC_ENABLE | | ||
1254 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1255 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1256 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
1257 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1258 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1259 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
1260 | .param.ctrl_lli_last = 0 | | ||
1261 | COH901318_CX_CTRL_TC_ENABLE | | ||
1262 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1263 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1264 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
1265 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1266 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1267 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
1268 | }, | ||
1269 | { | ||
1270 | .number = U300_DMA_SPI_RX, | ||
1271 | .name = "SPI RX", | ||
1272 | .priority_high = 0, | ||
1273 | .param.config = COH901318_CX_CFG_CH_DISABLE | | ||
1274 | COH901318_CX_CFG_LCR_DISABLE | | ||
1275 | COH901318_CX_CFG_TC_IRQ_ENABLE | | ||
1276 | COH901318_CX_CFG_BE_IRQ_ENABLE, | ||
1277 | .param.ctrl_lli_chained = 0 | | ||
1278 | COH901318_CX_CTRL_TC_ENABLE | | ||
1279 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1280 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1281 | COH901318_CX_CTRL_TC_IRQ_DISABLE | | ||
1282 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1283 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1284 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
1285 | .param.ctrl_lli = 0 | | ||
1286 | COH901318_CX_CTRL_TC_ENABLE | | ||
1287 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1288 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1289 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
1290 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1291 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1292 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
1293 | .param.ctrl_lli_last = 0 | | ||
1294 | COH901318_CX_CTRL_TC_ENABLE | | ||
1295 | COH901318_CX_CTRL_MASTER_MODE_M1RW | | ||
1296 | COH901318_CX_CTRL_TCP_DISABLE | | ||
1297 | COH901318_CX_CTRL_TC_IRQ_ENABLE | | ||
1298 | COH901318_CX_CTRL_HSP_ENABLE | | ||
1299 | COH901318_CX_CTRL_HSS_DISABLE | | ||
1300 | COH901318_CX_CTRL_DDMA_LEGACY, | ||
1301 | |||
1302 | }, | ||
1303 | { | ||
1304 | .number = U300_DMA_GENERAL_PURPOSE_0, | ||
1305 | .name = "GENERAL 00", | ||
1306 | .priority_high = 0, | ||
1307 | |||
1308 | .param.config = flags_memcpy_config, | ||
1309 | .param.ctrl_lli_chained = flags_memcpy_lli_chained, | ||
1310 | .param.ctrl_lli = flags_memcpy_lli, | ||
1311 | .param.ctrl_lli_last = flags_memcpy_lli_last, | ||
1312 | }, | ||
1313 | { | ||
1314 | .number = U300_DMA_GENERAL_PURPOSE_1, | ||
1315 | .name = "GENERAL 01", | ||
1316 | .priority_high = 0, | ||
1317 | |||
1318 | .param.config = flags_memcpy_config, | ||
1319 | .param.ctrl_lli_chained = flags_memcpy_lli_chained, | ||
1320 | .param.ctrl_lli = flags_memcpy_lli, | ||
1321 | .param.ctrl_lli_last = flags_memcpy_lli_last, | ||
1322 | }, | ||
1323 | { | ||
1324 | .number = U300_DMA_GENERAL_PURPOSE_2, | ||
1325 | .name = "GENERAL 02", | ||
1326 | .priority_high = 0, | ||
1327 | |||
1328 | .param.config = flags_memcpy_config, | ||
1329 | .param.ctrl_lli_chained = flags_memcpy_lli_chained, | ||
1330 | .param.ctrl_lli = flags_memcpy_lli, | ||
1331 | .param.ctrl_lli_last = flags_memcpy_lli_last, | ||
1332 | }, | ||
1333 | { | ||
1334 | .number = U300_DMA_GENERAL_PURPOSE_3, | ||
1335 | .name = "GENERAL 03", | ||
1336 | .priority_high = 0, | ||
1337 | |||
1338 | .param.config = flags_memcpy_config, | ||
1339 | .param.ctrl_lli_chained = flags_memcpy_lli_chained, | ||
1340 | .param.ctrl_lli = flags_memcpy_lli, | ||
1341 | .param.ctrl_lli_last = flags_memcpy_lli_last, | ||
1342 | }, | ||
1343 | { | ||
1344 | .number = U300_DMA_GENERAL_PURPOSE_4, | ||
1345 | .name = "GENERAL 04", | ||
1346 | .priority_high = 0, | ||
1347 | |||
1348 | .param.config = flags_memcpy_config, | ||
1349 | .param.ctrl_lli_chained = flags_memcpy_lli_chained, | ||
1350 | .param.ctrl_lli = flags_memcpy_lli, | ||
1351 | .param.ctrl_lli_last = flags_memcpy_lli_last, | ||
1352 | }, | ||
1353 | { | ||
1354 | .number = U300_DMA_GENERAL_PURPOSE_5, | ||
1355 | .name = "GENERAL 05", | ||
1356 | .priority_high = 0, | ||
1357 | |||
1358 | .param.config = flags_memcpy_config, | ||
1359 | .param.ctrl_lli_chained = flags_memcpy_lli_chained, | ||
1360 | .param.ctrl_lli = flags_memcpy_lli, | ||
1361 | .param.ctrl_lli_last = flags_memcpy_lli_last, | ||
1362 | }, | ||
1363 | { | ||
1364 | .number = U300_DMA_GENERAL_PURPOSE_6, | ||
1365 | .name = "GENERAL 06", | ||
1366 | .priority_high = 0, | ||
1367 | |||
1368 | .param.config = flags_memcpy_config, | ||
1369 | .param.ctrl_lli_chained = flags_memcpy_lli_chained, | ||
1370 | .param.ctrl_lli = flags_memcpy_lli, | ||
1371 | .param.ctrl_lli_last = flags_memcpy_lli_last, | ||
1372 | }, | ||
1373 | { | ||
1374 | .number = U300_DMA_GENERAL_PURPOSE_7, | ||
1375 | .name = "GENERAL 07", | ||
1376 | .priority_high = 0, | ||
1377 | |||
1378 | .param.config = flags_memcpy_config, | ||
1379 | .param.ctrl_lli_chained = flags_memcpy_lli_chained, | ||
1380 | .param.ctrl_lli = flags_memcpy_lli, | ||
1381 | .param.ctrl_lli_last = flags_memcpy_lli_last, | ||
1382 | }, | ||
1383 | { | ||
1384 | .number = U300_DMA_GENERAL_PURPOSE_8, | ||
1385 | .name = "GENERAL 08", | ||
1386 | .priority_high = 0, | ||
1387 | |||
1388 | .param.config = flags_memcpy_config, | ||
1389 | .param.ctrl_lli_chained = flags_memcpy_lli_chained, | ||
1390 | .param.ctrl_lli = flags_memcpy_lli, | ||
1391 | .param.ctrl_lli_last = flags_memcpy_lli_last, | ||
1392 | }, | ||
1393 | { | ||
1394 | .number = U300_DMA_UART1_TX, | ||
1395 | .name = "UART1 TX", | ||
1396 | .priority_high = 0, | ||
1397 | }, | ||
1398 | { | ||
1399 | .number = U300_DMA_UART1_RX, | ||
1400 | .name = "UART1 RX", | ||
1401 | .priority_high = 0, | ||
1402 | } | ||
1403 | }; | ||
1404 | |||
1405 | |||
1406 | static struct coh901318_platform coh901318_platform = { | ||
1407 | .chans_slave = dma_slave_channels, | ||
1408 | .chans_memcpy = dma_memcpy_channels, | ||
1409 | .access_memory_state = coh901318_access_memory_state, | ||
1410 | .chan_conf = chan_config, | ||
1411 | .max_channels = U300_DMA_CHANNELS, | ||
1412 | }; | ||
1413 | 329 | ||
1414 | static struct resource pinctrl_resources[] = { | 330 | static struct resource pinctrl_resources[] = { |
1415 | { | 331 | { |
@@ -1521,7 +437,6 @@ static struct platform_device dma_device = { | |||
1521 | .resource = dma_resource, | 437 | .resource = dma_resource, |
1522 | .num_resources = ARRAY_SIZE(dma_resource), | 438 | .num_resources = ARRAY_SIZE(dma_resource), |
1523 | .dev = { | 439 | .dev = { |
1524 | .platform_data = &coh901318_platform, | ||
1525 | .coherent_dma_mask = ~0, | 440 | .coherent_dma_mask = ~0, |
1526 | }, | 441 | }, |
1527 | }; | 442 | }; |
diff --git a/arch/arm/mach-u300/dma_channels.h b/arch/arm/mach-u300/dma_channels.h deleted file mode 100644 index 4e8a88fbca49..000000000000 --- a/arch/arm/mach-u300/dma_channels.h +++ /dev/null | |||
@@ -1,60 +0,0 @@ | |||
1 | /* | ||
2 | * | ||
3 | * arch/arm/mach-u300/include/mach/dma_channels.h | ||
4 | * | ||
5 | * | ||
6 | * Copyright (C) 2007-2012 ST-Ericsson | ||
7 | * License terms: GNU General Public License (GPL) version 2 | ||
8 | * Map file for the U300 dma driver. | ||
9 | * Author: Per Friden <per.friden@stericsson.com> | ||
10 | */ | ||
11 | |||
12 | #ifndef DMA_CHANNELS_H | ||
13 | #define DMA_CHANNELS_H | ||
14 | |||
15 | #define U300_DMA_MSL_TX_0 0 | ||
16 | #define U300_DMA_MSL_TX_1 1 | ||
17 | #define U300_DMA_MSL_TX_2 2 | ||
18 | #define U300_DMA_MSL_TX_3 3 | ||
19 | #define U300_DMA_MSL_TX_4 4 | ||
20 | #define U300_DMA_MSL_TX_5 5 | ||
21 | #define U300_DMA_MSL_TX_6 6 | ||
22 | #define U300_DMA_MSL_RX_0 7 | ||
23 | #define U300_DMA_MSL_RX_1 8 | ||
24 | #define U300_DMA_MSL_RX_2 9 | ||
25 | #define U300_DMA_MSL_RX_3 10 | ||
26 | #define U300_DMA_MSL_RX_4 11 | ||
27 | #define U300_DMA_MSL_RX_5 12 | ||
28 | #define U300_DMA_MSL_RX_6 13 | ||
29 | #define U300_DMA_MMCSD_RX_TX 14 | ||
30 | #define U300_DMA_MSPRO_TX 15 | ||
31 | #define U300_DMA_MSPRO_RX 16 | ||
32 | #define U300_DMA_UART0_TX 17 | ||
33 | #define U300_DMA_UART0_RX 18 | ||
34 | #define U300_DMA_APEX_TX 19 | ||
35 | #define U300_DMA_APEX_RX 20 | ||
36 | #define U300_DMA_PCM_I2S0_TX 21 | ||
37 | #define U300_DMA_PCM_I2S0_RX 22 | ||
38 | #define U300_DMA_PCM_I2S1_TX 23 | ||
39 | #define U300_DMA_PCM_I2S1_RX 24 | ||
40 | #define U300_DMA_XGAM_CDI 25 | ||
41 | #define U300_DMA_XGAM_PDI 26 | ||
42 | #define U300_DMA_SPI_TX 27 | ||
43 | #define U300_DMA_SPI_RX 28 | ||
44 | #define U300_DMA_GENERAL_PURPOSE_0 29 | ||
45 | #define U300_DMA_GENERAL_PURPOSE_1 30 | ||
46 | #define U300_DMA_GENERAL_PURPOSE_2 31 | ||
47 | #define U300_DMA_GENERAL_PURPOSE_3 32 | ||
48 | #define U300_DMA_GENERAL_PURPOSE_4 33 | ||
49 | #define U300_DMA_GENERAL_PURPOSE_5 34 | ||
50 | #define U300_DMA_GENERAL_PURPOSE_6 35 | ||
51 | #define U300_DMA_GENERAL_PURPOSE_7 36 | ||
52 | #define U300_DMA_GENERAL_PURPOSE_8 37 | ||
53 | #define U300_DMA_UART1_TX 38 | ||
54 | #define U300_DMA_UART1_RX 39 | ||
55 | |||
56 | #define U300_DMA_DEVICE_CHANNELS 32 | ||
57 | #define U300_DMA_CHANNELS 40 | ||
58 | |||
59 | |||
60 | #endif /* DMA_CHANNELS_H */ | ||
diff --git a/arch/arm/mach-u300/include/mach/coh901318.h b/arch/arm/mach-u300/include/mach/coh901318.h deleted file mode 100644 index 7c3b2b2d25b6..000000000000 --- a/arch/arm/mach-u300/include/mach/coh901318.h +++ /dev/null | |||
@@ -1,267 +0,0 @@ | |||
1 | /* | ||
2 | * | ||
3 | * include/linux/coh901318.h | ||
4 | * | ||
5 | * | ||
6 | * Copyright (C) 2007-2009 ST-Ericsson | ||
7 | * License terms: GNU General Public License (GPL) version 2 | ||
8 | * DMA driver for COH 901 318 | ||
9 | * Author: Per Friden <per.friden@stericsson.com> | ||
10 | */ | ||
11 | |||
12 | #ifndef COH901318_H | ||
13 | #define COH901318_H | ||
14 | |||
15 | #include <linux/device.h> | ||
16 | #include <linux/dmaengine.h> | ||
17 | |||
18 | #define MAX_DMA_PACKET_SIZE_SHIFT 11 | ||
19 | #define MAX_DMA_PACKET_SIZE (1 << MAX_DMA_PACKET_SIZE_SHIFT) | ||
20 | |||
21 | /** | ||
22 | * struct coh901318_lli - linked list item for DMAC | ||
23 | * @control: control settings for DMAC | ||
24 | * @src_addr: transfer source address | ||
25 | * @dst_addr: transfer destination address | ||
26 | * @link_addr: physical address to next lli | ||
27 | * @virt_link_addr: virtual address of next lli (only used by pool_free) | ||
28 | * @phy_this: physical address of current lli (only used by pool_free) | ||
29 | */ | ||
30 | struct coh901318_lli { | ||
31 | u32 control; | ||
32 | dma_addr_t src_addr; | ||
33 | dma_addr_t dst_addr; | ||
34 | dma_addr_t link_addr; | ||
35 | |||
36 | void *virt_link_addr; | ||
37 | dma_addr_t phy_this; | ||
38 | }; | ||
39 | /** | ||
40 | * struct coh901318_params - parameters for DMAC configuration | ||
41 | * @config: DMA config register | ||
42 | * @ctrl_lli_last: DMA control register for the last lli in the list | ||
43 | * @ctrl_lli: DMA control register for an lli | ||
44 | * @ctrl_lli_chained: DMA control register for a chained lli | ||
45 | */ | ||
46 | struct coh901318_params { | ||
47 | u32 config; | ||
48 | u32 ctrl_lli_last; | ||
49 | u32 ctrl_lli; | ||
50 | u32 ctrl_lli_chained; | ||
51 | }; | ||
52 | /** | ||
53 | * struct coh_dma_channel - dma channel base | ||
54 | * @name: ascii name of dma channel | ||
55 | * @number: channel id number | ||
56 | * @desc_nbr_max: number of preallocated descriptors | ||
57 | * @priority_high: prio of channel, 0 low otherwise high. | ||
58 | * @param: configuration parameters | ||
59 | * @dev_addr: physical address of periphal connected to channel | ||
60 | */ | ||
61 | struct coh_dma_channel { | ||
62 | const char name[32]; | ||
63 | const int number; | ||
64 | const int desc_nbr_max; | ||
65 | const int priority_high; | ||
66 | const struct coh901318_params param; | ||
67 | const dma_addr_t dev_addr; | ||
68 | }; | ||
69 | |||
70 | /** | ||
71 | * dma_access_memory_state_t - register dma for memory access | ||
72 | * | ||
73 | * @dev: The dma device | ||
74 | * @active: 1 means dma intends to access memory | ||
75 | * 0 means dma wont access memory | ||
76 | */ | ||
77 | typedef void (*dma_access_memory_state_t)(struct device *dev, | ||
78 | bool active); | ||
79 | |||
80 | /** | ||
81 | * struct powersave - DMA power save structure | ||
82 | * @lock: lock protecting data in this struct | ||
83 | * @started_channels: bit mask indicating active dma channels | ||
84 | */ | ||
85 | struct powersave { | ||
86 | spinlock_t lock; | ||
87 | u64 started_channels; | ||
88 | }; | ||
89 | /** | ||
90 | * struct coh901318_platform - platform arch structure | ||
91 | * @chans_slave: specifying dma slave channels | ||
92 | * @chans_memcpy: specifying dma memcpy channels | ||
93 | * @access_memory_state: requesting DMA memory access (on / off) | ||
94 | * @chan_conf: dma channel configurations | ||
95 | * @max_channels: max number of dma chanenls | ||
96 | */ | ||
97 | struct coh901318_platform { | ||
98 | const int *chans_slave; | ||
99 | const int *chans_memcpy; | ||
100 | const dma_access_memory_state_t access_memory_state; | ||
101 | const struct coh_dma_channel *chan_conf; | ||
102 | const int max_channels; | ||
103 | }; | ||
104 | |||
105 | #ifdef CONFIG_COH901318 | ||
106 | /** | ||
107 | * coh901318_filter_id() - DMA channel filter function | ||
108 | * @chan: dma channel handle | ||
109 | * @chan_id: id of dma channel to be filter out | ||
110 | * | ||
111 | * In dma_request_channel() it specifies what channel id to be requested | ||
112 | */ | ||
113 | bool coh901318_filter_id(struct dma_chan *chan, void *chan_id); | ||
114 | #else | ||
115 | static inline bool coh901318_filter_id(struct dma_chan *chan, void *chan_id) | ||
116 | { | ||
117 | return false; | ||
118 | } | ||
119 | #endif | ||
120 | |||
121 | /* | ||
122 | * DMA Controller - this access the static mappings of the coh901318 dma. | ||
123 | * | ||
124 | */ | ||
125 | |||
126 | #define COH901318_MOD32_MASK (0x1F) | ||
127 | #define COH901318_WORD_MASK (0xFFFFFFFF) | ||
128 | /* INT_STATUS - Interrupt Status Registers 32bit (R/-) */ | ||
129 | #define COH901318_INT_STATUS1 (0x0000) | ||
130 | #define COH901318_INT_STATUS2 (0x0004) | ||
131 | /* TC_INT_STATUS - Terminal Count Interrupt Status Registers 32bit (R/-) */ | ||
132 | #define COH901318_TC_INT_STATUS1 (0x0008) | ||
133 | #define COH901318_TC_INT_STATUS2 (0x000C) | ||
134 | /* TC_INT_CLEAR - Terminal Count Interrupt Clear Registers 32bit (-/W) */ | ||
135 | #define COH901318_TC_INT_CLEAR1 (0x0010) | ||
136 | #define COH901318_TC_INT_CLEAR2 (0x0014) | ||
137 | /* RAW_TC_INT_STATUS - Raw Term Count Interrupt Status Registers 32bit (R/-) */ | ||
138 | #define COH901318_RAW_TC_INT_STATUS1 (0x0018) | ||
139 | #define COH901318_RAW_TC_INT_STATUS2 (0x001C) | ||
140 | /* BE_INT_STATUS - Bus Error Interrupt Status Registers 32bit (R/-) */ | ||
141 | #define COH901318_BE_INT_STATUS1 (0x0020) | ||
142 | #define COH901318_BE_INT_STATUS2 (0x0024) | ||
143 | /* BE_INT_CLEAR - Bus Error Interrupt Clear Registers 32bit (-/W) */ | ||
144 | #define COH901318_BE_INT_CLEAR1 (0x0028) | ||
145 | #define COH901318_BE_INT_CLEAR2 (0x002C) | ||
146 | /* RAW_BE_INT_STATUS - Raw Term Count Interrupt Status Registers 32bit (R/-) */ | ||
147 | #define COH901318_RAW_BE_INT_STATUS1 (0x0030) | ||
148 | #define COH901318_RAW_BE_INT_STATUS2 (0x0034) | ||
149 | |||
150 | /* | ||
151 | * CX_CFG - Channel Configuration Registers 32bit (R/W) | ||
152 | */ | ||
153 | #define COH901318_CX_CFG (0x0100) | ||
154 | #define COH901318_CX_CFG_SPACING (0x04) | ||
155 | /* Channel enable activates tha dma job */ | ||
156 | #define COH901318_CX_CFG_CH_ENABLE (0x00000001) | ||
157 | #define COH901318_CX_CFG_CH_DISABLE (0x00000000) | ||
158 | /* Request Mode */ | ||
159 | #define COH901318_CX_CFG_RM_MASK (0x00000006) | ||
160 | #define COH901318_CX_CFG_RM_MEMORY_TO_MEMORY (0x0 << 1) | ||
161 | #define COH901318_CX_CFG_RM_PRIMARY_TO_MEMORY (0x1 << 1) | ||
162 | #define COH901318_CX_CFG_RM_MEMORY_TO_PRIMARY (0x1 << 1) | ||
163 | #define COH901318_CX_CFG_RM_PRIMARY_TO_SECONDARY (0x3 << 1) | ||
164 | #define COH901318_CX_CFG_RM_SECONDARY_TO_PRIMARY (0x3 << 1) | ||
165 | /* Linked channel request field. RM must == 11 */ | ||
166 | #define COH901318_CX_CFG_LCRF_SHIFT 3 | ||
167 | #define COH901318_CX_CFG_LCRF_MASK (0x000001F8) | ||
168 | #define COH901318_CX_CFG_LCR_DISABLE (0x00000000) | ||
169 | /* Terminal Counter Interrupt Request Mask */ | ||
170 | #define COH901318_CX_CFG_TC_IRQ_ENABLE (0x00000200) | ||
171 | #define COH901318_CX_CFG_TC_IRQ_DISABLE (0x00000000) | ||
172 | /* Bus Error interrupt Mask */ | ||
173 | #define COH901318_CX_CFG_BE_IRQ_ENABLE (0x00000400) | ||
174 | #define COH901318_CX_CFG_BE_IRQ_DISABLE (0x00000000) | ||
175 | |||
176 | /* | ||
177 | * CX_STAT - Channel Status Registers 32bit (R/-) | ||
178 | */ | ||
179 | #define COH901318_CX_STAT (0x0200) | ||
180 | #define COH901318_CX_STAT_SPACING (0x04) | ||
181 | #define COH901318_CX_STAT_RBE_IRQ_IND (0x00000008) | ||
182 | #define COH901318_CX_STAT_RTC_IRQ_IND (0x00000004) | ||
183 | #define COH901318_CX_STAT_ACTIVE (0x00000002) | ||
184 | #define COH901318_CX_STAT_ENABLED (0x00000001) | ||
185 | |||
186 | /* | ||
187 | * CX_CTRL - Channel Control Registers 32bit (R/W) | ||
188 | */ | ||
189 | #define COH901318_CX_CTRL (0x0400) | ||
190 | #define COH901318_CX_CTRL_SPACING (0x10) | ||
191 | /* Transfer Count Enable */ | ||
192 | #define COH901318_CX_CTRL_TC_ENABLE (0x00001000) | ||
193 | #define COH901318_CX_CTRL_TC_DISABLE (0x00000000) | ||
194 | /* Transfer Count Value 0 - 4095 */ | ||
195 | #define COH901318_CX_CTRL_TC_VALUE_MASK (0x00000FFF) | ||
196 | /* Burst count */ | ||
197 | #define COH901318_CX_CTRL_BURST_COUNT_MASK (0x0000E000) | ||
198 | #define COH901318_CX_CTRL_BURST_COUNT_64_BYTES (0x7 << 13) | ||
199 | #define COH901318_CX_CTRL_BURST_COUNT_48_BYTES (0x6 << 13) | ||
200 | #define COH901318_CX_CTRL_BURST_COUNT_32_BYTES (0x5 << 13) | ||
201 | #define COH901318_CX_CTRL_BURST_COUNT_16_BYTES (0x4 << 13) | ||
202 | #define COH901318_CX_CTRL_BURST_COUNT_8_BYTES (0x3 << 13) | ||
203 | #define COH901318_CX_CTRL_BURST_COUNT_4_BYTES (0x2 << 13) | ||
204 | #define COH901318_CX_CTRL_BURST_COUNT_2_BYTES (0x1 << 13) | ||
205 | #define COH901318_CX_CTRL_BURST_COUNT_1_BYTE (0x0 << 13) | ||
206 | /* Source bus size */ | ||
207 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_MASK (0x00030000) | ||
208 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS (0x2 << 16) | ||
209 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_16_BITS (0x1 << 16) | ||
210 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_8_BITS (0x0 << 16) | ||
211 | /* Source address increment */ | ||
212 | #define COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE (0x00040000) | ||
213 | #define COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE (0x00000000) | ||
214 | /* Destination Bus Size */ | ||
215 | #define COH901318_CX_CTRL_DST_BUS_SIZE_MASK (0x00180000) | ||
216 | #define COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS (0x2 << 19) | ||
217 | #define COH901318_CX_CTRL_DST_BUS_SIZE_16_BITS (0x1 << 19) | ||
218 | #define COH901318_CX_CTRL_DST_BUS_SIZE_8_BITS (0x0 << 19) | ||
219 | /* Destination address increment */ | ||
220 | #define COH901318_CX_CTRL_DST_ADDR_INC_ENABLE (0x00200000) | ||
221 | #define COH901318_CX_CTRL_DST_ADDR_INC_DISABLE (0x00000000) | ||
222 | /* Master Mode (Master2 is only connected to MSL) */ | ||
223 | #define COH901318_CX_CTRL_MASTER_MODE_MASK (0x00C00000) | ||
224 | #define COH901318_CX_CTRL_MASTER_MODE_M2R_M1W (0x3 << 22) | ||
225 | #define COH901318_CX_CTRL_MASTER_MODE_M1R_M2W (0x2 << 22) | ||
226 | #define COH901318_CX_CTRL_MASTER_MODE_M2RW (0x1 << 22) | ||
227 | #define COH901318_CX_CTRL_MASTER_MODE_M1RW (0x0 << 22) | ||
228 | /* Terminal Count flag to PER enable */ | ||
229 | #define COH901318_CX_CTRL_TCP_ENABLE (0x01000000) | ||
230 | #define COH901318_CX_CTRL_TCP_DISABLE (0x00000000) | ||
231 | /* Terminal Count flags to CPU enable */ | ||
232 | #define COH901318_CX_CTRL_TC_IRQ_ENABLE (0x02000000) | ||
233 | #define COH901318_CX_CTRL_TC_IRQ_DISABLE (0x00000000) | ||
234 | /* Hand shake to peripheral */ | ||
235 | #define COH901318_CX_CTRL_HSP_ENABLE (0x04000000) | ||
236 | #define COH901318_CX_CTRL_HSP_DISABLE (0x00000000) | ||
237 | #define COH901318_CX_CTRL_HSS_ENABLE (0x08000000) | ||
238 | #define COH901318_CX_CTRL_HSS_DISABLE (0x00000000) | ||
239 | /* DMA mode */ | ||
240 | #define COH901318_CX_CTRL_DDMA_MASK (0x30000000) | ||
241 | #define COH901318_CX_CTRL_DDMA_LEGACY (0x0 << 28) | ||
242 | #define COH901318_CX_CTRL_DDMA_DEMAND_DMA1 (0x1 << 28) | ||
243 | #define COH901318_CX_CTRL_DDMA_DEMAND_DMA2 (0x2 << 28) | ||
244 | /* Primary Request Data Destination */ | ||
245 | #define COH901318_CX_CTRL_PRDD_MASK (0x40000000) | ||
246 | #define COH901318_CX_CTRL_PRDD_DEST (0x1 << 30) | ||
247 | #define COH901318_CX_CTRL_PRDD_SOURCE (0x0 << 30) | ||
248 | |||
249 | /* | ||
250 | * CX_SRC_ADDR - Channel Source Address Registers 32bit (R/W) | ||
251 | */ | ||
252 | #define COH901318_CX_SRC_ADDR (0x0404) | ||
253 | #define COH901318_CX_SRC_ADDR_SPACING (0x10) | ||
254 | |||
255 | /* | ||
256 | * CX_DST_ADDR - Channel Destination Address Registers 32bit R/W | ||
257 | */ | ||
258 | #define COH901318_CX_DST_ADDR (0x0408) | ||
259 | #define COH901318_CX_DST_ADDR_SPACING (0x10) | ||
260 | |||
261 | /* | ||
262 | * CX_LNK_ADDR - Channel Link Address Registers 32bit (R/W) | ||
263 | */ | ||
264 | #define COH901318_CX_LNK_ADDR (0x040C) | ||
265 | #define COH901318_CX_LNK_ADDR_SPACING (0x10) | ||
266 | #define COH901318_CX_LNK_LINK_IMMEDIATE (0x00000001) | ||
267 | #endif /* COH901318_H */ | ||
diff --git a/arch/arm/mach-u300/include/mach/uncompress.h b/arch/arm/mach-u300/include/mach/uncompress.h index 29acb718acf7..783e7e60101b 100644 --- a/arch/arm/mach-u300/include/mach/uncompress.h +++ b/arch/arm/mach-u300/include/mach/uncompress.h | |||
@@ -43,4 +43,3 @@ static inline void flush(void) | |||
43 | * nothing to do | 43 | * nothing to do |
44 | */ | 44 | */ |
45 | #define arch_decomp_setup() | 45 | #define arch_decomp_setup() |
46 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-u300/spi.c b/arch/arm/mach-u300/spi.c index 02e6659286d5..910698293d64 100644 --- a/arch/arm/mach-u300/spi.c +++ b/arch/arm/mach-u300/spi.c | |||
@@ -10,9 +10,8 @@ | |||
10 | #include <linux/amba/bus.h> | 10 | #include <linux/amba/bus.h> |
11 | #include <linux/spi/spi.h> | 11 | #include <linux/spi/spi.h> |
12 | #include <linux/amba/pl022.h> | 12 | #include <linux/amba/pl022.h> |
13 | #include <linux/platform_data/dma-coh901318.h> | ||
13 | #include <linux/err.h> | 14 | #include <linux/err.h> |
14 | #include <mach/coh901318.h> | ||
15 | #include "dma_channels.h" | ||
16 | 15 | ||
17 | /* | 16 | /* |
18 | * The following is for the actual devices on the SSP/SPI bus | 17 | * The following is for the actual devices on the SSP/SPI bus |
diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig index 5dea90636d94..3e5bbd0e5b23 100644 --- a/arch/arm/mach-ux500/Kconfig +++ b/arch/arm/mach-ux500/Kconfig | |||
@@ -11,6 +11,7 @@ config UX500_SOC_COMMON | |||
11 | select COMMON_CLK | 11 | select COMMON_CLK |
12 | select PINCTRL | 12 | select PINCTRL |
13 | select PINCTRL_NOMADIK | 13 | select PINCTRL_NOMADIK |
14 | select PINCTRL_ABX500 | ||
14 | select PL310_ERRATA_753970 if CACHE_PL310 | 15 | select PL310_ERRATA_753970 if CACHE_PL310 |
15 | 16 | ||
16 | config UX500_SOC_DB8500 | 17 | config UX500_SOC_DB8500 |
@@ -18,6 +19,11 @@ config UX500_SOC_DB8500 | |||
18 | select CPU_FREQ_TABLE if CPU_FREQ | 19 | select CPU_FREQ_TABLE if CPU_FREQ |
19 | select MFD_DB8500_PRCMU | 20 | select MFD_DB8500_PRCMU |
20 | select PINCTRL_DB8500 | 21 | select PINCTRL_DB8500 |
22 | select PINCTRL_DB8540 | ||
23 | select PINCTRL_AB8500 | ||
24 | select PINCTRL_AB8505 | ||
25 | select PINCTRL_AB9540 | ||
26 | select PINCTRL_AB8540 | ||
21 | select REGULATOR | 27 | select REGULATOR |
22 | select REGULATOR_DB8500_PRCMU | 28 | select REGULATOR_DB8500_PRCMU |
23 | 29 | ||
diff --git a/arch/arm/mach-ux500/board-mop500-uib.c b/arch/arm/mach-ux500/board-mop500-uib.c index 1f47d962e3a1..7037d3687e9f 100644 --- a/arch/arm/mach-ux500/board-mop500-uib.c +++ b/arch/arm/mach-ux500/board-mop500-uib.c | |||
@@ -13,6 +13,7 @@ | |||
13 | 13 | ||
14 | #include <mach/hardware.h> | 14 | #include <mach/hardware.h> |
15 | #include "board-mop500.h" | 15 | #include "board-mop500.h" |
16 | #include "id.h" | ||
16 | 17 | ||
17 | enum mop500_uib { | 18 | enum mop500_uib { |
18 | STUIB, | 19 | STUIB, |
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index 0e928d281759..3868aa4ff15e 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -89,26 +89,8 @@ static struct platform_device snowball_gpio_en_3v3_regulator_dev = { | |||
89 | }, | 89 | }, |
90 | }; | 90 | }; |
91 | 91 | ||
92 | static struct ab8500_gpio_platform_data ab8500_gpio_pdata = { | 92 | static struct abx500_gpio_platform_data ab8500_gpio_pdata = { |
93 | .gpio_base = MOP500_AB8500_PIN_GPIO(1), | 93 | .gpio_base = MOP500_AB8500_PIN_GPIO(1), |
94 | .irq_base = MOP500_AB8500_VIR_GPIO_IRQ_BASE, | ||
95 | /* config_reg is the initial configuration of ab8500 pins. | ||
96 | * The pins can be configured as GPIO or alt functions based | ||
97 | * on value present in GpioSel1 to GpioSel6 and AlternatFunction | ||
98 | * register. This is the array of 7 configuration settings. | ||
99 | * One has to compile time decide these settings. Below is the | ||
100 | * explanation of these setting | ||
101 | * GpioSel1 = 0x00 => Pins GPIO1 to GPIO8 are not used as GPIO | ||
102 | * GpioSel2 = 0x1E => Pins GPIO10 to GPIO13 are configured as GPIO | ||
103 | * GpioSel3 = 0x80 => Pin GPIO24 is configured as GPIO | ||
104 | * GpioSel4 = 0x01 => Pin GPIo25 is configured as GPIO | ||
105 | * GpioSel5 = 0x7A => Pins GPIO34, GPIO36 to GPIO39 are conf as GPIO | ||
106 | * GpioSel6 = 0x00 => Pins GPIO41 & GPIo42 are not configured as GPIO | ||
107 | * AlternaFunction = 0x00 => If Pins GPIO10 to 13 are not configured | ||
108 | * as GPIO then this register selectes the alternate fucntions | ||
109 | */ | ||
110 | .config_reg = {0x00, 0x1E, 0x80, 0x01, | ||
111 | 0x7A, 0x00, 0x00}, | ||
112 | }; | 94 | }; |
113 | 95 | ||
114 | /* ab8500-codec */ | 96 | /* ab8500-codec */ |
@@ -214,7 +196,7 @@ static struct platform_device snowball_sbnet_dev = { | |||
214 | }, | 196 | }, |
215 | }; | 197 | }; |
216 | 198 | ||
217 | static struct ab8500_platform_data ab8500_platdata = { | 199 | struct ab8500_platform_data ab8500_platdata = { |
218 | .irq_base = MOP500_AB8500_IRQ_BASE, | 200 | .irq_base = MOP500_AB8500_IRQ_BASE, |
219 | .regulator_reg_init = ab8500_regulator_reg_init, | 201 | .regulator_reg_init = ab8500_regulator_reg_init, |
220 | .num_regulator_reg_init = ARRAY_SIZE(ab8500_regulator_reg_init), | 202 | .num_regulator_reg_init = ARRAY_SIZE(ab8500_regulator_reg_init), |
@@ -650,6 +632,7 @@ static void __init mop500_init_machine(void) | |||
650 | int i2c0_devs; | 632 | int i2c0_devs; |
651 | int i; | 633 | int i; |
652 | 634 | ||
635 | platform_device_register(&db8500_prcmu_device); | ||
653 | mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR; | 636 | mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR; |
654 | 637 | ||
655 | mop500_pinmaps_init(); | 638 | mop500_pinmaps_init(); |
@@ -684,6 +667,7 @@ static void __init snowball_init_machine(void) | |||
684 | struct device *parent = NULL; | 667 | struct device *parent = NULL; |
685 | int i; | 668 | int i; |
686 | 669 | ||
670 | platform_device_register(&db8500_prcmu_device); | ||
687 | snowball_pinmaps_init(); | 671 | snowball_pinmaps_init(); |
688 | parent = u8500_init_devices(&ab8500_platdata); | 672 | parent = u8500_init_devices(&ab8500_platdata); |
689 | 673 | ||
@@ -709,6 +693,7 @@ static void __init hrefv60_init_machine(void) | |||
709 | int i2c0_devs; | 693 | int i2c0_devs; |
710 | int i; | 694 | int i; |
711 | 695 | ||
696 | platform_device_register(&db8500_prcmu_device); | ||
712 | /* | 697 | /* |
713 | * The HREFv60 board removed a GPIO expander and routed | 698 | * The HREFv60 board removed a GPIO expander and routed |
714 | * all these GPIO pins to the internal GPIO controller | 699 | * all these GPIO pins to the internal GPIO controller |
diff --git a/arch/arm/mach-ux500/cache-l2x0.c b/arch/arm/mach-ux500/cache-l2x0.c index 75d5b512a3d5..1c1609da76ce 100644 --- a/arch/arm/mach-ux500/cache-l2x0.c +++ b/arch/arm/mach-ux500/cache-l2x0.c | |||
@@ -10,7 +10,8 @@ | |||
10 | #include <asm/cacheflush.h> | 10 | #include <asm/cacheflush.h> |
11 | #include <asm/hardware/cache-l2x0.h> | 11 | #include <asm/hardware/cache-l2x0.h> |
12 | #include <mach/hardware.h> | 12 | #include <mach/hardware.h> |
13 | #include <mach/id.h> | 13 | |
14 | #include "id.h" | ||
14 | 15 | ||
15 | static void __iomem *l2x0_base; | 16 | static void __iomem *l2x0_base; |
16 | 17 | ||
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index 218a6b1ada7e..19235cf7bbe3 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c | |||
@@ -36,7 +36,9 @@ | |||
36 | 36 | ||
37 | #include "devices-db8500.h" | 37 | #include "devices-db8500.h" |
38 | #include "ste-dma40-db8500.h" | 38 | #include "ste-dma40-db8500.h" |
39 | |||
39 | #include "board-mop500.h" | 40 | #include "board-mop500.h" |
41 | #include "id.h" | ||
40 | 42 | ||
41 | /* minimum static i/o mapping required to boot U8500 platforms */ | 43 | /* minimum static i/o mapping required to boot U8500 platforms */ |
42 | static struct map_desc u8500_uart_io_desc[] __initdata = { | 44 | static struct map_desc u8500_uart_io_desc[] __initdata = { |
@@ -136,14 +138,9 @@ static struct platform_device db8500_pmu_device = { | |||
136 | .dev.platform_data = &db8500_pmu_platdata, | 138 | .dev.platform_data = &db8500_pmu_platdata, |
137 | }; | 139 | }; |
138 | 140 | ||
139 | static struct platform_device db8500_prcmu_device = { | ||
140 | .name = "db8500-prcmu", | ||
141 | }; | ||
142 | |||
143 | static struct platform_device *platform_devs[] __initdata = { | 141 | static struct platform_device *platform_devs[] __initdata = { |
144 | &u8500_dma40_device, | 142 | &u8500_dma40_device, |
145 | &db8500_pmu_device, | 143 | &db8500_pmu_device, |
146 | &db8500_prcmu_device, | ||
147 | }; | 144 | }; |
148 | 145 | ||
149 | static resource_size_t __initdata db8500_gpio_base[] = { | 146 | static resource_size_t __initdata db8500_gpio_base[] = { |
@@ -283,8 +280,10 @@ static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = { | |||
283 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x80128000, "nmk-i2c.2", NULL), | 280 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x80128000, "nmk-i2c.2", NULL), |
284 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x80110000, "nmk-i2c.3", NULL), | 281 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x80110000, "nmk-i2c.3", NULL), |
285 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL), | 282 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL), |
283 | OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu", | ||
284 | &db8500_prcmu_pdata), | ||
286 | /* Requires device name bindings. */ | 285 | /* Requires device name bindings. */ |
287 | OF_DEV_AUXDATA("stericsson,nmk_pinctrl", U8500_PRCMU_BASE, | 286 | OF_DEV_AUXDATA("stericsson,nmk-pinctrl", U8500_PRCMU_BASE, |
288 | "pinctrl-db8500", NULL), | 287 | "pinctrl-db8500", NULL), |
289 | /* Requires clock name and DMA bindings. */ | 288 | /* Requires clock name and DMA bindings. */ |
290 | OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80123000, | 289 | OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80123000, |
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c index 5dd90d31ffc3..537870d3fea8 100644 --- a/arch/arm/mach-ux500/cpu.c +++ b/arch/arm/mach-ux500/cpu.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <mach/devices.h> | 28 | #include <mach/devices.h> |
29 | 29 | ||
30 | #include "board-mop500.h" | 30 | #include "board-mop500.h" |
31 | #include "id.h" | ||
31 | 32 | ||
32 | void __iomem *_PRCMU_BASE; | 33 | void __iomem *_PRCMU_BASE; |
33 | 34 | ||
@@ -67,13 +68,11 @@ void __init ux500_init_irq(void) | |||
67 | * Init clocks here so that they are available for system timer | 68 | * Init clocks here so that they are available for system timer |
68 | * initialization. | 69 | * initialization. |
69 | */ | 70 | */ |
70 | if (cpu_is_u8500_family()) | 71 | if (cpu_is_u8500_family() || cpu_is_u9540()) |
71 | db8500_prcmu_early_init(); | 72 | db8500_prcmu_early_init(); |
72 | 73 | ||
73 | if (cpu_is_u8500_family()) | 74 | if (cpu_is_u8500_family() || cpu_is_u9540()) |
74 | u8500_clk_init(); | 75 | u8500_clk_init(); |
75 | else if (cpu_is_u9540()) | ||
76 | u9540_clk_init(); | ||
77 | else if (cpu_is_u8540()) | 76 | else if (cpu_is_u8540()) |
78 | u8540_clk_init(); | 77 | u8540_clk_init(); |
79 | } | 78 | } |
diff --git a/arch/arm/mach-ux500/cpuidle.c b/arch/arm/mach-ux500/cpuidle.c index b54884bd2549..ce9149302cc3 100644 --- a/arch/arm/mach-ux500/cpuidle.c +++ b/arch/arm/mach-ux500/cpuidle.c | |||
@@ -40,8 +40,10 @@ static inline int ux500_enter_idle(struct cpuidle_device *dev, | |||
40 | goto wfi; | 40 | goto wfi; |
41 | 41 | ||
42 | /* decouple the gic from the A9 cores */ | 42 | /* decouple the gic from the A9 cores */ |
43 | if (prcmu_gic_decouple()) | 43 | if (prcmu_gic_decouple()) { |
44 | spin_unlock(&master_lock); | ||
44 | goto out; | 45 | goto out; |
46 | } | ||
45 | 47 | ||
46 | /* If an error occur, we will have to recouple the gic | 48 | /* If an error occur, we will have to recouple the gic |
47 | * manually */ | 49 | * manually */ |
diff --git a/arch/arm/mach-ux500/devices-db8500.c b/arch/arm/mach-ux500/devices-db8500.c index 318d49020894..f3d9419f75d3 100644 --- a/arch/arm/mach-ux500/devices-db8500.c +++ b/arch/arm/mach-ux500/devices-db8500.c | |||
@@ -13,11 +13,13 @@ | |||
13 | #include <linux/amba/bus.h> | 13 | #include <linux/amba/bus.h> |
14 | #include <linux/amba/pl022.h> | 14 | #include <linux/amba/pl022.h> |
15 | #include <linux/platform_data/dma-ste-dma40.h> | 15 | #include <linux/platform_data/dma-ste-dma40.h> |
16 | #include <linux/mfd/dbx500-prcmu.h> | ||
16 | 17 | ||
17 | #include <mach/hardware.h> | 18 | #include <mach/hardware.h> |
18 | #include <mach/setup.h> | 19 | #include <mach/setup.h> |
19 | #include <mach/irqs.h> | 20 | #include <mach/irqs.h> |
20 | 21 | ||
22 | #include "devices-db8500.h" | ||
21 | #include "ste-dma40-db8500.h" | 23 | #include "ste-dma40-db8500.h" |
22 | 24 | ||
23 | static struct resource dma40_resources[] = { | 25 | static struct resource dma40_resources[] = { |
@@ -194,3 +196,45 @@ struct platform_device u8500_ske_keypad_device = { | |||
194 | .num_resources = ARRAY_SIZE(keypad_resources), | 196 | .num_resources = ARRAY_SIZE(keypad_resources), |
195 | .resource = keypad_resources, | 197 | .resource = keypad_resources, |
196 | }; | 198 | }; |
199 | |||
200 | struct prcmu_pdata db8500_prcmu_pdata = { | ||
201 | .ab_platdata = &ab8500_platdata, | ||
202 | .version_offset = DB8500_PRCMU_FW_VERSION_OFFSET, | ||
203 | .legacy_offset = DB8500_PRCMU_LEGACY_OFFSET, | ||
204 | }; | ||
205 | |||
206 | static struct resource db8500_prcmu_res[] = { | ||
207 | { | ||
208 | .name = "prcmu", | ||
209 | .start = U8500_PRCMU_BASE, | ||
210 | .end = U8500_PRCMU_BASE + SZ_8K - 1, | ||
211 | .flags = IORESOURCE_MEM, | ||
212 | }, | ||
213 | { | ||
214 | .name = "prcmu-tcdm", | ||
215 | .start = U8500_PRCMU_TCDM_BASE, | ||
216 | .end = U8500_PRCMU_TCDM_BASE + SZ_4K - 1, | ||
217 | .flags = IORESOURCE_MEM, | ||
218 | }, | ||
219 | { | ||
220 | .name = "irq", | ||
221 | .start = IRQ_DB8500_PRCMU1, | ||
222 | .end = IRQ_DB8500_PRCMU1, | ||
223 | .flags = IORESOURCE_IRQ, | ||
224 | }, | ||
225 | { | ||
226 | .name = "prcmu-tcpm", | ||
227 | .start = U8500_PRCMU_TCPM_BASE, | ||
228 | .end = U8500_PRCMU_TCPM_BASE + SZ_4K - 1, | ||
229 | .flags = IORESOURCE_MEM, | ||
230 | }, | ||
231 | }; | ||
232 | |||
233 | struct platform_device db8500_prcmu_device = { | ||
234 | .name = "db8500-prcmu", | ||
235 | .resource = db8500_prcmu_res, | ||
236 | .num_resources = ARRAY_SIZE(db8500_prcmu_res), | ||
237 | .dev = { | ||
238 | .platform_data = &db8500_prcmu_pdata, | ||
239 | }, | ||
240 | }; | ||
diff --git a/arch/arm/mach-ux500/devices-db8500.h b/arch/arm/mach-ux500/devices-db8500.h index a5e05f6e256f..dbcb35c48f06 100644 --- a/arch/arm/mach-ux500/devices-db8500.h +++ b/arch/arm/mach-ux500/devices-db8500.h | |||
@@ -14,6 +14,11 @@ | |||
14 | 14 | ||
15 | struct ske_keypad_platform_data; | 15 | struct ske_keypad_platform_data; |
16 | struct pl022_ssp_controller; | 16 | struct pl022_ssp_controller; |
17 | struct platform_device; | ||
18 | |||
19 | extern struct ab8500_platform_data ab8500_platdata; | ||
20 | extern struct prcmu_pdata db8500_prcmu_pdata; | ||
21 | extern struct platform_device db8500_prcmu_device; | ||
17 | 22 | ||
18 | static inline struct platform_device * | 23 | static inline struct platform_device * |
19 | db8500_add_ske_keypad(struct device *parent, | 24 | db8500_add_ske_keypad(struct device *parent, |
diff --git a/arch/arm/mach-ux500/id.c b/arch/arm/mach-ux500/id.c index d1579920139f..9f951842e1e5 100644 --- a/arch/arm/mach-ux500/id.c +++ b/arch/arm/mach-ux500/id.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
18 | #include <mach/setup.h> | 18 | #include <mach/setup.h> |
19 | 19 | ||
20 | #include "id.h" | ||
21 | |||
20 | struct dbx500_asic_id dbx500_id; | 22 | struct dbx500_asic_id dbx500_id; |
21 | 23 | ||
22 | static unsigned int ux500_read_asicid(phys_addr_t addr) | 24 | static unsigned int ux500_read_asicid(phys_addr_t addr) |
diff --git a/arch/arm/mach-ux500/include/mach/id.h b/arch/arm/mach-ux500/id.h index 9c42642ab168..bcc58a8cccbc 100644 --- a/arch/arm/mach-ux500/include/mach/id.h +++ b/arch/arm/mach-ux500/id.h | |||
@@ -61,9 +61,14 @@ static inline bool __attribute_const__ cpu_is_u8540(void) | |||
61 | return dbx500_partnumber() == 0x8540; | 61 | return dbx500_partnumber() == 0x8540; |
62 | } | 62 | } |
63 | 63 | ||
64 | static inline bool __attribute_const__ cpu_is_u8580(void) | ||
65 | { | ||
66 | return dbx500_partnumber() == 0x8580; | ||
67 | } | ||
68 | |||
64 | static inline bool cpu_is_ux540_family(void) | 69 | static inline bool cpu_is_ux540_family(void) |
65 | { | 70 | { |
66 | return cpu_is_u9540() || cpu_is_u8540(); | 71 | return cpu_is_u9540() || cpu_is_u8540() || cpu_is_u8580(); |
67 | } | 72 | } |
68 | 73 | ||
69 | /* | 74 | /* |
@@ -115,6 +120,20 @@ static inline bool cpu_is_u8500v20_or_later(void) | |||
115 | return (cpu_is_u8500() && !cpu_is_u8500v10() && !cpu_is_u8500v11()); | 120 | return (cpu_is_u8500() && !cpu_is_u8500v10() && !cpu_is_u8500v11()); |
116 | } | 121 | } |
117 | 122 | ||
123 | /* | ||
124 | * 8540 revisions | ||
125 | */ | ||
126 | |||
127 | static inline bool __attribute_const__ cpu_is_u8540v10(void) | ||
128 | { | ||
129 | return cpu_is_u8540() && dbx500_revision() == 0xA0; | ||
130 | } | ||
131 | |||
132 | static inline bool __attribute_const__ cpu_is_u8580v10(void) | ||
133 | { | ||
134 | return cpu_is_u8580() && dbx500_revision() == 0xA0; | ||
135 | } | ||
136 | |||
118 | static inline bool ux500_is_svp(void) | 137 | static inline bool ux500_is_svp(void) |
119 | { | 138 | { |
120 | return false; | 139 | return false; |
diff --git a/arch/arm/mach-ux500/include/mach/hardware.h b/arch/arm/mach-ux500/include/mach/hardware.h index 28d16e744bfd..5201ddace503 100644 --- a/arch/arm/mach-ux500/include/mach/hardware.h +++ b/arch/arm/mach-ux500/include/mach/hardware.h | |||
@@ -39,7 +39,6 @@ | |||
39 | 39 | ||
40 | #ifndef __ASSEMBLY__ | 40 | #ifndef __ASSEMBLY__ |
41 | 41 | ||
42 | #include <mach/id.h> | ||
43 | extern void __iomem *_PRCMU_BASE; | 42 | extern void __iomem *_PRCMU_BASE; |
44 | 43 | ||
45 | #define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x) | 44 | #define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x) |
diff --git a/arch/arm/mach-ux500/include/mach/irqs-board-mop500.h b/arch/arm/mach-ux500/include/mach/irqs-board-mop500.h index 7d34c52798b5..d526dd8e87d3 100644 --- a/arch/arm/mach-ux500/include/mach/irqs-board-mop500.h +++ b/arch/arm/mach-ux500/include/mach/irqs-board-mop500.h | |||
@@ -38,15 +38,7 @@ | |||
38 | #define MOP500_STMPE1601_IRQ_END \ | 38 | #define MOP500_STMPE1601_IRQ_END \ |
39 | MOP500_STMPE1601_IRQ(STMPE_NR_INTERNAL_IRQS) | 39 | MOP500_STMPE1601_IRQ(STMPE_NR_INTERNAL_IRQS) |
40 | 40 | ||
41 | /* AB8500 virtual gpio IRQ */ | 41 | #define MOP500_NR_IRQS MOP500_STMPE1601_IRQ_END |
42 | #define AB8500_VIR_GPIO_NR_IRQS 16 | ||
43 | |||
44 | #define MOP500_AB8500_VIR_GPIO_IRQ_BASE \ | ||
45 | MOP500_STMPE1601_IRQ_END | ||
46 | #define MOP500_AB8500_VIR_GPIO_IRQ_END \ | ||
47 | (MOP500_AB8500_VIR_GPIO_IRQ_BASE + AB8500_VIR_GPIO_NR_IRQS) | ||
48 | |||
49 | #define MOP500_NR_IRQS MOP500_AB8500_VIR_GPIO_IRQ_END | ||
50 | 42 | ||
51 | #define MOP500_IRQ_END MOP500_NR_IRQS | 43 | #define MOP500_IRQ_END MOP500_NR_IRQS |
52 | 44 | ||
diff --git a/arch/arm/mach-ux500/include/mach/uncompress.h b/arch/arm/mach-ux500/include/mach/uncompress.h index d60ecd1753f0..36969d52e53a 100644 --- a/arch/arm/mach-ux500/include/mach/uncompress.h +++ b/arch/arm/mach-ux500/include/mach/uncompress.h | |||
@@ -54,6 +54,4 @@ static inline void arch_decomp_setup(void) | |||
54 | ux500_uart_base = (void __iomem *)U8500_UART2_BASE; | 54 | ux500_uart_base = (void __iomem *)U8500_UART2_BASE; |
55 | } | 55 | } |
56 | 56 | ||
57 | #define arch_decomp_wdog() /* nothing to do here */ | ||
58 | |||
59 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ | 57 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ |
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c index b8adac93421f..18f7af339dc9 100644 --- a/arch/arm/mach-ux500/platsmp.c +++ b/arch/arm/mach-ux500/platsmp.c | |||
@@ -21,9 +21,12 @@ | |||
21 | #include <asm/cacheflush.h> | 21 | #include <asm/cacheflush.h> |
22 | #include <asm/smp_plat.h> | 22 | #include <asm/smp_plat.h> |
23 | #include <asm/smp_scu.h> | 23 | #include <asm/smp_scu.h> |
24 | |||
24 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
25 | #include <mach/setup.h> | 26 | #include <mach/setup.h> |
26 | 27 | ||
28 | #include "id.h" | ||
29 | |||
27 | /* This is called from headsmp.S to wakeup the secondary core */ | 30 | /* This is called from headsmp.S to wakeup the secondary core */ |
28 | extern void u8500_secondary_startup(void); | 31 | extern void u8500_secondary_startup(void); |
29 | 32 | ||
diff --git a/arch/arm/mach-ux500/timer.c b/arch/arm/mach-ux500/timer.c index aa2a78acb59e..a6af0b8732ba 100644 --- a/arch/arm/mach-ux500/timer.c +++ b/arch/arm/mach-ux500/timer.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
18 | #include <mach/irqs.h> | 18 | #include <mach/irqs.h> |
19 | 19 | ||
20 | #include "id.h" | ||
21 | |||
20 | #ifdef CONFIG_HAVE_ARM_TWD | 22 | #ifdef CONFIG_HAVE_ARM_TWD |
21 | static DEFINE_TWD_LOCAL_TIMER(u8500_twd_local_timer, | 23 | static DEFINE_TWD_LOCAL_TIMER(u8500_twd_local_timer, |
22 | U8500_TWD_BASE, IRQ_LOCALTIMER); | 24 | U8500_TWD_BASE, IRQ_LOCALTIMER); |
diff --git a/arch/arm/mach-versatile/Kconfig b/arch/arm/mach-versatile/Kconfig index 63d8e9f81b99..1dba3688275f 100644 --- a/arch/arm/mach-versatile/Kconfig +++ b/arch/arm/mach-versatile/Kconfig | |||
@@ -25,4 +25,9 @@ config MACH_VERSATILE_DT | |||
25 | Include support for the ARM(R) Versatile/PB platform, | 25 | Include support for the ARM(R) Versatile/PB platform, |
26 | using the device tree for discovery | 26 | using the device tree for discovery |
27 | 27 | ||
28 | config MACH_VERSATILE_AUTO | ||
29 | def_bool y | ||
30 | depends on !ARCH_VERSATILE_PB && !MACH_VERSATILE_AB | ||
31 | select MACH_VERSATILE_DT | ||
32 | |||
28 | endmenu | 33 | endmenu |
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index a42b89083eb2..25160aeaa3b7 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/gfp.h> | 37 | #include <linux/gfp.h> |
38 | #include <linux/clkdev.h> | 38 | #include <linux/clkdev.h> |
39 | #include <linux/mtd/physmap.h> | 39 | #include <linux/mtd/physmap.h> |
40 | #include <linux/bitops.h> | ||
40 | 41 | ||
41 | #include <asm/irq.h> | 42 | #include <asm/irq.h> |
42 | #include <asm/hardware/arm_timer.h> | 43 | #include <asm/hardware/arm_timer.h> |
@@ -65,16 +66,28 @@ | |||
65 | #define VA_VIC_BASE __io_address(VERSATILE_VIC_BASE) | 66 | #define VA_VIC_BASE __io_address(VERSATILE_VIC_BASE) |
66 | #define VA_SIC_BASE __io_address(VERSATILE_SIC_BASE) | 67 | #define VA_SIC_BASE __io_address(VERSATILE_SIC_BASE) |
67 | 68 | ||
69 | /* These PIC IRQs are valid in each configuration */ | ||
70 | #define PIC_VALID_ALL BIT(SIC_INT_KMI0) | BIT(SIC_INT_KMI1) | \ | ||
71 | BIT(SIC_INT_SCI3) | BIT(SIC_INT_UART3) | \ | ||
72 | BIT(SIC_INT_CLCD) | BIT(SIC_INT_TOUCH) | \ | ||
73 | BIT(SIC_INT_KEYPAD) | BIT(SIC_INT_DoC) | \ | ||
74 | BIT(SIC_INT_USB) | BIT(SIC_INT_PCI0) | \ | ||
75 | BIT(SIC_INT_PCI1) | BIT(SIC_INT_PCI2) | \ | ||
76 | BIT(SIC_INT_PCI3) | ||
68 | #if 1 | 77 | #if 1 |
69 | #define IRQ_MMCI0A IRQ_VICSOURCE22 | 78 | #define IRQ_MMCI0A IRQ_VICSOURCE22 |
70 | #define IRQ_AACI IRQ_VICSOURCE24 | 79 | #define IRQ_AACI IRQ_VICSOURCE24 |
71 | #define IRQ_ETH IRQ_VICSOURCE25 | 80 | #define IRQ_ETH IRQ_VICSOURCE25 |
72 | #define PIC_MASK 0xFFD00000 | 81 | #define PIC_MASK 0xFFD00000 |
82 | #define PIC_VALID PIC_VALID_ALL | ||
73 | #else | 83 | #else |
74 | #define IRQ_MMCI0A IRQ_SIC_MMCI0A | 84 | #define IRQ_MMCI0A IRQ_SIC_MMCI0A |
75 | #define IRQ_AACI IRQ_SIC_AACI | 85 | #define IRQ_AACI IRQ_SIC_AACI |
76 | #define IRQ_ETH IRQ_SIC_ETH | 86 | #define IRQ_ETH IRQ_SIC_ETH |
77 | #define PIC_MASK 0 | 87 | #define PIC_MASK 0 |
88 | #define PIC_VALID PIC_VALID_ALL | BIT(SIC_INT_MMCI0A) | \ | ||
89 | BIT(SIC_INT_MMCI1A) | BIT(SIC_INT_AACI) | \ | ||
90 | BIT(SIC_INT_ETH) | ||
78 | #endif | 91 | #endif |
79 | 92 | ||
80 | /* Lookup table for finding a DT node that represents the vic instance */ | 93 | /* Lookup table for finding a DT node that represents the vic instance */ |
@@ -102,7 +115,7 @@ void __init versatile_init_irq(void) | |||
102 | VERSATILE_SIC_BASE); | 115 | VERSATILE_SIC_BASE); |
103 | 116 | ||
104 | fpga_irq_init(VA_SIC_BASE, "SIC", IRQ_SIC_START, | 117 | fpga_irq_init(VA_SIC_BASE, "SIC", IRQ_SIC_START, |
105 | IRQ_VICSOURCE31, ~PIC_MASK, np); | 118 | IRQ_VICSOURCE31, PIC_VALID, np); |
106 | 119 | ||
107 | /* | 120 | /* |
108 | * Interrupts on secondary controller from 0 to 8 are routed to | 121 | * Interrupts on secondary controller from 0 to 8 are routed to |
@@ -114,7 +127,7 @@ void __init versatile_init_irq(void) | |||
114 | writel(PIC_MASK, VA_SIC_BASE + SIC_INT_PIC_ENABLE); | 127 | writel(PIC_MASK, VA_SIC_BASE + SIC_INT_PIC_ENABLE); |
115 | } | 128 | } |
116 | 129 | ||
117 | static struct map_desc versatile_io_desc[] __initdata = { | 130 | static struct map_desc versatile_io_desc[] __initdata __maybe_unused = { |
118 | { | 131 | { |
119 | .virtual = IO_ADDRESS(VERSATILE_SYS_BASE), | 132 | .virtual = IO_ADDRESS(VERSATILE_SYS_BASE), |
120 | .pfn = __phys_to_pfn(VERSATILE_SYS_BASE), | 133 | .pfn = __phys_to_pfn(VERSATILE_SYS_BASE), |
diff --git a/arch/arm/mach-versatile/include/mach/uncompress.h b/arch/arm/mach-versatile/include/mach/uncompress.h index 3dd0048afb34..986e3d303f3c 100644 --- a/arch/arm/mach-versatile/include/mach/uncompress.h +++ b/arch/arm/mach-versatile/include/mach/uncompress.h | |||
@@ -43,4 +43,3 @@ static inline void flush(void) | |||
43 | * nothing to do | 43 | * nothing to do |
44 | */ | 44 | */ |
45 | #define arch_decomp_setup() | 45 | #define arch_decomp_setup() |
46 | #define arch_decomp_wdog() | ||
diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c index 2f84f4094f13..e92e5e0705bc 100644 --- a/arch/arm/mach-versatile/pci.c +++ b/arch/arm/mach-versatile/pci.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | 24 | ||
25 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
26 | #include <mach/irqs.h> | ||
26 | #include <asm/irq.h> | 27 | #include <asm/irq.h> |
27 | #include <asm/mach/pci.h> | 28 | #include <asm/mach/pci.h> |
28 | 29 | ||
@@ -327,12 +328,12 @@ static int __init versatile_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | |||
327 | int irq; | 328 | int irq; |
328 | 329 | ||
329 | /* slot, pin, irq | 330 | /* slot, pin, irq |
330 | * 24 1 27 | 331 | * 24 1 IRQ_SIC_PCI0 |
331 | * 25 1 28 | 332 | * 25 1 IRQ_SIC_PCI1 |
332 | * 26 1 29 | 333 | * 26 1 IRQ_SIC_PCI2 |
333 | * 27 1 30 | 334 | * 27 1 IRQ_SIC_PCI3 |
334 | */ | 335 | */ |
335 | irq = 27 + ((slot - 24 + pin - 1) & 3); | 336 | irq = IRQ_SIC_PCI0 + ((slot - 24 + pin - 1) & 3); |
336 | 337 | ||
337 | return irq; | 338 | return irq; |
338 | } | 339 | } |
diff --git a/arch/arm/mach-vt8500/Kconfig b/arch/arm/mach-vt8500/Kconfig index c0b1c604ccf8..e3e94b2fa145 100644 --- a/arch/arm/mach-vt8500/Kconfig +++ b/arch/arm/mach-vt8500/Kconfig | |||
@@ -3,8 +3,8 @@ config ARCH_VT8500 | |||
3 | select ARCH_HAS_CPUFREQ | 3 | select ARCH_HAS_CPUFREQ |
4 | select ARCH_REQUIRE_GPIOLIB | 4 | select ARCH_REQUIRE_GPIOLIB |
5 | select CLKDEV_LOOKUP | 5 | select CLKDEV_LOOKUP |
6 | select CLKSRC_OF | ||
6 | select GENERIC_CLOCKEVENTS | 7 | select GENERIC_CLOCKEVENTS |
7 | select GENERIC_GPIO | ||
8 | select HAVE_CLK | 8 | select HAVE_CLK |
9 | select VT8500_TIMER | 9 | select VT8500_TIMER |
10 | help | 10 | help |
diff --git a/arch/arm/mach-vt8500/vt8500.c b/arch/arm/mach-vt8500/vt8500.c index 6141868b9a3c..49e80053d828 100644 --- a/arch/arm/mach-vt8500/vt8500.c +++ b/arch/arm/mach-vt8500/vt8500.c | |||
@@ -18,9 +18,9 @@ | |||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <linux/clocksource.h> | ||
21 | #include <linux/io.h> | 22 | #include <linux/io.h> |
22 | #include <linux/pm.h> | 23 | #include <linux/pm.h> |
23 | #include <linux/vt8500_timer.h> | ||
24 | 24 | ||
25 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
26 | #include <asm/mach/arch.h> | 26 | #include <asm/mach/arch.h> |
@@ -188,8 +188,8 @@ DT_MACHINE_START(WMT_DT, "VIA/Wondermedia SoC (Device Tree Support)") | |||
188 | .dt_compat = vt8500_dt_compat, | 188 | .dt_compat = vt8500_dt_compat, |
189 | .map_io = vt8500_map_io, | 189 | .map_io = vt8500_map_io, |
190 | .init_irq = vt8500_init_irq, | 190 | .init_irq = vt8500_init_irq, |
191 | .init_time = vt8500_timer_init, | ||
192 | .init_machine = vt8500_init, | 191 | .init_machine = vt8500_init, |
192 | .init_time = clocksource_of_init, | ||
193 | .restart = vt8500_restart, | 193 | .restart = vt8500_restart, |
194 | .handle_irq = vt8500_handle_irq, | 194 | .handle_irq = vt8500_handle_irq, |
195 | MACHINE_END | 195 | MACHINE_END |
diff --git a/arch/arm/mach-w90x900/include/mach/entry-macro.S b/arch/arm/mach-w90x900/include/mach/entry-macro.S index e286daca6827..0ff612ac95ba 100644 --- a/arch/arm/mach-w90x900/include/mach/entry-macro.S +++ b/arch/arm/mach-w90x900/include/mach/entry-macro.S | |||
@@ -19,8 +19,8 @@ | |||
19 | 19 | ||
20 | mov \base, #AIC_BA | 20 | mov \base, #AIC_BA |
21 | 21 | ||
22 | ldr \irqnr, [ \base, #AIC_IPER] | 22 | ldr \irqnr, [\base, #AIC_IPER] |
23 | ldr \irqnr, [ \base, #AIC_ISNR] | 23 | ldr \irqnr, [\base, #AIC_ISNR] |
24 | cmp \irqnr, #0 | 24 | cmp \irqnr, #0 |
25 | 25 | ||
26 | .endm | 26 | .endm |
diff --git a/arch/arm/mach-w90x900/include/mach/uncompress.h b/arch/arm/mach-w90x900/include/mach/uncompress.h index 03130212ace2..4b7c324ff664 100644 --- a/arch/arm/mach-w90x900/include/mach/uncompress.h +++ b/arch/arm/mach-w90x900/include/mach/uncompress.h | |||
@@ -24,8 +24,6 @@ | |||
24 | #include <mach/map.h> | 24 | #include <mach/map.h> |
25 | #include <linux/serial_reg.h> | 25 | #include <linux/serial_reg.h> |
26 | 26 | ||
27 | #define arch_decomp_wdog() | ||
28 | |||
29 | #define TX_DONE (UART_LSR_TEMT | UART_LSR_THRE) | 27 | #define TX_DONE (UART_LSR_TEMT | UART_LSR_THRE) |
30 | static volatile u32 * const uart_base = (u32 *)UART0_PA; | 28 | static volatile u32 * const uart_base = (u32 *)UART0_PA; |
31 | 29 | ||
diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c index 6472a69cbfe1..5c8983218183 100644 --- a/arch/arm/mach-zynq/common.c +++ b/arch/arm/mach-zynq/common.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/of_irq.h> | 24 | #include <linux/of_irq.h> |
25 | #include <linux/of_platform.h> | 25 | #include <linux/of_platform.h> |
26 | #include <linux/of.h> | 26 | #include <linux/of.h> |
27 | #include <linux/irqchip.h> | ||
27 | 28 | ||
28 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
29 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
@@ -76,7 +77,7 @@ static void __init xilinx_zynq_timer_init(void) | |||
76 | 77 | ||
77 | xilinx_zynq_clocks_init(slcr); | 78 | xilinx_zynq_clocks_init(slcr); |
78 | 79 | ||
79 | xttcpss_timer_init(); | 80 | xttcps_timer_init(); |
80 | } | 81 | } |
81 | 82 | ||
82 | /** | 83 | /** |
diff --git a/arch/arm/mach-zynq/common.h b/arch/arm/mach-zynq/common.h index 954b91c13c91..8b4dbbaa01cf 100644 --- a/arch/arm/mach-zynq/common.h +++ b/arch/arm/mach-zynq/common.h | |||
@@ -17,6 +17,6 @@ | |||
17 | #ifndef __MACH_ZYNQ_COMMON_H__ | 17 | #ifndef __MACH_ZYNQ_COMMON_H__ |
18 | #define __MACH_ZYNQ_COMMON_H__ | 18 | #define __MACH_ZYNQ_COMMON_H__ |
19 | 19 | ||
20 | void __init xttcpss_timer_init(void); | 20 | void __init xttcps_timer_init(void); |
21 | 21 | ||
22 | #endif | 22 | #endif |
diff --git a/arch/arm/mach-zynq/timer.c b/arch/arm/mach-zynq/timer.c index de3df283da74..f9fbc9c1e7a6 100644 --- a/arch/arm/mach-zynq/timer.c +++ b/arch/arm/mach-zynq/timer.c | |||
@@ -15,39 +15,29 @@ | |||
15 | * GNU General Public License for more details. | 15 | * GNU General Public License for more details. |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #include <linux/kernel.h> | ||
19 | #include <linux/init.h> | ||
20 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
21 | #include <linux/irq.h> | ||
22 | #include <linux/types.h> | ||
23 | #include <linux/clocksource.h> | ||
24 | #include <linux/clockchips.h> | 19 | #include <linux/clockchips.h> |
25 | #include <linux/io.h> | ||
26 | #include <linux/of.h> | ||
27 | #include <linux/of_address.h> | 20 | #include <linux/of_address.h> |
28 | #include <linux/of_irq.h> | 21 | #include <linux/of_irq.h> |
29 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
30 | #include <linux/clk-provider.h> | 23 | #include <linux/clk-provider.h> |
31 | |||
32 | #include "common.h" | 24 | #include "common.h" |
33 | 25 | ||
34 | /* | 26 | /* |
35 | * Timer Register Offset Definitions of Timer 1, Increment base address by 4 | 27 | * Timer Register Offset Definitions of Timer 1, Increment base address by 4 |
36 | * and use same offsets for Timer 2 | 28 | * and use same offsets for Timer 2 |
37 | */ | 29 | */ |
38 | #define XTTCPSS_CLK_CNTRL_OFFSET 0x00 /* Clock Control Reg, RW */ | 30 | #define XTTCPS_CLK_CNTRL_OFFSET 0x00 /* Clock Control Reg, RW */ |
39 | #define XTTCPSS_CNT_CNTRL_OFFSET 0x0C /* Counter Control Reg, RW */ | 31 | #define XTTCPS_CNT_CNTRL_OFFSET 0x0C /* Counter Control Reg, RW */ |
40 | #define XTTCPSS_COUNT_VAL_OFFSET 0x18 /* Counter Value Reg, RO */ | 32 | #define XTTCPS_COUNT_VAL_OFFSET 0x18 /* Counter Value Reg, RO */ |
41 | #define XTTCPSS_INTR_VAL_OFFSET 0x24 /* Interval Count Reg, RW */ | 33 | #define XTTCPS_INTR_VAL_OFFSET 0x24 /* Interval Count Reg, RW */ |
42 | #define XTTCPSS_MATCH_1_OFFSET 0x30 /* Match 1 Value Reg, RW */ | 34 | #define XTTCPS_ISR_OFFSET 0x54 /* Interrupt Status Reg, RO */ |
43 | #define XTTCPSS_MATCH_2_OFFSET 0x3C /* Match 2 Value Reg, RW */ | 35 | #define XTTCPS_IER_OFFSET 0x60 /* Interrupt Enable Reg, RW */ |
44 | #define XTTCPSS_MATCH_3_OFFSET 0x48 /* Match 3 Value Reg, RW */ | 36 | |
45 | #define XTTCPSS_ISR_OFFSET 0x54 /* Interrupt Status Reg, RO */ | 37 | #define XTTCPS_CNT_CNTRL_DISABLE_MASK 0x1 |
46 | #define XTTCPSS_IER_OFFSET 0x60 /* Interrupt Enable Reg, RW */ | 38 | |
47 | 39 | /* | |
48 | #define XTTCPSS_CNT_CNTRL_DISABLE_MASK 0x1 | 40 | * Setup the timers to use pre-scaling, using a fixed value for now that will |
49 | |||
50 | /* Setup the timers to use pre-scaling, using a fixed value for now that will | ||
51 | * work across most input frequency, but it may need to be more dynamic | 41 | * work across most input frequency, but it may need to be more dynamic |
52 | */ | 42 | */ |
53 | #define PRESCALE_EXPONENT 11 /* 2 ^ PRESCALE_EXPONENT = PRESCALE */ | 43 | #define PRESCALE_EXPONENT 11 /* 2 ^ PRESCALE_EXPONENT = PRESCALE */ |
@@ -57,72 +47,73 @@ | |||
57 | #define CNT_CNTRL_RESET (1<<4) | 47 | #define CNT_CNTRL_RESET (1<<4) |
58 | 48 | ||
59 | /** | 49 | /** |
60 | * struct xttcpss_timer - This definition defines local timer structure | 50 | * struct xttcps_timer - This definition defines local timer structure |
61 | * | 51 | * |
62 | * @base_addr: Base address of timer | 52 | * @base_addr: Base address of timer |
63 | **/ | 53 | **/ |
64 | struct xttcpss_timer { | 54 | struct xttcps_timer { |
65 | void __iomem *base_addr; | 55 | void __iomem *base_addr; |
66 | }; | 56 | }; |
67 | 57 | ||
68 | struct xttcpss_timer_clocksource { | 58 | struct xttcps_timer_clocksource { |
69 | struct xttcpss_timer xttc; | 59 | struct xttcps_timer xttc; |
70 | struct clocksource cs; | 60 | struct clocksource cs; |
71 | }; | 61 | }; |
72 | 62 | ||
73 | #define to_xttcpss_timer_clksrc(x) \ | 63 | #define to_xttcps_timer_clksrc(x) \ |
74 | container_of(x, struct xttcpss_timer_clocksource, cs) | 64 | container_of(x, struct xttcps_timer_clocksource, cs) |
75 | 65 | ||
76 | struct xttcpss_timer_clockevent { | 66 | struct xttcps_timer_clockevent { |
77 | struct xttcpss_timer xttc; | 67 | struct xttcps_timer xttc; |
78 | struct clock_event_device ce; | 68 | struct clock_event_device ce; |
79 | struct clk *clk; | 69 | struct clk *clk; |
80 | }; | 70 | }; |
81 | 71 | ||
82 | #define to_xttcpss_timer_clkevent(x) \ | 72 | #define to_xttcps_timer_clkevent(x) \ |
83 | container_of(x, struct xttcpss_timer_clockevent, ce) | 73 | container_of(x, struct xttcps_timer_clockevent, ce) |
84 | 74 | ||
85 | /** | 75 | /** |
86 | * xttcpss_set_interval - Set the timer interval value | 76 | * xttcps_set_interval - Set the timer interval value |
87 | * | 77 | * |
88 | * @timer: Pointer to the timer instance | 78 | * @timer: Pointer to the timer instance |
89 | * @cycles: Timer interval ticks | 79 | * @cycles: Timer interval ticks |
90 | **/ | 80 | **/ |
91 | static void xttcpss_set_interval(struct xttcpss_timer *timer, | 81 | static void xttcps_set_interval(struct xttcps_timer *timer, |
92 | unsigned long cycles) | 82 | unsigned long cycles) |
93 | { | 83 | { |
94 | u32 ctrl_reg; | 84 | u32 ctrl_reg; |
95 | 85 | ||
96 | /* Disable the counter, set the counter value and re-enable counter */ | 86 | /* Disable the counter, set the counter value and re-enable counter */ |
97 | ctrl_reg = __raw_readl(timer->base_addr + XTTCPSS_CNT_CNTRL_OFFSET); | 87 | ctrl_reg = __raw_readl(timer->base_addr + XTTCPS_CNT_CNTRL_OFFSET); |
98 | ctrl_reg |= XTTCPSS_CNT_CNTRL_DISABLE_MASK; | 88 | ctrl_reg |= XTTCPS_CNT_CNTRL_DISABLE_MASK; |
99 | __raw_writel(ctrl_reg, timer->base_addr + XTTCPSS_CNT_CNTRL_OFFSET); | 89 | __raw_writel(ctrl_reg, timer->base_addr + XTTCPS_CNT_CNTRL_OFFSET); |
100 | 90 | ||
101 | __raw_writel(cycles, timer->base_addr + XTTCPSS_INTR_VAL_OFFSET); | 91 | __raw_writel(cycles, timer->base_addr + XTTCPS_INTR_VAL_OFFSET); |
102 | 92 | ||
103 | /* Reset the counter (0x10) so that it starts from 0, one-shot | 93 | /* |
104 | mode makes this needed for timing to be right. */ | 94 | * Reset the counter (0x10) so that it starts from 0, one-shot |
95 | * mode makes this needed for timing to be right. | ||
96 | */ | ||
105 | ctrl_reg |= CNT_CNTRL_RESET; | 97 | ctrl_reg |= CNT_CNTRL_RESET; |
106 | ctrl_reg &= ~XTTCPSS_CNT_CNTRL_DISABLE_MASK; | 98 | ctrl_reg &= ~XTTCPS_CNT_CNTRL_DISABLE_MASK; |
107 | __raw_writel(ctrl_reg, timer->base_addr + XTTCPSS_CNT_CNTRL_OFFSET); | 99 | __raw_writel(ctrl_reg, timer->base_addr + XTTCPS_CNT_CNTRL_OFFSET); |
108 | } | 100 | } |
109 | 101 | ||
110 | /** | 102 | /** |
111 | * xttcpss_clock_event_interrupt - Clock event timer interrupt handler | 103 | * xttcps_clock_event_interrupt - Clock event timer interrupt handler |
112 | * | 104 | * |
113 | * @irq: IRQ number of the Timer | 105 | * @irq: IRQ number of the Timer |
114 | * @dev_id: void pointer to the xttcpss_timer instance | 106 | * @dev_id: void pointer to the xttcps_timer instance |
115 | * | 107 | * |
116 | * returns: Always IRQ_HANDLED - success | 108 | * returns: Always IRQ_HANDLED - success |
117 | **/ | 109 | **/ |
118 | static irqreturn_t xttcpss_clock_event_interrupt(int irq, void *dev_id) | 110 | static irqreturn_t xttcps_clock_event_interrupt(int irq, void *dev_id) |
119 | { | 111 | { |
120 | struct xttcpss_timer_clockevent *xttce = dev_id; | 112 | struct xttcps_timer_clockevent *xttce = dev_id; |
121 | struct xttcpss_timer *timer = &xttce->xttc; | 113 | struct xttcps_timer *timer = &xttce->xttc; |
122 | 114 | ||
123 | /* Acknowledge the interrupt and call event handler */ | 115 | /* Acknowledge the interrupt and call event handler */ |
124 | __raw_writel(__raw_readl(timer->base_addr + XTTCPSS_ISR_OFFSET), | 116 | __raw_readl(timer->base_addr + XTTCPS_ISR_OFFSET); |
125 | timer->base_addr + XTTCPSS_ISR_OFFSET); | ||
126 | 117 | ||
127 | xttce->ce.event_handler(&xttce->ce); | 118 | xttce->ce.event_handler(&xttce->ce); |
128 | 119 | ||
@@ -136,46 +127,46 @@ static irqreturn_t xttcpss_clock_event_interrupt(int irq, void *dev_id) | |||
136 | **/ | 127 | **/ |
137 | static cycle_t __xttc_clocksource_read(struct clocksource *cs) | 128 | static cycle_t __xttc_clocksource_read(struct clocksource *cs) |
138 | { | 129 | { |
139 | struct xttcpss_timer *timer = &to_xttcpss_timer_clksrc(cs)->xttc; | 130 | struct xttcps_timer *timer = &to_xttcps_timer_clksrc(cs)->xttc; |
140 | 131 | ||
141 | return (cycle_t)__raw_readl(timer->base_addr + | 132 | return (cycle_t)__raw_readl(timer->base_addr + |
142 | XTTCPSS_COUNT_VAL_OFFSET); | 133 | XTTCPS_COUNT_VAL_OFFSET); |
143 | } | 134 | } |
144 | 135 | ||
145 | /** | 136 | /** |
146 | * xttcpss_set_next_event - Sets the time interval for next event | 137 | * xttcps_set_next_event - Sets the time interval for next event |
147 | * | 138 | * |
148 | * @cycles: Timer interval ticks | 139 | * @cycles: Timer interval ticks |
149 | * @evt: Address of clock event instance | 140 | * @evt: Address of clock event instance |
150 | * | 141 | * |
151 | * returns: Always 0 - success | 142 | * returns: Always 0 - success |
152 | **/ | 143 | **/ |
153 | static int xttcpss_set_next_event(unsigned long cycles, | 144 | static int xttcps_set_next_event(unsigned long cycles, |
154 | struct clock_event_device *evt) | 145 | struct clock_event_device *evt) |
155 | { | 146 | { |
156 | struct xttcpss_timer_clockevent *xttce = to_xttcpss_timer_clkevent(evt); | 147 | struct xttcps_timer_clockevent *xttce = to_xttcps_timer_clkevent(evt); |
157 | struct xttcpss_timer *timer = &xttce->xttc; | 148 | struct xttcps_timer *timer = &xttce->xttc; |
158 | 149 | ||
159 | xttcpss_set_interval(timer, cycles); | 150 | xttcps_set_interval(timer, cycles); |
160 | return 0; | 151 | return 0; |
161 | } | 152 | } |
162 | 153 | ||
163 | /** | 154 | /** |
164 | * xttcpss_set_mode - Sets the mode of timer | 155 | * xttcps_set_mode - Sets the mode of timer |
165 | * | 156 | * |
166 | * @mode: Mode to be set | 157 | * @mode: Mode to be set |
167 | * @evt: Address of clock event instance | 158 | * @evt: Address of clock event instance |
168 | **/ | 159 | **/ |
169 | static void xttcpss_set_mode(enum clock_event_mode mode, | 160 | static void xttcps_set_mode(enum clock_event_mode mode, |
170 | struct clock_event_device *evt) | 161 | struct clock_event_device *evt) |
171 | { | 162 | { |
172 | struct xttcpss_timer_clockevent *xttce = to_xttcpss_timer_clkevent(evt); | 163 | struct xttcps_timer_clockevent *xttce = to_xttcps_timer_clkevent(evt); |
173 | struct xttcpss_timer *timer = &xttce->xttc; | 164 | struct xttcps_timer *timer = &xttce->xttc; |
174 | u32 ctrl_reg; | 165 | u32 ctrl_reg; |
175 | 166 | ||
176 | switch (mode) { | 167 | switch (mode) { |
177 | case CLOCK_EVT_MODE_PERIODIC: | 168 | case CLOCK_EVT_MODE_PERIODIC: |
178 | xttcpss_set_interval(timer, | 169 | xttcps_set_interval(timer, |
179 | DIV_ROUND_CLOSEST(clk_get_rate(xttce->clk), | 170 | DIV_ROUND_CLOSEST(clk_get_rate(xttce->clk), |
180 | PRESCALE * HZ)); | 171 | PRESCALE * HZ)); |
181 | break; | 172 | break; |
@@ -183,17 +174,17 @@ static void xttcpss_set_mode(enum clock_event_mode mode, | |||
183 | case CLOCK_EVT_MODE_UNUSED: | 174 | case CLOCK_EVT_MODE_UNUSED: |
184 | case CLOCK_EVT_MODE_SHUTDOWN: | 175 | case CLOCK_EVT_MODE_SHUTDOWN: |
185 | ctrl_reg = __raw_readl(timer->base_addr + | 176 | ctrl_reg = __raw_readl(timer->base_addr + |
186 | XTTCPSS_CNT_CNTRL_OFFSET); | 177 | XTTCPS_CNT_CNTRL_OFFSET); |
187 | ctrl_reg |= XTTCPSS_CNT_CNTRL_DISABLE_MASK; | 178 | ctrl_reg |= XTTCPS_CNT_CNTRL_DISABLE_MASK; |
188 | __raw_writel(ctrl_reg, | 179 | __raw_writel(ctrl_reg, |
189 | timer->base_addr + XTTCPSS_CNT_CNTRL_OFFSET); | 180 | timer->base_addr + XTTCPS_CNT_CNTRL_OFFSET); |
190 | break; | 181 | break; |
191 | case CLOCK_EVT_MODE_RESUME: | 182 | case CLOCK_EVT_MODE_RESUME: |
192 | ctrl_reg = __raw_readl(timer->base_addr + | 183 | ctrl_reg = __raw_readl(timer->base_addr + |
193 | XTTCPSS_CNT_CNTRL_OFFSET); | 184 | XTTCPS_CNT_CNTRL_OFFSET); |
194 | ctrl_reg &= ~XTTCPSS_CNT_CNTRL_DISABLE_MASK; | 185 | ctrl_reg &= ~XTTCPS_CNT_CNTRL_DISABLE_MASK; |
195 | __raw_writel(ctrl_reg, | 186 | __raw_writel(ctrl_reg, |
196 | timer->base_addr + XTTCPSS_CNT_CNTRL_OFFSET); | 187 | timer->base_addr + XTTCPS_CNT_CNTRL_OFFSET); |
197 | break; | 188 | break; |
198 | } | 189 | } |
199 | } | 190 | } |
@@ -201,7 +192,7 @@ static void xttcpss_set_mode(enum clock_event_mode mode, | |||
201 | static void __init zynq_ttc_setup_clocksource(struct device_node *np, | 192 | static void __init zynq_ttc_setup_clocksource(struct device_node *np, |
202 | void __iomem *base) | 193 | void __iomem *base) |
203 | { | 194 | { |
204 | struct xttcpss_timer_clocksource *ttccs; | 195 | struct xttcps_timer_clocksource *ttccs; |
205 | struct clk *clk; | 196 | struct clk *clk; |
206 | int err; | 197 | int err; |
207 | u32 reg; | 198 | u32 reg; |
@@ -230,11 +221,11 @@ static void __init zynq_ttc_setup_clocksource(struct device_node *np, | |||
230 | ttccs->cs.mask = CLOCKSOURCE_MASK(16); | 221 | ttccs->cs.mask = CLOCKSOURCE_MASK(16); |
231 | ttccs->cs.flags = CLOCK_SOURCE_IS_CONTINUOUS; | 222 | ttccs->cs.flags = CLOCK_SOURCE_IS_CONTINUOUS; |
232 | 223 | ||
233 | __raw_writel(0x0, ttccs->xttc.base_addr + XTTCPSS_IER_OFFSET); | 224 | __raw_writel(0x0, ttccs->xttc.base_addr + XTTCPS_IER_OFFSET); |
234 | __raw_writel(CLK_CNTRL_PRESCALE | CLK_CNTRL_PRESCALE_EN, | 225 | __raw_writel(CLK_CNTRL_PRESCALE | CLK_CNTRL_PRESCALE_EN, |
235 | ttccs->xttc.base_addr + XTTCPSS_CLK_CNTRL_OFFSET); | 226 | ttccs->xttc.base_addr + XTTCPS_CLK_CNTRL_OFFSET); |
236 | __raw_writel(CNT_CNTRL_RESET, | 227 | __raw_writel(CNT_CNTRL_RESET, |
237 | ttccs->xttc.base_addr + XTTCPSS_CNT_CNTRL_OFFSET); | 228 | ttccs->xttc.base_addr + XTTCPS_CNT_CNTRL_OFFSET); |
238 | 229 | ||
239 | err = clocksource_register_hz(&ttccs->cs, clk_get_rate(clk) / PRESCALE); | 230 | err = clocksource_register_hz(&ttccs->cs, clk_get_rate(clk) / PRESCALE); |
240 | if (WARN_ON(err)) | 231 | if (WARN_ON(err)) |
@@ -244,7 +235,7 @@ static void __init zynq_ttc_setup_clocksource(struct device_node *np, | |||
244 | static void __init zynq_ttc_setup_clockevent(struct device_node *np, | 235 | static void __init zynq_ttc_setup_clockevent(struct device_node *np, |
245 | void __iomem *base) | 236 | void __iomem *base) |
246 | { | 237 | { |
247 | struct xttcpss_timer_clockevent *ttcce; | 238 | struct xttcps_timer_clockevent *ttcce; |
248 | int err, irq; | 239 | int err, irq; |
249 | u32 reg; | 240 | u32 reg; |
250 | 241 | ||
@@ -272,17 +263,18 @@ static void __init zynq_ttc_setup_clockevent(struct device_node *np, | |||
272 | 263 | ||
273 | ttcce->ce.name = np->name; | 264 | ttcce->ce.name = np->name; |
274 | ttcce->ce.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT; | 265 | ttcce->ce.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT; |
275 | ttcce->ce.set_next_event = xttcpss_set_next_event; | 266 | ttcce->ce.set_next_event = xttcps_set_next_event; |
276 | ttcce->ce.set_mode = xttcpss_set_mode; | 267 | ttcce->ce.set_mode = xttcps_set_mode; |
277 | ttcce->ce.rating = 200; | 268 | ttcce->ce.rating = 200; |
278 | ttcce->ce.irq = irq; | 269 | ttcce->ce.irq = irq; |
270 | ttcce->ce.cpumask = cpu_possible_mask; | ||
279 | 271 | ||
280 | __raw_writel(0x23, ttcce->xttc.base_addr + XTTCPSS_CNT_CNTRL_OFFSET); | 272 | __raw_writel(0x23, ttcce->xttc.base_addr + XTTCPS_CNT_CNTRL_OFFSET); |
281 | __raw_writel(CLK_CNTRL_PRESCALE | CLK_CNTRL_PRESCALE_EN, | 273 | __raw_writel(CLK_CNTRL_PRESCALE | CLK_CNTRL_PRESCALE_EN, |
282 | ttcce->xttc.base_addr + XTTCPSS_CLK_CNTRL_OFFSET); | 274 | ttcce->xttc.base_addr + XTTCPS_CLK_CNTRL_OFFSET); |
283 | __raw_writel(0x1, ttcce->xttc.base_addr + XTTCPSS_IER_OFFSET); | 275 | __raw_writel(0x1, ttcce->xttc.base_addr + XTTCPS_IER_OFFSET); |
284 | 276 | ||
285 | err = request_irq(irq, xttcpss_clock_event_interrupt, IRQF_TIMER, | 277 | err = request_irq(irq, xttcps_clock_event_interrupt, IRQF_TIMER, |
286 | np->name, ttcce); | 278 | np->name, ttcce); |
287 | if (WARN_ON(err)) | 279 | if (WARN_ON(err)) |
288 | return; | 280 | return; |
@@ -301,12 +293,12 @@ static const __initconst struct of_device_id zynq_ttc_match[] = { | |||
301 | }; | 293 | }; |
302 | 294 | ||
303 | /** | 295 | /** |
304 | * xttcpss_timer_init - Initialize the timer | 296 | * xttcps_timer_init - Initialize the timer |
305 | * | 297 | * |
306 | * Initializes the timer hardware and register the clock source and clock event | 298 | * Initializes the timer hardware and register the clock source and clock event |
307 | * timers with Linux kernal timer framework | 299 | * timers with Linux kernal timer framework |
308 | **/ | 300 | **/ |
309 | void __init xttcpss_timer_init(void) | 301 | void __init xttcps_timer_init(void) |
310 | { | 302 | { |
311 | struct device_node *np; | 303 | struct device_node *np; |
312 | 304 | ||
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 3fd629d5a513..025d17328730 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -629,8 +629,9 @@ config ARM_THUMBEE | |||
629 | make use of it. Say N for code that can run on CPUs without ThumbEE. | 629 | make use of it. Say N for code that can run on CPUs without ThumbEE. |
630 | 630 | ||
631 | config ARM_VIRT_EXT | 631 | config ARM_VIRT_EXT |
632 | bool "Native support for the ARM Virtualization Extensions" | 632 | bool |
633 | depends on MMU && CPU_V7 | 633 | depends on MMU |
634 | default y if CPU_V7 | ||
634 | help | 635 | help |
635 | Enable the kernel to make use of the ARM Virtualization | 636 | Enable the kernel to make use of the ARM Virtualization |
636 | Extensions to install hypervisors without run-time firmware | 637 | Extensions to install hypervisors without run-time firmware |
@@ -640,11 +641,6 @@ config ARM_VIRT_EXT | |||
640 | use of this feature. Refer to Documentation/arm/Booting for | 641 | use of this feature. Refer to Documentation/arm/Booting for |
641 | details. | 642 | details. |
642 | 643 | ||
643 | It is safe to enable this option even if the kernel may not be | ||
644 | booted in HYP mode, may not have support for the | ||
645 | virtualization extensions, or may be booted with a | ||
646 | non-compliant bootloader. | ||
647 | |||
648 | config SWP_EMULATE | 644 | config SWP_EMULATE |
649 | bool "Emulate SWP/SWPB instructions" | 645 | bool "Emulate SWP/SWPB instructions" |
650 | depends on !CPU_USE_DOMAINS && CPU_V7 | 646 | depends on !CPU_USE_DOMAINS && CPU_V7 |
diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index 8a9c4cb50a93..4e333fa2756f 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile | |||
@@ -6,7 +6,7 @@ obj-y := dma-mapping.o extable.o fault.o init.o \ | |||
6 | iomap.o | 6 | iomap.o |
7 | 7 | ||
8 | obj-$(CONFIG_MMU) += fault-armv.o flush.o idmap.o ioremap.o \ | 8 | obj-$(CONFIG_MMU) += fault-armv.o flush.o idmap.o ioremap.o \ |
9 | mmap.o pgd.o mmu.o vmregion.o | 9 | mmap.o pgd.o mmu.o |
10 | 10 | ||
11 | ifneq ($(CONFIG_MMU),y) | 11 | ifneq ($(CONFIG_MMU),y) |
12 | obj-y += nommu.o | 12 | obj-y += nommu.o |
diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c index bc4a5e9ebb78..7a0511191f6b 100644 --- a/arch/arm/mm/context.c +++ b/arch/arm/mm/context.c | |||
@@ -34,6 +34,9 @@ | |||
34 | * The ASID is used to tag entries in the CPU caches and TLBs. | 34 | * The ASID is used to tag entries in the CPU caches and TLBs. |
35 | * The context ID is used by debuggers and trace logic, and | 35 | * The context ID is used by debuggers and trace logic, and |
36 | * should be unique within all running processes. | 36 | * should be unique within all running processes. |
37 | * | ||
38 | * In big endian operation, the two 32 bit words are swapped if accesed by | ||
39 | * non 64-bit operations. | ||
37 | */ | 40 | */ |
38 | #define ASID_FIRST_VERSION (1ULL << ASID_BITS) | 41 | #define ASID_FIRST_VERSION (1ULL << ASID_BITS) |
39 | #define NUM_USER_ASIDS (ASID_FIRST_VERSION - 1) | 42 | #define NUM_USER_ASIDS (ASID_FIRST_VERSION - 1) |
diff --git a/arch/arm/mm/idmap.c b/arch/arm/mm/idmap.c index 99db769307ec..2dffc010cc41 100644 --- a/arch/arm/mm/idmap.c +++ b/arch/arm/mm/idmap.c | |||
@@ -1,4 +1,6 @@ | |||
1 | #include <linux/module.h> | ||
1 | #include <linux/kernel.h> | 2 | #include <linux/kernel.h> |
3 | #include <linux/slab.h> | ||
2 | 4 | ||
3 | #include <asm/cputype.h> | 5 | #include <asm/cputype.h> |
4 | #include <asm/idmap.h> | 6 | #include <asm/idmap.h> |
@@ -6,6 +8,7 @@ | |||
6 | #include <asm/pgtable.h> | 8 | #include <asm/pgtable.h> |
7 | #include <asm/sections.h> | 9 | #include <asm/sections.h> |
8 | #include <asm/system_info.h> | 10 | #include <asm/system_info.h> |
11 | #include <asm/virt.h> | ||
9 | 12 | ||
10 | pgd_t *idmap_pgd; | 13 | pgd_t *idmap_pgd; |
11 | 14 | ||
@@ -59,11 +62,17 @@ static void idmap_add_pud(pgd_t *pgd, unsigned long addr, unsigned long end, | |||
59 | } while (pud++, addr = next, addr != end); | 62 | } while (pud++, addr = next, addr != end); |
60 | } | 63 | } |
61 | 64 | ||
62 | static void identity_mapping_add(pgd_t *pgd, unsigned long addr, unsigned long end) | 65 | static void identity_mapping_add(pgd_t *pgd, const char *text_start, |
66 | const char *text_end, unsigned long prot) | ||
63 | { | 67 | { |
64 | unsigned long prot, next; | 68 | unsigned long addr, end; |
69 | unsigned long next; | ||
70 | |||
71 | addr = virt_to_phys(text_start); | ||
72 | end = virt_to_phys(text_end); | ||
73 | |||
74 | prot |= PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AF; | ||
65 | 75 | ||
66 | prot = PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AF; | ||
67 | if (cpu_architecture() <= CPU_ARCH_ARMv5TEJ && !cpu_is_xscale()) | 76 | if (cpu_architecture() <= CPU_ARCH_ARMv5TEJ && !cpu_is_xscale()) |
68 | prot |= PMD_BIT4; | 77 | prot |= PMD_BIT4; |
69 | 78 | ||
@@ -74,28 +83,52 @@ static void identity_mapping_add(pgd_t *pgd, unsigned long addr, unsigned long e | |||
74 | } while (pgd++, addr = next, addr != end); | 83 | } while (pgd++, addr = next, addr != end); |
75 | } | 84 | } |
76 | 85 | ||
86 | #if defined(CONFIG_ARM_VIRT_EXT) && defined(CONFIG_ARM_LPAE) | ||
87 | pgd_t *hyp_pgd; | ||
88 | |||
89 | extern char __hyp_idmap_text_start[], __hyp_idmap_text_end[]; | ||
90 | |||
91 | static int __init init_static_idmap_hyp(void) | ||
92 | { | ||
93 | hyp_pgd = kzalloc(PTRS_PER_PGD * sizeof(pgd_t), GFP_KERNEL); | ||
94 | if (!hyp_pgd) | ||
95 | return -ENOMEM; | ||
96 | |||
97 | pr_info("Setting up static HYP identity map for 0x%p - 0x%p\n", | ||
98 | __hyp_idmap_text_start, __hyp_idmap_text_end); | ||
99 | identity_mapping_add(hyp_pgd, __hyp_idmap_text_start, | ||
100 | __hyp_idmap_text_end, PMD_SECT_AP1); | ||
101 | |||
102 | return 0; | ||
103 | } | ||
104 | #else | ||
105 | static int __init init_static_idmap_hyp(void) | ||
106 | { | ||
107 | return 0; | ||
108 | } | ||
109 | #endif | ||
110 | |||
77 | extern char __idmap_text_start[], __idmap_text_end[]; | 111 | extern char __idmap_text_start[], __idmap_text_end[]; |
78 | 112 | ||
79 | static int __init init_static_idmap(void) | 113 | static int __init init_static_idmap(void) |
80 | { | 114 | { |
81 | phys_addr_t idmap_start, idmap_end; | 115 | int ret; |
82 | 116 | ||
83 | idmap_pgd = pgd_alloc(&init_mm); | 117 | idmap_pgd = pgd_alloc(&init_mm); |
84 | if (!idmap_pgd) | 118 | if (!idmap_pgd) |
85 | return -ENOMEM; | 119 | return -ENOMEM; |
86 | 120 | ||
87 | /* Add an identity mapping for the physical address of the section. */ | 121 | pr_info("Setting up static identity map for 0x%p - 0x%p\n", |
88 | idmap_start = virt_to_phys((void *)__idmap_text_start); | 122 | __idmap_text_start, __idmap_text_end); |
89 | idmap_end = virt_to_phys((void *)__idmap_text_end); | 123 | identity_mapping_add(idmap_pgd, __idmap_text_start, |
124 | __idmap_text_end, 0); | ||
90 | 125 | ||
91 | pr_info("Setting up static identity map for 0x%llx - 0x%llx\n", | 126 | ret = init_static_idmap_hyp(); |
92 | (long long)idmap_start, (long long)idmap_end); | ||
93 | identity_mapping_add(idmap_pgd, idmap_start, idmap_end); | ||
94 | 127 | ||
95 | /* Flush L1 for the hardware to see this page table content */ | 128 | /* Flush L1 for the hardware to see this page table content */ |
96 | flush_cache_louis(); | 129 | flush_cache_louis(); |
97 | 130 | ||
98 | return 0; | 131 | return ret; |
99 | } | 132 | } |
100 | early_initcall(init_static_idmap); | 133 | early_initcall(init_static_idmap); |
101 | 134 | ||
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c index 88fd86cf3d9a..04d9006eab1f 100644 --- a/arch/arm/mm/ioremap.c +++ b/arch/arm/mm/ioremap.c | |||
@@ -39,6 +39,70 @@ | |||
39 | #include <asm/mach/pci.h> | 39 | #include <asm/mach/pci.h> |
40 | #include "mm.h" | 40 | #include "mm.h" |
41 | 41 | ||
42 | |||
43 | LIST_HEAD(static_vmlist); | ||
44 | |||
45 | static struct static_vm *find_static_vm_paddr(phys_addr_t paddr, | ||
46 | size_t size, unsigned int mtype) | ||
47 | { | ||
48 | struct static_vm *svm; | ||
49 | struct vm_struct *vm; | ||
50 | |||
51 | list_for_each_entry(svm, &static_vmlist, list) { | ||
52 | vm = &svm->vm; | ||
53 | if (!(vm->flags & VM_ARM_STATIC_MAPPING)) | ||
54 | continue; | ||
55 | if ((vm->flags & VM_ARM_MTYPE_MASK) != VM_ARM_MTYPE(mtype)) | ||
56 | continue; | ||
57 | |||
58 | if (vm->phys_addr > paddr || | ||
59 | paddr + size - 1 > vm->phys_addr + vm->size - 1) | ||
60 | continue; | ||
61 | |||
62 | return svm; | ||
63 | } | ||
64 | |||
65 | return NULL; | ||
66 | } | ||
67 | |||
68 | struct static_vm *find_static_vm_vaddr(void *vaddr) | ||
69 | { | ||
70 | struct static_vm *svm; | ||
71 | struct vm_struct *vm; | ||
72 | |||
73 | list_for_each_entry(svm, &static_vmlist, list) { | ||
74 | vm = &svm->vm; | ||
75 | |||
76 | /* static_vmlist is ascending order */ | ||
77 | if (vm->addr > vaddr) | ||
78 | break; | ||
79 | |||
80 | if (vm->addr <= vaddr && vm->addr + vm->size > vaddr) | ||
81 | return svm; | ||
82 | } | ||
83 | |||
84 | return NULL; | ||
85 | } | ||
86 | |||
87 | void __init add_static_vm_early(struct static_vm *svm) | ||
88 | { | ||
89 | struct static_vm *curr_svm; | ||
90 | struct vm_struct *vm; | ||
91 | void *vaddr; | ||
92 | |||
93 | vm = &svm->vm; | ||
94 | vm_area_add_early(vm); | ||
95 | vaddr = vm->addr; | ||
96 | |||
97 | list_for_each_entry(curr_svm, &static_vmlist, list) { | ||
98 | vm = &curr_svm->vm; | ||
99 | |||
100 | if (vm->addr > vaddr) | ||
101 | break; | ||
102 | } | ||
103 | list_add_tail(&svm->list, &curr_svm->list); | ||
104 | } | ||
105 | |||
42 | int ioremap_page(unsigned long virt, unsigned long phys, | 106 | int ioremap_page(unsigned long virt, unsigned long phys, |
43 | const struct mem_type *mtype) | 107 | const struct mem_type *mtype) |
44 | { | 108 | { |
@@ -197,13 +261,14 @@ void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn, | |||
197 | const struct mem_type *type; | 261 | const struct mem_type *type; |
198 | int err; | 262 | int err; |
199 | unsigned long addr; | 263 | unsigned long addr; |
200 | struct vm_struct * area; | 264 | struct vm_struct *area; |
265 | phys_addr_t paddr = __pfn_to_phys(pfn); | ||
201 | 266 | ||
202 | #ifndef CONFIG_ARM_LPAE | 267 | #ifndef CONFIG_ARM_LPAE |
203 | /* | 268 | /* |
204 | * High mappings must be supersection aligned | 269 | * High mappings must be supersection aligned |
205 | */ | 270 | */ |
206 | if (pfn >= 0x100000 && (__pfn_to_phys(pfn) & ~SUPERSECTION_MASK)) | 271 | if (pfn >= 0x100000 && (paddr & ~SUPERSECTION_MASK)) |
207 | return NULL; | 272 | return NULL; |
208 | #endif | 273 | #endif |
209 | 274 | ||
@@ -219,24 +284,16 @@ void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn, | |||
219 | /* | 284 | /* |
220 | * Try to reuse one of the static mapping whenever possible. | 285 | * Try to reuse one of the static mapping whenever possible. |
221 | */ | 286 | */ |
222 | read_lock(&vmlist_lock); | 287 | if (size && !(sizeof(phys_addr_t) == 4 && pfn >= 0x100000)) { |
223 | for (area = vmlist; area; area = area->next) { | 288 | struct static_vm *svm; |
224 | if (!size || (sizeof(phys_addr_t) == 4 && pfn >= 0x100000)) | 289 | |
225 | break; | 290 | svm = find_static_vm_paddr(paddr, size, mtype); |
226 | if (!(area->flags & VM_ARM_STATIC_MAPPING)) | 291 | if (svm) { |
227 | continue; | 292 | addr = (unsigned long)svm->vm.addr; |
228 | if ((area->flags & VM_ARM_MTYPE_MASK) != VM_ARM_MTYPE(mtype)) | 293 | addr += paddr - svm->vm.phys_addr; |
229 | continue; | 294 | return (void __iomem *) (offset + addr); |
230 | if (__phys_to_pfn(area->phys_addr) > pfn || | 295 | } |
231 | __pfn_to_phys(pfn) + size-1 > area->phys_addr + area->size-1) | ||
232 | continue; | ||
233 | /* we can drop the lock here as we know *area is static */ | ||
234 | read_unlock(&vmlist_lock); | ||
235 | addr = (unsigned long)area->addr; | ||
236 | addr += __pfn_to_phys(pfn) - area->phys_addr; | ||
237 | return (void __iomem *) (offset + addr); | ||
238 | } | 296 | } |
239 | read_unlock(&vmlist_lock); | ||
240 | 297 | ||
241 | /* | 298 | /* |
242 | * Don't allow RAM to be mapped - this causes problems with ARMv6+ | 299 | * Don't allow RAM to be mapped - this causes problems with ARMv6+ |
@@ -248,21 +305,21 @@ void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn, | |||
248 | if (!area) | 305 | if (!area) |
249 | return NULL; | 306 | return NULL; |
250 | addr = (unsigned long)area->addr; | 307 | addr = (unsigned long)area->addr; |
251 | area->phys_addr = __pfn_to_phys(pfn); | 308 | area->phys_addr = paddr; |
252 | 309 | ||
253 | #if !defined(CONFIG_SMP) && !defined(CONFIG_ARM_LPAE) | 310 | #if !defined(CONFIG_SMP) && !defined(CONFIG_ARM_LPAE) |
254 | if (DOMAIN_IO == 0 && | 311 | if (DOMAIN_IO == 0 && |
255 | (((cpu_architecture() >= CPU_ARCH_ARMv6) && (get_cr() & CR_XP)) || | 312 | (((cpu_architecture() >= CPU_ARCH_ARMv6) && (get_cr() & CR_XP)) || |
256 | cpu_is_xsc3()) && pfn >= 0x100000 && | 313 | cpu_is_xsc3()) && pfn >= 0x100000 && |
257 | !((__pfn_to_phys(pfn) | size | addr) & ~SUPERSECTION_MASK)) { | 314 | !((paddr | size | addr) & ~SUPERSECTION_MASK)) { |
258 | area->flags |= VM_ARM_SECTION_MAPPING; | 315 | area->flags |= VM_ARM_SECTION_MAPPING; |
259 | err = remap_area_supersections(addr, pfn, size, type); | 316 | err = remap_area_supersections(addr, pfn, size, type); |
260 | } else if (!((__pfn_to_phys(pfn) | size | addr) & ~PMD_MASK)) { | 317 | } else if (!((paddr | size | addr) & ~PMD_MASK)) { |
261 | area->flags |= VM_ARM_SECTION_MAPPING; | 318 | area->flags |= VM_ARM_SECTION_MAPPING; |
262 | err = remap_area_sections(addr, pfn, size, type); | 319 | err = remap_area_sections(addr, pfn, size, type); |
263 | } else | 320 | } else |
264 | #endif | 321 | #endif |
265 | err = ioremap_page_range(addr, addr + size, __pfn_to_phys(pfn), | 322 | err = ioremap_page_range(addr, addr + size, paddr, |
266 | __pgprot(type->prot_pte)); | 323 | __pgprot(type->prot_pte)); |
267 | 324 | ||
268 | if (err) { | 325 | if (err) { |
@@ -346,34 +403,28 @@ __arm_ioremap_exec(unsigned long phys_addr, size_t size, bool cached) | |||
346 | void __iounmap(volatile void __iomem *io_addr) | 403 | void __iounmap(volatile void __iomem *io_addr) |
347 | { | 404 | { |
348 | void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr); | 405 | void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr); |
349 | struct vm_struct *vm; | 406 | struct static_vm *svm; |
407 | |||
408 | /* If this is a static mapping, we must leave it alone */ | ||
409 | svm = find_static_vm_vaddr(addr); | ||
410 | if (svm) | ||
411 | return; | ||
350 | 412 | ||
351 | read_lock(&vmlist_lock); | ||
352 | for (vm = vmlist; vm; vm = vm->next) { | ||
353 | if (vm->addr > addr) | ||
354 | break; | ||
355 | if (!(vm->flags & VM_IOREMAP)) | ||
356 | continue; | ||
357 | /* If this is a static mapping we must leave it alone */ | ||
358 | if ((vm->flags & VM_ARM_STATIC_MAPPING) && | ||
359 | (vm->addr <= addr) && (vm->addr + vm->size > addr)) { | ||
360 | read_unlock(&vmlist_lock); | ||
361 | return; | ||
362 | } | ||
363 | #if !defined(CONFIG_SMP) && !defined(CONFIG_ARM_LPAE) | 413 | #if !defined(CONFIG_SMP) && !defined(CONFIG_ARM_LPAE) |
414 | { | ||
415 | struct vm_struct *vm; | ||
416 | |||
417 | vm = find_vm_area(addr); | ||
418 | |||
364 | /* | 419 | /* |
365 | * If this is a section based mapping we need to handle it | 420 | * If this is a section based mapping we need to handle it |
366 | * specially as the VM subsystem does not know how to handle | 421 | * specially as the VM subsystem does not know how to handle |
367 | * such a beast. | 422 | * such a beast. |
368 | */ | 423 | */ |
369 | if ((vm->addr == addr) && | 424 | if (vm && (vm->flags & VM_ARM_SECTION_MAPPING)) |
370 | (vm->flags & VM_ARM_SECTION_MAPPING)) { | ||
371 | unmap_area_sections((unsigned long)vm->addr, vm->size); | 425 | unmap_area_sections((unsigned long)vm->addr, vm->size); |
372 | break; | ||
373 | } | ||
374 | #endif | ||
375 | } | 426 | } |
376 | read_unlock(&vmlist_lock); | 427 | #endif |
377 | 428 | ||
378 | vunmap(addr); | 429 | vunmap(addr); |
379 | } | 430 | } |
diff --git a/arch/arm/mm/mm.h b/arch/arm/mm/mm.h index a8ee92da3544..d5a4e9ad8f0f 100644 --- a/arch/arm/mm/mm.h +++ b/arch/arm/mm/mm.h | |||
@@ -1,4 +1,6 @@ | |||
1 | #ifdef CONFIG_MMU | 1 | #ifdef CONFIG_MMU |
2 | #include <linux/list.h> | ||
3 | #include <linux/vmalloc.h> | ||
2 | 4 | ||
3 | /* the upper-most page table pointer */ | 5 | /* the upper-most page table pointer */ |
4 | extern pmd_t *top_pmd; | 6 | extern pmd_t *top_pmd; |
@@ -65,6 +67,16 @@ extern void __flush_dcache_page(struct address_space *mapping, struct page *page | |||
65 | /* consistent regions used by dma_alloc_attrs() */ | 67 | /* consistent regions used by dma_alloc_attrs() */ |
66 | #define VM_ARM_DMA_CONSISTENT 0x20000000 | 68 | #define VM_ARM_DMA_CONSISTENT 0x20000000 |
67 | 69 | ||
70 | |||
71 | struct static_vm { | ||
72 | struct vm_struct vm; | ||
73 | struct list_head list; | ||
74 | }; | ||
75 | |||
76 | extern struct list_head static_vmlist; | ||
77 | extern struct static_vm *find_static_vm_vaddr(void *vaddr); | ||
78 | extern __init void add_static_vm_early(struct static_vm *svm); | ||
79 | |||
68 | #endif | 80 | #endif |
69 | 81 | ||
70 | #ifdef CONFIG_ZONE_DMA | 82 | #ifdef CONFIG_ZONE_DMA |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index ce328c7f5c94..e95a996ab78f 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -57,6 +57,9 @@ static unsigned int cachepolicy __initdata = CPOLICY_WRITEBACK; | |||
57 | static unsigned int ecc_mask __initdata = 0; | 57 | static unsigned int ecc_mask __initdata = 0; |
58 | pgprot_t pgprot_user; | 58 | pgprot_t pgprot_user; |
59 | pgprot_t pgprot_kernel; | 59 | pgprot_t pgprot_kernel; |
60 | pgprot_t pgprot_hyp_device; | ||
61 | pgprot_t pgprot_s2; | ||
62 | pgprot_t pgprot_s2_device; | ||
60 | 63 | ||
61 | EXPORT_SYMBOL(pgprot_user); | 64 | EXPORT_SYMBOL(pgprot_user); |
62 | EXPORT_SYMBOL(pgprot_kernel); | 65 | EXPORT_SYMBOL(pgprot_kernel); |
@@ -66,34 +69,46 @@ struct cachepolicy { | |||
66 | unsigned int cr_mask; | 69 | unsigned int cr_mask; |
67 | pmdval_t pmd; | 70 | pmdval_t pmd; |
68 | pteval_t pte; | 71 | pteval_t pte; |
72 | pteval_t pte_s2; | ||
69 | }; | 73 | }; |
70 | 74 | ||
75 | #ifdef CONFIG_ARM_LPAE | ||
76 | #define s2_policy(policy) policy | ||
77 | #else | ||
78 | #define s2_policy(policy) 0 | ||
79 | #endif | ||
80 | |||
71 | static struct cachepolicy cache_policies[] __initdata = { | 81 | static struct cachepolicy cache_policies[] __initdata = { |
72 | { | 82 | { |
73 | .policy = "uncached", | 83 | .policy = "uncached", |
74 | .cr_mask = CR_W|CR_C, | 84 | .cr_mask = CR_W|CR_C, |
75 | .pmd = PMD_SECT_UNCACHED, | 85 | .pmd = PMD_SECT_UNCACHED, |
76 | .pte = L_PTE_MT_UNCACHED, | 86 | .pte = L_PTE_MT_UNCACHED, |
87 | .pte_s2 = s2_policy(L_PTE_S2_MT_UNCACHED), | ||
77 | }, { | 88 | }, { |
78 | .policy = "buffered", | 89 | .policy = "buffered", |
79 | .cr_mask = CR_C, | 90 | .cr_mask = CR_C, |
80 | .pmd = PMD_SECT_BUFFERED, | 91 | .pmd = PMD_SECT_BUFFERED, |
81 | .pte = L_PTE_MT_BUFFERABLE, | 92 | .pte = L_PTE_MT_BUFFERABLE, |
93 | .pte_s2 = s2_policy(L_PTE_S2_MT_UNCACHED), | ||
82 | }, { | 94 | }, { |
83 | .policy = "writethrough", | 95 | .policy = "writethrough", |
84 | .cr_mask = 0, | 96 | .cr_mask = 0, |
85 | .pmd = PMD_SECT_WT, | 97 | .pmd = PMD_SECT_WT, |
86 | .pte = L_PTE_MT_WRITETHROUGH, | 98 | .pte = L_PTE_MT_WRITETHROUGH, |
99 | .pte_s2 = s2_policy(L_PTE_S2_MT_WRITETHROUGH), | ||
87 | }, { | 100 | }, { |
88 | .policy = "writeback", | 101 | .policy = "writeback", |
89 | .cr_mask = 0, | 102 | .cr_mask = 0, |
90 | .pmd = PMD_SECT_WB, | 103 | .pmd = PMD_SECT_WB, |
91 | .pte = L_PTE_MT_WRITEBACK, | 104 | .pte = L_PTE_MT_WRITEBACK, |
105 | .pte_s2 = s2_policy(L_PTE_S2_MT_WRITEBACK), | ||
92 | }, { | 106 | }, { |
93 | .policy = "writealloc", | 107 | .policy = "writealloc", |
94 | .cr_mask = 0, | 108 | .cr_mask = 0, |
95 | .pmd = PMD_SECT_WBWA, | 109 | .pmd = PMD_SECT_WBWA, |
96 | .pte = L_PTE_MT_WRITEALLOC, | 110 | .pte = L_PTE_MT_WRITEALLOC, |
111 | .pte_s2 = s2_policy(L_PTE_S2_MT_WRITEBACK), | ||
97 | } | 112 | } |
98 | }; | 113 | }; |
99 | 114 | ||
@@ -310,6 +325,7 @@ static void __init build_mem_type_table(void) | |||
310 | struct cachepolicy *cp; | 325 | struct cachepolicy *cp; |
311 | unsigned int cr = get_cr(); | 326 | unsigned int cr = get_cr(); |
312 | pteval_t user_pgprot, kern_pgprot, vecs_pgprot; | 327 | pteval_t user_pgprot, kern_pgprot, vecs_pgprot; |
328 | pteval_t hyp_device_pgprot, s2_pgprot, s2_device_pgprot; | ||
313 | int cpu_arch = cpu_architecture(); | 329 | int cpu_arch = cpu_architecture(); |
314 | int i; | 330 | int i; |
315 | 331 | ||
@@ -421,6 +437,8 @@ static void __init build_mem_type_table(void) | |||
421 | */ | 437 | */ |
422 | cp = &cache_policies[cachepolicy]; | 438 | cp = &cache_policies[cachepolicy]; |
423 | vecs_pgprot = kern_pgprot = user_pgprot = cp->pte; | 439 | vecs_pgprot = kern_pgprot = user_pgprot = cp->pte; |
440 | s2_pgprot = cp->pte_s2; | ||
441 | hyp_device_pgprot = s2_device_pgprot = mem_types[MT_DEVICE].prot_pte; | ||
424 | 442 | ||
425 | /* | 443 | /* |
426 | * ARMv6 and above have extended page tables. | 444 | * ARMv6 and above have extended page tables. |
@@ -444,6 +462,7 @@ static void __init build_mem_type_table(void) | |||
444 | user_pgprot |= L_PTE_SHARED; | 462 | user_pgprot |= L_PTE_SHARED; |
445 | kern_pgprot |= L_PTE_SHARED; | 463 | kern_pgprot |= L_PTE_SHARED; |
446 | vecs_pgprot |= L_PTE_SHARED; | 464 | vecs_pgprot |= L_PTE_SHARED; |
465 | s2_pgprot |= L_PTE_SHARED; | ||
447 | mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_S; | 466 | mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_S; |
448 | mem_types[MT_DEVICE_WC].prot_pte |= L_PTE_SHARED; | 467 | mem_types[MT_DEVICE_WC].prot_pte |= L_PTE_SHARED; |
449 | mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_S; | 468 | mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_S; |
@@ -498,6 +517,9 @@ static void __init build_mem_type_table(void) | |||
498 | pgprot_user = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | user_pgprot); | 517 | pgprot_user = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | user_pgprot); |
499 | pgprot_kernel = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | | 518 | pgprot_kernel = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | |
500 | L_PTE_DIRTY | kern_pgprot); | 519 | L_PTE_DIRTY | kern_pgprot); |
520 | pgprot_s2 = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | s2_pgprot); | ||
521 | pgprot_s2_device = __pgprot(s2_device_pgprot); | ||
522 | pgprot_hyp_device = __pgprot(hyp_device_pgprot); | ||
501 | 523 | ||
502 | mem_types[MT_LOW_VECTORS].prot_l1 |= ecc_mask; | 524 | mem_types[MT_LOW_VECTORS].prot_l1 |= ecc_mask; |
503 | mem_types[MT_HIGH_VECTORS].prot_l1 |= ecc_mask; | 525 | mem_types[MT_HIGH_VECTORS].prot_l1 |= ecc_mask; |
@@ -757,21 +779,24 @@ void __init iotable_init(struct map_desc *io_desc, int nr) | |||
757 | { | 779 | { |
758 | struct map_desc *md; | 780 | struct map_desc *md; |
759 | struct vm_struct *vm; | 781 | struct vm_struct *vm; |
782 | struct static_vm *svm; | ||
760 | 783 | ||
761 | if (!nr) | 784 | if (!nr) |
762 | return; | 785 | return; |
763 | 786 | ||
764 | vm = early_alloc_aligned(sizeof(*vm) * nr, __alignof__(*vm)); | 787 | svm = early_alloc_aligned(sizeof(*svm) * nr, __alignof__(*svm)); |
765 | 788 | ||
766 | for (md = io_desc; nr; md++, nr--) { | 789 | for (md = io_desc; nr; md++, nr--) { |
767 | create_mapping(md); | 790 | create_mapping(md); |
791 | |||
792 | vm = &svm->vm; | ||
768 | vm->addr = (void *)(md->virtual & PAGE_MASK); | 793 | vm->addr = (void *)(md->virtual & PAGE_MASK); |
769 | vm->size = PAGE_ALIGN(md->length + (md->virtual & ~PAGE_MASK)); | 794 | vm->size = PAGE_ALIGN(md->length + (md->virtual & ~PAGE_MASK)); |
770 | vm->phys_addr = __pfn_to_phys(md->pfn); | 795 | vm->phys_addr = __pfn_to_phys(md->pfn); |
771 | vm->flags = VM_IOREMAP | VM_ARM_STATIC_MAPPING; | 796 | vm->flags = VM_IOREMAP | VM_ARM_STATIC_MAPPING; |
772 | vm->flags |= VM_ARM_MTYPE(md->type); | 797 | vm->flags |= VM_ARM_MTYPE(md->type); |
773 | vm->caller = iotable_init; | 798 | vm->caller = iotable_init; |
774 | vm_area_add_early(vm++); | 799 | add_static_vm_early(svm++); |
775 | } | 800 | } |
776 | } | 801 | } |
777 | 802 | ||
@@ -779,13 +804,16 @@ void __init vm_reserve_area_early(unsigned long addr, unsigned long size, | |||
779 | void *caller) | 804 | void *caller) |
780 | { | 805 | { |
781 | struct vm_struct *vm; | 806 | struct vm_struct *vm; |
807 | struct static_vm *svm; | ||
808 | |||
809 | svm = early_alloc_aligned(sizeof(*svm), __alignof__(*svm)); | ||
782 | 810 | ||
783 | vm = early_alloc_aligned(sizeof(*vm), __alignof__(*vm)); | 811 | vm = &svm->vm; |
784 | vm->addr = (void *)addr; | 812 | vm->addr = (void *)addr; |
785 | vm->size = size; | 813 | vm->size = size; |
786 | vm->flags = VM_IOREMAP | VM_ARM_EMPTY_MAPPING; | 814 | vm->flags = VM_IOREMAP | VM_ARM_EMPTY_MAPPING; |
787 | vm->caller = caller; | 815 | vm->caller = caller; |
788 | vm_area_add_early(vm); | 816 | add_static_vm_early(svm); |
789 | } | 817 | } |
790 | 818 | ||
791 | #ifndef CONFIG_ARM_LPAE | 819 | #ifndef CONFIG_ARM_LPAE |
@@ -810,14 +838,13 @@ static void __init pmd_empty_section_gap(unsigned long addr) | |||
810 | 838 | ||
811 | static void __init fill_pmd_gaps(void) | 839 | static void __init fill_pmd_gaps(void) |
812 | { | 840 | { |
841 | struct static_vm *svm; | ||
813 | struct vm_struct *vm; | 842 | struct vm_struct *vm; |
814 | unsigned long addr, next = 0; | 843 | unsigned long addr, next = 0; |
815 | pmd_t *pmd; | 844 | pmd_t *pmd; |
816 | 845 | ||
817 | /* we're still single threaded hence no lock needed here */ | 846 | list_for_each_entry(svm, &static_vmlist, list) { |
818 | for (vm = vmlist; vm; vm = vm->next) { | 847 | vm = &svm->vm; |
819 | if (!(vm->flags & (VM_ARM_STATIC_MAPPING | VM_ARM_EMPTY_MAPPING))) | ||
820 | continue; | ||
821 | addr = (unsigned long)vm->addr; | 848 | addr = (unsigned long)vm->addr; |
822 | if (addr < next) | 849 | if (addr < next) |
823 | continue; | 850 | continue; |
@@ -857,19 +884,12 @@ static void __init fill_pmd_gaps(void) | |||
857 | #if defined(CONFIG_PCI) && !defined(CONFIG_NEED_MACH_IO_H) | 884 | #if defined(CONFIG_PCI) && !defined(CONFIG_NEED_MACH_IO_H) |
858 | static void __init pci_reserve_io(void) | 885 | static void __init pci_reserve_io(void) |
859 | { | 886 | { |
860 | struct vm_struct *vm; | 887 | struct static_vm *svm; |
861 | unsigned long addr; | ||
862 | 888 | ||
863 | /* we're still single threaded hence no lock needed here */ | 889 | svm = find_static_vm_vaddr((void *)PCI_IO_VIRT_BASE); |
864 | for (vm = vmlist; vm; vm = vm->next) { | 890 | if (svm) |
865 | if (!(vm->flags & VM_ARM_STATIC_MAPPING)) | 891 | return; |
866 | continue; | ||
867 | addr = (unsigned long)vm->addr; | ||
868 | addr &= ~(SZ_2M - 1); | ||
869 | if (addr == PCI_IO_VIRT_BASE) | ||
870 | return; | ||
871 | 892 | ||
872 | } | ||
873 | vm_reserve_area_early(PCI_IO_VIRT_BASE, SZ_2M, pci_reserve_io); | 893 | vm_reserve_area_early(PCI_IO_VIRT_BASE, SZ_2M, pci_reserve_io); |
874 | } | 894 | } |
875 | #else | 895 | #else |
diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S index eb6aa73bc8b7..f9a0aa725ea9 100644 --- a/arch/arm/mm/proc-macros.S +++ b/arch/arm/mm/proc-macros.S | |||
@@ -38,9 +38,14 @@ | |||
38 | 38 | ||
39 | /* | 39 | /* |
40 | * mmid - get context id from mm pointer (mm->context.id) | 40 | * mmid - get context id from mm pointer (mm->context.id) |
41 | * note, this field is 64bit, so in big-endian the two words are swapped too. | ||
41 | */ | 42 | */ |
42 | .macro mmid, rd, rn | 43 | .macro mmid, rd, rn |
44 | #ifdef __ARMEB__ | ||
45 | ldr \rd, [\rn, #MM_CONTEXT_ID + 4 ] | ||
46 | #else | ||
43 | ldr \rd, [\rn, #MM_CONTEXT_ID] | 47 | ldr \rd, [\rn, #MM_CONTEXT_ID] |
48 | #endif | ||
44 | .endm | 49 | .endm |
45 | 50 | ||
46 | /* | 51 | /* |
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index 09c5233f4dfc..bcaaa8de9325 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S | |||
@@ -101,7 +101,7 @@ ENTRY(cpu_v6_dcache_clean_area) | |||
101 | ENTRY(cpu_v6_switch_mm) | 101 | ENTRY(cpu_v6_switch_mm) |
102 | #ifdef CONFIG_MMU | 102 | #ifdef CONFIG_MMU |
103 | mov r2, #0 | 103 | mov r2, #0 |
104 | ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id | 104 | mmid r1, r1 @ get mm->context.id |
105 | ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP) | 105 | ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP) |
106 | ALT_UP(orr r0, r0, #TTB_FLAGS_UP) | 106 | ALT_UP(orr r0, r0, #TTB_FLAGS_UP) |
107 | mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB | 107 | mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB |
diff --git a/arch/arm/mm/proc-v7-2level.S b/arch/arm/mm/proc-v7-2level.S index 6d98c13ab827..78f520bc0e99 100644 --- a/arch/arm/mm/proc-v7-2level.S +++ b/arch/arm/mm/proc-v7-2level.S | |||
@@ -40,7 +40,7 @@ | |||
40 | ENTRY(cpu_v7_switch_mm) | 40 | ENTRY(cpu_v7_switch_mm) |
41 | #ifdef CONFIG_MMU | 41 | #ifdef CONFIG_MMU |
42 | mov r2, #0 | 42 | mov r2, #0 |
43 | ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id | 43 | mmid r1, r1 @ get mm->context.id |
44 | ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP) | 44 | ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP) |
45 | ALT_UP(orr r0, r0, #TTB_FLAGS_UP) | 45 | ALT_UP(orr r0, r0, #TTB_FLAGS_UP) |
46 | #ifdef CONFIG_ARM_ERRATA_430973 | 46 | #ifdef CONFIG_ARM_ERRATA_430973 |
diff --git a/arch/arm/mm/proc-v7-3level.S b/arch/arm/mm/proc-v7-3level.S index 7b56386f9496..50bf1dafc9ea 100644 --- a/arch/arm/mm/proc-v7-3level.S +++ b/arch/arm/mm/proc-v7-3level.S | |||
@@ -47,7 +47,7 @@ | |||
47 | */ | 47 | */ |
48 | ENTRY(cpu_v7_switch_mm) | 48 | ENTRY(cpu_v7_switch_mm) |
49 | #ifdef CONFIG_MMU | 49 | #ifdef CONFIG_MMU |
50 | ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id | 50 | mmid r1, r1 @ get mm->context.id |
51 | and r3, r1, #0xff | 51 | and r3, r1, #0xff |
52 | mov r3, r3, lsl #(48 - 32) @ ASID | 52 | mov r3, r3, lsl #(48 - 32) @ ASID |
53 | mcrr p15, 0, r0, r3, c2 @ set TTB 0 | 53 | mcrr p15, 0, r0, r3, c2 @ set TTB 0 |
diff --git a/arch/arm/mm/vmregion.c b/arch/arm/mm/vmregion.c deleted file mode 100644 index a631016e1f8f..000000000000 --- a/arch/arm/mm/vmregion.c +++ /dev/null | |||
@@ -1,205 +0,0 @@ | |||
1 | #include <linux/fs.h> | ||
2 | #include <linux/spinlock.h> | ||
3 | #include <linux/list.h> | ||
4 | #include <linux/proc_fs.h> | ||
5 | #include <linux/seq_file.h> | ||
6 | #include <linux/slab.h> | ||
7 | |||
8 | #include "vmregion.h" | ||
9 | |||
10 | /* | ||
11 | * VM region handling support. | ||
12 | * | ||
13 | * This should become something generic, handling VM region allocations for | ||
14 | * vmalloc and similar (ioremap, module space, etc). | ||
15 | * | ||
16 | * I envisage vmalloc()'s supporting vm_struct becoming: | ||
17 | * | ||
18 | * struct vm_struct { | ||
19 | * struct vmregion region; | ||
20 | * unsigned long flags; | ||
21 | * struct page **pages; | ||
22 | * unsigned int nr_pages; | ||
23 | * unsigned long phys_addr; | ||
24 | * }; | ||
25 | * | ||
26 | * get_vm_area() would then call vmregion_alloc with an appropriate | ||
27 | * struct vmregion head (eg): | ||
28 | * | ||
29 | * struct vmregion vmalloc_head = { | ||
30 | * .vm_list = LIST_HEAD_INIT(vmalloc_head.vm_list), | ||
31 | * .vm_start = VMALLOC_START, | ||
32 | * .vm_end = VMALLOC_END, | ||
33 | * }; | ||
34 | * | ||
35 | * However, vmalloc_head.vm_start is variable (typically, it is dependent on | ||
36 | * the amount of RAM found at boot time.) I would imagine that get_vm_area() | ||
37 | * would have to initialise this each time prior to calling vmregion_alloc(). | ||
38 | */ | ||
39 | |||
40 | struct arm_vmregion * | ||
41 | arm_vmregion_alloc(struct arm_vmregion_head *head, size_t align, | ||
42 | size_t size, gfp_t gfp, const void *caller) | ||
43 | { | ||
44 | unsigned long start = head->vm_start, addr = head->vm_end; | ||
45 | unsigned long flags; | ||
46 | struct arm_vmregion *c, *new; | ||
47 | |||
48 | if (head->vm_end - head->vm_start < size) { | ||
49 | printk(KERN_WARNING "%s: allocation too big (requested %#x)\n", | ||
50 | __func__, size); | ||
51 | goto out; | ||
52 | } | ||
53 | |||
54 | new = kmalloc(sizeof(struct arm_vmregion), gfp); | ||
55 | if (!new) | ||
56 | goto out; | ||
57 | |||
58 | new->caller = caller; | ||
59 | |||
60 | spin_lock_irqsave(&head->vm_lock, flags); | ||
61 | |||
62 | addr = rounddown(addr - size, align); | ||
63 | list_for_each_entry_reverse(c, &head->vm_list, vm_list) { | ||
64 | if (addr >= c->vm_end) | ||
65 | goto found; | ||
66 | addr = rounddown(c->vm_start - size, align); | ||
67 | if (addr < start) | ||
68 | goto nospc; | ||
69 | } | ||
70 | |||
71 | found: | ||
72 | /* | ||
73 | * Insert this entry after the one we found. | ||
74 | */ | ||
75 | list_add(&new->vm_list, &c->vm_list); | ||
76 | new->vm_start = addr; | ||
77 | new->vm_end = addr + size; | ||
78 | new->vm_active = 1; | ||
79 | |||
80 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
81 | return new; | ||
82 | |||
83 | nospc: | ||
84 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
85 | kfree(new); | ||
86 | out: | ||
87 | return NULL; | ||
88 | } | ||
89 | |||
90 | static struct arm_vmregion *__arm_vmregion_find(struct arm_vmregion_head *head, unsigned long addr) | ||
91 | { | ||
92 | struct arm_vmregion *c; | ||
93 | |||
94 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
95 | if (c->vm_active && c->vm_start == addr) | ||
96 | goto out; | ||
97 | } | ||
98 | c = NULL; | ||
99 | out: | ||
100 | return c; | ||
101 | } | ||
102 | |||
103 | struct arm_vmregion *arm_vmregion_find(struct arm_vmregion_head *head, unsigned long addr) | ||
104 | { | ||
105 | struct arm_vmregion *c; | ||
106 | unsigned long flags; | ||
107 | |||
108 | spin_lock_irqsave(&head->vm_lock, flags); | ||
109 | c = __arm_vmregion_find(head, addr); | ||
110 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
111 | return c; | ||
112 | } | ||
113 | |||
114 | struct arm_vmregion *arm_vmregion_find_remove(struct arm_vmregion_head *head, unsigned long addr) | ||
115 | { | ||
116 | struct arm_vmregion *c; | ||
117 | unsigned long flags; | ||
118 | |||
119 | spin_lock_irqsave(&head->vm_lock, flags); | ||
120 | c = __arm_vmregion_find(head, addr); | ||
121 | if (c) | ||
122 | c->vm_active = 0; | ||
123 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
124 | return c; | ||
125 | } | ||
126 | |||
127 | void arm_vmregion_free(struct arm_vmregion_head *head, struct arm_vmregion *c) | ||
128 | { | ||
129 | unsigned long flags; | ||
130 | |||
131 | spin_lock_irqsave(&head->vm_lock, flags); | ||
132 | list_del(&c->vm_list); | ||
133 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
134 | |||
135 | kfree(c); | ||
136 | } | ||
137 | |||
138 | #ifdef CONFIG_PROC_FS | ||
139 | static int arm_vmregion_show(struct seq_file *m, void *p) | ||
140 | { | ||
141 | struct arm_vmregion *c = list_entry(p, struct arm_vmregion, vm_list); | ||
142 | |||
143 | seq_printf(m, "0x%08lx-0x%08lx %7lu", c->vm_start, c->vm_end, | ||
144 | c->vm_end - c->vm_start); | ||
145 | if (c->caller) | ||
146 | seq_printf(m, " %pS", (void *)c->caller); | ||
147 | seq_putc(m, '\n'); | ||
148 | return 0; | ||
149 | } | ||
150 | |||
151 | static void *arm_vmregion_start(struct seq_file *m, loff_t *pos) | ||
152 | { | ||
153 | struct arm_vmregion_head *h = m->private; | ||
154 | spin_lock_irq(&h->vm_lock); | ||
155 | return seq_list_start(&h->vm_list, *pos); | ||
156 | } | ||
157 | |||
158 | static void *arm_vmregion_next(struct seq_file *m, void *p, loff_t *pos) | ||
159 | { | ||
160 | struct arm_vmregion_head *h = m->private; | ||
161 | return seq_list_next(p, &h->vm_list, pos); | ||
162 | } | ||
163 | |||
164 | static void arm_vmregion_stop(struct seq_file *m, void *p) | ||
165 | { | ||
166 | struct arm_vmregion_head *h = m->private; | ||
167 | spin_unlock_irq(&h->vm_lock); | ||
168 | } | ||
169 | |||
170 | static const struct seq_operations arm_vmregion_ops = { | ||
171 | .start = arm_vmregion_start, | ||
172 | .stop = arm_vmregion_stop, | ||
173 | .next = arm_vmregion_next, | ||
174 | .show = arm_vmregion_show, | ||
175 | }; | ||
176 | |||
177 | static int arm_vmregion_open(struct inode *inode, struct file *file) | ||
178 | { | ||
179 | struct arm_vmregion_head *h = PDE(inode)->data; | ||
180 | int ret = seq_open(file, &arm_vmregion_ops); | ||
181 | if (!ret) { | ||
182 | struct seq_file *m = file->private_data; | ||
183 | m->private = h; | ||
184 | } | ||
185 | return ret; | ||
186 | } | ||
187 | |||
188 | static const struct file_operations arm_vmregion_fops = { | ||
189 | .open = arm_vmregion_open, | ||
190 | .read = seq_read, | ||
191 | .llseek = seq_lseek, | ||
192 | .release = seq_release, | ||
193 | }; | ||
194 | |||
195 | int arm_vmregion_create_proc(const char *path, struct arm_vmregion_head *h) | ||
196 | { | ||
197 | proc_create_data(path, S_IRUSR, NULL, &arm_vmregion_fops, h); | ||
198 | return 0; | ||
199 | } | ||
200 | #else | ||
201 | int arm_vmregion_create_proc(const char *path, struct arm_vmregion_head *h) | ||
202 | { | ||
203 | return 0; | ||
204 | } | ||
205 | #endif | ||
diff --git a/arch/arm/mm/vmregion.h b/arch/arm/mm/vmregion.h deleted file mode 100644 index 0f5a5f2a2c7b..000000000000 --- a/arch/arm/mm/vmregion.h +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | #ifndef VMREGION_H | ||
2 | #define VMREGION_H | ||
3 | |||
4 | #include <linux/spinlock.h> | ||
5 | #include <linux/list.h> | ||
6 | |||
7 | struct page; | ||
8 | |||
9 | struct arm_vmregion_head { | ||
10 | spinlock_t vm_lock; | ||
11 | struct list_head vm_list; | ||
12 | unsigned long vm_start; | ||
13 | unsigned long vm_end; | ||
14 | }; | ||
15 | |||
16 | struct arm_vmregion { | ||
17 | struct list_head vm_list; | ||
18 | unsigned long vm_start; | ||
19 | unsigned long vm_end; | ||
20 | int vm_active; | ||
21 | const void *caller; | ||
22 | }; | ||
23 | |||
24 | struct arm_vmregion *arm_vmregion_alloc(struct arm_vmregion_head *, size_t, size_t, gfp_t, const void *); | ||
25 | struct arm_vmregion *arm_vmregion_find(struct arm_vmregion_head *, unsigned long); | ||
26 | struct arm_vmregion *arm_vmregion_find_remove(struct arm_vmregion_head *, unsigned long); | ||
27 | void arm_vmregion_free(struct arm_vmregion_head *, struct arm_vmregion *); | ||
28 | |||
29 | int arm_vmregion_create_proc(const char *, struct arm_vmregion_head *); | ||
30 | |||
31 | #endif | ||
diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c index a34f1e214116..6828ef6ce80e 100644 --- a/arch/arm/net/bpf_jit_32.c +++ b/arch/arm/net/bpf_jit_32.c | |||
@@ -341,10 +341,17 @@ static void emit_load_be16(u8 cond, u8 r_res, u8 r_addr, struct jit_ctx *ctx) | |||
341 | 341 | ||
342 | static inline void emit_swap16(u8 r_dst, u8 r_src, struct jit_ctx *ctx) | 342 | static inline void emit_swap16(u8 r_dst, u8 r_src, struct jit_ctx *ctx) |
343 | { | 343 | { |
344 | emit(ARM_LSL_R(ARM_R1, r_src, 8), ctx); | 344 | /* r_dst = (r_src << 8) | (r_src >> 8) */ |
345 | emit(ARM_ORR_S(r_dst, ARM_R1, r_src, SRTYPE_LSL, 8), ctx); | 345 | emit(ARM_LSL_I(ARM_R1, r_src, 8), ctx); |
346 | emit(ARM_LSL_I(r_dst, r_dst, 8), ctx); | 346 | emit(ARM_ORR_S(r_dst, ARM_R1, r_src, SRTYPE_LSR, 8), ctx); |
347 | emit(ARM_LSL_R(r_dst, r_dst, 8), ctx); | 347 | |
348 | /* | ||
349 | * we need to mask out the bits set in r_dst[23:16] due to | ||
350 | * the first shift instruction. | ||
351 | * | ||
352 | * note that 0x8ff is the encoded immediate 0x00ff0000. | ||
353 | */ | ||
354 | emit(ARM_BIC_I(r_dst, r_dst, 0x8ff), ctx); | ||
348 | } | 355 | } |
349 | 356 | ||
350 | #else /* ARMv6+ */ | 357 | #else /* ARMv6+ */ |
diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig index 665870dce3c8..67c859cf16bc 100644 --- a/arch/arm/plat-omap/Kconfig +++ b/arch/arm/plat-omap/Kconfig | |||
@@ -5,36 +5,6 @@ menu "TI OMAP Common Features" | |||
5 | config ARCH_OMAP_OTG | 5 | config ARCH_OMAP_OTG |
6 | bool | 6 | bool |
7 | 7 | ||
8 | choice | ||
9 | prompt "OMAP System Type" | ||
10 | default ARCH_OMAP2PLUS | ||
11 | |||
12 | config ARCH_OMAP1 | ||
13 | bool "TI OMAP1" | ||
14 | select CLKDEV_LOOKUP | ||
15 | select CLKSRC_MMIO | ||
16 | select GENERIC_IRQ_CHIP | ||
17 | select HAVE_IDE | ||
18 | select IRQ_DOMAIN | ||
19 | select NEED_MACH_IO_H if PCCARD | ||
20 | select NEED_MACH_MEMORY_H | ||
21 | help | ||
22 | "Systems based on omap7xx, omap15xx or omap16xx" | ||
23 | |||
24 | config ARCH_OMAP2PLUS | ||
25 | bool "TI OMAP2/3/4" | ||
26 | select CLKDEV_LOOKUP | ||
27 | select GENERIC_IRQ_CHIP | ||
28 | select OMAP_DM_TIMER | ||
29 | select PINCTRL | ||
30 | select PROC_DEVICETREE if PROC_FS | ||
31 | select SPARSE_IRQ | ||
32 | select USE_OF | ||
33 | help | ||
34 | "Systems based on OMAP2, OMAP3, OMAP4 or OMAP5" | ||
35 | |||
36 | endchoice | ||
37 | |||
38 | comment "OMAP Feature Selections" | 8 | comment "OMAP Feature Selections" |
39 | 9 | ||
40 | config OMAP_DEBUG_DEVICES | 10 | config OMAP_DEBUG_DEVICES |
@@ -118,7 +88,7 @@ config OMAP_MUX_WARNINGS | |||
118 | 88 | ||
119 | config OMAP_MBOX_FWK | 89 | config OMAP_MBOX_FWK |
120 | tristate "Mailbox framework support" | 90 | tristate "Mailbox framework support" |
121 | depends on ARCH_OMAP | 91 | depends on ARCH_OMAP && !ARCH_MULTIPLATFORM |
122 | help | 92 | help |
123 | Say Y here if you want to use OMAP Mailbox framework support for | 93 | Say Y here if you want to use OMAP Mailbox framework support for |
124 | DSP, IVA1.0 and IVA2 in OMAP1/2/3. | 94 | DSP, IVA1.0 and IVA2 in OMAP1/2/3. |
diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile index a14a78a2f149..31199417b56a 100644 --- a/arch/arm/plat-omap/Makefile +++ b/arch/arm/plat-omap/Makefile | |||
@@ -2,6 +2,8 @@ | |||
2 | # Makefile for the linux kernel. | 2 | # Makefile for the linux kernel. |
3 | # | 3 | # |
4 | 4 | ||
5 | ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/arch/arm/plat-omap/include | ||
6 | |||
5 | # Common support | 7 | # Common support |
6 | obj-y := sram.o dma.o counter_32k.o | 8 | obj-y := sram.o dma.o counter_32k.o |
7 | obj-m := | 9 | obj-m := |
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index 4136b20cba3c..e06c34bdc34a 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -2019,7 +2019,7 @@ static int omap_system_dma_probe(struct platform_device *pdev) | |||
2019 | errata = p->errata; | 2019 | errata = p->errata; |
2020 | 2020 | ||
2021 | if ((d->dev_caps & RESERVE_CHANNEL) && omap_dma_reserve_channels | 2021 | if ((d->dev_caps & RESERVE_CHANNEL) && omap_dma_reserve_channels |
2022 | && (omap_dma_reserve_channels <= dma_lch_count)) | 2022 | && (omap_dma_reserve_channels < d->lch_count)) |
2023 | d->lch_count = omap_dma_reserve_channels; | 2023 | d->lch_count = omap_dma_reserve_channels; |
2024 | 2024 | ||
2025 | dma_lch_count = d->lch_count; | 2025 | dma_lch_count = d->lch_count; |
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index 7b433f3bddca..a0daa2fb5de6 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c | |||
@@ -808,11 +808,9 @@ static int omap_dm_timer_probe(struct platform_device *pdev) | |||
808 | return -ENOMEM; | 808 | return -ENOMEM; |
809 | } | 809 | } |
810 | 810 | ||
811 | timer->io_base = devm_request_and_ioremap(dev, mem); | 811 | timer->io_base = devm_ioremap_resource(dev, mem); |
812 | if (!timer->io_base) { | 812 | if (IS_ERR(timer->io_base)) |
813 | dev_err(dev, "%s: region already claimed.\n", __func__); | 813 | return PTR_ERR(timer->io_base); |
814 | return -ENOMEM; | ||
815 | } | ||
816 | 814 | ||
817 | if (dev->of_node) { | 815 | if (dev->of_node) { |
818 | if (of_find_property(dev->of_node, "ti,timer-alwon", NULL)) | 816 | if (of_find_property(dev->of_node, "ti,timer-alwon", NULL)) |
diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c index f9df624d108c..58213d9714cd 100644 --- a/arch/arm/plat-omap/i2c.c +++ b/arch/arm/plat-omap/i2c.c | |||
@@ -68,7 +68,7 @@ __setup("i2c_bus=", omap_i2c_bus_setup); | |||
68 | * Register busses defined in command line but that are not registered with | 68 | * Register busses defined in command line but that are not registered with |
69 | * omap_register_i2c_bus from board initialization code. | 69 | * omap_register_i2c_bus from board initialization code. |
70 | */ | 70 | */ |
71 | static int __init omap_register_i2c_bus_cmdline(void) | 71 | int __init omap_register_i2c_bus_cmdline(void) |
72 | { | 72 | { |
73 | int i, err = 0; | 73 | int i, err = 0; |
74 | 74 | ||
@@ -83,7 +83,6 @@ static int __init omap_register_i2c_bus_cmdline(void) | |||
83 | out: | 83 | out: |
84 | return err; | 84 | return err; |
85 | } | 85 | } |
86 | subsys_initcall(omap_register_i2c_bus_cmdline); | ||
87 | 86 | ||
88 | /** | 87 | /** |
89 | * omap_register_i2c_bus - register I2C bus with device descriptors | 88 | * omap_register_i2c_bus - register I2C bus with device descriptors |
diff --git a/arch/arm/plat-omap/include/plat/i2c.h b/arch/arm/plat-omap/include/plat/i2c.h index 7a9028cb5a75..810629d79668 100644 --- a/arch/arm/plat-omap/include/plat/i2c.h +++ b/arch/arm/plat-omap/include/plat/i2c.h | |||
@@ -32,6 +32,7 @@ int omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata, | |||
32 | extern int omap_register_i2c_bus(int bus_id, u32 clkrate, | 32 | extern int omap_register_i2c_bus(int bus_id, u32 clkrate, |
33 | struct i2c_board_info const *info, | 33 | struct i2c_board_info const *info, |
34 | unsigned len); | 34 | unsigned len); |
35 | extern int omap_register_i2c_bus_cmdline(void); | ||
35 | #else | 36 | #else |
36 | static inline int omap_register_i2c_bus(int bus_id, u32 clkrate, | 37 | static inline int omap_register_i2c_bus(int bus_id, u32 clkrate, |
37 | struct i2c_board_info const *info, | 38 | struct i2c_board_info const *info, |
@@ -39,6 +40,11 @@ static inline int omap_register_i2c_bus(int bus_id, u32 clkrate, | |||
39 | { | 40 | { |
40 | return 0; | 41 | return 0; |
41 | } | 42 | } |
43 | |||
44 | static inline int omap_register_i2c_bus_cmdline(void) | ||
45 | { | ||
46 | return 0; | ||
47 | } | ||
42 | #endif | 48 | #endif |
43 | 49 | ||
44 | struct omap_hwmod; | 50 | struct omap_hwmod; |
diff --git a/arch/arm/plat-s3c24xx/Kconfig b/arch/arm/plat-s3c24xx/Kconfig deleted file mode 100644 index eef3b6a2f8a8..000000000000 --- a/arch/arm/plat-s3c24xx/Kconfig +++ /dev/null | |||
@@ -1,116 +0,0 @@ | |||
1 | # Copyright 2007 Simtec Electronics | ||
2 | # | ||
3 | # Licensed under GPLv2 | ||
4 | |||
5 | config PLAT_S3C24XX | ||
6 | bool | ||
7 | depends on ARCH_S3C24XX | ||
8 | default y | ||
9 | select ARCH_REQUIRE_GPIOLIB | ||
10 | select NO_IOPORT | ||
11 | select S3C_DEV_NAND | ||
12 | help | ||
13 | Base platform code for any Samsung S3C24XX device | ||
14 | |||
15 | if PLAT_S3C24XX | ||
16 | |||
17 | # low-level serial option nodes | ||
18 | |||
19 | config CPU_LLSERIAL_S3C2410_ONLY | ||
20 | bool | ||
21 | default y if CPU_LLSERIAL_S3C2410 && !CPU_LLSERIAL_S3C2440 | ||
22 | |||
23 | config CPU_LLSERIAL_S3C2440_ONLY | ||
24 | bool | ||
25 | default y if CPU_LLSERIAL_S3C2440 && !CPU_LLSERIAL_S3C2410 | ||
26 | |||
27 | config CPU_LLSERIAL_S3C2410 | ||
28 | bool | ||
29 | help | ||
30 | Selected if there is an S3C2410 (or register compatible) serial | ||
31 | low-level implementation needed | ||
32 | |||
33 | config CPU_LLSERIAL_S3C2440 | ||
34 | bool | ||
35 | help | ||
36 | Selected if there is an S3C2440 (or register compatible) serial | ||
37 | low-level implementation needed | ||
38 | |||
39 | # code that is shared between a number of the s3c24xx implementations | ||
40 | |||
41 | config S3C2410_CLOCK | ||
42 | bool | ||
43 | help | ||
44 | Clock code for the S3C2410, and similar processors which | ||
45 | is currently includes the S3C2410, S3C2440, S3C2442. | ||
46 | |||
47 | config S3C24XX_DCLK | ||
48 | bool | ||
49 | help | ||
50 | Clock code for supporting DCLK/CLKOUT on S3C24XX architectures | ||
51 | |||
52 | # gpio configurations | ||
53 | |||
54 | config S3C24XX_GPIO_EXTRA | ||
55 | int | ||
56 | default 128 if S3C24XX_GPIO_EXTRA128 | ||
57 | default 64 if S3C24XX_GPIO_EXTRA64 | ||
58 | default 16 if ARCH_H1940 | ||
59 | default 0 | ||
60 | |||
61 | config S3C24XX_GPIO_EXTRA64 | ||
62 | bool | ||
63 | help | ||
64 | Add an extra 64 gpio numbers to the available GPIO pool. This is | ||
65 | available for boards that need extra gpios for external devices. | ||
66 | |||
67 | config S3C24XX_GPIO_EXTRA128 | ||
68 | bool | ||
69 | help | ||
70 | Add an extra 128 gpio numbers to the available GPIO pool. This is | ||
71 | available for boards that need extra gpios for external devices. | ||
72 | |||
73 | config S3C24XX_DMA | ||
74 | bool "S3C2410 DMA support" | ||
75 | depends on ARCH_S3C24XX | ||
76 | select S3C_DMA | ||
77 | help | ||
78 | S3C2410 DMA support. This is needed for drivers like sound which | ||
79 | use the S3C2410's DMA system to move data to and from the | ||
80 | peripheral blocks. | ||
81 | |||
82 | config S3C2410_DMA_DEBUG | ||
83 | bool "S3C2410 DMA support debug" | ||
84 | depends on ARCH_S3C24XX && S3C2410_DMA | ||
85 | help | ||
86 | Enable debugging output for the DMA code. This option sends info | ||
87 | to the kernel log, at priority KERN_DEBUG. | ||
88 | |||
89 | # common code for s3c24xx based machines, such as the SMDKs. | ||
90 | |||
91 | # cpu frequency items common between s3c2410 and s3c2440/s3c2442 | ||
92 | |||
93 | config S3C2410_IOTIMING | ||
94 | bool | ||
95 | depends on CPU_FREQ_S3C24XX | ||
96 | help | ||
97 | Internal node to select io timing code that is common to the s3c2410 | ||
98 | and s3c2440/s3c2442 cpu frequency support. | ||
99 | |||
100 | config S3C2410_CPUFREQ_UTILS | ||
101 | bool | ||
102 | depends on CPU_FREQ_S3C24XX | ||
103 | help | ||
104 | Internal node to select timing code that is common to the s3c2410 | ||
105 | and s3c2440/s3c244 cpu frequency support. | ||
106 | |||
107 | # cpu frequency support common to s3c2412, s3c2413 and s3c2442 | ||
108 | |||
109 | config S3C2412_IOTIMING | ||
110 | bool | ||
111 | depends on CPU_FREQ_S3C24XX && (CPU_S3C2412 || CPU_S3C2443) | ||
112 | help | ||
113 | Intel node to select io timing code that is common to the s3c2412 | ||
114 | and the s3c2443. | ||
115 | |||
116 | endif | ||
diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile deleted file mode 100644 index 9f60549c8da1..000000000000 --- a/arch/arm/plat-s3c24xx/Makefile +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | # arch/arm/plat-s3c24xx/Makefile | ||
2 | # | ||
3 | # Copyright 2007 Simtec Electronics | ||
4 | # | ||
5 | # Licensed under GPLv2 | ||
6 | |||
7 | obj-y := | ||
8 | obj-m := | ||
9 | obj-n := | ||
10 | obj- := | ||
11 | |||
12 | |||
13 | # Core files | ||
14 | |||
15 | obj-y += irq.o | ||
16 | obj-$(CONFIG_S3C24XX_DCLK) += clock-dclk.o | ||
17 | |||
18 | obj-$(CONFIG_CPU_FREQ_S3C24XX) += cpu-freq.o | ||
19 | obj-$(CONFIG_CPU_FREQ_S3C24XX_DEBUGFS) += cpu-freq-debugfs.o | ||
20 | |||
21 | # Architecture dependent builds | ||
22 | |||
23 | obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o | ||
24 | obj-$(CONFIG_S3C24XX_DMA) += dma.o | ||
25 | obj-$(CONFIG_S3C2410_IOTIMING) += s3c2410-iotiming.o | ||
26 | obj-$(CONFIG_S3C2412_IOTIMING) += s3c2412-iotiming.o | ||
27 | obj-$(CONFIG_S3C2410_CPUFREQ_UTILS) += s3c2410-cpufreq-utils.o | ||
diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c deleted file mode 100644 index fe57bbbf166b..000000000000 --- a/arch/arm/plat-s3c24xx/irq.c +++ /dev/null | |||
@@ -1,676 +0,0 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/irq.c | ||
2 | * | ||
3 | * Copyright (c) 2003-2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #include <linux/init.h> | ||
22 | #include <linux/module.h> | ||
23 | #include <linux/interrupt.h> | ||
24 | #include <linux/ioport.h> | ||
25 | #include <linux/device.h> | ||
26 | #include <linux/syscore_ops.h> | ||
27 | |||
28 | #include <asm/irq.h> | ||
29 | #include <asm/mach/irq.h> | ||
30 | |||
31 | #include <plat/regs-irqtype.h> | ||
32 | |||
33 | #include <plat/cpu.h> | ||
34 | #include <plat/pm.h> | ||
35 | #include <plat/irq.h> | ||
36 | |||
37 | static void | ||
38 | s3c_irq_mask(struct irq_data *data) | ||
39 | { | ||
40 | unsigned int irqno = data->irq - IRQ_EINT0; | ||
41 | unsigned long mask; | ||
42 | |||
43 | mask = __raw_readl(S3C2410_INTMSK); | ||
44 | mask |= 1UL << irqno; | ||
45 | __raw_writel(mask, S3C2410_INTMSK); | ||
46 | } | ||
47 | |||
48 | static inline void | ||
49 | s3c_irq_ack(struct irq_data *data) | ||
50 | { | ||
51 | unsigned long bitval = 1UL << (data->irq - IRQ_EINT0); | ||
52 | |||
53 | __raw_writel(bitval, S3C2410_SRCPND); | ||
54 | __raw_writel(bitval, S3C2410_INTPND); | ||
55 | } | ||
56 | |||
57 | static inline void | ||
58 | s3c_irq_maskack(struct irq_data *data) | ||
59 | { | ||
60 | unsigned long bitval = 1UL << (data->irq - IRQ_EINT0); | ||
61 | unsigned long mask; | ||
62 | |||
63 | mask = __raw_readl(S3C2410_INTMSK); | ||
64 | __raw_writel(mask|bitval, S3C2410_INTMSK); | ||
65 | |||
66 | __raw_writel(bitval, S3C2410_SRCPND); | ||
67 | __raw_writel(bitval, S3C2410_INTPND); | ||
68 | } | ||
69 | |||
70 | |||
71 | static void | ||
72 | s3c_irq_unmask(struct irq_data *data) | ||
73 | { | ||
74 | unsigned int irqno = data->irq; | ||
75 | unsigned long mask; | ||
76 | |||
77 | if (irqno != IRQ_TIMER4 && irqno != IRQ_EINT8t23) | ||
78 | irqdbf2("s3c_irq_unmask %d\n", irqno); | ||
79 | |||
80 | irqno -= IRQ_EINT0; | ||
81 | |||
82 | mask = __raw_readl(S3C2410_INTMSK); | ||
83 | mask &= ~(1UL << irqno); | ||
84 | __raw_writel(mask, S3C2410_INTMSK); | ||
85 | } | ||
86 | |||
87 | struct irq_chip s3c_irq_level_chip = { | ||
88 | .name = "s3c-level", | ||
89 | .irq_ack = s3c_irq_maskack, | ||
90 | .irq_mask = s3c_irq_mask, | ||
91 | .irq_unmask = s3c_irq_unmask, | ||
92 | .irq_set_wake = s3c_irq_wake | ||
93 | }; | ||
94 | |||
95 | struct irq_chip s3c_irq_chip = { | ||
96 | .name = "s3c", | ||
97 | .irq_ack = s3c_irq_ack, | ||
98 | .irq_mask = s3c_irq_mask, | ||
99 | .irq_unmask = s3c_irq_unmask, | ||
100 | .irq_set_wake = s3c_irq_wake | ||
101 | }; | ||
102 | |||
103 | static void | ||
104 | s3c_irqext_mask(struct irq_data *data) | ||
105 | { | ||
106 | unsigned int irqno = data->irq - EXTINT_OFF; | ||
107 | unsigned long mask; | ||
108 | |||
109 | mask = __raw_readl(S3C24XX_EINTMASK); | ||
110 | mask |= ( 1UL << irqno); | ||
111 | __raw_writel(mask, S3C24XX_EINTMASK); | ||
112 | } | ||
113 | |||
114 | static void | ||
115 | s3c_irqext_ack(struct irq_data *data) | ||
116 | { | ||
117 | unsigned long req; | ||
118 | unsigned long bit; | ||
119 | unsigned long mask; | ||
120 | |||
121 | bit = 1UL << (data->irq - EXTINT_OFF); | ||
122 | |||
123 | mask = __raw_readl(S3C24XX_EINTMASK); | ||
124 | |||
125 | __raw_writel(bit, S3C24XX_EINTPEND); | ||
126 | |||
127 | req = __raw_readl(S3C24XX_EINTPEND); | ||
128 | req &= ~mask; | ||
129 | |||
130 | /* not sure if we should be acking the parent irq... */ | ||
131 | |||
132 | if (data->irq <= IRQ_EINT7) { | ||
133 | if ((req & 0xf0) == 0) | ||
134 | s3c_irq_ack(irq_get_irq_data(IRQ_EINT4t7)); | ||
135 | } else { | ||
136 | if ((req >> 8) == 0) | ||
137 | s3c_irq_ack(irq_get_irq_data(IRQ_EINT8t23)); | ||
138 | } | ||
139 | } | ||
140 | |||
141 | static void | ||
142 | s3c_irqext_unmask(struct irq_data *data) | ||
143 | { | ||
144 | unsigned int irqno = data->irq - EXTINT_OFF; | ||
145 | unsigned long mask; | ||
146 | |||
147 | mask = __raw_readl(S3C24XX_EINTMASK); | ||
148 | mask &= ~(1UL << irqno); | ||
149 | __raw_writel(mask, S3C24XX_EINTMASK); | ||
150 | } | ||
151 | |||
152 | int | ||
153 | s3c_irqext_type(struct irq_data *data, unsigned int type) | ||
154 | { | ||
155 | void __iomem *extint_reg; | ||
156 | void __iomem *gpcon_reg; | ||
157 | unsigned long gpcon_offset, extint_offset; | ||
158 | unsigned long newvalue = 0, value; | ||
159 | |||
160 | if ((data->irq >= IRQ_EINT0) && (data->irq <= IRQ_EINT3)) { | ||
161 | gpcon_reg = S3C2410_GPFCON; | ||
162 | extint_reg = S3C24XX_EXTINT0; | ||
163 | gpcon_offset = (data->irq - IRQ_EINT0) * 2; | ||
164 | extint_offset = (data->irq - IRQ_EINT0) * 4; | ||
165 | } else if ((data->irq >= IRQ_EINT4) && (data->irq <= IRQ_EINT7)) { | ||
166 | gpcon_reg = S3C2410_GPFCON; | ||
167 | extint_reg = S3C24XX_EXTINT0; | ||
168 | gpcon_offset = (data->irq - (EXTINT_OFF)) * 2; | ||
169 | extint_offset = (data->irq - (EXTINT_OFF)) * 4; | ||
170 | } else if ((data->irq >= IRQ_EINT8) && (data->irq <= IRQ_EINT15)) { | ||
171 | gpcon_reg = S3C2410_GPGCON; | ||
172 | extint_reg = S3C24XX_EXTINT1; | ||
173 | gpcon_offset = (data->irq - IRQ_EINT8) * 2; | ||
174 | extint_offset = (data->irq - IRQ_EINT8) * 4; | ||
175 | } else if ((data->irq >= IRQ_EINT16) && (data->irq <= IRQ_EINT23)) { | ||
176 | gpcon_reg = S3C2410_GPGCON; | ||
177 | extint_reg = S3C24XX_EXTINT2; | ||
178 | gpcon_offset = (data->irq - IRQ_EINT8) * 2; | ||
179 | extint_offset = (data->irq - IRQ_EINT16) * 4; | ||
180 | } else { | ||
181 | return -1; | ||
182 | } | ||
183 | |||
184 | /* Set the GPIO to external interrupt mode */ | ||
185 | value = __raw_readl(gpcon_reg); | ||
186 | value = (value & ~(3 << gpcon_offset)) | (0x02 << gpcon_offset); | ||
187 | __raw_writel(value, gpcon_reg); | ||
188 | |||
189 | /* Set the external interrupt to pointed trigger type */ | ||
190 | switch (type) | ||
191 | { | ||
192 | case IRQ_TYPE_NONE: | ||
193 | printk(KERN_WARNING "No edge setting!\n"); | ||
194 | break; | ||
195 | |||
196 | case IRQ_TYPE_EDGE_RISING: | ||
197 | newvalue = S3C2410_EXTINT_RISEEDGE; | ||
198 | break; | ||
199 | |||
200 | case IRQ_TYPE_EDGE_FALLING: | ||
201 | newvalue = S3C2410_EXTINT_FALLEDGE; | ||
202 | break; | ||
203 | |||
204 | case IRQ_TYPE_EDGE_BOTH: | ||
205 | newvalue = S3C2410_EXTINT_BOTHEDGE; | ||
206 | break; | ||
207 | |||
208 | case IRQ_TYPE_LEVEL_LOW: | ||
209 | newvalue = S3C2410_EXTINT_LOWLEV; | ||
210 | break; | ||
211 | |||
212 | case IRQ_TYPE_LEVEL_HIGH: | ||
213 | newvalue = S3C2410_EXTINT_HILEV; | ||
214 | break; | ||
215 | |||
216 | default: | ||
217 | printk(KERN_ERR "No such irq type %d", type); | ||
218 | return -1; | ||
219 | } | ||
220 | |||
221 | value = __raw_readl(extint_reg); | ||
222 | value = (value & ~(7 << extint_offset)) | (newvalue << extint_offset); | ||
223 | __raw_writel(value, extint_reg); | ||
224 | |||
225 | return 0; | ||
226 | } | ||
227 | |||
228 | static struct irq_chip s3c_irqext_chip = { | ||
229 | .name = "s3c-ext", | ||
230 | .irq_mask = s3c_irqext_mask, | ||
231 | .irq_unmask = s3c_irqext_unmask, | ||
232 | .irq_ack = s3c_irqext_ack, | ||
233 | .irq_set_type = s3c_irqext_type, | ||
234 | .irq_set_wake = s3c_irqext_wake | ||
235 | }; | ||
236 | |||
237 | static struct irq_chip s3c_irq_eint0t4 = { | ||
238 | .name = "s3c-ext0", | ||
239 | .irq_ack = s3c_irq_ack, | ||
240 | .irq_mask = s3c_irq_mask, | ||
241 | .irq_unmask = s3c_irq_unmask, | ||
242 | .irq_set_wake = s3c_irq_wake, | ||
243 | .irq_set_type = s3c_irqext_type, | ||
244 | }; | ||
245 | |||
246 | /* mask values for the parent registers for each of the interrupt types */ | ||
247 | |||
248 | #define INTMSK_UART0 (1UL << (IRQ_UART0 - IRQ_EINT0)) | ||
249 | #define INTMSK_UART1 (1UL << (IRQ_UART1 - IRQ_EINT0)) | ||
250 | #define INTMSK_UART2 (1UL << (IRQ_UART2 - IRQ_EINT0)) | ||
251 | #define INTMSK_ADCPARENT (1UL << (IRQ_ADCPARENT - IRQ_EINT0)) | ||
252 | |||
253 | |||
254 | /* UART0 */ | ||
255 | |||
256 | static void | ||
257 | s3c_irq_uart0_mask(struct irq_data *data) | ||
258 | { | ||
259 | s3c_irqsub_mask(data->irq, INTMSK_UART0, 7); | ||
260 | } | ||
261 | |||
262 | static void | ||
263 | s3c_irq_uart0_unmask(struct irq_data *data) | ||
264 | { | ||
265 | s3c_irqsub_unmask(data->irq, INTMSK_UART0); | ||
266 | } | ||
267 | |||
268 | static void | ||
269 | s3c_irq_uart0_ack(struct irq_data *data) | ||
270 | { | ||
271 | s3c_irqsub_maskack(data->irq, INTMSK_UART0, 7); | ||
272 | } | ||
273 | |||
274 | static struct irq_chip s3c_irq_uart0 = { | ||
275 | .name = "s3c-uart0", | ||
276 | .irq_mask = s3c_irq_uart0_mask, | ||
277 | .irq_unmask = s3c_irq_uart0_unmask, | ||
278 | .irq_ack = s3c_irq_uart0_ack, | ||
279 | }; | ||
280 | |||
281 | /* UART1 */ | ||
282 | |||
283 | static void | ||
284 | s3c_irq_uart1_mask(struct irq_data *data) | ||
285 | { | ||
286 | s3c_irqsub_mask(data->irq, INTMSK_UART1, 7 << 3); | ||
287 | } | ||
288 | |||
289 | static void | ||
290 | s3c_irq_uart1_unmask(struct irq_data *data) | ||
291 | { | ||
292 | s3c_irqsub_unmask(data->irq, INTMSK_UART1); | ||
293 | } | ||
294 | |||
295 | static void | ||
296 | s3c_irq_uart1_ack(struct irq_data *data) | ||
297 | { | ||
298 | s3c_irqsub_maskack(data->irq, INTMSK_UART1, 7 << 3); | ||
299 | } | ||
300 | |||
301 | static struct irq_chip s3c_irq_uart1 = { | ||
302 | .name = "s3c-uart1", | ||
303 | .irq_mask = s3c_irq_uart1_mask, | ||
304 | .irq_unmask = s3c_irq_uart1_unmask, | ||
305 | .irq_ack = s3c_irq_uart1_ack, | ||
306 | }; | ||
307 | |||
308 | /* UART2 */ | ||
309 | |||
310 | static void | ||
311 | s3c_irq_uart2_mask(struct irq_data *data) | ||
312 | { | ||
313 | s3c_irqsub_mask(data->irq, INTMSK_UART2, 7 << 6); | ||
314 | } | ||
315 | |||
316 | static void | ||
317 | s3c_irq_uart2_unmask(struct irq_data *data) | ||
318 | { | ||
319 | s3c_irqsub_unmask(data->irq, INTMSK_UART2); | ||
320 | } | ||
321 | |||
322 | static void | ||
323 | s3c_irq_uart2_ack(struct irq_data *data) | ||
324 | { | ||
325 | s3c_irqsub_maskack(data->irq, INTMSK_UART2, 7 << 6); | ||
326 | } | ||
327 | |||
328 | static struct irq_chip s3c_irq_uart2 = { | ||
329 | .name = "s3c-uart2", | ||
330 | .irq_mask = s3c_irq_uart2_mask, | ||
331 | .irq_unmask = s3c_irq_uart2_unmask, | ||
332 | .irq_ack = s3c_irq_uart2_ack, | ||
333 | }; | ||
334 | |||
335 | /* ADC and Touchscreen */ | ||
336 | |||
337 | static void | ||
338 | s3c_irq_adc_mask(struct irq_data *d) | ||
339 | { | ||
340 | s3c_irqsub_mask(d->irq, INTMSK_ADCPARENT, 3 << 9); | ||
341 | } | ||
342 | |||
343 | static void | ||
344 | s3c_irq_adc_unmask(struct irq_data *d) | ||
345 | { | ||
346 | s3c_irqsub_unmask(d->irq, INTMSK_ADCPARENT); | ||
347 | } | ||
348 | |||
349 | static void | ||
350 | s3c_irq_adc_ack(struct irq_data *d) | ||
351 | { | ||
352 | s3c_irqsub_ack(d->irq, INTMSK_ADCPARENT, 3 << 9); | ||
353 | } | ||
354 | |||
355 | static struct irq_chip s3c_irq_adc = { | ||
356 | .name = "s3c-adc", | ||
357 | .irq_mask = s3c_irq_adc_mask, | ||
358 | .irq_unmask = s3c_irq_adc_unmask, | ||
359 | .irq_ack = s3c_irq_adc_ack, | ||
360 | }; | ||
361 | |||
362 | /* irq demux for adc */ | ||
363 | static void s3c_irq_demux_adc(unsigned int irq, | ||
364 | struct irq_desc *desc) | ||
365 | { | ||
366 | unsigned int subsrc, submsk; | ||
367 | unsigned int offset = 9; | ||
368 | |||
369 | /* read the current pending interrupts, and the mask | ||
370 | * for what it is available */ | ||
371 | |||
372 | subsrc = __raw_readl(S3C2410_SUBSRCPND); | ||
373 | submsk = __raw_readl(S3C2410_INTSUBMSK); | ||
374 | |||
375 | subsrc &= ~submsk; | ||
376 | subsrc >>= offset; | ||
377 | subsrc &= 3; | ||
378 | |||
379 | if (subsrc != 0) { | ||
380 | if (subsrc & 1) { | ||
381 | generic_handle_irq(IRQ_TC); | ||
382 | } | ||
383 | if (subsrc & 2) { | ||
384 | generic_handle_irq(IRQ_ADC); | ||
385 | } | ||
386 | } | ||
387 | } | ||
388 | |||
389 | static void s3c_irq_demux_uart(unsigned int start) | ||
390 | { | ||
391 | unsigned int subsrc, submsk; | ||
392 | unsigned int offset = start - IRQ_S3CUART_RX0; | ||
393 | |||
394 | /* read the current pending interrupts, and the mask | ||
395 | * for what it is available */ | ||
396 | |||
397 | subsrc = __raw_readl(S3C2410_SUBSRCPND); | ||
398 | submsk = __raw_readl(S3C2410_INTSUBMSK); | ||
399 | |||
400 | irqdbf2("s3c_irq_demux_uart: start=%d (%d), subsrc=0x%08x,0x%08x\n", | ||
401 | start, offset, subsrc, submsk); | ||
402 | |||
403 | subsrc &= ~submsk; | ||
404 | subsrc >>= offset; | ||
405 | subsrc &= 7; | ||
406 | |||
407 | if (subsrc != 0) { | ||
408 | if (subsrc & 1) | ||
409 | generic_handle_irq(start); | ||
410 | |||
411 | if (subsrc & 2) | ||
412 | generic_handle_irq(start+1); | ||
413 | |||
414 | if (subsrc & 4) | ||
415 | generic_handle_irq(start+2); | ||
416 | } | ||
417 | } | ||
418 | |||
419 | /* uart demux entry points */ | ||
420 | |||
421 | static void | ||
422 | s3c_irq_demux_uart0(unsigned int irq, | ||
423 | struct irq_desc *desc) | ||
424 | { | ||
425 | irq = irq; | ||
426 | s3c_irq_demux_uart(IRQ_S3CUART_RX0); | ||
427 | } | ||
428 | |||
429 | static void | ||
430 | s3c_irq_demux_uart1(unsigned int irq, | ||
431 | struct irq_desc *desc) | ||
432 | { | ||
433 | irq = irq; | ||
434 | s3c_irq_demux_uart(IRQ_S3CUART_RX1); | ||
435 | } | ||
436 | |||
437 | static void | ||
438 | s3c_irq_demux_uart2(unsigned int irq, | ||
439 | struct irq_desc *desc) | ||
440 | { | ||
441 | irq = irq; | ||
442 | s3c_irq_demux_uart(IRQ_S3CUART_RX2); | ||
443 | } | ||
444 | |||
445 | static void | ||
446 | s3c_irq_demux_extint8(unsigned int irq, | ||
447 | struct irq_desc *desc) | ||
448 | { | ||
449 | unsigned long eintpnd = __raw_readl(S3C24XX_EINTPEND); | ||
450 | unsigned long eintmsk = __raw_readl(S3C24XX_EINTMASK); | ||
451 | |||
452 | eintpnd &= ~eintmsk; | ||
453 | eintpnd &= ~0xff; /* ignore lower irqs */ | ||
454 | |||
455 | /* we may as well handle all the pending IRQs here */ | ||
456 | |||
457 | while (eintpnd) { | ||
458 | irq = __ffs(eintpnd); | ||
459 | eintpnd &= ~(1<<irq); | ||
460 | |||
461 | irq += (IRQ_EINT4 - 4); | ||
462 | generic_handle_irq(irq); | ||
463 | } | ||
464 | |||
465 | } | ||
466 | |||
467 | static void | ||
468 | s3c_irq_demux_extint4t7(unsigned int irq, | ||
469 | struct irq_desc *desc) | ||
470 | { | ||
471 | unsigned long eintpnd = __raw_readl(S3C24XX_EINTPEND); | ||
472 | unsigned long eintmsk = __raw_readl(S3C24XX_EINTMASK); | ||
473 | |||
474 | eintpnd &= ~eintmsk; | ||
475 | eintpnd &= 0xff; /* only lower irqs */ | ||
476 | |||
477 | /* we may as well handle all the pending IRQs here */ | ||
478 | |||
479 | while (eintpnd) { | ||
480 | irq = __ffs(eintpnd); | ||
481 | eintpnd &= ~(1<<irq); | ||
482 | |||
483 | irq += (IRQ_EINT4 - 4); | ||
484 | |||
485 | generic_handle_irq(irq); | ||
486 | } | ||
487 | } | ||
488 | |||
489 | #ifdef CONFIG_FIQ | ||
490 | /** | ||
491 | * s3c24xx_set_fiq - set the FIQ routing | ||
492 | * @irq: IRQ number to route to FIQ on processor. | ||
493 | * @on: Whether to route @irq to the FIQ, or to remove the FIQ routing. | ||
494 | * | ||
495 | * Change the state of the IRQ to FIQ routing depending on @irq and @on. If | ||
496 | * @on is true, the @irq is checked to see if it can be routed and the | ||
497 | * interrupt controller updated to route the IRQ. If @on is false, the FIQ | ||
498 | * routing is cleared, regardless of which @irq is specified. | ||
499 | */ | ||
500 | int s3c24xx_set_fiq(unsigned int irq, bool on) | ||
501 | { | ||
502 | u32 intmod; | ||
503 | unsigned offs; | ||
504 | |||
505 | if (on) { | ||
506 | offs = irq - FIQ_START; | ||
507 | if (offs > 31) | ||
508 | return -EINVAL; | ||
509 | |||
510 | intmod = 1 << offs; | ||
511 | } else { | ||
512 | intmod = 0; | ||
513 | } | ||
514 | |||
515 | __raw_writel(intmod, S3C2410_INTMOD); | ||
516 | return 0; | ||
517 | } | ||
518 | |||
519 | EXPORT_SYMBOL_GPL(s3c24xx_set_fiq); | ||
520 | #endif | ||
521 | |||
522 | |||
523 | /* s3c24xx_init_irq | ||
524 | * | ||
525 | * Initialise S3C2410 IRQ system | ||
526 | */ | ||
527 | |||
528 | void __init s3c24xx_init_irq(void) | ||
529 | { | ||
530 | unsigned long pend; | ||
531 | unsigned long last; | ||
532 | int irqno; | ||
533 | int i; | ||
534 | |||
535 | #ifdef CONFIG_FIQ | ||
536 | init_FIQ(FIQ_START); | ||
537 | #endif | ||
538 | |||
539 | irqdbf("s3c2410_init_irq: clearing interrupt status flags\n"); | ||
540 | |||
541 | /* first, clear all interrupts pending... */ | ||
542 | |||
543 | last = 0; | ||
544 | for (i = 0; i < 4; i++) { | ||
545 | pend = __raw_readl(S3C24XX_EINTPEND); | ||
546 | |||
547 | if (pend == 0 || pend == last) | ||
548 | break; | ||
549 | |||
550 | __raw_writel(pend, S3C24XX_EINTPEND); | ||
551 | printk("irq: clearing pending ext status %08x\n", (int)pend); | ||
552 | last = pend; | ||
553 | } | ||
554 | |||
555 | last = 0; | ||
556 | for (i = 0; i < 4; i++) { | ||
557 | pend = __raw_readl(S3C2410_INTPND); | ||
558 | |||
559 | if (pend == 0 || pend == last) | ||
560 | break; | ||
561 | |||
562 | __raw_writel(pend, S3C2410_SRCPND); | ||
563 | __raw_writel(pend, S3C2410_INTPND); | ||
564 | printk("irq: clearing pending status %08x\n", (int)pend); | ||
565 | last = pend; | ||
566 | } | ||
567 | |||
568 | last = 0; | ||
569 | for (i = 0; i < 4; i++) { | ||
570 | pend = __raw_readl(S3C2410_SUBSRCPND); | ||
571 | |||
572 | if (pend == 0 || pend == last) | ||
573 | break; | ||
574 | |||
575 | printk("irq: clearing subpending status %08x\n", (int)pend); | ||
576 | __raw_writel(pend, S3C2410_SUBSRCPND); | ||
577 | last = pend; | ||
578 | } | ||
579 | |||
580 | /* register the main interrupts */ | ||
581 | |||
582 | irqdbf("s3c2410_init_irq: registering s3c2410 interrupt handlers\n"); | ||
583 | |||
584 | for (irqno = IRQ_EINT4t7; irqno <= IRQ_ADCPARENT; irqno++) { | ||
585 | /* set all the s3c2410 internal irqs */ | ||
586 | |||
587 | switch (irqno) { | ||
588 | /* deal with the special IRQs (cascaded) */ | ||
589 | |||
590 | case IRQ_EINT4t7: | ||
591 | case IRQ_EINT8t23: | ||
592 | case IRQ_UART0: | ||
593 | case IRQ_UART1: | ||
594 | case IRQ_UART2: | ||
595 | case IRQ_ADCPARENT: | ||
596 | irq_set_chip_and_handler(irqno, &s3c_irq_level_chip, | ||
597 | handle_level_irq); | ||
598 | break; | ||
599 | |||
600 | case IRQ_RESERVED6: | ||
601 | case IRQ_RESERVED24: | ||
602 | /* no IRQ here */ | ||
603 | break; | ||
604 | |||
605 | default: | ||
606 | //irqdbf("registering irq %d (s3c irq)\n", irqno); | ||
607 | irq_set_chip_and_handler(irqno, &s3c_irq_chip, | ||
608 | handle_edge_irq); | ||
609 | set_irq_flags(irqno, IRQF_VALID); | ||
610 | } | ||
611 | } | ||
612 | |||
613 | /* setup the cascade irq handlers */ | ||
614 | |||
615 | irq_set_chained_handler(IRQ_EINT4t7, s3c_irq_demux_extint4t7); | ||
616 | irq_set_chained_handler(IRQ_EINT8t23, s3c_irq_demux_extint8); | ||
617 | |||
618 | irq_set_chained_handler(IRQ_UART0, s3c_irq_demux_uart0); | ||
619 | irq_set_chained_handler(IRQ_UART1, s3c_irq_demux_uart1); | ||
620 | irq_set_chained_handler(IRQ_UART2, s3c_irq_demux_uart2); | ||
621 | irq_set_chained_handler(IRQ_ADCPARENT, s3c_irq_demux_adc); | ||
622 | |||
623 | /* external interrupts */ | ||
624 | |||
625 | for (irqno = IRQ_EINT0; irqno <= IRQ_EINT3; irqno++) { | ||
626 | irqdbf("registering irq %d (ext int)\n", irqno); | ||
627 | irq_set_chip_and_handler(irqno, &s3c_irq_eint0t4, | ||
628 | handle_edge_irq); | ||
629 | set_irq_flags(irqno, IRQF_VALID); | ||
630 | } | ||
631 | |||
632 | for (irqno = IRQ_EINT4; irqno <= IRQ_EINT23; irqno++) { | ||
633 | irqdbf("registering irq %d (extended s3c irq)\n", irqno); | ||
634 | irq_set_chip_and_handler(irqno, &s3c_irqext_chip, | ||
635 | handle_edge_irq); | ||
636 | set_irq_flags(irqno, IRQF_VALID); | ||
637 | } | ||
638 | |||
639 | /* register the uart interrupts */ | ||
640 | |||
641 | irqdbf("s3c2410: registering external interrupts\n"); | ||
642 | |||
643 | for (irqno = IRQ_S3CUART_RX0; irqno <= IRQ_S3CUART_ERR0; irqno++) { | ||
644 | irqdbf("registering irq %d (s3c uart0 irq)\n", irqno); | ||
645 | irq_set_chip_and_handler(irqno, &s3c_irq_uart0, | ||
646 | handle_level_irq); | ||
647 | set_irq_flags(irqno, IRQF_VALID); | ||
648 | } | ||
649 | |||
650 | for (irqno = IRQ_S3CUART_RX1; irqno <= IRQ_S3CUART_ERR1; irqno++) { | ||
651 | irqdbf("registering irq %d (s3c uart1 irq)\n", irqno); | ||
652 | irq_set_chip_and_handler(irqno, &s3c_irq_uart1, | ||
653 | handle_level_irq); | ||
654 | set_irq_flags(irqno, IRQF_VALID); | ||
655 | } | ||
656 | |||
657 | for (irqno = IRQ_S3CUART_RX2; irqno <= IRQ_S3CUART_ERR2; irqno++) { | ||
658 | irqdbf("registering irq %d (s3c uart2 irq)\n", irqno); | ||
659 | irq_set_chip_and_handler(irqno, &s3c_irq_uart2, | ||
660 | handle_level_irq); | ||
661 | set_irq_flags(irqno, IRQF_VALID); | ||
662 | } | ||
663 | |||
664 | for (irqno = IRQ_TC; irqno <= IRQ_ADC; irqno++) { | ||
665 | irqdbf("registering irq %d (s3c adc irq)\n", irqno); | ||
666 | irq_set_chip_and_handler(irqno, &s3c_irq_adc, handle_edge_irq); | ||
667 | set_irq_flags(irqno, IRQF_VALID); | ||
668 | } | ||
669 | |||
670 | irqdbf("s3c2410: registered interrupt handlers\n"); | ||
671 | } | ||
672 | |||
673 | struct syscore_ops s3c24xx_irq_syscore_ops = { | ||
674 | .suspend = s3c24xx_irq_suspend, | ||
675 | .resume = s3c24xx_irq_resume, | ||
676 | }; | ||
diff --git a/arch/arm/plat-samsung/adc.c b/arch/arm/plat-samsung/adc.c index 2d676ab50f73..ca07cb1b155a 100644 --- a/arch/arm/plat-samsung/adc.c +++ b/arch/arm/plat-samsung/adc.c | |||
@@ -386,11 +386,9 @@ static int s3c_adc_probe(struct platform_device *pdev) | |||
386 | return -ENXIO; | 386 | return -ENXIO; |
387 | } | 387 | } |
388 | 388 | ||
389 | adc->regs = devm_request_and_ioremap(dev, regs); | 389 | adc->regs = devm_ioremap_resource(dev, regs); |
390 | if (!adc->regs) { | 390 | if (IS_ERR(adc->regs)) |
391 | dev_err(dev, "failed to map registers\n"); | 391 | return PTR_ERR(adc->regs); |
392 | return -ENXIO; | ||
393 | } | ||
394 | 392 | ||
395 | ret = regulator_enable(adc->vdd); | 393 | ret = regulator_enable(adc->vdd); |
396 | if (ret) | 394 | if (ret) |
diff --git a/arch/arm/plat-samsung/dma-ops.c b/arch/arm/plat-samsung/dma-ops.c index d088afa034e8..71d58ddea9c1 100644 --- a/arch/arm/plat-samsung/dma-ops.c +++ b/arch/arm/plat-samsung/dma-ops.c | |||
@@ -19,7 +19,8 @@ | |||
19 | #include <mach/dma.h> | 19 | #include <mach/dma.h> |
20 | 20 | ||
21 | static unsigned samsung_dmadev_request(enum dma_ch dma_ch, | 21 | static unsigned samsung_dmadev_request(enum dma_ch dma_ch, |
22 | struct samsung_dma_req *param) | 22 | struct samsung_dma_req *param, |
23 | struct device *dev, char *ch_name) | ||
23 | { | 24 | { |
24 | dma_cap_mask_t mask; | 25 | dma_cap_mask_t mask; |
25 | void *filter_param; | 26 | void *filter_param; |
@@ -33,7 +34,12 @@ static unsigned samsung_dmadev_request(enum dma_ch dma_ch, | |||
33 | */ | 34 | */ |
34 | filter_param = (dma_ch == DMACH_DT_PROP) ? | 35 | filter_param = (dma_ch == DMACH_DT_PROP) ? |
35 | (void *)param->dt_dmach_prop : (void *)dma_ch; | 36 | (void *)param->dt_dmach_prop : (void *)dma_ch; |
36 | return (unsigned)dma_request_channel(mask, pl330_filter, filter_param); | 37 | |
38 | if (dev->of_node) | ||
39 | return (unsigned)dma_request_slave_channel(dev, ch_name); | ||
40 | else | ||
41 | return (unsigned)dma_request_channel(mask, pl330_filter, | ||
42 | filter_param); | ||
37 | } | 43 | } |
38 | 44 | ||
39 | static int samsung_dmadev_release(unsigned ch, void *param) | 45 | static int samsung_dmadev_release(unsigned ch, void *param) |
diff --git a/arch/arm/plat-samsung/include/plat/adc.h b/arch/arm/plat-samsung/include/plat/adc.h index b258a08de591..2fc89315553f 100644 --- a/arch/arm/plat-samsung/include/plat/adc.h +++ b/arch/arm/plat-samsung/include/plat/adc.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #define __ASM_PLAT_ADC_H __FILE__ | 15 | #define __ASM_PLAT_ADC_H __FILE__ |
16 | 16 | ||
17 | struct s3c_adc_client; | 17 | struct s3c_adc_client; |
18 | struct platform_device; | ||
18 | 19 | ||
19 | extern int s3c_adc_start(struct s3c_adc_client *client, | 20 | extern int s3c_adc_start(struct s3c_adc_client *client, |
20 | unsigned int channel, unsigned int nr_samples); | 21 | unsigned int channel, unsigned int nr_samples); |
diff --git a/arch/arm/plat-samsung/include/plat/debug-macro.S b/arch/arm/plat-samsung/include/plat/debug-macro.S index 207e275362a8..f3a9cff6d5d4 100644 --- a/arch/arm/plat-samsung/include/plat/debug-macro.S +++ b/arch/arm/plat-samsung/include/plat/debug-macro.S | |||
@@ -14,12 +14,12 @@ | |||
14 | /* The S5PV210/S5PC110 implementations are as belows. */ | 14 | /* The S5PV210/S5PC110 implementations are as belows. */ |
15 | 15 | ||
16 | .macro fifo_level_s5pv210 rd, rx | 16 | .macro fifo_level_s5pv210 rd, rx |
17 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 17 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
18 | and \rd, \rd, #S5PV210_UFSTAT_TXMASK | 18 | and \rd, \rd, #S5PV210_UFSTAT_TXMASK |
19 | .endm | 19 | .endm |
20 | 20 | ||
21 | .macro fifo_full_s5pv210 rd, rx | 21 | .macro fifo_full_s5pv210 rd, rx |
22 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 22 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
23 | tst \rd, #S5PV210_UFSTAT_TXFULL | 23 | tst \rd, #S5PV210_UFSTAT_TXFULL |
24 | .endm | 24 | .endm |
25 | 25 | ||
@@ -27,7 +27,7 @@ | |||
27 | * most widely re-used */ | 27 | * most widely re-used */ |
28 | 28 | ||
29 | .macro fifo_level_s3c2440 rd, rx | 29 | .macro fifo_level_s3c2440 rd, rx |
30 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 30 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
31 | and \rd, \rd, #S3C2440_UFSTAT_TXMASK | 31 | and \rd, \rd, #S3C2440_UFSTAT_TXMASK |
32 | .endm | 32 | .endm |
33 | 33 | ||
@@ -36,7 +36,7 @@ | |||
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | .macro fifo_full_s3c2440 rd, rx | 38 | .macro fifo_full_s3c2440 rd, rx |
39 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 39 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
40 | tst \rd, #S3C2440_UFSTAT_TXFULL | 40 | tst \rd, #S3C2440_UFSTAT_TXFULL |
41 | .endm | 41 | .endm |
42 | 42 | ||
@@ -45,11 +45,11 @@ | |||
45 | #endif | 45 | #endif |
46 | 46 | ||
47 | .macro senduart,rd,rx | 47 | .macro senduart,rd,rx |
48 | strb \rd, [\rx, # S3C2410_UTXH ] | 48 | strb \rd, [\rx, # S3C2410_UTXH] |
49 | .endm | 49 | .endm |
50 | 50 | ||
51 | .macro busyuart, rd, rx | 51 | .macro busyuart, rd, rx |
52 | ldr \rd, [ \rx, # S3C2410_UFCON ] | 52 | ldr \rd, [\rx, # S3C2410_UFCON] |
53 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? | 53 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? |
54 | beq 1001f @ | 54 | beq 1001f @ |
55 | @ FIFO enabled... | 55 | @ FIFO enabled... |
@@ -60,7 +60,7 @@ | |||
60 | 60 | ||
61 | 1001: | 61 | 1001: |
62 | @ busy waiting for non fifo | 62 | @ busy waiting for non fifo |
63 | ldr \rd, [ \rx, # S3C2410_UTRSTAT ] | 63 | ldr \rd, [\rx, # S3C2410_UTRSTAT] |
64 | tst \rd, #S3C2410_UTRSTAT_TXFE | 64 | tst \rd, #S3C2410_UTRSTAT_TXFE |
65 | beq 1001b | 65 | beq 1001b |
66 | 66 | ||
@@ -68,7 +68,7 @@ | |||
68 | .endm | 68 | .endm |
69 | 69 | ||
70 | .macro waituart,rd,rx | 70 | .macro waituart,rd,rx |
71 | ldr \rd, [ \rx, # S3C2410_UFCON ] | 71 | ldr \rd, [\rx, # S3C2410_UFCON] |
72 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? | 72 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? |
73 | beq 1001f @ | 73 | beq 1001f @ |
74 | @ FIFO enabled... | 74 | @ FIFO enabled... |
@@ -79,7 +79,7 @@ | |||
79 | b 1002f | 79 | b 1002f |
80 | 1001: | 80 | 1001: |
81 | @ idle waiting for non fifo | 81 | @ idle waiting for non fifo |
82 | ldr \rd, [ \rx, # S3C2410_UTRSTAT ] | 82 | ldr \rd, [\rx, # S3C2410_UTRSTAT] |
83 | tst \rd, #S3C2410_UTRSTAT_TXFE | 83 | tst \rd, #S3C2410_UTRSTAT_TXFE |
84 | beq 1001b | 84 | beq 1001b |
85 | 85 | ||
diff --git a/arch/arm/plat-samsung/include/plat/dma-ops.h b/arch/arm/plat-samsung/include/plat/dma-ops.h index f5144cdd3001..114178268b75 100644 --- a/arch/arm/plat-samsung/include/plat/dma-ops.h +++ b/arch/arm/plat-samsung/include/plat/dma-ops.h | |||
@@ -39,7 +39,8 @@ struct samsung_dma_config { | |||
39 | }; | 39 | }; |
40 | 40 | ||
41 | struct samsung_dma_ops { | 41 | struct samsung_dma_ops { |
42 | unsigned (*request)(enum dma_ch ch, struct samsung_dma_req *param); | 42 | unsigned (*request)(enum dma_ch ch, struct samsung_dma_req *param, |
43 | struct device *dev, char *ch_name); | ||
43 | int (*release)(unsigned ch, void *param); | 44 | int (*release)(unsigned ch, void *param); |
44 | int (*config)(unsigned ch, struct samsung_dma_config *param); | 45 | int (*config)(unsigned ch, struct samsung_dma_config *param); |
45 | int (*prepare)(unsigned ch, struct samsung_dma_prep *param); | 46 | int (*prepare)(unsigned ch, struct samsung_dma_prep *param); |
diff --git a/arch/arm/plat-samsung/include/plat/fimc-core.h b/arch/arm/plat-samsung/include/plat/fimc-core.h index 945a99d59563..1d6cb2b8b094 100644 --- a/arch/arm/plat-samsung/include/plat/fimc-core.h +++ b/arch/arm/plat-samsung/include/plat/fimc-core.h | |||
@@ -43,6 +43,8 @@ static inline void s3c_fimc_setname(int id, char *name) | |||
43 | s5p_device_fimc3.name = name; | 43 | s5p_device_fimc3.name = name; |
44 | break; | 44 | break; |
45 | #endif | 45 | #endif |
46 | default: | ||
47 | break; | ||
46 | } | 48 | } |
47 | } | 49 | } |
48 | 50 | ||
diff --git a/arch/arm/plat-samsung/include/plat/gpio-core.h b/arch/arm/plat-samsung/include/plat/gpio-core.h index f7a3ea2c498a..cf5aae5b0975 100644 --- a/arch/arm/plat-samsung/include/plat/gpio-core.h +++ b/arch/arm/plat-samsung/include/plat/gpio-core.h | |||
@@ -106,7 +106,18 @@ static inline struct samsung_gpio_chip *samsung_gpiolib_getchip(unsigned int chi | |||
106 | #else | 106 | #else |
107 | /* machine specific code should provide samsung_gpiolib_getchip */ | 107 | /* machine specific code should provide samsung_gpiolib_getchip */ |
108 | 108 | ||
109 | #include <mach/gpio-track.h> | 109 | extern struct samsung_gpio_chip s3c24xx_gpios[]; |
110 | |||
111 | static inline struct samsung_gpio_chip *samsung_gpiolib_getchip(unsigned int pin) | ||
112 | { | ||
113 | struct samsung_gpio_chip *chip; | ||
114 | |||
115 | if (pin > S3C_GPIO_END) | ||
116 | return NULL; | ||
117 | |||
118 | chip = &s3c24xx_gpios[pin/32]; | ||
119 | return ((pin - chip->chip.base) < chip->chip.ngpio) ? chip : NULL; | ||
120 | } | ||
110 | 121 | ||
111 | static inline void s3c_gpiolib_track(struct samsung_gpio_chip *chip) { } | 122 | static inline void s3c_gpiolib_track(struct samsung_gpio_chip *chip) { } |
112 | #endif | 123 | #endif |
diff --git a/arch/arm/plat-samsung/include/plat/gpio-fns.h b/arch/arm/plat-samsung/include/plat/gpio-fns.h deleted file mode 100644 index d1ecef0e38e0..000000000000 --- a/arch/arm/plat-samsung/include/plat/gpio-fns.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <plat/gpio-cfg.h> | ||
diff --git a/arch/arm/plat-samsung/include/plat/pm.h b/arch/arm/plat-samsung/include/plat/pm.h index 887a0c954379..f6fcadeee969 100644 --- a/arch/arm/plat-samsung/include/plat/pm.h +++ b/arch/arm/plat-samsung/include/plat/pm.h | |||
@@ -109,17 +109,11 @@ extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count); | |||
109 | #ifdef CONFIG_PM | 109 | #ifdef CONFIG_PM |
110 | extern int s3c_irq_wake(struct irq_data *data, unsigned int state); | 110 | extern int s3c_irq_wake(struct irq_data *data, unsigned int state); |
111 | extern int s3c_irqext_wake(struct irq_data *data, unsigned int state); | 111 | extern int s3c_irqext_wake(struct irq_data *data, unsigned int state); |
112 | extern int s3c24xx_irq_suspend(void); | ||
113 | extern void s3c24xx_irq_resume(void); | ||
114 | #else | 112 | #else |
115 | #define s3c_irq_wake NULL | 113 | #define s3c_irq_wake NULL |
116 | #define s3c_irqext_wake NULL | 114 | #define s3c_irqext_wake NULL |
117 | #define s3c24xx_irq_suspend NULL | ||
118 | #define s3c24xx_irq_resume NULL | ||
119 | #endif | 115 | #endif |
120 | 116 | ||
121 | extern struct syscore_ops s3c24xx_irq_syscore_ops; | ||
122 | |||
123 | /* PM debug functions */ | 117 | /* PM debug functions */ |
124 | 118 | ||
125 | #ifdef CONFIG_SAMSUNG_PM_DEBUG | 119 | #ifdef CONFIG_SAMSUNG_PM_DEBUG |
diff --git a/arch/arm/plat-samsung/include/plat/s3c2416.h b/arch/arm/plat-samsung/include/plat/s3c2416.h index 7178e338e25e..f27399a3c68d 100644 --- a/arch/arm/plat-samsung/include/plat/s3c2416.h +++ b/arch/arm/plat-samsung/include/plat/s3c2416.h | |||
@@ -25,6 +25,7 @@ extern int s3c2416_baseclk_add(void); | |||
25 | 25 | ||
26 | extern void s3c2416_restart(char mode, const char *cmd); | 26 | extern void s3c2416_restart(char mode, const char *cmd); |
27 | 27 | ||
28 | extern void s3c2416_init_irq(void); | ||
28 | extern struct syscore_ops s3c2416_irq_syscore_ops; | 29 | extern struct syscore_ops s3c2416_irq_syscore_ops; |
29 | 30 | ||
30 | #else | 31 | #else |
diff --git a/arch/arm/plat-samsung/include/plat/s3c2443.h b/arch/arm/plat-samsung/include/plat/s3c2443.h index a5b794ff838b..71b88ec48956 100644 --- a/arch/arm/plat-samsung/include/plat/s3c2443.h +++ b/arch/arm/plat-samsung/include/plat/s3c2443.h | |||
@@ -25,6 +25,8 @@ extern void s3c2443_init_clocks(int xtal); | |||
25 | extern int s3c2443_baseclk_add(void); | 25 | extern int s3c2443_baseclk_add(void); |
26 | 26 | ||
27 | extern void s3c2443_restart(char mode, const char *cmd); | 27 | extern void s3c2443_restart(char mode, const char *cmd); |
28 | |||
29 | extern void s3c2443_init_irq(void); | ||
28 | #else | 30 | #else |
29 | #define s3c2443_init_clocks NULL | 31 | #define s3c2443_init_clocks NULL |
30 | #define s3c2443_init_uarts NULL | 32 | #define s3c2443_init_uarts NULL |
diff --git a/arch/arm/plat-samsung/include/plat/sdhci.h b/arch/arm/plat-samsung/include/plat/sdhci.h index 151cc9195cf6..9b87f38fc4f4 100644 --- a/arch/arm/plat-samsung/include/plat/sdhci.h +++ b/arch/arm/plat-samsung/include/plat/sdhci.h | |||
@@ -374,6 +374,8 @@ static inline void s3c_sdhci_setname(int id, char *name) | |||
374 | s3c_device_hsmmc3.name = name; | 374 | s3c_device_hsmmc3.name = name; |
375 | break; | 375 | break; |
376 | #endif | 376 | #endif |
377 | default: | ||
378 | break; | ||
377 | } | 379 | } |
378 | } | 380 | } |
379 | 381 | ||
diff --git a/arch/arm/plat-samsung/include/plat/uncompress.h b/arch/arm/plat-samsung/include/plat/uncompress.h index 7e068d182c3d..438b24846e7f 100644 --- a/arch/arm/plat-samsung/include/plat/uncompress.h +++ b/arch/arm/plat-samsung/include/plat/uncompress.h | |||
@@ -97,33 +97,6 @@ static inline void flush(void) | |||
97 | *((volatile unsigned int __force *)(ad)) = (d); \ | 97 | *((volatile unsigned int __force *)(ad)) = (d); \ |
98 | } while (0) | 98 | } while (0) |
99 | 99 | ||
100 | /* CONFIG_S3C_BOOT_WATCHDOG | ||
101 | * | ||
102 | * Simple boot-time watchdog setup, to reboot the system if there is | ||
103 | * any problem with the boot process | ||
104 | */ | ||
105 | |||
106 | #ifdef CONFIG_S3C_BOOT_WATCHDOG | ||
107 | |||
108 | #define WDOG_COUNT (0xff00) | ||
109 | |||
110 | static inline void arch_decomp_wdog(void) | ||
111 | { | ||
112 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
113 | } | ||
114 | |||
115 | static void arch_decomp_wdog_start(void) | ||
116 | { | ||
117 | __raw_writel(WDOG_COUNT, S3C2410_WTDAT); | ||
118 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
119 | __raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x80), S3C2410_WTCON); | ||
120 | } | ||
121 | |||
122 | #else | ||
123 | #define arch_decomp_wdog_start() | ||
124 | #define arch_decomp_wdog() | ||
125 | #endif | ||
126 | |||
127 | #ifdef CONFIG_S3C_BOOT_ERROR_RESET | 100 | #ifdef CONFIG_S3C_BOOT_ERROR_RESET |
128 | 101 | ||
129 | static void arch_decomp_error(const char *x) | 102 | static void arch_decomp_error(const char *x) |
@@ -173,7 +146,6 @@ arch_decomp_setup(void) | |||
173 | */ | 146 | */ |
174 | 147 | ||
175 | arch_detect_cpu(); | 148 | arch_detect_cpu(); |
176 | arch_decomp_wdog_start(); | ||
177 | 149 | ||
178 | /* Enable the UART FIFOs if they where not enabled and our | 150 | /* Enable the UART FIFOs if they where not enabled and our |
179 | * configuration says we should turn them on. | 151 | * configuration says we should turn them on. |
diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c index 15070284343e..002b1472293b 100644 --- a/arch/arm/plat-samsung/pm.c +++ b/arch/arm/plat-samsung/pm.c | |||
@@ -51,7 +51,7 @@ void s3c_pm_dbg(const char *fmt, ...) | |||
51 | char buff[256]; | 51 | char buff[256]; |
52 | 52 | ||
53 | va_start(va, fmt); | 53 | va_start(va, fmt); |
54 | vsprintf(buff, fmt, va); | 54 | vsnprintf(buff, sizeof(buff), fmt, va); |
55 | va_end(va); | 55 | va_end(va); |
56 | 56 | ||
57 | printascii(buff); | 57 | printascii(buff); |
@@ -243,6 +243,7 @@ int (*pm_cpu_sleep)(unsigned long); | |||
243 | 243 | ||
244 | static int s3c_pm_enter(suspend_state_t state) | 244 | static int s3c_pm_enter(suspend_state_t state) |
245 | { | 245 | { |
246 | int ret; | ||
246 | /* ensure the debug is initialised (if enabled) */ | 247 | /* ensure the debug is initialised (if enabled) */ |
247 | 248 | ||
248 | s3c_pm_debug_init(); | 249 | s3c_pm_debug_init(); |
@@ -300,7 +301,9 @@ static int s3c_pm_enter(suspend_state_t state) | |||
300 | * we resume as it saves its own register state and restores it | 301 | * we resume as it saves its own register state and restores it |
301 | * during the resume. */ | 302 | * during the resume. */ |
302 | 303 | ||
303 | cpu_suspend(0, pm_cpu_sleep); | 304 | ret = cpu_suspend(0, pm_cpu_sleep); |
305 | if (ret) | ||
306 | return ret; | ||
304 | 307 | ||
305 | /* restore the system state */ | 308 | /* restore the system state */ |
306 | 309 | ||
diff --git a/arch/arm/plat-samsung/s3c-dma-ops.c b/arch/arm/plat-samsung/s3c-dma-ops.c index f99448c48d30..0cc40aea3f5a 100644 --- a/arch/arm/plat-samsung/s3c-dma-ops.c +++ b/arch/arm/plat-samsung/s3c-dma-ops.c | |||
@@ -36,7 +36,8 @@ static void s3c_dma_cb(struct s3c2410_dma_chan *channel, void *param, | |||
36 | } | 36 | } |
37 | 37 | ||
38 | static unsigned s3c_dma_request(enum dma_ch dma_ch, | 38 | static unsigned s3c_dma_request(enum dma_ch dma_ch, |
39 | struct samsung_dma_req *param) | 39 | struct samsung_dma_req *param, |
40 | struct device *dev, char *ch_name) | ||
40 | { | 41 | { |
41 | struct cb_data *data; | 42 | struct cb_data *data; |
42 | 43 | ||
diff --git a/arch/arm/plat-spear/Kconfig b/arch/arm/plat-spear/Kconfig index 87dbd81bdf51..739d016eb273 100644 --- a/arch/arm/plat-spear/Kconfig +++ b/arch/arm/plat-spear/Kconfig | |||
@@ -10,6 +10,7 @@ choice | |||
10 | 10 | ||
11 | config ARCH_SPEAR13XX | 11 | config ARCH_SPEAR13XX |
12 | bool "ST SPEAr13xx with Device Tree" | 12 | bool "ST SPEAr13xx with Device Tree" |
13 | select ARCH_HAVE_CPUFREQ | ||
13 | select ARM_GIC | 14 | select ARM_GIC |
14 | select CPU_V7 | 15 | select CPU_V7 |
15 | select GPIO_SPEAR_SPICS | 16 | select GPIO_SPEAR_SPICS |
diff --git a/arch/arm/plat-spear/include/plat/uncompress.h b/arch/arm/plat-spear/include/plat/uncompress.h index 2ce6cb17a98b..51b2dc93e4da 100644 --- a/arch/arm/plat-spear/include/plat/uncompress.h +++ b/arch/arm/plat-spear/include/plat/uncompress.h | |||
@@ -38,6 +38,5 @@ static inline void flush(void) | |||
38 | * nothing to do | 38 | * nothing to do |
39 | */ | 39 | */ |
40 | #define arch_decomp_setup() | 40 | #define arch_decomp_setup() |
41 | #define arch_decomp_wdog() | ||
42 | 41 | ||
43 | #endif /* __PLAT_UNCOMPRESS_H */ | 42 | #endif /* __PLAT_UNCOMPRESS_H */ |
diff --git a/arch/arm/plat-spear/restart.c b/arch/arm/plat-spear/restart.c index 4f990115b1bd..7d4616d5df11 100644 --- a/arch/arm/plat-spear/restart.c +++ b/arch/arm/plat-spear/restart.c | |||
@@ -11,8 +11,8 @@ | |||
11 | * warranty of any kind, whether express or implied. | 11 | * warranty of any kind, whether express or implied. |
12 | */ | 12 | */ |
13 | #include <linux/io.h> | 13 | #include <linux/io.h> |
14 | #include <linux/amba/sp810.h> | ||
14 | #include <asm/system_misc.h> | 15 | #include <asm/system_misc.h> |
15 | #include <asm/hardware/sp810.h> | ||
16 | #include <mach/spear.h> | 16 | #include <mach/spear.h> |
17 | #include <mach/generic.h> | 17 | #include <mach/generic.h> |
18 | 18 | ||