diff options
Diffstat (limited to 'arch/sh')
516 files changed, 13302 insertions, 26746 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 7f217b3a50a..834b67c4db5 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -1,28 +1,48 @@  config SUPERH  	def_bool y -	select EMBEDDED -	select HAVE_CLK -	select HAVE_IDE if HAS_IOPORT +	select ARCH_MIGHT_HAVE_PC_PARPORT +	select EXPERT +	select CLKDEV_LOOKUP +	select HAVE_IDE if HAS_IOPORT_MAP  	select HAVE_MEMBLOCK +	select HAVE_MEMBLOCK_NODE_MAP +	select ARCH_DISCARD_MEMBLOCK  	select HAVE_OPROFILE  	select HAVE_GENERIC_DMA_COHERENT  	select HAVE_ARCH_TRACEHOOK  	select HAVE_DMA_API_DEBUG  	select HAVE_DMA_ATTRS -	select HAVE_IRQ_WORK  	select HAVE_PERF_EVENTS +	select HAVE_DEBUG_BUGVERBOSE +	select ARCH_HAVE_CUSTOM_GPIO_H +	select ARCH_HAVE_NMI_SAFE_CMPXCHG if (GUSA_RB || CPU_SH4A)  	select PERF_USE_VMALLOC +	select HAVE_DEBUG_KMEMLEAK  	select HAVE_KERNEL_GZIP  	select HAVE_KERNEL_BZIP2  	select HAVE_KERNEL_LZMA +	select HAVE_KERNEL_XZ  	select HAVE_KERNEL_LZO +	select HAVE_UID16 +	select ARCH_WANT_IPC_PARSE_VERSION  	select HAVE_SYSCALL_TRACEPOINTS  	select HAVE_REGS_AND_STACK_ACCESS_API -	select HAVE_GENERIC_HARDIRQS -	select HAVE_SPARSE_IRQ +	select MAY_HAVE_SPARSE_IRQ +	select IRQ_FORCED_THREADING  	select RTC_LIB  	select GENERIC_ATOMIC64 -	select GENERIC_HARDIRQS_NO_DEPRECATED +	select GENERIC_IRQ_SHOW +	select GENERIC_SMP_IDLE_THREAD +	select GENERIC_IDLE_POLL_SETUP +	select GENERIC_CLOCKEVENTS +	select GENERIC_CMOS_UPDATE if SH_SH03 || SH_DREAMCAST +	select GENERIC_STRNCPY_FROM_USER +	select GENERIC_STRNLEN_USER +	select HAVE_MOD_ARCH_SPECIFIC if DWARF_UNWINDER +	select MODULES_USE_ELF_RELA +	select OLD_SIGSUSPEND +	select OLD_SIGACTION +	select HAVE_ARCH_AUDITSYSCALL  	help  	  The SuperH is a RISC processor targeted for use in embedded systems  	  and consumer electronics; it was also used in the Sega Dreamcast @@ -39,6 +59,7 @@ config SUPERH32  	select HAVE_DYNAMIC_FTRACE  	select HAVE_FUNCTION_TRACE_MCOUNT_TEST  	select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE +	select ARCH_WANT_IPC_PARSE_VERSION  	select HAVE_FUNCTION_GRAPH_TRACER  	select HAVE_ARCH_KGDB  	select HAVE_HW_BREAKPOINT @@ -46,9 +67,11 @@ config SUPERH32  	select PERF_EVENTS  	select ARCH_HIBERNATION_POSSIBLE if MMU  	select SPARSE_IRQ +	select HAVE_CC_STACKPROTECTOR  config SUPERH64  	def_bool ARCH = "sh64" +	select KALLSYMS  config ARCH_DEFCONFIG  	string @@ -69,42 +92,16 @@ config GENERIC_CSUM  	def_bool y  	depends on SUPERH64 -config GENERIC_FIND_NEXT_BIT -	def_bool y -  config GENERIC_HWEIGHT  	def_bool y -config IRQ_PER_CPU -	def_bool y - -config GENERIC_GPIO -	def_bool n -  config GENERIC_CALIBRATE_DELAY  	bool -config GENERIC_IOMAP -	bool - -config GENERIC_CLOCKEVENTS -	def_bool y - -config GENERIC_CLOCKEVENTS_BROADCAST -	bool - -config GENERIC_CMOS_UPDATE -	def_bool y -	depends on SH_SH03 || SH_DREAMCAST -  config GENERIC_LOCKBREAK  	def_bool y  	depends on SMP && PREEMPT -config SYS_SUPPORTS_PM -	bool -	depends on !SMP -  config ARCH_SUSPEND_POSSIBLE  	def_bool n @@ -127,15 +124,6 @@ config SYS_SUPPORTS_NUMA  config SYS_SUPPORTS_PCI  	bool -config SYS_SUPPORTS_CMT -	bool - -config SYS_SUPPORTS_MTU2 -	bool - -config SYS_SUPPORTS_TMU -	bool -  config STACKTRACE_SUPPORT  	def_bool y @@ -151,19 +139,15 @@ config ARCH_HAS_ILOG2_U32  config ARCH_HAS_ILOG2_U64  	def_bool n -config ARCH_NO_VIRT_TO_BUS -	def_bool y - -config ARCH_HAS_DEFAULT_IDLE -	def_bool y +config NO_IOPORT_MAP +	def_bool !PCI +	depends on !SH_CAYMAN && !SH_SH4202_MICRODEV && !SH_SHMIN && \ +		   !SH_HP6XX && !SH_SOLUTION_ENGINE -config ARCH_HAS_CPU_IDLE_WAIT -	def_bool y - -config NO_IOPORT +config IO_TRAPPED  	bool -config IO_TRAPPED +config SWAP_IO_SPACE  	bool  config DMA_COHERENT @@ -199,14 +183,14 @@ config CPU_SH3  	bool  	select CPU_HAS_INTEVT  	select CPU_HAS_SR_RB -	select SYS_SUPPORTS_TMU +	select SYS_SUPPORTS_SH_TMU  config CPU_SH4  	bool  	select CPU_HAS_INTEVT  	select CPU_HAS_SR_RB  	select CPU_HAS_FPU if !CPU_SH4AL_DSP -	select SYS_SUPPORTS_TMU +	select SYS_SUPPORTS_SH_TMU  	select SYS_SUPPORTS_HUGETLBFS if MMU  config CPU_SH4A @@ -221,7 +205,7 @@ config CPU_SH4AL_DSP  config CPU_SH5  	bool  	select CPU_HAS_FPU -	select SYS_SUPPORTS_TMU +	select SYS_SUPPORTS_SH_TMU  	select SYS_SUPPORTS_HUGETLBFS if MMU  config CPU_SHX2 @@ -258,7 +242,7 @@ choice  config CPU_SUBTYPE_SH7619  	bool "Support SH7619 processor"  	select CPU_SH2 -	select SYS_SUPPORTS_CMT +	select SYS_SUPPORTS_SH_CMT  # SH-2A Processor Support @@ -266,32 +250,50 @@ config CPU_SUBTYPE_SH7201  	bool "Support SH7201 processor"  	select CPU_SH2A  	select CPU_HAS_FPU -	select SYS_SUPPORTS_MTU2 +	select SYS_SUPPORTS_SH_MTU2  config CPU_SUBTYPE_SH7203  	bool "Support SH7203 processor"  	select CPU_SH2A  	select CPU_HAS_FPU -	select SYS_SUPPORTS_CMT -	select SYS_SUPPORTS_MTU2 +	select SYS_SUPPORTS_SH_CMT +	select SYS_SUPPORTS_SH_MTU2 +	select ARCH_WANT_OPTIONAL_GPIOLIB +	select PINCTRL  config CPU_SUBTYPE_SH7206  	bool "Support SH7206 processor"  	select CPU_SH2A -	select SYS_SUPPORTS_CMT -	select SYS_SUPPORTS_MTU2 +	select SYS_SUPPORTS_SH_CMT +	select SYS_SUPPORTS_SH_MTU2  config CPU_SUBTYPE_SH7263  	bool "Support SH7263 processor"  	select CPU_SH2A  	select CPU_HAS_FPU -	select SYS_SUPPORTS_CMT -	select SYS_SUPPORTS_MTU2 +	select SYS_SUPPORTS_SH_CMT +	select SYS_SUPPORTS_SH_MTU2 + +config CPU_SUBTYPE_SH7264 +	bool "Support SH7264 processor" +	select CPU_SH2A +	select CPU_HAS_FPU +	select SYS_SUPPORTS_SH_CMT +	select SYS_SUPPORTS_SH_MTU2 +	select PINCTRL + +config CPU_SUBTYPE_SH7269 +	bool "Support SH7269 processor" +	select CPU_SH2A +	select CPU_HAS_FPU +	select SYS_SUPPORTS_SH_CMT +	select SYS_SUPPORTS_SH_MTU2 +	select PINCTRL  config CPU_SUBTYPE_MXG  	bool "Support MX-G processor"  	select CPU_SH2A -	select SYS_SUPPORTS_MTU2 +	select SYS_SUPPORTS_SH_MTU2  	help  	  Select MX-G if running on an R8A03022BG part. @@ -344,7 +346,10 @@ config CPU_SUBTYPE_SH7720  	bool "Support SH7720 processor"  	select CPU_SH3  	select CPU_HAS_DSP -	select SYS_SUPPORTS_CMT +	select SYS_SUPPORTS_SH_CMT +	select ARCH_WANT_OPTIONAL_GPIOLIB +	select USB_OHCI_SH if USB_OHCI_HCD +	select PINCTRL  	help  	  Select SH7720 if you have a SH3-DSP SH7720 CPU. @@ -352,7 +357,8 @@ config CPU_SUBTYPE_SH7721  	bool "Support SH7721 processor"  	select CPU_SH3  	select CPU_HAS_DSP -	select SYS_SUPPORTS_CMT +	select SYS_SUPPORTS_SH_CMT +	select USB_OHCI_SH if USB_OHCI_HCD  	help  	  Select SH7721 if you have a SH3-DSP SH7721 CPU. @@ -406,7 +412,9 @@ config CPU_SUBTYPE_SH7723  	select CPU_SHX2  	select ARCH_SHMOBILE  	select ARCH_SPARSEMEM_ENABLE -	select SYS_SUPPORTS_CMT +	select SYS_SUPPORTS_SH_CMT +	select ARCH_WANT_OPTIONAL_GPIOLIB +	select PINCTRL  	help  	  Select SH7723 if you have an SH-MobileR2 CPU. @@ -416,20 +424,34 @@ config CPU_SUBTYPE_SH7724  	select CPU_SHX2  	select ARCH_SHMOBILE  	select ARCH_SPARSEMEM_ENABLE -	select SYS_SUPPORTS_CMT +	select SYS_SUPPORTS_SH_CMT +	select ARCH_WANT_OPTIONAL_GPIOLIB +	select PINCTRL  	help  	  Select SH7724 if you have an SH-MobileR2R CPU. +config CPU_SUBTYPE_SH7734 +	bool "Support SH7734 processor" +	select CPU_SH4A +	select CPU_SHX2 +	select ARCH_WANT_OPTIONAL_GPIOLIB +	select PINCTRL +	help +	  Select SH7734 if you have a SH4A SH7734 CPU. +  config CPU_SUBTYPE_SH7757  	bool "Support SH7757 processor"  	select CPU_SH4A  	select CPU_SHX2 +	select ARCH_WANT_OPTIONAL_GPIOLIB +	select PINCTRL  	help  	  Select SH7757 if you have a SH4A SH7757 CPU.  config CPU_SUBTYPE_SH7763  	bool "Support SH7763 processor"  	select CPU_SH4A +	select USB_OHCI_SH if USB_OHCI_HCD  	help  	  Select SH7763 if you have a SH4A SH7763(R5S77631) CPU. @@ -447,6 +469,8 @@ config CPU_SUBTYPE_SH7785  	select CPU_SHX2  	select ARCH_SPARSEMEM_ENABLE  	select SYS_SUPPORTS_NUMA +	select ARCH_WANT_OPTIONAL_GPIOLIB +	select PINCTRL  config CPU_SUBTYPE_SH7786  	bool "Support SH7786 processor" @@ -454,6 +478,10 @@ config CPU_SUBTYPE_SH7786  	select CPU_SHX3  	select CPU_HAS_PTEAEX  	select GENERIC_CLOCKEVENTS_BROADCAST if SMP +	select ARCH_WANT_OPTIONAL_GPIOLIB +	select USB_OHCI_SH if USB_OHCI_HCD +	select USB_EHCI_SH if USB_EHCI_HCD +	select PINCTRL  config CPU_SUBTYPE_SHX3  	bool "Support SH-X3 processor" @@ -461,6 +489,7 @@ config CPU_SUBTYPE_SHX3  	select CPU_SHX3  	select GENERIC_CLOCKEVENTS_BROADCAST if SMP  	select ARCH_REQUIRE_GPIOLIB +	select PINCTRL  # SH4AL-DSP Processor Support @@ -468,7 +497,7 @@ config CPU_SUBTYPE_SH7343  	bool "Support SH7343 processor"  	select CPU_SH4AL_DSP  	select ARCH_SHMOBILE -	select SYS_SUPPORTS_CMT +	select SYS_SUPPORTS_SH_CMT  config CPU_SUBTYPE_SH7722  	bool "Support SH7722 processor" @@ -477,7 +506,9 @@ config CPU_SUBTYPE_SH7722  	select ARCH_SHMOBILE  	select ARCH_SPARSEMEM_ENABLE  	select SYS_SUPPORTS_NUMA -	select SYS_SUPPORTS_CMT +	select SYS_SUPPORTS_SH_CMT +	select ARCH_WANT_OPTIONAL_GPIOLIB +	select PINCTRL  config CPU_SUBTYPE_SH7366  	bool "Support SH7366 processor" @@ -486,7 +517,7 @@ config CPU_SUBTYPE_SH7366  	select ARCH_SHMOBILE  	select ARCH_SPARSEMEM_ENABLE  	select SYS_SUPPORTS_NUMA -	select SYS_SUPPORTS_CMT +	select SYS_SUPPORTS_SH_CMT  endchoice @@ -519,27 +550,6 @@ source "arch/sh/boards/Kconfig"  menu "Timer and clock configuration" -config SH_TIMER_TMU -	bool "TMU timer driver" -	depends on SYS_SUPPORTS_TMU -	default y -	help -	  This enables the build of the TMU timer driver. - -config SH_TIMER_CMT -	bool "CMT timer driver" -	depends on SYS_SUPPORTS_CMT -	default y -	help -	  This enables build of the CMT timer driver. - -config SH_TIMER_MTU2 -	bool "MTU2 timer driver" -	depends on SYS_SUPPORTS_MTU2 -	default y -	help -	  This enables build of the MTU2 timer driver. -  config SH_PCLK_FREQ  	int "Peripheral clock frequency (in Hz)"  	depends on SH_CLK_CPG_LEGACY @@ -565,41 +575,14 @@ config SH_CLK_CPG  config SH_CLK_CPG_LEGACY  	depends on SH_CLK_CPG  	def_bool y if !CPU_SUBTYPE_SH7785 && !ARCH_SHMOBILE && \ -		      !CPU_SHX3 && !CPU_SUBTYPE_SH7757 - -config SH_CLK_MD -	int "CPU Mode Pin Setting" -	depends on CPU_SH2 -	default 6 if CPU_SUBTYPE_SH7206 -	default 5 if CPU_SUBTYPE_SH7619 -	default 0 -	help -	  MD2 - MD0 pin setting. - -source "kernel/time/Kconfig" +		      !CPU_SHX3 && !CPU_SUBTYPE_SH7757 && \ +		      !CPU_SUBTYPE_SH7734 && !CPU_SUBTYPE_SH7264 && \ +		      !CPU_SUBTYPE_SH7269  endmenu  menu "CPU Frequency scaling" -  source "drivers/cpufreq/Kconfig" - -config SH_CPU_FREQ -	tristate "SuperH CPU Frequency driver" -	depends on CPU_FREQ -	select CPU_FREQ_TABLE -	help -	  This adds the cpufreq driver for SuperH. Any CPU that supports -	  clock rate rounding through the clock framework can use this -	  driver. While it will make the kernel slightly larger, this is -	  harmless for CPUs that don't support rate rounding. The driver -	  will also generate a notice in the boot log before disabling -	  itself if the CPU in question is not capable of rate rounding. - -	  For details, take a look at <file:Documentation/cpu-freq>. - -	  If unsure, say N. -  endmenu  source "arch/sh/drivers/Kconfig" @@ -612,7 +595,7 @@ source kernel/Kconfig.hz  config KEXEC  	bool "kexec system call (EXPERIMENTAL)" -	depends on SUPERH32 && EXPERIMENTAL && MMU +	depends on SUPERH32 && MMU  	help  	  kexec is a system call that implements the ability to shutdown your  	  current kernel, and to start another kernel.  It is like a reboot @@ -623,13 +606,13 @@ config KEXEC  	  It is an ongoing process to be certain the hardware in a machine  	  is properly shutdown, so do not be surprised if this code does not -	  initially work for you.  It may help to enable device hotplugging -	  support.  As of this writing the exact hardware interface is -	  strongly in flux, so no good recommendation can be made. +	  initially work for you.  As of this writing the exact hardware +	  interface is strongly in flux, so no good recommendation can be +	  made.  config CRASH_DUMP  	bool "kernel crash dumps (EXPERIMENTAL)" -	depends on SUPERH32 && EXPERIMENTAL && BROKEN_ON_SMP +	depends on SUPERH32 && BROKEN_ON_SMP  	help  	  Generate crash dump after being started by kexec.  	  This should be normally only set in special crash dump kernels @@ -637,17 +620,28 @@ config CRASH_DUMP  	  a specially reserved region and then later executed after  	  a crash by kdump/kexec. The crash dump kernel must be compiled  	  to a memory address not used by the main kernel using -	  MEMORY_START. +	  PHYSICAL_START.  	  For more details see Documentation/kdump/kdump.txt  config KEXEC_JUMP  	bool "kexec jump (EXPERIMENTAL)" -	depends on SUPERH32 && KEXEC && HIBERNATION && EXPERIMENTAL +	depends on SUPERH32 && KEXEC && HIBERNATION  	help  	  Jump between original kernel and kexeced kernel and invoke  	  code via KEXEC +config PHYSICAL_START +	hex "Physical address where the kernel is loaded" if (EXPERT || CRASH_DUMP) +	default MEMORY_START +	---help--- +	  This gives the physical address where the kernel is loaded +	  and is ordinarily the same as MEMORY_START. + +	  Different values are primarily used in the case of kexec on panic +	  where the fail safe kernel needs to run at a different address +	  than the panic-ed kernel. +  config SECCOMP  	bool "Enable seccomp to safely compute untrusted bytecode"  	depends on PROC_FS @@ -667,16 +661,15 @@ config SECCOMP  config SMP  	bool "Symmetric multi-processing support"  	depends on SYS_SUPPORTS_SMP -	select USE_GENERIC_SMP_HELPERS  	---help---  	  This enables support for systems with more than one CPU. If you have -	  a system with only one CPU, like most personal computers, say N. If -	  you have a system with more than one CPU, say Y. +	  a system with only one CPU, say N. If you have a system with more +	  than one CPU, say Y. -	  If you say N here, the kernel will run on single and multiprocessor +	  If you say N here, the kernel will run on uni- and multiprocessor  	  machines, but will use only one CPU of a multiprocessor machine. If  	  you say Y here, the kernel will run on many, but not all, -	  singleprocessor machines. On a singleprocessor machine, the kernel +	  uniprocessor machines. On a uniprocessor machine, the kernel  	  will run faster if you say N here.  	  People using multiprocessor machines who say Y here should also say @@ -703,7 +696,7 @@ config NR_CPUS  config HOTPLUG_CPU  	bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" -	depends on SMP && HOTPLUG && EXPERIMENTAL +	depends on SMP  	help  	  Say Y here to experiment with turning CPUs off and on.  CPUs  	  can be controlled through /sys/devices/system/cpu. @@ -782,7 +775,7 @@ config ENTRY_OFFSET  config ROMIMAGE_MMCIF  	bool "Include MMCIF loader in romImage (EXPERIMENTAL)" -	depends on CPU_SUBTYPE_SH7724 && EXPERIMENTAL +	depends on CPU_SUBTYPE_SH7724  	help  	  Say Y here to include experimental MMCIF loading code in  	  romImage. With this enabled it is possible to write the romImage @@ -841,6 +834,8 @@ config PCI  	bool "PCI support"  	depends on SYS_SUPPORTS_PCI  	select PCI_DOMAINS +	select GENERIC_PCI_IOMAP +	select NO_GENERIC_PCI_IOPORT_MAP  	help  	  Find out whether you have a PCI motherboard. PCI is the name of a  	  bus system, i.e. the way the CPU talks to the other stuff inside @@ -866,7 +861,6 @@ source "fs/Kconfig.binfmt"  endmenu  menu "Power management options (EXPERIMENTAL)" -depends on EXPERIMENTAL  source "kernel/power/Kconfig" @@ -886,20 +880,4 @@ source "security/Kconfig"  source "crypto/Kconfig" -menuconfig VIRTUALIZATION -	bool "Virtualization" -	default n -	---help--- -	  Say Y here to get to see options for using your Linux host to run other -	  operating systems inside virtual machines (guests). -	  This option alone does not add any kernel code. - -	  If you say N, all options in this submenu will be skipped and disabled. - -if VIRTUALIZATION - -source drivers/virtio/Kconfig - -endif # VIRTUALIZATION -  source "lib/Kconfig" diff --git a/arch/sh/Kconfig.cpu b/arch/sh/Kconfig.cpu index ddf096c7d8b..05b518e90cf 100644 --- a/arch/sh/Kconfig.cpu +++ b/arch/sh/Kconfig.cpu @@ -1,7 +1,7 @@  menu "Processor features"  choice -	prompt "Endianess selection"  +	prompt "Endianness selection"   	default CPU_LITTLE_ENDIAN  	help  	  Some SuperH machines can be configured for either little or big @@ -33,7 +33,7 @@ config SH64_FPU_DENORM_FLUSH  config SH_FPU_EMU  	def_bool n  	prompt "FPU emulation support" -	depends on !SH_FPU && EXPERIMENTAL +	depends on !SH_FPU  	help  	  Selecting this option will enable support for software FPU emulation.  	  Most SH-3 users will want to say Y here, whereas most SH-4 users will @@ -68,7 +68,6 @@ config SH_STORE_QUEUES  config SPECULATIVE_EXECUTION  	bool "Speculative subroutine return" -	depends on EXPERIMENTAL  	depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 || CPU_SUBTYPE_SH7786  	help  	  This enables support for a speculative instruction fetch for diff --git a/arch/sh/Kconfig.debug b/arch/sh/Kconfig.debug index 12fec72fec5..5f2bb4242c0 100644 --- a/arch/sh/Kconfig.debug +++ b/arch/sh/Kconfig.debug @@ -28,15 +28,6 @@ config STACK_DEBUG  	  every function call and will therefore incur a major  	  performance hit. Most users should say N. -config DEBUG_STACK_USAGE -	bool "Stack utilization instrumentation" -	depends on DEBUG_KERNEL -	help -	  Enables the display of the minimum amount of free stack which each -	  task has ever had available in the sysrq-T and sysrq-P debug output. - -	  This option will slow down process creation somewhat. -  config 4KSTACKS  	bool "Use 4Kb for kernel stacks instead of 8Kb"  	depends on DEBUG_KERNEL && (MMU || BROKEN) && !PAGE_SIZE_64KB @@ -70,6 +61,7 @@ config DUMP_CODE  config DWARF_UNWINDER  	bool "Enable the DWARF unwinder for stacktraces"  	select FRAME_POINTER +	depends on SUPERH32  	default n  	help  	  Enabling this option will make stacktraces more accurate, at @@ -82,7 +74,7 @@ config SH_NO_BSS_INIT  	help  	  If running in painfully slow environments, such as an RTL  	  simulation or from remote memory via SHdebug, where the memory -	  can already be gauranteed to ber zeroed on boot, say Y. +	  can already be guaranteed to ber zeroed on boot, say Y.  	  For all other cases, say N. If this option seems perplexing, or  	  you aren't sure, say N. diff --git a/arch/sh/Makefile b/arch/sh/Makefile index 9c8c6e1a2a1..bf5b3f5f496 100644 --- a/arch/sh/Makefile +++ b/arch/sh/Makefile @@ -9,6 +9,12 @@  # License.  See the file "COPYING" in the main directory of this archive  # for more details.  # +ifneq ($(SUBARCH),$(ARCH)) +  ifeq ($(CROSS_COMPILE),) +    CROSS_COMPILE := $(call cc-cross-prefix, $(UTS_MACHINE)-linux-  $(UTS_MACHINE)-linux-gnu-  $(UTS_MACHINE)-unknown-linux-gnu-) +  endif +endif +  isa-y					:= any  isa-$(CONFIG_SH_DSP)			:= sh  isa-$(CONFIG_CPU_SH2)			:= sh2 @@ -26,7 +32,8 @@ endif  cflags-$(CONFIG_CPU_SH2)		:= $(call cc-option,-m2,)  cflags-$(CONFIG_CPU_SH2A)		+= $(call cc-option,-m2a,) \ -					   $(call cc-option,-m2a-nofpu,) +					   $(call cc-option,-m2a-nofpu,) \ +					   $(call cc-option,-m4-nofpu,)  cflags-$(CONFIG_CPU_SH3)		:= $(call cc-option,-m3,)  cflags-$(CONFIG_CPU_SH4)		:= $(call cc-option,-m4,) \  	$(call cc-option,-mno-implicit-fp,-m4-nofpu) @@ -80,6 +87,7 @@ defaultimage-$(CONFIG_SH_RSK)			:= uImage  defaultimage-$(CONFIG_SH_URQUELL)		:= uImage  defaultimage-$(CONFIG_SH_MIGOR)			:= uImage  defaultimage-$(CONFIG_SH_AP325RXA)		:= uImage +defaultimage-$(CONFIG_SH_SH7757LCR)		:= uImage  defaultimage-$(CONFIG_SH_7724_SOLUTION_ENGINE)	:= uImage  defaultimage-$(CONFIG_SH_7206_SOLUTION_ENGINE)	:= vmlinux  defaultimage-$(CONFIG_SH_7619_SOLUTION_ENGINE)	:= vmlinux @@ -105,25 +113,19 @@ LDFLAGS_vmlinux		+= --defsym phys_stext=_stext-$(CONFIG_PAGE_OFFSET) \  KBUILD_DEFCONFIG	:= cayman_defconfig  endif -ifneq ($(SUBARCH),$(ARCH)) -  ifeq ($(CROSS_COMPILE),) -    CROSS_COMPILE := $(call cc-cross-prefix, $(UTS_MACHINE)-linux-  $(UTS_MACHINE)-linux-gnu-  $(UTS_MACHINE)-unknown-linux-gnu-) -  endif -endif -  ifdef CONFIG_CPU_LITTLE_ENDIAN  ld-bfd			:= elf32-$(UTS_MACHINE)-linux -LDFLAGS_vmlinux		+= --defsym 'jiffies=jiffies_64' --oformat $(ld-bfd) +LDFLAGS_vmlinux		+= --defsym jiffies=jiffies_64 --oformat $(ld-bfd)  LDFLAGS			+= -EL  else  ld-bfd			:= elf32-$(UTS_MACHINE)big-linux -LDFLAGS_vmlinux		+= --defsym 'jiffies=jiffies_64+4' --oformat $(ld-bfd) +LDFLAGS_vmlinux		+= --defsym jiffies=jiffies_64+4 --oformat $(ld-bfd)  LDFLAGS			+= -EB  endif  export ld-bfd BITS -head-y	:= arch/sh/kernel/init_task.o arch/sh/kernel/head_$(BITS).o +head-y	:= arch/sh/kernel/head_$(BITS).o  core-y				+= arch/sh/kernel/ arch/sh/mm/ arch/sh/boards/  core-$(CONFIG_SH_FPU_EMU)	+= arch/sh/math-emu/ @@ -173,6 +175,7 @@ core-$(CONFIG_HD6446X_SERIES)	+= arch/sh/cchips/hd6446x/  cpuincdir-$(CONFIG_CPU_SH2A)	+= cpu-sh2a  cpuincdir-$(CONFIG_CPU_SH2)	+= cpu-sh2  cpuincdir-$(CONFIG_CPU_SH3)	+= cpu-sh3 +cpuincdir-$(CONFIG_CPU_SH4A)	+= cpu-sh4a  cpuincdir-$(CONFIG_CPU_SH4)	+= cpu-sh4  cpuincdir-$(CONFIG_CPU_SH5)	+= cpu-sh5  cpuincdir-y			+= cpu-common	# Must be last @@ -200,7 +203,7 @@ endif  libs-$(CONFIG_SUPERH32)		:= arch/sh/lib/	$(libs-y)  libs-$(CONFIG_SUPERH64)		:= arch/sh/lib64/ $(libs-y) -BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.lzo \ +BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.xz uImage.lzo \  	       uImage.srec uImage.bin zImage vmlinux.bin vmlinux.srec \  	       romImage  PHONY += $(BOOT_TARGETS) @@ -230,5 +233,6 @@ define archhelp  	@echo '* uImage.gz	           - Kernel-only image for U-Boot (gzip)'  	@echo '  uImage.bz2	           - Kernel-only image for U-Boot (bzip2)'  	@echo '  uImage.lzma	           - Kernel-only image for U-Boot (lzma)' +	@echo '  uImage.xz	           - Kernel-only image for U-Boot (xz)'  	@echo '  uImage.lzo	           - Kernel-only image for U-Boot (lzo)'  endef diff --git a/arch/sh/boards/Kconfig b/arch/sh/boards/Kconfig index 2018c7ea4c9..e331e5373b8 100644 --- a/arch/sh/boards/Kconfig +++ b/arch/sh/boards/Kconfig @@ -3,6 +3,9 @@ menu "Board support"  config SOLUTION_ENGINE  	bool +config SH_ALPHA_BOARD +	bool +  config SH_SOLUTION_ENGINE  	bool "SolutionEngine"  	select SOLUTION_ENGINE @@ -41,6 +44,8 @@ config SH_7721_SOLUTION_ENGINE  config SH_7722_SOLUTION_ENGINE  	bool "SolutionEngine7722"  	select SOLUTION_ENGINE +	select GENERIC_IRQ_CHIP +	select IRQ_DOMAIN  	depends on CPU_SUBTYPE_SH7722  	help  	  Select 7722 SolutionEngine if configuring for a Hitachi SH772 @@ -51,6 +56,8 @@ config SH_7724_SOLUTION_ENGINE  	select SOLUTION_ENGINE  	depends on CPU_SUBTYPE_SH7724  	select ARCH_REQUIRE_GPIOLIB +	select SND_SOC_AK4642 if SND_SIMPLE_CARD +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	help  	  Select 7724 SolutionEngine if configuring for a Hitachi SH7724  	  evaluation board. @@ -76,6 +83,8 @@ config SH_7780_SOLUTION_ENGINE  config SH_7343_SOLUTION_ENGINE  	bool "SolutionEngine7343"  	select SOLUTION_ENGINE +	select GENERIC_IRQ_CHIP +	select IRQ_DOMAIN  	depends on CPU_SUBTYPE_SH7343  	help  	  Select 7343 SolutionEngine if configuring for a Hitachi @@ -130,7 +139,9 @@ config SH_RTS7751R2D  config SH_RSK  	bool "Renesas Starter Kit" -	depends on CPU_SUBTYPE_SH7201 || CPU_SUBTYPE_SH7203 +	depends on CPU_SUBTYPE_SH7201 || CPU_SUBTYPE_SH7203 || \ +	  CPU_SUBTYPE_SH7264 || CPU_SUBTYPE_SH7269 +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	help  	 Select this option if configuring for any of the RSK+ MCU  	 evaluation platforms. @@ -147,9 +158,10 @@ config SH_SDK7786  	bool "SDK7786"  	depends on CPU_SUBTYPE_SH7786  	select SYS_SUPPORTS_PCI -	select NO_IOPORT if !PCI +	select NO_IOPORT_MAP if !PCI  	select ARCH_WANT_OPTIONAL_GPIOLIB  	select HAVE_SRAM_POOL +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	help  	  Select SDK7786 if configuring for a Renesas Technology Europe  	  SH7786-65nm board. @@ -164,6 +176,7 @@ config SH_SH7757LCR  	bool "SH7757LCR"  	depends on CPU_SUBTYPE_SH7757  	select ARCH_REQUIRE_GPIOLIB +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  config SH_SH7785LCR  	bool "SH7785LCR" @@ -191,12 +204,13 @@ config SH_URQUELL  	depends on CPU_SUBTYPE_SH7786  	select ARCH_REQUIRE_GPIOLIB  	select SYS_SUPPORTS_PCI -	select NO_IOPORT if !PCI +	select NO_IOPORT_MAP if !PCI  config SH_MIGOR  	bool "Migo-R"  	depends on CPU_SUBTYPE_SH7722  	select ARCH_REQUIRE_GPIOLIB +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	help  	  Select Migo-R if configuring for the SH7722 Migo-R platform            by Renesas System Solutions Asia Pte. Ltd. @@ -205,6 +219,7 @@ config SH_AP325RXA  	bool "AP-325RXA"  	depends on CPU_SUBTYPE_SH7723  	select ARCH_REQUIRE_GPIOLIB +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	help  	  Renesas "AP-325RXA" support.  	  Compatible with ALGO SYSTEM CO.,LTD. "AP-320A" @@ -213,6 +228,7 @@ config SH_KFR2R09  	bool "KFR2R09"  	depends on CPU_SUBTYPE_SH7724  	select ARCH_REQUIRE_GPIOLIB +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	help  	  "Kit For R2R for 2009" support. @@ -220,6 +236,8 @@ config SH_ECOVEC  	bool "EcoVec"  	depends on CPU_SUBTYPE_SH7724  	select ARCH_REQUIRE_GPIOLIB +	select SND_SOC_DA7210 if SND_SIMPLE_CARD +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	help  	  Renesas "R0P7724LC0011/21RL (EcoVec)" support. @@ -288,12 +306,14 @@ config SH_LBOX_RE2  config SH_X3PROTO  	bool "SH-X3 Prototype board"  	depends on CPU_SUBTYPE_SHX3 -	select NO_IOPORT if !PCI +	select NO_IOPORT_MAP if !PCI +	select IRQ_DOMAIN  config SH_MAGIC_PANEL_R2  	bool "Magic Panel R2"  	depends on CPU_SUBTYPE_SH7720  	select ARCH_REQUIRE_GPIOLIB +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	help  	  Select Magic Panel R2 if configuring for Magic Panel R2. @@ -301,17 +321,20 @@ config SH_CAYMAN  	bool "Hitachi Cayman"  	depends on CPU_SUBTYPE_SH5_101 || CPU_SUBTYPE_SH5_103  	select SYS_SUPPORTS_PCI +	select ARCH_MIGHT_HAVE_PC_SERIO  config SH_POLARIS  	bool "SMSC Polaris"  	select CPU_HAS_IPR_IRQ +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	depends on CPU_SUBTYPE_SH7709  	help  	  Select if configuring for an SMSC Polaris development board  config SH_SH2007  	bool "SH-2007 board" -	select NO_IOPORT +	select NO_IOPORT_MAP +	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	depends on CPU_SUBTYPE_SH7780  	help  	  SH-2007 is a single-board computer based around SH7780 chip @@ -320,7 +343,22 @@ config SH_SH2007  	  Compact Flash socket, two serial ports and PC-104 bus.  	  More information at <http://sh2000.sh-linux.org>. -endmenu +config SH_APSH4A3A +	bool "AP-SH4A-3A" +	select SH_ALPHA_BOARD +	select REGULATOR_FIXED_VOLTAGE if REGULATOR +	depends on CPU_SUBTYPE_SH7785 +	help +	  Select AP-SH4A-3A if configuring for an ALPHAPROJECT AP-SH4A-3A. + +config SH_APSH4AD0A +	bool "AP-SH4AD-0A" +	select SH_ALPHA_BOARD +	select SYS_SUPPORTS_PCI +	select REGULATOR_FIXED_VOLTAGE if REGULATOR +	depends on CPU_SUBTYPE_SH7786 +	help +	  Select AP-SH4AD-0A if configuring for an ALPHAPROJECT AP-SH4AD-0A.  source "arch/sh/boards/mach-r2d/Kconfig"  source "arch/sh/boards/mach-highlander/Kconfig" @@ -341,3 +379,5 @@ config SH_MAGIC_PANEL_R2_VERSION  endmenu  endif + +endmenu diff --git a/arch/sh/boards/Makefile b/arch/sh/boards/Makefile index be7d11d04b2..975a0f64ff2 100644 --- a/arch/sh/boards/Makefile +++ b/arch/sh/boards/Makefile @@ -13,3 +13,5 @@ obj-$(CONFIG_SH_ESPT)		+= board-espt.o  obj-$(CONFIG_SH_POLARIS)	+= board-polaris.o  obj-$(CONFIG_SH_TITAN)		+= board-titan.o  obj-$(CONFIG_SH_SH7757LCR)	+= board-sh7757lcr.o +obj-$(CONFIG_SH_APSH4A3A)	+= board-apsh4a3a.o +obj-$(CONFIG_SH_APSH4AD0A)	+= board-apsh4ad0a.o diff --git a/arch/sh/boards/board-apsh4a3a.c b/arch/sh/boards/board-apsh4a3a.c new file mode 100644 index 00000000000..0a39c241628 --- /dev/null +++ b/arch/sh/boards/board-apsh4a3a.c @@ -0,0 +1,185 @@ +/* + * ALPHAPROJECT AP-SH4A-3A Support. + * + * Copyright (C) 2010 ALPHAPROJECT Co.,Ltd. + * Copyright (C) 2008  Yoshihiro Shimoda + * Copyright (C) 2009  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/io.h> +#include <linux/mtd/physmap.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h> +#include <linux/smsc911x.h> +#include <linux/irq.h> +#include <linux/clk.h> +#include <asm/machvec.h> +#include <asm/sizes.h> +#include <asm/clock.h> + +static struct mtd_partition nor_flash_partitions[] = { +	{ +		.name		= "loader", +		.offset		= 0x00000000, +		.size		= 512 * 1024, +	}, +	{ +		.name		= "bootenv", +		.offset		= MTDPART_OFS_APPEND, +		.size		= 512 * 1024, +	}, +	{ +		.name		= "kernel", +		.offset		= MTDPART_OFS_APPEND, +		.size		= 4 * 1024 * 1024, +	}, +	{ +		.name		= "data", +		.offset		= MTDPART_OFS_APPEND, +		.size		= MTDPART_SIZ_FULL, +	}, +}; + +static struct physmap_flash_data nor_flash_data = { +	.width		= 4, +	.parts		= nor_flash_partitions, +	.nr_parts	= ARRAY_SIZE(nor_flash_partitions), +}; + +static struct resource nor_flash_resources[] = { +	[0]	= { +		.start	= 0x00000000, +		.end	= 0x01000000 - 1, +		.flags	= IORESOURCE_MEM, +	} +}; + +static struct platform_device nor_flash_device = { +	.name		= "physmap-flash", +	.dev		= { +		.platform_data	= &nor_flash_data, +	}, +	.num_resources	= ARRAY_SIZE(nor_flash_resources), +	.resource	= nor_flash_resources, +}; + +/* Dummy supplies, where voltage doesn't matter */ +static struct regulator_consumer_supply dummy_supplies[] = { +	REGULATOR_SUPPLY("vddvario", "smsc911x"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x"), +}; + +static struct resource smsc911x_resources[] = { +	[0] = { +		.name		= "smsc911x-memory", +		.start		= 0xA4000000, +		.end		= 0xA4000000 + SZ_256 - 1, +		.flags		= IORESOURCE_MEM, +	}, +	[1] = { +		.name		= "smsc911x-irq", +		.start		= evt2irq(0x200), +		.end		= evt2irq(0x200), +		.flags		= IORESOURCE_IRQ, +	}, +}; + +static struct smsc911x_platform_config smsc911x_config = { +	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW, +	.irq_type	= SMSC911X_IRQ_TYPE_OPEN_DRAIN, +	.flags		= SMSC911X_USE_16BIT, +	.phy_interface	= PHY_INTERFACE_MODE_MII, +}; + +static struct platform_device smsc911x_device = { +	.name		= "smsc911x", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(smsc911x_resources), +	.resource	= smsc911x_resources, +	.dev = { +		.platform_data = &smsc911x_config, +	}, +}; + +static struct platform_device *apsh4a3a_devices[] __initdata = { +	&nor_flash_device, +	&smsc911x_device, +}; + +static int __init apsh4a3a_devices_setup(void) +{ +	regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); + +	return platform_add_devices(apsh4a3a_devices, +				    ARRAY_SIZE(apsh4a3a_devices)); +} +device_initcall(apsh4a3a_devices_setup); + +static int apsh4a3a_clk_init(void) +{ +	struct clk *clk; +	int ret; + +	clk = clk_get(NULL, "extal"); +	if (IS_ERR(clk)) +		return PTR_ERR(clk); +	ret = clk_set_rate(clk, 33333000); +	clk_put(clk); + +	return ret; +} + +/* Initialize the board */ +static void __init apsh4a3a_setup(char **cmdline_p) +{ +	printk(KERN_INFO "Alpha Project AP-SH4A-3A support:\n"); +} + +static void __init apsh4a3a_init_irq(void) +{ +	plat_irq_setup_pins(IRQ_MODE_IRQ7654); +} + +/* Return the board specific boot mode pin configuration */ +static int apsh4a3a_mode_pins(void) +{ +	int value = 0; + +	/* These are the factory default settings of SW1 and SW2. +	 * If you change these dip switches then you will need to +	 * adjust the values below as well. +	 */ +	value &= ~MODE_PIN0;  /* Clock Mode 16 */ +	value &= ~MODE_PIN1; +	value &= ~MODE_PIN2; +	value &= ~MODE_PIN3; +	value |=  MODE_PIN4; +	value &= ~MODE_PIN5;  /* 16-bit Area0 bus width */ +	value |=  MODE_PIN6;  /* Area 0 SRAM interface */ +	value |=  MODE_PIN7; +	value |=  MODE_PIN8;  /* Little Endian */ +	value |=  MODE_PIN9;  /* Master Mode */ +	value |=  MODE_PIN10; /* Crystal resonator */ +	value |=  MODE_PIN11; /* Display Unit */ +	value |=  MODE_PIN12; +	value &= ~MODE_PIN13; /* 29-bit address mode */ +	value |=  MODE_PIN14; /* No PLL step-up */ + +	return value; +} + +/* + * The Machine Vector + */ +static struct sh_machine_vector mv_apsh4a3a __initmv = { +	.mv_name		= "AP-SH4A-3A", +	.mv_setup		= apsh4a3a_setup, +	.mv_clk_init		= apsh4a3a_clk_init, +	.mv_init_irq		= apsh4a3a_init_irq, +	.mv_mode_pins		= apsh4a3a_mode_pins, +}; diff --git a/arch/sh/boards/board-apsh4ad0a.c b/arch/sh/boards/board-apsh4ad0a.c new file mode 100644 index 00000000000..92eac3a9918 --- /dev/null +++ b/arch/sh/boards/board-apsh4ad0a.c @@ -0,0 +1,135 @@ +/* + * ALPHAPROJECT AP-SH4AD-0A Support. + * + * Copyright (C) 2010 ALPHAPROJECT Co.,Ltd. + * Copyright (C) 2010  Matt Fleming + * Copyright (C) 2010  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/io.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h> +#include <linux/smsc911x.h> +#include <linux/irq.h> +#include <linux/clk.h> +#include <asm/machvec.h> +#include <asm/sizes.h> + +/* Dummy supplies, where voltage doesn't matter */ +static struct regulator_consumer_supply dummy_supplies[] = { +	REGULATOR_SUPPLY("vddvario", "smsc911x"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x"), +}; + +static struct resource smsc911x_resources[] = { +	[0] = { +		.name		= "smsc911x-memory", +		.start		= 0xA4000000, +		.end		= 0xA4000000 + SZ_256 - 1, +		.flags		= IORESOURCE_MEM, +	}, +	[1] = { +		.name		= "smsc911x-irq", +		.start		= evt2irq(0x200), +		.end		= evt2irq(0x200), +		.flags		= IORESOURCE_IRQ, +	}, +}; + +static struct smsc911x_platform_config smsc911x_config = { +	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW, +	.irq_type	= SMSC911X_IRQ_TYPE_OPEN_DRAIN, +	.flags		= SMSC911X_USE_16BIT, +	.phy_interface	= PHY_INTERFACE_MODE_MII, +}; + +static struct platform_device smsc911x_device = { +	.name		= "smsc911x", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(smsc911x_resources), +	.resource	= smsc911x_resources, +	.dev = { +		.platform_data = &smsc911x_config, +	}, +}; + +static struct platform_device *apsh4ad0a_devices[] __initdata = { +	&smsc911x_device, +}; + +static int __init apsh4ad0a_devices_setup(void) +{ +	regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); + +	return platform_add_devices(apsh4ad0a_devices, +				    ARRAY_SIZE(apsh4ad0a_devices)); +} +device_initcall(apsh4ad0a_devices_setup); + +static int apsh4ad0a_mode_pins(void) +{ +	int value = 0; + +	/* These are the factory default settings of SW1 and SW2. +	 * If you change these dip switches then you will need to +	 * adjust the values below as well. +	 */ +	value |=  MODE_PIN0;  /* Clock Mode 3 */ +	value |=  MODE_PIN1; +	value &= ~MODE_PIN2; +	value &= ~MODE_PIN3; +	value &= ~MODE_PIN4;  /* 16-bit Area0 bus width  */ +	value |=  MODE_PIN5; +	value |=  MODE_PIN6; +	value |=  MODE_PIN7;  /* Normal mode */ +	value |=  MODE_PIN8;  /* Little Endian */ +	value |=  MODE_PIN9;  /* Crystal resonator */ +	value &= ~MODE_PIN10; /* 29-bit address mode */ +	value &= ~MODE_PIN11; /* PCI-E Root port */ +	value &= ~MODE_PIN12; /* 4 lane + 1 lane */ +	value |=  MODE_PIN13; /* AUD Enable */ +	value &= ~MODE_PIN14; /* Normal Operation */ + +	return value; +} + +static int apsh4ad0a_clk_init(void) +{ +	struct clk *clk; +	int ret; + +	clk = clk_get(NULL, "extal"); +	if (IS_ERR(clk)) +		return PTR_ERR(clk); +	ret = clk_set_rate(clk, 33333000); +	clk_put(clk); + +	return ret; +} + +/* Initialize the board */ +static void __init apsh4ad0a_setup(char **cmdline_p) +{ +	pr_info("Alpha Project AP-SH4AD-0A support:\n"); +} + +static void __init apsh4ad0a_init_irq(void) +{ +	plat_irq_setup_pins(IRQ_MODE_IRQ3210); +} + +/* + * The Machine Vector + */ +static struct sh_machine_vector mv_apsh4ad0a __initmv = { +	.mv_name		= "AP-SH4AD-0A", +	.mv_setup		= apsh4ad0a_setup, +	.mv_mode_pins		= apsh4ad0a_mode_pins, +	.mv_clk_init		= apsh4ad0a_clk_init, +	.mv_init_irq		= apsh4ad0a_init_irq, +}; diff --git a/arch/sh/boards/board-edosk7705.c b/arch/sh/boards/board-edosk7705.c index 4cb3bb74c36..5e24c17bbda 100644 --- a/arch/sh/boards/board-edosk7705.c +++ b/arch/sh/boards/board-edosk7705.c @@ -13,6 +13,7 @@  #include <linux/platform_device.h>  #include <linux/interrupt.h>  #include <linux/smc91x.h> +#include <linux/sh_intc.h>  #include <asm/machvec.h>  #include <asm/sizes.h> @@ -20,7 +21,7 @@  #define SMC_IO_OFFSET	0x300  #define SMC_IOADDR	(SMC_IOBASE + SMC_IO_OFFSET) -#define ETHERNET_IRQ	0x09 +#define ETHERNET_IRQ	evt2irq(0x320)  static void __init sh_edosk7705_init_irq(void)  { @@ -66,13 +67,12 @@ static int __init init_edosk7705_devices(void)  	return platform_add_devices(edosk7705_devices,  				    ARRAY_SIZE(edosk7705_devices));  } -__initcall(init_edosk7705_devices); +device_initcall(init_edosk7705_devices);  /*   * The Machine Vector   */  static struct sh_machine_vector mv_edosk7705 __initmv = {  	.mv_name		= "EDOSK7705", -	.mv_nr_irqs		= 80,  	.mv_init_irq		= sh_edosk7705_init_irq,  }; diff --git a/arch/sh/boards/board-edosk7760.c b/arch/sh/boards/board-edosk7760.c index 35dc0994875..bab5b951390 100644 --- a/arch/sh/boards/board-edosk7760.c +++ b/arch/sh/boards/board-edosk7760.c @@ -23,6 +23,7 @@  #include <linux/platform_device.h>  #include <linux/smc91x.h>  #include <linux/interrupt.h> +#include <linux/sh_intc.h>  #include <linux/i2c.h>  #include <linux/mtd/physmap.h>  #include <asm/machvec.h> @@ -40,8 +41,6 @@  #define SMC_IO_OFFSET	0x300  #define SMC_IOADDR	(SMC_IOBASE + SMC_IO_OFFSET) -#define ETHERNET_IRQ	5 -  /* NOR flash */  static struct mtd_partition edosk7760_nor_flash_partitions[] = {  	{ @@ -56,7 +55,7 @@ static struct mtd_partition edosk7760_nor_flash_partitions[] = {  	}, {  		.name = "fs",  		.offset = MTDPART_OFS_APPEND, -		.size = SZ_26M, +		.size = (26 << 20),  	}, {  		.name = "other",  		.offset = MTDPART_OFS_APPEND, @@ -99,8 +98,8 @@ static struct resource sh7760_i2c1_res[] = {  		.end	= SH7760_I2C1_MMIOEND,  		.flags	= IORESOURCE_MEM,  	},{ -		.start	= SH7760_I2C1_IRQ, -		.end	= SH7760_I2C1_IRQ, +		.start	= evt2irq(0x9e0), +		.end	= evt2irq(0x9e0),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -122,8 +121,8 @@ static struct resource sh7760_i2c0_res[] = {  		.end	= SH7760_I2C0_MMIOEND,  		.flags	= IORESOURCE_MEM,  	}, { -		.start	= SH7760_I2C0_IRQ, -		.end	= SH7760_I2C0_IRQ, +		.start	= evt2irq(0x9c0), +		.end	= evt2irq(0x9c0),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -150,8 +149,8 @@ static struct resource smc91x_res[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= ETHERNET_IRQ, -		.end	= ETHERNET_IRQ, +		.start	= evt2irq(0x2a0), +		.end	= evt2irq(0x2a0),  		.flags	= IORESOURCE_IRQ ,  	}  }; @@ -182,12 +181,11 @@ static int __init init_edosk7760_devices(void)  	return platform_add_devices(edosk7760_devices,  				    ARRAY_SIZE(edosk7760_devices));  } -__initcall(init_edosk7760_devices); +device_initcall(init_edosk7760_devices);  /*   * The Machine Vector   */  struct sh_machine_vector mv_edosk7760 __initmv = {  	.mv_name	= "EDOSK7760", -	.mv_nr_irqs	= 128,  }; diff --git a/arch/sh/boards/board-espt.c b/arch/sh/boards/board-espt.c index d5ce5e18eb3..7291e2f11a4 100644 --- a/arch/sh/boards/board-espt.c +++ b/arch/sh/boards/board-espt.c @@ -1,5 +1,5 @@  /* - * Data Technology Inc. ESPT-GIGA board suport + * Data Technology Inc. ESPT-GIGA board support   *   * Copyright (C) 2008, 2009 Renesas Solutions Corp.   * Copyright (C) 2008, 2009 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com> @@ -13,9 +13,10 @@  #include <linux/interrupt.h>  #include <linux/mtd/physmap.h>  #include <linux/io.h> +#include <linux/sh_eth.h> +#include <linux/sh_intc.h>  #include <asm/machvec.h>  #include <asm/sizes.h> -#include <asm/sh_eth.h>  /* NOR Flash */  static struct mtd_partition espt_nor_flash_partitions[] = { @@ -66,7 +67,12 @@ static struct resource sh_eth_resources[] = {  		.end    = 0xFEE00F7C - 1,  		.flags  = IORESOURCE_MEM,  	}, { -		.start  = 57,   /* irq number */ +		.start  = 0xFEE01800,   /* TSU */ +		.end    = 0xFEE01FFF, +		.flags  = IORESOURCE_MEM, +	}, { + +		.start  = evt2irq(0x920),   /* irq number */  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -74,10 +80,11 @@ static struct resource sh_eth_resources[] = {  static struct sh_eth_plat_data sh7763_eth_pdata = {  	.phy = 0,  	.edmac_endian = EDMAC_LITTLE_ENDIAN, +	.phy_interface = PHY_INTERFACE_MODE_MII,  };  static struct platform_device espt_eth_device = { -	.name       = "sh-eth", +	.name       = "sh7763-gether",  	.resource   = sh_eth_resources,  	.num_resources  = ARRAY_SIZE(sh_eth_resources),  	.dev        = { diff --git a/arch/sh/boards/board-magicpanelr2.c b/arch/sh/boards/board-magicpanelr2.c index efba450a051..20500858b56 100644 --- a/arch/sh/boards/board-magicpanelr2.c +++ b/arch/sh/boards/board-magicpanelr2.c @@ -14,19 +14,25 @@  #include <linux/platform_device.h>  #include <linux/delay.h>  #include <linux/gpio.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/smsc911x.h>  #include <linux/mtd/mtd.h>  #include <linux/mtd/partitions.h>  #include <linux/mtd/physmap.h>  #include <linux/mtd/map.h> +#include <linux/sh_intc.h>  #include <mach/magicpanelr2.h>  #include <asm/heartbeat.h>  #include <cpu/sh7720.h> -#define LAN9115_READY	(__raw_readl(0xA8000084UL) & 0x00000001UL) +/* Dummy supplies, where voltage doesn't matter */ +static struct regulator_consumer_supply dummy_supplies[] = { +	REGULATOR_SUPPLY("vddvario", "smsc911x"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x"), +}; -/* Prefer cmdline over RedBoot */ -static const char *probes[] = { "cmdlinepart", "RedBoot", NULL }; +#define LAN9115_READY	(__raw_readl(0xA8000084UL) & 0x00000001UL)  /* Wait until reset finished. Timeout is 100ms. */  static int __init ethernet_reset_finished(void) @@ -248,8 +254,8 @@ static struct resource smsc911x_resources[] = {  		.flags		= IORESOURCE_MEM,  	},  	[1] = { -		.start		= 35, -		.end		= 35, +		.start		= evt2irq(0x660), +		.end		= evt2irq(0x660),  		.flags		= IORESOURCE_IRQ,  	},  }; @@ -293,8 +299,6 @@ static struct platform_device heartbeat_device = {  	.resource	= heartbeat_resources,  }; -static struct mtd_partition *parsed_partitions; -  static struct mtd_partition mpr2_partitions[] = {  	/* Reserved for bootloader, read-only */  	{ @@ -318,6 +322,8 @@ static struct mtd_partition mpr2_partitions[] = {  };  static struct physmap_flash_data flash_data = { +	.parts		= mpr2_partitions, +	.nr_parts	= ARRAY_SIZE(mpr2_partitions),  	.width		= 2,  }; @@ -337,32 +343,6 @@ static struct platform_device flash_device = {  	},  }; -static struct mtd_info *flash_mtd; - -static struct map_info mpr2_flash_map = { -	.name = "Magic Panel R2 Flash", -	.size = 0x2000000UL, -	.bankwidth = 2, -}; - -static void __init set_mtd_partitions(void) -{ -	int nr_parts = 0; - -	simple_map_init(&mpr2_flash_map); -	flash_mtd = do_map_probe("cfi_probe", &mpr2_flash_map); -	nr_parts = parse_mtd_partitions(flash_mtd, probes, -					&parsed_partitions, 0); -	/* If there is no partition table, used the hard coded table */ -	if (nr_parts <= 0) { -		flash_data.parts = mpr2_partitions; -		flash_data.nr_parts = ARRAY_SIZE(mpr2_partitions); -	} else { -		flash_data.nr_parts = nr_parts; -		flash_data.parts = parsed_partitions; -	} -} -  /*   * Add all resources to the platform_device   */ @@ -376,7 +356,8 @@ static struct platform_device *mpr2_devices[] __initdata = {  static int __init mpr2_devices_setup(void)  { -	set_mtd_partitions(); +	regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); +  	return platform_add_devices(mpr2_devices, ARRAY_SIZE(mpr2_devices));  }  device_initcall(mpr2_devices_setup); @@ -388,17 +369,17 @@ static void __init init_mpr2_IRQ(void)  {  	plat_irq_setup_pins(IRQ_MODE_IRQ); /* install handlers for IRQ0-5 */ -	set_irq_type(32, IRQ_TYPE_LEVEL_LOW);    /* IRQ0 CAN1 */ -	set_irq_type(33, IRQ_TYPE_LEVEL_LOW);    /* IRQ1 CAN2 */ -	set_irq_type(34, IRQ_TYPE_LEVEL_LOW);    /* IRQ2 CAN3 */ -	set_irq_type(35, IRQ_TYPE_LEVEL_LOW);    /* IRQ3 SMSC9115 */ -	set_irq_type(36, IRQ_TYPE_EDGE_RISING);  /* IRQ4 touchscreen */ -	set_irq_type(37, IRQ_TYPE_EDGE_FALLING); /* IRQ5 touchscreen */ - -	intc_set_priority(32, 13);		/* IRQ0 CAN1 */ -	intc_set_priority(33, 13);		/* IRQ0 CAN2 */ -	intc_set_priority(34, 13);		/* IRQ0 CAN3 */ -	intc_set_priority(35, 6);		/* IRQ3 SMSC9115 */ +	irq_set_irq_type(evt2irq(0x600), IRQ_TYPE_LEVEL_LOW);    /* IRQ0 CAN1 */ +	irq_set_irq_type(evt2irq(0x620), IRQ_TYPE_LEVEL_LOW);    /* IRQ1 CAN2 */ +	irq_set_irq_type(evt2irq(0x640), IRQ_TYPE_LEVEL_LOW);    /* IRQ2 CAN3 */ +	irq_set_irq_type(evt2irq(0x660), IRQ_TYPE_LEVEL_LOW);    /* IRQ3 SMSC9115 */ +	irq_set_irq_type(evt2irq(0x680), IRQ_TYPE_EDGE_RISING);  /* IRQ4 touchscreen */ +	irq_set_irq_type(evt2irq(0x6a0), IRQ_TYPE_EDGE_FALLING); /* IRQ5 touchscreen */ + +	intc_set_priority(evt2irq(0x600), 13);		/* IRQ0 CAN1 */ +	intc_set_priority(evt2irq(0x620), 13);		/* IRQ0 CAN2 */ +	intc_set_priority(evt2irq(0x640), 13);		/* IRQ0 CAN3 */ +	intc_set_priority(evt2irq(0x660), 6);		/* IRQ3 SMSC9115 */  }  /* diff --git a/arch/sh/boards/board-polaris.c b/arch/sh/boards/board-polaris.c index 594866356c2..37a08d09472 100644 --- a/arch/sh/boards/board-polaris.c +++ b/arch/sh/boards/board-polaris.c @@ -1,5 +1,5 @@  /* - * June 2006 steve.glendinning@smsc.com + * June 2006 Steve Glendinning <steve.glendinning@shawell.net>   *   * Polaris-specific resource declaration   * @@ -9,6 +9,8 @@  #include <linux/interrupt.h>  #include <linux/irq.h>  #include <linux/platform_device.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/smsc911x.h>  #include <linux/io.h>  #include <asm/irq.h> @@ -22,6 +24,12 @@  #define AREA5_WAIT_CTRL	(0x1C00)  #define WAIT_STATES_10	(0x7) +/* Dummy supplies, where voltage doesn't matter */ +static struct regulator_consumer_supply dummy_supplies[] = { +	REGULATOR_SUPPLY("vddvario", "smsc911x.0"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x.0"), +}; +  static struct resource smsc911x_resources[] = {  	[0] = {  		.name		= "smsc911x-memory", @@ -88,6 +96,8 @@ static int __init polaris_initialise(void)  	printk(KERN_INFO "Configuring Polaris external bus\n"); +	regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); +  	/* Configure area 5 with 2 wait states */  	wcr = __raw_readw(WCR2);  	wcr &= (~AREA5_WAIT_CTRL); @@ -141,6 +151,5 @@ static void __init init_polaris_irq(void)  static struct sh_machine_vector mv_polaris __initmv = {  	.mv_name		= "Polaris", -	.mv_nr_irqs		= 61,  	.mv_init_irq		= init_polaris_irq,  }; diff --git a/arch/sh/boards/board-secureedge5410.c b/arch/sh/boards/board-secureedge5410.c index 32f875e8493..98b36205aa7 100644 --- a/arch/sh/boards/board-secureedge5410.c +++ b/arch/sh/boards/board-secureedge5410.c @@ -29,8 +29,6 @@ unsigned short secureedge5410_ioport;   */  static irqreturn_t eraseconfig_interrupt(int irq, void *dev_id)  { -	ctrl_delay();	/* dummy read */ -  	printk("SnapGear: erase switch interrupt!\n");  	return IRQ_HANDLED; @@ -43,8 +41,7 @@ static int __init eraseconfig_init(void)  	printk("SnapGear: EraseConfig init\n");  	/* Setup "EraseConfig" switch on external IRQ 0 */ -	if (request_irq(irq, eraseconfig_interrupt, IRQF_DISABLED, -				"Erase Config", NULL)) +	if (request_irq(irq, eraseconfig_interrupt, 0, "Erase Config", NULL))  		printk("SnapGear: failed to register IRQ%d for Reset witch\n",  				irq);  	else @@ -74,6 +71,5 @@ static void __init init_snapgear_IRQ(void)   */  static struct sh_machine_vector mv_snapgear __initmv = {  	.mv_name		= "SnapGear SecureEdge5410", -	.mv_nr_irqs		= 72,  	.mv_init_irq		= init_snapgear_IRQ,  }; diff --git a/arch/sh/boards/board-sh2007.c b/arch/sh/boards/board-sh2007.c index b90b78f6a82..1980bb7e578 100644 --- a/arch/sh/boards/board-sh2007.c +++ b/arch/sh/boards/board-sh2007.c @@ -6,6 +6,8 @@   */  #include <linux/init.h>  #include <linux/irq.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/smsc911x.h>  #include <linux/platform_device.h>  #include <linux/ata_platform.h> @@ -13,6 +15,14 @@  #include <asm/machvec.h>  #include <mach/sh2007.h> +/* Dummy supplies, where voltage doesn't matter */ +static struct regulator_consumer_supply dummy_supplies[] = { +	REGULATOR_SUPPLY("vddvario", "smsc911x.0"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x.0"), +	REGULATOR_SUPPLY("vddvario", "smsc911x.1"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x.1"), +}; +  struct smsc911x_platform_config smc911x_info = {  	.flags		= SMSC911X_USE_32BIT,  	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW, @@ -98,6 +108,8 @@ static struct platform_device *sh2007_devices[] __initdata = {  static int __init sh2007_io_init(void)  { +	regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); +  	platform_add_devices(sh2007_devices, ARRAY_SIZE(sh2007_devices));  	return 0;  } diff --git a/arch/sh/boards/board-sh7757lcr.c b/arch/sh/boards/board-sh7757lcr.c index c475f1056ab..669df51a82e 100644 --- a/arch/sh/boards/board-sh7757lcr.c +++ b/arch/sh/boards/board-sh7757lcr.c @@ -12,11 +12,18 @@  #include <linux/platform_device.h>  #include <linux/gpio.h>  #include <linux/irq.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/spi/spi.h>  #include <linux/spi/flash.h>  #include <linux/io.h> +#include <linux/mmc/host.h> +#include <linux/mmc/sh_mmcif.h> +#include <linux/mmc/sh_mobile_sdhi.h> +#include <linux/sh_eth.h> +#include <linux/sh_intc.h> +#include <linux/usb/renesas_usbhs.h>  #include <cpu/sh7757.h> -#include <asm/sh_eth.h>  #include <asm/heartbeat.h>  static struct resource heartbeat_resource = { @@ -44,14 +51,25 @@ static struct platform_device heartbeat_device = {  };  /* Fast Ethernet */ +#define GBECONT		0xffc10100 +#define GBECONT_RMII1	BIT(17) +#define GBECONT_RMII0	BIT(16) +static void sh7757_eth_set_mdio_gate(void *addr) +{ +	if (((unsigned long)addr & 0x00000fff) < 0x0800) +		writel(readl(GBECONT) | GBECONT_RMII0, GBECONT); +	else +		writel(readl(GBECONT) | GBECONT_RMII1, GBECONT); +} +  static struct resource sh_eth0_resources[] = {  	{  		.start  = 0xfef00000,  		.end    = 0xfef001ff,  		.flags  = IORESOURCE_MEM,  	}, { -		.start  = 84, -		.end    = 84, +		.start  = evt2irq(0xc80), +		.end    = evt2irq(0xc80),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -59,10 +77,11 @@ static struct resource sh_eth0_resources[] = {  static struct sh_eth_plat_data sh7757_eth0_pdata = {  	.phy = 1,  	.edmac_endian = EDMAC_LITTLE_ENDIAN, +	.set_mdio_gate = sh7757_eth_set_mdio_gate,  };  static struct platform_device sh7757_eth0_device = { -	.name		= "sh-eth", +	.name		= "sh7757-ether",  	.resource	= sh_eth0_resources,  	.id		= 0,  	.num_resources	= ARRAY_SIZE(sh_eth0_resources), @@ -77,8 +96,8 @@ static struct resource sh_eth1_resources[] = {  		.end    = 0xfef009ff,  		.flags  = IORESOURCE_MEM,  	}, { -		.start  = 84, -		.end    = 84, +		.start  = evt2irq(0xc80), +		.end    = evt2irq(0xc80),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -86,10 +105,11 @@ static struct resource sh_eth1_resources[] = {  static struct sh_eth_plat_data sh7757_eth1_pdata = {  	.phy = 1,  	.edmac_endian = EDMAC_LITTLE_ENDIAN, +	.set_mdio_gate = sh7757_eth_set_mdio_gate,  };  static struct platform_device sh7757_eth1_device = { -	.name		= "sh-eth", +	.name		= "sh7757-ether",  	.resource	= sh_eth1_resources,  	.id		= 1,  	.num_resources	= ARRAY_SIZE(sh_eth1_resources), @@ -98,14 +118,227 @@ static struct platform_device sh7757_eth1_device = {  	},  }; +static void sh7757_eth_giga_set_mdio_gate(void *addr) +{ +	if (((unsigned long)addr & 0x00000fff) < 0x0800) { +		gpio_set_value(GPIO_PTT4, 1); +		writel(readl(GBECONT) & ~GBECONT_RMII0, GBECONT); +	} else { +		gpio_set_value(GPIO_PTT4, 0); +		writel(readl(GBECONT) & ~GBECONT_RMII1, GBECONT); +	} +} + +static struct resource sh_eth_giga0_resources[] = { +	{ +		.start  = 0xfee00000, +		.end    = 0xfee007ff, +		.flags  = IORESOURCE_MEM, +	}, { +		/* TSU */ +		.start  = 0xfee01800, +		.end    = 0xfee01fff, +		.flags  = IORESOURCE_MEM, +	}, { +		.start  = evt2irq(0x2960), +		.end    = evt2irq(0x2960), +		.flags  = IORESOURCE_IRQ, +	}, +}; + +static struct sh_eth_plat_data sh7757_eth_giga0_pdata = { +	.phy = 18, +	.edmac_endian = EDMAC_LITTLE_ENDIAN, +	.set_mdio_gate = sh7757_eth_giga_set_mdio_gate, +	.phy_interface = PHY_INTERFACE_MODE_RGMII_ID, +}; + +static struct platform_device sh7757_eth_giga0_device = { +	.name		= "sh7757-gether", +	.resource	= sh_eth_giga0_resources, +	.id		= 2, +	.num_resources	= ARRAY_SIZE(sh_eth_giga0_resources), +	.dev		= { +		.platform_data = &sh7757_eth_giga0_pdata, +	}, +}; + +static struct resource sh_eth_giga1_resources[] = { +	{ +		.start  = 0xfee00800, +		.end    = 0xfee00fff, +		.flags  = IORESOURCE_MEM, +	}, { +		/* TSU */ +		.start  = 0xfee01800, +		.end    = 0xfee01fff, +		.flags  = IORESOURCE_MEM, +	}, { +		.start  = evt2irq(0x2980), +		.end    = evt2irq(0x2980), +		.flags  = IORESOURCE_IRQ, +	}, +}; + +static struct sh_eth_plat_data sh7757_eth_giga1_pdata = { +	.phy = 19, +	.edmac_endian = EDMAC_LITTLE_ENDIAN, +	.set_mdio_gate = sh7757_eth_giga_set_mdio_gate, +	.phy_interface = PHY_INTERFACE_MODE_RGMII_ID, +}; + +static struct platform_device sh7757_eth_giga1_device = { +	.name		= "sh7757-gether", +	.resource	= sh_eth_giga1_resources, +	.id		= 3, +	.num_resources	= ARRAY_SIZE(sh_eth_giga1_resources), +	.dev		= { +		.platform_data = &sh7757_eth_giga1_pdata, +	}, +}; + +/* Fixed 3.3V regulator to be used by SDHI0, MMCIF */ +static struct regulator_consumer_supply fixed3v3_power_consumers[] = +{ +	REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), +	REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), +	REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"), +	REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"), +}; + +/* SH_MMCIF */ +static struct resource sh_mmcif_resources[] = { +	[0] = { +		.start	= 0xffcb0000, +		.end	= 0xffcb00ff, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= evt2irq(0x1c60), +		.flags	= IORESOURCE_IRQ, +	}, +	[2] = { +		.start	= evt2irq(0x1c80), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct sh_mmcif_plat_data sh_mmcif_plat = { +	.sup_pclk	= 0x0f, +	.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA | +			  MMC_CAP_NONREMOVABLE, +	.ocr		= MMC_VDD_32_33 | MMC_VDD_33_34, +	.slave_id_tx	= SHDMA_SLAVE_MMCIF_TX, +	.slave_id_rx	= SHDMA_SLAVE_MMCIF_RX, +}; + +static struct platform_device sh_mmcif_device = { +	.name		= "sh_mmcif", +	.id		= 0, +	.dev		= { +		.platform_data		= &sh_mmcif_plat, +	}, +	.num_resources	= ARRAY_SIZE(sh_mmcif_resources), +	.resource	= sh_mmcif_resources, +}; + +/* SDHI0 */ +static struct sh_mobile_sdhi_info sdhi_info = { +	.dma_slave_tx	= SHDMA_SLAVE_SDHI_TX, +	.dma_slave_rx	= SHDMA_SLAVE_SDHI_RX, +	.tmio_caps	= MMC_CAP_SD_HIGHSPEED, +}; + +static struct resource sdhi_resources[] = { +	[0] = { +		.start  = 0xffe50000, +		.end    = 0xffe500ff, +		.flags  = IORESOURCE_MEM, +	}, +	[1] = { +		.start  = evt2irq(0x480), +		.flags  = IORESOURCE_IRQ, +	}, +}; + +static struct platform_device sdhi_device = { +	.name           = "sh_mobile_sdhi", +	.num_resources  = ARRAY_SIZE(sdhi_resources), +	.resource       = sdhi_resources, +	.id             = 0, +	.dev	= { +		.platform_data	= &sdhi_info, +	}, +}; + +static int usbhs0_get_id(struct platform_device *pdev) +{ +	return USBHS_GADGET; +} + +static struct renesas_usbhs_platform_info usb0_data = { +	.platform_callback = { +		.get_id = usbhs0_get_id, +	}, +	.driver_param = { +		.buswait_bwait = 5, +	} +}; + +static struct resource usb0_resources[] = { +	[0] = { +		.start	= 0xfe450000, +		.end	= 0xfe4501ff, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= evt2irq(0x840), +		.end	= evt2irq(0x840), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device usb0_device = { +	.name		= "renesas_usbhs", +	.id		= 0, +	.dev = { +		.platform_data		= &usb0_data, +	}, +	.num_resources	= ARRAY_SIZE(usb0_resources), +	.resource	= usb0_resources, +}; +  static struct platform_device *sh7757lcr_devices[] __initdata = {  	&heartbeat_device,  	&sh7757_eth0_device,  	&sh7757_eth1_device, +	&sh7757_eth_giga0_device, +	&sh7757_eth_giga1_device, +	&sh_mmcif_device, +	&sdhi_device, +	&usb0_device, +}; + +static struct flash_platform_data spi_flash_data = { +	.name = "m25p80", +	.type = "m25px64", +}; + +static struct spi_board_info spi_board_info[] = { +	{ +		.modalias = "m25p80", +		.max_speed_hz = 25000000, +		.bus_num = 0, +		.chip_select = 1, +		.platform_data = &spi_flash_data, +	},  };  static int __init sh7757lcr_devices_setup(void)  { +	regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers, +				     ARRAY_SIZE(fixed3v3_power_consumers), 3300000); +  	/* RGMII (PTA) */  	gpio_request(GPIO_FN_ET0_MDC, NULL);  	gpio_request(GPIO_FN_ET0_MDIO, NULL); @@ -332,6 +565,10 @@ static int __init sh7757lcr_devices_setup(void)  	gpio_request(GPIO_PTT5, NULL);		/* eMMC_PRST# */  	gpio_direction_output(GPIO_PTT5, 1); +	/* register SPI device information */ +	spi_register_board_info(spi_board_info, +				ARRAY_SIZE(spi_board_info)); +  	/* General platform */  	return platform_add_devices(sh7757lcr_devices,  				    ARRAY_SIZE(sh7757lcr_devices)); diff --git a/arch/sh/boards/board-sh7785lcr.c b/arch/sh/boards/board-sh7785lcr.c index fe7e686c94a..2c4771ee84c 100644 --- a/arch/sh/boards/board-sh7785lcr.c +++ b/arch/sh/boards/board-sh7785lcr.c @@ -20,6 +20,7 @@  #include <linux/i2c-pca-platform.h>  #include <linux/i2c-algo-pca.h>  #include <linux/usb/r8a66597.h> +#include <linux/sh_intc.h>  #include <linux/irq.h>  #include <linux/io.h>  #include <linux/clk.h> @@ -28,6 +29,7 @@  #include <cpu/sh7785.h>  #include <asm/heartbeat.h>  #include <asm/clock.h> +#include <asm/bl_bit.h>  /*   * NOTE: This board has 2 physical memory maps. @@ -104,8 +106,8 @@ static struct resource r8a66597_usb_host_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 2, -		.end	= 2, +		.start	= evt2irq(0x240), +		.end	= evt2irq(0x240),  		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,  	},  }; @@ -134,7 +136,7 @@ static struct resource sm501_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[2]	= { -		.start	= 10, +		.start	= evt2irq(0x340),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -222,8 +224,8 @@ static struct resource i2c_proto_resources[] = {  		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_8BIT,  	},  	[1] = { -		.start	= 12, -		.end	= 12, +		.start	= evt2irq(0x380), +		.end	= evt2irq(0x380),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -235,8 +237,8 @@ static struct resource i2c_resources[] = {  		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_8BIT,  	},  	[1] = { -		.start	= 12, -		.end	= 12, +		.start	= evt2irq(0x380), +		.end	= evt2irq(0x380),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -284,7 +286,7 @@ static int __init sh7785lcr_devices_setup(void)  	return platform_add_devices(sh7785lcr_devices,  				    ARRAY_SIZE(sh7785lcr_devices));  } -__initcall(sh7785lcr_devices_setup); +device_initcall(sh7785lcr_devices_setup);  /* Initialize IRQ setting */  void __init init_sh7785lcr_IRQ(void) @@ -299,7 +301,7 @@ static int sh7785lcr_clk_init(void)  	int ret;  	clk = clk_get(NULL, "extal"); -	if (!clk || IS_ERR(clk)) +	if (IS_ERR(clk))  		return PTR_ERR(clk);  	ret = clk_set_rate(clk, 33333333);  	clk_put(clk); diff --git a/arch/sh/boards/board-urquell.c b/arch/sh/boards/board-urquell.c index d81c609decc..b52abcc5259 100644 --- a/arch/sh/boards/board-urquell.c +++ b/arch/sh/boards/board-urquell.c @@ -20,6 +20,7 @@  #include <linux/gpio.h>  #include <linux/irq.h>  #include <linux/clk.h> +#include <linux/sh_intc.h>  #include <mach/urquell.h>  #include <cpu/sh7786.h>  #include <asm/heartbeat.h> @@ -78,7 +79,7 @@ static struct resource smc91x_eth_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 11, +		.start  = evt2irq(0x360),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -190,7 +191,7 @@ static int urquell_clk_init(void)  		return -EINVAL;  	clk = clk_get(NULL, "extal"); -	if (!clk || IS_ERR(clk)) +	if (IS_ERR(clk))  		return PTR_ERR(clk);  	ret = clk_set_rate(clk, 33333333);  	clk_put(clk); diff --git a/arch/sh/boards/mach-ap325rxa/setup.c b/arch/sh/boards/mach-ap325rxa/setup.c index 07ea908c510..5620e33c18a 100644 --- a/arch/sh/boards/mach-ap325rxa/setup.c +++ b/arch/sh/boards/mach-ap325rxa/setup.c @@ -14,12 +14,18 @@  #include <linux/device.h>  #include <linux/interrupt.h>  #include <linux/platform_device.h> +#include <linux/mmc/host.h> +#include <linux/mmc/sh_mobile_sdhi.h>  #include <linux/mtd/physmap.h>  #include <linux/mtd/sh_flctl.h>  #include <linux/delay.h>  #include <linux/i2c.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/smsc911x.h>  #include <linux/gpio.h> +#include <linux/videodev2.h> +#include <linux/sh_intc.h>  #include <media/ov772x.h>  #include <media/soc_camera.h>  #include <media/soc_camera_platform.h> @@ -30,6 +36,12 @@  #include <asm/suspend.h>  #include <cpu/sh7723.h> +/* Dummy supplies, where voltage doesn't matter */ +static struct regulator_consumer_supply dummy_supplies[] = { +	REGULATOR_SUPPLY("vddvario", "smsc911x"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x"), +}; +  static struct smsc911x_platform_config smsc911x_config = {  	.phy_interface	= PHY_INTERFACE_MODE_MII,  	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW, @@ -44,8 +56,8 @@ static struct resource smsc9118_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 35, -		.end	= 35, +		.start	= evt2irq(0x660), +		.end	= evt2irq(0x660),  		.flags	= IORESOURCE_IRQ,  	}  }; @@ -154,29 +166,34 @@ static struct platform_device nand_flash_device = {  #define PORT_DRVCRA	0xA405018A  #define PORT_DRVCRB	0xA405018C -static void ap320_wvga_power_on(void *board_data, struct fb_info *info) +static int ap320_wvga_set_brightness(int brightness) +{ +	if (brightness) { +		gpio_set_value(GPIO_PTS3, 0); +		__raw_writew(0x100, FPGA_BKLREG); +	} else { +		__raw_writew(0, FPGA_BKLREG); +		gpio_set_value(GPIO_PTS3, 1); +	} + +	return 0; +} + +static void ap320_wvga_power_on(void)  {  	msleep(100);  	/* ASD AP-320/325 LCD ON */  	__raw_writew(FPGA_LCDREG_VAL, FPGA_LCDREG); - -	/* backlight */ -	gpio_set_value(GPIO_PTS3, 0); -	__raw_writew(0x100, FPGA_BKLREG);  } -static void ap320_wvga_power_off(void *board_data) +static void ap320_wvga_power_off(void)  { -	/* backlight */ -	__raw_writew(0, FPGA_BKLREG); -	gpio_set_value(GPIO_PTS3, 1); -  	/* ASD AP-320/325 LCD OFF */  	__raw_writew(0, FPGA_LCDREG);  } -const static struct fb_videomode ap325rxa_lcdc_modes[] = { +static const struct fb_videomode ap325rxa_lcdc_modes[] = {  	{  		.name = "LB070WV1",  		.xres = 800, @@ -195,19 +212,22 @@ static struct sh_mobile_lcdc_info lcdc_info = {  	.clock_source = LCDC_CLK_EXTERNAL,  	.ch[0] = {  		.chan = LCDC_CHAN_MAINLCD, -		.bpp = 16, +		.fourcc = V4L2_PIX_FMT_RGB565,  		.interface_type = RGB18,  		.clock_divider = 1, -		.lcd_cfg = ap325rxa_lcdc_modes, -		.num_cfg = ARRAY_SIZE(ap325rxa_lcdc_modes), -		.lcd_size_cfg = { /* 7.0 inch */ -			.width = 152, +		.lcd_modes = ap325rxa_lcdc_modes, +		.num_modes = ARRAY_SIZE(ap325rxa_lcdc_modes), +		.panel_cfg = { +			.width = 152,	/* 7.0 inch */  			.height = 91, -		}, -		.board_cfg = {  			.display_on = ap320_wvga_power_on,  			.display_off = ap320_wvga_power_off,  		}, +		.bl_info = { +			.name = "sh_mobile_lcdc_bl", +			.max_brightness = 1, +			.set_brightness = ap320_wvga_set_brightness, +		},  	}  }; @@ -219,7 +239,7 @@ static struct resource lcdc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 28, +		.start	= evt2irq(0x580),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -231,9 +251,6 @@ static struct platform_device lcdc_device = {  	.dev		= {  		.platform_data	= &lcdc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_LCDC, -	},  };  static void camera_power(int val) @@ -314,8 +331,8 @@ static int camera_set_capture(struct soc_camera_platform_info *info,  	return ret;  } -static int ap325rxa_camera_add(struct soc_camera_link *icl, struct device *dev); -static void ap325rxa_camera_del(struct soc_camera_link *icl); +static int ap325rxa_camera_add(struct soc_camera_device *icd); +static void ap325rxa_camera_del(struct soc_camera_device *icd);  static struct soc_camera_platform_info camera_info = {  	.format_name = "UYVY", @@ -327,9 +344,10 @@ static struct soc_camera_platform_info camera_info = {  		.width = 640,  		.height = 480,  	}, -	.bus_param = SOCAM_PCLK_SAMPLE_RISING | SOCAM_HSYNC_ACTIVE_HIGH | -	SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_MASTER | SOCAM_DATAWIDTH_8 | -	SOCAM_DATA_ACTIVE_HIGH, +	.mbus_param = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER | +	V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH | +	V4L2_MBUS_DATA_ACTIVE_HIGH, +	.mbus_type = V4L2_MBUS_PARALLEL,  	.set_capture = camera_set_capture,  }; @@ -341,37 +359,30 @@ static struct soc_camera_link camera_link = {  	.priv		= &camera_info,  }; -static void dummy_release(struct device *dev) +static struct platform_device *camera_device; + +static void ap325rxa_camera_release(struct device *dev)  { +	soc_camera_platform_release(&camera_device);  } -static struct platform_device camera_device = { -	.name		= "soc_camera_platform", -	.dev		= { -		.platform_data	= &camera_info, -		.release	= dummy_release, -	}, -}; - -static int ap325rxa_camera_add(struct soc_camera_link *icl, -			       struct device *dev) +static int ap325rxa_camera_add(struct soc_camera_device *icd)  { -	if (icl != &camera_link || camera_probe() <= 0) -		return -ENODEV; +	int ret = soc_camera_platform_add(icd, &camera_device, &camera_link, +					  ap325rxa_camera_release, 0); +	if (ret < 0) +		return ret; -	camera_info.dev = dev; +	ret = camera_probe(); +	if (ret < 0) +		soc_camera_platform_del(icd, camera_device, &camera_link); -	return platform_device_register(&camera_device); +	return ret;  } -static void ap325rxa_camera_del(struct soc_camera_link *icl) +static void ap325rxa_camera_del(struct soc_camera_device *icd)  { -	if (icl != &camera_link) -		return; - -	platform_device_unregister(&camera_device); -	memset(&camera_device.dev.kobj, 0, -	       sizeof(camera_device.dev.kobj)); +	soc_camera_platform_del(icd, camera_device, &camera_link);  }  #endif /* CONFIG_I2C */ @@ -396,7 +407,7 @@ static struct resource ceu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start  = 52, +		.start  = evt2irq(0x880),  		.flags  = IORESOURCE_IRQ,  	},  	[2] = { @@ -412,31 +423,41 @@ static struct platform_device ceu_device = {  	.dev		= {  		.platform_data	= &sh_mobile_ceu_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_CEU, -	}, +}; + +/* Fixed 3.3V regulators to be used by SDHI0, SDHI1 */ +static struct regulator_consumer_supply fixed3v3_power_consumers[] = +{ +	REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), +	REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), +	REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), +	REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),  };  static struct resource sdhi0_cn3_resources[] = {  	[0] = {  		.name	= "SDHI0",  		.start	= 0x04ce0000, -		.end	= 0x04ce01ff, +		.end	= 0x04ce00ff,  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 100, +		.start	= evt2irq(0xe80),  		.flags  = IORESOURCE_IRQ,  	},  }; +static struct sh_mobile_sdhi_info sdhi0_cn3_data = { +	.tmio_caps      = MMC_CAP_SDIO_IRQ, +}; +  static struct platform_device sdhi0_cn3_device = {  	.name		= "sh_mobile_sdhi",  	.id             = 0, /* "sdhi0" clock */  	.num_resources	= ARRAY_SIZE(sdhi0_cn3_resources),  	.resource	= sdhi0_cn3_resources, -	.archdata = { -		.hwblk_id = HWBLK_SDHI0, +	.dev = { +		.platform_data = &sdhi0_cn3_data,  	},  }; @@ -444,22 +465,26 @@ static struct resource sdhi1_cn7_resources[] = {  	[0] = {  		.name	= "SDHI1",  		.start	= 0x04cf0000, -		.end	= 0x04cf01ff, +		.end	= 0x04cf00ff,  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 23, +		.start	= evt2irq(0x4e0),  		.flags  = IORESOURCE_IRQ,  	},  }; +static struct sh_mobile_sdhi_info sdhi1_cn7_data = { +	.tmio_caps      = MMC_CAP_SDIO_IRQ, +}; +  static struct platform_device sdhi1_cn7_device = {  	.name		= "sh_mobile_sdhi",  	.id             = 1, /* "sdhi1" clock */  	.num_resources	= ARRAY_SIZE(sdhi1_cn7_resources),  	.resource	= sdhi1_cn7_resources, -	.archdata = { -		.hwblk_id = HWBLK_SDHI1, +	.dev = { +		.platform_data = &sdhi1_cn7_data,  	},  }; @@ -476,8 +501,7 @@ static struct i2c_board_info ap325rxa_i2c_camera[] = {  };  static struct ov772x_camera_info ov7725_info = { -	.flags		= OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP | \ -			  OV772X_FLAG_8BIT, +	.flags		= OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP,  	.edgectrl	= OV772X_AUTO_EDGECTRL(0xf, 0),  }; @@ -531,6 +555,10 @@ static int __init ap325rxa_devices_setup(void)  					&ap325rxa_sdram_leave_start,  					&ap325rxa_sdram_leave_end); +	regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers, +				     ARRAY_SIZE(fixed3v3_power_consumers), 3300000); +	regulator_register_fixed(1, dummy_supplies, ARRAY_SIZE(dummy_supplies)); +  	/* LD3 and LD4 LEDs */  	gpio_request(GPIO_PTX5, NULL); /* RUN */  	gpio_direction_output(GPIO_PTX5, 1); diff --git a/arch/sh/boards/mach-cayman/irq.c b/arch/sh/boards/mach-cayman/irq.c index d7ac5af9d10..724e8b7271f 100644 --- a/arch/sh/boards/mach-cayman/irq.c +++ b/arch/sh/boards/mach-cayman/irq.c @@ -46,13 +46,11 @@ static irqreturn_t cayman_interrupt_pci2(int irq, void *dev_id)  static struct irqaction cayman_action_smsc = {  	.name		= "Cayman SMSC Mux",  	.handler	= cayman_interrupt_smsc, -	.flags		= IRQF_DISABLED,  };  static struct irqaction cayman_action_pci2 = {  	.name		= "Cayman PCI2 Mux",  	.handler	= cayman_interrupt_pci2, -	.flags		= IRQF_DISABLED,  };  static void enable_cayman_irq(struct irq_data *data) @@ -149,8 +147,8 @@ void init_cayman_irq(void)  	}  	for (i = 0; i < NR_EXT_IRQS; i++) { -		set_irq_chip_and_handler(START_EXT_IRQS + i, &cayman_irq_type, -					 handle_level_irq); +		irq_set_chip_and_handler(START_EXT_IRQS + i, +					 &cayman_irq_type, handle_level_irq);  	}  	/* Setup the SMSC interrupt */ diff --git a/arch/sh/boards/mach-cayman/setup.c b/arch/sh/boards/mach-cayman/setup.c index 7e8216ac31b..340fd40b381 100644 --- a/arch/sh/boards/mach-cayman/setup.c +++ b/arch/sh/boards/mach-cayman/setup.c @@ -165,7 +165,7 @@ static int __init smsc_superio_setup(void)  	return 0;  } -__initcall(smsc_superio_setup); +device_initcall(smsc_superio_setup);  static void __iomem *cayman_ioport_map(unsigned long port, unsigned int len)  { @@ -181,7 +181,6 @@ extern void init_cayman_irq(void);  static struct sh_machine_vector mv_cayman __initmv = {  	.mv_name		= "Hitachi Cayman", -	.mv_nr_irqs		= 64,  	.mv_ioport_map		= cayman_ioport_map,  	.mv_init_irq		= init_cayman_irq,  }; diff --git a/arch/sh/boards/mach-dreamcast/irq.c b/arch/sh/boards/mach-dreamcast/irq.c index 72e7ac9549d..2789647abeb 100644 --- a/arch/sh/boards/mach-dreamcast/irq.c +++ b/arch/sh/boards/mach-dreamcast/irq.c @@ -8,10 +8,11 @@   * This file is part of the LinuxDC project (www.linuxdc.org)   * Released under the terms of the GNU GPL v2.0   */ -  #include <linux/irq.h>  #include <linux/io.h> -#include <asm/irq.h> +#include <linux/irq.h> +#include <linux/export.h> +#include <linux/err.h>  #include <mach/sysasic.h>  /* @@ -51,7 +52,7 @@   */  #define LEVEL(event) (((event) - HW_EVENT_IRQ_BASE) / 32) -/* Return the hardware event's bit positon within the EMR/ESR */ +/* Return the hardware event's bit position within the EMR/ESR */  #define EVENT_BIT(event) (((event) - HW_EVENT_IRQ_BASE) & 31)  /* @@ -141,27 +142,15 @@ int systemasic_irq_demux(int irq)  void systemasic_irq_init(void)  { -	int i, nid = cpu_to_node(boot_cpu_data); - -	/* Assign all virtual IRQs to the System ASIC int. handler */ -	for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++) { -		unsigned int irq; - -		irq = create_irq_nr(i, nid); -		if (unlikely(irq == 0)) { -			pr_err("%s: failed hooking irq %d for systemasic\n", -			       __func__, i); -			return; -		} - -		if (unlikely(irq != i)) { -			pr_err("%s: got irq %d but wanted %d, bailing.\n", -			       __func__, irq, i); -			destroy_irq(irq); -			return; -		} +	int irq_base, i; -		set_irq_chip_and_handler(i, &systemasic_int, -					 handle_level_irq); +	irq_base = irq_alloc_descs(HW_EVENT_IRQ_BASE, HW_EVENT_IRQ_BASE, +				   HW_EVENT_IRQ_MAX - HW_EVENT_IRQ_BASE, -1); +	if (IS_ERR_VALUE(irq_base)) { +		pr_err("%s: failed hooking irqs\n", __func__); +		return;  	} + +	for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++) +		irq_set_chip_and_handler(i, &systemasic_int, handle_level_irq);  } diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index 2eaeb9e5958..85d5255d259 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c @@ -11,15 +11,19 @@  #include <linux/init.h>  #include <linux/device.h>  #include <linux/platform_device.h> -#include <linux/mfd/sh_mobile_sdhi.h>  #include <linux/mmc/host.h>  #include <linux/mmc/sh_mmcif.h> +#include <linux/mmc/sh_mobile_sdhi.h>  #include <linux/mtd/physmap.h> +#include <linux/mfd/tmio.h>  #include <linux/gpio.h>  #include <linux/interrupt.h>  #include <linux/io.h>  #include <linux/delay.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/usb/r8a66597.h> +#include <linux/usb/renesas_usbhs.h>  #include <linux/i2c.h>  #include <linux/i2c/tsc2007.h>  #include <linux/spi/spi.h> @@ -27,13 +31,18 @@  #include <linux/spi/mmc_spi.h>  #include <linux/input.h>  #include <linux/input/sh_keysc.h> +#include <linux/platform_data/gpio_backlight.h> +#include <linux/sh_eth.h> +#include <linux/sh_intc.h> +#include <linux/videodev2.h>  #include <video/sh_mobile_lcdc.h>  #include <sound/sh_fsi.h> +#include <sound/simple_card.h>  #include <media/sh_mobile_ceu.h> +#include <media/soc_camera.h>  #include <media/tw9910.h>  #include <media/mt9t112.h>  #include <asm/heartbeat.h> -#include <asm/sh_eth.h>  #include <asm/clock.h>  #include <asm/suspend.h>  #include <cpu/sh7724.h> @@ -63,6 +72,16 @@   *                                  OFF-ON : MMC   */ +/* + * FSI - DA7210 + * + * it needs amixer settings for playing + * + * amixer set 'HeadPhone' 80 + * amixer set 'Out Mixer Left DAC Left' on + * amixer set 'Out Mixer Right DAC Right' on + */ +  /* Heartbeat */  static unsigned char led_pos[] = { 0, 1, 2, 3 }; @@ -134,7 +153,7 @@ static struct resource sh_eth_resources[] = {  		.flags = IORESOURCE_MEM,  	},  	[1] = { -		.start = 91, +		.start = evt2irq(0xd60),  		.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,  	},  }; @@ -142,20 +161,18 @@ static struct resource sh_eth_resources[] = {  static struct sh_eth_plat_data sh_eth_plat = {  	.phy = 0x1f, /* SMSC LAN8700 */  	.edmac_endian = EDMAC_LITTLE_ENDIAN, +	.phy_interface = PHY_INTERFACE_MODE_MII,  	.ether_link_active_low = 1  };  static struct platform_device sh_eth_device = { -	.name = "sh-eth", -	.id	= 0, +	.name = "sh7724-ether", +	.id = 0,  	.dev = {  		.platform_data = &sh_eth_plat,  	},  	.num_resources = ARRAY_SIZE(sh_eth_resources),  	.resource = sh_eth_resources, -	.archdata = { -		.hwblk_id = HWBLK_ETHER, -	},  };  /* USB0 host */ @@ -176,8 +193,8 @@ static struct resource usb0_host_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 65, -		.end	= 65, +		.start	= evt2irq(0xa20), +		.end	= evt2irq(0xa20),  		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,  	},  }; @@ -212,8 +229,8 @@ static struct resource usb1_common_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 66, -		.end	= 66, +		.start	= evt2irq(0xa40), +		.end	= evt2irq(0xa40),  		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,  	},  }; @@ -230,8 +247,65 @@ static struct platform_device usb1_common_device = {  	.resource	= usb1_common_resources,  }; -/* LCDC */ -const static struct fb_videomode ecovec_lcd_modes[] = { +/* + * USBHS + */ +static int usbhs_get_id(struct platform_device *pdev) +{ +	return gpio_get_value(GPIO_PTB3); +} + +static int usbhs_phy_reset(struct platform_device *pdev) +{ +	/* enable vbus if HOST */ +	if (!gpio_get_value(GPIO_PTB3)) +		gpio_set_value(GPIO_PTB5, 1); + +	return 0; +} + +static struct renesas_usbhs_platform_info usbhs_info = { +	.platform_callback = { +		.get_id		= usbhs_get_id, +		.phy_reset	= usbhs_phy_reset, +	}, +	.driver_param = { +		.buswait_bwait		= 4, +		.detection_delay	= 5, +		.d0_tx_id = SHDMA_SLAVE_USB1D0_TX, +		.d0_rx_id = SHDMA_SLAVE_USB1D0_RX, +		.d1_tx_id = SHDMA_SLAVE_USB1D1_TX, +		.d1_rx_id = SHDMA_SLAVE_USB1D1_RX, +	}, +}; + +static struct resource usbhs_resources[] = { +	[0] = { +		.start	= 0xa4d90000, +		.end	= 0xa4d90124 - 1, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= evt2irq(0xa40), +		.end	= evt2irq(0xa40), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device usbhs_device = { +	.name	= "renesas_usbhs", +	.id	= 1, +	.dev = { +		.dma_mask		= NULL,         /*  not use dma */ +		.coherent_dma_mask	= 0xffffffff, +		.platform_data		= &usbhs_info, +	}, +	.num_resources	= ARRAY_SIZE(usbhs_resources), +	.resource	= usbhs_resources, +}; + +/* LCDC and backlight */ +static const struct fb_videomode ecovec_lcd_modes[] = {  	{  		.name		= "Panel",  		.xres		= 800, @@ -246,7 +320,7 @@ const static struct fb_videomode ecovec_lcd_modes[] = {  	},  }; -const static struct fb_videomode ecovec_dvi_modes[] = { +static const struct fb_videomode ecovec_dvi_modes[] = {  	{  		.name		= "DVI",  		.xres		= 1280, @@ -265,13 +339,11 @@ static struct sh_mobile_lcdc_info lcdc_info = {  	.ch[0] = {  		.interface_type = RGB18,  		.chan = LCDC_CHAN_MAINLCD, -		.bpp = 16, -		.lcd_size_cfg = { /* 7.0 inch */ +		.fourcc = V4L2_PIX_FMT_RGB565, +		.panel_cfg = { /* 7.0 inch */  			.width = 152,  			.height = 91,  		}, -		.board_cfg = { -		},  	}  }; @@ -283,7 +355,7 @@ static struct resource lcdc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 106, +		.start	= evt2irq(0xf40),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -295,8 +367,19 @@ static struct platform_device lcdc_device = {  	.dev		= {  		.platform_data	= &lcdc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_LCDC, +}; + +static struct gpio_backlight_platform_data gpio_backlight_data = { +	.fbdev = &lcdc_device.dev, +	.gpio = GPIO_PTR1, +	.def_value = 1, +	.name = "backlight", +}; + +static struct platform_device gpio_backlight_device = { +	.name = "gpio-backlight", +	.dev = { +		.platform_data = &gpio_backlight_data,  	},  }; @@ -313,7 +396,7 @@ static struct resource ceu0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start  = 52, +		.start  = evt2irq(0x880),  		.flags  = IORESOURCE_IRQ,  	},  	[2] = { @@ -329,9 +412,6 @@ static struct platform_device ceu0_device = {  	.dev	= {  		.platform_data	= &sh_mobile_ceu0_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_CEU0, -	},  };  /* CEU1 */ @@ -347,7 +427,7 @@ static struct resource ceu1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start  = 63, +		.start  = evt2irq(0x9e0),  		.flags  = IORESOURCE_IRQ,  	},  	[2] = { @@ -363,9 +443,6 @@ static struct platform_device ceu1_device = {  	.dev	= {  		.platform_data	= &sh_mobile_ceu1_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_CEU1, -	},  };  /* I2C device */ @@ -381,7 +458,7 @@ static struct i2c_board_info i2c1_devices[] = {  	},  	{  		I2C_BOARD_INFO("lis3lv02d", 0x1c), -		.irq = 33, +		.irq = evt2irq(0x620),  	}  }; @@ -407,7 +484,7 @@ static struct resource keysc_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 79, +		.start  = evt2irq(0xbe0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -420,14 +497,12 @@ static struct platform_device keysc_device = {  	.dev	= {  		.platform_data	= &keysc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_KEYSC, -	},  };  /* TouchScreen */ -#define IRQ0 32 -static int ts_get_pendown_state(void) +#define IRQ0 evt2irq(0x600) + +static int ts_get_pendown_state(struct device *dev)  {  	int val = 0;  	gpio_free(GPIO_FN_INTC_IRQ0); @@ -462,28 +537,88 @@ static struct i2c_board_info ts_i2c_clients = {  	.irq		= IRQ0,  }; -#ifdef CONFIG_MFD_SH_MOBILE_SDHI +static struct regulator_consumer_supply cn12_power_consumers[] = +{ +	REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"), +	REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"), +	REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), +	REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"), +}; + +static struct regulator_init_data cn12_power_init_data = { +	.constraints = { +		.valid_ops_mask = REGULATOR_CHANGE_STATUS, +	}, +	.num_consumer_supplies  = ARRAY_SIZE(cn12_power_consumers), +	.consumer_supplies      = cn12_power_consumers, +}; + +static struct fixed_voltage_config cn12_power_info = { +	.supply_name = "CN12 SD/MMC Vdd", +	.microvolts = 3300000, +	.gpio = GPIO_PTB7, +	.enable_high = 1, +	.init_data = &cn12_power_init_data, +}; + +static struct platform_device cn12_power = { +	.name = "reg-fixed-voltage", +	.id   = 0, +	.dev  = { +		.platform_data = &cn12_power_info, +	}, +}; + +#if defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE)  /* SDHI0 */ -static void sdhi0_set_pwr(struct platform_device *pdev, int state) +static struct regulator_consumer_supply sdhi0_power_consumers[] =  { -	gpio_set_value(GPIO_PTB6, state); -} +	REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), +	REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), +}; + +static struct regulator_init_data sdhi0_power_init_data = { +	.constraints = { +		.valid_ops_mask = REGULATOR_CHANGE_STATUS, +	}, +	.num_consumer_supplies  = ARRAY_SIZE(sdhi0_power_consumers), +	.consumer_supplies      = sdhi0_power_consumers, +}; + +static struct fixed_voltage_config sdhi0_power_info = { +	.supply_name = "CN11 SD/MMC Vdd", +	.microvolts = 3300000, +	.gpio = GPIO_PTB6, +	.enable_high = 1, +	.init_data = &sdhi0_power_init_data, +}; + +static struct platform_device sdhi0_power = { +	.name = "reg-fixed-voltage", +	.id   = 1, +	.dev  = { +		.platform_data = &sdhi0_power_info, +	}, +};  static struct sh_mobile_sdhi_info sdhi0_info = {  	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX,  	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX, -	.set_pwr	= sdhi0_set_pwr, +	.tmio_caps      = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD | +			  MMC_CAP_NEEDS_POLL, +	.tmio_flags	= TMIO_MMC_USE_GPIO_CD, +	.cd_gpio	= GPIO_PTY7,  };  static struct resource sdhi0_resources[] = {  	[0] = {  		.name	= "SDHI0",  		.start  = 0x04ce0000, -		.end    = 0x04ce01ff, +		.end    = 0x04ce00ff,  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 100, +		.start  = evt2irq(0xe80),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -496,33 +631,28 @@ static struct platform_device sdhi0_device = {  	.dev	= {  		.platform_data	= &sdhi0_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_SDHI0, -	},  }; -#if !defined(CONFIG_MMC_SH_MMCIF) +#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)  /* SDHI1 */ -static void sdhi1_set_pwr(struct platform_device *pdev, int state) -{ -	gpio_set_value(GPIO_PTB7, state); -} -  static struct sh_mobile_sdhi_info sdhi1_info = {  	.dma_slave_tx	= SHDMA_SLAVE_SDHI1_TX,  	.dma_slave_rx	= SHDMA_SLAVE_SDHI1_RX, -	.set_pwr	= sdhi1_set_pwr, +	.tmio_caps      = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD | +			  MMC_CAP_NEEDS_POLL, +	.tmio_flags	= TMIO_MMC_USE_GPIO_CD, +	.cd_gpio	= GPIO_PTW7,  };  static struct resource sdhi1_resources[] = {  	[0] = {  		.name	= "SDHI1",  		.start  = 0x04cf0000, -		.end    = 0x04cf01ff, +		.end    = 0x04cf00ff,  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 23, +		.start  = evt2irq(0x4e0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -535,36 +665,25 @@ static struct platform_device sdhi1_device = {  	.dev	= {  		.platform_data	= &sdhi1_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_SDHI1, -	},  };  #endif /* CONFIG_MMC_SH_MMCIF */  #else  /* MMC SPI */ -static int mmc_spi_get_ro(struct device *dev) -{ -	return gpio_get_value(GPIO_PTY6); -} - -static int mmc_spi_get_cd(struct device *dev) -{ -	return !gpio_get_value(GPIO_PTY7); -} -  static void mmc_spi_setpower(struct device *dev, unsigned int maskval)  {  	gpio_set_value(GPIO_PTB6, maskval ? 1 : 0);  }  static struct mmc_spi_platform_data mmc_spi_info = { -	.get_ro = mmc_spi_get_ro, -	.get_cd = mmc_spi_get_cd,  	.caps = MMC_CAP_NEEDS_POLL, +	.caps2 = MMC_CAP2_RO_ACTIVE_HIGH,  	.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3.3V only */  	.setpower = mmc_spi_setpower, +	.flags = MMC_SPI_USE_CD_GPIO | MMC_SPI_USE_RO_GPIO, +	.cd_gpio = GPIO_PTY7, +	.ro_gpio = GPIO_PTY6,  };  static struct spi_board_info spi_bus[] = { @@ -590,7 +709,7 @@ static struct resource msiof0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 84, +		.start	= evt2irq(0xc80),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -603,9 +722,6 @@ static struct platform_device msiof0_device = {  	},  	.num_resources	= ARRAY_SIZE(msiof0_resources),  	.resource	= msiof0_resources, -	.archdata = { -		.hwblk_id = HWBLK_MSIOF0, -	},  };  #endif @@ -720,40 +836,6 @@ static struct platform_device camera_devices[] = {  };  /* FSI */ -/* - * FSI-B use external clock which came from da7210. - * So, we should change parent of fsi - */ -#define FCLKBCR		0xa415000c -static void fsimck_init(struct clk *clk) -{ -	u32 status = __raw_readl(clk->enable_reg); - -	/* use external clock */ -	status &= ~0x000000ff; -	status |= 0x00000080; - -	__raw_writel(status, clk->enable_reg); -} - -static struct clk_ops fsimck_clk_ops = { -	.init = fsimck_init, -}; - -static struct clk fsimckb_clk = { -	.ops		= &fsimck_clk_ops, -	.enable_reg	= (void __iomem *)FCLKBCR, -	.rate		= 0, /* unknown */ -}; - -static struct sh_fsi_platform_info fsi_info = { -	.portb_flags = SH_FSI_BRS_INV | -		       SH_FSI_OUT_SLAVE_MODE | -		       SH_FSI_IN_SLAVE_MODE | -		       SH_FSI_OFMT(I2S) | -		       SH_FSI_IFMT(I2S), -}; -  static struct resource fsi_resources[] = {  	[0] = {  		.name	= "FSI", @@ -762,7 +844,7 @@ static struct resource fsi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start  = 108, +		.start  = evt2irq(0xf80),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -772,14 +854,30 @@ static struct platform_device fsi_device = {  	.id		= 0,  	.num_resources	= ARRAY_SIZE(fsi_resources),  	.resource	= fsi_resources, -	.dev	= { -		.platform_data	= &fsi_info, +}; + +static struct asoc_simple_card_info fsi_da7210_info = { +	.name		= "DA7210", +	.card		= "FSIB-DA7210", +	.codec		= "da7210.0-001a", +	.platform	= "sh_fsi.0", +	.daifmt		= SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM, +	.cpu_dai = { +		.name	= "fsib-dai", +	}, +	.codec_dai = { +		.name	= "da7210-hifi",  	}, -	.archdata = { -		.hwblk_id = HWBLK_SPU, /* FSI needs SPU hwblk */ +}; + +static struct platform_device fsi_da7210_device = { +	.name	= "asoc-simple-card", +	.dev	= { +		.platform_data	= &fsi_da7210_info,  	},  }; +  /* IrDA */  static struct resource irda_resources[] = {  	[0] = { @@ -789,7 +887,7 @@ static struct resource irda_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 20, +		.start  = evt2irq(0x480),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -826,7 +924,7 @@ static struct resource sh_vou_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 55, +		.start  = evt2irq(0x8e0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -839,23 +937,10 @@ static struct platform_device vou_device = {  	.dev		= {  		.platform_data	= &sh_vou_pdata,  	}, -	.archdata	= { -		.hwblk_id	= HWBLK_VOU, -	},  }; -#if defined(CONFIG_MMC_SH_MMCIF) +#if defined(CONFIG_MMC_SH_MMCIF) || defined(CONFIG_MMC_SH_MMCIF_MODULE)  /* SH_MMCIF */ -static void mmcif_set_pwr(struct platform_device *pdev, int state) -{ -	gpio_set_value(GPIO_PTB7, state); -} - -static void mmcif_down_pwr(struct platform_device *pdev) -{ -	gpio_set_value(GPIO_PTB7, 0); -} -  static struct resource sh_mmcif_resources[] = {  	[0] = {  		.name	= "SH_MMCIF", @@ -865,19 +950,17 @@ static struct resource sh_mmcif_resources[] = {  	},  	[1] = {  		/* MMC2I */ -		.start	= 29, +		.start	= evt2irq(0x5a0),  		.flags	= IORESOURCE_IRQ,  	},  	[2] = {  		/* MMC3I */ -		.start	= 30, +		.start	= evt2irq(0x5c0),  		.flags	= IORESOURCE_IRQ,  	},  };  static struct sh_mmcif_plat_data sh_mmcif_plat = { -	.set_pwr	= mmcif_set_pwr, -	.down_pwr	= mmcif_down_pwr,  	.sup_pclk	= 0, /* SH7724: Max Pclk/2 */  	.caps		= MMC_CAP_4_BIT_DATA |  			  MMC_CAP_8_BIT_DATA | @@ -902,13 +985,17 @@ static struct platform_device *ecovec_devices[] __initdata = {  	&sh_eth_device,  	&usb0_host_device,  	&usb1_common_device, +	&usbhs_device,  	&lcdc_device, +	&gpio_backlight_device,  	&ceu0_device,  	&ceu1_device,  	&keysc_device, -#ifdef CONFIG_MFD_SH_MOBILE_SDHI +	&cn12_power, +#if defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE) +	&sdhi0_power,  	&sdhi0_device, -#if !defined(CONFIG_MMC_SH_MMCIF) +#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)  	&sdhi1_device,  #endif  #else @@ -918,9 +1005,10 @@ static struct platform_device *ecovec_devices[] __initdata = {  	&camera_devices[1],  	&camera_devices[2],  	&fsi_device, +	&fsi_da7210_device,  	&irda_device,  	&vou_device, -#if defined(CONFIG_MMC_SH_MMCIF) +#if defined(CONFIG_MMC_SH_MMCIF) || defined(CONFIG_MMC_SH_MMCIF_MODULE)  	&sh_mmcif_device,  #endif  }; @@ -962,7 +1050,7 @@ static void __init sh_eth_init(struct sh_eth_plat_data *pd)  		return;  	} -	/* read MAC address frome EEPROM */ +	/* read MAC address from EEPROM */  	for (i = 0; i < sizeof(pd->mac_addr); i++) {  		pd->mac_addr[i] = mac_read(a, 0x10 + i);  		msleep(10); @@ -988,6 +1076,7 @@ extern char ecovec24_sdram_leave_end;  static int __init arch_setup(void)  {  	struct clk *clk; +	bool cn12_enabled = false;  	/* register board specific self-refresh code */  	sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | @@ -1089,11 +1178,9 @@ static int __init arch_setup(void)  	gpio_request(GPIO_PTE6, NULL);  	gpio_request(GPIO_PTU1, NULL); -	gpio_request(GPIO_PTR1, NULL);  	gpio_request(GPIO_PTA2, NULL);  	gpio_direction_input(GPIO_PTE6);  	gpio_direction_output(GPIO_PTU1, 0); -	gpio_direction_output(GPIO_PTR1, 0);  	gpio_direction_output(GPIO_PTA2, 0);  	/* I/O buffer drive ability is high */ @@ -1103,8 +1190,11 @@ static int __init arch_setup(void)  		/* DVI */  		lcdc_info.clock_source			= LCDC_CLK_EXTERNAL;  		lcdc_info.ch[0].clock_divider		= 1; -		lcdc_info.ch[0].lcd_cfg			= ecovec_dvi_modes; -		lcdc_info.ch[0].num_cfg			= ARRAY_SIZE(ecovec_dvi_modes); +		lcdc_info.ch[0].lcd_modes		= ecovec_dvi_modes; +		lcdc_info.ch[0].num_modes		= ARRAY_SIZE(ecovec_dvi_modes); + +		/* No backlight */ +		gpio_backlight_data.fbdev = NULL;  		gpio_set_value(GPIO_PTA2, 1);  		gpio_set_value(GPIO_PTU1, 1); @@ -1112,10 +1202,8 @@ static int __init arch_setup(void)  		/* Panel */  		lcdc_info.clock_source			= LCDC_CLK_PERIPHERAL;  		lcdc_info.ch[0].clock_divider		= 2; -		lcdc_info.ch[0].lcd_cfg			= ecovec_lcd_modes; -		lcdc_info.ch[0].num_cfg			= ARRAY_SIZE(ecovec_lcd_modes); - -		gpio_set_value(GPIO_PTR1, 1); +		lcdc_info.ch[0].lcd_modes		= ecovec_lcd_modes; +		lcdc_info.ch[0].num_modes		= ARRAY_SIZE(ecovec_lcd_modes);  		/* FIXME  		 * @@ -1128,7 +1216,7 @@ static int __init arch_setup(void)  		/* enable TouchScreen */  		i2c_register_board_info(0, &ts_i2c_clients, 1); -		set_irq_type(IRQ0, IRQ_TYPE_LEVEL_LOW); +		irq_set_irq_type(IRQ0, IRQ_TYPE_LEVEL_LOW);  	}  	/* enable CEU0 */ @@ -1188,9 +1276,9 @@ static int __init arch_setup(void)  	gpio_direction_input(GPIO_PTR5);  	gpio_direction_input(GPIO_PTR6); -#ifdef CONFIG_MFD_SH_MOBILE_SDHI +	/* SD-card slot CN11 */ +#if defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE)  	/* enable SDHI0 on CN11 (needs DS2.4 set to ON) */ -	gpio_request(GPIO_FN_SDHI0CD,  NULL);  	gpio_request(GPIO_FN_SDHI0WP,  NULL);  	gpio_request(GPIO_FN_SDHI0CMD, NULL);  	gpio_request(GPIO_FN_SDHI0CLK, NULL); @@ -1198,25 +1286,6 @@ static int __init arch_setup(void)  	gpio_request(GPIO_FN_SDHI0D2,  NULL);  	gpio_request(GPIO_FN_SDHI0D1,  NULL);  	gpio_request(GPIO_FN_SDHI0D0,  NULL); -	gpio_request(GPIO_PTB6, NULL); -	gpio_direction_output(GPIO_PTB6, 0); - -#if !defined(CONFIG_MMC_SH_MMCIF) -	/* enable SDHI1 on CN12 (needs DS2.6,7 set to ON,OFF) */ -	gpio_request(GPIO_FN_SDHI1CD,  NULL); -	gpio_request(GPIO_FN_SDHI1WP,  NULL); -	gpio_request(GPIO_FN_SDHI1CMD, NULL); -	gpio_request(GPIO_FN_SDHI1CLK, NULL); -	gpio_request(GPIO_FN_SDHI1D3,  NULL); -	gpio_request(GPIO_FN_SDHI1D2,  NULL); -	gpio_request(GPIO_FN_SDHI1D1,  NULL); -	gpio_request(GPIO_FN_SDHI1D0,  NULL); -	gpio_request(GPIO_PTB7, NULL); -	gpio_direction_output(GPIO_PTB7, 0); - -	/* I/O buffer drive ability is high for SDHI1 */ -	__raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA); -#endif /* CONFIG_MMC_SH_MMCIF */  #else  	/* enable MSIOF0 on CN11 (needs DS2.4 set to OFF) */  	gpio_request(GPIO_FN_MSIOF0_TXD, NULL); @@ -1226,14 +1295,43 @@ static int __init arch_setup(void)  	gpio_direction_output(GPIO_PTM4, 1); /* active low CS */  	gpio_request(GPIO_PTB6, NULL); /* 3.3V power control */  	gpio_direction_output(GPIO_PTB6, 0); /* disable power by default */ -	gpio_request(GPIO_PTY6, NULL); /* write protect */ -	gpio_direction_input(GPIO_PTY6); -	gpio_request(GPIO_PTY7, NULL); /* card detect */ -	gpio_direction_input(GPIO_PTY7);  	spi_register_board_info(spi_bus, ARRAY_SIZE(spi_bus));  #endif +	/* MMC/SD-card slot CN12 */ +#if defined(CONFIG_MMC_SH_MMCIF) || defined(CONFIG_MMC_SH_MMCIF_MODULE) +	/* enable MMCIF (needs DS2.6,7 set to OFF,ON) */ +	gpio_request(GPIO_FN_MMC_D7, NULL); +	gpio_request(GPIO_FN_MMC_D6, NULL); +	gpio_request(GPIO_FN_MMC_D5, NULL); +	gpio_request(GPIO_FN_MMC_D4, NULL); +	gpio_request(GPIO_FN_MMC_D3, NULL); +	gpio_request(GPIO_FN_MMC_D2, NULL); +	gpio_request(GPIO_FN_MMC_D1, NULL); +	gpio_request(GPIO_FN_MMC_D0, NULL); +	gpio_request(GPIO_FN_MMC_CLK, NULL); +	gpio_request(GPIO_FN_MMC_CMD, NULL); + +	cn12_enabled = true; +#elif defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE) +	/* enable SDHI1 on CN12 (needs DS2.6,7 set to ON,OFF) */ +	gpio_request(GPIO_FN_SDHI1WP,  NULL); +	gpio_request(GPIO_FN_SDHI1CMD, NULL); +	gpio_request(GPIO_FN_SDHI1CLK, NULL); +	gpio_request(GPIO_FN_SDHI1D3,  NULL); +	gpio_request(GPIO_FN_SDHI1D2,  NULL); +	gpio_request(GPIO_FN_SDHI1D1,  NULL); +	gpio_request(GPIO_FN_SDHI1D0,  NULL); + +	cn12_enabled = true; +#endif + +	if (cn12_enabled) +		/* I/O buffer drive ability is high for CN12 */ +		__raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000, +			     IODRIVEA); +  	/* enable Video */  	gpio_request(GPIO_PTU2, NULL);  	gpio_direction_output(GPIO_PTU2, 1); @@ -1264,10 +1362,10 @@ static int __init arch_setup(void)  	/* change parent of FSI B */  	clk = clk_get(NULL, "fsib_clk");  	if (!IS_ERR(clk)) { -		clk_register(&fsimckb_clk); -		clk_set_parent(clk, &fsimckb_clk); -		clk_set_rate(clk, 11000); -		clk_set_rate(&fsimckb_clk, 11000); +		/* 48kHz dummy clock was used to make sure 1/1 divide */ +		clk_set_rate(&sh7724_fsimckb_clk, 48000); +		clk_set_parent(clk, &sh7724_fsimckb_clk); +		clk_set_rate(clk, 48000);  		clk_put(clk);  	} @@ -1292,25 +1390,6 @@ static int __init arch_setup(void)  	gpio_request(GPIO_PTU5, NULL);  	gpio_direction_output(GPIO_PTU5, 0); -#if defined(CONFIG_MMC_SH_MMCIF) -	/* enable MMCIF (needs DS2.6,7 set to OFF,ON) */ -	gpio_request(GPIO_FN_MMC_D7, NULL); -	gpio_request(GPIO_FN_MMC_D6, NULL); -	gpio_request(GPIO_FN_MMC_D5, NULL); -	gpio_request(GPIO_FN_MMC_D4, NULL); -	gpio_request(GPIO_FN_MMC_D3, NULL); -	gpio_request(GPIO_FN_MMC_D2, NULL); -	gpio_request(GPIO_FN_MMC_D1, NULL); -	gpio_request(GPIO_FN_MMC_D0, NULL); -	gpio_request(GPIO_FN_MMC_CLK, NULL); -	gpio_request(GPIO_FN_MMC_CMD, NULL); -	gpio_request(GPIO_PTB7, NULL); -	gpio_direction_output(GPIO_PTB7, 0); - -	/* I/O buffer drive ability is high for MMCIF */ -	__raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA); -#endif -  	/* enable I2C device */  	i2c_register_board_info(0, i2c0_devices,  				ARRAY_SIZE(i2c0_devices)); @@ -1318,6 +1397,7 @@ static int __init arch_setup(void)  	i2c_register_board_info(1, i2c1_devices,  				ARRAY_SIZE(i2c1_devices)); +#if defined(CONFIG_VIDEO_SH_VOU) || defined(CONFIG_VIDEO_SH_VOU_MODULE)  	/* VOU */  	gpio_request(GPIO_FN_DV_D15, NULL);  	gpio_request(GPIO_FN_DV_D14, NULL); @@ -1349,6 +1429,7 @@ static int __init arch_setup(void)  	/* Remove reset */  	gpio_set_value(GPIO_PTG4, 1); +#endif  	return platform_add_devices(ecovec_devices,  				    ARRAY_SIZE(ecovec_devices)); diff --git a/arch/sh/boards/mach-highlander/setup.c b/arch/sh/boards/mach-highlander/setup.c index a5ecfbacaf3..4a52590fe3d 100644 --- a/arch/sh/boards/mach-highlander/setup.c +++ b/arch/sh/boards/mach-highlander/setup.c @@ -24,10 +24,10 @@  #include <linux/interrupt.h>  #include <linux/usb/r8a66597.h>  #include <linux/usb/m66592.h> +#include <linux/clkdev.h>  #include <net/ax88796.h>  #include <asm/machvec.h>  #include <mach/highlander.h> -#include <asm/clkdev.h>  #include <asm/clock.h>  #include <asm/heartbeat.h>  #include <asm/io.h> @@ -322,7 +322,7 @@ static void ivdr_clk_disable(struct clk *clk)  	__raw_writew(__raw_readw(PA_IVDRCTL) & ~(1 << IVDR_CK_ON), PA_IVDRCTL);  } -static struct clk_ops ivdr_clk_ops = { +static struct sh_clk_ops ivdr_clk_ops = {  	.enable		= ivdr_clk_enable,  	.disable	= ivdr_clk_disable,  }; @@ -335,8 +335,6 @@ static struct clk *r7780rp_clocks[] = {  	&ivdr_clk,  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("ivdr_clk", &ivdr_clk), diff --git a/arch/sh/boards/mach-hp6xx/hp6xx_apm.c b/arch/sh/boards/mach-hp6xx/hp6xx_apm.c index b49535c0ddd..865d8d6e823 100644 --- a/arch/sh/boards/mach-hp6xx/hp6xx_apm.c +++ b/arch/sh/boards/mach-hp6xx/hp6xx_apm.c @@ -86,7 +86,7 @@ static int __init hp6x0_apm_init(void)  	int ret;  	ret = request_irq(HP680_BTN_IRQ, hp6x0_apm_interrupt, -			  IRQF_DISABLED, MODNAME, NULL); +			  0, MODNAME, NULL);  	if (unlikely(ret < 0)) {  		printk(KERN_ERR MODNAME ": IRQ %d request failed\n",  		       HP680_BTN_IRQ); diff --git a/arch/sh/boards/mach-hp6xx/pm.c b/arch/sh/boards/mach-hp6xx/pm.c index 4499a3749d4..8b50cf763c0 100644 --- a/arch/sh/boards/mach-hp6xx/pm.c +++ b/arch/sh/boards/mach-hp6xx/pm.c @@ -14,6 +14,7 @@  #include <linux/gfp.h>  #include <asm/io.h>  #include <asm/hd64461.h> +#include <asm/bl_bit.h>  #include <mach/hp6xx.h>  #include <cpu/dac.h>  #include <asm/freq.h> @@ -143,7 +144,7 @@ static int hp6x0_pm_enter(suspend_state_t state)  	return 0;  } -static struct platform_suspend_ops hp6x0_pm_ops = { +static const struct platform_suspend_ops hp6x0_pm_ops = {  	.enter		= hp6x0_pm_enter,  	.valid		= suspend_valid_only_mem,  }; diff --git a/arch/sh/boards/mach-hp6xx/setup.c b/arch/sh/boards/mach-hp6xx/setup.c index 8c9add5f4cf..05797b33f68 100644 --- a/arch/sh/boards/mach-hp6xx/setup.c +++ b/arch/sh/boards/mach-hp6xx/setup.c @@ -13,6 +13,7 @@  #include <linux/init.h>  #include <linux/platform_device.h>  #include <linux/irq.h> +#include <linux/sh_intc.h>  #include <sound/sh_dac_audio.h>  #include <asm/hd64461.h>  #include <asm/io.h> @@ -35,7 +36,7 @@ static struct resource cf_ide_resources[] = {  		.flags = IORESOURCE_MEM,  	},  	[2] = { -		.start = 77, +		.start = evt2irq(0xba0),  		.flags = IORESOURCE_IRQ,  	},  }; @@ -168,8 +169,6 @@ device_initcall(hp6xx_devices_setup);  static struct sh_machine_vector mv_hp6xx __initmv = {  	.mv_name = "hp6xx",  	.mv_setup = hp6xx_setup, -	/* IRQ's : CPU(64) + CCHIP(16) + FREE_TO_USE(6) */ -	.mv_nr_irqs = HD64461_IRQBASE + HD64461_IRQ_NUM + 6,  	/* Enable IRQ0 -> IRQ3 in IRQ_MODE */  	.mv_init_irq = hp6xx_init_irq,  }; diff --git a/arch/sh/boards/mach-kfr2r09/lcd_wqvga.c b/arch/sh/boards/mach-kfr2r09/lcd_wqvga.c index 25e145fb708..355a78a3b31 100644 --- a/arch/sh/boards/mach-kfr2r09/lcd_wqvga.c +++ b/arch/sh/boards/mach-kfr2r09/lcd_wqvga.c @@ -251,8 +251,7 @@ static void display_on(void *sohandle,  	write_memory_start(sohandle, so);  } -int kfr2r09_lcd_setup(void *board_data, void *sohandle, -		      struct sh_mobile_lcdc_sys_bus_ops *so) +int kfr2r09_lcd_setup(void *sohandle, struct sh_mobile_lcdc_sys_bus_ops *so)  {  	/* power on */  	gpio_set_value(GPIO_PTF4, 0);  /* PROTECT/ -> L */ @@ -273,66 +272,7 @@ int kfr2r09_lcd_setup(void *board_data, void *sohandle,  	return 0;  } -void kfr2r09_lcd_start(void *board_data, void *sohandle, -		       struct sh_mobile_lcdc_sys_bus_ops *so) +void kfr2r09_lcd_start(void *sohandle, struct sh_mobile_lcdc_sys_bus_ops *so)  {  	write_memory_start(sohandle, so);  } - -#define CTRL_CKSW       0x10 -#define CTRL_C10        0x20 -#define CTRL_CPSW       0x80 -#define MAIN_MLED4      0x40 -#define MAIN_MSW        0x80 - -static int kfr2r09_lcd_backlight(int on) -{ -	struct i2c_adapter *a; -	struct i2c_msg msg; -	unsigned char buf[2]; -	int ret; - -	a = i2c_get_adapter(0); -	if (!a) -		return -ENODEV; - -	buf[0] = 0x00; -	if (on) -		buf[1] = CTRL_CPSW | CTRL_C10 | CTRL_CKSW; -	else -		buf[1] = 0; - -	msg.addr = 0x75; -	msg.buf = buf; -	msg.len = 2; -	msg.flags = 0; -	ret = i2c_transfer(a, &msg, 1); -	if (ret != 1) -		return -ENODEV; - -	buf[0] = 0x01; -	if (on) -		buf[1] = MAIN_MSW | MAIN_MLED4 | 0x0c; -	else -		buf[1] = 0; - -	msg.addr = 0x75; -	msg.buf = buf; -	msg.len = 2; -	msg.flags = 0; -	ret = i2c_transfer(a, &msg, 1); -	if (ret != 1) -		return -ENODEV; - -	return 0; -} - -void kfr2r09_lcd_on(void *board_data, struct fb_info *info) -{ -	kfr2r09_lcd_backlight(1); -} - -void kfr2r09_lcd_off(void *board_data) -{ -	kfr2r09_lcd_backlight(0); -} diff --git a/arch/sh/boards/mach-kfr2r09/setup.c b/arch/sh/boards/mach-kfr2r09/setup.c index 9b60eaabf8f..1df4398f837 100644 --- a/arch/sh/boards/mach-kfr2r09/setup.c +++ b/arch/sh/boards/mach-kfr2r09/setup.c @@ -10,7 +10,8 @@  #include <linux/init.h>  #include <linux/platform_device.h>  #include <linux/interrupt.h> -#include <linux/mfd/sh_mobile_sdhi.h> +#include <linux/mmc/host.h> +#include <linux/mmc/sh_mobile_sdhi.h>  #include <linux/mfd/tmio.h>  #include <linux/mtd/physmap.h>  #include <linux/mtd/onenand.h> @@ -20,7 +21,12 @@  #include <linux/input.h>  #include <linux/input/sh_keysc.h>  #include <linux/i2c.h> +#include <linux/platform_data/lv5207lp.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/usb/r8a66597.h> +#include <linux/videodev2.h> +#include <linux/sh_intc.h>  #include <media/rj54n1cb0c.h>  #include <media/soc_camera.h>  #include <media/sh_mobile_ceu.h> @@ -108,7 +114,7 @@ static struct resource kfr2r09_sh_keysc_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 79, +		.start  = evt2irq(0xbe0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -121,12 +127,9 @@ static struct platform_device kfr2r09_sh_keysc_device = {  	.dev	= {  		.platform_data	= &kfr2r09_sh_keysc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_KEYSC, -	},  }; -const static struct fb_videomode kfr2r09_lcdc_modes[] = { +static const struct fb_videomode kfr2r09_lcdc_modes[] = {  	{  		.name = "TX07D34VM0AAA",  		.xres = 240, @@ -145,21 +148,17 @@ static struct sh_mobile_lcdc_info kfr2r09_sh_lcdc_info = {  	.clock_source = LCDC_CLK_BUS,  	.ch[0] = {  		.chan = LCDC_CHAN_MAINLCD, -		.bpp = 16, +		.fourcc = V4L2_PIX_FMT_RGB565,  		.interface_type = SYS18,  		.clock_divider = 6,  		.flags = LCDC_FLAGS_DWPOL, -		.lcd_cfg = kfr2r09_lcdc_modes, -		.num_cfg = ARRAY_SIZE(kfr2r09_lcdc_modes), -		.lcd_size_cfg = { +		.lcd_modes = kfr2r09_lcdc_modes, +		.num_modes = ARRAY_SIZE(kfr2r09_lcdc_modes), +		.panel_cfg = {  			.width = 35,  			.height = 58, -		}, -		.board_cfg = {  			.setup_sys = kfr2r09_lcd_setup,  			.start_transfer = kfr2r09_lcd_start, -			.display_on = kfr2r09_lcd_on, -			.display_off = kfr2r09_lcd_off,  		},  		.sys_bus_cfg = {  			.ldmt2r = 0x07010904, @@ -178,7 +177,7 @@ static struct resource kfr2r09_sh_lcdc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 106, +		.start	= evt2irq(0xf40),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -190,9 +189,17 @@ static struct platform_device kfr2r09_sh_lcdc_device = {  	.dev	= {  		.platform_data	= &kfr2r09_sh_lcdc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_LCDC, -	}, +}; + +static struct lv5207lp_platform_data kfr2r09_backlight_data = { +	.fbdev = &kfr2r09_sh_lcdc_device.dev, +	.def_value = 13, +	.max_value = 13, +}; + +static struct i2c_board_info kfr2r09_backlight_board_info = { +	I2C_BOARD_INFO("lv5207lp", 0x75), +	.platform_data = &kfr2r09_backlight_data,  };  static struct r8a66597_platdata kfr2r09_usb0_gadget_data = { @@ -206,8 +213,8 @@ static struct resource kfr2r09_usb0_gadget_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 65, -		.end	= 65, +		.start	= evt2irq(0xa20), +		.end	= evt2irq(0xa20),  		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,  	},  }; @@ -236,8 +243,8 @@ static struct resource kfr2r09_ceu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start  = 52, -		.end  = 52, +		.start  = evt2irq(0x880), +		.end	= evt2irq(0x880),  		.flags  = IORESOURCE_IRQ,  	},  	[2] = { @@ -253,9 +260,6 @@ static struct platform_device kfr2r09_ceu_device = {  	.dev	= {  		.platform_data	= &sh_mobile_ceu_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_CEU0, -	},  };  static struct i2c_board_info kfr2r09_i2c_camera = { @@ -349,15 +353,22 @@ static struct platform_device kfr2r09_camera = {  	},  }; +/* Fixed 3.3V regulator to be used by SDHI0 */ +static struct regulator_consumer_supply fixed3v3_power_consumers[] = +{ +	REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), +	REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), +}; +  static struct resource kfr2r09_sh_sdhi0_resources[] = {  	[0] = {  		.name	= "SDHI0",  		.start  = 0x04ce0000, -		.end    = 0x04ce01ff, +		.end    = 0x04ce00ff,  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 100, +		.start  = evt2irq(0xe80),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -366,6 +377,7 @@ static struct sh_mobile_sdhi_info sh7724_sdhi0_data = {  	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX,  	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX,  	.tmio_flags	= TMIO_MMC_WRPROTECT_DISABLE, +	.tmio_caps      = MMC_CAP_SDIO_IRQ,  };  static struct platform_device kfr2r09_sh_sdhi0_device = { @@ -375,9 +387,6 @@ static struct platform_device kfr2r09_sh_sdhi0_device = {  	.dev = {  		.platform_data	= &sh7724_sdhi0_data,  	}, -	.archdata = { -		.hwblk_id = HWBLK_SDHI0, -	},  };  static struct platform_device *kfr2r09_devices[] __initdata = { @@ -533,6 +542,9 @@ static int __init kfr2r09_devices_setup(void)  					&kfr2r09_sdram_leave_start,  					&kfr2r09_sdram_leave_end); +	regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers, +				     ARRAY_SIZE(fixed3v3_power_consumers), 3300000); +  	/* enable SCIF1 serial port for YC401 console support */  	gpio_request(GPIO_FN_SCIF1_RXD, NULL);  	gpio_request(GPIO_FN_SCIF1_TXD, NULL); @@ -622,6 +634,8 @@ static int __init kfr2r09_devices_setup(void)  	gpio_request(GPIO_FN_SDHI0CMD, NULL);  	gpio_request(GPIO_FN_SDHI0CLK, NULL); +	i2c_register_board_info(0, &kfr2r09_backlight_board_info, 1); +  	return platform_add_devices(kfr2r09_devices,  				    ARRAY_SIZE(kfr2r09_devices));  } diff --git a/arch/sh/boards/mach-landisk/irq.c b/arch/sh/boards/mach-landisk/irq.c index e79412a4049..c00ace38db3 100644 --- a/arch/sh/boards/mach-landisk/irq.c +++ b/arch/sh/boards/mach-landisk/irq.c @@ -1,9 +1,10 @@  /* - * arch/sh/boards/landisk/irq.c + * arch/sh/boards/mach-landisk/irq.c   *   * I-O DATA Device, Inc. LANDISK Support   *   * Copyright (C) 2005-2007 kogiidena + * Copyright (C) 2011 Nobuhiro Iwamatsu   *   * Copyright (C) 2001  Ian da Silva, Jeremy Siegel   * Based largely on io_se.c. @@ -12,44 +13,54 @@   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   */ +  #include <linux/init.h>  #include <linux/irq.h>  #include <linux/interrupt.h>  #include <linux/io.h>  #include <mach-landisk/mach/iodata_landisk.h> -static void disable_landisk_irq(struct irq_data *data) -{ -	unsigned char mask = 0xff ^ (0x01 << (data->irq - 5)); +enum { +	UNUSED = 0, -	__raw_writeb(__raw_readb(PA_IMASK) & mask, PA_IMASK); -} - -static void enable_landisk_irq(struct irq_data *data) -{ -	unsigned char value = (0x01 << (data->irq - 5)); +	PCI_INTA, /* PCI int A */ +	PCI_INTB, /* PCI int B */ +	PCI_INTC, /* PCI int C */ +	PCI_INTD, /* PCI int D */ +	ATA,	  /* ATA */ +	FATA,	  /* CF */ +	POWER,	  /* Power swtich */ +	BUTTON,	  /* Button swtich */ +}; -	__raw_writeb(__raw_readb(PA_IMASK) | value, PA_IMASK); -} +/* Vectors for LANDISK */ +static struct intc_vect vectors_landisk[] __initdata = { +	INTC_IRQ(PCI_INTA, IRQ_PCIINTA), +	INTC_IRQ(PCI_INTB, IRQ_PCIINTB), +	INTC_IRQ(PCI_INTC, IRQ_PCIINTC), +	INTC_IRQ(PCI_INTD, IRQ_PCIINTD), +	INTC_IRQ(ATA, IRQ_ATA), +	INTC_IRQ(FATA, IRQ_FATA), +	INTC_IRQ(POWER, IRQ_POWER), +	INTC_IRQ(BUTTON, IRQ_BUTTON), +}; -static struct irq_chip landisk_irq_chip __read_mostly = { -	.name		= "LANDISK", -	.irq_mask	= disable_landisk_irq, -	.irq_unmask	= enable_landisk_irq, +/* IRLMSK mask register layout for LANDISK */ +static struct intc_mask_reg mask_registers_landisk[] __initdata = { +	{ PA_IMASK, 0, 8, /* IRLMSK */ +	  {  BUTTON, POWER, FATA, ATA, +	     PCI_INTD, PCI_INTC, PCI_INTB, PCI_INTA, +	  } +	},  }; +static DECLARE_INTC_DESC(intc_desc_landisk, "landisk", vectors_landisk, NULL, +			mask_registers_landisk, NULL, NULL);  /*   * Initialize IRQ setting   */  void __init init_landisk_IRQ(void)  { -	int i; - -	for (i = 5; i < 14; i++) { -		disable_irq_nosync(i); -		set_irq_chip_and_handler_name(i, &landisk_irq_chip, -					      handle_level_irq, "level"); -		enable_landisk_irq(irq_get_irq_data(i)); -	} +	register_intc_controller(&intc_desc_landisk);  	__raw_writeb(0x00, PA_PWRINT_CLR);  } diff --git a/arch/sh/boards/mach-landisk/setup.c b/arch/sh/boards/mach-landisk/setup.c index 50337acc18c..f1147caebac 100644 --- a/arch/sh/boards/mach-landisk/setup.c +++ b/arch/sh/boards/mach-landisk/setup.c @@ -21,11 +21,9 @@  #include <mach-landisk/mach/iodata_landisk.h>  #include <asm/io.h> -void init_landisk_IRQ(void); -  static void landisk_power_off(void)  { -        __raw_writeb(0x01, PA_SHUTDOWN); +	__raw_writeb(0x01, PA_SHUTDOWN);  }  static struct resource cf_ide_resources[3]; @@ -83,11 +81,11 @@ static int __init landisk_devices_setup(void)  				    ARRAY_SIZE(landisk_devices));  } -__initcall(landisk_devices_setup); +device_initcall(landisk_devices_setup);  static void __init landisk_setup(char **cmdline_p)  { -        /* LED ON */ +	/* LED ON */  	__raw_writeb(__raw_readb(PA_LED) | 0x03, PA_LED);  	printk(KERN_INFO "I-O DATA DEVICE, INC. \"LANDISK Series\" support.\n"); @@ -99,7 +97,6 @@ static void __init landisk_setup(char **cmdline_p)   */  static struct sh_machine_vector mv_landisk __initmv = {  	.mv_name = "LANDISK", -	.mv_nr_irqs = 72,  	.mv_setup = landisk_setup,  	.mv_init_irq = init_landisk_IRQ,  }; diff --git a/arch/sh/boards/mach-lboxre2/setup.c b/arch/sh/boards/mach-lboxre2/setup.c index 79b4e0d77b7..6660622aa45 100644 --- a/arch/sh/boards/mach-lboxre2/setup.c +++ b/arch/sh/boards/mach-lboxre2/setup.c @@ -79,6 +79,5 @@ device_initcall(lboxre2_devices_setup);   */  static struct sh_machine_vector mv_lboxre2 __initmv = {  	.mv_name		= "L-BOX RE2", -	.mv_nr_irqs		= 72,  	.mv_init_irq		= init_lboxre2_IRQ,  }; diff --git a/arch/sh/boards/mach-microdev/irq.c b/arch/sh/boards/mach-microdev/irq.c index c35001fd903..9a8aff33961 100644 --- a/arch/sh/boards/mach-microdev/irq.c +++ b/arch/sh/boards/mach-microdev/irq.c @@ -12,7 +12,6 @@  #include <linux/init.h>  #include <linux/irq.h>  #include <linux/interrupt.h> -#include <asm/system.h>  #include <asm/io.h>  #include <mach/microdev.h> @@ -117,7 +116,7 @@ static struct irq_chip microdev_irq_type = {  static void __init make_microdev_irq(unsigned int irq)  {  	disable_irq_nosync(irq); -	set_irq_chip_and_handler(irq, µdev_irq_type, handle_level_irq); +	irq_set_chip_and_handler(irq, µdev_irq_type, handle_level_irq);  	disable_microdev_irq(irq_get_irq_data(irq));  } diff --git a/arch/sh/boards/mach-microdev/setup.c b/arch/sh/boards/mach-microdev/setup.c index d8a747291e0..6c66ee4d842 100644 --- a/arch/sh/boards/mach-microdev/setup.c +++ b/arch/sh/boards/mach-microdev/setup.c @@ -194,7 +194,6 @@ device_initcall(microdev_devices_setup);   */  static struct sh_machine_vector mv_sh4202_microdev __initmv = {  	.mv_name		= "SH4-202 MicroDev", -	.mv_nr_irqs		= 72,  	.mv_ioport_map		= microdev_ioport_map,  	.mv_init_irq		= init_microdev_irq,  }; diff --git a/arch/sh/boards/mach-migor/lcd_qvga.c b/arch/sh/boards/mach-migor/lcd_qvga.c index de9014a8a93..8bccd345b69 100644 --- a/arch/sh/boards/mach-migor/lcd_qvga.c +++ b/arch/sh/boards/mach-migor/lcd_qvga.c @@ -113,8 +113,7 @@ static const unsigned short magic3_data[] = {  	0x0010, 0x16B0, 0x0011, 0x0111, 0x0007, 0x0061,  }; -int migor_lcd_qvga_setup(void *board_data, void *sohandle, -			 struct sh_mobile_lcdc_sys_bus_ops *so) +int migor_lcd_qvga_setup(void *sohandle, struct sh_mobile_lcdc_sys_bus_ops *so)  {  	unsigned long xres = 320;  	unsigned long yres = 240; diff --git a/arch/sh/boards/mach-migor/setup.c b/arch/sh/boards/mach-migor/setup.c index c8acfec9869..8b73194ed2c 100644 --- a/arch/sh/boards/mach-migor/setup.c +++ b/arch/sh/boards/mach-migor/setup.c @@ -12,17 +12,23 @@  #include <linux/interrupt.h>  #include <linux/input.h>  #include <linux/input/sh_keysc.h> -#include <linux/mfd/sh_mobile_sdhi.h> +#include <linux/mmc/host.h> +#include <linux/mmc/sh_mobile_sdhi.h>  #include <linux/mtd/physmap.h>  #include <linux/mtd/nand.h>  #include <linux/i2c.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/smc91x.h>  #include <linux/delay.h>  #include <linux/clk.h>  #include <linux/gpio.h> +#include <linux/videodev2.h> +#include <linux/sh_intc.h>  #include <video/sh_mobile_lcdc.h>  #include <media/sh_mobile_ceu.h>  #include <media/ov772x.h> +#include <media/soc_camera.h>  #include <media/tw9910.h>  #include <asm/clock.h>  #include <asm/machvec.h> @@ -51,7 +57,7 @@ static struct resource smc91x_eth_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 32, /* IRQ0 */ +		.start  = evt2irq(0x600), /* IRQ0 */  		.flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,  	},  }; @@ -85,7 +91,7 @@ static struct resource sh_keysc_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 79, +		.start  = evt2irq(0xbe0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -98,9 +104,6 @@ static struct platform_device sh_keysc_device = {  	.dev	= {  		.platform_data	= &sh_keysc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_KEYSC, -	},  };  static struct mtd_partition migor_nor_flash_partitions[] = @@ -187,7 +190,6 @@ static struct platform_nand_data migor_nand_flash_data = {  		.partitions = migor_nand_flash_partitions,  		.nr_partitions = ARRAY_SIZE(migor_nand_flash_partitions),  		.chip_delay = 20, -		.part_probe_types = (const char *[]) { "cmdlinepart", NULL },  	},  	.ctrl = {  		.dev_ready = migor_nand_flash_ready, @@ -213,7 +215,7 @@ static struct platform_device migor_nand_flash_device = {  	}  }; -const static struct fb_videomode migor_lcd_modes[] = { +static const struct fb_videomode migor_lcd_modes[] = {  	{  #if defined(CONFIG_SH_MIGOR_RTA_WVGA)  		.name = "LB070WV1", @@ -243,12 +245,12 @@ static struct sh_mobile_lcdc_info sh_mobile_lcdc_info = {  	.clock_source = LCDC_CLK_BUS,  	.ch[0] = {  		.chan = LCDC_CHAN_MAINLCD, -		.bpp = 16, +		.fourcc = V4L2_PIX_FMT_RGB565,  		.interface_type = RGB16,  		.clock_divider = 2, -		.lcd_cfg = migor_lcd_modes, -		.num_cfg = ARRAY_SIZE(migor_lcd_modes), -		.lcd_size_cfg = { /* 7.0 inch */ +		.lcd_modes = migor_lcd_modes, +		.num_modes = ARRAY_SIZE(migor_lcd_modes), +		.panel_cfg = { /* 7.0 inch */  			.width = 152,  			.height = 91,  		}, @@ -257,16 +259,14 @@ static struct sh_mobile_lcdc_info sh_mobile_lcdc_info = {  	.clock_source = LCDC_CLK_PERIPHERAL,  	.ch[0] = {  		.chan = LCDC_CHAN_MAINLCD, -		.bpp = 16, +		.fourcc = V4L2_PIX_FMT_RGB565,  		.interface_type = SYS16A,  		.clock_divider = 10, -		.lcd_cfg = migor_lcd_modes, -		.num_cfg = ARRAY_SIZE(migor_lcd_modes), -		.lcd_size_cfg = { /* 2.4 inch */ -			.width = 49, +		.lcd_modes = migor_lcd_modes, +		.num_modes = ARRAY_SIZE(migor_lcd_modes), +		.panel_cfg = { +			.width = 49,	/* 2.4 inch */  			.height = 37, -		}, -		.board_cfg = {  			.setup_sys = migor_lcd_qvga_setup,  		},  		.sys_bus_cfg = { @@ -287,7 +287,7 @@ static struct resource migor_lcdc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 28, +		.start	= evt2irq(0x580),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -299,9 +299,6 @@ static struct platform_device migor_lcdc_device = {  	.dev	= {  		.platform_data	= &sh_mobile_lcdc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_LCDC, -	},  };  static struct clk *camera_clk; @@ -373,7 +370,7 @@ static struct resource migor_ceu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start  = 52, +		.start  = evt2irq(0x880),  		.flags  = IORESOURCE_IRQ,  	},  	[2] = { @@ -389,20 +386,24 @@ static struct platform_device migor_ceu_device = {  	.dev	= {  		.platform_data	= &sh_mobile_ceu_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_CEU, -	}, +}; + +/* Fixed 3.3V regulator to be used by SDHI0 */ +static struct regulator_consumer_supply fixed3v3_power_consumers[] = +{ +	REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), +	REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),  };  static struct resource sdhi_cn9_resources[] = {  	[0] = {  		.name	= "SDHI",  		.start	= 0x04ce0000, -		.end	= 0x04ce01ff, +		.end	= 0x04ce00ff,  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 100, +		.start	= evt2irq(0xe80),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -410,6 +411,7 @@ static struct resource sdhi_cn9_resources[] = {  static struct sh_mobile_sdhi_info sh7724_sdhi_data = {  	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX,  	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX, +	.tmio_caps      = MMC_CAP_SDIO_IRQ,  };  static struct platform_device sdhi_cn9_device = { @@ -419,9 +421,6 @@ static struct platform_device sdhi_cn9_device = {  	.dev = {  		.platform_data	= &sh7724_sdhi_data,  	}, -	.archdata = { -		.hwblk_id = HWBLK_SDHI, -	},  };  static struct i2c_board_info migor_i2c_devices[] = { @@ -430,7 +429,7 @@ static struct i2c_board_info migor_i2c_devices[] = {  	},  	{  		I2C_BOARD_INFO("migor_ts", 0x51), -		.irq = 38, /* IRQ6 */ +		.irq = evt2irq(0x6c0), /* IRQ6 */  	},  	{  		I2C_BOARD_INFO("wm8978", 0x1a), @@ -446,9 +445,7 @@ static struct i2c_board_info migor_i2c_camera[] = {  	},  }; -static struct ov772x_camera_info ov7725_info = { -	.flags		= OV772X_FLAG_8BIT, -}; +static struct ov772x_camera_info ov7725_info;  static struct soc_camera_link ov7725_link = {  	.power		= ov7725_power, @@ -510,6 +507,10 @@ static int __init migor_devices_setup(void)  					&migor_sdram_enter_end,  					&migor_sdram_leave_start,  					&migor_sdram_leave_end); + +	regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers, +				     ARRAY_SIZE(fixed3v3_power_consumers), 3300000); +  	/* Let D11 LED show STATUS0 */  	gpio_request(GPIO_FN_STATUS0, NULL); diff --git a/arch/sh/boards/mach-r2d/setup.c b/arch/sh/boards/mach-r2d/setup.c index b84df6a3a93..4b98a5251f8 100644 --- a/arch/sh/boards/mach-r2d/setup.c +++ b/arch/sh/boards/mach-r2d/setup.c @@ -258,7 +258,7 @@ static int __init rts7751r2d_devices_setup(void)  	return platform_add_devices(rts7751r2d_devices,  				    ARRAY_SIZE(rts7751r2d_devices));  } -__initcall(rts7751r2d_devices_setup); +device_initcall(rts7751r2d_devices_setup);  static void rts7751r2d_power_off(void)  { diff --git a/arch/sh/boards/mach-rsk/Kconfig b/arch/sh/boards/mach-rsk/Kconfig index aeff3b04220..458a11ffd02 100644 --- a/arch/sh/boards/mach-rsk/Kconfig +++ b/arch/sh/boards/mach-rsk/Kconfig @@ -13,6 +13,16 @@ config SH_RSK7203  	select ARCH_REQUIRE_GPIOLIB  	depends on CPU_SUBTYPE_SH7203 +config SH_RSK7264 +	bool "RSK2+SH7264" +	select ARCH_REQUIRE_GPIOLIB +	depends on CPU_SUBTYPE_SH7264 + +config SH_RSK7269 +	bool "RSK2+SH7269" +	select ARCH_REQUIRE_GPIOLIB +	depends on CPU_SUBTYPE_SH7269 +  endchoice  endif diff --git a/arch/sh/boards/mach-rsk/Makefile b/arch/sh/boards/mach-rsk/Makefile index 498da75ce38..6a4e1b538a6 100644 --- a/arch/sh/boards/mach-rsk/Makefile +++ b/arch/sh/boards/mach-rsk/Makefile @@ -1,2 +1,4 @@  obj-y				:= setup.o  obj-$(CONFIG_SH_RSK7203)	+= devices-rsk7203.o +obj-$(CONFIG_SH_RSK7264)	+= devices-rsk7264.o +obj-$(CONFIG_SH_RSK7269)	+= devices-rsk7269.o diff --git a/arch/sh/boards/mach-rsk/devices-rsk7203.c b/arch/sh/boards/mach-rsk/devices-rsk7203.c index 4fa08ba1025..a8089f79d05 100644 --- a/arch/sh/boards/mach-rsk/devices-rsk7203.c +++ b/arch/sh/boards/mach-rsk/devices-rsk7203.c @@ -1,7 +1,7 @@  /*   * Renesas Technology Europe RSK+ 7203 Support.   * - * Copyright (C) 2008 Paul Mundt + * Copyright (C) 2008 - 2010  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -12,7 +12,9 @@  #include <linux/platform_device.h>  #include <linux/interrupt.h>  #include <linux/smsc911x.h> +#include <linux/input.h>  #include <linux/gpio.h> +#include <linux/gpio_keys.h>  #include <linux/leds.h>  #include <asm/machvec.h>  #include <asm/io.h> @@ -84,9 +86,42 @@ static struct platform_device led_device = {  	},  }; +static struct gpio_keys_button rsk7203_gpio_keys_table[] = { +	{ +		.code		= BTN_0, +		.gpio		= GPIO_PB0, +		.active_low	= 1, +		.desc		= "SW1", +	}, { +		.code		= BTN_1, +		.gpio		= GPIO_PB1, +		.active_low	= 1, +		.desc		= "SW2", +	}, { +		.code		= BTN_2, +		.gpio		= GPIO_PB2, +		.active_low	= 1, +		.desc		= "SW3", +	}, +}; + +static struct gpio_keys_platform_data rsk7203_gpio_keys_info = { +	.buttons	= rsk7203_gpio_keys_table, +	.nbuttons	= ARRAY_SIZE(rsk7203_gpio_keys_table), +	.poll_interval	= 50, /* default to 50ms */ +}; + +static struct platform_device keys_device = { +	.name		= "gpio-keys-polled", +	.dev		= { +		.platform_data	= &rsk7203_gpio_keys_info, +	}, +}; +  static struct platform_device *rsk7203_devices[] __initdata = {  	&smsc911x_device,  	&led_device, +	&keys_device,  };  static int __init rsk7203_devices_setup(void) diff --git a/arch/sh/boards/mach-rsk/devices-rsk7264.c b/arch/sh/boards/mach-rsk/devices-rsk7264.c new file mode 100644 index 00000000000..7251e37a842 --- /dev/null +++ b/arch/sh/boards/mach-rsk/devices-rsk7264.c @@ -0,0 +1,58 @@ +/* + * RSK+SH7264 Support. + * + * Copyright (C) 2012 Renesas Electronics Europe + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/types.h> +#include <linux/platform_device.h> +#include <linux/interrupt.h> +#include <linux/input.h> +#include <linux/smsc911x.h> +#include <asm/machvec.h> +#include <asm/io.h> + +static struct smsc911x_platform_config smsc911x_config = { +	.phy_interface	= PHY_INTERFACE_MODE_MII, +	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW, +	.irq_type	= SMSC911X_IRQ_TYPE_OPEN_DRAIN, +	.flags		= SMSC911X_USE_16BIT | SMSC911X_SWAP_FIFO, +}; + +static struct resource smsc911x_resources[] = { +	[0] = { +		.start		= 0x28000000, +		.end		= 0x280000ff, +		.flags		= IORESOURCE_MEM, +	}, +	[1] = { +		.start		= 65, +		.end		= 65, +		.flags		= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device smsc911x_device = { +	.name		= "smsc911x", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(smsc911x_resources), +	.resource	= smsc911x_resources, +	.dev		= { +		.platform_data = &smsc911x_config, +	}, +}; + +static struct platform_device *rsk7264_devices[] __initdata = { +	&smsc911x_device, +}; + +static int __init rsk7264_devices_setup(void) +{ +	return platform_add_devices(rsk7264_devices, +				    ARRAY_SIZE(rsk7264_devices)); +} +device_initcall(rsk7264_devices_setup); diff --git a/arch/sh/boards/mach-rsk/devices-rsk7269.c b/arch/sh/boards/mach-rsk/devices-rsk7269.c new file mode 100644 index 00000000000..4a544591d6f --- /dev/null +++ b/arch/sh/boards/mach-rsk/devices-rsk7269.c @@ -0,0 +1,60 @@ +/* + * RSK+SH7269 Support + * + * Copyright (C) 2012  Renesas Electronics Europe Ltd + * Copyright (C) 2012  Phil Edworthy + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/types.h> +#include <linux/platform_device.h> +#include <linux/interrupt.h> +#include <linux/input.h> +#include <linux/smsc911x.h> +#include <linux/gpio.h> +#include <asm/machvec.h> +#include <asm/io.h> + +static struct smsc911x_platform_config smsc911x_config = { +	.phy_interface	= PHY_INTERFACE_MODE_MII, +	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW, +	.irq_type	= SMSC911X_IRQ_TYPE_PUSH_PULL, +	.flags		= SMSC911X_USE_16BIT | SMSC911X_SWAP_FIFO, +}; + +static struct resource smsc911x_resources[] = { +	[0] = { +		.start		= 0x24000000, +		.end		= 0x240000ff, +		.flags		= IORESOURCE_MEM, +	}, +	[1] = { +		.start		= 85, +		.end		= 85, +		.flags		= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device smsc911x_device = { +	.name		= "smsc911x", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(smsc911x_resources), +	.resource	= smsc911x_resources, +	.dev		= { +		.platform_data = &smsc911x_config, +	}, +}; + +static struct platform_device *rsk7269_devices[] __initdata = { +	&smsc911x_device, +}; + +static int __init rsk7269_devices_setup(void) +{ +	return platform_add_devices(rsk7269_devices, +				    ARRAY_SIZE(rsk7269_devices)); +} +device_initcall(rsk7269_devices_setup); diff --git a/arch/sh/boards/mach-rsk/setup.c b/arch/sh/boards/mach-rsk/setup.c index a5c0df785bf..2685ea03b06 100644 --- a/arch/sh/boards/mach-rsk/setup.c +++ b/arch/sh/boards/mach-rsk/setup.c @@ -15,12 +15,20 @@  #include <linux/mtd/mtd.h>  #include <linux/mtd/partitions.h>  #include <linux/mtd/physmap.h> -#ifdef CONFIG_MTD  #include <linux/mtd/map.h> -#endif +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <asm/machvec.h>  #include <asm/io.h> +/* Dummy supplies, where voltage doesn't matter */ +static struct regulator_consumer_supply dummy_supplies[] = { +	REGULATOR_SUPPLY("vddvario", "smsc911x"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x"), +}; + +static const char *part_probes[] = { "cmdlinepart", NULL }; +  static struct mtd_partition rsk_partitions[] = {  	{  		.name		= "Bootloader", @@ -39,9 +47,10 @@ static struct mtd_partition rsk_partitions[] = {  };  static struct physmap_flash_data flash_data = { -	.parts		= rsk_partitions, -	.nr_parts	= ARRAY_SIZE(rsk_partitions), -	.width		= 2, +	.parts			= rsk_partitions, +	.nr_parts		= ARRAY_SIZE(rsk_partitions), +	.width			= 2, +	.part_probe_types	= part_probes,  };  static struct resource flash_resource = { @@ -60,44 +69,14 @@ static struct platform_device flash_device = {  	},  }; -#ifdef CONFIG_MTD -static const char *probes[] = { "cmdlinepart", NULL }; - -static struct map_info rsk_flash_map = { -	.name		= "RSK+ Flash", -	.size		= 0x400000, -	.bankwidth	= 2, -}; - -static struct mtd_info *flash_mtd; - -static struct mtd_partition *parsed_partitions; - -static void __init set_mtd_partitions(void) -{ -	int nr_parts = 0; - -	simple_map_init(&rsk_flash_map); -	flash_mtd = do_map_probe("cfi_probe", &rsk_flash_map); -	nr_parts = parse_mtd_partitions(flash_mtd, probes, -					&parsed_partitions, 0); -	/* If there is no partition table, used the hard coded table */ -	if (nr_parts > 0) { -		flash_data.nr_parts = nr_parts; -		flash_data.parts = parsed_partitions; -	} -} -#else -static inline void set_mtd_partitions(void) {} -#endif -  static struct platform_device *rsk_devices[] __initdata = {  	&flash_device,  };  static int __init rsk_devices_setup(void)  { -	set_mtd_partitions(); +	regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); +  	return platform_add_devices(rsk_devices,  				    ARRAY_SIZE(rsk_devices));  } diff --git a/arch/sh/boards/mach-sdk7780/setup.c b/arch/sh/boards/mach-sdk7780/setup.c index 4da38db4b5f..2241659c329 100644 --- a/arch/sh/boards/mach-sdk7780/setup.c +++ b/arch/sh/boards/mach-sdk7780/setup.c @@ -94,7 +94,6 @@ static void __init sdk7780_setup(char **cmdline_p)  static struct sh_machine_vector mv_se7780 __initmv = {  	.mv_name        = "Renesas SDK7780-R3" ,  	.mv_setup		= sdk7780_setup, -	.mv_nr_irqs		= 111,  	.mv_init_irq	= init_sdk7780_IRQ,  }; diff --git a/arch/sh/boards/mach-sdk7786/Makefile b/arch/sh/boards/mach-sdk7786/Makefile index 23ff7d4ac49..45d32e3590b 100644 --- a/arch/sh/boards/mach-sdk7786/Makefile +++ b/arch/sh/boards/mach-sdk7786/Makefile @@ -1,4 +1,4 @@ -obj-y	:= fpga.o irq.o setup.o +obj-y	:= fpga.o irq.o nmi.o setup.o -obj-$(CONFIG_GENERIC_GPIO)	+= gpio.o +obj-$(CONFIG_GPIOLIB)		+= gpio.o  obj-$(CONFIG_HAVE_SRAM_POOL)	+= sram.o diff --git a/arch/sh/boards/mach-sdk7786/nmi.c b/arch/sh/boards/mach-sdk7786/nmi.c new file mode 100644 index 00000000000..edcfa1f568b --- /dev/null +++ b/arch/sh/boards/mach-sdk7786/nmi.c @@ -0,0 +1,83 @@ +/* + * SDK7786 FPGA NMI Support. + * + * Copyright (C) 2010  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <mach/fpga.h> + +enum { +	NMI_MODE_MANUAL, +	NMI_MODE_AUX, +	NMI_MODE_MASKED, +	NMI_MODE_ANY, +	NMI_MODE_UNKNOWN, +}; + +/* + * Default to the manual NMI switch. + */ +static unsigned int __initdata nmi_mode = NMI_MODE_ANY; + +static int __init nmi_mode_setup(char *str) +{ +	if (!str) +		return 0; + +	if (strcmp(str, "manual") == 0) +		nmi_mode = NMI_MODE_MANUAL; +	else if (strcmp(str, "aux") == 0) +		nmi_mode = NMI_MODE_AUX; +	else if (strcmp(str, "masked") == 0) +		nmi_mode = NMI_MODE_MASKED; +	else if (strcmp(str, "any") == 0) +		nmi_mode = NMI_MODE_ANY; +	else { +		nmi_mode = NMI_MODE_UNKNOWN; +		pr_warning("Unknown NMI mode %s\n", str); +	} + +	printk("Set NMI mode to %d\n", nmi_mode); +	return 0; +} +early_param("nmi_mode", nmi_mode_setup); + +void __init sdk7786_nmi_init(void) +{ +	unsigned int source, mask, tmp; + +	switch (nmi_mode) { +	case NMI_MODE_MANUAL: +		source = NMISR_MAN_NMI; +		mask = NMIMR_MAN_NMIM; +		break; +	case NMI_MODE_AUX: +		source = NMISR_AUX_NMI; +		mask = NMIMR_AUX_NMIM; +		break; +	case NMI_MODE_ANY: +		source = NMISR_MAN_NMI | NMISR_AUX_NMI; +		mask = NMIMR_MAN_NMIM | NMIMR_AUX_NMIM; +		break; +	case NMI_MODE_MASKED: +	case NMI_MODE_UNKNOWN: +	default: +		source = mask = 0; +		break; +	} + +	/* Set the NMI source */ +	tmp = fpga_read_reg(NMISR); +	tmp &= ~NMISR_MASK; +	tmp |= source; +	fpga_write_reg(tmp, NMISR); + +	/* And the IRQ masking */ +	fpga_write_reg(NMIMR_MASK ^ mask, NMIMR); +} diff --git a/arch/sh/boards/mach-sdk7786/setup.c b/arch/sh/boards/mach-sdk7786/setup.c index 7e0c4e3878e..c29268bfd34 100644 --- a/arch/sh/boards/mach-sdk7786/setup.c +++ b/arch/sh/boards/mach-sdk7786/setup.c @@ -11,17 +11,19 @@  #include <linux/init.h>  #include <linux/platform_device.h>  #include <linux/io.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/smsc911x.h>  #include <linux/i2c.h>  #include <linux/irq.h>  #include <linux/clk.h> +#include <linux/clkdev.h>  #include <mach/fpga.h>  #include <mach/irq.h>  #include <asm/machvec.h>  #include <asm/heartbeat.h>  #include <asm/sizes.h>  #include <asm/clock.h> -#include <asm/clkdev.h>  #include <asm/reboot.h>  #include <asm/smp-ops.h> @@ -38,6 +40,12 @@ static struct platform_device heartbeat_device = {  	.resource	= &heartbeat_resource,  }; +/* Dummy supplies, where voltage doesn't matter */ +static struct regulator_consumer_supply dummy_supplies[] = { +	REGULATOR_SUPPLY("vddvario", "smsc911x"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x"), +}; +  static struct resource smsc911x_resources[] = {  	[0] = {  		.name		= "smsc911x-memory", @@ -135,7 +143,7 @@ static int __init sdk7786_devices_setup(void)  	return sdk7786_i2c_setup();  } -__initcall(sdk7786_devices_setup); +device_initcall(sdk7786_devices_setup);  static int sdk7786_mode_pins(void)  { @@ -167,7 +175,7 @@ static void sdk7786_pcie_clk_disable(struct clk *clk)  	fpga_write_reg(fpga_read_reg(PCIECR) & ~PCIECR_CLKEN, PCIECR);  } -static struct clk_ops sdk7786_pcie_clk_ops = { +static struct sh_clk_ops sdk7786_pcie_clk_ops = {  	.enable		= sdk7786_pcie_clk_enable,  	.disable	= sdk7786_pcie_clk_disable,  }; @@ -194,7 +202,7 @@ static int sdk7786_clk_init(void)  		return -EINVAL;  	clk = clk_get(NULL, "extal"); -	if (!clk || IS_ERR(clk)) +	if (IS_ERR(clk))  		return PTR_ERR(clk);  	ret = clk_set_rate(clk, 33333333);  	clk_put(clk); @@ -236,7 +244,10 @@ static void __init sdk7786_setup(char **cmdline_p)  {  	pr_info("Renesas Technology Europe SDK7786 support:\n"); +	regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); +  	sdk7786_fpga_init(); +	sdk7786_nmi_init();  	pr_info("\tPCB revision:\t%d\n", fpga_read_reg(PCBRR) & 0xf); diff --git a/arch/sh/boards/mach-se/7206/irq.c b/arch/sh/boards/mach-se/7206/irq.c index d961949600f..0db058e709e 100644 --- a/arch/sh/boards/mach-se/7206/irq.c +++ b/arch/sh/boards/mach-se/7206/irq.c @@ -92,9 +92,8 @@ static void eoi_se7206_irq(struct irq_data *data)  {  	unsigned short sts0,sts1;  	unsigned int irq = data->irq; -	struct irq_desc *desc = irq_to_desc(irq); -	if (!(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS))) +	if (!irqd_irq_disabled(data) && !irqd_irq_inprogress(data))  		enable_se7206_irq(data);  	/* FPGA isr clear */  	sts0 = __raw_readw(INTSTS0); @@ -126,7 +125,7 @@ static struct irq_chip se7206_irq_chip __read_mostly = {  static void make_se7206_irq(unsigned int irq)  {  	disable_irq_nosync(irq); -	set_irq_chip_and_handler_name(irq, &se7206_irq_chip, +	irq_set_chip_and_handler_name(irq, &se7206_irq_chip,  				      handle_level_irq, "level");  	disable_se7206_irq(irq_get_irq_data(irq));  } @@ -140,7 +139,7 @@ void __init init_se7206_IRQ(void)  	make_se7206_irq(IRQ1_IRQ); /* ATA */  	make_se7206_irq(IRQ3_IRQ); /* SLOT / PCM */ -	__raw_writew(__raw_readw(INTC_ICR1) | 0x000b, INTC_ICR); /* ICR1 */ +	__raw_writew(__raw_readw(INTC_ICR1) | 0x000b, INTC_ICR1); /* ICR1 */  	/* FPGA System register setup*/  	__raw_writew(0x0000,INTSTS0); /* Clear INTSTS0 */ diff --git a/arch/sh/boards/mach-se/7206/setup.c b/arch/sh/boards/mach-se/7206/setup.c index 7f4871c71a0..68883ec9568 100644 --- a/arch/sh/boards/mach-se/7206/setup.c +++ b/arch/sh/boards/mach-se/7206/setup.c @@ -77,7 +77,12 @@ static int __init se7206_devices_setup(void)  {  	return platform_add_devices(se7206_devices, ARRAY_SIZE(se7206_devices));  } -__initcall(se7206_devices_setup); +device_initcall(se7206_devices_setup); + +static int se7206_mode_pins(void) +{ +	return MODE_PIN1 | MODE_PIN2; +}  /*   * The Machine Vector @@ -85,6 +90,6 @@ __initcall(se7206_devices_setup);  static struct sh_machine_vector mv_se __initmv = {  	.mv_name		= "SolutionEngine", -	.mv_nr_irqs		= 256,  	.mv_init_irq		= init_se7206_IRQ, +	.mv_mode_pins		= se7206_mode_pins,  }; diff --git a/arch/sh/boards/mach-se/7343/irq.c b/arch/sh/boards/mach-se/7343/irq.c index 76255a19417..7646bf0486c 100644 --- a/arch/sh/boards/mach-se/7343/irq.c +++ b/arch/sh/boards/mach-se/7343/irq.c @@ -1,54 +1,109 @@  /* - * linux/arch/sh/boards/se/7343/irq.c + * Hitachi UL SolutionEngine 7343 FPGA IRQ Support.   *   * Copyright (C) 2008  Yoshihiro Shimoda + * Copyright (C) 2012  Paul Mundt   * - * Based on linux/arch/sh/boards/se/7722/irq.c + * Based on linux/arch/sh/boards/se/7343/irq.c   * Copyright (C) 2007  Nobuhiro Iwamatsu   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   */ +#define DRV_NAME "SE7343-FPGA" +#define pr_fmt(fmt) DRV_NAME ": " fmt + +#define irq_reg_readl	ioread16 +#define irq_reg_writel	iowrite16 +  #include <linux/init.h>  #include <linux/irq.h>  #include <linux/interrupt.h> +#include <linux/irqdomain.h>  #include <linux/io.h> +#include <asm/sizes.h>  #include <mach-se/mach/se7343.h> -unsigned int se7343_fpga_irq[SE7343_FPGA_IRQ_NR] = { 0, }; +#define PA_CPLD_BASE_ADDR	0x11400000 +#define PA_CPLD_ST_REG		0x08	/* CPLD Interrupt status register */ +#define PA_CPLD_IMSK_REG	0x0a	/* CPLD Interrupt mask register */ -static void disable_se7343_irq(struct irq_data *data) +static void __iomem *se7343_irq_regs; +struct irq_domain *se7343_irq_domain; + +static void se7343_irq_demux(unsigned int irq, struct irq_desc *desc)  { -	unsigned int bit = (unsigned int)irq_data_get_irq_chip_data(data); -	__raw_writew(__raw_readw(PA_CPLD_IMSK) | 1 << bit, PA_CPLD_IMSK); +	struct irq_data *data = irq_get_irq_data(irq); +	struct irq_chip *chip = irq_data_get_irq_chip(data); +	unsigned long mask; +	int bit; + +	chip->irq_mask_ack(data); + +	mask = ioread16(se7343_irq_regs + PA_CPLD_ST_REG); + +	for_each_set_bit(bit, &mask, SE7343_FPGA_IRQ_NR) +		generic_handle_irq(irq_linear_revmap(se7343_irq_domain, bit)); + +	chip->irq_unmask(data);  } -static void enable_se7343_irq(struct irq_data *data) +static void __init se7343_domain_init(void)  { -	unsigned int bit = (unsigned int)irq_data_get_irq_chip_data(data); -	__raw_writew(__raw_readw(PA_CPLD_IMSK) & ~(1 << bit), PA_CPLD_IMSK); -} +	int i; -static struct irq_chip se7343_irq_chip __read_mostly = { -	.name		= "SE7343-FPGA", -	.irq_mask	= disable_se7343_irq, -	.irq_unmask	= enable_se7343_irq, -}; +	se7343_irq_domain = irq_domain_add_linear(NULL, SE7343_FPGA_IRQ_NR, +						  &irq_domain_simple_ops, NULL); +	if (unlikely(!se7343_irq_domain)) { +		printk("Failed to get IRQ domain\n"); +		return; +	} -static void se7343_irq_demux(unsigned int irq, struct irq_desc *desc) +	for (i = 0; i < SE7343_FPGA_IRQ_NR; i++) { +		int irq = irq_create_mapping(se7343_irq_domain, i); + +		if (unlikely(irq == 0)) { +			printk("Failed to allocate IRQ %d\n", i); +			return; +		} +	} +} + +static void __init se7343_gc_init(void)  { -	unsigned short intv = __raw_readw(PA_CPLD_ST); -	unsigned int ext_irq = 0; +	struct irq_chip_generic *gc; +	struct irq_chip_type *ct; +	unsigned int irq_base; -	intv &= (1 << SE7343_FPGA_IRQ_NR) - 1; +	irq_base = irq_linear_revmap(se7343_irq_domain, 0); -	for (; intv; intv >>= 1, ext_irq++) { -		if (!(intv & 1)) -			continue; +	gc = irq_alloc_generic_chip(DRV_NAME, 1, irq_base, se7343_irq_regs, +				    handle_level_irq); +	if (unlikely(!gc)) +		return; -		generic_handle_irq(se7343_fpga_irq[ext_irq]); -	} +	ct = gc->chip_types; +	ct->chip.irq_mask = irq_gc_mask_set_bit; +	ct->chip.irq_unmask = irq_gc_mask_clr_bit; + +	ct->regs.mask = PA_CPLD_IMSK_REG; + +	irq_setup_generic_chip(gc, IRQ_MSK(SE7343_FPGA_IRQ_NR), +			       IRQ_GC_INIT_MASK_CACHE, +			       IRQ_NOREQUEST | IRQ_NOPROBE, 0); + +	irq_set_chained_handler(IRQ0_IRQ, se7343_irq_demux); +	irq_set_irq_type(IRQ0_IRQ, IRQ_TYPE_LEVEL_LOW); + +	irq_set_chained_handler(IRQ1_IRQ, se7343_irq_demux); +	irq_set_irq_type(IRQ1_IRQ, IRQ_TYPE_LEVEL_LOW); + +	irq_set_chained_handler(IRQ4_IRQ, se7343_irq_demux); +	irq_set_irq_type(IRQ4_IRQ, IRQ_TYPE_LEVEL_LOW); + +	irq_set_chained_handler(IRQ5_IRQ, se7343_irq_demux); +	irq_set_irq_type(IRQ5_IRQ, IRQ_TYPE_LEVEL_LOW);  }  /* @@ -56,30 +111,19 @@ static void se7343_irq_demux(unsigned int irq, struct irq_desc *desc)   */  void __init init_7343se_IRQ(void)  { -	int i, irq; - -	__raw_writew(0, PA_CPLD_IMSK);	/* disable all irqs */ -	__raw_writew(0x2000, 0xb03fffec);	/* mrshpc irq enable */ - -	for (i = 0; i < SE7343_FPGA_IRQ_NR; i++) { -		irq = create_irq(); -		if (irq < 0) -			return; -		se7343_fpga_irq[i] = irq; +	se7343_irq_regs = ioremap(PA_CPLD_BASE_ADDR, SZ_16); +	if (unlikely(!se7343_irq_regs)) { +		pr_err("Failed to remap CPLD\n"); +		return; +	} -		set_irq_chip_and_handler_name(se7343_fpga_irq[i], -					      &se7343_irq_chip, -					      handle_level_irq, "level"); +	/* +	 * All FPGA IRQs disabled by default +	 */ +	iowrite16(0, se7343_irq_regs + PA_CPLD_IMSK_REG); -		set_irq_chip_data(se7343_fpga_irq[i], (void *)i); -	} +	__raw_writew(0x2000, 0xb03fffec);	/* mrshpc irq enable */ -	set_irq_chained_handler(IRQ0_IRQ, se7343_irq_demux); -	set_irq_type(IRQ0_IRQ, IRQ_TYPE_LEVEL_LOW); -	set_irq_chained_handler(IRQ1_IRQ, se7343_irq_demux); -	set_irq_type(IRQ1_IRQ, IRQ_TYPE_LEVEL_LOW); -	set_irq_chained_handler(IRQ4_IRQ, se7343_irq_demux); -	set_irq_type(IRQ4_IRQ, IRQ_TYPE_LEVEL_LOW); -	set_irq_chained_handler(IRQ5_IRQ, se7343_irq_demux); -	set_irq_type(IRQ5_IRQ, IRQ_TYPE_LEVEL_LOW); +	se7343_domain_init(); +	se7343_gc_init();  } diff --git a/arch/sh/boards/mach-se/7343/setup.c b/arch/sh/boards/mach-se/7343/setup.c index d2370af56d7..8ce4f2a202a 100644 --- a/arch/sh/boards/mach-se/7343/setup.c +++ b/arch/sh/boards/mach-se/7343/setup.c @@ -5,6 +5,7 @@  #include <linux/serial_reg.h>  #include <linux/usb/isp116x.h>  #include <linux/delay.h> +#include <linux/irqdomain.h>  #include <asm/machvec.h>  #include <mach-se/mach/se7343.h>  #include <asm/heartbeat.h> @@ -145,11 +146,12 @@ static struct platform_device *sh7343se_platform_devices[] __initdata = {  static int __init sh7343se_devices_setup(void)  {  	/* Wire-up dynamic vectors */ -	serial_platform_data[0].irq = se7343_fpga_irq[SE7343_FPGA_IRQ_UARTA]; -	serial_platform_data[1].irq = se7343_fpga_irq[SE7343_FPGA_IRQ_UARTB]; - +	serial_platform_data[0].irq = irq_find_mapping(se7343_irq_domain, +						       SE7343_FPGA_IRQ_UARTA); +	serial_platform_data[1].irq = irq_find_mapping(se7343_irq_domain, +						       SE7343_FPGA_IRQ_UARTB);  	usb_resources[2].start = usb_resources[2].end = -		se7343_fpga_irq[SE7343_FPGA_IRQ_USB]; +		irq_find_mapping(se7343_irq_domain, SE7343_FPGA_IRQ_USB);  	return platform_add_devices(sh7343se_platform_devices,  				    ARRAY_SIZE(sh7343se_platform_devices)); diff --git a/arch/sh/boards/mach-se/770x/setup.c b/arch/sh/boards/mach-se/770x/setup.c index 31330c65c0c..658326f44df 100644 --- a/arch/sh/boards/mach-se/770x/setup.c +++ b/arch/sh/boards/mach-se/770x/setup.c @@ -128,8 +128,8 @@ static struct resource sh_eth0_resources[] = {  };  static struct platform_device sh_eth0_device = { -	.name = "sh-eth", -	.id	= 0, +	.name = "sh771x-ether", +	.id = 0,  	.dev = {  		.platform_data = PHY_ID,  	}, @@ -151,8 +151,8 @@ static struct resource sh_eth1_resources[] = {  };  static struct platform_device sh_eth1_device = { -	.name = "sh-eth", -	.id	= 1, +	.name = "sh771x-ether", +	.id = 1,  	.dev = {  		.platform_data = PHY_ID,  	}, @@ -184,16 +184,5 @@ device_initcall(se_devices_setup);  static struct sh_machine_vector mv_se __initmv = {  	.mv_name		= "SolutionEngine",  	.mv_setup		= smsc_setup, -#if defined(CONFIG_CPU_SH4) -	.mv_nr_irqs		= 48, -#elif defined(CONFIG_CPU_SUBTYPE_SH7708) -	.mv_nr_irqs		= 32, -#elif defined(CONFIG_CPU_SUBTYPE_SH7709) -	.mv_nr_irqs		= 61, -#elif defined(CONFIG_CPU_SUBTYPE_SH7705) -	.mv_nr_irqs		= 86, -#elif defined(CONFIG_CPU_SUBTYPE_SH7710) || defined(CONFIG_CPU_SUBTYPE_SH7712) -	.mv_nr_irqs             = 104, -#endif  	.mv_init_irq		= init_se_IRQ,  }; diff --git a/arch/sh/boards/mach-se/7721/setup.c b/arch/sh/boards/mach-se/7721/setup.c index 7416ad7ee53..a0b3dba34eb 100644 --- a/arch/sh/boards/mach-se/7721/setup.c +++ b/arch/sh/boards/mach-se/7721/setup.c @@ -92,6 +92,5 @@ static void __init se7721_setup(char **cmdline_p)  struct sh_machine_vector mv_se7721 __initmv = {  	.mv_name		= "Solution Engine 7721",  	.mv_setup		= se7721_setup, -	.mv_nr_irqs		= 109,  	.mv_init_irq		= init_se7721_IRQ,  }; diff --git a/arch/sh/boards/mach-se/7722/irq.c b/arch/sh/boards/mach-se/7722/irq.c index c013f95628e..f5e2af1bf04 100644 --- a/arch/sh/boards/mach-se/7722/irq.c +++ b/arch/sh/boards/mach-se/7722/irq.c @@ -1,82 +1,122 @@  /* - * linux/arch/sh/boards/se/7722/irq.c + * Hitachi UL SolutionEngine 7722 FPGA IRQ Support.   *   * Copyright (C) 2007  Nobuhiro Iwamatsu - * - * Hitachi UL SolutionEngine 7722 Support. + * Copyright (C) 2012  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   */ +#define DRV_NAME "SE7722-FPGA" +#define pr_fmt(fmt) DRV_NAME ": " fmt + +#define irq_reg_readl	ioread16 +#define irq_reg_writel	iowrite16 +  #include <linux/init.h>  #include <linux/irq.h>  #include <linux/interrupt.h> -#include <asm/irq.h> -#include <asm/io.h> +#include <linux/irqdomain.h> +#include <linux/io.h> +#include <linux/err.h> +#include <asm/sizes.h>  #include <mach-se/mach/se7722.h> -unsigned int se7722_fpga_irq[SE7722_FPGA_IRQ_NR] = { 0, }; +#define IRQ01_BASE_ADDR	0x11800000 +#define IRQ01_MODE_REG	0 +#define IRQ01_STS_REG	4 +#define IRQ01_MASK_REG	8 -static void disable_se7722_irq(struct irq_data *data) -{ -	unsigned int bit = (unsigned int)irq_data_get_irq_chip_data(data); -	__raw_writew(__raw_readw(IRQ01_MASK) | 1 << bit, IRQ01_MASK); -} +static void __iomem *se7722_irq_regs; +struct irq_domain *se7722_irq_domain; -static void enable_se7722_irq(struct irq_data *data) +static void se7722_irq_demux(unsigned int irq, struct irq_desc *desc)  { -	unsigned int bit = (unsigned int)irq_data_get_irq_chip_data(data); -	__raw_writew(__raw_readw(IRQ01_MASK) & ~(1 << bit), IRQ01_MASK); -} +	struct irq_data *data = irq_get_irq_data(irq); +	struct irq_chip *chip = irq_data_get_irq_chip(data); +	unsigned long mask; +	int bit; -static struct irq_chip se7722_irq_chip __read_mostly = { -	.name		= "SE7722-FPGA", -	.irq_mask	= disable_se7722_irq, -	.irq_unmask	= enable_se7722_irq, -}; +	chip->irq_mask_ack(data); -static void se7722_irq_demux(unsigned int irq, struct irq_desc *desc) +	mask = ioread16(se7722_irq_regs + IRQ01_STS_REG); + +	for_each_set_bit(bit, &mask, SE7722_FPGA_IRQ_NR) +		generic_handle_irq(irq_linear_revmap(se7722_irq_domain, bit)); + +	chip->irq_unmask(data); +} + +static void __init se7722_domain_init(void)  { -	unsigned short intv = __raw_readw(IRQ01_STS); -	unsigned int ext_irq = 0; +	int i; -	intv &= (1 << SE7722_FPGA_IRQ_NR) - 1; +	se7722_irq_domain = irq_domain_add_linear(NULL, SE7722_FPGA_IRQ_NR, +						  &irq_domain_simple_ops, NULL); +	if (unlikely(!se7722_irq_domain)) { +		printk("Failed to get IRQ domain\n"); +		return; +	} -	for (; intv; intv >>= 1, ext_irq++) { -		if (!(intv & 1)) -			continue; +	for (i = 0; i < SE7722_FPGA_IRQ_NR; i++) { +		int irq = irq_create_mapping(se7722_irq_domain, i); -		generic_handle_irq(se7722_fpga_irq[ext_irq]); +		if (unlikely(irq == 0)) { +			printk("Failed to allocate IRQ %d\n", i); +			return; +		}  	}  } -/* - * Initialize IRQ setting - */ -void __init init_se7722_IRQ(void) +static void __init se7722_gc_init(void)  { -	int i, irq; +	struct irq_chip_generic *gc; +	struct irq_chip_type *ct; +	unsigned int irq_base; -	__raw_writew(0, IRQ01_MASK);       /* disable all irqs */ -	__raw_writew(0x2000, 0xb03fffec);  /* mrshpc irq enable */ +	irq_base = irq_linear_revmap(se7722_irq_domain, 0); -	for (i = 0; i < SE7722_FPGA_IRQ_NR; i++) { -		irq = create_irq(); -		if (irq < 0) -			return; -		se7722_fpga_irq[i] = irq; +	gc = irq_alloc_generic_chip(DRV_NAME, 1, irq_base, se7722_irq_regs, +				    handle_level_irq); +	if (unlikely(!gc)) +		return; + +	ct = gc->chip_types; +	ct->chip.irq_mask = irq_gc_mask_set_bit; +	ct->chip.irq_unmask = irq_gc_mask_clr_bit; + +	ct->regs.mask = IRQ01_MASK_REG; + +	irq_setup_generic_chip(gc, IRQ_MSK(SE7722_FPGA_IRQ_NR), +			       IRQ_GC_INIT_MASK_CACHE, +			       IRQ_NOREQUEST | IRQ_NOPROBE, 0); -		set_irq_chip_and_handler_name(se7722_fpga_irq[i], -					      &se7722_irq_chip, -					      handle_level_irq, "level"); +	irq_set_chained_handler(IRQ0_IRQ, se7722_irq_demux); +	irq_set_irq_type(IRQ0_IRQ, IRQ_TYPE_LEVEL_LOW); -		set_irq_chip_data(se7722_fpga_irq[i], (void *)i); +	irq_set_chained_handler(IRQ1_IRQ, se7722_irq_demux); +	irq_set_irq_type(IRQ1_IRQ, IRQ_TYPE_LEVEL_LOW); +} + +/* + * Initialize FPGA IRQs + */ +void __init init_se7722_IRQ(void) +{ +	se7722_irq_regs = ioremap(IRQ01_BASE_ADDR, SZ_16); +	if (unlikely(!se7722_irq_regs)) { +		printk("Failed to remap IRQ01 regs\n"); +		return;  	} -	set_irq_chained_handler(IRQ0_IRQ, se7722_irq_demux); -	set_irq_type(IRQ0_IRQ, IRQ_TYPE_LEVEL_LOW); +	/* +	 * All FPGA IRQs disabled by default +	 */ +	iowrite16(0, se7722_irq_regs + IRQ01_MASK_REG); + +	__raw_writew(0x2000, 0xb03fffec);  /* mrshpc irq enable */ -	set_irq_chained_handler(IRQ1_IRQ, se7722_irq_demux); -	set_irq_type(IRQ1_IRQ, IRQ_TYPE_LEVEL_LOW); +	se7722_domain_init(); +	se7722_gc_init();  } diff --git a/arch/sh/boards/mach-se/7722/setup.c b/arch/sh/boards/mach-se/7722/setup.c index 80a4e571b31..e04e2bc4698 100644 --- a/arch/sh/boards/mach-se/7722/setup.c +++ b/arch/sh/boards/mach-se/7722/setup.c @@ -2,6 +2,7 @@   * linux/arch/sh/boards/se/7722/setup.c   *   * Copyright (C) 2007 Nobuhiro Iwamatsu + * Copyright (C) 2012 Paul Mundt   *   * Hitachi UL SolutionEngine 7722 Support.   * @@ -15,7 +16,9 @@  #include <linux/ata_platform.h>  #include <linux/input.h>  #include <linux/input/sh_keysc.h> +#include <linux/irqdomain.h>  #include <linux/smc91x.h> +#include <linux/sh_intc.h>  #include <mach-se/mach/se7722.h>  #include <mach-se/mach/mrshpc.h>  #include <asm/machvec.h> @@ -114,7 +117,7 @@ static struct resource sh_keysc_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 79, +		.start  = evt2irq(0xbe0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -127,9 +130,6 @@ static struct platform_device sh_keysc_device = {  	.dev	= {  		.platform_data	= &sh_keysc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_KEYSC, -	},  };  static struct platform_device *se7722_devices[] __initdata = { @@ -145,10 +145,10 @@ static int __init se7722_devices_setup(void)  	/* Wire-up dynamic vectors */  	cf_ide_resources[2].start = cf_ide_resources[2].end = -		se7722_fpga_irq[SE7722_FPGA_IRQ_MRSHPC0]; +		irq_find_mapping(se7722_irq_domain, SE7722_FPGA_IRQ_MRSHPC0);  	smc91x_eth_resources[1].start = smc91x_eth_resources[1].end = -		se7722_fpga_irq[SE7722_FPGA_IRQ_SMC]; +		irq_find_mapping(se7722_irq_domain, SE7722_FPGA_IRQ_SMC);  	return platform_add_devices(se7722_devices, ARRAY_SIZE(se7722_devices));  } diff --git a/arch/sh/boards/mach-se/7724/irq.c b/arch/sh/boards/mach-se/7724/irq.c index 5bd87c22b65..5d1d3ec9a6c 100644 --- a/arch/sh/boards/mach-se/7724/irq.c +++ b/arch/sh/boards/mach-se/7724/irq.c @@ -17,8 +17,10 @@  #include <linux/init.h>  #include <linux/irq.h>  #include <linux/interrupt.h> -#include <asm/irq.h> -#include <asm/io.h> +#include <linux/export.h> +#include <linux/topology.h> +#include <linux/io.h> +#include <linux/err.h>  #include <mach-se/mach/se7724.h>  struct fpga_irq { @@ -111,7 +113,7 @@ static void se7724_irq_demux(unsigned int irq, struct irq_desc *desc)   */  void __init init_se7724_IRQ(void)  { -	int i, nid = cpu_to_node(boot_cpu_data); +	int irq_base, i;  	__raw_writew(0xffff, IRQ0_MR);  /* mask all */  	__raw_writew(0xffff, IRQ1_MR);  /* mask all */ @@ -121,36 +123,23 @@ void __init init_se7724_IRQ(void)  	__raw_writew(0x0000, IRQ2_SR);  /* clear irq */  	__raw_writew(0x002a, IRQ_MODE); /* set irq type */ -	for (i = 0; i < SE7724_FPGA_IRQ_NR; i++) { -		int irq, wanted; - -		wanted = SE7724_FPGA_IRQ_BASE + i; - -		irq = create_irq_nr(wanted, nid); -		if (unlikely(irq == 0)) { -			pr_err("%s: failed hooking irq %d for FPGA\n", -			       __func__, wanted); -			return; -		} - -		if (unlikely(irq != wanted)) { -			pr_err("%s: got irq %d but wanted %d, bailing.\n", -			       __func__, irq, wanted); -			destroy_irq(irq); -			return; -		} +	irq_base = irq_alloc_descs(SE7724_FPGA_IRQ_BASE, SE7724_FPGA_IRQ_BASE, +				   SE7724_FPGA_IRQ_NR, numa_node_id()); +	if (IS_ERR_VALUE(irq_base)) { +		pr_err("%s: failed hooking irqs for FPGA\n", __func__); +		return; +	} -		set_irq_chip_and_handler_name(irq, -					      &se7724_irq_chip, +	for (i = 0; i < SE7724_FPGA_IRQ_NR; i++) +		irq_set_chip_and_handler_name(irq_base + i, &se7724_irq_chip,  					      handle_level_irq, "level"); -	} -	set_irq_chained_handler(IRQ0_IRQ, se7724_irq_demux); -	set_irq_type(IRQ0_IRQ, IRQ_TYPE_LEVEL_LOW); +	irq_set_chained_handler(IRQ0_IRQ, se7724_irq_demux); +	irq_set_irq_type(IRQ0_IRQ, IRQ_TYPE_LEVEL_LOW); -	set_irq_chained_handler(IRQ1_IRQ, se7724_irq_demux); -	set_irq_type(IRQ1_IRQ, IRQ_TYPE_LEVEL_LOW); +	irq_set_chained_handler(IRQ1_IRQ, se7724_irq_demux); +	irq_set_irq_type(IRQ1_IRQ, IRQ_TYPE_LEVEL_LOW); -	set_irq_chained_handler(IRQ2_IRQ, se7724_irq_demux); -	set_irq_type(IRQ2_IRQ, IRQ_TYPE_LEVEL_LOW); +	irq_set_chained_handler(IRQ2_IRQ, se7724_irq_demux); +	irq_set_irq_type(IRQ2_IRQ, IRQ_TYPE_LEVEL_LOW);  } diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index c31d228fdfc..1162bc6945a 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c @@ -14,20 +14,26 @@  #include <linux/device.h>  #include <linux/interrupt.h>  #include <linux/platform_device.h> -#include <linux/mfd/sh_mobile_sdhi.h> +#include <linux/mmc/host.h> +#include <linux/mmc/sh_mobile_sdhi.h>  #include <linux/mtd/physmap.h>  #include <linux/delay.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <linux/smc91x.h>  #include <linux/gpio.h>  #include <linux/input.h>  #include <linux/input/sh_keysc.h>  #include <linux/usb/r8a66597.h> +#include <linux/sh_eth.h> +#include <linux/sh_intc.h> +#include <linux/videodev2.h>  #include <video/sh_mobile_lcdc.h>  #include <media/sh_mobile_ceu.h>  #include <sound/sh_fsi.h> +#include <sound/simple_card.h>  #include <asm/io.h>  #include <asm/heartbeat.h> -#include <asm/sh_eth.h>  #include <asm/clock.h>  #include <asm/suspend.h>  #include <cpu/sh7724.h> @@ -144,7 +150,7 @@ static struct platform_device nor_flash_device = {  };  /* LCDC */ -const static struct fb_videomode lcdc_720p_modes[] = { +static const struct fb_videomode lcdc_720p_modes[] = {  	{  		.name		= "LB070WV1",  		.sync		= 0, /* hsync and vsync are active low */ @@ -159,7 +165,7 @@ const static struct fb_videomode lcdc_720p_modes[] = {  	},  }; -const static struct fb_videomode lcdc_vga_modes[] = { +static const struct fb_videomode lcdc_vga_modes[] = {  	{  		.name		= "LB070WV1",  		.sync		= 0, /* hsync and vsync are active low */ @@ -178,14 +184,12 @@ static struct sh_mobile_lcdc_info lcdc_info = {  	.clock_source = LCDC_CLK_EXTERNAL,  	.ch[0] = {  		.chan = LCDC_CHAN_MAINLCD, -		.bpp = 16, +		.fourcc = V4L2_PIX_FMT_RGB565,  		.clock_divider = 1, -		.lcd_size_cfg = { /* 7.0 inch */ +		.panel_cfg = { /* 7.0 inch */  			.width = 152,  			.height = 91,  		}, -		.board_cfg = { -		},  	}  }; @@ -197,7 +201,7 @@ static struct resource lcdc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 106, +		.start	= evt2irq(0xf40),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -209,9 +213,6 @@ static struct platform_device lcdc_device = {  	.dev		= {  		.platform_data	= &lcdc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_LCDC, -	},  };  /* CEU0 */ @@ -227,7 +228,7 @@ static struct resource ceu0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start  = 52, +		.start  = evt2irq(0x880),  		.flags  = IORESOURCE_IRQ,  	},  	[2] = { @@ -243,9 +244,6 @@ static struct platform_device ceu0_device = {  	.dev	= {  		.platform_data	= &sh_mobile_ceu0_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_CEU0, -	},  };  /* CEU1 */ @@ -261,7 +259,7 @@ static struct resource ceu1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start  = 63, +		.start  = evt2irq(0x9e0),  		.flags  = IORESOURCE_IRQ,  	},  	[2] = { @@ -277,46 +275,10 @@ static struct platform_device ceu1_device = {  	.dev	= {  		.platform_data	= &sh_mobile_ceu1_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_CEU1, -	},  };  /* FSI */ -/* - * FSI-A use external clock which came from ak464x. - * So, we should change parent of fsi - */ -#define FCLKACR		0xa4150008 -static void fsimck_init(struct clk *clk) -{ -	u32 status = __raw_readl(clk->enable_reg); - -	/* use external clock */ -	status &= ~0x000000ff; -	status |= 0x00000080; -	__raw_writel(status, clk->enable_reg); -} - -static struct clk_ops fsimck_clk_ops = { -	.init = fsimck_init, -}; - -static struct clk fsimcka_clk = { -	.ops		= &fsimck_clk_ops, -	.enable_reg	= (void __iomem *)FCLKACR, -	.rate		= 0, /* unknown */ -}; -  /* change J20, J21, J22 pin to 1-2 connection to use slave mode */ -static struct sh_fsi_platform_info fsi_info = { -	.porta_flags = SH_FSI_BRS_INV | -		       SH_FSI_OUT_SLAVE_MODE | -		       SH_FSI_IN_SLAVE_MODE | -		       SH_FSI_OFMT(PCM) | -		       SH_FSI_IFMT(PCM), -}; -  static struct resource fsi_resources[] = {  	[0] = {  		.name	= "FSI", @@ -325,7 +287,7 @@ static struct resource fsi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start  = 108, +		.start  = evt2irq(0xf80),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -335,11 +297,27 @@ static struct platform_device fsi_device = {  	.id		= 0,  	.num_resources	= ARRAY_SIZE(fsi_resources),  	.resource	= fsi_resources, -	.dev	= { -		.platform_data	= &fsi_info, +}; + +static struct asoc_simple_card_info fsi_ak4642_info = { +	.name		= "AK4642", +	.card		= "FSIA-AK4642", +	.codec		= "ak4642-codec.0-0012", +	.platform	= "sh_fsi.0", +	.daifmt		= SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_CBM_CFM, +	.cpu_dai = { +		.name	= "fsia-dai",  	}, -	.archdata = { -		.hwblk_id = HWBLK_SPU, /* FSI needs SPU hwblk */ +	.codec_dai = { +		.name	= "ak4642-hifi", +		.sysclk	= 11289600, +	}, +}; + +static struct platform_device fsi_ak4642_device = { +	.name	= "asoc-simple-card", +	.dev	= { +		.platform_data	= &fsi_ak4642_info,  	},  }; @@ -366,7 +344,7 @@ static struct resource keysc_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 79, +		.start  = evt2irq(0xbe0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -379,20 +357,17 @@ static struct platform_device keysc_device = {  	.dev	= {  		.platform_data	= &keysc_info,  	}, -	.archdata = { -		.hwblk_id = HWBLK_KEYSC, -	},  };  /* SH Eth */  static struct resource sh_eth_resources[] = {  	[0] = {  		.start = SH_ETH_ADDR, -		.end   = SH_ETH_ADDR + 0x1FC, +		.end   = SH_ETH_ADDR + 0x1FC - 1,  		.flags = IORESOURCE_MEM,  	},  	[1] = { -		.start = 91, +		.start = evt2irq(0xd60),  		.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,  	},  }; @@ -400,19 +375,17 @@ static struct resource sh_eth_resources[] = {  static struct sh_eth_plat_data sh_eth_plat = {  	.phy = 0x1f, /* SMSC LAN8187 */  	.edmac_endian = EDMAC_LITTLE_ENDIAN, +	.phy_interface = PHY_INTERFACE_MODE_MII,  };  static struct platform_device sh_eth_device = { -	.name = "sh-eth", -	.id	= 0, +	.name = "sh7724-ether", +	.id = 0,  	.dev = {  		.platform_data = &sh_eth_plat,  	},  	.num_resources = ARRAY_SIZE(sh_eth_resources),  	.resource = sh_eth_resources, -	.archdata = { -		.hwblk_id = HWBLK_ETHER, -	},  };  static struct r8a66597_platdata sh7724_usb0_host_data = { @@ -426,8 +399,8 @@ static struct resource sh7724_usb0_host_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 65, -		.end	= 65, +		.start	= evt2irq(0xa20), +		.end	= evt2irq(0xa20),  		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,  	},  }; @@ -442,9 +415,6 @@ static struct platform_device sh7724_usb0_host_device = {  	},  	.num_resources	= ARRAY_SIZE(sh7724_usb0_host_resources),  	.resource	= sh7724_usb0_host_resources, -	.archdata = { -		.hwblk_id = HWBLK_USB0, -	},  };  static struct r8a66597_platdata sh7724_usb1_gadget_data = { @@ -458,8 +428,8 @@ static struct resource sh7724_usb1_gadget_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 66, -		.end	= 66, +		.start	= evt2irq(0xa40), +		.end	= evt2irq(0xa40),  		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,  	},  }; @@ -476,15 +446,24 @@ static struct platform_device sh7724_usb1_gadget_device = {  	.resource	= sh7724_usb1_gadget_resources,  }; +/* Fixed 3.3V regulator to be used by SDHI0, SDHI1 */ +static struct regulator_consumer_supply fixed3v3_power_consumers[] = +{ +	REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), +	REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), +	REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), +	REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"), +}; +  static struct resource sdhi0_cn7_resources[] = {  	[0] = {  		.name	= "SDHI0",  		.start  = 0x04ce0000, -		.end    = 0x04ce01ff, +		.end    = 0x04ce00ff,  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 100, +		.start  = evt2irq(0xe80),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -492,6 +471,7 @@ static struct resource sdhi0_cn7_resources[] = {  static struct sh_mobile_sdhi_info sh7724_sdhi0_data = {  	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX,  	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX, +	.tmio_caps      = MMC_CAP_SDIO_IRQ,  };  static struct platform_device sdhi0_cn7_device = { @@ -502,20 +482,17 @@ static struct platform_device sdhi0_cn7_device = {  	.dev = {  		.platform_data	= &sh7724_sdhi0_data,  	}, -	.archdata = { -		.hwblk_id = HWBLK_SDHI0, -	},  };  static struct resource sdhi1_cn8_resources[] = {  	[0] = {  		.name	= "SDHI1",  		.start  = 0x04cf0000, -		.end    = 0x04cf01ff, +		.end    = 0x04cf00ff,  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 23, +		.start  = evt2irq(0x4e0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -523,6 +500,7 @@ static struct resource sdhi1_cn8_resources[] = {  static struct sh_mobile_sdhi_info sh7724_sdhi1_data = {  	.dma_slave_tx	= SHDMA_SLAVE_SDHI1_TX,  	.dma_slave_rx	= SHDMA_SLAVE_SDHI1_RX, +	.tmio_caps      = MMC_CAP_SDIO_IRQ,  };  static struct platform_device sdhi1_cn8_device = { @@ -533,9 +511,6 @@ static struct platform_device sdhi1_cn8_device = {  	.dev = {  		.platform_data	= &sh7724_sdhi1_data,  	}, -	.archdata = { -		.hwblk_id = HWBLK_SDHI1, -	},  };  /* IrDA */ @@ -547,7 +522,7 @@ static struct resource irda_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 20, +		.start  = evt2irq(0x480),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -585,7 +560,7 @@ static struct resource sh_vou_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 55, +		.start  = evt2irq(0x8e0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -598,9 +573,6 @@ static struct platform_device vou_device = {  	.dev		= {  		.platform_data	= &sh_vou_pdata,  	}, -	.archdata	= { -		.hwblk_id	= HWBLK_VOU, -	},  };  static struct platform_device *ms7724se_devices[] __initdata = { @@ -615,6 +587,7 @@ static struct platform_device *ms7724se_devices[] __initdata = {  	&sh7724_usb0_host_device,  	&sh7724_usb1_gadget_device,  	&fsi_device, +	&fsi_ak4642_device,  	&sdhi0_cn7_device,  	&sdhi1_cn8_device,  	&irda_device, @@ -633,6 +606,7 @@ static struct i2c_board_info i2c0_devices[] = {  #define EEPROM_DATA 0xBA20600C  #define EEPROM_STAT 0xBA206010  #define EEPROM_STRT 0xBA206014 +  static int __init sh_eth_is_eeprom_ready(void)  {  	int t = 10000; @@ -689,7 +663,6 @@ extern char ms7724se_sdram_enter_end;  extern char ms7724se_sdram_leave_start;  extern char ms7724se_sdram_leave_end; -  static int __init arch_setup(void)  {  	/* enable I2C device */ @@ -712,6 +685,10 @@ static int __init devices_setup(void)  					&ms7724se_sdram_enter_end,  					&ms7724se_sdram_leave_start,  					&ms7724se_sdram_leave_end); + +	regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers, +				     ARRAY_SIZE(fixed3v3_power_consumers), 3300000); +  	/* Reset Release */  	fpga_out = __raw_readw(FPGA_OUT);  	/* bit4: NTSC_PDN, bit5: NTSC_RESET */ @@ -852,37 +829,29 @@ static int __init devices_setup(void)  	gpio_request(GPIO_FN_KEYOUT0,     NULL);  	/* enable FSI */ -	gpio_request(GPIO_FN_FSIMCKB,    NULL);  	gpio_request(GPIO_FN_FSIMCKA,    NULL); +	gpio_request(GPIO_FN_FSIIASD,    NULL);  	gpio_request(GPIO_FN_FSIOASD,    NULL);  	gpio_request(GPIO_FN_FSIIABCK,   NULL);  	gpio_request(GPIO_FN_FSIIALRCK,  NULL);  	gpio_request(GPIO_FN_FSIOABCK,   NULL);  	gpio_request(GPIO_FN_FSIOALRCK,  NULL);  	gpio_request(GPIO_FN_CLKAUDIOAO, NULL); -	gpio_request(GPIO_FN_FSIIBSD,    NULL); -	gpio_request(GPIO_FN_FSIOBSD,    NULL); -	gpio_request(GPIO_FN_FSIIBBCK,   NULL); -	gpio_request(GPIO_FN_FSIIBLRCK,  NULL); -	gpio_request(GPIO_FN_FSIOBBCK,   NULL); -	gpio_request(GPIO_FN_FSIOBLRCK,  NULL); -	gpio_request(GPIO_FN_CLKAUDIOBO, NULL); -	gpio_request(GPIO_FN_FSIIASD,    NULL);  	/* set SPU2 clock to 83.4 MHz */  	clk = clk_get(NULL, "spu_clk"); -	if (clk) { +	if (!IS_ERR(clk)) {  		clk_set_rate(clk, clk_round_rate(clk, 83333333));  		clk_put(clk);  	}  	/* change parent of FSI A */  	clk = clk_get(NULL, "fsia_clk"); -	if (clk) { -		clk_register(&fsimcka_clk); -		clk_set_parent(clk, &fsimcka_clk); -		clk_set_rate(clk, 11000); -		clk_set_rate(&fsimcka_clk, 11000); +	if (!IS_ERR(clk)) { +		/* 48kHz dummy clock was used to make sure 1/1 divide */ +		clk_set_rate(&sh7724_fsimcka_clk, 48000); +		clk_set_parent(clk, &sh7724_fsimcka_clk); +		clk_set_rate(clk, 48000);  		clk_put(clk);  	} @@ -934,12 +903,12 @@ static int __init devices_setup(void)  	if (sw & SW41_B) {  		/* 720p */ -		lcdc_info.ch[0].lcd_cfg	= lcdc_720p_modes; -		lcdc_info.ch[0].num_cfg	= ARRAY_SIZE(lcdc_720p_modes); +		lcdc_info.ch[0].lcd_modes = lcdc_720p_modes; +		lcdc_info.ch[0].num_modes = ARRAY_SIZE(lcdc_720p_modes);  	} else {  		/* VGA */ -		lcdc_info.ch[0].lcd_cfg	= lcdc_vga_modes; -		lcdc_info.ch[0].num_cfg	= ARRAY_SIZE(lcdc_vga_modes); +		lcdc_info.ch[0].lcd_modes = lcdc_vga_modes; +		lcdc_info.ch[0].num_modes = ARRAY_SIZE(lcdc_vga_modes);  	}  	if (sw & SW41_A) { @@ -974,5 +943,4 @@ device_initcall(devices_setup);  static struct sh_machine_vector mv_ms7724se __initmv = {  	.mv_name	= "ms7724se",  	.mv_init_irq	= init_se7724_IRQ, -	.mv_nr_irqs	= SE7724_FPGA_IRQ_BASE + SE7724_FPGA_IRQ_NR,  }; diff --git a/arch/sh/boards/mach-se/7751/setup.c b/arch/sh/boards/mach-se/7751/setup.c index 9fbc51beb18..820f4e7ba0d 100644 --- a/arch/sh/boards/mach-se/7751/setup.c +++ b/arch/sh/boards/mach-se/7751/setup.c @@ -48,13 +48,12 @@ static int __init se7751_devices_setup(void)  {  	return platform_add_devices(se7751_devices, ARRAY_SIZE(se7751_devices));  } -__initcall(se7751_devices_setup); +device_initcall(se7751_devices_setup);  /*   * The Machine Vector   */  static struct sh_machine_vector mv_7751se __initmv = {  	.mv_name		= "7751 SolutionEngine", -	.mv_nr_irqs		= 72,  	.mv_init_irq		= init_7751se_IRQ,  }; diff --git a/arch/sh/boards/mach-se/7780/setup.c b/arch/sh/boards/mach-se/7780/setup.c index 6f7c207138e..ae5a1d84fdf 100644 --- a/arch/sh/boards/mach-se/7780/setup.c +++ b/arch/sh/boards/mach-se/7780/setup.c @@ -110,6 +110,5 @@ static void __init se7780_setup(char **cmdline_p)  static struct sh_machine_vector mv_se7780 __initmv = {  	.mv_name                = "Solution Engine 7780" ,  	.mv_setup               = se7780_setup , -	.mv_nr_irqs		= 111 ,  	.mv_init_irq		= init_se7780_IRQ,  }; diff --git a/arch/sh/boards/mach-se/board-se7619.c b/arch/sh/boards/mach-se/board-se7619.c index 1d0ef7faa10..958bcd7aacc 100644 --- a/arch/sh/boards/mach-se/board-se7619.c +++ b/arch/sh/boards/mach-se/board-se7619.c @@ -11,11 +11,16 @@  #include <asm/io.h>  #include <asm/machvec.h> +static int se7619_mode_pins(void) +{ +	return MODE_PIN2 | MODE_PIN0; +} +  /*   * The Machine Vector   */  static struct sh_machine_vector mv_se __initmv = {  	.mv_name		= "SolutionEngine", -	.mv_nr_irqs		= 108, +	.mv_mode_pins		= se7619_mode_pins,  }; diff --git a/arch/sh/boards/mach-sh03/rtc.c b/arch/sh/boards/mach-sh03/rtc.c index 1b200990500..f83ac7995d0 100644 --- a/arch/sh/boards/mach-sh03/rtc.c +++ b/arch/sh/boards/mach-sh03/rtc.c @@ -108,7 +108,7 @@ static int set_rtc_mmss(unsigned long nowtime)  		__raw_writeb(real_minutes % 10, RTC_MIN1);  		__raw_writeb(real_minutes / 10, RTC_MIN10);  	} else { -		printk(KERN_WARNING +		printk_once(KERN_NOTICE  		       "set_rtc_mmss: can't update from %d to %d\n",  		       cmos_minutes, real_minutes);  		retval = -1; diff --git a/arch/sh/boards/mach-sh03/setup.c b/arch/sh/boards/mach-sh03/setup.c index af4a0c012a9..f582dab5934 100644 --- a/arch/sh/boards/mach-sh03/setup.c +++ b/arch/sh/boards/mach-sh03/setup.c @@ -96,11 +96,10 @@ static int __init sh03_devices_setup(void)  	return platform_add_devices(sh03_devices, ARRAY_SIZE(sh03_devices));  } -__initcall(sh03_devices_setup); +device_initcall(sh03_devices_setup);  static struct sh_machine_vector mv_sh03 __initmv = {  	.mv_name		= "Interface (CTP/PCI-SH03)",  	.mv_setup		= sh03_setup, -	.mv_nr_irqs		= 48,  	.mv_init_irq		= init_sh03_IRQ,  }; diff --git a/arch/sh/boards/mach-sh7763rdp/setup.c b/arch/sh/boards/mach-sh7763rdp/setup.c index f64a6918224..2c8fb04685d 100644 --- a/arch/sh/boards/mach-sh7763rdp/setup.c +++ b/arch/sh/boards/mach-sh7763rdp/setup.c @@ -17,8 +17,9 @@  #include <linux/mtd/physmap.h>  #include <linux/fb.h>  #include <linux/io.h> +#include <linux/sh_eth.h> +#include <linux/sh_intc.h>  #include <mach/sh7763rdp.h> -#include <asm/sh_eth.h>  #include <asm/sh7760fb.h>  /* NOR Flash */ @@ -67,7 +68,7 @@ static struct platform_device sh7763rdp_nor_flash_device = {   * SH-Ether   *   * SH Ether of SH7763 has multi IRQ handling. - * (57,58,59 -> 57) + * (0x920,0x940,0x960 -> 0x920)   */  static struct resource sh_eth_resources[] = {  	{ @@ -75,7 +76,11 @@ static struct resource sh_eth_resources[] = {  		.end    = 0xFEE00F7C - 1,  		.flags  = IORESOURCE_MEM,  	}, { -		.start  = 57,   /* irq number */ +		.start  = 0xFEE01800,   /* TSU */ +		.end    = 0xFEE01FFF, +		.flags  = IORESOURCE_MEM, +	}, { +		.start  = evt2irq(0x920),   /* irq number */  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -83,10 +88,11 @@ static struct resource sh_eth_resources[] = {  static struct sh_eth_plat_data sh7763_eth_pdata = {  	.phy = 1,  	.edmac_endian = EDMAC_LITTLE_ENDIAN, +	.phy_interface = PHY_INTERFACE_MODE_MII,  };  static struct platform_device sh7763rdp_eth_device = { -	.name       = "sh-eth", +	.name       = "sh7763-gether",  	.resource   = sh_eth_resources,  	.num_resources  = ARRAY_SIZE(sh_eth_resources),  	.dev        = { @@ -207,6 +213,5 @@ static void __init sh7763rdp_setup(char **cmdline_p)  static struct sh_machine_vector mv_sh7763rdp __initmv = {  	.mv_name = "sh7763drp",  	.mv_setup = sh7763rdp_setup, -	.mv_nr_irqs = 112,  	.mv_init_irq = init_sh7763rdp_IRQ,  }; diff --git a/arch/sh/boards/mach-x3proto/Makefile b/arch/sh/boards/mach-x3proto/Makefile index 708c21c919f..0cbe3d02dea 100644 --- a/arch/sh/boards/mach-x3proto/Makefile +++ b/arch/sh/boards/mach-x3proto/Makefile @@ -1,3 +1,3 @@  obj-y += setup.o ilsel.o -obj-$(CONFIG_GENERIC_GPIO)	+= gpio.o +obj-$(CONFIG_GPIOLIB)		+= gpio.o diff --git a/arch/sh/boards/mach-x3proto/gpio.c b/arch/sh/boards/mach-x3proto/gpio.c index 239e7406625..3ea65e9b56e 100644 --- a/arch/sh/boards/mach-x3proto/gpio.c +++ b/arch/sh/boards/mach-x3proto/gpio.c @@ -3,7 +3,7 @@   *   * Renesas SH-X3 Prototype Baseboard GPIO Support.   * - * Copyright (C) 2010  Paul Mundt + * Copyright (C) 2010 - 2012  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -17,6 +17,7 @@  #include <linux/irq.h>  #include <linux/kernel.h>  #include <linux/spinlock.h> +#include <linux/irqdomain.h>  #include <linux/io.h>  #include <mach/ilsel.h>  #include <mach/hardware.h> @@ -26,7 +27,7 @@  #define KEYDETR 0xb81c0004  static DEFINE_SPINLOCK(x3proto_gpio_lock); -static unsigned int x3proto_gpio_irq_map[NR_BASEBOARD_GPIOS] = { 0, }; +static struct irq_domain *x3proto_irq_domain;  static int x3proto_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)  { @@ -49,7 +50,14 @@ static int x3proto_gpio_get(struct gpio_chip *chip, unsigned gpio)  static int x3proto_gpio_to_irq(struct gpio_chip *chip, unsigned gpio)  { -	return x3proto_gpio_irq_map[gpio]; +	int virq; + +	if (gpio < chip->ngpio) +		virq = irq_create_mapping(x3proto_irq_domain, gpio); +	else +		virq = -ENXIO; + +	return virq;  }  static void x3proto_gpio_irq_handler(unsigned int irq, struct irq_desc *desc) @@ -62,9 +70,8 @@ static void x3proto_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)  	chip->irq_mask_ack(data);  	mask = __raw_readw(KEYDETR); -  	for_each_set_bit(pin, &mask, NR_BASEBOARD_GPIOS) -		generic_handle_irq(x3proto_gpio_to_irq(NULL, pin)); +		generic_handle_irq(irq_linear_revmap(x3proto_irq_domain, pin));  	chip->irq_unmask(data);  } @@ -78,10 +85,23 @@ struct gpio_chip x3proto_gpio_chip = {  	.ngpio			= NR_BASEBOARD_GPIOS,  }; +static int x3proto_gpio_irq_map(struct irq_domain *domain, unsigned int virq, +				irq_hw_number_t hwirq) +{ +	irq_set_chip_and_handler_name(virq, &dummy_irq_chip, handle_simple_irq, +				      "gpio"); + +	return 0; +} + +static struct irq_domain_ops x3proto_gpio_irq_ops = { +	.map	= x3proto_gpio_irq_map, +	.xlate	= irq_domain_xlate_twocell, +}; +  int __init x3proto_gpio_setup(void)  { -	int ilsel; -	int ret, i; +	int ilsel, ret;  	ilsel = ilsel_enable(ILSEL_KEY);  	if (unlikely(ilsel < 0)) @@ -91,21 +111,10 @@ int __init x3proto_gpio_setup(void)  	if (unlikely(ret))  		goto err_gpio; -	for (i = 0; i < NR_BASEBOARD_GPIOS; i++) { -		unsigned long flags; -		int irq = create_irq(); - -		if (unlikely(irq < 0)) { -			ret = -EINVAL; -			goto err_irq; -		} - -		spin_lock_irqsave(&x3proto_gpio_lock, flags); -		x3proto_gpio_irq_map[i] = irq; -		set_irq_chip_and_handler_name(irq, &dummy_irq_chip, -					handle_simple_irq, "gpio"); -		spin_unlock_irqrestore(&x3proto_gpio_lock, flags); -	} +	x3proto_irq_domain = irq_domain_add_linear(NULL, NR_BASEBOARD_GPIOS, +						   &x3proto_gpio_irq_ops, NULL); +	if (unlikely(!x3proto_irq_domain)) +		goto err_irq;  	pr_info("registering '%s' support, handling GPIOs %u -> %u, "  		"bound to IRQ %u\n", @@ -113,16 +122,12 @@ int __init x3proto_gpio_setup(void)  		x3proto_gpio_chip.base + x3proto_gpio_chip.ngpio,  		ilsel); -	set_irq_chained_handler(ilsel, x3proto_gpio_irq_handler); -	set_irq_wake(ilsel, 1); +	irq_set_chained_handler(ilsel, x3proto_gpio_irq_handler); +	irq_set_irq_wake(ilsel, 1);  	return 0;  err_irq: -	for (; i >= 0; --i) -		if (x3proto_gpio_irq_map[i]) -			destroy_irq(x3proto_gpio_irq_map[i]); -  	ret = gpiochip_remove(&x3proto_gpio_chip);  	if (unlikely(ret))  		pr_err("Failed deregistering GPIO\n"); diff --git a/arch/sh/boot/Makefile b/arch/sh/boot/Makefile index 1ce63624c9b..58592dfa5cb 100644 --- a/arch/sh/boot/Makefile +++ b/arch/sh/boot/Makefile @@ -8,8 +8,6 @@  # Copyright (C) 1999 Stuart Menefy  # -MKIMAGE := $(srctree)/scripts/mkuboot.sh -  #  # Assign safe dummy values if these variables are not defined,  # in order to suppress error message. @@ -19,17 +17,19 @@ CONFIG_MEMORY_START	?= 0x0c000000  CONFIG_BOOT_LINK_OFFSET	?= 0x00800000  CONFIG_ZERO_PAGE_OFFSET	?= 0x00001000  CONFIG_ENTRY_OFFSET	?= 0x00001000 +CONFIG_PHYSICAL_START	?= $(CONFIG_MEMORY_START)  suffix-y := bin  suffix-$(CONFIG_KERNEL_GZIP)	:= gz  suffix-$(CONFIG_KERNEL_BZIP2)	:= bz2  suffix-$(CONFIG_KERNEL_LZMA)	:= lzma +suffix-$(CONFIG_KERNEL_XZ)	:= xz  suffix-$(CONFIG_KERNEL_LZO)	:= lzo  targets := zImage vmlinux.srec romImage uImage uImage.srec uImage.gz \ -	   uImage.bz2 uImage.lzma uImage.lzo uImage.bin +	   uImage.bz2 uImage.lzma uImage.xz uImage.lzo uImage.bin  extra-y += vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \ -	   vmlinux.bin.lzo +	   vmlinux.bin.xz vmlinux.bin.lzo  subdir- := compressed romimage  $(obj)/zImage: $(obj)/compressed/vmlinux FORCE @@ -47,7 +47,7 @@ $(obj)/romimage/vmlinux: $(obj)/zImage FORCE  	$(Q)$(MAKE) $(build)=$(obj)/romimage $@  KERNEL_MEMORY	:= $(shell /bin/bash -c 'printf "0x%08x" \ -		     $$[$(CONFIG_MEMORY_START) & 0x1fffffff]') +		     $$[$(CONFIG_PHYSICAL_START) & 0x1fffffff]')  KERNEL_LOAD	:= $(shell /bin/bash -c 'printf "0x%08x" \  		     $$[$(CONFIG_PAGE_OFFSET)  + \ @@ -59,10 +59,8 @@ KERNEL_ENTRY	:= $(shell /bin/bash -c 'printf "0x%08x" \  			$(KERNEL_MEMORY) + \  			$(CONFIG_ZERO_PAGE_OFFSET) + $(CONFIG_ENTRY_OFFSET)]') -quiet_cmd_uimage = UIMAGE  $@ -      cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A sh -O linux -T kernel \ -		   -C $(2) -a $(KERNEL_LOAD) -e $(KERNEL_ENTRY) \ -		   -n 'Linux-$(KERNELRELEASE)' -d $< $@ +UIMAGE_LOADADDR = $(KERNEL_LOAD) +UIMAGE_ENTRYADDR = $(KERNEL_ENTRY)  $(obj)/vmlinux.bin: vmlinux FORCE  	$(call if_changed,objcopy) @@ -76,6 +74,9 @@ $(obj)/vmlinux.bin.bz2: $(obj)/vmlinux.bin FORCE  $(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE  	$(call if_changed,lzma) +$(obj)/vmlinux.bin.xz: $(obj)/vmlinux.bin FORCE +	$(call if_changed,xzkern) +  $(obj)/vmlinux.bin.lzo: $(obj)/vmlinux.bin FORCE  	$(call if_changed,lzo) @@ -88,6 +89,9 @@ $(obj)/uImage.gz: $(obj)/vmlinux.bin.gz  $(obj)/uImage.lzma: $(obj)/vmlinux.bin.lzma  	$(call if_changed,uimage,lzma) +$(obj)/uImage.xz: $(obj)/vmlinux.bin.xz +	$(call if_changed,uimage,xz) +  $(obj)/uImage.lzo: $(obj)/vmlinux.bin.lzo  	$(call if_changed,uimage,lzo) @@ -107,4 +111,5 @@ $(obj)/uImage: $(obj)/uImage.$(suffix-y)  	@echo '  Image $@ is ready'  export CONFIG_PAGE_OFFSET CONFIG_MEMORY_START CONFIG_BOOT_LINK_OFFSET \ -       CONFIG_ZERO_PAGE_OFFSET CONFIG_ENTRY_OFFSET KERNEL_MEMORY suffix-y +       CONFIG_PHYSICAL_START CONFIG_ZERO_PAGE_OFFSET CONFIG_ENTRY_OFFSET \ +       KERNEL_MEMORY suffix-y diff --git a/arch/sh/boot/compressed/Makefile b/arch/sh/boot/compressed/Makefile index cfa5a087a88..23bc849d9c6 100644 --- a/arch/sh/boot/compressed/Makefile +++ b/arch/sh/boot/compressed/Makefile @@ -6,11 +6,13 @@  targets		:= vmlinux vmlinux.bin vmlinux.bin.gz \  		   vmlinux.bin.bz2 vmlinux.bin.lzma \ -		   vmlinux.bin.lzo \ +		   vmlinux.bin.xz vmlinux.bin.lzo \  		   head_$(BITS).o misc.o piggy.o  OBJECTS = $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/cache.o +GCOV_PROFILE := n +  #  # IMAGE_OFFSET is the load offset of the compression loader  # @@ -25,8 +27,6 @@ IMAGE_OFFSET	:= $(shell /bin/bash -c 'printf "0x%08x" \  			$(CONFIG_BOOT_LINK_OFFSET)]')  endif -LIBGCC	:= $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name) -  ifeq ($(CONFIG_MCOUNT),y)  ORIG_CFLAGS := $(KBUILD_CFLAGS)  KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS)) @@ -35,7 +35,25 @@ endif  LDFLAGS_vmlinux := --oformat $(ld-bfd) -Ttext $(IMAGE_OFFSET) -e startup \  		   -T $(obj)/../../kernel/vmlinux.lds -$(obj)/vmlinux: $(OBJECTS) $(obj)/piggy.o $(LIBGCC) FORCE +# +# Pull in the necessary libgcc bits from the in-kernel implementation. +# +lib1funcs-$(CONFIG_SUPERH32)	:= ashiftrt.S ashldi3.c ashrsi3.S ashlsi3.S \ +				   lshrsi3.S +lib1funcs-obj			:= \ +	$(addsuffix .o, $(basename $(addprefix $(obj)/, $(lib1funcs-y)))) + +lib1funcs-dir		:= $(srctree)/arch/$(SRCARCH)/lib +ifeq ($(BITS),64) +	lib1funcs-dir 	:= $(addsuffix $(BITS), $(lib1funcs-dir)) +endif + +KBUILD_CFLAGS += -I$(lib1funcs-dir) + +$(addprefix $(obj)/,$(lib1funcs-y)): $(obj)/%: $(lib1funcs-dir)/% FORCE +	$(call cmd,shipped) + +$(obj)/vmlinux: $(OBJECTS) $(obj)/piggy.o $(lib1funcs-obj) FORCE  	$(call if_changed,ld)  	@: @@ -50,6 +68,8 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE  	$(call if_changed,bzip2)  $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE  	$(call if_changed,lzma) +$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE +	$(call if_changed,xzkern)  $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE  	$(call if_changed,lzo) diff --git a/arch/sh/boot/compressed/misc.c b/arch/sh/boot/compressed/misc.c index 27140a6b365..95470a472d2 100644 --- a/arch/sh/boot/compressed/misc.c +++ b/arch/sh/boot/compressed/misc.c @@ -61,6 +61,10 @@ static unsigned long free_mem_end_ptr;  #include "../../../../lib/decompress_unlzma.c"  #endif +#ifdef CONFIG_KERNEL_XZ +#include "../../../../lib/decompress_unxz.c" +#endif +  #ifdef CONFIG_KERNEL_LZO  #include "../../../../lib/decompress_unlzo.c"  #endif diff --git a/arch/sh/boot/romimage/mmcif-sh7724.c b/arch/sh/boot/romimage/mmcif-sh7724.c index 14863d7292c..16b122510c8 100644 --- a/arch/sh/boot/romimage/mmcif-sh7724.c +++ b/arch/sh/boot/romimage/mmcif-sh7724.c @@ -9,6 +9,7 @@   */  #include <linux/mmc/sh_mmcif.h> +#include <linux/mmc/boot.h>  #include <mach/romimage.h>  #define MMCIF_BASE      (void __iomem *)0xa4ca0000 @@ -21,9 +22,6 @@  #define HIZCRC		0xa405015c  #define DRVCRA		0xa405018a -enum { MMCIF_PROGRESS_ENTER, MMCIF_PROGRESS_INIT, -       MMCIF_PROGRESS_LOAD, MMCIF_PROGRESS_DONE }; -  /* SH7724 specific MMCIF loader   *   * loads the romImage from an MMC card starting from block 512 @@ -32,7 +30,7 @@ enum { MMCIF_PROGRESS_ENTER, MMCIF_PROGRESS_INIT,   */  asmlinkage void mmcif_loader(unsigned char *buf, unsigned long no_bytes)  { -	mmcif_update_progress(MMCIF_PROGRESS_ENTER); +	mmcif_update_progress(MMC_PROGRESS_ENTER);  	/* enable clock to the MMCIF hardware block */  	__raw_writel(__raw_readl(MSTPCR2) & ~0x20000000, MSTPCR2); @@ -55,18 +53,20 @@ asmlinkage void mmcif_loader(unsigned char *buf, unsigned long no_bytes)  	/* high drive capability for MMC pins */  	__raw_writew(__raw_readw(DRVCRA) | 0x3000, DRVCRA); -	mmcif_update_progress(MMCIF_PROGRESS_INIT); +	mmcif_update_progress(MMC_PROGRESS_INIT);  	/* setup MMCIF hardware */  	sh_mmcif_boot_init(MMCIF_BASE); -	mmcif_update_progress(MMCIF_PROGRESS_LOAD); +	mmcif_update_progress(MMC_PROGRESS_LOAD);  	/* load kernel via MMCIF interface */ -	sh_mmcif_boot_slurp(MMCIF_BASE, buf, no_bytes); +	sh_mmcif_boot_do_read(MMCIF_BASE, 512, +	                      (no_bytes + SH_MMCIF_BBS - 1) / SH_MMCIF_BBS, +			      buf);  	/* disable clock to the MMCIF hardware block */  	__raw_writel(__raw_readl(MSTPCR2) | 0x20000000, MSTPCR2); -	mmcif_update_progress(MMCIF_PROGRESS_DONE); +	mmcif_update_progress(MMC_PROGRESS_DONE);  } diff --git a/arch/sh/cchips/hd6446x/hd64461.c b/arch/sh/cchips/hd6446x/hd64461.c index 177a10b25ca..e9735616bdc 100644 --- a/arch/sh/cchips/hd6446x/hd64461.c +++ b/arch/sh/cchips/hd6446x/hd64461.c @@ -73,10 +73,7 @@ static void hd64461_irq_demux(unsigned int irq, struct irq_desc *desc)  int __init setup_hd64461(void)  { -	int i, nid = cpu_to_node(boot_cpu_data); - -	if (!MACH_HD64461) -		return 0; +	int irq_base, i;  	printk(KERN_INFO  	       "HD64461 configured at 0x%x on irq %d(mapped into %d to %d)\n", @@ -89,30 +86,18 @@ int __init setup_hd64461(void)  #endif  	__raw_writew(0xffff, HD64461_NIMR); -	/*  IRQ 80 -> 95 belongs to HD64461  */ -	for (i = HD64461_IRQBASE; i < HD64461_IRQBASE + 16; i++) { -		unsigned int irq; - -		irq = create_irq_nr(i, nid); -		if (unlikely(irq == 0)) { -			pr_err("%s: failed hooking irq %d for HD64461\n", -			       __func__, i); -			return -EBUSY; -		} - -		if (unlikely(irq != i)) { -			pr_err("%s: got irq %d but wanted %d, bailing.\n", -			       __func__, irq, i); -			destroy_irq(irq); -			return -EINVAL; -		} - -		set_irq_chip_and_handler(i, &hd64461_irq_chip, -					 handle_level_irq); +	irq_base = irq_alloc_descs(HD64461_IRQBASE, HD64461_IRQBASE, 16, -1); +	if (IS_ERR_VALUE(irq_base)) { +		pr_err("%s: failed hooking irqs for HD64461\n", __func__); +		return irq_base;  	} -	set_irq_chained_handler(CONFIG_HD64461_IRQ, hd64461_irq_demux); -	set_irq_type(CONFIG_HD64461_IRQ, IRQ_TYPE_LEVEL_LOW); +	for (i = 0; i < 16; i++) +		irq_set_chip_and_handler(irq_base + i, &hd64461_irq_chip, +					 handle_level_irq); + +	irq_set_chained_handler(CONFIG_HD64461_IRQ, hd64461_irq_demux); +	irq_set_irq_type(CONFIG_HD64461_IRQ, IRQ_TYPE_LEVEL_LOW);  #ifdef CONFIG_HD64461_ENABLER  	printk(KERN_INFO "HD64461: enabling PCMCIA devices\n"); diff --git a/arch/sh/configs/apsh4a3a_defconfig b/arch/sh/configs/apsh4a3a_defconfig new file mode 100644 index 00000000000..6cb327977d1 --- /dev/null +++ b/arch/sh/configs/apsh4a3a_defconfig @@ -0,0 +1,102 @@ +CONFIG_EXPERIMENTAL=y +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_SLAB=y +CONFIG_PROFILING=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_BLK_DEV_BSG is not set +CONFIG_CPU_SUBTYPE_SH7785=y +CONFIG_MEMORY_START=0x0C000000 +CONFIG_FLATMEM_MANUAL=y +CONFIG_SH_STORE_QUEUES=y +CONFIG_SH_APSH4A3A=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_KEXEC=y +CONFIG_PREEMPT=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_INET_LRO is not set +# CONFIG_IPV6 is not set +# CONFIG_WIRELESS is not set +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_FW_LOADER is not set +CONFIG_MTD=y +CONFIG_MTD_CONCAT=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_PHYSMAP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=16384 +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_SMSC911X=y +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_WLAN is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=6 +CONFIG_SERIAL_SH_SCI_CONSOLE=y +CONFIG_HW_RANDOM=y +# CONFIG_HWMON is not set +CONFIG_FB=y +CONFIG_FB_SH7785FB=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_LOGO=y +# CONFIG_HID_SUPPORT is not set +# CONFIG_USB_SUPPORT is not set +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_NTFS_FS=y +CONFIG_NTFS_RW=y +CONFIG_PROC_KCORE=y +CONFIG_TMPFS=y +CONFIG_JFFS2_FS=y +CONFIG_CRAMFS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V4=y +CONFIG_CIFS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_932=y +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_UTF8=y +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_INFO=y +# CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_FTRACE is not set +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_HW is not set diff --git a/arch/sh/configs/apsh4ad0a_defconfig b/arch/sh/configs/apsh4ad0a_defconfig new file mode 100644 index 00000000000..ec70475da89 --- /dev/null +++ b/arch/sh/configs/apsh4ad0a_defconfig @@ -0,0 +1,130 @@ +CONFIG_EXPERIMENTAL=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_RCU_TRACE=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_CGROUPS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +CONFIG_CGROUP_MEMCG=y +CONFIG_BLK_CGROUP=y +CONFIG_NAMESPACES=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_KALLSYMS_ALL=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB=y +CONFIG_PROFILING=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_LBDAF is not set +# CONFIG_BLK_DEV_BSG is not set +CONFIG_CFQ_GROUP_IOSCHED=y +CONFIG_CPU_SUBTYPE_SH7786=y +CONFIG_MEMORY_SIZE=0x10000000 +CONFIG_HUGETLB_PAGE_SIZE_1MB=y +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_KSM=y +CONFIG_SH_STORE_QUEUES=y +CONFIG_SH_APSH4AD0A=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=m +CONFIG_CPU_FREQ_GOV_ONDEMAND=m +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m +CONFIG_SH_CPU_FREQ=y +CONFIG_KEXEC=y +CONFIG_SECCOMP=y +CONFIG_PREEMPT=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_BINFMT_MISC=y +CONFIG_PM=y +CONFIG_PM_DEBUG=y +CONFIG_PM_RUNTIME=y +CONFIG_CPU_IDLE=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_NET_KEY=y +CONFIG_INET=y +# CONFIG_INET_LRO is not set +# CONFIG_IPV6 is not set +# CONFIG_WIRELESS is not set +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_FW_LOADER is not set +CONFIG_MTD=y +CONFIG_MTD_CFI=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=16384 +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_LOWLEVEL is not set +CONFIG_NETDEVICES=y +CONFIG_MDIO_BITBANG=y +CONFIG_NET_ETHERNET=y +CONFIG_SMSC911X=y +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_WLAN is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=6 +CONFIG_SERIAL_SH_SCI_CONSOLE=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_HWMON is not set +CONFIG_VIDEO_OUTPUT_CONTROL=y +CONFIG_FB=y +CONFIG_FB_SH7785FB=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_LOGO=y +CONFIG_USB=y +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_NTFS_FS=y +CONFIG_NTFS_RW=y +CONFIG_PROC_KCORE=y +CONFIG_TMPFS=y +CONFIG_HUGETLBFS=y +CONFIG_JFFS2_FS=y +CONFIG_CRAMFS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V4=y +CONFIG_CIFS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_932=y +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_UTF8=y +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_SHIRQ=y +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_VM=y +# CONFIG_RCU_CPU_STALL_DETECTOR is not set +CONFIG_DWARF_UNWINDER=y +# CONFIG_CRYPTO_ANSI_CPRNG is not set diff --git a/arch/sh/configs/ecovec24_defconfig b/arch/sh/configs/ecovec24_defconfig index 8d13e8a5a75..0b364e3b0ff 100644 --- a/arch/sh/configs/ecovec24_defconfig +++ b/arch/sh/configs/ecovec24_defconfig @@ -107,15 +107,14 @@ CONFIG_SND_SOC=y  CONFIG_SND_SOC_SH4_FSI=y  CONFIG_SND_FSI_DA7210=y  CONFIG_USB=y -CONFIG_USB_DEVICEFS=y  CONFIG_USB_MON=y  CONFIG_USB_R8A66597_HCD=y  CONFIG_USB_STORAGE=y  CONFIG_USB_GADGET=y -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m  CONFIG_MMC=y  CONFIG_MMC_SPI=y -CONFIG_MMC_TMIO=y +CONFIG_MMC_SDHI=y  CONFIG_RTC_CLASS=y  CONFIG_RTC_DRV_RS5C372=y  CONFIG_UIO=y diff --git a/arch/sh/configs/landisk_defconfig b/arch/sh/configs/landisk_defconfig index 3670e937f2b..6783f31315c 100644 --- a/arch/sh/configs/landisk_defconfig +++ b/arch/sh/configs/landisk_defconfig @@ -80,7 +80,6 @@ CONFIG_HID_SAMSUNG=m  CONFIG_HID_SONY=m  CONFIG_HID_SUNPLUS=m  CONFIG_USB=y -CONFIG_USB_DEVICEFS=y  CONFIG_USB_MON=y  CONFIG_USB_EHCI_HCD=y  # CONFIG_USB_EHCI_TT_NEWSCHED is not set diff --git a/arch/sh/configs/migor_defconfig b/arch/sh/configs/migor_defconfig index 9ad904a110d..cc61eda4492 100644 --- a/arch/sh/configs/migor_defconfig +++ b/arch/sh/configs/migor_defconfig @@ -54,6 +54,8 @@ CONFIG_INPUT_EVDEV=y  # CONFIG_KEYBOARD_ATKBD is not set  CONFIG_KEYBOARD_SH_KEYSC=y  # CONFIG_INPUT_MOUSE is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_MIGOR=y  # CONFIG_SERIO is not set  CONFIG_VT_HW_CONSOLE_BINDING=y  CONFIG_SERIAL_SH_SCI=y diff --git a/arch/sh/configs/rsk7203_defconfig b/arch/sh/configs/rsk7203_defconfig index 4e5229b0c5b..3c4f6f4d52b 100644 --- a/arch/sh/configs/rsk7203_defconfig +++ b/arch/sh/configs/rsk7203_defconfig @@ -100,7 +100,6 @@ CONFIG_HID_SONY=y  CONFIG_HID_SUNPLUS=y  CONFIG_USB=y  CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -CONFIG_USB_DEVICEFS=y  CONFIG_USB_MON=y  CONFIG_USB_R8A66597_HCD=y  CONFIG_NEW_LEDS=y @@ -128,7 +127,6 @@ CONFIG_DEBUG_MUTEXES=y  CONFIG_DEBUG_SPINLOCK_SLEEP=y  CONFIG_DEBUG_INFO=y  CONFIG_DEBUG_VM=y -CONFIG_DEBUG_WRITECOUNT=y  CONFIG_DEBUG_LIST=y  CONFIG_DEBUG_SG=y  CONFIG_FRAME_POINTER=y diff --git a/arch/sh/configs/rsk7264_defconfig b/arch/sh/configs/rsk7264_defconfig new file mode 100644 index 00000000000..eecdf65bb78 --- /dev/null +++ b/arch/sh/configs/rsk7264_defconfig @@ -0,0 +1,79 @@ +CONFIG_LOCALVERSION="uClinux RSK2+SH7264" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_IKCONFIG=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_NAMESPACES=y +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS_ALL=y +CONFIG_EMBEDDED=y +CONFIG_PERF_COUNTERS=y +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_SLAB=y +CONFIG_MMAP_ALLOW_UNINITIALIZED=y +CONFIG_PROFILING=y +# CONFIG_LBDAF is not set +# CONFIG_BLK_DEV_BSG is not set +CONFIG_PARTITION_ADVANCED=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_CPU_SUBTYPE_SH7264=y +CONFIG_MEMORY_START=0x0c000000 +CONFIG_FLATMEM_MANUAL=y +CONFIG_CPU_BIG_ENDIAN=y +CONFIG_SH_RSK=y +# CONFIG_SH_TIMER_MTU2 is not set +CONFIG_BINFMT_FLAT=y +CONFIG_NET=y +CONFIG_INET=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_IPV6 is not set +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +# CONFIG_FW_LOADER is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=4 +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_NETDEVICES=y +CONFIG_SMSC911X=y +CONFIG_SMSC_PHY=y +CONFIG_INPUT_FF_MEMLESS=y +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=8 +CONFIG_SERIAL_SH_SCI_CONSOLE=y +# CONFIG_HWMON is not set +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +# CONFIG_USB_DEVICE_CLASS is not set +CONFIG_USB_R8A66597_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_USB_STORAGE_DEBUG=y +CONFIG_USB_LIBUSUAL=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +CONFIG_VFAT_FS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_ROOT_NFS=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_FTRACE is not set diff --git a/arch/sh/configs/rsk7269_defconfig b/arch/sh/configs/rsk7269_defconfig new file mode 100644 index 00000000000..8370b10df35 --- /dev/null +++ b/arch/sh/configs/rsk7269_defconfig @@ -0,0 +1,64 @@ +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_EMBEDDED=y +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_SLAB=y +# CONFIG_LBDAF is not set +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_SWAP_IO_SPACE=y +CONFIG_CPU_SUBTYPE_SH7269=y +CONFIG_MEMORY_START=0x0c000000 +CONFIG_MEMORY_SIZE=0x02000000 +CONFIG_FLATMEM_MANUAL=y +CONFIG_CPU_BIG_ENDIAN=y +CONFIG_SH_RSK=y +# CONFIG_SH_TIMER_MTU2 is not set +CONFIG_SH_PCLK_FREQ=66700000 +CONFIG_BINFMT_FLAT=y +CONFIG_NET=y +CONFIG_INET=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_IPV6 is not set +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_FW_LOADER is not set +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_NETDEVICES=y +CONFIG_SMSC911X=y +CONFIG_SMSC_PHY=y +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=8 +CONFIG_SERIAL_SH_SCI_CONSOLE=y +# CONFIG_HWMON is not set +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +# CONFIG_USB_DEVICE_CLASS is not set +CONFIG_USB_R8A66597_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_USB_STORAGE_DEBUG=y +CONFIG_USB_LIBUSUAL=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +CONFIG_VFAT_FS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_ROOT_NFS=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_FTRACE is not set diff --git a/arch/sh/configs/sdk7780_defconfig b/arch/sh/configs/sdk7780_defconfig index ae1115849dd..6a96b9a2f7a 100644 --- a/arch/sh/configs/sdk7780_defconfig +++ b/arch/sh/configs/sdk7780_defconfig @@ -100,8 +100,6 @@ CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y  CONFIG_HID_SUNPLUS=y  CONFIG_USB=y -CONFIG_USB_DEBUG=y -CONFIG_USB_DEVICEFS=y  # CONFIG_USB_DEVICE_CLASS is not set  CONFIG_USB_MON=y  CONFIG_USB_EHCI_HCD=y diff --git a/arch/sh/configs/sdk7786_defconfig b/arch/sh/configs/sdk7786_defconfig index dc4a2eb6a61..76a76a295d7 100644 --- a/arch/sh/configs/sdk7786_defconfig +++ b/arch/sh/configs/sdk7786_defconfig @@ -12,15 +12,14 @@ CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_CGROUPS=y  CONFIG_CGROUP_DEBUG=y -CONFIG_CGROUP_NS=y  CONFIG_CGROUP_FREEZER=y  CONFIG_CGROUP_DEVICE=y  CONFIG_CPUSETS=y  # CONFIG_PROC_PID_CPUSET is not set  CONFIG_CGROUP_CPUACCT=y  CONFIG_RESOURCE_COUNTERS=y -CONFIG_CGROUP_MEM_RES_CTLR=y -CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y +CONFIG_CGROUP_MEMCG=y +CONFIG_CGROUP_MEMCG_SWAP=y  CONFIG_CGROUP_SCHED=y  CONFIG_RT_GROUP_SCHED=y  CONFIG_BLK_CGROUP=y @@ -83,7 +82,6 @@ CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y  CONFIG_BINFMT_MISC=y  CONFIG_PM=y  CONFIG_PM_DEBUG=y -CONFIG_PM_VERBOSE=y  CONFIG_PM_RUNTIME=y  CONFIG_CPU_IDLE=y  CONFIG_NET=y diff --git a/arch/sh/configs/se7206_defconfig b/arch/sh/configs/se7206_defconfig index a468ff227fc..6bc30ab9fd1 100644 --- a/arch/sh/configs/se7206_defconfig +++ b/arch/sh/configs/se7206_defconfig @@ -8,11 +8,10 @@ CONFIG_RCU_TRACE=y  CONFIG_LOG_BUF_SHIFT=14  CONFIG_CGROUPS=y  CONFIG_CGROUP_DEBUG=y -CONFIG_CGROUP_NS=y  CONFIG_CGROUP_DEVICE=y  CONFIG_CGROUP_CPUACCT=y  CONFIG_RESOURCE_COUNTERS=y -CONFIG_CGROUP_MEM_RES_CTLR=y +CONFIG_CGROUP_MEMCG=y  CONFIG_RELAY=y  CONFIG_NAMESPACES=y  CONFIG_UTS_NS=y diff --git a/arch/sh/configs/se7343_defconfig b/arch/sh/configs/se7343_defconfig index be9c474197b..201acb4652f 100644 --- a/arch/sh/configs/se7343_defconfig +++ b/arch/sh/configs/se7343_defconfig @@ -92,9 +92,7 @@ CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y  CONFIG_HID_SUNPLUS=y  CONFIG_USB=y -CONFIG_USB_DEBUG=y  CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -CONFIG_USB_DEVICEFS=y  CONFIG_USB_ISP116X_HCD=y  CONFIG_UIO=y  CONFIG_EXT2_FS=y diff --git a/arch/sh/configs/se7724_defconfig b/arch/sh/configs/se7724_defconfig index ed35093e375..1faa788aeca 100644 --- a/arch/sh/configs/se7724_defconfig +++ b/arch/sh/configs/se7724_defconfig @@ -109,7 +109,7 @@ CONFIG_USB_STORAGE=y  CONFIG_USB_GADGET=y  CONFIG_USB_ETH=m  CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m  CONFIG_USB_G_SERIAL=m  CONFIG_MMC=y  CONFIG_MMC_SPI=y diff --git a/arch/sh/configs/se7780_defconfig b/arch/sh/configs/se7780_defconfig index c8c5e7f7a68..b0ef63ce525 100644 --- a/arch/sh/configs/se7780_defconfig +++ b/arch/sh/configs/se7780_defconfig @@ -94,7 +94,6 @@ CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y  CONFIG_HID_SUNPLUS=y  CONFIG_USB=y -CONFIG_USB_DEVICEFS=y  # CONFIG_USB_DEVICE_CLASS is not set  CONFIG_USB_MON=y  CONFIG_USB_EHCI_HCD=y diff --git a/arch/sh/configs/sh03_defconfig b/arch/sh/configs/sh03_defconfig index 2051821724c..0cf4097b71e 100644 --- a/arch/sh/configs/sh03_defconfig +++ b/arch/sh/configs/sh03_defconfig @@ -22,7 +22,7 @@ CONFIG_PREEMPT=y  CONFIG_CMDLINE_OVERWRITE=y  CONFIG_CMDLINE="console=ttySC1,115200 mem=64M root=/dev/nfs"  CONFIG_PCI=y -CONFIG_HOTPLUG_PCI=m +CONFIG_HOTPLUG_PCI=y  CONFIG_BINFMT_MISC=y  CONFIG_NET=y  CONFIG_PACKET=y diff --git a/arch/sh/configs/sh2007_defconfig b/arch/sh/configs/sh2007_defconfig index 0d2f41472a1..0c08d9244c9 100644 --- a/arch/sh/configs/sh2007_defconfig +++ b/arch/sh/configs/sh2007_defconfig @@ -97,7 +97,6 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y  CONFIG_LOGO=y  # CONFIG_HID_SUPPORT is not set  CONFIG_USB=y -CONFIG_USB_DEVICEFS=y  # CONFIG_USB_DEVICE_CLASS is not set  CONFIG_USB_MON=y  CONFIG_NEW_LEDS=y diff --git a/arch/sh/configs/sh7757lcr_defconfig b/arch/sh/configs/sh7757lcr_defconfig index 273f3fa198f..cfde98ddb29 100644 --- a/arch/sh/configs/sh7757lcr_defconfig +++ b/arch/sh/configs/sh7757lcr_defconfig @@ -9,7 +9,6 @@ CONFIG_TASK_XACCT=y  CONFIG_TASK_IO_ACCOUNTING=y  CONFIG_LOG_BUF_SHIFT=14  CONFIG_BLK_DEV_INITRD=y -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  # CONFIG_SYSCTL_SYSCALL is not set  CONFIG_KALLSYMS_ALL=y  CONFIG_SLAB=y @@ -38,32 +37,41 @@ CONFIG_IPV6=y  # CONFIG_WIRELESS is not set  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"  # CONFIG_FW_LOADER is not set +CONFIG_MTD=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_M25P80=y  CONFIG_BLK_DEV_RAM=y -# CONFIG_MISC_DEVICES is not set +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y  CONFIG_NETDEVICES=y -CONFIG_PHYLIB=y  CONFIG_VITESSE_PHY=y -CONFIG_MDIO_BITBANG=y  CONFIG_NET_ETHERNET=y -CONFIG_MII=y +CONFIG_SH_ETH=y  # CONFIG_NETDEV_10000 is not set  # CONFIG_WLAN is not set  # CONFIG_KEYBOARD_ATKBD is not set  # CONFIG_MOUSE_PS2 is not set  # CONFIG_SERIO is not set -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_NR_UARTS=2 +# CONFIG_LEGACY_PTYS is not set  CONFIG_SERIAL_SH_SCI=y  CONFIG_SERIAL_SH_SCI_NR_UARTS=3  CONFIG_SERIAL_SH_SCI_CONSOLE=y -# CONFIG_LEGACY_PTYS is not set  # CONFIG_HW_RANDOM is not set +CONFIG_SPI=y +CONFIG_SPI_SH=y  # CONFIG_HWMON is not set -# CONFIG_USB_SUPPORT is not set +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_SH=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_SH=y +CONFIG_USB_STORAGE=y +CONFIG_MMC=y +CONFIG_MMC_SDHI=y +CONFIG_MMC_SH_MMCIF=y  CONFIG_EXT2_FS=y  CONFIG_EXT3_FS=y -CONFIG_INOTIFY=y  CONFIG_ISO9660_FS=y  CONFIG_VFAT_FS=y  CONFIG_PROC_KCORE=y @@ -76,10 +84,8 @@ CONFIG_NLS_CODEPAGE_437=y  CONFIG_NLS_CODEPAGE_932=y  CONFIG_NLS_ISO8859_1=y  CONFIG_DEBUG_KERNEL=y -# CONFIG_DETECT_SOFTLOCKUP is not set  # CONFIG_SCHED_DEBUG is not set  # CONFIG_DEBUG_BUGVERBOSE is not set  CONFIG_DEBUG_INFO=y -# CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_FTRACE is not set  # CONFIG_CRYPTO_ANSI_CPRNG is not set diff --git a/arch/sh/configs/sh7785lcr_32bit_defconfig b/arch/sh/configs/sh7785lcr_32bit_defconfig index 7b9c696ac5e..9bdcf72ec06 100644 --- a/arch/sh/configs/sh7785lcr_32bit_defconfig +++ b/arch/sh/configs/sh7785lcr_32bit_defconfig @@ -5,7 +5,7 @@ CONFIG_BSD_PROCESS_ACCT=y  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=16 -CONFIG_PERF_COUNTERS=y +CONFIG_PERF_EVENTS=y  # CONFIG_COMPAT_BRK is not set  CONFIG_SLAB=y  CONFIG_PROFILING=y diff --git a/arch/sh/configs/sh7785lcr_defconfig b/arch/sh/configs/sh7785lcr_defconfig index 51561f5677d..d29da4a0f6c 100644 --- a/arch/sh/configs/sh7785lcr_defconfig +++ b/arch/sh/configs/sh7785lcr_defconfig @@ -88,7 +88,6 @@ CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y  CONFIG_HID_SUNPLUS=y  CONFIG_USB=y -CONFIG_USB_DEVICEFS=y  CONFIG_USB_MON=y  CONFIG_USB_EHCI_HCD=m  # CONFIG_USB_EHCI_TT_NEWSCHED is not set diff --git a/arch/sh/configs/shx3_defconfig b/arch/sh/configs/shx3_defconfig index 3f92d37c637..cd6c519f8fa 100644 --- a/arch/sh/configs/shx3_defconfig +++ b/arch/sh/configs/shx3_defconfig @@ -9,12 +9,11 @@ CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14  CONFIG_CGROUPS=y -CONFIG_CGROUP_NS=y  CONFIG_CGROUP_FREEZER=y  CONFIG_CGROUP_DEVICE=y  CONFIG_CGROUP_CPUACCT=y  CONFIG_RESOURCE_COUNTERS=y -CONFIG_CGROUP_MEM_RES_CTLR=y +CONFIG_CGROUP_MEMCG=y  CONFIG_RELAY=y  CONFIG_NAMESPACES=y  CONFIG_UTS_NS=y diff --git a/arch/sh/configs/titan_defconfig b/arch/sh/configs/titan_defconfig index 0f558914e76..a77b778c745 100644 --- a/arch/sh/configs/titan_defconfig +++ b/arch/sh/configs/titan_defconfig @@ -215,7 +215,6 @@ CONFIG_WATCHDOG=y  CONFIG_SH_WDT=m  # CONFIG_USB_HID is not set  CONFIG_USB=y -CONFIG_USB_DEVICEFS=y  CONFIG_USB_MON=y  CONFIG_USB_EHCI_HCD=y  CONFIG_USB_EHCI_ROOT_HUB_TT=y @@ -227,7 +226,7 @@ CONFIG_USB_SERIAL=m  CONFIG_USB_SERIAL_GENERIC=y  CONFIG_USB_SERIAL_ARK3116=m  CONFIG_USB_SERIAL_PL2303=m -CONFIG_RTC_CLASS=m +CONFIG_RTC_CLASS=y  CONFIG_RTC_DRV_SH=m  CONFIG_EXT2_FS=y  CONFIG_EXT3_FS=y diff --git a/arch/sh/configs/urquell_defconfig b/arch/sh/configs/urquell_defconfig index 7b3daec6fef..1e843dbed5f 100644 --- a/arch/sh/configs/urquell_defconfig +++ b/arch/sh/configs/urquell_defconfig @@ -9,15 +9,14 @@ CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14  CONFIG_CGROUPS=y  CONFIG_CGROUP_DEBUG=y -CONFIG_CGROUP_NS=y  CONFIG_CGROUP_FREEZER=y  CONFIG_CGROUP_DEVICE=y  CONFIG_CPUSETS=y  # CONFIG_PROC_PID_CPUSET is not set  CONFIG_CGROUP_CPUACCT=y  CONFIG_RESOURCE_COUNTERS=y -CONFIG_CGROUP_MEM_RES_CTLR=y -CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y +CONFIG_CGROUP_MEMCG=y +CONFIG_CGROUP_MEMCG_SWAP=y  CONFIG_CGROUP_SCHED=y  CONFIG_RT_GROUP_SCHED=y  CONFIG_BLK_DEV_INITRD=y @@ -118,7 +117,6 @@ CONFIG_HID_SONY=y  CONFIG_HID_SUNPLUS=y  CONFIG_USB=y  CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -CONFIG_USB_DEVICEFS=y  CONFIG_USB_MON=y  CONFIG_USB_OHCI_HCD=y  CONFIG_USB_STORAGE=y diff --git a/arch/sh/drivers/dma/Kconfig b/arch/sh/drivers/dma/Kconfig index 4d58eb0973d..cfd5b90a862 100644 --- a/arch/sh/drivers/dma/Kconfig +++ b/arch/sh/drivers/dma/Kconfig @@ -40,23 +40,6 @@ config NR_ONCHIP_DMA_CHANNELS  	  DMAC supports. This will be 4 for SH7750/SH7751/Sh7750S/SH7091 and 8 for the  	  SH7750R/SH7751R/SH7760, 12 for the SH7723/SH7780/SH7785/SH7724, default is 6. -config NR_DMA_CHANNELS_BOOL -	depends on SH_DMA -	bool "Override default number of maximum DMA channels" -	help -	  This allows you to forcibly update the maximum number of supported -	  DMA channels for a given board. If this is unset, this will default -	  to the number of channels that the on-chip DMAC has. - -config NR_DMA_CHANNELS -	int "Maximum number of DMA channels" -	depends on SH_DMA && NR_DMA_CHANNELS_BOOL -	default NR_ONCHIP_DMA_CHANNELS -	help -	  This allows you to specify the maximum number of DMA channels to -	  support. Setting this to a higher value allows for cascading DMACs -	  with additional channels. -  config SH_DMABRG  	bool "SH7760 DMABRG support"  	depends on CPU_SUBTYPE_SH7760 diff --git a/arch/sh/drivers/dma/dma-api.c b/arch/sh/drivers/dma/dma-api.c index f46848f088e..c0eec08d8f9 100644 --- a/arch/sh/drivers/dma/dma-api.c +++ b/arch/sh/drivers/dma/dma-api.c @@ -13,6 +13,7 @@  #include <linux/module.h>  #include <linux/spinlock.h>  #include <linux/proc_fs.h> +#include <linux/seq_file.h>  #include <linux/list.h>  #include <linux/platform_device.h>  #include <linux/mm.h> @@ -308,11 +309,9 @@ int dma_extend(unsigned int chan, unsigned long op, void *param)  }  EXPORT_SYMBOL(dma_extend); -static int dma_read_proc(char *buf, char **start, off_t off, -			 int len, int *eof, void *data) +static int dma_proc_show(struct seq_file *m, void *v)  { -	struct dma_info *info; -	char *p = buf; +	struct dma_info *info = v;  	if (list_empty(®istered_dmac_list))  		return 0; @@ -332,14 +331,26 @@ static int dma_read_proc(char *buf, char **start, off_t off,  			if (!(channel->flags & DMA_CONFIGURED))  				continue; -			p += sprintf(p, "%2d: %14s    %s\n", i, -				     info->name, channel->dev_id); +			seq_printf(m, "%2d: %14s    %s\n", i, +				   info->name, channel->dev_id);  		}  	} -	return p - buf; +	return 0; +} + +static int dma_proc_open(struct inode *inode, struct file *file) +{ +	return single_open(file, dma_proc_show, NULL);  } +static const struct file_operations dma_proc_fops = { +	.open		= dma_proc_open, +	.read		= seq_read, +	.llseek		= seq_lseek, +	.release	= single_release, +}; +  int register_dmac(struct dma_info *info)  {  	unsigned int total_channels, i; @@ -412,8 +423,7 @@ EXPORT_SYMBOL(unregister_dmac);  static int __init dma_api_init(void)  {  	printk(KERN_NOTICE "DMA: Registering DMA API.\n"); -	return create_proc_read_entry("dma", 0, 0, dma_read_proc, 0) -		    ? 0 : -ENOMEM; +	return proc_create("dma", 0, NULL, &dma_proc_fops) ? 0 : -ENOMEM;  }  subsys_initcall(dma_api_init); diff --git a/arch/sh/drivers/dma/dma-g2.c b/arch/sh/drivers/dma/dma-g2.c index af7bb589c2c..e1ab6eb3c04 100644 --- a/arch/sh/drivers/dma/dma-g2.c +++ b/arch/sh/drivers/dma/dma-g2.c @@ -170,7 +170,7 @@ static int __init g2_dma_init(void)  {  	int ret; -	ret = request_irq(HW_EVENT_G2_DMA, g2_dma_interrupt, IRQF_DISABLED, +	ret = request_irq(HW_EVENT_G2_DMA, g2_dma_interrupt, 0,  			  "g2 DMA handler", &g2_dma_info);  	if (unlikely(ret))  		return -EINVAL; @@ -181,14 +181,14 @@ static int __init g2_dma_init(void)  	ret = register_dmac(&g2_dma_info);  	if (unlikely(ret != 0)) -		free_irq(HW_EVENT_G2_DMA, 0); +		free_irq(HW_EVENT_G2_DMA, &g2_dma_info);  	return ret;  }  static void __exit g2_dma_exit(void)  { -	free_irq(HW_EVENT_G2_DMA, 0); +	free_irq(HW_EVENT_G2_DMA, &g2_dma_info);  	unregister_dmac(&g2_dma_info);  } diff --git a/arch/sh/drivers/dma/dma-pvr2.c b/arch/sh/drivers/dma/dma-pvr2.c index 3cee58e7f1e..706a3434af7 100644 --- a/arch/sh/drivers/dma/dma-pvr2.c +++ b/arch/sh/drivers/dma/dma-pvr2.c @@ -70,7 +70,6 @@ static int pvr2_xfer_dma(struct dma_channel *chan)  static struct irqaction pvr2_dma_irq = {  	.name		= "pvr2 DMA handler",  	.handler	= pvr2_dma_interrupt, -	.flags		= IRQF_DISABLED,  };  static struct dma_ops pvr2_dma_ops = { diff --git a/arch/sh/drivers/dma/dma-sh.c b/arch/sh/drivers/dma/dma-sh.c index 827208781ed..b2256562314 100644 --- a/arch/sh/drivers/dma/dma-sh.c +++ b/arch/sh/drivers/dma/dma-sh.c @@ -14,35 +14,72 @@  #include <linux/init.h>  #include <linux/interrupt.h>  #include <linux/module.h> +#include <linux/io.h>  #include <mach-dreamcast/mach/dma.h>  #include <asm/dma.h> -#include <asm/io.h> -#include <asm/dma-sh.h> +#include <asm/dma-register.h> +#include <cpu/dma-register.h> +#include <cpu/dma.h> -#if defined(DMAE1_IRQ) -#define NR_DMAE		2 -#else -#define NR_DMAE		1 +/* + * Define the default configuration for dual address memory-memory transfer. + * The 0x400 value represents auto-request, external->external. + */ +#define RS_DUAL	(DM_INC | SM_INC | 0x400 | TS_INDEX2VAL(XMIT_SZ_32BIT)) + +static unsigned long dma_find_base(unsigned int chan) +{ +	unsigned long base = SH_DMAC_BASE0; + +#ifdef SH_DMAC_BASE1 +	if (chan >= 6) +		base = SH_DMAC_BASE1;  #endif -static const char *dmae_name[] = { -	"DMAC Address Error0", "DMAC Address Error1" -}; +	return base; +} + +static unsigned long dma_base_addr(unsigned int chan) +{ +	unsigned long base = dma_find_base(chan); + +	/* Normalize offset calculation */ +	if (chan >= 9) +		chan -= 6; +	if (chan >= 4) +		base += 0x10; + +	return base + (chan * 0x10); +} +#ifdef CONFIG_SH_DMA_IRQ_MULTI  static inline unsigned int get_dmte_irq(unsigned int chan)  { -	unsigned int irq = 0; -	if (chan < ARRAY_SIZE(dmte_irq_map)) -		irq = dmte_irq_map[chan]; - -#if defined(CONFIG_SH_DMA_IRQ_MULTI) -	if (irq > DMTE6_IRQ) -		return DMTE6_IRQ; -	return DMTE0_IRQ; +	return chan >= 6 ? DMTE6_IRQ : DMTE0_IRQ; +}  #else -	return irq; + +static unsigned int dmte_irq_map[] = { +	DMTE0_IRQ, DMTE0_IRQ + 1, DMTE0_IRQ + 2, DMTE0_IRQ + 3, + +#ifdef DMTE4_IRQ +	DMTE4_IRQ, DMTE4_IRQ + 1, +#endif + +#ifdef DMTE6_IRQ +	DMTE6_IRQ, DMTE6_IRQ + 1, +#endif + +#ifdef DMTE8_IRQ +	DMTE8_IRQ, DMTE9_IRQ, DMTE10_IRQ, DMTE11_IRQ,  #endif +}; + +static inline unsigned int get_dmte_irq(unsigned int chan) +{ +	return dmte_irq_map[chan];  } +#endif  /*   * We determine the correct shift size based off of the CHCR transmit size @@ -53,9 +90,10 @@ static inline unsigned int get_dmte_irq(unsigned int chan)   * iterations to complete the transfer.   */  static unsigned int ts_shift[] = TS_SHIFT; +  static inline unsigned int calc_xmit_shift(struct dma_channel *chan)  { -	u32 chcr = __raw_readl(dma_base_addr[chan->chan] + CHCR); +	u32 chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR);  	int cnt = ((chcr & CHCR_TS_LOW_MASK) >> CHCR_TS_LOW_SHIFT) |  		((chcr & CHCR_TS_HIGH_MASK) >> CHCR_TS_HIGH_SHIFT); @@ -73,13 +111,13 @@ static irqreturn_t dma_tei(int irq, void *dev_id)  	struct dma_channel *chan = dev_id;  	u32 chcr; -	chcr = __raw_readl(dma_base_addr[chan->chan] + CHCR); +	chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR);  	if (!(chcr & CHCR_TE))  		return IRQ_NONE;  	chcr &= ~(CHCR_IE | CHCR_DE); -	__raw_writel(chcr, (dma_base_addr[chan->chan] + CHCR)); +	__raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR));  	wake_up(&chan->wait_queue); @@ -91,13 +129,8 @@ static int sh_dmac_request_dma(struct dma_channel *chan)  	if (unlikely(!(chan->flags & DMA_TEI_CAPABLE)))  		return 0; -	return request_irq(get_dmte_irq(chan->chan), dma_tei, -#if defined(CONFIG_SH_DMA_IRQ_MULTI) -				IRQF_SHARED, -#else -				IRQF_DISABLED, -#endif -				chan->dev_id, chan); +	return request_irq(get_dmte_irq(chan->chan), dma_tei, IRQF_SHARED, +			   chan->dev_id, chan);  }  static void sh_dmac_free_dma(struct dma_channel *chan) @@ -118,7 +151,7 @@ sh_dmac_configure_channel(struct dma_channel *chan, unsigned long chcr)  		chan->flags &= ~DMA_TEI_CAPABLE;  	} -	__raw_writel(chcr, (dma_base_addr[chan->chan] + CHCR)); +	__raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR));  	chan->flags |= DMA_CONFIGURED;  	return 0; @@ -129,13 +162,13 @@ static void sh_dmac_enable_dma(struct dma_channel *chan)  	int irq;  	u32 chcr; -	chcr = __raw_readl(dma_base_addr[chan->chan] + CHCR); +	chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR);  	chcr |= CHCR_DE;  	if (chan->flags & DMA_TEI_CAPABLE)  		chcr |= CHCR_IE; -	__raw_writel(chcr, (dma_base_addr[chan->chan] + CHCR)); +	__raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR));  	if (chan->flags & DMA_TEI_CAPABLE) {  		irq = get_dmte_irq(chan->chan); @@ -153,9 +186,9 @@ static void sh_dmac_disable_dma(struct dma_channel *chan)  		disable_irq(irq);  	} -	chcr = __raw_readl(dma_base_addr[chan->chan] + CHCR); +	chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR);  	chcr &= ~(CHCR_DE | CHCR_TE | CHCR_IE); -	__raw_writel(chcr, (dma_base_addr[chan->chan] + CHCR)); +	__raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR));  }  static int sh_dmac_xfer_dma(struct dma_channel *chan) @@ -186,13 +219,13 @@ static int sh_dmac_xfer_dma(struct dma_channel *chan)  	 */  	if (chan->sar || (mach_is_dreamcast() &&  			  chan->chan == PVR2_CASCADE_CHAN)) -		__raw_writel(chan->sar, (dma_base_addr[chan->chan]+SAR)); +		__raw_writel(chan->sar, (dma_base_addr(chan->chan) + SAR));  	if (chan->dar || (mach_is_dreamcast() &&  			  chan->chan == PVR2_CASCADE_CHAN)) -		__raw_writel(chan->dar, (dma_base_addr[chan->chan] + DAR)); +		__raw_writel(chan->dar, (dma_base_addr(chan->chan) + DAR));  	__raw_writel(chan->count >> calc_xmit_shift(chan), -		(dma_base_addr[chan->chan] + TCR)); +		(dma_base_addr(chan->chan) + TCR));  	sh_dmac_enable_dma(chan); @@ -201,13 +234,32 @@ static int sh_dmac_xfer_dma(struct dma_channel *chan)  static int sh_dmac_get_dma_residue(struct dma_channel *chan)  { -	if (!(__raw_readl(dma_base_addr[chan->chan] + CHCR) & CHCR_DE)) +	if (!(__raw_readl(dma_base_addr(chan->chan) + CHCR) & CHCR_DE))  		return 0; -	return __raw_readl(dma_base_addr[chan->chan] + TCR) +	return __raw_readl(dma_base_addr(chan->chan) + TCR)  		 << calc_xmit_shift(chan);  } +/* + * DMAOR handling + */ +#if defined(CONFIG_CPU_SUBTYPE_SH7723)	|| \ +    defined(CONFIG_CPU_SUBTYPE_SH7724)	|| \ +    defined(CONFIG_CPU_SUBTYPE_SH7780)	|| \ +    defined(CONFIG_CPU_SUBTYPE_SH7785) +#define NR_DMAOR	2 +#else +#define NR_DMAOR	1 +#endif + +/* + * DMAOR bases are broken out amongst channel groups. DMAOR0 manages + * channels 0 - 5, DMAOR1 6 - 11 (optional). + */ +#define dmaor_read_reg(n)		__raw_readw(dma_find_base((n)*6)) +#define dmaor_write_reg(n, data)	__raw_writew(data, dma_find_base(n)*6) +  static inline int dmaor_reset(int no)  {  	unsigned long dmaor = dmaor_read_reg(no); @@ -228,36 +280,86 @@ static inline int dmaor_reset(int no)  	return 0;  } -#if defined(CONFIG_CPU_SH4) -static irqreturn_t dma_err(int irq, void *dummy) -{ -#if defined(CONFIG_SH_DMA_IRQ_MULTI) -	int cnt = 0; -	switch (irq) { -#if defined(DMTE6_IRQ) && defined(DMAE1_IRQ) -	case DMTE6_IRQ: -		cnt++; +/* + * DMAE handling + */ +#ifdef CONFIG_CPU_SH4 + +#if defined(DMAE1_IRQ) +#define NR_DMAE		2 +#else +#define NR_DMAE		1  #endif -	case DMTE0_IRQ: -		if (dmaor_read_reg(cnt) & (DMAOR_NMIF | DMAOR_AE)) { -			disable_irq(irq); -			/* DMA multi and error IRQ */ -			return IRQ_HANDLED; -		} -	default: -		return IRQ_NONE; -	} + +static const char *dmae_name[] = { +	"DMAC Address Error0", +	"DMAC Address Error1" +}; + +#ifdef CONFIG_SH_DMA_IRQ_MULTI +static inline unsigned int get_dma_error_irq(int n) +{ +	return get_dmte_irq(n * 6); +}  #else -	dmaor_reset(0); -#if defined(CONFIG_CPU_SUBTYPE_SH7723)	|| \ -		defined(CONFIG_CPU_SUBTYPE_SH7780)	|| \ -		defined(CONFIG_CPU_SUBTYPE_SH7785) -	dmaor_reset(1); + +static unsigned int dmae_irq_map[] = { +	DMAE0_IRQ, + +#ifdef DMAE1_IRQ +	DMAE1_IRQ, +#endif +}; + +static inline unsigned int get_dma_error_irq(int n) +{ +	return dmae_irq_map[n]; +}  #endif + +static irqreturn_t dma_err(int irq, void *dummy) +{ +	int i; + +	for (i = 0; i < NR_DMAOR; i++) +		dmaor_reset(i); +  	disable_irq(irq);  	return IRQ_HANDLED; -#endif +} + +static int dmae_irq_init(void) +{ +	int n; + +	for (n = 0; n < NR_DMAE; n++) { +		int i = request_irq(get_dma_error_irq(n), dma_err, +				    IRQF_SHARED, dmae_name[n], (void *)dmae_name[n]); +		if (unlikely(i < 0)) { +			printk(KERN_ERR "%s request_irq fail\n", dmae_name[n]); +			return i; +		} +	} + +	return 0; +} + +static void dmae_irq_free(void) +{ +	int n; + +	for (n = 0; n < NR_DMAE; n++) +		free_irq(get_dma_error_irq(n), NULL); +} +#else +static inline int dmae_irq_init(void) +{ +	return 0; +} + +static void dmae_irq_free(void) +{  }  #endif @@ -276,72 +378,34 @@ static struct dma_info sh_dmac_info = {  	.flags		= DMAC_CHANNELS_TEI_CAPABLE,  }; -#ifdef CONFIG_CPU_SH4 -static unsigned int get_dma_error_irq(int n) -{ -#if defined(CONFIG_SH_DMA_IRQ_MULTI) -	return (n == 0) ? get_dmte_irq(0) : get_dmte_irq(6); -#else -	return (n == 0) ? DMAE0_IRQ : -#if defined(DMAE1_IRQ) -				DMAE1_IRQ; -#else -				-1; -#endif -#endif -} -#endif -  static int __init sh_dmac_init(void)  {  	struct dma_info *info = &sh_dmac_info; -	int i; - -#ifdef CONFIG_CPU_SH4 -	int n; +	int i, rc; -	for (n = 0; n < NR_DMAE; n++) { -		i = request_irq(get_dma_error_irq(n), dma_err, -#if defined(CONFIG_SH_DMA_IRQ_MULTI) -				IRQF_SHARED, -#else -				IRQF_DISABLED, -#endif -				dmae_name[n], (void *)dmae_name[n]); -		if (unlikely(i < 0)) { -			printk(KERN_ERR "%s request_irq fail\n", dmae_name[n]); -			return i; -		} -	} -#endif /* CONFIG_CPU_SH4 */ +	/* +	 * Initialize DMAE, for parts that support it. +	 */ +	rc = dmae_irq_init(); +	if (unlikely(rc != 0)) +		return rc;  	/*  	 * Initialize DMAOR, and clean up any error flags that may have  	 * been set.  	 */ -	i = dmaor_reset(0); -	if (unlikely(i != 0)) -		return i; -#if defined(CONFIG_CPU_SUBTYPE_SH7723)	|| \ -		defined(CONFIG_CPU_SUBTYPE_SH7780)	|| \ -		defined(CONFIG_CPU_SUBTYPE_SH7785) -	i = dmaor_reset(1); -	if (unlikely(i != 0)) -		return i; -#endif +	for (i = 0; i < NR_DMAOR; i++) { +		rc = dmaor_reset(i); +		if (unlikely(rc != 0)) +			return rc; +	}  	return register_dmac(info);  }  static void __exit sh_dmac_exit(void)  { -#ifdef CONFIG_CPU_SH4 -	int n; - -	for (n = 0; n < NR_DMAE; n++) { -		free_irq(get_dma_error_irq(n), (void *)dmae_name[n]); -	} -#endif /* CONFIG_CPU_SH4 */ +	dmae_irq_free();  	unregister_dmac(&sh_dmac_info);  } diff --git a/arch/sh/drivers/dma/dma-sysfs.c b/arch/sh/drivers/dma/dma-sysfs.c index 1ee631d3725..4b15feda54b 100644 --- a/arch/sh/drivers/dma/dma-sysfs.c +++ b/arch/sh/drivers/dma/dma-sysfs.c @@ -11,23 +11,25 @@   */  #include <linux/kernel.h>  #include <linux/init.h> -#include <linux/sysdev.h> +#include <linux/stat.h> +#include <linux/device.h>  #include <linux/platform_device.h>  #include <linux/err.h>  #include <linux/string.h>  #include <asm/dma.h> -static struct sysdev_class dma_sysclass = { +static struct bus_type dma_subsys = {  	.name = "dma", +	.dev_name = "dma",  }; -static ssize_t dma_show_devices(struct sys_device *dev, -				struct sysdev_attribute *attr, char *buf) +static ssize_t dma_show_devices(struct device *dev, +				struct device_attribute *attr, char *buf)  {  	ssize_t len = 0;  	int i; -	for (i = 0; i < MAX_DMA_CHANNELS; i++) { +	for (i = 0; i < 16; i++) {  		struct dma_info *info = get_dma_info(i);  		struct dma_channel *channel = get_dma_channel(i); @@ -42,29 +44,29 @@ static ssize_t dma_show_devices(struct sys_device *dev,  	return len;  } -static SYSDEV_ATTR(devices, S_IRUGO, dma_show_devices, NULL); +static DEVICE_ATTR(devices, S_IRUGO, dma_show_devices, NULL); -static int __init dma_sysclass_init(void) +static int __init dma_subsys_init(void)  {  	int ret; -	ret = sysdev_class_register(&dma_sysclass); +	ret = subsys_system_register(&dma_subsys, NULL);  	if (unlikely(ret))  		return ret; -	return sysfs_create_file(&dma_sysclass.kset.kobj, &attr_devices.attr); +	return device_create_file(dma_subsys.dev_root, &dev_attr_devices);  } -postcore_initcall(dma_sysclass_init); +postcore_initcall(dma_subsys_init); -static ssize_t dma_show_dev_id(struct sys_device *dev, -				struct sysdev_attribute *attr, char *buf) +static ssize_t dma_show_dev_id(struct device *dev, +				struct device_attribute *attr, char *buf)  {  	struct dma_channel *channel = to_dma_channel(dev);  	return sprintf(buf, "%s\n", channel->dev_id);  } -static ssize_t dma_store_dev_id(struct sys_device *dev, -				struct sysdev_attribute *attr, +static ssize_t dma_store_dev_id(struct device *dev, +				struct device_attribute *attr,  				const char *buf, size_t count)  {  	struct dma_channel *channel = to_dma_channel(dev); @@ -72,10 +74,10 @@ static ssize_t dma_store_dev_id(struct sys_device *dev,  	return count;  } -static SYSDEV_ATTR(dev_id, S_IRUGO | S_IWUSR, dma_show_dev_id, dma_store_dev_id); +static DEVICE_ATTR(dev_id, S_IRUGO | S_IWUSR, dma_show_dev_id, dma_store_dev_id); -static ssize_t dma_store_config(struct sys_device *dev, -				struct sysdev_attribute *attr, +static ssize_t dma_store_config(struct device *dev, +				struct device_attribute *attr,  				const char *buf, size_t count)  {  	struct dma_channel *channel = to_dma_channel(dev); @@ -87,17 +89,17 @@ static ssize_t dma_store_config(struct sys_device *dev,  	return count;  } -static SYSDEV_ATTR(config, S_IWUSR, NULL, dma_store_config); +static DEVICE_ATTR(config, S_IWUSR, NULL, dma_store_config); -static ssize_t dma_show_mode(struct sys_device *dev, -				struct sysdev_attribute *attr, char *buf) +static ssize_t dma_show_mode(struct device *dev, +				struct device_attribute *attr, char *buf)  {  	struct dma_channel *channel = to_dma_channel(dev);  	return sprintf(buf, "0x%08x\n", channel->mode);  } -static ssize_t dma_store_mode(struct sys_device *dev, -			      struct sysdev_attribute *attr, +static ssize_t dma_store_mode(struct device *dev, +			      struct device_attribute *attr,  			      const char *buf, size_t count)  {  	struct dma_channel *channel = to_dma_channel(dev); @@ -105,38 +107,38 @@ static ssize_t dma_store_mode(struct sys_device *dev,  	return count;  } -static SYSDEV_ATTR(mode, S_IRUGO | S_IWUSR, dma_show_mode, dma_store_mode); +static DEVICE_ATTR(mode, S_IRUGO | S_IWUSR, dma_show_mode, dma_store_mode);  #define dma_ro_attr(field, fmt)						\ -static ssize_t dma_show_##field(struct sys_device *dev, 		\ -				struct sysdev_attribute *attr, char *buf)\ +static ssize_t dma_show_##field(struct device *dev,		\ +				struct device_attribute *attr, char *buf)\  {									\  	struct dma_channel *channel = to_dma_channel(dev);		\  	return sprintf(buf, fmt, channel->field);			\  }									\ -static SYSDEV_ATTR(field, S_IRUGO, dma_show_##field, NULL); +static DEVICE_ATTR(field, S_IRUGO, dma_show_##field, NULL);  dma_ro_attr(count, "0x%08x\n");  dma_ro_attr(flags, "0x%08lx\n");  int dma_create_sysfs_files(struct dma_channel *chan, struct dma_info *info)  { -	struct sys_device *dev = &chan->dev; +	struct device *dev = &chan->dev;  	char name[16];  	int ret;  	dev->id  = chan->vchan; -	dev->cls = &dma_sysclass; +	dev->bus = &dma_subsys; -	ret = sysdev_register(dev); +	ret = device_register(dev);  	if (ret)  		return ret; -	ret |= sysdev_create_file(dev, &attr_dev_id); -	ret |= sysdev_create_file(dev, &attr_count); -	ret |= sysdev_create_file(dev, &attr_mode); -	ret |= sysdev_create_file(dev, &attr_flags); -	ret |= sysdev_create_file(dev, &attr_config); +	ret |= device_create_file(dev, &dev_attr_dev_id); +	ret |= device_create_file(dev, &dev_attr_count); +	ret |= device_create_file(dev, &dev_attr_mode); +	ret |= device_create_file(dev, &dev_attr_flags); +	ret |= device_create_file(dev, &dev_attr_config);  	if (unlikely(ret)) {  		dev_err(&info->pdev->dev, "Failed creating attrs\n"); @@ -149,17 +151,17 @@ int dma_create_sysfs_files(struct dma_channel *chan, struct dma_info *info)  void dma_remove_sysfs_files(struct dma_channel *chan, struct dma_info *info)  { -	struct sys_device *dev = &chan->dev; +	struct device *dev = &chan->dev;  	char name[16]; -	sysdev_remove_file(dev, &attr_dev_id); -	sysdev_remove_file(dev, &attr_count); -	sysdev_remove_file(dev, &attr_mode); -	sysdev_remove_file(dev, &attr_flags); -	sysdev_remove_file(dev, &attr_config); +	device_remove_file(dev, &dev_attr_dev_id); +	device_remove_file(dev, &dev_attr_count); +	device_remove_file(dev, &dev_attr_mode); +	device_remove_file(dev, &dev_attr_flags); +	device_remove_file(dev, &dev_attr_config);  	snprintf(name, sizeof(name), "dma%d", chan->chan);  	sysfs_remove_link(&info->pdev->dev.kobj, name); -	sysdev_unregister(dev); +	device_unregister(dev);  } diff --git a/arch/sh/drivers/dma/dmabrg.c b/arch/sh/drivers/dma/dmabrg.c index 6ab9c4a1543..c0dd904483c 100644 --- a/arch/sh/drivers/dma/dmabrg.c +++ b/arch/sh/drivers/dma/dmabrg.c @@ -174,23 +174,23 @@ static int __init dmabrg_init(void)  	or = __raw_readl(DMAOR);  	__raw_writel(or | DMAOR_BRG | DMAOR_DMEN, DMAOR); -	ret = request_irq(DMABRGI0, dmabrg_irq, IRQF_DISABLED, +	ret = request_irq(DMABRGI0, dmabrg_irq, 0,  			"DMABRG USB address error", NULL);  	if (ret)  		goto out0; -	ret = request_irq(DMABRGI1, dmabrg_irq, IRQF_DISABLED, +	ret = request_irq(DMABRGI1, dmabrg_irq, 0,  			"DMABRG Transfer End", NULL);  	if (ret)  		goto out1; -	ret = request_irq(DMABRGI2, dmabrg_irq, IRQF_DISABLED, +	ret = request_irq(DMABRGI2, dmabrg_irq, 0,  			"DMABRG Transfer Half", NULL);  	if (ret == 0)  		return ret; -	free_irq(DMABRGI1, 0); -out1:	free_irq(DMABRGI0, 0); +	free_irq(DMABRGI1, NULL); +out1:	free_irq(DMABRGI0, NULL);  out0:	kfree(dmabrg_handlers);  	return ret;  } diff --git a/arch/sh/drivers/pci/fixups-cayman.c b/arch/sh/drivers/pci/fixups-cayman.c index b68b61d22c6..edc2fb7a5bb 100644 --- a/arch/sh/drivers/pci/fixups-cayman.c +++ b/arch/sh/drivers/pci/fixups-cayman.c @@ -5,7 +5,7 @@  #include <cpu/irq.h>  #include "pci-sh5.h" -int __init pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *dev, u8 slot, u8 pin)  {  	int result = -1; diff --git a/arch/sh/drivers/pci/fixups-dreamcast.c b/arch/sh/drivers/pci/fixups-dreamcast.c index 942ef4f155f..1d1c5a227e5 100644 --- a/arch/sh/drivers/pci/fixups-dreamcast.c +++ b/arch/sh/drivers/pci/fixups-dreamcast.c @@ -28,9 +28,11 @@  #include <asm/irq.h>  #include <mach/pci.h> -static void __init gapspci_fixup_resources(struct pci_dev *dev) +static void gapspci_fixup_resources(struct pci_dev *dev)  {  	struct pci_channel *p = dev->sysdata; +	struct resource res; +	struct pci_bus_region region;  	printk(KERN_NOTICE "PCI: Fixing up device %s\n", pci_name(dev)); @@ -50,11 +52,21 @@ static void __init gapspci_fixup_resources(struct pci_dev *dev)  		/*  		 * Redirect dma memory allocations to special memory window. +		 * +		 * If this GAPSPCI region were mapped by a BAR, the CPU +		 * phys_addr_t would be pci_resource_start(), and the bus +		 * address would be pci_bus_address(pci_resource_start()). +		 * But apparently there's no BAR mapping it, so we just +		 * "know" its CPU address is GAPSPCI_DMA_BASE.  		 */ +		res.start = GAPSPCI_DMA_BASE; +		res.end = GAPSPCI_DMA_BASE + GAPSPCI_DMA_SIZE - 1; +		res.flags = IORESOURCE_MEM; +		pcibios_resource_to_bus(dev->bus, ®ion, &res);  		BUG_ON(!dma_declare_coherent_memory(&dev->dev, -						GAPSPCI_DMA_BASE, -						GAPSPCI_DMA_BASE, -						GAPSPCI_DMA_SIZE, +						res.start, +						region.start, +						resource_size(&res),  						DMA_MEMORY_MAP |  						DMA_MEMORY_EXCLUSIVE));  		break; @@ -64,7 +76,7 @@ static void __init gapspci_fixup_resources(struct pci_dev *dev)  }  DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, gapspci_fixup_resources); -int __init pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *dev, u8 slot, u8 pin)  {  	/*  	 * The interrupt routing semantics here are quite trivial. diff --git a/arch/sh/drivers/pci/fixups-landisk.c b/arch/sh/drivers/pci/fixups-landisk.c index bb1a6bb5149..db5b40a98e6 100644 --- a/arch/sh/drivers/pci/fixups-landisk.c +++ b/arch/sh/drivers/pci/fixups-landisk.c @@ -1,9 +1,10 @@  /* - * arch/sh/drivers/pci/ops-landisk.c + * arch/sh/drivers/pci/fixups-landisk.c   *   * PCI initialization for the I-O DATA Device, Inc. LANDISK board   *   * Copyright (C) 2006 kogiidena + * Copyright (C) 2010 Nobuhiro Iwamatsu   *   * May be copied or modified under the terms of the GNU General Public   * License.  See linux/COPYING for more information. @@ -13,9 +14,13 @@  #include <linux/init.h>  #include <linux/delay.h>  #include <linux/pci.h> +#include <linux/sh_intc.h>  #include "pci-sh4.h" -int pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) +#define PCIMCR_MRSET_OFF	0xBFFFFFFF +#define PCIMCR_RFSH_OFF		0xFFFFFFFB + +int pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)  {  	/*  	 * slot0: pin1-4 = irq5,6,7,8 @@ -23,12 +28,32 @@ int pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)  	 * slot2: pin1-4 = irq7,8,5,6  	 * slot3: pin1-4 = irq8,5,6,7  	 */ -	int irq = ((slot + pin - 1) & 0x3) + 5; +	int irq = ((slot + pin - 1) & 0x3) + evt2irq(0x2a0);  	if ((slot | (pin - 1)) > 0x3) { -		printk("PCI: Bad IRQ mapping request for slot %d pin %c\n", +		printk(KERN_WARNING "PCI: Bad IRQ mapping request for slot %d pin %c\n",  		       slot, pin - 1 + 'A');  		return -1;  	}  	return irq;  } + +int pci_fixup_pcic(struct pci_channel *chan) +{ +	unsigned long bcr1, mcr; + +	bcr1 = __raw_readl(SH7751_BCR1); +	bcr1 |= 0x40080000;	/* Enable Bit 19 BREQEN, set PCIC to slave */ +	pci_write_reg(chan, bcr1, SH4_PCIBCR1); + +	mcr = __raw_readl(SH7751_MCR); +	mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF; +	pci_write_reg(chan, mcr, SH4_PCIMCR); + +	pci_write_reg(chan, 0x0c000000, SH7751_PCICONF5); +	pci_write_reg(chan, 0xd0000000, SH7751_PCICONF6); +	pci_write_reg(chan, 0x0c000000, SH4_PCILAR0); +	pci_write_reg(chan, 0x00000000, SH4_PCILAR1); + +	return 0; +} diff --git a/arch/sh/drivers/pci/fixups-r7780rp.c b/arch/sh/drivers/pci/fixups-r7780rp.c index 08b2d8658a0..57ed3f09d0c 100644 --- a/arch/sh/drivers/pci/fixups-r7780rp.c +++ b/arch/sh/drivers/pci/fixups-r7780rp.c @@ -12,13 +12,10 @@   */  #include <linux/pci.h>  #include <linux/io.h> +#include <linux/sh_intc.h>  #include "pci-sh4.h" -static char irq_tab[] __initdata = { -	65, 66, 67, 68, -}; - -int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)  { -	return irq_tab[slot]; +	return evt2irq(0xa20) + slot;  } diff --git a/arch/sh/drivers/pci/fixups-rts7751r2d.c b/arch/sh/drivers/pci/fixups-rts7751r2d.c index e248516118a..eaddb56c45c 100644 --- a/arch/sh/drivers/pci/fixups-rts7751r2d.c +++ b/arch/sh/drivers/pci/fixups-rts7751r2d.c @@ -31,7 +31,7 @@ static char lboxre2_irq_tab[] __initdata = {  	IRQ_ETH0, IRQ_ETH1, IRQ_INTA, IRQ_INTD,  }; -int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)  {  	if (mach_is_lboxre2())  		return lboxre2_irq_tab[slot]; diff --git a/arch/sh/drivers/pci/fixups-sdk7780.c b/arch/sh/drivers/pci/fixups-sdk7780.c index 0930f988ac2..c0a015ae6ec 100644 --- a/arch/sh/drivers/pci/fixups-sdk7780.c +++ b/arch/sh/drivers/pci/fixups-sdk7780.c @@ -13,21 +13,31 @@   */  #include <linux/pci.h>  #include <linux/io.h> +#include <linux/sh_intc.h>  #include "pci-sh4.h" +#define IRQ_INTA	evt2irq(0xa20) +#define IRQ_INTB	evt2irq(0xa40) +#define IRQ_INTC	evt2irq(0xa60) +#define IRQ_INTD	evt2irq(0xa80) +  /* IDSEL [16][17][18][19][20][21][22][23][24][25][26][27][28][29][30][31] */  static char sdk7780_irq_tab[4][16] __initdata = {  	/* INTA */ -	{ 65, 68, 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, +	{ IRQ_INTA, IRQ_INTD, IRQ_INTC, IRQ_INTD, -1, -1, -1, -1, -1, -1, +	  -1, -1, -1, -1, -1, -1 },  	/* INTB */ -	{ 66, 65, -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, +	{ IRQ_INTB, IRQ_INTA, -1, IRQ_INTA, -1, -1, -1, -1, -1, -1, -1, -1, +	  -1, -1, -1, -1 },  	/* INTC */ -	{ 67, 66, -1, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, +	{ IRQ_INTC, IRQ_INTB, -1, IRQ_INTB, -1, -1, -1, -1, -1, -1, -1, -1, +	  -1, -1, -1, -1 },  	/* INTD */ -	{ 68, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, +	{ IRQ_INTD, IRQ_INTC, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +	  -1, -1, -1 },  }; -int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)  {         return sdk7780_irq_tab[pin-1][slot];  } diff --git a/arch/sh/drivers/pci/fixups-sdk7786.c b/arch/sh/drivers/pci/fixups-sdk7786.c index 0e18ee33255..36eb6fc3c18 100644 --- a/arch/sh/drivers/pci/fixups-sdk7786.c +++ b/arch/sh/drivers/pci/fixups-sdk7786.c @@ -23,9 +23,9 @@   * Misconfigurations can be detected through the FPGA via the slot   * resistors to determine card presence. Hotplug remains unsupported.   */ -static unsigned int slot4en __devinitdata; +static unsigned int slot4en __initdata; -char *__devinit pcibios_setup(char *str) +char *__init pcibios_setup(char *str)  {  	if (strcmp(str, "slot4en") == 0) {  		slot4en = 1; diff --git a/arch/sh/drivers/pci/fixups-se7751.c b/arch/sh/drivers/pci/fixups-se7751.c index a4c7d3a4efc..84a88ca9200 100644 --- a/arch/sh/drivers/pci/fixups-se7751.c +++ b/arch/sh/drivers/pci/fixups-se7751.c @@ -4,13 +4,14 @@  #include <linux/delay.h>  #include <linux/pci.h>  #include <linux/io.h> +#include <linux/sh_intc.h>  #include "pci-sh4.h" -int __init pcibios_map_platform_irq(u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *, u8 slot, u8 pin)  {          switch (slot) { -        case 0: return 13; -        case 1: return 13;	/* AMD Ethernet controller */ +        case 0: return evt2irq(0x3a0); +        case 1: return evt2irq(0x3a0);	/* AMD Ethernet controller */          case 2: return -1;          case 3: return -1;          case 4: return -1; diff --git a/arch/sh/drivers/pci/fixups-sh03.c b/arch/sh/drivers/pci/fixups-sh03.c index 2e8a18b7ee5..16207bef9f5 100644 --- a/arch/sh/drivers/pci/fixups-sh03.c +++ b/arch/sh/drivers/pci/fixups-sh03.c @@ -2,28 +2,29 @@  #include <linux/init.h>  #include <linux/types.h>  #include <linux/pci.h> +#include <linux/sh_intc.h> -int __init pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *dev, u8 slot, u8 pin)  {  	int irq;  	if (dev->bus->number == 0) {  		switch (slot) { -		case 4: return 5;	/* eth0       */ -		case 8: return 5;	/* eth1       */ -		case 6: return 2;	/* PCI bridge */ +		case 4: return evt2irq(0x2a0);	/* eth0       */ +		case 8: return evt2irq(0x2a0);	/* eth1       */ +		case 6: return evt2irq(0x240);	/* PCI bridge */  		default:  			printk(KERN_ERR "PCI: Bad IRQ mapping request "  					"for slot %d\n", slot); -			return 2; +			return evt2irq(0x240);  		}  	} else {  		switch (pin) { -		case 0:   irq =  2; break; -		case 1:   irq =  2; break; -		case 2:   irq =  2; break; -		case 3:   irq =  2; break; -		case 4:   irq =  2; break; +		case 0:   irq =  evt2irq(0x240); break; +		case 1:   irq =  evt2irq(0x240); break; +		case 2:   irq =  evt2irq(0x240); break; +		case 3:   irq =  evt2irq(0x240); break; +		case 4:   irq =  evt2irq(0x240); break;  		default:  irq = -1; break;  		}  	} diff --git a/arch/sh/drivers/pci/fixups-snapgear.c b/arch/sh/drivers/pci/fixups-snapgear.c index 5a39ecc1adb..6e33ba4cd07 100644 --- a/arch/sh/drivers/pci/fixups-snapgear.c +++ b/arch/sh/drivers/pci/fixups-snapgear.c @@ -16,19 +16,20 @@  #include <linux/types.h>  #include <linux/init.h>  #include <linux/pci.h> +#include <linux/sh_intc.h>  #include "pci-sh4.h" -int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)  {  	int irq = -1;  	switch (slot) {  	case 8:  /* the PCI bridge */ break; -	case 11: irq = 8;  break; /* USB    */ -	case 12: irq = 11; break; /* PCMCIA */ -	case 13: irq = 5;  break; /* eth0   */ -	case 14: irq = 8;  break; /* eth1   */ -	case 15: irq = 11; break; /* safenet (unused) */ +	case 11: irq = evt2irq(0x300); break; /* USB    */ +	case 12: irq = evt2irq(0x360); break; /* PCMCIA */ +	case 13: irq = evt2irq(0x2a0); break; /* eth0   */ +	case 14: irq = evt2irq(0x300); break; /* eth1   */ +	case 15: irq = evt2irq(0x360); break; /* safenet (unused) */  	}  	printk("PCI: Mapping SnapGear IRQ for slot %d, pin %c to irq %d\n", diff --git a/arch/sh/drivers/pci/fixups-titan.c b/arch/sh/drivers/pci/fixups-titan.c index 3a79fa8254a..bd1addb1b8b 100644 --- a/arch/sh/drivers/pci/fixups-titan.c +++ b/arch/sh/drivers/pci/fixups-titan.c @@ -27,7 +27,7 @@ static char titan_irq_tab[] __initdata = {  	TITAN_IRQ_USB,  }; -int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)  {  	int irq = titan_irq_tab[slot]; diff --git a/arch/sh/drivers/pci/pci-sh5.c b/arch/sh/drivers/pci/pci-sh5.c index 0bf296c7879..16c1e721bf5 100644 --- a/arch/sh/drivers/pci/pci-sh5.c +++ b/arch/sh/drivers/pci/pci-sh5.c @@ -107,13 +107,13 @@ static int __init sh5pci_init(void)  	u32 uval;          if (request_irq(IRQ_ERR, pcish5_err_irq, -                        IRQF_DISABLED, "PCI Error",NULL) < 0) { +                        0, "PCI Error",NULL) < 0) {                  printk(KERN_ERR "PCISH5: Cannot hook PCI_PERR interrupt\n");                  return -EINVAL;          }          if (request_irq(IRQ_SERR, pcish5_serr_irq, -                        IRQF_DISABLED, "PCI SERR interrupt", NULL) < 0) { +                        0, "PCI SERR interrupt", NULL) < 0) {                  printk(KERN_ERR "PCISH5: Cannot hook PCI_SERR interrupt\n");                  return -EINVAL;          } diff --git a/arch/sh/drivers/pci/pci-sh7751.h b/arch/sh/drivers/pci/pci-sh7751.h index 4983a4d2035..5ede38c330d 100644 --- a/arch/sh/drivers/pci/pci-sh7751.h +++ b/arch/sh/drivers/pci/pci-sh7751.h @@ -61,7 +61,7 @@    #define SH7751_PCICONF3_BIST7      0x80000000  /* Bist Supported */    #define SH7751_PCICONF3_BIST6      0x40000000  /* Bist Executing */    #define SH7751_PCICONF3_BIST3_0    0x0F000000  /* Bist Passed */ -  #define SH7751_PCICONF3_HD7        0x00800000  /* Single Funtion device */ +  #define SH7751_PCICONF3_HD7        0x00800000  /* Single Function device */    #define SH7751_PCICONF3_HD6_0      0x007F0000  /* Configuration Layout */    #define SH7751_PCICONF3_LAT        0x0000FF00  /* Latency Timer */    #define SH7751_PCICONF3_CLS        0x000000FF  /* Cache Line Size */ diff --git a/arch/sh/drivers/pci/pci-sh7780.c b/arch/sh/drivers/pci/pci-sh7780.c index edb7cca1488..5a6dab6e27d 100644 --- a/arch/sh/drivers/pci/pci-sh7780.c +++ b/arch/sh/drivers/pci/pci-sh7780.c @@ -21,6 +21,13 @@  #include <asm/mmu.h>  #include <asm/sizes.h> +#if defined(CONFIG_CPU_BIG_ENDIAN) +# define PCICR_ENDIANNESS SH4_PCICR_BSWP +#else +# define PCICR_ENDIANNESS 0 +#endif + +  static struct resource sh7785_pci_resources[] = {  	{  		.name	= "PCI IO", @@ -74,7 +81,7 @@ struct pci_errors {  	{ SH4_PCIINT_MLCK,	"master lock error" },  	{ SH4_PCIINT_TABT,	"target-target abort" },  	{ SH4_PCIINT_TRET,	"target retry time out" }, -	{ SH4_PCIINT_MFDE,	"master function disable erorr" }, +	{ SH4_PCIINT_MFDE,	"master function disable error" },  	{ SH4_PCIINT_PRTY,	"address parity error" },  	{ SH4_PCIINT_SERR,	"SERR" },  	{ SH4_PCIINT_TWDP,	"data parity error for target write" }, @@ -172,7 +179,7 @@ static int __init sh7780_pci_setup_irqs(struct pci_channel *hose)  		     PCI_STATUS_SIG_TARGET_ABORT | \  		     PCI_STATUS_PARITY, hose->reg_base + PCI_STATUS); -	ret = request_irq(hose->serr_irq, sh7780_pci_serr_irq, IRQF_DISABLED, +	ret = request_irq(hose->serr_irq, sh7780_pci_serr_irq, 0,  			  "PCI SERR interrupt", hose);  	if (unlikely(ret)) {  		printk(KERN_ERR "PCI: Failed hooking SERR IRQ\n"); @@ -254,7 +261,7 @@ static int __init sh7780_pci_init(void)  	__raw_writel(PCIECR_ENBL, PCIECR);  	/* Reset */ -	__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_PRST, +	__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_PRST | PCICR_ENDIANNESS,  		     chan->reg_base + SH4_PCICR);  	/* @@ -290,7 +297,8 @@ static int __init sh7780_pci_init(void)  	 * Now throw it in to register initialization mode and  	 * start the real work.  	 */ -	__raw_writel(SH4_PCICR_PREFIX, chan->reg_base + SH4_PCICR); +	__raw_writel(SH4_PCICR_PREFIX | PCICR_ENDIANNESS, +		     chan->reg_base + SH4_PCICR);  	memphys = __pa(memory_start);  	memsize = roundup_pow_of_two(memory_end - memory_start); @@ -380,7 +388,8 @@ static int __init sh7780_pci_init(void)  	 * Initialization mode complete, release the control register and  	 * enable round robin mode to stop device overruns/starvation.  	 */ -	__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_FTO, +	__raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_FTO | +		     PCICR_ENDIANNESS,  		     chan->reg_base + SH4_PCICR);  	ret = register_pci_controller(chan); diff --git a/arch/sh/drivers/pci/pci.c b/arch/sh/drivers/pci/pci.c index 60ee09a4e12..1bc09ee7948 100644 --- a/arch/sh/drivers/pci/pci.c +++ b/arch/sh/drivers/pci/pci.c @@ -20,6 +20,7 @@  #include <linux/io.h>  #include <linux/mutex.h>  #include <linux/spinlock.h> +#include <linux/export.h>  unsigned long PCIBIOS_MIN_IO = 0x0000;  unsigned long PCIBIOS_MIN_MEM = 0; @@ -31,19 +32,34 @@ static struct pci_channel *hose_head, **hose_tail = &hose_head;  static int pci_initialized; -static void __devinit pcibios_scanbus(struct pci_channel *hose) +static void pcibios_scanbus(struct pci_channel *hose)  {  	static int next_busno;  	static int need_domain_info; +	LIST_HEAD(resources); +	struct resource *res; +	resource_size_t offset; +	int i;  	struct pci_bus *bus; -	bus = pci_scan_bus(next_busno, hose->pci_ops, hose); +	for (i = 0; i < hose->nr_resources; i++) { +		res = hose->resources + i; +		offset = 0; +		if (res->flags & IORESOURCE_IO) +			offset = hose->io_offset; +		else if (res->flags & IORESOURCE_MEM) +			offset = hose->mem_offset; +		pci_add_resource_offset(&resources, res, offset); +	} + +	bus = pci_scan_root_bus(NULL, next_busno, hose->pci_ops, hose, +				&resources);  	hose->bus = bus;  	need_domain_info = need_domain_info || hose->index;  	hose->need_domain_info = need_domain_info;  	if (bus) { -		next_busno = bus->subordinate + 1; +		next_busno = bus->busn_res.end + 1;  		/* Don't allow 8-bit bus number overflow inside the hose -  		   reserve some space for bridges. */  		if (next_busno > 224) { @@ -53,7 +69,8 @@ static void __devinit pcibios_scanbus(struct pci_channel *hose)  		pci_bus_size_bridges(bus);  		pci_bus_assign_resources(bus); -		pci_enable_bridges(bus); +	} else { +		pci_free_resource_list(&resources);  	}  } @@ -64,7 +81,7 @@ static void __devinit pcibios_scanbus(struct pci_channel *hose)  DEFINE_RAW_SPINLOCK(pci_config_lock);  static DEFINE_MUTEX(pci_scan_mutex); -int __devinit register_pci_controller(struct pci_channel *hose) +int register_pci_controller(struct pci_channel *hose)  {  	int i; @@ -84,7 +101,7 @@ int __devinit register_pci_controller(struct pci_channel *hose)  	hose_tail = &hose->next;  	/* -	 * Do not panic here but later - this might hapen before console init. +	 * Do not panic here but later - this might happen before console init.  	 */  	if (!hose->io_map_base) {  		printk(KERN_WARNING @@ -134,50 +151,12 @@ static int __init pcibios_init(void)  }  subsys_initcall(pcibios_init); -static void pcibios_fixup_device_resources(struct pci_dev *dev, -	struct pci_bus *bus) -{ -	/* Update device resources.  */ -	struct pci_channel *hose = bus->sysdata; -	unsigned long offset = 0; -	int i; - -	for (i = 0; i < PCI_NUM_RESOURCES; i++) { -		if (!dev->resource[i].start) -			continue; -		if (dev->resource[i].flags & IORESOURCE_IO) -			offset = hose->io_offset; -		else if (dev->resource[i].flags & IORESOURCE_MEM) -			offset = hose->mem_offset; - -		dev->resource[i].start += offset; -		dev->resource[i].end += offset; -	} -} -  /*   *  Called after each bus is probed, but before its children   *  are examined.   */ -void __devinit pcibios_fixup_bus(struct pci_bus *bus) +void pcibios_fixup_bus(struct pci_bus *bus)  { -	struct pci_dev *dev = bus->self; -	struct list_head *ln; -	struct pci_channel *hose = bus->sysdata; - -	if (!dev) { -		int i; - -		for (i = 0; i < hose->nr_resources; i++) -			bus->resource[i] = hose->resources + i; -	} - -	for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) { -		dev = pci_dev_b(ln); - -		if ((dev->class >> 8) != PCI_CLASS_BRIDGE_PCI) -			pcibios_fixup_device_resources(dev, bus); -	}  }  /* @@ -207,72 +186,6 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res,  	return start;  } -void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, -			     struct resource *res) -{ -	struct pci_channel *hose = dev->sysdata; -	unsigned long offset = 0; - -	if (res->flags & IORESOURCE_IO) -		offset = hose->io_offset; -	else if (res->flags & IORESOURCE_MEM) -		offset = hose->mem_offset; - -	region->start = res->start - offset; -	region->end = res->end - offset; -} - -void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, -			     struct pci_bus_region *region) -{ -	struct pci_channel *hose = dev->sysdata; -	unsigned long offset = 0; - -	if (res->flags & IORESOURCE_IO) -		offset = hose->io_offset; -	else if (res->flags & IORESOURCE_MEM) -		offset = hose->mem_offset; - -	res->start = region->start + offset; -	res->end = region->end + offset; -} - -int pcibios_enable_device(struct pci_dev *dev, int mask) -{ -	return pci_enable_resources(dev, mask); -} - -/* - *  If we set up a device for bus mastering, we need to check and set - *  the latency timer as it may not be properly set. - */ -static unsigned int pcibios_max_latency = 255; - -void pcibios_set_master(struct pci_dev *dev) -{ -	u8 lat; -	pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat); -	if (lat < 16) -		lat = (64 <= pcibios_max_latency) ? 64 : pcibios_max_latency; -	else if (lat > pcibios_max_latency) -		lat = pcibios_max_latency; -	else -		return; -	printk(KERN_INFO "PCI: Setting latency timer of device %s to %d\n", -	       pci_name(dev), lat); -	pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat); -} - -void __init pcibios_update_irq(struct pci_dev *dev, int irq) -{ -	pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); -} - -char * __devinit __weak pcibios_setup(char *str) -{ -	return str; -} -  static void __init  pcibios_bus_report_status_early(struct pci_channel *hose,  				int top_bus, int current_bus, @@ -376,46 +289,22 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,  #ifndef CONFIG_GENERIC_IOMAP -static void __iomem *ioport_map_pci(struct pci_dev *dev, -				    unsigned long port, unsigned int nr) +void __iomem *__pci_ioport_map(struct pci_dev *dev, +			       unsigned long port, unsigned int nr)  {  	struct pci_channel *chan = dev->sysdata;  	if (unlikely(!chan->io_map_base)) { -		chan->io_map_base = generic_io_base; +		chan->io_map_base = sh_io_port_base;  		if (pci_domains_supported)  			panic("To avoid data corruption io_map_base MUST be "  			      "set with multiple PCI domains.");  	} -  	return (void __iomem *)(chan->io_map_base + port);  } -void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) -{ -	resource_size_t start = pci_resource_start(dev, bar); -	resource_size_t len = pci_resource_len(dev, bar); -	unsigned long flags = pci_resource_flags(dev, bar); - -	if (unlikely(!len || !start)) -		return NULL; -	if (maxlen && len > maxlen) -		len = maxlen; - -	if (flags & IORESOURCE_IO) -		return ioport_map_pci(dev, start, len); -	if (flags & IORESOURCE_MEM) { -		if (flags & IORESOURCE_CACHEABLE) -			return ioremap(start, len); -		return ioremap_nocache(start, len); -	} - -	return NULL; -} -EXPORT_SYMBOL(pci_iomap); -  void pci_iounmap(struct pci_dev *dev, void __iomem *addr)  {  	iounmap(addr); @@ -424,9 +313,5 @@ EXPORT_SYMBOL(pci_iounmap);  #endif /* CONFIG_GENERIC_IOMAP */ -#ifdef CONFIG_HOTPLUG -EXPORT_SYMBOL(pcibios_resource_to_bus); -EXPORT_SYMBOL(pcibios_bus_to_resource);  EXPORT_SYMBOL(PCIBIOS_MIN_IO);  EXPORT_SYMBOL(PCIBIOS_MIN_MEM); -#endif diff --git a/arch/sh/drivers/pci/pcie-sh7786.c b/arch/sh/drivers/pci/pcie-sh7786.c index 96e9b058aa1..a162a7f86b2 100644 --- a/arch/sh/drivers/pci/pcie-sh7786.c +++ b/arch/sh/drivers/pci/pcie-sh7786.c @@ -1,20 +1,24 @@  /*   * Low-Level PCI Express Support for the SH7786   * - *  Copyright (C) 2009 - 2010  Paul Mundt + *  Copyright (C) 2009 - 2011  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   */ +#define pr_fmt(fmt) "PCI: " fmt +  #include <linux/pci.h>  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> +#include <linux/async.h>  #include <linux/delay.h>  #include <linux/slab.h>  #include <linux/clk.h>  #include <linux/sh_clk.h> +#include <linux/sh_intc.h>  #include "pcie-sh7786.h"  #include <asm/sizes.h> @@ -31,7 +35,7 @@ static unsigned int nr_ports;  static struct sh7786_pcie_hwops {  	int (*core_init)(void); -	int (*port_init_hw)(struct sh7786_pcie_port *port); +	async_func_t port_init_hw;  } *sh7786_pcie_hwops;  static struct resource sh7786_pci0_resources[] = { @@ -128,7 +132,7 @@ static struct clk fixed_pciexclkp = {  	.rate = 100000000,	/* 100 MHz reference clock */  }; -static void __devinit sh7786_pci_fixup(struct pci_dev *dev) +static void sh7786_pci_fixup(struct pci_dev *dev)  {  	/*  	 * Prevent enumeration of root complex resources. @@ -235,7 +239,7 @@ static int __init pcie_clk_init(struct sh7786_pcie_port *port)  	clk->enable_reg = (void __iomem *)(chan->reg_base + SH4A_PCIEPHYCTLR);  	clk->enable_bit = BITS_CKE; -	ret = sh_clk_mstp32_register(clk, 1); +	ret = sh_clk_mstp_register(clk, 1);  	if (unlikely(ret < 0))  		goto err_phy; @@ -463,9 +467,9 @@ static int __init pcie_init(struct sh7786_pcie_port *port)  	return 0;  } -int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) +int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)  { -        return 71; +        return evt2irq(0xae0);  }  static int __init sh7786_pcie_core_init(void) @@ -474,8 +478,9 @@ static int __init sh7786_pcie_core_init(void)  	return test_mode_pin(MODE_PIN12) ? 3 : 2;  } -static int __init sh7786_pcie_init_hw(struct sh7786_pcie_port *port) +static void __init sh7786_pcie_init_hw(void *data, async_cookie_t cookie)  { +	struct sh7786_pcie_port *port = data;  	int ret;  	/* @@ -488,18 +493,30 @@ static int __init sh7786_pcie_init_hw(struct sh7786_pcie_port *port)  	 * Setup clocks, needed both for PHY and PCIe registers.  	 */  	ret = pcie_clk_init(port); -	if (unlikely(ret < 0)) -		return ret; +	if (unlikely(ret < 0)) { +		pr_err("clock initialization failed for port#%d\n", +		       port->index); +		return; +	}  	ret = phy_init(port); -	if (unlikely(ret < 0)) -		return ret; +	if (unlikely(ret < 0)) { +		pr_err("phy initialization failed for port#%d\n", +		       port->index); +		return; +	}  	ret = pcie_init(port); -	if (unlikely(ret < 0)) -		return ret; +	if (unlikely(ret < 0)) { +		pr_err("core initialization failed for port#%d\n", +			       port->index); +		return; +	} -	return register_pci_controller(port->hose); +	/* In the interest of preserving device ordering, synchronize */ +	async_synchronize_cookie(cookie); + +	register_pci_controller(port->hose);  }  static struct sh7786_pcie_hwops sh7786_65nm_pcie_hwops __initdata = { @@ -510,7 +527,7 @@ static struct sh7786_pcie_hwops sh7786_65nm_pcie_hwops __initdata = {  static int __init sh7786_pcie_init(void)  {  	struct clk *platclk; -	int ret = 0, i; +	int i;  	printk(KERN_NOTICE "PCI: Starting initialization.\n"); @@ -552,14 +569,10 @@ static int __init sh7786_pcie_init(void)  		port->hose		= sh7786_pci_channels + i;  		port->hose->io_map_base	= port->hose->resources[0].start; -		ret |= sh7786_pcie_hwops->port_init_hw(port); +		async_schedule(sh7786_pcie_hwops->port_init_hw, port);  	} -	if (unlikely(ret)) { -		clk_disable(platclk); -		clk_put(platclk); -		return ret; -	} +	async_synchronize_full();  	return 0;  } diff --git a/arch/sh/drivers/pci/pcie-sh7786.h b/arch/sh/drivers/pci/pcie-sh7786.h index 1ee054e47ea..4a6ff55f759 100644 --- a/arch/sh/drivers/pci/pcie-sh7786.h +++ b/arch/sh/drivers/pci/pcie-sh7786.h @@ -145,9 +145,6 @@  /*	PCIERMSGIER	*/  #define	SH4A_PCIERMSGIER	(0x004040)	/* R/W - 0x0000 0000 32 */ -/*	PCIEPHYCTLR	*/ -#define SH4A_PCIEPHYCTLR	(0x010000)	/* R/W - 0x0000 0000 32 */ -  /*	PCIEPHYADRR	*/  #define	SH4A_PCIEPHYADRR	(0x010004)	/* R/W - 0x0000 0000 32 */  #define		BITS_ACK	(24)			// Rev1.171 diff --git a/arch/sh/drivers/push-switch.c b/arch/sh/drivers/push-switch.c index 7b42c247316..5bfb341cc5c 100644 --- a/arch/sh/drivers/push-switch.c +++ b/arch/sh/drivers/push-switch.c @@ -63,7 +63,7 @@ static int switch_drv_probe(struct platform_device *pdev)  	BUG_ON(!psw_info);  	ret = request_irq(irq, psw_info->irq_handler, -			  IRQF_DISABLED | psw_info->irq_flags, +			  psw_info->irq_flags,  			  psw_info->name ? psw_info->name : DRV_NAME, pdev);  	if (unlikely(ret < 0))  		goto err; @@ -107,7 +107,7 @@ static int switch_drv_remove(struct platform_device *pdev)  		device_remove_file(&pdev->dev, &dev_attr_switch);  	platform_set_drvdata(pdev, NULL); -	flush_scheduled_work(); +	flush_work(&psw->work);  	del_timer_sync(&psw->debounce);  	free_irq(irq, pdev); diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 7beb42322f6..c19e47dacb3 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -1,11 +1,39 @@ -include include/asm-generic/Kbuild.asm -header-y += cachectl.h -header-y += cpu-features.h -header-y += hw_breakpoint.h -header-y += posix_types_32.h -header-y += posix_types_64.h -header-y += ptrace_32.h -header-y += ptrace_64.h -header-y += unistd_32.h -header-y += unistd_64.h +generic-y += bitsperlong.h +generic-y += cputime.h +generic-y += current.h +generic-y += delay.h +generic-y += div64.h +generic-y += emergency-restart.h +generic-y += errno.h +generic-y += exec.h +generic-y += fcntl.h +generic-y += hash.h +generic-y += ioctl.h +generic-y += ipcbuf.h +generic-y += irq_regs.h +generic-y += kvm_para.h +generic-y += local.h +generic-y += local64.h +generic-y += mcs_spinlock.h +generic-y += mman.h +generic-y += msgbuf.h +generic-y += param.h +generic-y += parport.h +generic-y += percpu.h +generic-y += poll.h +generic-y += preempt.h +generic-y += resource.h +generic-y += scatterlist.h +generic-y += sembuf.h +generic-y += serial.h +generic-y += shmbuf.h +generic-y += siginfo.h +generic-y += sizes.h +generic-y += socket.h +generic-y += statfs.h +generic-y += termbits.h +generic-y += termios.h +generic-y += trace_clock.h +generic-y += ucontext.h +generic-y += xor.h diff --git a/arch/sh/include/asm/atomic-irq.h b/arch/sh/include/asm/atomic-irq.h index 467d9415a32..9f7c56609e5 100644 --- a/arch/sh/include/asm/atomic-irq.h +++ b/arch/sh/include/asm/atomic-irq.h @@ -1,6 +1,8 @@  #ifndef __ASM_SH_ATOMIC_IRQ_H  #define __ASM_SH_ATOMIC_IRQ_H +#include <linux/irqflags.h> +  /*   * To get proper branch prediction for the main line, we must branch   * forward to code at the end of this object's .text section, then diff --git a/arch/sh/include/asm/atomic.h b/arch/sh/include/asm/atomic.h index c7983124d99..f57b8a6743b 100644 --- a/arch/sh/include/asm/atomic.h +++ b/arch/sh/include/asm/atomic.h @@ -9,9 +9,10 @@  #include <linux/compiler.h>  #include <linux/types.h> -#include <asm/system.h> +#include <asm/cmpxchg.h> +#include <asm/barrier.h> -#define ATOMIC_INIT(i)	( (atomic_t) { (i) } ) +#define ATOMIC_INIT(i)	{ (i) }  #define atomic_read(v)		(*(volatile int *)&(v)->counter)  #define atomic_set(v,i)		((v)->counter = (i)) @@ -30,7 +31,6 @@  #define atomic_inc_and_test(v)		(atomic_inc_return(v) == 0)  #define atomic_sub_and_test(i,v)	(atomic_sub_return((i), (v)) == 0)  #define atomic_dec_and_test(v)		(atomic_sub_return(1, (v)) == 0) -#define atomic_inc_not_zero(v)		atomic_add_unless((v), 1, 0)  #define atomic_inc(v)			atomic_add(1, (v))  #define atomic_dec(v)			atomic_sub(1, (v)) @@ -39,15 +39,15 @@  #define atomic_cmpxchg(v, o, n)		(cmpxchg(&((v)->counter), (o), (n)))  /** - * atomic_add_unless - add unless the number is a given value + * __atomic_add_unless - add unless the number is a given value   * @v: pointer of type atomic_t   * @a: the amount to add to v...   * @u: ...unless v is equal to u.   *   * Atomically adds @a to @v, so long as it was not @u. - * Returns non-zero if @v was not @u, and zero otherwise. + * Returns the old value of @v.   */ -static inline int atomic_add_unless(atomic_t *v, int a, int u) +static inline int __atomic_add_unless(atomic_t *v, int a, int u)  {  	int c, old;  	c = atomic_read(v); @@ -60,15 +60,7 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)  		c = old;  	} -	return c != (u); +	return c;  } -#define smp_mb__before_atomic_dec()	smp_mb() -#define smp_mb__after_atomic_dec()	smp_mb() -#define smp_mb__before_atomic_inc()	smp_mb() -#define smp_mb__after_atomic_inc()	smp_mb() - -#include <asm-generic/atomic-long.h> -#include <asm-generic/atomic64.h> -  #endif /* __ASM_SH_ATOMIC_H */ diff --git a/arch/sh/include/asm/barrier.h b/arch/sh/include/asm/barrier.h new file mode 100644 index 00000000000..43715308b06 --- /dev/null +++ b/arch/sh/include/asm/barrier.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 1999, 2000  Niibe Yutaka  &  Kaz Kojima + * Copyright (C) 2002 Paul Mundt + */ +#ifndef __ASM_SH_BARRIER_H +#define __ASM_SH_BARRIER_H + +#if defined(CONFIG_CPU_SH4A) || defined(CONFIG_CPU_SH5) +#include <asm/cache_insns.h> +#endif + +/* + * A brief note on ctrl_barrier(), the control register write barrier. + * + * Legacy SH cores typically require a sequence of 8 nops after + * modification of a control register in order for the changes to take + * effect. On newer cores (like the sh4a and sh5) this is accomplished + * with icbi. + * + * Also note that on sh4a in the icbi case we can forego a synco for the + * write barrier, as it's not necessary for control registers. + * + * Historically we have only done this type of barrier for the MMUCR, but + * it's also necessary for the CCR, so we make it generic here instead. + */ +#if defined(CONFIG_CPU_SH4A) || defined(CONFIG_CPU_SH5) +#define mb()		__asm__ __volatile__ ("synco": : :"memory") +#define rmb()		mb() +#define wmb()		mb() +#define ctrl_barrier()	__icbi(PAGE_OFFSET) +#else +#define ctrl_barrier()	__asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop") +#endif + +#define set_mb(var, value) do { (void)xchg(&var, value); } while (0) + +#include <asm-generic/barrier.h> + +#endif /* __ASM_SH_BARRIER_H */ diff --git a/arch/sh/include/asm/bitops.h b/arch/sh/include/asm/bitops.h index 98511e4d28c..fc8e652cf17 100644 --- a/arch/sh/include/asm/bitops.h +++ b/arch/sh/include/asm/bitops.h @@ -7,9 +7,9 @@  #error only <linux/bitops.h> can be included directly  #endif -#include <asm/system.h>  /* For __swab32 */  #include <asm/byteorder.h> +#include <asm/barrier.h>  #ifdef CONFIG_GUSA_RB  #include <asm/bitops-grb.h> @@ -23,12 +23,6 @@  #include <asm-generic/bitops/non-atomic.h>  #endif -/* - * clear_bit() doesn't provide any barrier for the compiler. - */ -#define smp_mb__before_clear_bit()	smp_mb() -#define smp_mb__after_clear_bit()	smp_mb() -  #ifdef CONFIG_SUPERH32  static inline unsigned long ffz(unsigned long word)  { @@ -94,9 +88,8 @@ static inline unsigned long ffz(unsigned long word)  #include <asm-generic/bitops/hweight.h>  #include <asm-generic/bitops/lock.h>  #include <asm-generic/bitops/sched.h> -#include <asm-generic/bitops/ext2-non-atomic.h> +#include <asm-generic/bitops/le.h>  #include <asm-generic/bitops/ext2-atomic.h> -#include <asm-generic/bitops/minix.h>  #include <asm-generic/bitops/fls.h>  #include <asm-generic/bitops/__fls.h>  #include <asm-generic/bitops/fls64.h> diff --git a/arch/sh/include/asm/bitsperlong.h b/arch/sh/include/asm/bitsperlong.h deleted file mode 100644 index 6dc0bb0c13b..00000000000 --- a/arch/sh/include/asm/bitsperlong.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/bitsperlong.h> diff --git a/arch/sh/include/asm/bl_bit.h b/arch/sh/include/asm/bl_bit.h new file mode 100644 index 00000000000..06e4163c674 --- /dev/null +++ b/arch/sh/include/asm/bl_bit.h @@ -0,0 +1,10 @@ +#ifndef __ASM_SH_BL_BIT_H +#define __ASM_SH_BL_BIT_H + +#ifdef CONFIG_SUPERH32 +# include <asm/bl_bit_32.h> +#else +# include <asm/bl_bit_64.h> +#endif + +#endif /* __ASM_SH_BL_BIT_H */ diff --git a/arch/sh/include/asm/bl_bit_32.h b/arch/sh/include/asm/bl_bit_32.h new file mode 100644 index 00000000000..fd21eee6214 --- /dev/null +++ b/arch/sh/include/asm/bl_bit_32.h @@ -0,0 +1,33 @@ +#ifndef __ASM_SH_BL_BIT_32_H +#define __ASM_SH_BL_BIT_32_H + +static inline void set_bl_bit(void) +{ +	unsigned long __dummy0, __dummy1; + +	__asm__ __volatile__ ( +		"stc	sr, %0\n\t" +		"or	%2, %0\n\t" +		"and	%3, %0\n\t" +		"ldc	%0, sr\n\t" +		: "=&r" (__dummy0), "=r" (__dummy1) +		: "r" (0x10000000), "r" (0xffffff0f) +		: "memory" +	); +} + +static inline void clear_bl_bit(void) +{ +	unsigned long __dummy0, __dummy1; + +	__asm__ __volatile__ ( +		"stc	sr, %0\n\t" +		"and	%2, %0\n\t" +		"ldc	%0, sr\n\t" +		: "=&r" (__dummy0), "=r" (__dummy1) +		: "1" (~0x10000000) +		: "memory" +	); +} + +#endif /* __ASM_SH_BL_BIT_32_H */ diff --git a/arch/sh/include/asm/bl_bit_64.h b/arch/sh/include/asm/bl_bit_64.h new file mode 100644 index 00000000000..6cc8711af43 --- /dev/null +++ b/arch/sh/include/asm/bl_bit_64.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2000, 2001  Paolo Alberelli + * Copyright (C) 2003  Paul Mundt + * Copyright (C) 2004  Richard Curnow + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#ifndef __ASM_SH_BL_BIT_64_H +#define __ASM_SH_BL_BIT_64_H + +#include <asm/processor.h> + +#define SR_BL_LL	0x0000000010000000LL + +static inline void set_bl_bit(void) +{ +	unsigned long long __dummy0, __dummy1 = SR_BL_LL; + +	__asm__ __volatile__("getcon	" __SR ", %0\n\t" +			     "or	%0, %1, %0\n\t" +			     "putcon	%0, " __SR "\n\t" +			     : "=&r" (__dummy0) +			     : "r" (__dummy1)); + +} + +static inline void clear_bl_bit(void) +{ +	unsigned long long __dummy0, __dummy1 = ~SR_BL_LL; + +	__asm__ __volatile__("getcon	" __SR ", %0\n\t" +			     "and	%0, %1, %0\n\t" +			     "putcon	%0, " __SR "\n\t" +			     : "=&r" (__dummy0) +			     : "r" (__dummy1)); +} + +#endif /* __ASM_SH_BL_BIT_64_H */ diff --git a/arch/sh/include/asm/bug.h b/arch/sh/include/asm/bug.h index 6323f864d11..dcf27807542 100644 --- a/arch/sh/include/asm/bug.h +++ b/arch/sh/include/asm/bug.h @@ -1,6 +1,8 @@  #ifndef __ASM_SH_BUG_H  #define __ASM_SH_BUG_H +#include <linux/linkage.h> +  #define TRAPA_BUG_OPCODE	0xc33e	/* trapa #0x3e */  #define BUGFLAG_UNWINDER	(1 << 1) @@ -107,4 +109,11 @@ do {							\  #include <asm-generic/bug.h> +struct pt_regs; + +/* arch/sh/kernel/traps.c */ +extern void die(const char *str, struct pt_regs *regs, long err) __attribute__ ((noreturn)); +extern void die_if_kernel(const char *str, struct pt_regs *regs, long err); +extern void die_if_no_fixup(const char *str, struct pt_regs *regs, long err); +  #endif /* __ASM_SH_BUG_H */ diff --git a/arch/sh/include/asm/cache_insns.h b/arch/sh/include/asm/cache_insns.h new file mode 100644 index 00000000000..355cb06b7a3 --- /dev/null +++ b/arch/sh/include/asm/cache_insns.h @@ -0,0 +1,11 @@ +#ifndef __ASM_SH_CACHE_INSNS_H +#define __ASM_SH_CACHE_INSNS_H + + +#ifdef CONFIG_SUPERH32 +# include <asm/cache_insns_32.h> +#else +# include <asm/cache_insns_64.h> +#endif + +#endif /* __ASM_SH_CACHE_INSNS_H */ diff --git a/arch/sh/include/asm/cache_insns_32.h b/arch/sh/include/asm/cache_insns_32.h new file mode 100644 index 00000000000..b92fe541609 --- /dev/null +++ b/arch/sh/include/asm/cache_insns_32.h @@ -0,0 +1,21 @@ +#ifndef __ASM_SH_CACHE_INSNS_32_H +#define __ASM_SH_CACHE_INSNS_32_H + +#include <linux/types.h> + +#if defined(CONFIG_CPU_SH4A) +#define __icbi(addr)	__asm__ __volatile__ ( "icbi @%0\n\t" : : "r" (addr)) +#else +#define __icbi(addr)	mb() +#endif + +#define __ocbp(addr)	__asm__ __volatile__ ( "ocbp @%0\n\t" : : "r" (addr)) +#define __ocbi(addr)	__asm__ __volatile__ ( "ocbi @%0\n\t" : : "r" (addr)) +#define __ocbwb(addr)	__asm__ __volatile__ ( "ocbwb @%0\n\t" : : "r" (addr)) + +static inline reg_size_t register_align(void *val) +{ +	return (unsigned long)(signed long)val; +} + +#endif /* __ASM_SH_CACHE_INSNS_32_H */ diff --git a/arch/sh/include/asm/cache_insns_64.h b/arch/sh/include/asm/cache_insns_64.h new file mode 100644 index 00000000000..70b6357eaf1 --- /dev/null +++ b/arch/sh/include/asm/cache_insns_64.h @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2000, 2001  Paolo Alberelli + * Copyright (C) 2003  Paul Mundt + * Copyright (C) 2004  Richard Curnow + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#ifndef __ASM_SH_CACHE_INSNS_64_H +#define __ASM_SH_CACHE_INSNS_64_H + +#define __icbi(addr)	__asm__ __volatile__ ( "icbi %0, 0\n\t" : : "r" (addr)) +#define __ocbp(addr)	__asm__ __volatile__ ( "ocbp %0, 0\n\t" : : "r" (addr)) +#define __ocbi(addr)	__asm__ __volatile__ ( "ocbi %0, 0\n\t" : : "r" (addr)) +#define __ocbwb(addr)	__asm__ __volatile__ ( "ocbwb %0, 0\n\t" : : "r" (addr)) + +static inline reg_size_t register_align(void *val) +{ +	return (unsigned long long)(signed long long)(signed long)val; +} + +#endif /* __ASM_SH_CACHE_INSNS_64_H */ diff --git a/arch/sh/include/asm/cacheflush.h b/arch/sh/include/asm/cacheflush.h index 1f4e562c5e8..82e1eabeac9 100644 --- a/arch/sh/include/asm/cacheflush.h +++ b/arch/sh/include/asm/cacheflush.h @@ -96,7 +96,7 @@ void kmap_coherent_init(void);  void *kmap_coherent(struct page *page, unsigned long addr);  void kunmap_coherent(void *kvaddr); -#define PG_dcache_dirty	PG_arch_1 +#define PG_dcache_clean	PG_arch_1  void cpu_cache_init(void); diff --git a/arch/sh/include/asm/checksum.h b/arch/sh/include/asm/checksum.h index fc26d1f4b59..34ae2620452 100644 --- a/arch/sh/include/asm/checksum.h +++ b/arch/sh/include/asm/checksum.h @@ -1,5 +1,5 @@  #ifdef CONFIG_SUPERH32 -# include "checksum_32.h" +# include <asm/checksum_32.h>  #else  # include <asm-generic/checksum.h>  #endif diff --git a/arch/sh/include/asm/clkdev.h b/arch/sh/include/asm/clkdev.h index 5645f358128..c41901465fb 100644 --- a/arch/sh/include/asm/clkdev.h +++ b/arch/sh/include/asm/clkdev.h @@ -1,9 +1,5 @@  /* - *  arch/sh/include/asm/clkdev.h - * - * Cloned from arch/arm/include/asm/clkdev.h: - * - *  Copyright (C) 2008 Russell King. + *  Copyright (C) 2010 Paul Mundt <lethal@linux-sh.org>   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License version 2 as @@ -11,25 +7,27 @@   *   * Helper for the clk API to assist looking up a struct clk.   */ -#ifndef __ASM_CLKDEV_H -#define __ASM_CLKDEV_H -struct clk; +#ifndef __CLKDEV__H_ +#define __CLKDEV__H_ -struct clk_lookup { -	struct list_head	node; -	const char		*dev_id; -	const char		*con_id; -	struct clk		*clk; -}; +#include <linux/bootmem.h> +#include <linux/mm.h> +#include <linux/slab.h> -struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id, -	const char *dev_fmt, ...); +#include <asm/clock.h> -void clkdev_add(struct clk_lookup *cl); -void clkdev_drop(struct clk_lookup *cl); - -void clkdev_add_table(struct clk_lookup *, size_t); -int clk_add_alias(const char *, const char *, char *, struct device *); +static inline struct clk_lookup_alloc *__clkdev_alloc(size_t size) +{ +	if (!slab_is_available()) +		return alloc_bootmem_low_pages(size); +	else +		return kzalloc(size, GFP_KERNEL); +} +#ifndef CONFIG_COMMON_CLK +#define __clk_put(clk) +#define __clk_get(clk) ({ 1; })  #endif + +#endif /* __CLKDEV_H__ */ diff --git a/arch/sh/include/asm/clock.h b/arch/sh/include/asm/clock.h index 803d4c7f09d..0390a07e7e3 100644 --- a/arch/sh/include/asm/clock.h +++ b/arch/sh/include/asm/clock.h @@ -4,7 +4,7 @@  #include <linux/sh_clk.h>  /* Should be defined by processor-specific code */ -void __deprecated arch_init_clk_ops(struct clk_ops **, int type); +void __deprecated arch_init_clk_ops(struct sh_clk_ops **, int type);  int __init arch_clk_init(void);  /* arch/sh/kernel/cpu/clock-cpg.c */ diff --git a/arch/sh/include/asm/cmpxchg-grb.h b/arch/sh/include/asm/cmpxchg-grb.h index 4676bf57693..f848dec9e48 100644 --- a/arch/sh/include/asm/cmpxchg-grb.h +++ b/arch/sh/include/asm/cmpxchg-grb.h @@ -15,8 +15,9 @@ static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)  		"   mov.l   %2,   @%1     \n\t" /* store new value */  		"1: mov     r1,   r15     \n\t" /* LOGOUT */  		: "=&r" (retval), -		  "+r"  (m) -		: "r"   (val) +		  "+r"  (m), +		  "+r"  (val)		/* inhibit r15 overloading */ +		:  		: "memory", "r0", "r1");  	return retval; @@ -36,8 +37,9 @@ static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)  		"   mov.b   %2,   @%1     \n\t" /* store new value */  		"1: mov     r1,   r15     \n\t" /* LOGOUT */  		: "=&r" (retval), -		  "+r"  (m) -		: "r"   (val) +		  "+r"  (m), +		  "+r"  (val)		/* inhibit r15 overloading */ +		:  		: "memory" , "r0", "r1");  	return retval; @@ -54,13 +56,14 @@ static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,  		"   nop                   \n\t"  		"   mov    r15,   r1      \n\t" /* r1 = saved sp */  		"   mov    #-8,   r15     \n\t" /* LOGIN */ -		"   mov.l  @%1,   %0      \n\t" /* load  old value */ -		"   cmp/eq  %0,   %2      \n\t" +		"   mov.l  @%3,   %0      \n\t" /* load  old value */ +		"   cmp/eq  %0,   %1      \n\t"  		"   bf            1f      \n\t" /* if not equal */ -		"   mov.l   %3,   @%1     \n\t" /* store new value */ +		"   mov.l   %2,   @%3     \n\t" /* store new value */  		"1: mov     r1,   r15     \n\t" /* LOGOUT */ -		: "=&r" (retval) -		:  "r"  (m), "r"  (old), "r"  (new) +		: "=&r" (retval), +		  "+r"  (old), "+r"  (new) /* old or new can be r15 */ +		:  "r"  (m)  		: "memory" , "r0", "r1", "t");  	return retval; diff --git a/arch/sh/include/asm/cmpxchg-irq.h b/arch/sh/include/asm/cmpxchg-irq.h index 43049ec0554..bd11f630414 100644 --- a/arch/sh/include/asm/cmpxchg-irq.h +++ b/arch/sh/include/asm/cmpxchg-irq.h @@ -1,6 +1,8 @@  #ifndef __ASM_SH_CMPXCHG_IRQ_H  #define __ASM_SH_CMPXCHG_IRQ_H +#include <linux/irqflags.h> +  static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)  {  	unsigned long flags, retval; diff --git a/arch/sh/include/asm/cmpxchg.h b/arch/sh/include/asm/cmpxchg.h new file mode 100644 index 00000000000..f6bd1406b89 --- /dev/null +++ b/arch/sh/include/asm/cmpxchg.h @@ -0,0 +1,70 @@ +#ifndef __ASM_SH_CMPXCHG_H +#define __ASM_SH_CMPXCHG_H + +/* + * Atomic operations that C can't guarantee us.  Useful for + * resource counting etc.. + */ + +#include <linux/compiler.h> +#include <linux/types.h> + +#if defined(CONFIG_GUSA_RB) +#include <asm/cmpxchg-grb.h> +#elif defined(CONFIG_CPU_SH4A) +#include <asm/cmpxchg-llsc.h> +#else +#include <asm/cmpxchg-irq.h> +#endif + +extern void __xchg_called_with_bad_pointer(void); + +#define __xchg(ptr, x, size)				\ +({							\ +	unsigned long __xchg__res;			\ +	volatile void *__xchg_ptr = (ptr);		\ +	switch (size) {					\ +	case 4:						\ +		__xchg__res = xchg_u32(__xchg_ptr, x);	\ +		break;					\ +	case 1:						\ +		__xchg__res = xchg_u8(__xchg_ptr, x);	\ +		break;					\ +	default:					\ +		__xchg_called_with_bad_pointer();	\ +		__xchg__res = x;			\ +		break;					\ +	}						\ +							\ +	__xchg__res;					\ +}) + +#define xchg(ptr,x)	\ +	((__typeof__(*(ptr)))__xchg((ptr),(unsigned long)(x), sizeof(*(ptr)))) + +/* This function doesn't exist, so you'll get a linker error + * if something tries to do an invalid cmpxchg(). */ +extern void __cmpxchg_called_with_bad_pointer(void); + +#define __HAVE_ARCH_CMPXCHG 1 + +static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old, +		unsigned long new, int size) +{ +	switch (size) { +	case 4: +		return __cmpxchg_u32(ptr, old, new); +	} +	__cmpxchg_called_with_bad_pointer(); +	return old; +} + +#define cmpxchg(ptr,o,n)						 \ +  ({									 \ +     __typeof__(*(ptr)) _o_ = (o);					 \ +     __typeof__(*(ptr)) _n_ = (n);					 \ +     (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_,		 \ +				    (unsigned long)_n_, sizeof(*(ptr))); \ +  }) + +#endif /* __ASM_SH_CMPXCHG_H */ diff --git a/arch/sh/include/asm/cputime.h b/arch/sh/include/asm/cputime.h deleted file mode 100644 index 6ca395d1393..00000000000 --- a/arch/sh/include/asm/cputime.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __SH_CPUTIME_H -#define __SH_CPUTIME_H - -#include <asm-generic/cputime.h> - -#endif /* __SH_CPUTIME_H */ diff --git a/arch/sh/include/asm/current.h b/arch/sh/include/asm/current.h deleted file mode 100644 index 4c51401b553..00000000000 --- a/arch/sh/include/asm/current.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/current.h> diff --git a/arch/sh/include/asm/delay.h b/arch/sh/include/asm/delay.h deleted file mode 100644 index 4b16bf9b56b..00000000000 --- a/arch/sh/include/asm/delay.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __ASM_SH_DELAY_H -#define __ASM_SH_DELAY_H - -/* - * Copyright (C) 1993 Linus Torvalds - * - * Delay routines calling functions in arch/sh/lib/delay.c - */ - -extern void __bad_udelay(void); -extern void __bad_ndelay(void); - -extern void __udelay(unsigned long usecs); -extern void __ndelay(unsigned long nsecs); -extern void __const_udelay(unsigned long xloops); -extern void __delay(unsigned long loops); - -#define udelay(n) (__builtin_constant_p(n) ? \ -	((n) > 20000 ? __bad_udelay() : __const_udelay((n) * 0x10c6ul)) : \ -	__udelay(n)) - -#define ndelay(n) (__builtin_constant_p(n) ? \ -	((n) > 20000 ? __bad_ndelay() : __const_udelay((n) * 5ul)) : \ -	__ndelay(n)) - -#endif /* __ASM_SH_DELAY_H */ diff --git a/arch/sh/include/asm/device.h b/arch/sh/include/asm/device.h index b16debfe8c1..071bcb4d4bf 100644 --- a/arch/sh/include/asm/device.h +++ b/arch/sh/include/asm/device.h @@ -3,9 +3,10 @@   *   * This file is released under the GPLv2   */ +#ifndef __ASM_SH_DEVICE_H +#define __ASM_SH_DEVICE_H -struct dev_archdata { -}; +#include <asm-generic/device.h>  struct platform_device;  /* allocate contiguous memory chunk and fill in struct resource */ @@ -14,15 +15,4 @@ int platform_resource_setup_memory(struct platform_device *pdev,  void plat_early_device_setup(void); -#define PDEV_ARCHDATA_FLAG_INIT 0 -#define PDEV_ARCHDATA_FLAG_IDLE 1 -#define PDEV_ARCHDATA_FLAG_SUSP 2 - -struct pdev_archdata { -	int hwblk_id; -#ifdef CONFIG_PM_RUNTIME -	unsigned long flags; -	struct list_head entry; -	struct mutex mutex; -#endif -}; +#endif /* __ASM_SH_DEVICE_H */ diff --git a/arch/sh/include/asm/div64.h b/arch/sh/include/asm/div64.h deleted file mode 100644 index 6cd978cefb2..00000000000 --- a/arch/sh/include/asm/div64.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/div64.h> diff --git a/arch/sh/include/asm/dma-mapping.h b/arch/sh/include/asm/dma-mapping.h index 1a73c3e759a..b437f2c780b 100644 --- a/arch/sh/include/asm/dma-mapping.h +++ b/arch/sh/include/asm/dma-mapping.h @@ -46,31 +46,38 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)  {  	struct dma_map_ops *ops = get_dma_ops(dev); +	debug_dma_mapping_error(dev, dma_addr);  	if (ops->mapping_error)  		return ops->mapping_error(dev, dma_addr);  	return dma_addr == 0;  } -static inline void *dma_alloc_coherent(struct device *dev, size_t size, -				       dma_addr_t *dma_handle, gfp_t gfp) +#define dma_alloc_coherent(d,s,h,f)	dma_alloc_attrs(d,s,h,f,NULL) + +static inline void *dma_alloc_attrs(struct device *dev, size_t size, +				    dma_addr_t *dma_handle, gfp_t gfp, +				    struct dma_attrs *attrs)  {  	struct dma_map_ops *ops = get_dma_ops(dev);  	void *memory;  	if (dma_alloc_from_coherent(dev, size, dma_handle, &memory))  		return memory; -	if (!ops->alloc_coherent) +	if (!ops->alloc)  		return NULL; -	memory = ops->alloc_coherent(dev, size, dma_handle, gfp); +	memory = ops->alloc(dev, size, dma_handle, gfp, attrs);  	debug_dma_alloc_coherent(dev, size, *dma_handle, memory);  	return memory;  } -static inline void dma_free_coherent(struct device *dev, size_t size, -				     void *vaddr, dma_addr_t dma_handle) +#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL) + +static inline void dma_free_attrs(struct device *dev, size_t size, +				  void *vaddr, dma_addr_t dma_handle, +				  struct dma_attrs *attrs)  {  	struct dma_map_ops *ops = get_dma_ops(dev); @@ -78,14 +85,16 @@ static inline void dma_free_coherent(struct device *dev, size_t size,  		return;  	debug_dma_free_coherent(dev, size, vaddr, dma_handle); -	if (ops->free_coherent) -		ops->free_coherent(dev, size, vaddr, dma_handle); +	if (ops->free) +		ops->free(dev, size, vaddr, dma_handle, attrs);  }  /* arch/sh/mm/consistent.c */  extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, -					dma_addr_t *dma_addr, gfp_t flag); +					dma_addr_t *dma_addr, gfp_t flag, +					struct dma_attrs *attrs);  extern void dma_generic_free_coherent(struct device *dev, size_t size, -				      void *vaddr, dma_addr_t dma_handle); +				      void *vaddr, dma_addr_t dma_handle, +				      struct dma_attrs *attrs);  #endif /* __ASM_SH_DMA_MAPPING_H */ diff --git a/arch/sh/include/asm/dma-sh.h b/arch/sh/include/asm/dma-sh.h deleted file mode 100644 index f3acb8e34c6..00000000000 --- a/arch/sh/include/asm/dma-sh.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * arch/sh/include/asm/dma-sh.h - * - * Copyright (C) 2000  Takashi YOSHII - * Copyright (C) 2003  Paul Mundt - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#ifndef __DMA_SH_H -#define __DMA_SH_H - -#include <asm/dma-register.h> -#include <cpu/dma-register.h> -#include <cpu/dma.h> - -/* DMAOR contorl: The DMAOR access size is different by CPU.*/ -#if defined(CONFIG_CPU_SUBTYPE_SH7723)	|| \ -    defined(CONFIG_CPU_SUBTYPE_SH7724)	|| \ -    defined(CONFIG_CPU_SUBTYPE_SH7780)	|| \ -    defined(CONFIG_CPU_SUBTYPE_SH7785) -#define dmaor_read_reg(n) \ -    (n ? __raw_readw(SH_DMAC_BASE1 + DMAOR) \ -	: __raw_readw(SH_DMAC_BASE0 + DMAOR)) -#define dmaor_write_reg(n, data) \ -    (n ? __raw_writew(data, SH_DMAC_BASE1 + DMAOR) \ -    : __raw_writew(data, SH_DMAC_BASE0 + DMAOR)) -#else /* Other CPU */ -#define dmaor_read_reg(n) __raw_readw(SH_DMAC_BASE0 + DMAOR) -#define dmaor_write_reg(n, data) __raw_writew(data, SH_DMAC_BASE0 + DMAOR) -#endif - -static int dmte_irq_map[] __maybe_unused = { -#if (MAX_DMA_CHANNELS >= 4) -    DMTE0_IRQ, -    DMTE0_IRQ + 1, -    DMTE0_IRQ + 2, -    DMTE0_IRQ + 3, -#endif -#if (MAX_DMA_CHANNELS >= 6) -    DMTE4_IRQ, -    DMTE4_IRQ + 1, -#endif -#if (MAX_DMA_CHANNELS >= 8) -    DMTE6_IRQ, -    DMTE6_IRQ + 1, -#endif -#if (MAX_DMA_CHANNELS >= 12) -    DMTE8_IRQ, -    DMTE9_IRQ, -    DMTE10_IRQ, -    DMTE11_IRQ, -#endif -}; - -/* - * Define the default configuration for dual address memory-memory transfer. - * The 0x400 value represents auto-request, external->external. - */ -#define RS_DUAL	(DM_INC | SM_INC | 0x400 | TS_INDEX2VAL(XMIT_SZ_32BIT)) - -/* DMA base address */ -static u32 dma_base_addr[] __maybe_unused = { -#if (MAX_DMA_CHANNELS >= 4) -	SH_DMAC_BASE0 + 0x00,	/* channel 0 */ -	SH_DMAC_BASE0 + 0x10, -	SH_DMAC_BASE0 + 0x20, -	SH_DMAC_BASE0 + 0x30, -#endif -#if (MAX_DMA_CHANNELS >= 6) -	SH_DMAC_BASE0 + 0x50, -	SH_DMAC_BASE0 + 0x60, -#endif -#if (MAX_DMA_CHANNELS >= 8) -	SH_DMAC_BASE1 + 0x00, -	SH_DMAC_BASE1 + 0x10, -#endif -#if (MAX_DMA_CHANNELS >= 12) -	SH_DMAC_BASE1 + 0x20, -	SH_DMAC_BASE1 + 0x30, -	SH_DMAC_BASE1 + 0x50, -	SH_DMAC_BASE1 + 0x60, /* channel 11 */ -#endif -}; - -#endif /* __DMA_SH_H */ diff --git a/arch/sh/include/asm/dma.h b/arch/sh/include/asm/dma.h index 07373a07409..fb6e4f7b00a 100644 --- a/arch/sh/include/asm/dma.h +++ b/arch/sh/include/asm/dma.h @@ -14,18 +14,9 @@  #include <linux/spinlock.h>  #include <linux/wait.h>  #include <linux/sched.h> -#include <linux/sysdev.h> -#include <cpu/dma.h> +#include <linux/device.h>  #include <asm-generic/dma.h> -#ifdef CONFIG_NR_DMA_CHANNELS -#  define MAX_DMA_CHANNELS	(CONFIG_NR_DMA_CHANNELS) -#elif defined(CONFIG_NR_ONCHIP_DMA_CHANNELS) -#  define MAX_DMA_CHANNELS	(CONFIG_NR_ONCHIP_DMA_CHANNELS) -#else -#  define MAX_DMA_CHANNELS	0 -#endif -  /*   * Read and write modes can mean drastically different things depending on the   * channel configuration. Consult your DMAC documentation and module @@ -91,7 +82,7 @@ struct dma_channel {  	wait_queue_head_t wait_queue; -	struct sys_device dev; +	struct device dev;  	void *priv_data;  }; diff --git a/arch/sh/include/asm/elf.h b/arch/sh/include/asm/elf.h index f38112be67d..bf9f44f17c2 100644 --- a/arch/sh/include/asm/elf.h +++ b/arch/sh/include/asm/elf.h @@ -183,7 +183,8 @@ do {									\  } while (0)  #endif -#define SET_PERSONALITY(ex) set_personality(PER_LINUX_32BIT) +#define SET_PERSONALITY(ex) \ +	set_personality(PER_LINUX_32BIT | (current->personality & (~PER_MASK)))  #ifdef CONFIG_VSYSCALL  /* vDSO has arch_setup_additional_pages */ @@ -202,9 +203,9 @@ extern void __kernel_vsyscall;  	if (vdso_enabled)					\  		NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE);	\  	else							\ -		NEW_AUX_ENT(AT_IGNORE, 0); +		NEW_AUX_ENT(AT_IGNORE, 0)  #else -#define VSYSCALL_AUX_ENT +#define VSYSCALL_AUX_ENT	NEW_AUX_ENT(AT_IGNORE, 0)  #endif /* CONFIG_VSYSCALL */  #ifdef CONFIG_SH_FPU diff --git a/arch/sh/include/asm/emergency-restart.h b/arch/sh/include/asm/emergency-restart.h deleted file mode 100644 index 108d8c48e42..00000000000 --- a/arch/sh/include/asm/emergency-restart.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_EMERGENCY_RESTART_H -#define _ASM_EMERGENCY_RESTART_H - -#include <asm-generic/emergency-restart.h> - -#endif /* _ASM_EMERGENCY_RESTART_H */ diff --git a/arch/sh/include/asm/errno.h b/arch/sh/include/asm/errno.h deleted file mode 100644 index 51cf6f9cebb..00000000000 --- a/arch/sh/include/asm/errno.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_SH_ERRNO_H -#define __ASM_SH_ERRNO_H - -#include <asm-generic/errno.h> - -#endif /* __ASM_SH_ERRNO_H */ diff --git a/arch/sh/include/asm/fcntl.h b/arch/sh/include/asm/fcntl.h deleted file mode 100644 index 46ab12db573..00000000000 --- a/arch/sh/include/asm/fcntl.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/fcntl.h> diff --git a/arch/sh/include/asm/fixmap.h b/arch/sh/include/asm/fixmap.h index bd7e79a1265..4daf91c3b72 100644 --- a/arch/sh/include/asm/fixmap.h +++ b/arch/sh/include/asm/fixmap.h @@ -79,13 +79,6 @@ extern void __set_fixmap(enum fixed_addresses idx,  			 unsigned long phys, pgprot_t flags);  extern void __clear_fixmap(enum fixed_addresses idx, pgprot_t flags); -#define set_fixmap(idx, phys) \ -		__set_fixmap(idx, phys, PAGE_KERNEL) -/* - * Some hardware wants to get fixmapped without caching. - */ -#define set_fixmap_nocache(idx, phys) \ -		__set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE)  /*   * used by vmalloc.c.   * @@ -96,41 +89,13 @@ extern void __clear_fixmap(enum fixed_addresses idx, pgprot_t flags);  #ifdef CONFIG_SUPERH32  #define FIXADDR_TOP	(P4SEG - PAGE_SIZE)  #else -#define FIXADDR_TOP	(0xff000000 - PAGE_SIZE) +#define FIXADDR_TOP	((unsigned long)(-PAGE_SIZE))  #endif  #define FIXADDR_SIZE	(__end_of_fixed_addresses << PAGE_SHIFT)  #define FIXADDR_START	(FIXADDR_TOP - FIXADDR_SIZE) -#define __fix_to_virt(x)	(FIXADDR_TOP - ((x) << PAGE_SHIFT)) -#define __virt_to_fix(x)	((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT) - -extern void __this_fixmap_does_not_exist(void); - -/* - * 'index to address' translation. If anyone tries to use the idx - * directly without tranlation, we catch the bug with a NULL-deference - * kernel oops. Illegal ranges of incoming indices are caught too. - */ -static inline unsigned long fix_to_virt(const unsigned int idx) -{ -	/* -	 * this branch gets completely eliminated after inlining, -	 * except when someone tries to use fixaddr indices in an -	 * illegal way. (such as mixing up address types or using -	 * out-of-range indices). -	 * -	 * If it doesn't get removed, the linker will complain -	 * loudly with a reasonably clear error message.. -	 */ -	if (idx >= __end_of_fixed_addresses) -		__this_fixmap_does_not_exist(); +#define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_NOCACHE -        return __fix_to_virt(idx); -} +#include <asm-generic/fixmap.h> -static inline unsigned long virt_to_fix(const unsigned long vaddr) -{ -	BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); -	return __virt_to_fix(vaddr); -}  #endif diff --git a/arch/sh/include/asm/fpu.h b/arch/sh/include/asm/fpu.h index 06c4281aab6..09fc2bc8a79 100644 --- a/arch/sh/include/asm/fpu.h +++ b/arch/sh/include/asm/fpu.h @@ -46,7 +46,7 @@ static inline void __unlazy_fpu(struct task_struct *tsk, struct pt_regs *regs)  		save_fpu(tsk);  		release_fpu(regs);  	} else -		tsk->fpu_counter = 0; +		tsk->thread.fpu_counter = 0;  }  static inline void unlazy_fpu(struct task_struct *tsk, struct pt_regs *regs) diff --git a/arch/sh/include/asm/ftrace.h b/arch/sh/include/asm/ftrace.h index 13e9966464c..e79fb6ebaa4 100644 --- a/arch/sh/include/asm/ftrace.h +++ b/arch/sh/include/asm/ftrace.h @@ -40,15 +40,7 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr)  /* arch/sh/kernel/return_address.c */  extern void *return_address(unsigned int); -#define HAVE_ARCH_CALLER_ADDR - -#define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) -#define CALLER_ADDR1 ((unsigned long)return_address(1)) -#define CALLER_ADDR2 ((unsigned long)return_address(2)) -#define CALLER_ADDR3 ((unsigned long)return_address(3)) -#define CALLER_ADDR4 ((unsigned long)return_address(4)) -#define CALLER_ADDR5 ((unsigned long)return_address(5)) -#define CALLER_ADDR6 ((unsigned long)return_address(6)) +#define ftrace_return_address(n) return_address(n)  #endif /* __ASSEMBLY__ */ diff --git a/arch/sh/include/asm/futex-irq.h b/arch/sh/include/asm/futex-irq.h index a9f16a7f9ae..63d33129ea2 100644 --- a/arch/sh/include/asm/futex-irq.h +++ b/arch/sh/include/asm/futex-irq.h @@ -1,9 +1,8 @@  #ifndef __ASM_SH_FUTEX_IRQ_H  #define __ASM_SH_FUTEX_IRQ_H -#include <asm/system.h> -static inline int atomic_futex_op_xchg_set(int oparg, int __user *uaddr, +static inline int atomic_futex_op_xchg_set(int oparg, u32 __user *uaddr,  					   int *oldval)  {  	unsigned long flags; @@ -20,7 +19,7 @@ static inline int atomic_futex_op_xchg_set(int oparg, int __user *uaddr,  	return ret;  } -static inline int atomic_futex_op_xchg_add(int oparg, int __user *uaddr, +static inline int atomic_futex_op_xchg_add(int oparg, u32 __user *uaddr,  					   int *oldval)  {  	unsigned long flags; @@ -37,7 +36,7 @@ static inline int atomic_futex_op_xchg_add(int oparg, int __user *uaddr,  	return ret;  } -static inline int atomic_futex_op_xchg_or(int oparg, int __user *uaddr, +static inline int atomic_futex_op_xchg_or(int oparg, u32 __user *uaddr,  					  int *oldval)  {  	unsigned long flags; @@ -54,7 +53,7 @@ static inline int atomic_futex_op_xchg_or(int oparg, int __user *uaddr,  	return ret;  } -static inline int atomic_futex_op_xchg_and(int oparg, int __user *uaddr, +static inline int atomic_futex_op_xchg_and(int oparg, u32 __user *uaddr,  					   int *oldval)  {  	unsigned long flags; @@ -71,7 +70,7 @@ static inline int atomic_futex_op_xchg_and(int oparg, int __user *uaddr,  	return ret;  } -static inline int atomic_futex_op_xchg_xor(int oparg, int __user *uaddr, +static inline int atomic_futex_op_xchg_xor(int oparg, u32 __user *uaddr,  					   int *oldval)  {  	unsigned long flags; @@ -88,11 +87,13 @@ static inline int atomic_futex_op_xchg_xor(int oparg, int __user *uaddr,  	return ret;  } -static inline int atomic_futex_op_cmpxchg_inatomic(int __user *uaddr, -						   int oldval, int newval) +static inline int atomic_futex_op_cmpxchg_inatomic(u32 *uval, +						   u32 __user *uaddr, +						   u32 oldval, u32 newval)  {  	unsigned long flags; -	int ret, prev = 0; +	int ret; +	u32 prev = 0;  	local_irq_save(flags); @@ -102,10 +103,8 @@ static inline int atomic_futex_op_cmpxchg_inatomic(int __user *uaddr,  	local_irq_restore(flags); -	if (ret) -		return ret; - -	return prev; +	*uval = prev; +	return ret;  }  #endif /* __ASM_SH_FUTEX_IRQ_H */ diff --git a/arch/sh/include/asm/futex.h b/arch/sh/include/asm/futex.h index 68256ec5fa3..7be39a646fb 100644 --- a/arch/sh/include/asm/futex.h +++ b/arch/sh/include/asm/futex.h @@ -10,7 +10,7 @@  /* XXX: UP variants, fix for SH-4A and SMP.. */  #include <asm/futex-irq.h> -static inline int futex_atomic_op_inuser(int encoded_op, int __user *uaddr) +static inline int futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr)  {  	int op = (encoded_op >> 28) & 7;  	int cmp = (encoded_op >> 24) & 15; @@ -21,7 +21,7 @@ static inline int futex_atomic_op_inuser(int encoded_op, int __user *uaddr)  	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))  		oparg = 1 << oparg; -	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) +	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))  		return -EFAULT;  	pagefault_disable(); @@ -65,12 +65,13 @@ static inline int futex_atomic_op_inuser(int encoded_op, int __user *uaddr)  }  static inline int -futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) +futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, +			      u32 oldval, u32 newval)  { -	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) +	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))  		return -EFAULT; -	return atomic_futex_op_cmpxchg_inatomic(uaddr, oldval, newval); +	return atomic_futex_op_cmpxchg_inatomic(uval, uaddr, oldval, newval);  }  #endif /* __KERNEL__ */ diff --git a/arch/sh/include/asm/gpio.h b/arch/sh/include/asm/gpio.h index 04f53d31489..7dfe15e2e99 100644 --- a/arch/sh/include/asm/gpio.h +++ b/arch/sh/include/asm/gpio.h @@ -20,7 +20,7 @@  #endif  #define ARCH_NR_GPIOS 512 -#include <linux/sh_pfc.h> +#include <asm-generic/gpio.h>  #ifdef CONFIG_GPIOLIB diff --git a/arch/sh/include/asm/hugetlb.h b/arch/sh/include/asm/hugetlb.h index 967068fb79a..699255d6d1c 100644 --- a/arch/sh/include/asm/hugetlb.h +++ b/arch/sh/include/asm/hugetlb.h @@ -1,7 +1,9 @@  #ifndef _ASM_SH_HUGETLB_H  #define _ASM_SH_HUGETLB_H +#include <asm/cacheflush.h>  #include <asm/page.h> +#include <asm-generic/hugetlb.h>  static inline int is_hugepage_only_range(struct mm_struct *mm, @@ -89,4 +91,9 @@ static inline void arch_release_hugepage(struct page *page)  {  } +static inline void arch_clear_hugepage_flags(struct page *page) +{ +	clear_bit(PG_dcache_clean, &page->flags); +} +  #endif /* _ASM_SH_HUGETLB_H */ diff --git a/arch/sh/include/asm/hw_breakpoint.h b/arch/sh/include/asm/hw_breakpoint.h index 89890f61a7b..ec9ad593c3d 100644 --- a/arch/sh/include/asm/hw_breakpoint.h +++ b/arch/sh/include/asm/hw_breakpoint.h @@ -1,7 +1,8 @@  #ifndef __ASM_SH_HW_BREAKPOINT_H  #define __ASM_SH_HW_BREAKPOINT_H -#ifdef __KERNEL__ +#include <uapi/asm/hw_breakpoint.h> +  #define __ARCH_HW_BREAKPOINT_H  #include <linux/kdebug.h> @@ -66,5 +67,4 @@ extern int register_sh_ubc(struct sh_ubc *);  extern struct pmu perf_ops_bp; -#endif /* __KERNEL__ */  #endif /* __ASM_SH_HW_BREAKPOINT_H */ diff --git a/arch/sh/include/asm/hw_irq.h b/arch/sh/include/asm/hw_irq.h index 603cdde813d..693d4418405 100644 --- a/arch/sh/include/asm/hw_irq.h +++ b/arch/sh/include/asm/hw_irq.h @@ -3,7 +3,7 @@  #include <linux/init.h>  #include <linux/sh_intc.h> -#include <asm/atomic.h> +#include <linux/atomic.h>  extern atomic_t irq_err_count; diff --git a/arch/sh/include/asm/hwblk.h b/arch/sh/include/asm/hwblk.h deleted file mode 100644 index 855e945c619..00000000000 --- a/arch/sh/include/asm/hwblk.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef __ASM_SH_HWBLK_H -#define __ASM_SH_HWBLK_H - -#include <asm/clock.h> -#include <asm/io.h> - -#define HWBLK_CNT_USAGE 0 -#define HWBLK_CNT_IDLE 1 -#define HWBLK_CNT_DEVICES 2 -#define HWBLK_CNT_NR 3 - -#define HWBLK_AREA_FLAG_PARENT (1 << 0) /* valid parent */ - -#define HWBLK_AREA(_flags, _parent)		\ -{						\ -	.flags = _flags,			\ -	.parent = _parent,			\ -} - -struct hwblk_area { -	int cnt[HWBLK_CNT_NR]; -	unsigned char parent; -	unsigned char flags; -}; - -#define HWBLK(_mstp, _bit, _area)		\ -{						\ -	.mstp = (void __iomem *)_mstp,		\ -	.bit = _bit,				\ -	.area = _area,				\ -} - -struct hwblk { -	void __iomem *mstp; -	unsigned char bit; -	unsigned char area; -	int cnt[HWBLK_CNT_NR]; -}; - -struct hwblk_info { -	struct hwblk_area *areas; -	int nr_areas; -	struct hwblk *hwblks; -	int nr_hwblks; -}; - -/* Should be defined by processor-specific code */ -int arch_hwblk_init(void); -int arch_hwblk_sleep_mode(void); - -int hwblk_register(struct hwblk_info *info); -int hwblk_init(void); - -void hwblk_enable(struct hwblk_info *info, int hwblk); -void hwblk_disable(struct hwblk_info *info, int hwblk); - -void hwblk_cnt_inc(struct hwblk_info *info, int hwblk, int cnt); -void hwblk_cnt_dec(struct hwblk_info *info, int hwblk, int cnt); - -/* allow clocks to enable and disable hardware blocks */ -#define SH_HWBLK_CLK(_hwblk, _parent, _flags)	\ -[_hwblk] = {					\ -	.parent		= _parent,		\ -	.arch_flags	= _hwblk,		\ -	.flags		= _flags,		\ -} - -int sh_hwblk_clk_register(struct clk *clks, int nr); - -#endif /* __ASM_SH_HWBLK_H */ diff --git a/arch/sh/include/asm/i2c-sh7760.h b/arch/sh/include/asm/i2c-sh7760.h index 24182116711..69fee1239b0 100644 --- a/arch/sh/include/asm/i2c-sh7760.h +++ b/arch/sh/include/asm/i2c-sh7760.h @@ -9,11 +9,9 @@  #define SH7760_I2C0_MMIO	0xFE140000  #define SH7760_I2C0_MMIOEND	0xFE14003B -#define SH7760_I2C0_IRQ		62  #define SH7760_I2C1_MMIO	0xFE150000  #define SH7760_I2C1_MMIOEND	0xFE15003B -#define SH7760_I2C1_IRQ		63  struct sh7760_i2c_platdata {  	unsigned int speed_khz; diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h index b237d525d59..728c4c571f4 100644 --- a/arch/sh/include/asm/io.h +++ b/arch/sh/include/asm/io.h @@ -1,5 +1,6 @@  #ifndef __ASM_SH_IO_H  #define __ASM_SH_IO_H +  /*   * Convention:   *    read{b,w,l,q}/write{b,w,l,q} are for PCI, @@ -10,59 +11,19 @@   *   * While read{b,w,l,q} and write{b,w,l,q} contain memory barriers   * automatically, there are also __raw versions, which do not. - * - * Historically, we have also had ctrl_in{b,w,l,q}/ctrl_out{b,w,l,q} for - * SuperH specific I/O (raw I/O to on-chip CPU peripherals). In practice - * these have the same semantics as the __raw variants, and as such, all - * new code should be using the __raw versions. - * - * All ISA I/O routines are wrapped through the machine vector. If a - * board does not provide overrides, a generic set that are copied in - * from the default machine vector are used instead. These are largely - * for old compat code for I/O offseting to SuperIOs, all of which are - * better handled through the machvec ioport mapping routines these days.   */  #include <linux/errno.h>  #include <asm/cache.h> -#include <asm/system.h>  #include <asm/addrspace.h>  #include <asm/machvec.h>  #include <asm/pgtable.h>  #include <asm-generic/iomap.h>  #ifdef __KERNEL__ -/* - * Depending on which platform we are running on, we need different - * I/O functions. - */ -#define __IO_PREFIX	generic +#define __IO_PREFIX     generic  #include <asm/io_generic.h>  #include <asm/io_trapped.h> - -#ifdef CONFIG_HAS_IOPORT - -#define inb(p)			sh_mv.mv_inb((p)) -#define inw(p)			sh_mv.mv_inw((p)) -#define inl(p)			sh_mv.mv_inl((p)) -#define outb(x,p)		sh_mv.mv_outb((x),(p)) -#define outw(x,p)		sh_mv.mv_outw((x),(p)) -#define outl(x,p)		sh_mv.mv_outl((x),(p)) - -#define inb_p(p)		sh_mv.mv_inb_p((p)) -#define inw_p(p)		sh_mv.mv_inw_p((p)) -#define inl_p(p)		sh_mv.mv_inl_p((p)) -#define outb_p(x,p)		sh_mv.mv_outb_p((x),(p)) -#define outw_p(x,p)		sh_mv.mv_outw_p((x),(p)) -#define outl_p(x,p)		sh_mv.mv_outl_p((x),(p)) - -#define insb(p,b,c)		sh_mv.mv_insb((p), (b), (c)) -#define insw(p,b,c)		sh_mv.mv_insw((p), (b), (c)) -#define insl(p,b,c)		sh_mv.mv_insl((p), (b), (c)) -#define outsb(p,b,c)		sh_mv.mv_outsb((p), (b), (c)) -#define outsw(p,b,c)		sh_mv.mv_outsw((p), (b), (c)) -#define outsl(p,b,c)		sh_mv.mv_outsl((p), (b), (c)) - -#endif +#include <mach/mangle-port.h>  #define __raw_writeb(v,a)	(__chk_io_ptr(a), *(volatile u8  __force *)(a) = (v))  #define __raw_writew(v,a)	(__chk_io_ptr(a), *(volatile u16 __force *)(a) = (v)) @@ -74,68 +35,33 @@  #define __raw_readl(a)		(__chk_io_ptr(a), *(volatile u32 __force *)(a))  #define __raw_readq(a)		(__chk_io_ptr(a), *(volatile u64 __force *)(a)) -#define readb(a)		({ u8  r_ = __raw_readb(a); mb(); r_; }) -#define readw(a)		({ u16 r_ = __raw_readw(a); mb(); r_; }) -#define readl(a)		({ u32 r_ = __raw_readl(a); mb(); r_; }) -#define readq(a)		({ u64 r_ = __raw_readq(a); mb(); r_; }) - -#define writeb(v,a)		({ __raw_writeb((v),(a)); mb(); }) -#define writew(v,a)		({ __raw_writew((v),(a)); mb(); }) -#define writel(v,a)		({ __raw_writel((v),(a)); mb(); }) -#define writeq(v,a)		({ __raw_writeq((v),(a)); mb(); }) - -/* - * Legacy SuperH on-chip I/O functions - * - * These are all deprecated, all new (and especially cross-platform) code - * should be using the __raw_xxx() routines directly. - */ -static inline u8 __deprecated ctrl_inb(unsigned long addr) -{ -	return __raw_readb(addr); -} - -static inline u16 __deprecated ctrl_inw(unsigned long addr) -{ -	return __raw_readw(addr); -} - -static inline u32 __deprecated ctrl_inl(unsigned long addr) -{ -	return __raw_readl(addr); -} - -static inline u64 __deprecated ctrl_inq(unsigned long addr) -{ -	return __raw_readq(addr); -} - -static inline void __deprecated ctrl_outb(u8 v, unsigned long addr) -{ -	__raw_writeb(v, addr); -} +#define readb_relaxed(c)	({ u8  __v = ioswabb(__raw_readb(c)); __v; }) +#define readw_relaxed(c)	({ u16 __v = ioswabw(__raw_readw(c)); __v; }) +#define readl_relaxed(c)	({ u32 __v = ioswabl(__raw_readl(c)); __v; }) +#define readq_relaxed(c)	({ u64 __v = ioswabq(__raw_readq(c)); __v; }) -static inline void __deprecated ctrl_outw(u16 v, unsigned long addr) -{ -	__raw_writew(v, addr); -} +#define writeb_relaxed(v,c)	((void)__raw_writeb((__force  u8)ioswabb(v),c)) +#define writew_relaxed(v,c)	((void)__raw_writew((__force u16)ioswabw(v),c)) +#define writel_relaxed(v,c)	((void)__raw_writel((__force u32)ioswabl(v),c)) +#define writeq_relaxed(v,c)	((void)__raw_writeq((__force u64)ioswabq(v),c)) -static inline void __deprecated ctrl_outl(u32 v, unsigned long addr) -{ -	__raw_writel(v, addr); -} +#define readb(a)		({ u8  r_ = readb_relaxed(a); rmb(); r_; }) +#define readw(a)		({ u16 r_ = readw_relaxed(a); rmb(); r_; }) +#define readl(a)		({ u32 r_ = readl_relaxed(a); rmb(); r_; }) +#define readq(a)		({ u64 r_ = readq_relaxed(a); rmb(); r_; }) -static inline void __deprecated ctrl_outq(u64 v, unsigned long addr) -{ -	__raw_writeq(v, addr); -} +#define writeb(v,a)		({ wmb(); writeb_relaxed((v),(a)); }) +#define writew(v,a)		({ wmb(); writew_relaxed((v),(a)); }) +#define writel(v,a)		({ wmb(); writel_relaxed((v),(a)); }) +#define writeq(v,a)		({ wmb(); writeq_relaxed((v),(a)); }) -extern unsigned long generic_io_base; +#define readsb(p,d,l)		__raw_readsb(p,d,l) +#define readsw(p,d,l)		__raw_readsw(p,d,l) +#define readsl(p,d,l)		__raw_readsl(p,d,l) -static inline void ctrl_delay(void) -{ -	__raw_readw(generic_io_base); -} +#define writesb(p,d,l)		__raw_writesb(p,d,l) +#define writesw(p,d,l)		__raw_writesw(p,d,l) +#define writesl(p,d,l)		__raw_writesl(p,d,l)  #define __BUILD_UNCACHED_IO(bwlq, type)					\  static inline type read##bwlq##_uncached(unsigned long addr)		\ @@ -159,10 +85,11 @@ __BUILD_UNCACHED_IO(w, u16)  __BUILD_UNCACHED_IO(l, u32)  __BUILD_UNCACHED_IO(q, u64) -#define __BUILD_MEMORY_STRING(bwlq, type)				\ +#define __BUILD_MEMORY_STRING(pfx, bwlq, type)				\  									\ -static inline void __raw_writes##bwlq(volatile void __iomem *mem,	\ -				const void *addr, unsigned int count)	\ +static inline void							\ +pfx##writes##bwlq(volatile void __iomem *mem, const void *addr,		\ +		  unsigned int count)					\  {									\  	const volatile type *__addr = addr;				\  									\ @@ -172,8 +99,8 @@ static inline void __raw_writes##bwlq(volatile void __iomem *mem,	\  	}								\  }									\  									\ -static inline void __raw_reads##bwlq(volatile void __iomem *mem,	\ -			       void *addr, unsigned int count)		\ +static inline void pfx##reads##bwlq(volatile void __iomem *mem,		\ +				    void *addr, unsigned int count)	\  {									\  	volatile type *__addr = addr;					\  									\ @@ -183,86 +110,126 @@ static inline void __raw_reads##bwlq(volatile void __iomem *mem,	\  	}								\  } -__BUILD_MEMORY_STRING(b, u8) -__BUILD_MEMORY_STRING(w, u16) +__BUILD_MEMORY_STRING(__raw_, b, u8) +__BUILD_MEMORY_STRING(__raw_, w, u16)  #ifdef CONFIG_SUPERH32  void __raw_writesl(void __iomem *addr, const void *data, int longlen);  void __raw_readsl(const void __iomem *addr, void *data, int longlen);  #else -__BUILD_MEMORY_STRING(l, u32) +__BUILD_MEMORY_STRING(__raw_, l, u32)  #endif -__BUILD_MEMORY_STRING(q, u64) - -#define writesb			__raw_writesb -#define writesw			__raw_writesw -#define writesl			__raw_writesl - -#define readsb			__raw_readsb -#define readsw			__raw_readsw -#define readsl			__raw_readsl - -#define readb_relaxed(a)	readb(a) -#define readw_relaxed(a)	readw(a) -#define readl_relaxed(a)	readl(a) -#define readq_relaxed(a)	readq(a) - -#ifndef CONFIG_GENERIC_IOMAP -/* Simple MMIO */ -#define ioread8(a)		__raw_readb(a) -#define ioread16(a)		__raw_readw(a) -#define ioread16be(a)		be16_to_cpu(__raw_readw((a))) -#define ioread32(a)		__raw_readl(a) -#define ioread32be(a)		be32_to_cpu(__raw_readl((a))) - -#define iowrite8(v,a)		__raw_writeb((v),(a)) -#define iowrite16(v,a)		__raw_writew((v),(a)) -#define iowrite16be(v,a)	__raw_writew(cpu_to_be16((v)),(a)) -#define iowrite32(v,a)		__raw_writel((v),(a)) -#define iowrite32be(v,a)	__raw_writel(cpu_to_be32((v)),(a)) - -#define ioread8_rep(a, d, c)	__raw_readsb((a), (d), (c)) -#define ioread16_rep(a, d, c)	__raw_readsw((a), (d), (c)) -#define ioread32_rep(a, d, c)	__raw_readsl((a), (d), (c)) - -#define iowrite8_rep(a, s, c)	__raw_writesb((a), (s), (c)) -#define iowrite16_rep(a, s, c)	__raw_writesw((a), (s), (c)) -#define iowrite32_rep(a, s, c)	__raw_writesl((a), (s), (c)) -#endif - -#define mmio_insb(p,d,c)	__raw_readsb(p,d,c) -#define mmio_insw(p,d,c)	__raw_readsw(p,d,c) -#define mmio_insl(p,d,c)	__raw_readsl(p,d,c) - -#define mmio_outsb(p,s,c)	__raw_writesb(p,s,c) -#define mmio_outsw(p,s,c)	__raw_writesw(p,s,c) -#define mmio_outsl(p,s,c)	__raw_writesl(p,s,c) +__BUILD_MEMORY_STRING(__raw_, q, u64) -/* synco on SH-4A, otherwise a nop */ -#define mmiowb()		wmb() +#ifdef CONFIG_HAS_IOPORT_MAP -#define IO_SPACE_LIMIT 0xffffffff - -#ifdef CONFIG_HAS_IOPORT +/* + * Slowdown I/O port space accesses for antique hardware. + */ +#undef CONF_SLOWDOWN_IO  /* - * This function provides a method for the generic case where a - * board-specific ioport_map simply needs to return the port + some - * arbitrary port base. - * - * We use this at board setup time to implicitly set the port base, and - * as a result, we can use the generic ioport_map. + * On SuperH I/O ports are memory mapped, so we access them using normal + * load/store instructions. sh_io_port_base is the virtual address to + * which all ports are being mapped.   */ +extern unsigned long sh_io_port_base; +  static inline void __set_io_port_base(unsigned long pbase)  { -	generic_io_base = pbase; +	*(unsigned long *)&sh_io_port_base = pbase; +	barrier();  } -#define __ioport_map(p, n) sh_mv.mv_ioport_map((p), (n)) +#ifdef CONFIG_GENERIC_IOMAP +#define __ioport_map ioport_map +#else +extern void __iomem *__ioport_map(unsigned long addr, unsigned int size); +#endif +#ifdef CONF_SLOWDOWN_IO +#define SLOW_DOWN_IO __raw_readw(sh_io_port_base) +#else +#define SLOW_DOWN_IO  #endif +#define __BUILD_IOPORT_SINGLE(pfx, bwlq, type, p, slow)			\ +									\ +static inline void pfx##out##bwlq##p(type val, unsigned long port)	\ +{									\ +	volatile type *__addr;						\ +									\ +	__addr = __ioport_map(port, sizeof(type));			\ +	*__addr = val;							\ +	slow;								\ +}									\ +									\ +static inline type pfx##in##bwlq##p(unsigned long port)			\ +{									\ +	volatile type *__addr;						\ +	type __val;							\ +									\ +	__addr = __ioport_map(port, sizeof(type));			\ +	__val = *__addr;						\ +	slow;								\ +									\ +	return __val;							\ +} + +#define __BUILD_IOPORT_PFX(bus, bwlq, type)				\ +	__BUILD_IOPORT_SINGLE(bus, bwlq, type, ,)			\ +	__BUILD_IOPORT_SINGLE(bus, bwlq, type, _p, SLOW_DOWN_IO) + +#define BUILDIO_IOPORT(bwlq, type)					\ +	__BUILD_IOPORT_PFX(, bwlq, type) + +BUILDIO_IOPORT(b, u8) +BUILDIO_IOPORT(w, u16) +BUILDIO_IOPORT(l, u32) +BUILDIO_IOPORT(q, u64) + +#define __BUILD_IOPORT_STRING(bwlq, type)				\ +									\ +static inline void outs##bwlq(unsigned long port, const void *addr,	\ +			      unsigned int count)			\ +{									\ +	const volatile type *__addr = addr;				\ +									\ +	while (count--) {						\ +		out##bwlq(*__addr, port);				\ +		__addr++;						\ +	}								\ +}									\ +									\ +static inline void ins##bwlq(unsigned long port, void *addr,		\ +			     unsigned int count)			\ +{									\ +	volatile type *__addr = addr;					\ +									\ +	while (count--) {						\ +		*__addr = in##bwlq(port);				\ +		__addr++;						\ +	}								\ +} + +__BUILD_IOPORT_STRING(b, u8) +__BUILD_IOPORT_STRING(w, u16) +__BUILD_IOPORT_STRING(l, u32) +__BUILD_IOPORT_STRING(q, u64) + +#else /* !CONFIG_HAS_IOPORT_MAP */ + +#include <asm/io_noioport.h> + +#endif + + +#define IO_SPACE_LIMIT 0xffffffff + +/* synco on SH-4A, otherwise a nop */ +#define mmiowb()		wmb() +  /* We really want to try and get these to memcpy etc */  void memcpy_fromio(void *, const volatile void __iomem *, unsigned long);  void memcpy_toio(volatile void __iomem *, const void *, unsigned long); @@ -322,7 +289,15 @@ __ioremap_29bit(phys_addr_t offset, unsigned long size, pgprot_t prot)  	 * mapping must be done by the PMB or by using page tables.  	 */  	if (likely(PXSEG(offset) < P3SEG && PXSEG(last_addr) < P3SEG)) { -		if (unlikely(pgprot_val(prot) & _PAGE_CACHABLE)) +		u64 flags = pgprot_val(prot); + +		/* +		 * Anything using the legacy PTEA space attributes needs +		 * to be kicked down to page table mappings. +		 */ +		if (unlikely(flags & _PAGE_PCC_MASK)) +			return NULL; +		if (unlikely(flags & _PAGE_CACHABLE))  			return (void __iomem *)P1SEGADDR(offset);  		return (void __iomem *)P2SEGADDR(offset); @@ -395,10 +370,6 @@ static inline int iounmap_fixed(void __iomem *addr) { return -EINVAL; }  #define ioremap_nocache	ioremap  #define iounmap		__iounmap -#define maybebadio(port) \ -	printk(KERN_ERR "bad PC-like io %s:%u for port 0x%lx at 0x%08x\n", \ -	       __func__, __LINE__, (port), (u32)__builtin_return_address(0)) -  /*   * Convert a physical pointer to a virtual kernel pointer for /dev/mem   * access @@ -411,7 +382,7 @@ static inline int iounmap_fixed(void __iomem *addr) { return -EINVAL; }  #define xlate_dev_kmem_ptr(p)	p  #define ARCH_HAS_VALID_PHYS_ADDR_RANGE -int valid_phys_addr_range(unsigned long addr, size_t size); +int valid_phys_addr_range(phys_addr_t addr, size_t size);  int valid_mmap_phys_addr_range(unsigned long pfn, size_t size);  #endif /* __KERNEL__ */ diff --git a/arch/sh/include/asm/io_generic.h b/arch/sh/include/asm/io_generic.h index 491df93cbf8..b5f6956f19c 100644 --- a/arch/sh/include/asm/io_generic.h +++ b/arch/sh/include/asm/io_generic.h @@ -11,31 +11,6 @@  #error "Don't include this header without a valid system prefix"  #endif -u8 IO_CONCAT(__IO_PREFIX,inb)(unsigned long); -u16 IO_CONCAT(__IO_PREFIX,inw)(unsigned long); -u32 IO_CONCAT(__IO_PREFIX,inl)(unsigned long); - -void IO_CONCAT(__IO_PREFIX,outb)(u8, unsigned long); -void IO_CONCAT(__IO_PREFIX,outw)(u16, unsigned long); -void IO_CONCAT(__IO_PREFIX,outl)(u32, unsigned long); - -u8 IO_CONCAT(__IO_PREFIX,inb_p)(unsigned long); -u16 IO_CONCAT(__IO_PREFIX,inw_p)(unsigned long); -u32 IO_CONCAT(__IO_PREFIX,inl_p)(unsigned long); -void IO_CONCAT(__IO_PREFIX,outb_p)(u8, unsigned long); -void IO_CONCAT(__IO_PREFIX,outw_p)(u16, unsigned long); -void IO_CONCAT(__IO_PREFIX,outl_p)(u32, unsigned long); - -void IO_CONCAT(__IO_PREFIX,insb)(unsigned long, void *dst, unsigned long count); -void IO_CONCAT(__IO_PREFIX,insw)(unsigned long, void *dst, unsigned long count); -void IO_CONCAT(__IO_PREFIX,insl)(unsigned long, void *dst, unsigned long count); -void IO_CONCAT(__IO_PREFIX,outsb)(unsigned long, const void *src, unsigned long count); -void IO_CONCAT(__IO_PREFIX,outsw)(unsigned long, const void *src, unsigned long count); -void IO_CONCAT(__IO_PREFIX,outsl)(unsigned long, const void *src, unsigned long count); - -void *IO_CONCAT(__IO_PREFIX,ioremap)(unsigned long offset, unsigned long size); -void IO_CONCAT(__IO_PREFIX,iounmap)(void *addr); -  void __iomem *IO_CONCAT(__IO_PREFIX,ioport_map)(unsigned long addr, unsigned int size);  void IO_CONCAT(__IO_PREFIX,ioport_unmap)(void __iomem *addr);  void IO_CONCAT(__IO_PREFIX,mem_init)(void); diff --git a/arch/sh/include/asm/io_noioport.h b/arch/sh/include/asm/io_noioport.h new file mode 100644 index 00000000000..4d48f1436a6 --- /dev/null +++ b/arch/sh/include/asm/io_noioport.h @@ -0,0 +1,52 @@ +#ifndef __ASM_SH_IO_NOIOPORT_H +#define __ASM_SH_IO_NOIOPORT_H + +static inline u8 inb(unsigned long addr) +{ +	BUG(); +	return -1; +} + +static inline u16 inw(unsigned long addr) +{ +	BUG(); +	return -1; +} + +static inline u32 inl(unsigned long addr) +{ +	BUG(); +	return -1; +} + +static inline void outb(unsigned char x, unsigned long port) +{ +	BUG(); +} + +static inline void outw(unsigned short x, unsigned long port) +{ +	BUG(); +} + +static inline void outl(unsigned int x, unsigned long port) +{ +	BUG(); +} + +#define inb_p(addr)	inb(addr) +#define inw_p(addr)	inw(addr) +#define inl_p(addr)	inl(addr) +#define outb_p(x, addr)	outb((x), (addr)) +#define outw_p(x, addr)	outw((x), (addr)) +#define outl_p(x, addr)	outl((x), (addr)) + +#define insb(a, b, c)	BUG() +#define insw(a, b, c)	BUG() +#define insl(a, b, c)	BUG() + +#define outsb(a, b, c)	BUG() +#define outsw(a, b, c)	BUG() +#define outsl(a, b, c)	BUG() + +#endif /* __ASM_SH_IO_NOIOPORT_H */ diff --git a/arch/sh/include/asm/io_trapped.h b/arch/sh/include/asm/io_trapped.h index f1251d4f0ba..4ab94ef5107 100644 --- a/arch/sh/include/asm/io_trapped.h +++ b/arch/sh/include/asm/io_trapped.h @@ -36,7 +36,7 @@ __ioremap_trapped(unsigned long offset, unsigned long size)  #define __ioremap_trapped(offset, size) NULL  #endif -#ifdef CONFIG_HAS_IOPORT +#ifdef CONFIG_HAS_IOPORT_MAP  extern struct list_head trapped_io;  static inline void __iomem * diff --git a/arch/sh/include/asm/ioctl.h b/arch/sh/include/asm/ioctl.h deleted file mode 100644 index b279fe06dfe..00000000000 --- a/arch/sh/include/asm/ioctl.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/ioctl.h> diff --git a/arch/sh/include/asm/ipcbuf.h b/arch/sh/include/asm/ipcbuf.h deleted file mode 100644 index 84c7e51cb6d..00000000000 --- a/arch/sh/include/asm/ipcbuf.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/ipcbuf.h> diff --git a/arch/sh/include/asm/irq.h b/arch/sh/include/asm/irq.h index 45d08b6a5ef..0e4f532e473 100644 --- a/arch/sh/include/asm/irq.h +++ b/arch/sh/include/asm/irq.h @@ -5,12 +5,15 @@  #include <asm/machvec.h>  /* - * A sane default based on a reasonable vector table size, platforms are - * advised to cap this at the hard limit that they're interested in - * through the machvec. + * Only legacy non-sparseirq platforms have to set a reasonably sane + * value here. sparseirq platforms allocate their irq_descs on the fly, + * so will expand automatically based on the number of registered IRQs.   */ -#define NR_IRQS			512 -#define NR_IRQS_LEGACY		8	/* Legacy external IRQ0-7 */ +#ifdef CONFIG_SPARSE_IRQ +# define NR_IRQS		8 +#else +# define NR_IRQS		512 +#endif  /*   * This is a special IRQ number for indicating that no IRQ has been @@ -21,17 +24,6 @@  #define NO_IRQ_IGNORE		((unsigned int)-1)  /* - * Convert back and forth between INTEVT and IRQ values. - */ -#ifdef CONFIG_CPU_HAS_INTEVT -#define evt2irq(evt)		(((evt) >> 5) - 16) -#define irq2evt(irq)		(((irq) + 16) << 5) -#else -#define evt2irq(evt)		(evt) -#define irq2evt(irq)		(irq) -#endif - -/*   * Simple Mask Register Support   */  extern void make_maskreg_irq(unsigned int irq); diff --git a/arch/sh/include/asm/irq_regs.h b/arch/sh/include/asm/irq_regs.h deleted file mode 100644 index 3dd9c0b7027..00000000000 --- a/arch/sh/include/asm/irq_regs.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/irq_regs.h> diff --git a/arch/sh/include/asm/kdebug.h b/arch/sh/include/asm/kdebug.h index 5f6d2e9ccb7..8d6a831e7ba 100644 --- a/arch/sh/include/asm/kdebug.h +++ b/arch/sh/include/asm/kdebug.h @@ -10,4 +10,8 @@ enum die_val {  	DIE_SSTEP,  }; +/* arch/sh/kernel/dumpstack.c */ +extern void printk_address(unsigned long address, int reliable); +extern void dump_mem(const char *str, unsigned long bottom, unsigned long top); +  #endif /* __ASM_SH_KDEBUG_H */ diff --git a/arch/sh/include/asm/kgdb.h b/arch/sh/include/asm/kgdb.h index 4235e228d92..9e7d2d1b03e 100644 --- a/arch/sh/include/asm/kgdb.h +++ b/arch/sh/include/asm/kgdb.h @@ -4,18 +4,6 @@  #include <asm/cacheflush.h>  #include <asm/ptrace.h> -/* Same as pt_regs but has vbr in place of syscall_nr */ -struct kgdb_regs { -        unsigned long regs[16]; -        unsigned long pc; -        unsigned long pr; -        unsigned long sr; -        unsigned long gbr; -        unsigned long mach; -        unsigned long macl; -        unsigned long vbr; -}; -  enum regnames {  	GDB_R0, GDB_R1, GDB_R2, GDB_R3, GDB_R4, GDB_R5, GDB_R6, GDB_R7,  	GDB_R8, GDB_R9, GDB_R10, GDB_R11, GDB_R12, GDB_R13, GDB_R14, GDB_R15, @@ -23,16 +11,27 @@ enum regnames {  	GDB_PC, GDB_PR, GDB_SR, GDB_GBR, GDB_MACH, GDB_MACL, GDB_VBR,  }; -#define NUMREGBYTES    ((GDB_VBR + 1) * 4) +#define _GP_REGS	16 +#define _EXTRA_REGS	7 +#define GDB_SIZEOF_REG	sizeof(u32) + +#define DBG_MAX_REG_NUM	(_GP_REGS + _EXTRA_REGS) +#define NUMREGBYTES	(DBG_MAX_REG_NUM * sizeof(GDB_SIZEOF_REG))  static inline void arch_kgdb_breakpoint(void)  {  	__asm__ __volatile__ ("trapa #0x3c\n");  } -#define BUFMAX                 2048 - -#define CACHE_FLUSH_IS_SAFE	1  #define BREAK_INSTR_SIZE	2 +#define BUFMAX			2048 + +#ifdef CONFIG_SMP +# define CACHE_FLUSH_IS_SAFE	0 +#else +# define CACHE_FLUSH_IS_SAFE	1 +#endif + +#define GDB_ADJUSTS_BREAK_OFFSET  #endif /* __ASM_SH_KGDB_H */ diff --git a/arch/sh/include/asm/local.h b/arch/sh/include/asm/local.h deleted file mode 100644 index 9ed9b9cb459..00000000000 --- a/arch/sh/include/asm/local.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __ASM_SH_LOCAL_H -#define __ASM_SH_LOCAL_H - -#include <asm-generic/local.h> - -#endif /* __ASM_SH_LOCAL_H */ - diff --git a/arch/sh/include/asm/local64.h b/arch/sh/include/asm/local64.h deleted file mode 100644 index 36c93b5cc23..00000000000 --- a/arch/sh/include/asm/local64.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/local64.h> diff --git a/arch/sh/include/asm/machvec.h b/arch/sh/include/asm/machvec.h index a0b0cf79cf8..d3324e4f372 100644 --- a/arch/sh/include/asm/machvec.h +++ b/arch/sh/include/asm/machvec.h @@ -17,33 +17,11 @@  struct sh_machine_vector {  	void (*mv_setup)(char **cmdline_p);  	const char *mv_name; -	int mv_nr_irqs;  	int (*mv_irq_demux)(int irq);  	void (*mv_init_irq)(void); -#ifdef CONFIG_HAS_IOPORT -	u8 (*mv_inb)(unsigned long); -	u16 (*mv_inw)(unsigned long); -	u32 (*mv_inl)(unsigned long); -	void (*mv_outb)(u8, unsigned long); -	void (*mv_outw)(u16, unsigned long); -	void (*mv_outl)(u32, unsigned long); - -	u8 (*mv_inb_p)(unsigned long); -	u16 (*mv_inw_p)(unsigned long); -	u32 (*mv_inl_p)(unsigned long); -	void (*mv_outb_p)(u8, unsigned long); -	void (*mv_outw_p)(u16, unsigned long); -	void (*mv_outl_p)(u32, unsigned long); - -	void (*mv_insb)(unsigned long, void *dst, unsigned long count); -	void (*mv_insw)(unsigned long, void *dst, unsigned long count); -	void (*mv_insl)(unsigned long, void *dst, unsigned long count); -	void (*mv_outsb)(unsigned long, const void *src, unsigned long count); -	void (*mv_outsw)(unsigned long, const void *src, unsigned long count); -	void (*mv_outsl)(unsigned long, const void *src, unsigned long count); - +#ifdef CONFIG_HAS_IOPORT_MAP  	void __iomem *(*mv_ioport_map)(unsigned long port, unsigned int size);  	void (*mv_ioport_unmap)(void __iomem *);  #endif @@ -52,6 +30,7 @@ struct sh_machine_vector {  	int (*mv_mode_pins)(void);  	void (*mv_mem_init)(void); +	void (*mv_mem_reserve)(void);  };  extern struct sh_machine_vector sh_mv; diff --git a/arch/sh/include/asm/memblock.h b/arch/sh/include/asm/memblock.h deleted file mode 100644 index e87063fad2e..00000000000 --- a/arch/sh/include/asm/memblock.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef __ASM_SH_MEMBLOCK_H -#define __ASM_SH_MEMBLOCK_H - -#endif /* __ASM_SH_MEMBLOCK_H */ diff --git a/arch/sh/include/asm/mman.h b/arch/sh/include/asm/mman.h deleted file mode 100644 index 8eebf89f5ab..00000000000 --- a/arch/sh/include/asm/mman.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/mman.h> diff --git a/arch/sh/include/asm/mmu_context.h b/arch/sh/include/asm/mmu_context.h index 384c7471a37..b9d9489a501 100644 --- a/arch/sh/include/asm/mmu_context.h +++ b/arch/sh/include/asm/mmu_context.h @@ -46,9 +46,9 @@  #define MMU_VPN_MASK	0xfffff000  #if defined(CONFIG_SUPERH32) -#include "mmu_context_32.h" +#include <asm/mmu_context_32.h>  #else -#include "mmu_context_64.h" +#include <asm/mmu_context_64.h>  #endif  /* @@ -81,7 +81,7 @@ static inline void get_mmu_context(struct mm_struct *mm, unsigned int cpu)  		/*  		 * Fix version; Note that we avoid version #0 -		 * to distingush NO_CONTEXT. +		 * to distinguish NO_CONTEXT.  		 */  		if (!asid)  			asid = MMU_CONTEXT_FIRST_VERSION; diff --git a/arch/sh/include/asm/mmzone.h b/arch/sh/include/asm/mmzone.h index 8887baff5ef..15a8496960e 100644 --- a/arch/sh/include/asm/mmzone.h +++ b/arch/sh/include/asm/mmzone.h @@ -9,10 +9,6 @@  extern struct pglist_data *node_data[];  #define NODE_DATA(nid)		(node_data[nid]) -#define node_start_pfn(nid)	(NODE_DATA(nid)->node_start_pfn) -#define node_end_pfn(nid)	(NODE_DATA(nid)->node_start_pfn + \ -				 NODE_DATA(nid)->node_spanned_pages) -  static inline int pfn_to_nid(unsigned long pfn)  {  	int nid; diff --git a/arch/sh/include/asm/module.h b/arch/sh/include/asm/module.h index b7927de86f9..81300d8b544 100644 --- a/arch/sh/include/asm/module.h +++ b/arch/sh/include/asm/module.h @@ -1,21 +1,13 @@  #ifndef _ASM_SH_MODULE_H  #define _ASM_SH_MODULE_H -struct mod_arch_specific { +#include <asm-generic/module.h> +  #ifdef CONFIG_DWARF_UNWINDER +struct mod_arch_specific {  	struct list_head fde_list;  	struct list_head cie_list; -#endif  }; - -#ifdef CONFIG_64BIT -#define Elf_Shdr Elf64_Shdr -#define Elf_Sym Elf64_Sym -#define Elf_Ehdr Elf64_Ehdr -#else -#define Elf_Shdr Elf32_Shdr -#define Elf_Sym Elf32_Sym -#define Elf_Ehdr Elf32_Ehdr  #endif  #ifdef CONFIG_CPU_LITTLE_ENDIAN diff --git a/arch/sh/include/asm/msgbuf.h b/arch/sh/include/asm/msgbuf.h deleted file mode 100644 index 809134c644a..00000000000 --- a/arch/sh/include/asm/msgbuf.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/msgbuf.h> diff --git a/arch/sh/include/asm/mutex-llsc.h b/arch/sh/include/asm/mutex-llsc.h index 090358a7e1b..dad29b687bd 100644 --- a/arch/sh/include/asm/mutex-llsc.h +++ b/arch/sh/include/asm/mutex-llsc.h @@ -37,7 +37,7 @@ __mutex_fastpath_lock(atomic_t *count, void (*fail_fn)(atomic_t *))  }  static inline int -__mutex_fastpath_lock_retval(atomic_t *count, int (*fail_fn)(atomic_t *)) +__mutex_fastpath_lock_retval(atomic_t *count)  {  	int __done, __res; @@ -51,7 +51,7 @@ __mutex_fastpath_lock_retval(atomic_t *count, int (*fail_fn)(atomic_t *))  		: "t");  	if (unlikely(!__done || __res != 0)) -		__res = fail_fn(count); +		__res = -1;  	return __res;  } diff --git a/arch/sh/include/asm/page.h b/arch/sh/include/asm/page.h index c4e0b3d472b..15d970328f7 100644 --- a/arch/sh/include/asm/page.h +++ b/arch/sh/include/asm/page.h @@ -113,6 +113,16 @@ typedef struct page *pgtable_t;  #define __MEMORY_SIZE		CONFIG_MEMORY_SIZE  /* + * PHYSICAL_OFFSET is the offset in physical memory where the base + * of the kernel is loaded. + */ +#ifdef CONFIG_PHYSICAL_START +#define PHYSICAL_OFFSET (CONFIG_PHYSICAL_START - __MEMORY_START) +#else +#define PHYSICAL_OFFSET 0 +#endif + +/*   * PAGE_OFFSET is the virtual address of the start of kernel address   * space.   */ @@ -141,8 +151,13 @@ typedef struct page *pgtable_t;  #endif /* !__ASSEMBLY__ */  #ifdef CONFIG_UNCACHED_MAPPING +#if defined(CONFIG_29BIT) +#define UNCAC_ADDR(addr)	P2SEGADDR(addr) +#define CAC_ADDR(addr)		P1SEGADDR(addr) +#else  #define UNCAC_ADDR(addr)	((addr) - PAGE_OFFSET + uncached_start)  #define CAC_ADDR(addr)		((addr) - uncached_start + PAGE_OFFSET) +#endif  #else  #define UNCAC_ADDR(addr)	((addr))  #define CAC_ADDR(addr)		((addr)) @@ -186,7 +201,7 @@ typedef struct page *pgtable_t;  /*   * While BYTES_PER_WORD == 4 on the current sh64 ABI, GCC will still   * happily generate {ld/st}.q pairs, requiring us to have 8-byte - * alignment to avoid traps. The kmalloc alignment is gauranteed by + * alignment to avoid traps. The kmalloc alignment is guaranteed by   * virtue of L1_CACHE_BYTES, requiring this to only be special cased   * for slab caches.   */ diff --git a/arch/sh/include/asm/param.h b/arch/sh/include/asm/param.h deleted file mode 100644 index 965d4542797..00000000000 --- a/arch/sh/include/asm/param.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/param.h> diff --git a/arch/sh/include/asm/parport.h b/arch/sh/include/asm/parport.h deleted file mode 100644 index cf252af6459..00000000000 --- a/arch/sh/include/asm/parport.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/parport.h> diff --git a/arch/sh/include/asm/pci.h b/arch/sh/include/asm/pci.h index f0efe97f175..5b451155299 100644 --- a/arch/sh/include/asm/pci.h +++ b/arch/sh/include/asm/pci.h @@ -70,11 +70,6 @@ extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,  	enum pci_mmap_state mmap_state, int write_combine);  extern void pcibios_set_master(struct pci_dev *dev); -static inline void pcibios_penalize_isa_irq(int irq, int active) -{ -	/* We don't do dynamic PCI IRQ allocation */ -} -  /* Dynamic DMA mapping stuff.   * SuperH has everything mapped statically like x86.   */ @@ -112,13 +107,7 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,  #endif  /* Board-specific fixup routines. */ -int pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin); - -extern void pcibios_resource_to_bus(struct pci_dev *dev, -	struct pci_bus_region *region, struct resource *res); - -extern void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, -				    struct pci_bus_region *region); +int pcibios_map_platform_irq(const struct pci_dev *dev, u8 slot, u8 pin);  #define pci_domain_nr(bus) ((struct pci_channel *)(bus)->sysdata)->index diff --git a/arch/sh/include/asm/percpu.h b/arch/sh/include/asm/percpu.h deleted file mode 100644 index 4db4b39a439..00000000000 --- a/arch/sh/include/asm/percpu.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ARCH_SH_PERCPU -#define __ARCH_SH_PERCPU - -#include <asm-generic/percpu.h> - -#endif /* __ARCH_SH_PERCPU */ diff --git a/arch/sh/include/asm/pgalloc.h b/arch/sh/include/asm/pgalloc.h index 8c00785c60d..a33673b3687 100644 --- a/arch/sh/include/asm/pgalloc.h +++ b/arch/sh/include/asm/pgalloc.h @@ -47,7 +47,10 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm,  	if (!pg)  		return NULL;  	page = virt_to_page(pg); -	pgtable_page_ctor(page); +	if (!pgtable_page_ctor(page)) { +		quicklist_free(QUICK_PT, NULL, pg); +		return NULL; +	}  	return page;  } diff --git a/arch/sh/include/asm/pgtable.h b/arch/sh/include/asm/pgtable.h index 083ea068e81..cf434c64408 100644 --- a/arch/sh/include/asm/pgtable.h +++ b/arch/sh/include/asm/pgtable.h @@ -18,6 +18,7 @@  #include <asm/pgtable-2level.h>  #endif  #include <asm/page.h> +#include <asm/mmu.h>  #ifndef __ASSEMBLY__  #include <asm/addrspace.h> @@ -123,9 +124,6 @@ typedef pte_t *pte_addr_t;  #define kern_addr_valid(addr)	(1) -#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)		\ -		remap_pfn_range(vma, vaddr, pfn, size, prot) -  #define pte_pfn(x)		((unsigned long)(((x).pte_low >> PAGE_SHIFT)))  /* @@ -134,6 +132,7 @@ typedef pte_t *pte_addr_t;  extern void pgtable_cache_init(void);  struct vm_area_struct; +struct mm_struct;  extern void __update_cache(struct vm_area_struct *vma,  			   unsigned long address, pte_t pte); diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable_32.h index 43528ec656b..0bce3d81569 100644 --- a/arch/sh/include/asm/pgtable_32.h +++ b/arch/sh/include/asm/pgtable_32.h @@ -76,6 +76,10 @@  /* Wrapper for extended mode pgprot twiddling */  #define _PAGE_EXT(x)		((unsigned long long)(x) << 32) +#ifdef CONFIG_X2TLB +#define _PAGE_PCC_MASK	0x00000000	/* No legacy PTEA support */ +#else +  /* software: moves to PTEA.TC (Timing Control) */  #define _PAGE_PCC_AREA5	0x00000000	/* use BSC registers for area5 */  #define _PAGE_PCC_AREA6	0x80000000	/* use BSC registers for area6 */ @@ -89,7 +93,8 @@  #define _PAGE_PCC_ATR8	0x60000000	/* Attribute Memory space, 8 bit bus */  #define _PAGE_PCC_ATR16	0x60000001	/* Attribute Memory space, 6 bit bus */ -#ifndef CONFIG_X2TLB +#define _PAGE_PCC_MASK	0xe0000001 +  /* copy the ptea attributes */  static inline unsigned long copy_ptea_attributes(unsigned long x)  { @@ -162,7 +167,7 @@ static inline unsigned long copy_ptea_attributes(unsigned long x)  #endif  /* - * Mask of bits that are to be preserved accross pgprot changes. + * Mask of bits that are to be preserved across pgprot changes.   */  #define _PAGE_CHG_MASK \  	(PTE_MASK | _PAGE_ACCESSED | _PAGE_CACHABLE | \ @@ -231,13 +236,7 @@ static inline unsigned long copy_ptea_attributes(unsigned long x)  					   _PAGE_EXT_KERN_EXEC))  #define PAGE_KERNEL_PCC(slot, type) \ -			__pgprot(_PAGE_PRESENT | _PAGE_DIRTY | \ -				 _PAGE_ACCESSED | _PAGE_FLAGS_HARD | \ -				 _PAGE_EXT(_PAGE_EXT_KERN_READ | \ -					   _PAGE_EXT_KERN_WRITE | \ -					   _PAGE_EXT_KERN_EXEC) \ -				 (slot ? _PAGE_PCC_AREA5 : _PAGE_PCC_AREA6) | \ -				 (type)) +			__pgprot(0)  #elif defined(CONFIG_MMU) /* SH-X TLB */  #define PAGE_NONE	__pgprot(_PAGE_PROTNONE | _PAGE_CACHABLE | \ diff --git a/arch/sh/include/asm/pgtable_64.h b/arch/sh/include/asm/pgtable_64.h index 42cb9dd5216..dda8c82601b 100644 --- a/arch/sh/include/asm/pgtable_64.h +++ b/arch/sh/include/asm/pgtable_64.h @@ -87,9 +87,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)  #define pte_unmap(pte)		do { } while (0)  #ifndef __ASSEMBLY__ -#define IOBASE_VADDR	0xff000000 -#define IOBASE_END	0xffffffff -  /*   * PTEL coherent flags.   * See Chapter 17 ST50 CPU Core Volume 1, Architecture. diff --git a/arch/sh/include/asm/poll.h b/arch/sh/include/asm/poll.h deleted file mode 100644 index c98509d3149..00000000000 --- a/arch/sh/include/asm/poll.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/poll.h> diff --git a/arch/sh/include/asm/posix_types.h b/arch/sh/include/asm/posix_types.h index 4eeb723aee7..1aa781079b1 100644 --- a/arch/sh/include/asm/posix_types.h +++ b/arch/sh/include/asm/posix_types.h @@ -1,13 +1,5 @@ -#ifdef __KERNEL__  # ifdef CONFIG_SUPERH32 -#  include "posix_types_32.h" +#  include <asm/posix_types_32.h>  # else -#  include "posix_types_64.h" +#  include <asm/posix_types_64.h>  # endif -#else -# ifdef __SH5__ -#  include "posix_types_64.h" -# else -#  include "posix_types_32.h" -# endif -#endif /* __KERNEL__ */ diff --git a/arch/sh/include/asm/processor.h b/arch/sh/include/asm/processor.h index c9e7cbc4768..5448f9bbf4a 100644 --- a/arch/sh/include/asm/processor.h +++ b/arch/sh/include/asm/processor.h @@ -18,7 +18,8 @@ enum cpu_type {  	CPU_SH7619,  	/* SH-2A types */ -	CPU_SH7201, CPU_SH7203, CPU_SH7206, CPU_SH7263, CPU_MXG, +	CPU_SH7201, CPU_SH7203, CPU_SH7206, CPU_SH7263, CPU_SH7264, CPU_SH7269, +	CPU_MXG,  	/* SH-3 types */  	CPU_SH7705, CPU_SH7706, CPU_SH7707, @@ -32,10 +33,10 @@ enum cpu_type {  	/* SH-4A types */  	CPU_SH7763, CPU_SH7770, CPU_SH7780, CPU_SH7781, CPU_SH7785, CPU_SH7786, -	CPU_SH7723, CPU_SH7724, CPU_SH7757, CPU_SHX3, +	CPU_SH7723, CPU_SH7724, CPU_SH7757, CPU_SH7734, CPU_SHX3,  	/* SH4AL-DSP types */ -	CPU_SH7343, CPU_SH7722, CPU_SH7366, +	CPU_SH7343, CPU_SH7722, CPU_SH7366, CPU_SH7372,  	/* SH-5 types */          CPU_SH5_101, CPU_SH5_103, @@ -85,10 +86,6 @@ struct sh_cpuinfo {  	struct tlb_info itlb;  	struct tlb_info dtlb; -#ifdef CONFIG_SMP -	struct task_struct *idle; -#endif -  	unsigned int phys_bits;  	unsigned long flags;  } __attribute__ ((aligned(L1_CACHE_BYTES))); @@ -101,6 +98,9 @@ extern struct sh_cpuinfo cpu_data[];  #define cpu_sleep()	__asm__ __volatile__ ("sleep" : : : "memory")  #define cpu_relax()	barrier() +void default_idle(void); +void stop_this_cpu(void *); +  /* Forward decl */  struct seq_operations;  struct task_struct; @@ -161,12 +161,23 @@ int vsyscall_init(void);  #define vsyscall_init() do { } while (0)  #endif +/* + * SH-2A has both 16 and 32-bit opcodes, do lame encoding checks. + */ +#ifdef CONFIG_CPU_SH2A +extern unsigned int instruction_size(unsigned int insn); +#elif defined(CONFIG_SUPERH32) +#define instruction_size(insn)	(2) +#else +#define instruction_size(insn)	(4) +#endif +  #endif /* __ASSEMBLY__ */  #ifdef CONFIG_SUPERH32 -# include "processor_32.h" +# include <asm/processor_32.h>  #else -# include "processor_64.h" +# include <asm/processor_64.h>  #endif  #endif /* __ASM_SH_PROCESSOR_H */ diff --git a/arch/sh/include/asm/processor_32.h b/arch/sh/include/asm/processor_32.h index 46d5179c9f4..18e0377f72b 100644 --- a/arch/sh/include/asm/processor_32.h +++ b/arch/sh/include/asm/processor_32.h @@ -39,7 +39,7 @@  /* This decides where the kernel will search for a free chunk of vm   * space during mmap's.   */ -#define TASK_UNMAPPED_BASE	(TASK_SIZE / 3) +#define TASK_UNMAPPED_BASE	PAGE_ALIGN(TASK_SIZE / 3)  /*   * Bit of SR register @@ -111,6 +111,16 @@ struct thread_struct {  	/* Extended processor state */  	union thread_xstate *xstate; + +	/* +	 * fpu_counter contains the number of consecutive context switches +	 * that the FPU is used. If this is over a threshold, the lazy fpu +	 * saving becomes unlazy to save the trap. This is an unsigned char +	 * so that after 256 times the counter wraps and the behavior turns +	 * lazy again; this to deal with bursty apps that only use FPU for +	 * a short time +	 */ +	unsigned char fpu_counter;  };  #define INIT_THREAD  {						\ @@ -126,14 +136,6 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_pc, unsigned lo  /* Free all resources held by a thread. */  extern void release_thread(struct task_struct *); -/* Prepare to copy thread state - unlazy all lazy status */ -void prepare_to_copy(struct task_struct *tsk); - -/* - * create a kernel thread without removing it from tasklists - */ -extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); -  /* Copy and release all segment info associated with a VM */  #define copy_segments(p, mm)	do { } while(0)  #define release_segments(mm)	do { } while(0) @@ -194,15 +196,20 @@ extern unsigned long get_wchan(struct task_struct *p);  #define KSTK_ESP(tsk)  (task_pt_regs(tsk)->regs[15])  #if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH4) +  #define PREFETCH_STRIDE		L1_CACHE_BYTES  #define ARCH_HAS_PREFETCH  #define ARCH_HAS_PREFETCHW -static inline void prefetch(void *x) + +static inline void prefetch(const void *x)  { -	__asm__ __volatile__ ("pref @%0\n\t" : : "r" (x) : "memory"); +	__builtin_prefetch(x, 0, 3);  } -#define prefetchw(x)	prefetch(x) +static inline void prefetchw(const void *x) +{ +	__builtin_prefetch(x, 1, 3); +}  #endif  #endif /* __KERNEL__ */ diff --git a/arch/sh/include/asm/processor_64.h b/arch/sh/include/asm/processor_64.h index 2a541ddb5a1..eedd4f625d0 100644 --- a/arch/sh/include/asm/processor_64.h +++ b/arch/sh/include/asm/processor_64.h @@ -47,7 +47,7 @@ pc; })  /* This decides where the kernel will search for a free chunk of vm   * space during mmap's.   */ -#define TASK_UNMAPPED_BASE	(TASK_SIZE / 3) +#define TASK_UNMAPPED_BASE	PAGE_ALIGN(TASK_SIZE / 3)  /*   * Bit of SR register @@ -121,12 +121,21 @@ struct thread_struct {  	   NULL for a kernel thread. */  	struct pt_regs *uregs; -	unsigned long trap_no, error_code;  	unsigned long address;  	/* Hardware debugging registers may come here */  	/* floating point info */  	union thread_xstate *xstate; + +	/* +	 * fpu_counter contains the number of consecutive context switches +	 * that the FPU is used. If this is over a threshold, the lazy fpu +	 * saving becomes unlazy to save the trap. This is an unsigned char +	 * so that after 256 times the counter wraps and the behavior turns +	 * lazy again; this to deal with bursty apps that only use FPU for +	 * a short time +	 */ +	unsigned char fpu_counter;  };  #define INIT_MMAP \ @@ -138,8 +147,6 @@ struct thread_struct {  	.pc		= 0,			\          .kregs		= &fake_swapper_regs,	\  	.uregs	        = NULL,			\ -	.trap_no	= 0,			\ -	.error_code	= 0,			\  	.address	= 0,			\  	.flags		= 0,			\  } @@ -150,7 +157,6 @@ struct thread_struct {  #define SR_USER (SR_MMU | SR_FD)  #define start_thread(_regs, new_pc, new_sp)			\ -	set_fs(USER_DS);					\  	_regs->sr = SR_USER;	/* User mode. */		\  	_regs->pc = new_pc - 4;	/* Compensate syscall exit */	\  	_regs->pc |= 1;		/* Set SHmedia ! */		\ @@ -163,17 +169,11 @@ struct mm_struct;  /* Free all resources held by a thread. */  extern void release_thread(struct task_struct *); -/* - * create a kernel thread without removing it from tasklists - */ -extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); -  /* Copy and release all segment info associated with a VM */  #define copy_segments(p, mm)	do { } while (0)  #define release_segments(mm)	do { } while (0)  #define forget_segments()	do { } while (0) -#define prepare_to_copy(tsk)	do { } while (0)  /*   * FPU lazy state save handling.   */ diff --git a/arch/sh/include/asm/ptrace.h b/arch/sh/include/asm/ptrace.h index f6edc10aa0d..2506c7db76b 100644 --- a/arch/sh/include/asm/ptrace.h +++ b/arch/sh/include/asm/ptrace.h @@ -1,50 +1,22 @@ -#ifndef __ASM_SH_PTRACE_H -#define __ASM_SH_PTRACE_H -  /*   * Copyright (C) 1999, 2000  Niibe Yutaka   */ +#ifndef __ASM_SH_PTRACE_H +#define __ASM_SH_PTRACE_H -#define PTRACE_GETREGS		12	/* General registers */ -#define PTRACE_SETREGS		13 - -#define PTRACE_GETFPREGS	14	/* FPU registers */ -#define PTRACE_SETFPREGS	15 - -#define PTRACE_GETFDPIC		31	/* get the ELF fdpic loadmap address */ - -#define PTRACE_GETFDPIC_EXEC	0	/* [addr] request the executable loadmap */ -#define PTRACE_GETFDPIC_INTERP	1	/* [addr] request the interpreter loadmap */ - -#define	PTRACE_GETDSPREGS	55	/* DSP registers */ -#define	PTRACE_SETDSPREGS	56 - -#define PT_TEXT_END_ADDR	240 -#define PT_TEXT_ADDR		244	/* &(struct user)->start_code */ -#define PT_DATA_ADDR		248	/* &(struct user)->start_data */ -#define PT_TEXT_LEN		252 - -#if defined(__SH5__) || defined(CONFIG_CPU_SH5) -#include "ptrace_64.h" -#else -#include "ptrace_32.h" -#endif - -#ifdef __KERNEL__  #include <linux/stringify.h>  #include <linux/stddef.h>  #include <linux/thread_info.h>  #include <asm/addrspace.h>  #include <asm/page.h> -#include <asm/system.h> +#include <uapi/asm/ptrace.h>  #define user_mode(regs)			(((regs)->sr & 0x40000000)==0) -#define user_stack_pointer(regs)	((unsigned long)(regs)->regs[15]) -#define kernel_stack_pointer(regs)	((unsigned long)(regs)->regs[15]) -#define instruction_pointer(regs)	((unsigned long)(regs)->pc) +#define kernel_stack_pointer(_regs)	((unsigned long)(_regs)->regs[15]) -extern void show_regs(struct pt_regs *); +#define GET_FP(regs)	((regs)->regs[14]) +#define GET_USP(regs)	((regs)->regs[15])  #define arch_has_single_step()	(1) @@ -124,7 +96,7 @@ static inline unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,  struct perf_event;  struct perf_sample_data; -extern void ptrace_triggered(struct perf_event *bp, int nmi, +extern void ptrace_triggered(struct perf_event *bp,  		      struct perf_sample_data *data, struct pt_regs *regs);  #define task_pt_regs(task) \ @@ -132,13 +104,14 @@ extern void ptrace_triggered(struct perf_event *bp, int nmi,  static inline unsigned long profile_pc(struct pt_regs *regs)  { -	unsigned long pc = instruction_pointer(regs); +	unsigned long pc = regs->pc;  	if (virt_addr_uncached(pc))  		return CAC_ADDR(pc);  	return pc;  } -#endif /* __KERNEL__ */ +#define profile_pc profile_pc +#include <asm-generic/ptrace.h>  #endif /* __ASM_SH_PTRACE_H */ diff --git a/arch/sh/include/asm/ptrace_32.h b/arch/sh/include/asm/ptrace_32.h index 35d9e257558..1dd4480c536 100644 --- a/arch/sh/include/asm/ptrace_32.h +++ b/arch/sh/include/asm/ptrace_32.h @@ -1,83 +1,13 @@  #ifndef __ASM_SH_PTRACE_32_H  #define __ASM_SH_PTRACE_32_H -/* - * GCC defines register number like this: - * ----------------------------- - *	 0 - 15 are integer registers - *	17 - 22 are control/special registers - *	24 - 39 fp registers - *	40 - 47 xd registers - *	48 -    fpscr register - * ----------------------------- - * - * We follows above, except: - *	16 --- program counter (PC) - *	22 --- syscall # - *	23 --- floating point communication register - */ -#define REG_REG0	 0 -#define REG_REG15	15 +#include <uapi/asm/ptrace_32.h> -#define REG_PC		16 - -#define REG_PR		17 -#define REG_SR		18 -#define REG_GBR		19 -#define REG_MACH	20 -#define REG_MACL	21 - -#define REG_SYSCALL	22 - -#define REG_FPREG0	23 -#define REG_FPREG15	38 -#define REG_XFREG0	39 -#define REG_XFREG15	54 - -#define REG_FPSCR	55 -#define REG_FPUL	56 - -/* - * This struct defines the way the registers are stored on the - * kernel stack during a system call or other kernel entry. - */ -struct pt_regs { -	unsigned long regs[16]; -	unsigned long pc; -	unsigned long pr; -	unsigned long sr; -	unsigned long gbr; -	unsigned long mach; -	unsigned long macl; -	long tra; -}; - -/* - * This struct defines the way the DSP registers are stored on the - * kernel stack during a system call or other kernel entry. - */ -struct pt_dspregs { -	unsigned long	a1; -	unsigned long	a0g; -	unsigned long	a1g; -	unsigned long	m0; -	unsigned long	m1; -	unsigned long	a0; -	unsigned long	x0; -	unsigned long	x1; -	unsigned long	y0; -	unsigned long	y1; -	unsigned long	dsr; -	unsigned long	rs; -	unsigned long	re; -	unsigned long	mod; -}; - -#ifdef __KERNEL__  #define MAX_REG_OFFSET		offsetof(struct pt_regs, tra) -#define regs_return_value(regs)	((regs)->regs[0]) - -#endif /* __KERNEL__ */ +static inline long regs_return_value(struct pt_regs *regs) +{ +	return regs->regs[0]; +}  #endif /* __ASM_SH_PTRACE_32_H */ diff --git a/arch/sh/include/asm/ptrace_64.h b/arch/sh/include/asm/ptrace_64.h index d43c1cb0bbe..97f4b5660f2 100644 --- a/arch/sh/include/asm/ptrace_64.h +++ b/arch/sh/include/asm/ptrace_64.h @@ -1,20 +1,13 @@  #ifndef __ASM_SH_PTRACE_64_H  #define __ASM_SH_PTRACE_64_H -struct pt_regs { -	unsigned long long pc; -	unsigned long long sr; -	long long syscall_nr; -	unsigned long long regs[63]; -	unsigned long long tregs[8]; -	unsigned long long pad[2]; -}; +#include <uapi/asm/ptrace_64.h> -#ifdef __KERNEL__  #define MAX_REG_OFFSET		offsetof(struct pt_regs, tregs[7]) -#define regs_return_value(regs)	((regs)->regs[3]) - -#endif /* __KERNEL__ */ +static inline long regs_return_value(struct pt_regs *regs) +{ +	return regs->regs[3]; +}  #endif /* __ASM_SH_PTRACE_64_H */ diff --git a/arch/sh/include/asm/resource.h b/arch/sh/include/asm/resource.h deleted file mode 100644 index 9c2499a86ec..00000000000 --- a/arch/sh/include/asm/resource.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_SH_RESOURCE_H -#define __ASM_SH_RESOURCE_H - -#include <asm-generic/resource.h> - -#endif /* __ASM_SH_RESOURCE_H */ diff --git a/arch/sh/include/asm/rwsem.h b/arch/sh/include/asm/rwsem.h index 06e2251a5e4..edab5726529 100644 --- a/arch/sh/include/asm/rwsem.h +++ b/arch/sh/include/asm/rwsem.h @@ -11,64 +11,13 @@  #endif  #ifdef __KERNEL__ -#include <linux/list.h> -#include <linux/spinlock.h> -#include <asm/atomic.h> -#include <asm/system.h> -/* - * the semaphore definition - */ -struct rw_semaphore { -	long		count;  #define RWSEM_UNLOCKED_VALUE		0x00000000  #define RWSEM_ACTIVE_BIAS		0x00000001  #define RWSEM_ACTIVE_MASK		0x0000ffff  #define RWSEM_WAITING_BIAS		(-0x00010000)  #define RWSEM_ACTIVE_READ_BIAS		RWSEM_ACTIVE_BIAS  #define RWSEM_ACTIVE_WRITE_BIAS		(RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) -	spinlock_t		wait_lock; -	struct list_head	wait_list; -#ifdef CONFIG_DEBUG_LOCK_ALLOC -	struct lockdep_map	dep_map; -#endif -}; - -#ifdef CONFIG_DEBUG_LOCK_ALLOC -# define __RWSEM_DEP_MAP_INIT(lockname) , .dep_map = { .name = #lockname } -#else -# define __RWSEM_DEP_MAP_INIT(lockname) -#endif - -#define __RWSEM_INITIALIZER(name) \ -	{ RWSEM_UNLOCKED_VALUE, __SPIN_LOCK_UNLOCKED((name).wait_lock), \ -	  LIST_HEAD_INIT((name).wait_list) \ -	  __RWSEM_DEP_MAP_INIT(name) } - -#define DECLARE_RWSEM(name)		\ -	struct rw_semaphore name = __RWSEM_INITIALIZER(name) - -extern struct rw_semaphore *rwsem_down_read_failed(struct rw_semaphore *sem); -extern struct rw_semaphore *rwsem_down_write_failed(struct rw_semaphore *sem); -extern struct rw_semaphore *rwsem_wake(struct rw_semaphore *sem); -extern struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem); - -extern void __init_rwsem(struct rw_semaphore *sem, const char *name, -			 struct lock_class_key *key); - -#define init_rwsem(sem)				\ -do {						\ -	static struct lock_class_key __key;	\ -						\ -	__init_rwsem((sem), #sem, &__key);	\ -} while (0) - -static inline void init_rwsem(struct rw_semaphore *sem) -{ -	sem->count = RWSEM_UNLOCKED_VALUE; -	spin_lock_init(&sem->wait_lock); -	INIT_LIST_HEAD(&sem->wait_list); -}  /*   * lock for reading @@ -179,10 +128,5 @@ static inline int rwsem_atomic_update(int delta, struct rw_semaphore *sem)  	return atomic_add_return(delta, (atomic_t *)(&sem->count));  } -static inline int rwsem_is_locked(struct rw_semaphore *sem) -{ -	return (sem->count != 0); -} -  #endif /* __KERNEL__ */  #endif /* _ASM_SH_RWSEM_H */ diff --git a/arch/sh/include/asm/scatterlist.h b/arch/sh/include/asm/scatterlist.h deleted file mode 100644 index 98dfc3510f1..00000000000 --- a/arch/sh/include/asm/scatterlist.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_SH_SCATTERLIST_H -#define __ASM_SH_SCATTERLIST_H - -#include <asm-generic/scatterlist.h> - -#endif /* __ASM_SH_SCATTERLIST_H */ diff --git a/arch/sh/include/asm/sections.h b/arch/sh/include/asm/sections.h index a78701da775..1b6199740e9 100644 --- a/arch/sh/include/asm/sections.h +++ b/arch/sh/include/asm/sections.h @@ -3,10 +3,9 @@  #include <asm-generic/sections.h> -extern void __nosave_begin, __nosave_end; +extern long __nosave_begin, __nosave_end;  extern long __machvec_start, __machvec_end;  extern char __uncached_start, __uncached_end; -extern char _ebss[];  extern char __start_eh_frame[], __stop_eh_frame[];  #endif /* __ASM_SH_SECTIONS_H */ diff --git a/arch/sh/include/asm/sembuf.h b/arch/sh/include/asm/sembuf.h deleted file mode 100644 index 7673b83cfef..00000000000 --- a/arch/sh/include/asm/sembuf.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/sembuf.h> diff --git a/arch/sh/include/asm/serial.h b/arch/sh/include/asm/serial.h deleted file mode 100644 index a0cb0caff15..00000000000 --- a/arch/sh/include/asm/serial.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/serial.h> diff --git a/arch/sh/include/asm/setup.h b/arch/sh/include/asm/setup.h index 01fa17a3d75..99238108e7a 100644 --- a/arch/sh/include/asm/setup.h +++ b/arch/sh/include/asm/setup.h @@ -1,9 +1,8 @@  #ifndef _SH_SETUP_H  #define _SH_SETUP_H -#include <asm-generic/setup.h> +#include <uapi/asm/setup.h> -#ifdef __KERNEL__  /*   * This is set up by the setup-routine at boot-time   */ @@ -20,7 +19,6 @@  void sh_mv_setup(void);  void check_for_initrd(void); - -#endif /* __KERNEL__ */ +void per_cpu_trap_init(void);  #endif /* _SH_SETUP_H */ diff --git a/arch/sh/include/asm/sh_eth.h b/arch/sh/include/asm/sh_eth.h deleted file mode 100644 index f739061e2ee..00000000000 --- a/arch/sh/include/asm/sh_eth.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __ASM_SH_ETH_H__ -#define __ASM_SH_ETH_H__ - -enum {EDMAC_LITTLE_ENDIAN, EDMAC_BIG_ENDIAN}; - -struct sh_eth_plat_data { -	int phy; -	int edmac_endian; - -	unsigned char mac_addr[6]; -	unsigned no_ether_link:1; -	unsigned ether_link_active_low:1; -}; - -#endif diff --git a/arch/sh/include/asm/shmbuf.h b/arch/sh/include/asm/shmbuf.h deleted file mode 100644 index 83c05fc2de3..00000000000 --- a/arch/sh/include/asm/shmbuf.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/shmbuf.h> diff --git a/arch/sh/include/asm/siginfo.h b/arch/sh/include/asm/siginfo.h deleted file mode 100644 index 813040ed68a..00000000000 --- a/arch/sh/include/asm/siginfo.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_SH_SIGINFO_H -#define __ASM_SH_SIGINFO_H - -#include <asm-generic/siginfo.h> - -#endif /* __ASM_SH_SIGINFO_H */ diff --git a/arch/sh/include/asm/siu.h b/arch/sh/include/asm/siu.h index 1d95c78808d..580b7ac228b 100644 --- a/arch/sh/include/asm/siu.h +++ b/arch/sh/include/asm/siu.h @@ -14,7 +14,6 @@  struct device;  struct siu_platform { -	struct device *dma_dev;  	unsigned int dma_slave_tx_a;  	unsigned int dma_slave_rx_a;  	unsigned int dma_slave_tx_b; diff --git a/arch/sh/include/asm/sizes.h b/arch/sh/include/asm/sizes.h deleted file mode 100644 index 0b9fe2d5c36..00000000000 --- a/arch/sh/include/asm/sizes.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ -/* DO NOT EDIT!! - this file automatically generated - *                 from .s file by awk -f s2h.awk - */ -/*  Size definitions - *  Copyright (C) ARM Limited 1998. All rights reserved. - */ - -#ifndef __sizes_h -#define __sizes_h                       1 - -/* handy sizes */ -#define SZ_16				0x00000010 -#define SZ_32				0x00000020 -#define SZ_64				0x00000040 -#define SZ_128				0x00000080 -#define SZ_256				0x00000100 -#define SZ_512				0x00000200 - -#define SZ_1K                           0x00000400 -#define SZ_2K                           0x00000800 -#define SZ_4K                           0x00001000 -#define SZ_8K                           0x00002000 -#define SZ_16K                          0x00004000 -#define SZ_32K				0x00008000 -#define SZ_64K                          0x00010000 -#define SZ_128K                         0x00020000 -#define SZ_256K                         0x00040000 -#define SZ_512K                         0x00080000 - -#define SZ_1M                           0x00100000 -#define SZ_2M                           0x00200000 -#define SZ_4M                           0x00400000 -#define SZ_8M                           0x00800000 -#define SZ_16M                          0x01000000 -#define SZ_26M				0x01a00000 -#define SZ_32M                          0x02000000 -#define SZ_64M                          0x04000000 -#define SZ_128M                         0x08000000 -#define SZ_256M                         0x10000000 -#define SZ_512M                         0x20000000 - -#define SZ_1G                           0x40000000 -#define SZ_2G                           0x80000000 - -#endif - -/*         END */ diff --git a/arch/sh/include/asm/smp.h b/arch/sh/include/asm/smp.h index 9070d943ddd..78b0d0f4b24 100644 --- a/arch/sh/include/asm/smp.h +++ b/arch/sh/include/asm/smp.h @@ -8,7 +8,7 @@  #ifdef CONFIG_SMP  #include <linux/spinlock.h> -#include <asm/atomic.h> +#include <linux/atomic.h>  #include <asm/current.h>  #include <asm/percpu.h> diff --git a/arch/sh/include/asm/socket.h b/arch/sh/include/asm/socket.h deleted file mode 100644 index 6b71384b9d8..00000000000 --- a/arch/sh/include/asm/socket.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/socket.h> diff --git a/arch/sh/include/asm/stackprotector.h b/arch/sh/include/asm/stackprotector.h new file mode 100644 index 00000000000..d9df3a76847 --- /dev/null +++ b/arch/sh/include/asm/stackprotector.h @@ -0,0 +1,27 @@ +#ifndef __ASM_SH_STACKPROTECTOR_H +#define __ASM_SH_STACKPROTECTOR_H + +#include <linux/random.h> +#include <linux/version.h> + +extern unsigned long __stack_chk_guard; + +/* + * Initialize the stackprotector canary value. + * + * NOTE: this must only be called from functions that never return, + * and it must always be inlined. + */ +static __always_inline void boot_init_stack_canary(void) +{ +	unsigned long canary; + +	/* Try to get a semi random initial value. */ +	get_random_bytes(&canary, sizeof(canary)); +	canary ^= LINUX_VERSION_CODE; + +	current->stack_canary = canary; +	__stack_chk_guard = current->stack_canary; +} + +#endif /* __ASM_SH_STACKPROTECTOR_H */ diff --git a/arch/sh/include/asm/stacktrace.h b/arch/sh/include/asm/stacktrace.h index 79701821371..a7e2d4dfd08 100644 --- a/arch/sh/include/asm/stacktrace.h +++ b/arch/sh/include/asm/stacktrace.h @@ -10,9 +10,6 @@  /* Generic stack tracer with callbacks */  struct stacktrace_ops { -	void (*warning)(void *data, char *msg); -	/* msg must contain %s for the symbol */ -	void (*warning_symbol)(void *data, char *msg, unsigned long symbol);  	void (*address)(void *data, unsigned long address, int reliable);  	/* On negative return stop dumping */  	int (*stack)(void *data, char *name); diff --git a/arch/sh/include/asm/statfs.h b/arch/sh/include/asm/statfs.h deleted file mode 100644 index 9202a023328..00000000000 --- a/arch/sh/include/asm/statfs.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_SH_STATFS_H -#define __ASM_SH_STATFS_H - -#include <asm-generic/statfs.h> - -#endif /* __ASM_SH_STATFS_H */ diff --git a/arch/sh/include/asm/string.h b/arch/sh/include/asm/string.h index 8c1ea21dc0a..114011fa08a 100644 --- a/arch/sh/include/asm/string.h +++ b/arch/sh/include/asm/string.h @@ -1,5 +1,5 @@  #ifdef CONFIG_SUPERH32 -# include "string_32.h" +# include <asm/string_32.h>  #else -# include "string_64.h" +# include <asm/string_64.h>  #endif diff --git a/arch/sh/include/asm/suspend.h b/arch/sh/include/asm/suspend.h index 64eb41a063e..70ae0b2888a 100644 --- a/arch/sh/include/asm/suspend.h +++ b/arch/sh/include/asm/suspend.h @@ -3,7 +3,6 @@  #ifndef __ASSEMBLY__  #include <linux/notifier.h> -static inline int arch_prepare_suspend(void) { return 0; }  #include <asm/ptrace.h> @@ -15,9 +14,9 @@ struct swsusp_arch_regs {  void sh_mobile_call_standby(unsigned long mode);  #ifdef CONFIG_CPU_IDLE -void sh_mobile_setup_cpuidle(void); +int sh_mobile_setup_cpuidle(void);  #else -static inline void sh_mobile_setup_cpuidle(void) {} +static inline int sh_mobile_setup_cpuidle(void) { return 0; }  #endif  /* notifier chains for pre/post sleep hooks */ diff --git a/arch/sh/include/asm/switch_to.h b/arch/sh/include/asm/switch_to.h new file mode 100644 index 00000000000..bcd722fc834 --- /dev/null +++ b/arch/sh/include/asm/switch_to.h @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2000, 2001  Paolo Alberelli + * Copyright (C) 2003  Paul Mundt + * Copyright (C) 2004  Richard Curnow + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#ifndef __ASM_SH_SWITCH_TO_H +#define __ASM_SH_SWITCH_TO_H + +#ifdef CONFIG_SUPERH32 +# include <asm/switch_to_32.h> +#else +# include <asm/switch_to_64.h> +#endif + +#endif /* __ASM_SH_SWITCH_TO_H */ diff --git a/arch/sh/include/asm/system_32.h b/arch/sh/include/asm/switch_to_32.h index a4ad1cd9bc4..0c065513e7a 100644 --- a/arch/sh/include/asm/system_32.h +++ b/arch/sh/include/asm/switch_to_32.h @@ -1,8 +1,5 @@ -#ifndef __ASM_SH_SYSTEM_32_H -#define __ASM_SH_SYSTEM_32_H - -#include <linux/types.h> -#include <asm/mmu.h> +#ifndef __ASM_SH_SWITCH_TO_32_H +#define __ASM_SH_SWITCH_TO_32_H  #ifdef CONFIG_SH_DSP @@ -32,7 +29,6 @@ do {									\  		: : "r" (__ts2));					\  } while (0) -  #define __save_dsp(tsk)							\  do {									\  	register u32 *__ts2 __asm__ ("r2") =				\ @@ -64,16 +60,6 @@ do {									\  #define __restore_dsp(tsk)	do { } while (0)  #endif -#if defined(CONFIG_CPU_SH4A) -#define __icbi(addr)	__asm__ __volatile__ ( "icbi @%0\n\t" : : "r" (addr)) -#else -#define __icbi(addr)	mb() -#endif - -#define __ocbp(addr)	__asm__ __volatile__ ( "ocbp @%0\n\t" : : "r" (addr)) -#define __ocbi(addr)	__asm__ __volatile__ ( "ocbi @%0\n\t" : : "r" (addr)) -#define __ocbwb(addr)	__asm__ __volatile__ ( "ocbwb @%0\n\t" : : "r" (addr)) -  struct task_struct *__switch_to(struct task_struct *prev,  				struct task_struct *next); @@ -145,92 +131,4 @@ do {								\  		__restore_dsp(prev);				\  } while (0) -#ifdef CONFIG_CPU_HAS_SR_RB -#define lookup_exception_vector()	\ -({					\ -	unsigned long _vec;		\ -					\ -	__asm__ __volatile__ (		\ -		"stc r2_bank, %0\n\t"	\ -		: "=r" (_vec)		\ -	);				\ -					\ -	_vec;				\ -}) -#else -#define lookup_exception_vector()	\ -({					\ -	unsigned long _vec;		\ -	__asm__ __volatile__ (		\ -		"mov r4, %0\n\t"	\ -		: "=r" (_vec)		\ -	);				\ -					\ -	_vec;				\ -}) -#endif - -static inline reg_size_t register_align(void *val) -{ -	return (unsigned long)(signed long)val; -} - -int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs, -			    struct mem_access *ma, int, unsigned long address); - -static inline void trigger_address_error(void) -{ -	__asm__ __volatile__ ( -		"ldc %0, sr\n\t" -		"mov.l @%1, %0" -		: -		: "r" (0x10000000), "r" (0x80000001) -	); -} - -asmlinkage void do_address_error(struct pt_regs *regs, -				 unsigned long writeaccess, -				 unsigned long address); -asmlinkage void do_divide_error(unsigned long r4, unsigned long r5, -				unsigned long r6, unsigned long r7, -				struct pt_regs __regs); -asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5, -				unsigned long r6, unsigned long r7, -				struct pt_regs __regs); -asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5, -				unsigned long r6, unsigned long r7, -				struct pt_regs __regs); -asmlinkage void do_exception_error(unsigned long r4, unsigned long r5, -				   unsigned long r6, unsigned long r7, -				   struct pt_regs __regs); - -static inline void set_bl_bit(void) -{ -	unsigned long __dummy0, __dummy1; - -	__asm__ __volatile__ ( -		"stc	sr, %0\n\t" -		"or	%2, %0\n\t" -		"and	%3, %0\n\t" -		"ldc	%0, sr\n\t" -		: "=&r" (__dummy0), "=r" (__dummy1) -		: "r" (0x10000000), "r" (0xffffff0f) -		: "memory" -	); -} - -static inline void clear_bl_bit(void) -{ -	unsigned long __dummy0, __dummy1; - -	__asm__ __volatile__ ( -		"stc	sr, %0\n\t" -		"and	%2, %0\n\t" -		"ldc	%0, sr\n\t" -		: "=&r" (__dummy0), "=r" (__dummy1) -		: "1" (~0x10000000) -		: "memory" -	); -} - -#endif /* __ASM_SH_SYSTEM_32_H */ +#endif /* __ASM_SH_SWITCH_TO_32_H */ diff --git a/arch/sh/include/asm/switch_to_64.h b/arch/sh/include/asm/switch_to_64.h new file mode 100644 index 00000000000..ba3129d6bc2 --- /dev/null +++ b/arch/sh/include/asm/switch_to_64.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2000, 2001  Paolo Alberelli + * Copyright (C) 2003  Paul Mundt + * Copyright (C) 2004  Richard Curnow + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#ifndef __ASM_SH_SWITCH_TO_64_H +#define __ASM_SH_SWITCH_TO_64_H + +struct thread_struct; +struct task_struct; + +/* + *	switch_to() should switch tasks to task nr n, first + */ +struct task_struct *sh64_switch_to(struct task_struct *prev, +				   struct thread_struct *prev_thread, +				   struct task_struct *next, +				   struct thread_struct *next_thread); + +#define switch_to(prev,next,last)				\ +do {								\ +	if (last_task_used_math != next) {			\ +		struct pt_regs *regs = next->thread.uregs;	\ +		if (regs) regs->sr |= SR_FD;			\ +	}							\ +	last = sh64_switch_to(prev, &prev->thread, next,	\ +			      &next->thread);			\ +} while (0) + + +#endif /* __ASM_SH_SWITCH_TO_64_H */ diff --git a/arch/sh/include/asm/syscall.h b/arch/sh/include/asm/syscall.h index aa7777bdc37..847128da6ea 100644 --- a/arch/sh/include/asm/syscall.h +++ b/arch/sh/include/asm/syscall.h @@ -4,9 +4,9 @@  extern const unsigned long sys_call_table[];  #ifdef CONFIG_SUPERH32 -# include "syscall_32.h" +# include <asm/syscall_32.h>  #else -# include "syscall_64.h" +# include <asm/syscall_64.h>  #endif  #endif /* __ASM_SH_SYSCALL_H */ diff --git a/arch/sh/include/asm/syscalls.h b/arch/sh/include/asm/syscalls.h index 507725af2e5..3dbfef06f6b 100644 --- a/arch/sh/include/asm/syscalls.h +++ b/arch/sh/include/asm/syscalls.h @@ -11,9 +11,9 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,  			  unsigned long fd, unsigned long pgoff);  #ifdef CONFIG_SUPERH32 -# include "syscalls_32.h" +# include <asm/syscalls_32.h>  #else -# include "syscalls_64.h" +# include <asm/syscalls_64.h>  #endif  #endif /* __KERNEL__ */ diff --git a/arch/sh/include/asm/syscalls_32.h b/arch/sh/include/asm/syscalls_32.h index ae717e3c26d..4f643aa718e 100644 --- a/arch/sh/include/asm/syscalls_32.h +++ b/arch/sh/include/asm/syscalls_32.h @@ -9,37 +9,9 @@  struct pt_regs; -asmlinkage int sys_fork(unsigned long r4, unsigned long r5, -			unsigned long r6, unsigned long r7, -			struct pt_regs __regs); -asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, -			 unsigned long parent_tidptr, -			 unsigned long child_tidptr, -			 struct pt_regs __regs); -asmlinkage int sys_vfork(unsigned long r4, unsigned long r5, -			 unsigned long r6, unsigned long r7, -			 struct pt_regs __regs); -asmlinkage int sys_execve(const char __user *ufilename, -			  const char __user *const __user *uargv, -			  const char __user *const __user *uenvp, -			  unsigned long r7, struct pt_regs __regs); -asmlinkage int sys_sigsuspend(old_sigset_t mask, unsigned long r5, -			      unsigned long r6, unsigned long r7, -			      struct pt_regs __regs); -asmlinkage int sys_sigaction(int sig, const struct old_sigaction __user *act, -			     struct old_sigaction __user *oact); -asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, -			       unsigned long r6, unsigned long r7, -			       struct pt_regs __regs); -asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5, -			     unsigned long r6, unsigned long r7, -			     struct pt_regs __regs); -asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5, -				unsigned long r6, unsigned long r7, -				struct pt_regs __regs); -asmlinkage int sys_sh_pipe(unsigned long r4, unsigned long r5, -			   unsigned long r6, unsigned long r7, -			   struct pt_regs __regs); +asmlinkage int sys_sigreturn(void); +asmlinkage int sys_rt_sigreturn(void); +asmlinkage int sys_sh_pipe(void);  asmlinkage ssize_t sys_pread_wrapper(unsigned int fd, char __user *buf,  				     size_t count, long dummy, loff_t pos);  asmlinkage ssize_t sys_pwrite_wrapper(unsigned int fd, const char __user *buf, diff --git a/arch/sh/include/asm/syscalls_64.h b/arch/sh/include/asm/syscalls_64.h index ee519f41d95..d62e8eb22f7 100644 --- a/arch/sh/include/asm/syscalls_64.h +++ b/arch/sh/include/asm/syscalls_64.h @@ -9,23 +9,6 @@  struct pt_regs; -asmlinkage int sys_fork(unsigned long r2, unsigned long r3, -			unsigned long r4, unsigned long r5, -			unsigned long r6, unsigned long r7, -			struct pt_regs *pregs); -asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, -			 unsigned long r4, unsigned long r5, -			 unsigned long r6, unsigned long r7, -			 struct pt_regs *pregs); -asmlinkage int sys_vfork(unsigned long r2, unsigned long r3, -			 unsigned long r4, unsigned long r5, -			 unsigned long r6, unsigned long r7, -			 struct pt_regs *pregs); -asmlinkage int sys_execve(const char *ufilename, char **uargv, -			  char **uenvp, unsigned long r5, -			  unsigned long r6, unsigned long r7, -			  struct pt_regs *pregs); -  /* Misc syscall related bits */  asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs);  asmlinkage void do_syscall_trace_leave(struct pt_regs *regs); diff --git a/arch/sh/include/asm/system.h b/arch/sh/include/asm/system.h deleted file mode 100644 index 10c8b1823a1..00000000000 --- a/arch/sh/include/asm/system.h +++ /dev/null @@ -1,184 +0,0 @@ -#ifndef __ASM_SH_SYSTEM_H -#define __ASM_SH_SYSTEM_H - -/* - * Copyright (C) 1999, 2000  Niibe Yutaka  &  Kaz Kojima - * Copyright (C) 2002 Paul Mundt - */ - -#include <linux/irqflags.h> -#include <linux/compiler.h> -#include <linux/linkage.h> -#include <asm/types.h> -#include <asm/uncached.h> - -#define AT_VECTOR_SIZE_ARCH 5 /* entries in ARCH_DLINFO */ - -/* - * A brief note on ctrl_barrier(), the control register write barrier. - * - * Legacy SH cores typically require a sequence of 8 nops after - * modification of a control register in order for the changes to take - * effect. On newer cores (like the sh4a and sh5) this is accomplished - * with icbi. - * - * Also note that on sh4a in the icbi case we can forego a synco for the - * write barrier, as it's not necessary for control registers. - * - * Historically we have only done this type of barrier for the MMUCR, but - * it's also necessary for the CCR, so we make it generic here instead. - */ -#if defined(CONFIG_CPU_SH4A) || defined(CONFIG_CPU_SH5) -#define mb()		__asm__ __volatile__ ("synco": : :"memory") -#define rmb()		mb() -#define wmb()		__asm__ __volatile__ ("synco": : :"memory") -#define ctrl_barrier()	__icbi(PAGE_OFFSET) -#define read_barrier_depends()	do { } while(0) -#else -#define mb()		__asm__ __volatile__ ("": : :"memory") -#define rmb()		mb() -#define wmb()		__asm__ __volatile__ ("": : :"memory") -#define ctrl_barrier()	__asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop") -#define read_barrier_depends()	do { } while(0) -#endif - -#ifdef CONFIG_SMP -#define smp_mb()	mb() -#define smp_rmb()	rmb() -#define smp_wmb()	wmb() -#define smp_read_barrier_depends()	read_barrier_depends() -#else -#define smp_mb()	barrier() -#define smp_rmb()	barrier() -#define smp_wmb()	barrier() -#define smp_read_barrier_depends()	do { } while(0) -#endif - -#define set_mb(var, value) do { (void)xchg(&var, value); } while (0) - -#ifdef CONFIG_GUSA_RB -#include <asm/cmpxchg-grb.h> -#elif defined(CONFIG_CPU_SH4A) -#include <asm/cmpxchg-llsc.h> -#else -#include <asm/cmpxchg-irq.h> -#endif - -extern void __xchg_called_with_bad_pointer(void); - -#define __xchg(ptr, x, size)				\ -({							\ -	unsigned long __xchg__res;			\ -	volatile void *__xchg_ptr = (ptr);		\ -	switch (size) {					\ -	case 4:						\ -		__xchg__res = xchg_u32(__xchg_ptr, x);	\ -		break;					\ -	case 1:						\ -		__xchg__res = xchg_u8(__xchg_ptr, x);	\ -		break;					\ -	default:					\ -		__xchg_called_with_bad_pointer();	\ -		__xchg__res = x;			\ -		break;					\ -	}						\ -							\ -	__xchg__res;					\ -}) - -#define xchg(ptr,x)	\ -	((__typeof__(*(ptr)))__xchg((ptr),(unsigned long)(x), sizeof(*(ptr)))) - -/* This function doesn't exist, so you'll get a linker error - * if something tries to do an invalid cmpxchg(). */ -extern void __cmpxchg_called_with_bad_pointer(void); - -#define __HAVE_ARCH_CMPXCHG 1 - -static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old, -		unsigned long new, int size) -{ -	switch (size) { -	case 4: -		return __cmpxchg_u32(ptr, old, new); -	} -	__cmpxchg_called_with_bad_pointer(); -	return old; -} - -#define cmpxchg(ptr,o,n)						 \ -  ({									 \ -     __typeof__(*(ptr)) _o_ = (o);					 \ -     __typeof__(*(ptr)) _n_ = (n);					 \ -     (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_,		 \ -				    (unsigned long)_n_, sizeof(*(ptr))); \ -  }) - -struct pt_regs; - -extern void die(const char *str, struct pt_regs *regs, long err) __attribute__ ((noreturn)); -void free_initmem(void); -void free_initrd_mem(unsigned long start, unsigned long end); - -extern void *set_exception_table_vec(unsigned int vec, void *handler); - -static inline void *set_exception_table_evt(unsigned int evt, void *handler) -{ -	return set_exception_table_vec(evt >> 5, handler); -} - -/* - * SH-2A has both 16 and 32-bit opcodes, do lame encoding checks. - */ -#ifdef CONFIG_CPU_SH2A -extern unsigned int instruction_size(unsigned int insn); -#elif defined(CONFIG_SUPERH32) -#define instruction_size(insn)	(2) -#else -#define instruction_size(insn)	(4) -#endif - -void per_cpu_trap_init(void); -void default_idle(void); -void cpu_idle_wait(void); -void stop_this_cpu(void *); - -#ifdef CONFIG_SUPERH32 -#define BUILD_TRAP_HANDLER(name)					\ -asmlinkage void name##_trap_handler(unsigned long r4, unsigned long r5,	\ -				    unsigned long r6, unsigned long r7,	\ -				    struct pt_regs __regs) - -#define TRAP_HANDLER_DECL				\ -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);	\ -	unsigned int vec = regs->tra;			\ -	(void)vec; -#else -#define BUILD_TRAP_HANDLER(name)	\ -asmlinkage void name##_trap_handler(unsigned int vec, struct pt_regs *regs) -#define TRAP_HANDLER_DECL -#endif - -BUILD_TRAP_HANDLER(address_error); -BUILD_TRAP_HANDLER(debug); -BUILD_TRAP_HANDLER(bug); -BUILD_TRAP_HANDLER(breakpoint); -BUILD_TRAP_HANDLER(singlestep); -BUILD_TRAP_HANDLER(fpu_error); -BUILD_TRAP_HANDLER(fpu_state_restore); -BUILD_TRAP_HANDLER(nmi); - -#define arch_align_stack(x) (x) - -struct mem_access { -	unsigned long (*from)(void *dst, const void __user *src, unsigned long cnt); -	unsigned long (*to)(void __user *dst, const void *src, unsigned long cnt); -}; - -#ifdef CONFIG_SUPERH32 -# include "system_32.h" -#else -# include "system_64.h" -#endif - -#endif diff --git a/arch/sh/include/asm/system_64.h b/arch/sh/include/asm/system_64.h deleted file mode 100644 index 8593bc8d1a4..00000000000 --- a/arch/sh/include/asm/system_64.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef __ASM_SH_SYSTEM_64_H -#define __ASM_SH_SYSTEM_64_H - -/* - * include/asm-sh/system_64.h - * - * Copyright (C) 2000, 2001  Paolo Alberelli - * Copyright (C) 2003  Paul Mundt - * Copyright (C) 2004  Richard Curnow - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#include <cpu/registers.h> -#include <asm/processor.h> - -/* - *	switch_to() should switch tasks to task nr n, first - */ -struct thread_struct; -struct task_struct *sh64_switch_to(struct task_struct *prev, -				   struct thread_struct *prev_thread, -				   struct task_struct *next, -				   struct thread_struct *next_thread); - -#define switch_to(prev,next,last)				\ -do {								\ -	if (last_task_used_math != next) {			\ -		struct pt_regs *regs = next->thread.uregs;	\ -		if (regs) regs->sr |= SR_FD;			\ -	}							\ -	last = sh64_switch_to(prev, &prev->thread, next,	\ -			      &next->thread);			\ -} while (0) - -#define __icbi(addr)	__asm__ __volatile__ ( "icbi %0, 0\n\t" : : "r" (addr)) -#define __ocbp(addr)	__asm__ __volatile__ ( "ocbp %0, 0\n\t" : : "r" (addr)) -#define __ocbi(addr)	__asm__ __volatile__ ( "ocbi %0, 0\n\t" : : "r" (addr)) -#define __ocbwb(addr)	__asm__ __volatile__ ( "ocbwb %0, 0\n\t" : : "r" (addr)) - -static inline reg_size_t register_align(void *val) -{ -	return (unsigned long long)(signed long long)(signed long)val; -} - -extern void phys_stext(void); - -static inline void trigger_address_error(void) -{ -	phys_stext(); -} - -#define SR_BL_LL	0x0000000010000000LL - -static inline void set_bl_bit(void) -{ -	unsigned long long __dummy0, __dummy1 = SR_BL_LL; - -	__asm__ __volatile__("getcon	" __SR ", %0\n\t" -			     "or	%0, %1, %0\n\t" -			     "putcon	%0, " __SR "\n\t" -			     : "=&r" (__dummy0) -			     : "r" (__dummy1)); - -} - -static inline void clear_bl_bit(void) -{ -	unsigned long long __dummy0, __dummy1 = ~SR_BL_LL; - -	__asm__ __volatile__("getcon	" __SR ", %0\n\t" -			     "and	%0, %1, %0\n\t" -			     "putcon	%0, " __SR "\n\t" -			     : "=&r" (__dummy0) -			     : "r" (__dummy1)); -} - -#endif /* __ASM_SH_SYSTEM_64_H */ diff --git a/arch/sh/include/asm/termbits.h b/arch/sh/include/asm/termbits.h deleted file mode 100644 index 3935b106de7..00000000000 --- a/arch/sh/include/asm/termbits.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/termbits.h> diff --git a/arch/sh/include/asm/termios.h b/arch/sh/include/asm/termios.h deleted file mode 100644 index 280d78a9d96..00000000000 --- a/arch/sh/include/asm/termios.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/termios.h> diff --git a/arch/sh/include/asm/thread_info.h b/arch/sh/include/asm/thread_info.h index c228946926e..ad27ffa65e2 100644 --- a/arch/sh/include/asm/thread_info.h +++ b/arch/sh/include/asm/thread_info.h @@ -10,8 +10,18 @@   *  - Incorporating suggestions made by Linus Torvalds and Dave Miller   */  #ifdef __KERNEL__ +  #include <asm/page.h> +/* + * Page fault error code bits + */ +#define FAULT_CODE_WRITE	(1 << 0)	/* write access */ +#define FAULT_CODE_INITIAL	(1 << 1)	/* initial page write */ +#define FAULT_CODE_ITLB		(1 << 2)	/* ITLB miss */ +#define FAULT_CODE_PROT		(1 << 3)	/* protection fault */ +#define FAULT_CODE_USER		(1 << 4)	/* user-mode access */ +  #ifndef __ASSEMBLY__  #include <asm/processor.h> @@ -31,8 +41,6 @@ struct thread_info {  #endif -#define PREEMPT_ACTIVE		0x10000000 -  #if defined(CONFIG_4KSTACKS)  #define THREAD_SHIFT	12  #else @@ -88,29 +96,23 @@ static inline struct thread_info *current_thread_info(void)  	return ti;  } -/* thread information allocation */ -#if THREAD_SHIFT >= PAGE_SHIFT -  #define THREAD_SIZE_ORDER	(THREAD_SHIFT - PAGE_SHIFT) -#endif - -extern struct thread_info *alloc_thread_info(struct task_struct *tsk); -extern void free_thread_info(struct thread_info *ti);  extern void arch_task_cache_init(void); -#define arch_task_cache_init arch_task_cache_init  extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src); +extern void arch_release_task_struct(struct task_struct *tsk);  extern void init_thread_xstate(void); -#define __HAVE_ARCH_THREAD_INFO_ALLOCATOR -  #endif /* __ASSEMBLY__ */  /* - * thread information flags - * - these are process state flags that various assembly files may need to access - * - pending work-to-be-done flags are in LSW - * - other flags in MSW + * Thread information flags + * + * - Limited to 24 bits, upper byte used for fault code encoding. + * + * - _TIF_ALLWORK_MASK and _TIF_WORK_MASK need to fit within 2 bytes, or + *   we blow the tst immediate size constraints and need to fix up + *   arch/sh/kernel/entry-common.S.   */  #define TIF_SYSCALL_TRACE	0	/* syscall trace active */  #define TIF_SIGPENDING		1	/* signal pending */ @@ -122,7 +124,6 @@ extern void init_thread_xstate(void);  #define TIF_SYSCALL_TRACEPOINT	8	/* for ftrace syscall instrumentation */  #define TIF_POLLING_NRFLAG	17	/* true if poll_idle() is polling TIF_NEED_RESCHED */  #define TIF_MEMDIE		18	/* is terminating due to OOM killer */ -#define TIF_FREEZE		19	/* Freezing for suspend */  #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)  #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING) @@ -133,13 +134,6 @@ extern void init_thread_xstate(void);  #define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)  #define _TIF_SYSCALL_TRACEPOINT	(1 << TIF_SYSCALL_TRACEPOINT)  #define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG) -#define _TIF_FREEZE		(1 << TIF_FREEZE) - -/* - * _TIF_ALLWORK_MASK and _TIF_WORK_MASK need to fit within 2 bytes, or we - * blow the tst immediate size constraints and need to fix up - * arch/sh/kernel/entry-common.S. - */  /* work to do in syscall trace */  #define _TIF_WORK_SYSCALL_MASK	(_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ @@ -167,13 +161,50 @@ extern void init_thread_xstate(void);  #define TS_USEDFPU		0x0002	/* FPU used by this task this quantum */  #ifndef __ASSEMBLY__ +  #define HAVE_SET_RESTORE_SIGMASK	1  static inline void set_restore_sigmask(void)  {  	struct thread_info *ti = current_thread_info();  	ti->status |= TS_RESTORE_SIGMASK; -	set_bit(TIF_SIGPENDING, (unsigned long *)&ti->flags); +	WARN_ON(!test_bit(TIF_SIGPENDING, (unsigned long *)&ti->flags));  } + +#define TI_FLAG_FAULT_CODE_SHIFT	24 + +/* + * Additional thread flag encoding + */ +static inline void set_thread_fault_code(unsigned int val) +{ +	struct thread_info *ti = current_thread_info(); +	ti->flags = (ti->flags & (~0 >> (32 - TI_FLAG_FAULT_CODE_SHIFT))) +		| (val << TI_FLAG_FAULT_CODE_SHIFT); +} + +static inline unsigned int get_thread_fault_code(void) +{ +	struct thread_info *ti = current_thread_info(); +	return ti->flags >> TI_FLAG_FAULT_CODE_SHIFT; +} + +static inline void clear_restore_sigmask(void) +{ +	current_thread_info()->status &= ~TS_RESTORE_SIGMASK; +} +static inline bool test_restore_sigmask(void) +{ +	return current_thread_info()->status & TS_RESTORE_SIGMASK; +} +static inline bool test_and_clear_restore_sigmask(void) +{ +	struct thread_info *ti = current_thread_info(); +	if (!(ti->status & TS_RESTORE_SIGMASK)) +		return false; +	ti->status &= ~TS_RESTORE_SIGMASK; +	return true; +} +  #endif	/* !__ASSEMBLY__ */  #endif /* __KERNEL__ */ diff --git a/arch/sh/include/asm/tlb.h b/arch/sh/include/asm/tlb.h index 75abb38dffd..62f80d2a9df 100644 --- a/arch/sh/include/asm/tlb.h +++ b/arch/sh/include/asm/tlb.h @@ -2,13 +2,14 @@  #define __ASM_SH_TLB_H  #ifdef CONFIG_SUPERH64 -# include "tlb_64.h" +# include <asm/tlb_64.h>  #endif  #ifndef __ASSEMBLY__  #include <linux/pagemap.h>  #ifdef CONFIG_MMU +#include <linux/swap.h>  #include <asm/pgalloc.h>  #include <asm/tlbflush.h>  #include <asm/mmu_context.h> @@ -23,8 +24,6 @@ struct mmu_gather {  	unsigned long		start, end;  }; -DECLARE_PER_CPU(struct mmu_gather, mmu_gathers); -  static inline void init_tlb_gather(struct mmu_gather *tlb)  {  	tlb->start = TASK_SIZE; @@ -36,17 +35,15 @@ static inline void init_tlb_gather(struct mmu_gather *tlb)  	}  } -static inline struct mmu_gather * -tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush) +static inline void +tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end)  { -	struct mmu_gather *tlb = &get_cpu_var(mmu_gathers); -  	tlb->mm = mm; -	tlb->fullmm = full_mm_flush; +	tlb->start = start; +	tlb->end = end; +	tlb->fullmm = !(start | (end+1));  	init_tlb_gather(tlb); - -	return tlb;  }  static inline void @@ -57,8 +54,6 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)  	/* keep the page table cache within bounds */  	check_pgt_cache(); - -	put_cpu_var(mmu_gathers);  }  static inline void @@ -91,7 +86,29 @@ tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)  	}  } -#define tlb_remove_page(tlb,page)	free_page_and_swap_cache(page) +static inline void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) +{ +} + +static inline void tlb_flush_mmu_free(struct mmu_gather *tlb) +{ +} + +static inline void tlb_flush_mmu(struct mmu_gather *tlb) +{ +} + +static inline int __tlb_remove_page(struct mmu_gather *tlb, struct page *page) +{ +	free_page_and_swap_cache(page); +	return 1; /* avoid calling tlb_flush_mmu */ +} + +static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) +{ +	__tlb_remove_page(tlb, page); +} +  #define pte_free_tlb(tlb, ptep, addr)	pte_free((tlb)->mm, ptep)  #define pmd_free_tlb(tlb, pmdp, addr)	pmd_free((tlb)->mm, pmdp)  #define pud_free_tlb(tlb, pudp, addr)	pud_free((tlb)->mm, pudp) diff --git a/arch/sh/include/asm/topology.h b/arch/sh/include/asm/topology.h index 88e734069fa..b0a282d65f6 100644 --- a/arch/sh/include/asm/topology.h +++ b/arch/sh/include/asm/topology.h @@ -3,31 +3,6 @@  #ifdef CONFIG_NUMA -/* sched_domains SD_NODE_INIT for sh machines */ -#define SD_NODE_INIT (struct sched_domain) {		\ -	.parent			= NULL,			\ -	.child			= NULL,			\ -	.groups			= NULL,			\ -	.min_interval		= 8,			\ -	.max_interval		= 32,			\ -	.busy_factor		= 32,			\ -	.imbalance_pct		= 125,			\ -	.cache_nice_tries	= 2,			\ -	.busy_idx		= 3,			\ -	.idle_idx		= 2,			\ -	.newidle_idx		= 0,			\ -	.wake_idx		= 0,			\ -	.forkexec_idx		= 0,			\ -	.flags			= SD_LOAD_BALANCE	\ -				| SD_BALANCE_FORK	\ -				| SD_BALANCE_EXEC	\ -				| SD_BALANCE_NEWIDLE	\ -				| SD_SERIALIZE,		\ -	.last_balance		= jiffies,		\ -	.balance_interval	= 1,			\ -	.nr_balance_failed	= 0,			\ -} -  #define cpu_to_node(cpu)	((void)(cpu),0)  #define parent_node(node)	((void)(node),0) diff --git a/arch/sh/include/asm/traps.h b/arch/sh/include/asm/traps.h new file mode 100644 index 00000000000..9cc149a0dbd --- /dev/null +++ b/arch/sh/include/asm/traps.h @@ -0,0 +1,21 @@ +#ifndef __ASM_SH_TRAPS_H +#define __ASM_SH_TRAPS_H + +#include <linux/compiler.h> + +#ifdef CONFIG_SUPERH32 +# include <asm/traps_32.h> +#else +# include <asm/traps_64.h> +#endif + +BUILD_TRAP_HANDLER(address_error); +BUILD_TRAP_HANDLER(debug); +BUILD_TRAP_HANDLER(bug); +BUILD_TRAP_HANDLER(breakpoint); +BUILD_TRAP_HANDLER(singlestep); +BUILD_TRAP_HANDLER(fpu_error); +BUILD_TRAP_HANDLER(fpu_state_restore); +BUILD_TRAP_HANDLER(nmi); + +#endif /* __ASM_SH_TRAPS_H */ diff --git a/arch/sh/include/asm/traps_32.h b/arch/sh/include/asm/traps_32.h new file mode 100644 index 00000000000..17e129fe459 --- /dev/null +++ b/arch/sh/include/asm/traps_32.h @@ -0,0 +1,60 @@ +#ifndef __ASM_SH_TRAPS_32_H +#define __ASM_SH_TRAPS_32_H + +#include <linux/types.h> +#include <asm/mmu.h> + +#ifdef CONFIG_CPU_HAS_SR_RB +#define lookup_exception_vector()	\ +({					\ +	unsigned long _vec;		\ +					\ +	__asm__ __volatile__ (		\ +		"stc r2_bank, %0\n\t"	\ +		: "=r" (_vec)		\ +	);				\ +					\ +	_vec;				\ +}) +#else +#define lookup_exception_vector()	\ +({					\ +	unsigned long _vec;		\ +	__asm__ __volatile__ (		\ +		"mov r4, %0\n\t"	\ +		: "=r" (_vec)		\ +	);				\ +					\ +	_vec;				\ +}) +#endif + +static inline void trigger_address_error(void) +{ +	__asm__ __volatile__ ( +		"ldc %0, sr\n\t" +		"mov.l @%1, %0" +		: +		: "r" (0x10000000), "r" (0x80000001) +	); +} + +asmlinkage void do_address_error(struct pt_regs *regs, +				 unsigned long writeaccess, +				 unsigned long address); +asmlinkage void do_divide_error(unsigned long r4); +asmlinkage void do_reserved_inst(void); +asmlinkage void do_illegal_slot_inst(void); +asmlinkage void do_exception_error(void); + +#define BUILD_TRAP_HANDLER(name)					\ +asmlinkage void name##_trap_handler(unsigned long r4, unsigned long r5,	\ +				    unsigned long r6, unsigned long r7,	\ +				    struct pt_regs __regs) + +#define TRAP_HANDLER_DECL				\ +	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);	\ +	unsigned int vec = regs->tra;			\ +	(void)vec; + +#endif /* __ASM_SH_TRAPS_32_H */ diff --git a/arch/sh/include/asm/traps_64.h b/arch/sh/include/asm/traps_64.h new file mode 100644 index 00000000000..ef5eff91944 --- /dev/null +++ b/arch/sh/include/asm/traps_64.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2000, 2001  Paolo Alberelli + * Copyright (C) 2003  Paul Mundt + * Copyright (C) 2004  Richard Curnow + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#ifndef __ASM_SH_TRAPS_64_H +#define __ASM_SH_TRAPS_64_H + +#include <cpu/registers.h> + +extern void phys_stext(void); + +#define lookup_exception_vector()		\ +({						\ +	unsigned long _vec;			\ +						\ +	__asm__ __volatile__ (			\ +		"getcon " __EXPEVT ", %0\n\t"	\ +		: "=r" (_vec)			\ +	);					\ +						\ +	_vec;					\ +}) + +static inline void trigger_address_error(void) +{ +	phys_stext(); +} + +#define BUILD_TRAP_HANDLER(name)	\ +asmlinkage void name##_trap_handler(unsigned int vec, struct pt_regs *regs) +#define TRAP_HANDLER_DECL + +#endif /* __ASM_SH_TRAPS_64_H */ diff --git a/arch/sh/include/asm/types.h b/arch/sh/include/asm/types.h index f8421f7ad63..6a31053fa5e 100644 --- a/arch/sh/include/asm/types.h +++ b/arch/sh/include/asm/types.h @@ -1,12 +1,11 @@  #ifndef __ASM_SH_TYPES_H  #define __ASM_SH_TYPES_H -#include <asm-generic/types.h> +#include <uapi/asm/types.h>  /*   * These aren't exported outside the kernel to avoid name space clashes   */ -#ifdef __KERNEL__  #ifndef __ASSEMBLY__  #ifdef CONFIG_SUPERH32 @@ -18,6 +17,4 @@ typedef u64 reg_size_t;  #endif  #endif /* __ASSEMBLY__ */ -#endif /* __KERNEL__ */ -  #endif /* __ASM_SH_TYPES_H */ diff --git a/arch/sh/include/asm/uaccess.h b/arch/sh/include/asm/uaccess.h index 075848f43b6..9486376605f 100644 --- a/arch/sh/include/asm/uaccess.h +++ b/arch/sh/include/asm/uaccess.h @@ -25,6 +25,8 @@  	(__chk_user_ptr(addr),		\  	 __access_ok((unsigned long __force)(addr), (size))) +#define user_addr_max()	(current_thread_info()->addr_limit.seg) +  /*   * Uh, these should become the main single-value transfer routines ...   * They automatically use the right size if we just have the right @@ -95,11 +97,16 @@ struct __large_struct { unsigned long buf[100]; };  })  #ifdef CONFIG_SUPERH32 -# include "uaccess_32.h" +# include <asm/uaccess_32.h>  #else -# include "uaccess_64.h" +# include <asm/uaccess_64.h>  #endif +extern long strncpy_from_user(char *dest, const char __user *src, long count); + +extern __must_check long strlen_user(const char __user *str); +extern __must_check long strnlen_user(const char __user *str, long n); +  /* Generic arbitrary sized copy.  */  /* Return the number of bytes NOT copied */  __kernel_size_t __copy_user(void *to, const void *from, __kernel_size_t n); @@ -137,37 +144,6 @@ __kernel_size_t __clear_user(void *addr, __kernel_size_t size);  	__cl_size;							\  }) -/** - * strncpy_from_user: - Copy a NUL terminated string from userspace. - * @dst:   Destination address, in kernel space.  This buffer must be at - *         least @count bytes long. - * @src:   Source address, in user space. - * @count: Maximum number of bytes to copy, including the trailing NUL. - * - * Copies a NUL-terminated string from userspace to kernel space. - * - * On success, returns the length of the string (not including the trailing - * NUL). - * - * If access to userspace fails, returns -EFAULT (some data may have been - * copied). - * - * If @count is smaller than the length of the string, copies @count bytes - * and returns @count. - */ -#define strncpy_from_user(dest,src,count)				\ -({									\ -	unsigned long __sfu_src = (unsigned long)(src);			\ -	int __sfu_count = (int)(count);					\ -	long __sfu_res = -EFAULT;					\ -									\ -	if (__access_ok(__sfu_src, __sfu_count))			\ -		__sfu_res = __strncpy_from_user((unsigned long)(dest),	\ -				__sfu_src, __sfu_count);		\ -									\ -	__sfu_res;							\ -}) -  static inline unsigned long  copy_from_user(void *to, const void __user *from, unsigned long n)  { @@ -192,43 +168,6 @@ copy_to_user(void __user *to, const void *from, unsigned long n)  	return __copy_size;  } -/** - * strnlen_user: - Get the size of a string in user space. - * @s: The string to measure. - * @n: The maximum valid length - * - * Context: User context only.  This function may sleep. - * - * Get the size of a NUL-terminated string in user space. - * - * Returns the size of the string INCLUDING the terminating NUL. - * On exception, returns 0. - * If the string is too long, returns a value greater than @n. - */ -static inline long strnlen_user(const char __user *s, long n) -{ -	if (!__addr_ok(s)) -		return 0; -	else -		return __strnlen_user(s, n); -} - -/** - * strlen_user: - Get the size of a string in user space. - * @str: The string to measure. - * - * Context: User context only.  This function may sleep. - * - * Get the size of a NUL-terminated string in user space. - * - * Returns the size of the string INCLUDING the terminating NUL. - * On exception, returns 0. - * - * If there is a limit on the length of a valid string, you may wish to - * consider using strnlen_user() instead. - */ -#define strlen_user(str)	strnlen_user(str, ~0UL >> 1) -  /*   * The exception table consists of pairs of addresses: the first is the   * address of an instruction that is allowed to fault, and the second is @@ -254,5 +193,19 @@ int fixup_exception(struct pt_regs *regs);  unsigned long search_exception_table(unsigned long addr);  const struct exception_table_entry *search_exception_tables(unsigned long addr); +extern void *set_exception_table_vec(unsigned int vec, void *handler); + +static inline void *set_exception_table_evt(unsigned int evt, void *handler) +{ +	return set_exception_table_vec(evt >> 5, handler); +} + +struct mem_access { +	unsigned long (*from)(void *dst, const void __user *src, unsigned long cnt); +	unsigned long (*to)(void __user *dst, const void *src, unsigned long cnt); +}; + +int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs, +			    struct mem_access *ma, int, unsigned long address);  #endif /* __ASM_SH_UACCESS_H */ diff --git a/arch/sh/include/asm/uaccess_32.h b/arch/sh/include/asm/uaccess_32.h index ae0d24f6653..c0de7ee35ab 100644 --- a/arch/sh/include/asm/uaccess_32.h +++ b/arch/sh/include/asm/uaccess_32.h @@ -170,79 +170,4 @@ __asm__ __volatile__( \  extern void __put_user_unknown(void); -static inline int -__strncpy_from_user(unsigned long __dest, unsigned long __user __src, int __count) -{ -	__kernel_size_t res; -	unsigned long __dummy, _d, _s, _c; - -	__asm__ __volatile__( -		"9:\n" -		"mov.b	@%2+, %1\n\t" -		"cmp/eq	#0, %1\n\t" -		"bt/s	2f\n" -		"1:\n" -		"mov.b	%1, @%3\n\t" -		"dt	%4\n\t" -		"bf/s	9b\n\t" -		" add	#1, %3\n\t" -		"2:\n\t" -		"sub	%4, %0\n" -		"3:\n" -		".section .fixup,\"ax\"\n" -		"4:\n\t" -		"mov.l	5f, %1\n\t" -		"jmp	@%1\n\t" -		" mov	%9, %0\n\t" -		".balign 4\n" -		"5:	.long 3b\n" -		".previous\n" -		".section __ex_table,\"a\"\n" -		"	.balign 4\n" -		"	.long 9b,4b\n" -		".previous" -		: "=r" (res), "=&z" (__dummy), "=r" (_s), "=r" (_d), "=r"(_c) -		: "0" (__count), "2" (__src), "3" (__dest), "4" (__count), -		  "i" (-EFAULT) -		: "memory", "t"); - -	return res; -} - -/* - * Return the size of a string (including the ending 0 even when we have - * exceeded the maximum string length). - */ -static inline long __strnlen_user(const char __user *__s, long __n) -{ -	unsigned long res; -	unsigned long __dummy; - -	__asm__ __volatile__( -		"1:\t" -		"mov.b	@(%0,%3), %1\n\t" -		"cmp/eq	%4, %0\n\t" -		"bt/s	2f\n\t" -		" add	#1, %0\n\t" -		"tst	%1, %1\n\t" -		"bf	1b\n\t" -		"2:\n" -		".section .fixup,\"ax\"\n" -		"3:\n\t" -		"mov.l	4f, %1\n\t" -		"jmp	@%1\n\t" -		" mov	#0, %0\n" -		".balign 4\n" -		"4:	.long 2b\n" -		".previous\n" -		".section __ex_table,\"a\"\n" -		"	.balign 4\n" -		"	.long 1b,3b\n" -		".previous" -		: "=z" (res), "=&r" (__dummy) -		: "0" (0), "r" (__s), "r" (__n) -		: "t"); -	return res; -} -  #endif /* __ASM_SH_UACCESS_32_H */ diff --git a/arch/sh/include/asm/uaccess_64.h b/arch/sh/include/asm/uaccess_64.h index 56fd20b8cdc..2e07e0f40c6 100644 --- a/arch/sh/include/asm/uaccess_64.h +++ b/arch/sh/include/asm/uaccess_64.h @@ -84,8 +84,4 @@ extern long __put_user_asm_l(void *, long);  extern long __put_user_asm_q(void *, long);  extern void __put_user_unknown(void); -extern long __strnlen_user(const char *__s, long __n); -extern int __strncpy_from_user(unsigned long __dest, -	       unsigned long __user __src, int __count); -  #endif /* __ASM_SH_UACCESS_64_H */ diff --git a/arch/sh/include/asm/ucontext.h b/arch/sh/include/asm/ucontext.h deleted file mode 100644 index 9bc07b9f30f..00000000000 --- a/arch/sh/include/asm/ucontext.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/ucontext.h> diff --git a/arch/sh/include/asm/unaligned-sh4a.h b/arch/sh/include/asm/unaligned-sh4a.h index 9f4dd252c98..95adc500cab 100644 --- a/arch/sh/include/asm/unaligned-sh4a.h +++ b/arch/sh/include/asm/unaligned-sh4a.h @@ -9,7 +9,7 @@   * struct.   *   * The same note as with the movli.l/movco.l pair applies here, as long - * as the load is gauranteed to be inlined, nothing else will hook in to + * as the load is guaranteed to be inlined, nothing else will hook in to   * r0 and we get the return value for free.   *   * NOTE: Due to the fact we require r0 encoding, care should be taken to @@ -18,10 +18,20 @@   * of spill registers and blowing up when building at low optimization   * levels. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34777.   */ +#include <linux/unaligned/packed_struct.h>  #include <linux/types.h>  #include <asm/byteorder.h> -static __always_inline u32 __get_unaligned_cpu32(const u8 *p) +static inline u16 sh4a_get_unaligned_cpu16(const u8 *p) +{ +#ifdef __LITTLE_ENDIAN +	return p[0] | p[1] << 8; +#else +	return p[0] << 8 | p[1]; +#endif +} + +static __always_inline u32 sh4a_get_unaligned_cpu32(const u8 *p)  {  	unsigned long unaligned; @@ -34,218 +44,148 @@ static __always_inline u32 __get_unaligned_cpu32(const u8 *p)  	return unaligned;  } -struct __una_u16 { u16 x __attribute__((packed)); }; -struct __una_u32 { u32 x __attribute__((packed)); }; -struct __una_u64 { u64 x __attribute__((packed)); }; - -static inline u16 __get_unaligned_cpu16(const u8 *p) -{ -#ifdef __LITTLE_ENDIAN -	return p[0] | p[1] << 8; -#else -	return p[0] << 8 | p[1]; -#endif -} -  /*   * Even though movua.l supports auto-increment on the read side, it can   * only store to r0 due to instruction encoding constraints, so just let   * the compiler sort it out on its own.   */ -static inline u64 __get_unaligned_cpu64(const u8 *p) +static inline u64 sh4a_get_unaligned_cpu64(const u8 *p)  {  #ifdef __LITTLE_ENDIAN -	return (u64)__get_unaligned_cpu32(p + 4) << 32 | -		    __get_unaligned_cpu32(p); +	return (u64)sh4a_get_unaligned_cpu32(p + 4) << 32 | +		    sh4a_get_unaligned_cpu32(p);  #else -	return (u64)__get_unaligned_cpu32(p) << 32 | -		    __get_unaligned_cpu32(p + 4); +	return (u64)sh4a_get_unaligned_cpu32(p) << 32 | +		    sh4a_get_unaligned_cpu32(p + 4);  #endif  }  static inline u16 get_unaligned_le16(const void *p)  { -	return le16_to_cpu(__get_unaligned_cpu16(p)); +	return le16_to_cpu(sh4a_get_unaligned_cpu16(p));  }  static inline u32 get_unaligned_le32(const void *p)  { -	return le32_to_cpu(__get_unaligned_cpu32(p)); +	return le32_to_cpu(sh4a_get_unaligned_cpu32(p));  }  static inline u64 get_unaligned_le64(const void *p)  { -	return le64_to_cpu(__get_unaligned_cpu64(p)); +	return le64_to_cpu(sh4a_get_unaligned_cpu64(p));  }  static inline u16 get_unaligned_be16(const void *p)  { -	return be16_to_cpu(__get_unaligned_cpu16(p)); +	return be16_to_cpu(sh4a_get_unaligned_cpu16(p));  }  static inline u32 get_unaligned_be32(const void *p)  { -	return be32_to_cpu(__get_unaligned_cpu32(p)); +	return be32_to_cpu(sh4a_get_unaligned_cpu32(p));  }  static inline u64 get_unaligned_be64(const void *p)  { -	return be64_to_cpu(__get_unaligned_cpu64(p)); +	return be64_to_cpu(sh4a_get_unaligned_cpu64(p));  } -static inline void __put_le16_noalign(u8 *p, u16 val) +static inline void nonnative_put_le16(u16 val, u8 *p)  {  	*p++ = val;  	*p++ = val >> 8;  } -static inline void __put_le32_noalign(u8 *p, u32 val) +static inline void nonnative_put_le32(u32 val, u8 *p)  { -	__put_le16_noalign(p, val); -	__put_le16_noalign(p + 2, val >> 16); +	nonnative_put_le16(val, p); +	nonnative_put_le16(val >> 16, p + 2);  } -static inline void __put_le64_noalign(u8 *p, u64 val) +static inline void nonnative_put_le64(u64 val, u8 *p)  { -	__put_le32_noalign(p, val); -	__put_le32_noalign(p + 4, val >> 32); +	nonnative_put_le32(val, p); +	nonnative_put_le32(val >> 32, p + 4);  } -static inline void __put_be16_noalign(u8 *p, u16 val) +static inline void nonnative_put_be16(u16 val, u8 *p)  {  	*p++ = val >> 8;  	*p++ = val;  } -static inline void __put_be32_noalign(u8 *p, u32 val) +static inline void nonnative_put_be32(u32 val, u8 *p)  { -	__put_be16_noalign(p, val >> 16); -	__put_be16_noalign(p + 2, val); +	nonnative_put_be16(val >> 16, p); +	nonnative_put_be16(val, p + 2);  } -static inline void __put_be64_noalign(u8 *p, u64 val) +static inline void nonnative_put_be64(u64 val, u8 *p)  { -	__put_be32_noalign(p, val >> 32); -	__put_be32_noalign(p + 4, val); +	nonnative_put_be32(val >> 32, p); +	nonnative_put_be32(val, p + 4);  }  static inline void put_unaligned_le16(u16 val, void *p)  {  #ifdef __LITTLE_ENDIAN -	((struct __una_u16 *)p)->x = val; +	__put_unaligned_cpu16(val, p);  #else -	__put_le16_noalign(p, val); +	nonnative_put_le16(val, p);  #endif  }  static inline void put_unaligned_le32(u32 val, void *p)  {  #ifdef __LITTLE_ENDIAN -	((struct __una_u32 *)p)->x = val; +	__put_unaligned_cpu32(val, p);  #else -	__put_le32_noalign(p, val); +	nonnative_put_le32(val, p);  #endif  }  static inline void put_unaligned_le64(u64 val, void *p)  {  #ifdef __LITTLE_ENDIAN -	((struct __una_u64 *)p)->x = val; +	__put_unaligned_cpu64(val, p);  #else -	__put_le64_noalign(p, val); +	nonnative_put_le64(val, p);  #endif  }  static inline void put_unaligned_be16(u16 val, void *p)  {  #ifdef __BIG_ENDIAN -	((struct __una_u16 *)p)->x = val; +	__put_unaligned_cpu16(val, p);  #else -	__put_be16_noalign(p, val); +	nonnative_put_be16(val, p);  #endif  }  static inline void put_unaligned_be32(u32 val, void *p)  {  #ifdef __BIG_ENDIAN -	((struct __una_u32 *)p)->x = val; +	__put_unaligned_cpu32(val, p);  #else -	__put_be32_noalign(p, val); +	nonnative_put_be32(val, p);  #endif  }  static inline void put_unaligned_be64(u64 val, void *p)  {  #ifdef __BIG_ENDIAN -	((struct __una_u64 *)p)->x = val; +	__put_unaligned_cpu64(val, p);  #else -	__put_be64_noalign(p, val); +	nonnative_put_be64(val, p);  #endif  }  /* - * Cause a link-time error if we try an unaligned access other than - * 1,2,4 or 8 bytes long + * While it's a bit non-obvious, even though the generic le/be wrappers + * use the __get/put_xxx prefixing, they actually wrap in to the + * non-prefixed get/put_xxx variants as provided above.   */ -extern void __bad_unaligned_access_size(void); - -#define __get_unaligned_le(ptr) ((__force typeof(*(ptr)))({			\ -	__builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr),			\ -	__builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_le16((ptr)),	\ -	__builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_le32((ptr)),	\ -	__builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_le64((ptr)),	\ -	__bad_unaligned_access_size()))));					\ -	})) - -#define __get_unaligned_be(ptr) ((__force typeof(*(ptr)))({			\ -	__builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr),			\ -	__builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_be16((ptr)),	\ -	__builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_be32((ptr)),	\ -	__builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_be64((ptr)),	\ -	__bad_unaligned_access_size()))));					\ -	})) - -#define __put_unaligned_le(val, ptr) ({					\ -	void *__gu_p = (ptr);						\ -	switch (sizeof(*(ptr))) {					\ -	case 1:								\ -		*(u8 *)__gu_p = (__force u8)(val);			\ -		break;							\ -	case 2:								\ -		put_unaligned_le16((__force u16)(val), __gu_p);		\ -		break;							\ -	case 4:								\ -		put_unaligned_le32((__force u32)(val), __gu_p);		\ -		break;							\ -	case 8:								\ -		put_unaligned_le64((__force u64)(val), __gu_p);		\ -		break;							\ -	default:							\ -		__bad_unaligned_access_size();				\ -		break;							\ -	}								\ -	(void)0; }) - -#define __put_unaligned_be(val, ptr) ({					\ -	void *__gu_p = (ptr);						\ -	switch (sizeof(*(ptr))) {					\ -	case 1:								\ -		*(u8 *)__gu_p = (__force u8)(val);			\ -		break;							\ -	case 2:								\ -		put_unaligned_be16((__force u16)(val), __gu_p);		\ -		break;							\ -	case 4:								\ -		put_unaligned_be32((__force u32)(val), __gu_p);		\ -		break;							\ -	case 8:								\ -		put_unaligned_be64((__force u64)(val), __gu_p);		\ -		break;							\ -	default:							\ -		__bad_unaligned_access_size();				\ -		break;							\ -	}								\ -	(void)0; }) +#include <linux/unaligned/generic.h>  #ifdef __LITTLE_ENDIAN  # define get_unaligned __get_unaligned_le diff --git a/arch/sh/include/asm/unistd.h b/arch/sh/include/asm/unistd.h index 65be656ead7..126fe8340b2 100644 --- a/arch/sh/include/asm/unistd.h +++ b/arch/sh/include/asm/unistd.h @@ -1,13 +1,32 @@ -#ifdef __KERNEL__  # ifdef CONFIG_SUPERH32 -#  include "unistd_32.h" +#  include <asm/unistd_32.h>  # else -#  include "unistd_64.h" +#  include <asm/unistd_64.h>  # endif -#else -# ifdef __SH5__ -#  include "unistd_64.h" -# else -#  include "unistd_32.h" -# endif -#endif + +# define __ARCH_WANT_OLD_READDIR +# define __ARCH_WANT_OLD_STAT +# define __ARCH_WANT_STAT64 +# define __ARCH_WANT_SYS_ALARM +# define __ARCH_WANT_SYS_GETHOSTNAME +# define __ARCH_WANT_SYS_IPC +# define __ARCH_WANT_SYS_PAUSE +# define __ARCH_WANT_SYS_SIGNAL +# define __ARCH_WANT_SYS_TIME +# define __ARCH_WANT_SYS_UTIME +# define __ARCH_WANT_SYS_WAITPID +# define __ARCH_WANT_SYS_SOCKETCALL +# define __ARCH_WANT_SYS_FADVISE64 +# define __ARCH_WANT_SYS_GETPGRP +# define __ARCH_WANT_SYS_LLSEEK +# define __ARCH_WANT_SYS_NICE +# define __ARCH_WANT_SYS_OLD_GETRLIMIT +# define __ARCH_WANT_SYS_OLD_UNAME +# define __ARCH_WANT_SYS_OLDUMOUNT +# define __ARCH_WANT_SYS_SIGPENDING +# define __ARCH_WANT_SYS_SIGPROCMASK +# define __ARCH_WANT_SYS_FORK +# define __ARCH_WANT_SYS_VFORK +# define __ARCH_WANT_SYS_CLONE + +#include <uapi/asm/unistd.h> diff --git a/arch/sh/include/asm/word-at-a-time.h b/arch/sh/include/asm/word-at-a-time.h new file mode 100644 index 00000000000..6e38953ff7f --- /dev/null +++ b/arch/sh/include/asm/word-at-a-time.h @@ -0,0 +1,53 @@ +#ifndef __ASM_SH_WORD_AT_A_TIME_H +#define __ASM_SH_WORD_AT_A_TIME_H + +#ifdef CONFIG_CPU_BIG_ENDIAN +# include <asm-generic/word-at-a-time.h> +#else +/* + * Little-endian version cribbed from x86. + */ +struct word_at_a_time { +	const unsigned long one_bits, high_bits; +}; + +#define WORD_AT_A_TIME_CONSTANTS { REPEAT_BYTE(0x01), REPEAT_BYTE(0x80) } + +/* Carl Chatfield / Jan Achrenius G+ version for 32-bit */ +static inline long count_masked_bytes(long mask) +{ +	/* (000000 0000ff 00ffff ffffff) -> ( 1 1 2 3 ) */ +	long a = (0x0ff0001+mask) >> 23; +	/* Fix the 1 for 00 case */ +	return a & mask; +} + +/* Return nonzero if it has a zero */ +static inline unsigned long has_zero(unsigned long a, unsigned long *bits, const struct word_at_a_time *c) +{ +	unsigned long mask = ((a - c->one_bits) & ~a) & c->high_bits; +	*bits = mask; +	return mask; +} + +static inline unsigned long prep_zero_mask(unsigned long a, unsigned long bits, const struct word_at_a_time *c) +{ +	return bits; +} + +static inline unsigned long create_zero_mask(unsigned long bits) +{ +	bits = (bits - 1) & ~bits; +	return bits >> 7; +} + +/* The mask we created is directly usable as a bytemask */ +#define zero_bytemask(mask) (mask) + +static inline unsigned long find_zero(unsigned long mask) +{ +	return count_masked_bytes(mask); +} +#endif + +#endif diff --git a/arch/sh/include/asm/xor.h b/arch/sh/include/asm/xor.h deleted file mode 100644 index c82eb12a5b1..00000000000 --- a/arch/sh/include/asm/xor.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/xor.h> diff --git a/arch/sh/include/cpu-common/cpu/pfc.h b/arch/sh/include/cpu-common/cpu/pfc.h new file mode 100644 index 00000000000..e538813286a --- /dev/null +++ b/arch/sh/include/cpu-common/cpu/pfc.h @@ -0,0 +1,26 @@ +/* + * SH Pin Function Control Initialization + * + * Copyright (C) 2012  Renesas Solutions Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + */ + +#ifndef __ARCH_SH_CPU_PFC_H__ +#define __ARCH_SH_CPU_PFC_H__ + +#include <linux/types.h> + +struct resource; + +int sh_pfc_register(const char *name, +		    struct resource *resource, u32 num_resources); + +#endif /* __ARCH_SH_CPU_PFC_H__ */ diff --git a/arch/sh/include/cpu-sh2/cpu/cache.h b/arch/sh/include/cpu-sh2/cpu/cache.h index 673515bc413..aa1b2b9088a 100644 --- a/arch/sh/include/cpu-sh2/cpu/cache.h +++ b/arch/sh/include/cpu-sh2/cpu/cache.h @@ -18,7 +18,7 @@  #define SH_CACHE_ASSOC		8  #if defined(CONFIG_CPU_SUBTYPE_SH7619) -#define CCR		0xffffffec +#define SH_CCR		0xffffffec  #define CCR_CACHE_CE	0x01	/* Cache enable */  #define CCR_CACHE_WT	0x02    /* CCR[bit1=1,bit2=1] */ diff --git a/arch/sh/include/cpu-sh2/cpu/dma.h b/arch/sh/include/cpu-sh2/cpu/dma.h deleted file mode 100644 index d66b43cdc63..00000000000 --- a/arch/sh/include/cpu-sh2/cpu/dma.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Definitions for the SH-2 DMAC. - * - * Copyright (C) 2003  Paul Mundt - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#ifndef __ASM_CPU_SH2_DMA_H -#define __ASM_CPU_SH2_DMA_H - -#define SH_MAX_DMA_CHANNELS	2 - -#define SAR	((unsigned long[]){ 0xffffff80, 0xffffff90 }) -#define DAR	((unsigned long[]){ 0xffffff84, 0xffffff94 }) -#define DMATCR	((unsigned long[]){ 0xffffff88, 0xffffff98 }) -#define CHCR	((unsigned long[]){ 0xfffffffc, 0xffffff9c }) - -#define DMAOR	0xffffffb0 - -#endif /* __ASM_CPU_SH2_DMA_H */ - diff --git a/arch/sh/include/cpu-sh2a/cpu/cache.h b/arch/sh/include/cpu-sh2a/cpu/cache.h index defb0baa5a0..b27ce92cb60 100644 --- a/arch/sh/include/cpu-sh2a/cpu/cache.h +++ b/arch/sh/include/cpu-sh2a/cpu/cache.h @@ -17,8 +17,8 @@  #define SH_CACHE_COMBINED	4  #define SH_CACHE_ASSOC		8 -#define CCR		0xfffc1000 /* CCR1 */ -#define CCR2		0xfffc1004 +#define SH_CCR		0xfffc1000 /* CCR1 */ +#define SH_CCR2		0xfffc1004  /*   * Most of the SH-2A CCR1 definitions resemble the SH-4 ones. All others not diff --git a/arch/sh/include/cpu-sh2a/cpu/dma.h b/arch/sh/include/cpu-sh2a/cpu/dma.h deleted file mode 100644 index 27a13ef4fdf..00000000000 --- a/arch/sh/include/cpu-sh2a/cpu/dma.h +++ /dev/null @@ -1 +0,0 @@ -#include <cpu-sh2/cpu/dma.h> diff --git a/arch/sh/include/cpu-sh2a/cpu/sh7264.h b/arch/sh/include/cpu-sh2a/cpu/sh7264.h new file mode 100644 index 00000000000..4d1ef6d74bd --- /dev/null +++ b/arch/sh/include/cpu-sh2a/cpu/sh7264.h @@ -0,0 +1,176 @@ +#ifndef __ASM_SH7264_H__ +#define __ASM_SH7264_H__ + +enum { +	/* Port A */ +	GPIO_PA3, GPIO_PA2, GPIO_PA1, GPIO_PA0, + +	/* Port B */ +	GPIO_PB22, GPIO_PB21, GPIO_PB20, +	GPIO_PB19, GPIO_PB18, GPIO_PB17, GPIO_PB16, +	GPIO_PB15, GPIO_PB14, GPIO_PB13, GPIO_PB12, +	GPIO_PB11, GPIO_PB10, GPIO_PB9, GPIO_PB8, +	GPIO_PB7, GPIO_PB6, GPIO_PB5, GPIO_PB4, +	GPIO_PB3, GPIO_PB2, GPIO_PB1, + +	/* Port C */ +	GPIO_PC10, GPIO_PC9, GPIO_PC8, +	GPIO_PC7, GPIO_PC6, GPIO_PC5, GPIO_PC4, +	GPIO_PC3, GPIO_PC2, GPIO_PC1, GPIO_PC0, + +	/* Port D */ +	GPIO_PD15, GPIO_PD14, GPIO_PD13, GPIO_PD12, +	GPIO_PD11, GPIO_PD10, GPIO_PD9, GPIO_PD8, +	GPIO_PD7, GPIO_PD6, GPIO_PD5, GPIO_PD4, +	GPIO_PD3, GPIO_PD2, GPIO_PD1, GPIO_PD0, + +	/* Port E */ +	GPIO_PE5, GPIO_PE4, +	GPIO_PE3, GPIO_PE2, GPIO_PE1, GPIO_PE0, + +	/* Port F */ +	GPIO_PF12, +	GPIO_PF11, GPIO_PF10, GPIO_PF9, GPIO_PF8, +	GPIO_PF7, GPIO_PF6, GPIO_PF5, GPIO_PF4, +	GPIO_PF3, GPIO_PF2, GPIO_PF1, GPIO_PF0, + +	/* Port G */ +	GPIO_PG24, +	GPIO_PG23, GPIO_PG22, GPIO_PG21, GPIO_PG20, +	GPIO_PG19, GPIO_PG18, GPIO_PG17, GPIO_PG16, +	GPIO_PG15, GPIO_PG14, GPIO_PG13, GPIO_PG12, +	GPIO_PG11, GPIO_PG10, GPIO_PG9, GPIO_PG8, +	GPIO_PG7, GPIO_PG6, GPIO_PG5, GPIO_PG4, +	GPIO_PG3, GPIO_PG2, GPIO_PG1, GPIO_PG0, + +	/* Port H */ +	GPIO_PH7, GPIO_PH6, GPIO_PH5, GPIO_PH4, +	GPIO_PH3, GPIO_PH2, GPIO_PH1, GPIO_PH0, + +	/* Port I - not on device */ + +	/* Port J */ +	GPIO_PJ11, GPIO_PJ10, GPIO_PJ9, GPIO_PJ8, +	GPIO_PJ7, GPIO_PJ6, GPIO_PJ5, GPIO_PJ4, +	GPIO_PJ3, GPIO_PJ2, GPIO_PJ1, GPIO_PJ0, + +	/* Port K */ +	GPIO_PK11, GPIO_PK10, GPIO_PK9, GPIO_PK8, +	GPIO_PK7, GPIO_PK6, GPIO_PK5, GPIO_PK4, +	GPIO_PK3, GPIO_PK2, GPIO_PK1, GPIO_PK0, + +	/* INTC: IRQ and PINT on PB/PD/PE */ +	GPIO_FN_PINT7_PG, GPIO_FN_PINT6_PG, GPIO_FN_PINT5_PG, GPIO_FN_PINT4_PG, +	GPIO_FN_PINT3_PG, GPIO_FN_PINT2_PG, GPIO_FN_PINT1_PG, + +	GPIO_FN_IRQ7_PC, GPIO_FN_IRQ6_PC, GPIO_FN_IRQ5_PC, GPIO_FN_IRQ4_PC, +	GPIO_FN_IRQ3_PG, GPIO_FN_IRQ2_PG, GPIO_FN_IRQ1_PJ, GPIO_FN_IRQ0_PJ, +	GPIO_FN_IRQ3_PE, GPIO_FN_IRQ2_PE, GPIO_FN_IRQ1_PE, GPIO_FN_IRQ0_PE, + +	/* WDT */ +	GPIO_FN_WDTOVF, + +	/* CAN */ +	GPIO_FN_CTX1, GPIO_FN_CRX1, GPIO_FN_CTX0, GPIO_FN_CTX0_CTX1, +	GPIO_FN_CRX0, GPIO_FN_CRX0_CRX1, + +	/* DMAC */ +	GPIO_FN_TEND0, GPIO_FN_DACK0, GPIO_FN_DREQ0, +	GPIO_FN_TEND1, GPIO_FN_DACK1, GPIO_FN_DREQ1, + +	/* ADC */ +	GPIO_FN_ADTRG, + +	/* BSC */ + +	GPIO_FN_A25, GPIO_FN_A24, +	GPIO_FN_A23, GPIO_FN_A22, GPIO_FN_A21, GPIO_FN_A20, +	GPIO_FN_A19, GPIO_FN_A18, GPIO_FN_A17, GPIO_FN_A16, +	GPIO_FN_A15, GPIO_FN_A14, GPIO_FN_A13, GPIO_FN_A12, +	GPIO_FN_A11, GPIO_FN_A10, GPIO_FN_A9, GPIO_FN_A8, +	GPIO_FN_A7, GPIO_FN_A6, GPIO_FN_A5, GPIO_FN_A4, +	GPIO_FN_A3, GPIO_FN_A2, GPIO_FN_A1, GPIO_FN_A0, +	GPIO_FN_D15, GPIO_FN_D14, GPIO_FN_D13, GPIO_FN_D12, +	GPIO_FN_D11, GPIO_FN_D10, GPIO_FN_D9, GPIO_FN_D8, +	GPIO_FN_D7, GPIO_FN_D6, GPIO_FN_D5, GPIO_FN_D4, +	GPIO_FN_D3, GPIO_FN_D2, GPIO_FN_D1, GPIO_FN_D0, + +	GPIO_FN_BS, +	GPIO_FN_CS4, GPIO_FN_CS3, GPIO_FN_CS2, GPIO_FN_CS1, GPIO_FN_CS0, +	GPIO_FN_CS6CE1B, GPIO_FN_CS5CE1A, +	GPIO_FN_CE2A, GPIO_FN_CE2B, +	GPIO_FN_RD, GPIO_FN_RDWR, +	GPIO_FN_ICIOWRAH, GPIO_FN_ICIORD, +	GPIO_FN_WE1DQMUWE, GPIO_FN_WE0DQML, +	GPIO_FN_RAS, GPIO_FN_CAS, GPIO_FN_CKE, +	GPIO_FN_WAIT, GPIO_FN_BREQ, GPIO_FN_BACK, +	GPIO_FN_IOIS16, + +	/* TMU */ +	GPIO_FN_TIOC4D, GPIO_FN_TIOC4C, GPIO_FN_TIOC4B, GPIO_FN_TIOC4A, +	GPIO_FN_TIOC3D, GPIO_FN_TIOC3C, GPIO_FN_TIOC3B, GPIO_FN_TIOC3A, +	GPIO_FN_TIOC2B, GPIO_FN_TIOC1B, GPIO_FN_TIOC2A, GPIO_FN_TIOC1A, +	GPIO_FN_TIOC0D, GPIO_FN_TIOC0C, GPIO_FN_TIOC0B, GPIO_FN_TIOC0A, +	GPIO_FN_TCLKD, GPIO_FN_TCLKC, GPIO_FN_TCLKB, GPIO_FN_TCLKA, + +	/* SSU */ +	GPIO_FN_SCS0_PD, GPIO_FN_SSO0_PD, GPIO_FN_SSI0_PD, GPIO_FN_SSCK0_PD, +	GPIO_FN_SCS0_PF, GPIO_FN_SSO0_PF, GPIO_FN_SSI0_PF, GPIO_FN_SSCK0_PF, +	GPIO_FN_SCS1_PD, GPIO_FN_SSO1_PD, GPIO_FN_SSI1_PD, GPIO_FN_SSCK1_PD, +	GPIO_FN_SCS1_PF, GPIO_FN_SSO1_PF, GPIO_FN_SSI1_PF, GPIO_FN_SSCK1_PF, + +	/* SCIF */ +	GPIO_FN_SCK0, GPIO_FN_SCK1, GPIO_FN_SCK2, GPIO_FN_SCK3, +	GPIO_FN_RXD0, GPIO_FN_RXD1, GPIO_FN_RXD2, GPIO_FN_RXD3, +	GPIO_FN_TXD0, GPIO_FN_TXD1, GPIO_FN_TXD2, GPIO_FN_TXD3, +	GPIO_FN_RXD4, GPIO_FN_RXD5, GPIO_FN_RXD6, GPIO_FN_RXD7, +	GPIO_FN_TXD4, GPIO_FN_TXD5, GPIO_FN_TXD6, GPIO_FN_TXD7, +	GPIO_FN_RTS1, GPIO_FN_RTS3, GPIO_FN_CTS1, GPIO_FN_CTS3, + +	/* RSPI */ +	GPIO_FN_RSPCK0, GPIO_FN_MOSI0, +	GPIO_FN_MISO0_PF12, GPIO_FN_MISO1, +	GPIO_FN_SSL00, +	GPIO_FN_RSPCK1, GPIO_FN_MOSI1, +	GPIO_FN_MISO1_PG19, GPIO_FN_SSL10, + +	/* IIC3 */ +	GPIO_FN_SCL0, GPIO_FN_SCL1, GPIO_FN_SCL2, +	GPIO_FN_SDA2, GPIO_FN_SDA1, GPIO_FN_SDA0, + +	/* SSI */ +	GPIO_FN_SSISCK0, GPIO_FN_SSIWS0, GPIO_FN_SSITXD0, GPIO_FN_SSIRXD0, +	GPIO_FN_SSIWS1, GPIO_FN_SSIWS2, GPIO_FN_SSIWS3, +	GPIO_FN_SSISCK1, GPIO_FN_SSISCK2, GPIO_FN_SSISCK3, +	GPIO_FN_SSIDATA1, GPIO_FN_SSIDATA2, GPIO_FN_SSIDATA3, +	GPIO_FN_AUDIO_CLK, + +	/* SIOF */ +	GPIO_FN_SIOFTXD, GPIO_FN_SIOFRXD, GPIO_FN_SIOFSYNC, GPIO_FN_SIOFSCK, + +	/* SPDIF */ +	GPIO_FN_SPDIF_IN, +	GPIO_FN_SPDIF_OUT, + +	/* NANDFMC */ /* NOTE Controller is not available in boot mode 0 */ +	GPIO_FN_FCE, +	GPIO_FN_FRB, + +	/* VDC3 */ +	GPIO_FN_DV_CLK, GPIO_FN_DV_VSYNC, GPIO_FN_DV_HSYNC, +	GPIO_FN_DV_DATA7, GPIO_FN_DV_DATA6, GPIO_FN_DV_DATA5, GPIO_FN_DV_DATA4, +	GPIO_FN_DV_DATA3, GPIO_FN_DV_DATA2, GPIO_FN_DV_DATA1, GPIO_FN_DV_DATA0, +	GPIO_FN_LCD_CLK, GPIO_FN_LCD_EXTCLK, +	GPIO_FN_LCD_VSYNC, GPIO_FN_LCD_HSYNC, GPIO_FN_LCD_DE, +	GPIO_FN_LCD_DATA15, GPIO_FN_LCD_DATA14, +	GPIO_FN_LCD_DATA13, GPIO_FN_LCD_DATA12, +	GPIO_FN_LCD_DATA11, GPIO_FN_LCD_DATA10, +	GPIO_FN_LCD_DATA9, GPIO_FN_LCD_DATA8, +	GPIO_FN_LCD_DATA7, GPIO_FN_LCD_DATA6, +	GPIO_FN_LCD_DATA5, GPIO_FN_LCD_DATA4, +	GPIO_FN_LCD_DATA3, GPIO_FN_LCD_DATA2, +	GPIO_FN_LCD_DATA1, GPIO_FN_LCD_DATA0, +	GPIO_FN_LCD_M_DISP, +}; + +#endif /* __ASM_SH7264_H__ */ diff --git a/arch/sh/include/cpu-sh2a/cpu/sh7269.h b/arch/sh/include/cpu-sh2a/cpu/sh7269.h new file mode 100644 index 00000000000..2a0ca8780f0 --- /dev/null +++ b/arch/sh/include/cpu-sh2a/cpu/sh7269.h @@ -0,0 +1,213 @@ +#ifndef __ASM_SH7269_H__ +#define __ASM_SH7269_H__ + +enum { +	/* Port A */ +	GPIO_PA1, GPIO_PA0, + +	/* Port B */ +	GPIO_PB22, GPIO_PB21, GPIO_PB20, +	GPIO_PB19, GPIO_PB18, GPIO_PB17, GPIO_PB16, +	GPIO_PB15, GPIO_PB14, GPIO_PB13, GPIO_PB12, +	GPIO_PB11, GPIO_PB10, GPIO_PB9, GPIO_PB8, +	GPIO_PB7, GPIO_PB6, GPIO_PB5, GPIO_PB4, +	GPIO_PB3, GPIO_PB2, GPIO_PB1, + +	/* Port C */ +	GPIO_PC8, +	GPIO_PC7, GPIO_PC6, GPIO_PC5, GPIO_PC4, +	GPIO_PC3, GPIO_PC2, GPIO_PC1, GPIO_PC0, + +	/* Port D */ +	GPIO_PD15, GPIO_PD14, GPIO_PD13, GPIO_PD12, +	GPIO_PD11, GPIO_PD10, GPIO_PD9, GPIO_PD8, +	GPIO_PD7, GPIO_PD6, GPIO_PD5, GPIO_PD4, +	GPIO_PD3, GPIO_PD2, GPIO_PD1, GPIO_PD0, + +	/* Port E */ +	GPIO_PE7, GPIO_PE6, GPIO_PE5, GPIO_PE4, +	GPIO_PE3, GPIO_PE2, GPIO_PE1, GPIO_PE0, + +	/* Port F */ +	GPIO_PF23, GPIO_PF22, GPIO_PF21, GPIO_PF20, +	GPIO_PF19, GPIO_PF18, GPIO_PF17, GPIO_PF16, +	GPIO_PF15, GPIO_PF14, GPIO_PF13, GPIO_PF12, +	GPIO_PF11, GPIO_PF10, GPIO_PF9, GPIO_PF8, +	GPIO_PF7, GPIO_PF6, GPIO_PF5, GPIO_PF4, +	GPIO_PF3, GPIO_PF2, GPIO_PF1, GPIO_PF0, + +	/* Port G */ +	GPIO_PG27, GPIO_PG26, GPIO_PG25, GPIO_PG24, +	GPIO_PG23, GPIO_PG22, GPIO_PG21, GPIO_PG20, +	GPIO_PG19, GPIO_PG18, GPIO_PG17, GPIO_PG16, +	GPIO_PG15, GPIO_PG14, GPIO_PG13, GPIO_PG12, +	GPIO_PG11, GPIO_PG10, GPIO_PG9, GPIO_PG8, +	GPIO_PG7, GPIO_PG6, GPIO_PG5, GPIO_PG4, +	GPIO_PG3, GPIO_PG2, GPIO_PG1, GPIO_PG0, + +	/* Port H */ +	GPIO_PH7, GPIO_PH6, GPIO_PH5, GPIO_PH4, +	GPIO_PH3, GPIO_PH2, GPIO_PH1, GPIO_PH0, + +	/* Port I - not on device */ + +	/* Port J */ +	GPIO_PJ31, GPIO_PJ30, GPIO_PJ29, GPIO_PJ28, +	GPIO_PJ27, GPIO_PJ26, GPIO_PJ25, GPIO_PJ24, +	GPIO_PJ23, GPIO_PJ22, GPIO_PJ21, GPIO_PJ20, +	GPIO_PJ19, GPIO_PJ18, GPIO_PJ17, GPIO_PJ16, +	GPIO_PJ15, GPIO_PJ14, GPIO_PJ13, GPIO_PJ12, +	GPIO_PJ11, GPIO_PJ10, GPIO_PJ9, GPIO_PJ8, +	GPIO_PJ7, GPIO_PJ6, GPIO_PJ5, GPIO_PJ4, +	GPIO_PJ3, GPIO_PJ2, GPIO_PJ1, GPIO_PJ0, + +	/* INTC: IRQ and PINT */ +	GPIO_FN_IRQ7_PG, GPIO_FN_IRQ6_PG, GPIO_FN_IRQ5_PG, GPIO_FN_IRQ4_PG, +	GPIO_FN_IRQ3_PG, GPIO_FN_IRQ2_PG, GPIO_FN_IRQ1_PG, GPIO_FN_IRQ0_PG, +	GPIO_FN_IRQ7_PF, GPIO_FN_IRQ6_PF, GPIO_FN_IRQ5_PF, GPIO_FN_IRQ4_PF, +	GPIO_FN_IRQ3_PJ, GPIO_FN_IRQ2_PJ, GPIO_FN_IRQ1_PJ, GPIO_FN_IRQ0_PJ, +	GPIO_FN_IRQ1_PC, GPIO_FN_IRQ0_PC, + +	GPIO_FN_PINT7_PG, GPIO_FN_PINT6_PG, GPIO_FN_PINT5_PG, GPIO_FN_PINT4_PG, +	GPIO_FN_PINT3_PG, GPIO_FN_PINT2_PG, GPIO_FN_PINT1_PG, GPIO_FN_PINT0_PG, +	GPIO_FN_PINT7_PH, GPIO_FN_PINT6_PH, GPIO_FN_PINT5_PH, GPIO_FN_PINT4_PH, +	GPIO_FN_PINT3_PH, GPIO_FN_PINT2_PH, GPIO_FN_PINT1_PH, GPIO_FN_PINT0_PH, +	GPIO_FN_PINT7_PJ, GPIO_FN_PINT6_PJ, GPIO_FN_PINT5_PJ, GPIO_FN_PINT4_PJ, +	GPIO_FN_PINT3_PJ, GPIO_FN_PINT2_PJ, GPIO_FN_PINT1_PJ, GPIO_FN_PINT0_PJ, + +	/* WDT */ +	GPIO_FN_WDTOVF, + +	/* CAN */ +	GPIO_FN_CTX1, GPIO_FN_CRX1, GPIO_FN_CTX0, GPIO_FN_CTX0_CTX1, +	GPIO_FN_CRX0, GPIO_FN_CRX0_CRX1, GPIO_FN_CRX0_CRX1_CRX2, + +	/* DMAC */ +	GPIO_FN_TEND0, GPIO_FN_DACK0, GPIO_FN_DREQ0, +	GPIO_FN_TEND1, GPIO_FN_DACK1, GPIO_FN_DREQ1, + +	/* ADC */ +	GPIO_FN_ADTRG, + +	/* BSC */ +	GPIO_FN_A25, GPIO_FN_A24, +	GPIO_FN_A23, GPIO_FN_A22, GPIO_FN_A21, GPIO_FN_A20, +	GPIO_FN_A19, GPIO_FN_A18, GPIO_FN_A17, GPIO_FN_A16, +	GPIO_FN_A15, GPIO_FN_A14, GPIO_FN_A13, GPIO_FN_A12, +	GPIO_FN_A11, GPIO_FN_A10, GPIO_FN_A9, GPIO_FN_A8, +	GPIO_FN_A7, GPIO_FN_A6, GPIO_FN_A5, GPIO_FN_A4, +	GPIO_FN_A3, GPIO_FN_A2, GPIO_FN_A1, GPIO_FN_A0, +	GPIO_FN_D15, GPIO_FN_D14, GPIO_FN_D13, GPIO_FN_D12, +	GPIO_FN_D11, GPIO_FN_D10, GPIO_FN_D9, GPIO_FN_D8, +	GPIO_FN_D7, GPIO_FN_D6, GPIO_FN_D5, GPIO_FN_D4, +	GPIO_FN_D3, GPIO_FN_D2, GPIO_FN_D1, GPIO_FN_D0, + +	GPIO_FN_BS, +	GPIO_FN_CS4, GPIO_FN_CS3, GPIO_FN_CS2, GPIO_FN_CS1, GPIO_FN_CS0, +	GPIO_FN_CS5CE1A, +	GPIO_FN_CE2A, GPIO_FN_CE2B, +	GPIO_FN_RD, GPIO_FN_RDWR, +	GPIO_FN_WE3ICIOWRAHDQMUU, GPIO_FN_WE2ICIORDDQMUL, +	GPIO_FN_WE1DQMUWE, GPIO_FN_WE0DQML, +	GPIO_FN_RAS, GPIO_FN_CAS, GPIO_FN_CKE, +	GPIO_FN_WAIT, GPIO_FN_BREQ, GPIO_FN_BACK, +	GPIO_FN_IOIS16, + +	/* TMU */ +	GPIO_FN_TIOC4D, GPIO_FN_TIOC4C, GPIO_FN_TIOC4B, GPIO_FN_TIOC4A, +	GPIO_FN_TIOC3D, GPIO_FN_TIOC3C, GPIO_FN_TIOC3B, GPIO_FN_TIOC3A, +	GPIO_FN_TIOC2B, GPIO_FN_TIOC1B, GPIO_FN_TIOC2A, GPIO_FN_TIOC1A, +	GPIO_FN_TIOC0D, GPIO_FN_TIOC0C, GPIO_FN_TIOC0B, GPIO_FN_TIOC0A, +	GPIO_FN_TCLKD, GPIO_FN_TCLKC, GPIO_FN_TCLKB, GPIO_FN_TCLKA, + +	/* SSU */ +	GPIO_FN_SCS0_PD, GPIO_FN_SSO0_PD, GPIO_FN_SSI0_PD, GPIO_FN_SSCK0_PD, +	GPIO_FN_SCS0_PF, GPIO_FN_SSO0_PF, GPIO_FN_SSI0_PF, GPIO_FN_SSCK0_PF, +	GPIO_FN_SCS1_PD, GPIO_FN_SSO1_PD, GPIO_FN_SSI1_PD, GPIO_FN_SSCK1_PD, +	GPIO_FN_SCS1_PF, GPIO_FN_SSO1_PF, GPIO_FN_SSI1_PF, GPIO_FN_SSCK1_PF, + +	/* SCIF */ +	GPIO_FN_SCK0, GPIO_FN_RXD0, GPIO_FN_TXD0, +	GPIO_FN_SCK1, GPIO_FN_RXD1, GPIO_FN_TXD1, GPIO_FN_RTS1, GPIO_FN_CTS1, +	GPIO_FN_SCK2, GPIO_FN_RXD2, GPIO_FN_TXD2, +	GPIO_FN_SCK3, GPIO_FN_RXD3, GPIO_FN_TXD3, +	GPIO_FN_SCK4, GPIO_FN_RXD4, GPIO_FN_TXD4, +	GPIO_FN_SCK5, GPIO_FN_RXD5, GPIO_FN_TXD5, GPIO_FN_RTS5, GPIO_FN_CTS5, +	GPIO_FN_SCK6, GPIO_FN_RXD6, GPIO_FN_TXD6, +	GPIO_FN_SCK7, GPIO_FN_RXD7, GPIO_FN_TXD7, GPIO_FN_RTS7, GPIO_FN_CTS7, + +	/* RSPI */ +	GPIO_FN_MISO0_PJ19, GPIO_FN_MISO0_PB20, +	GPIO_FN_MOSI0_PJ18, GPIO_FN_MOSI0_PB19, +	GPIO_FN_SSL00_PJ17, GPIO_FN_SSL00_PB18, +	GPIO_FN_RSPCK0_PJ16, GPIO_FN_RSPCK0_PB17, +	GPIO_FN_RSPCK1, GPIO_FN_MOSI1, +	GPIO_FN_MISO1, GPIO_FN_SSL10, + +	/* IIC3 */ +	GPIO_FN_SCL0, GPIO_FN_SCL1, GPIO_FN_SCL2, +	GPIO_FN_SDA2, GPIO_FN_SDA1, GPIO_FN_SDA0, + +	/* SSI */ +	GPIO_FN_SSISCK0, GPIO_FN_SSIWS0, GPIO_FN_SSITXD0, GPIO_FN_SSIRXD0, +	GPIO_FN_SSIWS1, GPIO_FN_SSIWS2, GPIO_FN_SSIWS3, +	GPIO_FN_SSISCK1, GPIO_FN_SSISCK2, GPIO_FN_SSISCK3, +	GPIO_FN_SSIDATA1, GPIO_FN_SSIDATA2, GPIO_FN_SSIDATA3, +	GPIO_FN_AUDIO_CLK, +	GPIO_FN_AUDIO_XOUT, + +	/* SIOF */ +	GPIO_FN_SIOFTXD, GPIO_FN_SIOFRXD, GPIO_FN_SIOFSYNC, GPIO_FN_SIOFSCK, + +	/* SPDIF */ +	GPIO_FN_SPDIF_IN, +	GPIO_FN_SPDIF_OUT, + +	/* NANDFMC  */ /* NOTE Controller is not available in boot mode 0 */ +	GPIO_FN_FCE, +	GPIO_FN_FRB, + +	/* VDC */ +	GPIO_FN_DV_CLK, GPIO_FN_DV_VSYNC, GPIO_FN_DV_HSYNC, +	GPIO_FN_DV_DATA23, GPIO_FN_DV_DATA22, +	GPIO_FN_DV_DATA21, GPIO_FN_DV_DATA20, +	GPIO_FN_DV_DATA19, GPIO_FN_DV_DATA18, +	GPIO_FN_DV_DATA17, GPIO_FN_DV_DATA16, +	GPIO_FN_DV_DATA15, GPIO_FN_DV_DATA14, +	GPIO_FN_DV_DATA13, GPIO_FN_DV_DATA12, +	GPIO_FN_DV_DATA11, GPIO_FN_DV_DATA10, +	GPIO_FN_DV_DATA9, GPIO_FN_DV_DATA8, +	GPIO_FN_DV_DATA7, GPIO_FN_DV_DATA6, +	GPIO_FN_DV_DATA5, GPIO_FN_DV_DATA4, +	GPIO_FN_DV_DATA3, GPIO_FN_DV_DATA2, +	GPIO_FN_DV_DATA1, GPIO_FN_DV_DATA0, +	GPIO_FN_LCD_CLK, GPIO_FN_LCD_EXTCLK, +	GPIO_FN_LCD_VSYNC, GPIO_FN_LCD_HSYNC, GPIO_FN_LCD_DE, +	GPIO_FN_LCD_DATA23_PG23, GPIO_FN_LCD_DATA22_PG22, +	GPIO_FN_LCD_DATA21_PG21, GPIO_FN_LCD_DATA20_PG20, +	GPIO_FN_LCD_DATA19_PG19, GPIO_FN_LCD_DATA18_PG18, +	GPIO_FN_LCD_DATA17_PG17, GPIO_FN_LCD_DATA16_PG16, +	GPIO_FN_LCD_DATA15_PG15, GPIO_FN_LCD_DATA14_PG14, +	GPIO_FN_LCD_DATA13_PG13, GPIO_FN_LCD_DATA12_PG12, +	GPIO_FN_LCD_DATA11_PG11, GPIO_FN_LCD_DATA10_PG10, +	GPIO_FN_LCD_DATA9_PG9, GPIO_FN_LCD_DATA8_PG8, +	GPIO_FN_LCD_DATA7_PG7, GPIO_FN_LCD_DATA6_PG6, +	GPIO_FN_LCD_DATA5_PG5, GPIO_FN_LCD_DATA4_PG4, +	GPIO_FN_LCD_DATA3_PG3, GPIO_FN_LCD_DATA2_PG2, +	GPIO_FN_LCD_DATA1_PG1, GPIO_FN_LCD_DATA0_PG0, +	GPIO_FN_LCD_DATA23_PJ23, GPIO_FN_LCD_DATA22_PJ22, +	GPIO_FN_LCD_DATA21_PJ21, GPIO_FN_LCD_DATA20_PJ20, +	GPIO_FN_LCD_DATA19_PJ19, GPIO_FN_LCD_DATA18_PJ18, +	GPIO_FN_LCD_DATA17_PJ17, GPIO_FN_LCD_DATA16_PJ16, +	GPIO_FN_LCD_DATA15_PJ15, GPIO_FN_LCD_DATA14_PJ14, +	GPIO_FN_LCD_DATA13_PJ13, GPIO_FN_LCD_DATA12_PJ12, +	GPIO_FN_LCD_DATA11_PJ11, GPIO_FN_LCD_DATA10_PJ10, +	GPIO_FN_LCD_DATA9_PJ9, GPIO_FN_LCD_DATA8_PJ8, +	GPIO_FN_LCD_DATA7_PJ7, GPIO_FN_LCD_DATA6_PJ6, +	GPIO_FN_LCD_DATA5_PJ5, GPIO_FN_LCD_DATA4_PJ4, +	GPIO_FN_LCD_DATA3_PJ3, GPIO_FN_LCD_DATA2_PJ2, +	GPIO_FN_LCD_DATA1_PJ1, GPIO_FN_LCD_DATA0_PJ0, +	GPIO_FN_LCD_M_DISP, +}; + +#endif /* __ASM_SH7269_H__ */ diff --git a/arch/sh/include/cpu-sh2a/cpu/ubc.h b/arch/sh/include/cpu-sh2a/cpu/ubc.h deleted file mode 100644 index 1192e1c761a..00000000000 --- a/arch/sh/include/cpu-sh2a/cpu/ubc.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SH-2A UBC definitions - * - * Copyright (C) 2008 Kieran Bingham - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ - -#ifndef __ASM_CPU_SH2A_UBC_H -#define __ASM_CPU_SH2A_UBC_H - -#define UBC_BARA                0xfffc0400 -#define UBC_BAMRA               0xfffc0404 -#define UBC_BBRA                0xfffc04a0	/* 16 bit access */ -#define UBC_BDRA                0xfffc0408 -#define UBC_BDMRA               0xfffc040c - -#define UBC_BARB                0xfffc0410 -#define UBC_BAMRB               0xfffc0414 -#define UBC_BBRB                0xfffc04b0	/* 16 bit access */ -#define UBC_BDRB                0xfffc0418 -#define UBC_BDMRB               0xfffc041c - -#define UBC_BRCR                0xfffc04c0 - -#endif /* __ASM_CPU_SH2A_UBC_H */ diff --git a/arch/sh/include/cpu-sh3/cpu/cache.h b/arch/sh/include/cpu-sh3/cpu/cache.h index bee2d81c56b..29700fd88c7 100644 --- a/arch/sh/include/cpu-sh3/cpu/cache.h +++ b/arch/sh/include/cpu-sh3/cpu/cache.h @@ -17,7 +17,7 @@  #define SH_CACHE_COMBINED	4  #define SH_CACHE_ASSOC		8 -#define CCR		0xffffffec	/* Address of Cache Control Register */ +#define SH_CCR		0xffffffec	/* Address of Cache Control Register */  #define CCR_CACHE_CE	0x01	/* Cache Enable */  #define CCR_CACHE_WT	0x02	/* Write-Through (for P0,U0,P3) (else writeback) */ diff --git a/arch/sh/include/cpu-sh3/cpu/dma.h b/arch/sh/include/cpu-sh3/cpu/dma.h index 24e28b91c9d..bccb4144a5e 100644 --- a/arch/sh/include/cpu-sh3/cpu/dma.h +++ b/arch/sh/include/cpu-sh3/cpu/dma.h @@ -1,6 +1,8 @@  #ifndef __ASM_CPU_SH3_DMA_H  #define __ASM_CPU_SH3_DMA_H +#include <linux/sh_intc.h> +  #if defined(CONFIG_CPU_SUBTYPE_SH7720) || \      defined(CONFIG_CPU_SUBTYPE_SH7721) || \      defined(CONFIG_CPU_SUBTYPE_SH7710) || \ @@ -10,14 +12,7 @@  #define SH_DMAC_BASE0	0xa4000020  #endif -#define DMTE0_IRQ	48 -#define DMTE4_IRQ	76 - -/* Definitions for the SuperH DMAC */ -#define TM_BURST	0x00000020 -#define TS_8		0x00000000 -#define TS_16		0x00000008 -#define TS_32		0x00000010 -#define TS_128		0x00000018 +#define DMTE0_IRQ	evt2irq(0x800) +#define DMTE4_IRQ	evt2irq(0xb80)  #endif /* __ASM_CPU_SH3_DMA_H */ diff --git a/arch/sh/include/cpu-sh3/cpu/serial.h b/arch/sh/include/cpu-sh3/cpu/serial.h new file mode 100644 index 00000000000..7766329bc10 --- /dev/null +++ b/arch/sh/include/cpu-sh3/cpu/serial.h @@ -0,0 +1,10 @@ +#ifndef __CPU_SH3_SERIAL_H +#define __CPU_SH3_SERIAL_H + +#include <linux/serial_sci.h> + +extern struct plat_sci_port_ops sh770x_sci_port_ops; +extern struct plat_sci_port_ops sh7710_sci_port_ops; +extern struct plat_sci_port_ops sh7720_sci_port_ops; + +#endif /* __CPU_SH3_SERIAL_H */ diff --git a/arch/sh/include/cpu-sh4/cpu/cache.h b/arch/sh/include/cpu-sh4/cpu/cache.h index 7bfb9e8b069..92c4cd119b6 100644 --- a/arch/sh/include/cpu-sh4/cpu/cache.h +++ b/arch/sh/include/cpu-sh4/cpu/cache.h @@ -17,7 +17,7 @@  #define SH_CACHE_COMBINED	4  #define SH_CACHE_ASSOC		8 -#define CCR		0xff00001c	/* Address of Cache Control Register */ +#define SH_CCR		0xff00001c	/* Address of Cache Control Register */  #define CCR_CACHE_OCE	0x0001	/* Operand Cache Enable */  #define CCR_CACHE_WT	0x0002	/* Write-Through (for P0,U0,P3) (else writeback)*/  #define CCR_CACHE_CB	0x0004	/* Copy-Back (for P1) (else writethrough) */ diff --git a/arch/sh/include/cpu-sh4/cpu/dma-register.h b/arch/sh/include/cpu-sh4/cpu/dma-register.h index 9a6125eb007..02788b6a03b 100644 --- a/arch/sh/include/cpu-sh4/cpu/dma-register.h +++ b/arch/sh/include/cpu-sh4/cpu/dma-register.h @@ -16,40 +16,29 @@  #define DMAOR_INIT	DMAOR_DME -#if defined(CONFIG_CPU_SUBTYPE_SH7343) || \ -	defined(CONFIG_CPU_SUBTYPE_SH7730) +#if defined(CONFIG_CPU_SUBTYPE_SH7343)  #define CHCR_TS_LOW_MASK	0x00000018  #define CHCR_TS_LOW_SHIFT	3  #define CHCR_TS_HIGH_MASK	0  #define CHCR_TS_HIGH_SHIFT	0  #elif defined(CONFIG_CPU_SUBTYPE_SH7722) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7723) || \  	defined(CONFIG_CPU_SUBTYPE_SH7724) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7730) || \  	defined(CONFIG_CPU_SUBTYPE_SH7786)  #define CHCR_TS_LOW_MASK	0x00000018  #define CHCR_TS_LOW_SHIFT	3  #define CHCR_TS_HIGH_MASK	0x00300000  #define CHCR_TS_HIGH_SHIFT	(20 - 2)	/* 2 bits for shifted low TS */ -#elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \ -	defined(CONFIG_CPU_SUBTYPE_SH7764) +#elif defined(CONFIG_CPU_SUBTYPE_SH7757) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7763) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7764) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7780) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7785)  #define CHCR_TS_LOW_MASK	0x00000018  #define CHCR_TS_LOW_SHIFT	3 -#define CHCR_TS_HIGH_MASK	0 -#define CHCR_TS_HIGH_SHIFT	0 -#elif defined(CONFIG_CPU_SUBTYPE_SH7723) -#define CHCR_TS_LOW_MASK	0x00000018 -#define CHCR_TS_LOW_SHIFT	3 -#define CHCR_TS_HIGH_MASK	0 -#define CHCR_TS_HIGH_SHIFT	0 -#elif defined(CONFIG_CPU_SUBTYPE_SH7780) -#define CHCR_TS_LOW_MASK	0x00000018 -#define CHCR_TS_LOW_SHIFT	3 -#define CHCR_TS_HIGH_MASK	0 -#define CHCR_TS_HIGH_SHIFT	0 -#else /* SH7785 */ -#define CHCR_TS_LOW_MASK	0x00000018 -#define CHCR_TS_LOW_SHIFT	3 -#define CHCR_TS_HIGH_MASK	0 -#define CHCR_TS_HIGH_SHIFT	0 +#define CHCR_TS_HIGH_MASK	0x00100000 +#define CHCR_TS_HIGH_SHIFT	(20 - 2)	/* 2 bits for shifted low TS */  #endif  /* Transmit sizes and respective CHCR register values */ diff --git a/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h b/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h deleted file mode 100644 index 9647e681fd2..00000000000 --- a/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef __ASM_SH_CPU_SH4_DMA_SH7780_H -#define __ASM_SH_CPU_SH4_DMA_SH7780_H - -#if defined(CONFIG_CPU_SUBTYPE_SH7343) || \ -	defined(CONFIG_CPU_SUBTYPE_SH7730) -#define DMTE0_IRQ	48 -#define DMTE4_IRQ	76 -#define DMAE0_IRQ	78	/* DMA Error IRQ*/ -#define SH_DMAC_BASE0	0xFE008020 -#define SH_DMARS_BASE0	0xFE009000 -#elif defined(CONFIG_CPU_SUBTYPE_SH7722) -#define DMTE0_IRQ	48 -#define DMTE4_IRQ	76 -#define DMAE0_IRQ	78	/* DMA Error IRQ*/ -#define SH_DMAC_BASE0	0xFE008020 -#define SH_DMARS_BASE0	0xFE009000 -#elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \ -	defined(CONFIG_CPU_SUBTYPE_SH7764) -#define DMTE0_IRQ	34 -#define DMTE4_IRQ	44 -#define DMAE0_IRQ	38 -#define SH_DMAC_BASE0	0xFF608020 -#define SH_DMARS_BASE0	0xFF609000 -#elif defined(CONFIG_CPU_SUBTYPE_SH7723) -#define DMTE0_IRQ	48	/* DMAC0A*/ -#define DMTE4_IRQ	76	/* DMAC0B */ -#define DMTE6_IRQ	40 -#define DMTE8_IRQ	42	/* DMAC1A */ -#define DMTE9_IRQ	43 -#define DMTE10_IRQ	72	/* DMAC1B */ -#define DMTE11_IRQ	73 -#define DMAE0_IRQ	78	/* DMA Error IRQ*/ -#define DMAE1_IRQ	74	/* DMA Error IRQ*/ -#define SH_DMAC_BASE0	0xFE008020 -#define SH_DMAC_BASE1	0xFDC08020 -#define SH_DMARS_BASE0	0xFDC09000 -#elif defined(CONFIG_CPU_SUBTYPE_SH7724) -#define DMTE0_IRQ	48	/* DMAC0A*/ -#define DMTE4_IRQ	76	/* DMAC0B */ -#define DMTE6_IRQ	40 -#define DMTE8_IRQ	42	/* DMAC1A */ -#define DMTE9_IRQ	43 -#define DMTE10_IRQ	72	/* DMAC1B */ -#define DMTE11_IRQ	73 -#define DMAE0_IRQ	78	/* DMA Error IRQ*/ -#define DMAE1_IRQ	74	/* DMA Error IRQ*/ -#define SH_DMAC_BASE0	0xFE008020 -#define SH_DMAC_BASE1	0xFDC08020 -#define SH_DMARS_BASE0	0xFE009000 -#define SH_DMARS_BASE1	0xFDC09000 -#elif defined(CONFIG_CPU_SUBTYPE_SH7780) -#define DMTE0_IRQ	34 -#define DMTE4_IRQ	44 -#define DMTE6_IRQ	46 -#define DMTE8_IRQ	92 -#define DMTE9_IRQ	93 -#define DMTE10_IRQ	94 -#define DMTE11_IRQ	95 -#define DMAE0_IRQ	38	/* DMA Error IRQ */ -#define SH_DMAC_BASE0	0xFC808020 -#define SH_DMAC_BASE1	0xFC818020 -#define SH_DMARS_BASE0	0xFC809000 -#else /* SH7785 */ -#define DMTE0_IRQ	33 -#define DMTE4_IRQ	37 -#define DMTE6_IRQ	52 -#define DMTE8_IRQ	54 -#define DMTE9_IRQ	55 -#define DMTE10_IRQ	56 -#define DMTE11_IRQ	57 -#define DMAE0_IRQ	39	/* DMA Error IRQ0 */ -#define DMAE1_IRQ	58	/* DMA Error IRQ1 */ -#define SH_DMAC_BASE0	0xFC808020 -#define SH_DMAC_BASE1	0xFCC08020 -#define SH_DMARS_BASE0	0xFC809000 -#endif - -#define REQ_HE		0x000000C0 -#define REQ_H		0x00000080 -#define REQ_LE		0x00000040 -#define TM_BURST	0x00000020 - -#endif /* __ASM_SH_CPU_SH4_DMA_SH7780_H */ diff --git a/arch/sh/include/cpu-sh4/cpu/dma.h b/arch/sh/include/cpu-sh4/cpu/dma.h index ca747e93c2e..a520eb21962 100644 --- a/arch/sh/include/cpu-sh4/cpu/dma.h +++ b/arch/sh/include/cpu-sh4/cpu/dma.h @@ -1,32 +1,17 @@  #ifndef __ASM_CPU_SH4_DMA_H  #define __ASM_CPU_SH4_DMA_H -/* SH7751/7760/7780 DMA IRQ sources */ +#include <linux/sh_intc.h> -#ifdef CONFIG_CPU_SH4A - -#include <cpu/dma-sh4a.h> - -#else /* CONFIG_CPU_SH4A */  /*   * SH7750/SH7751/SH7760   */ -#define DMTE0_IRQ	34 -#define DMTE4_IRQ	44 -#define DMTE6_IRQ	46 -#define DMAE0_IRQ	38 +#define DMTE0_IRQ	evt2irq(0x640) +#define DMTE4_IRQ	evt2irq(0x780) +#define DMTE6_IRQ	evt2irq(0x7c0) +#define DMAE0_IRQ	evt2irq(0x6c0)  #define SH_DMAC_BASE0	0xffa00000  #define SH_DMAC_BASE1	0xffa00070 -/* Definitions for the SuperH DMAC */ -#define TM_BURST	0x00000080 -#define TS_8		0x00000010 -#define TS_16		0x00000020 -#define TS_32		0x00000030 -#define TS_64		0x00000000 - -#define DMAOR_COD	0x00000008 - -#endif  #endif /* __ASM_CPU_SH4_DMA_H */ diff --git a/arch/sh/include/cpu-sh4/cpu/freq.h b/arch/sh/include/cpu-sh4/cpu/freq.h index cffd25ed024..1631fc238e6 100644 --- a/arch/sh/include/cpu-sh4/cpu/freq.h +++ b/arch/sh/include/cpu-sh4/cpu/freq.h @@ -47,6 +47,11 @@  #define MSTPCR1			0xa4150034  #define MSTPCR2			0xa4150038 +#elif defined(CONFIG_CPU_SUBTYPE_SH7734) +#define FRQCR0			0xffc80000 +#define FRQCR2			0xffc80008 +#define FRQMR1			0xffc80014 +#define FRQMR2			0xffc80018  #elif defined(CONFIG_CPU_SUBTYPE_SH7785)  #define FRQCR0			0xffc80000  #define FRQCR1			0xffc80004 diff --git a/arch/sh/include/cpu-sh4/cpu/sh7722.h b/arch/sh/include/cpu-sh4/cpu/sh7722.h index 7a5b8a331b4..3bb74e534d0 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7722.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7722.h @@ -222,20 +222,18 @@ enum {  };  enum { -	HWBLK_UNKNOWN = 0, -	HWBLK_TLB, HWBLK_IC, HWBLK_OC, HWBLK_URAM, HWBLK_XYMEM, -	HWBLK_INTC, HWBLK_DMAC, HWBLK_SHYWAY, HWBLK_HUDI, -	HWBLK_UBC, HWBLK_TMU, HWBLK_CMT, HWBLK_RWDT, HWBLK_FLCTL, -	HWBLK_SCIF0, HWBLK_SCIF1, HWBLK_SCIF2, HWBLK_SIO, -	HWBLK_SIOF0, HWBLK_SIOF1, HWBLK_IIC, HWBLK_RTC, -	HWBLK_TPU, HWBLK_IRDA, HWBLK_SDHI, HWBLK_SIM, HWBLK_KEYSC, -	HWBLK_TSIF, HWBLK_USBF, HWBLK_2DG, HWBLK_SIU, HWBLK_VOU, +	HWBLK_URAM, HWBLK_XYMEM, +	HWBLK_TMU, HWBLK_CMT, HWBLK_RWDT, HWBLK_FLCTL, +	HWBLK_SCIF0, HWBLK_SCIF1, HWBLK_SCIF2, HWBLK_IIC, HWBLK_RTC, +	HWBLK_SDHI, HWBLK_KEYSC, +	HWBLK_USBF, HWBLK_2DG, HWBLK_SIU, HWBLK_VOU,  	HWBLK_JPU, HWBLK_BEU, HWBLK_CEU, HWBLK_VEU, HWBLK_VPU,  	HWBLK_LCDC,  	HWBLK_NR,  };  enum { +	SHDMA_SLAVE_INVALID,  	SHDMA_SLAVE_SCIF0_TX,  	SHDMA_SLAVE_SCIF0_RX,  	SHDMA_SLAVE_SCIF1_TX, diff --git a/arch/sh/include/cpu-sh4/cpu/sh7723.h b/arch/sh/include/cpu-sh4/cpu/sh7723.h index 9b36fae7232..668da89bdac 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7723.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7723.h @@ -184,7 +184,7 @@ enum {  	/* SIUA */  	GPIO_FN_SIUAFCK, GPIO_FN_SIUAILR, GPIO_FN_SIUAIBT, GPIO_FN_SIUAISLD,  	GPIO_FN_SIUAOLR, GPIO_FN_SIUAOBT, GPIO_FN_SIUAOSLD, GPIO_FN_SIUAMCK, -	GPIO_FN_SIUAISPD, GPIO_FN_SIUOSPD, +	GPIO_FN_SIUAISPD, GPIO_FN_SIUAOSPD,  	/* SIUB */  	GPIO_FN_SIUBFCK, GPIO_FN_SIUBILR, GPIO_FN_SIUBIBT, GPIO_FN_SIUBISLD, @@ -266,10 +266,9 @@ enum {  };  enum { -	HWBLK_UNKNOWN = 0,  	HWBLK_TLB, HWBLK_IC, HWBLK_OC, HWBLK_L2C, HWBLK_ILMEM, HWBLK_FPU,  	HWBLK_INTC, HWBLK_DMAC0, HWBLK_SHYWAY, -	HWBLK_HUDI, HWBLK_DBG, HWBLK_UBC, HWBLK_SUBC, +	HWBLK_HUDI, HWBLK_UBC,  	HWBLK_TMU0, HWBLK_CMT, HWBLK_RWDT, HWBLK_DMAC1, HWBLK_TMU1,  	HWBLK_FLCTL,  	HWBLK_SCIF0, HWBLK_SCIF1, HWBLK_SCIF2, diff --git a/arch/sh/include/cpu-sh4/cpu/sh7724.h b/arch/sh/include/cpu-sh4/cpu/sh7724.h index 4c27b68789b..38859f96d4e 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7724.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7724.h @@ -268,10 +268,9 @@ enum {  };  enum { -	HWBLK_UNKNOWN = 0,  	HWBLK_TLB, HWBLK_IC, HWBLK_OC, HWBLK_RSMEM, HWBLK_ILMEM, HWBLK_L2C,  	HWBLK_FPU, HWBLK_INTC, HWBLK_DMAC0, HWBLK_SHYWAY, -	HWBLK_HUDI, HWBLK_DBG, HWBLK_UBC, +	HWBLK_HUDI, HWBLK_UBC,  	HWBLK_TMU0, HWBLK_CMT, HWBLK_RWDT, HWBLK_DMAC1, HWBLK_TMU1,  	HWBLK_SCIF0, HWBLK_SCIF1, HWBLK_SCIF2, HWBLK_SCIF3,  	HWBLK_SCIF4, HWBLK_SCIF5, HWBLK_MSIOF0, HWBLK_MSIOF1, @@ -285,6 +284,7 @@ enum {  };  enum { +	SHDMA_SLAVE_INVALID,  	SHDMA_SLAVE_SCIF0_TX,  	SHDMA_SLAVE_SCIF0_RX,  	SHDMA_SLAVE_SCIF1_TX, @@ -297,10 +297,22 @@ enum {  	SHDMA_SLAVE_SCIF4_RX,  	SHDMA_SLAVE_SCIF5_TX,  	SHDMA_SLAVE_SCIF5_RX, +	SHDMA_SLAVE_USB0D0_TX, +	SHDMA_SLAVE_USB0D0_RX, +	SHDMA_SLAVE_USB0D1_TX, +	SHDMA_SLAVE_USB0D1_RX, +	SHDMA_SLAVE_USB1D0_TX, +	SHDMA_SLAVE_USB1D0_RX, +	SHDMA_SLAVE_USB1D1_TX, +	SHDMA_SLAVE_USB1D1_RX,  	SHDMA_SLAVE_SDHI0_TX,  	SHDMA_SLAVE_SDHI0_RX,  	SHDMA_SLAVE_SDHI1_TX,  	SHDMA_SLAVE_SDHI1_RX,  }; +extern struct clk sh7724_fsimcka_clk; +extern struct clk sh7724_fsimckb_clk; +extern struct clk sh7724_dv_clki; +  #endif /* __ASM_SH7724_H__ */ diff --git a/arch/sh/include/cpu-sh4/cpu/sh7734.h b/arch/sh/include/cpu-sh4/cpu/sh7734.h new file mode 100644 index 00000000000..2fb9a7b71b4 --- /dev/null +++ b/arch/sh/include/cpu-sh4/cpu/sh7734.h @@ -0,0 +1,306 @@ +#ifndef __ASM_SH7734_H__ +#define __ASM_SH7734_H__ + +/* Pin Function Controller: + * GPIO_FN_xx - GPIO used to select pin function + * GPIO_GP_x_x - GPIO mapped to real I/O pin on CPU + */ +enum { +	GPIO_GP_0_0, GPIO_GP_0_1, GPIO_GP_0_2, GPIO_GP_0_3, +	GPIO_GP_0_4, GPIO_GP_0_5, GPIO_GP_0_6, GPIO_GP_0_7, +	GPIO_GP_0_8, GPIO_GP_0_9, GPIO_GP_0_10, GPIO_GP_0_11, +	GPIO_GP_0_12, GPIO_GP_0_13, GPIO_GP_0_14, GPIO_GP_0_15, +	GPIO_GP_0_16, GPIO_GP_0_17, GPIO_GP_0_18, GPIO_GP_0_19, +	GPIO_GP_0_20, GPIO_GP_0_21, GPIO_GP_0_22, GPIO_GP_0_23, +	GPIO_GP_0_24, GPIO_GP_0_25, GPIO_GP_0_26, GPIO_GP_0_27, +	GPIO_GP_0_28, GPIO_GP_0_29, GPIO_GP_0_30, GPIO_GP_0_31, + +	GPIO_GP_1_0, GPIO_GP_1_1, GPIO_GP_1_2, GPIO_GP_1_3, +	GPIO_GP_1_4, GPIO_GP_1_5, GPIO_GP_1_6, GPIO_GP_1_7, +	GPIO_GP_1_8, GPIO_GP_1_9, GPIO_GP_1_10, GPIO_GP_1_11, +	GPIO_GP_1_12, GPIO_GP_1_13, GPIO_GP_1_14, GPIO_GP_1_15, +	GPIO_GP_1_16, GPIO_GP_1_17, GPIO_GP_1_18, GPIO_GP_1_19, +	GPIO_GP_1_20, GPIO_GP_1_21, GPIO_GP_1_22, GPIO_GP_1_23, +	GPIO_GP_1_24, GPIO_GP_1_25, GPIO_GP_1_26, GPIO_GP_1_27, +	GPIO_GP_1_28, GPIO_GP_1_29, GPIO_GP_1_30, GPIO_GP_1_31, + +	GPIO_GP_2_0, GPIO_GP_2_1, GPIO_GP_2_2, GPIO_GP_2_3, +	GPIO_GP_2_4, GPIO_GP_2_5, GPIO_GP_2_6, GPIO_GP_2_7, +	GPIO_GP_2_8, GPIO_GP_2_9, GPIO_GP_2_10, GPIO_GP_2_11, +	GPIO_GP_2_12, GPIO_GP_2_13, GPIO_GP_2_14, GPIO_GP_2_15, +	GPIO_GP_2_16, GPIO_GP_2_17, GPIO_GP_2_18, GPIO_GP_2_19, +	GPIO_GP_2_20, GPIO_GP_2_21, GPIO_GP_2_22, GPIO_GP_2_23, +	GPIO_GP_2_24, GPIO_GP_2_25, GPIO_GP_2_26, GPIO_GP_2_27, +	GPIO_GP_2_28, GPIO_GP_2_29, GPIO_GP_2_30, GPIO_GP_2_31, + +	GPIO_GP_3_0, GPIO_GP_3_1, GPIO_GP_3_2, GPIO_GP_3_3, +	GPIO_GP_3_4, GPIO_GP_3_5, GPIO_GP_3_6, GPIO_GP_3_7, +	GPIO_GP_3_8, GPIO_GP_3_9, GPIO_GP_3_10, GPIO_GP_3_11, +	GPIO_GP_3_12, GPIO_GP_3_13, GPIO_GP_3_14, GPIO_GP_3_15, +	GPIO_GP_3_16, GPIO_GP_3_17, GPIO_GP_3_18, GPIO_GP_3_19, +	GPIO_GP_3_20, GPIO_GP_3_21, GPIO_GP_3_22, GPIO_GP_3_23, +	GPIO_GP_3_24, GPIO_GP_3_25, GPIO_GP_3_26, GPIO_GP_3_27, +	GPIO_GP_3_28, GPIO_GP_3_29, GPIO_GP_3_30, GPIO_GP_3_31, + +	GPIO_GP_4_0, GPIO_GP_4_1, GPIO_GP_4_2, GPIO_GP_4_3, +	GPIO_GP_4_4, GPIO_GP_4_5, GPIO_GP_4_6, GPIO_GP_4_7, +	GPIO_GP_4_8, GPIO_GP_4_9, GPIO_GP_4_10, GPIO_GP_4_11, +	GPIO_GP_4_12, GPIO_GP_4_13, GPIO_GP_4_14, GPIO_GP_4_15, +	GPIO_GP_4_16, GPIO_GP_4_17, GPIO_GP_4_18, GPIO_GP_4_19, +	GPIO_GP_4_20, GPIO_GP_4_21, GPIO_GP_4_22, GPIO_GP_4_23, +	GPIO_GP_4_24, GPIO_GP_4_25, GPIO_GP_4_26, GPIO_GP_4_27, +	GPIO_GP_4_28, GPIO_GP_4_29, GPIO_GP_4_30, GPIO_GP_4_31, + +	GPIO_GP_5_0, GPIO_GP_5_1, GPIO_GP_5_2, GPIO_GP_5_3, +	GPIO_GP_5_4, GPIO_GP_5_5, GPIO_GP_5_6, GPIO_GP_5_7, +	GPIO_GP_5_8, GPIO_GP_5_9, GPIO_GP_5_10, GPIO_GP_5_11, + +	GPIO_FN_CLKOUT, GPIO_FN_BS, GPIO_FN_CS0, GPIO_FN_EX_CS0, GPIO_FN_RD, +		GPIO_FN_WE0, GPIO_FN_WE1, + +	GPIO_FN_SCL0, GPIO_FN_PENC0, GPIO_FN_USB_OVC0, + +	GPIO_FN_IRQ2_B, GPIO_FN_IRQ3_B, + +	/* IPSR0 */ +	GPIO_FN_A15, GPIO_FN_ST0_VCO_CLKIN, GPIO_FN_LCD_DATA15_A, +		GPIO_FN_TIOC3D_C, +	GPIO_FN_A14, GPIO_FN_LCD_DATA14_A, GPIO_FN_TIOC3C_C, +	GPIO_FN_A13, GPIO_FN_LCD_DATA13_A, GPIO_FN_TIOC3B_C, +	GPIO_FN_A12, GPIO_FN_LCD_DATA12_A, GPIO_FN_TIOC3A_C, +	GPIO_FN_A11, GPIO_FN_ST0_D7, GPIO_FN_LCD_DATA11_A, +		GPIO_FN_TIOC2B_C, +	GPIO_FN_A10, GPIO_FN_ST0_D6, GPIO_FN_LCD_DATA10_A, +		GPIO_FN_TIOC2A_C, +	GPIO_FN_A9, GPIO_FN_ST0_D5, GPIO_FN_LCD_DATA9_A, +		GPIO_FN_TIOC1B_C, +	GPIO_FN_A8, GPIO_FN_ST0_D4, GPIO_FN_LCD_DATA8_A, +		GPIO_FN_TIOC1A_C, +	GPIO_FN_A7, GPIO_FN_ST0_D3, GPIO_FN_LCD_DATA7_A, GPIO_FN_TIOC0D_C, +	GPIO_FN_A6, GPIO_FN_ST0_D2, GPIO_FN_LCD_DATA6_A, GPIO_FN_TIOC0C_C, +	GPIO_FN_A5, GPIO_FN_ST0_D1, GPIO_FN_LCD_DATA5_A, GPIO_FN_TIOC0B_C, +	GPIO_FN_A4, GPIO_FN_ST0_D0, GPIO_FN_LCD_DATA4_A, GPIO_FN_TIOC0A_C, +	GPIO_FN_A3, GPIO_FN_ST0_VLD, GPIO_FN_LCD_DATA3_A, GPIO_FN_TCLKD_C, +	GPIO_FN_A2, GPIO_FN_ST0_SYC, GPIO_FN_LCD_DATA2_A, GPIO_FN_TCLKC_C, +	GPIO_FN_A1, GPIO_FN_ST0_REQ, GPIO_FN_LCD_DATA1_A, GPIO_FN_TCLKB_C, +	GPIO_FN_A0, GPIO_FN_ST0_CLKIN, GPIO_FN_LCD_DATA0_A, GPIO_FN_TCLKA_C, + +	/* IPSR1 */ +	GPIO_FN_D3, GPIO_FN_SD0_DAT3_A, GPIO_FN_MMC_D3_A, GPIO_FN_ST1_D6, +		GPIO_FN_FD3_A, +	GPIO_FN_D2, GPIO_FN_SD0_DAT2_A, GPIO_FN_MMC_D2_A, GPIO_FN_ST1_D5, +		GPIO_FN_FD2_A, +	GPIO_FN_D1, GPIO_FN_SD0_DAT1_A, GPIO_FN_MMC_D1_A, GPIO_FN_ST1_D4, +		GPIO_FN_FD1_A, +	GPIO_FN_D0, GPIO_FN_SD0_DAT0_A, GPIO_FN_MMC_D0_A, GPIO_FN_ST1_D3, +		GPIO_FN_FD0_A, +	GPIO_FN_A25, GPIO_FN_TX2_D, GPIO_FN_ST1_D2, +	GPIO_FN_A24, GPIO_FN_RX2_D, GPIO_FN_ST1_D1, +	GPIO_FN_A23, GPIO_FN_ST1_D0, GPIO_FN_LCD_M_DISP_A, +	GPIO_FN_A22, GPIO_FN_ST1_VLD, GPIO_FN_LCD_VEPWC_A, +	GPIO_FN_A21, GPIO_FN_ST1_SYC, GPIO_FN_LCD_VCPWC_A, +	GPIO_FN_A20, GPIO_FN_ST1_REQ, GPIO_FN_LCD_FLM_A, +	GPIO_FN_A19, GPIO_FN_ST1_CLKIN, GPIO_FN_LCD_CLK_A, GPIO_FN_TIOC4D_C, +	GPIO_FN_A18, GPIO_FN_ST1_PWM, GPIO_FN_LCD_CL2_A, GPIO_FN_TIOC4C_C, +	GPIO_FN_A17, GPIO_FN_ST1_VCO_CLKIN, GPIO_FN_LCD_CL1_A, GPIO_FN_TIOC4B_C, +	GPIO_FN_A16, GPIO_FN_ST0_PWM, GPIO_FN_LCD_DON_A, GPIO_FN_TIOC4A_C, + +	/* IPSR2 */ +	GPIO_FN_D14, GPIO_FN_TX2_B, GPIO_FN_FSE_A, GPIO_FN_ET0_TX_CLK_B, +	GPIO_FN_D13, GPIO_FN_RX2_B, GPIO_FN_FRB_A,	GPIO_FN_ET0_ETXD6_B, +	GPIO_FN_D12, GPIO_FN_FWE_A, GPIO_FN_ET0_ETXD5_B, +	GPIO_FN_D11, GPIO_FN_RSPI_MISO_A, GPIO_FN_QMI_QIO1_A, +		GPIO_FN_FRE_A, GPIO_FN_ET0_ETXD3_B, +	GPIO_FN_D10, GPIO_FN_RSPI_MOSI_A, GPIO_FN_QMO_QIO0_A, +		GPIO_FN_FALE_A, GPIO_FN_ET0_ETXD2_B, +	GPIO_FN_D9, GPIO_FN_SD0_CMD_A, GPIO_FN_MMC_CMD_A, GPIO_FN_QIO3_A, +		GPIO_FN_FCLE_A, GPIO_FN_ET0_ETXD1_B, +	GPIO_FN_D8, GPIO_FN_SD0_CLK_A, GPIO_FN_MMC_CLK_A, GPIO_FN_QIO2_A, +		GPIO_FN_FCE_A, GPIO_FN_ET0_GTX_CLK_B, +	GPIO_FN_D7, GPIO_FN_RSPI_SSL_A, GPIO_FN_MMC_D7_A, GPIO_FN_QSSL_A, +		GPIO_FN_FD7_A, +	GPIO_FN_D6, GPIO_FN_RSPI_RSPCK_A, GPIO_FN_MMC_D6_A, GPIO_FN_QSPCLK_A, +		GPIO_FN_FD6_A, +	GPIO_FN_D5, GPIO_FN_SD0_WP_A, GPIO_FN_MMC_D5_A, GPIO_FN_FD5_A, +	GPIO_FN_D4, GPIO_FN_SD0_CD_A, GPIO_FN_MMC_D4_A, GPIO_FN_ST1_D7, +		GPIO_FN_FD4_A, + +	/* IPSR3 */ +	GPIO_FN_DRACK0, GPIO_FN_SD1_DAT2_A, GPIO_FN_ATAG, GPIO_FN_TCLK1_A, +		GPIO_FN_ET0_ETXD7, +	GPIO_FN_EX_WAIT2, GPIO_FN_SD1_DAT1_A, GPIO_FN_DACK2, GPIO_FN_CAN1_RX_C, +		GPIO_FN_ET0_MAGIC_C, GPIO_FN_ET0_ETXD6_A, +	GPIO_FN_EX_WAIT1, GPIO_FN_SD1_DAT0_A, GPIO_FN_DREQ2, GPIO_FN_CAN1_TX_C, +		GPIO_FN_ET0_LINK_C, GPIO_FN_ET0_ETXD5_A, +	GPIO_FN_EX_WAIT0, GPIO_FN_TCLK1_B, +	GPIO_FN_RD_WR, GPIO_FN_TCLK0, +	GPIO_FN_EX_CS5, GPIO_FN_SD1_CMD_A, GPIO_FN_ATADIR, GPIO_FN_QSSL_B, +		GPIO_FN_ET0_ETXD3_A, +	GPIO_FN_EX_CS4, GPIO_FN_SD1_WP_A, GPIO_FN_ATAWR, GPIO_FN_QMI_QIO1_B, +		GPIO_FN_ET0_ETXD2_A, +	GPIO_FN_EX_CS3, GPIO_FN_SD1_CD_A, GPIO_FN_ATARD, GPIO_FN_QMO_QIO0_B, +		GPIO_FN_ET0_ETXD1_A, +	GPIO_FN_EX_CS2, GPIO_FN_TX3_B, GPIO_FN_ATACS1, GPIO_FN_QSPCLK_B, +		GPIO_FN_ET0_GTX_CLK_A, +	GPIO_FN_EX_CS1, GPIO_FN_RX3_B, GPIO_FN_ATACS0, GPIO_FN_QIO2_B, +		GPIO_FN_ET0_ETXD0, +	GPIO_FN_CS1_A26, GPIO_FN_QIO3_B, +	GPIO_FN_D15, GPIO_FN_SCK2_B, + +	/* IPSR4 */ +	GPIO_FN_SCK2_A, GPIO_FN_VI0_G3, +	GPIO_FN_RTS1_B, GPIO_FN_VI0_G2, +	GPIO_FN_CTS1_B, GPIO_FN_VI0_DATA7_VI0_G1, +	GPIO_FN_TX1_B, GPIO_FN_VI0_DATA6_VI0_G0, GPIO_FN_ET0_PHY_INT_A, +	GPIO_FN_RX1_B, GPIO_FN_VI0_DATA5_VI0_B5, GPIO_FN_ET0_MAGIC_A, +	GPIO_FN_SCK1_B, GPIO_FN_VI0_DATA4_VI0_B4, GPIO_FN_ET0_LINK_A, +	GPIO_FN_RTS0_B, GPIO_FN_VI0_DATA3_VI0_B3, GPIO_FN_ET0_MDIO_A, +	GPIO_FN_CTS0_B, GPIO_FN_VI0_DATA2_VI0_B2, GPIO_FN_RMII0_MDIO_A, +		GPIO_FN_ET0_MDC, +	GPIO_FN_HTX0_A, GPIO_FN_TX1_A, GPIO_FN_VI0_DATA1_VI0_B1, +		GPIO_FN_RMII0_MDC_A, GPIO_FN_ET0_COL, +	GPIO_FN_HRX0_A, GPIO_FN_RX1_A, GPIO_FN_VI0_DATA0_VI0_B0, +		GPIO_FN_RMII0_CRS_DV_A, GPIO_FN_ET0_CRS, +	GPIO_FN_HSCK0_A, GPIO_FN_SCK1_A, GPIO_FN_VI0_VSYNC, +		GPIO_FN_RMII0_RX_ER_A, GPIO_FN_ET0_RX_ER, +	GPIO_FN_HRTS0_A, GPIO_FN_RTS1_A, GPIO_FN_VI0_HSYNC, +		GPIO_FN_RMII0_TXD_EN_A, GPIO_FN_ET0_RX_DV, +	GPIO_FN_HCTS0_A, GPIO_FN_CTS1_A, GPIO_FN_VI0_FIELD, +		GPIO_FN_RMII0_RXD1_A, GPIO_FN_ET0_ERXD7, + +	/* IPSR5 */ +	GPIO_FN_SD2_CLK_A, GPIO_FN_RX2_A, GPIO_FN_VI0_G4, GPIO_FN_ET0_RX_CLK_B, +	GPIO_FN_SD2_CMD_A, GPIO_FN_TX2_A, GPIO_FN_VI0_G5, GPIO_FN_ET0_ERXD2_B, +	GPIO_FN_SD2_DAT0_A, GPIO_FN_RX3_A, GPIO_FN_VI0_R0, GPIO_FN_ET0_ERXD3_B, +	GPIO_FN_SD2_DAT1_A, GPIO_FN_TX3_A, GPIO_FN_VI0_R1, GPIO_FN_ET0_MDIO_B, +	GPIO_FN_SD2_DAT2_A, GPIO_FN_RX4_A, GPIO_FN_VI0_R2, GPIO_FN_ET0_LINK_B, +	GPIO_FN_SD2_DAT3_A, GPIO_FN_TX4_A, GPIO_FN_VI0_R3, GPIO_FN_ET0_MAGIC_B, +	GPIO_FN_SD2_CD_A, GPIO_FN_RX5_A, GPIO_FN_VI0_R4, GPIO_FN_ET0_PHY_INT_B, +	GPIO_FN_SD2_WP_A, GPIO_FN_TX5_A, GPIO_FN_VI0_R5, +	GPIO_FN_REF125CK, GPIO_FN_ADTRG, GPIO_FN_RX5_C, +	GPIO_FN_REF50CK, GPIO_FN_CTS1_E, GPIO_FN_HCTS0_D, + +	/* IPSR6 */ +	GPIO_FN_DU0_DR0, GPIO_FN_SCIF_CLK_B, GPIO_FN_HRX0_D, GPIO_FN_IETX_A, +		GPIO_FN_TCLKA_A, GPIO_FN_HIFD00, +	GPIO_FN_DU0_DR1, GPIO_FN_SCK0_B, GPIO_FN_HTX0_D, GPIO_FN_IERX_A, +		GPIO_FN_TCLKB_A, GPIO_FN_HIFD01, +	GPIO_FN_DU0_DR2, GPIO_FN_RX0_B, GPIO_FN_TCLKC_A, GPIO_FN_HIFD02, +	GPIO_FN_DU0_DR3, GPIO_FN_TX0_B, GPIO_FN_TCLKD_A, GPIO_FN_HIFD03, +	GPIO_FN_DU0_DR4, GPIO_FN_CTS0_C, GPIO_FN_TIOC0A_A, GPIO_FN_HIFD04, +	GPIO_FN_DU0_DR5, GPIO_FN_RTS0_C, GPIO_FN_TIOC0B_A, GPIO_FN_HIFD05, +	GPIO_FN_DU0_DR6, GPIO_FN_SCK1_C, GPIO_FN_TIOC0C_A, GPIO_FN_HIFD06, +	GPIO_FN_DU0_DR7, GPIO_FN_RX1_C, GPIO_FN_TIOC0D_A, GPIO_FN_HIFD07, +	GPIO_FN_DU0_DG0, GPIO_FN_TX1_C, GPIO_FN_HSCK0_D, GPIO_FN_IECLK_A, +		GPIO_FN_TIOC1A_A, GPIO_FN_HIFD08, +	GPIO_FN_DU0_DG1, GPIO_FN_CTS1_C, GPIO_FN_HRTS0_D, GPIO_FN_TIOC1B_A, +		GPIO_FN_HIFD09, + +	/* IPSR7 */ +	GPIO_FN_DU0_DG2, GPIO_FN_RTS1_C, GPIO_FN_RMII0_MDC_B, GPIO_FN_TIOC2A_A, +		GPIO_FN_HIFD10, +	GPIO_FN_DU0_DG3, GPIO_FN_SCK2_C, GPIO_FN_RMII0_MDIO_B, GPIO_FN_TIOC2B_A, +		GPIO_FN_HIFD11, +	GPIO_FN_DU0_DG4, GPIO_FN_RX2_C, GPIO_FN_RMII0_CRS_DV_B, +		GPIO_FN_TIOC3A_A, GPIO_FN_HIFD12, +	GPIO_FN_DU0_DG5, GPIO_FN_TX2_C, GPIO_FN_RMII0_RX_ER_B, +		GPIO_FN_TIOC3B_A, GPIO_FN_HIFD13, +	GPIO_FN_DU0_DG6, GPIO_FN_RX3_C, GPIO_FN_RMII0_RXD0_B, +		GPIO_FN_TIOC3C_A, GPIO_FN_HIFD14, +	GPIO_FN_DU0_DG7, GPIO_FN_TX3_C, GPIO_FN_RMII0_RXD1_B, +		GPIO_FN_TIOC3D_A, GPIO_FN_HIFD15, +	GPIO_FN_DU0_DB0, GPIO_FN_RX4_C, GPIO_FN_RMII0_TXD_EN_B, +		GPIO_FN_TIOC4A_A, GPIO_FN_HIFCS, +	GPIO_FN_DU0_DB1, GPIO_FN_TX4_C, GPIO_FN_RMII0_TXD0_B, +		GPIO_FN_TIOC4B_A, GPIO_FN_HIFRS, +	GPIO_FN_DU0_DB2, GPIO_FN_RX5_B, GPIO_FN_RMII0_TXD1_B, +		GPIO_FN_TIOC4C_A, GPIO_FN_HIFWR, +	GPIO_FN_DU0_DB3, GPIO_FN_TX5_B, GPIO_FN_TIOC4D_A, GPIO_FN_HIFRD, +	GPIO_FN_DU0_DB4, GPIO_FN_HIFINT, + +	/* IPSR8 */ +	GPIO_FN_DU0_DB5, GPIO_FN_HIFDREQ, +	GPIO_FN_DU0_DB6, GPIO_FN_HIFRDY, +	GPIO_FN_DU0_DB7, GPIO_FN_SSI_SCK0_B, GPIO_FN_HIFEBL_B, +	GPIO_FN_DU0_DOTCLKIN, GPIO_FN_HSPI_CS0_C, GPIO_FN_SSI_WS0_B, +	GPIO_FN_DU0_DOTCLKOUT, GPIO_FN_HSPI_CLK0_C, GPIO_FN_SSI_SDATA0_B, +	GPIO_FN_DU0_EXHSYNC_DU0_HSYNC, GPIO_FN_HSPI_TX0_C, GPIO_FN_SSI_SCK1_B, +	GPIO_FN_DU0_EXVSYNC_DU0_VSYNC, GPIO_FN_HSPI_RX0_C, GPIO_FN_SSI_WS1_B, +	GPIO_FN_DU0_EXODDF_DU0_ODDF, GPIO_FN_CAN0_RX_B, GPIO_FN_HSCK0_B, +		GPIO_FN_SSI_SDATA1_B, +	GPIO_FN_DU0_DISP, GPIO_FN_CAN0_TX_B, GPIO_FN_HRX0_B, +		GPIO_FN_AUDIO_CLKA_B, +	GPIO_FN_DU0_CDE, GPIO_FN_HTX0_B, GPIO_FN_AUDIO_CLKB_B, +		GPIO_FN_LCD_VCPWC_B, +	GPIO_FN_IRQ0_A, GPIO_FN_HSPI_TX_B, GPIO_FN_RX3_E, GPIO_FN_ET0_ERXD0, +	GPIO_FN_IRQ1_A, GPIO_FN_HSPI_RX_B, GPIO_FN_TX3_E, GPIO_FN_ET0_ERXD1, +	GPIO_FN_IRQ2_A, GPIO_FN_CTS0_A, GPIO_FN_HCTS0_B, GPIO_FN_ET0_ERXD2_A, +	GPIO_FN_IRQ3_A, GPIO_FN_RTS0_A, GPIO_FN_HRTS0_B, GPIO_FN_ET0_ERXD3_A, + +	/* IPSR9 */ +	GPIO_FN_VI1_CLK_A, GPIO_FN_FD0_B, GPIO_FN_LCD_DATA0_B, +	GPIO_FN_VI1_0_A, GPIO_FN_FD1_B, GPIO_FN_LCD_DATA1_B, +	GPIO_FN_VI1_1_A, GPIO_FN_FD2_B, GPIO_FN_LCD_DATA2_B, +	GPIO_FN_VI1_2_A, GPIO_FN_FD3_B, GPIO_FN_LCD_DATA3_B, +	GPIO_FN_VI1_3_A, GPIO_FN_FD4_B, GPIO_FN_LCD_DATA4_B, +	GPIO_FN_VI1_4_A, GPIO_FN_FD5_B, GPIO_FN_LCD_DATA5_B, +	GPIO_FN_VI1_5_A, GPIO_FN_FD6_B, GPIO_FN_LCD_DATA6_B, +	GPIO_FN_VI1_6_A, GPIO_FN_FD7_B, GPIO_FN_LCD_DATA7_B, +	GPIO_FN_VI1_7_A, GPIO_FN_FCE_B, GPIO_FN_LCD_DATA8_B, +	GPIO_FN_SSI_SCK0_A, GPIO_FN_TIOC1A_B, GPIO_FN_LCD_DATA9_B, +	GPIO_FN_SSI_WS0_A, GPIO_FN_TIOC1B_B, GPIO_FN_LCD_DATA10_B, +	GPIO_FN_SSI_SDATA0_A, GPIO_FN_VI1_0_B, GPIO_FN_TIOC2A_B, +		GPIO_FN_LCD_DATA11_B, +	GPIO_FN_SSI_SCK1_A, GPIO_FN_VI1_1_B, GPIO_FN_TIOC2B_B, +		GPIO_FN_LCD_DATA12_B, +	GPIO_FN_SSI_WS1_A, GPIO_FN_VI1_2_B, GPIO_FN_LCD_DATA13_B, +	GPIO_FN_SSI_SDATA1_A, GPIO_FN_VI1_3_B, GPIO_FN_LCD_DATA14_B, + +	/* IPSR10 */ +	GPIO_FN_SSI_SCK23, GPIO_FN_VI1_4_B, GPIO_FN_RX1_D, GPIO_FN_FCLE_B, +		GPIO_FN_LCD_DATA15_B, +	GPIO_FN_SSI_WS23, GPIO_FN_VI1_5_B, GPIO_FN_TX1_D, GPIO_FN_HSCK0_C, +		GPIO_FN_FALE_B, GPIO_FN_LCD_DON_B, +	GPIO_FN_SSI_SDATA2, GPIO_FN_VI1_6_B, GPIO_FN_HRX0_C, GPIO_FN_FRE_B, +		GPIO_FN_LCD_CL1_B, +	GPIO_FN_SSI_SDATA3, GPIO_FN_VI1_7_B, GPIO_FN_HTX0_C, GPIO_FN_FWE_B, +		GPIO_FN_LCD_CL2_B, +	GPIO_FN_AUDIO_CLKA_A, GPIO_FN_VI1_CLK_B, GPIO_FN_SCK1_D, +		GPIO_FN_IECLK_B, GPIO_FN_LCD_FLM_B, +	GPIO_FN_AUDIO_CLKB_A, GPIO_FN_LCD_CLK_B, +	GPIO_FN_AUDIO_CLKC, GPIO_FN_SCK1_E, GPIO_FN_HCTS0_C, GPIO_FN_FRB_B, +		GPIO_FN_LCD_VEPWC_B, +	GPIO_FN_AUDIO_CLKOUT, GPIO_FN_TX1_E, GPIO_FN_HRTS0_C, GPIO_FN_FSE_B, +		GPIO_FN_LCD_M_DISP_B, +	GPIO_FN_CAN_CLK_A, GPIO_FN_RX4_D, +	GPIO_FN_CAN0_TX_A, GPIO_FN_TX4_D, GPIO_FN_MLB_CLK, +	GPIO_FN_CAN1_RX_A, GPIO_FN_IRQ1_B, +	GPIO_FN_CAN0_RX_A, GPIO_FN_IRQ0_B, GPIO_FN_MLB_SIG, +	GPIO_FN_CAN1_TX_A, GPIO_FN_TX5_C, GPIO_FN_MLB_DAT, + +	/* IPSR11 */ +	GPIO_FN_SCL1, GPIO_FN_SCIF_CLK_C, +	GPIO_FN_SDA1, GPIO_FN_RX1_E, +	GPIO_FN_SDA0, GPIO_FN_HIFEBL_A, +	GPIO_FN_SDSELF, GPIO_FN_RTS1_E, +	GPIO_FN_SCIF_CLK_A, GPIO_FN_HSPI_CLK_A, GPIO_FN_VI0_CLK, +		GPIO_FN_RMII0_TXD0_A, GPIO_FN_ET0_ERXD4, +	GPIO_FN_SCK0_A, GPIO_FN_HSPI_CS_A, GPIO_FN_VI0_CLKENB, +		GPIO_FN_RMII0_TXD1_A, GPIO_FN_ET0_ERXD5, +	GPIO_FN_RX0_A, GPIO_FN_HSPI_RX_A, GPIO_FN_RMII0_RXD0_A, +		GPIO_FN_ET0_ERXD6, +	GPIO_FN_TX0_A, GPIO_FN_HSPI_TX_A, +	GPIO_FN_PENC1, GPIO_FN_TX3_D, GPIO_FN_CAN1_TX_B, GPIO_FN_TX5_D, +		GPIO_FN_IETX_B, +	GPIO_FN_USB_OVC1, GPIO_FN_RX3_D, GPIO_FN_CAN1_RX_B, GPIO_FN_RX5_D, +		GPIO_FN_IERX_B, +	GPIO_FN_DREQ0, GPIO_FN_SD1_CLK_A, GPIO_FN_ET0_TX_EN, +	GPIO_FN_DACK0, GPIO_FN_SD1_DAT3_A, GPIO_FN_ET0_TX_ER, +	GPIO_FN_DREQ1, GPIO_FN_HSPI_CLK_B, GPIO_FN_RX4_B, GPIO_FN_ET0_PHY_INT_C, +		GPIO_FN_ET0_TX_CLK_A, +	GPIO_FN_DACK1, GPIO_FN_HSPI_CS_B, GPIO_FN_TX4_B, GPIO_FN_ET0_RX_CLK_A, +	GPIO_FN_PRESETOUT, GPIO_FN_ST_CLKOUT, + +}; + +#endif /* __ASM_SH7734_H__ */ diff --git a/arch/sh/include/cpu-sh4/cpu/sh7757.h b/arch/sh/include/cpu-sh4/cpu/sh7757.h index 15f3de11c55..5340f3bc186 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7757.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7757.h @@ -251,4 +251,39 @@ enum {  	GPIO_FN_ON_DQ3,	GPIO_FN_ON_DQ2,	GPIO_FN_ON_DQ1,	GPIO_FN_ON_DQ0,  }; +enum { +	SHDMA_SLAVE_INVALID, +	SHDMA_SLAVE_SDHI_TX, +	SHDMA_SLAVE_SDHI_RX, +	SHDMA_SLAVE_MMCIF_TX, +	SHDMA_SLAVE_MMCIF_RX, +	SHDMA_SLAVE_SCIF2_TX, +	SHDMA_SLAVE_SCIF2_RX, +	SHDMA_SLAVE_SCIF3_TX, +	SHDMA_SLAVE_SCIF3_RX, +	SHDMA_SLAVE_SCIF4_TX, +	SHDMA_SLAVE_SCIF4_RX, +	SHDMA_SLAVE_RIIC0_TX, +	SHDMA_SLAVE_RIIC0_RX, +	SHDMA_SLAVE_RIIC1_TX, +	SHDMA_SLAVE_RIIC1_RX, +	SHDMA_SLAVE_RIIC2_TX, +	SHDMA_SLAVE_RIIC2_RX, +	SHDMA_SLAVE_RIIC3_TX, +	SHDMA_SLAVE_RIIC3_RX, +	SHDMA_SLAVE_RIIC4_TX, +	SHDMA_SLAVE_RIIC4_RX, +	SHDMA_SLAVE_RIIC5_TX, +	SHDMA_SLAVE_RIIC5_RX, +	SHDMA_SLAVE_RIIC6_TX, +	SHDMA_SLAVE_RIIC6_RX, +	SHDMA_SLAVE_RIIC7_TX, +	SHDMA_SLAVE_RIIC7_RX, +	SHDMA_SLAVE_RIIC8_TX, +	SHDMA_SLAVE_RIIC8_RX, +	SHDMA_SLAVE_RIIC9_TX, +	SHDMA_SLAVE_RIIC9_RX, +	SHDMA_SLAVE_RSPI_TX, +	SHDMA_SLAVE_RSPI_RX, +};  #endif /* __ASM_SH7757_H__ */ diff --git a/arch/sh/include/cpu-sh4/cpu/sh7786.h b/arch/sh/include/cpu-sh4/cpu/sh7786.h index 977862f9072..0df09e638f0 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7786.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7786.h @@ -32,16 +32,14 @@ enum {  	GPIO_PD3, GPIO_PD2, GPIO_PD1, GPIO_PD0,  	/* PE */ -	GPIO_PE5, GPIO_PE4, GPIO_PE3, GPIO_PE2, -	GPIO_PE1, GPIO_PE0, +	GPIO_PE7, GPIO_PE6,  	/* PF */  	GPIO_PF7, GPIO_PF6, GPIO_PF5, GPIO_PF4,  	GPIO_PF3, GPIO_PF2, GPIO_PF1, GPIO_PF0,  	/* PG */ -	GPIO_PG7, GPIO_PG6, GPIO_PG5, GPIO_PG4, -	GPIO_PG3, GPIO_PG2, GPIO_PG1, GPIO_PG0, +	GPIO_PG7, GPIO_PG6, GPIO_PG5,  	/* PH */  	GPIO_PH7, GPIO_PH6, GPIO_PH5, GPIO_PH4, @@ -49,7 +47,7 @@ enum {  	/* PJ */  	GPIO_PJ7, GPIO_PJ6, GPIO_PJ5, GPIO_PJ4, -	GPIO_PJ3, GPIO_PJ2, GPIO_PJ1, GPIO_PJ0, +	GPIO_PJ3, GPIO_PJ2, GPIO_PJ1,  	/* DU */  	GPIO_FN_DCLKIN, GPIO_FN_DCLKOUT, GPIO_FN_ODDF, diff --git a/arch/sh/include/cpu-sh4a/cpu/dma.h b/arch/sh/include/cpu-sh4a/cpu/dma.h new file mode 100644 index 00000000000..89afb650ce2 --- /dev/null +++ b/arch/sh/include/cpu-sh4a/cpu/dma.h @@ -0,0 +1,72 @@ +#ifndef __ASM_SH_CPU_SH4_DMA_SH7780_H +#define __ASM_SH_CPU_SH4_DMA_SH7780_H + +#include <linux/sh_intc.h> + +#if defined(CONFIG_CPU_SUBTYPE_SH7343) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7730) +#define DMTE0_IRQ	evt2irq(0x800) +#define DMTE4_IRQ	evt2irq(0xb80) +#define DMAE0_IRQ	evt2irq(0xbc0)	/* DMA Error IRQ*/ +#define SH_DMAC_BASE0	0xFE008020 +#elif defined(CONFIG_CPU_SUBTYPE_SH7722) +#define DMTE0_IRQ	evt2irq(0x800) +#define DMTE4_IRQ	evt2irq(0xb80) +#define DMAE0_IRQ	evt2irq(0xbc0)	/* DMA Error IRQ*/ +#define SH_DMAC_BASE0	0xFE008020 +#elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7764) +#define DMTE0_IRQ	evt2irq(0x640) +#define DMTE4_IRQ	evt2irq(0x780) +#define DMAE0_IRQ	evt2irq(0x6c0) +#define SH_DMAC_BASE0	0xFF608020 +#elif defined(CONFIG_CPU_SUBTYPE_SH7723) +#define DMTE0_IRQ	evt2irq(0x800)	/* DMAC0A*/ +#define DMTE4_IRQ	evt2irq(0xb80)	/* DMAC0B */ +#define DMTE6_IRQ	evt2irq(0x700) +#define DMTE8_IRQ	evt2irq(0x740)	/* DMAC1A */ +#define DMTE9_IRQ	evt2irq(0x760) +#define DMTE10_IRQ	evt2irq(0xb00)	/* DMAC1B */ +#define DMTE11_IRQ	evt2irq(0xb20) +#define DMAE0_IRQ	evt2irq(0xbc0)	/* DMA Error IRQ*/ +#define DMAE1_IRQ	evt2irq(0xb40)	/* DMA Error IRQ*/ +#define SH_DMAC_BASE0	0xFE008020 +#define SH_DMAC_BASE1	0xFDC08020 +#elif defined(CONFIG_CPU_SUBTYPE_SH7724) +#define DMTE0_IRQ	evt2irq(0x800)	/* DMAC0A*/ +#define DMTE4_IRQ	evt2irq(0xb80)	/* DMAC0B */ +#define DMTE6_IRQ	evt2irq(0x700) +#define DMTE8_IRQ	evt2irq(0x740)	/* DMAC1A */ +#define DMTE9_IRQ	evt2irq(0x760) +#define DMTE10_IRQ	evt2irq(0xb00)	/* DMAC1B */ +#define DMTE11_IRQ	evt2irq(0xb20) +#define DMAE0_IRQ	evt2irq(0xbc0)	/* DMA Error IRQ*/ +#define DMAE1_IRQ	evt2irq(0xb40)	/* DMA Error IRQ*/ +#define SH_DMAC_BASE0	0xFE008020 +#define SH_DMAC_BASE1	0xFDC08020 +#elif defined(CONFIG_CPU_SUBTYPE_SH7780) +#define DMTE0_IRQ	evt2irq(0x640) +#define DMTE4_IRQ	evt2irq(0x780) +#define DMTE6_IRQ	evt2irq(0x7c0) +#define DMTE8_IRQ	evt2irq(0xd80) +#define DMTE9_IRQ	evt2irq(0xda0) +#define DMTE10_IRQ	evt2irq(0xdc0) +#define DMTE11_IRQ	evt2irq(0xde0) +#define DMAE0_IRQ	evt2irq(0x6c0)	/* DMA Error IRQ */ +#define SH_DMAC_BASE0	0xFC808020 +#define SH_DMAC_BASE1	0xFC818020 +#else /* SH7785 */ +#define DMTE0_IRQ	evt2irq(0x620) +#define DMTE4_IRQ	evt2irq(0x6a0) +#define DMTE6_IRQ	evt2irq(0x880) +#define DMTE8_IRQ	evt2irq(0x8c0) +#define DMTE9_IRQ	evt2irq(0x8e0) +#define DMTE10_IRQ	evt2irq(0x900) +#define DMTE11_IRQ	evt2irq(0x920) +#define DMAE0_IRQ	evt2irq(0x6e0)	/* DMA Error IRQ0 */ +#define DMAE1_IRQ	evt2irq(0x940)	/* DMA Error IRQ1 */ +#define SH_DMAC_BASE0	0xFC808020 +#define SH_DMAC_BASE1	0xFCC08020 +#endif + +#endif /* __ASM_SH_CPU_SH4_DMA_SH7780_H */ diff --git a/arch/sh/include/cpu-sh4a/cpu/serial.h b/arch/sh/include/cpu-sh4a/cpu/serial.h new file mode 100644 index 00000000000..ff1bc275d21 --- /dev/null +++ b/arch/sh/include/cpu-sh4a/cpu/serial.h @@ -0,0 +1,7 @@ +#ifndef __CPU_SH4A_SERIAL_H +#define __CPU_SH4A_SERIAL_H + +/* arch/sh/kernel/cpu/sh4a/serial-sh7722.c */ +extern struct plat_sci_port_ops sh7722_sci_port_ops; + +#endif /* __CPU_SH4A_SERIAL_H */ diff --git a/arch/sh/include/cpu-sh5/cpu/dma.h b/arch/sh/include/cpu-sh5/cpu/dma.h deleted file mode 100644 index 7bf6bb3d35e..00000000000 --- a/arch/sh/include/cpu-sh5/cpu/dma.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_SH_CPU_SH5_DMA_H -#define __ASM_SH_CPU_SH5_DMA_H - -/* Nothing yet */ - -#endif /* __ASM_SH_CPU_SH5_DMA_H */ diff --git a/arch/sh/include/mach-common/mach/highlander.h b/arch/sh/include/mach-common/mach/highlander.h index 5d9d4d5154b..6ce944e33e5 100644 --- a/arch/sh/include/mach-common/mach/highlander.h +++ b/arch/sh/include/mach-common/mach/highlander.h @@ -24,7 +24,7 @@  #define PA_OBLED        (PA_BCR+0x001c) /* On Board LED control */  #define PA_OBSW         (PA_BCR+0x001e) /* On Board Switch control */  #define PA_AUDIOSEL     (PA_BCR+0x0020) /* Sound Interface Select control */ -#define PA_EXTPLR       (PA_BCR+0x001e) /* Extention Pin Polarity control */ +#define PA_EXTPLR       (PA_BCR+0x001e) /* Extension Pin Polarity control */  #define PA_TPCTL        (PA_BCR+0x0100) /* Touch Panel Access control */  #define PA_TPDCKCTL     (PA_BCR+0x0102) /* Touch Panel Access data control */  #define PA_TPCTLCLR     (PA_BCR+0x0104) /* Touch Panel Access control */ @@ -89,7 +89,7 @@  #define PA_OBLED	(PA_BCR+0x0018)	/* On Board LED control */  #define PA_OBSW		(PA_BCR+0x001a)	/* On Board Switch control */  #define PA_AUDIOSEL	(PA_BCR+0x001c)	/* Sound Interface Select control */ -#define PA_EXTPLR	(PA_BCR+0x001e)	/* Extention Pin Polarity control */ +#define PA_EXTPLR	(PA_BCR+0x001e)	/* Extension Pin Polarity control */  #define PA_TPCTL	(PA_BCR+0x0100)	/* Touch Panel Access control */  #define PA_TPDCKCTL	(PA_BCR+0x0102)	/* Touch Panel Access data control */  #define PA_TPCTLCLR	(PA_BCR+0x0104)	/* Touch Panel Access control */ diff --git a/arch/sh/include/mach-common/mach/hp6xx.h b/arch/sh/include/mach-common/mach/hp6xx.h index bcc301ac12f..6aaaf8596e6 100644 --- a/arch/sh/include/mach-common/mach/hp6xx.h +++ b/arch/sh/include/mach-common/mach/hp6xx.h @@ -9,10 +9,11 @@   * for more details.   *   */ +#include <linux/sh_intc.h> -#define HP680_BTN_IRQ		32	/* IRQ0_IRQ */ -#define HP680_TS_IRQ		35	/* IRQ3_IRQ */ -#define HP680_HD64461_IRQ	36	/* IRQ4_IRQ */ +#define HP680_BTN_IRQ		evt2irq(0x600)	/* IRQ0_IRQ */ +#define HP680_TS_IRQ		evt2irq(0x660)	/* IRQ3_IRQ */ +#define HP680_HD64461_IRQ	evt2irq(0x680)	/* IRQ4_IRQ */  #define DAC_LCD_BRIGHTNESS	0  #define DAC_SPEAKER_VOLUME	1 diff --git a/arch/sh/include/mach-common/mach/lboxre2.h b/arch/sh/include/mach-common/mach/lboxre2.h index e6d16050492..3a4dcc5c74e 100644 --- a/arch/sh/include/mach-common/mach/lboxre2.h +++ b/arch/sh/include/mach-common/mach/lboxre2.h @@ -11,13 +11,14 @@   * for more details.   *   */ +#include <linux/sh_intc.h> -#define IRQ_CF1		9	/* CF1 */ -#define IRQ_CF0		10	/* CF0 */ -#define IRQ_INTD	11	/* INTD */ -#define IRQ_ETH1	12	/* Ether1 */ -#define IRQ_ETH0	13	/* Ether0 */ -#define IRQ_INTA	14	/* INTA */ +#define IRQ_CF1		evt2irq(0x320)	/* CF1 */ +#define IRQ_CF0		evt2irq(0x340)	/* CF0 */ +#define IRQ_INTD	evt2irq(0x360)	/* INTD */ +#define IRQ_ETH1	evt2irq(0x380)	/* Ether1 */ +#define IRQ_ETH0	evt2irq(0x3a0)	/* Ether0 */ +#define IRQ_INTA	evt2irq(0x3c0)	/* INTA */  void init_lboxre2_IRQ(void); diff --git a/arch/sh/include/mach-common/mach/mangle-port.h b/arch/sh/include/mach-common/mach/mangle-port.h new file mode 100644 index 00000000000..4ca1769a0f1 --- /dev/null +++ b/arch/sh/include/mach-common/mach/mangle-port.h @@ -0,0 +1,49 @@ +/* + * SH version cribbed from the MIPS copy: + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 2003, 2004 Ralf Baechle + */ +#ifndef __MACH_COMMON_MANGLE_PORT_H +#define __MACH_COMMON_MANGLE_PORT_H + +/* + * Sane hardware offers swapping of PCI/ISA I/O space accesses in hardware; + * less sane hardware forces software to fiddle with this... + * + * Regardless, if the host bus endianness mismatches that of PCI/ISA, then + * you can't have the numerical value of data and byte addresses within + * multibyte quantities both preserved at the same time.  Hence two + * variations of functions: non-prefixed ones that preserve the value + * and prefixed ones that preserve byte addresses.  The latters are + * typically used for moving raw data between a peripheral and memory (cf. + * string I/O functions), hence the "__mem_" prefix. + */ +#if defined(CONFIG_SWAP_IO_SPACE) + +# define ioswabb(x)		(x) +# define __mem_ioswabb(x)	(x) +# define ioswabw(x)		le16_to_cpu(x) +# define __mem_ioswabw(x)	(x) +# define ioswabl(x)		le32_to_cpu(x) +# define __mem_ioswabl(x)	(x) +# define ioswabq(x)		le64_to_cpu(x) +# define __mem_ioswabq(x)	(x) + +#else + +# define ioswabb(x)		(x) +# define __mem_ioswabb(x)	(x) +# define ioswabw(x)		(x) +# define __mem_ioswabw(x)	cpu_to_le16(x) +# define ioswabl(x)		(x) +# define __mem_ioswabl(x)	cpu_to_le32(x) +# define ioswabq(x)		(x) +# define __mem_ioswabq(x)	cpu_to_le32(x) + +#endif + +#endif /* __MACH_COMMON_MANGLE_PORT_H */ diff --git a/arch/sh/include/mach-common/mach/r2d.h b/arch/sh/include/mach-common/mach/r2d.h index 0a800157b82..e04f75eaa15 100644 --- a/arch/sh/include/mach-common/mach/r2d.h +++ b/arch/sh/include/mach-common/mach/r2d.h @@ -18,18 +18,18 @@  #define PA_DISPCTL	0xa4000008	/* Display Timing control */  #define PA_SDMPOW	0xa400000a	/* SD Power control */  #define PA_RTCCE	0xa400000c	/* RTC(9701) Enable control */ -#define PA_PCICD	0xa400000e	/* PCI Extention detect control */ +#define PA_PCICD	0xa400000e	/* PCI Extension detect control */  #define PA_VOYAGERRTS	0xa4000020	/* VOYAGER Reset control */  #define PA_R2D1_AXRST		0xa4000022	/* AX_LAN Reset control */  #define PA_R2D1_CFRST		0xa4000024	/* CF Reset control */  #define PA_R2D1_ADMRTS		0xa4000026	/* SD Reset control */ -#define PA_R2D1_EXTRST		0xa4000028	/* Extention Reset control */ +#define PA_R2D1_EXTRST		0xa4000028	/* Extension Reset control */  #define PA_R2D1_CFCDINTCLR	0xa400002a	/* CF Insert Interrupt clear */  #define PA_R2DPLUS_CFRST	0xa4000022	/* CF Reset control */  #define PA_R2DPLUS_ADMRTS	0xa4000024	/* SD Reset control */ -#define PA_R2DPLUS_EXTRST	0xa4000026	/* Extention Reset control */ +#define PA_R2DPLUS_EXTRST	0xa4000026	/* Extension Reset control */  #define PA_R2DPLUS_CFCDINTCLR	0xa4000028	/* CF Insert Interrupt clear */  #define PA_R2DPLUS_KEYCTLCLR	0xa400002a	/* Key Interrupt clear */ diff --git a/arch/sh/include/mach-common/mach/romimage.h b/arch/sh/include/mach-common/mach/romimage.h index 08fb42269ec..3670455faaa 100644 --- a/arch/sh/include/mach-common/mach/romimage.h +++ b/arch/sh/include/mach-common/mach/romimage.h @@ -4,7 +4,7 @@  #else /* __ASSEMBLY__ */ -extern inline void mmcif_update_progress(int nr) +static inline void mmcif_update_progress(int nr)  {  } diff --git a/arch/sh/include/mach-common/mach/sdk7780.h b/arch/sh/include/mach-common/mach/sdk7780.h index 697dc865f21..ce64e02e9b5 100644 --- a/arch/sh/include/mach-common/mach/sdk7780.h +++ b/arch/sh/include/mach-common/mach/sdk7780.h @@ -11,6 +11,7 @@   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   */ +#include <linux/sh_intc.h>  #include <asm/addrspace.h>  /* Box specific addresses.  */ @@ -67,9 +68,9 @@  #define SDK7780_NR_IRL			15  /* IDE/ATA interrupt */ -#define IRQ_CFCARD				14 +#define IRQ_CFCARD			evt2irq(0x3c0)  /* SMC interrupt */ -#define IRQ_ETHERNET			6 +#define IRQ_ETHERNET			evt2irq(0x2c0)  /* arch/sh/boards/renesas/sdk7780/irq.c */ diff --git a/arch/sh/include/mach-common/mach/titan.h b/arch/sh/include/mach-common/mach/titan.h index 4a674d27cbb..fa3cd801cf2 100644 --- a/arch/sh/include/mach-common/mach/titan.h +++ b/arch/sh/include/mach-common/mach/titan.h @@ -4,14 +4,16 @@  #ifndef _ASM_SH_TITAN_H  #define _ASM_SH_TITAN_H +#include <linux/sh_intc.h> +  #define __IO_PREFIX titan  #include <asm/io_generic.h>  /* IRQ assignments */ -#define TITAN_IRQ_WAN		2	/* eth0 (WAN) */ -#define TITAN_IRQ_LAN		5	/* eth1 (LAN) */ -#define TITAN_IRQ_MPCIA		8	/* mPCI A */ -#define TITAN_IRQ_MPCIB		11	/* mPCI B */ -#define TITAN_IRQ_USB		11	/* USB */ +#define TITAN_IRQ_WAN		evt2irq(0x240)	/* eth0 (WAN) */ +#define TITAN_IRQ_LAN		evt2irq(0x2a0)	/* eth1 (LAN) */ +#define TITAN_IRQ_MPCIA		evt2irq(0x300)	/* mPCI A */ +#define TITAN_IRQ_MPCIB		evt2irq(0x360)	/* mPCI B */ +#define TITAN_IRQ_USB		evt2irq(0x360)	/* USB */  #endif /* __ASM_SH_TITAN_H */ diff --git a/arch/sh/include/mach-dreamcast/mach/dma.h b/arch/sh/include/mach-dreamcast/mach/dma.h index ddd68e78870..1dbfdf701c9 100644 --- a/arch/sh/include/mach-dreamcast/mach/dma.h +++ b/arch/sh/include/mach-dreamcast/mach/dma.h @@ -11,9 +11,7 @@  #define __ASM_SH_DREAMCAST_DMA_H  /* Number of DMA channels */ -#define ONCHIP_NR_DMA_CHANNELS	4  #define G2_NR_DMA_CHANNELS	4 -#define PVR2_NR_DMA_CHANNELS	1  /* Channels for cascading */  #define PVR2_CASCADE_CHAN	2 diff --git a/arch/sh/include/mach-ecovec24/mach/romimage.h b/arch/sh/include/mach-ecovec24/mach/romimage.h index 1dcf5e6c8d8..60f3e8af05f 100644 --- a/arch/sh/include/mach-ecovec24/mach/romimage.h +++ b/arch/sh/include/mach-ecovec24/mach/romimage.h @@ -6,7 +6,7 @@   */  #include <asm/romimage-macros.h> -#include "partner-jet-setup.txt" +#include <mach/partner-jet-setup.txt>  	/* execute icbi after enabling cache */  	mov.l	1f, r0 @@ -35,7 +35,7 @@  #define HIZCRA		0xa4050158  #define PGDR		0xa405012c -extern inline void mmcif_update_progress(int nr) +static inline void mmcif_update_progress(int nr)  {  	/* disable Hi-Z for LED pins */  	__raw_writew(__raw_readw(HIZCRA) & ~(1 << 1), HIZCRA); diff --git a/arch/sh/include/mach-kfr2r09/mach/kfr2r09.h b/arch/sh/include/mach-kfr2r09/mach/kfr2r09.h index 07e635b0e04..79f154e5cb9 100644 --- a/arch/sh/include/mach-kfr2r09/mach/kfr2r09.h +++ b/arch/sh/include/mach-kfr2r09/mach/kfr2r09.h @@ -4,21 +4,17 @@  #include <video/sh_mobile_lcdc.h>  #if defined(CONFIG_FB_SH_MOBILE_LCDC) || defined(CONFIG_FB_SH_MOBILE_LCDC_MODULE) -void kfr2r09_lcd_on(void *board_data, struct fb_info *info); -void kfr2r09_lcd_off(void *board_data); -int kfr2r09_lcd_setup(void *board_data, void *sys_ops_handle, +int kfr2r09_lcd_setup(void *sys_ops_handle,  		      struct sh_mobile_lcdc_sys_bus_ops *sys_ops); -void kfr2r09_lcd_start(void *board_data, void *sys_ops_handle, +void kfr2r09_lcd_start(void *sys_ops_handle,  		       struct sh_mobile_lcdc_sys_bus_ops *sys_ops);  #else -static void kfr2r09_lcd_on(void *board_data) {} -static void kfr2r09_lcd_off(void *board_data) {} -static int kfr2r09_lcd_setup(void *board_data, void *sys_ops_handle, +static int kfr2r09_lcd_setup(void *sys_ops_handle,  				struct sh_mobile_lcdc_sys_bus_ops *sys_ops)  {  	return -ENODEV;  } -static void kfr2r09_lcd_start(void *board_data, void *sys_ops_handle, +static void kfr2r09_lcd_start(void *sys_ops_handle,  				struct sh_mobile_lcdc_sys_bus_ops *sys_ops)  {  } diff --git a/arch/sh/include/mach-kfr2r09/mach/romimage.h b/arch/sh/include/mach-kfr2r09/mach/romimage.h index 976256a323f..1afae21ced5 100644 --- a/arch/sh/include/mach-kfr2r09/mach/romimage.h +++ b/arch/sh/include/mach-kfr2r09/mach/romimage.h @@ -6,7 +6,7 @@   */  #include <asm/romimage-macros.h> -#include "partner-jet-setup.txt" +#include <mach/partner-jet-setup.txt>  	/* execute icbi after enabling cache */  	mov.l	1f, r0 @@ -23,7 +23,7 @@  #else /* __ASSEMBLY__ */ -extern inline void mmcif_update_progress(int nr) +static inline void mmcif_update_progress(int nr)  {  } diff --git a/arch/sh/include/mach-landisk/mach/iodata_landisk.h b/arch/sh/include/mach-landisk/mach/iodata_landisk.h index 6fb04ab38b9..ceeea48cc7a 100644 --- a/arch/sh/include/mach-landisk/mach/iodata_landisk.h +++ b/arch/sh/include/mach-landisk/mach/iodata_landisk.h @@ -2,12 +2,13 @@  #define __ASM_SH_IODATA_LANDISK_H  /* - * linux/include/asm-sh/landisk/iodata_landisk.h + * arch/sh/include/mach-landisk/mach/iodata_landisk.h   *   * Copyright (C) 2000  Atom Create Engineering Co., Ltd.   *   * IO-DATA LANDISK support   */ +#include <linux/sh_intc.h>  /* Box specific addresses.  */ @@ -25,15 +26,17 @@  #define PA_PIDE_OFFSET	0x40		/* CF IDE Offset */  #define PA_SIDE_OFFSET	0x40		/* HDD IDE Offset */ -#define IRQ_PCIINTA	5		/* PCI INTA IRQ */ -#define IRQ_PCIINTB	6		/* PCI INTB IRQ */ -#define IRQ_PCIINDC	7		/* PCI INTC IRQ */ -#define IRQ_PCIINTD	8		/* PCI INTD IRQ */ -#define IRQ_ATA		9		/* ATA IRQ */ -#define IRQ_FATA	10		/* FATA IRQ */ -#define IRQ_POWER	11		/* Power Switch IRQ */ -#define IRQ_BUTTON	12		/* USL-5P Button IRQ */ -#define IRQ_FAULT	13		/* USL-5P Fault  IRQ */ +#define IRQ_PCIINTA	evt2irq(0x2a0)	/* PCI INTA IRQ */ +#define IRQ_PCIINTB	evt2irq(0x2c0)	/* PCI INTB IRQ */ +#define IRQ_PCIINTC	evt2irq(0x2e0)	/* PCI INTC IRQ */ +#define IRQ_PCIINTD	evt2irq(0x300)	/* PCI INTD IRQ */ +#define IRQ_ATA		evt2irq(0x320)	/* ATA IRQ */ +#define IRQ_FATA	evt2irq(0x340)	/* FATA IRQ */ +#define IRQ_POWER	evt2irq(0x360)	/* Power Switch IRQ */ +#define IRQ_BUTTON	evt2irq(0x380)	/* USL-5P Button IRQ */ +#define IRQ_FAULT	evt2irq(0x3a0)	/* USL-5P Fault  IRQ */ + +void init_landisk_IRQ(void);  #define __IO_PREFIX landisk  #include <asm/io_generic.h> diff --git a/arch/sh/include/mach-migor/mach/migor.h b/arch/sh/include/mach-migor/mach/migor.h index 42fccf93412..7de7bb74c29 100644 --- a/arch/sh/include/mach-migor/mach/migor.h +++ b/arch/sh/include/mach-migor/mach/migor.h @@ -9,7 +9,7 @@  #include <video/sh_mobile_lcdc.h> -int migor_lcd_qvga_setup(void *board_data, void *sys_ops_handle, +int migor_lcd_qvga_setup(void *sys_ops_handle,  			 struct sh_mobile_lcdc_sys_bus_ops *sys_ops);  #endif /* __ASM_SH_MIGOR_H */ diff --git a/arch/sh/include/mach-sdk7786/mach/fpga.h b/arch/sh/include/mach-sdk7786/mach/fpga.h index 40f0c2d3690..a9cdac46992 100644 --- a/arch/sh/include/mach-sdk7786/mach/fpga.h +++ b/arch/sh/include/mach-sdk7786/mach/fpga.h @@ -14,11 +14,16 @@  #define INTTESTR	0x040  #define SYSSR		0x050  #define NRGPR		0x060 +  #define NMISR		0x070 +#define  NMISR_MAN_NMI	BIT(0) +#define  NMISR_AUX_NMI	BIT(1) +#define  NMISR_MASK	(NMISR_MAN_NMI | NMISR_AUX_NMI)  #define NMIMR		0x080  #define  NMIMR_MAN_NMIM	BIT(0)	/* Manual NMI mask */  #define  NMIMR_AUX_NMIM	BIT(1)	/* Auxiliary NMI mask */ +#define  NMIMR_MASK	(NMIMR_MAN_NMIM | NMIMR_AUX_NMIM)  #define INTBSR		0x090  #define INTBMR		0x0a0 @@ -126,6 +131,9 @@  extern void __iomem *sdk7786_fpga_base;  extern void sdk7786_fpga_init(void); +/* arch/sh/boards/mach-sdk7786/nmi.c */ +extern void sdk7786_nmi_init(void); +  #define SDK7786_FPGA_REGADDR(reg)	(sdk7786_fpga_base + (reg))  /* diff --git a/arch/sh/include/mach-se/mach/se.h b/arch/sh/include/mach-se/mach/se.h index 14be91c5a2f..8a6d44b4987 100644 --- a/arch/sh/include/mach-se/mach/se.h +++ b/arch/sh/include/mach-se/mach/se.h @@ -8,6 +8,7 @@   *   * Hitachi SolutionEngine support   */ +#include <linux/sh_intc.h>  /* Box specific addresses.  */ @@ -82,16 +83,16 @@  #define INTC_IPRD       0xa4000018UL  #define INTC_IPRE       0xa400001aUL -#define IRQ0_IRQ        32 -#define IRQ1_IRQ        33 +#define IRQ0_IRQ        evt2irq(0x600) +#define IRQ1_IRQ        evt2irq(0x620)  #endif  #if defined(CONFIG_CPU_SUBTYPE_SH7705) -#define IRQ_STNIC	12 -#define IRQ_CFCARD	14 +#define IRQ_STNIC	evt2irq(0x380) +#define IRQ_CFCARD	evt2irq(0x3c0)  #else -#define IRQ_STNIC	10 -#define IRQ_CFCARD	7 +#define IRQ_STNIC	evt2irq(0x340) +#define IRQ_CFCARD	evt2irq(0x2e0)  #endif  /* SH Ether support (SH7710/SH7712) */ @@ -105,9 +106,9 @@  # define PHY_ID 0x01  #endif  /* Ether IRQ */ -#define SH_ETH0_IRQ	80 -#define SH_ETH1_IRQ	81 -#define SH_TSU_IRQ	82 +#define SH_ETH0_IRQ	evt2irq(0xc00) +#define SH_ETH1_IRQ	evt2irq(0xc20) +#define SH_TSU_IRQ	evt2irq(0xc40)  void init_se_IRQ(void); diff --git a/arch/sh/include/mach-se/mach/se7343.h b/arch/sh/include/mach-se/mach/se7343.h index 8d8170d6cc4..542521c970c 100644 --- a/arch/sh/include/mach-se/mach/se7343.h +++ b/arch/sh/include/mach-se/mach/se7343.h @@ -8,6 +8,7 @@   *   * SH-Mobile SolutionEngine 7343 support   */ +#include <linux/sh_intc.h>  /* Box specific addresses.  */ @@ -49,9 +50,6 @@  #define PA_LED		0xb0C00000	/* LED */  #define LED_SHIFT       0  #define PA_DIPSW	0xb0900000	/* Dip switch 31 */ -#define PA_CPLD_MODESET	0xb1400004	/* CPLD Mode set register */ -#define PA_CPLD_ST	0xb1400008	/* CPLD Interrupt status register */ -#define PA_CPLD_IMSK	0xb140000a	/* CPLD Interrupt mask register */  /* Area 5 */  #define PA_EXT5		0x14000000  #define PA_EXT5_SIZE	0x04000000 @@ -118,10 +116,10 @@  #define FPGA_IN		0xb1400000  #define FPGA_OUT	0xb1400002 -#define IRQ0_IRQ        32 -#define IRQ1_IRQ        33 -#define IRQ4_IRQ        36 -#define IRQ5_IRQ        37 +#define IRQ0_IRQ        evt2irq(0x600) +#define IRQ1_IRQ        evt2irq(0x620) +#define IRQ4_IRQ        evt2irq(0x680) +#define IRQ5_IRQ        evt2irq(0x6a0)  #define SE7343_FPGA_IRQ_MRSHPC0	0  #define SE7343_FPGA_IRQ_MRSHPC1	1 @@ -134,8 +132,10 @@  #define SE7343_FPGA_IRQ_NR	12 +struct irq_domain; +  /* arch/sh/boards/se/7343/irq.c */ -extern unsigned int se7343_fpga_irq[]; +extern struct irq_domain *se7343_irq_domain;  void init_7343se_IRQ(void); diff --git a/arch/sh/include/mach-se/mach/se7721.h b/arch/sh/include/mach-se/mach/se7721.h index b957f604119..eabd0538de4 100644 --- a/arch/sh/include/mach-se/mach/se7721.h +++ b/arch/sh/include/mach-se/mach/se7721.h @@ -11,6 +11,8 @@  #ifndef __ASM_SH_SE7721_H  #define __ASM_SH_SE7721_H + +#include <linux/sh_intc.h>  #include <asm/addrspace.h>  /* Box specific addresses. */ @@ -49,9 +51,9 @@  #define MRSHPC_PCIC_INFO	(PA_MRSHPC + 30)  #define PA_LED		0xB6800000	/* 8bit LED */ -#define PA_FPGA		0xB7000000 	/* FPGA base address */ +#define PA_FPGA		0xB7000000	/* FPGA base address */ -#define MRSHPC_IRQ0	10 +#define MRSHPC_IRQ0	evt2irq(0x340)  #define FPGA_ILSR1	(PA_FPGA + 0x02)  #define FPGA_ILSR2	(PA_FPGA + 0x03) diff --git a/arch/sh/include/mach-se/mach/se7722.h b/arch/sh/include/mach-se/mach/se7722.h index 16505bfb8a9..637e7ac753f 100644 --- a/arch/sh/include/mach-se/mach/se7722.h +++ b/arch/sh/include/mach-se/mach/se7722.h @@ -13,6 +13,7 @@   * for more details.   *   */ +#include <linux/sh_intc.h>  #include <asm/addrspace.h>  /* Box specific addresses.  */ @@ -31,7 +32,7 @@  #define PA_PERIPHERAL	0xB0000000 -#define PA_PCIC         PA_PERIPHERAL   		/* MR-SHPC-01 PCMCIA */ +#define PA_PCIC         PA_PERIPHERAL		/* MR-SHPC-01 PCMCIA */  #define PA_MRSHPC       (PA_PERIPHERAL + 0x003fffe0)    /* MR-SHPC-01 PCMCIA controller */  #define PA_MRSHPC_MW1   (PA_PERIPHERAL + 0x00400000)    /* MR-SHPC-01 memory window base */  #define PA_MRSHPC_MW2   (PA_PERIPHERAL + 0x00500000)    /* MR-SHPC-01 attribute window base */ @@ -51,7 +52,7 @@  #define MRSHPC_PCIC_INFO (PA_MRSHPC + 30)  #define PA_LED		(PA_PERIPHERAL + 0x00800000)	/* 8bit LED */ -#define PA_FPGA		(PA_PERIPHERAL + 0x01800000) 	/* FPGA base address */ +#define PA_FPGA		(PA_PERIPHERAL + 0x01800000)	/* FPGA base address */  #define PA_LAN		(PA_AREA6_IO + 0)		/* SMC LAN91C111 */  /* GPIO */ @@ -77,14 +78,8 @@  #define PORT_HIZCRC     0xA405015CUL  /* IRQ */ -#define IRQ0_IRQ        32 -#define IRQ1_IRQ        33 - -#define IRQ01_MODE      0xb1800000 -#define IRQ01_STS       0xb1800004 -#define IRQ01_MASK      0xb1800008 - -/* Bits in IRQ01_* registers */ +#define IRQ0_IRQ        evt2irq(0x600) +#define IRQ1_IRQ        evt2irq(0x620)  #define SE7722_FPGA_IRQ_USB	0 /* IRQ0 */  #define SE7722_FPGA_IRQ_SMC	1 /* IRQ0 */ @@ -94,8 +89,10 @@  #define SE7722_FPGA_IRQ_MRSHPC3	5 /* IRQ1 */  #define SE7722_FPGA_IRQ_NR	6 +struct irq_domain; +  /* arch/sh/boards/se/7722/irq.c */ -extern unsigned int se7722_fpga_irq[]; +extern struct irq_domain *se7722_irq_domain;  void init_se7722_IRQ(void); diff --git a/arch/sh/include/mach-se/mach/se7724.h b/arch/sh/include/mach-se/mach/se7724.h index 29514a39d0f..be842dd1ca0 100644 --- a/arch/sh/include/mach-se/mach/se7724.h +++ b/arch/sh/include/mach-se/mach/se7724.h @@ -18,6 +18,7 @@   * for more details.   *   */ +#include <linux/sh_intc.h>  #include <asm/addrspace.h>  /* SH Eth */ @@ -35,9 +36,9 @@  #define IRQ2_MR		(0xba200028)  /* IRQ */ -#define IRQ0_IRQ        32 -#define IRQ1_IRQ        33 -#define IRQ2_IRQ        34 +#define IRQ0_IRQ        evt2irq(0x600) +#define IRQ1_IRQ        evt2irq(0x620) +#define IRQ2_IRQ        evt2irq(0x640)  /* Bits in IRQ012 registers */  #define SE7724_FPGA_IRQ_BASE	220 diff --git a/arch/sh/include/mach-se/mach/se7751.h b/arch/sh/include/mach-se/mach/se7751.h index b36792ac5d6..271871793d5 100644 --- a/arch/sh/include/mach-se/mach/se7751.h +++ b/arch/sh/include/mach-se/mach/se7751.h @@ -11,6 +11,7 @@   * Modified for 7751 Solution Engine by   * Ian da Silva and Jeremy Siegel, 2001.   */ +#include <linux/sh_intc.h>  /* Box specific addresses.  */ @@ -63,7 +64,7 @@  #define BCR_ILCRF	(PA_BCR + 10)  #define BCR_ILCRG	(PA_BCR + 12) -#define IRQ_79C973	13 +#define IRQ_79C973	evt2irq(0x3a0)  void init_7751se_IRQ(void); diff --git a/arch/sh/include/mach-se/mach/se7780.h b/arch/sh/include/mach-se/mach/se7780.h index 40e9b41458c..bde357cf81b 100644 --- a/arch/sh/include/mach-se/mach/se7780.h +++ b/arch/sh/include/mach-se/mach/se7780.h @@ -12,6 +12,7 @@   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   */ +#include <linux/sh_intc.h>  #include <asm/addrspace.h>  /* Box specific addresses.  */ @@ -80,13 +81,13 @@  #define IRQPOS_PCCPW            (0 * 4)  /* IDE interrupt */ -#define IRQ_IDE0                67 /* iVDR */ +#define IRQ_IDE0                evt2irq(0xa60) /* iVDR */  /* SMC interrupt */ -#define SMC_IRQ                 8 +#define SMC_IRQ                 evt2irq(0x300)  /* SM501 interrupt */ -#define SM501_IRQ               0 +#define SM501_IRQ               evt2irq(0x200)  /* interrupt pin */  #define IRQPIN_EXTINT1          0 /* IRQ0 pin */ diff --git a/arch/sh/include/uapi/asm/Kbuild b/arch/sh/include/uapi/asm/Kbuild new file mode 100644 index 00000000000..60613ae7851 --- /dev/null +++ b/arch/sh/include/uapi/asm/Kbuild @@ -0,0 +1,25 @@ +# UAPI Header export list +include include/uapi/asm-generic/Kbuild.asm + +header-y += auxvec.h +header-y += byteorder.h +header-y += cachectl.h +header-y += cpu-features.h +header-y += hw_breakpoint.h +header-y += ioctls.h +header-y += posix_types.h +header-y += posix_types_32.h +header-y += posix_types_64.h +header-y += ptrace.h +header-y += ptrace_32.h +header-y += ptrace_64.h +header-y += setup.h +header-y += sigcontext.h +header-y += signal.h +header-y += sockios.h +header-y += stat.h +header-y += swab.h +header-y += types.h +header-y += unistd.h +header-y += unistd_32.h +header-y += unistd_64.h diff --git a/arch/sh/include/asm/auxvec.h b/arch/sh/include/uapi/asm/auxvec.h index 483effd65e0..8bcc51af936 100644 --- a/arch/sh/include/asm/auxvec.h +++ b/arch/sh/include/uapi/asm/auxvec.h @@ -33,4 +33,6 @@  #define AT_L1D_CACHESHAPE	35  #define AT_L2_CACHESHAPE	36 +#define AT_VECTOR_SIZE_ARCH 5 /* entries in ARCH_DLINFO */ +  #endif /* __ASM_SH_AUXVEC_H */ diff --git a/arch/sh/include/asm/byteorder.h b/arch/sh/include/uapi/asm/byteorder.h index db2f5d7cb17..db2f5d7cb17 100644 --- a/arch/sh/include/asm/byteorder.h +++ b/arch/sh/include/uapi/asm/byteorder.h diff --git a/arch/sh/include/asm/cachectl.h b/arch/sh/include/uapi/asm/cachectl.h index 6ffb4b7a212..6ffb4b7a212 100644 --- a/arch/sh/include/asm/cachectl.h +++ b/arch/sh/include/uapi/asm/cachectl.h diff --git a/arch/sh/include/asm/cpu-features.h b/arch/sh/include/uapi/asm/cpu-features.h index 694abe490ed..694abe490ed 100644 --- a/arch/sh/include/asm/cpu-features.h +++ b/arch/sh/include/uapi/asm/cpu-features.h diff --git a/arch/sh/include/uapi/asm/hw_breakpoint.h b/arch/sh/include/uapi/asm/hw_breakpoint.h new file mode 100644 index 00000000000..ae5704fa77a --- /dev/null +++ b/arch/sh/include/uapi/asm/hw_breakpoint.h @@ -0,0 +1,4 @@ +/* + * There isn't anything here anymore, but the file must not be empty or patch + * will delete it. + */ diff --git a/arch/sh/include/asm/ioctls.h b/arch/sh/include/uapi/asm/ioctls.h index eb6c4c68797..34224107976 100644 --- a/arch/sh/include/asm/ioctls.h +++ b/arch/sh/include/uapi/asm/ioctls.h @@ -85,7 +85,12 @@  #define TCSETSF2	_IOW('T', 45, struct termios2)  #define TIOCGPTN	_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */  #define TIOCSPTLCK	_IOW('T',0x31, int)  /* Lock/unlock Pty */ +#define TIOCGDEV	_IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */  #define TIOCSIG		_IOW('T',0x36, int)  /* Generate signal on Pty slave */ +#define TIOCVHANGUP	_IO('T', 0x37) +#define TIOCGPKT	_IOR('T', 0x38, int) /* Get packet mode state */ +#define TIOCGPTLCK	_IOR('T', 0x39, int) /* Get Pty lock state */ +#define TIOCGEXCL	_IOR('T', 0x40, int) /* Get exclusive mode state */  #define TIOCSERCONFIG	_IO('T', 83) /* 0x5453 */  #define TIOCSERGWILD	_IOR('T', 84,  int) /* 0x5454 */ diff --git a/arch/sh/include/uapi/asm/posix_types.h b/arch/sh/include/uapi/asm/posix_types.h new file mode 100644 index 00000000000..dc55e5adfe1 --- /dev/null +++ b/arch/sh/include/uapi/asm/posix_types.h @@ -0,0 +1,7 @@ +#ifndef __KERNEL__ +# ifdef __SH5__ +#  include <asm/posix_types_64.h> +# else +#  include <asm/posix_types_32.h> +# endif +#endif /* __KERNEL__ */ diff --git a/arch/sh/include/asm/posix_types_32.h b/arch/sh/include/uapi/asm/posix_types_32.h index 6a9ceaaf1ae..ba0bdc423b0 100644 --- a/arch/sh/include/asm/posix_types_32.h +++ b/arch/sh/include/uapi/asm/posix_types_32.h @@ -3,8 +3,6 @@  typedef unsigned short	__kernel_mode_t;  #define __kernel_mode_t __kernel_mode_t -typedef unsigned short	__kernel_nlink_t; -#define __kernel_nlink_t __kernel_nlink_t  typedef unsigned short	__kernel_ipc_pid_t;  #define __kernel_ipc_pid_t __kernel_ipc_pid_t  typedef unsigned short	__kernel_uid_t; @@ -12,11 +10,6 @@ typedef unsigned short	__kernel_uid_t;  typedef unsigned short	__kernel_gid_t;  #define __kernel_gid_t __kernel_gid_t -typedef unsigned int	__kernel_uid32_t; -#define __kernel_uid32_t __kernel_uid32_t -typedef unsigned int	__kernel_gid32_t; -#define __kernel_gid32_t __kernel_gid32_t -  typedef unsigned short	__kernel_old_uid_t;  #define __kernel_old_uid_t __kernel_old_uid_t  typedef unsigned short	__kernel_old_gid_t; diff --git a/arch/sh/include/asm/posix_types_64.h b/arch/sh/include/uapi/asm/posix_types_64.h index 8cd11485c06..244f7e950e1 100644 --- a/arch/sh/include/asm/posix_types_64.h +++ b/arch/sh/include/uapi/asm/posix_types_64.h @@ -3,8 +3,6 @@  typedef unsigned short	__kernel_mode_t;  #define __kernel_mode_t __kernel_mode_t -typedef unsigned short	__kernel_nlink_t; -#define __kernel_nlink_t __kernel_nlink_t  typedef unsigned short	__kernel_ipc_pid_t;  #define __kernel_ipc_pid_t __kernel_ipc_pid_t  typedef unsigned short	__kernel_uid_t; @@ -17,10 +15,6 @@ typedef int		__kernel_ssize_t;  #define __kernel_ssize_t __kernel_ssize_t  typedef int		__kernel_ptrdiff_t;  #define __kernel_ptrdiff_t __kernel_ptrdiff_t -typedef unsigned int	__kernel_uid32_t; -#define __kernel_uid32_t __kernel_uid32_t -typedef unsigned int	__kernel_gid32_t; -#define __kernel_gid32_t __kernel_gid32_t  typedef unsigned short	__kernel_old_uid_t;  #define __kernel_old_uid_t __kernel_old_uid_t diff --git a/arch/sh/include/uapi/asm/ptrace.h b/arch/sh/include/uapi/asm/ptrace.h new file mode 100644 index 00000000000..8b8c5aca9c2 --- /dev/null +++ b/arch/sh/include/uapi/asm/ptrace.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 1999, 2000  Niibe Yutaka + */ +#ifndef _UAPI__ASM_SH_PTRACE_H +#define _UAPI__ASM_SH_PTRACE_H + + +#define PTRACE_GETREGS		12	/* General registers */ +#define PTRACE_SETREGS		13 + +#define PTRACE_GETFPREGS	14	/* FPU registers */ +#define PTRACE_SETFPREGS	15 + +#define PTRACE_GETFDPIC		31	/* get the ELF fdpic loadmap address */ + +#define PTRACE_GETFDPIC_EXEC	0	/* [addr] request the executable loadmap */ +#define PTRACE_GETFDPIC_INTERP	1	/* [addr] request the interpreter loadmap */ + +#define	PTRACE_GETDSPREGS	55	/* DSP registers */ +#define	PTRACE_SETDSPREGS	56 + +#define PT_TEXT_END_ADDR	240 +#define PT_TEXT_ADDR		244	/* &(struct user)->start_code */ +#define PT_DATA_ADDR		248	/* &(struct user)->start_data */ +#define PT_TEXT_LEN		252 + +#if defined(__SH5__) || defined(CONFIG_CPU_SH5) +#include <asm/ptrace_64.h> +#else +#include <asm/ptrace_32.h> +#endif + + +#endif /* _UAPI__ASM_SH_PTRACE_H */ diff --git a/arch/sh/include/uapi/asm/ptrace_32.h b/arch/sh/include/uapi/asm/ptrace_32.h new file mode 100644 index 00000000000..926e0cefc2b --- /dev/null +++ b/arch/sh/include/uapi/asm/ptrace_32.h @@ -0,0 +1,77 @@ +#ifndef _UAPI__ASM_SH_PTRACE_32_H +#define _UAPI__ASM_SH_PTRACE_32_H + +/* + * GCC defines register number like this: + * ----------------------------- + *	 0 - 15 are integer registers + *	17 - 22 are control/special registers + *	24 - 39 fp registers + *	40 - 47 xd registers + *	48 -    fpscr register + * ----------------------------- + * + * We follows above, except: + *	16 --- program counter (PC) + *	22 --- syscall # + *	23 --- floating point communication register + */ +#define REG_REG0	 0 +#define REG_REG15	15 + +#define REG_PC		16 + +#define REG_PR		17 +#define REG_SR		18 +#define REG_GBR		19 +#define REG_MACH	20 +#define REG_MACL	21 + +#define REG_SYSCALL	22 + +#define REG_FPREG0	23 +#define REG_FPREG15	38 +#define REG_XFREG0	39 +#define REG_XFREG15	54 + +#define REG_FPSCR	55 +#define REG_FPUL	56 + +/* + * This struct defines the way the registers are stored on the + * kernel stack during a system call or other kernel entry. + */ +struct pt_regs { +	unsigned long regs[16]; +	unsigned long pc; +	unsigned long pr; +	unsigned long sr; +	unsigned long gbr; +	unsigned long mach; +	unsigned long macl; +	long tra; +}; + +/* + * This struct defines the way the DSP registers are stored on the + * kernel stack during a system call or other kernel entry. + */ +struct pt_dspregs { +	unsigned long	a1; +	unsigned long	a0g; +	unsigned long	a1g; +	unsigned long	m0; +	unsigned long	m1; +	unsigned long	a0; +	unsigned long	x0; +	unsigned long	x1; +	unsigned long	y0; +	unsigned long	y1; +	unsigned long	dsr; +	unsigned long	rs; +	unsigned long	re; +	unsigned long	mod; +}; + + +#endif /* _UAPI__ASM_SH_PTRACE_32_H */ diff --git a/arch/sh/include/uapi/asm/ptrace_64.h b/arch/sh/include/uapi/asm/ptrace_64.h new file mode 100644 index 00000000000..0e52ee83e94 --- /dev/null +++ b/arch/sh/include/uapi/asm/ptrace_64.h @@ -0,0 +1,14 @@ +#ifndef _UAPI__ASM_SH_PTRACE_64_H +#define _UAPI__ASM_SH_PTRACE_64_H + +struct pt_regs { +	unsigned long long pc; +	unsigned long long sr; +	long long syscall_nr; +	unsigned long long regs[63]; +	unsigned long long tregs[8]; +	unsigned long long pad[2]; +}; + + +#endif /* _UAPI__ASM_SH_PTRACE_64_H */ diff --git a/arch/sh/include/uapi/asm/setup.h b/arch/sh/include/uapi/asm/setup.h new file mode 100644 index 00000000000..552df83f1a4 --- /dev/null +++ b/arch/sh/include/uapi/asm/setup.h @@ -0,0 +1 @@ +#include <asm-generic/setup.h> diff --git a/arch/sh/include/asm/sigcontext.h b/arch/sh/include/uapi/asm/sigcontext.h index 8ce1435bc0b..8ce1435bc0b 100644 --- a/arch/sh/include/asm/sigcontext.h +++ b/arch/sh/include/uapi/asm/sigcontext.h diff --git a/arch/sh/include/asm/signal.h b/arch/sh/include/uapi/asm/signal.h index 9ac530a90bc..cb96d02f55a 100644 --- a/arch/sh/include/asm/signal.h +++ b/arch/sh/include/uapi/asm/signal.h @@ -5,11 +5,13 @@  #include <asm-generic/signal.h> +#ifndef __KERNEL__  struct old_sigaction {  	__sighandler_t sa_handler;  	old_sigset_t sa_mask;  	unsigned long sa_flags;  	void (*sa_restorer)(void);  }; +#endif  #endif /* __ASM_SH_SIGNAL_H */ diff --git a/arch/sh/include/asm/sockios.h b/arch/sh/include/uapi/asm/sockios.h index cf8b96b1f9a..cf8b96b1f9a 100644 --- a/arch/sh/include/asm/sockios.h +++ b/arch/sh/include/uapi/asm/sockios.h diff --git a/arch/sh/include/asm/stat.h b/arch/sh/include/uapi/asm/stat.h index e1810cc6e3d..e1810cc6e3d 100644 --- a/arch/sh/include/asm/stat.h +++ b/arch/sh/include/uapi/asm/stat.h diff --git a/arch/sh/include/asm/swab.h b/arch/sh/include/uapi/asm/swab.h index 1cd09767a7a..1cd09767a7a 100644 --- a/arch/sh/include/asm/swab.h +++ b/arch/sh/include/uapi/asm/swab.h diff --git a/arch/sh/include/uapi/asm/types.h b/arch/sh/include/uapi/asm/types.h new file mode 100644 index 00000000000..b9e79bc580d --- /dev/null +++ b/arch/sh/include/uapi/asm/types.h @@ -0,0 +1 @@ +#include <asm-generic/types.h> diff --git a/arch/sh/include/uapi/asm/unistd.h b/arch/sh/include/uapi/asm/unistd.h new file mode 100644 index 00000000000..eeef88dd53c --- /dev/null +++ b/arch/sh/include/uapi/asm/unistd.h @@ -0,0 +1,7 @@ +#ifndef __KERNEL__ +# ifdef __SH5__ +#  include <asm/unistd_64.h> +# else +#  include <asm/unistd_32.h> +# endif +#endif diff --git a/arch/sh/include/asm/unistd_32.h b/arch/sh/include/uapi/asm/unistd_32.h index 903cd618eb7..d13a1d62373 100644 --- a/arch/sh/include/asm/unistd_32.h +++ b/arch/sh/include/uapi/asm/unistd_32.h @@ -1,5 +1,5 @@ -#ifndef __ASM_SH_UNISTD_H -#define __ASM_SH_UNISTD_H +#ifndef __ASM_SH_UNISTD_32_H +#define __ASM_SH_UNISTD_32_H  /*   * Copyright (C) 1999  Niibe Yutaka @@ -26,7 +26,7 @@  #define __NR_mknod		 14  #define __NR_chmod		 15  #define __NR_lchown		 16 -#define __NR_break		 17 +				 /* 17 was sys_break */  #define __NR_oldstat		 18  #define __NR_lseek		 19  #define __NR_getpid		 20 @@ -40,11 +40,11 @@  #define __NR_oldfstat		 28  #define __NR_pause		 29  #define __NR_utime		 30 -#define __NR_stty		 31 -#define __NR_gtty		 32 +				 /* 31 was sys_stty */ +				 /* 32 was sys_gtty */  #define __NR_access		 33  #define __NR_nice		 34 -#define __NR_ftime		 35 +				 /* 35 was sys_ftime */  #define __NR_sync		 36  #define __NR_kill		 37  #define __NR_rename		 38 @@ -53,7 +53,7 @@  #define __NR_dup		 41  #define __NR_pipe		 42  #define __NR_times		 43 -#define __NR_prof		 44 +				 /* 44 was sys_prof */  #define __NR_brk		 45  #define __NR_setgid		 46  #define __NR_getgid		 47 @@ -62,13 +62,13 @@  #define __NR_getegid		 50  #define __NR_acct		 51  #define __NR_umount2		 52 -#define __NR_lock		 53 +				 /* 53 was sys_lock */  #define __NR_ioctl		 54  #define __NR_fcntl		 55 -#define __NR_mpx		 56 +				 /* 56 was sys_mpx */  #define __NR_setpgid		 57 -#define __NR_ulimit		 58 -#define __NR_oldolduname	 59 +				 /* 58 was sys_ulimit */ +				 /* 59 was sys_olduname */  #define __NR_umask		 60  #define __NR_chroot		 61  #define __NR_ustat		 62 @@ -91,7 +91,7 @@  #define __NR_settimeofday	 79  #define __NR_getgroups		 80  #define __NR_setgroups		 81 -#define __NR_select		 82 +				 /* 82 was sys_oldselect */  #define __NR_symlink		 83  #define __NR_oldlstat		 84  #define __NR_readlink		 85 @@ -107,10 +107,10 @@  #define __NR_fchown		 95  #define __NR_getpriority	 96  #define __NR_setpriority	 97 -#define __NR_profil		 98 +				 /* 98 was sys_profil */  #define __NR_statfs		 99  #define __NR_fstatfs		100 -#define __NR_ioperm		101 +				/* 101 was sys_ioperm */  #define __NR_socketcall		102  #define __NR_syslog		103  #define __NR_setitimer		104 @@ -119,10 +119,10 @@  #define __NR_lstat		107  #define __NR_fstat		108  #define __NR_olduname		109 -#define __NR_iopl		110 +				/* 110 was sys_iopl */  #define __NR_vhangup		111 -#define __NR_idle		112 -#define __NR_vm86old		113 +				/* 112 was sys_idle */ +				/* 113 was sys_vm86old */  #define __NR_wait4		114  #define __NR_swapoff		115  #define __NR_sysinfo		116 @@ -136,17 +136,17 @@  #define __NR_adjtimex		124  #define __NR_mprotect		125  #define __NR_sigprocmask	126 -#define __NR_create_module	127 +				/* 127 was sys_create_module */  #define __NR_init_module	128  #define __NR_delete_module	129 -#define __NR_get_kernel_syms	130 +				/* 130 was sys_get_kernel_syms */  #define __NR_quotactl		131  #define __NR_getpgid		132  #define __NR_fchdir		133  #define __NR_bdflush		134  #define __NR_sysfs		135  #define __NR_personality	136 -#define __NR_afs_syscall	137 /* Syscall for Andrew File System */ +				/* 137 was sys_afs_syscall */  #define __NR_setfsuid		138  #define __NR_setfsgid		139  #define __NR__llseek		140 @@ -175,8 +175,8 @@  #define __NR_mremap		163  #define __NR_setresuid		164  #define __NR_getresuid		165 -#define __NR_vm86		166 -#define __NR_query_module	167 +				/* 166 was sys_vm86 */ +				/* 167 was sys_query_module */  #define __NR_poll		168  #define __NR_nfsservctl		169  #define __NR_setresgid		170 @@ -197,8 +197,8 @@  #define __NR_capset		185  #define __NR_sigaltstack	186  #define __NR_sendfile		187 -#define __NR_streams1		188	/* some people actually want it */ -#define __NR_streams2		189	/* some people actually want it */ +				/* 188 reserved for sys_getpmsg */ +				/* 189 reserved for sys_putpmsg */  #define __NR_vfork		190  #define __NR_ugetrlimit		191	/* SuS compliant getrlimit */  #define __NR_mmap2		192 @@ -231,7 +231,8 @@  #define __NR_madvise		219  #define __NR_getdents64		220  #define __NR_fcntl64		221 -/* 223 is unused */ +				/* 222 is reserved for tux */ +				/* 223 is unused */  #define __NR_gettid		224  #define __NR_readahead		225  #define __NR_setxattr		226 @@ -251,15 +252,15 @@  #define __NR_futex		240  #define __NR_sched_setaffinity	241  #define __NR_sched_getaffinity	242 -#define __NR_set_thread_area	243 -#define __NR_get_thread_area	244 +				/* 243 is reserved for set_thread_area */ +				/* 244 is reserved for get_thread_area */  #define __NR_io_setup		245  #define __NR_io_destroy		246  #define __NR_io_getevents	247  #define __NR_io_submit		248  #define __NR_io_cancel		249  #define __NR_fadvise64		250 - +				/* 251 is unused */  #define __NR_exit_group		252  #define __NR_lookup_dcookie	253  #define __NR_epoll_create	254 @@ -281,7 +282,7 @@  #define __NR_tgkill		270  #define __NR_utimes		271  #define __NR_fadvise64_64	272 -#define __NR_vserver		273 +				/* 273 is reserved for vserver */  #define __NR_mbind              274  #define __NR_get_mempolicy      275  #define __NR_set_mempolicy      276 @@ -301,7 +302,7 @@  #define __NR_inotify_init	290  #define __NR_inotify_add_watch	291  #define __NR_inotify_rm_watch	292 -/* 293 is unused */ +				/* 293 is unused */  #define __NR_migrate_pages	294  #define __NR_openat		295  #define __NR_mkdirat		296 @@ -368,46 +369,18 @@  #define __NR_sendmsg		355  #define __NR_recvmsg		356  #define __NR_recvmmsg		357 +#define __NR_accept4		358 +#define __NR_name_to_handle_at	359 +#define __NR_open_by_handle_at	360 +#define __NR_clock_adjtime	361 +#define __NR_syncfs		362 +#define __NR_sendmmsg		363 +#define __NR_setns		364 +#define __NR_process_vm_readv	365 +#define __NR_process_vm_writev	366 +#define __NR_kcmp		367 +#define __NR_finit_module	368 -#define NR_syscalls 358 - -#ifdef __KERNEL__ - -#define __ARCH_WANT_IPC_PARSE_VERSION -#define __ARCH_WANT_OLD_READDIR -#define __ARCH_WANT_OLD_STAT -#define __ARCH_WANT_STAT64 -#define __ARCH_WANT_SYS_ALARM -#define __ARCH_WANT_SYS_GETHOSTNAME -#define __ARCH_WANT_SYS_IPC -#define __ARCH_WANT_SYS_PAUSE -#define __ARCH_WANT_SYS_SGETMASK -#define __ARCH_WANT_SYS_SIGNAL -#define __ARCH_WANT_SYS_TIME -#define __ARCH_WANT_SYS_UTIME -#define __ARCH_WANT_SYS_WAITPID -#define __ARCH_WANT_SYS_SOCKETCALL -#define __ARCH_WANT_SYS_FADVISE64 -#define __ARCH_WANT_SYS_GETPGRP -#define __ARCH_WANT_SYS_LLSEEK -#define __ARCH_WANT_SYS_NICE -#define __ARCH_WANT_SYS_OLD_GETRLIMIT -#define __ARCH_WANT_SYS_OLD_UNAME -#define __ARCH_WANT_SYS_OLDUMOUNT -#define __ARCH_WANT_SYS_SIGPENDING -#define __ARCH_WANT_SYS_SIGPROCMASK -#define __ARCH_WANT_SYS_RT_SIGACTION -#define __ARCH_WANT_SYS_RT_SIGSUSPEND - -/* - * "Conditional" syscalls - * - * What we want is __attribute__((weak,alias("sys_ni_syscall"))), - * but it doesn't work on all toolchains, so we just do it by hand - */ -#ifndef cond_syscall -#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") -#endif +#define NR_syscalls 369 -#endif /* __KERNEL__ */ -#endif /* __ASM_SH_UNISTD_H */ +#endif /* __ASM_SH_UNISTD_32_H */ diff --git a/arch/sh/include/asm/unistd_64.h b/arch/sh/include/uapi/asm/unistd_64.h index 09aa93f9eb7..e6820c86e8c 100644 --- a/arch/sh/include/asm/unistd_64.h +++ b/arch/sh/include/uapi/asm/unistd_64.h @@ -31,7 +31,7 @@  #define __NR_mknod		 14  #define __NR_chmod		 15  #define __NR_lchown		 16 -#define __NR_break		 17 +				 /* 17 was sys_break */  #define __NR_oldstat		 18  #define __NR_lseek		 19  #define __NR_getpid		 20 @@ -45,11 +45,11 @@  #define __NR_oldfstat		 28  #define __NR_pause		 29  #define __NR_utime		 30 -#define __NR_stty		 31 -#define __NR_gtty		 32 +				 /* 31 was sys_stty */ +				 /* 32 was sys_gtty */  #define __NR_access		 33  #define __NR_nice		 34 -#define __NR_ftime		 35 +				 /* 35 was sys_ftime */  #define __NR_sync		 36  #define __NR_kill		 37  #define __NR_rename		 38 @@ -58,7 +58,7 @@  #define __NR_dup		 41  #define __NR_pipe		 42  #define __NR_times		 43 -#define __NR_prof		 44 +				 /* 44 was sys_prof */  #define __NR_brk		 45  #define __NR_setgid		 46  #define __NR_getgid		 47 @@ -67,13 +67,13 @@  #define __NR_getegid		 50  #define __NR_acct		 51  #define __NR_umount2		 52 -#define __NR_lock		 53 +				 /* 53 was sys_lock */  #define __NR_ioctl		 54  #define __NR_fcntl		 55 -#define __NR_mpx		 56 +				 /* 56 was sys_mpx */  #define __NR_setpgid		 57 -#define __NR_ulimit		 58 -#define __NR_oldolduname	 59 +				 /* 58 was sys_ulimit */ +				 /* 59 was sys_olduname */  #define __NR_umask		 60  #define __NR_chroot		 61  #define __NR_ustat		 62 @@ -96,7 +96,7 @@  #define __NR_settimeofday	 79  #define __NR_getgroups		 80  #define __NR_setgroups		 81 -#define __NR_select		 82 +				 /* 82 was sys_select */  #define __NR_symlink		 83  #define __NR_oldlstat		 84  #define __NR_readlink		 85 @@ -112,10 +112,10 @@  #define __NR_fchown		 95  #define __NR_getpriority	 96  #define __NR_setpriority	 97 -#define __NR_profil		 98 +				 /* 98 was sys_profil */  #define __NR_statfs		 99  #define __NR_fstatfs		100 -#define __NR_ioperm		101 +				/* 101 was sys_ioperm */  #define __NR_socketcall		102	/* old implementation of socket systemcall */  #define __NR_syslog		103  #define __NR_setitimer		104 @@ -124,10 +124,10 @@  #define __NR_lstat		107  #define __NR_fstat		108  #define __NR_olduname		109 -#define __NR_iopl		110 +				/* 110 was sys_iopl */  #define __NR_vhangup		111 -#define __NR_idle		112 -#define __NR_vm86old		113 +				/* 112 was sys_idle */ +				/* 113 was sys_vm86old */  #define __NR_wait4		114  #define __NR_swapoff		115  #define __NR_sysinfo		116 @@ -141,17 +141,17 @@  #define __NR_adjtimex		124  #define __NR_mprotect		125  #define __NR_sigprocmask	126 -#define __NR_create_module	127 +				/* 127 was sys_create_module */  #define __NR_init_module	128  #define __NR_delete_module	129 -#define __NR_get_kernel_syms	130 +				/* 130 was sys_get_kernel_syms */  #define __NR_quotactl		131  #define __NR_getpgid		132  #define __NR_fchdir		133  #define __NR_bdflush		134  #define __NR_sysfs		135  #define __NR_personality	136 -#define __NR_afs_syscall	137 /* Syscall for Andrew File System */ +				/* 137 was sys_afs_syscall */  #define __NR_setfsuid		138  #define __NR_setfsgid		139  #define __NR__llseek		140 @@ -180,8 +180,8 @@  #define __NR_mremap		163  #define __NR_setresuid		164  #define __NR_getresuid		165 -#define __NR_vm86		166 -#define __NR_query_module	167 +				/* 166 was sys_vm86 */ +				/* 167 was sys_query_module */  #define __NR_poll		168  #define __NR_nfsservctl		169  #define __NR_setresgid		170 @@ -202,8 +202,8 @@  #define __NR_capset		185  #define __NR_sigaltstack	186  #define __NR_sendfile		187 -#define __NR_streams1		188	/* some people actually want it */ -#define __NR_streams2		189	/* some people actually want it */ +				/* 188 reserved for getpmsg */ +				/* 189 reserved for putpmsg */  #define __NR_vfork		190  #define __NR_ugetrlimit		191	/* SuS compliant getrlimit */  #define __NR_mmap2		192 @@ -262,16 +262,15 @@  #define __NR_msgrcv		241  #define __NR_msgget		242  #define __NR_msgctl		243 -#if 0 -#define __NR_shmatcall		244 -#endif +#define __NR_shmat		244  #define __NR_shmdt		245  #define __NR_shmget		246  #define __NR_shmctl		247  #define __NR_getdents64		248  #define __NR_fcntl64		249 -/* 223 is unused */ +				/* 250 is reserved for tux */ +				/* 251 is unused */  #define __NR_gettid		252  #define __NR_readahead		253  #define __NR_setxattr		254 @@ -291,14 +290,15 @@  #define __NR_futex		268  #define __NR_sched_setaffinity	269  #define __NR_sched_getaffinity	270 -#define __NR_set_thread_area	271 -#define __NR_get_thread_area	272 +				/* 271 is reserved for set_thread_area */ +				/* 272 is reserved for get_thread_area */  #define __NR_io_setup		273  #define __NR_io_destroy		274  #define __NR_io_getevents	275  #define __NR_io_submit		276  #define __NR_io_cancel		277  #define __NR_fadvise64		278 +				/* 279 is unused */  #define __NR_exit_group		280  #define __NR_lookup_dcookie	281 @@ -321,17 +321,17 @@  #define __NR_tgkill		298  #define __NR_utimes		299  #define __NR_fadvise64_64	300 -#define __NR_vserver		301 -#define __NR_mbind              302 -#define __NR_get_mempolicy      303 -#define __NR_set_mempolicy      304 +				/* 301 is reserved for vserver */ +				/* 302 is reserved for mbind */ +				/* 303 is reserved for get_mempolicy */ +				/* 304 is reserved for set_mempolicy */  #define __NR_mq_open            305  #define __NR_mq_unlink          (__NR_mq_open+1)  #define __NR_mq_timedsend       (__NR_mq_open+2)  #define __NR_mq_timedreceive    (__NR_mq_open+3)  #define __NR_mq_notify          (__NR_mq_open+4)  #define __NR_mq_getsetattr      (__NR_mq_open+5) -#define __NR_kexec_load		311 +				/* 311 is reserved for kexec */  #define __NR_waitid		312  #define __NR_add_key		313  #define __NR_request_key	314 @@ -341,7 +341,7 @@  #define __NR_inotify_init	318  #define __NR_inotify_add_watch	319  #define __NR_inotify_rm_watch	320 -/* 321 is unused */ +				/* 321 is unused */  #define __NR_migrate_pages	322  #define __NR_openat		323  #define __NR_mkdirat		324 @@ -390,45 +390,17 @@  #define __NR_fanotify_init	367  #define __NR_fanotify_mark	368  #define __NR_prlimit64		369 +#define __NR_name_to_handle_at	370 +#define __NR_open_by_handle_at	371 +#define __NR_clock_adjtime	372 +#define __NR_syncfs		373 +#define __NR_sendmmsg		374 +#define __NR_setns		375 +#define __NR_process_vm_readv	376 +#define __NR_process_vm_writev	377 +#define __NR_kcmp		378 +#define __NR_finit_module	379 -#ifdef __KERNEL__ +#define NR_syscalls 380 -#define NR_syscalls 370 - -#define __ARCH_WANT_IPC_PARSE_VERSION -#define __ARCH_WANT_OLD_READDIR -#define __ARCH_WANT_OLD_STAT -#define __ARCH_WANT_STAT64 -#define __ARCH_WANT_SYS_ALARM -#define __ARCH_WANT_SYS_GETHOSTNAME -#define __ARCH_WANT_SYS_IPC -#define __ARCH_WANT_SYS_PAUSE -#define __ARCH_WANT_SYS_SGETMASK -#define __ARCH_WANT_SYS_SIGNAL -#define __ARCH_WANT_SYS_TIME -#define __ARCH_WANT_SYS_UTIME -#define __ARCH_WANT_SYS_WAITPID -#define __ARCH_WANT_SYS_SOCKETCALL -#define __ARCH_WANT_SYS_FADVISE64 -#define __ARCH_WANT_SYS_GETPGRP -#define __ARCH_WANT_SYS_LLSEEK -#define __ARCH_WANT_SYS_NICE -#define __ARCH_WANT_SYS_OLD_GETRLIMIT -#define __ARCH_WANT_SYS_OLD_UNAME -#define __ARCH_WANT_SYS_OLDUMOUNT -#define __ARCH_WANT_SYS_SIGPENDING -#define __ARCH_WANT_SYS_SIGPROCMASK -#define __ARCH_WANT_SYS_RT_SIGACTION - -/* - * "Conditional" syscalls - * - * What we want is __attribute__((weak,alias("sys_ni_syscall"))), - * but it doesn't work on all toolchains, so we just do it by hand - */ -#ifndef cond_syscall -#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") -#endif - -#endif /* __KERNEL__ */  #endif /* __ASM_SH_UNISTD_64_H */ diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile index 8eed6a48544..2ccf36c824c 100644 --- a/arch/sh/kernel/Makefile +++ b/arch/sh/kernel/Makefile @@ -2,7 +2,7 @@  # Makefile for the Linux/SuperH kernel.  # -extra-y	:= head_$(BITS).o init_task.o vmlinux.lds +extra-y	:= head_$(BITS).o vmlinux.lds  ifdef CONFIG_FUNCTION_TRACER  # Do not profile debug and lowlevel utilities @@ -11,21 +11,26 @@ endif  CFLAGS_REMOVE_return_address.o = -pg -obj-y	:= clkdev.o debugtraps.o dma-nommu.o dumpstack.o 		\ +obj-y	:= debugtraps.o dma-nommu.o dumpstack.o 		\  	   idle.o io.o irq.o irq_$(BITS).o kdebugfs.o			\  	   machvec.o nmi_debug.o process.o				\  	   process_$(BITS).o ptrace.o ptrace_$(BITS).o			\  	   reboot.o return_address.o					\ -	   setup.o signal_$(BITS).o sys_sh.o sys_sh$(BITS).o		\ +	   setup.o signal_$(BITS).o sys_sh.o 				\  	   syscalls_$(BITS).o time.o topology.o traps.o			\  	   traps_$(BITS).o unwinder.o +ifndef CONFIG_GENERIC_IOMAP +obj-y				+= iomap.o +obj-$(CONFIG_HAS_IOPORT_MAP)	+= ioport.o +endif + +obj-$(CONFIG_SUPERH32)		+= sys_sh32.o  obj-y				+= cpu/  obj-$(CONFIG_VSYSCALL)		+= vsyscall/  obj-$(CONFIG_SMP)		+= smp.o  obj-$(CONFIG_SH_STANDARD_BIOS)	+= sh_bios.o  obj-$(CONFIG_KGDB)		+= kgdb.o -obj-$(CONFIG_SH_CPU_FREQ)	+= cpufreq.o  obj-$(CONFIG_MODULES)		+= sh_ksyms_$(BITS).o module.o  obj-$(CONFIG_KEXEC)		+= machine_kexec.o relocate_kernel.o  obj-$(CONFIG_CRASH_DUMP)	+= crash_dump.o @@ -39,7 +44,6 @@ obj-$(CONFIG_DUMP_CODE)		+= disassemble.o  obj-$(CONFIG_HIBERNATION)	+= swsusp.o  obj-$(CONFIG_DWARF_UNWINDER)	+= dwarf.o  obj-$(CONFIG_PERF_EVENTS)	+= perf_event.o perf_callchain.o -obj-$(CONFIG_HAS_IOPORT)	+= io_generic.o  obj-$(CONFIG_HAVE_HW_BREAKPOINT)		+= hw_breakpoint.o  obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)	+= localtimer.o diff --git a/arch/sh/kernel/clkdev.c b/arch/sh/kernel/clkdev.c deleted file mode 100644 index 1f800ef4a73..00000000000 --- a/arch/sh/kernel/clkdev.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * arch/sh/kernel/clkdev.c - * - * Cloned from arch/arm/common/clkdev.c: - * - *  Copyright (C) 2008 Russell King. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Helper for the clk API to assist looking up a struct clk. - */ -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/device.h> -#include <linux/list.h> -#include <linux/errno.h> -#include <linux/err.h> -#include <linux/string.h> -#include <linux/mutex.h> -#include <linux/clk.h> -#include <linux/slab.h> -#include <linux/bootmem.h> -#include <linux/mm.h> -#include <asm/clock.h> -#include <asm/clkdev.h> - -static LIST_HEAD(clocks); -static DEFINE_MUTEX(clocks_mutex); - -/* - * Find the correct struct clk for the device and connection ID. - * We do slightly fuzzy matching here: - *  An entry with a NULL ID is assumed to be a wildcard. - *  If an entry has a device ID, it must match - *  If an entry has a connection ID, it must match - * Then we take the most specific entry - with the following - * order of precedence: dev+con > dev only > con only. - */ -static struct clk *clk_find(const char *dev_id, const char *con_id) -{ -	struct clk_lookup *p; -	struct clk *clk = NULL; -	int match, best = 0; - -	list_for_each_entry(p, &clocks, node) { -		match = 0; -		if (p->dev_id) { -			if (!dev_id || strcmp(p->dev_id, dev_id)) -				continue; -			match += 2; -		} -		if (p->con_id) { -			if (!con_id || strcmp(p->con_id, con_id)) -				continue; -			match += 1; -		} -		if (match == 0) -			continue; - -		if (match > best) { -			clk = p->clk; -			best = match; -		} -	} -	return clk; -} - -struct clk *clk_get_sys(const char *dev_id, const char *con_id) -{ -	struct clk *clk; - -	mutex_lock(&clocks_mutex); -	clk = clk_find(dev_id, con_id); -	mutex_unlock(&clocks_mutex); - -	return clk ? clk : ERR_PTR(-ENOENT); -} -EXPORT_SYMBOL(clk_get_sys); - -void clkdev_add(struct clk_lookup *cl) -{ -	mutex_lock(&clocks_mutex); -	list_add_tail(&cl->node, &clocks); -	mutex_unlock(&clocks_mutex); -} -EXPORT_SYMBOL(clkdev_add); - -void __init clkdev_add_table(struct clk_lookup *cl, size_t num) -{ -	mutex_lock(&clocks_mutex); -	while (num--) { -		list_add_tail(&cl->node, &clocks); -		cl++; -	} -	mutex_unlock(&clocks_mutex); -} - -#define MAX_DEV_ID	20 -#define MAX_CON_ID	16 - -struct clk_lookup_alloc { -	struct clk_lookup cl; -	char	dev_id[MAX_DEV_ID]; -	char	con_id[MAX_CON_ID]; -}; - -struct clk_lookup * __init_refok -clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...) -{ -	struct clk_lookup_alloc *cla; - -	if (!slab_is_available()) -		cla = alloc_bootmem_low_pages(sizeof(*cla)); -	else -		cla = kzalloc(sizeof(*cla), GFP_KERNEL); - -	if (!cla) -		return NULL; - -	cla->cl.clk = clk; -	if (con_id) { -		strlcpy(cla->con_id, con_id, sizeof(cla->con_id)); -		cla->cl.con_id = cla->con_id; -	} - -	if (dev_fmt) { -		va_list ap; - -		va_start(ap, dev_fmt); -		vscnprintf(cla->dev_id, sizeof(cla->dev_id), dev_fmt, ap); -		cla->cl.dev_id = cla->dev_id; -		va_end(ap); -	} - -	return &cla->cl; -} -EXPORT_SYMBOL(clkdev_alloc); - -int clk_add_alias(const char *alias, const char *alias_dev_name, char *id, -	struct device *dev) -{ -	struct clk *r = clk_get(dev, id); -	struct clk_lookup *l; - -	if (IS_ERR(r)) -		return PTR_ERR(r); - -	l = clkdev_alloc(r, alias, alias_dev_name); -	clk_put(r); -	if (!l) -		return -ENODEV; -	clkdev_add(l); -	return 0; -} -EXPORT_SYMBOL(clk_add_alias); - -/* - * clkdev_drop - remove a clock dynamically allocated - */ -void clkdev_drop(struct clk_lookup *cl) -{ -	struct clk_lookup_alloc *cla = container_of(cl, struct clk_lookup_alloc, cl); - -	mutex_lock(&clocks_mutex); -	list_del(&cl->node); -	mutex_unlock(&clocks_mutex); -	kfree(cla); -} -EXPORT_SYMBOL(clkdev_drop); diff --git a/arch/sh/kernel/cpu/Makefile b/arch/sh/kernel/cpu/Makefile index 4edcb60a135..accc7ca722e 100644 --- a/arch/sh/kernel/cpu/Makefile +++ b/arch/sh/kernel/cpu/Makefile @@ -17,7 +17,5 @@ obj-$(CONFIG_ARCH_SHMOBILE)	+= shmobile/  obj-$(CONFIG_SH_ADC)		+= adc.o  obj-$(CONFIG_SH_CLK_CPG_LEGACY)	+= clock-cpg.o -obj-$(CONFIG_SH_FPU)		+= fpu.o -obj-$(CONFIG_SH_FPU_EMU)	+= fpu.o -obj-y	+= irq/ init.o clock.o hwblk.o +obj-y	+= irq/ init.o clock.o fpu.o pfc.o proc.o diff --git a/arch/sh/kernel/cpu/clock-cpg.c b/arch/sh/kernel/cpu/clock-cpg.c index e2f63d68da5..8525a671266 100644 --- a/arch/sh/kernel/cpu/clock-cpg.c +++ b/arch/sh/kernel/cpu/clock-cpg.c @@ -2,7 +2,7 @@  #include <linux/compiler.h>  #include <linux/slab.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  static struct clk master_clk = { @@ -35,8 +35,6 @@ static struct clk *onchip_clocks[] = {  	&cpu_clk,  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("master_clk", &master_clk), @@ -58,16 +56,20 @@ int __init __deprecated cpg_clk_init(void)  	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); -	clk_add_alias("tmu_fck", NULL, "peripheral_clk", NULL); -	clk_add_alias("mtu2_fck", NULL, "peripheral_clk", NULL); -	clk_add_alias("cmt_fck", NULL, "peripheral_clk", NULL); +	clk_add_alias("fck", "sh-tmu-sh3.0", "peripheral_clk", NULL); +	clk_add_alias("fck", "sh-tmu.0", "peripheral_clk", NULL); +	clk_add_alias("fck", "sh-tmu.1", "peripheral_clk", NULL); +	clk_add_alias("fck", "sh-tmu.2", "peripheral_clk", NULL); +	clk_add_alias("fck", "sh-mtu2", "peripheral_clk", NULL); +	clk_add_alias("fck", "sh-cmt-16.0", "peripheral_clk", NULL); +	clk_add_alias("fck", "sh-cmt-32.0", "peripheral_clk", NULL);  	clk_add_alias("sci_ick", NULL, "peripheral_clk", NULL);  	return ret;  }  /* - * Placeholder for compatability, until the lazy CPUs do this + * Placeholder for compatibility, until the lazy CPUs do this   * on their own.   */  int __init __weak arch_clk_init(void) diff --git a/arch/sh/kernel/cpu/clock.c b/arch/sh/kernel/cpu/clock.c index 50f887dda56..4187cf4fe18 100644 --- a/arch/sh/kernel/cpu/clock.c +++ b/arch/sh/kernel/cpu/clock.c @@ -48,20 +48,4 @@ int __init clk_init(void)  	return ret;  } -/* - * Returns a clock. Note that we first try to use device id on the bus - * and clock name. If this fails, we try to use clock name only. - */ -struct clk *clk_get(struct device *dev, const char *con_id) -{ -	const char *dev_id = dev ? dev_name(dev) : NULL; - -	return clk_get_sys(dev_id, con_id); -} -EXPORT_SYMBOL_GPL(clk_get); - -void clk_put(struct clk *clk) -{ -} -EXPORT_SYMBOL_GPL(clk_put); diff --git a/arch/sh/kernel/cpu/fpu.c b/arch/sh/kernel/cpu/fpu.c index 7f1b70cace3..4e332244ea7 100644 --- a/arch/sh/kernel/cpu/fpu.c +++ b/arch/sh/kernel/cpu/fpu.c @@ -2,6 +2,7 @@  #include <linux/slab.h>  #include <asm/processor.h>  #include <asm/fpu.h> +#include <asm/traps.h>  int init_fpu(struct task_struct *tsk)  { @@ -43,7 +44,7 @@ void __fpu_state_restore(void)  	restore_fpu(tsk);  	task_thread_info(tsk)->status |= TS_USEDFPU; -	tsk->fpu_counter++; +	tsk->thread.fpu_counter++;  }  void fpu_state_restore(struct pt_regs *regs) diff --git a/arch/sh/kernel/cpu/hwblk.c b/arch/sh/kernel/cpu/hwblk.c deleted file mode 100644 index 3e985aae5d9..00000000000 --- a/arch/sh/kernel/cpu/hwblk.c +++ /dev/null @@ -1,159 +0,0 @@ -#include <linux/clk.h> -#include <linux/compiler.h> -#include <linux/io.h> -#include <linux/spinlock.h> -#include <asm/suspend.h> -#include <asm/hwblk.h> -#include <asm/clock.h> - -static DEFINE_SPINLOCK(hwblk_lock); - -static void hwblk_area_mod_cnt(struct hwblk_info *info, -			       int area, int counter, int value, int goal) -{ -	struct hwblk_area *hap = info->areas + area; - -	hap->cnt[counter] += value; - -	if (hap->cnt[counter] != goal) -		return; - -	if (hap->flags & HWBLK_AREA_FLAG_PARENT) -		hwblk_area_mod_cnt(info, hap->parent, counter, value, goal); -} - - -static int __hwblk_mod_cnt(struct hwblk_info *info, int hwblk, -			  int counter, int value, int goal) -{ -	struct hwblk *hp = info->hwblks + hwblk; - -	hp->cnt[counter] += value; -	if (hp->cnt[counter] == goal) -		hwblk_area_mod_cnt(info, hp->area, counter, value, goal); - -	return hp->cnt[counter]; -} - -static void hwblk_mod_cnt(struct hwblk_info *info, int hwblk, -			  int counter, int value, int goal) -{ -	unsigned long flags; - -	spin_lock_irqsave(&hwblk_lock, flags); -	__hwblk_mod_cnt(info, hwblk, counter, value, goal); -	spin_unlock_irqrestore(&hwblk_lock, flags); -} - -void hwblk_cnt_inc(struct hwblk_info *info, int hwblk, int counter) -{ -	hwblk_mod_cnt(info, hwblk, counter, 1, 1); -} - -void hwblk_cnt_dec(struct hwblk_info *info, int hwblk, int counter) -{ -	hwblk_mod_cnt(info, hwblk, counter, -1, 0); -} - -void hwblk_enable(struct hwblk_info *info, int hwblk) -{ -	struct hwblk *hp = info->hwblks + hwblk; -	unsigned long tmp; -	unsigned long flags; -	int ret; - -	spin_lock_irqsave(&hwblk_lock, flags); - -	ret = __hwblk_mod_cnt(info, hwblk, HWBLK_CNT_USAGE, 1, 1); -	if (ret == 1) { -		tmp = __raw_readl(hp->mstp); -		tmp &= ~(1 << hp->bit); -		__raw_writel(tmp, hp->mstp); -	} - -	spin_unlock_irqrestore(&hwblk_lock, flags); -} - -void hwblk_disable(struct hwblk_info *info, int hwblk) -{ -	struct hwblk *hp = info->hwblks + hwblk; -	unsigned long tmp; -	unsigned long flags; -	int ret; - -	spin_lock_irqsave(&hwblk_lock, flags); - -	ret = __hwblk_mod_cnt(info, hwblk, HWBLK_CNT_USAGE, -1, 0); -	if (ret == 0) { -		tmp = __raw_readl(hp->mstp); -		tmp |= 1 << hp->bit; -		__raw_writel(tmp, hp->mstp); -	} - -	spin_unlock_irqrestore(&hwblk_lock, flags); -} - -struct hwblk_info *hwblk_info; - -int __init hwblk_register(struct hwblk_info *info) -{ -	hwblk_info = info; -	return 0; -} - -int __init __weak arch_hwblk_init(void) -{ -	return 0; -} - -int __weak arch_hwblk_sleep_mode(void) -{ -	return SUSP_SH_SLEEP; -} - -int __init hwblk_init(void) -{ -	return arch_hwblk_init(); -} - -/* allow clocks to enable and disable hardware blocks */ -static int sh_hwblk_clk_enable(struct clk *clk) -{ -	if (!hwblk_info) -		return -ENOENT; - -	hwblk_enable(hwblk_info, clk->arch_flags); -	return 0; -} - -static void sh_hwblk_clk_disable(struct clk *clk) -{ -	if (hwblk_info) -		hwblk_disable(hwblk_info, clk->arch_flags); -} - -static struct clk_ops sh_hwblk_clk_ops = { -	.enable		= sh_hwblk_clk_enable, -	.disable	= sh_hwblk_clk_disable, -	.recalc		= followparent_recalc, -}; - -int __init sh_hwblk_clk_register(struct clk *clks, int nr) -{ -	struct clk *clkp; -	int ret = 0; -	int k; - -	for (k = 0; !ret && (k < nr); k++) { -		clkp = clks + k; - -		/* skip over clocks using hwblk 0 (HWBLK_UNKNOWN) */ -		if (!clkp->arch_flags) -			continue; - -		clkp->ops = &sh_hwblk_clk_ops; -		ret |= clk_register(clkp); -	} - -	return ret; -} diff --git a/arch/sh/kernel/cpu/init.c b/arch/sh/kernel/cpu/init.c index fac742e514e..0d7360d549c 100644 --- a/arch/sh/kernel/cpu/init.c +++ b/arch/sh/kernel/cpu/init.c @@ -18,13 +18,13 @@  #include <asm/processor.h>  #include <asm/uaccess.h>  #include <asm/page.h> -#include <asm/system.h>  #include <asm/cacheflush.h>  #include <asm/cache.h>  #include <asm/elf.h>  #include <asm/io.h>  #include <asm/smp.h>  #include <asm/sh_bios.h> +#include <asm/setup.h>  #ifdef CONFIG_SH_FPU  #define cpu_has_fpu	1 @@ -43,9 +43,9 @@   * peripherals (nofpu, nodsp, and so forth).   */  #define onchip_setup(x)					\ -static int x##_disabled __cpuinitdata = !cpu_has_##x;	\ +static int x##_disabled = !cpu_has_##x;			\  							\ -static int __cpuinit x##_setup(char *opts)			\ +static int x##_setup(char *opts)			\  {							\  	x##_disabled = 1;				\  	return 1;					\ @@ -59,7 +59,7 @@ onchip_setup(dsp);  #define CPUOPM		0xff2f0000  #define CPUOPM_RABD	(1 << 5) -static void __cpuinit speculative_execution_init(void) +static void speculative_execution_init(void)  {  	/* Clear RABD */  	__raw_writel(__raw_readl(CPUOPM) & ~CPUOPM_RABD, CPUOPM); @@ -78,7 +78,7 @@ static void __cpuinit speculative_execution_init(void)  #define EXPMASK_BRDSSLP		(1 << 1)  #define EXPMASK_MMCAW		(1 << 4) -static void __cpuinit expmask_init(void) +static void expmask_init(void)  {  	unsigned long expmask = __raw_readl(EXPMASK); @@ -112,7 +112,7 @@ static void cache_init(void)  	unsigned long ccr, flags;  	jump_to_uncached(); -	ccr = __raw_readl(CCR); +	ccr = __raw_readl(SH_CCR);  	/*  	 * At this point we don't know whether the cache is enabled or not - a @@ -189,7 +189,7 @@ static void cache_init(void)  	l2_cache_init(); -	__raw_writel(flags, CCR); +	__raw_writel(flags, SH_CCR);  	back_to_cached();  }  #else @@ -217,7 +217,7 @@ static void detect_cache_shape(void)  		l2_cache_shape = -1; /* No S-cache */  } -static void __cpuinit fpu_init(void) +static void fpu_init(void)  {  	/* Disable the FPU */  	if (fpu_disabled && (current_cpu_data.flags & CPU_HAS_FPU)) { @@ -230,7 +230,7 @@ static void __cpuinit fpu_init(void)  }  #ifdef CONFIG_SH_DSP -static void __cpuinit release_dsp(void) +static void release_dsp(void)  {  	unsigned long sr; @@ -244,7 +244,7 @@ static void __cpuinit release_dsp(void)  	);  } -static void __cpuinit dsp_init(void) +static void dsp_init(void)  {  	unsigned long sr; @@ -276,7 +276,7 @@ static void __cpuinit dsp_init(void)  	release_dsp();  }  #else -static inline void __cpuinit dsp_init(void) { } +static inline void dsp_init(void) { }  #endif /* CONFIG_SH_DSP */  /** @@ -295,7 +295,7 @@ static inline void __cpuinit dsp_init(void) { }   * Each processor family is still responsible for doing its own probing   * and cache configuration in cpu_probe().   */ -asmlinkage void __cpuinit cpu_init(void) +asmlinkage void cpu_init(void)  {  	current_thread_info()->cpu = hard_smp_processor_id(); diff --git a/arch/sh/kernel/cpu/irq/imask.c b/arch/sh/kernel/cpu/irq/imask.c index 32c825c9488..e7f1745bd12 100644 --- a/arch/sh/kernel/cpu/irq/imask.c +++ b/arch/sh/kernel/cpu/irq/imask.c @@ -19,7 +19,6 @@  #include <linux/cache.h>  #include <linux/irq.h>  #include <linux/bitmap.h> -#include <asm/system.h>  #include <asm/irq.h>  /* Bitmap of IRQ masked */ @@ -80,6 +79,6 @@ static struct irq_chip imask_irq_chip = {  void make_imask_irq(unsigned int irq)  { -	set_irq_chip_and_handler_name(irq, &imask_irq_chip, -				      handle_level_irq, "level"); +	irq_set_chip_and_handler_name(irq, &imask_irq_chip, handle_level_irq, +				      "level");  } diff --git a/arch/sh/kernel/cpu/irq/intc-sh5.c b/arch/sh/kernel/cpu/irq/intc-sh5.c index 5af48f8357e..9e056a3a0c7 100644 --- a/arch/sh/kernel/cpu/irq/intc-sh5.c +++ b/arch/sh/kernel/cpu/irq/intc-sh5.c @@ -135,7 +135,7 @@ void __init plat_irq_setup(void)  	/* Set default: per-line enable/disable, priority driven ack/eoi */  	for (i = 0; i < NR_INTC_IRQS; i++) -		set_irq_chip_and_handler(i, &intc_irq_type, handle_level_irq); +		irq_set_chip_and_handler(i, &intc_irq_type, handle_level_irq);  	/* Disable all interrupts and set all priorities to 0 to avoid trouble */ diff --git a/arch/sh/kernel/cpu/irq/ipr.c b/arch/sh/kernel/cpu/irq/ipr.c index 7516c35ee51..5de6dff5c21 100644 --- a/arch/sh/kernel/cpu/irq/ipr.c +++ b/arch/sh/kernel/cpu/irq/ipr.c @@ -74,9 +74,9 @@ void register_ipr_controller(struct ipr_desc *desc)  		}  		disable_irq_nosync(p->irq); -		set_irq_chip_and_handler_name(p->irq, &desc->chip, -				      handle_level_irq, "level"); -		set_irq_chip_data(p->irq, p); +		irq_set_chip_and_handler_name(p->irq, &desc->chip, +					      handle_level_irq, "level"); +		irq_set_chip_data(p->irq, p);  		disable_ipr_irq(irq_get_irq_data(p->irq));  	}  } diff --git a/arch/sh/kernel/cpu/pfc.c b/arch/sh/kernel/cpu/pfc.c new file mode 100644 index 00000000000..d766564ef7c --- /dev/null +++ b/arch/sh/kernel/cpu/pfc.c @@ -0,0 +1,33 @@ +/* + * SH Pin Function Control Initialization + * + * Copyright (C) 2012  Renesas Solutions Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + */ + +#include <linux/init.h> +#include <linux/platform_device.h> + +#include <cpu/pfc.h> + +static struct platform_device sh_pfc_device = { +	.id		= -1, +}; + +int __init sh_pfc_register(const char *name, +			   struct resource *resource, u32 num_resources) +{ +	sh_pfc_device.name = name; +	sh_pfc_device.num_resources = num_resources; +	sh_pfc_device.resource = resource; + +	return platform_device_register(&sh_pfc_device); +} diff --git a/arch/sh/kernel/cpu/proc.c b/arch/sh/kernel/cpu/proc.c new file mode 100644 index 00000000000..9e6624c9108 --- /dev/null +++ b/arch/sh/kernel/cpu/proc.c @@ -0,0 +1,150 @@ +#include <linux/seq_file.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <asm/machvec.h> +#include <asm/processor.h> + +static const char *cpu_name[] = { +	[CPU_SH7201]	= "SH7201", +	[CPU_SH7203]	= "SH7203",	[CPU_SH7263]	= "SH7263", +	[CPU_SH7264]	= "SH7264",	[CPU_SH7269]	= "SH7269", +	[CPU_SH7206]	= "SH7206",	[CPU_SH7619]	= "SH7619", +	[CPU_SH7705]	= "SH7705",	[CPU_SH7706]	= "SH7706", +	[CPU_SH7707]	= "SH7707",	[CPU_SH7708]	= "SH7708", +	[CPU_SH7709]	= "SH7709",	[CPU_SH7710]	= "SH7710", +	[CPU_SH7712]	= "SH7712",	[CPU_SH7720]	= "SH7720", +	[CPU_SH7721]	= "SH7721",	[CPU_SH7729]	= "SH7729", +	[CPU_SH7750]	= "SH7750",	[CPU_SH7750S]	= "SH7750S", +	[CPU_SH7750R]	= "SH7750R",	[CPU_SH7751]	= "SH7751", +	[CPU_SH7751R]	= "SH7751R",	[CPU_SH7760]	= "SH7760", +	[CPU_SH4_202]	= "SH4-202",	[CPU_SH4_501]	= "SH4-501", +	[CPU_SH7763]	= "SH7763",	[CPU_SH7770]	= "SH7770", +	[CPU_SH7780]	= "SH7780",	[CPU_SH7781]	= "SH7781", +	[CPU_SH7343]	= "SH7343",	[CPU_SH7785]	= "SH7785", +	[CPU_SH7786]	= "SH7786",	[CPU_SH7757]	= "SH7757", +	[CPU_SH7722]	= "SH7722",	[CPU_SHX3]	= "SH-X3", +	[CPU_SH5_101]	= "SH5-101",	[CPU_SH5_103]	= "SH5-103", +	[CPU_MXG]	= "MX-G",	[CPU_SH7723]	= "SH7723", +	[CPU_SH7366]	= "SH7366",	[CPU_SH7724]	= "SH7724", +	[CPU_SH7372]	= "SH7372",	[CPU_SH7734]	= "SH7734", +	[CPU_SH_NONE]	= "Unknown" +}; + +const char *get_cpu_subtype(struct sh_cpuinfo *c) +{ +	return cpu_name[c->type]; +} +EXPORT_SYMBOL(get_cpu_subtype); + +#ifdef CONFIG_PROC_FS +/* Symbolic CPU flags, keep in sync with asm/cpu-features.h */ +static const char *cpu_flags[] = { +	"none", "fpu", "p2flush", "mmuassoc", "dsp", "perfctr", +	"ptea", "llsc", "l2", "op32", "pteaex", NULL +}; + +static void show_cpuflags(struct seq_file *m, struct sh_cpuinfo *c) +{ +	unsigned long i; + +	seq_printf(m, "cpu flags\t:"); + +	if (!c->flags) { +		seq_printf(m, " %s\n", cpu_flags[0]); +		return; +	} + +	for (i = 0; cpu_flags[i]; i++) +		if ((c->flags & (1 << i))) +			seq_printf(m, " %s", cpu_flags[i+1]); + +	seq_printf(m, "\n"); +} + +static void show_cacheinfo(struct seq_file *m, const char *type, +			   struct cache_info info) +{ +	unsigned int cache_size; + +	cache_size = info.ways * info.sets * info.linesz; + +	seq_printf(m, "%s size\t: %2dKiB (%d-way)\n", +		   type, cache_size >> 10, info.ways); +} + +/* + *	Get CPU information for use by the procfs. + */ +static int show_cpuinfo(struct seq_file *m, void *v) +{ +	struct sh_cpuinfo *c = v; +	unsigned int cpu = c - cpu_data; + +	if (!cpu_online(cpu)) +		return 0; + +	if (cpu == 0) +		seq_printf(m, "machine\t\t: %s\n", get_system_type()); +	else +		seq_printf(m, "\n"); + +	seq_printf(m, "processor\t: %d\n", cpu); +	seq_printf(m, "cpu family\t: %s\n", init_utsname()->machine); +	seq_printf(m, "cpu type\t: %s\n", get_cpu_subtype(c)); +	if (c->cut_major == -1) +		seq_printf(m, "cut\t\t: unknown\n"); +	else if (c->cut_minor == -1) +		seq_printf(m, "cut\t\t: %d.x\n", c->cut_major); +	else +		seq_printf(m, "cut\t\t: %d.%d\n", c->cut_major, c->cut_minor); + +	show_cpuflags(m, c); + +	seq_printf(m, "cache type\t: "); + +	/* +	 * Check for what type of cache we have, we support both the +	 * unified cache on the SH-2 and SH-3, as well as the harvard +	 * style cache on the SH-4. +	 */ +	if (c->icache.flags & SH_CACHE_COMBINED) { +		seq_printf(m, "unified\n"); +		show_cacheinfo(m, "cache", c->icache); +	} else { +		seq_printf(m, "split (harvard)\n"); +		show_cacheinfo(m, "icache", c->icache); +		show_cacheinfo(m, "dcache", c->dcache); +	} + +	/* Optional secondary cache */ +	if (c->flags & CPU_HAS_L2_CACHE) +		show_cacheinfo(m, "scache", c->scache); + +	seq_printf(m, "address sizes\t: %u bits physical\n", c->phys_bits); + +	seq_printf(m, "bogomips\t: %lu.%02lu\n", +		     c->loops_per_jiffy/(500000/HZ), +		     (c->loops_per_jiffy/(5000/HZ)) % 100); + +	return 0; +} + +static void *c_start(struct seq_file *m, loff_t *pos) +{ +	return *pos < NR_CPUS ? cpu_data + *pos : NULL; +} +static void *c_next(struct seq_file *m, void *v, loff_t *pos) +{ +	++*pos; +	return c_start(m, pos); +} +static void c_stop(struct seq_file *m, void *v) +{ +} +const struct seq_operations cpuinfo_op = { +	.start	= c_start, +	.next	= c_next, +	.stop	= c_stop, +	.show	= show_cpuinfo, +}; +#endif /* CONFIG_PROC_FS */ diff --git a/arch/sh/kernel/cpu/sh2/clock-sh7619.c b/arch/sh/kernel/cpu/sh2/clock-sh7619.c index 0c9f24d7a02..e80252ae5bc 100644 --- a/arch/sh/kernel/cpu/sh2/clock-sh7619.c +++ b/arch/sh/kernel/cpu/sh2/clock-sh7619.c @@ -14,27 +14,21 @@   */  #include <linux/init.h>  #include <linux/kernel.h> +#include <linux/io.h>  #include <asm/clock.h>  #include <asm/freq.h> -#include <asm/io.h> +#include <asm/processor.h>  static const int pll1rate[] = {1,2};  static const int pfc_divisors[] = {1,2,0,4}; - -#if (CONFIG_SH_CLK_MD == 1) || (CONFIG_SH_CLK_MD == 2) -#define PLL2 (4) -#elif (CONFIG_SH_CLK_MD == 5) || (CONFIG_SH_CLK_MD == 6) -#define PLL2 (2) -#else -#error "Illigal Clock Mode!" -#endif +static unsigned int pll2_mult;  static void master_clk_init(struct clk *clk)  { -	clk->rate *= PLL2 * pll1rate[(__raw_readw(FREQCR) >> 8) & 7]; +	clk->rate *= pll2_mult * pll1rate[(__raw_readw(FREQCR) >> 8) & 7];  } -static struct clk_ops sh7619_master_clk_ops = { +static struct sh_clk_ops sh7619_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -44,7 +38,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7619_module_clk_ops = { +static struct sh_clk_ops sh7619_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -53,23 +47,31 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / pll1rate[(__raw_readw(FREQCR) >> 8) & 7];  } -static struct clk_ops sh7619_bus_clk_ops = { +static struct sh_clk_ops sh7619_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; -static struct clk_ops sh7619_cpu_clk_ops = { +static struct sh_clk_ops sh7619_cpu_clk_ops = {  	.recalc		= followparent_recalc,  }; -static struct clk_ops *sh7619_clk_ops[] = { +static struct sh_clk_ops *sh7619_clk_ops[] = {  	&sh7619_master_clk_ops,  	&sh7619_module_clk_ops,  	&sh7619_bus_clk_ops,  	&sh7619_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  { +	if (test_mode_pin(MODE_PIN2 | MODE_PIN0) || +	    test_mode_pin(MODE_PIN2 | MODE_PIN1)) +		pll2_mult = 2; +	else if (test_mode_pin(MODE_PIN0) || test_mode_pin(MODE_PIN1)) +		pll2_mult = 4; + +	BUG_ON(!pll2_mult); +  	if (idx < ARRAY_SIZE(sh7619_clk_ops))  		*ops = sh7619_clk_ops[idx];  } diff --git a/arch/sh/kernel/cpu/sh2/probe.c b/arch/sh/kernel/cpu/sh2/probe.c index bab8e75958a..6c687ae812e 100644 --- a/arch/sh/kernel/cpu/sh2/probe.c +++ b/arch/sh/kernel/cpu/sh2/probe.c @@ -13,7 +13,7 @@  #include <asm/processor.h>  #include <asm/cache.h> -void __cpuinit cpu_probe(void) +void cpu_probe(void)  {  #if defined(CONFIG_CPU_SUBTYPE_SH7619)  	boot_cpu_data.type			= CPU_SH7619; diff --git a/arch/sh/kernel/cpu/sh2/setup-sh7619.c b/arch/sh/kernel/cpu/sh2/setup-sh7619.c index c3638516bff..58c19adae90 100644 --- a/arch/sh/kernel/cpu/sh2/setup-sh7619.c +++ b/arch/sh/kernel/cpu/sh2/setup-sh7619.c @@ -12,6 +12,7 @@  #include <linux/init.h>  #include <linux/serial.h>  #include <linux/serial_sci.h> +#include <linux/sh_eth.h>  #include <linux/sh_timer.h>  #include <linux/io.h> @@ -60,54 +61,78 @@ static DECLARE_INTC_DESC(intc_desc, "sh7619", vectors, NULL,  			 NULL, prio_registers, NULL);  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xf8400000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 88, 88, 88, 88 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xf8400000, 0x100), +	DEFINE_RES_IRQ(88),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xf8410000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 92, 92, 92, 92 }, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xf8410000, 0x100), +	DEFINE_RES_IRQ(92),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xf8420000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 96, 96, 96, 96 }, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xf8420000, 0x100), +	DEFINE_RES_IRQ(96),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  }; +static struct sh_eth_plat_data eth_platform_data = { +	.phy		= 1, +	.edmac_endian	= EDMAC_LITTLE_ENDIAN, +	.phy_interface	= PHY_INTERFACE_MODE_MII, +}; +  static struct resource eth_resources[] = {  	[0] = {  		.start = 0xfb000000, -		.end =   0xfb0001c8, +		.end = 0xfb0001c7,  		.flags = IORESOURCE_MEM,  	},  	[1] = { @@ -118,71 +143,33 @@ static struct resource eth_resources[] = {  };  static struct platform_device eth_device = { -	.name = "sh-eth", -	.id	= -1, +	.name = "sh7619-ether", +	.id = -1,  	.dev = { -		.platform_data = (void *)1, +		.platform_data = ð_platform_data,  	},  	.num_resources = ARRAY_SIZE(eth_resources),  	.resource = eth_resources,  }; -static struct sh_timer_config cmt0_platform_data = { -	.channel_offset = 0x02, -	.timer_bit = 0, -	.clockevent_rating = 125, -	.clocksource_rating = 0, /* disabled due to code generation issues */ +static struct sh_timer_config cmt_platform_data = { +	.channels_mask = 3,  }; -static struct resource cmt0_resources[] = { -	[0] = { -		.start	= 0xf84a0072, -		.end	= 0xf84a0077, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 86, -		.flags	= IORESOURCE_IRQ, -	}, +static struct resource cmt_resources[] = { +	DEFINE_RES_MEM(0xf84a0070, 0x10), +	DEFINE_RES_IRQ(86), +	DEFINE_RES_IRQ(87),  }; -static struct platform_device cmt0_device = { -	.name		= "sh_cmt", +static struct platform_device cmt_device = { +	.name		= "sh-cmt-16",  	.id		= 0,  	.dev = { -		.platform_data	= &cmt0_platform_data, -	}, -	.resource	= cmt0_resources, -	.num_resources	= ARRAY_SIZE(cmt0_resources), -}; - -static struct sh_timer_config cmt1_platform_data = { -	.channel_offset = 0x08, -	.timer_bit = 1, -	.clockevent_rating = 125, -	.clocksource_rating = 0, /* disabled due to code generation issues */ -}; - -static struct resource cmt1_resources[] = { -	[0] = { -		.start	= 0xf84a0078, -		.end	= 0xf84a007d, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 87, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cmt1_device = { -	.name		= "sh_cmt", -	.id		= 1, -	.dev = { -		.platform_data	= &cmt1_platform_data, +		.platform_data	= &cmt_platform_data,  	}, -	.resource	= cmt1_resources, -	.num_resources	= ARRAY_SIZE(cmt1_resources), +	.resource	= cmt_resources, +	.num_resources	= ARRAY_SIZE(cmt_resources),  };  static struct platform_device *sh7619_devices[] __initdata = { @@ -190,8 +177,7 @@ static struct platform_device *sh7619_devices[] __initdata = {  	&scif1_device,  	&scif2_device,  	ð_device, -	&cmt0_device, -	&cmt1_device, +	&cmt_device,  };  static int __init sh7619_devices_setup(void) @@ -210,8 +196,7 @@ static struct platform_device *sh7619_early_devices[] __initdata = {  	&scif0_device,  	&scif1_device,  	&scif2_device, -	&cmt0_device, -	&cmt1_device, +	&cmt_device,  };  #define STBCR3 0xf80a0000 diff --git a/arch/sh/kernel/cpu/sh2a/Makefile b/arch/sh/kernel/cpu/sh2a/Makefile index 45f85c77ef7..990195d9845 100644 --- a/arch/sh/kernel/cpu/sh2a/Makefile +++ b/arch/sh/kernel/cpu/sh2a/Makefile @@ -11,10 +11,14 @@ obj-$(CONFIG_SH_FPU)	+= fpu.o  obj-$(CONFIG_CPU_SUBTYPE_SH7201)	+= setup-sh7201.o clock-sh7201.o  obj-$(CONFIG_CPU_SUBTYPE_SH7203)	+= setup-sh7203.o clock-sh7203.o  obj-$(CONFIG_CPU_SUBTYPE_SH7263)	+= setup-sh7203.o clock-sh7203.o +obj-$(CONFIG_CPU_SUBTYPE_SH7264)	+= setup-sh7264.o clock-sh7264.o  obj-$(CONFIG_CPU_SUBTYPE_SH7206)	+= setup-sh7206.o clock-sh7206.o +obj-$(CONFIG_CPU_SUBTYPE_SH7269)	+= setup-sh7269.o clock-sh7269.o  obj-$(CONFIG_CPU_SUBTYPE_MXG)		+= setup-mxg.o clock-sh7206.o  # Pinmux setup  pinmux-$(CONFIG_CPU_SUBTYPE_SH7203)	:= pinmux-sh7203.o +pinmux-$(CONFIG_CPU_SUBTYPE_SH7264)	:= pinmux-sh7264.o +pinmux-$(CONFIG_CPU_SUBTYPE_SH7269)	:= pinmux-sh7269.o -obj-$(CONFIG_GENERIC_GPIO)	+= $(pinmux-y) +obj-$(CONFIG_GPIOLIB)			+= $(pinmux-y) diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7201.c b/arch/sh/kernel/cpu/sh2a/clock-sh7201.c index b26264dc2ae..532a36c7232 100644 --- a/arch/sh/kernel/cpu/sh2a/clock-sh7201.c +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7201.c @@ -22,22 +22,15 @@ static const int pll1rate[]={1,2,3,4,6,8};  static const int pfc_divisors[]={1,2,3,4,6,8,12};  #define ifc_divisors pfc_divisors -#if (CONFIG_SH_CLK_MD == 0) -#define PLL2 (4) -#elif (CONFIG_SH_CLK_MD == 2) -#define PLL2 (2) -#elif (CONFIG_SH_CLK_MD == 3) -#define PLL2 (1) -#else -#error "Illegal Clock Mode!" -#endif +static unsigned int pll2_mult;  static void master_clk_init(struct clk *clk)  { -	return 10000000 * PLL2 * pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007]; +	clk->rate = 10000000 * pll2_mult * +	       pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007];  } -static struct clk_ops sh7201_master_clk_ops = { +static struct sh_clk_ops sh7201_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -47,7 +40,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7201_module_clk_ops = { +static struct sh_clk_ops sh7201_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -57,7 +50,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7201_bus_clk_ops = { +static struct sh_clk_ops sh7201_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -67,19 +60,26 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh7201_cpu_clk_ops = { +static struct sh_clk_ops sh7201_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7201_clk_ops[] = { +static struct sh_clk_ops *sh7201_clk_ops[] = {  	&sh7201_master_clk_ops,  	&sh7201_module_clk_ops,  	&sh7201_bus_clk_ops,  	&sh7201_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  { +	if (test_mode_pin(MODE_PIN1 | MODE_PIN0)) +		pll2_mult = 1; +	else if (test_mode_pin(MODE_PIN1)) +		pll2_mult = 2; +	else +		pll2_mult = 4; +  	if (idx < ARRAY_SIZE(sh7201_clk_ops))  		*ops = sh7201_clk_ops[idx];  } diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7203.c b/arch/sh/kernel/cpu/sh2a/clock-sh7203.c index 7e75d8f7950..529f719b6e3 100644 --- a/arch/sh/kernel/cpu/sh2a/clock-sh7203.c +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7203.c @@ -25,24 +25,14 @@ static const int pll1rate[]={8,12,16,0};  static const int pfc_divisors[]={1,2,3,4,6,8,12};  #define ifc_divisors pfc_divisors -#if (CONFIG_SH_CLK_MD == 0) -#define PLL2 (1) -#elif (CONFIG_SH_CLK_MD == 1) -#define PLL2 (2) -#elif (CONFIG_SH_CLK_MD == 2) -#define PLL2 (4) -#elif (CONFIG_SH_CLK_MD == 3) -#define PLL2 (4) -#else -#error "Illegal Clock Mode!" -#endif +static unsigned int pll2_mult;  static void master_clk_init(struct clk *clk)  { -	clk->rate *= pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0003] * PLL2 ; +	clk->rate *= pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0003] * pll2_mult;  } -static struct clk_ops sh7203_master_clk_ops = { +static struct sh_clk_ops sh7203_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -52,7 +42,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7203_module_clk_ops = { +static struct sh_clk_ops sh7203_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -62,23 +52,30 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx-2];  } -static struct clk_ops sh7203_bus_clk_ops = { +static struct sh_clk_ops sh7203_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; -static struct clk_ops sh7203_cpu_clk_ops = { +static struct sh_clk_ops sh7203_cpu_clk_ops = {  	.recalc		= followparent_recalc,  }; -static struct clk_ops *sh7203_clk_ops[] = { +static struct sh_clk_ops *sh7203_clk_ops[] = {  	&sh7203_master_clk_ops,  	&sh7203_module_clk_ops,  	&sh7203_bus_clk_ops,  	&sh7203_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  { +	if (test_mode_pin(MODE_PIN1)) +		pll2_mult = 4; +	else if (test_mode_pin(MODE_PIN0)) +		pll2_mult = 2; +	else +		pll2_mult = 1; +  	if (idx < ARRAY_SIZE(sh7203_clk_ops))  		*ops = sh7203_clk_ops[idx];  } diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7206.c b/arch/sh/kernel/cpu/sh2a/clock-sh7206.c index b27a5e2687a..17778983467 100644 --- a/arch/sh/kernel/cpu/sh2a/clock-sh7206.c +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7206.c @@ -22,22 +22,14 @@ static const int pll1rate[]={1,2,3,4,6,8};  static const int pfc_divisors[]={1,2,3,4,6,8,12};  #define ifc_divisors pfc_divisors -#if (CONFIG_SH_CLK_MD == 2) -#define PLL2 (4) -#elif (CONFIG_SH_CLK_MD == 6) -#define PLL2 (2) -#elif (CONFIG_SH_CLK_MD == 7) -#define PLL2 (1) -#else -#error "Illigal Clock Mode!" -#endif +static unsigned int pll2_mult;  static void master_clk_init(struct clk *clk)  { -	clk->rate *= PLL2 * pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007]; +	clk->rate *= pll2_mult * pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007];  } -static struct clk_ops sh7206_master_clk_ops = { +static struct sh_clk_ops sh7206_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -47,7 +39,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7206_module_clk_ops = { +static struct sh_clk_ops sh7206_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -56,7 +48,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007];  } -static struct clk_ops sh7206_bus_clk_ops = { +static struct sh_clk_ops sh7206_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -66,20 +58,26 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh7206_cpu_clk_ops = { +static struct sh_clk_ops sh7206_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7206_clk_ops[] = { +static struct sh_clk_ops *sh7206_clk_ops[] = {  	&sh7206_master_clk_ops,  	&sh7206_module_clk_ops,  	&sh7206_bus_clk_ops,  	&sh7206_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  { +	if (test_mode_pin(MODE_PIN2 | MODE_PIN1 | MODE_PIN0)) +		pll2_mult = 1; +	else if (test_mode_pin(MODE_PIN2 | MODE_PIN1)) +		pll2_mult = 2; +	else if (test_mode_pin(MODE_PIN1)) +		pll2_mult = 4; +  	if (idx < ARRAY_SIZE(sh7206_clk_ops))  		*ops = sh7206_clk_ops[idx];  } - diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7264.c b/arch/sh/kernel/cpu/sh2a/clock-sh7264.c new file mode 100644 index 00000000000..8638fba6cd7 --- /dev/null +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7264.c @@ -0,0 +1,153 @@ +/* + * arch/sh/kernel/cpu/sh2a/clock-sh7264.c + * + * SH7264 clock framework support + * + * Copyright (C) 2012  Phil Edworthy + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/io.h> +#include <linux/clkdev.h> +#include <asm/clock.h> + +/* SH7264 registers */ +#define FRQCR		0xfffe0010 +#define STBCR3		0xfffe0408 +#define STBCR4		0xfffe040c +#define STBCR5		0xfffe0410 +#define STBCR6		0xfffe0414 +#define STBCR7		0xfffe0418 +#define STBCR8		0xfffe041c + +static const unsigned int pll1rate[] = {8, 12}; + +static unsigned int pll1_div; + +/* Fixed 32 KHz root clock for RTC */ +static struct clk r_clk = { +	.rate           = 32768, +}; + +/* + * Default rate for the root input clock, reset this with clk_set_rate() + * from the platform code. + */ +static struct clk extal_clk = { +	.rate		= 18000000, +}; + +static unsigned long pll_recalc(struct clk *clk) +{ +	unsigned long rate = clk->parent->rate / pll1_div; +	return rate * pll1rate[(__raw_readw(FRQCR) >> 8) & 1]; +} + +static struct sh_clk_ops pll_clk_ops = { +	.recalc		= pll_recalc, +}; + +static struct clk pll_clk = { +	.ops		= &pll_clk_ops, +	.parent		= &extal_clk, +	.flags		= CLK_ENABLE_ON_INIT, +}; + +struct clk *main_clks[] = { +	&r_clk, +	&extal_clk, +	&pll_clk, +}; + +static int div2[] = { 1, 2, 3, 4, 6, 8, 12 }; + +static struct clk_div_mult_table div4_div_mult_table = { +	.divisors = div2, +	.nr_divisors = ARRAY_SIZE(div2), +}; + +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table, +}; + +enum { DIV4_I, DIV4_P, +       DIV4_NR }; + +#define DIV4(_reg, _bit, _mask, _flags) \ +  SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags) + +/* The mask field specifies the div2 entries that are valid */ +struct clk div4_clks[DIV4_NR] = { +	[DIV4_I] = DIV4(FRQCR, 4, 0x7,  CLK_ENABLE_REG_16BIT +					| CLK_ENABLE_ON_INIT), +	[DIV4_P] = DIV4(FRQCR, 0, 0x78, CLK_ENABLE_REG_16BIT), +}; + +enum {	MSTP77, MSTP74, MSTP72, +	MSTP60, +	MSTP35, MSTP34, MSTP33, MSTP32, MSTP30, +	MSTP_NR }; + +static struct clk mstp_clks[MSTP_NR] = { +	[MSTP77] = SH_CLK_MSTP8(&div4_clks[DIV4_P], STBCR7, 7, 0), /* SCIF */ +	[MSTP74] = SH_CLK_MSTP8(&div4_clks[DIV4_P], STBCR7, 4, 0), /* VDC */ +	[MSTP72] = SH_CLK_MSTP8(&div4_clks[DIV4_P], STBCR7, 2, 0), /* CMT */ +	[MSTP60] = SH_CLK_MSTP8(&div4_clks[DIV4_P], STBCR6, 0, 0), /* USB */ +	[MSTP35] = SH_CLK_MSTP8(&div4_clks[DIV4_P], STBCR3, 6, 0), /* MTU2 */ +	[MSTP34] = SH_CLK_MSTP8(&div4_clks[DIV4_P], STBCR3, 4, 0), /* SDHI0 */ +	[MSTP33] = SH_CLK_MSTP8(&div4_clks[DIV4_P], STBCR3, 3, 0), /* SDHI1 */ +	[MSTP32] = SH_CLK_MSTP8(&div4_clks[DIV4_P], STBCR3, 2, 0), /* ADC */ +	[MSTP30] = SH_CLK_MSTP8(&r_clk, STBCR3, 0, 0),	/* RTC */ +}; + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("rclk", &r_clk), +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), + +	/* DIV4 clocks */ +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), +	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), + +	/* MSTP clocks */ +	CLKDEV_CON_ID("sci_ick", &mstp_clks[MSTP77]), +	CLKDEV_CON_ID("vdc3", &mstp_clks[MSTP74]), +	CLKDEV_ICK_ID("fck", "sh-cmt-16.0", &mstp_clks[MSTP72]), +	CLKDEV_CON_ID("usb0", &mstp_clks[MSTP60]), +	CLKDEV_ICK_ID("fck", "sh-mtu2", &mstp_clks[MSTP35]), +	CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP34]), +	CLKDEV_CON_ID("sdhi1", &mstp_clks[MSTP33]), +	CLKDEV_CON_ID("adc0", &mstp_clks[MSTP32]), +	CLKDEV_CON_ID("rtc0", &mstp_clks[MSTP30]), +}; + +int __init arch_clk_init(void) +{ +	int k, ret = 0; + +	if (test_mode_pin(MODE_PIN0)) { +		if (test_mode_pin(MODE_PIN1)) +			pll1_div = 3; +		else +			pll1_div = 4; +	} else +		pll1_div = 1; + +	for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) +		ret = clk_register(main_clks[k]); + +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); + +	if (!ret) +		ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table); + +	if (!ret) +		ret = sh_clk_mstp_register(mstp_clks, MSTP_NR); + +	return ret; +} diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7269.c b/arch/sh/kernel/cpu/sh2a/clock-sh7269.c new file mode 100644 index 00000000000..f8a5c2abdfb --- /dev/null +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7269.c @@ -0,0 +1,184 @@ +/* + * arch/sh/kernel/cpu/sh2a/clock-sh7269.c + * + * SH7269 clock framework support + * + * Copyright (C) 2012  Phil Edworthy + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/io.h> +#include <linux/clkdev.h> +#include <asm/clock.h> + +/* SH7269 registers */ +#define FRQCR		0xfffe0010 +#define STBCR3 		0xfffe0408 +#define STBCR4 		0xfffe040c +#define STBCR5 		0xfffe0410 +#define STBCR6 		0xfffe0414 +#define STBCR7 		0xfffe0418 + +#define PLL_RATE 20 + +/* Fixed 32 KHz root clock for RTC */ +static struct clk r_clk = { +	.rate           = 32768, +}; + +/* + * Default rate for the root input clock, reset this with clk_set_rate() + * from the platform code. + */ +static struct clk extal_clk = { +	.rate		= 13340000, +}; + +static unsigned long pll_recalc(struct clk *clk) +{ +	return clk->parent->rate * PLL_RATE; +} + +static struct sh_clk_ops pll_clk_ops = { +	.recalc		= pll_recalc, +}; + +static struct clk pll_clk = { +	.ops		= &pll_clk_ops, +	.parent		= &extal_clk, +	.flags		= CLK_ENABLE_ON_INIT, +}; + +static unsigned long peripheral0_recalc(struct clk *clk) +{ +	return clk->parent->rate / 8; +} + +static struct sh_clk_ops peripheral0_clk_ops = { +	.recalc		= peripheral0_recalc, +}; + +static struct clk peripheral0_clk = { +	.ops		= &peripheral0_clk_ops, +	.parent		= &pll_clk, +	.flags		= CLK_ENABLE_ON_INIT, +}; + +static unsigned long peripheral1_recalc(struct clk *clk) +{ +	return clk->parent->rate / 4; +} + +static struct sh_clk_ops peripheral1_clk_ops = { +	.recalc		= peripheral1_recalc, +}; + +static struct clk peripheral1_clk = { +	.ops		= &peripheral1_clk_ops, +	.parent		= &pll_clk, +	.flags		= CLK_ENABLE_ON_INIT, +}; + +struct clk *main_clks[] = { +	&r_clk, +	&extal_clk, +	&pll_clk, +	&peripheral0_clk, +	&peripheral1_clk, +}; + +static int div2[] = { 1, 2, 0, 4 }; + +static struct clk_div_mult_table div4_div_mult_table = { +	.divisors = div2, +	.nr_divisors = ARRAY_SIZE(div2), +}; + +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table, +}; + +enum { DIV4_I, DIV4_B, +       DIV4_NR }; + +#define DIV4(_reg, _bit, _mask, _flags) \ +  SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags) + +/* The mask field specifies the div2 entries that are valid */ +struct clk div4_clks[DIV4_NR] = { +	[DIV4_I]  = DIV4(FRQCR, 8, 0xB, CLK_ENABLE_REG_16BIT +					| CLK_ENABLE_ON_INIT), +	[DIV4_B]  = DIV4(FRQCR, 4, 0xA, CLK_ENABLE_REG_16BIT +					| CLK_ENABLE_ON_INIT), +}; + +enum { MSTP72, +	MSTP60, +	MSTP47, MSTP46, MSTP45, MSTP44, MSTP43, MSTP42, MSTP41, MSTP40, +	MSTP35, MSTP32, MSTP30, +	MSTP_NR }; + +static struct clk mstp_clks[MSTP_NR] = { +	[MSTP72] = SH_CLK_MSTP8(&peripheral0_clk, STBCR7, 2, 0), /* CMT */ +	[MSTP60] = SH_CLK_MSTP8(&peripheral1_clk, STBCR6, 0, 0), /* USB */ +	[MSTP47] = SH_CLK_MSTP8(&peripheral1_clk, STBCR4, 7, 0), /* SCIF0 */ +	[MSTP46] = SH_CLK_MSTP8(&peripheral1_clk, STBCR4, 6, 0), /* SCIF1 */ +	[MSTP45] = SH_CLK_MSTP8(&peripheral1_clk, STBCR4, 5, 0), /* SCIF2 */ +	[MSTP44] = SH_CLK_MSTP8(&peripheral1_clk, STBCR4, 4, 0), /* SCIF3 */ +	[MSTP43] = SH_CLK_MSTP8(&peripheral1_clk, STBCR4, 3, 0), /* SCIF4 */ +	[MSTP42] = SH_CLK_MSTP8(&peripheral1_clk, STBCR4, 2, 0), /* SCIF5 */ +	[MSTP41] = SH_CLK_MSTP8(&peripheral1_clk, STBCR4, 1, 0), /* SCIF6 */ +	[MSTP40] = SH_CLK_MSTP8(&peripheral1_clk, STBCR4, 0, 0), /* SCIF7 */ +	[MSTP35] = SH_CLK_MSTP8(&peripheral0_clk, STBCR3, 5, 0), /* MTU2 */ +	[MSTP32] = SH_CLK_MSTP8(&peripheral1_clk, STBCR3, 2, 0), /* ADC */ +	[MSTP30] = SH_CLK_MSTP8(&r_clk, STBCR3, 0, 0), /* RTC */ +}; + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("rclk", &r_clk), +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), +	CLKDEV_CON_ID("peripheral_clk", &peripheral1_clk), + +	/* DIV4 clocks */ +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), +	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), + +	/* MSTP clocks */ +	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP47]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP46]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP45]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.3", &mstp_clks[MSTP44]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.4", &mstp_clks[MSTP43]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.5", &mstp_clks[MSTP42]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.6", &mstp_clks[MSTP41]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.7", &mstp_clks[MSTP40]), +	CLKDEV_ICK_ID("fck", "sh-cmt-16.0", &mstp_clks[MSTP72]), +	CLKDEV_CON_ID("usb0", &mstp_clks[MSTP60]), +	CLKDEV_ICK_ID("fck", "sh-mtu2", &mstp_clks[MSTP35]), +	CLKDEV_CON_ID("adc0", &mstp_clks[MSTP32]), +	CLKDEV_CON_ID("rtc0", &mstp_clks[MSTP30]), +}; + +int __init arch_clk_init(void) +{ +	int k, ret = 0; + +	for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++) +		ret = clk_register(main_clks[k]); + +	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); + +	if (!ret) +		ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table); + +	if (!ret) +		ret = sh_clk_mstp_register(mstp_clks, MSTP_NR); + +	return ret; +} diff --git a/arch/sh/kernel/cpu/sh2a/ex.S b/arch/sh/kernel/cpu/sh2a/ex.S index 3ead9e63965..4568066700c 100644 --- a/arch/sh/kernel/cpu/sh2a/ex.S +++ b/arch/sh/kernel/cpu/sh2a/ex.S @@ -66,6 +66,7 @@ vector	=	0  	.long	exception_entry0 + vector * 6  vector	=	vector + 1  	.endr +vector	=	0  	.rept	256  	.long	exception_entry1 + vector * 6  vector	=	vector + 1 diff --git a/arch/sh/kernel/cpu/sh2a/fpu.c b/arch/sh/kernel/cpu/sh2a/fpu.c index 488d24e0cdf..98bbaa447c9 100644 --- a/arch/sh/kernel/cpu/sh2a/fpu.c +++ b/arch/sh/kernel/cpu/sh2a/fpu.c @@ -14,6 +14,7 @@  #include <asm/processor.h>  #include <asm/io.h>  #include <asm/fpu.h> +#include <asm/traps.h>  /* The PR (precision) bit in the FP Status Register must be clear when   * an frchg instruction is executed, otherwise the instruction is undefined. diff --git a/arch/sh/kernel/cpu/sh2a/opcode_helper.c b/arch/sh/kernel/cpu/sh2a/opcode_helper.c index 9704b7926d8..72aa61c81e4 100644 --- a/arch/sh/kernel/cpu/sh2a/opcode_helper.c +++ b/arch/sh/kernel/cpu/sh2a/opcode_helper.c @@ -10,7 +10,6 @@   * for more details.   */  #include <linux/kernel.h> -#include <asm/system.h>  /*   * Instructions on SH are generally fixed at 16-bits, however, SH-2A diff --git a/arch/sh/kernel/cpu/sh2a/pinmux-sh7203.c b/arch/sh/kernel/cpu/sh2a/pinmux-sh7203.c index c465af7283f..eef17dcc3a4 100644 --- a/arch/sh/kernel/cpu/sh2a/pinmux-sh7203.c +++ b/arch/sh/kernel/cpu/sh2a/pinmux-sh7203.c @@ -8,1590 +8,23 @@   * for more details.   */ +#include <linux/bug.h>  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/gpio.h> -#include <cpu/sh7203.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> -enum { -	PINMUX_RESERVED = 0, - -	PINMUX_DATA_BEGIN, -	PA7_DATA, PA6_DATA, PA5_DATA, PA4_DATA, -	PA3_DATA, PA2_DATA, PA1_DATA, PA0_DATA, -	PB12_DATA, -	PB11_DATA, PB10_DATA, PB9_DATA, PB8_DATA, -	PB7_DATA, PB6_DATA, PB5_DATA, PB4_DATA, -	PB3_DATA, PB2_DATA, PB1_DATA, PB0_DATA, -	PC14_DATA, PC13_DATA, PC12_DATA, -	PC11_DATA, PC10_DATA, PC9_DATA, PC8_DATA, -	PC7_DATA, PC6_DATA, PC5_DATA, PC4_DATA, -	PC3_DATA, PC2_DATA, PC1_DATA, PC0_DATA, -	PD15_DATA, PD14_DATA, PD13_DATA, PD12_DATA, -	PD11_DATA, PD10_DATA, PD9_DATA, PD8_DATA, -	PD7_DATA, PD6_DATA, PD5_DATA, PD4_DATA, -	PD3_DATA, PD2_DATA, PD1_DATA, PD0_DATA, -	PE15_DATA, PE14_DATA, PE13_DATA, PE12_DATA, -	PE11_DATA, PE10_DATA, PE9_DATA, PE8_DATA, -	PE7_DATA, PE6_DATA, PE5_DATA, PE4_DATA, -	PE3_DATA, PE2_DATA, PE1_DATA, PE0_DATA, -	PF30_DATA, PF29_DATA, PF28_DATA, -	PF27_DATA, PF26_DATA, PF25_DATA, PF24_DATA, -	PF23_DATA, PF22_DATA, PF21_DATA, PF20_DATA, -	PF19_DATA, PF18_DATA, PF17_DATA, PF16_DATA, -	PF15_DATA, PF14_DATA, PF13_DATA, PF12_DATA, -	PF11_DATA, PF10_DATA, PF9_DATA, PF8_DATA, -	PF7_DATA, PF6_DATA, PF5_DATA, PF4_DATA, -	PF3_DATA, PF2_DATA, PF1_DATA, PF0_DATA, -	PINMUX_DATA_END, - -	PINMUX_INPUT_BEGIN, -	FORCE_IN, -	PA7_IN, PA6_IN, PA5_IN, PA4_IN, -	PA3_IN, PA2_IN, PA1_IN, PA0_IN, -	PB11_IN, PB10_IN, PB9_IN, PB8_IN, -	PC14_IN, PC13_IN, PC12_IN, -	PC11_IN, PC10_IN, PC9_IN, PC8_IN, -	PC7_IN, PC6_IN, PC5_IN, PC4_IN, -	PC3_IN, PC2_IN, PC1_IN, PC0_IN, -	PD15_IN, PD14_IN, PD13_IN, PD12_IN, -	PD11_IN, PD10_IN, PD9_IN, PD8_IN, -	PD7_IN, PD6_IN, PD5_IN, PD4_IN, -	PD3_IN, PD2_IN, PD1_IN, PD0_IN, -	PE15_IN, PE14_IN, PE13_IN, PE12_IN, -	PE11_IN, PE10_IN, PE9_IN, PE8_IN, -	PE7_IN, PE6_IN, PE5_IN, PE4_IN, -	PE3_IN, PE2_IN, PE1_IN, PE0_IN, -	PF30_IN, PF29_IN, PF28_IN, -	PF27_IN, PF26_IN, PF25_IN, PF24_IN, -	PF23_IN, PF22_IN, PF21_IN, PF20_IN, -	PF19_IN, PF18_IN, PF17_IN, PF16_IN, -	PF15_IN, PF14_IN, PF13_IN, PF12_IN, -	PF11_IN, PF10_IN, PF9_IN, PF8_IN, -	PF7_IN, PF6_IN, PF5_IN, PF4_IN, -	PF3_IN, PF2_IN, PF1_IN, PF0_IN, -	PINMUX_INPUT_END, - -	PINMUX_OUTPUT_BEGIN, -	FORCE_OUT, -	PB11_OUT, PB10_OUT, PB9_OUT, PB8_OUT, -	PC14_OUT, PC13_OUT, PC12_OUT, -	PC11_OUT, PC10_OUT, PC9_OUT, PC8_OUT, -	PC7_OUT, PC6_OUT, PC5_OUT, PC4_OUT, -	PC3_OUT, PC2_OUT, PC1_OUT, PC0_OUT, -	PD15_OUT, PD14_OUT, PD13_OUT, PD12_OUT, -	PD11_OUT, PD10_OUT, PD9_OUT, PD8_OUT, -	PD7_OUT, PD6_OUT, PD5_OUT, PD4_OUT, -	PD3_OUT, PD2_OUT, PD1_OUT, PD0_OUT, -	PE15_OUT, PE14_OUT, PE13_OUT, PE12_OUT, -	PE11_OUT, PE10_OUT, PE9_OUT, PE8_OUT, -	PE7_OUT, PE6_OUT, PE5_OUT, PE4_OUT, -	PE3_OUT, PE2_OUT, PE1_OUT, PE0_OUT, -	PF30_OUT, PF29_OUT, PF28_OUT, -	PF27_OUT, PF26_OUT, PF25_OUT, PF24_OUT, -	PF23_OUT, PF22_OUT, PF21_OUT, PF20_OUT, -	PF19_OUT, PF18_OUT, PF17_OUT, PF16_OUT, -	PF15_OUT, PF14_OUT, PF13_OUT, PF12_OUT, -	PF11_OUT, PF10_OUT, PF9_OUT, PF8_OUT, -	PF7_OUT, PF6_OUT, PF5_OUT, PF4_OUT, -	PF3_OUT, PF2_OUT, PF1_OUT, PF0_OUT, -	PINMUX_OUTPUT_END, - -	PINMUX_FUNCTION_BEGIN, -	PB11_IOR_IN, PB11_IOR_OUT, -	PB10_IOR_IN, PB10_IOR_OUT, -	PB9_IOR_IN, PB9_IOR_OUT, -	PB8_IOR_IN, PB8_IOR_OUT, -	PB12MD_00, PB12MD_01, PB12MD_10, PB12MD_11, -	PB11MD_0, PB11MD_1, -	PB10MD_0, PB10MD_1, -	PB9MD_00, PB9MD_01, PB9MD_10, -	PB8MD_00, PB8MD_01, PB8MD_10, -	PB7MD_00, PB7MD_01, PB7MD_10, PB7MD_11, -	PB6MD_00, PB6MD_01, PB6MD_10, PB6MD_11, -	PB5MD_00, PB5MD_01, PB5MD_10, PB5MD_11, -	PB4MD_00, PB4MD_01, PB4MD_10, PB4MD_11, -	PB3MD_00, PB3MD_01, PB3MD_10, PB3MD_11, -	PB2MD_00, PB2MD_01, PB2MD_10, PB2MD_11, -	PB1MD_00, PB1MD_01, PB1MD_10, PB1MD_11, -	PB0MD_00, PB0MD_01, PB0MD_10, PB0MD_11, - -	PB12IRQ_00, PB12IRQ_01, PB12IRQ_10, - -	PC14MD_0, PC14MD_1, -	PC13MD_0, PC13MD_1, -	PC12MD_0, PC12MD_1, -	PC11MD_00, PC11MD_01, PC11MD_10, -	PC10MD_00, PC10MD_01, PC10MD_10, -	PC9MD_0, PC9MD_1, -	PC8MD_0, PC8MD_1, -	PC7MD_0, PC7MD_1, -	PC6MD_0, PC6MD_1, -	PC5MD_0, PC5MD_1, -	PC4MD_0, PC4MD_1, -	PC3MD_0, PC3MD_1, -	PC2MD_0, PC2MD_1, -	PC1MD_0, PC1MD_1, -	PC0MD_00, PC0MD_01, PC0MD_10, - -	PD15MD_000, PD15MD_001, PD15MD_010, PD15MD_100, PD15MD_101, -	PD14MD_000, PD14MD_001, PD14MD_010, PD14MD_101, -	PD13MD_000, PD13MD_001, PD13MD_010, PD13MD_100, PD13MD_101, -	PD12MD_000, PD12MD_001, PD12MD_010, PD12MD_100, PD12MD_101, -	PD11MD_000, PD11MD_001, PD11MD_010, PD11MD_100, PD11MD_101, -	PD10MD_000, PD10MD_001, PD10MD_010, PD10MD_100, PD10MD_101, -	PD9MD_000, PD9MD_001, PD9MD_010, PD9MD_100, PD9MD_101, -	PD8MD_000, PD8MD_001, PD8MD_010, PD8MD_100, PD8MD_101, -	PD7MD_000, PD7MD_001, PD7MD_010, PD7MD_011, PD7MD_100, PD7MD_101, -	PD6MD_000, PD6MD_001, PD6MD_010, PD6MD_011, PD6MD_100, PD6MD_101, -	PD5MD_000, PD5MD_001, PD5MD_010, PD5MD_011, PD5MD_100, PD5MD_101, -	PD4MD_000, PD4MD_001, PD4MD_010, PD4MD_011, PD4MD_100, PD4MD_101, -	PD3MD_000, PD3MD_001, PD3MD_010, PD3MD_011, PD3MD_100, PD3MD_101, -	PD2MD_000, PD2MD_001, PD2MD_010, PD2MD_011, PD2MD_100, PD2MD_101, -	PD1MD_000, PD1MD_001, PD1MD_010, PD1MD_011, PD1MD_100, PD1MD_101, -	PD0MD_000, PD0MD_001, PD0MD_010, PD0MD_011, PD0MD_100, PD0MD_101, - -	PE15MD_00, PE15MD_01, PE15MD_11, -	PE14MD_00, PE14MD_01, PE14MD_11, -	PE13MD_00, PE13MD_11, -	PE12MD_00, PE12MD_11, -	PE11MD_000, PE11MD_001, PE11MD_010, PE11MD_100, -	PE10MD_000, PE10MD_001, PE10MD_010, PE10MD_100, -	PE9MD_00, PE9MD_01, PE9MD_10, PE9MD_11, -	PE8MD_00, PE8MD_01, PE8MD_10, PE8MD_11, -	PE7MD_000, PE7MD_001, PE7MD_010, PE7MD_011, PE7MD_100, -	PE6MD_000, PE6MD_001, PE6MD_010, PE6MD_011, PE6MD_100, -	PE5MD_000, PE5MD_001, PE5MD_010, PE5MD_011, PE5MD_100, -	PE4MD_000, PE4MD_001, PE4MD_010, PE4MD_011, PE4MD_100, -	PE3MD_00, PE3MD_01, PE3MD_11, -	PE2MD_00, PE2MD_01, PE2MD_11, -	PE1MD_00, PE1MD_01, PE1MD_10, PE1MD_11, -	PE0MD_000, PE0MD_001, PE0MD_011, PE0MD_100, - -	PF30MD_0, PF30MD_1, -	PF29MD_0, PF29MD_1, -	PF28MD_0, PF28MD_1, -	PF27MD_0, PF27MD_1, -	PF26MD_0, PF26MD_1, -	PF25MD_0, PF25MD_1, -	PF24MD_0, PF24MD_1, -	PF23MD_00, PF23MD_01, PF23MD_10, -	PF22MD_00, PF22MD_01, PF22MD_10, -	PF21MD_00, PF21MD_01, PF21MD_10, -	PF20MD_00, PF20MD_01, PF20MD_10, -	PF19MD_00, PF19MD_01, PF19MD_10, -	PF18MD_00, PF18MD_01, PF18MD_10, -	PF17MD_00, PF17MD_01, PF17MD_10, -	PF16MD_00, PF16MD_01, PF16MD_10, -	PF15MD_00, PF15MD_01, PF15MD_10, -	PF14MD_00, PF14MD_01, PF14MD_10, -	PF13MD_00, PF13MD_01, PF13MD_10, -	PF12MD_00, PF12MD_01, PF12MD_10, -	PF11MD_00, PF11MD_01, PF11MD_10, -	PF10MD_00, PF10MD_01, PF10MD_10, -	PF9MD_00, PF9MD_01, PF9MD_10, -	PF8MD_00, PF8MD_01, PF8MD_10, -	PF7MD_00, PF7MD_01, PF7MD_10, PF7MD_11, -	PF6MD_00, PF6MD_01, PF6MD_10, PF6MD_11, -	PF5MD_00, PF5MD_01, PF5MD_10, PF5MD_11, -	PF4MD_00, PF4MD_01, PF4MD_10, PF4MD_11, -	PF3MD_00, PF3MD_01, PF3MD_10, PF3MD_11, -	PF2MD_00, PF2MD_01, PF2MD_10, PF2MD_11, -	PF1MD_00, PF1MD_01, PF1MD_10, PF1MD_11, -	PF0MD_00, PF0MD_01, PF0MD_10, PF0MD_11, -	PINMUX_FUNCTION_END, - -	PINMUX_MARK_BEGIN, -	PINT7_PB_MARK, PINT6_PB_MARK, PINT5_PB_MARK, PINT4_PB_MARK, -	PINT3_PB_MARK, PINT2_PB_MARK, PINT1_PB_MARK, PINT0_PB_MARK, -	PINT7_PD_MARK, PINT6_PD_MARK, PINT5_PD_MARK, PINT4_PD_MARK, -	PINT3_PD_MARK, PINT2_PD_MARK, PINT1_PD_MARK, PINT0_PD_MARK, -	IRQ7_PB_MARK, IRQ6_PB_MARK, IRQ5_PB_MARK, IRQ4_PB_MARK, -	IRQ3_PB_MARK, IRQ2_PB_MARK, IRQ1_PB_MARK, IRQ0_PB_MARK, -	IRQ7_PD_MARK, IRQ6_PD_MARK, IRQ5_PD_MARK, IRQ4_PD_MARK, -	IRQ3_PD_MARK, IRQ2_PD_MARK, IRQ1_PD_MARK, IRQ0_PD_MARK, -	IRQ7_PE_MARK, IRQ6_PE_MARK, IRQ5_PE_MARK, IRQ4_PE_MARK, -	IRQ3_PE_MARK, IRQ2_PE_MARK, IRQ1_PE_MARK, IRQ0_PE_MARK, -	WDTOVF_MARK, IRQOUT_MARK, REFOUT_MARK, IRQOUT_REFOUT_MARK, -	UBCTRG_MARK, -	CTX1_MARK, CRX1_MARK, CTX0_MARK, CTX0_CTX1_MARK, -	CRX0_MARK, CRX0_CRX1_MARK, -	SDA3_MARK, SCL3_MARK, -	SDA2_MARK, SCL2_MARK, -	SDA1_MARK, SCL1_MARK, -	SDA0_MARK, SCL0_MARK, -	TEND0_PD_MARK, TEND0_PE_MARK, DACK0_PD_MARK, DACK0_PE_MARK, -	DREQ0_PD_MARK, DREQ0_PE_MARK, TEND1_PD_MARK, TEND1_PE_MARK, -	DACK1_PD_MARK, DACK1_PE_MARK, DREQ1_PD_MARK, DREQ1_PE_MARK, -	DACK2_MARK, DREQ2_MARK, DACK3_MARK, DREQ3_MARK, -	ADTRG_PD_MARK, ADTRG_PE_MARK, -	D31_MARK, D30_MARK, D29_MARK, D28_MARK, -	D27_MARK, D26_MARK, D25_MARK, D24_MARK, -	D23_MARK, D22_MARK, D21_MARK, D20_MARK, -	D19_MARK, D18_MARK, D17_MARK, D16_MARK, -	A25_MARK, A24_MARK, A23_MARK, A22_MARK, -	A21_MARK, CS4_MARK, MRES_MARK, BS_MARK, -	IOIS16_MARK, CS1_MARK, CS6_CE1B_MARK, CE2B_MARK, -	CS5_CE1A_MARK, CE2A_MARK, FRAME_MARK, WAIT_MARK, -	RDWR_MARK, CKE_MARK, CASU_MARK,	BREQ_MARK, -	RASU_MARK, BACK_MARK, CASL_MARK, RASL_MARK, -	WE3_DQMUU_AH_ICIO_WR_MARK, WE2_DQMUL_ICIORD_MARK, -	WE1_DQMLU_WE_MARK, WE0_DQMLL_MARK, -	CS3_MARK, CS2_MARK, A1_MARK, A0_MARK, CS7_MARK, -	TIOC4D_MARK, TIOC4C_MARK, TIOC4B_MARK, TIOC4A_MARK, -	TIOC3D_MARK, TIOC3C_MARK, TIOC3B_MARK, TIOC3A_MARK, -	TIOC2B_MARK, TIOC1B_MARK, TIOC2A_MARK, TIOC1A_MARK, -	TIOC0D_MARK, TIOC0C_MARK, TIOC0B_MARK, TIOC0A_MARK, -	TCLKD_PD_MARK, TCLKC_PD_MARK, TCLKB_PD_MARK, TCLKA_PD_MARK, -	TCLKD_PF_MARK, TCLKC_PF_MARK, TCLKB_PF_MARK, TCLKA_PF_MARK, -	SCS0_PD_MARK, SSO0_PD_MARK, SSI0_PD_MARK, SSCK0_PD_MARK, -	SCS0_PF_MARK, SSO0_PF_MARK, SSI0_PF_MARK, SSCK0_PF_MARK, -	SCS1_PD_MARK, SSO1_PD_MARK, SSI1_PD_MARK, SSCK1_PD_MARK, -	SCS1_PF_MARK, SSO1_PF_MARK, SSI1_PF_MARK, SSCK1_PF_MARK, -	TXD0_MARK, RXD0_MARK, SCK0_MARK, -	TXD1_MARK, RXD1_MARK, SCK1_MARK, -	TXD2_MARK, RXD2_MARK, SCK2_MARK, -	RTS3_MARK, CTS3_MARK, TXD3_MARK, -	RXD3_MARK, SCK3_MARK, -	AUDIO_CLK_MARK, -	SSIDATA3_MARK, SSIWS3_MARK, SSISCK3_MARK, -	SSIDATA2_MARK, SSIWS2_MARK, SSISCK2_MARK, -	SSIDATA1_MARK, SSIWS1_MARK, SSISCK1_MARK, -	SSIDATA0_MARK, SSIWS0_MARK, SSISCK0_MARK, -	FCE_MARK, FRB_MARK, -	NAF7_MARK, NAF6_MARK, NAF5_MARK, NAF4_MARK, -	NAF3_MARK, NAF2_MARK, NAF1_MARK, NAF0_MARK, -	FSC_MARK, FOE_MARK, FCDE_MARK, FWE_MARK, -	LCD_VEPWC_MARK, LCD_VCPWC_MARK,	LCD_CLK_MARK, LCD_FLM_MARK, -	LCD_M_DISP_MARK, LCD_CL2_MARK, LCD_CL1_MARK, LCD_DON_MARK, -	LCD_DATA15_MARK, LCD_DATA14_MARK, LCD_DATA13_MARK, LCD_DATA12_MARK, -	LCD_DATA11_MARK, LCD_DATA10_MARK, LCD_DATA9_MARK, LCD_DATA8_MARK, -	LCD_DATA7_MARK, LCD_DATA6_MARK, LCD_DATA5_MARK, LCD_DATA4_MARK, -	LCD_DATA3_MARK, LCD_DATA2_MARK, LCD_DATA1_MARK, LCD_DATA0_MARK, -	PINMUX_MARK_END, -}; - -static pinmux_enum_t pinmux_data[] = { - -	/* PA */ -	PINMUX_DATA(PA7_DATA, PA7_IN), -	PINMUX_DATA(PA6_DATA, PA6_IN), -	PINMUX_DATA(PA5_DATA, PA5_IN), -	PINMUX_DATA(PA4_DATA, PA4_IN), -	PINMUX_DATA(PA3_DATA, PA3_IN), -	PINMUX_DATA(PA2_DATA, PA2_IN), -	PINMUX_DATA(PA1_DATA, PA1_IN), -	PINMUX_DATA(PA0_DATA, PA0_IN), - -	/* PB */ -	PINMUX_DATA(PB12_DATA, PB12MD_00, FORCE_OUT), -	PINMUX_DATA(WDTOVF_MARK, PB12MD_01), -	PINMUX_DATA(IRQOUT_MARK, PB12MD_10, PB12IRQ_00), -	PINMUX_DATA(REFOUT_MARK, PB12MD_10, PB12IRQ_01), -	PINMUX_DATA(IRQOUT_REFOUT_MARK, PB12MD_10, PB12IRQ_10), -	PINMUX_DATA(UBCTRG_MARK, PB12MD_11), - -	PINMUX_DATA(PB11_DATA, PB11MD_0, PB11_IN, PB11_OUT), -	PINMUX_DATA(CTX1_MARK, PB11MD_1), - -	PINMUX_DATA(PB10_DATA, PB10MD_0, PB10_IN, PB10_OUT), -	PINMUX_DATA(CRX1_MARK, PB10MD_1), - -	PINMUX_DATA(PB9_DATA, PB9MD_00, PB9_IN, PB9_OUT), -	PINMUX_DATA(CTX0_MARK, PB9MD_01), -	PINMUX_DATA(CTX0_CTX1_MARK, PB9MD_10), - -	PINMUX_DATA(PB8_DATA, PB8MD_00, PB8_IN, PB8_OUT), -	PINMUX_DATA(CRX0_MARK, PB8MD_01), -	PINMUX_DATA(CRX0_CRX1_MARK, PB8MD_10), - -	PINMUX_DATA(PB7_DATA, PB7MD_00, FORCE_IN), -	PINMUX_DATA(SDA3_MARK, PB7MD_01), -	PINMUX_DATA(PINT7_PB_MARK, PB7MD_10), -	PINMUX_DATA(IRQ7_PB_MARK, PB7MD_11), - -	PINMUX_DATA(PB6_DATA, PB6MD_00, FORCE_IN), -	PINMUX_DATA(SCL3_MARK, PB6MD_01), -	PINMUX_DATA(PINT6_PB_MARK, PB6MD_10), -	PINMUX_DATA(IRQ6_PB_MARK, PB6MD_11), - -	PINMUX_DATA(PB5_DATA, PB5MD_00, FORCE_IN), -	PINMUX_DATA(SDA2_MARK, PB6MD_01), -	PINMUX_DATA(PINT5_PB_MARK, PB6MD_10), -	PINMUX_DATA(IRQ5_PB_MARK, PB6MD_11), - -	PINMUX_DATA(PB4_DATA, PB4MD_00, FORCE_IN), -	PINMUX_DATA(SCL2_MARK, PB4MD_01), -	PINMUX_DATA(PINT4_PB_MARK, PB4MD_10), -	PINMUX_DATA(IRQ4_PB_MARK, PB4MD_11), - -	PINMUX_DATA(PB3_DATA, PB3MD_00, FORCE_IN), -	PINMUX_DATA(SDA1_MARK, PB3MD_01), -	PINMUX_DATA(PINT3_PB_MARK, PB3MD_10), -	PINMUX_DATA(IRQ3_PB_MARK, PB3MD_11), - -	PINMUX_DATA(PB2_DATA, PB2MD_00, FORCE_IN), -	PINMUX_DATA(SCL1_MARK, PB2MD_01), -	PINMUX_DATA(PINT2_PB_MARK, PB2MD_10), -	PINMUX_DATA(IRQ2_PB_MARK, PB2MD_11), - -	PINMUX_DATA(PB1_DATA, PB1MD_00, FORCE_IN), -	PINMUX_DATA(SDA0_MARK, PB1MD_01), -	PINMUX_DATA(PINT1_PB_MARK, PB1MD_10), -	PINMUX_DATA(IRQ1_PB_MARK, PB1MD_11), - -	PINMUX_DATA(PB0_DATA, PB0MD_00, FORCE_IN), -	PINMUX_DATA(SCL0_MARK, PB0MD_01), -	PINMUX_DATA(PINT0_PB_MARK, PB0MD_10), -	PINMUX_DATA(IRQ0_PB_MARK, PB0MD_11), - -	/* PC */ -	PINMUX_DATA(PC14_DATA, PC14MD_0, PC14_IN, PC14_OUT), -	PINMUX_DATA(WAIT_MARK, PC14MD_1), - -	PINMUX_DATA(PC13_DATA, PC13MD_0, PC13_IN, PC13_OUT), -	PINMUX_DATA(RDWR_MARK, PC13MD_1), - -	PINMUX_DATA(PC12_DATA, PC12MD_0, PC12_IN, PC12_OUT), -	PINMUX_DATA(CKE_MARK, PC12MD_1), - -	PINMUX_DATA(PC11_DATA, PC11MD_00, PC11_IN, PC11_OUT), -	PINMUX_DATA(CASU_MARK, PC11MD_01), -	PINMUX_DATA(BREQ_MARK, PC11MD_10), - -	PINMUX_DATA(PC10_DATA, PC10MD_00, PC10_IN, PC10_OUT), -	PINMUX_DATA(RASU_MARK, PC10MD_01), -	PINMUX_DATA(BACK_MARK, PC10MD_10), - -	PINMUX_DATA(PC9_DATA, PC9MD_0, PC9_IN, PC9_OUT), -	PINMUX_DATA(CASL_MARK, PC9MD_1), - -	PINMUX_DATA(PC8_DATA, PC8MD_0, PC8_IN, PC8_OUT), -	PINMUX_DATA(RASL_MARK, PC8MD_1), - -	PINMUX_DATA(PC7_DATA, PC7MD_0, PC7_IN, PC7_OUT), -	PINMUX_DATA(WE3_DQMUU_AH_ICIO_WR_MARK, PC7MD_1), - -	PINMUX_DATA(PC6_DATA, PC6MD_0, PC6_IN, PC6_OUT), -	PINMUX_DATA(WE2_DQMUL_ICIORD_MARK, PC6MD_1), - -	PINMUX_DATA(PC5_DATA, PC5MD_0, PC5_IN, PC5_OUT), -	PINMUX_DATA(WE1_DQMLU_WE_MARK, PC5MD_1), - -	PINMUX_DATA(PC4_DATA, PC4MD_0, PC4_IN, PC4_OUT), -	PINMUX_DATA(WE0_DQMLL_MARK, PC4MD_1), - -	PINMUX_DATA(PC3_DATA, PC3MD_0, PC3_IN, PC3_OUT), -	PINMUX_DATA(CS3_MARK, PC3MD_1), - -	PINMUX_DATA(PC2_DATA, PC2MD_0, PC2_IN, PC2_OUT), -	PINMUX_DATA(CS2_MARK, PC2MD_1), - -	PINMUX_DATA(PC1_DATA, PC1MD_0, PC1_IN, PC1_OUT), -	PINMUX_DATA(A1_MARK, PC1MD_1), - -	PINMUX_DATA(PC0_DATA, PC0MD_00, PC0_IN, PC0_OUT), -	PINMUX_DATA(A0_MARK, PC0MD_01), -	PINMUX_DATA(CS7_MARK, PC0MD_10), - -	/* PD */ -	PINMUX_DATA(PD15_DATA, PD15MD_000, PD15_IN, PD15_OUT), -	PINMUX_DATA(D31_MARK, PD15MD_001), -	PINMUX_DATA(PINT7_PD_MARK, PD15MD_010), -	PINMUX_DATA(ADTRG_PD_MARK, PD15MD_100), -	PINMUX_DATA(TIOC4D_MARK, PD15MD_101), - -	PINMUX_DATA(PD14_DATA, PD14MD_000, PD14_IN, PD14_OUT), -	PINMUX_DATA(D30_MARK, PD14MD_001), -	PINMUX_DATA(PINT6_PD_MARK, PD14MD_010), -	PINMUX_DATA(TIOC4C_MARK, PD14MD_101), - -	PINMUX_DATA(PD13_DATA, PD13MD_000, PD13_IN, PD13_OUT), -	PINMUX_DATA(D29_MARK, PD13MD_001), -	PINMUX_DATA(PINT5_PD_MARK, PD13MD_010), -	PINMUX_DATA(TEND1_PD_MARK, PD13MD_100), -	PINMUX_DATA(TIOC4B_MARK, PD13MD_101), - -	PINMUX_DATA(PD12_DATA, PD12MD_000, PD12_IN, PD12_OUT), -	PINMUX_DATA(D28_MARK, PD12MD_001), -	PINMUX_DATA(PINT4_PD_MARK, PD12MD_010), -	PINMUX_DATA(DACK1_PD_MARK, PD12MD_100), -	PINMUX_DATA(TIOC4A_MARK, PD12MD_101), - -	PINMUX_DATA(PD11_DATA, PD11MD_000, PD11_IN, PD11_OUT), -	PINMUX_DATA(D27_MARK, PD11MD_001), -	PINMUX_DATA(PINT3_PD_MARK, PD11MD_010), -	PINMUX_DATA(DREQ1_PD_MARK, PD11MD_100), -	PINMUX_DATA(TIOC3D_MARK, PD11MD_101), - -	PINMUX_DATA(PD10_DATA, PD10MD_000, PD10_IN, PD10_OUT), -	PINMUX_DATA(D26_MARK, PD10MD_001), -	PINMUX_DATA(PINT2_PD_MARK, PD10MD_010), -	PINMUX_DATA(TEND0_PD_MARK, PD10MD_100), -	PINMUX_DATA(TIOC3C_MARK, PD10MD_101), - -	PINMUX_DATA(PD9_DATA, PD9MD_000, PD9_IN, PD9_OUT), -	PINMUX_DATA(D25_MARK, PD9MD_001), -	PINMUX_DATA(PINT1_PD_MARK, PD9MD_010), -	PINMUX_DATA(DACK0_PD_MARK, PD9MD_100), -	PINMUX_DATA(TIOC3B_MARK, PD9MD_101), - -	PINMUX_DATA(PD8_DATA, PD8MD_000, PD8_IN, PD8_OUT), -	PINMUX_DATA(D24_MARK, PD8MD_001), -	PINMUX_DATA(PINT0_PD_MARK, PD8MD_010), -	PINMUX_DATA(DREQ0_PD_MARK, PD8MD_100), -	PINMUX_DATA(TIOC3A_MARK, PD8MD_101), - -	PINMUX_DATA(PD7_DATA, PD7MD_000, PD7_IN, PD7_OUT), -	PINMUX_DATA(D23_MARK, PD7MD_001), -	PINMUX_DATA(IRQ7_PD_MARK, PD7MD_010), -	PINMUX_DATA(SCS1_PD_MARK, PD7MD_011), -	PINMUX_DATA(TCLKD_PD_MARK, PD7MD_100), -	PINMUX_DATA(TIOC2B_MARK, PD7MD_101), - -	PINMUX_DATA(PD6_DATA, PD6MD_000, PD6_IN, PD6_OUT), -	PINMUX_DATA(D22_MARK, PD6MD_001), -	PINMUX_DATA(IRQ6_PD_MARK, PD6MD_010), -	PINMUX_DATA(SSO1_PD_MARK, PD6MD_011), -	PINMUX_DATA(TCLKC_PD_MARK, PD6MD_100), -	PINMUX_DATA(TIOC2A_MARK, PD6MD_101), - -	PINMUX_DATA(PD5_DATA, PD5MD_000, PD5_IN, PD5_OUT), -	PINMUX_DATA(D21_MARK, PD5MD_001), -	PINMUX_DATA(IRQ5_PD_MARK, PD5MD_010), -	PINMUX_DATA(SSI1_PD_MARK, PD5MD_011), -	PINMUX_DATA(TCLKB_PD_MARK, PD5MD_100), -	PINMUX_DATA(TIOC1B_MARK, PD5MD_101), - -	PINMUX_DATA(PD4_DATA, PD4MD_000, PD4_IN, PD4_OUT), -	PINMUX_DATA(D20_MARK, PD4MD_001), -	PINMUX_DATA(IRQ4_PD_MARK, PD4MD_010), -	PINMUX_DATA(SSCK1_PD_MARK, PD4MD_011), -	PINMUX_DATA(TCLKA_PD_MARK, PD4MD_100), -	PINMUX_DATA(TIOC1A_MARK, PD4MD_101), - -	PINMUX_DATA(PD3_DATA, PD3MD_000, PD3_IN, PD3_OUT), -	PINMUX_DATA(D19_MARK, PD3MD_001), -	PINMUX_DATA(IRQ3_PD_MARK, PD3MD_010), -	PINMUX_DATA(SCS0_PD_MARK, PD3MD_011), -	PINMUX_DATA(DACK3_MARK, PD3MD_100), -	PINMUX_DATA(TIOC0D_MARK, PD3MD_101), - -	PINMUX_DATA(PD2_DATA, PD2MD_000, PD2_IN, PD2_OUT), -	PINMUX_DATA(D18_MARK, PD2MD_001), -	PINMUX_DATA(IRQ2_PD_MARK, PD2MD_010), -	PINMUX_DATA(SSO0_PD_MARK, PD2MD_011), -	PINMUX_DATA(DREQ3_MARK, PD2MD_100), -	PINMUX_DATA(TIOC0C_MARK, PD2MD_101), - -	PINMUX_DATA(PD1_DATA, PD1MD_000, PD1_IN, PD1_OUT), -	PINMUX_DATA(D17_MARK, PD1MD_001), -	PINMUX_DATA(IRQ1_PD_MARK, PD1MD_010), -	PINMUX_DATA(SSI0_PD_MARK, PD1MD_011), -	PINMUX_DATA(DACK2_MARK, PD1MD_100), -	PINMUX_DATA(TIOC0B_MARK, PD1MD_101), - -	PINMUX_DATA(PD0_DATA, PD0MD_000, PD0_IN, PD0_OUT), -	PINMUX_DATA(D16_MARK, PD0MD_001), -	PINMUX_DATA(IRQ0_PD_MARK, PD0MD_010), -	PINMUX_DATA(SSCK0_PD_MARK, PD0MD_011), -	PINMUX_DATA(DREQ2_MARK, PD0MD_100), -	PINMUX_DATA(TIOC0A_MARK, PD0MD_101), - -	/* PE */ -	PINMUX_DATA(PE15_DATA, PE15MD_00, PE15_IN, PE15_OUT), -	PINMUX_DATA(IOIS16_MARK, PE15MD_01), -	PINMUX_DATA(RTS3_MARK, PE15MD_11), - -	PINMUX_DATA(PE14_DATA, PE14MD_00, PE14_IN, PE14_OUT), -	PINMUX_DATA(CS1_MARK, PE14MD_01), -	PINMUX_DATA(CTS3_MARK, PE14MD_11), - -	PINMUX_DATA(PE13_DATA, PE13MD_00, PE13_IN, PE13_OUT), -	PINMUX_DATA(TXD3_MARK, PE13MD_11), - -	PINMUX_DATA(PE12_DATA, PE12MD_00, PE12_IN, PE12_OUT), -	PINMUX_DATA(RXD3_MARK, PE12MD_11), - -	PINMUX_DATA(PE11_DATA, PE11MD_000, PE11_IN, PE11_OUT), -	PINMUX_DATA(CS6_CE1B_MARK, PE11MD_001), -	PINMUX_DATA(IRQ7_PE_MARK, PE11MD_010), -	PINMUX_DATA(TEND1_PE_MARK, PE11MD_100), - -	PINMUX_DATA(PE10_DATA, PE10MD_000, PE10_IN, PE10_OUT), -	PINMUX_DATA(CE2B_MARK, PE10MD_001), -	PINMUX_DATA(IRQ6_PE_MARK, PE10MD_010), -	PINMUX_DATA(TEND0_PE_MARK, PE10MD_100), - -	PINMUX_DATA(PE9_DATA, PE9MD_00, PE9_IN, PE9_OUT), -	PINMUX_DATA(CS5_CE1A_MARK, PE9MD_01), -	PINMUX_DATA(IRQ5_PE_MARK, PE9MD_10), -	PINMUX_DATA(SCK3_MARK, PE9MD_11), - -	PINMUX_DATA(PE8_DATA, PE8MD_00, PE8_IN, PE8_OUT), -	PINMUX_DATA(CE2A_MARK, PE8MD_01), -	PINMUX_DATA(IRQ4_PE_MARK, PE8MD_10), -	PINMUX_DATA(SCK2_MARK, PE8MD_11), - -	PINMUX_DATA(PE7_DATA, PE7MD_000, PE7_IN, PE7_OUT), -	PINMUX_DATA(FRAME_MARK, PE7MD_001), -	PINMUX_DATA(IRQ3_PE_MARK, PE7MD_010), -	PINMUX_DATA(TXD2_MARK, PE7MD_011), -	PINMUX_DATA(DACK1_PE_MARK, PE7MD_100), - -	PINMUX_DATA(PE6_DATA, PE6MD_000, PE6_IN, PE6_OUT), -	PINMUX_DATA(A25_MARK, PE6MD_001), -	PINMUX_DATA(IRQ2_PE_MARK, PE6MD_010), -	PINMUX_DATA(RXD2_MARK, PE6MD_011), -	PINMUX_DATA(DREQ1_PE_MARK, PE6MD_100), - -	PINMUX_DATA(PE5_DATA, PE5MD_000, PE5_IN, PE5_OUT), -	PINMUX_DATA(A24_MARK, PE5MD_001), -	PINMUX_DATA(IRQ1_PE_MARK, PE5MD_010), -	PINMUX_DATA(TXD1_MARK, PE5MD_011), -	PINMUX_DATA(DACK0_PE_MARK, PE5MD_100), - -	PINMUX_DATA(PE4_DATA, PE4MD_000, PE4_IN, PE4_OUT), -	PINMUX_DATA(A23_MARK, PE4MD_001), -	PINMUX_DATA(IRQ0_PE_MARK, PE4MD_010), -	PINMUX_DATA(RXD1_MARK, PE4MD_011), -	PINMUX_DATA(DREQ0_PE_MARK, PE4MD_100), - -	PINMUX_DATA(PE3_DATA, PE3MD_00, PE3_IN, PE3_OUT), -	PINMUX_DATA(A22_MARK, PE3MD_01), -	PINMUX_DATA(SCK1_MARK, PE3MD_11), - -	PINMUX_DATA(PE2_DATA, PE2MD_00, PE2_IN, PE2_OUT), -	PINMUX_DATA(A21_MARK, PE2MD_01), -	PINMUX_DATA(SCK0_MARK, PE2MD_11), - -	PINMUX_DATA(PE1_DATA, PE1MD_00, PE1_IN, PE1_OUT), -	PINMUX_DATA(CS4_MARK, PE1MD_01), -	PINMUX_DATA(MRES_MARK, PE1MD_10), -	PINMUX_DATA(TXD0_MARK, PE1MD_11), - -	PINMUX_DATA(PE0_DATA, PE0MD_000, PE0_IN, PE0_OUT), -	PINMUX_DATA(BS_MARK, PE0MD_001), -	PINMUX_DATA(RXD0_MARK, PE0MD_011), -	PINMUX_DATA(ADTRG_PE_MARK, PE0MD_100), - -	/* PF */ -	PINMUX_DATA(PF30_DATA, PF30MD_0, PF30_IN, PF30_OUT), -	PINMUX_DATA(AUDIO_CLK_MARK, PF30MD_1), - -	PINMUX_DATA(PF29_DATA, PF29MD_0, PF29_IN, PF29_OUT), -	PINMUX_DATA(SSIDATA3_MARK, PF29MD_1), - -	PINMUX_DATA(PF28_DATA, PF28MD_0, PF28_IN, PF28_OUT), -	PINMUX_DATA(SSIWS3_MARK, PF28MD_1), - -	PINMUX_DATA(PF27_DATA, PF27MD_0, PF27_IN, PF27_OUT), -	PINMUX_DATA(SSISCK3_MARK, PF27MD_1), - -	PINMUX_DATA(PF26_DATA, PF26MD_0, PF26_IN, PF26_OUT), -	PINMUX_DATA(SSIDATA2_MARK, PF26MD_1), - -	PINMUX_DATA(PF25_DATA, PF25MD_0, PF25_IN, PF25_OUT), -	PINMUX_DATA(SSIWS2_MARK, PF25MD_1), - -	PINMUX_DATA(PF24_DATA, PF24MD_0, PF24_IN, PF24_OUT), -	PINMUX_DATA(SSISCK2_MARK, PF24MD_1), - -	PINMUX_DATA(PF23_DATA, PF23MD_00, PF23_IN, PF23_OUT), -	PINMUX_DATA(SSIDATA1_MARK, PF23MD_01), -	PINMUX_DATA(LCD_VEPWC_MARK, PF23MD_10), - -	PINMUX_DATA(PF22_DATA, PF22MD_00, PF22_IN, PF22_OUT), -	PINMUX_DATA(SSIWS1_MARK, PF22MD_01), -	PINMUX_DATA(LCD_VCPWC_MARK, PF22MD_10), - -	PINMUX_DATA(PF21_DATA, PF21MD_00, PF21_IN, PF21_OUT), -	PINMUX_DATA(SSISCK1_MARK, PF21MD_01), -	PINMUX_DATA(LCD_CLK_MARK, PF21MD_10), - -	PINMUX_DATA(PF20_DATA, PF20MD_00, PF20_IN, PF20_OUT), -	PINMUX_DATA(SSIDATA0_MARK, PF20MD_01), -	PINMUX_DATA(LCD_FLM_MARK, PF20MD_10), - -	PINMUX_DATA(PF19_DATA, PF19MD_00, PF19_IN, PF19_OUT), -	PINMUX_DATA(SSIWS0_MARK, PF19MD_01), -	PINMUX_DATA(LCD_M_DISP_MARK, PF19MD_10), - -	PINMUX_DATA(PF18_DATA, PF18MD_00, PF18_IN, PF18_OUT), -	PINMUX_DATA(SSISCK0_MARK, PF18MD_01), -	PINMUX_DATA(LCD_CL2_MARK, PF18MD_10), - -	PINMUX_DATA(PF17_DATA, PF17MD_00, PF17_IN, PF17_OUT), -	PINMUX_DATA(FCE_MARK, PF17MD_01), -	PINMUX_DATA(LCD_CL1_MARK, PF17MD_10), - -	PINMUX_DATA(PF16_DATA, PF16MD_00, PF16_IN, PF16_OUT), -	PINMUX_DATA(FRB_MARK, PF16MD_01), -	PINMUX_DATA(LCD_DON_MARK, PF16MD_10), - -	PINMUX_DATA(PF15_DATA, PF15MD_00, PF15_IN, PF15_OUT), -	PINMUX_DATA(NAF7_MARK, PF15MD_01), -	PINMUX_DATA(LCD_DATA15_MARK, PF15MD_10), - -	PINMUX_DATA(PF14_DATA, PF14MD_00, PF14_IN, PF14_OUT), -	PINMUX_DATA(NAF6_MARK, PF14MD_01), -	PINMUX_DATA(LCD_DATA14_MARK, PF14MD_10), - -	PINMUX_DATA(PF13_DATA, PF13MD_00, PF13_IN, PF13_OUT), -	PINMUX_DATA(NAF5_MARK, PF13MD_01), -	PINMUX_DATA(LCD_DATA13_MARK, PF13MD_10), - -	PINMUX_DATA(PF12_DATA, PF12MD_00, PF12_IN, PF12_OUT), -	PINMUX_DATA(NAF4_MARK, PF12MD_01), -	PINMUX_DATA(LCD_DATA12_MARK, PF12MD_10), - -	PINMUX_DATA(PF11_DATA, PF11MD_00, PF11_IN, PF11_OUT), -	PINMUX_DATA(NAF3_MARK, PF11MD_01), -	PINMUX_DATA(LCD_DATA11_MARK, PF11MD_10), - -	PINMUX_DATA(PF10_DATA, PF10MD_00, PF10_IN, PF10_OUT), -	PINMUX_DATA(NAF2_MARK, PF10MD_01), -	PINMUX_DATA(LCD_DATA10_MARK, PF10MD_10), - -	PINMUX_DATA(PF9_DATA, PF9MD_00, PF9_IN, PF9_OUT), -	PINMUX_DATA(NAF1_MARK, PF9MD_01), -	PINMUX_DATA(LCD_DATA9_MARK, PF9MD_10), - -	PINMUX_DATA(PF8_DATA, PF8MD_00, PF8_IN, PF8_OUT), -	PINMUX_DATA(NAF0_MARK, PF8MD_01), -	PINMUX_DATA(LCD_DATA8_MARK, PF8MD_10), - -	PINMUX_DATA(PF7_DATA, PF7MD_00, PF7_IN, PF7_OUT), -	PINMUX_DATA(FSC_MARK, PF7MD_01), -	PINMUX_DATA(LCD_DATA7_MARK, PF7MD_10), -	PINMUX_DATA(SCS1_PF_MARK, PF7MD_11), - -	PINMUX_DATA(PF6_DATA, PF6MD_00, PF6_IN, PF6_OUT), -	PINMUX_DATA(FOE_MARK, PF6MD_01), -	PINMUX_DATA(LCD_DATA6_MARK, PF6MD_10), -	PINMUX_DATA(SSO1_PF_MARK, PF6MD_11), - -	PINMUX_DATA(PF5_DATA, PF5MD_00, PF5_IN, PF5_OUT), -	PINMUX_DATA(FCDE_MARK, PF5MD_01), -	PINMUX_DATA(LCD_DATA5_MARK, PF5MD_10), -	PINMUX_DATA(SSI1_PF_MARK, PF5MD_11), - -	PINMUX_DATA(PF4_DATA, PF4MD_00, PF4_IN, PF4_OUT), -	PINMUX_DATA(FWE_MARK, PF4MD_01), -	PINMUX_DATA(LCD_DATA4_MARK, PF4MD_10), -	PINMUX_DATA(SSCK1_PF_MARK, PF4MD_11), - -	PINMUX_DATA(PF3_DATA, PF3MD_00, PF3_IN, PF3_OUT), -	PINMUX_DATA(TCLKD_PF_MARK, PF3MD_01), -	PINMUX_DATA(LCD_DATA3_MARK, PF3MD_10), -	PINMUX_DATA(SCS0_PF_MARK, PF3MD_11), - -	PINMUX_DATA(PF2_DATA, PF2MD_00, PF2_IN, PF2_OUT), -	PINMUX_DATA(TCLKC_PF_MARK, PF2MD_01), -	PINMUX_DATA(LCD_DATA2_MARK, PF2MD_10), -	PINMUX_DATA(SSO0_PF_MARK, PF2MD_11), - -	PINMUX_DATA(PF1_DATA, PF1MD_00, PF1_IN, PF1_OUT), -	PINMUX_DATA(TCLKB_PF_MARK, PF1MD_01), -	PINMUX_DATA(LCD_DATA1_MARK, PF1MD_10), -	PINMUX_DATA(SSI0_PF_MARK, PF1MD_11), - -	PINMUX_DATA(PF0_DATA, PF0MD_00, PF0_IN, PF0_OUT), -	PINMUX_DATA(TCLKA_PF_MARK, PF0MD_01), -	PINMUX_DATA(LCD_DATA0_MARK, PF0MD_10), -	PINMUX_DATA(SSCK0_PF_MARK, PF0MD_11), -}; - -static struct pinmux_gpio pinmux_gpios[] = { - -	/* PA */ -	PINMUX_GPIO(GPIO_PA7, PA7_DATA), -	PINMUX_GPIO(GPIO_PA6, PA6_DATA), -	PINMUX_GPIO(GPIO_PA5, PA5_DATA), -	PINMUX_GPIO(GPIO_PA4, PA4_DATA), -	PINMUX_GPIO(GPIO_PA3, PA3_DATA), -	PINMUX_GPIO(GPIO_PA2, PA2_DATA), -	PINMUX_GPIO(GPIO_PA1, PA1_DATA), -	PINMUX_GPIO(GPIO_PA0, PA0_DATA), - -	/* PB */ -	PINMUX_GPIO(GPIO_PB12, PB12_DATA), -	PINMUX_GPIO(GPIO_PB11, PB11_DATA), -	PINMUX_GPIO(GPIO_PB10, PB10_DATA), -	PINMUX_GPIO(GPIO_PB9, PB9_DATA), -	PINMUX_GPIO(GPIO_PB8, PB8_DATA), -	PINMUX_GPIO(GPIO_PB7, PB7_DATA), -	PINMUX_GPIO(GPIO_PB6, PB6_DATA), -	PINMUX_GPIO(GPIO_PB5, PB5_DATA), -	PINMUX_GPIO(GPIO_PB4, PB4_DATA), -	PINMUX_GPIO(GPIO_PB3, PB3_DATA), -	PINMUX_GPIO(GPIO_PB2, PB2_DATA), -	PINMUX_GPIO(GPIO_PB1, PB1_DATA), -	PINMUX_GPIO(GPIO_PB0, PB0_DATA), - -	/* PC */ -	PINMUX_GPIO(GPIO_PC14, PC14_DATA), -	PINMUX_GPIO(GPIO_PC13, PC13_DATA), -	PINMUX_GPIO(GPIO_PC12, PC12_DATA), -	PINMUX_GPIO(GPIO_PC11, PC11_DATA), -	PINMUX_GPIO(GPIO_PC10, PC10_DATA), -	PINMUX_GPIO(GPIO_PC9, PC9_DATA), -	PINMUX_GPIO(GPIO_PC8, PC8_DATA), -	PINMUX_GPIO(GPIO_PC7, PC7_DATA), -	PINMUX_GPIO(GPIO_PC6, PC6_DATA), -	PINMUX_GPIO(GPIO_PC5, PC5_DATA), -	PINMUX_GPIO(GPIO_PC4, PC4_DATA), -	PINMUX_GPIO(GPIO_PC3, PC3_DATA), -	PINMUX_GPIO(GPIO_PC2, PC2_DATA), -	PINMUX_GPIO(GPIO_PC1, PC1_DATA), -	PINMUX_GPIO(GPIO_PC0, PC0_DATA), - -	/* PD */ -	PINMUX_GPIO(GPIO_PD15, PD15_DATA), -	PINMUX_GPIO(GPIO_PD14, PD14_DATA), -	PINMUX_GPIO(GPIO_PD13, PD13_DATA), -	PINMUX_GPIO(GPIO_PD12, PD12_DATA), -	PINMUX_GPIO(GPIO_PD11, PD11_DATA), -	PINMUX_GPIO(GPIO_PD10, PD10_DATA), -	PINMUX_GPIO(GPIO_PD9, PD9_DATA), -	PINMUX_GPIO(GPIO_PD8, PD8_DATA), -	PINMUX_GPIO(GPIO_PD7, PD7_DATA), -	PINMUX_GPIO(GPIO_PD6, PD6_DATA), -	PINMUX_GPIO(GPIO_PD5, PD5_DATA), -	PINMUX_GPIO(GPIO_PD4, PD4_DATA), -	PINMUX_GPIO(GPIO_PD3, PD3_DATA), -	PINMUX_GPIO(GPIO_PD2, PD2_DATA), -	PINMUX_GPIO(GPIO_PD1, PD1_DATA), -	PINMUX_GPIO(GPIO_PD0, PD0_DATA), - -	/* PE */ -	PINMUX_GPIO(GPIO_PE15, PE15_DATA), -	PINMUX_GPIO(GPIO_PE14, PE14_DATA), -	PINMUX_GPIO(GPIO_PE13, PE13_DATA), -	PINMUX_GPIO(GPIO_PE12, PE12_DATA), -	PINMUX_GPIO(GPIO_PE11, PE11_DATA), -	PINMUX_GPIO(GPIO_PE10, PE10_DATA), -	PINMUX_GPIO(GPIO_PE9, PE9_DATA), -	PINMUX_GPIO(GPIO_PE8, PE8_DATA), -	PINMUX_GPIO(GPIO_PE7, PE7_DATA), -	PINMUX_GPIO(GPIO_PE6, PE6_DATA), -	PINMUX_GPIO(GPIO_PE5, PE5_DATA), -	PINMUX_GPIO(GPIO_PE4, PE4_DATA), -	PINMUX_GPIO(GPIO_PE3, PE3_DATA), -	PINMUX_GPIO(GPIO_PE2, PE2_DATA), -	PINMUX_GPIO(GPIO_PE1, PE1_DATA), -	PINMUX_GPIO(GPIO_PE0, PE0_DATA), - -	/* PF */ -	PINMUX_GPIO(GPIO_PF30, PF30_DATA), -	PINMUX_GPIO(GPIO_PF29, PF29_DATA), -	PINMUX_GPIO(GPIO_PF28, PF28_DATA), -	PINMUX_GPIO(GPIO_PF27, PF27_DATA), -	PINMUX_GPIO(GPIO_PF26, PF26_DATA), -	PINMUX_GPIO(GPIO_PF25, PF25_DATA), -	PINMUX_GPIO(GPIO_PF24, PF24_DATA), -	PINMUX_GPIO(GPIO_PF23, PF23_DATA), -	PINMUX_GPIO(GPIO_PF22, PF22_DATA), -	PINMUX_GPIO(GPIO_PF21, PF21_DATA), -	PINMUX_GPIO(GPIO_PF20, PF20_DATA), -	PINMUX_GPIO(GPIO_PF19, PF19_DATA), -	PINMUX_GPIO(GPIO_PF18, PF18_DATA), -	PINMUX_GPIO(GPIO_PF17, PF17_DATA), -	PINMUX_GPIO(GPIO_PF16, PF16_DATA), -	PINMUX_GPIO(GPIO_PF15, PF15_DATA), -	PINMUX_GPIO(GPIO_PF14, PF14_DATA), -	PINMUX_GPIO(GPIO_PF13, PF13_DATA), -	PINMUX_GPIO(GPIO_PF12, PF12_DATA), -	PINMUX_GPIO(GPIO_PF11, PF11_DATA), -	PINMUX_GPIO(GPIO_PF10, PF10_DATA), -	PINMUX_GPIO(GPIO_PF9, PF9_DATA), -	PINMUX_GPIO(GPIO_PF8, PF8_DATA), -	PINMUX_GPIO(GPIO_PF7, PF7_DATA), -	PINMUX_GPIO(GPIO_PF6, PF6_DATA), -	PINMUX_GPIO(GPIO_PF5, PF5_DATA), -	PINMUX_GPIO(GPIO_PF4, PF4_DATA), -	PINMUX_GPIO(GPIO_PF3, PF3_DATA), -	PINMUX_GPIO(GPIO_PF2, PF2_DATA), -	PINMUX_GPIO(GPIO_PF1, PF1_DATA), -	PINMUX_GPIO(GPIO_PF0, PF0_DATA), - -	/* INTC */ -	PINMUX_GPIO(GPIO_FN_PINT7_PB, PINT7_PB_MARK), -	PINMUX_GPIO(GPIO_FN_PINT6_PB, PINT6_PB_MARK), -	PINMUX_GPIO(GPIO_FN_PINT5_PB, PINT5_PB_MARK), -	PINMUX_GPIO(GPIO_FN_PINT4_PB, PINT4_PB_MARK), -	PINMUX_GPIO(GPIO_FN_PINT3_PB, PINT3_PB_MARK), -	PINMUX_GPIO(GPIO_FN_PINT2_PB, PINT2_PB_MARK), -	PINMUX_GPIO(GPIO_FN_PINT1_PB, PINT1_PB_MARK), -	PINMUX_GPIO(GPIO_FN_PINT0_PB, PINT0_PB_MARK), -	PINMUX_GPIO(GPIO_FN_PINT7_PD, PINT7_PD_MARK), -	PINMUX_GPIO(GPIO_FN_PINT6_PD, PINT6_PD_MARK), -	PINMUX_GPIO(GPIO_FN_PINT5_PD, PINT5_PD_MARK), -	PINMUX_GPIO(GPIO_FN_PINT4_PD, PINT4_PD_MARK), -	PINMUX_GPIO(GPIO_FN_PINT3_PD, PINT3_PD_MARK), -	PINMUX_GPIO(GPIO_FN_PINT2_PD, PINT2_PD_MARK), -	PINMUX_GPIO(GPIO_FN_PINT1_PD, PINT1_PD_MARK), -	PINMUX_GPIO(GPIO_FN_PINT0_PD, PINT0_PD_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ7_PB, IRQ7_PB_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ6_PB, IRQ6_PB_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ5_PB, IRQ5_PB_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ4_PB, IRQ4_PB_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ3_PB, IRQ3_PB_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ2_PB, IRQ2_PB_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ1_PB, IRQ1_PB_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ0_PB, IRQ0_PB_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ7_PD, IRQ7_PD_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ6_PD, IRQ6_PD_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ5_PD, IRQ5_PD_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ4_PD, IRQ4_PD_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ3_PD, IRQ3_PD_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ2_PD, IRQ2_PD_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ1_PD, IRQ1_PD_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ0_PD, IRQ0_PD_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ7_PE, IRQ7_PE_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ6_PE, IRQ6_PE_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ5_PE, IRQ5_PE_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ4_PE, IRQ4_PE_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ3_PE, IRQ3_PE_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ2_PE, IRQ2_PE_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ1_PE, IRQ1_PE_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ0_PE, IRQ0_PE_MARK), - -	PINMUX_GPIO(GPIO_FN_WDTOVF, WDTOVF_MARK), -	PINMUX_GPIO(GPIO_FN_IRQOUT, IRQOUT_MARK), -	PINMUX_GPIO(GPIO_FN_REFOUT, REFOUT_MARK), -	PINMUX_GPIO(GPIO_FN_IRQOUT_REFOUT, IRQOUT_REFOUT_MARK), -	PINMUX_GPIO(GPIO_FN_UBCTRG, UBCTRG_MARK), - -	/* CAN */ -	PINMUX_GPIO(GPIO_FN_CTX1, CTX1_MARK), -	PINMUX_GPIO(GPIO_FN_CRX1, CRX1_MARK), -	PINMUX_GPIO(GPIO_FN_CTX0, CTX0_MARK), -	PINMUX_GPIO(GPIO_FN_CTX0_CTX1, CTX0_CTX1_MARK), -	PINMUX_GPIO(GPIO_FN_CRX0, CRX0_MARK), -	PINMUX_GPIO(GPIO_FN_CRX0_CRX1, CRX0_CRX1_MARK), - -	/* IIC3 */ -	PINMUX_GPIO(GPIO_FN_SDA3, SDA3_MARK), -	PINMUX_GPIO(GPIO_FN_SCL3, SCL3_MARK), -	PINMUX_GPIO(GPIO_FN_SDA2, SDA2_MARK), -	PINMUX_GPIO(GPIO_FN_SCL2, SCL2_MARK), -	PINMUX_GPIO(GPIO_FN_SDA1, SDA1_MARK), -	PINMUX_GPIO(GPIO_FN_SCL1, SCL1_MARK), -	PINMUX_GPIO(GPIO_FN_SDA0, SDA0_MARK), -	PINMUX_GPIO(GPIO_FN_SCL0, SCL0_MARK), - -	/* DMAC */ -	PINMUX_GPIO(GPIO_FN_TEND0_PD, TEND0_PD_MARK), -	PINMUX_GPIO(GPIO_FN_TEND0_PE, TEND0_PE_MARK), -	PINMUX_GPIO(GPIO_FN_DACK0_PD, DACK0_PD_MARK), -	PINMUX_GPIO(GPIO_FN_DACK0_PE, DACK0_PE_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ0_PD, DREQ0_PD_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ0_PE, DREQ0_PE_MARK), -	PINMUX_GPIO(GPIO_FN_TEND1_PD, TEND1_PD_MARK), -	PINMUX_GPIO(GPIO_FN_TEND1_PE, TEND1_PE_MARK), -	PINMUX_GPIO(GPIO_FN_DACK1_PD, DACK1_PD_MARK), -	PINMUX_GPIO(GPIO_FN_DACK1_PE, DACK1_PE_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ1_PD, DREQ1_PD_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ1_PE, DREQ1_PE_MARK), -	PINMUX_GPIO(GPIO_FN_DACK2, DACK2_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ2, DREQ2_MARK), -	PINMUX_GPIO(GPIO_FN_DACK3, DACK3_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ3, DREQ3_MARK), - -	/* ADC */ -	PINMUX_GPIO(GPIO_FN_ADTRG_PD, ADTRG_PD_MARK), -	PINMUX_GPIO(GPIO_FN_ADTRG_PE, ADTRG_PE_MARK), - -	/* BSC */ -	PINMUX_GPIO(GPIO_FN_D31, D31_MARK), -	PINMUX_GPIO(GPIO_FN_D30, D30_MARK), -	PINMUX_GPIO(GPIO_FN_D29, D29_MARK), -	PINMUX_GPIO(GPIO_FN_D28, D28_MARK), -	PINMUX_GPIO(GPIO_FN_D27, D27_MARK), -	PINMUX_GPIO(GPIO_FN_D26, D26_MARK), -	PINMUX_GPIO(GPIO_FN_D25, D25_MARK), -	PINMUX_GPIO(GPIO_FN_D24, D24_MARK), -	PINMUX_GPIO(GPIO_FN_D23, D23_MARK), -	PINMUX_GPIO(GPIO_FN_D22, D22_MARK), -	PINMUX_GPIO(GPIO_FN_D21, D21_MARK), -	PINMUX_GPIO(GPIO_FN_D20, D20_MARK), -	PINMUX_GPIO(GPIO_FN_D19, D19_MARK), -	PINMUX_GPIO(GPIO_FN_D18, D18_MARK), -	PINMUX_GPIO(GPIO_FN_D17, D17_MARK), -	PINMUX_GPIO(GPIO_FN_D16, D16_MARK), -	PINMUX_GPIO(GPIO_FN_A25, A25_MARK), -	PINMUX_GPIO(GPIO_FN_A24, A24_MARK), -	PINMUX_GPIO(GPIO_FN_A23, A23_MARK), -	PINMUX_GPIO(GPIO_FN_A22, A22_MARK), -	PINMUX_GPIO(GPIO_FN_A21, A21_MARK), -	PINMUX_GPIO(GPIO_FN_CS4, CS4_MARK), -	PINMUX_GPIO(GPIO_FN_MRES, MRES_MARK), -	PINMUX_GPIO(GPIO_FN_BS, BS_MARK), -	PINMUX_GPIO(GPIO_FN_IOIS16, IOIS16_MARK), -	PINMUX_GPIO(GPIO_FN_CS1, CS1_MARK), -	PINMUX_GPIO(GPIO_FN_CS6_CE1B, CS6_CE1B_MARK), -	PINMUX_GPIO(GPIO_FN_CE2B, CE2B_MARK), -	PINMUX_GPIO(GPIO_FN_CS5_CE1A, CS5_CE1A_MARK), -	PINMUX_GPIO(GPIO_FN_CE2A, CE2A_MARK), -	PINMUX_GPIO(GPIO_FN_FRAME, FRAME_MARK), -	PINMUX_GPIO(GPIO_FN_WAIT, WAIT_MARK), -	PINMUX_GPIO(GPIO_FN_RDWR, RDWR_MARK), -	PINMUX_GPIO(GPIO_FN_CKE, CKE_MARK), -	PINMUX_GPIO(GPIO_FN_CASU, CASU_MARK), -	PINMUX_GPIO(GPIO_FN_BREQ, BREQ_MARK), -	PINMUX_GPIO(GPIO_FN_RASU, RASU_MARK), -	PINMUX_GPIO(GPIO_FN_BACK, BACK_MARK), -	PINMUX_GPIO(GPIO_FN_CASL, CASL_MARK), -	PINMUX_GPIO(GPIO_FN_RASL, RASL_MARK), -	PINMUX_GPIO(GPIO_FN_WE3_DQMUU_AH_ICIO_WR, WE3_DQMUU_AH_ICIO_WR_MARK), -	PINMUX_GPIO(GPIO_FN_WE2_DQMUL_ICIORD, WE2_DQMUL_ICIORD_MARK), -	PINMUX_GPIO(GPIO_FN_WE1_DQMLU_WE, WE1_DQMLU_WE_MARK), -	PINMUX_GPIO(GPIO_FN_WE0_DQMLL, WE0_DQMLL_MARK), -	PINMUX_GPIO(GPIO_FN_CS3, CS3_MARK), -	PINMUX_GPIO(GPIO_FN_CS2, CS2_MARK), -	PINMUX_GPIO(GPIO_FN_A1, A1_MARK), -	PINMUX_GPIO(GPIO_FN_A0, A0_MARK), -	PINMUX_GPIO(GPIO_FN_CS7, CS7_MARK), - -	/* TMU */ -	PINMUX_GPIO(GPIO_FN_TIOC4D, TIOC4D_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC4C, TIOC4C_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC4B, TIOC4B_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC4A, TIOC4A_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC3D, TIOC3D_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC3C, TIOC3C_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC3B, TIOC3B_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC3A, TIOC3A_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC2B, TIOC2B_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC1B, TIOC1B_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC2A, TIOC2A_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC1A, TIOC1A_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC0D, TIOC0D_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC0C, TIOC0C_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC0B, TIOC0B_MARK), -	PINMUX_GPIO(GPIO_FN_TIOC0A, TIOC0A_MARK), -	PINMUX_GPIO(GPIO_FN_TCLKD_PD, TCLKD_PD_MARK), -	PINMUX_GPIO(GPIO_FN_TCLKC_PD, TCLKC_PD_MARK), -	PINMUX_GPIO(GPIO_FN_TCLKB_PD, TCLKB_PD_MARK), -	PINMUX_GPIO(GPIO_FN_TCLKA_PD, TCLKA_PD_MARK), -	PINMUX_GPIO(GPIO_FN_TCLKD_PF, TCLKD_PF_MARK), -	PINMUX_GPIO(GPIO_FN_TCLKC_PF, TCLKC_PF_MARK), -	PINMUX_GPIO(GPIO_FN_TCLKB_PF, TCLKB_PF_MARK), -	PINMUX_GPIO(GPIO_FN_TCLKA_PF, TCLKA_PF_MARK), - -	/* SSU */ -	PINMUX_GPIO(GPIO_FN_SCS0_PD, SCS0_PD_MARK), -	PINMUX_GPIO(GPIO_FN_SSO0_PD, SSO0_PD_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_PD, SSI0_PD_MARK), -	PINMUX_GPIO(GPIO_FN_SSCK0_PD, SSCK0_PD_MARK), -	PINMUX_GPIO(GPIO_FN_SCS0_PF, SCS0_PF_MARK), -	PINMUX_GPIO(GPIO_FN_SSO0_PF, SSO0_PF_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_PF, SSI0_PF_MARK), -	PINMUX_GPIO(GPIO_FN_SSCK0_PF, SSCK0_PF_MARK), -	PINMUX_GPIO(GPIO_FN_SCS1_PD, SCS1_PD_MARK), -	PINMUX_GPIO(GPIO_FN_SSO1_PD, SSO1_PD_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_PD, SSI1_PD_MARK), -	PINMUX_GPIO(GPIO_FN_SSCK1_PD, SSCK1_PD_MARK), -	PINMUX_GPIO(GPIO_FN_SCS1_PF, SCS1_PF_MARK), -	PINMUX_GPIO(GPIO_FN_SSO1_PF, SSO1_PF_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_PF, SSI1_PF_MARK), -	PINMUX_GPIO(GPIO_FN_SSCK1_PF, SSCK1_PF_MARK), - -	/* SCIF */ -	PINMUX_GPIO(GPIO_FN_TXD0, TXD0_MARK), -	PINMUX_GPIO(GPIO_FN_RXD0, RXD0_MARK), -	PINMUX_GPIO(GPIO_FN_SCK0, SCK0_MARK), -	PINMUX_GPIO(GPIO_FN_TXD1, TXD1_MARK), -	PINMUX_GPIO(GPIO_FN_RXD1, RXD1_MARK), -	PINMUX_GPIO(GPIO_FN_SCK1, SCK1_MARK), -	PINMUX_GPIO(GPIO_FN_TXD2, TXD2_MARK), -	PINMUX_GPIO(GPIO_FN_RXD2, RXD2_MARK), -	PINMUX_GPIO(GPIO_FN_SCK2, SCK2_MARK), -	PINMUX_GPIO(GPIO_FN_RTS3, RTS3_MARK), -	PINMUX_GPIO(GPIO_FN_CTS3, CTS3_MARK), -	PINMUX_GPIO(GPIO_FN_TXD3, TXD3_MARK), -	PINMUX_GPIO(GPIO_FN_RXD3, RXD3_MARK), -	PINMUX_GPIO(GPIO_FN_SCK3, SCK3_MARK), - -	/* SSI */ -	PINMUX_GPIO(GPIO_FN_AUDIO_CLK, AUDIO_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SSIDATA3, SSIDATA3_MARK), -	PINMUX_GPIO(GPIO_FN_SSIWS3, SSIWS3_MARK), -	PINMUX_GPIO(GPIO_FN_SSISCK3, SSISCK3_MARK), -	PINMUX_GPIO(GPIO_FN_SSIDATA2, SSIDATA2_MARK), -	PINMUX_GPIO(GPIO_FN_SSIWS2, SSIWS2_MARK), -	PINMUX_GPIO(GPIO_FN_SSISCK2, SSISCK2_MARK), -	PINMUX_GPIO(GPIO_FN_SSIDATA1, SSIDATA1_MARK), -	PINMUX_GPIO(GPIO_FN_SSIWS1, SSIWS1_MARK), -	PINMUX_GPIO(GPIO_FN_SSISCK1, SSISCK1_MARK), -	PINMUX_GPIO(GPIO_FN_SSIDATA0, SSIDATA0_MARK), -	PINMUX_GPIO(GPIO_FN_SSIWS0, SSIWS0_MARK), -	PINMUX_GPIO(GPIO_FN_SSISCK0, SSISCK0_MARK), - -	/* FLCTL */ -	PINMUX_GPIO(GPIO_FN_FCE, FCE_MARK), -	PINMUX_GPIO(GPIO_FN_FRB, FRB_MARK), -	PINMUX_GPIO(GPIO_FN_NAF7, NAF7_MARK), -	PINMUX_GPIO(GPIO_FN_NAF6, NAF6_MARK), -	PINMUX_GPIO(GPIO_FN_NAF5, NAF5_MARK), -	PINMUX_GPIO(GPIO_FN_NAF4, NAF4_MARK), -	PINMUX_GPIO(GPIO_FN_NAF3, NAF3_MARK), -	PINMUX_GPIO(GPIO_FN_NAF2, NAF2_MARK), -	PINMUX_GPIO(GPIO_FN_NAF1, NAF1_MARK), -	PINMUX_GPIO(GPIO_FN_NAF0, NAF0_MARK), -	PINMUX_GPIO(GPIO_FN_FSC, FSC_MARK), -	PINMUX_GPIO(GPIO_FN_FOE, FOE_MARK), -	PINMUX_GPIO(GPIO_FN_FCDE, FCDE_MARK), -	PINMUX_GPIO(GPIO_FN_FWE, FWE_MARK), - -	/* LCDC */ -	PINMUX_GPIO(GPIO_FN_LCD_VEPWC, LCD_VEPWC_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_VCPWC, LCD_VCPWC_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_CLK, LCD_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_FLM, LCD_FLM_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_M_DISP, LCD_M_DISP_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_CL2, LCD_CL2_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_CL1, LCD_CL1_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DON, LCD_DON_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA15, LCD_DATA15_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA14, LCD_DATA14_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA13, LCD_DATA13_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA12, LCD_DATA12_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA11, LCD_DATA11_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA10, LCD_DATA10_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA9, LCD_DATA9_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA8, LCD_DATA8_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA7, LCD_DATA7_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA6, LCD_DATA6_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA5, LCD_DATA5_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA4, LCD_DATA4_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA3, LCD_DATA3_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA2, LCD_DATA2_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA1, LCD_DATA1_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA0, LCD_DATA0_MARK), -}; - -static struct pinmux_cfg_reg pinmux_config_regs[] = { -	{ PINMUX_CFG_REG("PBIORL", 0xfffe3886, 16, 1) { -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PB11_IN, PB11_OUT, -		PB10_IN, PB10_OUT, -		PB9_IN, PB9_OUT, -		PB8_IN, PB8_OUT, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0 } -	}, -	{ PINMUX_CFG_REG("PBCRL4", 0xfffe3890, 16, 4) { -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB12MD_00, PB12MD_01, PB12MD_10, PB12MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PBCRL3", 0xfffe3892, 16, 4) { -		PB11MD_0, PB11MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB10MD_0, PB10MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB9MD_00, PB9MD_01, PB9MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB8MD_00, PB8MD_01, PB8MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PBCRL2", 0xfffe3894, 16, 4) { -		PB7MD_00, PB7MD_01, PB7MD_10, PB7MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB6MD_00, PB6MD_01, PB6MD_10, PB6MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB5MD_00, PB5MD_01, PB5MD_10, PB5MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB4MD_00, PB4MD_01, PB4MD_10, PB4MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PBCRL1", 0xfffe3896, 16, 4) { -		PB3MD_00, PB3MD_01, PB3MD_10, PB3MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB2MD_00, PB2MD_01, PB2MD_10, PB2MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB1MD_00, PB1MD_01, PB1MD_10, PB1MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB0MD_00, PB0MD_01, PB0MD_10, PB0MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("IFCR", 0xfffe38a2, 16, 4) { -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PB12IRQ_00, PB12IRQ_01, PB12IRQ_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PCIORL", 0xfffe3906, 16, 1) { -		0, 0, -		PC14_IN, PC14_OUT, -		PC13_IN, PC13_OUT, -		PC12_IN, PC12_OUT, -		PC11_IN, PC11_OUT, -		PC10_IN, PC10_OUT, -		PC9_IN, PC9_OUT, -		PC8_IN, PC8_OUT, -		PC7_IN, PC7_OUT, -		PC6_IN, PC6_OUT, -		PC5_IN, PC5_OUT, -		PC4_IN, PC4_OUT, -		PC3_IN, PC3_OUT, -		PC2_IN, PC2_OUT, -		PC1_IN, PC1_OUT, -		PC0_IN, PC0_OUT } -	}, -	{ PINMUX_CFG_REG("PCCRL4", 0xfffe3910, 16, 4) { -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC14MD_0, PC14MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC13MD_0, PC13MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC12MD_0, PC12MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PCCRL3", 0xfffe3912, 16, 4) { -		PC11MD_00, PC11MD_01, PC11MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC10MD_00, PC10MD_01, PC10MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC9MD_0, PC9MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC8MD_0, PC8MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PCCRL2", 0xfffe3914, 16, 4) { -		PC7MD_0, PC7MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC6MD_0, PC6MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC5MD_0, PC5MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC4MD_0, PC4MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PCCRL1", 0xfffe3916, 16, 4) { -		PC3MD_0, PC3MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC2MD_0, PC2MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC1MD_0, PC1MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PC0MD_00, PC0MD_01, PC0MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PDIORL", 0xfffe3986, 16, 1) { -		PD15_IN, PD15_OUT, -		PD14_IN, PD14_OUT, -		PD13_IN, PD13_OUT, -		PD12_IN, PD12_OUT, -		PD11_IN, PD11_OUT, -		PD10_IN, PD10_OUT, -		PD9_IN, PD9_OUT, -		PD8_IN, PD8_OUT, -		PD7_IN, PD7_OUT, -		PD6_IN, PD6_OUT, -		PD5_IN, PD5_OUT, -		PD4_IN, PD4_OUT, -		PD3_IN, PD3_OUT, -		PD2_IN, PD2_OUT, -		PD1_IN, PD1_OUT, -		PD0_IN, PD0_OUT } -	}, -	{ PINMUX_CFG_REG("PDCRL4", 0xfffe3990, 16, 4) { -		PD15MD_000, PD15MD_001, PD15MD_010, 0, -		PD15MD_100, PD15MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD14MD_000, PD14MD_001, PD14MD_010, 0, -		0, PD14MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD13MD_000, PD13MD_001, PD13MD_010, 0, -		PD13MD_100, PD13MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD12MD_000, PD12MD_001, PD12MD_010, 0, -		PD12MD_100, PD12MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0 } +static struct resource sh7203_pfc_resources[] = { +	[0] = { +		.start	= 0xfffe3800, +		.end	= 0xfffe3a9f, +		.flags	= IORESOURCE_MEM,  	}, -	{ PINMUX_CFG_REG("PDCRL3", 0xfffe3992, 16, 4) { -		PD11MD_000, PD11MD_001, PD11MD_010, 0, -		PD11MD_100, PD11MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD10MD_000, PD10MD_001, PD10MD_010, 0, -		PD10MD_100, PD10MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD9MD_000, PD9MD_001, PD9MD_010, 0, -		PD9MD_100, PD9MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD8MD_000, PD8MD_001, PD8MD_010, 0, -		PD8MD_100, PD8MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PDCRL2", 0xfffe3994, 16, 4) { -		PD7MD_000, PD7MD_001, PD7MD_010, PD7MD_011, -		PD7MD_100, PD7MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD6MD_000, PD6MD_001, PD6MD_010, PD6MD_011, -		PD6MD_100, PD6MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD5MD_000, PD5MD_001, PD5MD_010, PD5MD_011, -		PD5MD_100, PD5MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD4MD_000, PD4MD_001, PD4MD_010, PD4MD_011, -		PD4MD_100, PD4MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PDCRL1", 0xfffe3996, 16, 4) { -		PD3MD_000, PD3MD_001, PD3MD_010, PD3MD_011, -		PD3MD_100, PD3MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD2MD_000, PD2MD_001, PD2MD_010, PD2MD_011, -		PD2MD_100, PD2MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD1MD_000, PD1MD_001, PD1MD_010, PD1MD_011, -		PD1MD_100, PD1MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PD0MD_000, PD0MD_001, PD0MD_010, PD0MD_011, -		PD0MD_100, PD0MD_101, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PEIORL", 0xfffe3a06, 16, 1) { -		PE15_IN, PE15_OUT, -		PE14_IN, PE14_OUT, -		PE13_IN, PE13_OUT, -		PE12_IN, PE12_OUT, -		PE11_IN, PE11_OUT, -		PE10_IN, PE10_OUT, -		PE9_IN, PE9_OUT, -		PE8_IN, PE8_OUT, -		PE7_IN, PE7_OUT, -		PE6_IN, PE6_OUT, -		PE5_IN, PE5_OUT, -		PE4_IN, PE4_OUT, -		PE3_IN, PE3_OUT, -		PE2_IN, PE2_OUT, -		PE1_IN, PE1_OUT, -		PE0_IN, PE0_OUT } -	}, -	{ PINMUX_CFG_REG("PECRL4", 0xfffe3a10, 16, 4) { -		PE15MD_00, PE15MD_01, 0, PE15MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PE14MD_00, PE14MD_01, 0, PE14MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PE13MD_00, 0, 0, PE13MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PE12MD_00, 0, 0, PE12MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PECRL3", 0xfffe3a12, 16, 4) { -		PE11MD_000, PE11MD_001, PE11MD_010, 0, -		PE11MD_100, 0, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PE10MD_000, PE10MD_001, PE10MD_010, 0, -		PE10MD_100, 0, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PE9MD_00, PE9MD_01, PE9MD_10, PE9MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PE8MD_00, PE8MD_01, PE8MD_10, PE8MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PECRL2", 0xfffe3a14, 16, 4) { -		PE7MD_000, PE7MD_001, PE7MD_010, PE7MD_011, -		PE7MD_100, 0, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PE6MD_000, PE6MD_001, PE6MD_010, PE6MD_011, -		PE6MD_100, 0, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PE5MD_000, PE5MD_001, PE5MD_010, PE5MD_011, -		PE5MD_100, 0, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0, - -		PE4MD_000, PE4MD_001, PE4MD_010, PE4MD_011, -		PE4MD_100, 0, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PECRL1", 0xfffe3a16, 16, 4) { -		PE3MD_00, PE3MD_01, 0, PE3MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PE2MD_00, PE2MD_01, 0, PE2MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PE1MD_00, PE1MD_01, PE1MD_10, PE1MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PE0MD_000, PE0MD_001, 0, PE0MD_011, -		PE0MD_100, 0, 0, 0, -		0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PFIORH", 0xfffe3a84, 16, 1) { -		0, 0, -		PF30_IN, PF30_OUT, -		PF29_IN, PF29_OUT, -		PF28_IN, PF28_OUT, -		PF27_IN, PF27_OUT, -		PF26_IN, PF26_OUT, -		PF25_IN, PF25_OUT, -		PF24_IN, PF24_OUT, -		PF23_IN, PF23_OUT, -		PF22_IN, PF22_OUT, -		PF21_IN, PF21_OUT, -		PF20_IN, PF20_OUT, -		PF19_IN, PF19_OUT, -		PF18_IN, PF18_OUT, -		PF17_IN, PF17_OUT, -		PF16_IN, PF16_OUT } -	}, -	{ PINMUX_CFG_REG("PFIORL", 0xfffe3a86, 16, 1) { -		PF15_IN, PF15_OUT, -		PF14_IN, PF14_OUT, -		PF13_IN, PF13_OUT, -		PF12_IN, PF12_OUT, -		PF11_IN, PF11_OUT, -		PF10_IN, PF10_OUT, -		PF9_IN, PF9_OUT, -		PF8_IN, PF8_OUT, -		PF7_IN, PF7_OUT, -		PF6_IN, PF6_OUT, -		PF5_IN, PF5_OUT, -		PF4_IN, PF4_OUT, -		PF3_IN, PF3_OUT, -		PF2_IN, PF2_OUT, -		PF1_IN, PF1_OUT, -		PF0_IN, PF0_OUT } -	}, -	{ PINMUX_CFG_REG("PFCRH4", 0xfffe3a88, 16, 4) { -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF30MD_0, PF30MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF29MD_0, PF29MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF28MD_0, PF28MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PFCRH3", 0xfffe3a8a, 16, 4) { -		PF27MD_0, PF27MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF26MD_0, PF26MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF25MD_0, PF25MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF24MD_0, PF24MD_1, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PFCRH2", 0xfffe3a8c, 16, 4) { -		PF23MD_00, PF23MD_01, PF23MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF22MD_00, PF22MD_01, PF22MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF21MD_00, PF21MD_01, PF21MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF20MD_00, PF20MD_01, PF20MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PFCRH1", 0xfffe3a8e, 16, 4) { -		PF19MD_00, PF19MD_01, PF19MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF18MD_00, PF18MD_01, PF18MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF17MD_00, PF17MD_01, PF17MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF16MD_00, PF16MD_01, PF16MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PFCRL4", 0xfffe3a90, 16, 4) { -		PF15MD_00, PF15MD_01, PF15MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF14MD_00, PF14MD_01, PF14MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF13MD_00, PF13MD_01, PF13MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF12MD_00, PF12MD_01, PF12MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PFCRL3", 0xfffe3a92, 16, 4) { -		PF11MD_00, PF11MD_01, PF11MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF10MD_00, PF10MD_01, PF10MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF9MD_00, PF9MD_01, PF9MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF8MD_00, PF8MD_01, PF8MD_10, 0, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PFCRL2", 0xfffe3a94, 16, 4) { -		PF7MD_00, PF7MD_01, PF7MD_10, PF7MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF6MD_00, PF6MD_01, PF6MD_10, PF6MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF5MD_00, PF5MD_01, PF5MD_10, PF5MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF4MD_00, PF4MD_01, PF4MD_10, PF4MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PFCRL1", 0xfffe3a96, 16, 4) { -		PF3MD_00, PF3MD_01, PF3MD_10, PF3MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF2MD_00, PF2MD_01, PF2MD_10, PF2MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF1MD_00, PF1MD_01, PF1MD_10, PF1MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -		PF0MD_00, PF0MD_01, PF0MD_10, PF0MD_11, -		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -	}, -	{} -}; - -static struct pinmux_data_reg pinmux_data_regs[] = { -	{ PINMUX_DATA_REG("PADRL", 0xfffe3802, 16) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		PA7_DATA, PA6_DATA, PA5_DATA, PA4_DATA, -		PA3_DATA, PA2_DATA, PA1_DATA, PA0_DATA } -	}, -	{ PINMUX_DATA_REG("PBDRL", 0xfffe3882, 16) { -		0, 0, 0, PB12_DATA, -		PB11_DATA, PB10_DATA, PB9_DATA, PB8_DATA, -		PB7_DATA, PB6_DATA, PB5_DATA, PB4_DATA, -		PB3_DATA, PB2_DATA, PB1_DATA, PB0_DATA } -	}, -	{ PINMUX_DATA_REG("PCDRL", 0xfffe3902, 16) { -		0, PC14_DATA, PC13_DATA, PC12_DATA, -		PC11_DATA, PC10_DATA, PC9_DATA, PC8_DATA, -		PC7_DATA, PC6_DATA, PC5_DATA, PC4_DATA, -		PC3_DATA, PC2_DATA, PC1_DATA, PC0_DATA } -	}, -	{ PINMUX_DATA_REG("PDDRL", 0xfffe3982, 16) { -		PD15_DATA, PD14_DATA, PD13_DATA, PD12_DATA, -		PD11_DATA, PD10_DATA, PD9_DATA, PD8_DATA, -		PD7_DATA, PD6_DATA, PD5_DATA, PD4_DATA, -		PD3_DATA, PD2_DATA, PD1_DATA, PD0_DATA } -	}, -	{ PINMUX_DATA_REG("PEDRL", 0xfffe3a02, 16) { -		PE15_DATA, PE14_DATA, PE13_DATA, PE12_DATA, -		PE11_DATA, PE10_DATA, PE9_DATA, PE8_DATA, -		PE7_DATA, PE6_DATA, PE5_DATA, PE4_DATA, -		PE3_DATA, PE2_DATA, PE1_DATA, PE0_DATA } -	}, -	{ PINMUX_DATA_REG("PFDRH", 0xfffe3a80, 16) { -		0, PF30_DATA, PF29_DATA, PF28_DATA, -		PF27_DATA, PF26_DATA, PF25_DATA, PF24_DATA, -		PF23_DATA, PF22_DATA, PF21_DATA, PF20_DATA, -		PF19_DATA, PF18_DATA, PF17_DATA, PF16_DATA } -	}, -	{ PINMUX_DATA_REG("PFDRL", 0xfffe3a82, 16) { -		PF15_DATA, PF14_DATA, PF13_DATA, PF12_DATA, -		PF11_DATA, PF10_DATA, PF9_DATA, PF8_DATA, -		PF7_DATA, PF6_DATA, PF5_DATA, PF4_DATA, -		PF3_DATA, PF2_DATA, PF1_DATA, PF0_DATA } -	}, -	{ }, -}; - -static struct pinmux_info sh7203_pinmux_info = { -	.name = "sh7203_pfc", -	.reserved_id = PINMUX_RESERVED, -	.data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, -	.input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END, FORCE_IN }, -	.output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END, FORCE_OUT }, -	.mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, -	.function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, - -	.first_gpio = GPIO_PA7, -	.last_gpio = GPIO_FN_LCD_DATA0, - -	.gpios = pinmux_gpios, -	.cfg_regs = pinmux_config_regs, -	.data_regs = pinmux_data_regs, - -	.gpio_data = pinmux_data, -	.gpio_data_size = ARRAY_SIZE(pinmux_data),  };  static int __init plat_pinmux_setup(void)  { -	return register_pinmux(&sh7203_pinmux_info); +	return sh_pfc_register("pfc-sh7203", sh7203_pfc_resources, +			       ARRAY_SIZE(sh7203_pfc_resources));  }  arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh2a/pinmux-sh7264.c b/arch/sh/kernel/cpu/sh2a/pinmux-sh7264.c new file mode 100644 index 00000000000..569decbd6d9 --- /dev/null +++ b/arch/sh/kernel/cpu/sh2a/pinmux-sh7264.c @@ -0,0 +1,30 @@ +/* + * SH7264 Pinmux + * + *  Copyright (C) 2012  Renesas Electronics Europe Ltd + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ + +#include <linux/bug.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> + +static struct resource sh7264_pfc_resources[] = { +	[0] = { +		.start	= 0xfffe3800, +		.end	= 0xfffe393f, +		.flags	= IORESOURCE_MEM, +	}, +}; + +static int __init plat_pinmux_setup(void) +{ +	return sh_pfc_register("pfc-sh7264", sh7264_pfc_resources, +			       ARRAY_SIZE(sh7264_pfc_resources)); +} +arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh2a/pinmux-sh7269.c b/arch/sh/kernel/cpu/sh2a/pinmux-sh7269.c new file mode 100644 index 00000000000..4c17fb6970b --- /dev/null +++ b/arch/sh/kernel/cpu/sh2a/pinmux-sh7269.c @@ -0,0 +1,31 @@ +/* + * SH7269 Pinmux + * + * Copyright (C) 2012  Renesas Electronics Europe Ltd + * Copyright (C) 2012  Phil Edworthy + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ + +#include <linux/bug.h> +#include <linux/init.h> +#include <linux/ioport.h> +#include <linux/kernel.h> +#include <cpu/pfc.h> + +static struct resource sh7269_pfc_resources[] = { +	[0] = { +		.start	= 0xfffe3800, +		.end	= 0xfffe391f, +		.flags	= IORESOURCE_MEM, +	}, +}; + +static int __init plat_pinmux_setup(void) +{ +	return sh_pfc_register("pfc-sh7269", sh7269_pfc_resources, +			       ARRAY_SIZE(sh7269_pfc_resources)); +} +arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh2a/probe.c b/arch/sh/kernel/cpu/sh2a/probe.c index 48e97a2a0c8..3f87971082f 100644 --- a/arch/sh/kernel/cpu/sh2a/probe.c +++ b/arch/sh/kernel/cpu/sh2a/probe.c @@ -13,7 +13,7 @@  #include <asm/processor.h>  #include <asm/cache.h> -void __cpuinit cpu_probe(void) +void cpu_probe(void)  {  	boot_cpu_data.family			= CPU_FAMILY_SH2A; @@ -29,6 +29,12 @@ void __cpuinit cpu_probe(void)  #elif defined(CONFIG_CPU_SUBTYPE_SH7263)  	boot_cpu_data.type			= CPU_SH7263;  	boot_cpu_data.flags			|= CPU_HAS_FPU; +#elif defined(CONFIG_CPU_SUBTYPE_SH7264) +	boot_cpu_data.type			= CPU_SH7264; +	boot_cpu_data.flags			|= CPU_HAS_FPU; +#elif defined(CONFIG_CPU_SUBTYPE_SH7269) +	boot_cpu_data.type			= CPU_SH7269; +	boot_cpu_data.flags			|= CPU_HAS_FPU;  #elif defined(CONFIG_CPU_SUBTYPE_SH7206)  	boot_cpu_data.type			= CPU_SH7206;  	boot_cpu_data.flags			|= CPU_HAS_DSP; diff --git a/arch/sh/kernel/cpu/sh2a/setup-mxg.c b/arch/sh/kernel/cpu/sh2a/setup-mxg.c index 6c96ea02bf8..26fcdbd4127 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-mxg.c +++ b/arch/sh/kernel/cpu/sh2a/setup-mxg.c @@ -114,100 +114,36 @@ static struct intc_mask_reg mask_registers[] __initdata = {  static DECLARE_INTC_DESC(intc_desc, "mxg", vectors, groups,  			 mask_registers, prio_registers, NULL); -static struct sh_timer_config mtu2_0_platform_data = { -	.channel_offset = -0x80, -	.timer_bit = 0, -	.clockevent_rating = 200, +static struct resource mtu2_resources[] = { +	DEFINE_RES_MEM(0xff801000, 0x400), +	DEFINE_RES_IRQ_NAMED(228, "tgi0a"), +	DEFINE_RES_IRQ_NAMED(234, "tgi1a"), +	DEFINE_RES_IRQ_NAMED(240, "tgi2a"),  }; -static struct resource mtu2_0_resources[] = { -	[0] = { -		.start	= 0xff801300, -		.end	= 0xff801326, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 228, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device mtu2_0_device = { -	.name		= "sh_mtu2", -	.id		= 0, -	.dev = { -		.platform_data	= &mtu2_0_platform_data, -	}, -	.resource	= mtu2_0_resources, -	.num_resources	= ARRAY_SIZE(mtu2_0_resources), -}; - -static struct sh_timer_config mtu2_1_platform_data = { -	.channel_offset = -0x100, -	.timer_bit = 1, -	.clockevent_rating = 200, -}; - -static struct resource mtu2_1_resources[] = { -	[0] = { -		.start	= 0xff801380, -		.end	= 0xff801390, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 234, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device mtu2_1_device = { -	.name		= "sh_mtu2", -	.id		= 1, -	.dev = { -		.platform_data	= &mtu2_1_platform_data, -	}, -	.resource	= mtu2_1_resources, -	.num_resources	= ARRAY_SIZE(mtu2_1_resources), -}; - -static struct sh_timer_config mtu2_2_platform_data = { -	.channel_offset = 0x80, -	.timer_bit = 2, -	.clockevent_rating = 200, -}; - -static struct resource mtu2_2_resources[] = { -	[0] = { -		.start	= 0xff801000, -		.end	= 0xff80100a, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 240, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device mtu2_2_device = { -	.name		= "sh_mtu2", -	.id		= 2, -	.dev = { -		.platform_data	= &mtu2_2_platform_data, -	}, -	.resource	= mtu2_2_resources, -	.num_resources	= ARRAY_SIZE(mtu2_2_resources), +static struct platform_device mtu2_device = { +	.name		= "sh-mtu2", +	.id		= -1, +	.resource	= mtu2_resources, +	.num_resources	= ARRAY_SIZE(mtu2_resources),  };  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xff804000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 220, 220, 220, 220 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xff804000, 0x100), +	DEFINE_RES_IRQ(220),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	}, @@ -215,9 +151,7 @@ static struct platform_device scif0_device = {  static struct platform_device *mxg_devices[] __initdata = {  	&scif0_device, -	&mtu2_0_device, -	&mtu2_1_device, -	&mtu2_2_device, +	&mtu2_device,  };  static int __init mxg_devices_setup(void) @@ -234,9 +168,7 @@ void __init plat_irq_setup(void)  static struct platform_device *mxg_early_devices[] __initdata = {  	&scif0_device, -	&mtu2_0_device, -	&mtu2_1_device, -	&mtu2_2_device, +	&mtu2_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7201.c b/arch/sh/kernel/cpu/sh2a/setup-sh7201.c index d08bf4c07d6..abc0ce9fb80 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-sh7201.c +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7201.c @@ -178,120 +178,168 @@ static DECLARE_INTC_DESC(intc_desc, "sh7201", vectors, groups,  			 mask_registers, prio_registers, NULL);  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xfffe8000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 180, 180, 180, 180 } +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xfffe8000, 0x100), +	DEFINE_RES_IRQ(180),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xfffe8800,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 184, 184, 184, 184 } +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xfffe8800, 0x100), +	DEFINE_RES_IRQ(184),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xfffe9000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 188, 188, 188, 188 } +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xfffe9000, 0x100), +	DEFINE_RES_IRQ(188),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase	= 0xfffe9800,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 192, 192, 192, 192 } +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xfffe9800, 0x100), +	DEFINE_RES_IRQ(192),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  };  static struct plat_sci_port scif4_platform_data = { -	.mapbase	= 0xfffea000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 196, 196, 196, 196 } +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xfffea000, 0x100), +	DEFINE_RES_IRQ(196),  };  static struct platform_device scif4_device = {  	.name		= "sh-sci",  	.id		= 4, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources),  	.dev		= {  		.platform_data	= &scif4_platform_data,  	},  };  static struct plat_sci_port scif5_platform_data = { -	.mapbase	= 0xfffea800,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 200, 200, 200, 200 } +}; + +static struct resource scif5_resources[] = { +	DEFINE_RES_MEM(0xfffea800, 0x100), +	DEFINE_RES_IRQ(200),  };  static struct platform_device scif5_device = {  	.name		= "sh-sci",  	.id		= 5, +	.resource	= scif5_resources, +	.num_resources	= ARRAY_SIZE(scif5_resources),  	.dev		= {  		.platform_data	= &scif5_platform_data,  	},  };  static struct plat_sci_port scif6_platform_data = { -	.mapbase	= 0xfffeb000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 204, 204, 204, 204 } +}; + +static struct resource scif6_resources[] = { +	DEFINE_RES_MEM(0xfffeb000, 0x100), +	DEFINE_RES_IRQ(204),  };  static struct platform_device scif6_device = {  	.name		= "sh-sci",  	.id		= 6, +	.resource	= scif6_resources, +	.num_resources	= ARRAY_SIZE(scif6_resources),  	.dev		= {  		.platform_data	= &scif6_platform_data,  	},  };  static struct plat_sci_port scif7_platform_data = { -	.mapbase	= 0xfffeb800,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 208, 208, 208, 208 } +}; + +static struct resource scif7_resources[] = { +	DEFINE_RES_MEM(0xfffeb800, 0x100), +	DEFINE_RES_IRQ(208),  };  static struct platform_device scif7_device = {  	.name		= "sh-sci",  	.id		= 7, +	.resource	= scif7_resources, +	.num_resources	= ARRAY_SIZE(scif7_resources),  	.dev		= {  		.platform_data	= &scif7_platform_data,  	}, @@ -317,88 +365,18 @@ static struct platform_device rtc_device = {  	.resource	= rtc_resources,  }; -static struct sh_timer_config mtu2_0_platform_data = { -	.channel_offset = -0x80, -	.timer_bit = 0, -	.clockevent_rating = 200, -}; - -static struct resource mtu2_0_resources[] = { -	[0] = { -		.start	= 0xfffe4300, -		.end	= 0xfffe4326, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 108, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device mtu2_0_device = { -	.name		= "sh_mtu2", -	.id		= 0, -	.dev = { -		.platform_data	= &mtu2_0_platform_data, -	}, -	.resource	= mtu2_0_resources, -	.num_resources	= ARRAY_SIZE(mtu2_0_resources), -}; - -static struct sh_timer_config mtu2_1_platform_data = { -	.channel_offset = -0x100, -	.timer_bit = 1, -	.clockevent_rating = 200, -}; - -static struct resource mtu2_1_resources[] = { -	[0] = { -		.start	= 0xfffe4380, -		.end	= 0xfffe4390, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 116, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device mtu2_1_device = { -	.name		= "sh_mtu2", -	.id		= 1, -	.dev = { -		.platform_data	= &mtu2_1_platform_data, -	}, -	.resource	= mtu2_1_resources, -	.num_resources	= ARRAY_SIZE(mtu2_1_resources), -}; - -static struct sh_timer_config mtu2_2_platform_data = { -	.channel_offset = 0x80, -	.timer_bit = 2, -	.clockevent_rating = 200, +static struct resource mtu2_resources[] = { +	DEFINE_RES_MEM(0xfffe4000, 0x400), +	DEFINE_RES_IRQ_NAMED(108, "tgi0a"), +	DEFINE_RES_IRQ_NAMED(116, "tgi1a"), +	DEFINE_RES_IRQ_NAMED(124, "tgi1b"),  }; -static struct resource mtu2_2_resources[] = { -	[0] = { -		.start	= 0xfffe4000, -		.end	= 0xfffe400a, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 124, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device mtu2_2_device = { -	.name		= "sh_mtu2", -	.id		= 2, -	.dev = { -		.platform_data	= &mtu2_2_platform_data, -	}, -	.resource	= mtu2_2_resources, -	.num_resources	= ARRAY_SIZE(mtu2_2_resources), +static struct platform_device mtu2_device = { +	.name		= "sh-mtu2", +	.id		= -1, +	.resource	= mtu2_resources, +	.num_resources	= ARRAY_SIZE(mtu2_resources),  };  static struct platform_device *sh7201_devices[] __initdata = { @@ -411,9 +389,7 @@ static struct platform_device *sh7201_devices[] __initdata = {  	&scif6_device,  	&scif7_device,  	&rtc_device, -	&mtu2_0_device, -	&mtu2_1_device, -	&mtu2_2_device, +	&mtu2_device,  };  static int __init sh7201_devices_setup(void) @@ -437,9 +413,7 @@ static struct platform_device *sh7201_early_devices[] __initdata = {  	&scif5_device,  	&scif6_device,  	&scif7_device, -	&mtu2_0_device, -	&mtu2_1_device, -	&mtu2_2_device, +	&mtu2_device,  };  #define STBCR3 0xfffe0408 diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7203.c b/arch/sh/kernel/cpu/sh2a/setup-sh7203.c index 832f401b586..3b4894cba92 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-sh7203.c +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7203.c @@ -174,177 +174,128 @@ static DECLARE_INTC_DESC(intc_desc, "sh7203", vectors, groups,  			 mask_registers, prio_registers, NULL);  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xfffe8000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		=  { 192, 192, 192, 192 }, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xfffe8000, 0x100), +	DEFINE_RES_IRQ(192),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xfffe8800,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		=  { 196, 196, 196, 196 }, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xfffe8800, 0x100), +	DEFINE_RES_IRQ(196),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xfffe9000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		=  { 200, 200, 200, 200 }, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xfffe9000, 0x100), +	DEFINE_RES_IRQ(200),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase	= 0xfffe9800,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		=  { 204, 204, 204, 204 }, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xfffe9800, 0x100), +	DEFINE_RES_IRQ(204),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  }; -static struct sh_timer_config cmt0_platform_data = { -	.channel_offset = 0x02, -	.timer_bit = 0, -	.clockevent_rating = 125, -	.clocksource_rating = 0, /* disabled due to code generation issues */ -}; - -static struct resource cmt0_resources[] = { -	[0] = { -		.start	= 0xfffec002, -		.end	= 0xfffec007, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 142, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cmt0_device = { -	.name		= "sh_cmt", -	.id		= 0, -	.dev = { -		.platform_data	= &cmt0_platform_data, -	}, -	.resource	= cmt0_resources, -	.num_resources	= ARRAY_SIZE(cmt0_resources), -}; - -static struct sh_timer_config cmt1_platform_data = { -	.channel_offset = 0x08, -	.timer_bit = 1, -	.clockevent_rating = 125, -	.clocksource_rating = 0, /* disabled due to code generation issues */ -}; - -static struct resource cmt1_resources[] = { -	[0] = { -		.start	= 0xfffec008, -		.end	= 0xfffec00d, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 143, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cmt1_device = { -	.name		= "sh_cmt", -	.id		= 1, -	.dev = { -		.platform_data	= &cmt1_platform_data, -	}, -	.resource	= cmt1_resources, -	.num_resources	= ARRAY_SIZE(cmt1_resources), -}; - -static struct sh_timer_config mtu2_0_platform_data = { -	.channel_offset = -0x80, -	.timer_bit = 0, -	.clockevent_rating = 200, +static struct sh_timer_config cmt_platform_data = { +	.channels_mask = 3,  }; -static struct resource mtu2_0_resources[] = { -	[0] = { -		.start	= 0xfffe4300, -		.end	= 0xfffe4326, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 146, -		.flags	= IORESOURCE_IRQ, -	}, +static struct resource cmt_resources[] = { +	DEFINE_RES_MEM(0xfffec000, 0x10), +	DEFINE_RES_IRQ(142), +	DEFINE_RES_IRQ(143),  }; -static struct platform_device mtu2_0_device = { -	.name		= "sh_mtu2", +static struct platform_device cmt_device = { +	.name		= "sh-cmt-16",  	.id		= 0,  	.dev = { -		.platform_data	= &mtu2_0_platform_data, +		.platform_data	= &cmt_platform_data,  	}, -	.resource	= mtu2_0_resources, -	.num_resources	= ARRAY_SIZE(mtu2_0_resources), +	.resource	= cmt_resources, +	.num_resources	= ARRAY_SIZE(cmt_resources),  }; -static struct sh_timer_config mtu2_1_platform_data = { -	.channel_offset = -0x100, -	.timer_bit = 1, -	.clockevent_rating = 200, +static struct resource mtu2_resources[] = { +	DEFINE_RES_MEM(0xfffe4000, 0x400), +	DEFINE_RES_IRQ_NAMED(146, "tgi0a"), +	DEFINE_RES_IRQ_NAMED(153, "tgi1a"),  }; -static struct resource mtu2_1_resources[] = { -	[0] = { -		.start	= 0xfffe4380, -		.end	= 0xfffe4390, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 153, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device mtu2_1_device = { -	.name		= "sh_mtu2", -	.id		= 1, -	.dev = { -		.platform_data	= &mtu2_1_platform_data, -	}, -	.resource	= mtu2_1_resources, -	.num_resources	= ARRAY_SIZE(mtu2_1_resources), +static struct platform_device mtu2_device = { +	.name		= "sh-mtu2", +	.id		= -1, +	.resource	= mtu2_resources, +	.num_resources	= ARRAY_SIZE(mtu2_resources),  };  static struct resource rtc_resources[] = { @@ -372,10 +323,8 @@ static struct platform_device *sh7203_devices[] __initdata = {  	&scif1_device,  	&scif2_device,  	&scif3_device, -	&cmt0_device, -	&cmt1_device, -	&mtu2_0_device, -	&mtu2_1_device, +	&cmt_device, +	&mtu2_device,  	&rtc_device,  }; @@ -396,10 +345,8 @@ static struct platform_device *sh7203_early_devices[] __initdata = {  	&scif1_device,  	&scif2_device,  	&scif3_device, -	&cmt0_device, -	&cmt1_device, -	&mtu2_0_device, -	&mtu2_1_device, +	&cmt_device, +	&mtu2_device,  };  #define STBCR3 0xfffe0408 diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7206.c b/arch/sh/kernel/cpu/sh2a/setup-sh7206.c index dc47b04e104..49bc5a34bec 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-sh7206.c +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7206.c @@ -134,205 +134,121 @@ static DECLARE_INTC_DESC(intc_desc, "sh7206", vectors, groups,  			 mask_registers, prio_registers, NULL);  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xfffe8000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 240, 240, 240, 240 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xfffe8000, 0x100), +	DEFINE_RES_IRQ(240),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xfffe8800,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 244, 244, 244, 244 }, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xfffe8800, 0x100), +	DEFINE_RES_IRQ(244),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xfffe9000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 248, 248, 248, 248 }, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xfffe9000, 0x100), +	DEFINE_RES_IRQ(248),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase	= 0xfffe9800,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 252, 252, 252, 252 }, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xfffe9800, 0x100), +	DEFINE_RES_IRQ(252),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  }; -static struct sh_timer_config cmt0_platform_data = { -	.channel_offset = 0x02, -	.timer_bit = 0, -	.clockevent_rating = 125, -	.clocksource_rating = 0, /* disabled due to code generation issues */ -}; - -static struct resource cmt0_resources[] = { -	[0] = { -		.start	= 0xfffec002, -		.end	= 0xfffec007, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 140, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cmt0_device = { -	.name		= "sh_cmt", -	.id		= 0, -	.dev = { -		.platform_data	= &cmt0_platform_data, -	}, -	.resource	= cmt0_resources, -	.num_resources	= ARRAY_SIZE(cmt0_resources), -}; - -static struct sh_timer_config cmt1_platform_data = { -	.channel_offset = 0x08, -	.timer_bit = 1, -	.clockevent_rating = 125, -	.clocksource_rating = 0, /* disabled due to code generation issues */ -}; - -static struct resource cmt1_resources[] = { -	[0] = { -		.start	= 0xfffec008, -		.end	= 0xfffec00d, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 144, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cmt1_device = { -	.name		= "sh_cmt", -	.id		= 1, -	.dev = { -		.platform_data	= &cmt1_platform_data, -	}, -	.resource	= cmt1_resources, -	.num_resources	= ARRAY_SIZE(cmt1_resources), +static struct sh_timer_config cmt_platform_data = { +	.channels_mask = 3,  }; -static struct sh_timer_config mtu2_0_platform_data = { -	.channel_offset = -0x80, -	.timer_bit = 0, -	.clockevent_rating = 200, -}; - -static struct resource mtu2_0_resources[] = { -	[0] = { -		.start	= 0xfffe4300, -		.end	= 0xfffe4326, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 156, -		.flags	= IORESOURCE_IRQ, -	}, +static struct resource cmt_resources[] = { +	DEFINE_RES_MEM(0xfffec000, 0x10), +	DEFINE_RES_IRQ(140), +	DEFINE_RES_IRQ(144),  }; -static struct platform_device mtu2_0_device = { -	.name		= "sh_mtu2", +static struct platform_device cmt_device = { +	.name		= "sh-cmt-16",  	.id		= 0,  	.dev = { -		.platform_data	= &mtu2_0_platform_data, +		.platform_data	= &cmt_platform_data,  	}, -	.resource	= mtu2_0_resources, -	.num_resources	= ARRAY_SIZE(mtu2_0_resources), +	.resource	= cmt_resources, +	.num_resources	= ARRAY_SIZE(cmt_resources),  }; -static struct sh_timer_config mtu2_1_platform_data = { -	.channel_offset = -0x100, -	.timer_bit = 1, -	.clockevent_rating = 200, +static struct resource mtu2_resources[] = { +	DEFINE_RES_MEM(0xfffe4000, 0x400), +	DEFINE_RES_IRQ_NAMED(156, "tgi0a"), +	DEFINE_RES_IRQ_NAMED(164, "tgi1a"), +	DEFINE_RES_IRQ_NAMED(180, "tgi2a"),  }; -static struct resource mtu2_1_resources[] = { -	[0] = { -		.start	= 0xfffe4380, -		.end	= 0xfffe4390, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 164, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device mtu2_1_device = { -	.name		= "sh_mtu2", -	.id		= 1, -	.dev = { -		.platform_data	= &mtu2_1_platform_data, -	}, -	.resource	= mtu2_1_resources, -	.num_resources	= ARRAY_SIZE(mtu2_1_resources), -}; - -static struct sh_timer_config mtu2_2_platform_data = { -	.channel_offset = 0x80, -	.timer_bit = 2, -	.clockevent_rating = 200, -}; - -static struct resource mtu2_2_resources[] = { -	[0] = { -		.start	= 0xfffe4000, -		.end	= 0xfffe400a, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 180, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device mtu2_2_device = { -	.name		= "sh_mtu2", -	.id		= 2, -	.dev = { -		.platform_data	= &mtu2_2_platform_data, -	}, -	.resource	= mtu2_2_resources, -	.num_resources	= ARRAY_SIZE(mtu2_2_resources), +static struct platform_device mtu2_device = { +	.name		= "sh-mtu2s", +	.id		= -1, +	.resource	= mtu2_resources, +	.num_resources	= ARRAY_SIZE(mtu2_resources),  };  static struct platform_device *sh7206_devices[] __initdata = { @@ -340,11 +256,8 @@ static struct platform_device *sh7206_devices[] __initdata = {  	&scif1_device,  	&scif2_device,  	&scif3_device, -	&cmt0_device, -	&cmt1_device, -	&mtu2_0_device, -	&mtu2_1_device, -	&mtu2_2_device, +	&cmt_device, +	&mtu2_device,  };  static int __init sh7206_devices_setup(void) @@ -364,11 +277,8 @@ static struct platform_device *sh7206_early_devices[] __initdata = {  	&scif1_device,  	&scif2_device,  	&scif3_device, -	&cmt0_device, -	&cmt1_device, -	&mtu2_0_device, -	&mtu2_1_device, -	&mtu2_2_device, +	&cmt_device, +	&mtu2_device,  };  #define STBCR3 0xfffe0408 diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7264.c b/arch/sh/kernel/cpu/sh2a/setup-sh7264.c new file mode 100644 index 00000000000..60814645556 --- /dev/null +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7264.c @@ -0,0 +1,570 @@ +/* + * SH7264 Setup + * + * Copyright (C) 2012  Renesas Electronics Europe Ltd + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/platform_device.h> +#include <linux/init.h> +#include <linux/serial.h> +#include <linux/serial_sci.h> +#include <linux/usb/r8a66597.h> +#include <linux/sh_timer.h> +#include <linux/io.h> + +enum { +	UNUSED = 0, + +	/* interrupt sources */ +	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, +	PINT0, PINT1, PINT2, PINT3, PINT4, PINT5, PINT6, PINT7, + +	DMAC0, DMAC1, DMAC2, DMAC3, DMAC4, DMAC5, DMAC6, DMAC7, +	DMAC8, DMAC9, DMAC10, DMAC11, DMAC12, DMAC13, DMAC14, DMAC15, +	USB, VDC3, CMT0, CMT1, BSC, WDT, +	MTU0_ABCD, MTU0_VEF, MTU1_AB, MTU1_VU, MTU2_AB, MTU2_VU, +	MTU3_ABCD, MTU3_TCI3V, MTU4_ABCD, MTU4_TCI4V, +	PWMT1, PWMT2, ADC_ADI, +	SSIF0, SSII1, SSII2, SSII3, +	RSPDIF, +	IIC30, IIC31, IIC32, IIC33, +	SCIF0_BRI, SCIF0_ERI, SCIF0_RXI, SCIF0_TXI, +	SCIF1_BRI, SCIF1_ERI, SCIF1_RXI, SCIF1_TXI, +	SCIF2_BRI, SCIF2_ERI, SCIF2_RXI, SCIF2_TXI, +	SCIF3_BRI, SCIF3_ERI, SCIF3_RXI, SCIF3_TXI, +	SCIF4_BRI, SCIF4_ERI, SCIF4_RXI, SCIF4_TXI, +	SCIF5_BRI, SCIF5_ERI, SCIF5_RXI, SCIF5_TXI, +	SCIF6_BRI, SCIF6_ERI, SCIF6_RXI, SCIF6_TXI, +	SCIF7_BRI, SCIF7_ERI, SCIF7_RXI, SCIF7_TXI, +	SIO_FIFO, RSPIC0, RSPIC1, +	RCAN0, RCAN1, IEBC, CD_ROMD, +	NFMC, SDHI, RTC, +	SRCC0, SRCC1, DCOMU, OFFI, IFEI, + +	/* interrupt groups */ +	PINT, SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, SCIF6, SCIF7, +}; + +static struct intc_vect vectors[] __initdata = { +	INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), +	INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), +	INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), +	INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), + +	INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), +	INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), +	INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), +	INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), + +	INTC_IRQ(DMAC0, 108), INTC_IRQ(DMAC0, 109), +	INTC_IRQ(DMAC1, 112), INTC_IRQ(DMAC1, 113), +	INTC_IRQ(DMAC2, 116), INTC_IRQ(DMAC2, 117), +	INTC_IRQ(DMAC3, 120), INTC_IRQ(DMAC3, 121), +	INTC_IRQ(DMAC4, 124), INTC_IRQ(DMAC4, 125), +	INTC_IRQ(DMAC5, 128), INTC_IRQ(DMAC5, 129), +	INTC_IRQ(DMAC6, 132), INTC_IRQ(DMAC6, 133), +	INTC_IRQ(DMAC7, 136), INTC_IRQ(DMAC7, 137), +	INTC_IRQ(DMAC8, 140), INTC_IRQ(DMAC8, 141), +	INTC_IRQ(DMAC9, 144), INTC_IRQ(DMAC9, 145), +	INTC_IRQ(DMAC10, 148), INTC_IRQ(DMAC10, 149), +	INTC_IRQ(DMAC11, 152), INTC_IRQ(DMAC11, 153), +	INTC_IRQ(DMAC12, 156), INTC_IRQ(DMAC12, 157), +	INTC_IRQ(DMAC13, 160), INTC_IRQ(DMAC13, 161), +	INTC_IRQ(DMAC14, 164), INTC_IRQ(DMAC14, 165), +	INTC_IRQ(DMAC15, 168), INTC_IRQ(DMAC15, 169), + +	INTC_IRQ(USB, 170), +	INTC_IRQ(VDC3, 171), INTC_IRQ(VDC3, 172), +	INTC_IRQ(VDC3, 173), INTC_IRQ(VDC3, 174), +	INTC_IRQ(CMT0, 175), INTC_IRQ(CMT1, 176), +	INTC_IRQ(BSC, 177), INTC_IRQ(WDT, 178), + +	INTC_IRQ(MTU0_ABCD, 179), INTC_IRQ(MTU0_ABCD, 180), +	INTC_IRQ(MTU0_ABCD, 181), INTC_IRQ(MTU0_ABCD, 182), +	INTC_IRQ(MTU0_VEF, 183), +	INTC_IRQ(MTU0_VEF, 184), INTC_IRQ(MTU0_VEF, 185), +	INTC_IRQ(MTU1_AB, 186), INTC_IRQ(MTU1_AB, 187), +	INTC_IRQ(MTU1_VU, 188), INTC_IRQ(MTU1_VU, 189), +	INTC_IRQ(MTU2_AB, 190), INTC_IRQ(MTU2_AB, 191), +	INTC_IRQ(MTU2_VU, 192), INTC_IRQ(MTU2_VU, 193), +	INTC_IRQ(MTU3_ABCD, 194), INTC_IRQ(MTU3_ABCD, 195), +	INTC_IRQ(MTU3_ABCD, 196), INTC_IRQ(MTU3_ABCD, 197), +	INTC_IRQ(MTU3_TCI3V, 198), +	INTC_IRQ(MTU4_ABCD, 199), INTC_IRQ(MTU4_ABCD, 200), +	INTC_IRQ(MTU4_ABCD, 201), INTC_IRQ(MTU4_ABCD, 202), +	INTC_IRQ(MTU4_TCI4V, 203), + +	INTC_IRQ(PWMT1, 204), INTC_IRQ(PWMT2, 205), + +	INTC_IRQ(ADC_ADI, 206), + +	INTC_IRQ(SSIF0, 207), INTC_IRQ(SSIF0, 208), +	INTC_IRQ(SSIF0, 209), +	INTC_IRQ(SSII1, 210), INTC_IRQ(SSII1, 211), +	INTC_IRQ(SSII2, 212), INTC_IRQ(SSII2, 213), +	INTC_IRQ(SSII3, 214), INTC_IRQ(SSII3, 215), + +	INTC_IRQ(RSPDIF, 216), + +	INTC_IRQ(IIC30, 217), INTC_IRQ(IIC30, 218), +	INTC_IRQ(IIC30, 219), INTC_IRQ(IIC30, 220), +	INTC_IRQ(IIC30, 221), +	INTC_IRQ(IIC31, 222), INTC_IRQ(IIC31, 223), +	INTC_IRQ(IIC31, 224), INTC_IRQ(IIC31, 225), +	INTC_IRQ(IIC31, 226), +	INTC_IRQ(IIC32, 227), INTC_IRQ(IIC32, 228), +	INTC_IRQ(IIC32, 229), INTC_IRQ(IIC32, 230), +	INTC_IRQ(IIC32, 231), + +	INTC_IRQ(SCIF0_BRI, 232), INTC_IRQ(SCIF0_ERI, 233), +	INTC_IRQ(SCIF0_RXI, 234), INTC_IRQ(SCIF0_TXI, 235), +	INTC_IRQ(SCIF1_BRI, 236), INTC_IRQ(SCIF1_ERI, 237), +	INTC_IRQ(SCIF1_RXI, 238), INTC_IRQ(SCIF1_TXI, 239), +	INTC_IRQ(SCIF2_BRI, 240), INTC_IRQ(SCIF2_ERI, 241), +	INTC_IRQ(SCIF2_RXI, 242), INTC_IRQ(SCIF2_TXI, 243), +	INTC_IRQ(SCIF3_BRI, 244), INTC_IRQ(SCIF3_ERI, 245), +	INTC_IRQ(SCIF3_RXI, 246), INTC_IRQ(SCIF3_TXI, 247), +	INTC_IRQ(SCIF4_BRI, 248), INTC_IRQ(SCIF4_ERI, 249), +	INTC_IRQ(SCIF4_RXI, 250), INTC_IRQ(SCIF4_TXI, 251), +	INTC_IRQ(SCIF5_BRI, 252), INTC_IRQ(SCIF5_ERI, 253), +	INTC_IRQ(SCIF5_RXI, 254), INTC_IRQ(SCIF5_TXI, 255), +	INTC_IRQ(SCIF6_BRI, 256), INTC_IRQ(SCIF6_ERI, 257), +	INTC_IRQ(SCIF6_RXI, 258), INTC_IRQ(SCIF6_TXI, 259), +	INTC_IRQ(SCIF7_BRI, 260), INTC_IRQ(SCIF7_ERI, 261), +	INTC_IRQ(SCIF7_RXI, 262), INTC_IRQ(SCIF7_TXI, 263), + +	INTC_IRQ(SIO_FIFO, 264), + +	INTC_IRQ(RSPIC0, 265), INTC_IRQ(RSPIC0, 266), +	INTC_IRQ(RSPIC0, 267), +	INTC_IRQ(RSPIC1, 268), INTC_IRQ(RSPIC1, 269), +	INTC_IRQ(RSPIC1, 270), + +	INTC_IRQ(RCAN0, 271), INTC_IRQ(RCAN0, 272), +	INTC_IRQ(RCAN0, 273), INTC_IRQ(RCAN0, 274), +	INTC_IRQ(RCAN0, 275), +	INTC_IRQ(RCAN1, 276), INTC_IRQ(RCAN1, 277), +	INTC_IRQ(RCAN1, 278), INTC_IRQ(RCAN1, 279), +	INTC_IRQ(RCAN1, 280), + +	INTC_IRQ(IEBC, 281), + +	INTC_IRQ(CD_ROMD, 282), INTC_IRQ(CD_ROMD, 283), +	INTC_IRQ(CD_ROMD, 284), INTC_IRQ(CD_ROMD, 285), +	INTC_IRQ(CD_ROMD, 286), INTC_IRQ(CD_ROMD, 287), + +	INTC_IRQ(NFMC, 288), INTC_IRQ(NFMC, 289), +	INTC_IRQ(NFMC, 290), INTC_IRQ(NFMC, 291), + +	INTC_IRQ(SDHI, 292), INTC_IRQ(SDHI, 293), +	INTC_IRQ(SDHI, 294), + +	INTC_IRQ(RTC, 296), INTC_IRQ(RTC, 297), +	INTC_IRQ(RTC, 298), + +	INTC_IRQ(SRCC0, 299), INTC_IRQ(SRCC0, 300), +	INTC_IRQ(SRCC0, 301), INTC_IRQ(SRCC0, 302), +	INTC_IRQ(SRCC0, 303), +	INTC_IRQ(SRCC1, 304), INTC_IRQ(SRCC1, 305), +	INTC_IRQ(SRCC1, 306), INTC_IRQ(SRCC1, 307), +	INTC_IRQ(SRCC1, 308), + +	INTC_IRQ(DCOMU, 310), INTC_IRQ(DCOMU, 311), +	INTC_IRQ(DCOMU, 312), +}; + +static struct intc_group groups[] __initdata = { +	INTC_GROUP(PINT, PINT0, PINT1, PINT2, PINT3, +		   PINT4, PINT5, PINT6, PINT7), +	INTC_GROUP(SCIF0, SCIF0_BRI, SCIF0_ERI, SCIF0_RXI, SCIF0_TXI), +	INTC_GROUP(SCIF1, SCIF1_BRI, SCIF1_ERI, SCIF1_RXI, SCIF1_TXI), +	INTC_GROUP(SCIF2, SCIF2_BRI, SCIF2_ERI, SCIF2_RXI, SCIF2_TXI), +	INTC_GROUP(SCIF3, SCIF3_BRI, SCIF3_ERI, SCIF3_RXI, SCIF3_TXI), +	INTC_GROUP(SCIF4, SCIF4_BRI, SCIF4_ERI, SCIF4_RXI, SCIF4_TXI), +	INTC_GROUP(SCIF5, SCIF5_BRI, SCIF5_ERI, SCIF5_RXI, SCIF5_TXI), +	INTC_GROUP(SCIF6, SCIF6_BRI, SCIF6_ERI, SCIF6_RXI, SCIF6_TXI), +	INTC_GROUP(SCIF7, SCIF7_BRI, SCIF7_ERI, SCIF7_RXI, SCIF7_TXI), +}; + +static struct intc_prio_reg prio_registers[] __initdata = { +	{ 0xfffe0818, 0, 16, 4, /* IPR01 */ { IRQ0, IRQ1, IRQ2, IRQ3 } }, +	{ 0xfffe081a, 0, 16, 4, /* IPR02 */ { IRQ4, IRQ5, IRQ6, IRQ7 } }, +	{ 0xfffe0820, 0, 16, 4, /* IPR05 */ { PINT, 0, 0, 0 } }, +	{ 0xfffe0c00, 0, 16, 4, /* IPR06 */ { DMAC0,  DMAC1,  DMAC2,  DMAC3 } }, +	{ 0xfffe0c02, 0, 16, 4, /* IPR07 */ { DMAC4,  DMAC5,  DMAC6,  DMAC7 } }, +	{ 0xfffe0c04, 0, 16, 4, /* IPR08 */ { DMAC8,  DMAC9, +					      DMAC10, DMAC11 } }, +	{ 0xfffe0c06, 0, 16, 4, /* IPR09 */ { DMAC12, DMAC13, +					      DMAC14, DMAC15 } }, +	{ 0xfffe0c08, 0, 16, 4, /* IPR10 */ { USB, VDC3, CMT0, CMT1 } }, +	{ 0xfffe0c0a, 0, 16, 4, /* IPR11 */ { BSC, WDT, MTU0_ABCD, MTU0_VEF } }, +	{ 0xfffe0c0c, 0, 16, 4, /* IPR12 */ { MTU1_AB, MTU1_VU, +					      MTU2_AB, MTU2_VU } }, +	{ 0xfffe0c0e, 0, 16, 4, /* IPR13 */ { MTU3_ABCD, MTU3_TCI3V, +					      MTU4_ABCD, MTU4_TCI4V } }, +	{ 0xfffe0c10, 0, 16, 4, /* IPR14 */ { PWMT1, PWMT2, ADC_ADI, 0 } }, +	{ 0xfffe0c12, 0, 16, 4, /* IPR15 */ { SSIF0, SSII1, SSII2, SSII3 } }, +	{ 0xfffe0c14, 0, 16, 4, /* IPR16 */ { RSPDIF, IIC30, IIC31, IIC32 } }, +	{ 0xfffe0c16, 0, 16, 4, /* IPR17 */ { SCIF0, SCIF1, SCIF2, SCIF3 } }, +	{ 0xfffe0c18, 0, 16, 4, /* IPR18 */ { SCIF4, SCIF5, SCIF6, SCIF7 } }, +	{ 0xfffe0c1a, 0, 16, 4, /* IPR19 */ { SIO_FIFO, 0, RSPIC0, RSPIC1, } }, +	{ 0xfffe0c1c, 0, 16, 4, /* IPR20 */ { RCAN0, RCAN1, IEBC, CD_ROMD } }, +	{ 0xfffe0c1e, 0, 16, 4, /* IPR21 */ { NFMC, SDHI, RTC, 0 } }, +	{ 0xfffe0c20, 0, 16, 4, /* IPR22 */ { SRCC0, SRCC1, 0, DCOMU } }, +}; + +static struct intc_mask_reg mask_registers[] __initdata = { +	{ 0xfffe0808, 0, 16, /* PINTER */ +	  { 0, 0, 0, 0, 0, 0, 0, 0, +	    PINT7, PINT6, PINT5, PINT4, PINT3, PINT2, PINT1, PINT0 } }, +}; + +static DECLARE_INTC_DESC(intc_desc, "sh7264", vectors, groups, +			 mask_registers, prio_registers, NULL); + +static struct plat_sci_port scif0_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xfffe8000, 0x100), +	DEFINE_RES_IRQ(233), +	DEFINE_RES_IRQ(234), +	DEFINE_RES_IRQ(235), +	DEFINE_RES_IRQ(232), +}; + +static struct platform_device scif0_device = { +	.name		= "sh-sci", +	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources), +	.dev		= { +		.platform_data	= &scif0_platform_data, +	}, +}; + +static struct plat_sci_port scif1_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xfffe8800, 0x100), +	DEFINE_RES_IRQ(237), +	DEFINE_RES_IRQ(238), +	DEFINE_RES_IRQ(239), +	DEFINE_RES_IRQ(236), +}; + +static struct platform_device scif1_device = { +	.name		= "sh-sci", +	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources), +	.dev		= { +		.platform_data	= &scif1_platform_data, +	}, +}; + +static struct plat_sci_port scif2_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xfffe9000, 0x100), +	DEFINE_RES_IRQ(241), +	DEFINE_RES_IRQ(242), +	DEFINE_RES_IRQ(243), +	DEFINE_RES_IRQ(240), +}; + +static struct platform_device scif2_device = { +	.name		= "sh-sci", +	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources), +	.dev		= { +		.platform_data	= &scif2_platform_data, +	}, +}; + +static struct plat_sci_port scif3_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xfffe9800, 0x100), +	DEFINE_RES_IRQ(245), +	DEFINE_RES_IRQ(246), +	DEFINE_RES_IRQ(247), +	DEFINE_RES_IRQ(244), +}; + +static struct platform_device scif3_device = { +	.name		= "sh-sci", +	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources), +	.dev		= { +		.platform_data	= &scif3_platform_data, +	}, +}; + +static struct plat_sci_port scif4_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xfffea000, 0x100), +	DEFINE_RES_IRQ(249), +	DEFINE_RES_IRQ(250), +	DEFINE_RES_IRQ(251), +	DEFINE_RES_IRQ(248), +}; + +static struct platform_device scif4_device = { +	.name		= "sh-sci", +	.id		= 4, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources), +	.dev		= { +		.platform_data	= &scif4_platform_data, +	}, +}; + +static struct plat_sci_port scif5_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif5_resources[] = { +	DEFINE_RES_MEM(0xfffea800, 0x100), +	DEFINE_RES_IRQ(253), +	DEFINE_RES_IRQ(254), +	DEFINE_RES_IRQ(255), +	DEFINE_RES_IRQ(252), +}; + +static struct platform_device scif5_device = { +	.name		= "sh-sci", +	.id		= 5, +	.resource	= scif5_resources, +	.num_resources	= ARRAY_SIZE(scif5_resources), +	.dev		= { +		.platform_data	= &scif5_platform_data, +	}, +}; + +static struct plat_sci_port scif6_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif6_resources[] = { +	DEFINE_RES_MEM(0xfffeb000, 0x100), +	DEFINE_RES_IRQ(257), +	DEFINE_RES_IRQ(258), +	DEFINE_RES_IRQ(259), +	DEFINE_RES_IRQ(256), +}; + +static struct platform_device scif6_device = { +	.name		= "sh-sci", +	.id		= 6, +	.resource	= scif6_resources, +	.num_resources	= ARRAY_SIZE(scif6_resources), +	.dev		= { +		.platform_data	= &scif6_platform_data, +	}, +}; + +static struct plat_sci_port scif7_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif7_resources[] = { +	DEFINE_RES_MEM(0xfffeb800, 0x100), +	DEFINE_RES_IRQ(261), +	DEFINE_RES_IRQ(262), +	DEFINE_RES_IRQ(263), +	DEFINE_RES_IRQ(260), +}; + +static struct platform_device scif7_device = { +	.name		= "sh-sci", +	.id		= 7, +	.resource	= scif7_resources, +	.num_resources	= ARRAY_SIZE(scif7_resources), +	.dev		= { +		.platform_data	= &scif7_platform_data, +	}, +}; + +static struct sh_timer_config cmt_platform_data = { +	.channels_mask = 3, +}; + +static struct resource cmt_resources[] = { +	DEFINE_RES_MEM(0xfffec000, 0x10), +	DEFINE_RES_IRQ(175), +	DEFINE_RES_IRQ(176), +}; + +static struct platform_device cmt_device = { +	.name		= "sh-cmt-16", +	.id		= 0, +	.dev = { +		.platform_data	= &cmt_platform_data, +	}, +	.resource	= cmt_resources, +	.num_resources	= ARRAY_SIZE(cmt_resources), +}; + +static struct resource mtu2_resources[] = { +	DEFINE_RES_MEM(0xfffe4000, 0x400), +	DEFINE_RES_IRQ_NAMED(179, "tgi0a"), +	DEFINE_RES_IRQ_NAMED(186, "tgi1a"), +}; + +static struct platform_device mtu2_device = { +	.name		= "sh-mtu2", +	.id		= -1, +	.resource	= mtu2_resources, +	.num_resources	= ARRAY_SIZE(mtu2_resources), +}; + +static struct resource rtc_resources[] = { +	[0] = { +		.start	= 0xfffe6000, +		.end	= 0xfffe6000 + 0x30 - 1, +		.flags	= IORESOURCE_IO, +	}, +	[1] = { +		/* Shared Period/Carry/Alarm IRQ */ +		.start	= 296, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device rtc_device = { +	.name		= "sh-rtc", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(rtc_resources), +	.resource	= rtc_resources, +}; + +/* USB Host */ +static void usb_port_power(int port, int power) +{ +	__raw_writew(0x200 , 0xffffc0c2) ; /* Initialise UACS25 */ +} + +static struct r8a66597_platdata r8a66597_data = { +	.on_chip = 1, +	.endian = 1, +	.port_power = usb_port_power, +}; + +static struct resource r8a66597_usb_host_resources[] = { +	[0] = { +		.start	= 0xffffc000, +		.end	= 0xffffc0e4, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= 170, +		.end	= 170, +		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW, +	}, +}; + +static struct platform_device r8a66597_usb_host_device = { +	.name		= "r8a66597_hcd", +	.id		= 0, +	.dev = { +		.dma_mask		= NULL,         /*  not use dma */ +		.coherent_dma_mask	= 0xffffffff, +		.platform_data		= &r8a66597_data, +	}, +	.num_resources	= ARRAY_SIZE(r8a66597_usb_host_resources), +	.resource	= r8a66597_usb_host_resources, +}; + +static struct platform_device *sh7264_devices[] __initdata = { +	&scif0_device, +	&scif1_device, +	&scif2_device, +	&scif3_device, +	&scif4_device, +	&scif5_device, +	&scif6_device, +	&scif7_device, +	&cmt_device, +	&mtu2_device, +	&rtc_device, +	&r8a66597_usb_host_device, +}; + +static int __init sh7264_devices_setup(void) +{ +	return platform_add_devices(sh7264_devices, +				    ARRAY_SIZE(sh7264_devices)); +} +arch_initcall(sh7264_devices_setup); + +void __init plat_irq_setup(void) +{ +	register_intc_controller(&intc_desc); +} + +static struct platform_device *sh7264_early_devices[] __initdata = { +	&scif0_device, +	&scif1_device, +	&scif2_device, +	&scif3_device, +	&scif4_device, +	&scif5_device, +	&scif6_device, +	&scif7_device, +	&cmt_device, +	&mtu2_device, +}; + +void __init plat_early_device_setup(void) +{ +	early_platform_add_devices(sh7264_early_devices, +				   ARRAY_SIZE(sh7264_early_devices)); +} diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7269.c b/arch/sh/kernel/cpu/sh2a/setup-sh7269.c new file mode 100644 index 00000000000..16ce5aa77bd --- /dev/null +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7269.c @@ -0,0 +1,586 @@ +/* + * SH7269 Setup + * + * Copyright (C) 2012  Renesas Electronics Europe Ltd + * Copyright (C) 2012  Phil Edworthy + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/platform_device.h> +#include <linux/init.h> +#include <linux/serial.h> +#include <linux/serial_sci.h> +#include <linux/usb/r8a66597.h> +#include <linux/sh_timer.h> +#include <linux/io.h> + +enum { +	UNUSED = 0, + +	/* interrupt sources */ +	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, +	PINT0, PINT1, PINT2, PINT3, PINT4, PINT5, PINT6, PINT7, + +	DMAC0, DMAC1, DMAC2, DMAC3, DMAC4, DMAC5, DMAC6, DMAC7, +	DMAC8, DMAC9, DMAC10, DMAC11, DMAC12, DMAC13, DMAC14, DMAC15, +	USB, VDC4, CMT0, CMT1, BSC, WDT, +	MTU0_ABCD, MTU0_VEF, MTU1_AB, MTU1_VU, MTU2_AB, MTU2_VU, +	MTU3_ABCD, MTU3_TCI3V, MTU4_ABCD, MTU4_TCI4V, +	PWMT1, PWMT2, ADC_ADI, +	SSIF0, SSII1, SSII2, SSII3, SSII4, SSII5, +	RSPDIF, +	IIC30, IIC31, IIC32, IIC33, +	SCIF0_BRI, SCIF0_ERI, SCIF0_RXI, SCIF0_TXI, +	SCIF1_BRI, SCIF1_ERI, SCIF1_RXI, SCIF1_TXI, +	SCIF2_BRI, SCIF2_ERI, SCIF2_RXI, SCIF2_TXI, +	SCIF3_BRI, SCIF3_ERI, SCIF3_RXI, SCIF3_TXI, +	SCIF4_BRI, SCIF4_ERI, SCIF4_RXI, SCIF4_TXI, +	SCIF5_BRI, SCIF5_ERI, SCIF5_RXI, SCIF5_TXI, +	SCIF6_BRI, SCIF6_ERI, SCIF6_RXI, SCIF6_TXI, +	SCIF7_BRI, SCIF7_ERI, SCIF7_RXI, SCIF7_TXI, +	RCAN0, RCAN1, RCAN2, +	RSPIC0, RSPIC1, +	IEBC, CD_ROMD, +	NFMC, +	SDHI0, SDHI1, +	RTC, +	SRCC0, SRCC1, SRCC2, + +	/* interrupt groups */ +	PINT, SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, SCIF6, SCIF7, +}; + +static struct intc_vect vectors[] __initdata = { +	INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), +	INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), +	INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), +	INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), + +	INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), +	INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), +	INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), +	INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), + +	INTC_IRQ(DMAC0, 108), INTC_IRQ(DMAC0, 109), +	INTC_IRQ(DMAC1, 112), INTC_IRQ(DMAC1, 113), +	INTC_IRQ(DMAC2, 116), INTC_IRQ(DMAC2, 117), +	INTC_IRQ(DMAC3, 120), INTC_IRQ(DMAC3, 121), +	INTC_IRQ(DMAC4, 124), INTC_IRQ(DMAC4, 125), +	INTC_IRQ(DMAC5, 128), INTC_IRQ(DMAC5, 129), +	INTC_IRQ(DMAC6, 132), INTC_IRQ(DMAC6, 133), +	INTC_IRQ(DMAC7, 136), INTC_IRQ(DMAC7, 137), +	INTC_IRQ(DMAC8, 140), INTC_IRQ(DMAC8, 141), +	INTC_IRQ(DMAC9, 144), INTC_IRQ(DMAC9, 145), +	INTC_IRQ(DMAC10, 148), INTC_IRQ(DMAC10, 149), +	INTC_IRQ(DMAC11, 152), INTC_IRQ(DMAC11, 153), +	INTC_IRQ(DMAC12, 156), INTC_IRQ(DMAC12, 157), +	INTC_IRQ(DMAC13, 160), INTC_IRQ(DMAC13, 161), +	INTC_IRQ(DMAC14, 164), INTC_IRQ(DMAC14, 165), +	INTC_IRQ(DMAC15, 168), INTC_IRQ(DMAC15, 169), + +	INTC_IRQ(USB, 170), + +	INTC_IRQ(VDC4, 171), INTC_IRQ(VDC4, 172), +	INTC_IRQ(VDC4, 173), INTC_IRQ(VDC4, 174), +	INTC_IRQ(VDC4, 175), INTC_IRQ(VDC4, 176), +	INTC_IRQ(VDC4, 177), INTC_IRQ(VDC4, 177), + +	INTC_IRQ(CMT0, 188), INTC_IRQ(CMT1, 189), + +	INTC_IRQ(BSC, 190), INTC_IRQ(WDT, 191), + +	INTC_IRQ(MTU0_ABCD, 192), INTC_IRQ(MTU0_ABCD, 193), +	INTC_IRQ(MTU0_ABCD, 194), INTC_IRQ(MTU0_ABCD, 195), +	INTC_IRQ(MTU0_VEF, 196), INTC_IRQ(MTU0_VEF, 197), +	INTC_IRQ(MTU0_VEF, 198), +	INTC_IRQ(MTU1_AB, 199), INTC_IRQ(MTU1_AB, 200), +	INTC_IRQ(MTU1_VU, 201), INTC_IRQ(MTU1_VU, 202), +	INTC_IRQ(MTU2_AB, 203), INTC_IRQ(MTU2_AB, 204), +	INTC_IRQ(MTU2_VU, 205), INTC_IRQ(MTU2_VU, 206), +	INTC_IRQ(MTU3_ABCD, 207), INTC_IRQ(MTU3_ABCD, 208), +	INTC_IRQ(MTU3_ABCD, 209), INTC_IRQ(MTU3_ABCD, 210), +	INTC_IRQ(MTU3_TCI3V, 211), +	INTC_IRQ(MTU4_ABCD, 212), INTC_IRQ(MTU4_ABCD, 213), +	INTC_IRQ(MTU4_ABCD, 214), INTC_IRQ(MTU4_ABCD, 215), +	INTC_IRQ(MTU4_TCI4V, 216), + +	INTC_IRQ(PWMT1, 217), INTC_IRQ(PWMT2, 218), + +	INTC_IRQ(ADC_ADI, 223), + +	INTC_IRQ(SSIF0, 224), INTC_IRQ(SSIF0, 225), +	INTC_IRQ(SSIF0, 226), +	INTC_IRQ(SSII1, 227), INTC_IRQ(SSII1, 228), +	INTC_IRQ(SSII2, 229), INTC_IRQ(SSII2, 230), +	INTC_IRQ(SSII3, 231), INTC_IRQ(SSII3, 232), +	INTC_IRQ(SSII4, 233), INTC_IRQ(SSII4, 234), +	INTC_IRQ(SSII5, 235), INTC_IRQ(SSII5, 236), + +	INTC_IRQ(RSPDIF, 237), + +	INTC_IRQ(IIC30, 238), INTC_IRQ(IIC30, 239), +	INTC_IRQ(IIC30, 240), INTC_IRQ(IIC30, 241), +	INTC_IRQ(IIC30, 242), +	INTC_IRQ(IIC31, 243), INTC_IRQ(IIC31, 244), +	INTC_IRQ(IIC31, 245), INTC_IRQ(IIC31, 246), +	INTC_IRQ(IIC31, 247), +	INTC_IRQ(IIC32, 248), INTC_IRQ(IIC32, 249), +	INTC_IRQ(IIC32, 250), INTC_IRQ(IIC32, 251), +	INTC_IRQ(IIC32, 252), +	INTC_IRQ(IIC33, 253), INTC_IRQ(IIC33, 254), +	INTC_IRQ(IIC33, 255), INTC_IRQ(IIC33, 256), +	INTC_IRQ(IIC33, 257), + +	INTC_IRQ(SCIF0_BRI, 258), INTC_IRQ(SCIF0_ERI, 259), +	INTC_IRQ(SCIF0_RXI, 260), INTC_IRQ(SCIF0_TXI, 261), +	INTC_IRQ(SCIF1_BRI, 262), INTC_IRQ(SCIF1_ERI, 263), +	INTC_IRQ(SCIF1_RXI, 264), INTC_IRQ(SCIF1_TXI, 265), +	INTC_IRQ(SCIF2_BRI, 266), INTC_IRQ(SCIF2_ERI, 267), +	INTC_IRQ(SCIF2_RXI, 268), INTC_IRQ(SCIF2_TXI, 269), +	INTC_IRQ(SCIF3_BRI, 270), INTC_IRQ(SCIF3_ERI, 271), +	INTC_IRQ(SCIF3_RXI, 272), INTC_IRQ(SCIF3_TXI, 273), +	INTC_IRQ(SCIF4_BRI, 274), INTC_IRQ(SCIF4_ERI, 275), +	INTC_IRQ(SCIF4_RXI, 276), INTC_IRQ(SCIF4_TXI, 277), +	INTC_IRQ(SCIF5_BRI, 278), INTC_IRQ(SCIF5_ERI, 279), +	INTC_IRQ(SCIF5_RXI, 280), INTC_IRQ(SCIF5_TXI, 281), +	INTC_IRQ(SCIF6_BRI, 282), INTC_IRQ(SCIF6_ERI, 283), +	INTC_IRQ(SCIF6_RXI, 284), INTC_IRQ(SCIF6_TXI, 285), +	INTC_IRQ(SCIF7_BRI, 286), INTC_IRQ(SCIF7_ERI, 287), +	INTC_IRQ(SCIF7_RXI, 288), INTC_IRQ(SCIF7_TXI, 289), + +	INTC_IRQ(RCAN0, 291), INTC_IRQ(RCAN0, 292), +	INTC_IRQ(RCAN0, 293), INTC_IRQ(RCAN0, 294), +	INTC_IRQ(RCAN0, 295), +	INTC_IRQ(RCAN1, 296), INTC_IRQ(RCAN1, 297), +	INTC_IRQ(RCAN1, 298), INTC_IRQ(RCAN1, 299), +	INTC_IRQ(RCAN1, 300), +	INTC_IRQ(RCAN2, 301), INTC_IRQ(RCAN2, 302), +	INTC_IRQ(RCAN2, 303), INTC_IRQ(RCAN2, 304), +	INTC_IRQ(RCAN2, 305), + +	INTC_IRQ(RSPIC0, 306), INTC_IRQ(RSPIC0, 307), +	INTC_IRQ(RSPIC0, 308), +	INTC_IRQ(RSPIC1, 309), INTC_IRQ(RSPIC1, 310), +	INTC_IRQ(RSPIC1, 311), + +	INTC_IRQ(IEBC, 318), + +	INTC_IRQ(CD_ROMD, 319), INTC_IRQ(CD_ROMD, 320), +	INTC_IRQ(CD_ROMD, 321), INTC_IRQ(CD_ROMD, 322), +	INTC_IRQ(CD_ROMD, 323), INTC_IRQ(CD_ROMD, 324), + +	INTC_IRQ(NFMC, 325), INTC_IRQ(NFMC, 326), +	INTC_IRQ(NFMC, 327), INTC_IRQ(NFMC, 328), + +	INTC_IRQ(SDHI0, 332), INTC_IRQ(SDHI0, 333), +	INTC_IRQ(SDHI0, 334), +	INTC_IRQ(SDHI1, 335), INTC_IRQ(SDHI1, 336), +	INTC_IRQ(SDHI1, 337), + +	INTC_IRQ(RTC, 338), INTC_IRQ(RTC, 339), +	INTC_IRQ(RTC, 340), + +	INTC_IRQ(SRCC0, 341), INTC_IRQ(SRCC0, 342), +	INTC_IRQ(SRCC0, 343), INTC_IRQ(SRCC0, 344), +	INTC_IRQ(SRCC0, 345), +	INTC_IRQ(SRCC1, 346), INTC_IRQ(SRCC1, 347), +	INTC_IRQ(SRCC1, 348), INTC_IRQ(SRCC1, 349), +	INTC_IRQ(SRCC1, 350), +	INTC_IRQ(SRCC2, 351), INTC_IRQ(SRCC2, 352), +	INTC_IRQ(SRCC2, 353), INTC_IRQ(SRCC2, 354), +	INTC_IRQ(SRCC2, 355), +}; + +static struct intc_group groups[] __initdata = { +	INTC_GROUP(PINT, PINT0, PINT1, PINT2, PINT3, +		   PINT4, PINT5, PINT6, PINT7), +	INTC_GROUP(SCIF0, SCIF0_BRI, SCIF0_ERI, SCIF0_RXI, SCIF0_TXI), +	INTC_GROUP(SCIF1, SCIF1_BRI, SCIF1_ERI, SCIF1_RXI, SCIF1_TXI), +	INTC_GROUP(SCIF2, SCIF2_BRI, SCIF2_ERI, SCIF2_RXI, SCIF2_TXI), +	INTC_GROUP(SCIF3, SCIF3_BRI, SCIF3_ERI, SCIF3_RXI, SCIF3_TXI), +	INTC_GROUP(SCIF4, SCIF4_BRI, SCIF4_ERI, SCIF4_RXI, SCIF4_TXI), +	INTC_GROUP(SCIF5, SCIF5_BRI, SCIF5_ERI, SCIF5_RXI, SCIF5_TXI), +	INTC_GROUP(SCIF6, SCIF6_BRI, SCIF6_ERI, SCIF6_RXI, SCIF6_TXI), +	INTC_GROUP(SCIF7, SCIF7_BRI, SCIF7_ERI, SCIF7_RXI, SCIF7_TXI), +}; + +static struct intc_prio_reg prio_registers[] __initdata = { +	{ 0xfffe0818, 0, 16, 4, /* IPR01 */ { IRQ0, IRQ1, IRQ2, IRQ3 } }, +	{ 0xfffe081a, 0, 16, 4, /* IPR02 */ { IRQ4, IRQ5, IRQ6, IRQ7 } }, +	{ 0xfffe0820, 0, 16, 4, /* IPR05 */ { PINT, 0, 0, 0 } }, +	{ 0xfffe0c00, 0, 16, 4, /* IPR06 */ { DMAC0,  DMAC1, DMAC2,  DMAC3 } }, +	{ 0xfffe0c02, 0, 16, 4, /* IPR07 */ { DMAC4,  DMAC5, DMAC6,  DMAC7 } }, +	{ 0xfffe0c04, 0, 16, 4, /* IPR08 */ { DMAC8,  DMAC9, +					      DMAC10, DMAC11 } }, +	{ 0xfffe0c06, 0, 16, 4, /* IPR09 */ { DMAC12, DMAC13, +					      DMAC14, DMAC15 } }, +	{ 0xfffe0c08, 0, 16, 4, /* IPR10 */ { USB, VDC4, VDC4, VDC4 } }, +	{ 0xfffe0c0a, 0, 16, 4, /* IPR11 */ { 0, 0, 0, 0 } }, +	{ 0xfffe0c0c, 0, 16, 4, /* IPR12 */ { CMT0, CMT1, BSC, WDT } }, +	{ 0xfffe0c0e, 0, 16, 4, /* IPR13 */ { MTU0_ABCD, MTU0_VEF, +					      MTU1_AB, MTU1_VU } }, +	{ 0xfffe0c10, 0, 16, 4, /* IPR14 */ { MTU2_AB, MTU2_VU, +					      MTU3_ABCD, MTU3_TCI3V } }, +	{ 0xfffe0c12, 0, 16, 4, /* IPR15 */ { MTU4_ABCD, MTU4_TCI4V, +					      PWMT1, PWMT2 } }, +	{ 0xfffe0c14, 0, 16, 4, /* IPR16 */ { 0, 0, 0, 0 } }, +	{ 0xfffe0c16, 0, 16, 4, /* IPR17 */ { ADC_ADI, SSIF0, SSII1, SSII2 } }, +	{ 0xfffe0c18, 0, 16, 4, /* IPR18 */ { SSII3, SSII4, SSII5,  RSPDIF} }, +	{ 0xfffe0c1a, 0, 16, 4, /* IPR19 */ { IIC30, IIC31, IIC32, IIC33 } }, +	{ 0xfffe0c1c, 0, 16, 4, /* IPR20 */ { SCIF0, SCIF1, SCIF2, SCIF3 } }, +	{ 0xfffe0c1e, 0, 16, 4, /* IPR21 */ { SCIF4, SCIF5, SCIF6, SCIF7 } }, +	{ 0xfffe0c20, 0, 16, 4, /* IPR22 */ { 0, RCAN0, RCAN1, RCAN2 } }, +	{ 0xfffe0c22, 0, 16, 4, /* IPR23 */ { RSPIC0, RSPIC1, 0, 0 } }, +	{ 0xfffe0c24, 0, 16, 4, /* IPR24 */ { IEBC, CD_ROMD, NFMC, 0 } }, +	{ 0xfffe0c26, 0, 16, 4, /* IPR25 */ { SDHI0, SDHI1, RTC, 0 } }, +	{ 0xfffe0c28, 0, 16, 4, /* IPR26 */ { SRCC0, SRCC1, SRCC2, 0 } }, +}; + +static struct intc_mask_reg mask_registers[] __initdata = { +	{ 0xfffe0808, 0, 16, /* PINTER */ +	  { 0, 0, 0, 0, 0, 0, 0, 0, +	    PINT7, PINT6, PINT5, PINT4, PINT3, PINT2, PINT1, PINT0 } }, +}; + +static DECLARE_INTC_DESC(intc_desc, "sh7269", vectors, groups, +			 mask_registers, prio_registers, NULL); + +static struct plat_sci_port scif0_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xe8007000, 0x100), +	DEFINE_RES_IRQ(259), +	DEFINE_RES_IRQ(260), +	DEFINE_RES_IRQ(261), +	DEFINE_RES_IRQ(258), +}; + +static struct platform_device scif0_device = { +	.name		= "sh-sci", +	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources), +	.dev		= { +		.platform_data	= &scif0_platform_data, +	}, +}; + +static struct plat_sci_port scif1_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xe8007800, 0x100), +	DEFINE_RES_IRQ(263), +	DEFINE_RES_IRQ(264), +	DEFINE_RES_IRQ(265), +	DEFINE_RES_IRQ(262), +}; + +static struct platform_device scif1_device = { +	.name		= "sh-sci", +	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources), +	.dev		= { +		.platform_data	= &scif1_platform_data, +	}, +}; + +static struct plat_sci_port scif2_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xe8008000, 0x100), +	DEFINE_RES_IRQ(267), +	DEFINE_RES_IRQ(268), +	DEFINE_RES_IRQ(269), +	DEFINE_RES_IRQ(266), +}; + +static struct platform_device scif2_device = { +	.name		= "sh-sci", +	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources), +	.dev		= { +		.platform_data	= &scif2_platform_data, +	}, +}; + +static struct plat_sci_port scif3_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xe8008800, 0x100), +	DEFINE_RES_IRQ(271), +	DEFINE_RES_IRQ(272), +	DEFINE_RES_IRQ(273), +	DEFINE_RES_IRQ(270), +}; + +static struct platform_device scif3_device = { +	.name		= "sh-sci", +	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources), +	.dev		= { +		.platform_data	= &scif3_platform_data, +	}, +}; + +static struct plat_sci_port scif4_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xe8009000, 0x100), +	DEFINE_RES_IRQ(275), +	DEFINE_RES_IRQ(276), +	DEFINE_RES_IRQ(277), +	DEFINE_RES_IRQ(274), +}; + +static struct platform_device scif4_device = { +	.name		= "sh-sci", +	.id		= 4, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources), +	.dev		= { +		.platform_data	= &scif4_platform_data, +	}, +}; + +static struct plat_sci_port scif5_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif5_resources[] = { +	DEFINE_RES_MEM(0xe8009800, 0x100), +	DEFINE_RES_IRQ(279), +	DEFINE_RES_IRQ(280), +	DEFINE_RES_IRQ(281), +	DEFINE_RES_IRQ(278), +}; + +static struct platform_device scif5_device = { +	.name		= "sh-sci", +	.id		= 5, +	.resource	= scif5_resources, +	.num_resources	= ARRAY_SIZE(scif5_resources), +	.dev		= { +		.platform_data	= &scif5_platform_data, +	}, +}; + +static struct plat_sci_port scif6_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif6_resources[] = { +	DEFINE_RES_MEM(0xe800a000, 0x100), +	DEFINE_RES_IRQ(283), +	DEFINE_RES_IRQ(284), +	DEFINE_RES_IRQ(285), +	DEFINE_RES_IRQ(282), +}; + +static struct platform_device scif6_device = { +	.name		= "sh-sci", +	.id		= 6, +	.resource	= scif6_resources, +	.num_resources	= ARRAY_SIZE(scif6_resources), +	.dev		= { +		.platform_data	= &scif6_platform_data, +	}, +}; + +static struct plat_sci_port scif7_platform_data = { +	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | +			  SCSCR_REIE | SCSCR_TOIE, +	.type		= PORT_SCIF, +	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif7_resources[] = { +	DEFINE_RES_MEM(0xe800a800, 0x100), +	DEFINE_RES_IRQ(287), +	DEFINE_RES_IRQ(288), +	DEFINE_RES_IRQ(289), +	DEFINE_RES_IRQ(286), +}; + +static struct platform_device scif7_device = { +	.name		= "sh-sci", +	.id		= 7, +	.resource	= scif7_resources, +	.num_resources	= ARRAY_SIZE(scif7_resources), +	.dev		= { +		.platform_data	= &scif7_platform_data, +	}, +}; + +static struct sh_timer_config cmt_platform_data = { +	.channels_mask = 3, +}; + +static struct resource cmt_resources[] = { +	DEFINE_RES_MEM(0xfffec000, 0x10), +	DEFINE_RES_IRQ(188), +	DEFINE_RES_IRQ(189), +}; + +static struct platform_device cmt_device = { +	.name		= "sh-cmt-16", +	.id		= 0, +	.dev = { +		.platform_data	= &cmt_platform_data, +	}, +	.resource	= cmt_resources, +	.num_resources	= ARRAY_SIZE(cmt_resources), +}; + +static struct resource mtu2_resources[] = { +	DEFINE_RES_MEM(0xfffe4000, 0x400), +	DEFINE_RES_IRQ_NAMED(192, "tgi0a"), +	DEFINE_RES_IRQ_NAMED(203, "tgi1a"), +}; + +static struct platform_device mtu2_device = { +	.name		= "sh-mtu2", +	.id		= -1, +	.resource	= mtu2_resources, +	.num_resources	= ARRAY_SIZE(mtu2_resources), +}; + +static struct resource rtc_resources[] = { +	[0] = { +		.start	= 0xfffe6000, +		.end	= 0xfffe6000 + 0x30 - 1, +		.flags	= IORESOURCE_IO, +	}, +	[1] = { +		/* Shared Period/Carry/Alarm IRQ */ +		.start	= 338, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device rtc_device = { +	.name		= "sh-rtc", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(rtc_resources), +	.resource	= rtc_resources, +}; + +/* USB Host */ +static struct r8a66597_platdata r8a66597_data = { +	.on_chip = 1, +	.endian = 1, +}; + +static struct resource r8a66597_usb_host_resources[] = { +	[0] = { +		.start	= 0xe8010000, +		.end	= 0xe80100e4, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= 170, +		.end	= 170, +		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW, +	}, +}; + +static struct platform_device r8a66597_usb_host_device = { +	.name		= "r8a66597_hcd", +	.id		= 0, +	.dev = { +		.dma_mask		= NULL,         /*  not use dma */ +		.coherent_dma_mask	= 0xffffffff, +		.platform_data		= &r8a66597_data, +	}, +	.num_resources	= ARRAY_SIZE(r8a66597_usb_host_resources), +	.resource	= r8a66597_usb_host_resources, +}; + +static struct platform_device *sh7269_devices[] __initdata = { +	&scif0_device, +	&scif1_device, +	&scif2_device, +	&scif3_device, +	&scif4_device, +	&scif5_device, +	&scif6_device, +	&scif7_device, +	&cmt_device, +	&mtu2_device, +	&rtc_device, +	&r8a66597_usb_host_device, +}; + +static int __init sh7269_devices_setup(void) +{ +	return platform_add_devices(sh7269_devices, +				    ARRAY_SIZE(sh7269_devices)); +} +arch_initcall(sh7269_devices_setup); + +void __init plat_irq_setup(void) +{ +	register_intc_controller(&intc_desc); +} + +static struct platform_device *sh7269_early_devices[] __initdata = { +	&scif0_device, +	&scif1_device, +	&scif2_device, +	&scif3_device, +	&scif4_device, +	&scif5_device, +	&scif6_device, +	&scif7_device, +	&cmt_device, +	&mtu2_device, +}; + +void __init plat_early_device_setup(void) +{ +	early_platform_add_devices(sh7269_early_devices, +				   ARRAY_SIZE(sh7269_early_devices)); +} diff --git a/arch/sh/kernel/cpu/sh3/Makefile b/arch/sh/kernel/cpu/sh3/Makefile index ecab274141a..d3634ae7b71 100644 --- a/arch/sh/kernel/cpu/sh3/Makefile +++ b/arch/sh/kernel/cpu/sh3/Makefile @@ -7,15 +7,15 @@ obj-y	:= ex.o probe.o entry.o setup-sh3.o  obj-$(CONFIG_HIBERNATION)		+= swsusp.o  # CPU subtype setup -obj-$(CONFIG_CPU_SUBTYPE_SH7705)	+= setup-sh7705.o -obj-$(CONFIG_CPU_SUBTYPE_SH7706)	+= setup-sh770x.o -obj-$(CONFIG_CPU_SUBTYPE_SH7707)	+= setup-sh770x.o -obj-$(CONFIG_CPU_SUBTYPE_SH7708)	+= setup-sh770x.o -obj-$(CONFIG_CPU_SUBTYPE_SH7709)	+= setup-sh770x.o -obj-$(CONFIG_CPU_SUBTYPE_SH7710)	+= setup-sh7710.o -obj-$(CONFIG_CPU_SUBTYPE_SH7712)	+= setup-sh7710.o -obj-$(CONFIG_CPU_SUBTYPE_SH7720)	+= setup-sh7720.o -obj-$(CONFIG_CPU_SUBTYPE_SH7721)	+= setup-sh7720.o +obj-$(CONFIG_CPU_SUBTYPE_SH7705)	+= setup-sh7705.o serial-sh770x.o +obj-$(CONFIG_CPU_SUBTYPE_SH7706)	+= setup-sh770x.o serial-sh770x.o +obj-$(CONFIG_CPU_SUBTYPE_SH7707)	+= setup-sh770x.o serial-sh770x.o +obj-$(CONFIG_CPU_SUBTYPE_SH7708)	+= setup-sh770x.o serial-sh770x.o +obj-$(CONFIG_CPU_SUBTYPE_SH7709)	+= setup-sh770x.o serial-sh770x.o +obj-$(CONFIG_CPU_SUBTYPE_SH7710)	+= setup-sh7710.o serial-sh7710.o +obj-$(CONFIG_CPU_SUBTYPE_SH7712)	+= setup-sh7710.o serial-sh7710.o +obj-$(CONFIG_CPU_SUBTYPE_SH7720)	+= setup-sh7720.o serial-sh7720.o +obj-$(CONFIG_CPU_SUBTYPE_SH7721)	+= setup-sh7720.o serial-sh7720.o  # Primary on-chip clocks (common)  clock-$(CONFIG_CPU_SH3)			:= clock-sh3.o @@ -30,4 +30,4 @@ clock-$(CONFIG_CPU_SUBTYPE_SH7712)	:= clock-sh7712.o  pinmux-$(CONFIG_CPU_SUBTYPE_SH7720)	:= pinmux-sh7720.o  obj-y	+= $(clock-y) -obj-$(CONFIG_GENERIC_GPIO)	+= $(pinmux-y) +obj-$(CONFIG_GPIOLIB)			+= $(pinmux-y) diff --git a/arch/sh/kernel/cpu/sh3/clock-sh3.c b/arch/sh/kernel/cpu/sh3/clock-sh3.c index b78384afac0..90faa44ca94 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh3.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh3.c @@ -34,7 +34,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= pfc_divisors[idx];  } -static struct clk_ops sh3_master_clk_ops = { +static struct sh_clk_ops sh3_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -46,7 +46,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh3_module_clk_ops = { +static struct sh_clk_ops sh3_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -58,7 +58,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / stc_multipliers[idx];  } -static struct clk_ops sh3_bus_clk_ops = { +static struct sh_clk_ops sh3_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -70,18 +70,18 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh3_cpu_clk_ops = { +static struct sh_clk_ops sh3_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh3_clk_ops[] = { +static struct sh_clk_ops *sh3_clk_ops[] = {  	&sh3_master_clk_ops,  	&sh3_module_clk_ops,  	&sh3_bus_clk_ops,  	&sh3_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh3_clk_ops))  		*ops = sh3_clk_ops[idx]; diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7705.c b/arch/sh/kernel/cpu/sh3/clock-sh7705.c index 0ecea1451c6..a8da4a9986b 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7705.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7705.c @@ -35,7 +35,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= pfc_divisors[__raw_readw(FRQCR) & 0x0003];  } -static struct clk_ops sh7705_master_clk_ops = { +static struct sh_clk_ops sh7705_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -45,7 +45,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7705_module_clk_ops = { +static struct sh_clk_ops sh7705_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -55,7 +55,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / stc_multipliers[idx];  } -static struct clk_ops sh7705_bus_clk_ops = { +static struct sh_clk_ops sh7705_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -65,18 +65,18 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh7705_cpu_clk_ops = { +static struct sh_clk_ops sh7705_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7705_clk_ops[] = { +static struct sh_clk_ops *sh7705_clk_ops[] = {  	&sh7705_master_clk_ops,  	&sh7705_module_clk_ops,  	&sh7705_bus_clk_ops,  	&sh7705_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh7705_clk_ops))  		*ops = sh7705_clk_ops[idx]; diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7706.c b/arch/sh/kernel/cpu/sh3/clock-sh7706.c index 6f9ff8b57dd..a4088e5b220 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7706.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7706.c @@ -30,7 +30,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= pfc_divisors[idx];  } -static struct clk_ops sh7706_master_clk_ops = { +static struct sh_clk_ops sh7706_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -42,7 +42,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7706_module_clk_ops = { +static struct sh_clk_ops sh7706_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -54,7 +54,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / stc_multipliers[idx];  } -static struct clk_ops sh7706_bus_clk_ops = { +static struct sh_clk_ops sh7706_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -66,18 +66,18 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh7706_cpu_clk_ops = { +static struct sh_clk_ops sh7706_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7706_clk_ops[] = { +static struct sh_clk_ops *sh7706_clk_ops[] = {  	&sh7706_master_clk_ops,  	&sh7706_module_clk_ops,  	&sh7706_bus_clk_ops,  	&sh7706_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh7706_clk_ops))  		*ops = sh7706_clk_ops[idx]; diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7709.c b/arch/sh/kernel/cpu/sh3/clock-sh7709.c index f302ba09e68..54a6d4bcc0d 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7709.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7709.c @@ -30,7 +30,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= pfc_divisors[idx];  } -static struct clk_ops sh7709_master_clk_ops = { +static struct sh_clk_ops sh7709_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -42,7 +42,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7709_module_clk_ops = { +static struct sh_clk_ops sh7709_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -55,7 +55,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate * stc_multipliers[idx];  } -static struct clk_ops sh7709_bus_clk_ops = { +static struct sh_clk_ops sh7709_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -67,18 +67,18 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh7709_cpu_clk_ops = { +static struct sh_clk_ops sh7709_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7709_clk_ops[] = { +static struct sh_clk_ops *sh7709_clk_ops[] = {  	&sh7709_master_clk_ops,  	&sh7709_module_clk_ops,  	&sh7709_bus_clk_ops,  	&sh7709_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh7709_clk_ops))  		*ops = sh7709_clk_ops[idx]; diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7710.c b/arch/sh/kernel/cpu/sh3/clock-sh7710.c index 29a87d8946a..ce601b2e397 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7710.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7710.c @@ -29,7 +29,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= md_table[__raw_readw(FRQCR) & 0x0007];  } -static struct clk_ops sh7710_master_clk_ops = { +static struct sh_clk_ops sh7710_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -39,7 +39,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / md_table[idx];  } -static struct clk_ops sh7710_module_clk_ops = { +static struct sh_clk_ops sh7710_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -49,7 +49,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / md_table[idx];  } -static struct clk_ops sh7710_bus_clk_ops = { +static struct sh_clk_ops sh7710_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -59,18 +59,18 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / md_table[idx];  } -static struct clk_ops sh7710_cpu_clk_ops = { +static struct sh_clk_ops sh7710_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7710_clk_ops[] = { +static struct sh_clk_ops *sh7710_clk_ops[] = {  	&sh7710_master_clk_ops,  	&sh7710_module_clk_ops,  	&sh7710_bus_clk_ops,  	&sh7710_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh7710_clk_ops))  		*ops = sh7710_clk_ops[idx]; diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7712.c b/arch/sh/kernel/cpu/sh3/clock-sh7712.c index b0d0c520399..21438a9a1ae 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7712.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7712.c @@ -29,7 +29,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= multipliers[idx];  } -static struct clk_ops sh7712_master_clk_ops = { +static struct sh_clk_ops sh7712_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -41,7 +41,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / divisors[idx];  } -static struct clk_ops sh7712_module_clk_ops = { +static struct sh_clk_ops sh7712_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -53,17 +53,17 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / divisors[idx];  } -static struct clk_ops sh7712_cpu_clk_ops = { +static struct sh_clk_ops sh7712_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7712_clk_ops[] = { +static struct sh_clk_ops *sh7712_clk_ops[] = {  	&sh7712_master_clk_ops,  	&sh7712_module_clk_ops,  	&sh7712_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh7712_clk_ops))  		*ops = sh7712_clk_ops[idx]; diff --git a/arch/sh/kernel/cpu/sh3/entry.S b/arch/sh/kernel/cpu/sh3/entry.S index f6a389c996c..262db6ec067 100644 --- a/arch/sh/kernel/cpu/sh3/entry.S +++ b/arch/sh/kernel/cpu/sh3/entry.S @@ -2,7 +2,7 @@   * arch/sh/kernel/cpu/sh3/entry.S   *   *  Copyright (C) 1999, 2000, 2002  Niibe Yutaka - *  Copyright (C) 2003 - 2006  Paul Mundt + *  Copyright (C) 2003 - 2012  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -17,6 +17,7 @@  #include <cpu/mmu_context.h>  #include <asm/page.h>  #include <asm/cache.h> +#include <asm/thread_info.h>  ! NOTE:  ! GNU as (as of 2.9.1) changes bf/s into bt/s and bra, when the address @@ -114,22 +115,22 @@ ENTRY(tlb_miss_load)  	.align	2  ENTRY(tlb_miss_store)  	bra	call_handle_tlbmiss -	 mov	#1, r5 +	 mov	#FAULT_CODE_WRITE, r5  	.align	2  ENTRY(initial_page_write)  	bra	call_handle_tlbmiss -	 mov	#2, r5 +	 mov	#FAULT_CODE_INITIAL, r5  	.align	2  ENTRY(tlb_protection_violation_load)  	bra	call_do_page_fault -	 mov	#0, r5 +	 mov	#FAULT_CODE_PROT, r5  	.align	2  ENTRY(tlb_protection_violation_store)  	bra	call_do_page_fault -	 mov	#1, r5 +	 mov	#(FAULT_CODE_PROT | FAULT_CODE_WRITE), r5  call_handle_tlbmiss:  	mov.l	1f, r0 diff --git a/arch/sh/kernel/cpu/sh3/pinmux-sh7720.c b/arch/sh/kernel/cpu/sh3/pinmux-sh7720.c index 9ca15462714..26e90a66ebb 100644 --- a/arch/sh/kernel/cpu/sh3/pinmux-sh7720.c +++ b/arch/sh/kernel/cpu/sh3/pinmux-sh7720.c @@ -8,1235 +8,23 @@   * for more details.   */ +#include <linux/bug.h>  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/gpio.h> -#include <cpu/sh7720.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> -enum { -	PINMUX_RESERVED = 0, - -	PINMUX_DATA_BEGIN, -	PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -	PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA, -	PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -	PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA, -	PTC7_DATA, PTC6_DATA, PTC5_DATA, PTC4_DATA, -	PTC3_DATA, PTC2_DATA, PTC1_DATA, PTC0_DATA, -	PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -	PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA, -	PTE6_DATA, PTE5_DATA, PTE4_DATA, -	PTE3_DATA, PTE2_DATA, PTE1_DATA, PTE0_DATA, -	PTF6_DATA, PTF5_DATA, PTF4_DATA, -	PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA, -	PTG6_DATA, PTG5_DATA, PTG4_DATA, -	PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA, -	PTH6_DATA, PTH5_DATA, PTH4_DATA, -	PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA, -	PTJ6_DATA, PTJ5_DATA, PTJ4_DATA, -	PTJ3_DATA, PTJ2_DATA, PTJ1_DATA, PTJ0_DATA, -	PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA, -	PTL7_DATA, PTL6_DATA, PTL5_DATA, PTL4_DATA, PTL3_DATA, -	PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -	PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA, -	PTP4_DATA, PTP3_DATA, PTP2_DATA, PTP1_DATA, PTP0_DATA, -	PTR7_DATA, PTR6_DATA, PTR5_DATA, PTR4_DATA, -	PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA, -	PTS4_DATA, PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA, -	PTT4_DATA, PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA, -	PTU4_DATA, PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA, -	PTV4_DATA, PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA, -	PINMUX_DATA_END, - -	PINMUX_INPUT_BEGIN, -	PTA7_IN, PTA6_IN, PTA5_IN, PTA4_IN, -	PTA3_IN, PTA2_IN, PTA1_IN, PTA0_IN, -	PTB7_IN, PTB6_IN, PTB5_IN, PTB4_IN, -	PTB3_IN, PTB2_IN, PTB1_IN, PTB0_IN, -	PTC7_IN, PTC6_IN, PTC5_IN, PTC4_IN, -	PTC3_IN, PTC2_IN, PTC1_IN, PTC0_IN, -	PTD7_IN, PTD6_IN, PTD5_IN, PTD4_IN, -	PTD3_IN, PTD2_IN, PTD1_IN, PTD0_IN, -	PTE6_IN, PTE5_IN, PTE4_IN, -	PTE3_IN, PTE2_IN, PTE1_IN, PTE0_IN, -	PTF6_IN, PTF5_IN, PTF4_IN, -	PTF3_IN, PTF2_IN, PTF1_IN, PTF0_IN, -	PTG6_IN, PTG5_IN, PTG4_IN, -	PTG3_IN, PTG2_IN, PTG1_IN, PTG0_IN, -	PTH6_IN, PTH5_IN, PTH4_IN, -	PTH3_IN, PTH2_IN, PTH1_IN, PTH0_IN, -	PTJ6_IN, PTJ5_IN, PTJ4_IN, -	PTJ3_IN, PTJ2_IN, PTJ1_IN, PTJ0_IN, -	PTK3_IN, PTK2_IN, PTK1_IN, PTK0_IN, -	PTL7_IN, PTL6_IN, PTL5_IN, PTL4_IN, PTL3_IN, -	PTM7_IN, PTM6_IN, PTM5_IN, PTM4_IN, -	PTM3_IN, PTM2_IN, PTM1_IN, PTM0_IN, -	PTP4_IN, PTP3_IN, PTP2_IN, PTP1_IN, PTP0_IN, -	PTR7_IN, PTR6_IN, PTR5_IN, PTR4_IN, -	PTR3_IN, PTR2_IN, PTR1_IN, PTR0_IN, -	PTS4_IN, PTS3_IN, PTS2_IN, PTS1_IN, PTS0_IN, -	PTT4_IN, PTT3_IN, PTT2_IN, PTT1_IN, PTT0_IN, -	PTU4_IN, PTU3_IN, PTU2_IN, PTU1_IN, PTU0_IN, -	PTV4_IN, PTV3_IN, PTV2_IN, PTV1_IN, PTV0_IN, -	PINMUX_INPUT_END, - -	PINMUX_INPUT_PULLUP_BEGIN, -	PTA7_IN_PU, PTA6_IN_PU, PTA5_IN_PU, PTA4_IN_PU, -	PTA3_IN_PU, PTA2_IN_PU, PTA1_IN_PU, PTA0_IN_PU, -	PTB7_IN_PU, PTB6_IN_PU, PTB5_IN_PU, PTB4_IN_PU, -	PTB3_IN_PU, PTB2_IN_PU, PTB1_IN_PU, PTB0_IN_PU, -	PTC7_IN_PU, PTC6_IN_PU, PTC5_IN_PU, PTC4_IN_PU, -	PTC3_IN_PU, PTC2_IN_PU, PTC1_IN_PU, PTC0_IN_PU, -	PTD7_IN_PU, PTD6_IN_PU, PTD5_IN_PU, PTD4_IN_PU, -	PTD3_IN_PU, PTD2_IN_PU, PTD1_IN_PU, PTD0_IN_PU, -	PTE4_IN_PU, PTE3_IN_PU, PTE2_IN_PU, PTE1_IN_PU, PTE0_IN_PU, -	PTF0_IN_PU, -	PTG6_IN_PU, PTG5_IN_PU, PTG4_IN_PU, -	PTG3_IN_PU, PTG2_IN_PU, PTG1_IN_PU, PTG0_IN_PU, -	PTH6_IN_PU, PTH5_IN_PU, PTH4_IN_PU, -	PTH3_IN_PU, PTH2_IN_PU, PTH1_IN_PU, PTH0_IN_PU, -	PTJ6_IN_PU, PTJ5_IN_PU, PTJ4_IN_PU, -	PTJ3_IN_PU, PTJ2_IN_PU, PTJ1_IN_PU, PTJ0_IN_PU, -	PTK3_IN_PU, PTK2_IN_PU, PTK1_IN_PU, PTK0_IN_PU, -	PTL7_IN_PU, PTL6_IN_PU, PTL5_IN_PU, PTL4_IN_PU, PTL3_IN_PU, -	PTM7_IN_PU, PTM6_IN_PU, PTM5_IN_PU, PTM4_IN_PU, -	PTM3_IN_PU, PTM2_IN_PU, PTM1_IN_PU, PTM0_IN_PU, -	PTP4_IN_PU, PTP3_IN_PU, PTP2_IN_PU, PTP1_IN_PU, PTP0_IN_PU, -	PTR7_IN_PU, PTR6_IN_PU, PTR5_IN_PU, PTR4_IN_PU, -	PTR3_IN_PU, PTR2_IN_PU, PTR1_IN_PU, PTR0_IN_PU, -	PTS4_IN_PU, PTS3_IN_PU, PTS2_IN_PU, PTS1_IN_PU, PTS0_IN_PU, -	PTT4_IN_PU, PTT3_IN_PU, PTT2_IN_PU, PTT1_IN_PU, PTT0_IN_PU, -	PTU4_IN_PU, PTU3_IN_PU, PTU2_IN_PU, PTU1_IN_PU, PTU0_IN_PU, -	PTV4_IN_PU, PTV3_IN_PU, PTV2_IN_PU, PTV1_IN_PU, PTV0_IN_PU, -	PINMUX_INPUT_PULLUP_END, - -	PINMUX_OUTPUT_BEGIN, -	PTA7_OUT, PTA6_OUT, PTA5_OUT, PTA4_OUT, -	PTA3_OUT, PTA2_OUT, PTA1_OUT, PTA0_OUT, -	PTB7_OUT, PTB6_OUT, PTB5_OUT, PTB4_OUT, -	PTB3_OUT, PTB2_OUT, PTB1_OUT, PTB0_OUT, -	PTC7_OUT, PTC6_OUT, PTC5_OUT, PTC4_OUT, -	PTC3_OUT, PTC2_OUT, PTC1_OUT, PTC0_OUT, -	PTD7_OUT, PTD6_OUT, PTD5_OUT, PTD4_OUT, -	PTD3_OUT, PTD2_OUT, PTD1_OUT, PTD0_OUT, -	PTE4_OUT, PTE3_OUT, PTE2_OUT, PTE1_OUT, PTE0_OUT, -	PTF0_OUT, -	PTG6_OUT, PTG5_OUT, PTG4_OUT, -	PTG3_OUT, PTG2_OUT, PTG1_OUT, PTG0_OUT, -	PTH6_OUT, PTH5_OUT, PTH4_OUT, -	PTH3_OUT, PTH2_OUT, PTH1_OUT, PTH0_OUT, -	PTJ6_OUT, PTJ5_OUT, PTJ4_OUT, -	PTJ3_OUT, PTJ2_OUT, PTJ1_OUT, PTJ0_OUT, -	PTK3_OUT, PTK2_OUT, PTK1_OUT, PTK0_OUT, -	PTL7_OUT, PTL6_OUT, PTL5_OUT, PTL4_OUT, PTL3_OUT, -	PTM7_OUT, PTM6_OUT, PTM5_OUT, PTM4_OUT, -	PTM3_OUT, PTM2_OUT, PTM1_OUT, PTM0_OUT, -	PTP4_OUT, PTP3_OUT, PTP2_OUT, PTP1_OUT, PTP0_OUT, -	PTR7_OUT, PTR6_OUT, PTR5_OUT, PTR4_OUT, -	PTR3_OUT, PTR2_OUT, PTR1_OUT, PTR0_OUT, -	PTS4_OUT, PTS3_OUT, PTS2_OUT, PTS1_OUT, PTS0_OUT, -	PTT4_OUT, PTT3_OUT, PTT2_OUT, PTT1_OUT, PTT0_OUT, -	PTU4_OUT, PTU3_OUT, PTU2_OUT, PTU1_OUT, PTU0_OUT, -	PTV4_OUT, PTV3_OUT, PTV2_OUT, PTV1_OUT, PTV0_OUT, -	PINMUX_OUTPUT_END, - -	PINMUX_FUNCTION_BEGIN, -	PTA7_FN, PTA6_FN, PTA5_FN, PTA4_FN, -	PTA3_FN, PTA2_FN, PTA1_FN, PTA0_FN, -	PTB7_FN, PTB6_FN, PTB5_FN, PTB4_FN, -	PTB3_FN, PTB2_FN, PTB1_FN, PTB0_FN, -	PTC7_FN, PTC6_FN, PTC5_FN, PTC4_FN, -	PTC3_FN, PTC2_FN, PTC1_FN, PTC0_FN, -	PTD7_FN, PTD6_FN, PTD5_FN, PTD4_FN, -	PTD3_FN, PTD2_FN, PTD1_FN, PTD0_FN, -	PTE6_FN, PTE5_FN, PTE4_FN, -	PTE3_FN, PTE2_FN, PTE1_FN, PTE0_FN, -	PTF6_FN, PTF5_FN, PTF4_FN, -	PTF3_FN, PTF2_FN, PTF1_FN, PTF0_FN, -	PTG6_FN, PTG5_FN, PTG4_FN, -	PTG3_FN, PTG2_FN, PTG1_FN, PTG0_FN, -	PTH6_FN, PTH5_FN, PTH4_FN, -	PTH3_FN, PTH2_FN, PTH1_FN, PTH0_FN, -	PTJ6_FN, PTJ5_FN, PTJ4_FN, -	PTJ3_FN, PTJ2_FN, PTJ1_FN, PTJ0_FN, -	PTK3_FN, PTK2_FN, PTK1_FN, PTK0_FN, -	PTL7_FN, PTL6_FN, PTL5_FN, PTL4_FN, PTL3_FN, -	PTM7_FN, PTM6_FN, PTM5_FN, PTM4_FN, -	PTM3_FN, PTM2_FN, PTM1_FN, PTM0_FN, -	PTP4_FN, PTP3_FN, PTP2_FN, PTP1_FN, PTP0_FN, -	PTR7_FN, PTR6_FN, PTR5_FN, PTR4_FN, -	PTR3_FN, PTR2_FN, PTR1_FN, PTR0_FN, -	PTS4_FN, PTS3_FN, PTS2_FN, PTS1_FN, PTS0_FN, -	PTT4_FN, PTT3_FN, PTT2_FN, PTT1_FN, PTT0_FN, -	PTU4_FN, PTU3_FN, PTU2_FN, PTU1_FN, PTU0_FN, -	PTV4_FN, PTV3_FN, PTV2_FN, PTV1_FN, PTV0_FN, - -	PSELA_1_0_00, PSELA_1_0_01, PSELA_1_0_10, -	PSELA_3_2_00, PSELA_3_2_01, PSELA_3_2_10, PSELA_3_2_11, -	PSELA_5_4_00, PSELA_5_4_01, PSELA_5_4_10, PSELA_5_4_11, -	PSELA_7_6_00, PSELA_7_6_01, PSELA_7_6_10, -	PSELA_9_8_00, PSELA_9_8_01, PSELA_9_8_10, -	PSELA_11_10_00, PSELA_11_10_01, PSELA_11_10_10, -	PSELA_13_12_00, PSELA_13_12_10, -	PSELA_15_14_00, PSELA_15_14_10, -	PSELB_9_8_00, PSELB_9_8_11, -	PSELB_11_10_00, PSELB_11_10_01, PSELB_11_10_10, PSELB_11_10_11, -	PSELB_13_12_00, PSELB_13_12_01, PSELB_13_12_10, PSELB_13_12_11, -	PSELB_15_14_00, PSELB_15_14_11, -	PSELC_9_8_00, PSELC_9_8_10, -	PSELC_11_10_00, PSELC_11_10_10, -	PSELC_13_12_00,	PSELC_13_12_01,	PSELC_13_12_10, -	PSELC_15_14_00,	PSELC_15_14_01,	PSELC_15_14_10, -	PSELD_1_0_00, PSELD_1_0_10, -	PSELD_11_10_00,	PSELD_11_10_01, -	PSELD_15_14_00,	PSELD_15_14_01,	PSELD_15_14_10, -	PINMUX_FUNCTION_END, - -	PINMUX_MARK_BEGIN, -	D31_MARK, D30_MARK, D29_MARK, D28_MARK, -	D27_MARK, D26_MARK, D25_MARK, D24_MARK, -	D23_MARK, D22_MARK, D21_MARK, D20_MARK, -	D19_MARK, D18_MARK, D17_MARK, D16_MARK, -	IOIS16_MARK, RAS_MARK, CAS_MARK, CKE_MARK, -	CS5B_CE1A_MARK, CS6B_CE1B_MARK, -	A25_MARK, A24_MARK, A23_MARK, A22_MARK, -	A21_MARK, A20_MARK, A19_MARK, A0_MARK, -	REFOUT_MARK, IRQOUT_MARK, -	LCD_DATA15_MARK, LCD_DATA14_MARK, -	LCD_DATA13_MARK, LCD_DATA12_MARK, -	LCD_DATA11_MARK, LCD_DATA10_MARK, -	LCD_DATA9_MARK, LCD_DATA8_MARK, -	LCD_DATA7_MARK, LCD_DATA6_MARK, -	LCD_DATA5_MARK, LCD_DATA4_MARK, -	LCD_DATA3_MARK, LCD_DATA2_MARK, -	LCD_DATA1_MARK, LCD_DATA0_MARK, -	LCD_M_DISP_MARK, -	LCD_CL1_MARK, LCD_CL2_MARK, -	LCD_DON_MARK, LCD_FLM_MARK, -	LCD_VEPWC_MARK, LCD_VCPWC_MARK, -	AFE_RXIN_MARK, AFE_RDET_MARK, -	AFE_FS_MARK, AFE_TXOUT_MARK, -	AFE_SCLK_MARK, AFE_RLYCNT_MARK, -	AFE_HC1_MARK, -	IIC_SCL_MARK, IIC_SDA_MARK, -	DA1_MARK, DA0_MARK, -	AN3_MARK, AN2_MARK, AN1_MARK, AN0_MARK, ADTRG_MARK, -	USB1D_RCV_MARK, USB1D_TXSE0_MARK, -	USB1D_TXDPLS_MARK, USB1D_DMNS_MARK, -	USB1D_DPLS_MARK, USB1D_SPEED_MARK, -	USB1D_TXENL_MARK, -	USB2_PWR_EN_MARK, USB1_PWR_EN_USBF_UPLUP_MARK, USB1D_SUSPEND_MARK, -	IRQ5_MARK, IRQ4_MARK, -	IRQ3_IRL3_MARK, IRQ2_IRL2_MARK, -	IRQ1_IRL1_MARK, IRQ0_IRL0_MARK, -	PCC_REG_MARK, PCC_DRV_MARK, -	PCC_BVD2_MARK, PCC_BVD1_MARK, -	PCC_CD2_MARK, PCC_CD1_MARK, -	PCC_RESET_MARK, PCC_RDY_MARK, -	PCC_VS2_MARK, PCC_VS1_MARK, -	AUDATA3_MARK, AUDATA2_MARK, AUDATA1_MARK, AUDATA0_MARK, -	AUDCK_MARK, AUDSYNC_MARK, ASEBRKAK_MARK, TRST_MARK, -	TMS_MARK, TDO_MARK, TDI_MARK, TCK_MARK, -	DACK1_MARK, DREQ1_MARK, DACK0_MARK, DREQ0_MARK, -	TEND1_MARK, TEND0_MARK, -	SIOF0_SYNC_MARK, SIOF0_MCLK_MARK, -	SIOF0_TXD_MARK, SIOF0_RXD_MARK, -	SIOF0_SCK_MARK, -	SIOF1_SYNC_MARK, SIOF1_MCLK_MARK, -	SIOF1_TXD_MARK, SIOF1_RXD_MARK, -	SIOF1_SCK_MARK, -	SCIF0_TXD_MARK, SCIF0_RXD_MARK, -	SCIF0_RTS_MARK, SCIF0_CTS_MARK, SCIF0_SCK_MARK, -	SCIF1_TXD_MARK, SCIF1_RXD_MARK, -	SCIF1_RTS_MARK, SCIF1_CTS_MARK, SCIF1_SCK_MARK, -	TPU_TO1_MARK, TPU_TO0_MARK, -	TPU_TI3B_MARK, TPU_TI3A_MARK, -	TPU_TI2B_MARK, TPU_TI2A_MARK, -	TPU_TO3_MARK, TPU_TO2_MARK, -	SIM_D_MARK, SIM_CLK_MARK, SIM_RST_MARK, -	MMC_DAT_MARK, MMC_CMD_MARK, -	MMC_CLK_MARK, MMC_VDDON_MARK, -	MMC_ODMOD_MARK, -	STATUS0_MARK, STATUS1_MARK, -	PINMUX_MARK_END, -}; - -static pinmux_enum_t pinmux_data[] = { -	/* PTA GPIO */ -	PINMUX_DATA(PTA7_DATA, PTA7_IN, PTA7_OUT, PTA7_IN_PU), -	PINMUX_DATA(PTA6_DATA, PTA6_IN, PTA6_OUT, PTA6_IN_PU), -	PINMUX_DATA(PTA5_DATA, PTA5_IN, PTA5_OUT, PTA5_IN_PU), -	PINMUX_DATA(PTA4_DATA, PTA4_IN, PTA4_OUT, PTA4_IN_PU), -	PINMUX_DATA(PTA3_DATA, PTA3_IN, PTA3_OUT, PTA3_IN_PU), -	PINMUX_DATA(PTA2_DATA, PTA2_IN, PTA2_OUT, PTA2_IN_PU), -	PINMUX_DATA(PTA1_DATA, PTA1_IN, PTA1_OUT, PTA1_IN_PU), -	PINMUX_DATA(PTA0_DATA, PTA0_IN, PTA0_OUT, PTA0_IN_PU), - -	/* PTB GPIO */ -	PINMUX_DATA(PTB7_DATA, PTB7_IN, PTB7_OUT, PTB7_IN_PU), -	PINMUX_DATA(PTB6_DATA, PTB6_IN, PTB6_OUT, PTB6_IN_PU), -	PINMUX_DATA(PTB5_DATA, PTB5_IN, PTB5_OUT, PTB5_IN_PU), -	PINMUX_DATA(PTB4_DATA, PTB4_IN, PTB4_OUT, PTB4_IN_PU), -	PINMUX_DATA(PTB3_DATA, PTB3_IN, PTB3_OUT, PTB3_IN_PU), -	PINMUX_DATA(PTB2_DATA, PTB2_IN, PTB2_OUT, PTB2_IN_PU), -	PINMUX_DATA(PTB1_DATA, PTB1_IN, PTB1_OUT, PTB1_IN_PU), -	PINMUX_DATA(PTB0_DATA, PTB0_IN, PTB0_OUT, PTB0_IN_PU), - -	/* PTC GPIO */ -	PINMUX_DATA(PTC7_DATA, PTC7_IN, PTC7_OUT, PTC7_IN_PU), -	PINMUX_DATA(PTC6_DATA, PTC6_IN, PTC6_OUT, PTC6_IN_PU), -	PINMUX_DATA(PTC5_DATA, PTC5_IN, PTC5_OUT, PTC5_IN_PU), -	PINMUX_DATA(PTC4_DATA, PTC4_IN, PTC4_OUT, PTC4_IN_PU), -	PINMUX_DATA(PTC3_DATA, PTC3_IN, PTC3_OUT, PTC3_IN_PU), -	PINMUX_DATA(PTC2_DATA, PTC2_IN, PTC2_OUT, PTC2_IN_PU), -	PINMUX_DATA(PTC1_DATA, PTC1_IN, PTC1_OUT, PTC1_IN_PU), -	PINMUX_DATA(PTC0_DATA, PTC0_IN, PTC0_OUT, PTC0_IN_PU), - -	/* PTD GPIO */ -	PINMUX_DATA(PTD7_DATA, PTD7_IN, PTD7_OUT, PTD7_IN_PU), -	PINMUX_DATA(PTD6_DATA, PTD6_IN, PTD6_OUT, PTD6_IN_PU), -	PINMUX_DATA(PTD5_DATA, PTD5_IN, PTD5_OUT, PTD5_IN_PU), -	PINMUX_DATA(PTD4_DATA, PTD4_IN, PTD4_OUT, PTD4_IN_PU), -	PINMUX_DATA(PTD3_DATA, PTD3_IN, PTD3_OUT, PTD3_IN_PU), -	PINMUX_DATA(PTD2_DATA, PTD2_IN, PTD2_OUT, PTD2_IN_PU), -	PINMUX_DATA(PTD1_DATA, PTD1_IN, PTD1_OUT, PTD1_IN_PU), -	PINMUX_DATA(PTD0_DATA, PTD0_IN, PTD0_OUT, PTD0_IN_PU), - -	/* PTE GPIO */ -	PINMUX_DATA(PTE6_DATA, PTE6_IN), -	PINMUX_DATA(PTE5_DATA, PTE5_IN), -	PINMUX_DATA(PTE4_DATA, PTE4_IN, PTE4_OUT, PTE4_IN_PU), -	PINMUX_DATA(PTE3_DATA, PTE3_IN, PTE3_OUT, PTE3_IN_PU), -	PINMUX_DATA(PTE2_DATA, PTE2_IN, PTE2_OUT, PTE2_IN_PU), -	PINMUX_DATA(PTE1_DATA, PTE1_IN, PTE1_OUT, PTE1_IN_PU), -	PINMUX_DATA(PTE0_DATA, PTE0_IN, PTE0_OUT, PTE0_IN_PU), - -	/* PTF GPIO */ -	PINMUX_DATA(PTF6_DATA, PTF6_IN), -	PINMUX_DATA(PTF5_DATA, PTF5_IN), -	PINMUX_DATA(PTF4_DATA, PTF4_IN), -	PINMUX_DATA(PTF3_DATA, PTF3_IN), -	PINMUX_DATA(PTF2_DATA, PTF2_IN), -	PINMUX_DATA(PTF1_DATA, PTF1_IN), -	PINMUX_DATA(PTF0_DATA, PTF0_IN, PTF0_OUT, PTF0_IN_PU), - -	/* PTG GPIO */ -	PINMUX_DATA(PTG6_DATA, PTG6_IN, PTG6_OUT, PTG6_IN_PU), -	PINMUX_DATA(PTG5_DATA, PTG5_IN, PTG5_OUT, PTG5_IN_PU), -	PINMUX_DATA(PTG4_DATA, PTG4_IN, PTG4_OUT, PTG4_IN_PU), -	PINMUX_DATA(PTG3_DATA, PTG3_IN, PTG3_OUT, PTG3_IN_PU), -	PINMUX_DATA(PTG2_DATA, PTG2_IN, PTG2_OUT, PTG2_IN_PU), -	PINMUX_DATA(PTG1_DATA, PTG1_IN, PTG1_OUT, PTG1_IN_PU), -	PINMUX_DATA(PTG0_DATA, PTG0_IN, PTG0_OUT, PTG0_IN_PU), - -	/* PTH GPIO */ -	PINMUX_DATA(PTH6_DATA, PTH6_IN, PTH6_OUT, PTH6_IN_PU), -	PINMUX_DATA(PTH5_DATA, PTH5_IN, PTH5_OUT, PTH5_IN_PU), -	PINMUX_DATA(PTH4_DATA, PTH4_IN, PTH4_OUT, PTH4_IN_PU), -	PINMUX_DATA(PTH3_DATA, PTH3_IN, PTH3_OUT, PTH3_IN_PU), -	PINMUX_DATA(PTH2_DATA, PTH2_IN, PTH2_OUT, PTH2_IN_PU), -	PINMUX_DATA(PTH1_DATA, PTH1_IN, PTH1_OUT, PTH1_IN_PU), -	PINMUX_DATA(PTH0_DATA, PTH0_IN, PTH0_OUT, PTH0_IN_PU), - -	/* PTJ GPIO */ -	PINMUX_DATA(PTJ6_DATA, PTJ6_IN, PTJ6_OUT, PTJ6_IN_PU), -	PINMUX_DATA(PTJ5_DATA, PTJ5_IN, PTJ5_OUT, PTJ5_IN_PU), -	PINMUX_DATA(PTJ4_DATA, PTJ4_IN, PTJ4_OUT, PTJ4_IN_PU), -	PINMUX_DATA(PTJ3_DATA, PTJ3_IN, PTJ3_OUT, PTJ3_IN_PU), -	PINMUX_DATA(PTJ2_DATA, PTJ2_IN, PTJ2_OUT, PTJ2_IN_PU), -	PINMUX_DATA(PTJ1_DATA, PTJ1_IN, PTJ1_OUT, PTJ1_IN_PU), -	PINMUX_DATA(PTJ0_DATA, PTJ0_IN, PTJ0_OUT, PTJ0_IN_PU), - -	/* PTK GPIO */ -	PINMUX_DATA(PTK3_DATA, PTK3_IN, PTK3_OUT, PTK3_IN_PU), -	PINMUX_DATA(PTK2_DATA, PTK2_IN, PTK2_OUT, PTK2_IN_PU), -	PINMUX_DATA(PTK1_DATA, PTK1_IN, PTK1_OUT, PTK1_IN_PU), -	PINMUX_DATA(PTK0_DATA, PTK0_IN, PTK0_OUT, PTK0_IN_PU), - -	/* PTL GPIO */ -	PINMUX_DATA(PTL7_DATA, PTL7_IN, PTL7_OUT, PTL7_IN_PU), -	PINMUX_DATA(PTL6_DATA, PTL6_IN, PTL6_OUT, PTL6_IN_PU), -	PINMUX_DATA(PTL5_DATA, PTL5_IN, PTL5_OUT, PTL5_IN_PU), -	PINMUX_DATA(PTL4_DATA, PTL4_IN, PTL4_OUT, PTL4_IN_PU), -	PINMUX_DATA(PTL3_DATA, PTL3_IN, PTL3_OUT, PTL3_IN_PU), - -	/* PTM GPIO */ -	PINMUX_DATA(PTM7_DATA, PTM7_IN, PTM7_OUT, PTM7_IN_PU), -	PINMUX_DATA(PTM6_DATA, PTM6_IN, PTM6_OUT, PTM6_IN_PU), -	PINMUX_DATA(PTM5_DATA, PTM5_IN, PTM5_OUT, PTM5_IN_PU), -	PINMUX_DATA(PTM4_DATA, PTM4_IN, PTM4_OUT, PTM4_IN_PU), -	PINMUX_DATA(PTM3_DATA, PTM3_IN, PTM3_OUT, PTM3_IN_PU), -	PINMUX_DATA(PTM2_DATA, PTM2_IN, PTM2_OUT, PTM2_IN_PU), -	PINMUX_DATA(PTM1_DATA, PTM1_IN, PTM1_OUT, PTM1_IN_PU), -	PINMUX_DATA(PTM0_DATA, PTM0_IN, PTM0_OUT, PTM0_IN_PU), - -	/* PTP GPIO */ -	PINMUX_DATA(PTP4_DATA, PTP4_IN, PTP4_OUT, PTP4_IN_PU), -	PINMUX_DATA(PTP3_DATA, PTP3_IN, PTP3_OUT, PTP3_IN_PU), -	PINMUX_DATA(PTP2_DATA, PTP2_IN, PTP2_OUT, PTP2_IN_PU), -	PINMUX_DATA(PTP1_DATA, PTP1_IN, PTP1_OUT, PTP1_IN_PU), -	PINMUX_DATA(PTP0_DATA, PTP0_IN, PTP0_OUT, PTP0_IN_PU), - -	/* PTR GPIO */ -	PINMUX_DATA(PTR7_DATA, PTR7_IN, PTR7_OUT, PTR7_IN_PU), -	PINMUX_DATA(PTR6_DATA, PTR6_IN, PTR6_OUT, PTR6_IN_PU), -	PINMUX_DATA(PTR5_DATA, PTR5_IN, PTR5_OUT, PTR5_IN_PU), -	PINMUX_DATA(PTR4_DATA, PTR4_IN, PTR4_OUT, PTR4_IN_PU), -	PINMUX_DATA(PTR3_DATA, PTR3_IN, PTR3_OUT, PTR3_IN_PU), -	PINMUX_DATA(PTR2_DATA, PTR2_IN, PTR2_OUT, PTR2_IN_PU), -	PINMUX_DATA(PTR1_DATA, PTR1_IN, PTR1_OUT, PTR1_IN_PU), -	PINMUX_DATA(PTR0_DATA, PTR0_IN, PTR0_OUT, PTR0_IN_PU), - -	/* PTS GPIO */ -	PINMUX_DATA(PTS4_DATA, PTS4_IN, PTS4_OUT, PTS4_IN_PU), -	PINMUX_DATA(PTS3_DATA, PTS3_IN, PTS3_OUT, PTS3_IN_PU), -	PINMUX_DATA(PTS2_DATA, PTS2_IN, PTS2_OUT, PTS2_IN_PU), -	PINMUX_DATA(PTS1_DATA, PTS1_IN, PTS1_OUT, PTS1_IN_PU), -	PINMUX_DATA(PTS0_DATA, PTS0_IN, PTS0_OUT, PTS0_IN_PU), - -	/* PTT GPIO */ -	PINMUX_DATA(PTT4_DATA, PTT4_IN, PTT4_OUT, PTT4_IN_PU), -	PINMUX_DATA(PTT3_DATA, PTT3_IN, PTT3_OUT, PTT3_IN_PU), -	PINMUX_DATA(PTT2_DATA, PTT2_IN, PTT2_OUT, PTT2_IN_PU), -	PINMUX_DATA(PTT1_DATA, PTT1_IN, PTT1_OUT, PTT1_IN_PU), -	PINMUX_DATA(PTT0_DATA, PTT0_IN, PTT0_OUT, PTT0_IN_PU), - -	/* PTU GPIO */ -	PINMUX_DATA(PTU4_DATA, PTU4_IN, PTU4_OUT, PTU4_IN_PU), -	PINMUX_DATA(PTU3_DATA, PTU3_IN, PTU3_OUT, PTU3_IN_PU), -	PINMUX_DATA(PTU2_DATA, PTU2_IN, PTU2_OUT, PTU2_IN_PU), -	PINMUX_DATA(PTU1_DATA, PTU1_IN, PTU1_OUT, PTU1_IN_PU), -	PINMUX_DATA(PTU0_DATA, PTU0_IN, PTU0_OUT, PTU0_IN_PU), - -	/* PTV GPIO */ -	PINMUX_DATA(PTV4_DATA, PTV4_IN, PTV4_OUT, PTV4_IN_PU), -	PINMUX_DATA(PTV3_DATA, PTV3_IN, PTV3_OUT, PTV3_IN_PU), -	PINMUX_DATA(PTV2_DATA, PTV2_IN, PTV2_OUT, PTV2_IN_PU), -	PINMUX_DATA(PTV1_DATA, PTV1_IN, PTV1_OUT, PTV1_IN_PU), -	PINMUX_DATA(PTV0_DATA, PTV0_IN, PTV0_OUT, PTV0_IN_PU), - -	/* PTA FN */ -	PINMUX_DATA(D23_MARK, PTA7_FN), -	PINMUX_DATA(D22_MARK, PTA6_FN), -	PINMUX_DATA(D21_MARK, PTA5_FN), -	PINMUX_DATA(D20_MARK, PTA4_FN), -	PINMUX_DATA(D19_MARK, PTA3_FN), -	PINMUX_DATA(D18_MARK, PTA2_FN), -	PINMUX_DATA(D17_MARK, PTA1_FN), -	PINMUX_DATA(D16_MARK, PTA0_FN), - -	/* PTB FN */ -	PINMUX_DATA(D31_MARK, PTB7_FN), -	PINMUX_DATA(D30_MARK, PTB6_FN), -	PINMUX_DATA(D29_MARK, PTB5_FN), -	PINMUX_DATA(D28_MARK, PTB4_FN), -	PINMUX_DATA(D27_MARK, PTB3_FN), -	PINMUX_DATA(D26_MARK, PTB2_FN), -	PINMUX_DATA(D25_MARK, PTB1_FN), -	PINMUX_DATA(D24_MARK, PTB0_FN), - -	/* PTC FN */ -	PINMUX_DATA(LCD_DATA7_MARK, PTC7_FN), -	PINMUX_DATA(LCD_DATA6_MARK, PTC6_FN), -	PINMUX_DATA(LCD_DATA5_MARK, PTC5_FN), -	PINMUX_DATA(LCD_DATA4_MARK, PTC4_FN), -	PINMUX_DATA(LCD_DATA3_MARK, PTC3_FN), -	PINMUX_DATA(LCD_DATA2_MARK, PTC2_FN), -	PINMUX_DATA(LCD_DATA1_MARK, PTC1_FN), -	PINMUX_DATA(LCD_DATA0_MARK, PTC0_FN), - -	/* PTD FN */ -	PINMUX_DATA(LCD_DATA15_MARK, PTD7_FN), -	PINMUX_DATA(LCD_DATA14_MARK, PTD6_FN), -	PINMUX_DATA(LCD_DATA13_MARK, PTD5_FN), -	PINMUX_DATA(LCD_DATA12_MARK, PTD4_FN), -	PINMUX_DATA(LCD_DATA11_MARK, PTD3_FN), -	PINMUX_DATA(LCD_DATA10_MARK, PTD2_FN), -	PINMUX_DATA(LCD_DATA9_MARK, PTD1_FN), -	PINMUX_DATA(LCD_DATA8_MARK, PTD0_FN), - -	/* PTE FN */ -	PINMUX_DATA(IIC_SCL_MARK, PSELB_9_8_00, PTE6_FN), -	PINMUX_DATA(AFE_RXIN_MARK, PSELB_9_8_11, PTE6_FN), -	PINMUX_DATA(IIC_SDA_MARK, PSELB_9_8_00, PTE5_FN), -	PINMUX_DATA(AFE_RDET_MARK, PSELB_9_8_11, PTE5_FN), -	PINMUX_DATA(LCD_M_DISP_MARK, PTE4_FN), -	PINMUX_DATA(LCD_CL1_MARK, PTE3_FN), -	PINMUX_DATA(LCD_CL2_MARK, PTE2_FN), -	PINMUX_DATA(LCD_DON_MARK, PTE1_FN), -	PINMUX_DATA(LCD_FLM_MARK, PTE0_FN), - -	/* PTF FN */ -	PINMUX_DATA(DA1_MARK, PTF6_FN), -	PINMUX_DATA(DA0_MARK, PTF5_FN), -	PINMUX_DATA(AN3_MARK, PTF4_FN), -	PINMUX_DATA(AN2_MARK, PTF3_FN), -	PINMUX_DATA(AN1_MARK, PTF2_FN), -	PINMUX_DATA(AN0_MARK, PTF1_FN), -	PINMUX_DATA(ADTRG_MARK, PTF0_FN), - -	/* PTG FN */ -	PINMUX_DATA(USB1D_RCV_MARK, PSELA_3_2_00, PTG6_FN), -	PINMUX_DATA(AFE_FS_MARK, PSELA_3_2_01, PTG6_FN), -	PINMUX_DATA(PCC_REG_MARK, PSELA_3_2_10, PTG6_FN), -	PINMUX_DATA(IRQ5_MARK, PSELA_3_2_11, PTG6_FN), -	PINMUX_DATA(USB1D_TXSE0_MARK, PSELA_5_4_00, PTG5_FN), -	PINMUX_DATA(AFE_TXOUT_MARK, PSELA_5_4_01, PTG5_FN), -	PINMUX_DATA(PCC_DRV_MARK, PSELA_5_4_10, PTG5_FN), -	PINMUX_DATA(IRQ4_MARK, PSELA_5_4_11, PTG5_FN), -	PINMUX_DATA(USB1D_TXDPLS_MARK, PSELA_7_6_00, PTG4_FN), -	PINMUX_DATA(AFE_SCLK_MARK, PSELA_7_6_01, PTG4_FN), -	PINMUX_DATA(IOIS16_MARK, PSELA_7_6_10, PTG4_FN), -	PINMUX_DATA(USB1D_DMNS_MARK, PSELA_9_8_00, PTG3_FN), -	PINMUX_DATA(AFE_RLYCNT_MARK, PSELA_9_8_01, PTG3_FN), -	PINMUX_DATA(PCC_BVD2_MARK, PSELA_9_8_10, PTG3_FN), -	PINMUX_DATA(USB1D_DPLS_MARK, PSELA_11_10_00, PTG2_FN), -	PINMUX_DATA(AFE_HC1_MARK, PSELA_11_10_01, PTG2_FN), -	PINMUX_DATA(PCC_BVD1_MARK, PSELA_11_10_10, PTG2_FN), -	PINMUX_DATA(USB1D_SPEED_MARK, PSELA_13_12_00, PTG1_FN), -	PINMUX_DATA(PCC_CD2_MARK, PSELA_13_12_10, PTG1_FN), -	PINMUX_DATA(USB1D_TXENL_MARK, PSELA_15_14_00, PTG0_FN), -	PINMUX_DATA(PCC_CD1_MARK, PSELA_15_14_10, PTG0_FN), - -	/* PTH FN */ -	PINMUX_DATA(RAS_MARK, PTH6_FN), -	PINMUX_DATA(CAS_MARK, PTH5_FN), -	PINMUX_DATA(CKE_MARK, PTH4_FN), -	PINMUX_DATA(STATUS1_MARK, PTH3_FN), -	PINMUX_DATA(STATUS0_MARK, PTH2_FN), -	PINMUX_DATA(USB2_PWR_EN_MARK, PTH1_FN), -	PINMUX_DATA(USB1_PWR_EN_USBF_UPLUP_MARK, PTH0_FN), - -	/* PTJ FN */ -	PINMUX_DATA(AUDCK_MARK, PTJ6_FN), -	PINMUX_DATA(ASEBRKAK_MARK, PTJ5_FN), -	PINMUX_DATA(AUDATA3_MARK, PTJ4_FN), -	PINMUX_DATA(AUDATA2_MARK, PTJ3_FN), -	PINMUX_DATA(AUDATA1_MARK, PTJ2_FN), -	PINMUX_DATA(AUDATA0_MARK, PTJ1_FN), -	PINMUX_DATA(AUDSYNC_MARK, PTJ0_FN), - -	/* PTK FN */ -	PINMUX_DATA(PCC_RESET_MARK, PTK3_FN), -	PINMUX_DATA(PCC_RDY_MARK, PTK2_FN), -	PINMUX_DATA(PCC_VS2_MARK, PTK1_FN), -	PINMUX_DATA(PCC_VS1_MARK, PTK0_FN), - -	/* PTL FN */ -	PINMUX_DATA(TRST_MARK, PTL7_FN), -	PINMUX_DATA(TMS_MARK, PTL6_FN), -	PINMUX_DATA(TDO_MARK, PTL5_FN), -	PINMUX_DATA(TDI_MARK, PTL4_FN), -	PINMUX_DATA(TCK_MARK, PTL3_FN), - -	/* PTM FN */ -	PINMUX_DATA(DREQ1_MARK, PTM7_FN), -	PINMUX_DATA(DREQ0_MARK, PTM6_FN), -	PINMUX_DATA(DACK1_MARK, PTM5_FN), -	PINMUX_DATA(DACK0_MARK, PTM4_FN), -	PINMUX_DATA(TEND1_MARK, PTM3_FN), -	PINMUX_DATA(TEND0_MARK, PTM2_FN), -	PINMUX_DATA(CS5B_CE1A_MARK, PTM1_FN), -	PINMUX_DATA(CS6B_CE1B_MARK, PTM0_FN), - -	/* PTP FN */ -	PINMUX_DATA(USB1D_SUSPEND_MARK, PSELA_1_0_00, PTP4_FN), -	PINMUX_DATA(REFOUT_MARK, PSELA_1_0_01, PTP4_FN), -	PINMUX_DATA(IRQOUT_MARK, PSELA_1_0_10, PTP4_FN), -	PINMUX_DATA(IRQ3_IRL3_MARK, PTP3_FN), -	PINMUX_DATA(IRQ2_IRL2_MARK, PTP2_FN), -	PINMUX_DATA(IRQ1_IRL1_MARK, PTP1_FN), -	PINMUX_DATA(IRQ0_IRL0_MARK, PTP0_FN), - -	/* PTR FN */ -	PINMUX_DATA(A25_MARK, PTR7_FN), -	PINMUX_DATA(A24_MARK, PTR6_FN), -	PINMUX_DATA(A23_MARK, PTR5_FN), -	PINMUX_DATA(A22_MARK, PTR4_FN), -	PINMUX_DATA(A21_MARK, PTR3_FN), -	PINMUX_DATA(A20_MARK, PTR2_FN), -	PINMUX_DATA(A19_MARK, PTR1_FN), -	PINMUX_DATA(A0_MARK, PTR0_FN), - -	/* PTS FN */ -	PINMUX_DATA(SIOF0_SYNC_MARK, PTS4_FN), -	PINMUX_DATA(SIOF0_MCLK_MARK, PTS3_FN), -	PINMUX_DATA(SIOF0_TXD_MARK, PTS2_FN), -	PINMUX_DATA(SIOF0_RXD_MARK, PTS1_FN), -	PINMUX_DATA(SIOF0_SCK_MARK, PTS0_FN), - -	/* PTT FN */ -	PINMUX_DATA(SCIF0_CTS_MARK, PSELB_15_14_00, PTT4_FN), -	PINMUX_DATA(TPU_TO1_MARK, PSELB_15_14_11, PTT4_FN), -	PINMUX_DATA(SCIF0_RTS_MARK, PSELB_15_14_00, PTT3_FN), -	PINMUX_DATA(TPU_TO0_MARK, PSELB_15_14_11, PTT3_FN), -	PINMUX_DATA(SCIF0_TXD_MARK, PTT2_FN), -	PINMUX_DATA(SCIF0_RXD_MARK, PTT1_FN), -	PINMUX_DATA(SCIF0_SCK_MARK, PTT0_FN), - -	/* PTU FN */ -	PINMUX_DATA(SIOF1_SYNC_MARK, PTU4_FN), -	PINMUX_DATA(SIOF1_MCLK_MARK, PSELD_11_10_00, PTU3_FN), -	PINMUX_DATA(TPU_TI3B_MARK, PSELD_11_10_01, PTU3_FN), -	PINMUX_DATA(SIOF1_TXD_MARK, PSELD_15_14_00, PTU2_FN), -	PINMUX_DATA(TPU_TI3A_MARK, PSELD_15_14_01, PTU2_FN), -	PINMUX_DATA(MMC_DAT_MARK, PSELD_15_14_10, PTU2_FN), -	PINMUX_DATA(SIOF1_RXD_MARK, PSELC_13_12_00, PTU1_FN), -	PINMUX_DATA(TPU_TI2B_MARK, PSELC_13_12_01, PTU1_FN), -	PINMUX_DATA(MMC_CMD_MARK, PSELC_13_12_10, PTU1_FN), -	PINMUX_DATA(SIOF1_SCK_MARK, PSELC_15_14_00, PTU0_FN), -	PINMUX_DATA(TPU_TI2A_MARK, PSELC_15_14_01, PTU0_FN), -	PINMUX_DATA(MMC_CLK_MARK, PSELC_15_14_10, PTU0_FN), - -	/* PTV FN */ -	PINMUX_DATA(SCIF1_CTS_MARK, PSELB_11_10_00, PTV4_FN), -	PINMUX_DATA(TPU_TO3_MARK, PSELB_11_10_01, PTV4_FN), -	PINMUX_DATA(MMC_VDDON_MARK, PSELB_11_10_10, PTV4_FN), -	PINMUX_DATA(LCD_VEPWC_MARK, PSELB_11_10_11, PTV4_FN), -	PINMUX_DATA(SCIF1_RTS_MARK, PSELB_13_12_00, PTV3_FN), -	PINMUX_DATA(TPU_TO2_MARK, PSELB_13_12_01, PTV3_FN), -	PINMUX_DATA(MMC_ODMOD_MARK, PSELB_13_12_10, PTV3_FN), -	PINMUX_DATA(LCD_VCPWC_MARK, PSELB_13_12_11, PTV3_FN), -	PINMUX_DATA(SCIF1_TXD_MARK, PSELC_9_8_00, PTV2_FN), -	PINMUX_DATA(SIM_D_MARK, PSELC_9_8_10, PTV2_FN), -	PINMUX_DATA(SCIF1_RXD_MARK, PSELC_11_10_00, PTV1_FN), -	PINMUX_DATA(SIM_RST_MARK, PSELC_11_10_10, PTV1_FN), -	PINMUX_DATA(SCIF1_SCK_MARK, PSELD_1_0_00, PTV0_FN), -	PINMUX_DATA(SIM_CLK_MARK, PSELD_1_0_10, PTV0_FN), -}; - -static struct pinmux_gpio pinmux_gpios[] = { -	/* PTA */ -	PINMUX_GPIO(GPIO_PTA7, PTA7_DATA), -	PINMUX_GPIO(GPIO_PTA6, PTA6_DATA), -	PINMUX_GPIO(GPIO_PTA5, PTA5_DATA), -	PINMUX_GPIO(GPIO_PTA4, PTA4_DATA), -	PINMUX_GPIO(GPIO_PTA3, PTA3_DATA), -	PINMUX_GPIO(GPIO_PTA2, PTA2_DATA), -	PINMUX_GPIO(GPIO_PTA1, PTA1_DATA), -	PINMUX_GPIO(GPIO_PTA0, PTA0_DATA), - -	/* PTB */ -	PINMUX_GPIO(GPIO_PTB7, PTB7_DATA), -	PINMUX_GPIO(GPIO_PTB6, PTB6_DATA), -	PINMUX_GPIO(GPIO_PTB5, PTB5_DATA), -	PINMUX_GPIO(GPIO_PTB4, PTB4_DATA), -	PINMUX_GPIO(GPIO_PTB3, PTB3_DATA), -	PINMUX_GPIO(GPIO_PTB2, PTB2_DATA), -	PINMUX_GPIO(GPIO_PTB1, PTB1_DATA), -	PINMUX_GPIO(GPIO_PTB0, PTB0_DATA), - -	/* PTC */ -	PINMUX_GPIO(GPIO_PTC7, PTC7_DATA), -	PINMUX_GPIO(GPIO_PTC6, PTC6_DATA), -	PINMUX_GPIO(GPIO_PTC5, PTC5_DATA), -	PINMUX_GPIO(GPIO_PTC4, PTC4_DATA), -	PINMUX_GPIO(GPIO_PTC3, PTC3_DATA), -	PINMUX_GPIO(GPIO_PTC2, PTC2_DATA), -	PINMUX_GPIO(GPIO_PTC1, PTC1_DATA), -	PINMUX_GPIO(GPIO_PTC0, PTC0_DATA), - -	/* PTD */ -	PINMUX_GPIO(GPIO_PTD7, PTD7_DATA), -	PINMUX_GPIO(GPIO_PTD6, PTD6_DATA), -	PINMUX_GPIO(GPIO_PTD5, PTD5_DATA), -	PINMUX_GPIO(GPIO_PTD4, PTD4_DATA), -	PINMUX_GPIO(GPIO_PTD3, PTD3_DATA), -	PINMUX_GPIO(GPIO_PTD2, PTD2_DATA), -	PINMUX_GPIO(GPIO_PTD1, PTD1_DATA), -	PINMUX_GPIO(GPIO_PTD0, PTD0_DATA), - -	/* PTE */ -	PINMUX_GPIO(GPIO_PTE6, PTE6_DATA), -	PINMUX_GPIO(GPIO_PTE5, PTE5_DATA), -	PINMUX_GPIO(GPIO_PTE4, PTE4_DATA), -	PINMUX_GPIO(GPIO_PTE3, PTE3_DATA), -	PINMUX_GPIO(GPIO_PTE2, PTE2_DATA), -	PINMUX_GPIO(GPIO_PTE1, PTE1_DATA), -	PINMUX_GPIO(GPIO_PTE0, PTE0_DATA), - -	/* PTF */ -	PINMUX_GPIO(GPIO_PTF6, PTF6_DATA), -	PINMUX_GPIO(GPIO_PTF5, PTF5_DATA), -	PINMUX_GPIO(GPIO_PTF4, PTF4_DATA), -	PINMUX_GPIO(GPIO_PTF3, PTF3_DATA), -	PINMUX_GPIO(GPIO_PTF2, PTF2_DATA), -	PINMUX_GPIO(GPIO_PTF1, PTF1_DATA), -	PINMUX_GPIO(GPIO_PTF0, PTF0_DATA), - -	/* PTG */ -	PINMUX_GPIO(GPIO_PTG6, PTG6_DATA), -	PINMUX_GPIO(GPIO_PTG5, PTG5_DATA), -	PINMUX_GPIO(GPIO_PTG4, PTG4_DATA), -	PINMUX_GPIO(GPIO_PTG3, PTG3_DATA), -	PINMUX_GPIO(GPIO_PTG2, PTG2_DATA), -	PINMUX_GPIO(GPIO_PTG1, PTG1_DATA), -	PINMUX_GPIO(GPIO_PTG0, PTG0_DATA), - -	/* PTH */ -	PINMUX_GPIO(GPIO_PTH6, PTH6_DATA), -	PINMUX_GPIO(GPIO_PTH5, PTH5_DATA), -	PINMUX_GPIO(GPIO_PTH4, PTH4_DATA), -	PINMUX_GPIO(GPIO_PTH3, PTH3_DATA), -	PINMUX_GPIO(GPIO_PTH2, PTH2_DATA), -	PINMUX_GPIO(GPIO_PTH1, PTH1_DATA), -	PINMUX_GPIO(GPIO_PTH0, PTH0_DATA), - -	/* PTJ */ -	PINMUX_GPIO(GPIO_PTJ6, PTJ6_DATA), -	PINMUX_GPIO(GPIO_PTJ5, PTJ5_DATA), -	PINMUX_GPIO(GPIO_PTJ4, PTJ4_DATA), -	PINMUX_GPIO(GPIO_PTJ3, PTJ3_DATA), -	PINMUX_GPIO(GPIO_PTJ2, PTJ2_DATA), -	PINMUX_GPIO(GPIO_PTJ1, PTJ1_DATA), -	PINMUX_GPIO(GPIO_PTJ0, PTJ0_DATA), - -	/* PTK */ -	PINMUX_GPIO(GPIO_PTK3, PTK3_DATA), -	PINMUX_GPIO(GPIO_PTK2, PTK2_DATA), -	PINMUX_GPIO(GPIO_PTK1, PTK1_DATA), -	PINMUX_GPIO(GPIO_PTK0, PTK0_DATA), - -	/* PTL */ -	PINMUX_GPIO(GPIO_PTL7, PTL7_DATA), -	PINMUX_GPIO(GPIO_PTL6, PTL6_DATA), -	PINMUX_GPIO(GPIO_PTL5, PTL5_DATA), -	PINMUX_GPIO(GPIO_PTL4, PTL4_DATA), -	PINMUX_GPIO(GPIO_PTL3, PTL3_DATA), - -	/* PTM */ -	PINMUX_GPIO(GPIO_PTM7, PTM7_DATA), -	PINMUX_GPIO(GPIO_PTM6, PTM6_DATA), -	PINMUX_GPIO(GPIO_PTM5, PTM5_DATA), -	PINMUX_GPIO(GPIO_PTM4, PTM4_DATA), -	PINMUX_GPIO(GPIO_PTM3, PTM3_DATA), -	PINMUX_GPIO(GPIO_PTM2, PTM2_DATA), -	PINMUX_GPIO(GPIO_PTM1, PTM1_DATA), -	PINMUX_GPIO(GPIO_PTM0, PTM0_DATA), - -	/* PTP */ -	PINMUX_GPIO(GPIO_PTP4, PTP4_DATA), -	PINMUX_GPIO(GPIO_PTP3, PTP3_DATA), -	PINMUX_GPIO(GPIO_PTP2, PTP2_DATA), -	PINMUX_GPIO(GPIO_PTP1, PTP1_DATA), -	PINMUX_GPIO(GPIO_PTP0, PTP0_DATA), - -	/* PTR */ -	PINMUX_GPIO(GPIO_PTR7, PTR7_DATA), -	PINMUX_GPIO(GPIO_PTR6, PTR6_DATA), -	PINMUX_GPIO(GPIO_PTR5, PTR5_DATA), -	PINMUX_GPIO(GPIO_PTR4, PTR4_DATA), -	PINMUX_GPIO(GPIO_PTR3, PTR3_DATA), -	PINMUX_GPIO(GPIO_PTR2, PTR2_DATA), -	PINMUX_GPIO(GPIO_PTR1, PTR1_DATA), -	PINMUX_GPIO(GPIO_PTR0, PTR0_DATA), - -	/* PTS */ -	PINMUX_GPIO(GPIO_PTS4, PTS4_DATA), -	PINMUX_GPIO(GPIO_PTS3, PTS3_DATA), -	PINMUX_GPIO(GPIO_PTS2, PTS2_DATA), -	PINMUX_GPIO(GPIO_PTS1, PTS1_DATA), -	PINMUX_GPIO(GPIO_PTS0, PTS0_DATA), - -	/* PTT */ -	PINMUX_GPIO(GPIO_PTT4, PTT4_DATA), -	PINMUX_GPIO(GPIO_PTT3, PTT3_DATA), -	PINMUX_GPIO(GPIO_PTT2, PTT2_DATA), -	PINMUX_GPIO(GPIO_PTT1, PTT1_DATA), -	PINMUX_GPIO(GPIO_PTT0, PTT0_DATA), - -	/* PTU */ -	PINMUX_GPIO(GPIO_PTU4, PTU4_DATA), -	PINMUX_GPIO(GPIO_PTU3, PTU3_DATA), -	PINMUX_GPIO(GPIO_PTU2, PTU2_DATA), -	PINMUX_GPIO(GPIO_PTU1, PTU1_DATA), -	PINMUX_GPIO(GPIO_PTU0, PTU0_DATA), - -	/* PTV */ -	PINMUX_GPIO(GPIO_PTV4, PTV4_DATA), -	PINMUX_GPIO(GPIO_PTV3, PTV3_DATA), -	PINMUX_GPIO(GPIO_PTV2, PTV2_DATA), -	PINMUX_GPIO(GPIO_PTV1, PTV1_DATA), -	PINMUX_GPIO(GPIO_PTV0, PTV0_DATA), - -	/* BSC */ -	PINMUX_GPIO(GPIO_FN_D31, D31_MARK), -	PINMUX_GPIO(GPIO_FN_D30, D30_MARK), -	PINMUX_GPIO(GPIO_FN_D29, D29_MARK), -	PINMUX_GPIO(GPIO_FN_D28, D28_MARK), -	PINMUX_GPIO(GPIO_FN_D27, D27_MARK), -	PINMUX_GPIO(GPIO_FN_D26, D26_MARK), -	PINMUX_GPIO(GPIO_FN_D25, D25_MARK), -	PINMUX_GPIO(GPIO_FN_D24, D24_MARK), -	PINMUX_GPIO(GPIO_FN_D23, D23_MARK), -	PINMUX_GPIO(GPIO_FN_D22, D22_MARK), -	PINMUX_GPIO(GPIO_FN_D21, D21_MARK), -	PINMUX_GPIO(GPIO_FN_D20, D20_MARK), -	PINMUX_GPIO(GPIO_FN_D19, D19_MARK), -	PINMUX_GPIO(GPIO_FN_D18, D18_MARK), -	PINMUX_GPIO(GPIO_FN_D17, D17_MARK), -	PINMUX_GPIO(GPIO_FN_D16, D16_MARK), -	PINMUX_GPIO(GPIO_FN_IOIS16, IOIS16_MARK), -	PINMUX_GPIO(GPIO_FN_RAS, RAS_MARK), -	PINMUX_GPIO(GPIO_FN_CAS, CAS_MARK), -	PINMUX_GPIO(GPIO_FN_CKE, CKE_MARK), -	PINMUX_GPIO(GPIO_FN_CS5B_CE1A, CS5B_CE1A_MARK), -	PINMUX_GPIO(GPIO_FN_CS6B_CE1B, CS6B_CE1B_MARK), -	PINMUX_GPIO(GPIO_FN_A25, A25_MARK), -	PINMUX_GPIO(GPIO_FN_A24, A24_MARK), -	PINMUX_GPIO(GPIO_FN_A23, A23_MARK), -	PINMUX_GPIO(GPIO_FN_A22, A22_MARK), -	PINMUX_GPIO(GPIO_FN_A21, A21_MARK), -	PINMUX_GPIO(GPIO_FN_A20, A20_MARK), -	PINMUX_GPIO(GPIO_FN_A19, A19_MARK), -	PINMUX_GPIO(GPIO_FN_A0, A0_MARK), -	PINMUX_GPIO(GPIO_FN_REFOUT, REFOUT_MARK), -	PINMUX_GPIO(GPIO_FN_IRQOUT, IRQOUT_MARK), - -	/* LCDC */ -	PINMUX_GPIO(GPIO_FN_LCD_DATA15, LCD_DATA15_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA14, LCD_DATA14_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA13, LCD_DATA13_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA12, LCD_DATA12_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA11, LCD_DATA11_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA10, LCD_DATA10_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA9, LCD_DATA9_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA8, LCD_DATA8_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA7, LCD_DATA7_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA6, LCD_DATA6_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA5, LCD_DATA5_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA4, LCD_DATA4_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA3, LCD_DATA3_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA2, LCD_DATA2_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA1, LCD_DATA1_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DATA0, LCD_DATA0_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_M_DISP, LCD_M_DISP_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_CL1, LCD_CL1_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_CL2, LCD_CL2_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_DON, LCD_DON_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_FLM, LCD_FLM_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_VEPWC, LCD_VEPWC_MARK), -	PINMUX_GPIO(GPIO_FN_LCD_VCPWC, LCD_VCPWC_MARK), - -	/* AFEIF */ -	PINMUX_GPIO(GPIO_FN_AFE_RXIN, AFE_RXIN_MARK), -	PINMUX_GPIO(GPIO_FN_AFE_RDET, AFE_RDET_MARK), -	PINMUX_GPIO(GPIO_FN_AFE_FS, AFE_FS_MARK), -	PINMUX_GPIO(GPIO_FN_AFE_TXOUT, AFE_TXOUT_MARK), -	PINMUX_GPIO(GPIO_FN_AFE_SCLK, AFE_SCLK_MARK), -	PINMUX_GPIO(GPIO_FN_AFE_RLYCNT, AFE_RLYCNT_MARK), -	PINMUX_GPIO(GPIO_FN_AFE_HC1, AFE_HC1_MARK), - -	/* IIC */ -	PINMUX_GPIO(GPIO_FN_IIC_SCL, IIC_SCL_MARK), -	PINMUX_GPIO(GPIO_FN_IIC_SDA, IIC_SDA_MARK), - -	/* DAC */ -	PINMUX_GPIO(GPIO_FN_DA1, DA1_MARK), -	PINMUX_GPIO(GPIO_FN_DA0, DA0_MARK), - -	/* ADC */ -	PINMUX_GPIO(GPIO_FN_AN3, AN3_MARK), -	PINMUX_GPIO(GPIO_FN_AN2, AN2_MARK), -	PINMUX_GPIO(GPIO_FN_AN1, AN1_MARK), -	PINMUX_GPIO(GPIO_FN_AN0, AN0_MARK), -	PINMUX_GPIO(GPIO_FN_ADTRG, ADTRG_MARK), - -	/* USB */ -	PINMUX_GPIO(GPIO_FN_USB1D_RCV, USB1D_RCV_MARK), -	PINMUX_GPIO(GPIO_FN_USB1D_TXSE0, USB1D_TXSE0_MARK), -	PINMUX_GPIO(GPIO_FN_USB1D_TXDPLS, USB1D_TXDPLS_MARK), -	PINMUX_GPIO(GPIO_FN_USB1D_DMNS, USB1D_DMNS_MARK), -	PINMUX_GPIO(GPIO_FN_USB1D_DPLS, USB1D_DPLS_MARK), -	PINMUX_GPIO(GPIO_FN_USB1D_SPEED, USB1D_SPEED_MARK), -	PINMUX_GPIO(GPIO_FN_USB1D_TXENL, USB1D_TXENL_MARK), - -	PINMUX_GPIO(GPIO_FN_USB2_PWR_EN, USB2_PWR_EN_MARK), -	PINMUX_GPIO(GPIO_FN_USB1_PWR_EN_USBF_UPLUP, -		    USB1_PWR_EN_USBF_UPLUP_MARK), -	PINMUX_GPIO(GPIO_FN_USB1D_SUSPEND, USB1D_SUSPEND_MARK), - -	/* INTC */ -	PINMUX_GPIO(GPIO_FN_IRQ5, IRQ5_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ4, IRQ4_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ3_IRL3, IRQ3_IRL3_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ2_IRL2, IRQ2_IRL2_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ1_IRL1, IRQ1_IRL1_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ0_IRL0, IRQ0_IRL0_MARK), - -	/* PCC */ -	PINMUX_GPIO(GPIO_FN_PCC_REG, PCC_REG_MARK), -	PINMUX_GPIO(GPIO_FN_PCC_DRV, PCC_DRV_MARK), -	PINMUX_GPIO(GPIO_FN_PCC_BVD2, PCC_BVD2_MARK), -	PINMUX_GPIO(GPIO_FN_PCC_BVD1, PCC_BVD1_MARK), -	PINMUX_GPIO(GPIO_FN_PCC_CD2, PCC_CD2_MARK), -	PINMUX_GPIO(GPIO_FN_PCC_CD1, PCC_CD1_MARK), -	PINMUX_GPIO(GPIO_FN_PCC_RESET, PCC_RESET_MARK), -	PINMUX_GPIO(GPIO_FN_PCC_RDY, PCC_RDY_MARK), -	PINMUX_GPIO(GPIO_FN_PCC_VS2, PCC_VS2_MARK), -	PINMUX_GPIO(GPIO_FN_PCC_VS1, PCC_VS1_MARK), - -	/* HUDI */ -	PINMUX_GPIO(GPIO_FN_AUDATA3, AUDATA3_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA2, AUDATA2_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA1, AUDATA1_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA0, AUDATA0_MARK), -	PINMUX_GPIO(GPIO_FN_AUDCK, AUDCK_MARK), -	PINMUX_GPIO(GPIO_FN_AUDSYNC, AUDSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_ASEBRKAK, ASEBRKAK_MARK), -	PINMUX_GPIO(GPIO_FN_TRST, TRST_MARK), -	PINMUX_GPIO(GPIO_FN_TMS, TMS_MARK), -	PINMUX_GPIO(GPIO_FN_TDO, TDO_MARK), -	PINMUX_GPIO(GPIO_FN_TDI, TDI_MARK), -	PINMUX_GPIO(GPIO_FN_TCK, TCK_MARK), - -	/* DMAC */ -	PINMUX_GPIO(GPIO_FN_DACK1, DACK1_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ1, DREQ1_MARK), -	PINMUX_GPIO(GPIO_FN_DACK0, DACK0_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ0, DREQ0_MARK), -	PINMUX_GPIO(GPIO_FN_TEND1, TEND1_MARK), -	PINMUX_GPIO(GPIO_FN_TEND0, TEND0_MARK), - -	/* SIOF0 */ -	PINMUX_GPIO(GPIO_FN_SIOF0_SYNC, SIOF0_SYNC_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_MCLK, SIOF0_MCLK_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_TXD, SIOF0_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_RXD, SIOF0_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_SCK, SIOF0_SCK_MARK), - -	/* SIOF1 */ -	PINMUX_GPIO(GPIO_FN_SIOF1_SYNC, SIOF1_SYNC_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_MCLK, SIOF1_MCLK_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_TXD, SIOF1_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_RXD, SIOF1_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_SCK, SIOF1_SCK_MARK), - -	/* SCIF0 */ -	PINMUX_GPIO(GPIO_FN_SCIF0_TXD, SCIF0_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_RXD, SCIF0_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_RTS, SCIF0_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_CTS, SCIF0_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_SCK, SCIF0_SCK_MARK), - -	/* SCIF1 */ -	PINMUX_GPIO(GPIO_FN_SCIF1_TXD, SCIF1_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_RXD, SCIF1_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_RTS, SCIF1_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_CTS, SCIF1_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_SCK, SCIF1_SCK_MARK), - -	/* TPU */ -	PINMUX_GPIO(GPIO_FN_TPU_TO1, TPU_TO1_MARK), -	PINMUX_GPIO(GPIO_FN_TPU_TO0, TPU_TO0_MARK), -	PINMUX_GPIO(GPIO_FN_TPU_TI3B, TPU_TI3B_MARK), -	PINMUX_GPIO(GPIO_FN_TPU_TI3A, TPU_TI3A_MARK), -	PINMUX_GPIO(GPIO_FN_TPU_TI2B, TPU_TI2B_MARK), -	PINMUX_GPIO(GPIO_FN_TPU_TI2A, TPU_TI2A_MARK), -	PINMUX_GPIO(GPIO_FN_TPU_TO3, TPU_TO3_MARK), -	PINMUX_GPIO(GPIO_FN_TPU_TO2, TPU_TO2_MARK), - -	/* SIM */ -	PINMUX_GPIO(GPIO_FN_SIM_D, SIM_D_MARK), -	PINMUX_GPIO(GPIO_FN_SIM_CLK, SIM_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SIM_RST, SIM_RST_MARK), - -	/* MMC */ -	PINMUX_GPIO(GPIO_FN_MMC_DAT, MMC_DAT_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_CMD, MMC_CMD_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_CLK, MMC_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_VDDON, MMC_VDDON_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_ODMOD, MMC_ODMOD_MARK), - -	/* SYSC */ -	PINMUX_GPIO(GPIO_FN_STATUS0, STATUS0_MARK), -	PINMUX_GPIO(GPIO_FN_STATUS1, STATUS1_MARK), -}; - -static struct pinmux_cfg_reg pinmux_config_regs[] = { -	{ PINMUX_CFG_REG("PACR", 0xa4050100, 16, 2) { -		PTA7_FN, PTA7_OUT, PTA7_IN_PU, PTA7_IN, -		PTA6_FN, PTA6_OUT, PTA6_IN_PU, PTA6_IN, -		PTA5_FN, PTA5_OUT, PTA5_IN_PU, PTA5_IN, -		PTA4_FN, PTA4_OUT, PTA4_IN_PU, PTA4_IN, -		PTA3_FN, PTA3_OUT, PTA3_IN_PU, PTA3_IN, -		PTA2_FN, PTA2_OUT, PTA2_IN_PU, PTA2_IN, -		PTA1_FN, PTA1_OUT, PTA1_IN_PU, PTA1_IN, -		PTA0_FN, PTA0_OUT, PTA0_IN_PU, PTA0_IN } -	}, -	{ PINMUX_CFG_REG("PBCR", 0xa4050102, 16, 2) { -		PTB7_FN, PTB7_OUT, PTB7_IN_PU, PTB7_IN, -		PTB6_FN, PTB6_OUT, PTB6_IN_PU, PTB6_IN, -		PTB5_FN, PTB5_OUT, PTB5_IN_PU, PTB5_IN, -		PTB4_FN, PTB4_OUT, PTB4_IN_PU, PTB4_IN, -		PTB3_FN, PTB3_OUT, PTB3_IN_PU, PTB3_IN, -		PTB2_FN, PTB2_OUT, PTB2_IN_PU, PTB2_IN, -		PTB1_FN, PTB1_OUT, PTB1_IN_PU, PTB1_IN, -		PTB0_FN, PTB0_OUT, PTB0_IN_PU, PTB0_IN } -	}, -	{ PINMUX_CFG_REG("PCCR", 0xa4050104, 16, 2) { -		PTC7_FN, PTC7_OUT, PTC7_IN_PU, PTC7_IN, -		PTC6_FN, PTC6_OUT, PTC6_IN_PU, PTC6_IN, -		PTC5_FN, PTC5_OUT, PTC5_IN_PU, PTC5_IN, -		PTC4_FN, PTC4_OUT, PTC4_IN_PU, PTC4_IN, -		PTC3_FN, PTC3_OUT, PTC3_IN_PU, PTC3_IN, -		PTC2_FN, PTC2_OUT, PTC2_IN_PU, PTC2_IN, -		PTC1_FN, PTC1_OUT, PTC1_IN_PU, PTC1_IN, -		PTC0_FN, PTC0_OUT, PTC0_IN_PU, PTC0_IN } -	}, -	{ PINMUX_CFG_REG("PDCR", 0xa4050106, 16, 2) { -		PTD7_FN, PTD7_OUT, PTD7_IN_PU, PTD7_IN, -		PTD6_FN, PTD6_OUT, PTD6_IN_PU, PTD6_IN, -		PTD5_FN, PTD5_OUT, PTD5_IN_PU, PTD5_IN, -		PTD4_FN, PTD4_OUT, PTD4_IN_PU, PTD4_IN, -		PTD3_FN, PTD3_OUT, PTD3_IN_PU, PTD3_IN, -		PTD2_FN, PTD2_OUT, PTD2_IN_PU, PTD2_IN, -		PTD1_FN, PTD1_OUT, PTD1_IN_PU, PTD1_IN, -		PTD0_FN, PTD0_OUT, PTD0_IN_PU, PTD0_IN } -	}, -	{ PINMUX_CFG_REG("PECR", 0xa4050108, 16, 2) { -		0, 0, 0, 0, -		PTE6_FN, 0, 0, PTE6_IN, -		PTE5_FN, 0, 0, PTE5_IN, -		PTE4_FN, PTE4_OUT, PTE4_IN_PU, PTE4_IN, -		PTE3_FN, PTE3_OUT, PTE3_IN_PU, PTE3_IN, -		PTE2_FN, PTE2_OUT, PTE2_IN_PU, PTE2_IN, -		PTE1_FN, PTE1_OUT, PTE1_IN_PU, PTE1_IN, -		PTE0_FN, PTE0_OUT, PTE0_IN_PU, PTE0_IN } -	}, -	{ PINMUX_CFG_REG("PFCR", 0xa405010a, 16, 2) { -		0, 0, 0, 0, -		PTF6_FN, 0, 0, PTF6_IN, -		PTF5_FN, 0, 0, PTF5_IN, -		PTF4_FN, 0, 0, PTF4_IN, -		PTF3_FN, 0, 0, PTF3_IN, -		PTF2_FN, 0, 0, PTF2_IN, -		PTF1_FN, 0, 0, PTF1_IN, -		PTF0_FN, 0, 0, PTF0_IN } -	}, -	{ PINMUX_CFG_REG("PGCR", 0xa405010c, 16, 2) { -		0, 0, 0, 0, -		PTG6_FN, PTG6_OUT, PTG6_IN_PU, PTG6_IN, -		PTG5_FN, PTG5_OUT, PTG5_IN_PU, PTG5_IN, -		PTG4_FN, PTG4_OUT, PTG4_IN_PU, PTG4_IN, -		PTG3_FN, PTG3_OUT, PTG3_IN_PU, PTG3_IN, -		PTG2_FN, PTG2_OUT, PTG2_IN_PU, PTG2_IN, -		PTG1_FN, PTG1_OUT, PTG1_IN_PU, PTG1_IN, -		PTG0_FN, PTG0_OUT, PTG0_IN_PU, PTG0_IN } -	}, -	{ PINMUX_CFG_REG("PHCR", 0xa405010e, 16, 2) { -		0, 0, 0, 0, -		PTH6_FN, PTH6_OUT, PTH6_IN_PU, PTH6_IN, -		PTH5_FN, PTH5_OUT, PTH5_IN_PU, PTH5_IN, -		PTH4_FN, PTH4_OUT, PTH4_IN_PU, PTH4_IN, -		PTH3_FN, PTH3_OUT, PTH3_IN_PU, PTH3_IN, -		PTH2_FN, PTH2_OUT, PTH2_IN_PU, PTH2_IN, -		PTH1_FN, PTH1_OUT, PTH1_IN_PU, PTH1_IN, -		PTH0_FN, PTH0_OUT, PTH0_IN_PU, PTH0_IN } -	}, -	{ PINMUX_CFG_REG("PJCR", 0xa4050110, 16, 2) { -		0, 0, 0, 0, -		PTJ6_FN, PTJ6_OUT, PTJ6_IN_PU, PTJ6_IN, -		PTJ5_FN, PTJ5_OUT, PTJ5_IN_PU, PTJ5_IN, -		PTJ4_FN, PTJ4_OUT, PTJ4_IN_PU, PTJ4_IN, -		PTJ3_FN, PTJ3_OUT, PTJ3_IN_PU, PTJ3_IN, -		PTJ2_FN, PTJ2_OUT, PTJ2_IN_PU, PTJ2_IN, -		PTJ1_FN, PTJ1_OUT, PTJ1_IN_PU, PTJ1_IN, -		PTJ0_FN, PTJ0_OUT, PTJ0_IN_PU, PTJ0_IN } -	}, -	{ PINMUX_CFG_REG("PKCR", 0xa4050112, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTK3_FN, PTK3_OUT, PTK3_IN_PU, PTK3_IN, -		PTK2_FN, PTK2_OUT, PTK2_IN_PU, PTK2_IN, -		PTK1_FN, PTK1_OUT, PTK1_IN_PU, PTK1_IN, -		PTK0_FN, PTK0_OUT, PTK0_IN_PU, PTK0_IN } -	}, -	{ PINMUX_CFG_REG("PLCR", 0xa4050114, 16, 2) { -		PTL7_FN, PTL7_OUT, PTL7_IN_PU, PTL7_IN, -		PTL6_FN, PTL6_OUT, PTL6_IN_PU, PTL6_IN, -		PTL5_FN, PTL5_OUT, PTL5_IN_PU, PTL5_IN, -		PTL4_FN, PTL4_OUT, PTL4_IN_PU, PTL4_IN, -		PTL3_FN, PTL3_OUT, PTL3_IN_PU, PTL3_IN, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PMCR", 0xa4050116, 16, 2) { -		PTM7_FN, PTM7_OUT, PTM7_IN_PU, PTM7_IN, -		PTM6_FN, PTM6_OUT, PTM6_IN_PU, PTM6_IN, -		PTM5_FN, PTM5_OUT, PTM5_IN_PU, PTM5_IN, -		PTM4_FN, PTM4_OUT, PTM4_IN_PU, PTM4_IN, -		PTM3_FN, PTM3_OUT, PTM3_IN_PU, PTM3_IN, -		PTM2_FN, PTM2_OUT, PTM2_IN_PU, PTM2_IN, -		PTM1_FN, PTM1_OUT, PTM1_IN_PU, PTM1_IN, -		PTM0_FN, PTM0_OUT, PTM0_IN_PU, PTM0_IN } +static struct resource sh7720_pfc_resources[] = { +	[0] = { +		.start	= 0xa4050100, +		.end	= 0xa405016f, +		.flags	= IORESOURCE_MEM,  	}, -	{ PINMUX_CFG_REG("PPCR", 0xa4050118, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTP4_FN, PTP4_OUT, PTP4_IN_PU, PTP4_IN, -		PTP3_FN, PTP3_OUT, PTP3_IN_PU, PTP3_IN, -		PTP2_FN, PTP2_OUT, PTP2_IN_PU, PTP2_IN, -		PTP1_FN, PTP1_OUT, PTP1_IN_PU, PTP1_IN, -		PTP0_FN, PTP0_OUT, PTP0_IN_PU, PTP0_IN } -	}, -	{ PINMUX_CFG_REG("PRCR", 0xa405011a, 16, 2) { -		PTR7_FN, PTR7_OUT, PTR7_IN_PU, PTR7_IN, -		PTR6_FN, PTR6_OUT, PTR6_IN_PU, PTR6_IN, -		PTR5_FN, PTR5_OUT, PTR5_IN_PU, PTR5_IN, -		PTR4_FN, PTR4_OUT, PTR4_IN_PU, PTR4_IN, -		PTR3_FN, PTR3_OUT, PTR3_IN_PU, PTR3_IN, -		PTR2_FN, PTR2_OUT, PTR2_IN_PU, PTR2_IN, -		PTR1_FN, PTR1_OUT, PTR1_IN_PU, PTR1_IN, -		PTR0_FN, PTR0_OUT, PTR0_IN_PU, PTR0_IN } -	}, -	{ PINMUX_CFG_REG("PSCR", 0xa405011c, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTS4_FN, PTS4_OUT, PTS4_IN_PU, PTS4_IN, -		PTS3_FN, PTS3_OUT, PTS3_IN_PU, PTS3_IN, -		PTS2_FN, PTS2_OUT, PTS2_IN_PU, PTS2_IN, -		PTS1_FN, PTS1_OUT, PTS1_IN_PU, PTS1_IN, -		PTS0_FN, PTS0_OUT, PTS0_IN_PU, PTS0_IN } -	}, -	{ PINMUX_CFG_REG("PTCR", 0xa405011e, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTT4_FN, PTT4_OUT, PTT4_IN_PU, PTT4_IN, -		PTT3_FN, PTT3_OUT, PTT3_IN_PU, PTT3_IN, -		PTT2_FN, PTT2_OUT, PTT2_IN_PU, PTT2_IN, -		PTT1_FN, PTT1_OUT, PTT1_IN_PU, PTT1_IN, -		PTT0_FN, PTT0_OUT, PTT0_IN_PU, PTT0_IN } -	}, -	{ PINMUX_CFG_REG("PUCR", 0xa4050120, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTU4_FN, PTU4_OUT, PTU4_IN_PU, PTU4_IN, -		PTU3_FN, PTU3_OUT, PTU3_IN_PU, PTU3_IN, -		PTU2_FN, PTU2_OUT, PTU2_IN_PU, PTU2_IN, -		PTU1_FN, PTU1_OUT, PTU1_IN_PU, PTU1_IN, -		PTU0_FN, PTU0_OUT, PTU0_IN_PU, PTU0_IN } -	}, -	{ PINMUX_CFG_REG("PVCR", 0xa4050122, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTV4_FN, PTV4_OUT, PTV4_IN_PU, PTV4_IN, -		PTV3_FN, PTV3_OUT, PTV3_IN_PU, PTV3_IN, -		PTV2_FN, PTV2_OUT, PTV2_IN_PU, PTV2_IN, -		PTV1_FN, PTV1_OUT, PTV1_IN_PU, PTV1_IN, -		PTV0_FN, PTV0_OUT, PTV0_IN_PU, PTV0_IN } -	}, -	{} -}; - -static struct pinmux_data_reg pinmux_data_regs[] = { -	{ PINMUX_DATA_REG("PADR", 0xa4050140, 8) { -		PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -		PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA } -	}, -	{ PINMUX_DATA_REG("PBDR", 0xa4050142, 8) { -		PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -		PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA } -	}, -	{ PINMUX_DATA_REG("PCDR", 0xa4050144, 8) { -		PTC7_DATA, PTC6_DATA, PTC5_DATA, PTC4_DATA, -		PTC3_DATA, PTC2_DATA, PTC1_DATA, PTC0_DATA } -	}, -	{ PINMUX_DATA_REG("PDDR", 0xa4050126, 8) { -		PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -		PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA } -	}, -	{ PINMUX_DATA_REG("PEDR", 0xa4050148, 8) { -		0, PTE6_DATA, PTE5_DATA, PTE4_DATA, -		PTE3_DATA, PTE2_DATA, PTE1_DATA, PTE0_DATA } -	}, -	{ PINMUX_DATA_REG("PFDR", 0xa405014a, 8) { -		0, PTF6_DATA, PTF5_DATA, PTF4_DATA, -		PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA } -	}, -	{ PINMUX_DATA_REG("PGDR", 0xa405014c, 8) { -		0, PTG6_DATA, PTG5_DATA, PTG4_DATA, -		PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA } -	}, -	{ PINMUX_DATA_REG("PHDR", 0xa405014e, 8) { -		0, PTH6_DATA, PTH5_DATA, PTH4_DATA, -		PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA } -	}, -	{ PINMUX_DATA_REG("PJDR", 0xa4050150, 8) { -		0, PTJ6_DATA, PTJ5_DATA, PTJ4_DATA, -		PTJ3_DATA, PTJ2_DATA, PTJ1_DATA, PTJ0_DATA } -	}, -	{ PINMUX_DATA_REG("PKDR", 0xa4050152, 8) { -		0, 0, 0, 0, -		PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA } -	}, -	{ PINMUX_DATA_REG("PLDR", 0xa4050154, 8) { -		PTL7_DATA, PTL6_DATA, PTL5_DATA, PTL4_DATA, -		PTL3_DATA, 0, 0, 0 } -	}, -	{ PINMUX_DATA_REG("PMDR", 0xa4050156, 8) { -		PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -		PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA } -	}, -	{ PINMUX_DATA_REG("PPDR", 0xa4050158, 8) { -		0, 0, 0, PTP4_DATA, -		PTP3_DATA, PTP2_DATA, PTP1_DATA, PTP0_DATA } -	}, -	{ PINMUX_DATA_REG("PRDR", 0xa405015a, 8) { -		PTR7_DATA, PTR6_DATA, PTR5_DATA, PTR4_DATA, -		PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA } -	}, -	{ PINMUX_DATA_REG("PSDR", 0xa405015c, 8) { -		0, 0, 0, PTS4_DATA, -		PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA } -	}, -	{ PINMUX_DATA_REG("PTDR", 0xa405015e, 8) { -		0, 0, 0, PTT4_DATA, -		PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA } -	}, -	{ PINMUX_DATA_REG("PUDR", 0xa4050160, 8) { -		0, 0, 0, PTU4_DATA, -		PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA } -	}, -	{ PINMUX_DATA_REG("PVDR", 0xa4050162, 8) { -		0, 0, 0, PTV4_DATA, -		PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA } -	}, -	{ }, -}; - -static struct pinmux_info sh7720_pinmux_info = { -	.name = "sh7720_pfc", -	.reserved_id = PINMUX_RESERVED, -	.data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, -	.input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, -	.input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, -	.output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, -	.mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, -	.function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, - -	.first_gpio = GPIO_PTA7, -	.last_gpio = GPIO_FN_STATUS1, - -	.gpios = pinmux_gpios, -	.cfg_regs = pinmux_config_regs, -	.data_regs = pinmux_data_regs, - -	.gpio_data = pinmux_data, -	.gpio_data_size = ARRAY_SIZE(pinmux_data),  };  static int __init plat_pinmux_setup(void)  { -	return register_pinmux(&sh7720_pinmux_info); +	return sh_pfc_register("pfc-sh7720", sh7720_pfc_resources, +			       ARRAY_SIZE(sh7720_pfc_resources));  } -  arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh3/probe.c b/arch/sh/kernel/cpu/sh3/probe.c index bf23c322e16..426e1e1dced 100644 --- a/arch/sh/kernel/cpu/sh3/probe.c +++ b/arch/sh/kernel/cpu/sh3/probe.c @@ -16,7 +16,7 @@  #include <asm/cache.h>  #include <asm/io.h> -void __cpuinit cpu_probe(void) +void cpu_probe(void)  {  	unsigned long addr0, addr1, data0, data1, data2, data3; diff --git a/arch/sh/kernel/cpu/sh3/serial-sh770x.c b/arch/sh/kernel/cpu/sh3/serial-sh770x.c new file mode 100644 index 00000000000..4f7242c676b --- /dev/null +++ b/arch/sh/kernel/cpu/sh3/serial-sh770x.c @@ -0,0 +1,33 @@ +#include <linux/serial_sci.h> +#include <linux/serial_core.h> +#include <linux/io.h> +#include <cpu/serial.h> + +#define SCPCR 0xA4000116 +#define SCPDR 0xA4000136 + +static void sh770x_sci_init_pins(struct uart_port *port, unsigned int cflag) +{ +	unsigned short data; + +	/* We need to set SCPCR to enable RTS/CTS */ +	data = __raw_readw(SCPCR); +	/* Clear out SCP7MD1,0, SCP6MD1,0, SCP4MD1,0*/ +	__raw_writew(data & 0x0fcf, SCPCR); + +	if (!(cflag & CRTSCTS)) { +		/* We need to set SCPCR to enable RTS/CTS */ +		data = __raw_readw(SCPCR); +		/* Clear out SCP7MD1,0, SCP4MD1,0, +		   Set SCP6MD1,0 = {01} (output)  */ +		__raw_writew((data & 0x0fcf) | 0x1000, SCPCR); + +		data = __raw_readb(SCPDR); +		/* Set /RTS2 (bit6) = 0 */ +		__raw_writeb(data & 0xbf, SCPDR); +	} +} + +struct plat_sci_port_ops sh770x_sci_port_ops = { +	.init_pins	= sh770x_sci_init_pins, +}; diff --git a/arch/sh/kernel/cpu/sh3/serial-sh7710.c b/arch/sh/kernel/cpu/sh3/serial-sh7710.c new file mode 100644 index 00000000000..42190ef6aeb --- /dev/null +++ b/arch/sh/kernel/cpu/sh3/serial-sh7710.c @@ -0,0 +1,20 @@ +#include <linux/serial_sci.h> +#include <linux/serial_core.h> +#include <linux/io.h> +#include <cpu/serial.h> + +#define PACR 0xa4050100 +#define PBCR 0xa4050102 + +static void sh7710_sci_init_pins(struct uart_port *port, unsigned int cflag) +{ +	if (port->mapbase == 0xA4400000) { +		__raw_writew(__raw_readw(PACR) & 0xffc0, PACR); +		__raw_writew(__raw_readw(PBCR) & 0x0fff, PBCR); +	} else if (port->mapbase == 0xA4410000) +		__raw_writew(__raw_readw(PBCR) & 0xf003, PBCR); +} + +struct plat_sci_port_ops sh7710_sci_port_ops = { +	.init_pins	= sh7710_sci_init_pins, +}; diff --git a/arch/sh/kernel/cpu/sh3/serial-sh7720.c b/arch/sh/kernel/cpu/sh3/serial-sh7720.c new file mode 100644 index 00000000000..c4a0336660d --- /dev/null +++ b/arch/sh/kernel/cpu/sh3/serial-sh7720.c @@ -0,0 +1,37 @@ +#include <linux/serial_sci.h> +#include <linux/serial_core.h> +#include <linux/io.h> +#include <cpu/serial.h> +#include <cpu/gpio.h> + +static void sh7720_sci_init_pins(struct uart_port *port, unsigned int cflag) +{ +	unsigned short data; + +	if (cflag & CRTSCTS) { +		/* enable RTS/CTS */ +		if (port->mapbase == 0xa4430000) { /* SCIF0 */ +			/* Clear PTCR bit 9-2; enable all scif pins but sck */ +			data = __raw_readw(PORT_PTCR); +			__raw_writew((data & 0xfc03), PORT_PTCR); +		} else if (port->mapbase == 0xa4438000) { /* SCIF1 */ +			/* Clear PVCR bit 9-2 */ +			data = __raw_readw(PORT_PVCR); +			__raw_writew((data & 0xfc03), PORT_PVCR); +		} +	} else { +		if (port->mapbase == 0xa4430000) { /* SCIF0 */ +			/* Clear PTCR bit 5-2; enable only tx and rx  */ +			data = __raw_readw(PORT_PTCR); +			__raw_writew((data & 0xffc3), PORT_PTCR); +		} else if (port->mapbase == 0xa4438000) { /* SCIF1 */ +			/* Clear PVCR bit 5-2 */ +			data = __raw_readw(PORT_PVCR); +			__raw_writew((data & 0xffc3), PORT_PVCR); +		} +	} +} + +struct plat_sci_port_ops sh7720_sci_port_ops = { +	.init_pins	= sh7720_sci_init_pins, +}; diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7705.c b/arch/sh/kernel/cpu/sh3/setup-sh7705.c index baadd7f54d9..6a72fd14de2 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7705.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7705.c @@ -14,7 +14,9 @@  #include <linux/serial.h>  #include <linux/serial_sci.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <asm/rtc.h> +#include <cpu/serial.h>  enum {  	UNUSED = 0, @@ -68,30 +70,47 @@ static DECLARE_INTC_DESC(intc_desc, "sh7705", vectors, NULL,  			 NULL, prio_registers, NULL);  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xa4410000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_TIE | SCSCR_RIE  | SCSCR_TE | +			  SCSCR_RE  | SCSCR_CKE1 | SCSCR_CKE0,  	.type		= PORT_SCIF, -	.irqs		= { 56, 56, 56 }, +	.ops		= &sh770x_sci_port_ops, +	.regtype	= SCIx_SH7705_SCIF_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xa4410000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x900)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xa4400000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_TIE | SCSCR_RIE | SCSCR_TE | SCSCR_RE,  	.type		= PORT_SCIF, -	.irqs		= { 52, 52, 52 }, +	.ops		= &sh770x_sci_port_ops, +	.regtype	= SCIx_SH7705_SCIF_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xa4400000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x880)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	}, @@ -104,7 +123,7 @@ static struct resource rtc_resources[] = {  		.flags  = IORESOURCE_IO,  	},  	[1] =	{ -		.start  = 20, +		.start  = evt2irq(0x480),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -124,25 +143,18 @@ static struct platform_device rtc_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x02, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xfffffe94, -		.end	= 0xfffffe9f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xfffffe90, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu-sh3",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -151,67 +163,10 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0xe, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xfffffea0, -		.end	= 0xfffffeab, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1a, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xfffffeac, -		.end	= 0xfffffebb, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; -  static struct platform_device *sh7705_devices[] __initdata = {  	&scif0_device,  	&scif1_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  	&rtc_device,  }; @@ -226,8 +181,6 @@ static struct platform_device *sh7705_early_devices[] __initdata = {  	&scif0_device,  	&scif1_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh3/setup-sh770x.c b/arch/sh/kernel/cpu/sh3/setup-sh770x.c index 3cf8c8ef7b3..9139d14b9c5 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh770x.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh770x.c @@ -19,6 +19,8 @@  #include <linux/serial.h>  #include <linux/serial_sci.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h> +#include <cpu/serial.h>  enum {  	UNUSED = 0, @@ -94,7 +96,7 @@ static struct resource rtc_resources[] = {  		.flags  = IORESOURCE_IO,  	},  	[1] =	{ -		.start	= 20, +		.start	= evt2irq(0x480),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -107,15 +109,24 @@ static struct platform_device rtc_device = {  };  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xfffffe80, +	.port_reg	= 0xa4000136,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_TE | SCSCR_RE,  	.type		= PORT_SCI, -	.irqs		= { 23, 23, 23, 0 }, +	.ops		= &sh770x_sci_port_ops, +	.regshift	= 1, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xfffffe80, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x4e0)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	}, @@ -124,15 +135,23 @@ static struct platform_device scif0_device = {      defined(CONFIG_CPU_SUBTYPE_SH7707) || \      defined(CONFIG_CPU_SUBTYPE_SH7709)  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xa4000150,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_TE | SCSCR_RE,  	.type		= PORT_SCIF, -	.irqs		= { 56, 56, 56, 56 }, +	.ops		= &sh770x_sci_port_ops, +	.regtype	= SCIx_SH3_SCIF_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xa4000150, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x900)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	}, @@ -141,15 +160,24 @@ static struct platform_device scif1_device = {  #if defined(CONFIG_CPU_SUBTYPE_SH7707) || \      defined(CONFIG_CPU_SUBTYPE_SH7709)  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xa4000140, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_TE | SCSCR_RE,  	.type		= PORT_IRDA, -	.irqs		= { 52, 52, 52, 52 }, +	.ops		= &sh770x_sci_port_ops, +	.regshift	= 1, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xa4000140, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x880)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	}, @@ -157,25 +185,18 @@ static struct platform_device scif2_device = {  #endif  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x02, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xfffffe94, -		.end	= 0xfffffe9f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xfffffe90, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu-sh3",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -184,61 +205,6 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0xe, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xfffffea0, -		.end	= 0xfffffeab, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1a, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xfffffeac, -		.end	= 0xfffffebb, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; -  static struct platform_device *sh770x_devices[] __initdata = {  	&scif0_device,  #if defined(CONFIG_CPU_SUBTYPE_SH7706) || \ @@ -251,8 +217,6 @@ static struct platform_device *sh770x_devices[] __initdata = {  	&scif2_device,  #endif  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  	&rtc_device,  }; @@ -275,8 +239,6 @@ static struct platform_device *sh770x_early_devices[] __initdata = {  	&scif2_device,  #endif  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7710.c b/arch/sh/kernel/cpu/sh3/setup-sh7710.c index b0c2fb4ab47..e9ed300dba5 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7710.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7710.c @@ -14,6 +14,7 @@  #include <linux/serial.h>  #include <linux/serial_sci.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <asm/rtc.h>  enum { @@ -77,7 +78,7 @@ static struct resource rtc_resources[] = {  		.flags  = IORESOURCE_IO,  	},  	[1] =	{ -		.start  = 20, +		.start  = evt2irq(0x480),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -97,55 +98,62 @@ static struct platform_device rtc_device = {  };  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xa4400000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_TE | SCSCR_RE | SCSCR_REIE | +			  SCSCR_CKE1 | SCSCR_CKE0,  	.type		= PORT_SCIF, -	.irqs		= { 52, 52, 52, 52 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xa4400000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x880)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xa4410000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_TE | SCSCR_RE | SCSCR_REIE | +			  SCSCR_CKE1 | SCSCR_CKE0,  	.type		= PORT_SCIF, -	.irqs           = { 56, 56, 56, 56 }, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xa4410000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x900)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x02, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xa412fe94, -		.end	= 0xa412fe9f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xa412fe90, 0x28), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu-sh3",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -154,67 +162,10 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0xe, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xa412fea0, -		.end	= 0xa412feab, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1a, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xa412feac, -		.end	= 0xa412feb5, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; -  static struct platform_device *sh7710_devices[] __initdata = {  	&scif0_device,  	&scif1_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  	&rtc_device,  }; @@ -229,8 +180,6 @@ static struct platform_device *sh7710_early_devices[] __initdata = {  	&scif0_device,  	&scif1_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7720.c b/arch/sh/kernel/cpu/sh3/setup-sh7720.c index 24b17135d5d..84df85a5b80 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7720.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7720.c @@ -1,5 +1,5 @@  /* - * SH7720 Setup + * Setup code for SH7720, SH7721.   *   *  Copyright (C) 2007  Markus Brunner, Mark Jonas   *  Copyright (C) 2009  Paul Mundt @@ -19,7 +19,10 @@  #include <linux/io.h>  #include <linux/serial_sci.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h> +#include <linux/usb/ohci_pdriver.h>  #include <asm/rtc.h> +#include <cpu/serial.h>  static struct resource rtc_resources[] = {  	[0] = { @@ -29,7 +32,7 @@ static struct resource rtc_resources[] = {  	},  	[1] = {  		/* Shared Period/Carry/Alarm IRQ */ -		.start	= 20, +		.start	= evt2irq(0x480),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -49,30 +52,46 @@ static struct platform_device rtc_device = {  };  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xa4430000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE,  	.type		= PORT_SCIF, -	.irqs		= { 80, 80, 80, 80 }, +	.ops		= &sh7720_sci_port_ops, +	.regtype	= SCIx_SH7705_SCIF_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xa4430000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc00)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xa4438000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE,  	.type		= PORT_SCIF, -	.irqs           = { 81, 81, 81, 81 }, +	.ops		= &sh7720_sci_port_ops, +	.regtype	= SCIx_SH7705_SCIF_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xa4438000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc20)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	}, @@ -85,19 +104,23 @@ static struct resource usb_ohci_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 67, -		.end	= 67, +		.start	= evt2irq(0xa60), +		.end	= evt2irq(0xa60),  		.flags	= IORESOURCE_IRQ,  	},  };  static u64 usb_ohci_dma_mask = 0xffffffffUL; + +static struct usb_ohci_pdata usb_ohci_pdata; +  static struct platform_device usb_ohci_device = { -	.name		= "sh_ohci", +	.name		= "ohci-platform",  	.id		= -1,  	.dev = {  		.dma_mask		= &usb_ohci_dma_mask,  		.coherent_dma_mask	= 0xffffffff, +		.platform_data		= &usb_ohci_pdata,  	},  	.num_resources	= ARRAY_SIZE(usb_ohci_resources),  	.resource	= usb_ohci_resources, @@ -112,8 +135,8 @@ static struct resource usbf_resources[] = {  	},  	[1] = {  		.name	= "sh_udc", -		.start	= 65, -		.end	= 65, +		.start	= evt2irq(0xa20), +		.end	= evt2irq(0xa20),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -129,163 +152,38 @@ static struct platform_device usbf_device = {  	.resource	= usbf_resources,  }; -static struct sh_timer_config cmt0_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 0, -	.clockevent_rating = 125, -	.clocksource_rating = 125, +static struct sh_timer_config cmt_platform_data = { +	.channels_mask = 0x1f,  }; -static struct resource cmt0_resources[] = { -	[0] = { -		.start	= 0x044a0010, -		.end	= 0x044a001b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, +static struct resource cmt_resources[] = { +	DEFINE_RES_MEM(0x044a0000, 0x60), +	DEFINE_RES_IRQ(evt2irq(0xf00)),  }; -static struct platform_device cmt0_device = { -	.name		= "sh_cmt", +static struct platform_device cmt_device = { +	.name		= "sh-cmt-32",  	.id		= 0,  	.dev = { -		.platform_data	= &cmt0_platform_data, -	}, -	.resource	= cmt0_resources, -	.num_resources	= ARRAY_SIZE(cmt0_resources), -}; - -static struct sh_timer_config cmt1_platform_data = { -	.channel_offset = 0x20, -	.timer_bit = 1, -}; - -static struct resource cmt1_resources[] = { -	[0] = { -		.start	= 0x044a0020, -		.end	= 0x044a002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cmt1_device = { -	.name		= "sh_cmt", -	.id		= 1, -	.dev = { -		.platform_data	= &cmt1_platform_data, -	}, -	.resource	= cmt1_resources, -	.num_resources	= ARRAY_SIZE(cmt1_resources), -}; - -static struct sh_timer_config cmt2_platform_data = { -	.channel_offset = 0x30, -	.timer_bit = 2, -}; - -static struct resource cmt2_resources[] = { -	[0] = { -		.start	= 0x044a0030, -		.end	= 0x044a003b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cmt2_device = { -	.name		= "sh_cmt", -	.id		= 2, -	.dev = { -		.platform_data	= &cmt2_platform_data, -	}, -	.resource	= cmt2_resources, -	.num_resources	= ARRAY_SIZE(cmt2_resources), -}; - -static struct sh_timer_config cmt3_platform_data = { -	.channel_offset = 0x40, -	.timer_bit = 3, -}; - -static struct resource cmt3_resources[] = { -	[0] = { -		.start	= 0x044a0040, -		.end	= 0x044a004b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cmt3_device = { -	.name		= "sh_cmt", -	.id		= 3, -	.dev = { -		.platform_data	= &cmt3_platform_data, -	}, -	.resource	= cmt3_resources, -	.num_resources	= ARRAY_SIZE(cmt3_resources), -}; - -static struct sh_timer_config cmt4_platform_data = { -	.channel_offset = 0x50, -	.timer_bit = 4, -}; - -static struct resource cmt4_resources[] = { -	[0] = { -		.start	= 0x044a0050, -		.end	= 0x044a005b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cmt4_device = { -	.name		= "sh_cmt", -	.id		= 4, -	.dev = { -		.platform_data	= &cmt4_platform_data, +		.platform_data	= &cmt_platform_data,  	}, -	.resource	= cmt4_resources, -	.num_resources	= ARRAY_SIZE(cmt4_resources), +	.resource	= cmt_resources, +	.num_resources	= ARRAY_SIZE(cmt_resources),  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x02, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xa412fe94, -		.end	= 0xa412fe9f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xa412fe90, 0x28), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu-sh3",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -294,72 +192,11 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0xe, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xa412fea0, -		.end	= 0xa412feab, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1a, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xa412feac, -		.end	= 0xa412feb5, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; -  static struct platform_device *sh7720_devices[] __initdata = {  	&scif0_device,  	&scif1_device, -	&cmt0_device, -	&cmt1_device, -	&cmt2_device, -	&cmt3_device, -	&cmt4_device, +	&cmt_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  	&rtc_device,  	&usb_ohci_device,  	&usbf_device, @@ -375,14 +212,8 @@ arch_initcall(sh7720_devices_setup);  static struct platform_device *sh7720_early_devices[] __initdata = {  	&scif0_device,  	&scif1_device, -	&cmt0_device, -	&cmt1_device, -	&cmt2_device, -	&cmt3_device, -	&cmt4_device, +	&cmt_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh4/clock-sh4-202.c b/arch/sh/kernel/cpu/sh4/clock-sh4-202.c index 4eabc68cd75..4b5bab5f875 100644 --- a/arch/sh/kernel/cpu/sh4/clock-sh4-202.c +++ b/arch/sh/kernel/cpu/sh4/clock-sh4-202.c @@ -13,7 +13,7 @@  #include <linux/kernel.h>  #include <linux/err.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h> @@ -41,7 +41,7 @@ static inline int frqcr3_lookup(struct clk *clk, unsigned long rate)  	return 5;  } -static struct clk_ops sh4202_emi_clk_ops = { +static struct sh_clk_ops sh4202_emi_clk_ops = {  	.recalc		= emi_clk_recalc,  }; @@ -56,7 +56,7 @@ static unsigned long femi_clk_recalc(struct clk *clk)  	return clk->parent->rate / frqcr3_divisors[idx];  } -static struct clk_ops sh4202_femi_clk_ops = { +static struct sh_clk_ops sh4202_femi_clk_ops = {  	.recalc		= femi_clk_recalc,  }; @@ -81,8 +81,7 @@ static void shoc_clk_init(struct clk *clk)  	for (i = 0; i < ARRAY_SIZE(frqcr3_divisors); i++) {  		int divisor = frqcr3_divisors[i]; -		if (clk->ops->set_rate(clk, clk->parent->rate / -						divisor, 0) == 0) +		if (clk->ops->set_rate(clk, clk->parent->rate / divisor) == 0)  			break;  	} @@ -110,7 +109,7 @@ static int shoc_clk_verify_rate(struct clk *clk, unsigned long rate)  	return 0;  } -static int shoc_clk_set_rate(struct clk *clk, unsigned long rate, int algo_id) +static int shoc_clk_set_rate(struct clk *clk, unsigned long rate)  {  	unsigned long frqcr3;  	unsigned int tmp; @@ -131,7 +130,7 @@ static int shoc_clk_set_rate(struct clk *clk, unsigned long rate, int algo_id)  	return 0;  } -static struct clk_ops sh4202_shoc_clk_ops = { +static struct sh_clk_ops sh4202_shoc_clk_ops = {  	.init		= shoc_clk_init,  	.recalc		= shoc_clk_recalc,  	.set_rate	= shoc_clk_set_rate, @@ -148,8 +147,6 @@ static struct clk *sh4202_onchip_clocks[] = {  	&sh4202_shoc_clk,  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("emi_clk", &sh4202_emi_clk), diff --git a/arch/sh/kernel/cpu/sh4/clock-sh4.c b/arch/sh/kernel/cpu/sh4/clock-sh4.c index 5add75c1f53..99e5ec8b483 100644 --- a/arch/sh/kernel/cpu/sh4/clock-sh4.c +++ b/arch/sh/kernel/cpu/sh4/clock-sh4.c @@ -31,7 +31,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= pfc_divisors[__raw_readw(FRQCR) & 0x0007];  } -static struct clk_ops sh4_master_clk_ops = { +static struct sh_clk_ops sh4_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -41,7 +41,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh4_module_clk_ops = { +static struct sh_clk_ops sh4_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -51,7 +51,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / bfc_divisors[idx];  } -static struct clk_ops sh4_bus_clk_ops = { +static struct sh_clk_ops sh4_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -61,18 +61,18 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh4_cpu_clk_ops = { +static struct sh_clk_ops sh4_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh4_clk_ops[] = { +static struct sh_clk_ops *sh4_clk_ops[] = {  	&sh4_master_clk_ops,  	&sh4_module_clk_ops,  	&sh4_bus_clk_ops,  	&sh4_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh4_clk_ops))  		*ops = sh4_clk_ops[idx]; diff --git a/arch/sh/kernel/cpu/sh4/fpu.c b/arch/sh/kernel/cpu/sh4/fpu.c index 447482d7f65..69ab4d3c8d4 100644 --- a/arch/sh/kernel/cpu/sh4/fpu.c +++ b/arch/sh/kernel/cpu/sh4/fpu.c @@ -15,8 +15,8 @@  #include <linux/io.h>  #include <cpu/fpu.h>  #include <asm/processor.h> -#include <asm/system.h>  #include <asm/fpu.h> +#include <asm/traps.h>  /* The PR (precision) bit in the FP Status Register must be clear when   * an frchg instruction is executed, otherwise the instruction is undefined. diff --git a/arch/sh/kernel/cpu/sh4/perf_event.c b/arch/sh/kernel/cpu/sh4/perf_event.c index dbf3b4bb71f..fa4f724b295 100644 --- a/arch/sh/kernel/cpu/sh4/perf_event.c +++ b/arch/sh/kernel/cpu/sh4/perf_event.c @@ -180,6 +180,21 @@ static const int sh7750_cache_events  			[ C(RESULT_MISS)   ] = -1,  		},  	}, + +	[ C(NODE) ] = { +		[ C(OP_READ) ] = { +			[ C(RESULT_ACCESS) ] = -1, +			[ C(RESULT_MISS)   ] = -1, +		}, +		[ C(OP_WRITE) ] = { +			[ C(RESULT_ACCESS) ] = -1, +			[ C(RESULT_MISS)   ] = -1, +		}, +		[ C(OP_PREFETCH) ] = { +			[ C(RESULT_ACCESS) ] = -1, +			[ C(RESULT_MISS)   ] = -1, +		}, +	},  };  static int sh7750_event_map(int event) @@ -250,4 +265,4 @@ static int __init sh7750_pmu_init(void)  	return register_sh_pmu(&sh7750_pmu);  } -arch_initcall(sh7750_pmu_init); +early_initcall(sh7750_pmu_init); diff --git a/arch/sh/kernel/cpu/sh4/probe.c b/arch/sh/kernel/cpu/sh4/probe.c index b93458f33b7..a521bcf5069 100644 --- a/arch/sh/kernel/cpu/sh4/probe.c +++ b/arch/sh/kernel/cpu/sh4/probe.c @@ -15,7 +15,7 @@  #include <asm/processor.h>  #include <asm/cache.h> -void __cpuinit cpu_probe(void) +void cpu_probe(void)  {  	unsigned long pvr, prr, cvr;  	unsigned long size; @@ -151,8 +151,17 @@ void __cpuinit cpu_probe(void)  			boot_cpu_data.flags |= CPU_HAS_L2_CACHE;  			break;  		case 0x10: +		case 0x11:  			boot_cpu_data.type = CPU_SH7757;  			break; +		case 0xd0: +		case 0x40: /* yon-ten-go */ +			boot_cpu_data.type = CPU_SH7372; +			break; +		case 0xE0: /* 0x4E0 */ +			boot_cpu_data.type = CPU_SH7734; /* SH7733/SH7734 */ +			break; +  		}  		break;  	case 0x4000:	/* 1st cut */ diff --git a/arch/sh/kernel/cpu/sh4/setup-sh4-202.c b/arch/sh/kernel/cpu/sh4/setup-sh4-202.c index e916b18e1f7..e7a7b3cdf68 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh4-202.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh4-202.c @@ -13,43 +13,46 @@  #include <linux/serial.h>  #include <linux/serial_sci.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <linux/io.h>  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xffe80000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 40, 41, 43, 42 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffe80000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x700)), +	DEFINE_RES_IRQ(evt2irq(0x720)), +	DEFINE_RES_IRQ(evt2irq(0x760)), +	DEFINE_RES_IRQ(evt2irq(0x740)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -58,66 +61,9 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; -  static struct platform_device *sh4202_devices[] __initdata = {  	&scif0_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  static int __init sh4202_devices_setup(void) @@ -130,8 +76,6 @@ arch_initcall(sh4202_devices_setup);  static struct platform_device *sh4202_early_devices[] __initdata = {  	&scif0_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7750.c b/arch/sh/kernel/cpu/sh4/setup-sh7750.c index 911d196e86b..5f08c59b9f3 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh7750.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh7750.c @@ -1,5 +1,5 @@  /* - * SH7750/SH7751 Setup + * SH7091/SH7750/SH7750S/SH7750R/SH7751/SH7751R Setup   *   *  Copyright (C) 2006  Paul Mundt   *  Copyright (C) 2006  Jamie Lenehan @@ -13,7 +13,9 @@  #include <linux/serial.h>  #include <linux/io.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <linux/serial_sci.h> +#include <generated/machtypes.h>  static struct resource rtc_resources[] = {  	[0] = { @@ -23,7 +25,7 @@ static struct resource rtc_resources[] = {  	},  	[1] = {  		/* Shared Period/Carry/Alarm IRQ */ -		.start	= 20, +		.start	= evt2irq(0x480),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -35,56 +37,63 @@ static struct platform_device rtc_device = {  	.resource	= rtc_resources,  }; -static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xffe00000, +static struct plat_sci_port sci_platform_data = { +	.port_reg	= 0xffe0001C,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_TE | SCSCR_RE,  	.type		= PORT_SCI, -	.irqs		= { 23, 23, 23, 0 }, +	.regshift	= 2,  }; -static struct platform_device scif0_device = { +static struct resource sci_resources[] = { +	DEFINE_RES_MEM(0xffe00000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x4e0)), +}; + +static struct platform_device sci_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= sci_resources, +	.num_resources	= ARRAY_SIZE(sci_resources),  	.dev		= { -		.platform_data	= &scif0_platform_data, +		.platform_data	= &sci_platform_data,  	},  }; -static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xffe80000, +static struct plat_sci_port scif_platform_data = {  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_TE | SCSCR_RE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 40, 40, 40, 40 },  }; -static struct platform_device scif1_device = { +static struct resource scif_resources[] = { +	DEFINE_RES_MEM(0xffe80000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x700)), +}; + +static struct platform_device scif_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif_resources, +	.num_resources	= ARRAY_SIZE(scif_resources),  	.dev		= { -		.platform_data	= &scif1_platform_data, +		.platform_data	= &scif_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -93,26 +102,23 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; +/* SH7750R, SH7751 and SH7751R all have two extra timer channels */ +#if defined(CONFIG_CPU_SUBTYPE_SH7750R) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7751) || \ +	defined(CONFIG_CPU_SUBTYPE_SH7751R) +  static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +	.channels_mask = 3,  };  static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xfe100000, 0x20), +	DEFINE_RES_IRQ(evt2irq(0xb00)), +	DEFINE_RES_IRQ(evt2irq(0xb80)),  };  static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 1,  	.dev = {  		.platform_data	= &tmu1_platform_data, @@ -121,132 +127,56 @@ static struct platform_device tmu1_device = {  	.num_resources	= ARRAY_SIZE(tmu1_resources),  }; -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; - -/* SH7750R, SH7751 and SH7751R all have two extra timer channels */ -#if defined(CONFIG_CPU_SUBTYPE_SH7750R) || \ -	defined(CONFIG_CPU_SUBTYPE_SH7751) || \ -	defined(CONFIG_CPU_SUBTYPE_SH7751R) - -static struct sh_timer_config tmu3_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu3_resources[] = { -	[0] = { -		.start	= 0xfe100008, -		.end	= 0xfe100013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 72, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu3_device = { -	.name		= "sh_tmu", -	.id		= 3, -	.dev = { -		.platform_data	= &tmu3_platform_data, -	}, -	.resource	= tmu3_resources, -	.num_resources	= ARRAY_SIZE(tmu3_resources), -}; - -static struct sh_timer_config tmu4_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu4_resources[] = { -	[0] = { -		.start	= 0xfe100014, -		.end	= 0xfe10001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 76, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu4_device = { -	.name		= "sh_tmu", -	.id		= 4, -	.dev = { -		.platform_data	= &tmu4_platform_data, -	}, -	.resource	= tmu4_resources, -	.num_resources	= ARRAY_SIZE(tmu4_resources), -}; -  #endif  static struct platform_device *sh7750_devices[] __initdata = { -	&scif0_device, -	&scif1_device,  	&rtc_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  #if defined(CONFIG_CPU_SUBTYPE_SH7750R) || \  	defined(CONFIG_CPU_SUBTYPE_SH7751) || \  	defined(CONFIG_CPU_SUBTYPE_SH7751R) -	&tmu3_device, -	&tmu4_device, +	&tmu1_device,  #endif  };  static int __init sh7750_devices_setup(void)  { +	if (mach_is_rts7751r2d()) { +		platform_device_register(&scif_device); +	} else { +		platform_device_register(&sci_device); +		platform_device_register(&scif_device); +	} +  	return platform_add_devices(sh7750_devices,  				    ARRAY_SIZE(sh7750_devices));  }  arch_initcall(sh7750_devices_setup);  static struct platform_device *sh7750_early_devices[] __initdata = { -	&scif0_device, -	&scif1_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  #if defined(CONFIG_CPU_SUBTYPE_SH7750R) || \  	defined(CONFIG_CPU_SUBTYPE_SH7751) || \  	defined(CONFIG_CPU_SUBTYPE_SH7751R) -	&tmu3_device, -	&tmu4_device, +	&tmu1_device,  #endif  };  void __init plat_early_device_setup(void)  { +	struct platform_device *dev[1]; + +	if (mach_is_rts7751r2d()) { +		scif_platform_data.scscr |= SCSCR_CKE1; +		dev[0] = &scif_device; +		early_platform_add_devices(dev, 1); +	} else { +		dev[0] = &sci_device; +		early_platform_add_devices(dev, 1); +		dev[0] = &scif_device; +		early_platform_add_devices(dev, 1); +	} +  	early_platform_add_devices(sh7750_early_devices,  				   ARRAY_SIZE(sh7750_early_devices));  } diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7760.c b/arch/sh/kernel/cpu/sh4/setup-sh7760.c index 48ea8fe85dc..973b736b3b9 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh7760.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh7760.c @@ -11,6 +11,7 @@  #include <linux/init.h>  #include <linux/serial.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <linux/serial_sci.h>  #include <linux/io.h> @@ -127,85 +128,117 @@ static DECLARE_INTC_DESC(intc_desc_irq, "sh7760-irq", vectors_irq, groups,  			 mask_registers, prio_registers, NULL);  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xfe600000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 52, 53, 55, 54 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xfe600000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x880)), +	DEFINE_RES_IRQ(evt2irq(0x8a0)), +	DEFINE_RES_IRQ(evt2irq(0x8e0)), +	DEFINE_RES_IRQ(evt2irq(0x8c0)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xfe610000,  	.flags		= UPF_BOOT_AUTOCONF,  	.type		= PORT_SCIF, -	.irqs		= { 72, 73, 75, 74 }, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xfe610000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xb00)), +	DEFINE_RES_IRQ(evt2irq(0xb20)), +	DEFINE_RES_IRQ(evt2irq(0xb60)), +	DEFINE_RES_IRQ(evt2irq(0xb40)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xfe620000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 76, 77, 79, 78 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xfe620000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xb80)), +	DEFINE_RES_IRQ(evt2irq(0xba0)), +	DEFINE_RES_IRQ(evt2irq(0xbe0)), +	DEFINE_RES_IRQ(evt2irq(0xbc0)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase	= 0xfe480000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCI, -	.irqs		= { 80, 81, 82, 0 }, +	.regshift	= 2, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xfe480000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc00)), +	DEFINE_RES_IRQ(evt2irq(0xc20)), +	DEFINE_RES_IRQ(evt2irq(0xc40)),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -214,61 +247,6 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; -  static struct platform_device *sh7760_devices[] __initdata = {  	&scif0_device, @@ -276,8 +254,6 @@ static struct platform_device *sh7760_devices[] __initdata = {  	&scif2_device,  	&scif3_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  static int __init sh7760_devices_setup(void) @@ -293,8 +269,6 @@ static struct platform_device *sh7760_early_devices[] __initdata = {  	&scif2_device,  	&scif3_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c index 14726eef1ce..0a47bd3e7be 100644 --- a/arch/sh/kernel/cpu/sh4/sq.c +++ b/arch/sh/kernel/cpu/sh4/sq.c @@ -13,13 +13,14 @@  #include <linux/init.h>  #include <linux/cpu.h>  #include <linux/bitmap.h> -#include <linux/sysdev.h> +#include <linux/device.h>  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/slab.h>  #include <linux/vmalloc.h>  #include <linux/mm.h>  #include <linux/io.h> +#include <linux/prefetch.h>  #include <asm/page.h>  #include <asm/cacheflush.h>  #include <cpu/sq.h> @@ -336,9 +337,9 @@ static struct kobj_type ktype_percpu_entry = {  	.default_attrs	= sq_sysfs_attrs,  }; -static int __devinit sq_sysdev_add(struct sys_device *sysdev) +static int sq_dev_add(struct device *dev, struct subsys_interface *sif)  { -	unsigned int cpu = sysdev->id; +	unsigned int cpu = dev->id;  	struct kobject *kobj;  	int error; @@ -347,25 +348,27 @@ static int __devinit sq_sysdev_add(struct sys_device *sysdev)  		return -ENOMEM;  	kobj = sq_kobject[cpu]; -	error = kobject_init_and_add(kobj, &ktype_percpu_entry, &sysdev->kobj, +	error = kobject_init_and_add(kobj, &ktype_percpu_entry, &dev->kobj,  				     "%s", "sq");  	if (!error)  		kobject_uevent(kobj, KOBJ_ADD);  	return error;  } -static int __devexit sq_sysdev_remove(struct sys_device *sysdev) +static int sq_dev_remove(struct device *dev, struct subsys_interface *sif)  { -	unsigned int cpu = sysdev->id; +	unsigned int cpu = dev->id;  	struct kobject *kobj = sq_kobject[cpu];  	kobject_put(kobj);  	return 0;  } -static struct sysdev_driver sq_sysdev_driver = { -	.add		= sq_sysdev_add, -	.remove		= __devexit_p(sq_sysdev_remove), +static struct subsys_interface sq_interface = { +	.name		= "sq", +	.subsys		= &cpu_subsys, +	.add_dev	= sq_dev_add, +	.remove_dev	= sq_dev_remove,  };  static int __init sq_api_init(void) @@ -385,7 +388,7 @@ static int __init sq_api_init(void)  	if (unlikely(!sq_bitmap))  		goto out; -	ret = sysdev_driver_register(&cpu_sysdev_class, &sq_sysdev_driver); +	ret = subsys_interface_register(&sq_interface);  	if (unlikely(ret != 0))  		goto out; @@ -400,7 +403,7 @@ out:  static void __exit sq_api_exit(void)  { -	sysdev_driver_unregister(&cpu_sysdev_class, &sq_sysdev_driver); +	subsys_interface_unregister(&sq_interface);  	kfree(sq_bitmap);  	kmem_cache_destroy(sq_cache);  } diff --git a/arch/sh/kernel/cpu/sh4a/Makefile b/arch/sh/kernel/cpu/sh4a/Makefile index cc122b1d303..0705df77520 100644 --- a/arch/sh/kernel/cpu/sh4a/Makefile +++ b/arch/sh/kernel/cpu/sh4a/Makefile @@ -10,9 +10,10 @@ obj-$(CONFIG_CPU_SUBTYPE_SH7780)	+= setup-sh7780.o  obj-$(CONFIG_CPU_SUBTYPE_SH7785)	+= setup-sh7785.o  obj-$(CONFIG_CPU_SUBTYPE_SH7786)	+= setup-sh7786.o intc-shx3.o  obj-$(CONFIG_CPU_SUBTYPE_SH7343)	+= setup-sh7343.o -obj-$(CONFIG_CPU_SUBTYPE_SH7722)	+= setup-sh7722.o +obj-$(CONFIG_CPU_SUBTYPE_SH7722)	+= setup-sh7722.o serial-sh7722.o  obj-$(CONFIG_CPU_SUBTYPE_SH7723)	+= setup-sh7723.o  obj-$(CONFIG_CPU_SUBTYPE_SH7724)	+= setup-sh7724.o +obj-$(CONFIG_CPU_SUBTYPE_SH7734)	+= setup-sh7734.o  obj-$(CONFIG_CPU_SUBTYPE_SH7366)	+= setup-sh7366.o  obj-$(CONFIG_CPU_SUBTYPE_SHX3)		+= setup-shx3.o intc-shx3.o @@ -27,9 +28,10 @@ clock-$(CONFIG_CPU_SUBTYPE_SH7780)	:= clock-sh7780.o  clock-$(CONFIG_CPU_SUBTYPE_SH7785)	:= clock-sh7785.o  clock-$(CONFIG_CPU_SUBTYPE_SH7786)	:= clock-sh7786.o  clock-$(CONFIG_CPU_SUBTYPE_SH7343)	:= clock-sh7343.o -clock-$(CONFIG_CPU_SUBTYPE_SH7722)	:= clock-sh7722.o hwblk-sh7722.o -clock-$(CONFIG_CPU_SUBTYPE_SH7723)	:= clock-sh7723.o hwblk-sh7723.o -clock-$(CONFIG_CPU_SUBTYPE_SH7724)	:= clock-sh7724.o hwblk-sh7724.o +clock-$(CONFIG_CPU_SUBTYPE_SH7722)	:= clock-sh7722.o +clock-$(CONFIG_CPU_SUBTYPE_SH7723)	:= clock-sh7723.o +clock-$(CONFIG_CPU_SUBTYPE_SH7724)	:= clock-sh7724.o +clock-$(CONFIG_CPU_SUBTYPE_SH7734)	:= clock-sh7734.o  clock-$(CONFIG_CPU_SUBTYPE_SH7366)	:= clock-sh7366.o  clock-$(CONFIG_CPU_SUBTYPE_SHX3)	:= clock-shx3.o @@ -37,6 +39,7 @@ clock-$(CONFIG_CPU_SUBTYPE_SHX3)	:= clock-shx3.o  pinmux-$(CONFIG_CPU_SUBTYPE_SH7722)	:= pinmux-sh7722.o  pinmux-$(CONFIG_CPU_SUBTYPE_SH7723)	:= pinmux-sh7723.o  pinmux-$(CONFIG_CPU_SUBTYPE_SH7724)	:= pinmux-sh7724.o +pinmux-$(CONFIG_CPU_SUBTYPE_SH7734)	:= pinmux-sh7734.o  pinmux-$(CONFIG_CPU_SUBTYPE_SH7757)	:= pinmux-sh7757.o  pinmux-$(CONFIG_CPU_SUBTYPE_SH7785)	:= pinmux-sh7785.o  pinmux-$(CONFIG_CPU_SUBTYPE_SH7786)	:= pinmux-sh7786.o @@ -44,6 +47,6 @@ pinmux-$(CONFIG_CPU_SUBTYPE_SHX3)	:= pinmux-shx3.o  obj-y					+= $(clock-y)  obj-$(CONFIG_SMP)			+= $(smp-y) -obj-$(CONFIG_GENERIC_GPIO)		+= $(pinmux-y) +obj-$(CONFIG_GPIOLIB)			+= $(pinmux-y)  obj-$(CONFIG_PERF_EVENTS)		+= perf_event.o  obj-$(CONFIG_HAVE_HW_BREAKPOINT)	+= ubc.o diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7343.c b/arch/sh/kernel/cpu/sh4a/clock-sh7343.c index 71291ae201b..9edc06c02dc 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7343.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7343.c @@ -21,7 +21,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  /* SH7343 registers */ @@ -61,7 +61,7 @@ static unsigned long dll_recalc(struct clk *clk)  	return clk->parent->rate * mult;  } -static struct clk_ops dll_clk_ops = { +static struct sh_clk_ops dll_clk_ops = {  	.recalc		= dll_recalc,  }; @@ -81,7 +81,7 @@ static unsigned long pll_recalc(struct clk *clk)  	return clk->parent->rate * mult;  } -static struct clk_ops pll_clk_ops = { +static struct sh_clk_ops pll_clk_ops = {  	.recalc		= pll_recalc,  }; @@ -194,8 +194,6 @@ static struct clk mstp_clks[MSTP_NR] = {  	[MSTP200] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 0, 0),  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("rclk", &r_clk), @@ -229,36 +227,21 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("hudi0", &mstp_clks[MSTP019]),  	CLKDEV_CON_ID("ubc0", &mstp_clks[MSTP017]),  	CLKDEV_CON_ID("tmu_fck", &mstp_clks[MSTP015]), -	CLKDEV_CON_ID("cmt_fck", &mstp_clks[MSTP014]), +	CLKDEV_ICK_ID("fck", "sh-cmt-32.0", &mstp_clks[MSTP014]),  	CLKDEV_CON_ID("rwdt0", &mstp_clks[MSTP013]),  	CLKDEV_CON_ID("mfi0", &mstp_clks[MSTP011]),  	CLKDEV_CON_ID("flctl0", &mstp_clks[MSTP010]), -	{ -		/* SCIF0 */ -		.dev_id		= "sh-sci.0", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP007], -	}, { -		/* SCIF1 */ -		.dev_id		= "sh-sci.1", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP006], -	}, { -		/* SCIF2 */ -		.dev_id		= "sh-sci.2", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP005], -	}, { -		/* SCIF3 */ -		.dev_id		= "sh-sci.3", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP004], -	}, + +	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP007]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP006]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP005]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.3", &mstp_clks[MSTP004]), +  	CLKDEV_CON_ID("sio0", &mstp_clks[MSTP003]),  	CLKDEV_CON_ID("siof0", &mstp_clks[MSTP002]),  	CLKDEV_CON_ID("siof1", &mstp_clks[MSTP001]), -	CLKDEV_CON_ID("i2c0", &mstp_clks[MSTP109]), -	CLKDEV_CON_ID("i2c1", &mstp_clks[MSTP108]), +	CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP109]), +	CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP108]),  	CLKDEV_CON_ID("tpu0", &mstp_clks[MSTP225]),  	CLKDEV_CON_ID("irda0", &mstp_clks[MSTP224]),  	CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP218]), @@ -300,7 +283,7 @@ int __init arch_clk_init(void)  		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); +		ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7366.c b/arch/sh/kernel/cpu/sh4a/clock-sh7366.c index 7ce5bbcd408..955b9add781 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7366.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7366.c @@ -21,7 +21,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  /* SH7366 registers */ @@ -61,7 +61,7 @@ static unsigned long dll_recalc(struct clk *clk)  	return clk->parent->rate * mult;  } -static struct clk_ops dll_clk_ops = { +static struct sh_clk_ops dll_clk_ops = {  	.recalc		= dll_recalc,  }; @@ -84,7 +84,7 @@ static unsigned long pll_recalc(struct clk *clk)  	return (clk->parent->rate * mult) / div;  } -static struct clk_ops pll_clk_ops = { +static struct sh_clk_ops pll_clk_ops = {  	.recalc		= pll_recalc,  }; @@ -192,8 +192,6 @@ static struct clk mstp_clks[MSTP_NR] = {  	[MSTP200] = MSTP(&div4_clks[DIV4_B], MSTPCR2, 0, 0),  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("rclk", &r_clk), @@ -227,29 +225,18 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("hudi0", &mstp_clks[MSTP019]),  	CLKDEV_CON_ID("ubc0", &mstp_clks[MSTP017]),  	CLKDEV_CON_ID("tmu_fck", &mstp_clks[MSTP015]), -	CLKDEV_CON_ID("cmt_fck", &mstp_clks[MSTP014]), +	CLKDEV_ICK_ID("fck", "sh-cmt-32.0", &mstp_clks[MSTP014]),  	CLKDEV_CON_ID("rwdt0", &mstp_clks[MSTP013]),  	CLKDEV_CON_ID("mfi0", &mstp_clks[MSTP011]),  	CLKDEV_CON_ID("flctl0", &mstp_clks[MSTP010]), -	{ -		/* SCIF0 */ -		.dev_id		= "sh-sci.0", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP007], -	}, { -		/* SCIF1 */ -		.dev_id		= "sh-sci.1", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP006], -	}, { -		/* SCIF2 */ -		.dev_id		= "sh-sci.2", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP005], -	}, + +	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP007]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP006]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP005]), +  	CLKDEV_CON_ID("msiof0", &mstp_clks[MSTP002]),  	CLKDEV_CON_ID("sbr0", &mstp_clks[MSTP001]), -	CLKDEV_CON_ID("i2c0", &mstp_clks[MSTP109]), +	CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP109]),  	CLKDEV_CON_ID("icb0", &mstp_clks[MSTP227]),  	CLKDEV_CON_ID("meram0", &mstp_clks[MSTP226]),  	CLKDEV_CON_ID("dacy1", &mstp_clks[MSTP224]), @@ -289,7 +276,7 @@ int __init arch_clk_init(void)  		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); +		ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c index 2030f3d9fac..8f07a1a3869 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c @@ -21,9 +21,9 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> +#include <linux/sh_clk.h>  #include <asm/clock.h> -#include <asm/hwblk.h>  #include <cpu/sh7722.h>  /* SH7722 registers */ @@ -33,6 +33,9 @@  #define SCLKBCR		0xa415000c  #define IRDACLKCR	0xa4150018  #define PLLCR		0xa4150024 +#define MSTPCR0		0xa4150030 +#define MSTPCR1		0xa4150034 +#define MSTPCR2		0xa4150038  #define DLLFRQ		0xa4150050  /* Fixed 32 KHz root clock for RTC and Power Management purposes */ @@ -61,7 +64,7 @@ static unsigned long dll_recalc(struct clk *clk)  	return clk->parent->rate * mult;  } -static struct clk_ops dll_clk_ops = { +static struct sh_clk_ops dll_clk_ops = {  	.recalc		= dll_recalc,  }; @@ -84,7 +87,7 @@ static unsigned long pll_recalc(struct clk *clk)  	return (clk->parent->rate * mult) / div;  } -static struct clk_ops pll_clk_ops = { +static struct sh_clk_ops pll_clk_ops = {  	.recalc		= pll_recalc,  }; @@ -148,35 +151,33 @@ struct clk div6_clks[DIV6_NR] = {  };  static struct clk mstp_clks[HWBLK_NR] = { -	SH_HWBLK_CLK(HWBLK_URAM, &div4_clks[DIV4_U], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_XYMEM, &div4_clks[DIV4_B], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_TMU, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_CMT, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_RWDT, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_FLCTL, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF0, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF1, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF2, &div4_clks[DIV4_P], 0), - -	SH_HWBLK_CLK(HWBLK_IIC, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_RTC, &r_clk, 0), - -	SH_HWBLK_CLK(HWBLK_SDHI, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_KEYSC, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_USBF, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_2DG, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SIU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VOU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_JPU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_BEU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_CEU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VEU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VPU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_LCDC, &div4_clks[DIV4_P], 0), +	[HWBLK_URAM]  = SH_CLK_MSTP32(&div4_clks[DIV4_U], MSTPCR0, 28, CLK_ENABLE_ON_INIT), +	[HWBLK_XYMEM] = SH_CLK_MSTP32(&div4_clks[DIV4_B], MSTPCR0, 26, CLK_ENABLE_ON_INIT), +	[HWBLK_TMU]   = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 15, 0), +	[HWBLK_CMT]   = SH_CLK_MSTP32(&r_clk,		  MSTPCR0, 14, 0), +	[HWBLK_RWDT]  = SH_CLK_MSTP32(&r_clk,		  MSTPCR0, 13, 0), +	[HWBLK_FLCTL] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 10, 0), +	[HWBLK_SCIF0] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 7, 0), +	[HWBLK_SCIF1] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 6, 0), +	[HWBLK_SCIF2] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 5, 0), + +	[HWBLK_IIC]   = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 9, 0), +	[HWBLK_RTC]   = SH_CLK_MSTP32(&r_clk,		  MSTPCR1, 8, 0), + +	[HWBLK_SDHI]  = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR2, 18, 0), +	[HWBLK_KEYSC] = SH_CLK_MSTP32(&r_clk,		  MSTPCR2, 14, 0), +	[HWBLK_USBF]  = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR2, 11, 0), +	[HWBLK_2DG]   = SH_CLK_MSTP32(&div4_clks[DIV4_B], MSTPCR2, 9, 0), +	[HWBLK_SIU]   = SH_CLK_MSTP32(&div4_clks[DIV4_B], MSTPCR2, 8, 0), +	[HWBLK_JPU]   = SH_CLK_MSTP32(&div4_clks[DIV4_B], MSTPCR2, 6, 0), +	[HWBLK_VOU]   = SH_CLK_MSTP32(&div4_clks[DIV4_B], MSTPCR2, 5, 0), +	[HWBLK_BEU]   = SH_CLK_MSTP32(&div4_clks[DIV4_B], MSTPCR2, 4, 0), +	[HWBLK_CEU]   = SH_CLK_MSTP32(&div4_clks[DIV4_B], MSTPCR2, 3, 0), +	[HWBLK_VEU]   = SH_CLK_MSTP32(&div4_clks[DIV4_B], MSTPCR2, 2, 0), +	[HWBLK_VPU]   = SH_CLK_MSTP32(&div4_clks[DIV4_B], MSTPCR2, 1, 0), +	[HWBLK_LCDC]  = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR2, 0, 0),  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("rclk", &r_clk), @@ -201,55 +202,31 @@ static struct clk_lookup lookups[] = {  	/* MSTP clocks */  	CLKDEV_CON_ID("uram0", &mstp_clks[HWBLK_URAM]),  	CLKDEV_CON_ID("xymem0", &mstp_clks[HWBLK_XYMEM]), -	{ -		/* TMU0 */ -		.dev_id		= "sh_tmu.0", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU], -	}, { -		/* TMU1 */ -		.dev_id		= "sh_tmu.1", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU], -	}, { -		/* TMU2 */ -		.dev_id		= "sh_tmu.2", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU], -	}, -	CLKDEV_CON_ID("cmt_fck", &mstp_clks[HWBLK_CMT]), -	CLKDEV_CON_ID("rwdt0", &mstp_clks[HWBLK_RWDT]), + +	CLKDEV_ICK_ID("fck", "sh-tmu.0", &mstp_clks[HWBLK_TMU]), + +	CLKDEV_ICK_ID("fck", "sh-cmt-32.0", &mstp_clks[HWBLK_CMT]), +	CLKDEV_DEV_ID("sh-wdt.0", &mstp_clks[HWBLK_RWDT]),  	CLKDEV_CON_ID("flctl0", &mstp_clks[HWBLK_FLCTL]), -	{ -		/* SCIF0 */ -		.dev_id		= "sh-sci.0", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF0], -	}, { -		/* SCIF1 */ -		.dev_id		= "sh-sci.1", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF1], -	}, { -		/* SCIF2 */ -		.dev_id		= "sh-sci.2", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF2], -	}, -	CLKDEV_CON_ID("i2c0", &mstp_clks[HWBLK_IIC]), + +	CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[HWBLK_SCIF0]), +	CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[HWBLK_SCIF1]), +	CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[HWBLK_SCIF2]), + +	CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[HWBLK_IIC]),  	CLKDEV_CON_ID("rtc0", &mstp_clks[HWBLK_RTC]), -	CLKDEV_CON_ID("sdhi0", &mstp_clks[HWBLK_SDHI]), -	CLKDEV_CON_ID("keysc0", &mstp_clks[HWBLK_KEYSC]), +	CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[HWBLK_SDHI]), +	CLKDEV_DEV_ID("sh_keysc.0", &mstp_clks[HWBLK_KEYSC]),  	CLKDEV_CON_ID("usbf0", &mstp_clks[HWBLK_USBF]),  	CLKDEV_CON_ID("2dg0", &mstp_clks[HWBLK_2DG]), -	CLKDEV_CON_ID("siu0", &mstp_clks[HWBLK_SIU]), -	CLKDEV_CON_ID("vou0", &mstp_clks[HWBLK_VOU]), +	CLKDEV_DEV_ID("siu-pcm-audio", &mstp_clks[HWBLK_SIU]), +	CLKDEV_DEV_ID("sh-vou.0", &mstp_clks[HWBLK_VOU]),  	CLKDEV_CON_ID("jpu0", &mstp_clks[HWBLK_JPU]),  	CLKDEV_CON_ID("beu0", &mstp_clks[HWBLK_BEU]), -	CLKDEV_CON_ID("ceu0", &mstp_clks[HWBLK_CEU]), +	CLKDEV_DEV_ID("sh_mobile_ceu.0", &mstp_clks[HWBLK_CEU]),  	CLKDEV_CON_ID("veu0", &mstp_clks[HWBLK_VEU]),  	CLKDEV_CON_ID("vpu0", &mstp_clks[HWBLK_VPU]), -	CLKDEV_CON_ID("lcdc0", &mstp_clks[HWBLK_LCDC]), +	CLKDEV_DEV_ID("sh_mobile_lcdc_fb.0", &mstp_clks[HWBLK_LCDC]),  };  int __init arch_clk_init(void) @@ -282,7 +259,7 @@ int __init arch_clk_init(void)  		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_hwblk_clk_register(mstp_clks, HWBLK_NR); +		ret = sh_clk_mstp_register(mstp_clks, HWBLK_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7723.c b/arch/sh/kernel/cpu/sh4a/clock-sh7723.c index d3938f0d370..ccbcab550df 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7723.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7723.c @@ -22,9 +22,9 @@  #include <linux/kernel.h>  #include <linux/io.h>  #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> +#include <linux/sh_clk.h>  #include <asm/clock.h> -#include <asm/hwblk.h>  #include <cpu/sh7723.h>  /* SH7723 registers */ @@ -34,6 +34,9 @@  #define SCLKBCR		0xa415000c  #define IRDACLKCR	0xa4150018  #define PLLCR		0xa4150024 +#define MSTPCR0		0xa4150030 +#define MSTPCR1		0xa4150034 +#define MSTPCR2		0xa4150038  #define DLLFRQ		0xa4150050  /* Fixed 32 KHz root clock for RTC and Power Management purposes */ @@ -62,7 +65,7 @@ static unsigned long dll_recalc(struct clk *clk)  	return clk->parent->rate * mult;  } -static struct clk_ops dll_clk_ops = { +static struct sh_clk_ops dll_clk_ops = {  	.recalc		= dll_recalc,  }; @@ -85,7 +88,7 @@ static unsigned long pll_recalc(struct clk *clk)  	return (clk->parent->rate * mult) / div;  } -static struct clk_ops pll_clk_ops = { +static struct sh_clk_ops pll_clk_ops = {  	.recalc		= pll_recalc,  }; @@ -149,59 +152,57 @@ struct clk div6_clks[DIV6_NR] = {  static struct clk mstp_clks[] = {  	/* See page 60 of Datasheet V1.0: Overview -> Block Diagram */ -	SH_HWBLK_CLK(HWBLK_TLB, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_IC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_OC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_L2C, &div4_clks[DIV4_SH], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_ILMEM, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_FPU, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_INTC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_DMAC0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SHYWAY, &div4_clks[DIV4_SH], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_HUDI, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_UBC, &div4_clks[DIV4_I], 0), -	SH_HWBLK_CLK(HWBLK_TMU0, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_CMT, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_RWDT, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_DMAC1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_TMU1, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_FLCTL, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF0, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF1, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF2, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF3, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SCIF4, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SCIF5, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_MSIOF0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_MSIOF1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_MERAM, &div4_clks[DIV4_SH], 0), - -	SH_HWBLK_CLK(HWBLK_IIC, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_RTC, &r_clk, 0), - -	SH_HWBLK_CLK(HWBLK_ATAPI, &div4_clks[DIV4_SH], 0), -	SH_HWBLK_CLK(HWBLK_ADC, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_TPU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_IRDA, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_TSIF, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_ICB, &div4_clks[DIV4_B], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_SDHI0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SDHI1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_KEYSC, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_USB, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_2DG, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SIU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VEU2H1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VOU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_BEU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_CEU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VEU2H0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VPU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_LCDC, &div4_clks[DIV4_B], 0), +	[HWBLK_TLB]    = SH_CLK_MSTP32(&div4_clks[DIV4_I],  MSTPCR0, 31, CLK_ENABLE_ON_INIT), +	[HWBLK_IC]     = SH_CLK_MSTP32(&div4_clks[DIV4_I],  MSTPCR0, 30, CLK_ENABLE_ON_INIT), +	[HWBLK_OC]     = SH_CLK_MSTP32(&div4_clks[DIV4_I],  MSTPCR0, 29, CLK_ENABLE_ON_INIT), +	[HWBLK_L2C]    = SH_CLK_MSTP32(&div4_clks[DIV4_SH], MSTPCR0, 28, CLK_ENABLE_ON_INIT), +	[HWBLK_ILMEM]  = SH_CLK_MSTP32(&div4_clks[DIV4_I],  MSTPCR0, 27, CLK_ENABLE_ON_INIT), +	[HWBLK_FPU]    = SH_CLK_MSTP32(&div4_clks[DIV4_I],  MSTPCR0, 24, CLK_ENABLE_ON_INIT), +	[HWBLK_INTC]   = SH_CLK_MSTP32(&div4_clks[DIV4_I],  MSTPCR0, 22, CLK_ENABLE_ON_INIT), +	[HWBLK_DMAC0]  = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR0, 21, 0), +	[HWBLK_SHYWAY] = SH_CLK_MSTP32(&div4_clks[DIV4_SH], MSTPCR0, 20, CLK_ENABLE_ON_INIT), +	[HWBLK_HUDI]   = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR0, 19, 0), +	[HWBLK_UBC]    = SH_CLK_MSTP32(&div4_clks[DIV4_I],  MSTPCR0, 17, 0), +	[HWBLK_TMU0]   = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR0, 15, 0), +	[HWBLK_CMT]    = SH_CLK_MSTP32(&r_clk,		    MSTPCR0, 14, 0), +	[HWBLK_RWDT]   = SH_CLK_MSTP32(&r_clk,		    MSTPCR0, 13, 0), +	[HWBLK_DMAC1]  = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR0, 12, 0), +	[HWBLK_TMU1]   = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR0, 11, 0), +	[HWBLK_FLCTL]  = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR0, 10, 0), +	[HWBLK_SCIF0]  = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR0, 9, 0), +	[HWBLK_SCIF1]  = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR0, 8, 0), +	[HWBLK_SCIF2]  = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR0, 7, 0), +	[HWBLK_SCIF3]  = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR0, 6, 0), +	[HWBLK_SCIF4]  = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR0, 5, 0), +	[HWBLK_SCIF5]  = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR0, 4, 0), +	[HWBLK_MSIOF0] = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR0, 2, 0), +	[HWBLK_MSIOF1] = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR0, 1, 0), +	[HWBLK_MERAM]  = SH_CLK_MSTP32(&div4_clks[DIV4_SH], MSTPCR0, 0, 0), + +	[HWBLK_IIC]    = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR1, 9, 0), +	[HWBLK_RTC]    = SH_CLK_MSTP32(&r_clk,		    MSTPCR1, 8, 0), + +	[HWBLK_ATAPI]  = SH_CLK_MSTP32(&div4_clks[DIV4_SH], MSTPCR2, 28, 0), +	[HWBLK_ADC]    = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR2, 27, 0), +	[HWBLK_TPU]    = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 25, 0), +	[HWBLK_IRDA]   = SH_CLK_MSTP32(&div4_clks[DIV4_P],  MSTPCR2, 24, 0), +	[HWBLK_TSIF]   = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 22, 0), +	[HWBLK_ICB]    = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 21, CLK_ENABLE_ON_INIT), +	[HWBLK_SDHI0]  = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 18, 0), +	[HWBLK_SDHI1]  = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 17, 0), +	[HWBLK_KEYSC]  = SH_CLK_MSTP32(&r_clk,		    MSTPCR2, 14, 0), +	[HWBLK_USB]    = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 11, 0), +	[HWBLK_2DG]    = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 10, 0), +	[HWBLK_SIU]    = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 8, 0), +	[HWBLK_VEU2H1] = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 6, 0), +	[HWBLK_VOU]    = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 5, 0), +	[HWBLK_BEU]    = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 4, 0), +	[HWBLK_CEU]    = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 3, 0), +	[HWBLK_VEU2H0] = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 2, 0), +	[HWBLK_VPU]    = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 1, 0), +	[HWBLK_LCDC]   = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR2, 0, 0),  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("rclk", &r_clk), @@ -231,81 +232,18 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("ilmem0", &mstp_clks[HWBLK_ILMEM]),  	CLKDEV_CON_ID("fpu0", &mstp_clks[HWBLK_FPU]),  	CLKDEV_CON_ID("intc0", &mstp_clks[HWBLK_INTC]), -	CLKDEV_CON_ID("dmac0", &mstp_clks[HWBLK_DMAC0]), +	CLKDEV_DEV_ID("sh-dma-engine.0", &mstp_clks[HWBLK_DMAC0]),  	CLKDEV_CON_ID("sh0", &mstp_clks[HWBLK_SHYWAY]),  	CLKDEV_CON_ID("hudi0", &mstp_clks[HWBLK_HUDI]),  	CLKDEV_CON_ID("ubc0", &mstp_clks[HWBLK_UBC]), -	{ -		/* TMU0 */ -		.dev_id		= "sh_tmu.0", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU0], -	}, { -		/* TMU1 */ -		.dev_id		= "sh_tmu.1", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU0], -	}, { -		/* TMU2 */ -		.dev_id		= "sh_tmu.2", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU0], -	}, -	CLKDEV_CON_ID("cmt_fck", &mstp_clks[HWBLK_CMT]), -	CLKDEV_CON_ID("rwdt0", &mstp_clks[HWBLK_RWDT]), -	CLKDEV_CON_ID("dmac1", &mstp_clks[HWBLK_DMAC1]), -	{ -		/* TMU3 */ -		.dev_id		= "sh_tmu.3", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU1], -	}, { -		/* TMU4 */ -		.dev_id		= "sh_tmu.4", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU1], -	}, { -		/* TMU5 */ -		.dev_id		= "sh_tmu.5", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU1], -	}, +	CLKDEV_ICK_ID("fck", "sh-cmt-32.0", &mstp_clks[HWBLK_CMT]), +	CLKDEV_DEV_ID("sh-wdt.0", &mstp_clks[HWBLK_RWDT]), +	CLKDEV_DEV_ID("sh-dma-engine.1", &mstp_clks[HWBLK_DMAC1]),  	CLKDEV_CON_ID("flctl0", &mstp_clks[HWBLK_FLCTL]), -	{ -		/* SCIF0 */ -		.dev_id		= "sh-sci.0", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF0], -	}, { -		/* SCIF1 */ -		.dev_id		= "sh-sci.1", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF1], -	}, { -		/* SCIF2 */ -		.dev_id		= "sh-sci.2", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF2], -	}, { -		/* SCIF3 */ -		.dev_id		= "sh-sci.3", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF3], -	}, { -		/* SCIF4 */ -		.dev_id		= "sh-sci.4", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF4], -	}, { -		/* SCIF5 */ -		.dev_id		= "sh-sci.5", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF5], -	}, -	CLKDEV_CON_ID("msiof0", &mstp_clks[HWBLK_MSIOF0]), -	CLKDEV_CON_ID("msiof1", &mstp_clks[HWBLK_MSIOF1]), -	CLKDEV_CON_ID("meram0", &mstp_clks[HWBLK_MERAM]), -	CLKDEV_CON_ID("i2c0", &mstp_clks[HWBLK_IIC]), +	CLKDEV_DEV_ID("spi_sh_msiof.0", &mstp_clks[HWBLK_MSIOF0]), +	CLKDEV_DEV_ID("spi_sh_msiof.1", &mstp_clks[HWBLK_MSIOF1]), +	CLKDEV_DEV_ID("sh_mobile_meram.0", &mstp_clks[HWBLK_MERAM]), +	CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[HWBLK_IIC]),  	CLKDEV_CON_ID("rtc0", &mstp_clks[HWBLK_RTC]),  	CLKDEV_CON_ID("atapi0", &mstp_clks[HWBLK_ATAPI]),  	CLKDEV_CON_ID("adc0", &mstp_clks[HWBLK_ADC]), @@ -313,19 +251,30 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("irda0", &mstp_clks[HWBLK_IRDA]),  	CLKDEV_CON_ID("tsif0", &mstp_clks[HWBLK_TSIF]),  	CLKDEV_CON_ID("icb0", &mstp_clks[HWBLK_ICB]), -	CLKDEV_CON_ID("sdhi0", &mstp_clks[HWBLK_SDHI0]), -	CLKDEV_CON_ID("sdhi1", &mstp_clks[HWBLK_SDHI1]), -	CLKDEV_CON_ID("keysc0", &mstp_clks[HWBLK_KEYSC]), +	CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[HWBLK_SDHI0]), +	CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[HWBLK_SDHI1]), +	CLKDEV_DEV_ID("sh_keysc.0", &mstp_clks[HWBLK_KEYSC]),  	CLKDEV_CON_ID("usb0", &mstp_clks[HWBLK_USB]),  	CLKDEV_CON_ID("2dg0", &mstp_clks[HWBLK_2DG]), -	CLKDEV_CON_ID("siu0", &mstp_clks[HWBLK_SIU]), +	CLKDEV_DEV_ID("siu-pcm-audio", &mstp_clks[HWBLK_SIU]),  	CLKDEV_CON_ID("veu1", &mstp_clks[HWBLK_VEU2H1]), -	CLKDEV_CON_ID("vou0", &mstp_clks[HWBLK_VOU]), +	CLKDEV_DEV_ID("sh-vou.0", &mstp_clks[HWBLK_VOU]),  	CLKDEV_CON_ID("beu0", &mstp_clks[HWBLK_BEU]), -	CLKDEV_CON_ID("ceu0", &mstp_clks[HWBLK_CEU]), +	CLKDEV_DEV_ID("sh_mobile_ceu.0", &mstp_clks[HWBLK_CEU]),  	CLKDEV_CON_ID("veu0", &mstp_clks[HWBLK_VEU2H0]),  	CLKDEV_CON_ID("vpu0", &mstp_clks[HWBLK_VPU]), -	CLKDEV_CON_ID("lcdc0", &mstp_clks[HWBLK_LCDC]), + +	CLKDEV_ICK_ID("fck", "sh-tmu.0", &mstp_clks[HWBLK_TMU0]), +	CLKDEV_ICK_ID("fck", "sh-tmu.1", &mstp_clks[HWBLK_TMU1]), + +	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[HWBLK_SCIF0]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[HWBLK_SCIF1]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[HWBLK_SCIF2]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.3", &mstp_clks[HWBLK_SCIF3]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.4", &mstp_clks[HWBLK_SCIF4]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.5", &mstp_clks[HWBLK_SCIF5]), + +	CLKDEV_DEV_ID("sh_mobile_lcdc_fb.0", &mstp_clks[HWBLK_LCDC]),  };  int __init arch_clk_init(void) @@ -358,7 +307,7 @@ int __init arch_clk_init(void)  		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_hwblk_clk_register(mstp_clks, HWBLK_NR); +		ret = sh_clk_mstp_register(mstp_clks, HWBLK_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7724.c b/arch/sh/kernel/cpu/sh4a/clock-sh7724.c index 0fe2e9329cb..f579dd52819 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7724.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7724.c @@ -22,9 +22,9 @@  #include <linux/kernel.h>  #include <linux/io.h>  #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> +#include <linux/sh_clk.h>  #include <asm/clock.h> -#include <asm/hwblk.h>  #include <cpu/sh7724.h>  /* SH7724 registers */ @@ -35,6 +35,9 @@  #define FCLKBCR		0xa415000c  #define IRDACLKCR	0xa4150018  #define PLLCR		0xa4150024 +#define MSTPCR0		0xa4150030 +#define MSTPCR1		0xa4150034 +#define MSTPCR2		0xa4150038  #define SPUCLKCR	0xa415003c  #define FLLFRQ		0xa4150050  #define LSTATS		0xa4150060 @@ -67,7 +70,7 @@ static unsigned long fll_recalc(struct clk *clk)  	return (clk->parent->rate * mult) / div;  } -static struct clk_ops fll_clk_ops = { +static struct sh_clk_ops fll_clk_ops = {  	.recalc		= fll_recalc,  }; @@ -87,7 +90,7 @@ static unsigned long pll_recalc(struct clk *clk)  	return clk->parent->rate * mult;  } -static struct clk_ops pll_clk_ops = { +static struct sh_clk_ops pll_clk_ops = {  	.recalc		= pll_recalc,  }; @@ -102,7 +105,7 @@ static unsigned long div3_recalc(struct clk *clk)  	return clk->parent->rate / 3;  } -static struct clk_ops div3_clk_ops = { +static struct sh_clk_ops div3_clk_ops = {  	.recalc		= div3_recalc,  }; @@ -111,12 +114,25 @@ static struct clk div3_clk = {  	.parent		= &pll_clk,  }; +/* External input clock (pin name: FSIMCKA/FSIMCKB/DV_CLKI ) */ +struct clk sh7724_fsimcka_clk = { +}; + +struct clk sh7724_fsimckb_clk = { +}; + +struct clk sh7724_dv_clki = { +}; +  static struct clk *main_clks[] = {  	&r_clk,  	&extal_clk,  	&fll_clk,  	&pll_clk,  	&div3_clk, +	&sh7724_fsimcka_clk, +	&sh7724_fsimckb_clk, +	&sh7724_dv_clki,  };  static void div4_kick(struct clk *clk) @@ -154,75 +170,104 @@ struct clk div4_clks[DIV4_NR] = {  	[DIV4_M1] = DIV4(FRQCRB, 4, 0x2f7c, CLK_ENABLE_ON_INIT),  }; -enum { DIV6_V, DIV6_FA, DIV6_FB, DIV6_I, DIV6_S, DIV6_NR }; +enum { DIV6_V, DIV6_I, DIV6_S, DIV6_FA, DIV6_FB, DIV6_NR }; + +/* Indices are important - they are the actual src selecting values */ +static struct clk *common_parent[] = { +	[0] = &div3_clk, +	[1] = NULL, +}; + +static struct clk *vclkcr_parent[8] = { +	[0] = &div3_clk, +	[2] = &sh7724_dv_clki, +	[4] = &extal_clk, +}; + +static struct clk *fclkacr_parent[] = { +	[0] = &div3_clk, +	[1] = NULL, +	[2] = &sh7724_fsimcka_clk, +	[3] = NULL, +}; + +static struct clk *fclkbcr_parent[] = { +	[0] = &div3_clk, +	[1] = NULL, +	[2] = &sh7724_fsimckb_clk, +	[3] = NULL, +};  static struct clk div6_clks[DIV6_NR] = { -	[DIV6_V] = SH_CLK_DIV6(&div3_clk, VCLKCR, 0), -	[DIV6_FA] = SH_CLK_DIV6(&div3_clk, FCLKACR, 0), -	[DIV6_FB] = SH_CLK_DIV6(&div3_clk, FCLKBCR, 0), -	[DIV6_I] = SH_CLK_DIV6(&div3_clk, IRDACLKCR, 0), -	[DIV6_S] = SH_CLK_DIV6(&div3_clk, SPUCLKCR, CLK_ENABLE_ON_INIT), +	[DIV6_V] = SH_CLK_DIV6_EXT(VCLKCR, 0, +			vclkcr_parent, ARRAY_SIZE(vclkcr_parent), 12, 3), +	[DIV6_I] = SH_CLK_DIV6_EXT(IRDACLKCR, 0, +			common_parent, ARRAY_SIZE(common_parent), 6, 1), +	[DIV6_S] = SH_CLK_DIV6_EXT(SPUCLKCR, CLK_ENABLE_ON_INIT, +			common_parent, ARRAY_SIZE(common_parent), 6, 1), +	[DIV6_FA] = SH_CLK_DIV6_EXT(FCLKACR, 0, +				      fclkacr_parent, ARRAY_SIZE(fclkacr_parent), 6, 2), +	[DIV6_FB] = SH_CLK_DIV6_EXT(FCLKBCR, 0, +				      fclkbcr_parent, ARRAY_SIZE(fclkbcr_parent), 6, 2),  };  static struct clk mstp_clks[HWBLK_NR] = { -	SH_HWBLK_CLK(HWBLK_TLB, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_IC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_OC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_RSMEM, &div4_clks[DIV4_B], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_ILMEM, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_L2C, &div4_clks[DIV4_SH], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_FPU, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_INTC, &div4_clks[DIV4_P], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_DMAC0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SHYWAY, &div4_clks[DIV4_SH], CLK_ENABLE_ON_INIT), -	SH_HWBLK_CLK(HWBLK_HUDI, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_UBC, &div4_clks[DIV4_I], 0), -	SH_HWBLK_CLK(HWBLK_TMU0, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_CMT, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_RWDT, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_DMAC1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_TMU1, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF0, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF1, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF2, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_SCIF3, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SCIF4, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SCIF5, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_MSIOF0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_MSIOF1, &div4_clks[DIV4_B], 0), - -	SH_HWBLK_CLK(HWBLK_KEYSC, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_RTC, &r_clk, 0), -	SH_HWBLK_CLK(HWBLK_IIC0, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_IIC1, &div4_clks[DIV4_P], 0), - -	SH_HWBLK_CLK(HWBLK_MMC, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_ETHER, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_ATAPI, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_TPU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_IRDA, &div4_clks[DIV4_P], 0), -	SH_HWBLK_CLK(HWBLK_TSIF, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_USB1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_USB0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_2DG, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SDHI0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_SDHI1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VEU1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_CEU1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_BEU1, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_2DDMAC, &div4_clks[DIV4_SH], 0), -	SH_HWBLK_CLK(HWBLK_SPU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_JPU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VOU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_BEU0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_CEU0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VEU0, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_VPU, &div4_clks[DIV4_B], 0), -	SH_HWBLK_CLK(HWBLK_LCDC, &div4_clks[DIV4_B], 0), +	[HWBLK_TLB] = SH_CLK_MSTP32(&div4_clks[DIV4_I],	    MSTPCR0, 31, CLK_ENABLE_ON_INIT), +	[HWBLK_IC] = SH_CLK_MSTP32(&div4_clks[DIV4_I],	    MSTPCR0, 30, CLK_ENABLE_ON_INIT), +	[HWBLK_OC] = SH_CLK_MSTP32(&div4_clks[DIV4_I],	    MSTPCR0, 29, CLK_ENABLE_ON_INIT), +	[HWBLK_RSMEM] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR0, 28, CLK_ENABLE_ON_INIT), +	[HWBLK_ILMEM] = SH_CLK_MSTP32(&div4_clks[DIV4_I],   MSTPCR0, 27, CLK_ENABLE_ON_INIT), +	[HWBLK_L2C] = SH_CLK_MSTP32(&div4_clks[DIV4_SH],    MSTPCR0, 26, CLK_ENABLE_ON_INIT), +	[HWBLK_FPU] = SH_CLK_MSTP32(&div4_clks[DIV4_I],	    MSTPCR0, 24, CLK_ENABLE_ON_INIT), +	[HWBLK_INTC] = SH_CLK_MSTP32(&div4_clks[DIV4_P],    MSTPCR0, 22, CLK_ENABLE_ON_INIT), +	[HWBLK_DMAC0] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR0, 21, 0), +	[HWBLK_SHYWAY] = SH_CLK_MSTP32(&div4_clks[DIV4_SH], MSTPCR0, 20, CLK_ENABLE_ON_INIT), +	[HWBLK_HUDI] = SH_CLK_MSTP32(&div4_clks[DIV4_P],    MSTPCR0, 19, 0), +	[HWBLK_UBC] = SH_CLK_MSTP32(&div4_clks[DIV4_I],     MSTPCR0, 17, 0), +	[HWBLK_TMU0] = SH_CLK_MSTP32(&div4_clks[DIV4_P],    MSTPCR0, 15, 0), +	[HWBLK_CMT] = SH_CLK_MSTP32(&r_clk,		    MSTPCR0, 14, 0), +	[HWBLK_RWDT] = SH_CLK_MSTP32(&r_clk,		    MSTPCR0, 13, 0), +	[HWBLK_DMAC1] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR0, 12, 0), +	[HWBLK_TMU1] = SH_CLK_MSTP32(&div4_clks[DIV4_P],    MSTPCR0, 10, 0), +	[HWBLK_SCIF0] = SH_CLK_MSTP32(&div4_clks[DIV4_P],   MSTPCR0, 9, 0), +	[HWBLK_SCIF1] = SH_CLK_MSTP32(&div4_clks[DIV4_P],   MSTPCR0, 8, 0), +	[HWBLK_SCIF2] = SH_CLK_MSTP32(&div4_clks[DIV4_P],   MSTPCR0, 7, 0), +	[HWBLK_SCIF3] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR0, 6, 0), +	[HWBLK_SCIF4] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR0, 5, 0), +	[HWBLK_SCIF5] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR0, 4, 0), +	[HWBLK_MSIOF0] = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR0, 2, 0), +	[HWBLK_MSIOF1] = SH_CLK_MSTP32(&div4_clks[DIV4_B],  MSTPCR0, 1, 0), + +	[HWBLK_KEYSC] = SH_CLK_MSTP32(&r_clk,		    MSTPCR1, 12, 0), +	[HWBLK_RTC] = SH_CLK_MSTP32(&r_clk,		    MSTPCR1, 11, 0), +	[HWBLK_IIC0] = SH_CLK_MSTP32(&div4_clks[DIV4_P],    MSTPCR1, 9, 0), +	[HWBLK_IIC1] = SH_CLK_MSTP32(&div4_clks[DIV4_P],    MSTPCR1, 8, 0), + +	[HWBLK_MMC] = SH_CLK_MSTP32(&div4_clks[DIV4_B],	    MSTPCR2, 29, 0), +	[HWBLK_ETHER] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR2, 28, 0), +	[HWBLK_ATAPI] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR2, 26, 0), +	[HWBLK_TPU] = SH_CLK_MSTP32(&div4_clks[DIV4_B],	    MSTPCR2, 25, 0), +	[HWBLK_IRDA] = SH_CLK_MSTP32(&div4_clks[DIV4_P],    MSTPCR2, 24, 0), +	[HWBLK_TSIF] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 22, 0), +	[HWBLK_USB1] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 21, 0), +	[HWBLK_USB0] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 20, 0), +	[HWBLK_2DG] = SH_CLK_MSTP32(&div4_clks[DIV4_B],	    MSTPCR2, 19, 0), +	[HWBLK_SDHI0] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR2, 18, 0), +	[HWBLK_SDHI1] = SH_CLK_MSTP32(&div4_clks[DIV4_B],   MSTPCR2, 17, 0), +	[HWBLK_VEU1] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 15, 0), +	[HWBLK_CEU1] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 13, 0), +	[HWBLK_BEU1] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 12, 0), +	[HWBLK_2DDMAC] = SH_CLK_MSTP32(&div4_clks[DIV4_SH], MSTPCR2, 10, 0), +	[HWBLK_SPU] = SH_CLK_MSTP32(&div4_clks[DIV4_B],	    MSTPCR2, 9, 0), +	[HWBLK_JPU] = SH_CLK_MSTP32(&div4_clks[DIV4_B],	    MSTPCR2, 6, 0), +	[HWBLK_VOU] = SH_CLK_MSTP32(&div4_clks[DIV4_B],	    MSTPCR2, 5, 0), +	[HWBLK_BEU0] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 4, 0), +	[HWBLK_CEU0] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 3, 0), +	[HWBLK_VEU0] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 2, 0), +	[HWBLK_VPU] = SH_CLK_MSTP32(&div4_clks[DIV4_B],	    MSTPCR2, 1, 0), +	[HWBLK_LCDC] = SH_CLK_MSTP32(&div4_clks[DIV4_B],    MSTPCR2, 0, 0),  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("rclk", &r_clk), @@ -254,104 +299,54 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("l2c0", &mstp_clks[HWBLK_L2C]),  	CLKDEV_CON_ID("fpu0", &mstp_clks[HWBLK_FPU]),  	CLKDEV_CON_ID("intc0", &mstp_clks[HWBLK_INTC]), -	CLKDEV_CON_ID("dmac0", &mstp_clks[HWBLK_DMAC0]), +	CLKDEV_DEV_ID("sh-dma-engine.0", &mstp_clks[HWBLK_DMAC0]),  	CLKDEV_CON_ID("sh0", &mstp_clks[HWBLK_SHYWAY]),  	CLKDEV_CON_ID("hudi0", &mstp_clks[HWBLK_HUDI]),  	CLKDEV_CON_ID("ubc0", &mstp_clks[HWBLK_UBC]), -	{ -		/* TMU0 */ -		.dev_id		= "sh_tmu.0", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU0], -	}, { -		/* TMU1 */ -		.dev_id		= "sh_tmu.1", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU0], -	}, { -		/* TMU2 */ -		.dev_id		= "sh_tmu.2", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU0], -	}, { -		/* TMU3 */ -		.dev_id		= "sh_tmu.3", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU1], -	}, -	CLKDEV_CON_ID("cmt_fck", &mstp_clks[HWBLK_CMT]), -	CLKDEV_CON_ID("rwdt0", &mstp_clks[HWBLK_RWDT]), -	CLKDEV_CON_ID("dmac1", &mstp_clks[HWBLK_DMAC1]), -	{ -		/* TMU4 */ -		.dev_id		= "sh_tmu.4", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU1], -	}, { -		/* TMU5 */ -		.dev_id		= "sh_tmu.5", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[HWBLK_TMU1], -	}, { -		/* SCIF0 */ -		.dev_id		= "sh-sci.0", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF0], -	}, { -		/* SCIF1 */ -		.dev_id		= "sh-sci.1", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF1], -	}, { -		/* SCIF2 */ -		.dev_id		= "sh-sci.2", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF2], -	}, { -		/* SCIF3 */ -		.dev_id		= "sh-sci.3", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF3], -	}, { -		/* SCIF4 */ -		.dev_id		= "sh-sci.4", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF4], -	}, { -		/* SCIF5 */ -		.dev_id		= "sh-sci.5", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[HWBLK_SCIF5], -	}, -	CLKDEV_CON_ID("msiof0", &mstp_clks[HWBLK_MSIOF0]), -	CLKDEV_CON_ID("msiof1", &mstp_clks[HWBLK_MSIOF1]), -	CLKDEV_CON_ID("keysc0", &mstp_clks[HWBLK_KEYSC]), + +	CLKDEV_ICK_ID("fck", "sh-tmu.0", &mstp_clks[HWBLK_TMU0]), +	CLKDEV_ICK_ID("fck", "sh-tmu.1", &mstp_clks[HWBLK_TMU1]), + +	CLKDEV_ICK_ID("fck", "sh-cmt-16.0", &mstp_clks[HWBLK_CMT]), +	CLKDEV_DEV_ID("sh-wdt.0", &mstp_clks[HWBLK_RWDT]), +	CLKDEV_DEV_ID("sh-dma-engine.1", &mstp_clks[HWBLK_DMAC1]), + +	CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[HWBLK_SCIF0]), +	CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[HWBLK_SCIF1]), +	CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[HWBLK_SCIF2]), +	CLKDEV_DEV_ID("sh-sci.3", &mstp_clks[HWBLK_SCIF3]), +	CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[HWBLK_SCIF4]), +	CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[HWBLK_SCIF5]), + +	CLKDEV_DEV_ID("spi_sh_msiof.0", &mstp_clks[HWBLK_MSIOF0]), +	CLKDEV_DEV_ID("spi_sh_msiof.1", &mstp_clks[HWBLK_MSIOF1]), +	CLKDEV_DEV_ID("sh_keysc.0", &mstp_clks[HWBLK_KEYSC]),  	CLKDEV_CON_ID("rtc0", &mstp_clks[HWBLK_RTC]), -	CLKDEV_CON_ID("i2c0", &mstp_clks[HWBLK_IIC0]), -	CLKDEV_CON_ID("i2c1", &mstp_clks[HWBLK_IIC1]), -	CLKDEV_CON_ID("mmc0", &mstp_clks[HWBLK_MMC]), -	CLKDEV_CON_ID("eth0", &mstp_clks[HWBLK_ETHER]), +	CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[HWBLK_IIC0]), +	CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[HWBLK_IIC1]), +	CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[HWBLK_MMC]), +	CLKDEV_DEV_ID("sh7724-ether.0", &mstp_clks[HWBLK_ETHER]),  	CLKDEV_CON_ID("atapi0", &mstp_clks[HWBLK_ATAPI]),  	CLKDEV_CON_ID("tpu0", &mstp_clks[HWBLK_TPU]),  	CLKDEV_CON_ID("irda0", &mstp_clks[HWBLK_IRDA]),  	CLKDEV_CON_ID("tsif0", &mstp_clks[HWBLK_TSIF]), -	CLKDEV_CON_ID("usb1", &mstp_clks[HWBLK_USB1]), -	CLKDEV_CON_ID("usb0", &mstp_clks[HWBLK_USB0]), +	CLKDEV_DEV_ID("renesas_usbhs.1", &mstp_clks[HWBLK_USB1]), +	CLKDEV_DEV_ID("renesas_usbhs.0", &mstp_clks[HWBLK_USB0]),  	CLKDEV_CON_ID("2dg0", &mstp_clks[HWBLK_2DG]), -	CLKDEV_CON_ID("sdhi0", &mstp_clks[HWBLK_SDHI0]), -	CLKDEV_CON_ID("sdhi1", &mstp_clks[HWBLK_SDHI1]), +	CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[HWBLK_SDHI0]), +	CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[HWBLK_SDHI1]),  	CLKDEV_CON_ID("veu1", &mstp_clks[HWBLK_VEU1]), -	CLKDEV_CON_ID("ceu1", &mstp_clks[HWBLK_CEU1]), +	CLKDEV_DEV_ID("sh_mobile_ceu.1", &mstp_clks[HWBLK_CEU1]),  	CLKDEV_CON_ID("beu1", &mstp_clks[HWBLK_BEU1]),  	CLKDEV_CON_ID("2ddmac0", &mstp_clks[HWBLK_2DDMAC]), -	CLKDEV_CON_ID("spu0", &mstp_clks[HWBLK_SPU]), +	CLKDEV_DEV_ID("sh_fsi.0", &mstp_clks[HWBLK_SPU]),  	CLKDEV_CON_ID("jpu0", &mstp_clks[HWBLK_JPU]), -	CLKDEV_CON_ID("vou0", &mstp_clks[HWBLK_VOU]), +	CLKDEV_DEV_ID("sh-vou.0", &mstp_clks[HWBLK_VOU]),  	CLKDEV_CON_ID("beu0", &mstp_clks[HWBLK_BEU0]), -	CLKDEV_CON_ID("ceu0", &mstp_clks[HWBLK_CEU0]), +	CLKDEV_DEV_ID("sh_mobile_ceu.0", &mstp_clks[HWBLK_CEU0]),  	CLKDEV_CON_ID("veu0", &mstp_clks[HWBLK_VEU0]),  	CLKDEV_CON_ID("vpu0", &mstp_clks[HWBLK_VPU]), -	CLKDEV_CON_ID("lcdc0", &mstp_clks[HWBLK_LCDC]), +	CLKDEV_DEV_ID("sh_mobile_lcdc_fb.0", &mstp_clks[HWBLK_LCDC]),  };  int __init arch_clk_init(void) @@ -373,10 +368,10 @@ int __init arch_clk_init(void)  		ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);  	if (!ret) -		ret = sh_clk_div6_register(div6_clks, DIV6_NR); +		ret = sh_clk_div6_reparent_register(div6_clks, DIV6_NR);  	if (!ret) -		ret = sh_hwblk_clk_register(mstp_clks, HWBLK_NR); +		ret = sh_clk_mstp_register(mstp_clks, HWBLK_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7734.c b/arch/sh/kernel/cpu/sh4a/clock-sh7734.c new file mode 100644 index 00000000000..1fdf1ee672d --- /dev/null +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7734.c @@ -0,0 +1,260 @@ +/* + * arch/sh/kernel/cpu/sh4a/clock-sh7734.c + * + * Clock framework for SH7734 + * + * Copyright (C) 2011, 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> + * Copyright (C) 2011, 2012 Renesas Solutions Corp. + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ + +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/io.h> +#include <linux/clkdev.h> +#include <linux/delay.h> +#include <asm/clock.h> +#include <asm/freq.h> + +static struct clk extal_clk = { +	.rate       = 33333333, +}; + +#define MODEMR          (0xFFCC0020) +#define MODEMR_MASK     (0x6) +#define MODEMR_533MHZ   (0x2) + +static unsigned long pll_recalc(struct clk *clk) +{ +	int mode = 12; +	u32 r = __raw_readl(MODEMR); + +	if ((r & MODEMR_MASK) & MODEMR_533MHZ) +		mode = 16; + +	return clk->parent->rate * mode; +} + +static struct sh_clk_ops pll_clk_ops = { +	.recalc		= pll_recalc, +}; + +static struct clk pll_clk = { +	.ops        = &pll_clk_ops, +	.parent     = &extal_clk, +	.flags      = CLK_ENABLE_ON_INIT, +}; + +static struct clk *main_clks[] = { +	&extal_clk, +	&pll_clk, +}; + +static int multipliers[] = { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; +static int divisors[] = { 1, 3, 2, 3, 4, 6, 8, 9, 12, 16, 18, 24 }; + +static struct clk_div_mult_table div4_div_mult_table = { +	.divisors = divisors, +	.nr_divisors = ARRAY_SIZE(divisors), +	.multipliers = multipliers, +	.nr_multipliers = ARRAY_SIZE(multipliers), +}; + +static struct clk_div4_table div4_table = { +	.div_mult_table = &div4_div_mult_table, +}; + +enum { DIV4_I, DIV4_S, DIV4_B, DIV4_M, DIV4_S1, DIV4_P, DIV4_NR }; + +#define DIV4(_reg, _bit, _mask, _flags) \ +	SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags) + +struct clk div4_clks[DIV4_NR] = { +	[DIV4_I] = DIV4(FRQMR1, 28, 0x0003, CLK_ENABLE_ON_INIT), +	[DIV4_S] = DIV4(FRQMR1, 20, 0x000C, CLK_ENABLE_ON_INIT), +	[DIV4_B] = DIV4(FRQMR1, 16, 0x0140, CLK_ENABLE_ON_INIT), +	[DIV4_M] = DIV4(FRQMR1, 12, 0x0004, CLK_ENABLE_ON_INIT), +	[DIV4_S1] = DIV4(FRQMR1, 4, 0x0030, CLK_ENABLE_ON_INIT), +	[DIV4_P] = DIV4(FRQMR1, 0, 0x0140, CLK_ENABLE_ON_INIT), +}; + +#define MSTPCR0	0xFFC80030 +#define MSTPCR1	0xFFC80034 +#define MSTPCR3	0xFFC8003C + +enum { +	MSTP030, MSTP029, /* IIC */ +	MSTP026, MSTP025, MSTP024, /* SCIF */ +	MSTP023, +	MSTP022, MSTP021, +	MSTP019, /* HSCIF */ +	MSTP016, MSTP015, MSTP014, /* TMU / TIMER */ +	MSTP012, MSTP011, MSTP010, MSTP009, MSTP008, /* SSI */ +	MSTP007, /* HSPI */ +	MSTP115, /* ADMAC */ +	MSTP114, /* GETHER */ +	MSTP111, /* DMAC */ +	MSTP109, /* VIDEOIN1 */ +	MSTP108, /* VIDEOIN0 */ +	MSTP107, /* RGPVBG */ +	MSTP106, /* 2DG */ +	MSTP103, /* VIEW */ +	MSTP100, /* USB */ +	MSTP331, /* MMC */ +	MSTP330, /* MIMLB */ +	MSTP323, /* SDHI0 */ +	MSTP322, /* SDHI1 */ +	MSTP321, /* SDHI2 */ +	MSTP320, /* RQSPI */ +	MSTP319, /* SRC0 */ +	MSTP318, /* SRC1 */ +	MSTP317, /* RSPI */ +	MSTP316, /* RCAN0 */ +	MSTP315, /* RCAN1 */ +	MSTP314, /* FLTCL */ +	MSTP313, /* ADC */ +	MSTP312, /* MTU */ +	MSTP304, /* IE-BUS */ +	MSTP303, /* RTC */ +	MSTP302, /* HIF */ +	MSTP301, /* STIF0 */ +	MSTP300, /* STIF1 */ +	MSTP_NR }; + +static struct clk mstp_clks[MSTP_NR] = { +	/* MSTPCR0 */ +	[MSTP030] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 30, 0), +	[MSTP029] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 29, 0), +	[MSTP026] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 26, 0), +	[MSTP025] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 25, 0), +	[MSTP024] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 24, 0), +	[MSTP023] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 23, 0), +	[MSTP022] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 22, 0), +	[MSTP021] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 21, 0), +	[MSTP019] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 19, 0), +	[MSTP016] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 16, 0), +	[MSTP015] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 15, 0), +	[MSTP014] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 14, 0), +	[MSTP012] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 12, 0), +	[MSTP011] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 11, 0), +	[MSTP010] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 10, 0), +	[MSTP009] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 9, 0), +	[MSTP008] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 8, 0), +	[MSTP007] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 7, 0), + +	/* MSTPCR1 */ +	[MSTP115] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 15, 0), +	[MSTP114] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 14, 0), +	[MSTP111] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 11, 0), +	[MSTP109] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 9, 0), +	[MSTP108] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 8, 0), +	[MSTP107] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 7, 0), +	[MSTP106] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 6, 0), +	[MSTP103] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 3, 0), +	[MSTP100] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 0, 0), + +	/* MSTPCR3 */ +	[MSTP331] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 31, 0), +	[MSTP330] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 30, 0), +	[MSTP323] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 23, 0), +	[MSTP322] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 22, 0), +	[MSTP321] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 21, 0), +	[MSTP320] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 20, 0), +	[MSTP319] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 19, 0), +	[MSTP318] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 18, 0), +	[MSTP317] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 17, 0), +	[MSTP316] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 16, 0), +	[MSTP315] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 15, 0), +	[MSTP314] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 14, 0), +	[MSTP313] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 13, 0), +	[MSTP312] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 12, 0), +	[MSTP304] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  4, 0), +	[MSTP303] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  3, 0), +	[MSTP302] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  2, 0), +	[MSTP301] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  1, 0), +	[MSTP300] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  0, 0), +}; + +static struct clk_lookup lookups[] = { +	/* main clocks */ +	CLKDEV_CON_ID("extal", &extal_clk), +	CLKDEV_CON_ID("pll_clk", &pll_clk), + +	/* clocks */ +	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), +	CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_S]), +	CLKDEV_CON_ID("ddr_clk", &div4_clks[DIV4_M]), +	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), +	CLKDEV_CON_ID("shyway_clk1", &div4_clks[DIV4_S1]), +	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), + +	/* MSTP32 clocks */ +	CLKDEV_DEV_ID("i2c-sh7734.0", &mstp_clks[MSTP030]), +	CLKDEV_DEV_ID("i2c-sh7734.1", &mstp_clks[MSTP029]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP026]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP025]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP024]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.3", &mstp_clks[MSTP023]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.4", &mstp_clks[MSTP022]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.5", &mstp_clks[MSTP021]), +	CLKDEV_CON_ID("hscif", &mstp_clks[MSTP019]), +	CLKDEV_ICK_ID("fck", "sh-tmu.0", &mstp_clks[MSTP016]), +	CLKDEV_ICK_ID("fck", "sh-tmu.1", &mstp_clks[MSTP015]), +	CLKDEV_ICK_ID("fck", "sh-tmu.2", &mstp_clks[MSTP014]), +	CLKDEV_CON_ID("ssi0", &mstp_clks[MSTP012]), +	CLKDEV_CON_ID("ssi1", &mstp_clks[MSTP011]), +	CLKDEV_CON_ID("ssi2", &mstp_clks[MSTP010]), +	CLKDEV_CON_ID("ssi3", &mstp_clks[MSTP009]), +	CLKDEV_CON_ID("sss", &mstp_clks[MSTP008]), +	CLKDEV_CON_ID("hspi", &mstp_clks[MSTP007]), +	CLKDEV_CON_ID("usb_fck", &mstp_clks[MSTP100]), +	CLKDEV_CON_ID("videoin0", &mstp_clks[MSTP109]), +	CLKDEV_CON_ID("videoin1", &mstp_clks[MSTP108]), +	CLKDEV_CON_ID("rgpvg", &mstp_clks[MSTP107]), +	CLKDEV_CON_ID("2dg", &mstp_clks[MSTP106]), +	CLKDEV_CON_ID("view", &mstp_clks[MSTP103]), + +	CLKDEV_CON_ID("mmc0", &mstp_clks[MSTP331]), +	CLKDEV_CON_ID("mimlb0", &mstp_clks[MSTP330]), +	CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP323]), +	CLKDEV_CON_ID("sdhi1", &mstp_clks[MSTP322]), +	CLKDEV_CON_ID("sdhi2", &mstp_clks[MSTP321]), +	CLKDEV_CON_ID("rqspi0", &mstp_clks[MSTP320]), +	CLKDEV_CON_ID("src0", &mstp_clks[MSTP319]), +	CLKDEV_CON_ID("src1", &mstp_clks[MSTP318]), +	CLKDEV_CON_ID("rsp0", &mstp_clks[MSTP317]), +	CLKDEV_CON_ID("rcan0", &mstp_clks[MSTP316]), +	CLKDEV_CON_ID("rcan1", &mstp_clks[MSTP315]), +	CLKDEV_CON_ID("fltcl0", &mstp_clks[MSTP314]), +	CLKDEV_CON_ID("adc0", &mstp_clks[MSTP313]), +	CLKDEV_CON_ID("mtu0", &mstp_clks[MSTP312]), +	CLKDEV_CON_ID("iebus0", &mstp_clks[MSTP304]), +	CLKDEV_DEV_ID("sh7734-gether.0", &mstp_clks[MSTP114]), +	CLKDEV_CON_ID("rtc0", &mstp_clks[MSTP303]), +	CLKDEV_CON_ID("hif0", &mstp_clks[MSTP302]), +	CLKDEV_CON_ID("stif0", &mstp_clks[MSTP301]), +	CLKDEV_CON_ID("stif1", &mstp_clks[MSTP300]), +}; + +int __init arch_clk_init(void) +{ +	int i, ret = 0; + +	for (i = 0; i < ARRAY_SIZE(main_clks); i++) +		ret |= clk_register(main_clks[i]); + +	for (i = 0; i < ARRAY_SIZE(lookups); i++) +		clkdev_add(&lookups[i]); + +	if (!ret) +		ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks), +			&div4_table); + +	if (!ret) +		ret = sh_clk_mstp_register(mstp_clks, MSTP_NR); + +	return ret; +} diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7757.c b/arch/sh/kernel/cpu/sh4a/clock-sh7757.c index ce39a2ae8c6..9a28fdb3638 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7757.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7757.c @@ -12,7 +12,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h> @@ -33,7 +33,7 @@ static unsigned long pll_recalc(struct clk *clk)  	return clk->parent->rate * multiplier;  } -static struct clk_ops pll_clk_ops = { +static struct sh_clk_ops pll_clk_ops = {  	.recalc		= pll_recalc,  }; @@ -77,9 +77,10 @@ struct clk div4_clks[DIV4_NR] = {  #define MSTPCR0		0xffc80030  #define MSTPCR1		0xffc80034 +#define MSTPCR2		0xffc10028 -enum { MSTP004, MSTP000, MSTP114, MSTP113, MSTP112, -       MSTP111, MSTP110, MSTP103, MSTP102, +enum { MSTP004, MSTP000, MSTP127, MSTP114, MSTP113, MSTP112, +       MSTP111, MSTP110, MSTP103, MSTP102, MSTP220,         MSTP_NR };  static struct clk mstp_clks[MSTP_NR] = { @@ -88,6 +89,7 @@ static struct clk mstp_clks[MSTP_NR] = {  	[MSTP000] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 0, 0),  	/* MSTPCR1 */ +	[MSTP127] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 27, 0),  	[MSTP114] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 14, 0),  	[MSTP113] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 13, 0),  	[MSTP112] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 12, 0), @@ -95,9 +97,10 @@ static struct clk mstp_clks[MSTP_NR] = {  	[MSTP110] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 10, 0),  	[MSTP103] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 3, 0),  	[MSTP102] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 2, 0), -}; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } +	/* MSTPCR2 */ +	[MSTP220] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR2, 20, 0), +};  static struct clk_lookup lookups[] = {  	/* main clocks */ @@ -110,36 +113,26 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]),  	/* MSTP32 clocks */ -	CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP004]), -	CLKDEV_CON_ID("riic", &mstp_clks[MSTP000]), -	{ -		/* TMU0 */ -		.dev_id		= "sh_tmu.0", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP113], -	}, { -		/* TMU1 */ -		.dev_id		= "sh_tmu.1", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP114], -	}, -	{ -		/* SCIF4 (But, ID is 2) */ -		.dev_id		= "sh-sci.2", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP112], -	}, { -		/* SCIF3 */ -		.dev_id		= "sh-sci.1", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP111], -	}, { -		/* SCIF2 */ -		.dev_id		= "sh-sci.0", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP110], -	}, -	CLKDEV_CON_ID("usb0", &mstp_clks[MSTP102]), +	CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP004]), +	CLKDEV_CON_ID("riic0", &mstp_clks[MSTP000]), +	CLKDEV_CON_ID("riic1", &mstp_clks[MSTP000]), +	CLKDEV_CON_ID("riic2", &mstp_clks[MSTP000]), +	CLKDEV_CON_ID("riic3", &mstp_clks[MSTP000]), +	CLKDEV_CON_ID("riic4", &mstp_clks[MSTP000]), +	CLKDEV_CON_ID("riic5", &mstp_clks[MSTP000]), +	CLKDEV_CON_ID("riic6", &mstp_clks[MSTP000]), +	CLKDEV_CON_ID("riic7", &mstp_clks[MSTP000]), + +	CLKDEV_ICK_ID("fck", "sh-tmu.0", &mstp_clks[MSTP113]), +	CLKDEV_ICK_ID("fck", "sh-tmu.1", &mstp_clks[MSTP114]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP112]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP111]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP110]), + +	CLKDEV_CON_ID("usb_fck", &mstp_clks[MSTP103]), +	CLKDEV_DEV_ID("renesas_usbhs.0", &mstp_clks[MSTP102]), +	CLKDEV_CON_ID("mmc0", &mstp_clks[MSTP220]), +	CLKDEV_DEV_ID("rspi.2", &mstp_clks[MSTP127]),  };  int __init arch_clk_init(void) @@ -155,7 +148,7 @@ int __init arch_clk_init(void)  		ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks),  					   &div4_table);  	if (!ret) -		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); +		ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7763.c b/arch/sh/kernel/cpu/sh4a/clock-sh7763.c index 1f1df48008c..7707e35aea4 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7763.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7763.c @@ -13,7 +13,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h>  #include <asm/io.h> @@ -27,7 +27,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= p0fc_divisors[(__raw_readl(FRQCR) >> 4) & 0x07];  } -static struct clk_ops sh7763_master_clk_ops = { +static struct sh_clk_ops sh7763_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -37,7 +37,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / p0fc_divisors[idx];  } -static struct clk_ops sh7763_module_clk_ops = { +static struct sh_clk_ops sh7763_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -47,22 +47,22 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / bfc_divisors[idx];  } -static struct clk_ops sh7763_bus_clk_ops = { +static struct sh_clk_ops sh7763_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; -static struct clk_ops sh7763_cpu_clk_ops = { +static struct sh_clk_ops sh7763_cpu_clk_ops = {  	.recalc		= followparent_recalc,  }; -static struct clk_ops *sh7763_clk_ops[] = { +static struct sh_clk_ops *sh7763_clk_ops[] = {  	&sh7763_master_clk_ops,  	&sh7763_module_clk_ops,  	&sh7763_bus_clk_ops,  	&sh7763_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh7763_clk_ops))  		*ops = sh7763_clk_ops[idx]; @@ -74,7 +74,7 @@ static unsigned long shyway_clk_recalc(struct clk *clk)  	return clk->parent->rate / cfc_divisors[idx];  } -static struct clk_ops sh7763_shyway_clk_ops = { +static struct sh_clk_ops sh7763_shyway_clk_ops = {  	.recalc		= shyway_clk_recalc,  }; @@ -91,8 +91,6 @@ static struct clk *sh7763_onchip_clocks[] = {  	&sh7763_shyway_clk,  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("shyway_clk", &sh7763_shyway_clk), diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7770.c b/arch/sh/kernel/cpu/sh4a/clock-sh7770.c index 9e3354365d4..5d36f334bb0 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7770.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7770.c @@ -24,7 +24,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= pfc_divisors[(__raw_readl(FRQCR) >> 28) & 0x000f];  } -static struct clk_ops sh7770_master_clk_ops = { +static struct sh_clk_ops sh7770_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -34,7 +34,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7770_module_clk_ops = { +static struct sh_clk_ops sh7770_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -44,7 +44,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / bfc_divisors[idx];  } -static struct clk_ops sh7770_bus_clk_ops = { +static struct sh_clk_ops sh7770_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -54,18 +54,18 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh7770_cpu_clk_ops = { +static struct sh_clk_ops sh7770_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7770_clk_ops[] = { +static struct sh_clk_ops *sh7770_clk_ops[] = {  	&sh7770_master_clk_ops,  	&sh7770_module_clk_ops,  	&sh7770_bus_clk_ops,  	&sh7770_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh7770_clk_ops))  		*ops = sh7770_clk_ops[idx]; diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7780.c b/arch/sh/kernel/cpu/sh4a/clock-sh7780.c index 62d70635006..793dae42a2f 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7780.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7780.c @@ -12,7 +12,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h>  #include <asm/io.h> @@ -27,7 +27,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= pfc_divisors[__raw_readl(FRQCR) & 0x0003];  } -static struct clk_ops sh7780_master_clk_ops = { +static struct sh_clk_ops sh7780_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -37,7 +37,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7780_module_clk_ops = { +static struct sh_clk_ops sh7780_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -47,7 +47,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / bfc_divisors[idx];  } -static struct clk_ops sh7780_bus_clk_ops = { +static struct sh_clk_ops sh7780_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -57,18 +57,18 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh7780_cpu_clk_ops = { +static struct sh_clk_ops sh7780_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7780_clk_ops[] = { +static struct sh_clk_ops *sh7780_clk_ops[] = {  	&sh7780_master_clk_ops,  	&sh7780_module_clk_ops,  	&sh7780_bus_clk_ops,  	&sh7780_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	if (idx < ARRAY_SIZE(sh7780_clk_ops))  		*ops = sh7780_clk_ops[idx]; @@ -80,7 +80,7 @@ static unsigned long shyway_clk_recalc(struct clk *clk)  	return clk->parent->rate / cfc_divisors[idx];  } -static struct clk_ops sh7780_shyway_clk_ops = { +static struct sh_clk_ops sh7780_shyway_clk_ops = {  	.recalc		= shyway_clk_recalc,  }; @@ -97,8 +97,6 @@ static struct clk *sh7780_onchip_clocks[] = {  	&sh7780_shyway_clk,  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("shyway_clk", &sh7780_shyway_clk), diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c index c3e458aaa2b..17d0ea55a5a 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c @@ -14,7 +14,7 @@  #include <linux/clk.h>  #include <linux/io.h>  #include <linux/cpufreq.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h>  #include <cpu/sh7785.h> @@ -36,7 +36,7 @@ static unsigned long pll_recalc(struct clk *clk)  	return clk->parent->rate * multiplier;  } -static struct clk_ops pll_clk_ops = { +static struct sh_clk_ops pll_clk_ops = {  	.recalc		= pll_recalc,  }; @@ -116,8 +116,6 @@ static struct clk mstp_clks[MSTP_NR] = {  	[MSTP100] = SH_CLK_MSTP32(NULL, MSTPCR1, 0, 0),  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("extal", &extal_clk), @@ -134,78 +132,27 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]),  	/* MSTP32 clocks */ -	{ -		/* SCIF5 */ -		.dev_id		= "sh-sci.5", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP029], -	}, { -		/* SCIF4 */ -		.dev_id		= "sh-sci.4", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP028], -	}, { -		/* SCIF3 */ -		.dev_id		= "sh-sci.3", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP027], -	}, { -		/* SCIF2 */ -		.dev_id		= "sh-sci.2", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP026], -	}, { -		/* SCIF1 */ -		.dev_id		= "sh-sci.1", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP025], -	}, { -		/* SCIF0 */ -		.dev_id		= "sh-sci.0", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP024], -	}, +	CLKDEV_ICK_ID("sci_fck", "sh-sci.5", &mstp_clks[MSTP029]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.4", &mstp_clks[MSTP028]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.3", &mstp_clks[MSTP027]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP026]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP025]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP024]), +  	CLKDEV_CON_ID("ssi1_fck", &mstp_clks[MSTP021]),  	CLKDEV_CON_ID("ssi0_fck", &mstp_clks[MSTP020]),  	CLKDEV_CON_ID("hac1_fck", &mstp_clks[MSTP017]),  	CLKDEV_CON_ID("hac0_fck", &mstp_clks[MSTP016]),  	CLKDEV_CON_ID("mmcif_fck", &mstp_clks[MSTP013]),  	CLKDEV_CON_ID("flctl_fck", &mstp_clks[MSTP012]), -	{ -		/* TMU0 */ -		.dev_id		= "sh_tmu.0", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP008], -	}, { -		/* TMU1 */ -		.dev_id		= "sh_tmu.1", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP008], -	}, { -		/* TMU2 */ -		.dev_id		= "sh_tmu.2", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP008], -	}, { -		/* TMU3 */ -		.dev_id		= "sh_tmu.3", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP009], -	}, { -		/* TMU4 */ -		.dev_id		= "sh_tmu.4", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP009], -	}, { -		/* TMU5 */ -		.dev_id		= "sh_tmu.5", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP009], -	}, + +	CLKDEV_ICK_ID("fck", "sh-tmu.0", &mstp_clks[MSTP008]), +	CLKDEV_ICK_ID("fck", "sh-tmu.1", &mstp_clks[MSTP009]), +  	CLKDEV_CON_ID("siof_fck", &mstp_clks[MSTP003]),  	CLKDEV_CON_ID("hspi_fck", &mstp_clks[MSTP002]),  	CLKDEV_CON_ID("hudi_fck", &mstp_clks[MSTP119]), -	CLKDEV_CON_ID("ubc_fck", &mstp_clks[MSTP117]), +	CLKDEV_CON_ID("ubc0", &mstp_clks[MSTP117]),  	CLKDEV_CON_ID("dmac_11_6_fck", &mstp_clks[MSTP105]),  	CLKDEV_CON_ID("dmac_5_0_fck", &mstp_clks[MSTP104]),  	CLKDEV_CON_ID("gdta_fck", &mstp_clks[MSTP100]), @@ -224,7 +171,7 @@ int __init arch_clk_init(void)  		ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks),  					   &div4_table);  	if (!ret) -		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); +		ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7786.c b/arch/sh/kernel/cpu/sh4a/clock-sh7786.c index 597c9fbe49c..bec2a83f1ba 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7786.c @@ -13,7 +13,7 @@  #include <linux/kernel.h>  #include <linux/clk.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h> @@ -38,7 +38,7 @@ static unsigned long pll_recalc(struct clk *clk)  	return clk->parent->rate * multiplier;  } -static struct clk_ops pll_clk_ops = { +static struct sh_clk_ops pll_clk_ops = {  	.recalc		= pll_recalc,  }; @@ -125,8 +125,6 @@ static struct clk mstp_clks[MSTP_NR] = {  	[MSTP102] = SH_CLK_MSTP32(NULL, MSTPCR1, 2, 0),  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("extal", &extal_clk), @@ -141,37 +139,13 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]),  	/* MSTP32 clocks */ -	{ -		/* SCIF5 */ -		.dev_id		= "sh-sci.5", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP029], -	}, { -		/* SCIF4 */ -		.dev_id		= "sh-sci.4", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP028], -	}, { -		/* SCIF3 */ -		.dev_id		= "sh-sci.3", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP027], -	}, { -		/* SCIF2 */ -		.dev_id		= "sh-sci.2", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP026], -	}, { -		/* SCIF1 */ -		.dev_id		= "sh-sci.1", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP025], -	}, { -		/* SCIF0 */ -		.dev_id		= "sh-sci.0", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP024], -	}, +	CLKDEV_ICK_ID("sci_fck", "sh-sci.5", &mstp_clks[MSTP029]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.4", &mstp_clks[MSTP028]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.3", &mstp_clks[MSTP027]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP026]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP025]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP024]), +  	CLKDEV_CON_ID("ssi3_fck", &mstp_clks[MSTP023]),  	CLKDEV_CON_ID("ssi2_fck", &mstp_clks[MSTP022]),  	CLKDEV_CON_ID("ssi1_fck", &mstp_clks[MSTP021]), @@ -180,67 +154,12 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("hac0_fck", &mstp_clks[MSTP016]),  	CLKDEV_CON_ID("i2c1_fck", &mstp_clks[MSTP015]),  	CLKDEV_CON_ID("i2c0_fck", &mstp_clks[MSTP014]), -	{ -		/* TMU0 */ -		.dev_id		= "sh_tmu.0", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP008], -	}, { -		/* TMU1 */ -		.dev_id		= "sh_tmu.1", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP008], -	}, { -		/* TMU2 */ -		.dev_id		= "sh_tmu.2", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP008], -	}, { -		/* TMU3 */ -		.dev_id		= "sh_tmu.3", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP009], -	}, { -		/* TMU4 */ -		.dev_id		= "sh_tmu.4", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP009], -	}, { -		/* TMU5 */ -		.dev_id		= "sh_tmu.5", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP009], -	}, { -		/* TMU6 */ -		.dev_id		= "sh_tmu.6", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP010], -	}, { -		/* TMU7 */ -		.dev_id		= "sh_tmu.7", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP010], -	}, { -		/* TMU8 */ -		.dev_id		= "sh_tmu.8", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP010], -	}, { -		/* TMU9 */ -		.dev_id		= "sh_tmu.9", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP011], -	}, { -		/* TMU10 */ -		.dev_id		= "sh_tmu.10", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP011], -	}, { -		/* TMU11 */ -		.dev_id		= "sh_tmu.11", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP011], -	}, + +	CLKDEV_ICK_ID("fck", "sh-tmu.0", &mstp_clks[MSTP008]), +	CLKDEV_ICK_ID("fck", "sh-tmu.1", &mstp_clks[MSTP009]), +	CLKDEV_ICK_ID("fck", "sh-tmu.2", &mstp_clks[MSTP010]), +	CLKDEV_ICK_ID("fck", "sh-tmu.3", &mstp_clks[MSTP011]), +  	CLKDEV_CON_ID("sdif1_fck", &mstp_clks[MSTP005]),  	CLKDEV_CON_ID("sdif0_fck", &mstp_clks[MSTP004]),  	CLKDEV_CON_ID("hspi_fck", &mstp_clks[MSTP002]), @@ -267,7 +186,7 @@ int __init arch_clk_init(void)  		ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks),  					   &div4_table);  	if (!ret) -		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); +		ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/clock-shx3.c b/arch/sh/kernel/cpu/sh4a/clock-shx3.c index 4f70df6b616..9a49a44f6f9 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-shx3.c +++ b/arch/sh/kernel/cpu/sh4a/clock-shx3.c @@ -14,7 +14,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h>  #include <asm/clock.h>  #include <asm/freq.h> @@ -32,7 +32,7 @@ static unsigned long pll_recalc(struct clk *clk)  	return clk->parent->rate * 72;  } -static struct clk_ops pll_clk_ops = { +static struct sh_clk_ops pll_clk_ops = {  	.recalc		= pll_recalc,  }; @@ -100,8 +100,6 @@ static struct clk mstp_clks[MSTP_NR] = {  	[MSTP104] = SH_CLK_MSTP32(NULL, MSTPCR1, 4, 0),  }; -#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } -  static struct clk_lookup lookups[] = {  	/* main clocks */  	CLKDEV_CON_ID("extal", &extal_clk), @@ -116,62 +114,19 @@ static struct clk_lookup lookups[] = {  	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]),  	/* MSTP32 clocks */ -	{ -		/* SCIF3 */ -		.dev_id		= "sh-sci.3", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP027], -	}, { -		/* SCIF2 */ -		.dev_id		= "sh-sci.2", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP026], -	}, { -		/* SCIF1 */ -		.dev_id		= "sh-sci.1", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP025], -	}, { -		/* SCIF0 */ -		.dev_id		= "sh-sci.0", -		.con_id		= "sci_fck", -		.clk		= &mstp_clks[MSTP024], -	}, +	CLKDEV_ICK_ID("sci_fck", "sh-sci.3", &mstp_clks[MSTP027]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP026]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP025]), +	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP024]), +  	CLKDEV_CON_ID("h8ex_fck", &mstp_clks[MSTP003]),  	CLKDEV_CON_ID("csm_fck", &mstp_clks[MSTP002]),  	CLKDEV_CON_ID("fe1_fck", &mstp_clks[MSTP001]),  	CLKDEV_CON_ID("fe0_fck", &mstp_clks[MSTP000]), -	{ -		/* TMU0 */ -		.dev_id		= "sh_tmu.0", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP008], -	}, { -		/* TMU1 */ -		.dev_id		= "sh_tmu.1", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP008], -	}, { -		/* TMU2 */ -		.dev_id		= "sh_tmu.2", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP008], -	}, { -		/* TMU3 */ -		.dev_id		= "sh_tmu.3", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP009], -	}, { -		/* TMU4 */ -		.dev_id		= "sh_tmu.4", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP009], -	}, { -		/* TMU5 */ -		.dev_id		= "sh_tmu.5", -		.con_id		= "tmu_fck", -		.clk		= &mstp_clks[MSTP009], -	}, + +	CLKDEV_ICK_ID("fck", "sh-tmu.0", &mstp_clks[MSTP008]), +	CLKDEV_ICK_ID("fck", "sh-tmu.1", &mstp_clks[MSTP009]), +  	CLKDEV_CON_ID("hudi_fck", &mstp_clks[MSTP119]),  	CLKDEV_CON_ID("dmac_11_6_fck", &mstp_clks[MSTP105]),  	CLKDEV_CON_ID("dmac_5_0_fck", &mstp_clks[MSTP104]), @@ -190,7 +145,7 @@ int __init arch_clk_init(void)  		ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks),  					   &div4_table);  	if (!ret) -		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); +		ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);  	return ret;  } diff --git a/arch/sh/kernel/cpu/sh4a/hwblk-sh7722.c b/arch/sh/kernel/cpu/sh4a/hwblk-sh7722.c deleted file mode 100644 index a288b5d9234..00000000000 --- a/arch/sh/kernel/cpu/sh4a/hwblk-sh7722.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * arch/sh/kernel/cpu/sh4a/hwblk-sh7722.c - * - * SH7722 hardware block support - * - * Copyright (C) 2009 Magnus Damm - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/io.h> -#include <asm/suspend.h> -#include <asm/hwblk.h> -#include <cpu/sh7722.h> - -/* SH7722 registers */ -#define MSTPCR0		0xa4150030 -#define MSTPCR1		0xa4150034 -#define MSTPCR2		0xa4150038 - -/* SH7722 Power Domains */ -enum { CORE_AREA, SUB_AREA, CORE_AREA_BM }; -static struct hwblk_area sh7722_hwblk_area[] = { -	[CORE_AREA] = HWBLK_AREA(0, 0), -	[CORE_AREA_BM] = HWBLK_AREA(HWBLK_AREA_FLAG_PARENT, CORE_AREA), -	[SUB_AREA] = HWBLK_AREA(0, 0), -}; - -/* Table mapping HWBLK to Module Stop Bit and Power Domain */ -static struct hwblk sh7722_hwblk[HWBLK_NR] = { -	[HWBLK_TLB] = HWBLK(MSTPCR0, 31, CORE_AREA), -	[HWBLK_IC] = HWBLK(MSTPCR0, 30, CORE_AREA), -	[HWBLK_OC] = HWBLK(MSTPCR0, 29, CORE_AREA), -	[HWBLK_URAM] = HWBLK(MSTPCR0, 28, CORE_AREA), -	[HWBLK_XYMEM] = HWBLK(MSTPCR0, 26, CORE_AREA), -	[HWBLK_INTC] = HWBLK(MSTPCR0, 22, CORE_AREA), -	[HWBLK_DMAC] = HWBLK(MSTPCR0, 21, CORE_AREA_BM), -	[HWBLK_SHYWAY] = HWBLK(MSTPCR0, 20, CORE_AREA), -	[HWBLK_HUDI] = HWBLK(MSTPCR0, 19, CORE_AREA), -	[HWBLK_UBC] = HWBLK(MSTPCR0, 17, CORE_AREA), -	[HWBLK_TMU] = HWBLK(MSTPCR0, 15, CORE_AREA), -	[HWBLK_CMT] = HWBLK(MSTPCR0, 14, SUB_AREA), -	[HWBLK_RWDT] = HWBLK(MSTPCR0, 13, SUB_AREA), -	[HWBLK_FLCTL] = HWBLK(MSTPCR0, 10, CORE_AREA), -	[HWBLK_SCIF0] = HWBLK(MSTPCR0, 7, CORE_AREA), -	[HWBLK_SCIF1] = HWBLK(MSTPCR0, 6, CORE_AREA), -	[HWBLK_SCIF2] = HWBLK(MSTPCR0, 5, CORE_AREA), -	[HWBLK_SIO] = HWBLK(MSTPCR0, 3, CORE_AREA), -	[HWBLK_SIOF0] = HWBLK(MSTPCR0, 2, CORE_AREA), -	[HWBLK_SIOF1] = HWBLK(MSTPCR0, 1, CORE_AREA), - -	[HWBLK_IIC] = HWBLK(MSTPCR1, 9, CORE_AREA), -	[HWBLK_RTC] = HWBLK(MSTPCR1, 8, SUB_AREA), - -	[HWBLK_TPU] = HWBLK(MSTPCR2, 25, CORE_AREA), -	[HWBLK_IRDA] = HWBLK(MSTPCR2, 24, CORE_AREA), -	[HWBLK_SDHI] = HWBLK(MSTPCR2, 18, CORE_AREA), -	[HWBLK_SIM] = HWBLK(MSTPCR2, 16, CORE_AREA), -	[HWBLK_KEYSC] = HWBLK(MSTPCR2, 14, SUB_AREA), -	[HWBLK_TSIF] = HWBLK(MSTPCR2, 13, SUB_AREA), -	[HWBLK_USBF] = HWBLK(MSTPCR2, 11, CORE_AREA), -	[HWBLK_2DG] = HWBLK(MSTPCR2, 9, CORE_AREA_BM), -	[HWBLK_SIU] = HWBLK(MSTPCR2, 8, CORE_AREA), -	[HWBLK_JPU] = HWBLK(MSTPCR2, 6, CORE_AREA_BM), -	[HWBLK_VOU] = HWBLK(MSTPCR2, 5, CORE_AREA_BM), -	[HWBLK_BEU] = HWBLK(MSTPCR2, 4, CORE_AREA_BM), -	[HWBLK_CEU] = HWBLK(MSTPCR2, 3, CORE_AREA_BM), -	[HWBLK_VEU] = HWBLK(MSTPCR2, 2, CORE_AREA_BM), -	[HWBLK_VPU] = HWBLK(MSTPCR2, 1, CORE_AREA_BM), -	[HWBLK_LCDC] = HWBLK(MSTPCR2, 0, CORE_AREA_BM), -}; - -static struct hwblk_info sh7722_hwblk_info = { -	.areas = sh7722_hwblk_area, -	.nr_areas = ARRAY_SIZE(sh7722_hwblk_area), -	.hwblks = sh7722_hwblk, -	.nr_hwblks = ARRAY_SIZE(sh7722_hwblk), -}; - -int arch_hwblk_sleep_mode(void) -{ -	if (!sh7722_hwblk_area[CORE_AREA].cnt[HWBLK_CNT_USAGE]) -		return SUSP_SH_STANDBY | SUSP_SH_SF; - -	if (!sh7722_hwblk_area[CORE_AREA_BM].cnt[HWBLK_CNT_USAGE]) -		return SUSP_SH_SLEEP | SUSP_SH_SF; - -	return SUSP_SH_SLEEP; -} - -int __init arch_hwblk_init(void) -{ -	return hwblk_register(&sh7722_hwblk_info); -} diff --git a/arch/sh/kernel/cpu/sh4a/hwblk-sh7723.c b/arch/sh/kernel/cpu/sh4a/hwblk-sh7723.c deleted file mode 100644 index a7f4684d203..00000000000 --- a/arch/sh/kernel/cpu/sh4a/hwblk-sh7723.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - * arch/sh/kernel/cpu/sh4a/hwblk-sh7723.c - * - * SH7723 hardware block support - * - * Copyright (C) 2009 Magnus Damm - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/io.h> -#include <asm/suspend.h> -#include <asm/hwblk.h> -#include <cpu/sh7723.h> - -/* SH7723 registers */ -#define MSTPCR0		0xa4150030 -#define MSTPCR1		0xa4150034 -#define MSTPCR2		0xa4150038 - -/* SH7723 Power Domains */ -enum { CORE_AREA, SUB_AREA, CORE_AREA_BM }; -static struct hwblk_area sh7723_hwblk_area[] = { -	[CORE_AREA] = HWBLK_AREA(0, 0), -	[CORE_AREA_BM] = HWBLK_AREA(HWBLK_AREA_FLAG_PARENT, CORE_AREA), -	[SUB_AREA] = HWBLK_AREA(0, 0), -}; - -/* Table mapping HWBLK to Module Stop Bit and Power Domain */ -static struct hwblk sh7723_hwblk[HWBLK_NR] = { -	[HWBLK_TLB] = HWBLK(MSTPCR0, 31, CORE_AREA), -	[HWBLK_IC] = HWBLK(MSTPCR0, 30, CORE_AREA), -	[HWBLK_OC] = HWBLK(MSTPCR0, 29, CORE_AREA), -	[HWBLK_L2C] = HWBLK(MSTPCR0, 28, CORE_AREA), -	[HWBLK_ILMEM] = HWBLK(MSTPCR0, 27, CORE_AREA), -	[HWBLK_FPU] = HWBLK(MSTPCR0, 24, CORE_AREA), -	[HWBLK_INTC] = HWBLK(MSTPCR0, 22, CORE_AREA), -	[HWBLK_DMAC0] = HWBLK(MSTPCR0, 21, CORE_AREA_BM), -	[HWBLK_SHYWAY] = HWBLK(MSTPCR0, 20, CORE_AREA), -	[HWBLK_HUDI] = HWBLK(MSTPCR0, 19, CORE_AREA), -	[HWBLK_DBG] = HWBLK(MSTPCR0, 18, CORE_AREA), -	[HWBLK_UBC] = HWBLK(MSTPCR0, 17, CORE_AREA), -	[HWBLK_SUBC] = HWBLK(MSTPCR0, 16, CORE_AREA), -	[HWBLK_TMU0] = HWBLK(MSTPCR0, 15, CORE_AREA), -	[HWBLK_CMT] = HWBLK(MSTPCR0, 14, SUB_AREA), -	[HWBLK_RWDT] = HWBLK(MSTPCR0, 13, SUB_AREA), -	[HWBLK_DMAC1] = HWBLK(MSTPCR0, 12, CORE_AREA_BM), -	[HWBLK_TMU1] = HWBLK(MSTPCR0, 11, CORE_AREA), -	[HWBLK_FLCTL] = HWBLK(MSTPCR0, 10, CORE_AREA), -	[HWBLK_SCIF0] = HWBLK(MSTPCR0, 9, CORE_AREA), -	[HWBLK_SCIF1] = HWBLK(MSTPCR0, 8, CORE_AREA), -	[HWBLK_SCIF2] = HWBLK(MSTPCR0, 7, CORE_AREA), -	[HWBLK_SCIF3] = HWBLK(MSTPCR0, 6, CORE_AREA), -	[HWBLK_SCIF4] = HWBLK(MSTPCR0, 5, CORE_AREA), -	[HWBLK_SCIF5] = HWBLK(MSTPCR0, 4, CORE_AREA), -	[HWBLK_MSIOF0] = HWBLK(MSTPCR0, 2, CORE_AREA), -	[HWBLK_MSIOF1] = HWBLK(MSTPCR0, 1, CORE_AREA), -	[HWBLK_MERAM] = HWBLK(MSTPCR0, 0, CORE_AREA), - -	[HWBLK_IIC] = HWBLK(MSTPCR1, 9, CORE_AREA), -	[HWBLK_RTC] = HWBLK(MSTPCR1, 8, SUB_AREA), - -	[HWBLK_ATAPI] = HWBLK(MSTPCR2, 28, CORE_AREA_BM), -	[HWBLK_ADC] = HWBLK(MSTPCR2, 27, CORE_AREA), -	[HWBLK_TPU] = HWBLK(MSTPCR2, 25, CORE_AREA), -	[HWBLK_IRDA] = HWBLK(MSTPCR2, 24, CORE_AREA), -	[HWBLK_TSIF] = HWBLK(MSTPCR2, 22, CORE_AREA), -	[HWBLK_ICB] = HWBLK(MSTPCR2, 21, CORE_AREA_BM), -	[HWBLK_SDHI0] = HWBLK(MSTPCR2, 18, CORE_AREA), -	[HWBLK_SDHI1] = HWBLK(MSTPCR2, 17, CORE_AREA), -	[HWBLK_KEYSC] = HWBLK(MSTPCR2, 14, SUB_AREA), -	[HWBLK_USB] = HWBLK(MSTPCR2, 11, CORE_AREA), -	[HWBLK_2DG] = HWBLK(MSTPCR2, 10, CORE_AREA_BM), -	[HWBLK_SIU] = HWBLK(MSTPCR2, 8, CORE_AREA), -	[HWBLK_VEU2H1] = HWBLK(MSTPCR2, 6, CORE_AREA_BM), -	[HWBLK_VOU] = HWBLK(MSTPCR2, 5, CORE_AREA_BM), -	[HWBLK_BEU] = HWBLK(MSTPCR2, 4, CORE_AREA_BM), -	[HWBLK_CEU] = HWBLK(MSTPCR2, 3, CORE_AREA_BM), -	[HWBLK_VEU2H0] = HWBLK(MSTPCR2, 2, CORE_AREA_BM), -	[HWBLK_VPU] = HWBLK(MSTPCR2, 1, CORE_AREA_BM), -	[HWBLK_LCDC] = HWBLK(MSTPCR2, 0, CORE_AREA_BM), -}; - -static struct hwblk_info sh7723_hwblk_info = { -	.areas = sh7723_hwblk_area, -	.nr_areas = ARRAY_SIZE(sh7723_hwblk_area), -	.hwblks = sh7723_hwblk, -	.nr_hwblks = ARRAY_SIZE(sh7723_hwblk), -}; - -int arch_hwblk_sleep_mode(void) -{ -	if (!sh7723_hwblk_area[CORE_AREA].cnt[HWBLK_CNT_USAGE]) -		return SUSP_SH_STANDBY | SUSP_SH_SF; - -	if (!sh7723_hwblk_area[CORE_AREA_BM].cnt[HWBLK_CNT_USAGE]) -		return SUSP_SH_SLEEP | SUSP_SH_SF; - -	return SUSP_SH_SLEEP; -} - -int __init arch_hwblk_init(void) -{ -	return hwblk_register(&sh7723_hwblk_info); -} diff --git a/arch/sh/kernel/cpu/sh4a/hwblk-sh7724.c b/arch/sh/kernel/cpu/sh4a/hwblk-sh7724.c deleted file mode 100644 index 1613ad6013c..00000000000 --- a/arch/sh/kernel/cpu/sh4a/hwblk-sh7724.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * arch/sh/kernel/cpu/sh4a/hwblk-sh7724.c - * - * SH7724 hardware block support - * - * Copyright (C) 2009 Magnus Damm - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/io.h> -#include <asm/suspend.h> -#include <asm/hwblk.h> -#include <cpu/sh7724.h> - -/* SH7724 registers */ -#define MSTPCR0		0xa4150030 -#define MSTPCR1		0xa4150034 -#define MSTPCR2		0xa4150038 - -/* SH7724 Power Domains */ -enum { CORE_AREA, SUB_AREA, CORE_AREA_BM }; -static struct hwblk_area sh7724_hwblk_area[] = { -	[CORE_AREA] = HWBLK_AREA(0, 0), -	[CORE_AREA_BM] = HWBLK_AREA(HWBLK_AREA_FLAG_PARENT, CORE_AREA), -	[SUB_AREA] = HWBLK_AREA(0, 0), -}; - -/* Table mapping HWBLK to Module Stop Bit and Power Domain */ -static struct hwblk sh7724_hwblk[HWBLK_NR] = { -	[HWBLK_TLB] = HWBLK(MSTPCR0, 31, CORE_AREA), -	[HWBLK_IC] = HWBLK(MSTPCR0, 30, CORE_AREA), -	[HWBLK_OC] = HWBLK(MSTPCR0, 29, CORE_AREA), -	[HWBLK_RSMEM] = HWBLK(MSTPCR0, 28, CORE_AREA), -	[HWBLK_ILMEM] = HWBLK(MSTPCR0, 27, CORE_AREA), -	[HWBLK_L2C] = HWBLK(MSTPCR0, 26, CORE_AREA), -	[HWBLK_FPU] = HWBLK(MSTPCR0, 24, CORE_AREA), -	[HWBLK_INTC] = HWBLK(MSTPCR0, 22, CORE_AREA), -	[HWBLK_DMAC0] = HWBLK(MSTPCR0, 21, CORE_AREA_BM), -	[HWBLK_SHYWAY] = HWBLK(MSTPCR0, 20, CORE_AREA), -	[HWBLK_HUDI] = HWBLK(MSTPCR0, 19, CORE_AREA), -	[HWBLK_DBG] = HWBLK(MSTPCR0, 18, CORE_AREA), -	[HWBLK_UBC] = HWBLK(MSTPCR0, 17, CORE_AREA), -	[HWBLK_TMU0] = HWBLK(MSTPCR0, 15, CORE_AREA), -	[HWBLK_CMT] = HWBLK(MSTPCR0, 14, SUB_AREA), -	[HWBLK_RWDT] = HWBLK(MSTPCR0, 13, SUB_AREA), -	[HWBLK_DMAC1] = HWBLK(MSTPCR0, 12, CORE_AREA_BM), -	[HWBLK_TMU1] = HWBLK(MSTPCR0, 10, CORE_AREA), -	[HWBLK_SCIF0] = HWBLK(MSTPCR0, 9, CORE_AREA), -	[HWBLK_SCIF1] = HWBLK(MSTPCR0, 8, CORE_AREA), -	[HWBLK_SCIF2] = HWBLK(MSTPCR0, 7, CORE_AREA), -	[HWBLK_SCIF3] = HWBLK(MSTPCR0, 6, CORE_AREA), -	[HWBLK_SCIF4] = HWBLK(MSTPCR0, 5, CORE_AREA), -	[HWBLK_SCIF5] = HWBLK(MSTPCR0, 4, CORE_AREA), -	[HWBLK_MSIOF0] = HWBLK(MSTPCR0, 2, CORE_AREA), -	[HWBLK_MSIOF1] = HWBLK(MSTPCR0, 1, CORE_AREA), - -	[HWBLK_KEYSC] = HWBLK(MSTPCR1, 12, SUB_AREA), -	[HWBLK_RTC] = HWBLK(MSTPCR1, 11, SUB_AREA), -	[HWBLK_IIC0] = HWBLK(MSTPCR1, 9, CORE_AREA), -	[HWBLK_IIC1] = HWBLK(MSTPCR1, 8, CORE_AREA), - -	[HWBLK_MMC] = HWBLK(MSTPCR2, 29, CORE_AREA), -	[HWBLK_ETHER] = HWBLK(MSTPCR2, 28, CORE_AREA_BM), -	[HWBLK_ATAPI] = HWBLK(MSTPCR2, 26, CORE_AREA_BM), -	[HWBLK_TPU] = HWBLK(MSTPCR2, 25, CORE_AREA), -	[HWBLK_IRDA] = HWBLK(MSTPCR2, 24, CORE_AREA), -	[HWBLK_TSIF] = HWBLK(MSTPCR2, 22, CORE_AREA), -	[HWBLK_USB1] = HWBLK(MSTPCR2, 21, CORE_AREA), -	[HWBLK_USB0] = HWBLK(MSTPCR2, 20, CORE_AREA), -	[HWBLK_2DG] = HWBLK(MSTPCR2, 19, CORE_AREA_BM), -	[HWBLK_SDHI0] = HWBLK(MSTPCR2, 18, CORE_AREA), -	[HWBLK_SDHI1] = HWBLK(MSTPCR2, 17, CORE_AREA), -	[HWBLK_VEU1] = HWBLK(MSTPCR2, 15, CORE_AREA_BM), -	[HWBLK_CEU1] = HWBLK(MSTPCR2, 13, CORE_AREA_BM), -	[HWBLK_BEU1] = HWBLK(MSTPCR2, 12, CORE_AREA_BM), -	[HWBLK_2DDMAC] = HWBLK(MSTPCR2, 10, CORE_AREA_BM), -	[HWBLK_SPU] = HWBLK(MSTPCR2, 9, CORE_AREA_BM), -	[HWBLK_JPU] = HWBLK(MSTPCR2, 6, CORE_AREA_BM), -	[HWBLK_VOU] = HWBLK(MSTPCR2, 5, CORE_AREA_BM), -	[HWBLK_BEU0] = HWBLK(MSTPCR2, 4, CORE_AREA_BM), -	[HWBLK_CEU0] = HWBLK(MSTPCR2, 3, CORE_AREA_BM), -	[HWBLK_VEU0] = HWBLK(MSTPCR2, 2, CORE_AREA_BM), -	[HWBLK_VPU] = HWBLK(MSTPCR2, 1, CORE_AREA_BM), -	[HWBLK_LCDC] = HWBLK(MSTPCR2, 0, CORE_AREA_BM), -}; - -static struct hwblk_info sh7724_hwblk_info = { -	.areas = sh7724_hwblk_area, -	.nr_areas = ARRAY_SIZE(sh7724_hwblk_area), -	.hwblks = sh7724_hwblk, -	.nr_hwblks = ARRAY_SIZE(sh7724_hwblk), -}; - -int arch_hwblk_sleep_mode(void) -{ -	if (!sh7724_hwblk_area[CORE_AREA].cnt[HWBLK_CNT_USAGE]) -		return SUSP_SH_STANDBY | SUSP_SH_SF; - -	if (!sh7724_hwblk_area[CORE_AREA_BM].cnt[HWBLK_CNT_USAGE]) -		return SUSP_SH_SLEEP | SUSP_SH_SF; - -	return SUSP_SH_SLEEP; -} - -int __init arch_hwblk_init(void) -{ -	return hwblk_register(&sh7724_hwblk_info); -} diff --git a/arch/sh/kernel/cpu/sh4a/perf_event.c b/arch/sh/kernel/cpu/sh4a/perf_event.c index 58027652573..84a2c396cee 100644 --- a/arch/sh/kernel/cpu/sh4a/perf_event.c +++ b/arch/sh/kernel/cpu/sh4a/perf_event.c @@ -205,6 +205,21 @@ static const int sh4a_cache_events  			[ C(RESULT_MISS)   ] = -1,  		},  	}, + +	[ C(NODE) ] = { +		[ C(OP_READ) ] = { +			[ C(RESULT_ACCESS) ] = -1, +			[ C(RESULT_MISS)   ] = -1, +		}, +		[ C(OP_WRITE) ] = { +			[ C(RESULT_ACCESS) ] = -1, +			[ C(RESULT_MISS)   ] = -1, +		}, +		[ C(OP_PREFETCH) ] = { +			[ C(RESULT_ACCESS) ] = -1, +			[ C(RESULT_MISS)   ] = -1, +		}, +	},  };  static int sh4a_event_map(int event) @@ -284,4 +299,4 @@ static int __init sh4a_pmu_init(void)  	return register_sh_pmu(&sh4a_pmu);  } -arch_initcall(sh4a_pmu_init); +early_initcall(sh4a_pmu_init); diff --git a/arch/sh/kernel/cpu/sh4a/pinmux-sh7722.c b/arch/sh/kernel/cpu/sh4a/pinmux-sh7722.c index 0688a7502f8..271bbc86492 100644 --- a/arch/sh/kernel/cpu/sh4a/pinmux-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/pinmux-sh7722.c @@ -1,1784 +1,20 @@ +#include <linux/bug.h>  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/gpio.h> -#include <cpu/sh7722.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> -enum { -	PINMUX_RESERVED = 0, - -	PINMUX_DATA_BEGIN, -	PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -	PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA, -	PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -	PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA, -	PTC7_DATA, PTC5_DATA, PTC4_DATA, PTC3_DATA, PTC2_DATA, PTC0_DATA, -	PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -	PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA, -	PTE7_DATA, PTE6_DATA, PTE5_DATA, PTE4_DATA, PTE1_DATA, PTE0_DATA, -	PTF6_DATA, PTF5_DATA, PTF4_DATA, -	PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA, -	PTG4_DATA, PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA, -	PTH7_DATA, PTH6_DATA, PTH5_DATA, PTH4_DATA, -	PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA, -	PTJ7_DATA, PTJ6_DATA, PTJ5_DATA, PTJ1_DATA, PTJ0_DATA, -	PTK6_DATA, PTK5_DATA, PTK4_DATA, -	PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA, -	PTL7_DATA, PTL6_DATA, PTL5_DATA, PTL4_DATA, -	PTL3_DATA, PTL2_DATA, PTL1_DATA, PTL0_DATA, -	PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -	PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA, -	PTN7_DATA, PTN6_DATA, PTN5_DATA, PTN4_DATA, -	PTN3_DATA, PTN2_DATA, PTN1_DATA, PTN0_DATA, -	PTQ6_DATA, PTQ5_DATA, PTQ4_DATA, -	PTQ3_DATA, PTQ2_DATA, PTQ1_DATA, PTQ0_DATA, -	PTR4_DATA, PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA, -	PTS4_DATA, PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA, -	PTT4_DATA, PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA, -	PTU4_DATA, PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA, -	PTV4_DATA, PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA, -	PTW6_DATA, PTW5_DATA, PTW4_DATA, -	PTW3_DATA, PTW2_DATA, PTW1_DATA, PTW0_DATA, -	PTX6_DATA, PTX5_DATA, PTX4_DATA, -	PTX3_DATA, PTX2_DATA, PTX1_DATA, PTX0_DATA, -	PTY6_DATA, PTY5_DATA, PTY4_DATA, -	PTY3_DATA, PTY2_DATA, PTY1_DATA, PTY0_DATA, -	PTZ5_DATA, PTZ4_DATA, PTZ3_DATA, PTZ2_DATA, PTZ1_DATA, PTZ0_DATA, -	PINMUX_DATA_END, - -	PINMUX_INPUT_BEGIN, -	PTA7_IN, PTA6_IN, PTA5_IN, PTA4_IN, -	PTA3_IN, PTA2_IN, PTA1_IN, PTA0_IN, -	PTB7_IN, PTB6_IN, PTB5_IN, PTB4_IN, -	PTB3_IN, PTB2_IN, PTB1_IN, PTB0_IN, -	PTC7_IN, PTC5_IN, PTC4_IN, PTC3_IN, PTC2_IN, PTC0_IN, -	PTD7_IN, PTD6_IN, PTD5_IN, PTD4_IN, PTD3_IN, PTD2_IN, PTD1_IN, -	PTE7_IN, PTE6_IN, PTE5_IN, PTE4_IN, PTE1_IN, PTE0_IN, -	PTF6_IN, PTF5_IN, PTF4_IN, PTF3_IN, PTF2_IN, PTF1_IN, -	PTH6_IN, PTH5_IN, PTH1_IN, PTH0_IN, -	PTJ1_IN, PTJ0_IN, -	PTK6_IN, PTK5_IN, PTK4_IN, PTK3_IN, PTK2_IN, PTK0_IN, -	PTL7_IN, PTL6_IN, PTL5_IN, PTL4_IN, -	PTL3_IN, PTL2_IN, PTL1_IN, PTL0_IN, -	PTM7_IN, PTM6_IN, PTM5_IN, PTM4_IN, -	PTM3_IN, PTM2_IN, PTM1_IN, PTM0_IN, -	PTN7_IN, PTN6_IN, PTN5_IN, PTN4_IN, -	PTN3_IN, PTN2_IN, PTN1_IN, PTN0_IN, -	PTQ5_IN, PTQ4_IN, PTQ3_IN, PTQ2_IN, PTQ0_IN, -	PTR2_IN, -	PTS4_IN, PTS2_IN, PTS1_IN, -	PTT4_IN, PTT3_IN, PTT2_IN, PTT1_IN, -	PTU4_IN, PTU3_IN, PTU2_IN, PTU1_IN, PTU0_IN, -	PTV4_IN, PTV3_IN, PTV2_IN, PTV1_IN, PTV0_IN, -	PTW6_IN, PTW4_IN, PTW3_IN, PTW2_IN, PTW1_IN, PTW0_IN, -	PTX6_IN, PTX5_IN, PTX4_IN, PTX3_IN, PTX2_IN, PTX1_IN, PTX0_IN, -	PTY5_IN, PTY4_IN, PTY3_IN, PTY2_IN, PTY0_IN, -	PTZ5_IN, PTZ4_IN, PTZ3_IN, PTZ2_IN, PTZ1_IN, -	PINMUX_INPUT_END, - -	PINMUX_INPUT_PULLDOWN_BEGIN, -	PTA7_IN_PD, PTA6_IN_PD, PTA5_IN_PD, PTA4_IN_PD, -	PTA3_IN_PD, PTA2_IN_PD, PTA1_IN_PD, PTA0_IN_PD, -	PTE7_IN_PD, PTE6_IN_PD, PTE5_IN_PD, PTE4_IN_PD,	PTE1_IN_PD, PTE0_IN_PD, -	PTF6_IN_PD, PTF5_IN_PD, PTF4_IN_PD, PTF3_IN_PD, PTF2_IN_PD, PTF1_IN_PD, -	PTH6_IN_PD, PTH5_IN_PD, PTH1_IN_PD, PTH0_IN_PD, -	PTK6_IN_PD, PTK5_IN_PD, PTK4_IN_PD, PTK3_IN_PD, PTK2_IN_PD, PTK0_IN_PD, -	PTL7_IN_PD, PTL6_IN_PD, PTL5_IN_PD, PTL4_IN_PD, -	PTL3_IN_PD, PTL2_IN_PD, PTL1_IN_PD, PTL0_IN_PD, -	PTM7_IN_PD, PTM6_IN_PD, PTM5_IN_PD, PTM4_IN_PD, -	PTM3_IN_PD, PTM2_IN_PD, PTM1_IN_PD, PTM0_IN_PD, -	PTQ5_IN_PD, PTQ4_IN_PD, PTQ3_IN_PD, PTQ2_IN_PD, -	PTS4_IN_PD, PTS2_IN_PD, PTS1_IN_PD, -	PTT4_IN_PD, PTT3_IN_PD, PTT2_IN_PD, PTT1_IN_PD, -	PTU4_IN_PD, PTU3_IN_PD, PTU2_IN_PD, PTU1_IN_PD, PTU0_IN_PD, -	PTV4_IN_PD, PTV3_IN_PD, PTV2_IN_PD, PTV1_IN_PD, PTV0_IN_PD, -	PTW6_IN_PD, PTW4_IN_PD,	PTW3_IN_PD, PTW2_IN_PD, PTW1_IN_PD, PTW0_IN_PD, -	PTX6_IN_PD, PTX5_IN_PD, PTX4_IN_PD, -	PTX3_IN_PD, PTX2_IN_PD, PTX1_IN_PD, PTX0_IN_PD, -	PINMUX_INPUT_PULLDOWN_END, - -	PINMUX_INPUT_PULLUP_BEGIN, -	PTC7_IN_PU, PTC5_IN_PU, -	PTD7_IN_PU, PTD6_IN_PU, PTD5_IN_PU, PTD4_IN_PU, -	PTD3_IN_PU, PTD2_IN_PU, PTD1_IN_PU, -	PTJ1_IN_PU, PTJ0_IN_PU, -	PTQ0_IN_PU, -	PTR2_IN_PU, -	PTX6_IN_PU, -	PTY5_IN_PU, PTY4_IN_PU, PTY3_IN_PU, PTY2_IN_PU, PTY0_IN_PU, -	PTZ5_IN_PU, PTZ4_IN_PU, PTZ3_IN_PU, PTZ2_IN_PU, PTZ1_IN_PU, -	PINMUX_INPUT_PULLUP_END, - -	PINMUX_OUTPUT_BEGIN, -	PTA7_OUT, PTA5_OUT, -	PTB7_OUT, PTB6_OUT, PTB5_OUT, PTB4_OUT, -	PTB3_OUT, PTB2_OUT, PTB1_OUT, PTB0_OUT, -	PTC4_OUT, PTC3_OUT, PTC2_OUT, PTC0_OUT, -	PTD6_OUT, PTD5_OUT, PTD4_OUT, -	PTD3_OUT, PTD2_OUT, PTD1_OUT, PTD0_OUT, -	PTE7_OUT, PTE6_OUT, PTE5_OUT, PTE4_OUT, PTE1_OUT, PTE0_OUT, -	PTF6_OUT, PTF5_OUT, PTF4_OUT, PTF3_OUT, PTF2_OUT, PTF0_OUT, -	PTG4_OUT, PTG3_OUT, PTG2_OUT, PTG1_OUT, PTG0_OUT, -	PTH7_OUT, PTH6_OUT, PTH5_OUT, PTH4_OUT, -	PTH3_OUT, PTH2_OUT, PTH1_OUT, PTH0_OUT, -	PTJ7_OUT, PTJ6_OUT, PTJ5_OUT, PTJ1_OUT, PTJ0_OUT, -	PTK6_OUT, PTK5_OUT, PTK4_OUT, PTK3_OUT, PTK1_OUT, PTK0_OUT, -	PTL7_OUT, PTL6_OUT, PTL5_OUT, PTL4_OUT, -	PTL3_OUT, PTL2_OUT, PTL1_OUT, PTL0_OUT, -	PTM7_OUT, PTM6_OUT, PTM5_OUT, PTM4_OUT, -	PTM3_OUT, PTM2_OUT, PTM1_OUT, PTM0_OUT, -	PTN7_OUT, PTN6_OUT, PTN5_OUT, PTN4_OUT, -	PTN3_OUT, PTN2_OUT, PTN1_OUT, PTN0_OUT,	PTQ6_OUT, PTQ5_OUT, PTQ4_OUT, -	PTQ3_OUT, PTQ2_OUT, PTQ1_OUT, PTQ0_OUT, -	PTR4_OUT, PTR3_OUT, PTR1_OUT, PTR0_OUT, -	PTS3_OUT, PTS2_OUT, PTS0_OUT, -	PTT4_OUT, PTT3_OUT, PTT2_OUT, PTT0_OUT, -	PTU4_OUT, PTU3_OUT, PTU2_OUT, PTU0_OUT, -	PTV4_OUT, PTV3_OUT, PTV2_OUT, PTV1_OUT, PTV0_OUT, -	PTW5_OUT, PTW4_OUT, PTW3_OUT, PTW2_OUT, PTW1_OUT, PTW0_OUT, -	PTX6_OUT, PTX5_OUT, PTX4_OUT, PTX3_OUT, PTX2_OUT, PTX1_OUT, PTX0_OUT, -	PTY5_OUT, PTY4_OUT, PTY3_OUT, PTY2_OUT, PTY1_OUT, PTY0_OUT, -	PINMUX_OUTPUT_END, - -	PINMUX_MARK_BEGIN, -	SCIF0_TXD_MARK, SCIF0_RXD_MARK, -	SCIF0_RTS_MARK, SCIF0_CTS_MARK, SCIF0_SCK_MARK, -	SCIF1_TXD_MARK, SCIF1_RXD_MARK, -	SCIF1_RTS_MARK, SCIF1_CTS_MARK, SCIF1_SCK_MARK, -	SCIF2_TXD_MARK, SCIF2_RXD_MARK, -	SCIF2_RTS_MARK, SCIF2_CTS_MARK, SCIF2_SCK_MARK, -	SIOTXD_MARK, SIORXD_MARK, -	SIOD_MARK, SIOSTRB0_MARK, SIOSTRB1_MARK, -	SIOSCK_MARK, SIOMCK_MARK, -	VIO_D15_MARK, VIO_D14_MARK, VIO_D13_MARK, VIO_D12_MARK, -	VIO_D11_MARK, VIO_D10_MARK, VIO_D9_MARK, VIO_D8_MARK, -	VIO_D7_MARK, VIO_D6_MARK, VIO_D5_MARK, VIO_D4_MARK, -	VIO_D3_MARK, VIO_D2_MARK, VIO_D1_MARK, VIO_D0_MARK, -	VIO_CLK_MARK, VIO_VD_MARK, VIO_HD_MARK, VIO_FLD_MARK, -	VIO_CKO_MARK, VIO_STEX_MARK, VIO_STEM_MARK, VIO_VD2_MARK, -	VIO_HD2_MARK, VIO_CLK2_MARK, -	LCDD23_MARK, LCDD22_MARK, LCDD21_MARK, LCDD20_MARK, -	LCDD19_MARK, LCDD18_MARK, LCDD17_MARK, LCDD16_MARK, -	LCDD15_MARK, LCDD14_MARK, LCDD13_MARK, LCDD12_MARK, -	LCDD11_MARK, LCDD10_MARK, LCDD9_MARK, LCDD8_MARK, -	LCDD7_MARK, LCDD6_MARK, LCDD5_MARK, LCDD4_MARK, -	LCDD3_MARK, LCDD2_MARK, LCDD1_MARK, LCDD0_MARK, -	LCDLCLK_MARK, LCDDON_MARK, LCDVCPWC_MARK, LCDVEPWC_MARK, -	LCDVSYN_MARK, LCDDCK_MARK, LCDHSYN_MARK, LCDDISP_MARK, -	LCDRS_MARK, LCDCS_MARK, LCDWR_MARK, LCDRD_MARK, -	LCDDON2_MARK, LCDVCPWC2_MARK, LCDVEPWC2_MARK, LCDVSYN2_MARK, -	LCDCS2_MARK, -	IOIS16_MARK, A25_MARK, A24_MARK, A23_MARK, A22_MARK, -	BS_MARK, CS6B_CE1B_MARK, WAIT_MARK, CS6A_CE2B_MARK, -	HPD63_MARK, HPD62_MARK, HPD61_MARK, HPD60_MARK, -	HPD59_MARK, HPD58_MARK, HPD57_MARK, HPD56_MARK, -	HPD55_MARK, HPD54_MARK, HPD53_MARK, HPD52_MARK, -	HPD51_MARK, HPD50_MARK, HPD49_MARK, HPD48_MARK, -	HPDQM7_MARK, HPDQM6_MARK, HPDQM5_MARK, HPDQM4_MARK, -	IRQ0_MARK, IRQ1_MARK, IRQ2_MARK, IRQ3_MARK, -	IRQ4_MARK, IRQ5_MARK, IRQ6_MARK, IRQ7_MARK, -	SDHICD_MARK, SDHIWP_MARK, SDHID3_MARK, SDHID2_MARK, -	SDHID1_MARK, SDHID0_MARK, SDHICMD_MARK, SDHICLK_MARK, -	SIUAOLR_MARK, SIUAOBT_MARK, SIUAISLD_MARK, SIUAILR_MARK, -	SIUAIBT_MARK, SIUAOSLD_MARK, SIUMCKA_MARK, SIUFCKA_MARK, -	SIUBOLR_MARK, SIUBOBT_MARK, SIUBISLD_MARK, SIUBILR_MARK, -	SIUBIBT_MARK, SIUBOSLD_MARK, SIUMCKB_MARK, SIUFCKB_MARK, -	AUDSYNC_MARK, AUDATA3_MARK, AUDATA2_MARK, AUDATA1_MARK,	AUDATA0_MARK, -	DACK_MARK, DREQ0_MARK, -	DV_CLKI_MARK, DV_CLK_MARK, DV_HSYNC_MARK, DV_VSYNC_MARK, -	DV_D15_MARK, DV_D14_MARK, DV_D13_MARK, DV_D12_MARK, -	DV_D11_MARK, DV_D10_MARK, DV_D9_MARK, DV_D8_MARK, -	DV_D7_MARK, DV_D6_MARK, DV_D5_MARK, DV_D4_MARK, -	DV_D3_MARK, DV_D2_MARK, DV_D1_MARK, DV_D0_MARK, -	STATUS0_MARK, PDSTATUS_MARK, -	SIOF0_MCK_MARK, SIOF0_SCK_MARK, -	SIOF0_SYNC_MARK, SIOF0_SS1_MARK, SIOF0_SS2_MARK, -	SIOF0_TXD_MARK,	SIOF0_RXD_MARK, -	SIOF1_MCK_MARK, SIOF1_SCK_MARK, -	SIOF1_SYNC_MARK, SIOF1_SS1_MARK, SIOF1_SS2_MARK, -	SIOF1_TXD_MARK, SIOF1_RXD_MARK, -	SIM_D_MARK, SIM_CLK_MARK, SIM_RST_MARK, -	TS_SDAT_MARK, TS_SCK_MARK, TS_SDEN_MARK, TS_SPSYNC_MARK, -	IRDA_IN_MARK, IRDA_OUT_MARK, -	TPUTO_MARK, -	FCE_MARK, NAF7_MARK, NAF6_MARK, NAF5_MARK, NAF4_MARK, -	NAF3_MARK, NAF2_MARK, NAF1_MARK, NAF0_MARK, FCDE_MARK, -	FOE_MARK, FSC_MARK, FWE_MARK, FRB_MARK, -	KEYIN0_MARK, KEYIN1_MARK, KEYIN2_MARK, KEYIN3_MARK, KEYIN4_MARK, -	KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK, -	KEYOUT4_IN6_MARK, KEYOUT5_IN5_MARK, -	PINMUX_MARK_END, - -	PINMUX_FUNCTION_BEGIN, -	VIO_D7_SCIF1_SCK, VIO_D6_SCIF1_RXD, VIO_D5_SCIF1_TXD, VIO_D4, -	VIO_D3, VIO_D2, VIO_D1, VIO_D0_LCDLCLK, -	HPD55, HPD54, HPD53, HPD52, HPD51, HPD50, HPD49, HPD48, -	IOIS16, HPDQM7, HPDQM6, HPDQM5, HPDQM4, -	SDHICD, SDHIWP, SDHID3, IRQ2_SDHID2, SDHID1, SDHID0, SDHICMD, SDHICLK, -	A25, A24, A23, A22, IRQ5, IRQ4_BS, -	PTF6, SIOSCK_SIUBOBT, SIOSTRB1_SIUBOLR, -	SIOSTRB0_SIUBIBT, SIOD_SIUBILR, SIORXD_SIUBISLD, SIOTXD_SIUBOSLD, -	AUDSYNC, AUDATA3, AUDATA2, AUDATA1, AUDATA0, -	LCDVCPWC_LCDVCPWC2, LCDVSYN2_DACK, LCDVSYN, LCDDISP_LCDRS, -	LCDHSYN_LCDCS, LCDDON_LCDDON2, LCDD17_DV_HSYNC, LCDD16_DV_VSYNC, -	STATUS0, PDSTATUS, IRQ1, IRQ0, -	SIUAILR_SIOF1_SS2, SIUAIBT_SIOF1_SS1, SIUAOLR_SIOF1_SYNC, -	SIUAOBT_SIOF1_SCK, SIUAISLD_SIOF1_RXD, SIUAOSLD_SIOF1_TXD, PTK0, -	LCDD15_DV_D15, LCDD14_DV_D14, LCDD13_DV_D13, LCDD12_DV_D12, -	LCDD11_DV_D11, LCDD10_DV_D10, LCDD9_DV_D9, LCDD8_DV_D8, -	LCDD7_DV_D7, LCDD6_DV_D6, LCDD5_DV_D5, LCDD4_DV_D4, -	LCDD3_DV_D3, LCDD2_DV_D2, LCDD1_DV_D1, LCDD0_DV_D0, -	HPD63, HPD62, HPD61, HPD60, HPD59, HPD58, HPD57, HPD56, -	SIOF0_SS2_SIM_RST, SIOF0_SS1_TS_SPSYNC, SIOF0_SYNC_TS_SDEN, -	SIOF0_SCK_TS_SCK, PTQ2, PTQ1, PTQ0, -	LCDRD, CS6B_CE1B_LCDCS2, WAIT, LCDDCK_LCDWR, LCDVEPWC_LCDVEPWC2, -	SCIF0_CTS_SIUAISPD, SCIF0_RTS_SIUAOSPD, -	SCIF0_SCK_TPUTO, SCIF0_RXD, SCIF0_TXD, -	FOE_VIO_VD2, FWE, FSC, DREQ0, FCDE, -	NAF2_VIO_D10, NAF1_VIO_D9, NAF0_VIO_D8, -	FRB_VIO_CLK2, FCE_VIO_HD2, -	NAF7_VIO_D15, NAF6_VIO_D14, NAF5_VIO_D13, NAF4_VIO_D12, NAF3_VIO_D11, -	VIO_FLD_SCIF2_CTS, VIO_CKO_SCIF2_RTS, VIO_STEX_SCIF2_SCK, -	VIO_STEM_SCIF2_TXD, VIO_HD_SCIF2_RXD, -	VIO_VD_SCIF1_CTS, VIO_CLK_SCIF1_RTS, -	CS6A_CE2B, LCDD23, LCDD22, LCDD21, LCDD20, -	LCDD19_DV_CLKI, LCDD18_DV_CLK, -	KEYOUT5_IN5, KEYOUT4_IN6, KEYOUT3, KEYOUT2, KEYOUT1, KEYOUT0, -	KEYIN4_IRQ7, KEYIN3, KEYIN2, KEYIN1, KEYIN0_IRQ6, - -	PSA15_KEYIN0, PSA15_IRQ6, PSA14_KEYIN4, PSA14_IRQ7, -	PSA9_IRQ4, PSA9_BS, PSA4_IRQ2, PSA4_SDHID2, -	PSB15_SIOTXD, PSB15_SIUBOSLD, PSB14_SIORXD, PSB14_SIUBISLD, -	PSB13_SIOD, PSB13_SIUBILR, PSB12_SIOSTRB0, PSB12_SIUBIBT, -	PSB11_SIOSTRB1, PSB11_SIUBOLR, PSB10_SIOSCK, PSB10_SIUBOBT, -	PSB9_SIOMCK, PSB9_SIUMCKB, PSB8_SIOF0_MCK, PSB8_IRQ3, -	PSB7_SIOF0_TXD, PSB7_IRDA_OUT, PSB6_SIOF0_RXD, PSB6_IRDA_IN, -	PSB5_SIOF0_SCK, PSB5_TS_SCK, PSB4_SIOF0_SYNC, PSB4_TS_SDEN, -	PSB3_SIOF0_SS1, PSB3_TS_SPSYNC, PSB2_SIOF0_SS2, PSB2_SIM_RST, -	PSB1_SIUMCKA, PSB1_SIOF1_MCK, PSB0_SIUAOSLD, PSB0_SIOF1_TXD, -	PSC15_SIUAISLD, PSC15_SIOF1_RXD, PSC14_SIUAOBT, PSC14_SIOF1_SCK, -	PSC13_SIUAOLR, PSC13_SIOF1_SYNC, PSC12_SIUAIBT, PSC12_SIOF1_SS1, -	PSC11_SIUAILR, PSC11_SIOF1_SS2, PSC0_NAF, PSC0_VIO, -	PSD13_VIO, PSD13_SCIF2, PSD12_VIO, PSD12_SCIF1, -	PSD11_VIO, PSD11_SCIF1, PSD10_VIO_D0, PSD10_LCDLCLK, -	PSD9_SIOMCK_SIUMCKB, PSD9_SIUFCKB, PSD8_SCIF0_SCK, PSD8_TPUTO, -	PSD7_SCIF0_RTS, PSD7_SIUAOSPD, PSD6_SCIF0_CTS, PSD6_SIUAISPD, -	PSD5_CS6B_CE1B, PSD5_LCDCS2, -	PSD3_LCDVEPWC_LCDVCPWC, PSD3_LCDVEPWC2_LCDVCPWC2, -	PSD2_LCDDON, PSD2_LCDDON2, PSD0_LCDD19_LCDD0, PSD0_DV, -	PSE15_SIOF0_MCK_IRQ3, PSE15_SIM_D, -	PSE14_SIOF0_TXD_IRDA_OUT, PSE14_SIM_CLK, -	PSE13_SIOF0_RXD_IRDA_IN, PSE13_TS_SDAT, PSE12_LCDVSYN2, PSE12_DACK, -	PSE11_SIUMCKA_SIOF1_MCK, PSE11_SIUFCKA, -	PSE3_FLCTL, PSE3_VIO, PSE2_NAF2, PSE2_VIO_D10, -	PSE1_NAF1, PSE1_VIO_D9, PSE0_NAF0, PSE0_VIO_D8, - -	HIZA14_KEYSC, HIZA14_HIZ, -	HIZA10_NAF, HIZA10_HIZ, -	HIZA9_VIO, HIZA9_HIZ, -	HIZA8_LCDC, HIZA8_HIZ, -	HIZA7_LCDC, HIZA7_HIZ, -	HIZA6_LCDC, HIZA6_HIZ, -	HIZB4_SIUA, HIZB4_HIZ, -	HIZB1_VIO, HIZB1_HIZ, -	HIZB0_VIO, HIZB0_HIZ, -	HIZC15_IRQ7, HIZC15_HIZ, -	HIZC14_IRQ6, HIZC14_HIZ, -	HIZC13_IRQ5, HIZC13_HIZ, -	HIZC12_IRQ4, HIZC12_HIZ, -	HIZC11_IRQ3, HIZC11_HIZ, -	HIZC10_IRQ2, HIZC10_HIZ, -	HIZC9_IRQ1, HIZC9_HIZ, -	HIZC8_IRQ0, HIZC8_HIZ, -	MSELB9_VIO, MSELB9_VIO2, -	MSELB8_RGB, MSELB8_SYS, -	PINMUX_FUNCTION_END, -}; - -static pinmux_enum_t pinmux_data[] = { -	/* PTA */ -	PINMUX_DATA(PTA7_DATA, PTA7_IN, PTA7_IN_PD, PTA7_OUT), -	PINMUX_DATA(PTA6_DATA, PTA6_IN, PTA6_IN_PD), -	PINMUX_DATA(PTA5_DATA, PTA5_IN, PTA5_IN_PD, PTA5_OUT), -	PINMUX_DATA(PTA4_DATA, PTA4_IN, PTA4_IN_PD), -	PINMUX_DATA(PTA3_DATA, PTA3_IN, PTA3_IN_PD), -	PINMUX_DATA(PTA2_DATA, PTA2_IN, PTA2_IN_PD), -	PINMUX_DATA(PTA1_DATA, PTA1_IN, PTA1_IN_PD), -	PINMUX_DATA(PTA0_DATA, PTA0_IN, PTA0_IN_PD), - -	/* PTB */ -	PINMUX_DATA(PTB7_DATA, PTB7_IN, PTB7_OUT), -	PINMUX_DATA(PTB6_DATA, PTB6_IN, PTB6_OUT), -	PINMUX_DATA(PTB5_DATA, PTB5_IN, PTB5_OUT), -	PINMUX_DATA(PTB4_DATA, PTB4_IN, PTB4_OUT), -	PINMUX_DATA(PTB3_DATA, PTB3_IN, PTB3_OUT), -	PINMUX_DATA(PTB2_DATA, PTB2_IN, PTB2_OUT), -	PINMUX_DATA(PTB1_DATA, PTB1_IN, PTB1_OUT), -	PINMUX_DATA(PTB0_DATA, PTB0_IN, PTB0_OUT), - -	/* PTC */ -	PINMUX_DATA(PTC7_DATA, PTC7_IN, PTC7_IN_PU), -	PINMUX_DATA(PTC5_DATA, PTC5_IN, PTC5_IN_PU), -	PINMUX_DATA(PTC4_DATA, PTC4_IN, PTC4_OUT), -	PINMUX_DATA(PTC3_DATA, PTC3_IN, PTC3_OUT), -	PINMUX_DATA(PTC2_DATA, PTC2_IN, PTC2_OUT), -	PINMUX_DATA(PTC0_DATA, PTC0_IN, PTC0_OUT), - -	/* PTD */ -	PINMUX_DATA(PTD7_DATA, PTD7_IN, PTD7_IN_PU), -	PINMUX_DATA(PTD6_DATA, PTD6_OUT, PTD6_IN, PTD6_IN_PU), -	PINMUX_DATA(PTD5_DATA, PTD5_OUT, PTD5_IN, PTD5_IN_PU), -	PINMUX_DATA(PTD4_DATA, PTD4_OUT, PTD4_IN, PTD4_IN_PU), -	PINMUX_DATA(PTD3_DATA, PTD3_OUT, PTD3_IN, PTD3_IN_PU), -	PINMUX_DATA(PTD2_DATA, PTD2_OUT, PTD2_IN, PTD2_IN_PU), -	PINMUX_DATA(PTD1_DATA, PTD1_OUT, PTD1_IN, PTD1_IN_PU), -	PINMUX_DATA(PTD0_DATA, PTD0_OUT), - -	/* PTE */ -	PINMUX_DATA(PTE7_DATA, PTE7_OUT, PTE7_IN, PTE7_IN_PD), -	PINMUX_DATA(PTE6_DATA, PTE6_OUT, PTE6_IN, PTE6_IN_PD), -	PINMUX_DATA(PTE5_DATA, PTE5_OUT, PTE5_IN, PTE5_IN_PD), -	PINMUX_DATA(PTE4_DATA, PTE4_OUT, PTE4_IN, PTE4_IN_PD), -	PINMUX_DATA(PTE1_DATA, PTE1_OUT, PTE1_IN, PTE1_IN_PD), -	PINMUX_DATA(PTE0_DATA, PTE0_OUT, PTE0_IN, PTE0_IN_PD), - -	/* PTF */ -	PINMUX_DATA(PTF6_DATA, PTF6_OUT, PTF6_IN, PTF6_IN_PD), -	PINMUX_DATA(PTF5_DATA, PTF5_OUT, PTF5_IN, PTF5_IN_PD), -	PINMUX_DATA(PTF4_DATA, PTF4_OUT, PTF4_IN, PTF4_IN_PD), -	PINMUX_DATA(PTF3_DATA, PTF3_OUT, PTF3_IN, PTF3_IN_PD), -	PINMUX_DATA(PTF2_DATA, PTF2_OUT, PTF2_IN, PTF2_IN_PD), -	PINMUX_DATA(PTF1_DATA, PTF1_IN, PTF1_IN_PD), -	PINMUX_DATA(PTF0_DATA, PTF0_OUT), - -	/* PTG */ -	PINMUX_DATA(PTG4_DATA, PTG4_OUT), -	PINMUX_DATA(PTG3_DATA, PTG3_OUT), -	PINMUX_DATA(PTG2_DATA, PTG2_OUT), -	PINMUX_DATA(PTG1_DATA, PTG1_OUT), -	PINMUX_DATA(PTG0_DATA, PTG0_OUT), - -	/* PTH */ -	PINMUX_DATA(PTH7_DATA, PTH7_OUT), -	PINMUX_DATA(PTH6_DATA, PTH6_OUT, PTH6_IN, PTH6_IN_PD), -	PINMUX_DATA(PTH5_DATA, PTH5_OUT, PTH5_IN, PTH5_IN_PD), -	PINMUX_DATA(PTH4_DATA, PTH4_OUT), -	PINMUX_DATA(PTH3_DATA, PTH3_OUT), -	PINMUX_DATA(PTH2_DATA, PTH2_OUT), -	PINMUX_DATA(PTH1_DATA, PTH1_OUT, PTH1_IN, PTH1_IN_PD), -	PINMUX_DATA(PTH0_DATA, PTH0_OUT, PTH0_IN, PTH0_IN_PD), - -	/* PTJ */ -	PINMUX_DATA(PTJ7_DATA, PTJ7_OUT), -	PINMUX_DATA(PTJ6_DATA, PTJ6_OUT), -	PINMUX_DATA(PTJ5_DATA, PTJ5_OUT), -	PINMUX_DATA(PTJ1_DATA, PTJ1_OUT, PTJ1_IN, PTJ1_IN_PU), -	PINMUX_DATA(PTJ0_DATA, PTJ0_OUT, PTJ0_IN, PTJ0_IN_PU), - -	/* PTK */ -	PINMUX_DATA(PTK6_DATA, PTK6_OUT, PTK6_IN, PTK6_IN_PD), -	PINMUX_DATA(PTK5_DATA, PTK5_OUT, PTK5_IN, PTK5_IN_PD), -	PINMUX_DATA(PTK4_DATA, PTK4_OUT, PTK4_IN, PTK4_IN_PD), -	PINMUX_DATA(PTK3_DATA, PTK3_OUT, PTK3_IN, PTK3_IN_PD), -	PINMUX_DATA(PTK2_DATA, PTK2_IN, PTK2_IN_PD), -	PINMUX_DATA(PTK1_DATA, PTK1_OUT), -	PINMUX_DATA(PTK0_DATA, PTK0_OUT, PTK0_IN, PTK0_IN_PD), - -	/* PTL */ -	PINMUX_DATA(PTL7_DATA, PTL7_OUT, PTL7_IN, PTL7_IN_PD), -	PINMUX_DATA(PTL6_DATA, PTL6_OUT, PTL6_IN, PTL6_IN_PD), -	PINMUX_DATA(PTL5_DATA, PTL5_OUT, PTL5_IN, PTL5_IN_PD), -	PINMUX_DATA(PTL4_DATA, PTL4_OUT, PTL4_IN, PTL4_IN_PD), -	PINMUX_DATA(PTL3_DATA, PTL3_OUT, PTL3_IN, PTL3_IN_PD), -	PINMUX_DATA(PTL2_DATA, PTL2_OUT, PTL2_IN, PTL2_IN_PD), -	PINMUX_DATA(PTL1_DATA, PTL1_OUT, PTL1_IN, PTL1_IN_PD), -	PINMUX_DATA(PTL0_DATA, PTL0_OUT, PTL0_IN, PTL0_IN_PD), - -	/* PTM */ -	PINMUX_DATA(PTM7_DATA, PTM7_OUT, PTM7_IN, PTM7_IN_PD), -	PINMUX_DATA(PTM6_DATA, PTM6_OUT, PTM6_IN, PTM6_IN_PD), -	PINMUX_DATA(PTM5_DATA, PTM5_OUT, PTM5_IN, PTM5_IN_PD), -	PINMUX_DATA(PTM4_DATA, PTM4_OUT, PTM4_IN, PTM4_IN_PD), -	PINMUX_DATA(PTM3_DATA, PTM3_OUT, PTM3_IN, PTM3_IN_PD), -	PINMUX_DATA(PTM2_DATA, PTM2_OUT, PTM2_IN, PTM2_IN_PD), -	PINMUX_DATA(PTM1_DATA, PTM1_OUT, PTM1_IN, PTM1_IN_PD), -	PINMUX_DATA(PTM0_DATA, PTM0_OUT, PTM0_IN, PTM0_IN_PD), - -	/* PTN */ -	PINMUX_DATA(PTN7_DATA, PTN7_OUT, PTN7_IN), -	PINMUX_DATA(PTN6_DATA, PTN6_OUT, PTN6_IN), -	PINMUX_DATA(PTN5_DATA, PTN5_OUT, PTN5_IN), -	PINMUX_DATA(PTN4_DATA, PTN4_OUT, PTN4_IN), -	PINMUX_DATA(PTN3_DATA, PTN3_OUT, PTN3_IN), -	PINMUX_DATA(PTN2_DATA, PTN2_OUT, PTN2_IN), -	PINMUX_DATA(PTN1_DATA, PTN1_OUT, PTN1_IN), -	PINMUX_DATA(PTN0_DATA, PTN0_OUT, PTN0_IN), - -	/* PTQ */ -	PINMUX_DATA(PTQ6_DATA, PTQ6_OUT), -	PINMUX_DATA(PTQ5_DATA, PTQ5_OUT, PTQ5_IN, PTQ5_IN_PD), -	PINMUX_DATA(PTQ4_DATA, PTQ4_OUT, PTQ4_IN, PTQ4_IN_PD), -	PINMUX_DATA(PTQ3_DATA, PTQ3_OUT, PTQ3_IN, PTQ3_IN_PD), -	PINMUX_DATA(PTQ2_DATA, PTQ2_IN, PTQ2_IN_PD), -	PINMUX_DATA(PTQ1_DATA, PTQ1_OUT), -	PINMUX_DATA(PTQ0_DATA, PTQ0_OUT, PTQ0_IN, PTQ0_IN_PU), - -	/* PTR */ -	PINMUX_DATA(PTR4_DATA, PTR4_OUT), -	PINMUX_DATA(PTR3_DATA, PTR3_OUT), -	PINMUX_DATA(PTR2_DATA, PTR2_IN, PTR2_IN_PU), -	PINMUX_DATA(PTR1_DATA, PTR1_OUT), -	PINMUX_DATA(PTR0_DATA, PTR0_OUT), - -	/* PTS */ -	PINMUX_DATA(PTS4_DATA, PTS4_IN, PTS4_IN_PD), -	PINMUX_DATA(PTS3_DATA, PTS3_OUT), -	PINMUX_DATA(PTS2_DATA, PTS2_OUT, PTS2_IN, PTS2_IN_PD), -	PINMUX_DATA(PTS1_DATA, PTS1_IN, PTS1_IN_PD), -	PINMUX_DATA(PTS0_DATA, PTS0_OUT), - -	/* PTT */ -	PINMUX_DATA(PTT4_DATA, PTT4_OUT, PTT4_IN, PTT4_IN_PD), -	PINMUX_DATA(PTT3_DATA, PTT3_OUT, PTT3_IN, PTT3_IN_PD), -	PINMUX_DATA(PTT2_DATA, PTT2_OUT, PTT2_IN, PTT2_IN_PD), -	PINMUX_DATA(PTT1_DATA, PTT1_IN, PTT1_IN_PD), -	PINMUX_DATA(PTT0_DATA, PTT0_OUT), - -	/* PTU */ -	PINMUX_DATA(PTU4_DATA, PTU4_OUT, PTU4_IN, PTU4_IN_PD), -	PINMUX_DATA(PTU3_DATA, PTU3_OUT, PTU3_IN, PTU3_IN_PD), -	PINMUX_DATA(PTU2_DATA, PTU2_OUT, PTU2_IN, PTU2_IN_PD), -	PINMUX_DATA(PTU1_DATA, PTU1_IN, PTU1_IN_PD), -	PINMUX_DATA(PTU0_DATA, PTU0_OUT, PTU0_IN, PTU0_IN_PD), - -	/* PTV */ -	PINMUX_DATA(PTV4_DATA, PTV4_OUT, PTV4_IN, PTV4_IN_PD), -	PINMUX_DATA(PTV3_DATA, PTV3_OUT, PTV3_IN, PTV3_IN_PD), -	PINMUX_DATA(PTV2_DATA, PTV2_OUT, PTV2_IN, PTV2_IN_PD), -	PINMUX_DATA(PTV1_DATA, PTV1_OUT, PTV1_IN, PTV1_IN_PD), -	PINMUX_DATA(PTV0_DATA, PTV0_OUT, PTV0_IN, PTV0_IN_PD), - -	/* PTW */ -	PINMUX_DATA(PTW6_DATA, PTW6_IN, PTW6_IN_PD), -	PINMUX_DATA(PTW5_DATA, PTW5_OUT), -	PINMUX_DATA(PTW4_DATA, PTW4_OUT, PTW4_IN, PTW4_IN_PD), -	PINMUX_DATA(PTW3_DATA, PTW3_OUT, PTW3_IN, PTW3_IN_PD), -	PINMUX_DATA(PTW2_DATA, PTW2_OUT, PTW2_IN, PTW2_IN_PD), -	PINMUX_DATA(PTW1_DATA, PTW1_OUT, PTW1_IN, PTW1_IN_PD), -	PINMUX_DATA(PTW0_DATA, PTW0_OUT, PTW0_IN, PTW0_IN_PD), - -	/* PTX */ -	PINMUX_DATA(PTX6_DATA, PTX6_OUT, PTX6_IN, PTX6_IN_PD), -	PINMUX_DATA(PTX5_DATA, PTX5_OUT, PTX5_IN, PTX5_IN_PD), -	PINMUX_DATA(PTX4_DATA, PTX4_OUT, PTX4_IN, PTX4_IN_PD), -	PINMUX_DATA(PTX3_DATA, PTX3_OUT, PTX3_IN, PTX3_IN_PD), -	PINMUX_DATA(PTX2_DATA, PTX2_OUT, PTX2_IN, PTX2_IN_PD), -	PINMUX_DATA(PTX1_DATA, PTX1_OUT, PTX1_IN, PTX1_IN_PD), -	PINMUX_DATA(PTX0_DATA, PTX0_OUT, PTX0_IN, PTX0_IN_PD), - -	/* PTY */ -	PINMUX_DATA(PTY5_DATA, PTY5_OUT, PTY5_IN, PTY5_IN_PU), -	PINMUX_DATA(PTY4_DATA, PTY4_OUT, PTY4_IN, PTY4_IN_PU), -	PINMUX_DATA(PTY3_DATA, PTY3_OUT, PTY3_IN, PTY3_IN_PU), -	PINMUX_DATA(PTY2_DATA, PTY2_OUT, PTY2_IN, PTY2_IN_PU), -	PINMUX_DATA(PTY1_DATA, PTY1_OUT), -	PINMUX_DATA(PTY0_DATA, PTY0_OUT, PTY0_IN, PTY0_IN_PU), - -	/* PTZ */ -	PINMUX_DATA(PTZ5_DATA, PTZ5_IN, PTZ5_IN_PU), -	PINMUX_DATA(PTZ4_DATA, PTZ4_IN, PTZ4_IN_PU), -	PINMUX_DATA(PTZ3_DATA, PTZ3_IN, PTZ3_IN_PU), -	PINMUX_DATA(PTZ2_DATA, PTZ2_IN, PTZ2_IN_PU), -	PINMUX_DATA(PTZ1_DATA, PTZ1_IN, PTZ1_IN_PU), - -	/* SCIF0 */ -	PINMUX_DATA(SCIF0_TXD_MARK, SCIF0_TXD), -	PINMUX_DATA(SCIF0_RXD_MARK, SCIF0_RXD), -	PINMUX_DATA(SCIF0_RTS_MARK, PSD7_SCIF0_RTS, SCIF0_RTS_SIUAOSPD), -	PINMUX_DATA(SCIF0_CTS_MARK, PSD6_SCIF0_CTS, SCIF0_CTS_SIUAISPD), -	PINMUX_DATA(SCIF0_SCK_MARK, PSD8_SCIF0_SCK, SCIF0_SCK_TPUTO), - -	/* SCIF1 */ -	PINMUX_DATA(SCIF1_TXD_MARK, PSD11_SCIF1, VIO_D5_SCIF1_TXD), -	PINMUX_DATA(SCIF1_RXD_MARK, PSD11_SCIF1, VIO_D6_SCIF1_RXD), -	PINMUX_DATA(SCIF1_RTS_MARK, PSD12_SCIF1, VIO_CLK_SCIF1_RTS), -	PINMUX_DATA(SCIF1_CTS_MARK, PSD12_SCIF1, VIO_VD_SCIF1_CTS), -	PINMUX_DATA(SCIF1_SCK_MARK, PSD11_SCIF1, VIO_D7_SCIF1_SCK), - -	/* SCIF2 */ -	PINMUX_DATA(SCIF2_TXD_MARK, PSD13_SCIF2, VIO_STEM_SCIF2_TXD), -	PINMUX_DATA(SCIF2_RXD_MARK, PSD13_SCIF2, VIO_HD_SCIF2_RXD), -	PINMUX_DATA(SCIF2_RTS_MARK, PSD13_SCIF2, VIO_CKO_SCIF2_RTS), -	PINMUX_DATA(SCIF2_CTS_MARK, PSD13_SCIF2, VIO_FLD_SCIF2_CTS), -	PINMUX_DATA(SCIF2_SCK_MARK, PSD13_SCIF2, VIO_STEX_SCIF2_SCK), - -	/* SIO */ -	PINMUX_DATA(SIOTXD_MARK, PSB15_SIOTXD, SIOTXD_SIUBOSLD), -	PINMUX_DATA(SIORXD_MARK, PSB14_SIORXD, SIORXD_SIUBISLD), -	PINMUX_DATA(SIOD_MARK, PSB13_SIOD, SIOD_SIUBILR), -	PINMUX_DATA(SIOSTRB0_MARK, PSB12_SIOSTRB0, SIOSTRB0_SIUBIBT), -	PINMUX_DATA(SIOSTRB1_MARK, PSB11_SIOSTRB1, SIOSTRB1_SIUBOLR), -	PINMUX_DATA(SIOSCK_MARK, PSB10_SIOSCK, SIOSCK_SIUBOBT), -	PINMUX_DATA(SIOMCK_MARK, PSD9_SIOMCK_SIUMCKB, PSB9_SIOMCK, PTF6), - -	/* CEU */ -	PINMUX_DATA(VIO_D15_MARK, PSC0_VIO, HIZA10_NAF, NAF7_VIO_D15), -	PINMUX_DATA(VIO_D14_MARK, PSC0_VIO, HIZA10_NAF, NAF6_VIO_D14), -	PINMUX_DATA(VIO_D13_MARK, PSC0_VIO, HIZA10_NAF, NAF5_VIO_D13), -	PINMUX_DATA(VIO_D12_MARK, PSC0_VIO, HIZA10_NAF, NAF4_VIO_D12), -	PINMUX_DATA(VIO_D11_MARK, PSC0_VIO, HIZA10_NAF, NAF3_VIO_D11), -	PINMUX_DATA(VIO_D10_MARK, PSE2_VIO_D10, HIZB0_VIO, NAF2_VIO_D10), -	PINMUX_DATA(VIO_D9_MARK, PSE1_VIO_D9, HIZB0_VIO, NAF1_VIO_D9), -	PINMUX_DATA(VIO_D8_MARK, PSE0_VIO_D8, HIZB0_VIO, NAF0_VIO_D8), -	PINMUX_DATA(VIO_D7_MARK, PSD11_VIO, VIO_D7_SCIF1_SCK), -	PINMUX_DATA(VIO_D6_MARK, PSD11_VIO, VIO_D6_SCIF1_RXD), -	PINMUX_DATA(VIO_D5_MARK, PSD11_VIO, VIO_D5_SCIF1_TXD), -	PINMUX_DATA(VIO_D4_MARK, VIO_D4), -	PINMUX_DATA(VIO_D3_MARK, VIO_D3), -	PINMUX_DATA(VIO_D2_MARK, VIO_D2), -	PINMUX_DATA(VIO_D1_MARK, VIO_D1), -	PINMUX_DATA(VIO_D0_MARK, PSD10_VIO_D0, VIO_D0_LCDLCLK), -	PINMUX_DATA(VIO_CLK_MARK, PSD12_VIO, MSELB9_VIO, VIO_CLK_SCIF1_RTS), -	PINMUX_DATA(VIO_VD_MARK, PSD12_VIO, MSELB9_VIO, VIO_VD_SCIF1_CTS), -	PINMUX_DATA(VIO_HD_MARK, PSD13_VIO, MSELB9_VIO, VIO_HD_SCIF2_RXD), -	PINMUX_DATA(VIO_FLD_MARK, PSD13_VIO, HIZA9_VIO, VIO_FLD_SCIF2_CTS), -	PINMUX_DATA(VIO_CKO_MARK, PSD13_VIO, HIZA9_VIO, VIO_CKO_SCIF2_RTS), -	PINMUX_DATA(VIO_STEX_MARK, PSD13_VIO, HIZA9_VIO, VIO_STEX_SCIF2_SCK), -	PINMUX_DATA(VIO_STEM_MARK, PSD13_VIO, HIZA9_VIO, VIO_STEM_SCIF2_TXD), -	PINMUX_DATA(VIO_VD2_MARK, PSE3_VIO, MSELB9_VIO2, -		    HIZB0_VIO, FOE_VIO_VD2), -	PINMUX_DATA(VIO_HD2_MARK, PSE3_VIO, MSELB9_VIO2, -		    HIZB1_VIO, FCE_VIO_HD2), -	PINMUX_DATA(VIO_CLK2_MARK, PSE3_VIO, MSELB9_VIO2, -		    HIZB1_VIO, FRB_VIO_CLK2), - -	/* LCDC */ -	PINMUX_DATA(LCDD23_MARK, HIZA8_LCDC, LCDD23), -	PINMUX_DATA(LCDD22_MARK, HIZA8_LCDC, LCDD22), -	PINMUX_DATA(LCDD21_MARK, HIZA8_LCDC, LCDD21), -	PINMUX_DATA(LCDD20_MARK, HIZA8_LCDC, LCDD20), -	PINMUX_DATA(LCDD19_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD19_DV_CLKI), -	PINMUX_DATA(LCDD18_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD18_DV_CLK), -	PINMUX_DATA(LCDD17_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, -		    LCDD17_DV_HSYNC), -	PINMUX_DATA(LCDD16_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, -		    LCDD16_DV_VSYNC), -	PINMUX_DATA(LCDD15_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD15_DV_D15), -	PINMUX_DATA(LCDD14_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD14_DV_D14), -	PINMUX_DATA(LCDD13_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD13_DV_D13), -	PINMUX_DATA(LCDD12_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD12_DV_D12), -	PINMUX_DATA(LCDD11_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD11_DV_D11), -	PINMUX_DATA(LCDD10_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD10_DV_D10), -	PINMUX_DATA(LCDD9_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD9_DV_D9), -	PINMUX_DATA(LCDD8_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD8_DV_D8), -	PINMUX_DATA(LCDD7_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD7_DV_D7), -	PINMUX_DATA(LCDD6_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD6_DV_D6), -	PINMUX_DATA(LCDD5_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD5_DV_D5), -	PINMUX_DATA(LCDD4_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD4_DV_D4), -	PINMUX_DATA(LCDD3_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD3_DV_D3), -	PINMUX_DATA(LCDD2_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD2_DV_D2), -	PINMUX_DATA(LCDD1_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD1_DV_D1), -	PINMUX_DATA(LCDD0_MARK, PSD0_LCDD19_LCDD0, HIZA8_LCDC, LCDD0_DV_D0), -	PINMUX_DATA(LCDLCLK_MARK, PSD10_LCDLCLK, VIO_D0_LCDLCLK), -	/* Main LCD */ -	PINMUX_DATA(LCDDON_MARK, PSD2_LCDDON, HIZA7_LCDC, LCDDON_LCDDON2), -	PINMUX_DATA(LCDVCPWC_MARK, PSD3_LCDVEPWC_LCDVCPWC, -		    HIZA6_LCDC, LCDVCPWC_LCDVCPWC2), -	PINMUX_DATA(LCDVEPWC_MARK, PSD3_LCDVEPWC_LCDVCPWC, -		    HIZA6_LCDC, LCDVEPWC_LCDVEPWC2), -	PINMUX_DATA(LCDVSYN_MARK, HIZA7_LCDC, LCDVSYN), -	/* Main LCD - RGB Mode */ -	PINMUX_DATA(LCDDCK_MARK, MSELB8_RGB, HIZA8_LCDC, LCDDCK_LCDWR), -	PINMUX_DATA(LCDHSYN_MARK, MSELB8_RGB, HIZA7_LCDC, LCDHSYN_LCDCS), -	PINMUX_DATA(LCDDISP_MARK, MSELB8_RGB, HIZA7_LCDC, LCDDISP_LCDRS), -	/* Main LCD - SYS Mode */ -	PINMUX_DATA(LCDRS_MARK, MSELB8_SYS, HIZA7_LCDC, LCDDISP_LCDRS), -	PINMUX_DATA(LCDCS_MARK, MSELB8_SYS, HIZA7_LCDC, LCDHSYN_LCDCS), -	PINMUX_DATA(LCDWR_MARK, MSELB8_SYS, HIZA8_LCDC, LCDDCK_LCDWR), -	PINMUX_DATA(LCDRD_MARK, HIZA7_LCDC, LCDRD), -	/* Sub LCD - SYS Mode */ -	PINMUX_DATA(LCDDON2_MARK, PSD2_LCDDON2, HIZA7_LCDC, LCDDON_LCDDON2), -	PINMUX_DATA(LCDVCPWC2_MARK, PSD3_LCDVEPWC2_LCDVCPWC2, -		    HIZA6_LCDC, LCDVCPWC_LCDVCPWC2), -	PINMUX_DATA(LCDVEPWC2_MARK, PSD3_LCDVEPWC2_LCDVCPWC2, -		    HIZA6_LCDC, LCDVEPWC_LCDVEPWC2), -	PINMUX_DATA(LCDVSYN2_MARK, PSE12_LCDVSYN2, HIZA8_LCDC, LCDVSYN2_DACK), -	PINMUX_DATA(LCDCS2_MARK, PSD5_LCDCS2, CS6B_CE1B_LCDCS2), - -	/* BSC */ -	PINMUX_DATA(IOIS16_MARK, IOIS16), -	PINMUX_DATA(A25_MARK, A25), -	PINMUX_DATA(A24_MARK, A24), -	PINMUX_DATA(A23_MARK, A23), -	PINMUX_DATA(A22_MARK, A22), -	PINMUX_DATA(BS_MARK, PSA9_BS, IRQ4_BS), -	PINMUX_DATA(CS6B_CE1B_MARK, PSD5_CS6B_CE1B, CS6B_CE1B_LCDCS2), -	PINMUX_DATA(WAIT_MARK, WAIT), -	PINMUX_DATA(CS6A_CE2B_MARK, CS6A_CE2B), - -	/* SBSC */ -	PINMUX_DATA(HPD63_MARK, HPD63), -	PINMUX_DATA(HPD62_MARK, HPD62), -	PINMUX_DATA(HPD61_MARK, HPD61), -	PINMUX_DATA(HPD60_MARK, HPD60), -	PINMUX_DATA(HPD59_MARK, HPD59), -	PINMUX_DATA(HPD58_MARK, HPD58), -	PINMUX_DATA(HPD57_MARK, HPD57), -	PINMUX_DATA(HPD56_MARK, HPD56), -	PINMUX_DATA(HPD55_MARK, HPD55), -	PINMUX_DATA(HPD54_MARK, HPD54), -	PINMUX_DATA(HPD53_MARK, HPD53), -	PINMUX_DATA(HPD52_MARK, HPD52), -	PINMUX_DATA(HPD51_MARK, HPD51), -	PINMUX_DATA(HPD50_MARK, HPD50), -	PINMUX_DATA(HPD49_MARK, HPD49), -	PINMUX_DATA(HPD48_MARK, HPD48), -	PINMUX_DATA(HPDQM7_MARK, HPDQM7), -	PINMUX_DATA(HPDQM6_MARK, HPDQM6), -	PINMUX_DATA(HPDQM5_MARK, HPDQM5), -	PINMUX_DATA(HPDQM4_MARK, HPDQM4), - -	/* IRQ */ -	PINMUX_DATA(IRQ0_MARK, HIZC8_IRQ0, IRQ0), -	PINMUX_DATA(IRQ1_MARK, HIZC9_IRQ1, IRQ1), -	PINMUX_DATA(IRQ2_MARK, PSA4_IRQ2, HIZC10_IRQ2, IRQ2_SDHID2), -	PINMUX_DATA(IRQ3_MARK, PSE15_SIOF0_MCK_IRQ3, PSB8_IRQ3, -		    HIZC11_IRQ3, PTQ0), -	PINMUX_DATA(IRQ4_MARK, PSA9_IRQ4, HIZC12_IRQ4, IRQ4_BS), -	PINMUX_DATA(IRQ5_MARK, HIZC13_IRQ5, IRQ5), -	PINMUX_DATA(IRQ6_MARK, PSA15_IRQ6, HIZC14_IRQ6, KEYIN0_IRQ6), -	PINMUX_DATA(IRQ7_MARK, PSA14_IRQ7, HIZC15_IRQ7, KEYIN4_IRQ7), - -	/* SDHI */ -	PINMUX_DATA(SDHICD_MARK, SDHICD), -	PINMUX_DATA(SDHIWP_MARK, SDHIWP), -	PINMUX_DATA(SDHID3_MARK, SDHID3), -	PINMUX_DATA(SDHID2_MARK, PSA4_SDHID2, IRQ2_SDHID2), -	PINMUX_DATA(SDHID1_MARK, SDHID1), -	PINMUX_DATA(SDHID0_MARK, SDHID0), -	PINMUX_DATA(SDHICMD_MARK, SDHICMD), -	PINMUX_DATA(SDHICLK_MARK, SDHICLK), - -	/* SIU - Port A */ -	PINMUX_DATA(SIUAOLR_MARK, PSC13_SIUAOLR, HIZB4_SIUA, SIUAOLR_SIOF1_SYNC), -	PINMUX_DATA(SIUAOBT_MARK, PSC14_SIUAOBT, HIZB4_SIUA, SIUAOBT_SIOF1_SCK), -	PINMUX_DATA(SIUAISLD_MARK, PSC15_SIUAISLD, HIZB4_SIUA, SIUAISLD_SIOF1_RXD), -	PINMUX_DATA(SIUAILR_MARK, PSC11_SIUAILR, HIZB4_SIUA, SIUAILR_SIOF1_SS2), -	PINMUX_DATA(SIUAIBT_MARK, PSC12_SIUAIBT, HIZB4_SIUA, SIUAIBT_SIOF1_SS1), -	PINMUX_DATA(SIUAOSLD_MARK, PSB0_SIUAOSLD, HIZB4_SIUA, SIUAOSLD_SIOF1_TXD), -	PINMUX_DATA(SIUMCKA_MARK, PSE11_SIUMCKA_SIOF1_MCK, HIZB4_SIUA, PSB1_SIUMCKA, PTK0), -	PINMUX_DATA(SIUFCKA_MARK, PSE11_SIUFCKA, HIZB4_SIUA, PTK0), - -	/* SIU - Port B */ -	PINMUX_DATA(SIUBOLR_MARK, PSB11_SIUBOLR, SIOSTRB1_SIUBOLR), -	PINMUX_DATA(SIUBOBT_MARK, PSB10_SIUBOBT, SIOSCK_SIUBOBT), -	PINMUX_DATA(SIUBISLD_MARK, PSB14_SIUBISLD, SIORXD_SIUBISLD), -	PINMUX_DATA(SIUBILR_MARK, PSB13_SIUBILR, SIOD_SIUBILR), -	PINMUX_DATA(SIUBIBT_MARK, PSB12_SIUBIBT, SIOSTRB0_SIUBIBT), -	PINMUX_DATA(SIUBOSLD_MARK, PSB15_SIUBOSLD, SIOTXD_SIUBOSLD), -	PINMUX_DATA(SIUMCKB_MARK, PSD9_SIOMCK_SIUMCKB, PSB9_SIUMCKB, PTF6), -	PINMUX_DATA(SIUFCKB_MARK, PSD9_SIUFCKB, PTF6), - -	/* AUD */ -	PINMUX_DATA(AUDSYNC_MARK, AUDSYNC), -	PINMUX_DATA(AUDATA3_MARK, AUDATA3), -	PINMUX_DATA(AUDATA2_MARK, AUDATA2), -	PINMUX_DATA(AUDATA1_MARK, AUDATA1), -	PINMUX_DATA(AUDATA0_MARK, AUDATA0), - -	/* DMAC */ -	PINMUX_DATA(DACK_MARK, PSE12_DACK, LCDVSYN2_DACK), -	PINMUX_DATA(DREQ0_MARK, DREQ0), - -	/* VOU */ -	PINMUX_DATA(DV_CLKI_MARK, PSD0_DV, LCDD19_DV_CLKI), -	PINMUX_DATA(DV_CLK_MARK, PSD0_DV, LCDD18_DV_CLK), -	PINMUX_DATA(DV_HSYNC_MARK, PSD0_DV, LCDD17_DV_HSYNC), -	PINMUX_DATA(DV_VSYNC_MARK, PSD0_DV, LCDD16_DV_VSYNC), -	PINMUX_DATA(DV_D15_MARK, PSD0_DV, LCDD15_DV_D15), -	PINMUX_DATA(DV_D14_MARK, PSD0_DV, LCDD14_DV_D14), -	PINMUX_DATA(DV_D13_MARK, PSD0_DV, LCDD13_DV_D13), -	PINMUX_DATA(DV_D12_MARK, PSD0_DV, LCDD12_DV_D12), -	PINMUX_DATA(DV_D11_MARK, PSD0_DV, LCDD11_DV_D11), -	PINMUX_DATA(DV_D10_MARK, PSD0_DV, LCDD10_DV_D10), -	PINMUX_DATA(DV_D9_MARK, PSD0_DV, LCDD9_DV_D9), -	PINMUX_DATA(DV_D8_MARK, PSD0_DV, LCDD8_DV_D8), -	PINMUX_DATA(DV_D7_MARK, PSD0_DV, LCDD7_DV_D7), -	PINMUX_DATA(DV_D6_MARK, PSD0_DV, LCDD6_DV_D6), -	PINMUX_DATA(DV_D5_MARK, PSD0_DV, LCDD5_DV_D5), -	PINMUX_DATA(DV_D4_MARK, PSD0_DV, LCDD4_DV_D4), -	PINMUX_DATA(DV_D3_MARK, PSD0_DV, LCDD3_DV_D3), -	PINMUX_DATA(DV_D2_MARK, PSD0_DV, LCDD2_DV_D2), -	PINMUX_DATA(DV_D1_MARK, PSD0_DV, LCDD1_DV_D1), -	PINMUX_DATA(DV_D0_MARK, PSD0_DV, LCDD0_DV_D0), - -	/* CPG */ -	PINMUX_DATA(STATUS0_MARK, STATUS0), -	PINMUX_DATA(PDSTATUS_MARK, PDSTATUS), - -	/* SIOF0 */ -	PINMUX_DATA(SIOF0_MCK_MARK, PSE15_SIOF0_MCK_IRQ3, PSB8_SIOF0_MCK, PTQ0), -	PINMUX_DATA(SIOF0_SCK_MARK, PSB5_SIOF0_SCK, SIOF0_SCK_TS_SCK), -	PINMUX_DATA(SIOF0_SYNC_MARK, PSB4_SIOF0_SYNC, SIOF0_SYNC_TS_SDEN), -	PINMUX_DATA(SIOF0_SS1_MARK, PSB3_SIOF0_SS1, SIOF0_SS1_TS_SPSYNC), -	PINMUX_DATA(SIOF0_SS2_MARK, PSB2_SIOF0_SS2, SIOF0_SS2_SIM_RST), -	PINMUX_DATA(SIOF0_TXD_MARK, PSE14_SIOF0_TXD_IRDA_OUT, -		    PSB7_SIOF0_TXD, PTQ1), -	PINMUX_DATA(SIOF0_RXD_MARK, PSE13_SIOF0_RXD_IRDA_IN, -		    PSB6_SIOF0_RXD, PTQ2), - -	/* SIOF1 */ -	PINMUX_DATA(SIOF1_MCK_MARK, PSE11_SIUMCKA_SIOF1_MCK, -		    PSB1_SIOF1_MCK, PTK0), -	PINMUX_DATA(SIOF1_SCK_MARK, PSC14_SIOF1_SCK, SIUAOBT_SIOF1_SCK), -	PINMUX_DATA(SIOF1_SYNC_MARK, PSC13_SIOF1_SYNC, SIUAOLR_SIOF1_SYNC), -	PINMUX_DATA(SIOF1_SS1_MARK, PSC12_SIOF1_SS1, SIUAIBT_SIOF1_SS1), -	PINMUX_DATA(SIOF1_SS2_MARK, PSC11_SIOF1_SS2, SIUAILR_SIOF1_SS2), -	PINMUX_DATA(SIOF1_TXD_MARK, PSB0_SIOF1_TXD, SIUAOSLD_SIOF1_TXD), -	PINMUX_DATA(SIOF1_RXD_MARK, PSC15_SIOF1_RXD, SIUAISLD_SIOF1_RXD), - -	/* SIM */ -	PINMUX_DATA(SIM_D_MARK, PSE15_SIM_D, PTQ0), -	PINMUX_DATA(SIM_CLK_MARK, PSE14_SIM_CLK, PTQ1), -	PINMUX_DATA(SIM_RST_MARK, PSB2_SIM_RST, SIOF0_SS2_SIM_RST), - -	/* TSIF */ -	PINMUX_DATA(TS_SDAT_MARK, PSE13_TS_SDAT, PTQ2), -	PINMUX_DATA(TS_SCK_MARK, PSB5_TS_SCK, SIOF0_SCK_TS_SCK), -	PINMUX_DATA(TS_SDEN_MARK, PSB4_TS_SDEN, SIOF0_SYNC_TS_SDEN), -	PINMUX_DATA(TS_SPSYNC_MARK, PSB3_TS_SPSYNC, SIOF0_SS1_TS_SPSYNC), - -	/* IRDA */ -	PINMUX_DATA(IRDA_IN_MARK, PSE13_SIOF0_RXD_IRDA_IN, PSB6_IRDA_IN, PTQ2), -	PINMUX_DATA(IRDA_OUT_MARK, PSE14_SIOF0_TXD_IRDA_OUT, -		    PSB7_IRDA_OUT, PTQ1), - -	/* TPU */ -	PINMUX_DATA(TPUTO_MARK, PSD8_TPUTO, SCIF0_SCK_TPUTO), - -	/* FLCTL */ -	PINMUX_DATA(FCE_MARK, PSE3_FLCTL, FCE_VIO_HD2), -	PINMUX_DATA(NAF7_MARK, PSC0_NAF, HIZA10_NAF, NAF7_VIO_D15), -	PINMUX_DATA(NAF6_MARK, PSC0_NAF, HIZA10_NAF, NAF6_VIO_D14), -	PINMUX_DATA(NAF5_MARK, PSC0_NAF, HIZA10_NAF, NAF5_VIO_D13), -	PINMUX_DATA(NAF4_MARK, PSC0_NAF, HIZA10_NAF, NAF4_VIO_D12), -	PINMUX_DATA(NAF3_MARK, PSC0_NAF, HIZA10_NAF, NAF3_VIO_D11), -	PINMUX_DATA(NAF2_MARK, PSE2_NAF2, HIZB0_VIO, NAF2_VIO_D10), -	PINMUX_DATA(NAF1_MARK, PSE1_NAF1, HIZB0_VIO, NAF1_VIO_D9), -	PINMUX_DATA(NAF0_MARK, PSE0_NAF0, HIZB0_VIO, NAF0_VIO_D8), -	PINMUX_DATA(FCDE_MARK, FCDE), -	PINMUX_DATA(FOE_MARK, PSE3_FLCTL, HIZB0_VIO, FOE_VIO_VD2), -	PINMUX_DATA(FSC_MARK, FSC), -	PINMUX_DATA(FWE_MARK, FWE), -	PINMUX_DATA(FRB_MARK, PSE3_FLCTL, FRB_VIO_CLK2), - -	/* KEYSC */ -	PINMUX_DATA(KEYIN0_MARK, PSA15_KEYIN0, HIZC14_IRQ6, KEYIN0_IRQ6), -	PINMUX_DATA(KEYIN1_MARK, HIZA14_KEYSC, KEYIN1), -	PINMUX_DATA(KEYIN2_MARK, HIZA14_KEYSC, KEYIN2), -	PINMUX_DATA(KEYIN3_MARK, HIZA14_KEYSC, KEYIN3), -	PINMUX_DATA(KEYIN4_MARK, PSA14_KEYIN4, HIZC15_IRQ7, KEYIN4_IRQ7), -	PINMUX_DATA(KEYOUT0_MARK, HIZA14_KEYSC, KEYOUT0), -	PINMUX_DATA(KEYOUT1_MARK, HIZA14_KEYSC, KEYOUT1), -	PINMUX_DATA(KEYOUT2_MARK, HIZA14_KEYSC, KEYOUT2), -	PINMUX_DATA(KEYOUT3_MARK, HIZA14_KEYSC, KEYOUT3), -	PINMUX_DATA(KEYOUT4_IN6_MARK, HIZA14_KEYSC, KEYOUT4_IN6), -	PINMUX_DATA(KEYOUT5_IN5_MARK, HIZA14_KEYSC, KEYOUT5_IN5), -}; - -static struct pinmux_gpio pinmux_gpios[] = { -	/* PTA */ -	PINMUX_GPIO(GPIO_PTA7, PTA7_DATA), -	PINMUX_GPIO(GPIO_PTA6, PTA6_DATA), -	PINMUX_GPIO(GPIO_PTA5, PTA5_DATA), -	PINMUX_GPIO(GPIO_PTA4, PTA4_DATA), -	PINMUX_GPIO(GPIO_PTA3, PTA3_DATA), -	PINMUX_GPIO(GPIO_PTA2, PTA2_DATA), -	PINMUX_GPIO(GPIO_PTA1, PTA1_DATA), -	PINMUX_GPIO(GPIO_PTA0, PTA0_DATA), - -	/* PTB */ -	PINMUX_GPIO(GPIO_PTB7, PTB7_DATA), -	PINMUX_GPIO(GPIO_PTB6, PTB6_DATA), -	PINMUX_GPIO(GPIO_PTB5, PTB5_DATA), -	PINMUX_GPIO(GPIO_PTB4, PTB4_DATA), -	PINMUX_GPIO(GPIO_PTB3, PTB3_DATA), -	PINMUX_GPIO(GPIO_PTB2, PTB2_DATA), -	PINMUX_GPIO(GPIO_PTB1, PTB1_DATA), -	PINMUX_GPIO(GPIO_PTB0, PTB0_DATA), - -	/* PTC */ -	PINMUX_GPIO(GPIO_PTC7, PTC7_DATA), -	PINMUX_GPIO(GPIO_PTC5, PTC5_DATA), -	PINMUX_GPIO(GPIO_PTC4, PTC4_DATA), -	PINMUX_GPIO(GPIO_PTC3, PTC3_DATA), -	PINMUX_GPIO(GPIO_PTC2, PTC2_DATA), -	PINMUX_GPIO(GPIO_PTC0, PTC0_DATA), - -	/* PTD */ -	PINMUX_GPIO(GPIO_PTD7, PTD7_DATA), -	PINMUX_GPIO(GPIO_PTD6, PTD6_DATA), -	PINMUX_GPIO(GPIO_PTD5, PTD5_DATA), -	PINMUX_GPIO(GPIO_PTD4, PTD4_DATA), -	PINMUX_GPIO(GPIO_PTD3, PTD3_DATA), -	PINMUX_GPIO(GPIO_PTD2, PTD2_DATA), -	PINMUX_GPIO(GPIO_PTD1, PTD1_DATA), -	PINMUX_GPIO(GPIO_PTD0, PTD0_DATA), - -	/* PTE */ -	PINMUX_GPIO(GPIO_PTE7, PTE7_DATA), -	PINMUX_GPIO(GPIO_PTE6, PTE6_DATA), -	PINMUX_GPIO(GPIO_PTE5, PTE5_DATA), -	PINMUX_GPIO(GPIO_PTE4, PTE4_DATA), -	PINMUX_GPIO(GPIO_PTE1, PTE1_DATA), -	PINMUX_GPIO(GPIO_PTE0, PTE0_DATA), - -	/* PTF */ -	PINMUX_GPIO(GPIO_PTF6, PTF6_DATA), -	PINMUX_GPIO(GPIO_PTF5, PTF5_DATA), -	PINMUX_GPIO(GPIO_PTF4, PTF4_DATA), -	PINMUX_GPIO(GPIO_PTF3, PTF3_DATA), -	PINMUX_GPIO(GPIO_PTF2, PTF2_DATA), -	PINMUX_GPIO(GPIO_PTF1, PTF1_DATA), -	PINMUX_GPIO(GPIO_PTF0, PTF0_DATA), - -	/* PTG */ -	PINMUX_GPIO(GPIO_PTG4, PTG4_DATA), -	PINMUX_GPIO(GPIO_PTG3, PTG3_DATA), -	PINMUX_GPIO(GPIO_PTG2, PTG2_DATA), -	PINMUX_GPIO(GPIO_PTG1, PTG1_DATA), -	PINMUX_GPIO(GPIO_PTG0, PTG0_DATA), - -	/* PTH */ -	PINMUX_GPIO(GPIO_PTH7, PTH7_DATA), -	PINMUX_GPIO(GPIO_PTH6, PTH6_DATA), -	PINMUX_GPIO(GPIO_PTH5, PTH5_DATA), -	PINMUX_GPIO(GPIO_PTH4, PTH4_DATA), -	PINMUX_GPIO(GPIO_PTH3, PTH3_DATA), -	PINMUX_GPIO(GPIO_PTH2, PTH2_DATA), -	PINMUX_GPIO(GPIO_PTH1, PTH1_DATA), -	PINMUX_GPIO(GPIO_PTH0, PTH0_DATA), - -	/* PTJ */ -	PINMUX_GPIO(GPIO_PTJ7, PTJ7_DATA), -	PINMUX_GPIO(GPIO_PTJ6, PTJ6_DATA), -	PINMUX_GPIO(GPIO_PTJ5, PTJ5_DATA), -	PINMUX_GPIO(GPIO_PTJ1, PTJ1_DATA), -	PINMUX_GPIO(GPIO_PTJ0, PTJ0_DATA), - -	/* PTK */ -	PINMUX_GPIO(GPIO_PTK6, PTK6_DATA), -	PINMUX_GPIO(GPIO_PTK5, PTK5_DATA), -	PINMUX_GPIO(GPIO_PTK4, PTK4_DATA), -	PINMUX_GPIO(GPIO_PTK3, PTK3_DATA), -	PINMUX_GPIO(GPIO_PTK2, PTK2_DATA), -	PINMUX_GPIO(GPIO_PTK1, PTK1_DATA), -	PINMUX_GPIO(GPIO_PTK0, PTK0_DATA), - -	/* PTL */ -	PINMUX_GPIO(GPIO_PTL7, PTL7_DATA), -	PINMUX_GPIO(GPIO_PTL6, PTL6_DATA), -	PINMUX_GPIO(GPIO_PTL5, PTL5_DATA), -	PINMUX_GPIO(GPIO_PTL4, PTL4_DATA), -	PINMUX_GPIO(GPIO_PTL3, PTL3_DATA), -	PINMUX_GPIO(GPIO_PTL2, PTL2_DATA), -	PINMUX_GPIO(GPIO_PTL1, PTL1_DATA), -	PINMUX_GPIO(GPIO_PTL0, PTL0_DATA), - -	/* PTM */ -	PINMUX_GPIO(GPIO_PTM7, PTM7_DATA), -	PINMUX_GPIO(GPIO_PTM6, PTM6_DATA), -	PINMUX_GPIO(GPIO_PTM5, PTM5_DATA), -	PINMUX_GPIO(GPIO_PTM4, PTM4_DATA), -	PINMUX_GPIO(GPIO_PTM3, PTM3_DATA), -	PINMUX_GPIO(GPIO_PTM2, PTM2_DATA), -	PINMUX_GPIO(GPIO_PTM1, PTM1_DATA), -	PINMUX_GPIO(GPIO_PTM0, PTM0_DATA), - -	/* PTN */ -	PINMUX_GPIO(GPIO_PTN7, PTN7_DATA), -	PINMUX_GPIO(GPIO_PTN6, PTN6_DATA), -	PINMUX_GPIO(GPIO_PTN5, PTN5_DATA), -	PINMUX_GPIO(GPIO_PTN4, PTN4_DATA), -	PINMUX_GPIO(GPIO_PTN3, PTN3_DATA), -	PINMUX_GPIO(GPIO_PTN2, PTN2_DATA), -	PINMUX_GPIO(GPIO_PTN1, PTN1_DATA), -	PINMUX_GPIO(GPIO_PTN0, PTN0_DATA), - -	/* PTQ */ -	PINMUX_GPIO(GPIO_PTQ6, PTQ6_DATA), -	PINMUX_GPIO(GPIO_PTQ5, PTQ5_DATA), -	PINMUX_GPIO(GPIO_PTQ4, PTQ4_DATA), -	PINMUX_GPIO(GPIO_PTQ3, PTQ3_DATA), -	PINMUX_GPIO(GPIO_PTQ2, PTQ2_DATA), -	PINMUX_GPIO(GPIO_PTQ1, PTQ1_DATA), -	PINMUX_GPIO(GPIO_PTQ0, PTQ0_DATA), - -	/* PTR */ -	PINMUX_GPIO(GPIO_PTR4, PTR4_DATA), -	PINMUX_GPIO(GPIO_PTR3, PTR3_DATA), -	PINMUX_GPIO(GPIO_PTR2, PTR2_DATA), -	PINMUX_GPIO(GPIO_PTR1, PTR1_DATA), -	PINMUX_GPIO(GPIO_PTR0, PTR0_DATA), - -	/* PTS */ -	PINMUX_GPIO(GPIO_PTS4, PTS4_DATA), -	PINMUX_GPIO(GPIO_PTS3, PTS3_DATA), -	PINMUX_GPIO(GPIO_PTS2, PTS2_DATA), -	PINMUX_GPIO(GPIO_PTS1, PTS1_DATA), -	PINMUX_GPIO(GPIO_PTS0, PTS0_DATA), - -	/* PTT */ -	PINMUX_GPIO(GPIO_PTT4, PTT4_DATA), -	PINMUX_GPIO(GPIO_PTT3, PTT3_DATA), -	PINMUX_GPIO(GPIO_PTT2, PTT2_DATA), -	PINMUX_GPIO(GPIO_PTT1, PTT1_DATA), -	PINMUX_GPIO(GPIO_PTT0, PTT0_DATA), - -	/* PTU */ -	PINMUX_GPIO(GPIO_PTU4, PTU4_DATA), -	PINMUX_GPIO(GPIO_PTU3, PTU3_DATA), -	PINMUX_GPIO(GPIO_PTU2, PTU2_DATA), -	PINMUX_GPIO(GPIO_PTU1, PTU1_DATA), -	PINMUX_GPIO(GPIO_PTU0, PTU0_DATA), - -	/* PTV */ -	PINMUX_GPIO(GPIO_PTV4, PTV4_DATA), -	PINMUX_GPIO(GPIO_PTV3, PTV3_DATA), -	PINMUX_GPIO(GPIO_PTV2, PTV2_DATA), -	PINMUX_GPIO(GPIO_PTV1, PTV1_DATA), -	PINMUX_GPIO(GPIO_PTV0, PTV0_DATA), - -	/* PTW */ -	PINMUX_GPIO(GPIO_PTW6, PTW6_DATA), -	PINMUX_GPIO(GPIO_PTW5, PTW5_DATA), -	PINMUX_GPIO(GPIO_PTW4, PTW4_DATA), -	PINMUX_GPIO(GPIO_PTW3, PTW3_DATA), -	PINMUX_GPIO(GPIO_PTW2, PTW2_DATA), -	PINMUX_GPIO(GPIO_PTW1, PTW1_DATA), -	PINMUX_GPIO(GPIO_PTW0, PTW0_DATA), - -	/* PTX */ -	PINMUX_GPIO(GPIO_PTX6, PTX6_DATA), -	PINMUX_GPIO(GPIO_PTX5, PTX5_DATA), -	PINMUX_GPIO(GPIO_PTX4, PTX4_DATA), -	PINMUX_GPIO(GPIO_PTX3, PTX3_DATA), -	PINMUX_GPIO(GPIO_PTX2, PTX2_DATA), -	PINMUX_GPIO(GPIO_PTX1, PTX1_DATA), -	PINMUX_GPIO(GPIO_PTX0, PTX0_DATA), - -	/* PTY */ -	PINMUX_GPIO(GPIO_PTY5, PTY5_DATA), -	PINMUX_GPIO(GPIO_PTY4, PTY4_DATA), -	PINMUX_GPIO(GPIO_PTY3, PTY3_DATA), -	PINMUX_GPIO(GPIO_PTY2, PTY2_DATA), -	PINMUX_GPIO(GPIO_PTY1, PTY1_DATA), -	PINMUX_GPIO(GPIO_PTY0, PTY0_DATA), - -	/* PTZ */ -	PINMUX_GPIO(GPIO_PTZ5, PTZ5_DATA), -	PINMUX_GPIO(GPIO_PTZ4, PTZ4_DATA), -	PINMUX_GPIO(GPIO_PTZ3, PTZ3_DATA), -	PINMUX_GPIO(GPIO_PTZ2, PTZ2_DATA), -	PINMUX_GPIO(GPIO_PTZ1, PTZ1_DATA), - -	/* SCIF0 */ -	PINMUX_GPIO(GPIO_FN_SCIF0_TXD, SCIF0_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_RXD, SCIF0_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_RTS, SCIF0_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_CTS, SCIF0_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_SCK, SCIF0_SCK_MARK), - -	/* SCIF1 */ -	PINMUX_GPIO(GPIO_FN_SCIF1_TXD, SCIF1_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_RXD, SCIF1_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_RTS, SCIF1_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_CTS, SCIF1_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_SCK, SCIF1_SCK_MARK), - -	/* SCIF2 */ -	PINMUX_GPIO(GPIO_FN_SCIF2_TXD, SCIF2_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_RXD, SCIF2_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_RTS, SCIF2_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_CTS, SCIF2_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_SCK, SCIF2_SCK_MARK), - -	/* SIO */ -	PINMUX_GPIO(GPIO_FN_SIOTXD, SIOTXD_MARK), -	PINMUX_GPIO(GPIO_FN_SIORXD, SIORXD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOD, SIOD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOSTRB0, SIOSTRB0_MARK), -	PINMUX_GPIO(GPIO_FN_SIOSTRB1, SIOSTRB1_MARK), -	PINMUX_GPIO(GPIO_FN_SIOSCK, SIOSCK_MARK), -	PINMUX_GPIO(GPIO_FN_SIOMCK, SIOMCK_MARK), - -	/* CEU */ -	PINMUX_GPIO(GPIO_FN_VIO_D15, VIO_D15_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D14, VIO_D14_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D13, VIO_D13_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D12, VIO_D12_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D11, VIO_D11_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D10, VIO_D10_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D9, VIO_D9_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D8, VIO_D8_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D7, VIO_D7_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D6, VIO_D6_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D5, VIO_D5_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D4, VIO_D4_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D3, VIO_D3_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D2, VIO_D2_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D1, VIO_D1_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D0, VIO_D0_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_CLK, VIO_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_VD, VIO_VD_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_HD, VIO_HD_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_FLD, VIO_FLD_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_CKO, VIO_CKO_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_STEX, VIO_STEX_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_STEM, VIO_STEM_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_VD2, VIO_VD2_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_HD2, VIO_HD2_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_CLK2, VIO_CLK2_MARK), - -	/* LCDC */ -	PINMUX_GPIO(GPIO_FN_LCDD23, LCDD23_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD22, LCDD22_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD21, LCDD21_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD20, LCDD20_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD19, LCDD19_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD18, LCDD18_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD17, LCDD17_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD16, LCDD16_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD15, LCDD15_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD14, LCDD14_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD13, LCDD13_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD12, LCDD12_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD11, LCDD11_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD10, LCDD10_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD9, LCDD9_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD8, LCDD8_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD7, LCDD7_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD6, LCDD6_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD5, LCDD5_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD4, LCDD4_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD3, LCDD3_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD2, LCDD2_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD1, LCDD1_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD0, LCDD0_MARK), -	PINMUX_GPIO(GPIO_FN_LCDLCLK, LCDLCLK_MARK), -	/* Main LCD */ -	PINMUX_GPIO(GPIO_FN_LCDDON, LCDDON_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVCPWC, LCDVCPWC_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVEPWC, LCDVEPWC_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVSYN, LCDVSYN_MARK), -	/* Main LCD - RGB Mode */ -	PINMUX_GPIO(GPIO_FN_LCDDCK, LCDDCK_MARK), -	PINMUX_GPIO(GPIO_FN_LCDHSYN, LCDHSYN_MARK), -	PINMUX_GPIO(GPIO_FN_LCDDISP, LCDDISP_MARK), -	/* Main LCD - SYS Mode */ -	PINMUX_GPIO(GPIO_FN_LCDRS, LCDRS_MARK), -	PINMUX_GPIO(GPIO_FN_LCDCS, LCDCS_MARK), -	PINMUX_GPIO(GPIO_FN_LCDWR, LCDWR_MARK), -	PINMUX_GPIO(GPIO_FN_LCDRD, LCDRD_MARK), -	/* Sub LCD - SYS Mode */ -	PINMUX_GPIO(GPIO_FN_LCDDON2, LCDDON2_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVCPWC2, LCDVCPWC2_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVEPWC2, LCDVEPWC2_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVSYN2, LCDVSYN2_MARK), -	PINMUX_GPIO(GPIO_FN_LCDCS2, LCDCS2_MARK), - -	/* BSC */ -	PINMUX_GPIO(GPIO_FN_IOIS16, IOIS16_MARK), -	PINMUX_GPIO(GPIO_FN_A25, A25_MARK), -	PINMUX_GPIO(GPIO_FN_A24, A24_MARK), -	PINMUX_GPIO(GPIO_FN_A23, A23_MARK), -	PINMUX_GPIO(GPIO_FN_A22, A22_MARK), -	PINMUX_GPIO(GPIO_FN_BS, BS_MARK), -	PINMUX_GPIO(GPIO_FN_CS6B_CE1B, CS6B_CE1B_MARK), -	PINMUX_GPIO(GPIO_FN_WAIT, WAIT_MARK), -	PINMUX_GPIO(GPIO_FN_CS6A_CE2B, CS6A_CE2B_MARK), - -	/* SBSC */ -	PINMUX_GPIO(GPIO_FN_HPD63, HPD63_MARK), -	PINMUX_GPIO(GPIO_FN_HPD62, HPD62_MARK), -	PINMUX_GPIO(GPIO_FN_HPD61, HPD61_MARK), -	PINMUX_GPIO(GPIO_FN_HPD60, HPD60_MARK), -	PINMUX_GPIO(GPIO_FN_HPD59, HPD59_MARK), -	PINMUX_GPIO(GPIO_FN_HPD58, HPD58_MARK), -	PINMUX_GPIO(GPIO_FN_HPD57, HPD57_MARK), -	PINMUX_GPIO(GPIO_FN_HPD56, HPD56_MARK), -	PINMUX_GPIO(GPIO_FN_HPD55, HPD55_MARK), -	PINMUX_GPIO(GPIO_FN_HPD54, HPD54_MARK), -	PINMUX_GPIO(GPIO_FN_HPD53, HPD53_MARK), -	PINMUX_GPIO(GPIO_FN_HPD52, HPD52_MARK), -	PINMUX_GPIO(GPIO_FN_HPD51, HPD51_MARK), -	PINMUX_GPIO(GPIO_FN_HPD50, HPD50_MARK), -	PINMUX_GPIO(GPIO_FN_HPD49, HPD49_MARK), -	PINMUX_GPIO(GPIO_FN_HPD48, HPD48_MARK), -	PINMUX_GPIO(GPIO_FN_HPDQM7, HPDQM7_MARK), -	PINMUX_GPIO(GPIO_FN_HPDQM6, HPDQM6_MARK), -	PINMUX_GPIO(GPIO_FN_HPDQM5, HPDQM5_MARK), -	PINMUX_GPIO(GPIO_FN_HPDQM4, HPDQM4_MARK), - -	/* IRQ */ -	PINMUX_GPIO(GPIO_FN_IRQ0, IRQ0_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ1, IRQ1_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ2, IRQ2_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ3, IRQ3_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ4, IRQ4_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ5, IRQ5_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ6, IRQ6_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ7, IRQ7_MARK), - -	/* SDHI */ -	PINMUX_GPIO(GPIO_FN_SDHICD, SDHICD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHIWP, SDHIWP_MARK), -	PINMUX_GPIO(GPIO_FN_SDHID3, SDHID3_MARK), -	PINMUX_GPIO(GPIO_FN_SDHID2, SDHID2_MARK), -	PINMUX_GPIO(GPIO_FN_SDHID1, SDHID1_MARK), -	PINMUX_GPIO(GPIO_FN_SDHID0, SDHID0_MARK), -	PINMUX_GPIO(GPIO_FN_SDHICMD, SDHICMD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHICLK, SDHICLK_MARK), - -	/* SIU - Port A */ -	PINMUX_GPIO(GPIO_FN_SIUAOLR, SIUAOLR_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAOBT, SIUAOBT_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAISLD, SIUAISLD_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAILR, SIUAILR_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAIBT, SIUAIBT_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAOSLD, SIUAOSLD_MARK), -	PINMUX_GPIO(GPIO_FN_SIUMCKA, SIUMCKA_MARK), -	PINMUX_GPIO(GPIO_FN_SIUFCKA, SIUFCKA_MARK), - -	/* SIU - Port B */ -	PINMUX_GPIO(GPIO_FN_SIUBOLR, SIUBOLR_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBOBT, SIUBOBT_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBISLD, SIUBISLD_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBILR, SIUBILR_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBIBT, SIUBIBT_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBOSLD, SIUBOSLD_MARK), -	PINMUX_GPIO(GPIO_FN_SIUMCKB, SIUMCKB_MARK), -	PINMUX_GPIO(GPIO_FN_SIUFCKB, SIUFCKB_MARK), - -	/* AUD */ -	PINMUX_GPIO(GPIO_FN_AUDSYNC, AUDSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA3, AUDATA3_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA2, AUDATA2_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA1, AUDATA1_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA0, AUDATA0_MARK), - -	/* DMAC */ -	PINMUX_GPIO(GPIO_FN_DACK, DACK_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ0, DREQ0_MARK), - -	/* VOU */ -	PINMUX_GPIO(GPIO_FN_DV_CLKI, DV_CLKI_MARK), -	PINMUX_GPIO(GPIO_FN_DV_CLK, DV_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_DV_HSYNC, DV_HSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_DV_VSYNC, DV_VSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D15, DV_D15_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D14, DV_D14_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D13, DV_D13_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D12, DV_D12_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D11, DV_D11_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D10, DV_D10_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D9, DV_D9_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D8, DV_D8_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D7, DV_D7_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D6, DV_D6_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D5, DV_D5_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D4, DV_D4_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D3, DV_D3_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D2, DV_D2_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D1, DV_D1_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D0, DV_D0_MARK), - -	/* CPG */ -	PINMUX_GPIO(GPIO_FN_STATUS0, STATUS0_MARK), -	PINMUX_GPIO(GPIO_FN_PDSTATUS, PDSTATUS_MARK), - -	/* SIOF0 */ -	PINMUX_GPIO(GPIO_FN_SIOF0_MCK, SIOF0_MCK_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_SCK, SIOF0_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_SYNC, SIOF0_SYNC_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_SS1, SIOF0_SS1_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_SS2, SIOF0_SS2_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_TXD, SIOF0_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF0_RXD, SIOF0_RXD_MARK), - -	/* SIOF1 */ -	PINMUX_GPIO(GPIO_FN_SIOF1_MCK, SIOF1_MCK_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_SCK, SIOF1_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_SYNC, SIOF1_SYNC_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_SS1, SIOF1_SS1_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_SS2, SIOF1_SS2_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_TXD, SIOF1_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF1_RXD, SIOF1_RXD_MARK), - -	/* SIM */ -	PINMUX_GPIO(GPIO_FN_SIM_D, SIM_D_MARK), -	PINMUX_GPIO(GPIO_FN_SIM_CLK, SIM_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SIM_RST, SIM_RST_MARK), - -	/* TSIF */ -	PINMUX_GPIO(GPIO_FN_TS_SDAT, TS_SDAT_MARK), -	PINMUX_GPIO(GPIO_FN_TS_SCK, TS_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_TS_SDEN, TS_SDEN_MARK), -	PINMUX_GPIO(GPIO_FN_TS_SPSYNC, TS_SPSYNC_MARK), - -	/* IRDA */ -	PINMUX_GPIO(GPIO_FN_IRDA_IN, IRDA_IN_MARK), -	PINMUX_GPIO(GPIO_FN_IRDA_OUT, IRDA_OUT_MARK), - -	/* TPU */ -	PINMUX_GPIO(GPIO_FN_TPUTO, TPUTO_MARK), - -	/* FLCTL */ -	PINMUX_GPIO(GPIO_FN_FCE, FCE_MARK), -	PINMUX_GPIO(GPIO_FN_NAF7, NAF7_MARK), -	PINMUX_GPIO(GPIO_FN_NAF6, NAF6_MARK), -	PINMUX_GPIO(GPIO_FN_NAF5, NAF5_MARK), -	PINMUX_GPIO(GPIO_FN_NAF4, NAF4_MARK), -	PINMUX_GPIO(GPIO_FN_NAF3, NAF3_MARK), -	PINMUX_GPIO(GPIO_FN_NAF2, NAF2_MARK), -	PINMUX_GPIO(GPIO_FN_NAF1, NAF1_MARK), -	PINMUX_GPIO(GPIO_FN_NAF0, NAF0_MARK), -	PINMUX_GPIO(GPIO_FN_FCDE, FCDE_MARK), -	PINMUX_GPIO(GPIO_FN_FOE, FOE_MARK), -	PINMUX_GPIO(GPIO_FN_FSC, FSC_MARK), -	PINMUX_GPIO(GPIO_FN_FWE, FWE_MARK), -	PINMUX_GPIO(GPIO_FN_FRB, FRB_MARK), - -	/* KEYSC */ -	PINMUX_GPIO(GPIO_FN_KEYIN0, KEYIN0_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN1, KEYIN1_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN2, KEYIN2_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN3, KEYIN3_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN4, KEYIN4_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT0, KEYOUT0_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT1, KEYOUT1_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT2, KEYOUT2_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT3, KEYOUT3_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT4_IN6, KEYOUT4_IN6_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT5_IN5, KEYOUT5_IN5_MARK), -}; - -static struct pinmux_cfg_reg pinmux_config_regs[] = { -	{ PINMUX_CFG_REG("PACR", 0xa4050100, 16, 2) { -		VIO_D7_SCIF1_SCK, PTA7_OUT, PTA7_IN_PD, PTA7_IN, -		VIO_D6_SCIF1_RXD, 0, PTA6_IN_PD, PTA6_IN, -		VIO_D5_SCIF1_TXD, PTA5_OUT, PTA5_IN_PD, PTA5_IN, -		VIO_D4, 0, PTA4_IN_PD, PTA4_IN, -		VIO_D3, 0, PTA3_IN_PD, PTA3_IN, -		VIO_D2, 0, PTA2_IN_PD, PTA2_IN, -		VIO_D1, 0, PTA1_IN_PD, PTA1_IN, -		VIO_D0_LCDLCLK, 0, PTA0_IN_PD, PTA0_IN } -	}, -	{ PINMUX_CFG_REG("PBCR", 0xa4050102, 16, 2) { -		HPD55, PTB7_OUT, 0, PTB7_IN, -		HPD54, PTB6_OUT, 0, PTB6_IN, -		HPD53, PTB5_OUT, 0, PTB5_IN, -		HPD52, PTB4_OUT, 0, PTB4_IN, -		HPD51, PTB3_OUT, 0, PTB3_IN, -		HPD50, PTB2_OUT, 0, PTB2_IN, -		HPD49, PTB1_OUT, 0, PTB1_IN, -		HPD48, PTB0_OUT, 0, PTB0_IN } -	}, -	{ PINMUX_CFG_REG("PCCR", 0xa4050104, 16, 2) { -		0, 0, PTC7_IN_PU, PTC7_IN, -		0, 0, 0, 0, -		IOIS16, 0, PTC5_IN_PU, PTC5_IN, -		HPDQM7, PTC4_OUT, 0, PTC4_IN, -		HPDQM6, PTC3_OUT, 0, PTC3_IN, -		HPDQM5, PTC2_OUT, 0, PTC2_IN, -		0, 0, 0, 0, -		HPDQM4, PTC0_OUT, 0, PTC0_IN } -	}, -	{ PINMUX_CFG_REG("PDCR", 0xa4050106, 16, 2) { -		SDHICD, 0, PTD7_IN_PU, PTD7_IN, -		SDHIWP, PTD6_OUT, PTD6_IN_PU, PTD6_IN, -		SDHID3, PTD5_OUT, PTD5_IN_PU, PTD5_IN, -		IRQ2_SDHID2, PTD4_OUT, PTD4_IN_PU, PTD4_IN, -		SDHID1, PTD3_OUT, PTD3_IN_PU, PTD3_IN, -		SDHID0, PTD2_OUT, PTD2_IN_PU, PTD2_IN, -		SDHICMD, PTD1_OUT, PTD1_IN_PU, PTD1_IN, -		SDHICLK, PTD0_OUT, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PECR", 0xa4050108, 16, 2) { -		A25, PTE7_OUT, PTE7_IN_PD, PTE7_IN, -		A24, PTE6_OUT, PTE6_IN_PD, PTE6_IN, -		A23, PTE5_OUT, PTE5_IN_PD, PTE5_IN, -		A22, PTE4_OUT, PTE4_IN_PD, PTE4_IN, -		0, 0, 0, 0, -		0, 0, 0, 0, -		IRQ5, PTE1_OUT, PTE1_IN_PD, PTE1_IN, -		IRQ4_BS, PTE0_OUT, PTE0_IN_PD, PTE0_IN } -	}, -	{ PINMUX_CFG_REG("PFCR", 0xa405010a, 16, 2) { -		0, 0, 0, 0, -		PTF6, PTF6_OUT, PTF6_IN_PD, PTF6_IN, -		SIOSCK_SIUBOBT, PTF5_OUT, PTF5_IN_PD, PTF5_IN, -		SIOSTRB1_SIUBOLR, PTF4_OUT, PTF4_IN_PD, PTF4_IN, -		SIOSTRB0_SIUBIBT, PTF3_OUT, PTF3_IN_PD, PTF3_IN, -		SIOD_SIUBILR, PTF2_OUT, PTF2_IN_PD, PTF2_IN, -		SIORXD_SIUBISLD, 0, PTF1_IN_PD, PTF1_IN, -		SIOTXD_SIUBOSLD, PTF0_OUT, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PGCR", 0xa405010c, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		AUDSYNC, PTG4_OUT, 0, 0, -		AUDATA3, PTG3_OUT, 0, 0, -		AUDATA2, PTG2_OUT, 0, 0, -		AUDATA1, PTG1_OUT, 0, 0, -		AUDATA0, PTG0_OUT, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PHCR", 0xa405010e, 16, 2) { -		LCDVCPWC_LCDVCPWC2, PTH7_OUT, 0, 0, -		LCDVSYN2_DACK, PTH6_OUT, PTH6_IN_PD, PTH6_IN, -		LCDVSYN, PTH5_OUT, PTH5_IN_PD, PTH5_IN, -		LCDDISP_LCDRS, PTH4_OUT, 0, 0, -		LCDHSYN_LCDCS, PTH3_OUT, 0, 0, -		LCDDON_LCDDON2, PTH2_OUT, 0, 0, -		LCDD17_DV_HSYNC, PTH1_OUT, PTH1_IN_PD, PTH1_IN, -		LCDD16_DV_VSYNC, PTH0_OUT, PTH0_IN_PD, PTH0_IN } -	}, -	{ PINMUX_CFG_REG("PJCR", 0xa4050110, 16, 2) { -		STATUS0, PTJ7_OUT, 0, 0, -		0, PTJ6_OUT, 0, 0, -		PDSTATUS, PTJ5_OUT, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		IRQ1, PTJ1_OUT, PTJ1_IN_PU, PTJ1_IN, -		IRQ0, PTJ0_OUT, PTJ0_IN_PU, PTJ0_IN } -	}, -	{ PINMUX_CFG_REG("PKCR", 0xa4050112, 16, 2) { -		0, 0, 0, 0, -		SIUAILR_SIOF1_SS2, PTK6_OUT, PTK6_IN_PD, PTK6_IN, -		SIUAIBT_SIOF1_SS1, PTK5_OUT, PTK5_IN_PD, PTK5_IN, -		SIUAOLR_SIOF1_SYNC, PTK4_OUT, PTK4_IN_PD, PTK4_IN, -		SIUAOBT_SIOF1_SCK, PTK3_OUT, PTK3_IN_PD, PTK3_IN, -		SIUAISLD_SIOF1_RXD, 0, PTK2_IN_PD, PTK2_IN, -		SIUAOSLD_SIOF1_TXD, PTK1_OUT, 0, 0, -		PTK0, PTK0_OUT, PTK0_IN_PD, PTK0_IN } -	}, -	{ PINMUX_CFG_REG("PLCR", 0xa4050114, 16, 2) { -		LCDD15_DV_D15, PTL7_OUT, PTL7_IN_PD, PTL7_IN, -		LCDD14_DV_D14, PTL6_OUT, PTL6_IN_PD, PTL6_IN, -		LCDD13_DV_D13, PTL5_OUT, PTL5_IN_PD, PTL5_IN, -		LCDD12_DV_D12, PTL4_OUT, PTL4_IN_PD, PTL4_IN, -		LCDD11_DV_D11, PTL3_OUT, PTL3_IN_PD, PTL3_IN, -		LCDD10_DV_D10, PTL2_OUT, PTL2_IN_PD, PTL2_IN, -		LCDD9_DV_D9, PTL1_OUT, PTL1_IN_PD, PTL1_IN, -		LCDD8_DV_D8, PTL0_OUT, PTL0_IN_PD, PTL0_IN } -	}, -	{ PINMUX_CFG_REG("PMCR", 0xa4050116, 16, 2) { -		LCDD7_DV_D7, PTM7_OUT, PTM7_IN_PD, PTM7_IN, -		LCDD6_DV_D6, PTM6_OUT, PTM6_IN_PD, PTM6_IN, -		LCDD5_DV_D5, PTM5_OUT, PTM5_IN_PD, PTM5_IN, -		LCDD4_DV_D4, PTM4_OUT, PTM4_IN_PD, PTM4_IN, -		LCDD3_DV_D3, PTM3_OUT, PTM3_IN_PD, PTM3_IN, -		LCDD2_DV_D2, PTM2_OUT, PTM2_IN_PD, PTM2_IN, -		LCDD1_DV_D1, PTM1_OUT, PTM1_IN_PD, PTM1_IN, -		LCDD0_DV_D0, PTM0_OUT, PTM0_IN_PD, PTM0_IN } -	}, -	{ PINMUX_CFG_REG("PNCR", 0xa4050118, 16, 2) { -		HPD63, PTN7_OUT, 0, PTN7_IN, -		HPD62, PTN6_OUT, 0, PTN6_IN, -		HPD61, PTN5_OUT, 0, PTN5_IN, -		HPD60, PTN4_OUT, 0, PTN4_IN, -		HPD59, PTN3_OUT, 0, PTN3_IN, -		HPD58, PTN2_OUT, 0, PTN2_IN, -		HPD57, PTN1_OUT, 0, PTN1_IN, -		HPD56, PTN0_OUT, 0, PTN0_IN } -	}, -	{ PINMUX_CFG_REG("PQCR", 0xa405011a, 16, 2) { -		0, 0, 0, 0, -		SIOF0_SS2_SIM_RST, PTQ6_OUT, 0, 0, -		SIOF0_SS1_TS_SPSYNC, PTQ5_OUT, PTQ5_IN_PD, PTQ5_IN, -		SIOF0_SYNC_TS_SDEN, PTQ4_OUT, PTQ4_IN_PD, PTQ4_IN, -		SIOF0_SCK_TS_SCK, PTQ3_OUT, PTQ3_IN_PD, PTQ3_IN, -		PTQ2, 0, PTQ2_IN_PD, PTQ2_IN, -		PTQ1, PTQ1_OUT, 0, 0, -		PTQ0, PTQ0_OUT, PTQ0_IN_PU, PTQ0_IN } -	}, -	{ PINMUX_CFG_REG("PRCR", 0xa405011c, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		LCDRD, PTR4_OUT, 0, 0, -		CS6B_CE1B_LCDCS2, PTR3_OUT, 0, 0, -		WAIT, 0, PTR2_IN_PU, PTR2_IN, -		LCDDCK_LCDWR, PTR1_OUT, 0, 0, -		LCDVEPWC_LCDVEPWC2, PTR0_OUT, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PSCR", 0xa405011e, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		SCIF0_CTS_SIUAISPD, 0, PTS4_IN_PD, PTS4_IN, -		SCIF0_RTS_SIUAOSPD, PTS3_OUT, 0, 0, -		SCIF0_SCK_TPUTO, PTS2_OUT, PTS2_IN_PD, PTS2_IN, -		SCIF0_RXD, 0, PTS1_IN_PD, PTS1_IN, -		SCIF0_TXD, PTS0_OUT, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PTCR", 0xa4050140, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		FOE_VIO_VD2, PTT4_OUT, PTT4_IN_PD, PTT4_IN, -		FWE, PTT3_OUT, PTT3_IN_PD, PTT3_IN, -		FSC, PTT2_OUT, PTT2_IN_PD, PTT2_IN, -		DREQ0, 0, PTT1_IN_PD, PTT1_IN, -		FCDE, PTT0_OUT, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PUCR", 0xa4050142, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		NAF2_VIO_D10, PTU4_OUT, PTU4_IN_PD, PTU4_IN, -		NAF1_VIO_D9, PTU3_OUT, PTU3_IN_PD, PTU3_IN, -		NAF0_VIO_D8, PTU2_OUT, PTU2_IN_PD, PTU2_IN, -		FRB_VIO_CLK2, 0, PTU1_IN_PD, PTU1_IN, -		FCE_VIO_HD2, PTU0_OUT, PTU0_IN_PD, PTU0_IN } -	}, -	{ PINMUX_CFG_REG("PVCR", 0xa4050144, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		NAF7_VIO_D15, PTV4_OUT, PTV4_IN_PD, PTV4_IN, -		NAF6_VIO_D14, PTV3_OUT, PTV3_IN_PD, PTV3_IN, -		NAF5_VIO_D13, PTV2_OUT, PTV2_IN_PD, PTV2_IN, -		NAF4_VIO_D12, PTV1_OUT, PTV1_IN_PD, PTV1_IN, -		NAF3_VIO_D11, PTV0_OUT, PTV0_IN_PD, PTV0_IN } -	}, -	{ PINMUX_CFG_REG("PWCR", 0xa4050146, 16, 2) { -		0, 0, 0, 0, -		VIO_FLD_SCIF2_CTS, 0, PTW6_IN_PD, PTW6_IN, -		VIO_CKO_SCIF2_RTS, PTW5_OUT, 0, 0, -		VIO_STEX_SCIF2_SCK, PTW4_OUT, PTW4_IN_PD, PTW4_IN, -		VIO_STEM_SCIF2_TXD, PTW3_OUT, PTW3_IN_PD, PTW3_IN, -		VIO_HD_SCIF2_RXD, PTW2_OUT, PTW2_IN_PD, PTW2_IN, -		VIO_VD_SCIF1_CTS, PTW1_OUT, PTW1_IN_PD, PTW1_IN, -		VIO_CLK_SCIF1_RTS, PTW0_OUT, PTW0_IN_PD, PTW0_IN } -	}, -	{ PINMUX_CFG_REG("PXCR", 0xa4050148, 16, 2) { -		0, 0, 0, 0, -		CS6A_CE2B, PTX6_OUT, PTX6_IN_PU, PTX6_IN, -		LCDD23, PTX5_OUT, PTX5_IN_PD, PTX5_IN, -		LCDD22, PTX4_OUT, PTX4_IN_PD, PTX4_IN, -		LCDD21, PTX3_OUT, PTX3_IN_PD, PTX3_IN, -		LCDD20, PTX2_OUT, PTX2_IN_PD, PTX2_IN, -		LCDD19_DV_CLKI, PTX1_OUT, PTX1_IN_PD, PTX1_IN, -		LCDD18_DV_CLK, PTX0_OUT, PTX0_IN_PD, PTX0_IN } +static struct resource sh7722_pfc_resources[] = { +	[0] = { +		.start	= 0xa4050100, +		.end	= 0xa405018f, +		.flags	= IORESOURCE_MEM,  	}, -	{ PINMUX_CFG_REG("PYCR", 0xa405014a, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		KEYOUT5_IN5, PTY5_OUT, PTY5_IN_PU, PTY5_IN, -		KEYOUT4_IN6, PTY4_OUT, PTY4_IN_PU, PTY4_IN, -		KEYOUT3, PTY3_OUT, PTY3_IN_PU, PTY3_IN, -		KEYOUT2, PTY2_OUT, PTY2_IN_PU, PTY2_IN, -		KEYOUT1, PTY1_OUT, 0, 0, -		KEYOUT0, PTY0_OUT, PTY0_IN_PU, PTY0_IN } -	}, -	{ PINMUX_CFG_REG("PZCR", 0xa405014c, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		KEYIN4_IRQ7, 0, PTZ5_IN_PU, PTZ5_IN, -		KEYIN3, 0, PTZ4_IN_PU, PTZ4_IN, -		KEYIN2, 0, PTZ3_IN_PU, PTZ3_IN, -		KEYIN1, 0, PTZ2_IN_PU, PTZ2_IN, -		KEYIN0_IRQ6, 0, PTZ1_IN_PU, PTZ1_IN, -		0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PSELA", 0xa405014e, 16, 1) { -		PSA15_KEYIN0, PSA15_IRQ6, -		PSA14_KEYIN4, PSA14_IRQ7, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PSA9_IRQ4, PSA9_BS, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PSA4_IRQ2, PSA4_SDHID2, -		0, 0, -		0, 0, -		0, 0, -		0, 0 } -	}, -	{ PINMUX_CFG_REG("PSELB", 0xa4050150, 16, 1) { -		PSB15_SIOTXD, PSB15_SIUBOSLD, -		PSB14_SIORXD, PSB14_SIUBISLD, -		PSB13_SIOD, PSB13_SIUBILR, -		PSB12_SIOSTRB0, PSB12_SIUBIBT, -		PSB11_SIOSTRB1, PSB11_SIUBOLR, -		PSB10_SIOSCK, PSB10_SIUBOBT, -		PSB9_SIOMCK, PSB9_SIUMCKB, -		PSB8_SIOF0_MCK, PSB8_IRQ3, -		PSB7_SIOF0_TXD, PSB7_IRDA_OUT, -		PSB6_SIOF0_RXD, PSB6_IRDA_IN, -		PSB5_SIOF0_SCK, PSB5_TS_SCK, -		PSB4_SIOF0_SYNC, PSB4_TS_SDEN, -		PSB3_SIOF0_SS1, PSB3_TS_SPSYNC, -		PSB2_SIOF0_SS2, PSB2_SIM_RST, -		PSB1_SIUMCKA, PSB1_SIOF1_MCK, -		PSB0_SIUAOSLD, PSB0_SIOF1_TXD } -	}, -	{ PINMUX_CFG_REG("PSELC", 0xa4050152, 16, 1) { -		PSC15_SIUAISLD, PSC15_SIOF1_RXD, -		PSC14_SIUAOBT, PSC14_SIOF1_SCK, -		PSC13_SIUAOLR, PSC13_SIOF1_SYNC, -		PSC12_SIUAIBT, PSC12_SIOF1_SS1, -		PSC11_SIUAILR, PSC11_SIOF1_SS2, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PSC0_NAF, PSC0_VIO } -	}, -	{ PINMUX_CFG_REG("PSELD", 0xa4050154, 16, 1) { -		0, 0, -		0, 0, -		PSD13_VIO, PSD13_SCIF2, -		PSD12_VIO, PSD12_SCIF1, -		PSD11_VIO, PSD11_SCIF1, -		PSD10_VIO_D0, PSD10_LCDLCLK, -		PSD9_SIOMCK_SIUMCKB, PSD9_SIUFCKB, -		PSD8_SCIF0_SCK, PSD8_TPUTO, -		PSD7_SCIF0_RTS, PSD7_SIUAOSPD, -		PSD6_SCIF0_CTS, PSD6_SIUAISPD, -		PSD5_CS6B_CE1B, PSD5_LCDCS2, -		0, 0, -		PSD3_LCDVEPWC_LCDVCPWC, PSD3_LCDVEPWC2_LCDVCPWC2, -		PSD2_LCDDON, PSD2_LCDDON2, -		0, 0, -		PSD0_LCDD19_LCDD0, PSD0_DV } -	}, -	{ PINMUX_CFG_REG("PSELE", 0xa4050156, 16, 1) { -		PSE15_SIOF0_MCK_IRQ3, PSE15_SIM_D, -		PSE14_SIOF0_TXD_IRDA_OUT, PSE14_SIM_CLK, -		PSE13_SIOF0_RXD_IRDA_IN, PSE13_TS_SDAT, -		PSE12_LCDVSYN2, PSE12_DACK, -		PSE11_SIUMCKA_SIOF1_MCK, PSE11_SIUFCKA, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PSE3_FLCTL, PSE3_VIO, -		PSE2_NAF2, PSE2_VIO_D10, -		PSE1_NAF1, PSE1_VIO_D9, -		PSE0_NAF0, PSE0_VIO_D8 } -	}, -	{ PINMUX_CFG_REG("HIZCRA", 0xa4050158, 16, 1) { -		0, 0, -		HIZA14_KEYSC, HIZA14_HIZ, -		0, 0, -		0, 0, -		0, 0, -		HIZA10_NAF, HIZA10_HIZ, -		HIZA9_VIO, HIZA9_HIZ, -		HIZA8_LCDC, HIZA8_HIZ, -		HIZA7_LCDC, HIZA7_HIZ, -		HIZA6_LCDC, HIZA6_HIZ, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0 } -	}, -	{ PINMUX_CFG_REG("HIZCRB", 0xa405015a, 16, 1) { -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		HIZB4_SIUA, HIZB4_HIZ, -		0, 0, -		0, 0, -		HIZB1_VIO, HIZB1_HIZ, -		HIZB0_VIO, HIZB0_HIZ } -	}, -	{ PINMUX_CFG_REG("HIZCRC", 0xa405015c, 16, 1) { -		HIZC15_IRQ7, HIZC15_HIZ, -		HIZC14_IRQ6, HIZC14_HIZ, -		HIZC13_IRQ5, HIZC13_HIZ, -		HIZC12_IRQ4, HIZC12_HIZ, -		HIZC11_IRQ3, HIZC11_HIZ, -		HIZC10_IRQ2, HIZC10_HIZ, -		HIZC9_IRQ1, HIZC9_HIZ, -		HIZC8_IRQ0, HIZC8_HIZ, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0 } -	}, -	{ PINMUX_CFG_REG("MSELCRB", 0xa4050182, 16, 1) { -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		MSELB9_VIO, MSELB9_VIO2, -		MSELB8_RGB, MSELB8_SYS, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0 } -	}, -	{} -}; - -static struct pinmux_data_reg pinmux_data_regs[] = { -	{ PINMUX_DATA_REG("PADR", 0xa4050120, 8) { -		PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -		PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA } -	}, -	{ PINMUX_DATA_REG("PBDR", 0xa4050122, 8) { -		PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -		PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA } -	}, -	{ PINMUX_DATA_REG("PCDR", 0xa4050124, 8) { -		PTC7_DATA, 0, PTC5_DATA, PTC4_DATA, -		PTC3_DATA, PTC2_DATA, 0, PTC0_DATA } -	}, -	{ PINMUX_DATA_REG("PDDR", 0xa4050126, 8) { -		PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -		PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA } -	}, -	{ PINMUX_DATA_REG("PEDR", 0xa4050128, 8) { -		PTE7_DATA, PTE6_DATA, PTE5_DATA, PTE4_DATA, -		0, 0, PTE1_DATA, PTE0_DATA } -	}, -	{ PINMUX_DATA_REG("PFDR", 0xa405012a, 8) { -		0, PTF6_DATA, PTF5_DATA, PTF4_DATA, -		PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA } -	}, -	{ PINMUX_DATA_REG("PGDR", 0xa405012c, 8) { -		0, 0, 0, PTG4_DATA, -		PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA } -	}, -	{ PINMUX_DATA_REG("PHDR", 0xa405012e, 8) { -		PTH7_DATA, PTH6_DATA, PTH5_DATA, PTH4_DATA, -		PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA } -	}, -	{ PINMUX_DATA_REG("PJDR", 0xa4050130, 8) { -		PTJ7_DATA, PTJ6_DATA, PTJ5_DATA, 0, -		0, 0, PTJ1_DATA, PTJ0_DATA } -	}, -	{ PINMUX_DATA_REG("PKDR", 0xa4050132, 8) { -		0, PTK6_DATA, PTK5_DATA, PTK4_DATA, -		PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA } -	}, -	{ PINMUX_DATA_REG("PLDR", 0xa4050134, 8) { -		PTL7_DATA, PTL6_DATA, PTL5_DATA, PTL4_DATA, -		PTL3_DATA, PTL2_DATA, PTL1_DATA, PTL0_DATA } -	}, -	{ PINMUX_DATA_REG("PMDR", 0xa4050136, 8) { -		PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -		PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA } -	}, -	{ PINMUX_DATA_REG("PNDR", 0xa4050138, 8) { -		PTN7_DATA, PTN6_DATA, PTN5_DATA, PTN4_DATA, -		PTN3_DATA, PTN2_DATA, PTN1_DATA, PTN0_DATA } -	}, -	{ PINMUX_DATA_REG("PQDR", 0xa405013a, 8) { -		0, PTQ6_DATA, PTQ5_DATA, PTQ4_DATA, -		PTQ3_DATA, PTQ2_DATA, PTQ1_DATA, PTQ0_DATA } -	}, -	{ PINMUX_DATA_REG("PRDR", 0xa405013c, 8) { -		0, 0, 0, PTR4_DATA, -		PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA } -	}, -	{ PINMUX_DATA_REG("PSDR", 0xa405013e, 8) { -		0, 0, 0, PTS4_DATA, -		PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA } -	}, -	{ PINMUX_DATA_REG("PTDR", 0xa4050160, 8) { -		0, 0, 0, PTT4_DATA, -		PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA } -	}, -	{ PINMUX_DATA_REG("PUDR", 0xa4050162, 8) { -		0, 0, 0, PTU4_DATA, -		PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA } -	}, -	{ PINMUX_DATA_REG("PVDR", 0xa4050164, 8) { -		0, 0, 0, PTV4_DATA, -		PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA } -	}, -	{ PINMUX_DATA_REG("PWDR", 0xa4050166, 8) { -		0, PTW6_DATA, PTW5_DATA, PTW4_DATA, -		PTW3_DATA, PTW2_DATA, PTW1_DATA, PTW0_DATA } -	}, -	{ PINMUX_DATA_REG("PXDR", 0xa4050168, 8) { -		0, PTX6_DATA, PTX5_DATA, PTX4_DATA, -		PTX3_DATA, PTX2_DATA, PTX1_DATA, PTX0_DATA } -	}, -	{ PINMUX_DATA_REG("PYDR", 0xa405016a, 8) { -		0, PTY6_DATA, PTY5_DATA, PTY4_DATA, -		PTY3_DATA, PTY2_DATA, PTY1_DATA, PTY0_DATA } -	}, -	{ PINMUX_DATA_REG("PZDR", 0xa405016c, 8) { -		0, 0, PTZ5_DATA, PTZ4_DATA, -		PTZ3_DATA, PTZ2_DATA, PTZ1_DATA, PTZ0_DATA } -	}, -	{ }, -}; - -static struct pinmux_info sh7722_pinmux_info = { -	.name = "sh7722_pfc", -	.reserved_id = PINMUX_RESERVED, -	.data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, -	.input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, -	.input_pd = { PINMUX_INPUT_PULLDOWN_BEGIN, PINMUX_INPUT_PULLDOWN_END }, -	.input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, -	.output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, -	.mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, -	.function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, - -	.first_gpio = GPIO_PTA7, -	.last_gpio = GPIO_FN_KEYOUT5_IN5, - -	.gpios = pinmux_gpios, -	.cfg_regs = pinmux_config_regs, -	.data_regs = pinmux_data_regs, - -	.gpio_data = pinmux_data, -	.gpio_data_size = ARRAY_SIZE(pinmux_data),  };  static int __init plat_pinmux_setup(void)  { -	return register_pinmux(&sh7722_pinmux_info); +	return sh_pfc_register("pfc-sh7722", sh7722_pfc_resources, +			       ARRAY_SIZE(sh7722_pfc_resources));  } -  arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh4a/pinmux-sh7723.c b/arch/sh/kernel/cpu/sh4a/pinmux-sh7723.c index 88bf5ecda84..99c637d5bf7 100644 --- a/arch/sh/kernel/cpu/sh4a/pinmux-sh7723.c +++ b/arch/sh/kernel/cpu/sh4a/pinmux-sh7723.c @@ -8,1902 +8,23 @@   * for more details.   */ +#include <linux/bug.h>  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/gpio.h> -#include <cpu/sh7723.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> -enum { -	PINMUX_RESERVED = 0, - -	PINMUX_DATA_BEGIN, -	PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -	PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA, -	PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -	PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA, -	PTC7_DATA, PTC6_DATA, PTC5_DATA, PTC4_DATA, -	PTC3_DATA, PTC2_DATA, PTC1_DATA, PTC0_DATA, -	PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -	PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA, -	PTE5_DATA, PTE4_DATA, PTE3_DATA, PTE2_DATA, PTE1_DATA, PTE0_DATA, -	PTF7_DATA, PTF6_DATA, PTF5_DATA, PTF4_DATA, -	PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA, -	PTG5_DATA, PTG4_DATA, PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA, -	PTH7_DATA, PTH6_DATA, PTH5_DATA, PTH4_DATA, -	PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA, -	PTJ7_DATA, PTJ5_DATA, PTJ3_DATA, PTJ2_DATA, PTJ1_DATA, PTJ0_DATA, -	PTK7_DATA, PTK6_DATA, PTK5_DATA, PTK4_DATA, -	PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA, -	PTL7_DATA, PTL6_DATA, PTL5_DATA, PTL4_DATA, -	PTL3_DATA, PTL2_DATA, PTL1_DATA, PTL0_DATA, -	PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -	PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA, -	PTN7_DATA, PTN6_DATA, PTN5_DATA, PTN4_DATA, -	PTN3_DATA, PTN2_DATA, PTN1_DATA, PTN0_DATA, -	PTQ3_DATA, PTQ2_DATA, PTQ1_DATA, PTQ0_DATA, -	PTR7_DATA, PTR6_DATA, PTR5_DATA, PTR4_DATA, -	PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA, -	PTS7_DATA, PTS6_DATA, PTS5_DATA, PTS4_DATA, -	PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA, -	PTT5_DATA, PTT4_DATA, PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA, -	PTU5_DATA, PTU4_DATA, PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA, -	PTV7_DATA, PTV6_DATA, PTV5_DATA, PTV4_DATA, -	PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA, -	PTW7_DATA, PTW6_DATA, PTW5_DATA, PTW4_DATA, -	PTW3_DATA, PTW2_DATA, PTW1_DATA, PTW0_DATA, -	PTX7_DATA, PTX6_DATA, PTX5_DATA, PTX4_DATA, -	PTX3_DATA, PTX2_DATA, PTX1_DATA, PTX0_DATA, -	PTY7_DATA, PTY6_DATA, PTY5_DATA, PTY4_DATA, -	PTY3_DATA, PTY2_DATA, PTY1_DATA, PTY0_DATA, -	PTZ7_DATA, PTZ6_DATA, PTZ5_DATA, PTZ4_DATA, -	PTZ3_DATA, PTZ2_DATA, PTZ1_DATA, PTZ0_DATA, -	PINMUX_DATA_END, - -	PINMUX_INPUT_BEGIN, -	PTA7_IN, PTA6_IN, PTA5_IN, PTA4_IN, -	PTA3_IN, PTA2_IN, PTA1_IN, PTA0_IN, -	PTB7_IN, PTB6_IN, PTB5_IN, PTB4_IN, -	PTB3_IN, PTB2_IN, PTB1_IN, PTB0_IN, -	PTC7_IN, PTC6_IN, PTC5_IN, PTC4_IN, -	PTC3_IN, PTC2_IN, PTC1_IN, PTC0_IN, -	PTD7_IN, PTD6_IN, PTD5_IN, PTD4_IN, -	PTD3_IN, PTD2_IN, PTD1_IN, PTD0_IN, -	PTE5_IN, PTE4_IN, PTE3_IN, PTE2_IN, PTE1_IN, PTE0_IN, -	PTF7_IN, PTF6_IN, PTF5_IN, PTF4_IN, -	PTF3_IN, PTF2_IN, PTF1_IN, PTF0_IN, -	PTH7_IN, PTH6_IN, PTH5_IN, PTH4_IN, -	PTH3_IN, PTH2_IN, PTH1_IN, PTH0_IN, -	PTJ3_IN, PTJ2_IN, PTJ1_IN, PTJ0_IN, -	PTK7_IN, PTK6_IN, PTK5_IN, PTK4_IN, -	PTK3_IN, PTK2_IN, PTK1_IN, PTK0_IN, -	PTL7_IN, PTL6_IN, PTL5_IN, PTL4_IN, -	PTL3_IN, PTL2_IN, PTL1_IN, PTL0_IN, -	PTM7_IN, PTM6_IN, PTM5_IN, PTM4_IN, -	PTM3_IN, PTM2_IN, PTM1_IN, PTM0_IN, -	PTN7_IN, PTN6_IN, PTN5_IN, PTN4_IN, -	PTN3_IN, PTN2_IN, PTN1_IN, PTN0_IN, -	PTQ3_IN, PTQ2_IN, PTQ1_IN, PTQ0_IN, -	PTR7_IN, PTR6_IN, PTR5_IN, PTR4_IN, -	PTR3_IN, PTR2_IN, PTR1_IN, PTR0_IN, -	PTS7_IN, PTS6_IN, PTS5_IN, PTS4_IN, -	PTS3_IN, PTS2_IN, PTS1_IN, PTS0_IN, -	PTT5_IN, PTT4_IN, PTT3_IN, PTT2_IN, PTT1_IN, PTT0_IN, -	PTU5_IN, PTU4_IN, PTU3_IN, PTU2_IN, PTU1_IN, PTU0_IN, -	PTV7_IN, PTV6_IN, PTV5_IN, PTV4_IN, -	PTV3_IN, PTV2_IN, PTV1_IN, PTV0_IN, -	PTW7_IN, PTW6_IN, PTW5_IN, PTW4_IN, -	PTW3_IN, PTW2_IN, PTW1_IN, PTW0_IN, -	PTX7_IN, PTX6_IN, PTX5_IN, PTX4_IN, -	PTX3_IN, PTX2_IN, PTX1_IN, PTX0_IN, -	PTY7_IN, PTY6_IN, PTY5_IN, PTY4_IN, -	PTY3_IN, PTY2_IN, PTY1_IN, PTY0_IN, -	PTZ7_IN, PTZ6_IN, PTZ5_IN, PTZ4_IN, -	PTZ3_IN, PTZ2_IN, PTZ1_IN, PTZ0_IN, -	PINMUX_INPUT_END, - -	PINMUX_INPUT_PULLUP_BEGIN, -	PTA4_IN_PU, PTA3_IN_PU, PTA2_IN_PU, PTA1_IN_PU, PTA0_IN_PU, -	PTB2_IN_PU, PTB1_IN_PU, -	PTR2_IN_PU, -	PINMUX_INPUT_PULLUP_END, - -	PINMUX_OUTPUT_BEGIN, -	PTA7_OUT, PTA6_OUT, PTA5_OUT, PTA4_OUT, -	PTA3_OUT, PTA2_OUT, PTA1_OUT, PTA0_OUT, -	PTB7_OUT, PTB6_OUT, PTB5_OUT, PTB4_OUT, -	PTB3_OUT, PTB2_OUT, PTB1_OUT, PTB0_OUT, -	PTC7_OUT, PTC6_OUT, PTC5_OUT, PTC4_OUT, -	PTC3_OUT, PTC2_OUT, PTC1_OUT, PTC0_OUT, -	PTD7_OUT, PTD6_OUT, PTD5_OUT, PTD4_OUT, -	PTD3_OUT, PTD2_OUT, PTD1_OUT, PTD0_OUT, -	PTE5_OUT, PTE4_OUT, PTE3_OUT, PTE2_OUT, PTE1_OUT, PTE0_OUT, -	PTF7_OUT, PTF6_OUT, PTF5_OUT, PTF4_OUT, -	PTF3_OUT, PTF2_OUT, PTF1_OUT, PTF0_OUT, -	PTG5_OUT, PTG4_OUT, PTG3_OUT, PTG2_OUT, PTG1_OUT, PTG0_OUT, -	PTH7_OUT, PTH6_OUT, PTH5_OUT, PTH4_OUT, -	PTH3_OUT, PTH2_OUT, PTH1_OUT, PTH0_OUT, -	PTJ7_OUT, PTJ5_OUT, PTJ3_OUT, PTJ2_OUT, PTJ1_OUT, PTJ0_OUT, -	PTK7_OUT, PTK6_OUT, PTK5_OUT, PTK4_OUT, -	PTK3_OUT, PTK2_OUT, PTK1_OUT, PTK0_OUT, -	PTL7_OUT, PTL6_OUT, PTL5_OUT, PTL4_OUT, -	PTL3_OUT, PTL2_OUT, PTL1_OUT, PTL0_OUT, -	PTM7_OUT, PTM6_OUT, PTM5_OUT, PTM4_OUT, -	PTM3_OUT, PTM2_OUT, PTM1_OUT, PTM0_OUT, -	PTN7_OUT, PTN6_OUT, PTN5_OUT, PTN4_OUT, -	PTN3_OUT, PTN2_OUT, PTN1_OUT, PTN0_OUT, -	PTR7_OUT, PTR6_OUT, PTR5_OUT, PTR4_OUT, -	PTR1_OUT, PTR0_OUT, -	PTS7_OUT, PTS6_OUT, PTS5_OUT, PTS4_OUT, -	PTS3_OUT, PTS2_OUT, PTS1_OUT, PTS0_OUT, -	PTT5_OUT, PTT4_OUT, PTT3_OUT, PTT2_OUT, PTT1_OUT, PTT0_OUT, -	PTU5_OUT, PTU4_OUT, PTU3_OUT, PTU2_OUT, PTU1_OUT, PTU0_OUT, -	PTV7_OUT, PTV6_OUT, PTV5_OUT, PTV4_OUT, -	PTV3_OUT, PTV2_OUT, PTV1_OUT, PTV0_OUT, -	PTW7_OUT, PTW6_OUT, PTW5_OUT, PTW4_OUT, -	PTW3_OUT, PTW2_OUT, PTW1_OUT, PTW0_OUT, -	PTX7_OUT, PTX6_OUT, PTX5_OUT, PTX4_OUT, -	PTX3_OUT, PTX2_OUT, PTX1_OUT, PTX0_OUT, -	PTY7_OUT, PTY6_OUT, PTY5_OUT, PTY4_OUT, -	PTY3_OUT, PTY2_OUT, PTY1_OUT, PTY0_OUT, -	PTZ7_OUT, PTZ6_OUT, PTZ5_OUT, PTZ4_OUT, -	PTZ3_OUT, PTZ2_OUT, PTZ1_OUT, PTZ0_OUT, -	PINMUX_OUTPUT_END, - -	PINMUX_FUNCTION_BEGIN, -	PTA7_FN, PTA6_FN, PTA5_FN, PTA4_FN, -	PTA3_FN, PTA2_FN, PTA1_FN, PTA0_FN, -	PTB7_FN, PTB6_FN, PTB5_FN, PTB4_FN, -	PTB3_FN, PTB2_FN, PTB1_FN, PTB0_FN, -	PTC7_FN, PTC6_FN, PTC5_FN, PTC4_FN, -	PTC3_FN, PTC2_FN, PTC1_FN, PTC0_FN, -	PTD7_FN, PTD6_FN, PTD5_FN, PTD4_FN, -	PTD3_FN, PTD2_FN, PTD1_FN, PTD0_FN, -	PTE5_FN, PTE4_FN, PTE3_FN, PTE2_FN, PTE1_FN, PTE0_FN, -	PTF7_FN, PTF6_FN, PTF5_FN, PTF4_FN, -	PTF3_FN, PTF2_FN, PTF1_FN, PTF0_FN, -	PTG5_FN, PTG4_FN, PTG3_FN, PTG2_FN, PTG1_FN, PTG0_FN, -	PTH7_FN, PTH6_FN, PTH5_FN, PTH4_FN, -	PTH3_FN, PTH2_FN, PTH1_FN, PTH0_FN, -	PTJ7_FN, PTJ5_FN, PTJ3_FN, PTJ2_FN, PTJ1_FN, PTJ0_FN, -	PTK7_FN, PTK6_FN, PTK5_FN, PTK4_FN, -	PTK3_FN, PTK2_FN, PTK1_FN, PTK0_FN, -	PTL7_FN, PTL6_FN, PTL5_FN, PTL4_FN, -	PTL3_FN, PTL2_FN, PTL1_FN, PTL0_FN, -	PTM7_FN, PTM6_FN, PTM5_FN, PTM4_FN, -	PTM3_FN, PTM2_FN, PTM1_FN, PTM0_FN, -	PTN7_FN, PTN6_FN, PTN5_FN, PTN4_FN, -	PTN3_FN, PTN2_FN, PTN1_FN, PTN0_FN, -	PTQ3_FN, PTQ2_FN, PTQ1_FN, PTQ0_FN, -	PTR7_FN, PTR6_FN, PTR5_FN, PTR4_FN, -	PTR3_FN, PTR2_FN, PTR1_FN, PTR0_FN, -	PTS7_FN, PTS6_FN, PTS5_FN, PTS4_FN, -	PTS3_FN, PTS2_FN, PTS1_FN, PTS0_FN, -	PTT5_FN, PTT4_FN, PTT3_FN, PTT2_FN, PTT1_FN, PTT0_FN, -	PTU5_FN, PTU4_FN, PTU3_FN, PTU2_FN, PTU1_FN, PTU0_FN, -	PTV7_FN, PTV6_FN, PTV5_FN, PTV4_FN, -	PTV3_FN, PTV2_FN, PTV1_FN, PTV0_FN, -	PTW7_FN, PTW6_FN, PTW5_FN, PTW4_FN, -	PTW3_FN, PTW2_FN, PTW1_FN, PTW0_FN, -	PTX7_FN, PTX6_FN, PTX5_FN, PTX4_FN, -	PTX3_FN, PTX2_FN, PTX1_FN, PTX0_FN, -	PTY7_FN, PTY6_FN, PTY5_FN, PTY4_FN, -	PTY3_FN, PTY2_FN, PTY1_FN, PTY0_FN, -	PTZ7_FN, PTZ6_FN, PTZ5_FN, PTZ4_FN, -	PTZ3_FN, PTZ2_FN, PTZ1_FN, PTZ0_FN, - - -	PSA15_PSA14_FN1, PSA15_PSA14_FN2, -	PSA13_PSA12_FN1, PSA13_PSA12_FN2, -	PSA11_PSA10_FN1, PSA11_PSA10_FN2, -	PSA5_PSA4_FN1, PSA5_PSA4_FN2, PSA5_PSA4_FN3, -	PSA3_PSA2_FN1, PSA3_PSA2_FN2, -	PSB15_PSB14_FN1, PSB15_PSB14_FN2, -	PSB13_PSB12_LCDC_RGB, PSB13_PSB12_LCDC_SYS, -	PSB9_PSB8_FN1, PSB9_PSB8_FN2, PSB9_PSB8_FN3, -	PSB7_PSB6_FN1, PSB7_PSB6_FN2, -	PSB5_PSB4_FN1, PSB5_PSB4_FN2, -	PSB3_PSB2_FN1, PSB3_PSB2_FN2, -	PSC15_PSC14_FN1, PSC15_PSC14_FN2, -	PSC13_PSC12_FN1, PSC13_PSC12_FN2, -	PSC11_PSC10_FN1, PSC11_PSC10_FN2, PSC11_PSC10_FN3, -	PSC9_PSC8_FN1, PSC9_PSC8_FN2, -	PSC7_PSC6_FN1, PSC7_PSC6_FN2, PSC7_PSC6_FN3, -	PSD15_PSD14_FN1, PSD15_PSD14_FN2, -	PSD13_PSD12_FN1, PSD13_PSD12_FN2, -	PSD11_PSD10_FN1, PSD11_PSD10_FN2, PSD11_PSD10_FN3, -	PSD9_PSD8_FN1, PSD9_PSD8_FN2, -	PSD7_PSD6_FN1, PSD7_PSD6_FN2, -	PSD5_PSD4_FN1, PSD5_PSD4_FN2, -	PSD3_PSD2_FN1, PSD3_PSD2_FN2, -	PSD1_PSD0_FN1, PSD1_PSD0_FN2, -	PINMUX_FUNCTION_END, - -	PINMUX_MARK_BEGIN, -	SCIF0_PTT_TXD_MARK, SCIF0_PTT_RXD_MARK, -	SCIF0_PTT_SCK_MARK, SCIF0_PTU_TXD_MARK, -	SCIF0_PTU_RXD_MARK, SCIF0_PTU_SCK_MARK, - -	SCIF1_PTS_TXD_MARK, SCIF1_PTS_RXD_MARK, -	SCIF1_PTS_SCK_MARK, SCIF1_PTV_TXD_MARK, -	SCIF1_PTV_RXD_MARK, SCIF1_PTV_SCK_MARK, - -	SCIF2_PTT_TXD_MARK, SCIF2_PTT_RXD_MARK, -	SCIF2_PTT_SCK_MARK, SCIF2_PTU_TXD_MARK, -	SCIF2_PTU_RXD_MARK, SCIF2_PTU_SCK_MARK, - -	SCIF3_PTS_TXD_MARK, SCIF3_PTS_RXD_MARK, -	SCIF3_PTS_SCK_MARK, SCIF3_PTS_RTS_MARK, -	SCIF3_PTS_CTS_MARK, SCIF3_PTV_TXD_MARK, -	SCIF3_PTV_RXD_MARK, SCIF3_PTV_SCK_MARK, -	SCIF3_PTV_RTS_MARK, SCIF3_PTV_CTS_MARK, - -	SCIF4_PTE_TXD_MARK, SCIF4_PTE_RXD_MARK, -	SCIF4_PTE_SCK_MARK, SCIF4_PTN_TXD_MARK, -	SCIF4_PTN_RXD_MARK, SCIF4_PTN_SCK_MARK, - -	SCIF5_PTE_TXD_MARK, SCIF5_PTE_RXD_MARK, -	SCIF5_PTE_SCK_MARK, SCIF5_PTN_TXD_MARK, -	SCIF5_PTN_RXD_MARK, SCIF5_PTN_SCK_MARK, - -	VIO_D15_MARK, VIO_D14_MARK, VIO_D13_MARK, VIO_D12_MARK, -	VIO_D11_MARK, VIO_D10_MARK, VIO_D9_MARK, VIO_D8_MARK, -	VIO_D7_MARK, VIO_D6_MARK, VIO_D5_MARK, VIO_D4_MARK, -	VIO_D3_MARK, VIO_D2_MARK, VIO_D1_MARK, VIO_D0_MARK, -	VIO_FLD_MARK, VIO_CKO_MARK, -	VIO_VD1_MARK, VIO_HD1_MARK, VIO_CLK1_MARK, -	VIO_HD2_MARK, VIO_VD2_MARK, VIO_CLK2_MARK, - -	LCDD23_MARK, LCDD22_MARK, LCDD21_MARK, LCDD20_MARK, -	LCDD19_MARK, LCDD18_MARK, LCDD17_MARK, LCDD16_MARK, -	LCDD15_MARK, LCDD14_MARK, LCDD13_MARK, LCDD12_MARK, -	LCDD11_MARK, LCDD10_MARK, LCDD9_MARK, LCDD8_MARK, -	LCDD7_MARK, LCDD6_MARK, LCDD5_MARK, LCDD4_MARK, -	LCDD3_MARK, LCDD2_MARK, LCDD1_MARK, LCDD0_MARK, -	LCDDON_MARK, LCDVCPWC_MARK, LCDVEPWC_MARK, -	LCDVSYN_MARK, LCDDCK_MARK, LCDHSYN_MARK, LCDDISP_MARK, -	LCDRS_MARK, LCDCS_MARK, LCDWR_MARK, LCDRD_MARK, -	LCDLCLK_PTR_MARK, LCDLCLK_PTW_MARK, - -	IRQ0_MARK, IRQ1_MARK, IRQ2_MARK, IRQ3_MARK, -	IRQ4_MARK, IRQ5_MARK, IRQ6_MARK, IRQ7_MARK, - -	AUDATA3_MARK, AUDATA2_MARK, AUDATA1_MARK, AUDATA0_MARK, -	AUDCK_MARK, AUDSYNC_MARK, - -	SDHI0CD_PTD_MARK, SDHI0WP_PTD_MARK, -	SDHI0D3_PTD_MARK, SDHI0D2_PTD_MARK, -	SDHI0D1_PTD_MARK, SDHI0D0_PTD_MARK, -	SDHI0CMD_PTD_MARK, SDHI0CLK_PTD_MARK, - -	SDHI0CD_PTS_MARK, SDHI0WP_PTS_MARK, -	SDHI0D3_PTS_MARK, SDHI0D2_PTS_MARK, -	SDHI0D1_PTS_MARK, SDHI0D0_PTS_MARK, -	SDHI0CMD_PTS_MARK, SDHI0CLK_PTS_MARK, - -	SDHI1CD_MARK, SDHI1WP_MARK, SDHI1D3_MARK, SDHI1D2_MARK, -	SDHI1D1_MARK, SDHI1D0_MARK, SDHI1CMD_MARK, SDHI1CLK_MARK, - -	SIUAFCK_MARK, SIUAILR_MARK, SIUAIBT_MARK, SIUAISLD_MARK, -	SIUAOLR_MARK, SIUAOBT_MARK, SIUAOSLD_MARK, SIUAMCK_MARK, -	SIUAISPD_MARK, SIUAOSPD_MARK, - -	SIUBFCK_MARK, SIUBILR_MARK, SIUBIBT_MARK, SIUBISLD_MARK, -	SIUBOLR_MARK, SIUBOBT_MARK, SIUBOSLD_MARK, SIUBMCK_MARK, - -	IRDA_IN_MARK, IRDA_OUT_MARK, - -	DV_CLKI_MARK, DV_CLK_MARK, DV_HSYNC_MARK, DV_VSYNC_MARK, -	DV_D15_MARK, DV_D14_MARK, DV_D13_MARK, DV_D12_MARK, -	DV_D11_MARK, DV_D10_MARK, DV_D9_MARK, DV_D8_MARK, -	DV_D7_MARK, DV_D6_MARK, DV_D5_MARK, DV_D4_MARK, -	DV_D3_MARK, DV_D2_MARK, DV_D1_MARK, DV_D0_MARK, - -	KEYIN0_MARK, KEYIN1_MARK, KEYIN2_MARK, KEYIN3_MARK, KEYIN4_MARK, -	KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK, -	KEYOUT4_IN6_MARK, KEYOUT5_IN5_MARK, - -	MSIOF0_PTF_TXD_MARK, MSIOF0_PTF_RXD_MARK, MSIOF0_PTF_MCK_MARK, -	MSIOF0_PTF_TSYNC_MARK, MSIOF0_PTF_TSCK_MARK, MSIOF0_PTF_RSYNC_MARK, -	MSIOF0_PTF_RSCK_MARK, MSIOF0_PTF_SS1_MARK, MSIOF0_PTF_SS2_MARK, - -	MSIOF0_PTT_TXD_MARK, MSIOF0_PTT_RXD_MARK, MSIOF0_PTX_MCK_MARK, -	MSIOF0_PTT_TSYNC_MARK, MSIOF0_PTT_TSCK_MARK, MSIOF0_PTT_RSYNC_MARK, -	MSIOF0_PTT_RSCK_MARK, MSIOF0_PTT_SS1_MARK, MSIOF0_PTT_SS2_MARK, - -	MSIOF1_TXD_MARK, MSIOF1_RXD_MARK, MSIOF1_MCK_MARK, -	MSIOF1_TSYNC_MARK, MSIOF1_TSCK_MARK, MSIOF1_RSYNC_MARK, -	MSIOF1_RSCK_MARK, MSIOF1_SS1_MARK, MSIOF1_SS2_MARK, - -	TS0_SDAT_MARK, TS0_SCK_MARK, TS0_SDEN_MARK, TS0_SPSYNC_MARK, - -	FCE_MARK, NAF7_MARK, NAF6_MARK, NAF5_MARK, NAF4_MARK, -	NAF3_MARK, NAF2_MARK, NAF1_MARK, NAF0_MARK, FCDE_MARK, -	FOE_MARK, FSC_MARK, FWE_MARK, FRB_MARK, - -	DACK1_MARK, DREQ1_MARK, DACK0_MARK, DREQ0_MARK, - -	AN3_MARK, AN2_MARK, AN1_MARK, AN0_MARK, ADTRG_MARK, - -	STATUS0_MARK, PDSTATUS_MARK, - -	TPUTO3_MARK, TPUTO2_MARK, TPUTO1_MARK, TPUTO0_MARK, - -	D31_MARK, D30_MARK, D29_MARK, D28_MARK, -	D27_MARK, D26_MARK, D25_MARK, D24_MARK, -	D23_MARK, D22_MARK, D21_MARK, D20_MARK, -	D19_MARK, D18_MARK, D17_MARK, D16_MARK, -	IOIS16_MARK, WAIT_MARK, BS_MARK, -	A25_MARK, A24_MARK, A23_MARK, A22_MARK, -	CS6B_CE1B_MARK, CS6A_CE2B_MARK, -	CS5B_CE1A_MARK, CS5A_CE2A_MARK, -	WE3_ICIOWR_MARK, WE2_ICIORD_MARK, - -	IDED15_MARK, IDED14_MARK, IDED13_MARK, IDED12_MARK, -	IDED11_MARK, IDED10_MARK, IDED9_MARK, IDED8_MARK, -	IDED7_MARK, IDED6_MARK, IDED5_MARK, IDED4_MARK, -	IDED3_MARK, IDED2_MARK, IDED1_MARK, IDED0_MARK, -	DIRECTION_MARK, EXBUF_ENB_MARK, IDERST_MARK, IODACK_MARK, -	IODREQ_MARK, IDEIORDY_MARK, IDEINT_MARK, IDEIOWR_MARK, -	IDEIORD_MARK, IDECS1_MARK, IDECS0_MARK, IDEA2_MARK, -	IDEA1_MARK, IDEA0_MARK, -	PINMUX_MARK_END, -}; - -static pinmux_enum_t pinmux_data[] = { -	/* PTA GPIO */ -	PINMUX_DATA(PTA7_DATA, PTA7_IN, PTA7_OUT), -	PINMUX_DATA(PTA6_DATA, PTA6_IN, PTA6_OUT), -	PINMUX_DATA(PTA5_DATA, PTA5_IN, PTA5_OUT), -	PINMUX_DATA(PTA4_DATA, PTA4_IN, PTA4_OUT, PTA4_IN_PU), -	PINMUX_DATA(PTA3_DATA, PTA3_IN, PTA3_OUT, PTA3_IN_PU), -	PINMUX_DATA(PTA2_DATA, PTA2_IN, PTA2_OUT, PTA2_IN_PU), -	PINMUX_DATA(PTA1_DATA, PTA1_IN, PTA1_OUT, PTA1_IN_PU), -	PINMUX_DATA(PTA0_DATA, PTA0_IN, PTA0_OUT, PTA0_IN_PU), - -	/* PTB GPIO */ -	PINMUX_DATA(PTB7_DATA, PTB7_IN, PTB7_OUT), -	PINMUX_DATA(PTB6_DATA, PTB6_IN, PTB6_OUT), -	PINMUX_DATA(PTB5_DATA, PTB5_IN, PTB5_OUT), -	PINMUX_DATA(PTB4_DATA, PTB4_IN, PTB4_OUT), -	PINMUX_DATA(PTB3_DATA, PTB3_IN, PTB3_OUT), -	PINMUX_DATA(PTB2_DATA, PTB2_IN, PTB2_OUT, PTB2_IN_PU), -	PINMUX_DATA(PTB1_DATA, PTB1_IN, PTB1_OUT, PTB1_IN_PU), -	PINMUX_DATA(PTB0_DATA, PTB0_IN, PTB0_OUT), - -	/* PTC GPIO */ -	PINMUX_DATA(PTC7_DATA, PTC7_IN, PTC7_OUT), -	PINMUX_DATA(PTC6_DATA, PTC6_IN, PTC6_OUT), -	PINMUX_DATA(PTC5_DATA, PTC5_IN, PTC5_OUT), -	PINMUX_DATA(PTC4_DATA, PTC4_IN, PTC4_OUT), -	PINMUX_DATA(PTC3_DATA, PTC3_IN, PTC3_OUT), -	PINMUX_DATA(PTC2_DATA, PTC2_IN, PTC2_OUT), -	PINMUX_DATA(PTC1_DATA, PTC1_IN, PTC1_OUT), -	PINMUX_DATA(PTC0_DATA, PTC0_IN, PTC0_OUT), - -	/* PTD GPIO */ -	PINMUX_DATA(PTD7_DATA, PTD7_IN, PTD7_OUT), -	PINMUX_DATA(PTD6_DATA, PTD6_IN, PTD6_OUT), -	PINMUX_DATA(PTD5_DATA, PTD5_IN, PTD5_OUT), -	PINMUX_DATA(PTD4_DATA, PTD4_IN, PTD4_OUT), -	PINMUX_DATA(PTD3_DATA, PTD3_IN, PTD3_OUT), -	PINMUX_DATA(PTD2_DATA, PTD2_IN, PTD2_OUT), -	PINMUX_DATA(PTD1_DATA, PTD1_IN, PTD1_OUT), -	PINMUX_DATA(PTD0_DATA, PTD0_IN, PTD0_OUT), - -	/* PTE GPIO */ -	PINMUX_DATA(PTE5_DATA, PTE5_IN, PTE5_OUT), -	PINMUX_DATA(PTE4_DATA, PTE4_IN, PTE4_OUT), -	PINMUX_DATA(PTE3_DATA, PTE3_IN, PTE3_OUT), -	PINMUX_DATA(PTE2_DATA, PTE2_IN, PTE2_OUT), -	PINMUX_DATA(PTE1_DATA, PTE1_IN, PTE1_OUT), -	PINMUX_DATA(PTE0_DATA, PTE0_IN, PTE0_OUT), - -	/* PTF GPIO */ -	PINMUX_DATA(PTF7_DATA, PTF7_IN, PTF7_OUT), -	PINMUX_DATA(PTF6_DATA, PTF6_IN, PTF6_OUT), -	PINMUX_DATA(PTF5_DATA, PTF5_IN, PTF5_OUT), -	PINMUX_DATA(PTF4_DATA, PTF4_IN, PTF4_OUT), -	PINMUX_DATA(PTF3_DATA, PTF3_IN, PTF3_OUT), -	PINMUX_DATA(PTF2_DATA, PTF2_IN, PTF2_OUT), -	PINMUX_DATA(PTF1_DATA, PTF1_IN, PTF1_OUT), -	PINMUX_DATA(PTF0_DATA, PTF0_IN, PTF0_OUT), - -	/* PTG GPIO */ -	PINMUX_DATA(PTG5_DATA, PTG5_OUT), -	PINMUX_DATA(PTG4_DATA, PTG4_OUT), -	PINMUX_DATA(PTG3_DATA, PTG3_OUT), -	PINMUX_DATA(PTG2_DATA, PTG2_OUT), -	PINMUX_DATA(PTG1_DATA, PTG1_OUT), -	PINMUX_DATA(PTG0_DATA, PTG0_OUT), - -	/* PTH GPIO */ -	PINMUX_DATA(PTH7_DATA, PTH7_IN, PTH7_OUT), -	PINMUX_DATA(PTH6_DATA, PTH6_IN, PTH6_OUT), -	PINMUX_DATA(PTH5_DATA, PTH5_IN, PTH5_OUT), -	PINMUX_DATA(PTH4_DATA, PTH4_IN, PTH4_OUT), -	PINMUX_DATA(PTH3_DATA, PTH3_IN, PTH3_OUT), -	PINMUX_DATA(PTH2_DATA, PTH2_IN, PTH2_OUT), -	PINMUX_DATA(PTH1_DATA, PTH1_IN, PTH1_OUT), -	PINMUX_DATA(PTH0_DATA, PTH0_IN, PTH0_OUT), - -	/* PTJ GPIO */ -	PINMUX_DATA(PTJ7_DATA, PTJ7_OUT), -	PINMUX_DATA(PTJ5_DATA, PTJ5_OUT), -	PINMUX_DATA(PTJ3_DATA, PTJ3_IN, PTJ3_OUT), -	PINMUX_DATA(PTJ2_DATA, PTJ2_IN, PTJ2_OUT), -	PINMUX_DATA(PTJ1_DATA, PTJ1_IN, PTJ1_OUT), -	PINMUX_DATA(PTJ0_DATA, PTJ0_IN, PTJ0_OUT), - -	/* PTK GPIO */ -	PINMUX_DATA(PTK7_DATA, PTK7_IN, PTK7_OUT), -	PINMUX_DATA(PTK6_DATA, PTK6_IN, PTK6_OUT), -	PINMUX_DATA(PTK5_DATA, PTK5_IN, PTK5_OUT), -	PINMUX_DATA(PTK4_DATA, PTK4_IN, PTK4_OUT), -	PINMUX_DATA(PTK3_DATA, PTK3_IN, PTK3_OUT), -	PINMUX_DATA(PTK2_DATA, PTK2_IN, PTK2_OUT), -	PINMUX_DATA(PTK1_DATA, PTK1_IN, PTK1_OUT), -	PINMUX_DATA(PTK0_DATA, PTK0_IN, PTK0_OUT), - -	/* PTL GPIO */ -	PINMUX_DATA(PTL7_DATA, PTL7_IN, PTL7_OUT), -	PINMUX_DATA(PTL6_DATA, PTL6_IN, PTL6_OUT), -	PINMUX_DATA(PTL5_DATA, PTL5_IN, PTL5_OUT), -	PINMUX_DATA(PTL4_DATA, PTL4_IN, PTL4_OUT), -	PINMUX_DATA(PTL3_DATA, PTL3_IN, PTL3_OUT), -	PINMUX_DATA(PTL2_DATA, PTL2_IN, PTL2_OUT), -	PINMUX_DATA(PTL1_DATA, PTL1_IN, PTL1_OUT), -	PINMUX_DATA(PTL0_DATA, PTL0_IN, PTL0_OUT), - -	/* PTM GPIO */ -	PINMUX_DATA(PTM7_DATA, PTM7_IN, PTM7_OUT), -	PINMUX_DATA(PTM6_DATA, PTM6_IN, PTM6_OUT), -	PINMUX_DATA(PTM5_DATA, PTM5_IN, PTM5_OUT), -	PINMUX_DATA(PTM4_DATA, PTM4_IN, PTM4_OUT), -	PINMUX_DATA(PTM3_DATA, PTM3_IN, PTM3_OUT), -	PINMUX_DATA(PTM2_DATA, PTM2_IN, PTM2_OUT), -	PINMUX_DATA(PTM1_DATA, PTM1_IN, PTM1_OUT), -	PINMUX_DATA(PTM0_DATA, PTM0_IN, PTM0_OUT), - -	/* PTN GPIO */ -	PINMUX_DATA(PTN7_DATA, PTN7_IN, PTN7_OUT), -	PINMUX_DATA(PTN6_DATA, PTN6_IN, PTN6_OUT), -	PINMUX_DATA(PTN5_DATA, PTN5_IN, PTN5_OUT), -	PINMUX_DATA(PTN4_DATA, PTN4_IN, PTN4_OUT), -	PINMUX_DATA(PTN3_DATA, PTN3_IN, PTN3_OUT), -	PINMUX_DATA(PTN2_DATA, PTN2_IN, PTN2_OUT), -	PINMUX_DATA(PTN1_DATA, PTN1_IN, PTN1_OUT), -	PINMUX_DATA(PTN0_DATA, PTN0_IN, PTN0_OUT), - -	/* PTQ GPIO */ -	PINMUX_DATA(PTQ3_DATA, PTQ3_IN), -	PINMUX_DATA(PTQ2_DATA, PTQ2_IN), -	PINMUX_DATA(PTQ1_DATA, PTQ1_IN), -	PINMUX_DATA(PTQ0_DATA, PTQ0_IN), - -	/* PTR GPIO */ -	PINMUX_DATA(PTR7_DATA, PTR7_IN, PTR7_OUT), -	PINMUX_DATA(PTR6_DATA, PTR6_IN, PTR6_OUT), -	PINMUX_DATA(PTR5_DATA, PTR5_IN, PTR5_OUT), -	PINMUX_DATA(PTR4_DATA, PTR4_IN, PTR4_OUT), -	PINMUX_DATA(PTR3_DATA, PTR3_IN), -	PINMUX_DATA(PTR2_DATA, PTR2_IN, PTR2_IN_PU), -	PINMUX_DATA(PTR1_DATA, PTR1_IN, PTR1_OUT), -	PINMUX_DATA(PTR0_DATA, PTR0_IN, PTR0_OUT), - -	/* PTS GPIO */ -	PINMUX_DATA(PTS7_DATA, PTS7_IN, PTS7_OUT), -	PINMUX_DATA(PTS6_DATA, PTS6_IN, PTS6_OUT), -	PINMUX_DATA(PTS5_DATA, PTS5_IN, PTS5_OUT), -	PINMUX_DATA(PTS4_DATA, PTS4_IN, PTS4_OUT), -	PINMUX_DATA(PTS3_DATA, PTS3_IN, PTS3_OUT), -	PINMUX_DATA(PTS2_DATA, PTS2_IN, PTS2_OUT), -	PINMUX_DATA(PTS1_DATA, PTS1_IN, PTS1_OUT), -	PINMUX_DATA(PTS0_DATA, PTS0_IN, PTS0_OUT), - -	/* PTT GPIO */ -	PINMUX_DATA(PTT5_DATA, PTT5_IN, PTT5_OUT), -	PINMUX_DATA(PTT4_DATA, PTT4_IN, PTT4_OUT), -	PINMUX_DATA(PTT3_DATA, PTT3_IN, PTT3_OUT), -	PINMUX_DATA(PTT2_DATA, PTT2_IN, PTT2_OUT), -	PINMUX_DATA(PTT1_DATA, PTT1_IN, PTT1_OUT), -	PINMUX_DATA(PTT0_DATA, PTT0_IN, PTT0_OUT), - -	/* PTU GPIO */ -	PINMUX_DATA(PTU5_DATA, PTU5_IN, PTU5_OUT), -	PINMUX_DATA(PTU4_DATA, PTU4_IN, PTU4_OUT), -	PINMUX_DATA(PTU3_DATA, PTU3_IN, PTU3_OUT), -	PINMUX_DATA(PTU2_DATA, PTU2_IN, PTU2_OUT), -	PINMUX_DATA(PTU1_DATA, PTU1_IN, PTU1_OUT), -	PINMUX_DATA(PTU0_DATA, PTU0_IN, PTU0_OUT), - -	/* PTV GPIO */ -	PINMUX_DATA(PTV7_DATA, PTV7_IN, PTV7_OUT), -	PINMUX_DATA(PTV6_DATA, PTV6_IN, PTV6_OUT), -	PINMUX_DATA(PTV5_DATA, PTV5_IN, PTV5_OUT), -	PINMUX_DATA(PTV4_DATA, PTV4_IN, PTV4_OUT), -	PINMUX_DATA(PTV3_DATA, PTV3_IN, PTV3_OUT), -	PINMUX_DATA(PTV2_DATA, PTV2_IN, PTV2_OUT), -	PINMUX_DATA(PTV1_DATA, PTV1_IN, PTV1_OUT), -	PINMUX_DATA(PTV0_DATA, PTV0_IN, PTV0_OUT), - -	/* PTW GPIO */ -	PINMUX_DATA(PTW7_DATA, PTW7_IN, PTW7_OUT), -	PINMUX_DATA(PTW6_DATA, PTW6_IN, PTW6_OUT), -	PINMUX_DATA(PTW5_DATA, PTW5_IN, PTW5_OUT), -	PINMUX_DATA(PTW4_DATA, PTW4_IN, PTW4_OUT), -	PINMUX_DATA(PTW3_DATA, PTW3_IN, PTW3_OUT), -	PINMUX_DATA(PTW2_DATA, PTW2_IN, PTW2_OUT), -	PINMUX_DATA(PTW1_DATA, PTW1_IN, PTW1_OUT), -	PINMUX_DATA(PTW0_DATA, PTW0_IN, PTW0_OUT), - -	/* PTX GPIO */ -	PINMUX_DATA(PTX7_DATA, PTX7_IN, PTX7_OUT), -	PINMUX_DATA(PTX6_DATA, PTX6_IN, PTX6_OUT), -	PINMUX_DATA(PTX5_DATA, PTX5_IN, PTX5_OUT), -	PINMUX_DATA(PTX4_DATA, PTX4_IN, PTX4_OUT), -	PINMUX_DATA(PTX3_DATA, PTX3_IN, PTX3_OUT), -	PINMUX_DATA(PTX2_DATA, PTX2_IN, PTX2_OUT), -	PINMUX_DATA(PTX1_DATA, PTX1_IN, PTX1_OUT), -	PINMUX_DATA(PTX0_DATA, PTX0_IN, PTX0_OUT), - -	/* PTY GPIO */ -	PINMUX_DATA(PTY7_DATA, PTY7_IN, PTY7_OUT), -	PINMUX_DATA(PTY6_DATA, PTY6_IN, PTY6_OUT), -	PINMUX_DATA(PTY5_DATA, PTY5_IN, PTY5_OUT), -	PINMUX_DATA(PTY4_DATA, PTY4_IN, PTY4_OUT), -	PINMUX_DATA(PTY3_DATA, PTY3_IN, PTY3_OUT), -	PINMUX_DATA(PTY2_DATA, PTY2_IN, PTY2_OUT), -	PINMUX_DATA(PTY1_DATA, PTY1_IN, PTY1_OUT), -	PINMUX_DATA(PTY0_DATA, PTY0_IN, PTY0_OUT), - -	/* PTZ GPIO */ -	PINMUX_DATA(PTZ7_DATA, PTZ7_IN, PTZ7_OUT), -	PINMUX_DATA(PTZ6_DATA, PTZ6_IN, PTZ6_OUT), -	PINMUX_DATA(PTZ5_DATA, PTZ5_IN, PTZ5_OUT), -	PINMUX_DATA(PTZ4_DATA, PTZ4_IN, PTZ4_OUT), -	PINMUX_DATA(PTZ3_DATA, PTZ3_IN, PTZ3_OUT), -	PINMUX_DATA(PTZ2_DATA, PTZ2_IN, PTZ2_OUT), -	PINMUX_DATA(PTZ1_DATA, PTZ1_IN, PTZ1_OUT), -	PINMUX_DATA(PTZ0_DATA, PTZ0_IN, PTZ0_OUT), - -	/* PTA FN */ -	PINMUX_DATA(D23_MARK, PSA15_PSA14_FN1, PTA7_FN), -	PINMUX_DATA(KEYOUT2_MARK, PSA15_PSA14_FN2, PTA7_FN), -	PINMUX_DATA(D22_MARK, PSA15_PSA14_FN1, PTA6_FN), -	PINMUX_DATA(KEYOUT1_MARK, PSA15_PSA14_FN2, PTA6_FN), -	PINMUX_DATA(D21_MARK, PSA15_PSA14_FN1, PTA5_FN), -	PINMUX_DATA(KEYOUT0_MARK, PSA15_PSA14_FN2, PTA5_FN), -	PINMUX_DATA(D20_MARK, PSA15_PSA14_FN1, PTA4_FN), -	PINMUX_DATA(KEYIN4_MARK, PSA15_PSA14_FN2, PTA4_FN), -	PINMUX_DATA(D19_MARK, PSA15_PSA14_FN1, PTA3_FN), -	PINMUX_DATA(KEYIN3_MARK, PSA15_PSA14_FN2, PTA3_FN), -	PINMUX_DATA(D18_MARK, PSA15_PSA14_FN1, PTA2_FN), -	PINMUX_DATA(KEYIN2_MARK, PSA15_PSA14_FN2, PTA2_FN), -	PINMUX_DATA(D17_MARK, PSA15_PSA14_FN1, PTA1_FN), -	PINMUX_DATA(KEYIN1_MARK, PSA15_PSA14_FN2, PTA1_FN), -	PINMUX_DATA(D16_MARK, PSA15_PSA14_FN1, PTA0_FN), -	PINMUX_DATA(KEYIN0_MARK, PSA15_PSA14_FN2, PTA0_FN), - -	/* PTB FN */ -	PINMUX_DATA(D31_MARK, PTB7_FN), -	PINMUX_DATA(D30_MARK, PTB6_FN), -	PINMUX_DATA(D29_MARK, PTB5_FN), -	PINMUX_DATA(D28_MARK, PTB4_FN), -	PINMUX_DATA(D27_MARK, PTB3_FN), -	PINMUX_DATA(D26_MARK, PSA15_PSA14_FN1, PTB2_FN), -	PINMUX_DATA(KEYOUT5_IN5_MARK, PSA15_PSA14_FN2, PTB2_FN), -	PINMUX_DATA(D25_MARK, PSA15_PSA14_FN1, PTB1_FN), -	PINMUX_DATA(KEYOUT4_IN6_MARK, PSA15_PSA14_FN2, PTB1_FN), -	PINMUX_DATA(D24_MARK, PSA15_PSA14_FN1, PTB0_FN), -	PINMUX_DATA(KEYOUT3_MARK, PSA15_PSA14_FN2, PTB0_FN), - -	/* PTC FN */ -	PINMUX_DATA(IDED15_MARK, PSA11_PSA10_FN1, PTC7_FN), -	PINMUX_DATA(SDHI1CD_MARK, PSA11_PSA10_FN2, PTC7_FN), -	PINMUX_DATA(IDED14_MARK, PSA11_PSA10_FN1, PTC6_FN), -	PINMUX_DATA(SDHI1WP_MARK, PSA11_PSA10_FN2, PTC6_FN), -	PINMUX_DATA(IDED13_MARK, PSA11_PSA10_FN1, PTC5_FN), -	PINMUX_DATA(SDHI1D3_MARK, PSA11_PSA10_FN2, PTC5_FN), -	PINMUX_DATA(IDED12_MARK, PSA11_PSA10_FN1, PTC4_FN), -	PINMUX_DATA(SDHI1D2_MARK, PSA11_PSA10_FN2, PTC4_FN), -	PINMUX_DATA(IDED11_MARK, PSA11_PSA10_FN1, PTC3_FN), -	PINMUX_DATA(SDHI1D1_MARK, PSA11_PSA10_FN2, PTC3_FN), -	PINMUX_DATA(IDED10_MARK, PSA11_PSA10_FN1, PTC2_FN), -	PINMUX_DATA(SDHI1D0_MARK, PSA11_PSA10_FN2, PTC2_FN), -	PINMUX_DATA(IDED9_MARK, PSA11_PSA10_FN1, PTC1_FN), -	PINMUX_DATA(SDHI1CMD_MARK, PSA11_PSA10_FN2, PTC1_FN), -	PINMUX_DATA(IDED8_MARK, PSA11_PSA10_FN1, PTC0_FN), -	PINMUX_DATA(SDHI1CLK_MARK, PSA11_PSA10_FN2, PTC0_FN), - -	/* PTD FN */ -	PINMUX_DATA(IDED7_MARK, PSA11_PSA10_FN1, PTD7_FN), -	PINMUX_DATA(SDHI0CD_PTD_MARK, PSA11_PSA10_FN2, PTD7_FN), -	PINMUX_DATA(IDED6_MARK, PSA11_PSA10_FN1, PTD6_FN), -	PINMUX_DATA(SDHI0WP_PTD_MARK, PSA11_PSA10_FN2, PTD6_FN), -	PINMUX_DATA(IDED5_MARK, PSA11_PSA10_FN1, PTD5_FN), -	PINMUX_DATA(SDHI0D3_PTD_MARK, PSA11_PSA10_FN2, PTD5_FN), -	PINMUX_DATA(IDED4_MARK, PSA11_PSA10_FN1, PTD4_FN), -	PINMUX_DATA(SDHI0D2_PTD_MARK, PSA11_PSA10_FN2, PTD4_FN), -	PINMUX_DATA(IDED3_MARK, PSA11_PSA10_FN1, PTD3_FN), -	PINMUX_DATA(SDHI0D1_PTD_MARK, PSA11_PSA10_FN2, PTD3_FN), -	PINMUX_DATA(IDED2_MARK, PSA11_PSA10_FN1, PTD2_FN), -	PINMUX_DATA(SDHI0D0_PTD_MARK, PSA11_PSA10_FN2, PTD2_FN), -	PINMUX_DATA(IDED1_MARK, PSA11_PSA10_FN1, PTD1_FN), -	PINMUX_DATA(SDHI0CMD_PTD_MARK, PSA11_PSA10_FN2, PTD1_FN), -	PINMUX_DATA(IDED0_MARK, PSA11_PSA10_FN1, PTD0_FN), -	PINMUX_DATA(SDHI0CLK_PTD_MARK, PSA11_PSA10_FN2, PTD0_FN), - -	/* PTE FN */ -	PINMUX_DATA(DIRECTION_MARK, PSA11_PSA10_FN1, PTE5_FN), -	PINMUX_DATA(SCIF5_PTE_SCK_MARK, PSA11_PSA10_FN2, PTE5_FN), -	PINMUX_DATA(EXBUF_ENB_MARK, PSA11_PSA10_FN1, PTE4_FN), -	PINMUX_DATA(SCIF5_PTE_RXD_MARK, PSA11_PSA10_FN2, PTE4_FN), -	PINMUX_DATA(IDERST_MARK, PSA11_PSA10_FN1, PTE3_FN), -	PINMUX_DATA(SCIF5_PTE_TXD_MARK, PSA11_PSA10_FN2, PTE3_FN), -	PINMUX_DATA(IODACK_MARK, PSA11_PSA10_FN1, PTE2_FN), -	PINMUX_DATA(SCIF4_PTE_SCK_MARK, PSA11_PSA10_FN2, PTE2_FN), -	PINMUX_DATA(IODREQ_MARK, PSA11_PSA10_FN1, PTE1_FN), -	PINMUX_DATA(SCIF4_PTE_RXD_MARK, PSA11_PSA10_FN2, PTE1_FN), -	PINMUX_DATA(IDEIORDY_MARK, PSA11_PSA10_FN1, PTE0_FN), -	PINMUX_DATA(SCIF4_PTE_TXD_MARK, PSA11_PSA10_FN2, PTE0_FN), - -	/* PTF FN */ -	PINMUX_DATA(IDEINT_MARK, PTF7_FN), -	PINMUX_DATA(IDEIOWR_MARK, PSA5_PSA4_FN1, PTF6_FN), -	PINMUX_DATA(MSIOF0_PTF_SS2_MARK, PSA5_PSA4_FN2, PTF6_FN), -	PINMUX_DATA(MSIOF0_PTF_RSYNC_MARK, PSA5_PSA4_FN3, PTF6_FN), -	PINMUX_DATA(IDEIORD_MARK, PSA5_PSA4_FN1, PTF5_FN), -	PINMUX_DATA(MSIOF0_PTF_SS1_MARK, PSA5_PSA4_FN2, PTF5_FN), -	PINMUX_DATA(MSIOF0_PTF_RSCK_MARK, PSA5_PSA4_FN3, PTF5_FN), -	PINMUX_DATA(IDECS1_MARK, PSA11_PSA10_FN1, PTF4_FN), -	PINMUX_DATA(MSIOF0_PTF_TSYNC_MARK, PSA11_PSA10_FN2, PTF4_FN), -	PINMUX_DATA(IDECS0_MARK, PSA11_PSA10_FN1, PTF3_FN), -	PINMUX_DATA(MSIOF0_PTF_TSCK_MARK, PSA11_PSA10_FN2, PTF3_FN), -	PINMUX_DATA(IDEA2_MARK, PSA11_PSA10_FN1, PTF2_FN), -	PINMUX_DATA(MSIOF0_PTF_RXD_MARK, PSA11_PSA10_FN2, PTF2_FN), -	PINMUX_DATA(IDEA1_MARK, PSA11_PSA10_FN1, PTF1_FN), -	PINMUX_DATA(MSIOF0_PTF_TXD_MARK, PSA11_PSA10_FN2, PTF1_FN), -	PINMUX_DATA(IDEA0_MARK, PSA11_PSA10_FN1, PTF0_FN), -	PINMUX_DATA(MSIOF0_PTF_MCK_MARK, PSA11_PSA10_FN2, PTF0_FN), - -	/* PTG FN */ -	PINMUX_DATA(AUDCK_MARK, PTG5_FN), -	PINMUX_DATA(AUDSYNC_MARK, PTG4_FN), -	PINMUX_DATA(AUDATA3_MARK, PSA3_PSA2_FN1, PTG3_FN), -	PINMUX_DATA(TPUTO3_MARK, PSA3_PSA2_FN2, PTG3_FN), -	PINMUX_DATA(AUDATA2_MARK, PSA3_PSA2_FN1, PTG2_FN), -	PINMUX_DATA(TPUTO2_MARK, PSA3_PSA2_FN2, PTG2_FN), -	PINMUX_DATA(AUDATA1_MARK, PSA3_PSA2_FN1, PTG1_FN), -	PINMUX_DATA(TPUTO1_MARK, PSA3_PSA2_FN2, PTG1_FN), -	PINMUX_DATA(AUDATA0_MARK, PSA3_PSA2_FN1, PTG0_FN), -	PINMUX_DATA(TPUTO0_MARK, PSA3_PSA2_FN2, PTG0_FN), - -	/* PTG FN */ -	PINMUX_DATA(LCDVCPWC_MARK, PTH7_FN), -	PINMUX_DATA(LCDRD_MARK, PSB15_PSB14_FN1, PTH6_FN), -	PINMUX_DATA(DV_CLKI_MARK, PSB15_PSB14_FN2, PTH6_FN), -	PINMUX_DATA(LCDVSYN_MARK, PSB15_PSB14_FN1, PTH5_FN), -	PINMUX_DATA(DV_CLK_MARK, PSB15_PSB14_FN2, PTH5_FN), -	PINMUX_DATA(LCDDISP_MARK, PSB13_PSB12_LCDC_RGB, PTH4_FN), -	PINMUX_DATA(LCDRS_MARK, PSB13_PSB12_LCDC_SYS, PTH4_FN), -	PINMUX_DATA(LCDHSYN_MARK, PSB13_PSB12_LCDC_RGB, PTH3_FN), -	PINMUX_DATA(LCDCS_MARK, PSB13_PSB12_LCDC_SYS, PTH3_FN), -	PINMUX_DATA(LCDDON_MARK, PTH2_FN), -	PINMUX_DATA(LCDDCK_MARK, PSB13_PSB12_LCDC_RGB, PTH1_FN), -	PINMUX_DATA(LCDWR_MARK, PSB13_PSB12_LCDC_SYS, PTH1_FN), -	PINMUX_DATA(LCDVEPWC_MARK, PTH0_FN), - -	/* PTJ FN */ -	PINMUX_DATA(STATUS0_MARK, PTJ7_FN), -	PINMUX_DATA(PDSTATUS_MARK, PTJ5_FN), -	PINMUX_DATA(A25_MARK, PTJ3_FN), -	PINMUX_DATA(A24_MARK, PTJ2_FN), -	PINMUX_DATA(A23_MARK, PTJ1_FN), -	PINMUX_DATA(A22_MARK, PTJ0_FN), - -	/* PTK FN */ -	PINMUX_DATA(SIUAFCK_MARK, PTK7_FN), -	PINMUX_DATA(SIUAILR_MARK, PSB9_PSB8_FN1, PTK6_FN), -	PINMUX_DATA(MSIOF1_SS2_MARK, PSB9_PSB8_FN2, PTK6_FN), -	PINMUX_DATA(MSIOF1_RSYNC_MARK, PSB9_PSB8_FN3, PTK6_FN), -	PINMUX_DATA(SIUAIBT_MARK, PSB9_PSB8_FN1, PTK5_FN), -	PINMUX_DATA(MSIOF1_SS1_MARK, PSB9_PSB8_FN2, PTK5_FN), -	PINMUX_DATA(MSIOF1_RSCK_MARK, PSB9_PSB8_FN3, PTK5_FN), -	PINMUX_DATA(SIUAISLD_MARK, PSB7_PSB6_FN1, PTK4_FN), -	PINMUX_DATA(MSIOF1_RXD_MARK, PSB7_PSB6_FN2, PTK4_FN), -	PINMUX_DATA(SIUAOLR_MARK, PSB7_PSB6_FN1, PTK3_FN), -	PINMUX_DATA(MSIOF1_TSYNC_MARK, PSB7_PSB6_FN2, PTK3_FN), -	PINMUX_DATA(SIUAOBT_MARK, PSB7_PSB6_FN1, PTK2_FN), -	PINMUX_DATA(MSIOF1_TSCK_MARK, PSB7_PSB6_FN2, PTK2_FN), -	PINMUX_DATA(SIUAOSLD_MARK, PSB7_PSB6_FN1, PTK1_FN), -	PINMUX_DATA(MSIOF1_RXD_MARK, PSB7_PSB6_FN2, PTK1_FN), -	PINMUX_DATA(SIUAMCK_MARK, PSB7_PSB6_FN1, PTK0_FN), -	PINMUX_DATA(MSIOF1_MCK_MARK, PSB7_PSB6_FN2, PTK0_FN), - -	/* PTL FN */ -	PINMUX_DATA(LCDD15_MARK, PSB5_PSB4_FN1, PTL7_FN), -	PINMUX_DATA(DV_D15_MARK, PSB5_PSB4_FN2, PTL7_FN), -	PINMUX_DATA(LCDD14_MARK, PSB5_PSB4_FN1, PTL6_FN), -	PINMUX_DATA(DV_D14_MARK, PSB5_PSB4_FN2, PTL6_FN), -	PINMUX_DATA(LCDD13_MARK, PSB5_PSB4_FN1, PTL5_FN), -	PINMUX_DATA(DV_D13_MARK, PSB5_PSB4_FN2, PTL5_FN), -	PINMUX_DATA(LCDD12_MARK, PSB5_PSB4_FN1, PTL4_FN), -	PINMUX_DATA(DV_D12_MARK, PSB5_PSB4_FN2, PTL4_FN), -	PINMUX_DATA(LCDD11_MARK, PSB5_PSB4_FN1, PTL3_FN), -	PINMUX_DATA(DV_D11_MARK, PSB5_PSB4_FN2, PTL3_FN), -	PINMUX_DATA(LCDD10_MARK, PSB5_PSB4_FN1, PTL2_FN), -	PINMUX_DATA(DV_D10_MARK, PSB5_PSB4_FN2, PTL2_FN), -	PINMUX_DATA(LCDD9_MARK, PSB5_PSB4_FN1, PTL1_FN), -	PINMUX_DATA(DV_D9_MARK, PSB5_PSB4_FN2, PTL1_FN), -	PINMUX_DATA(LCDD8_MARK, PSB5_PSB4_FN1, PTL0_FN), -	PINMUX_DATA(DV_D8_MARK, PSB5_PSB4_FN2, PTL0_FN), - -	/* PTM FN */ -	PINMUX_DATA(LCDD7_MARK, PSB5_PSB4_FN1, PTM7_FN), -	PINMUX_DATA(DV_D7_MARK, PSB5_PSB4_FN2, PTM7_FN), -	PINMUX_DATA(LCDD6_MARK, PSB5_PSB4_FN1, PTM6_FN), -	PINMUX_DATA(DV_D6_MARK, PSB5_PSB4_FN2, PTM6_FN), -	PINMUX_DATA(LCDD5_MARK, PSB5_PSB4_FN1, PTM5_FN), -	PINMUX_DATA(DV_D5_MARK, PSB5_PSB4_FN2, PTM5_FN), -	PINMUX_DATA(LCDD4_MARK, PSB5_PSB4_FN1, PTM4_FN), -	PINMUX_DATA(DV_D4_MARK, PSB5_PSB4_FN2, PTM4_FN), -	PINMUX_DATA(LCDD3_MARK, PSB5_PSB4_FN1, PTM3_FN), -	PINMUX_DATA(DV_D3_MARK, PSB5_PSB4_FN2, PTM3_FN), -	PINMUX_DATA(LCDD2_MARK, PSB5_PSB4_FN1, PTM2_FN), -	PINMUX_DATA(DV_D2_MARK, PSB5_PSB4_FN2, PTM2_FN), -	PINMUX_DATA(LCDD1_MARK, PSB5_PSB4_FN1, PTM1_FN), -	PINMUX_DATA(DV_D1_MARK, PSB5_PSB4_FN2, PTM1_FN), -	PINMUX_DATA(LCDD0_MARK, PSB5_PSB4_FN1, PTM0_FN), -	PINMUX_DATA(DV_D0_MARK, PSB5_PSB4_FN2, PTM0_FN), - -	/* PTN FN */ -	PINMUX_DATA(LCDD23_MARK, PSB3_PSB2_FN1, PTN7_FN), -	PINMUX_DATA(SCIF5_PTN_SCK_MARK, PSB3_PSB2_FN2, PTN7_FN), -	PINMUX_DATA(LCDD22_MARK, PSB3_PSB2_FN1, PTN6_FN), -	PINMUX_DATA(SCIF5_PTN_RXD_MARK, PSB3_PSB2_FN2, PTN6_FN), -	PINMUX_DATA(LCDD21_MARK, PSB3_PSB2_FN1, PTN5_FN), -	PINMUX_DATA(SCIF5_PTN_TXD_MARK, PSB3_PSB2_FN2, PTN5_FN), -	PINMUX_DATA(LCDD20_MARK, PSB3_PSB2_FN1, PTN4_FN), -	PINMUX_DATA(SCIF4_PTN_SCK_MARK, PSB3_PSB2_FN2, PTN4_FN), -	PINMUX_DATA(LCDD19_MARK, PSB3_PSB2_FN1, PTN3_FN), -	PINMUX_DATA(SCIF4_PTN_RXD_MARK, PSB3_PSB2_FN2, PTN3_FN), -	PINMUX_DATA(LCDD18_MARK, PSB3_PSB2_FN1, PTN2_FN), -	PINMUX_DATA(SCIF4_PTN_TXD_MARK, PSB3_PSB2_FN2, PTN2_FN), -	PINMUX_DATA(LCDD17_MARK, PSB5_PSB4_FN1, PTN1_FN), -	PINMUX_DATA(DV_VSYNC_MARK, PSB5_PSB4_FN2, PTN1_FN), -	PINMUX_DATA(LCDD16_MARK, PSB5_PSB4_FN1, PTN0_FN), -	PINMUX_DATA(DV_HSYNC_MARK, PSB5_PSB4_FN2, PTN0_FN), - -	/* PTQ FN */ -	PINMUX_DATA(AN3_MARK, PTQ3_FN), -	PINMUX_DATA(AN2_MARK, PTQ2_FN), -	PINMUX_DATA(AN1_MARK, PTQ1_FN), -	PINMUX_DATA(AN0_MARK, PTQ0_FN), - -	/* PTR FN */ -	PINMUX_DATA(CS6B_CE1B_MARK, PTR7_FN), -	PINMUX_DATA(CS6A_CE2B_MARK, PTR6_FN), -	PINMUX_DATA(CS5B_CE1A_MARK, PTR5_FN), -	PINMUX_DATA(CS5A_CE2A_MARK, PTR4_FN), -	PINMUX_DATA(IOIS16_MARK, PSA13_PSA12_FN1, PTR3_FN), -	PINMUX_DATA(LCDLCLK_PTR_MARK, PSA13_PSA12_FN2, PTR3_FN), -	PINMUX_DATA(WAIT_MARK, PTR2_FN), -	PINMUX_DATA(WE3_ICIOWR_MARK, PTR1_FN), -	PINMUX_DATA(WE2_ICIORD_MARK, PTR0_FN), - -	/* PTS FN */ -	PINMUX_DATA(SCIF1_PTS_SCK_MARK, PSC15_PSC14_FN1, PTS7_FN), -	PINMUX_DATA(SDHI0CD_PTS_MARK, PSC15_PSC14_FN2, PTS7_FN), -	PINMUX_DATA(SCIF1_PTS_RXD_MARK, PSC15_PSC14_FN1, PTS6_FN), -	PINMUX_DATA(SDHI0WP_PTS_MARK, PSC15_PSC14_FN2, PTS6_FN), -	PINMUX_DATA(SCIF1_PTS_TXD_MARK, PSC15_PSC14_FN1, PTS5_FN), -	PINMUX_DATA(SDHI0D3_PTS_MARK, PSC15_PSC14_FN2, PTS5_FN), -	PINMUX_DATA(SCIF3_PTS_CTS_MARK, PSC15_PSC14_FN1, PTS4_FN), -	PINMUX_DATA(SDHI0D2_PTS_MARK, PSC15_PSC14_FN2, PTS4_FN), -	PINMUX_DATA(SCIF3_PTS_RTS_MARK, PSC15_PSC14_FN1, PTS3_FN), -	PINMUX_DATA(SDHI0D1_PTS_MARK, PSC15_PSC14_FN2, PTS3_FN), -	PINMUX_DATA(SCIF3_PTS_SCK_MARK, PSC15_PSC14_FN1, PTS2_FN), -	PINMUX_DATA(SDHI0D0_PTS_MARK, PSC15_PSC14_FN2, PTS2_FN), -	PINMUX_DATA(SCIF3_PTS_RXD_MARK, PSC15_PSC14_FN1, PTS1_FN), -	PINMUX_DATA(SDHI0CMD_PTS_MARK, PSC15_PSC14_FN2, PTS1_FN), -	PINMUX_DATA(SCIF3_PTS_TXD_MARK, PSC15_PSC14_FN1, PTS0_FN), -	PINMUX_DATA(SDHI0CLK_PTS_MARK, PSC15_PSC14_FN2, PTS0_FN), - -	/* PTT FN */ -	PINMUX_DATA(SCIF0_PTT_SCK_MARK, PSC13_PSC12_FN1, PTT5_FN), -	PINMUX_DATA(MSIOF0_PTT_TSCK_MARK, PSC13_PSC12_FN2, PTT5_FN), -	PINMUX_DATA(SCIF0_PTT_RXD_MARK, PSC13_PSC12_FN1, PTT4_FN), -	PINMUX_DATA(MSIOF0_PTT_RXD_MARK, PSC13_PSC12_FN2, PTT4_FN), -	PINMUX_DATA(SCIF0_PTT_TXD_MARK, PSC13_PSC12_FN1, PTT3_FN), -	PINMUX_DATA(MSIOF0_PTT_TXD_MARK, PSC13_PSC12_FN2, PTT3_FN), -	PINMUX_DATA(SCIF2_PTT_SCK_MARK, PSC11_PSC10_FN1, PTT2_FN), -	PINMUX_DATA(MSIOF0_PTT_TSYNC_MARK, PSC11_PSC10_FN2, PTT2_FN), -	PINMUX_DATA(SCIF2_PTT_RXD_MARK, PSC11_PSC10_FN1, PTT1_FN), -	PINMUX_DATA(MSIOF0_PTT_SS1_MARK, PSC11_PSC10_FN2, PTT1_FN), -	PINMUX_DATA(MSIOF0_PTT_RSCK_MARK, PSC11_PSC10_FN3, PTT1_FN), -	PINMUX_DATA(SCIF2_PTT_TXD_MARK, PSC11_PSC10_FN1, PTT0_FN), -	PINMUX_DATA(MSIOF0_PTT_SS2_MARK, PSC11_PSC10_FN2, PTT0_FN), -	PINMUX_DATA(MSIOF0_PTT_RSYNC_MARK, PSC11_PSC10_FN3, PTT0_FN), - -	/* PTU FN */ -	PINMUX_DATA(FCDE_MARK, PSC9_PSC8_FN1, PTU5_FN), -	PINMUX_DATA(SCIF0_PTU_SCK_MARK, PSC9_PSC8_FN2, PTU5_FN), -	PINMUX_DATA(FSC_MARK, PSC9_PSC8_FN1, PTU4_FN), -	PINMUX_DATA(SCIF0_PTU_RXD_MARK, PSC9_PSC8_FN2, PTU4_FN), -	PINMUX_DATA(FWE_MARK, PSC9_PSC8_FN1, PTU3_FN), -	PINMUX_DATA(SCIF0_PTU_TXD_MARK, PSC9_PSC8_FN2, PTU3_FN), -	PINMUX_DATA(FOE_MARK, PSC7_PSC6_FN1, PTU2_FN), -	PINMUX_DATA(SCIF2_PTU_SCK_MARK, PSC7_PSC6_FN2, PTU2_FN), -	PINMUX_DATA(VIO_VD2_MARK, PSC7_PSC6_FN3, PTU2_FN), -	PINMUX_DATA(FRB_MARK, PSC7_PSC6_FN1, PTU1_FN), -	PINMUX_DATA(SCIF2_PTU_RXD_MARK, PSC7_PSC6_FN2, PTU1_FN), -	PINMUX_DATA(VIO_CLK2_MARK, PSC7_PSC6_FN3, PTU1_FN), -	PINMUX_DATA(FCE_MARK, PSC7_PSC6_FN1, PTU0_FN), -	PINMUX_DATA(SCIF2_PTU_TXD_MARK, PSC7_PSC6_FN2, PTU0_FN), -	PINMUX_DATA(VIO_HD2_MARK, PSC7_PSC6_FN3, PTU0_FN), - -	/* PTV FN */ -	PINMUX_DATA(NAF7_MARK, PSC7_PSC6_FN1, PTV7_FN), -	PINMUX_DATA(SCIF1_PTV_SCK_MARK, PSC7_PSC6_FN2, PTV7_FN), -	PINMUX_DATA(VIO_D15_MARK, PSC7_PSC6_FN3, PTV7_FN), -	PINMUX_DATA(NAF6_MARK, PSC7_PSC6_FN1, PTV6_FN), -	PINMUX_DATA(SCIF1_PTV_RXD_MARK, PSC7_PSC6_FN2, PTV6_FN), -	PINMUX_DATA(VIO_D14_MARK, PSC7_PSC6_FN3, PTV6_FN), -	PINMUX_DATA(NAF5_MARK, PSC7_PSC6_FN1, PTV5_FN), -	PINMUX_DATA(SCIF1_PTV_TXD_MARK, PSC7_PSC6_FN2, PTV5_FN), -	PINMUX_DATA(VIO_D13_MARK, PSC7_PSC6_FN3, PTV5_FN), -	PINMUX_DATA(NAF4_MARK, PSC7_PSC6_FN1, PTV4_FN), -	PINMUX_DATA(SCIF3_PTV_CTS_MARK, PSC7_PSC6_FN2, PTV4_FN), -	PINMUX_DATA(VIO_D12_MARK, PSC7_PSC6_FN3, PTV4_FN), -	PINMUX_DATA(NAF3_MARK, PSC7_PSC6_FN1, PTV3_FN), -	PINMUX_DATA(SCIF3_PTV_RTS_MARK, PSC7_PSC6_FN2, PTV3_FN), -	PINMUX_DATA(VIO_D11_MARK, PSC7_PSC6_FN3, PTV3_FN), -	PINMUX_DATA(NAF2_MARK, PSC7_PSC6_FN1, PTV2_FN), -	PINMUX_DATA(SCIF3_PTV_SCK_MARK, PSC7_PSC6_FN2, PTV2_FN), -	PINMUX_DATA(VIO_D10_MARK, PSC7_PSC6_FN3, PTV2_FN), -	PINMUX_DATA(NAF1_MARK, PSC7_PSC6_FN1, PTV1_FN), -	PINMUX_DATA(SCIF3_PTV_RXD_MARK, PSC7_PSC6_FN2, PTV1_FN), -	PINMUX_DATA(VIO_D9_MARK, PSC7_PSC6_FN3, PTV1_FN), -	PINMUX_DATA(NAF0_MARK, PSC7_PSC6_FN1, PTV0_FN), -	PINMUX_DATA(SCIF3_PTV_TXD_MARK, PSC7_PSC6_FN2, PTV0_FN), -	PINMUX_DATA(VIO_D8_MARK, PSC7_PSC6_FN3, PTV0_FN), - -	/* PTW FN */ -	PINMUX_DATA(IRQ7_MARK, PTW7_FN), -	PINMUX_DATA(IRQ6_MARK, PTW6_FN), -	PINMUX_DATA(IRQ5_MARK, PTW5_FN), -	PINMUX_DATA(IRQ4_MARK, PSD15_PSD14_FN1, PTW4_FN), -	PINMUX_DATA(LCDLCLK_PTW_MARK, PSD15_PSD14_FN2, PTW4_FN), -	PINMUX_DATA(IRQ3_MARK, PSD13_PSD12_FN1, PTW3_FN), -	PINMUX_DATA(ADTRG_MARK, PSD13_PSD12_FN2, PTW3_FN), -	PINMUX_DATA(IRQ2_MARK, PSD11_PSD10_FN1, PTW2_FN), -	PINMUX_DATA(BS_MARK, PSD11_PSD10_FN2, PTW2_FN), -	PINMUX_DATA(VIO_CKO_MARK, PSD11_PSD10_FN3, PTW2_FN), -	PINMUX_DATA(IRQ1_MARK, PSD9_PSD8_FN1, PTW1_FN), -	PINMUX_DATA(SIUAISPD_MARK, PSD9_PSD8_FN2, PTW1_FN), -	PINMUX_DATA(IRQ0_MARK, PSD7_PSD6_FN1, PTW0_FN), -	PINMUX_DATA(SIUAOSPD_MARK, PSD7_PSD6_FN2, PTW0_FN), - -	/* PTX FN */ -	PINMUX_DATA(DACK1_MARK, PTX7_FN), -	PINMUX_DATA(DREQ1_MARK, PSD3_PSD2_FN1, PTX6_FN), -	PINMUX_DATA(MSIOF0_PTX_MCK_MARK, PSD3_PSD2_FN2, PTX6_FN), -	PINMUX_DATA(DACK1_MARK, PTX5_FN), -	PINMUX_DATA(IRDA_OUT_MARK, PSD5_PSD4_FN2, PTX5_FN), -	PINMUX_DATA(DREQ1_MARK, PTX4_FN), -	PINMUX_DATA(IRDA_IN_MARK, PSD5_PSD4_FN2, PTX4_FN), -	PINMUX_DATA(TS0_SDAT_MARK, PTX3_FN), -	PINMUX_DATA(TS0_SCK_MARK, PTX2_FN), -	PINMUX_DATA(TS0_SDEN_MARK, PTX1_FN), -	PINMUX_DATA(TS0_SPSYNC_MARK, PTX0_FN), - -	/* PTY FN */ -	PINMUX_DATA(VIO_D7_MARK, PTY7_FN), -	PINMUX_DATA(VIO_D6_MARK, PTY6_FN), -	PINMUX_DATA(VIO_D5_MARK, PTY5_FN), -	PINMUX_DATA(VIO_D4_MARK, PTY4_FN), -	PINMUX_DATA(VIO_D3_MARK, PTY3_FN), -	PINMUX_DATA(VIO_D2_MARK, PTY2_FN), -	PINMUX_DATA(VIO_D1_MARK, PTY1_FN), -	PINMUX_DATA(VIO_D0_MARK, PTY0_FN), - -	/* PTZ FN */ -	PINMUX_DATA(SIUBOBT_MARK, PTZ7_FN), -	PINMUX_DATA(SIUBOLR_MARK, PTZ6_FN), -	PINMUX_DATA(SIUBOSLD_MARK, PTZ5_FN), -	PINMUX_DATA(SIUBMCK_MARK, PTZ4_FN), -	PINMUX_DATA(VIO_FLD_MARK, PSD1_PSD0_FN1, PTZ3_FN), -	PINMUX_DATA(SIUBFCK_MARK, PSD1_PSD0_FN2, PTZ3_FN), -	PINMUX_DATA(VIO_HD1_MARK, PSD1_PSD0_FN1, PTZ2_FN), -	PINMUX_DATA(SIUBILR_MARK, PSD1_PSD0_FN2, PTZ2_FN), -	PINMUX_DATA(VIO_VD1_MARK, PSD1_PSD0_FN1, PTZ1_FN), -	PINMUX_DATA(SIUBIBT_MARK, PSD1_PSD0_FN2, PTZ1_FN), -	PINMUX_DATA(VIO_CLK1_MARK, PSD1_PSD0_FN1, PTZ0_FN), -	PINMUX_DATA(SIUBISLD_MARK, PSD1_PSD0_FN2, PTZ0_FN), -}; - -static struct pinmux_gpio pinmux_gpios[] = { -	/* PTA */ -	PINMUX_GPIO(GPIO_PTA7, PTA7_DATA), -	PINMUX_GPIO(GPIO_PTA6, PTA6_DATA), -	PINMUX_GPIO(GPIO_PTA5, PTA5_DATA), -	PINMUX_GPIO(GPIO_PTA4, PTA4_DATA), -	PINMUX_GPIO(GPIO_PTA3, PTA3_DATA), -	PINMUX_GPIO(GPIO_PTA2, PTA2_DATA), -	PINMUX_GPIO(GPIO_PTA1, PTA1_DATA), -	PINMUX_GPIO(GPIO_PTA0, PTA0_DATA), - -	/* PTB */ -	PINMUX_GPIO(GPIO_PTB7, PTB7_DATA), -	PINMUX_GPIO(GPIO_PTB6, PTB6_DATA), -	PINMUX_GPIO(GPIO_PTB5, PTB5_DATA), -	PINMUX_GPIO(GPIO_PTB4, PTB4_DATA), -	PINMUX_GPIO(GPIO_PTB3, PTB3_DATA), -	PINMUX_GPIO(GPIO_PTB2, PTB2_DATA), -	PINMUX_GPIO(GPIO_PTB1, PTB1_DATA), -	PINMUX_GPIO(GPIO_PTB0, PTB0_DATA), - -	/* PTC */ -	PINMUX_GPIO(GPIO_PTC7, PTC7_DATA), -	PINMUX_GPIO(GPIO_PTC6, PTC6_DATA), -	PINMUX_GPIO(GPIO_PTC5, PTC5_DATA), -	PINMUX_GPIO(GPIO_PTC4, PTC4_DATA), -	PINMUX_GPIO(GPIO_PTC3, PTC3_DATA), -	PINMUX_GPIO(GPIO_PTC2, PTC2_DATA), -	PINMUX_GPIO(GPIO_PTC1, PTC1_DATA), -	PINMUX_GPIO(GPIO_PTC0, PTC0_DATA), - -	/* PTD */ -	PINMUX_GPIO(GPIO_PTD7, PTD7_DATA), -	PINMUX_GPIO(GPIO_PTD6, PTD6_DATA), -	PINMUX_GPIO(GPIO_PTD5, PTD5_DATA), -	PINMUX_GPIO(GPIO_PTD4, PTD4_DATA), -	PINMUX_GPIO(GPIO_PTD3, PTD3_DATA), -	PINMUX_GPIO(GPIO_PTD2, PTD2_DATA), -	PINMUX_GPIO(GPIO_PTD1, PTD1_DATA), -	PINMUX_GPIO(GPIO_PTD0, PTD0_DATA), - -	/* PTE */ -	PINMUX_GPIO(GPIO_PTE5, PTE5_DATA), -	PINMUX_GPIO(GPIO_PTE4, PTE4_DATA), -	PINMUX_GPIO(GPIO_PTE3, PTE3_DATA), -	PINMUX_GPIO(GPIO_PTE2, PTE2_DATA), -	PINMUX_GPIO(GPIO_PTE1, PTE1_DATA), -	PINMUX_GPIO(GPIO_PTE0, PTE0_DATA), - -	/* PTF */ -	PINMUX_GPIO(GPIO_PTF7, PTF7_DATA), -	PINMUX_GPIO(GPIO_PTF6, PTF6_DATA), -	PINMUX_GPIO(GPIO_PTF5, PTF5_DATA), -	PINMUX_GPIO(GPIO_PTF4, PTF4_DATA), -	PINMUX_GPIO(GPIO_PTF3, PTF3_DATA), -	PINMUX_GPIO(GPIO_PTF2, PTF2_DATA), -	PINMUX_GPIO(GPIO_PTF1, PTF1_DATA), -	PINMUX_GPIO(GPIO_PTF0, PTF0_DATA), - -	/* PTG */ -	PINMUX_GPIO(GPIO_PTG5, PTG5_DATA), -	PINMUX_GPIO(GPIO_PTG4, PTG4_DATA), -	PINMUX_GPIO(GPIO_PTG3, PTG3_DATA), -	PINMUX_GPIO(GPIO_PTG2, PTG2_DATA), -	PINMUX_GPIO(GPIO_PTG1, PTG1_DATA), -	PINMUX_GPIO(GPIO_PTG0, PTG0_DATA), - -	/* PTH */ -	PINMUX_GPIO(GPIO_PTH7, PTH7_DATA), -	PINMUX_GPIO(GPIO_PTH6, PTH6_DATA), -	PINMUX_GPIO(GPIO_PTH5, PTH5_DATA), -	PINMUX_GPIO(GPIO_PTH4, PTH4_DATA), -	PINMUX_GPIO(GPIO_PTH3, PTH3_DATA), -	PINMUX_GPIO(GPIO_PTH2, PTH2_DATA), -	PINMUX_GPIO(GPIO_PTH1, PTH1_DATA), -	PINMUX_GPIO(GPIO_PTH0, PTH0_DATA), - -	/* PTJ */ -	PINMUX_GPIO(GPIO_PTJ7, PTJ7_DATA), -	PINMUX_GPIO(GPIO_PTJ5, PTJ5_DATA), -	PINMUX_GPIO(GPIO_PTJ3, PTJ3_DATA), -	PINMUX_GPIO(GPIO_PTJ2, PTJ2_DATA), -	PINMUX_GPIO(GPIO_PTJ1, PTJ1_DATA), -	PINMUX_GPIO(GPIO_PTJ0, PTJ0_DATA), - -	/* PTK */ -	PINMUX_GPIO(GPIO_PTK7, PTK7_DATA), -	PINMUX_GPIO(GPIO_PTK6, PTK6_DATA), -	PINMUX_GPIO(GPIO_PTK5, PTK5_DATA), -	PINMUX_GPIO(GPIO_PTK4, PTK4_DATA), -	PINMUX_GPIO(GPIO_PTK3, PTK3_DATA), -	PINMUX_GPIO(GPIO_PTK2, PTK2_DATA), -	PINMUX_GPIO(GPIO_PTK1, PTK1_DATA), -	PINMUX_GPIO(GPIO_PTK0, PTK0_DATA), - -	/* PTL */ -	PINMUX_GPIO(GPIO_PTL7, PTL7_DATA), -	PINMUX_GPIO(GPIO_PTL6, PTL6_DATA), -	PINMUX_GPIO(GPIO_PTL5, PTL5_DATA), -	PINMUX_GPIO(GPIO_PTL4, PTL4_DATA), -	PINMUX_GPIO(GPIO_PTL3, PTL3_DATA), -	PINMUX_GPIO(GPIO_PTL2, PTL2_DATA), -	PINMUX_GPIO(GPIO_PTL1, PTL1_DATA), -	PINMUX_GPIO(GPIO_PTL0, PTL0_DATA), - -	/* PTM */ -	PINMUX_GPIO(GPIO_PTM7, PTM7_DATA), -	PINMUX_GPIO(GPIO_PTM6, PTM6_DATA), -	PINMUX_GPIO(GPIO_PTM5, PTM5_DATA), -	PINMUX_GPIO(GPIO_PTM4, PTM4_DATA), -	PINMUX_GPIO(GPIO_PTM3, PTM3_DATA), -	PINMUX_GPIO(GPIO_PTM2, PTM2_DATA), -	PINMUX_GPIO(GPIO_PTM1, PTM1_DATA), -	PINMUX_GPIO(GPIO_PTM0, PTM0_DATA), - -	/* PTN */ -	PINMUX_GPIO(GPIO_PTN7, PTN7_DATA), -	PINMUX_GPIO(GPIO_PTN6, PTN6_DATA), -	PINMUX_GPIO(GPIO_PTN5, PTN5_DATA), -	PINMUX_GPIO(GPIO_PTN4, PTN4_DATA), -	PINMUX_GPIO(GPIO_PTN3, PTN3_DATA), -	PINMUX_GPIO(GPIO_PTN2, PTN2_DATA), -	PINMUX_GPIO(GPIO_PTN1, PTN1_DATA), -	PINMUX_GPIO(GPIO_PTN0, PTN0_DATA), - -	/* PTQ */ -	PINMUX_GPIO(GPIO_PTQ3, PTQ3_DATA), -	PINMUX_GPIO(GPIO_PTQ2, PTQ2_DATA), -	PINMUX_GPIO(GPIO_PTQ1, PTQ1_DATA), -	PINMUX_GPIO(GPIO_PTQ0, PTQ0_DATA), - -	/* PTR */ -	PINMUX_GPIO(GPIO_PTR7, PTR7_DATA), -	PINMUX_GPIO(GPIO_PTR6, PTR6_DATA), -	PINMUX_GPIO(GPIO_PTR5, PTR5_DATA), -	PINMUX_GPIO(GPIO_PTR4, PTR4_DATA), -	PINMUX_GPIO(GPIO_PTR3, PTR3_DATA), -	PINMUX_GPIO(GPIO_PTR2, PTR2_DATA), -	PINMUX_GPIO(GPIO_PTR1, PTR1_DATA), -	PINMUX_GPIO(GPIO_PTR0, PTR0_DATA), - -	/* PTS */ -	PINMUX_GPIO(GPIO_PTS7, PTS7_DATA), -	PINMUX_GPIO(GPIO_PTS6, PTS6_DATA), -	PINMUX_GPIO(GPIO_PTS5, PTS5_DATA), -	PINMUX_GPIO(GPIO_PTS4, PTS4_DATA), -	PINMUX_GPIO(GPIO_PTS3, PTS3_DATA), -	PINMUX_GPIO(GPIO_PTS2, PTS2_DATA), -	PINMUX_GPIO(GPIO_PTS1, PTS1_DATA), -	PINMUX_GPIO(GPIO_PTS0, PTS0_DATA), - -	/* PTT */ -	PINMUX_GPIO(GPIO_PTT5, PTT5_DATA), -	PINMUX_GPIO(GPIO_PTT4, PTT4_DATA), -	PINMUX_GPIO(GPIO_PTT3, PTT3_DATA), -	PINMUX_GPIO(GPIO_PTT2, PTT2_DATA), -	PINMUX_GPIO(GPIO_PTT1, PTT1_DATA), -	PINMUX_GPIO(GPIO_PTT0, PTT0_DATA), - -	/* PTU */ -	PINMUX_GPIO(GPIO_PTU5, PTU5_DATA), -	PINMUX_GPIO(GPIO_PTU4, PTU4_DATA), -	PINMUX_GPIO(GPIO_PTU3, PTU3_DATA), -	PINMUX_GPIO(GPIO_PTU2, PTU2_DATA), -	PINMUX_GPIO(GPIO_PTU1, PTU1_DATA), -	PINMUX_GPIO(GPIO_PTU0, PTU0_DATA), - -	/* PTV */ -	PINMUX_GPIO(GPIO_PTV7, PTV7_DATA), -	PINMUX_GPIO(GPIO_PTV6, PTV6_DATA), -	PINMUX_GPIO(GPIO_PTV5, PTV5_DATA), -	PINMUX_GPIO(GPIO_PTV4, PTV4_DATA), -	PINMUX_GPIO(GPIO_PTV3, PTV3_DATA), -	PINMUX_GPIO(GPIO_PTV2, PTV2_DATA), -	PINMUX_GPIO(GPIO_PTV1, PTV1_DATA), -	PINMUX_GPIO(GPIO_PTV0, PTV0_DATA), - -	/* PTW */ -	PINMUX_GPIO(GPIO_PTW7, PTW7_DATA), -	PINMUX_GPIO(GPIO_PTW6, PTW6_DATA), -	PINMUX_GPIO(GPIO_PTW5, PTW5_DATA), -	PINMUX_GPIO(GPIO_PTW4, PTW4_DATA), -	PINMUX_GPIO(GPIO_PTW3, PTW3_DATA), -	PINMUX_GPIO(GPIO_PTW2, PTW2_DATA), -	PINMUX_GPIO(GPIO_PTW1, PTW1_DATA), -	PINMUX_GPIO(GPIO_PTW0, PTW0_DATA), - -	/* PTX */ -	PINMUX_GPIO(GPIO_PTX7, PTX7_DATA), -	PINMUX_GPIO(GPIO_PTX6, PTX6_DATA), -	PINMUX_GPIO(GPIO_PTX5, PTX5_DATA), -	PINMUX_GPIO(GPIO_PTX4, PTX4_DATA), -	PINMUX_GPIO(GPIO_PTX3, PTX3_DATA), -	PINMUX_GPIO(GPIO_PTX2, PTX2_DATA), -	PINMUX_GPIO(GPIO_PTX1, PTX1_DATA), -	PINMUX_GPIO(GPIO_PTX0, PTX0_DATA), - -	/* PTY */ -	PINMUX_GPIO(GPIO_PTY7, PTY7_DATA), -	PINMUX_GPIO(GPIO_PTY6, PTY6_DATA), -	PINMUX_GPIO(GPIO_PTY5, PTY5_DATA), -	PINMUX_GPIO(GPIO_PTY4, PTY4_DATA), -	PINMUX_GPIO(GPIO_PTY3, PTY3_DATA), -	PINMUX_GPIO(GPIO_PTY2, PTY2_DATA), -	PINMUX_GPIO(GPIO_PTY1, PTY1_DATA), -	PINMUX_GPIO(GPIO_PTY0, PTY0_DATA), - -	/* PTZ */ -	PINMUX_GPIO(GPIO_PTZ7, PTZ7_DATA), -	PINMUX_GPIO(GPIO_PTZ6, PTZ6_DATA), -	PINMUX_GPIO(GPIO_PTZ5, PTZ5_DATA), -	PINMUX_GPIO(GPIO_PTZ4, PTZ4_DATA), -	PINMUX_GPIO(GPIO_PTZ3, PTZ3_DATA), -	PINMUX_GPIO(GPIO_PTZ2, PTZ2_DATA), -	PINMUX_GPIO(GPIO_PTZ1, PTZ1_DATA), -	PINMUX_GPIO(GPIO_PTZ0, PTZ0_DATA), - -	/* SCIF0 */ -	PINMUX_GPIO(GPIO_FN_SCIF0_PTT_TXD, SCIF0_PTT_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_PTT_RXD, SCIF0_PTT_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_PTT_SCK, SCIF0_PTT_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_PTU_TXD, SCIF0_PTU_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_PTU_RXD, SCIF0_PTU_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_PTU_SCK, SCIF0_PTU_SCK_MARK), - -	/* SCIF1 */ -	PINMUX_GPIO(GPIO_FN_SCIF1_PTS_TXD, SCIF1_PTS_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_PTS_RXD, SCIF1_PTS_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_PTS_SCK, SCIF1_PTS_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_PTV_TXD, SCIF1_PTV_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_PTV_RXD, SCIF1_PTV_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_PTV_SCK, SCIF1_PTV_SCK_MARK), - -	/* SCIF2 */ -	PINMUX_GPIO(GPIO_FN_SCIF2_PTT_TXD, SCIF2_PTT_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_PTT_RXD, SCIF2_PTT_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_PTT_SCK, SCIF2_PTT_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_PTU_TXD, SCIF2_PTU_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_PTU_RXD, SCIF2_PTU_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_PTU_SCK, SCIF2_PTU_SCK_MARK), - -	/* SCIF3 */ -	PINMUX_GPIO(GPIO_FN_SCIF3_PTS_TXD, SCIF3_PTS_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_PTS_RXD, SCIF3_PTS_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_PTS_SCK, SCIF3_PTS_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_PTS_RTS, SCIF3_PTS_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_PTS_CTS, SCIF3_PTS_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_PTV_TXD, SCIF3_PTV_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_PTV_RXD, SCIF3_PTV_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_PTV_SCK, SCIF3_PTV_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_PTV_RTS, SCIF3_PTV_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_PTV_CTS, SCIF3_PTV_CTS_MARK), - -	/* SCIF4 */ -	PINMUX_GPIO(GPIO_FN_SCIF4_PTE_TXD, SCIF4_PTE_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_PTE_RXD, SCIF4_PTE_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_PTE_SCK, SCIF4_PTE_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_PTN_TXD, SCIF4_PTN_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_PTN_RXD, SCIF4_PTN_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_PTN_SCK, SCIF4_PTN_SCK_MARK), - -	/* SCIF5 */ -	PINMUX_GPIO(GPIO_FN_SCIF5_PTE_TXD, SCIF5_PTE_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_PTE_RXD, SCIF5_PTE_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_PTE_SCK, SCIF5_PTE_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_PTN_TXD, SCIF5_PTN_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_PTN_RXD, SCIF5_PTN_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_PTN_SCK, SCIF5_PTN_SCK_MARK), - -	/* CEU */ -	PINMUX_GPIO(GPIO_FN_VIO_D15, VIO_D15_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D14, VIO_D14_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D13, VIO_D13_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D12, VIO_D12_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D11, VIO_D11_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D10, VIO_D10_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D9, VIO_D9_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D8, VIO_D8_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D7, VIO_D7_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D6, VIO_D6_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D5, VIO_D5_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D4, VIO_D4_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D3, VIO_D3_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D2, VIO_D2_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D1, VIO_D1_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_D0, VIO_D0_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_CLK1, VIO_CLK1_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_VD1, VIO_VD1_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_HD1, VIO_HD1_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_FLD, VIO_FLD_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_CKO, VIO_CKO_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_VD2, VIO_VD2_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_HD2, VIO_HD2_MARK), -	PINMUX_GPIO(GPIO_FN_VIO_CLK2, VIO_CLK2_MARK), - -	/* LCDC */ -	PINMUX_GPIO(GPIO_FN_LCDD23, LCDD23_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD22, LCDD22_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD21, LCDD21_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD20, LCDD20_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD19, LCDD19_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD18, LCDD18_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD17, LCDD17_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD16, LCDD16_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD15, LCDD15_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD14, LCDD14_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD13, LCDD13_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD12, LCDD12_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD11, LCDD11_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD10, LCDD10_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD9, LCDD9_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD8, LCDD8_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD7, LCDD7_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD6, LCDD6_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD5, LCDD5_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD4, LCDD4_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD3, LCDD3_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD2, LCDD2_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD1, LCDD1_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD0, LCDD0_MARK), -	PINMUX_GPIO(GPIO_FN_LCDLCLK_PTR, LCDLCLK_PTR_MARK), -	PINMUX_GPIO(GPIO_FN_LCDLCLK_PTW, LCDLCLK_PTW_MARK), -	/* Main LCD */ -	PINMUX_GPIO(GPIO_FN_LCDDON, LCDDON_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVCPWC, LCDVCPWC_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVEPWC, LCDVEPWC_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVSYN, LCDVSYN_MARK), -	/* Main LCD - RGB Mode */ -	PINMUX_GPIO(GPIO_FN_LCDDCK, LCDDCK_MARK), -	PINMUX_GPIO(GPIO_FN_LCDHSYN, LCDHSYN_MARK), -	PINMUX_GPIO(GPIO_FN_LCDDISP, LCDDISP_MARK), -	/* Main LCD - SYS Mode */ -	PINMUX_GPIO(GPIO_FN_LCDRS, LCDRS_MARK), -	PINMUX_GPIO(GPIO_FN_LCDCS, LCDCS_MARK), -	PINMUX_GPIO(GPIO_FN_LCDWR, LCDWR_MARK), -	PINMUX_GPIO(GPIO_FN_LCDRD, LCDRD_MARK), - -	/* IRQ */ -	PINMUX_GPIO(GPIO_FN_IRQ0, IRQ0_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ1, IRQ1_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ2, IRQ2_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ3, IRQ3_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ4, IRQ4_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ5, IRQ5_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ6, IRQ6_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ7, IRQ7_MARK), - -	/* AUD */ -	PINMUX_GPIO(GPIO_FN_AUDCK, AUDCK_MARK), -	PINMUX_GPIO(GPIO_FN_AUDSYNC, AUDSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA3, AUDATA3_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA2, AUDATA2_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA1, AUDATA1_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA0, AUDATA0_MARK), - -	/* SDHI0 (PTD) */ -	PINMUX_GPIO(GPIO_FN_SDHI0CD_PTD, SDHI0CD_PTD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0WP_PTD, SDHI0WP_PTD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D3_PTD, SDHI0D3_PTD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D2_PTD, SDHI0D2_PTD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D1_PTD, SDHI0D1_PTD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D0_PTD, SDHI0D0_PTD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0CMD_PTD, SDHI0CMD_PTD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0CLK_PTD, SDHI0CLK_PTD_MARK), - -	/* SDHI0 (PTS) */ -	PINMUX_GPIO(GPIO_FN_SDHI0CD_PTS, SDHI0CD_PTS_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0WP_PTS, SDHI0WP_PTS_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D3_PTS, SDHI0D3_PTS_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D2_PTS, SDHI0D2_PTS_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D1_PTS, SDHI0D1_PTS_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D0_PTS, SDHI0D0_PTS_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0CMD_PTS, SDHI0CMD_PTS_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0CLK_PTS, SDHI0CLK_PTS_MARK), - -	/* SDHI1 */ -	PINMUX_GPIO(GPIO_FN_SDHI1CD, SDHI1CD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1WP, SDHI1WP_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1D3, SDHI1D3_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1D2, SDHI1D2_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1D1, SDHI1D1_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1D0, SDHI1D0_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1CMD, SDHI1CMD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1CLK, SDHI1CLK_MARK), - -	/* SIUA */ -	PINMUX_GPIO(GPIO_FN_SIUAFCK, SIUAFCK_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAILR, SIUAILR_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAIBT, SIUAIBT_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAISLD, SIUAISLD_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAOLR, SIUAOLR_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAOBT, SIUAOBT_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAOSLD, SIUAOSLD_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAMCK, SIUAMCK_MARK), -	PINMUX_GPIO(GPIO_FN_SIUAISPD, SIUAISPD_MARK), -	PINMUX_GPIO(GPIO_FN_SIUOSPD, SIUAOSPD_MARK), - -	/* SIUB */ -	PINMUX_GPIO(GPIO_FN_SIUBFCK, SIUBFCK_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBILR, SIUBILR_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBIBT, SIUBIBT_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBISLD, SIUBISLD_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBOLR, SIUBOLR_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBOBT, SIUBOBT_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBOSLD, SIUBOSLD_MARK), -	PINMUX_GPIO(GPIO_FN_SIUBMCK, SIUBMCK_MARK), - -	/* IRDA */ -	PINMUX_GPIO(GPIO_FN_IRDA_IN, IRDA_IN_MARK), -	PINMUX_GPIO(GPIO_FN_IRDA_OUT, IRDA_OUT_MARK), - -	/* VOU */ -	PINMUX_GPIO(GPIO_FN_DV_CLKI, DV_CLKI_MARK), -	PINMUX_GPIO(GPIO_FN_DV_CLK, DV_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_DV_HSYNC, DV_HSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_DV_VSYNC, DV_VSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D15, DV_D15_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D14, DV_D14_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D13, DV_D13_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D12, DV_D12_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D11, DV_D11_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D10, DV_D10_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D9, DV_D9_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D8, DV_D8_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D7, DV_D7_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D6, DV_D6_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D5, DV_D5_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D4, DV_D4_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D3, DV_D3_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D2, DV_D2_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D1, DV_D1_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D0, DV_D0_MARK), - -	/* KEYSC */ -	PINMUX_GPIO(GPIO_FN_KEYIN0, KEYIN0_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN1, KEYIN1_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN2, KEYIN2_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN3, KEYIN3_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN4, KEYIN4_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT0, KEYOUT0_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT1, KEYOUT1_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT2, KEYOUT2_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT3, KEYOUT3_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT4_IN6, KEYOUT4_IN6_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT5_IN5, KEYOUT5_IN5_MARK), - -	/* MSIOF0 (PTF) */ -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTF_TXD, MSIOF0_PTF_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTF_RXD, MSIOF0_PTF_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTF_MCK, MSIOF0_PTF_MCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTF_TSYNC, MSIOF0_PTF_TSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTF_TSCK, MSIOF0_PTF_TSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTF_RSYNC, MSIOF0_PTF_RSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTF_RSCK, MSIOF0_PTF_RSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTF_SS1, MSIOF0_PTF_SS1_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTF_SS2, MSIOF0_PTF_SS2_MARK), - -	/* MSIOF0 (PTT+PTX) */ -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTT_TXD, MSIOF0_PTT_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTT_RXD, MSIOF0_PTT_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTX_MCK, MSIOF0_PTX_MCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTT_TSYNC, MSIOF0_PTT_TSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTT_TSCK, MSIOF0_PTT_TSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTT_RSYNC, MSIOF0_PTT_RSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTT_RSCK, MSIOF0_PTT_RSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTT_SS1, MSIOF0_PTT_SS1_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_PTT_SS2, MSIOF0_PTT_SS2_MARK), - -	/* MSIOF1 */ -	PINMUX_GPIO(GPIO_FN_MSIOF1_TXD, MSIOF1_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_RXD, MSIOF1_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_MCK, MSIOF1_MCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_TSYNC, MSIOF1_TSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_TSCK, MSIOF1_TSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_RSYNC, MSIOF1_RSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_RSCK, MSIOF1_RSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_SS1, MSIOF1_SS1_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_SS2, MSIOF1_SS2_MARK), - -	/* TSIF */ -	PINMUX_GPIO(GPIO_FN_TS0_SDAT, TS0_SDAT_MARK), -	PINMUX_GPIO(GPIO_FN_TS0_SCK, TS0_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_TS0_SDEN, TS0_SDEN_MARK), -	PINMUX_GPIO(GPIO_FN_TS0_SPSYNC, TS0_SPSYNC_MARK), - -	/* FLCTL */ -	PINMUX_GPIO(GPIO_FN_FCE, FCE_MARK), -	PINMUX_GPIO(GPIO_FN_NAF7, NAF7_MARK), -	PINMUX_GPIO(GPIO_FN_NAF6, NAF6_MARK), -	PINMUX_GPIO(GPIO_FN_NAF5, NAF5_MARK), -	PINMUX_GPIO(GPIO_FN_NAF4, NAF4_MARK), -	PINMUX_GPIO(GPIO_FN_NAF3, NAF3_MARK), -	PINMUX_GPIO(GPIO_FN_NAF2, NAF2_MARK), -	PINMUX_GPIO(GPIO_FN_NAF1, NAF1_MARK), -	PINMUX_GPIO(GPIO_FN_NAF0, NAF0_MARK), -	PINMUX_GPIO(GPIO_FN_FCDE, FCDE_MARK), -	PINMUX_GPIO(GPIO_FN_FOE, FOE_MARK), -	PINMUX_GPIO(GPIO_FN_FSC, FSC_MARK), -	PINMUX_GPIO(GPIO_FN_FWE, FWE_MARK), -	PINMUX_GPIO(GPIO_FN_FRB, FRB_MARK), - -	/* DMAC */ -	PINMUX_GPIO(GPIO_FN_DACK1, DACK1_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ1, DREQ1_MARK), -	PINMUX_GPIO(GPIO_FN_DACK0, DACK0_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ0, DREQ0_MARK), - -	/* ADC */ -	PINMUX_GPIO(GPIO_FN_AN3, AN3_MARK), -	PINMUX_GPIO(GPIO_FN_AN2, AN2_MARK), -	PINMUX_GPIO(GPIO_FN_AN1, AN1_MARK), -	PINMUX_GPIO(GPIO_FN_AN0, AN0_MARK), -	PINMUX_GPIO(GPIO_FN_ADTRG, ADTRG_MARK), - -	/* CPG */ -	PINMUX_GPIO(GPIO_FN_STATUS0, STATUS0_MARK), -	PINMUX_GPIO(GPIO_FN_PDSTATUS, PDSTATUS_MARK), - -	/* TPU */ -	PINMUX_GPIO(GPIO_FN_TPUTO0, TPUTO0_MARK), -	PINMUX_GPIO(GPIO_FN_TPUTO1, TPUTO1_MARK), -	PINMUX_GPIO(GPIO_FN_TPUTO2, TPUTO2_MARK), -	PINMUX_GPIO(GPIO_FN_TPUTO3, TPUTO3_MARK), - -	/* BSC */ -	PINMUX_GPIO(GPIO_FN_D31, D31_MARK), -	PINMUX_GPIO(GPIO_FN_D30, D30_MARK), -	PINMUX_GPIO(GPIO_FN_D29, D29_MARK), -	PINMUX_GPIO(GPIO_FN_D28, D28_MARK), -	PINMUX_GPIO(GPIO_FN_D27, D27_MARK), -	PINMUX_GPIO(GPIO_FN_D26, D26_MARK), -	PINMUX_GPIO(GPIO_FN_D25, D25_MARK), -	PINMUX_GPIO(GPIO_FN_D24, D24_MARK), -	PINMUX_GPIO(GPIO_FN_D23, D23_MARK), -	PINMUX_GPIO(GPIO_FN_D22, D22_MARK), -	PINMUX_GPIO(GPIO_FN_D21, D21_MARK), -	PINMUX_GPIO(GPIO_FN_D20, D20_MARK), -	PINMUX_GPIO(GPIO_FN_D19, D19_MARK), -	PINMUX_GPIO(GPIO_FN_D18, D18_MARK), -	PINMUX_GPIO(GPIO_FN_D17, D17_MARK), -	PINMUX_GPIO(GPIO_FN_D16, D16_MARK), -	PINMUX_GPIO(GPIO_FN_IOIS16, IOIS16_MARK), -	PINMUX_GPIO(GPIO_FN_WAIT, WAIT_MARK), -	PINMUX_GPIO(GPIO_FN_BS, BS_MARK), -	PINMUX_GPIO(GPIO_FN_A25, A25_MARK), -	PINMUX_GPIO(GPIO_FN_A24, A24_MARK), -	PINMUX_GPIO(GPIO_FN_A23, A23_MARK), -	PINMUX_GPIO(GPIO_FN_A22, A22_MARK), -	PINMUX_GPIO(GPIO_FN_CS6B_CE1B, CS6B_CE1B_MARK), -	PINMUX_GPIO(GPIO_FN_CS6A_CE2B, CS6A_CE2B_MARK), -	PINMUX_GPIO(GPIO_FN_CS5B_CE1A, CS5B_CE1A_MARK), -	PINMUX_GPIO(GPIO_FN_CS5A_CE2A, CS5A_CE2A_MARK), -	PINMUX_GPIO(GPIO_FN_WE3_ICIOWR, WE3_ICIOWR_MARK), -	PINMUX_GPIO(GPIO_FN_WE2_ICIORD, WE2_ICIORD_MARK), - -	/* ATAPI */ -	PINMUX_GPIO(GPIO_FN_IDED15, IDED15_MARK), -	PINMUX_GPIO(GPIO_FN_IDED14, IDED14_MARK), -	PINMUX_GPIO(GPIO_FN_IDED13, IDED13_MARK), -	PINMUX_GPIO(GPIO_FN_IDED12, IDED12_MARK), -	PINMUX_GPIO(GPIO_FN_IDED11, IDED11_MARK), -	PINMUX_GPIO(GPIO_FN_IDED10, IDED10_MARK), -	PINMUX_GPIO(GPIO_FN_IDED9, IDED9_MARK), -	PINMUX_GPIO(GPIO_FN_IDED8, IDED8_MARK), -	PINMUX_GPIO(GPIO_FN_IDED7, IDED7_MARK), -	PINMUX_GPIO(GPIO_FN_IDED6, IDED6_MARK), -	PINMUX_GPIO(GPIO_FN_IDED5, IDED5_MARK), -	PINMUX_GPIO(GPIO_FN_IDED4, IDED4_MARK), -	PINMUX_GPIO(GPIO_FN_IDED3, IDED3_MARK), -	PINMUX_GPIO(GPIO_FN_IDED2, IDED2_MARK), -	PINMUX_GPIO(GPIO_FN_IDED1, IDED1_MARK), -	PINMUX_GPIO(GPIO_FN_IDED0, IDED0_MARK), -	PINMUX_GPIO(GPIO_FN_DIRECTION, DIRECTION_MARK), -	PINMUX_GPIO(GPIO_FN_EXBUF_ENB, EXBUF_ENB_MARK), -	PINMUX_GPIO(GPIO_FN_IDERST, IDERST_MARK), -	PINMUX_GPIO(GPIO_FN_IODACK, IODACK_MARK), -	PINMUX_GPIO(GPIO_FN_IODREQ, IODREQ_MARK), -	PINMUX_GPIO(GPIO_FN_IDEIORDY, IDEIORDY_MARK), -	PINMUX_GPIO(GPIO_FN_IDEINT, IDEINT_MARK), -	PINMUX_GPIO(GPIO_FN_IDEIOWR, IDEIOWR_MARK), -	PINMUX_GPIO(GPIO_FN_IDEIORD, IDEIORD_MARK), -	PINMUX_GPIO(GPIO_FN_IDECS1, IDECS1_MARK), -	PINMUX_GPIO(GPIO_FN_IDECS0, IDECS0_MARK), -	PINMUX_GPIO(GPIO_FN_IDEA2, IDEA2_MARK), -	PINMUX_GPIO(GPIO_FN_IDEA1, IDEA1_MARK), -	PINMUX_GPIO(GPIO_FN_IDEA0, IDEA0_MARK), - }; - -static struct pinmux_cfg_reg pinmux_config_regs[] = { -	{ PINMUX_CFG_REG("PACR", 0xa4050100, 16, 2) { -		PTA7_FN, PTA7_OUT, 0, PTA7_IN, -		PTA6_FN, PTA6_OUT, 0, PTA6_IN, -		PTA5_FN, PTA5_OUT, 0, PTA5_IN, -		PTA4_FN, PTA4_OUT, PTA4_IN_PU, PTA4_IN, -		PTA3_FN, PTA3_OUT, PTA3_IN_PU, PTA3_IN, -		PTA2_FN, PTA2_OUT, PTA2_IN_PU, PTA2_IN, -		PTA1_FN, PTA1_OUT, PTA1_IN_PU, PTA1_IN, -		PTA0_FN, PTA0_OUT, PTA0_IN_PU, PTA0_IN } -	}, -	{ PINMUX_CFG_REG("PBCR", 0xa4050102, 16, 2) { -		PTB7_FN, PTB7_OUT, 0, PTB7_IN, -		PTB6_FN, PTB6_OUT, 0, PTB6_IN, -		PTB5_FN, PTB5_OUT, 0, PTB5_IN, -		PTB4_FN, PTB4_OUT, 0, PTB4_IN, -		PTB3_FN, PTB3_OUT, 0, PTB3_IN, -		PTB2_FN, PTB2_OUT, PTB2_IN_PU, PTB2_IN, -		PTB1_FN, PTB1_OUT, PTB1_IN_PU, PTB1_IN, -		PTB0_FN, PTB0_OUT, 0, PTB0_IN } -	}, -	{ PINMUX_CFG_REG("PCCR", 0xa4050104, 16, 2) { -		PTC7_FN, PTC7_OUT, 0, PTC7_IN, -		PTC6_FN, PTC6_OUT, 0, PTC6_IN, -		PTC5_FN, PTC5_OUT, 0, PTC5_IN, -		PTC4_FN, PTC4_OUT, 0, PTC4_IN, -		PTC3_FN, PTC3_OUT, 0, PTC3_IN, -		PTC2_FN, PTC2_OUT, 0, PTC2_IN, -		PTC1_FN, PTC1_OUT, 0, PTC1_IN, -		PTC0_FN, PTC0_OUT, 0, PTC0_IN } -	}, -	{ PINMUX_CFG_REG("PDCR", 0xa4050106, 16, 2) { -		PTD7_FN, PTD7_OUT, 0, PTD7_IN, -		PTD6_FN, PTD6_OUT, 0, PTD6_IN, -		PTD5_FN, PTD5_OUT, 0, PTD5_IN, -		PTD4_FN, PTD4_OUT, 0, PTD4_IN, -		PTD3_FN, PTD3_OUT, 0, PTD3_IN, -		PTD2_FN, PTD2_OUT, 0, PTD2_IN, -		PTD1_FN, PTD1_OUT, 0, PTD1_IN, -		PTD0_FN, PTD0_OUT, 0, PTD0_IN } -	}, -	{ PINMUX_CFG_REG("PECR", 0xa4050108, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTE5_FN, PTE5_OUT, 0, PTE5_IN, -		PTE4_FN, PTE4_OUT, 0, PTE4_IN, -		PTE3_FN, PTE3_OUT, 0, PTE3_IN, -		PTE2_FN, PTE2_OUT, 0, PTE2_IN, -		PTE1_FN, PTE1_OUT, 0, PTE1_IN, -		PTE0_FN, PTE0_OUT, 0, PTE0_IN } -	}, -	{ PINMUX_CFG_REG("PFCR", 0xa405010a, 16, 2) { -		PTF7_FN, PTF7_OUT, 0, PTF7_IN, -		PTF6_FN, PTF6_OUT, 0, PTF6_IN, -		PTF5_FN, PTF5_OUT, 0, PTF5_IN, -		PTF4_FN, PTF4_OUT, 0, PTF4_IN, -		PTF3_FN, PTF3_OUT, 0, PTF3_IN, -		PTF2_FN, PTF2_OUT, 0, PTF2_IN, -		PTF1_FN, PTF1_OUT, 0, PTF1_IN, -		PTF0_FN, PTF0_OUT, 0, PTF0_IN } -	}, -	{ PINMUX_CFG_REG("PGCR", 0xa405010c, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTG5_FN, PTG5_OUT, 0, 0, -		PTG4_FN, PTG4_OUT, 0, 0, -		PTG3_FN, PTG3_OUT, 0, 0, -		PTG2_FN, PTG2_OUT, 0, 0, -		PTG1_FN, PTG1_OUT, 0, 0, -		PTG0_FN, PTG0_OUT, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PHCR", 0xa405010e, 16, 2) { -		PTH7_FN, PTH7_OUT, 0, PTH7_IN, -		PTH6_FN, PTH6_OUT, 0, PTH6_IN, -		PTH5_FN, PTH5_OUT, 0, PTH5_IN, -		PTH4_FN, PTH4_OUT, 0, PTH4_IN, -		PTH3_FN, PTH3_OUT, 0, PTH3_IN, -		PTH2_FN, PTH2_OUT, 0, PTH2_IN, -		PTH1_FN, PTH1_OUT, 0, PTH1_IN, -		PTH0_FN, PTH0_OUT, 0, PTH0_IN } -	}, -	{ PINMUX_CFG_REG("PJCR", 0xa4050110, 16, 2) { -		PTJ7_FN, PTJ7_OUT, 0, 0, -		0, 0, 0, 0, -		PTJ5_FN, PTJ5_OUT, 0, 0, -		0, 0, 0, 0, -		PTJ3_FN, PTJ3_OUT, 0, PTJ3_IN, -		PTJ2_FN, PTJ2_OUT, 0, PTJ2_IN, -		PTJ1_FN, PTJ1_OUT, 0, PTJ1_IN, -		PTJ0_FN, PTJ0_OUT, 0, PTJ0_IN } -	}, -	{ PINMUX_CFG_REG("PKCR", 0xa4050112, 16, 2) { -		PTK7_FN, PTK7_OUT, 0, PTK7_IN, -		PTK6_FN, PTK6_OUT, 0, PTK6_IN, -		PTK5_FN, PTK5_OUT, 0, PTK5_IN, -		PTK4_FN, PTK4_OUT, 0, PTK4_IN, -		PTK3_FN, PTK3_OUT, 0, PTK3_IN, -		PTK2_FN, PTK2_OUT, 0, PTK2_IN, -		PTK1_FN, PTK1_OUT, 0, PTK1_IN, -		PTK0_FN, PTK0_OUT, 0, PTK0_IN } +static struct resource sh7723_pfc_resources[] = { +	[0] = { +		.start	= 0xa4050100, +		.end	= 0xa405016f, +		.flags	= IORESOURCE_MEM,  	}, -	{ PINMUX_CFG_REG("PLCR", 0xa4050114, 16, 2) { -		PTL7_FN, PTL7_OUT, 0, PTL7_IN, -		PTL6_FN, PTL6_OUT, 0, PTL6_IN, -		PTL5_FN, PTL5_OUT, 0, PTL5_IN, -		PTL4_FN, PTL4_OUT, 0, PTL4_IN, -		PTL3_FN, PTL3_OUT, 0, PTL3_IN, -		PTL2_FN, PTL2_OUT, 0, PTL2_IN, -		PTL1_FN, PTL1_OUT, 0, PTL1_IN, -		PTL0_FN, PTL0_OUT, 0, PTL0_IN } -	}, -	{ PINMUX_CFG_REG("PMCR", 0xa4050116, 16, 2) { -		PTM7_FN, PTM7_OUT, 0, PTM7_IN, -		PTM6_FN, PTM6_OUT, 0, PTM6_IN, -		PTM5_FN, PTM5_OUT, 0, PTM5_IN, -		PTM4_FN, PTM4_OUT, 0, PTM4_IN, -		PTM3_FN, PTM3_OUT, 0, PTM3_IN, -		PTM2_FN, PTM2_OUT, 0, PTM2_IN, -		PTM1_FN, PTM1_OUT, 0, PTM1_IN, -		PTM0_FN, PTM0_OUT, 0, PTM0_IN } -	}, -	{ PINMUX_CFG_REG("PNCR", 0xa4050118, 16, 2) { -		PTN7_FN, PTN7_OUT, 0, PTN7_IN, -		PTN6_FN, PTN6_OUT, 0, PTN6_IN, -		PTN5_FN, PTN5_OUT, 0, PTN5_IN, -		PTN4_FN, PTN4_OUT, 0, PTN4_IN, -		PTN3_FN, PTN3_OUT, 0, PTN3_IN, -		PTN2_FN, PTN2_OUT, 0, PTN2_IN, -		PTN1_FN, PTN1_OUT, 0, PTN1_IN, -		PTN0_FN, PTN0_OUT, 0, PTN0_IN } -	}, -	{ PINMUX_CFG_REG("PQCR", 0xa405011a, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTQ3_FN, 0, 0, PTQ3_IN, -		PTQ2_FN, 0, 0, PTQ2_IN, -		PTQ1_FN, 0, 0, PTQ1_IN, -		PTQ0_FN, 0, 0, PTQ0_IN } -	}, -	{ PINMUX_CFG_REG("PRCR", 0xa405011c, 16, 2) { -		PTR7_FN, PTR7_OUT, 0, PTR7_IN, -		PTR6_FN, PTR6_OUT, 0, PTR6_IN, -		PTR5_FN, PTR5_OUT, 0, PTR5_IN, -		PTR4_FN, PTR4_OUT, 0, PTR4_IN, -		PTR3_FN, 0, 0, PTR3_IN, -		PTR2_FN, 0, PTR2_IN_PU, PTR2_IN, -		PTR1_FN, PTR1_OUT, 0, PTR1_IN, -		PTR0_FN, PTR0_OUT, 0, PTR0_IN } -	}, -	{ PINMUX_CFG_REG("PSCR", 0xa405011e, 16, 2) { -		PTS7_FN, PTS7_OUT, 0, PTS7_IN, -		PTS6_FN, PTS6_OUT, 0, PTS6_IN, -		PTS5_FN, PTS5_OUT, 0, PTS5_IN, -		PTS4_FN, PTS4_OUT, 0, PTS4_IN, -		PTS3_FN, PTS3_OUT, 0, PTS3_IN, -		PTS2_FN, PTS2_OUT, 0, PTS2_IN, -		PTS1_FN, PTS1_OUT, 0, PTS1_IN, -		PTS0_FN, PTS0_OUT, 0, PTS0_IN } -	}, -	{ PINMUX_CFG_REG("PTCR", 0xa4050140, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTT5_FN, PTT5_OUT, 0, PTT5_IN, -		PTT4_FN, PTT4_OUT, 0, PTT4_IN, -		PTT3_FN, PTT3_OUT, 0, PTT3_IN, -		PTT2_FN, PTT2_OUT, 0, PTT2_IN, -		PTT1_FN, PTT1_OUT, 0, PTT1_IN, -		PTT0_FN, PTT0_OUT, 0, PTT0_IN } -	}, -	{ PINMUX_CFG_REG("PUCR", 0xa4050142, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTU5_FN, PTU5_OUT, 0, PTU5_IN, -		PTU4_FN, PTU4_OUT, 0, PTU4_IN, -		PTU3_FN, PTU3_OUT, 0, PTU3_IN, -		PTU2_FN, PTU2_OUT, 0, PTU2_IN, -		PTU1_FN, PTU1_OUT, 0, PTU1_IN, -		PTU0_FN, PTU0_OUT, 0, PTU0_IN } -	}, -	{ PINMUX_CFG_REG("PVCR", 0xa4050144, 16, 2) { -		PTV7_FN, PTV7_OUT, 0, PTV7_IN, -		PTV6_FN, PTV6_OUT, 0, PTV6_IN, -		PTV5_FN, PTV5_OUT, 0, PTV5_IN, -		PTV4_FN, PTV4_OUT, 0, PTV4_IN, -		PTV3_FN, PTV3_OUT, 0, PTV3_IN, -		PTV2_FN, PTV2_OUT, 0, PTV2_IN, -		PTV1_FN, PTV1_OUT, 0, PTV1_IN, -		PTV0_FN, PTV0_OUT, 0, PTV0_IN } -	}, -	{ PINMUX_CFG_REG("PWCR", 0xa4050146, 16, 2) { -		PTW7_FN, PTW7_OUT, 0, PTW7_IN, -		PTW6_FN, PTW6_OUT, 0, PTW6_IN, -		PTW5_FN, PTW5_OUT, 0, PTW5_IN, -		PTW4_FN, PTW4_OUT, 0, PTW4_IN, -		PTW3_FN, PTW3_OUT, 0, PTW3_IN, -		PTW2_FN, PTW2_OUT, 0, PTW2_IN, -		PTW1_FN, PTW1_OUT, 0, PTW1_IN, -		PTW0_FN, PTW0_OUT, 0, PTW0_IN } -	}, -	{ PINMUX_CFG_REG("PXCR", 0xa4050148, 16, 2) { -		PTX7_FN, PTX7_OUT, 0, PTX7_IN, -		PTX6_FN, PTX6_OUT, 0, PTX6_IN, -		PTX5_FN, PTX5_OUT, 0, PTX5_IN, -		PTX4_FN, PTX4_OUT, 0, PTX4_IN, -		PTX3_FN, PTX3_OUT, 0, PTX3_IN, -		PTX2_FN, PTX2_OUT, 0, PTX2_IN, -		PTX1_FN, PTX1_OUT, 0, PTX1_IN, -		PTX0_FN, PTX0_OUT, 0, PTX0_IN } -	}, -	{ PINMUX_CFG_REG("PYCR", 0xa405014a, 16, 2) { -		PTY7_FN, PTY7_OUT, 0, PTY7_IN, -		PTY6_FN, PTY6_OUT, 0, PTY6_IN, -		PTY5_FN, PTY5_OUT, 0, PTY5_IN, -		PTY4_FN, PTY4_OUT, 0, PTY4_IN, -		PTY3_FN, PTY3_OUT, 0, PTY3_IN, -		PTY2_FN, PTY2_OUT, 0, PTY2_IN, -		PTY1_FN, PTY1_OUT, 0, PTY1_IN, -		PTY0_FN, PTY0_OUT, 0, PTY0_IN } -	}, -	{ PINMUX_CFG_REG("PZCR", 0xa405014c, 16, 2) { -		PTZ7_FN, PTZ7_OUT, 0, PTZ7_IN, -		PTZ6_FN, PTZ6_OUT, 0, PTZ6_IN, -		PTZ5_FN, PTZ5_OUT, 0, PTZ5_IN, -		PTZ4_FN, PTZ4_OUT, 0, PTZ4_IN, -		PTZ3_FN, PTZ3_OUT, 0, PTZ3_IN, -		PTZ2_FN, PTZ2_OUT, 0, PTZ2_IN, -		PTZ1_FN, PTZ1_OUT, 0, PTZ1_IN, -		PTZ0_FN, PTZ0_OUT, 0, PTZ0_IN } -	}, -	{ PINMUX_CFG_REG("PSELA", 0xa405014e, 16, 2) { -		PSA15_PSA14_FN1, PSA15_PSA14_FN2, 0, 0, -		PSA13_PSA12_FN1, PSA13_PSA12_FN2, 0, 0, -		PSA11_PSA10_FN1, PSA11_PSA10_FN2, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PSA5_PSA4_FN1, PSA5_PSA4_FN2, PSA5_PSA4_FN3, 0, -		PSA3_PSA2_FN1, PSA3_PSA2_FN2, 0, 0, -		0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PSELB", 0xa4050150, 16, 2) { -		PSB15_PSB14_FN1, PSB15_PSB14_FN2, 0, 0, -		PSB13_PSB12_LCDC_RGB, PSB13_PSB12_LCDC_SYS, 0, 0, -		0, 0, 0, 0, -		PSB9_PSB8_FN1, PSB9_PSB8_FN2, PSB9_PSB8_FN3, 0, -		PSB7_PSB6_FN1, PSB7_PSB6_FN2, 0, 0, -		PSB5_PSB4_FN1, PSB5_PSB4_FN2, 0, 0, -		PSB3_PSB2_FN1, PSB3_PSB2_FN2, 0, 0, -		0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PSELC", 0xa4050152, 16, 2) { -		PSC15_PSC14_FN1, PSC15_PSC14_FN2, 0, 0, -		PSC13_PSC12_FN1, PSC13_PSC12_FN2, 0, 0, -		PSC11_PSC10_FN1, PSC11_PSC10_FN2, PSC11_PSC10_FN3, 0, -		PSC9_PSC8_FN1, PSC9_PSC8_FN2, 0, 0, -		PSC7_PSC6_FN1, PSC7_PSC6_FN2, PSC7_PSC6_FN3, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PSELD", 0xa4050154, 16, 2) { -		PSD15_PSD14_FN1, PSD15_PSD14_FN2, 0, 0, -		PSD13_PSD12_FN1, PSD13_PSD12_FN2, 0, 0, -		PSD11_PSD10_FN1, PSD11_PSD10_FN2, PSD11_PSD10_FN3, 0, -		PSD9_PSD8_FN1, PSD9_PSD8_FN2, 0, 0, -		PSD7_PSD6_FN1, PSD7_PSD6_FN2, 0, 0, -		PSD5_PSD4_FN1, PSD5_PSD4_FN2, 0, 0, -		PSD3_PSD2_FN1, PSD3_PSD2_FN2, 0, 0, -		PSD1_PSD0_FN1, PSD1_PSD0_FN2, 0, 0 } -	}, -	{} -}; - -static struct pinmux_data_reg pinmux_data_regs[] = { -	{ PINMUX_DATA_REG("PADR", 0xa4050120, 8) { -		PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -		PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA } -	}, -	{ PINMUX_DATA_REG("PBDR", 0xa4050122, 8) { -		PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -		PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA } -	}, -	{ PINMUX_DATA_REG("PCDR", 0xa4050124, 8) { -		PTC7_DATA, PTC6_DATA, PTC5_DATA, PTC4_DATA, -		PTC3_DATA, PTC2_DATA, PTC1_DATA, PTC0_DATA } -	}, -	{ PINMUX_DATA_REG("PDDR", 0xa4050126, 8) { -		PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -		PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA } -	}, -	{ PINMUX_DATA_REG("PEDR", 0xa4050128, 8) { -		0, 0, PTE5_DATA, PTE4_DATA, -		PTE3_DATA, PTE2_DATA, PTE1_DATA, PTE0_DATA } -	}, -	{ PINMUX_DATA_REG("PFDR", 0xa405012a, 8) { -		PTF7_DATA, PTF6_DATA, PTF5_DATA, PTF4_DATA, -		PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA } -	}, -	{ PINMUX_DATA_REG("PGDR", 0xa405012c, 8) { -		0, 0, PTG5_DATA, PTG4_DATA, -		PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA } -	}, -	{ PINMUX_DATA_REG("PHDR", 0xa405012e, 8) { -		PTH7_DATA, PTH6_DATA, PTH5_DATA, PTH4_DATA, -		PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA } -	}, -	{ PINMUX_DATA_REG("PJDR", 0xa4050130, 8) { -		PTJ7_DATA, 0, PTJ5_DATA, 0, -		PTJ3_DATA, PTJ2_DATA, PTJ1_DATA, PTJ0_DATA } -	}, -	{ PINMUX_DATA_REG("PKDR", 0xa4050132, 8) { -		PTK7_DATA, PTK6_DATA, PTK5_DATA, PTK4_DATA, -		PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA } -	}, -	{ PINMUX_DATA_REG("PLDR", 0xa4050134, 8) { -		PTL7_DATA, PTL6_DATA, PTL5_DATA, PTL4_DATA, -		PTL3_DATA, PTL2_DATA, PTL1_DATA, PTL0_DATA } -	}, -	{ PINMUX_DATA_REG("PMDR", 0xa4050136, 8) { -		PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -		PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA } -	}, -	{ PINMUX_DATA_REG("PNDR", 0xa4050138, 8) { -		PTN7_DATA, PTN6_DATA, PTN5_DATA, PTN4_DATA, -		PTN3_DATA, PTN2_DATA, PTN1_DATA, PTN0_DATA } -	}, -	{ PINMUX_DATA_REG("PQDR", 0xa405013a, 8) { -		0, 0, 0, 0, -		PTQ3_DATA, PTQ2_DATA, PTQ1_DATA, PTQ0_DATA } -	}, -	{ PINMUX_DATA_REG("PRDR", 0xa405013c, 8) { -		PTR7_DATA, PTR6_DATA, PTR5_DATA, PTR4_DATA, -		PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA } -	}, -	{ PINMUX_DATA_REG("PSDR", 0xa405013e, 8) { -		PTS7_DATA, PTS6_DATA, PTS5_DATA, PTS4_DATA, -		PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA } -	}, -	{ PINMUX_DATA_REG("PTDR", 0xa4050160, 8) { -		0, 0, PTT5_DATA, PTT4_DATA, -		PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA } -	}, -	{ PINMUX_DATA_REG("PUDR", 0xa4050162, 8) { -		0, 0, PTU5_DATA, PTU4_DATA, -		PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA } -	}, -	{ PINMUX_DATA_REG("PVDR", 0xa4050164, 8) { -		PTV7_DATA, PTV6_DATA, PTV5_DATA, PTV4_DATA, -		PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA } -	}, -	{ PINMUX_DATA_REG("PWDR", 0xa4050166, 8) { -		PTW7_DATA, PTW6_DATA, PTW5_DATA, PTW4_DATA, -		PTW3_DATA, PTW2_DATA, PTW1_DATA, PTW0_DATA } -	}, -	{ PINMUX_DATA_REG("PXDR", 0xa4050168, 8) { -		PTX7_DATA, PTX6_DATA, PTX5_DATA, PTX4_DATA, -		PTX3_DATA, PTX2_DATA, PTX1_DATA, PTX0_DATA } -	}, -	{ PINMUX_DATA_REG("PYDR", 0xa405016a, 8) { -		PTY7_DATA, PTY6_DATA, PTY5_DATA, PTY4_DATA, -		PTY3_DATA, PTY2_DATA, PTY1_DATA, PTY0_DATA } -	}, -	{ PINMUX_DATA_REG("PZDR", 0xa405016c, 8) { -		PTZ7_DATA, PTZ6_DATA, PTZ5_DATA, PTZ4_DATA, -		PTZ3_DATA, PTZ2_DATA, PTZ1_DATA, PTZ0_DATA } -	}, -	{ }, -}; - -static struct pinmux_info sh7723_pinmux_info = { -	.name = "sh7723_pfc", -	.reserved_id = PINMUX_RESERVED, -	.data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, -	.input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, -	.input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, -	.output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, -	.mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, -	.function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, - -	.first_gpio = GPIO_PTA7, -	.last_gpio = GPIO_FN_IDEA0, - -	.gpios = pinmux_gpios, -	.cfg_regs = pinmux_config_regs, -	.data_regs = pinmux_data_regs, - -	.gpio_data = pinmux_data, -	.gpio_data_size = ARRAY_SIZE(pinmux_data),  };  static int __init plat_pinmux_setup(void)  { -	return register_pinmux(&sh7723_pinmux_info); +	return sh_pfc_register("pfc-sh7723", sh7723_pfc_resources, +			       ARRAY_SIZE(sh7723_pfc_resources));  } -  arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh4a/pinmux-sh7724.c b/arch/sh/kernel/cpu/sh4a/pinmux-sh7724.c index 1af0f958637..63be4749e34 100644 --- a/arch/sh/kernel/cpu/sh4a/pinmux-sh7724.c +++ b/arch/sh/kernel/cpu/sh4a/pinmux-sh7724.c @@ -13,2218 +13,23 @@   * for more details.   */ +#include <linux/bug.h>  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/gpio.h> -#include <cpu/sh7724.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> -enum { -	PINMUX_RESERVED = 0, - -	PINMUX_DATA_BEGIN, -	PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -	PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA, -	PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -	PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA, -	PTC7_DATA, PTC6_DATA, PTC5_DATA, PTC4_DATA, -	PTC3_DATA, PTC2_DATA, PTC1_DATA, PTC0_DATA, -	PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -	PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA, -	PTE7_DATA, PTE6_DATA, PTE5_DATA, PTE4_DATA, -	PTE3_DATA, PTE2_DATA, PTE1_DATA, PTE0_DATA, -	PTF7_DATA, PTF6_DATA, PTF5_DATA, PTF4_DATA, -	PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA, -			      PTG5_DATA, PTG4_DATA, -	PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA, -	PTH7_DATA, PTH6_DATA, PTH5_DATA, PTH4_DATA, -	PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA, -	PTJ7_DATA, PTJ6_DATA, PTJ5_DATA, -	PTJ3_DATA, PTJ2_DATA, PTJ1_DATA, PTJ0_DATA, -	PTK7_DATA, PTK6_DATA, PTK5_DATA, PTK4_DATA, -	PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA, -	PTL7_DATA, PTL6_DATA, PTL5_DATA, PTL4_DATA, -	PTL3_DATA, PTL2_DATA, PTL1_DATA, PTL0_DATA, -	PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -	PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA, -	PTN7_DATA, PTN6_DATA, PTN5_DATA, PTN4_DATA, -	PTN3_DATA, PTN2_DATA, PTN1_DATA, PTN0_DATA, -	PTQ7_DATA, PTQ6_DATA, PTQ5_DATA, PTQ4_DATA, -	PTQ3_DATA, PTQ2_DATA, PTQ1_DATA, PTQ0_DATA, -	PTR7_DATA, PTR6_DATA, PTR5_DATA, PTR4_DATA, -	PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA, -		   PTS6_DATA, PTS5_DATA, PTS4_DATA, -	PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA, -	PTT7_DATA, PTT6_DATA, PTT5_DATA, PTT4_DATA, -	PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA, -	PTU7_DATA, PTU6_DATA, PTU5_DATA, PTU4_DATA, -	PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA, -	PTV7_DATA, PTV6_DATA, PTV5_DATA, PTV4_DATA, -	PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA, -	PTW7_DATA, PTW6_DATA, PTW5_DATA, PTW4_DATA, -	PTW3_DATA, PTW2_DATA, PTW1_DATA, PTW0_DATA, -	PTX7_DATA, PTX6_DATA, PTX5_DATA, PTX4_DATA, -	PTX3_DATA, PTX2_DATA, PTX1_DATA, PTX0_DATA, -	PTY7_DATA, PTY6_DATA, PTY5_DATA, PTY4_DATA, -	PTY3_DATA, PTY2_DATA, PTY1_DATA, PTY0_DATA, -	PTZ7_DATA, PTZ6_DATA, PTZ5_DATA, PTZ4_DATA, -	PTZ3_DATA, PTZ2_DATA, PTZ1_DATA, PTZ0_DATA, -	PINMUX_DATA_END, - -	PINMUX_INPUT_BEGIN, -	PTA7_IN, PTA6_IN, PTA5_IN, PTA4_IN, -	PTA3_IN, PTA2_IN, PTA1_IN, PTA0_IN, -	PTB7_IN, PTB6_IN, PTB5_IN, PTB4_IN, -	PTB3_IN, PTB2_IN, PTB1_IN, PTB0_IN, -	PTC7_IN, PTC6_IN, PTC5_IN, PTC4_IN, -	PTC3_IN, PTC2_IN, PTC1_IN, PTC0_IN, -	PTD7_IN, PTD6_IN, PTD5_IN, PTD4_IN, -	PTD3_IN, PTD2_IN, PTD1_IN, PTD0_IN, -	PTE7_IN, PTE6_IN, PTE5_IN, PTE4_IN, -	PTE3_IN, PTE2_IN, PTE1_IN, PTE0_IN, -	PTF7_IN, PTF6_IN, PTF5_IN, PTF4_IN, -	PTF3_IN, PTF2_IN, PTF1_IN, PTF0_IN, -	PTH7_IN, PTH6_IN, PTH5_IN, PTH4_IN, -	PTH3_IN, PTH2_IN, PTH1_IN, PTH0_IN, -	PTJ3_IN, PTJ2_IN, PTJ1_IN, PTJ0_IN, -	PTK7_IN, PTK6_IN, PTK5_IN, PTK4_IN, -	PTK3_IN, PTK2_IN, PTK1_IN, PTK0_IN, -	PTL7_IN, PTL6_IN, PTL5_IN, PTL4_IN, -	PTL3_IN, PTL2_IN, PTL1_IN, PTL0_IN, -	PTM7_IN, PTM6_IN, PTM5_IN, PTM4_IN, -	PTM3_IN, PTM2_IN, PTM1_IN, PTM0_IN, -	PTN7_IN, PTN6_IN, PTN5_IN, PTN4_IN, -	PTN3_IN, PTN2_IN, PTN1_IN, PTN0_IN, -	PTQ7_IN, PTQ6_IN, PTQ5_IN, PTQ4_IN, -	PTQ3_IN, PTQ2_IN, PTQ1_IN, PTQ0_IN, -	PTR7_IN, PTR6_IN, PTR5_IN, PTR4_IN, -	PTR3_IN, PTR2_IN, PTR1_IN, PTR0_IN, -		 PTS6_IN, PTS5_IN, PTS4_IN, -	PTS3_IN, PTS2_IN, PTS1_IN, PTS0_IN, -	PTT7_IN, PTT6_IN, PTT5_IN, PTT4_IN, -	PTT3_IN, PTT2_IN, PTT1_IN, PTT0_IN, -	PTU7_IN, PTU6_IN, PTU5_IN, PTU4_IN, -	PTU3_IN, PTU2_IN, PTU1_IN, PTU0_IN, -	PTV7_IN, PTV6_IN, PTV5_IN, PTV4_IN, -	PTV3_IN, PTV2_IN, PTV1_IN, PTV0_IN, -	PTW7_IN, PTW6_IN, PTW5_IN, PTW4_IN, -	PTW3_IN, PTW2_IN, PTW1_IN, PTW0_IN, -	PTX7_IN, PTX6_IN, PTX5_IN, PTX4_IN, -	PTX3_IN, PTX2_IN, PTX1_IN, PTX0_IN, -	PTY7_IN, PTY6_IN, PTY5_IN, PTY4_IN, -	PTY3_IN, PTY2_IN, PTY1_IN, PTY0_IN, -	PTZ7_IN, PTZ6_IN, PTZ5_IN, PTZ4_IN, -	PTZ3_IN, PTZ2_IN, PTZ1_IN, PTZ0_IN, -	PINMUX_INPUT_END, - -	PINMUX_INPUT_PULLUP_BEGIN, -	PTA7_IN_PU, PTA6_IN_PU, PTA5_IN_PU, PTA4_IN_PU, -	PTA3_IN_PU, PTA2_IN_PU, PTA1_IN_PU, PTA0_IN_PU, -	PTB7_IN_PU, PTB6_IN_PU, PTB5_IN_PU, PTB4_IN_PU, -	PTB3_IN_PU, PTB2_IN_PU, PTB1_IN_PU, PTB0_IN_PU, -	PTC7_IN_PU, PTC6_IN_PU, PTC5_IN_PU, PTC4_IN_PU, -	PTC3_IN_PU, PTC2_IN_PU, PTC1_IN_PU, PTC0_IN_PU, -	PTD7_IN_PU, PTD6_IN_PU, PTD5_IN_PU, PTD4_IN_PU, -	PTD3_IN_PU, PTD2_IN_PU, PTD1_IN_PU, PTD0_IN_PU, -	PTE7_IN_PU, PTE6_IN_PU, PTE5_IN_PU, PTE4_IN_PU, -	PTE3_IN_PU, PTE2_IN_PU, PTE1_IN_PU, PTE0_IN_PU, -	PTF7_IN_PU, PTF6_IN_PU, PTF5_IN_PU, PTF4_IN_PU, -	PTF3_IN_PU, PTF2_IN_PU, PTF1_IN_PU, PTF0_IN_PU, -	PTH7_IN_PU, PTH6_IN_PU, PTH5_IN_PU, PTH4_IN_PU, -	PTH3_IN_PU, PTH2_IN_PU, PTH1_IN_PU, PTH0_IN_PU, -	PTJ3_IN_PU, PTJ2_IN_PU, PTJ1_IN_PU, PTJ0_IN_PU, -	PTK7_IN_PU, PTK6_IN_PU, PTK5_IN_PU, PTK4_IN_PU, -	PTK3_IN_PU, PTK2_IN_PU, PTK1_IN_PU, PTK0_IN_PU, -	PTL7_IN_PU, PTL6_IN_PU, PTL5_IN_PU, PTL4_IN_PU, -	PTL3_IN_PU, PTL2_IN_PU, PTL1_IN_PU, PTL0_IN_PU, -	PTM7_IN_PU, PTM6_IN_PU, PTM5_IN_PU, PTM4_IN_PU, -	PTM3_IN_PU, PTM2_IN_PU, PTM1_IN_PU, PTM0_IN_PU, -	PTN7_IN_PU, PTN6_IN_PU, PTN5_IN_PU, PTN4_IN_PU, -	PTN3_IN_PU, PTN2_IN_PU, PTN1_IN_PU, PTN0_IN_PU, -	PTQ7_IN_PU, PTQ6_IN_PU, PTQ5_IN_PU, PTQ4_IN_PU, -	PTQ3_IN_PU, PTQ2_IN_PU, PTQ1_IN_PU, PTQ0_IN_PU, -	PTR7_IN_PU, PTR6_IN_PU, PTR5_IN_PU, PTR4_IN_PU, -	PTR3_IN_PU, PTR2_IN_PU, PTR1_IN_PU, PTR0_IN_PU, -		    PTS6_IN_PU, PTS5_IN_PU, PTS4_IN_PU, -	PTS3_IN_PU, PTS2_IN_PU, PTS1_IN_PU, PTS0_IN_PU, -	PTT7_IN_PU, PTT6_IN_PU, PTT5_IN_PU, PTT4_IN_PU, -	PTT3_IN_PU, PTT2_IN_PU, PTT1_IN_PU, PTT0_IN_PU, -	PTU7_IN_PU, PTU6_IN_PU, PTU5_IN_PU, PTU4_IN_PU, -	PTU3_IN_PU, PTU2_IN_PU, PTU1_IN_PU, PTU0_IN_PU, -	PTV7_IN_PU, PTV6_IN_PU, PTV5_IN_PU, PTV4_IN_PU, -	PTV3_IN_PU, PTV2_IN_PU, PTV1_IN_PU, PTV0_IN_PU, -	PTW7_IN_PU, PTW6_IN_PU, PTW5_IN_PU, PTW4_IN_PU, -	PTW3_IN_PU, PTW2_IN_PU, PTW1_IN_PU, PTW0_IN_PU, -	PTX7_IN_PU, PTX6_IN_PU, PTX5_IN_PU, PTX4_IN_PU, -	PTX3_IN_PU, PTX2_IN_PU, PTX1_IN_PU, PTX0_IN_PU, -	PTY7_IN_PU, PTY6_IN_PU, PTY5_IN_PU, PTY4_IN_PU, -	PTY3_IN_PU, PTY2_IN_PU, PTY1_IN_PU, PTY0_IN_PU, -	PTZ7_IN_PU, PTZ6_IN_PU, PTZ5_IN_PU, PTZ4_IN_PU, -	PTZ3_IN_PU, PTZ2_IN_PU, PTZ1_IN_PU, PTZ0_IN_PU, -	PINMUX_INPUT_PULLUP_END, - -	PINMUX_OUTPUT_BEGIN, -	PTA7_OUT, PTA6_OUT, PTA5_OUT, PTA4_OUT, -	PTA3_OUT, PTA2_OUT, PTA1_OUT, PTA0_OUT, -	PTB7_OUT, PTB6_OUT, PTB5_OUT, PTB4_OUT, -	PTB3_OUT, PTB2_OUT, PTB1_OUT, PTB0_OUT, -	PTC7_OUT, PTC6_OUT, PTC5_OUT, PTC4_OUT, -	PTC3_OUT, PTC2_OUT, PTC1_OUT, PTC0_OUT, -	PTD7_OUT, PTD6_OUT, PTD5_OUT, PTD4_OUT, -	PTD3_OUT, PTD2_OUT, PTD1_OUT, PTD0_OUT, -	PTE7_OUT, PTE6_OUT, PTE5_OUT, PTE4_OUT, -	PTE3_OUT, PTE2_OUT, PTE1_OUT, PTE0_OUT, -	PTF7_OUT, PTF6_OUT, PTF5_OUT, PTF4_OUT, -	PTF3_OUT, PTF2_OUT, PTF1_OUT, PTF0_OUT, -			    PTG5_OUT, PTG4_OUT, -	PTG3_OUT, PTG2_OUT, PTG1_OUT, PTG0_OUT, -	PTH7_OUT, PTH6_OUT, PTH5_OUT, PTH4_OUT, -	PTH3_OUT, PTH2_OUT, PTH1_OUT, PTH0_OUT, -	PTJ7_OUT, PTJ6_OUT, PTJ5_OUT, -	PTJ3_OUT, PTJ2_OUT, PTJ1_OUT, PTJ0_OUT, -	PTK7_OUT, PTK6_OUT, PTK5_OUT, PTK4_OUT, -	PTK3_OUT, PTK2_OUT, PTK1_OUT, PTK0_OUT, -	PTL7_OUT, PTL6_OUT, PTL5_OUT, PTL4_OUT, -	PTL3_OUT, PTL2_OUT, PTL1_OUT, PTL0_OUT, -	PTM7_OUT, PTM6_OUT, PTM5_OUT, PTM4_OUT, -	PTM3_OUT, PTM2_OUT, PTM1_OUT, PTM0_OUT, -	PTN7_OUT, PTN6_OUT, PTN5_OUT, PTN4_OUT, -	PTN3_OUT, PTN2_OUT, PTN1_OUT, PTN0_OUT, -	PTQ7_OUT, PTQ6_OUT, PTQ5_OUT, PTQ4_OUT, -	PTQ3_OUT, PTQ2_OUT, PTQ1_OUT, PTQ0_OUT, -	PTR7_OUT, PTR6_OUT, PTR5_OUT, PTR4_OUT, -			    PTR1_OUT, PTR0_OUT, -		  PTS6_OUT, PTS5_OUT, PTS4_OUT, -	PTS3_OUT, PTS2_OUT, PTS1_OUT, PTS0_OUT, -	PTT7_OUT, PTT6_OUT, PTT5_OUT, PTT4_OUT, -	PTT3_OUT, PTT2_OUT, PTT1_OUT, PTT0_OUT, -	PTU7_OUT, PTU6_OUT, PTU5_OUT, PTU4_OUT, -	PTU3_OUT, PTU2_OUT, PTU1_OUT, PTU0_OUT, -	PTV7_OUT, PTV6_OUT, PTV5_OUT, PTV4_OUT, -	PTV3_OUT, PTV2_OUT, PTV1_OUT, PTV0_OUT, -	PTW7_OUT, PTW6_OUT, PTW5_OUT, PTW4_OUT, -	PTW3_OUT, PTW2_OUT, PTW1_OUT, PTW0_OUT, -	PTX7_OUT, PTX6_OUT, PTX5_OUT, PTX4_OUT, -	PTX3_OUT, PTX2_OUT, PTX1_OUT, PTX0_OUT, -	PTY7_OUT, PTY6_OUT, PTY5_OUT, PTY4_OUT, -	PTY3_OUT, PTY2_OUT, PTY1_OUT, PTY0_OUT, -	PTZ7_OUT, PTZ6_OUT, PTZ5_OUT, PTZ4_OUT, -	PTZ3_OUT, PTZ2_OUT, PTZ1_OUT, PTZ0_OUT, -	PINMUX_OUTPUT_END, - -	PINMUX_FUNCTION_BEGIN, -	PTA7_FN, PTA6_FN, PTA5_FN, PTA4_FN, -	PTA3_FN, PTA2_FN, PTA1_FN, PTA0_FN, -	PTB7_FN, PTB6_FN, PTB5_FN, PTB4_FN, -	PTB3_FN, PTB2_FN, PTB1_FN, PTB0_FN, -	PTC7_FN, PTC6_FN, PTC5_FN, PTC4_FN, -	PTC3_FN, PTC2_FN, PTC1_FN, PTC0_FN, -	PTD7_FN, PTD6_FN, PTD5_FN, PTD4_FN, -	PTD3_FN, PTD2_FN, PTD1_FN, PTD0_FN, -	PTE7_FN, PTE6_FN, PTE5_FN, PTE4_FN, -	PTE3_FN, PTE2_FN, PTE1_FN, PTE0_FN, -	PTF7_FN, PTF6_FN, PTF5_FN, PTF4_FN, -	PTF3_FN, PTF2_FN, PTF1_FN, PTF0_FN, -			  PTG5_FN, PTG4_FN, -	PTG3_FN, PTG2_FN, PTG1_FN, PTG0_FN, -	PTH7_FN, PTH6_FN, PTH5_FN, PTH4_FN, -	PTH3_FN, PTH2_FN, PTH1_FN, PTH0_FN, -	PTJ7_FN, PTJ6_FN, PTJ5_FN, -	PTJ3_FN, PTJ2_FN, PTJ1_FN, PTJ0_FN, -	PTK7_FN, PTK6_FN, PTK5_FN, PTK4_FN, -	PTK3_FN, PTK2_FN, PTK1_FN, PTK0_FN, -	PTL7_FN, PTL6_FN, PTL5_FN, PTL4_FN, -	PTL3_FN, PTL2_FN, PTL1_FN, PTL0_FN, -	PTM7_FN, PTM6_FN, PTM5_FN, PTM4_FN, -	PTM3_FN, PTM2_FN, PTM1_FN, PTM0_FN, -	PTN7_FN, PTN6_FN, PTN5_FN, PTN4_FN, -	PTN3_FN, PTN2_FN, PTN1_FN, PTN0_FN, -	PTQ7_FN, PTQ6_FN, PTQ5_FN, PTQ4_FN, -	PTQ3_FN, PTQ2_FN, PTQ1_FN, PTQ0_FN, -	PTR7_FN, PTR6_FN, PTR5_FN, PTR4_FN, -	PTR3_FN, PTR2_FN, PTR1_FN, PTR0_FN, -		 PTS6_FN, PTS5_FN, PTS4_FN, -	PTS3_FN, PTS2_FN, PTS1_FN, PTS0_FN, -	PTT7_FN, PTT6_FN, PTT5_FN, PTT4_FN, -	PTT3_FN, PTT2_FN, PTT1_FN, PTT0_FN, -	PTU7_FN, PTU6_FN, PTU5_FN, PTU4_FN, -	PTU3_FN, PTU2_FN, PTU1_FN, PTU0_FN, -	PTV7_FN, PTV6_FN, PTV5_FN, PTV4_FN, -	PTV3_FN, PTV2_FN, PTV1_FN, PTV0_FN, -	PTW7_FN, PTW6_FN, PTW5_FN, PTW4_FN, -	PTW3_FN, PTW2_FN, PTW1_FN, PTW0_FN, -	PTX7_FN, PTX6_FN, PTX5_FN, PTX4_FN, -	PTX3_FN, PTX2_FN, PTX1_FN, PTX0_FN, -	PTY7_FN, PTY6_FN, PTY5_FN, PTY4_FN, -	PTY3_FN, PTY2_FN, PTY1_FN, PTY0_FN, -	PTZ7_FN, PTZ6_FN, PTZ5_FN, PTZ4_FN, -	PTZ3_FN, PTZ2_FN, PTZ1_FN, PTZ0_FN, - - -	PSA15_0, PSA15_1, -	PSA14_0, PSA14_1, -	PSA13_0, PSA13_1, -	PSA12_0, PSA12_1, -	PSA10_0, PSA10_1, -	PSA9_0,  PSA9_1, -	PSA8_0,  PSA8_1, -	PSA7_0,  PSA7_1, -	PSA6_0,  PSA6_1, -	PSA5_0,  PSA5_1, -	PSA3_0,  PSA3_1, -	PSA2_0,  PSA2_1, -	PSA1_0,  PSA1_1, -	PSA0_0,  PSA0_1, - -	PSB14_0, PSB14_1, -	PSB13_0, PSB13_1, -	PSB12_0, PSB12_1, -	PSB11_0, PSB11_1, -	PSB10_0, PSB10_1, -	PSB9_0,  PSB9_1, -	PSB8_0,  PSB8_1, -	PSB7_0,  PSB7_1, -	PSB6_0,  PSB6_1, -	PSB5_0,  PSB5_1, -	PSB4_0,  PSB4_1, -	PSB3_0,  PSB3_1, -	PSB2_0,  PSB2_1, -	PSB1_0,  PSB1_1, -	PSB0_0,  PSB0_1, - -	PSC15_0, PSC15_1, -	PSC14_0, PSC14_1, -	PSC13_0, PSC13_1, -	PSC12_0, PSC12_1, -	PSC11_0, PSC11_1, -	PSC10_0, PSC10_1, -	PSC9_0,  PSC9_1, -	PSC8_0,  PSC8_1, -	PSC7_0,  PSC7_1, -	PSC6_0,  PSC6_1, -	PSC5_0,  PSC5_1, -	PSC4_0,  PSC4_1, -	PSC2_0,  PSC2_1, -	PSC1_0,  PSC1_1, -	PSC0_0,  PSC0_1, - -	PSD15_0, PSD15_1, -	PSD14_0, PSD14_1, -	PSD13_0, PSD13_1, -	PSD12_0, PSD12_1, -	PSD11_0, PSD11_1, -	PSD10_0, PSD10_1, -	PSD9_0,  PSD9_1, -	PSD8_0,  PSD8_1, -	PSD7_0,  PSD7_1, -	PSD6_0,  PSD6_1, -	PSD5_0,  PSD5_1, -	PSD4_0,  PSD4_1, -	PSD3_0,  PSD3_1, -	PSD2_0,  PSD2_1, -	PSD1_0,  PSD1_1, -	PSD0_0,  PSD0_1, - -	PSE15_0, PSE15_1, -	PSE14_0, PSE14_1, -	PSE13_0, PSE13_1, -	PSE12_0, PSE12_1, -	PSE11_0, PSE11_1, -	PSE10_0, PSE10_1, -	PSE9_0,  PSE9_1, -	PSE8_0,  PSE8_1, -	PSE7_0,  PSE7_1, -	PSE6_0,  PSE6_1, -	PSE5_0,  PSE5_1, -	PSE4_0,  PSE4_1, -	PSE3_0,  PSE3_1, -	PSE2_0,  PSE2_1, -	PSE1_0,  PSE1_1, -	PSE0_0,  PSE0_1, -	PINMUX_FUNCTION_END, - -	PINMUX_MARK_BEGIN, -	/*PTA*/ -	D23_MARK,	KEYOUT2_MARK,		IDED15_MARK, -	D22_MARK,	KEYOUT1_MARK,		IDED14_MARK, -	D21_MARK,	KEYOUT0_MARK,		IDED13_MARK, -	D20_MARK,	KEYIN4_MARK,		IDED12_MARK, -	D19_MARK,	KEYIN3_MARK,		IDED11_MARK, -	D18_MARK,	KEYIN2_MARK,		IDED10_MARK, -	D17_MARK,	KEYIN1_MARK,		IDED9_MARK, -	D16_MARK,	KEYIN0_MARK,		IDED8_MARK, - -	/*PTB*/ -	D31_MARK,	TPUTO1_MARK,		IDEA1_MARK, -	D30_MARK,	TPUTO0_MARK,		IDEA0_MARK, -	D29_MARK,				IODREQ_MARK, -	D28_MARK,				IDECS0_MARK, -	D27_MARK,				IDECS1_MARK, -	D26_MARK,	KEYOUT5_IN5_MARK,	IDEIORD_MARK, -	D25_MARK,	KEYOUT4_IN6_MARK,	IDEIOWR_MARK, -	D24_MARK,	KEYOUT3_MARK,		IDEINT_MARK, - -	/*PTC*/ -	LCDD7_MARK, -	LCDD6_MARK, -	LCDD5_MARK, -	LCDD4_MARK, -	LCDD3_MARK, -	LCDD2_MARK, -	LCDD1_MARK, -	LCDD0_MARK, - -	/*PTD*/ -	LCDD15_MARK, -	LCDD14_MARK, -	LCDD13_MARK, -	LCDD12_MARK, -	LCDD11_MARK, -	LCDD10_MARK, -	LCDD9_MARK, -	LCDD8_MARK, - -	/*PTE*/ -	FSIMCKB_MARK, -	FSIMCKA_MARK, -	LCDD21_MARK,	SCIF2_L_TXD_MARK, -	LCDD20_MARK,	SCIF4_SCK_MARK, -	LCDD19_MARK,	SCIF4_RXD_MARK, -	LCDD18_MARK,	SCIF4_TXD_MARK, -	LCDD17_MARK, -	LCDD16_MARK, - -	/*PTF*/ -	LCDVSYN_MARK, -	LCDDISP_MARK,	LCDRS_MARK, -	LCDHSYN_MARK,	LCDCS_MARK, -	LCDDON_MARK, -	LCDDCK_MARK,	LCDWR_MARK, -	LCDVEPWC_MARK,	SCIF0_TXD_MARK, -	LCDD23_MARK,	SCIF2_L_SCK_MARK, -	LCDD22_MARK,	SCIF2_L_RXD_MARK, - -	/*PTG*/ -	AUDCK_MARK, -	AUDSYNC_MARK, -	AUDATA3_MARK, -	AUDATA2_MARK, -	AUDATA1_MARK, -	AUDATA0_MARK, - -	/*PTH*/ -	VIO0_VD_MARK, -	VIO0_CLK_MARK, -	VIO0_D7_MARK, -	VIO0_D6_MARK, -	VIO0_D5_MARK, -	VIO0_D4_MARK, -	VIO0_D3_MARK, -	VIO0_D2_MARK, - -	/*PTJ*/ -	PDSTATUS_MARK, -	STATUS2_MARK, -	STATUS0_MARK, -	A25_MARK,		BS_MARK, -	A24_MARK, -	A23_MARK, -	A22_MARK, - -	/*PTK*/ -	VIO1_D5_MARK,	VIO0_D13_MARK,	IDED5_MARK, -	VIO1_D4_MARK,	VIO0_D12_MARK,	IDED4_MARK, -	VIO1_D3_MARK,	VIO0_D11_MARK,	IDED3_MARK, -	VIO1_D2_MARK,	VIO0_D10_MARK,	IDED2_MARK, -	VIO1_D1_MARK,	VIO0_D9_MARK,	IDED1_MARK, -	VIO1_D0_MARK,	VIO0_D8_MARK,	IDED0_MARK, -	VIO0_FLD_MARK, -	VIO0_HD_MARK, - -	/*PTL*/ -	DV_D5_MARK,	SCIF3_V_SCK_MARK,	RMII_RXD0_MARK, -	DV_D4_MARK,	SCIF3_V_RXD_MARK,	RMII_RXD1_MARK, -	DV_D3_MARK,	SCIF3_V_TXD_MARK,	RMII_REF_CLK_MARK, -	DV_D2_MARK,	SCIF1_SCK_MARK,		RMII_TX_EN_MARK, -	DV_D1_MARK,	SCIF1_RXD_MARK,		RMII_TXD0_MARK, -	DV_D0_MARK,	SCIF1_TXD_MARK,		RMII_TXD1_MARK, -	DV_D15_MARK, -	DV_D14_MARK,	MSIOF0_MCK_MARK, - -	/*PTM*/ -	DV_D13_MARK,	MSIOF0_TSCK_MARK, -	DV_D12_MARK,	MSIOF0_RXD_MARK, -	DV_D11_MARK,	MSIOF0_TXD_MARK, -	DV_D10_MARK,	MSIOF0_TSYNC_MARK, -	DV_D9_MARK,	MSIOF0_SS1_MARK,	MSIOF0_RSCK_MARK, -	DV_D8_MARK,	MSIOF0_SS2_MARK,	MSIOF0_RSYNC_MARK, -	LCDVCPWC_MARK,	SCIF0_RXD_MARK, -	LCDRD_MARK,	SCIF0_SCK_MARK, - -	/*PTN*/ -	VIO0_D1_MARK, -	VIO0_D0_MARK, -	DV_CLKI_MARK, -	DV_CLK_MARK,	SCIF2_V_SCK_MARK, -	DV_VSYNC_MARK,	SCIF2_V_RXD_MARK, -	DV_HSYNC_MARK,	SCIF2_V_TXD_MARK, -	DV_D7_MARK,	SCIF3_V_CTS_MARK,	RMII_RX_ER_MARK, -	DV_D6_MARK,	SCIF3_V_RTS_MARK,	RMII_CRS_DV_MARK, - -	/*PTQ*/ -	D7_MARK, -	D6_MARK, -	D5_MARK, -	D4_MARK, -	D3_MARK, -	D2_MARK, -	D1_MARK, -	D0_MARK, - -	/*PTR*/ -	CS6B_CE1B_MARK, -	CS6A_CE2B_MARK, -	CS5B_CE1A_MARK, -	CS5A_CE2A_MARK, -	IOIS16_MARK,		LCDLCLK_MARK, -	WAIT_MARK, -	WE3_ICIOWR_MARK,	TPUTO3_MARK,	TPUTI3_MARK, -	WE2_ICIORD_MARK,	TPUTO2_MARK,	IDEA2_MARK, - -	/*PTS*/ -	VIO_CKO_MARK, -	VIO1_FLD_MARK,	TPUTI2_MARK,		IDEIORDY_MARK, -	VIO1_HD_MARK,	SCIF5_SCK_MARK, -	VIO1_VD_MARK,	SCIF5_RXD_MARK, -	VIO1_CLK_MARK,	SCIF5_TXD_MARK, -	VIO1_D7_MARK,	VIO0_D15_MARK,		IDED7_MARK, -	VIO1_D6_MARK,	VIO0_D14_MARK,		IDED6_MARK, - -	/*PTT*/ -	D15_MARK, -	D14_MARK, -	D13_MARK, -	D12_MARK, -	D11_MARK, -	D10_MARK, -	D9_MARK, -	D8_MARK, - -	/*PTU*/ -	DMAC_DACK0_MARK, -	DMAC_DREQ0_MARK, -	FSIOASD_MARK, -	FSIIABCK_MARK, -	FSIIALRCK_MARK, -	FSIOABCK_MARK, -	FSIOALRCK_MARK, -	CLKAUDIOAO_MARK, - -	/*PTV*/ -	FSIIBSD_MARK,		MSIOF1_SS2_MARK,	MSIOF1_RSYNC_MARK, -	FSIOBSD_MARK,		MSIOF1_SS1_MARK,	MSIOF1_RSCK_MARK, -	FSIIBBCK_MARK,		MSIOF1_RXD_MARK, -	FSIIBLRCK_MARK,		MSIOF1_TSYNC_MARK, -	FSIOBBCK_MARK,		MSIOF1_TSCK_MARK, -	FSIOBLRCK_MARK,		MSIOF1_TXD_MARK, -	CLKAUDIOBO_MARK,	MSIOF1_MCK_MARK, -	FSIIASD_MARK, - -	/*PTW*/ -	MMC_D7_MARK,		SDHI1CD_MARK,		IODACK_MARK, -	MMC_D6_MARK,		SDHI1WP_MARK,		IDERST_MARK, -	MMC_D5_MARK,		SDHI1D3_MARK,		EXBUF_ENB_MARK, -	MMC_D4_MARK,		SDHI1D2_MARK,		DIRECTION_MARK, -	MMC_D3_MARK,		SDHI1D1_MARK, -	MMC_D2_MARK,		SDHI1D0_MARK, -	MMC_D1_MARK,		SDHI1CMD_MARK, -	MMC_D0_MARK,		SDHI1CLK_MARK, - -	/*PTX*/ -	DMAC_DACK1_MARK,	IRDA_OUT_MARK, -	DMAC_DREQ1_MARK,	IRDA_IN_MARK, -	TSIF_TS0_SDAT_MARK,				LNKSTA_MARK, -	TSIF_TS0_SCK_MARK,				MDIO_MARK, -	TSIF_TS0_SDEN_MARK,				MDC_MARK, -	TSIF_TS0_SPSYNC_MARK, -	MMC_CLK_MARK, -	MMC_CMD_MARK, - -	/*PTY*/ -	SDHI0CD_MARK, -	SDHI0WP_MARK, -	SDHI0D3_MARK, -	SDHI0D2_MARK, -	SDHI0D1_MARK, -	SDHI0D0_MARK, -	SDHI0CMD_MARK, -	SDHI0CLK_MARK, - -	/*PTZ*/ -	INTC_IRQ7_MARK,		SCIF3_I_CTS_MARK, -	INTC_IRQ6_MARK,		SCIF3_I_RTS_MARK, -	INTC_IRQ5_MARK,		SCIF3_I_SCK_MARK, -	INTC_IRQ4_MARK,		SCIF3_I_RXD_MARK, -	INTC_IRQ3_MARK,		SCIF3_I_TXD_MARK, -	INTC_IRQ2_MARK, -	INTC_IRQ1_MARK, -	INTC_IRQ0_MARK, -	PINMUX_MARK_END, -}; - -static pinmux_enum_t pinmux_data[] = { -	/* PTA GPIO */ -	PINMUX_DATA(PTA7_DATA, PTA7_IN, PTA7_OUT, PTA7_IN_PU), -	PINMUX_DATA(PTA6_DATA, PTA6_IN, PTA6_OUT, PTA6_IN_PU), -	PINMUX_DATA(PTA5_DATA, PTA5_IN, PTA5_OUT, PTA5_IN_PU), -	PINMUX_DATA(PTA4_DATA, PTA4_IN, PTA4_OUT, PTA4_IN_PU), -	PINMUX_DATA(PTA3_DATA, PTA3_IN, PTA3_OUT, PTA3_IN_PU), -	PINMUX_DATA(PTA2_DATA, PTA2_IN, PTA2_OUT, PTA2_IN_PU), -	PINMUX_DATA(PTA1_DATA, PTA1_IN, PTA1_OUT, PTA1_IN_PU), -	PINMUX_DATA(PTA0_DATA, PTA0_IN, PTA0_OUT, PTA0_IN_PU), - -	/* PTB GPIO */ -	PINMUX_DATA(PTB7_DATA, PTB7_IN, PTB7_OUT, PTB7_IN_PU), -	PINMUX_DATA(PTB6_DATA, PTB6_IN, PTB6_OUT, PTB6_IN_PU), -	PINMUX_DATA(PTB5_DATA, PTB5_IN, PTB5_OUT, PTB5_IN_PU), -	PINMUX_DATA(PTB4_DATA, PTB4_IN, PTB4_OUT, PTB4_IN_PU), -	PINMUX_DATA(PTB3_DATA, PTB3_IN, PTB3_OUT, PTB3_IN_PU), -	PINMUX_DATA(PTB2_DATA, PTB2_IN, PTB2_OUT, PTB2_IN_PU), -	PINMUX_DATA(PTB1_DATA, PTB1_IN, PTB1_OUT, PTB1_IN_PU), -	PINMUX_DATA(PTB0_DATA, PTB0_IN, PTB0_OUT, PTB0_IN_PU), - -	/* PTC GPIO */ -	PINMUX_DATA(PTC7_DATA, PTC7_IN, PTC7_OUT, PTC7_IN_PU), -	PINMUX_DATA(PTC6_DATA, PTC6_IN, PTC6_OUT, PTC6_IN_PU), -	PINMUX_DATA(PTC5_DATA, PTC5_IN, PTC5_OUT, PTC5_IN_PU), -	PINMUX_DATA(PTC4_DATA, PTC4_IN, PTC4_OUT, PTC4_IN_PU), -	PINMUX_DATA(PTC3_DATA, PTC3_IN, PTC3_OUT, PTC3_IN_PU), -	PINMUX_DATA(PTC2_DATA, PTC2_IN, PTC2_OUT, PTC2_IN_PU), -	PINMUX_DATA(PTC1_DATA, PTC1_IN, PTC1_OUT, PTC1_IN_PU), -	PINMUX_DATA(PTC0_DATA, PTC0_IN, PTC0_OUT, PTC0_IN_PU), - -	/* PTD GPIO */ -	PINMUX_DATA(PTD7_DATA, PTD7_IN, PTD7_OUT, PTD7_IN_PU), -	PINMUX_DATA(PTD6_DATA, PTD6_IN, PTD6_OUT, PTD6_IN_PU), -	PINMUX_DATA(PTD5_DATA, PTD5_IN, PTD5_OUT, PTD5_IN_PU), -	PINMUX_DATA(PTD4_DATA, PTD4_IN, PTD4_OUT, PTD4_IN_PU), -	PINMUX_DATA(PTD3_DATA, PTD3_IN, PTD3_OUT, PTD3_IN_PU), -	PINMUX_DATA(PTD2_DATA, PTD2_IN, PTD2_OUT, PTD2_IN_PU), -	PINMUX_DATA(PTD1_DATA, PTD1_IN, PTD1_OUT, PTD1_IN_PU), -	PINMUX_DATA(PTD0_DATA, PTD0_IN, PTD0_OUT, PTD0_IN_PU), - -	/* PTE GPIO */ -	PINMUX_DATA(PTE7_DATA, PTE7_IN, PTE7_OUT, PTE7_IN_PU), -	PINMUX_DATA(PTE6_DATA, PTE6_IN, PTE6_OUT, PTE6_IN_PU), -	PINMUX_DATA(PTE5_DATA, PTE5_IN, PTE5_OUT, PTE5_IN_PU), -	PINMUX_DATA(PTE4_DATA, PTE4_IN, PTE4_OUT, PTE4_IN_PU), -	PINMUX_DATA(PTE3_DATA, PTE3_IN, PTE3_OUT, PTE3_IN_PU), -	PINMUX_DATA(PTE2_DATA, PTE2_IN, PTE2_OUT, PTE2_IN_PU), -	PINMUX_DATA(PTE1_DATA, PTE1_IN, PTE1_OUT, PTE1_IN_PU), -	PINMUX_DATA(PTE0_DATA, PTE0_IN, PTE0_OUT, PTE0_IN_PU), - -	/* PTF GPIO */ -	PINMUX_DATA(PTF7_DATA, PTF7_IN, PTF7_OUT, PTF7_IN_PU), -	PINMUX_DATA(PTF6_DATA, PTF6_IN, PTF6_OUT, PTF6_IN_PU), -	PINMUX_DATA(PTF5_DATA, PTF5_IN, PTF5_OUT, PTF5_IN_PU), -	PINMUX_DATA(PTF4_DATA, PTF4_IN, PTF4_OUT, PTF4_IN_PU), -	PINMUX_DATA(PTF3_DATA, PTF3_IN, PTF3_OUT, PTF3_IN_PU), -	PINMUX_DATA(PTF2_DATA, PTF2_IN, PTF2_OUT, PTF2_IN_PU), -	PINMUX_DATA(PTF1_DATA, PTF1_IN, PTF1_OUT, PTF1_IN_PU), -	PINMUX_DATA(PTF0_DATA, PTF0_IN, PTF0_OUT, PTF0_IN_PU), - -	/* PTG GPIO */ -	PINMUX_DATA(PTG5_DATA, PTG5_OUT), -	PINMUX_DATA(PTG4_DATA, PTG4_OUT), -	PINMUX_DATA(PTG3_DATA, PTG3_OUT), -	PINMUX_DATA(PTG2_DATA, PTG2_OUT), -	PINMUX_DATA(PTG1_DATA, PTG1_OUT), -	PINMUX_DATA(PTG0_DATA, PTG0_OUT), - -	/* PTH GPIO */ -	PINMUX_DATA(PTH7_DATA, PTH7_IN, PTH7_OUT, PTH7_IN_PU), -	PINMUX_DATA(PTH6_DATA, PTH6_IN, PTH6_OUT, PTH6_IN_PU), -	PINMUX_DATA(PTH5_DATA, PTH5_IN, PTH5_OUT, PTH5_IN_PU), -	PINMUX_DATA(PTH4_DATA, PTH4_IN, PTH4_OUT, PTH4_IN_PU), -	PINMUX_DATA(PTH3_DATA, PTH3_IN, PTH3_OUT, PTH3_IN_PU), -	PINMUX_DATA(PTH2_DATA, PTH2_IN, PTH2_OUT, PTH2_IN_PU), -	PINMUX_DATA(PTH1_DATA, PTH1_IN, PTH1_OUT, PTH1_IN_PU), -	PINMUX_DATA(PTH0_DATA, PTH0_IN, PTH0_OUT, PTH0_IN_PU), - -	/* PTJ GPIO */ -	PINMUX_DATA(PTJ7_DATA, PTJ7_OUT), -	PINMUX_DATA(PTJ6_DATA, PTJ6_OUT), -	PINMUX_DATA(PTJ5_DATA, PTJ5_OUT), -	PINMUX_DATA(PTJ3_DATA, PTJ3_IN, PTJ3_OUT, PTJ3_IN_PU), -	PINMUX_DATA(PTJ2_DATA, PTJ2_IN, PTJ2_OUT, PTJ2_IN_PU), -	PINMUX_DATA(PTJ1_DATA, PTJ1_IN, PTJ1_OUT, PTJ1_IN_PU), -	PINMUX_DATA(PTJ0_DATA, PTJ0_IN, PTJ0_OUT, PTJ0_IN_PU), - -	/* PTK GPIO */ -	PINMUX_DATA(PTK7_DATA, PTK7_IN, PTK7_OUT, PTK7_IN_PU), -	PINMUX_DATA(PTK6_DATA, PTK6_IN, PTK6_OUT, PTK6_IN_PU), -	PINMUX_DATA(PTK5_DATA, PTK5_IN, PTK5_OUT, PTK5_IN_PU), -	PINMUX_DATA(PTK4_DATA, PTK4_IN, PTK4_OUT, PTK4_IN_PU), -	PINMUX_DATA(PTK3_DATA, PTK3_IN, PTK3_OUT, PTK3_IN_PU), -	PINMUX_DATA(PTK2_DATA, PTK2_IN, PTK2_OUT, PTK2_IN_PU), -	PINMUX_DATA(PTK1_DATA, PTK1_IN, PTK1_OUT, PTK1_IN_PU), -	PINMUX_DATA(PTK0_DATA, PTK0_IN, PTK0_OUT, PTK0_IN_PU), - -	/* PTL GPIO */ -	PINMUX_DATA(PTL7_DATA, PTL7_IN, PTL7_OUT, PTL7_IN_PU), -	PINMUX_DATA(PTL6_DATA, PTL6_IN, PTL6_OUT, PTL6_IN_PU), -	PINMUX_DATA(PTL5_DATA, PTL5_IN, PTL5_OUT, PTL5_IN_PU), -	PINMUX_DATA(PTL4_DATA, PTL4_IN, PTL4_OUT, PTL4_IN_PU), -	PINMUX_DATA(PTL3_DATA, PTL3_IN, PTL3_OUT, PTL3_IN_PU), -	PINMUX_DATA(PTL2_DATA, PTL2_IN, PTL2_OUT, PTL2_IN_PU), -	PINMUX_DATA(PTL1_DATA, PTL1_IN, PTL1_OUT, PTL1_IN_PU), -	PINMUX_DATA(PTL0_DATA, PTL0_IN, PTL0_OUT, PTL0_IN_PU), - -	/* PTM GPIO */ -	PINMUX_DATA(PTM7_DATA, PTM7_IN, PTM7_OUT, PTM7_IN_PU), -	PINMUX_DATA(PTM6_DATA, PTM6_IN, PTM6_OUT, PTM6_IN_PU), -	PINMUX_DATA(PTM5_DATA, PTM5_IN, PTM5_OUT, PTM5_IN_PU), -	PINMUX_DATA(PTM4_DATA, PTM4_IN, PTM4_OUT, PTM4_IN_PU), -	PINMUX_DATA(PTM3_DATA, PTM3_IN, PTM3_OUT, PTM3_IN_PU), -	PINMUX_DATA(PTM2_DATA, PTM2_IN, PTM2_OUT, PTM2_IN_PU), -	PINMUX_DATA(PTM1_DATA, PTM1_IN, PTM1_OUT, PTM1_IN_PU), -	PINMUX_DATA(PTM0_DATA, PTM0_IN, PTM0_OUT, PTM0_IN_PU), - -	/* PTN GPIO */ -	PINMUX_DATA(PTN7_DATA, PTN7_IN, PTN7_OUT, PTN7_IN_PU), -	PINMUX_DATA(PTN6_DATA, PTN6_IN, PTN6_OUT, PTN6_IN_PU), -	PINMUX_DATA(PTN5_DATA, PTN5_IN, PTN5_OUT, PTN5_IN_PU), -	PINMUX_DATA(PTN4_DATA, PTN4_IN, PTN4_OUT, PTN4_IN_PU), -	PINMUX_DATA(PTN3_DATA, PTN3_IN, PTN3_OUT, PTN3_IN_PU), -	PINMUX_DATA(PTN2_DATA, PTN2_IN, PTN2_OUT, PTN2_IN_PU), -	PINMUX_DATA(PTN1_DATA, PTN1_IN, PTN1_OUT, PTN1_IN_PU), -	PINMUX_DATA(PTN0_DATA, PTN0_IN, PTN0_OUT, PTN0_IN_PU), - -	/* PTQ GPIO */ -	PINMUX_DATA(PTQ7_DATA, PTQ7_IN, PTQ7_OUT, PTQ7_IN_PU), -	PINMUX_DATA(PTQ6_DATA, PTQ6_IN, PTQ6_OUT, PTQ6_IN_PU), -	PINMUX_DATA(PTQ5_DATA, PTQ5_IN, PTQ5_OUT, PTQ5_IN_PU), -	PINMUX_DATA(PTQ4_DATA, PTQ4_IN, PTQ4_OUT, PTQ4_IN_PU), -	PINMUX_DATA(PTQ3_DATA, PTQ3_IN, PTQ3_OUT, PTQ3_IN_PU), -	PINMUX_DATA(PTQ2_DATA, PTQ2_IN, PTQ2_OUT, PTQ2_IN_PU), -	PINMUX_DATA(PTQ1_DATA, PTQ1_IN, PTQ1_OUT, PTQ1_IN_PU), -	PINMUX_DATA(PTQ0_DATA, PTQ0_IN, PTQ0_OUT, PTQ0_IN_PU), - -	/* PTR GPIO */ -	PINMUX_DATA(PTR7_DATA, PTR7_IN, PTR7_OUT, PTR7_IN_PU), -	PINMUX_DATA(PTR6_DATA, PTR6_IN, PTR6_OUT, PTR6_IN_PU), -	PINMUX_DATA(PTR5_DATA, PTR5_IN, PTR5_OUT, PTR5_IN_PU), -	PINMUX_DATA(PTR4_DATA, PTR4_IN, PTR4_OUT, PTR4_IN_PU), -	PINMUX_DATA(PTR3_DATA, PTR3_IN,           PTR3_IN_PU), -	PINMUX_DATA(PTR2_DATA, PTR2_IN,           PTR2_IN_PU), -	PINMUX_DATA(PTR1_DATA, PTR1_IN, PTR1_OUT, PTR1_IN_PU), -	PINMUX_DATA(PTR0_DATA, PTR0_IN, PTR0_OUT, PTR0_IN_PU), - -	/* PTS GPIO */ -	PINMUX_DATA(PTS6_DATA, PTS6_IN, PTS6_OUT, PTS6_IN_PU), -	PINMUX_DATA(PTS5_DATA, PTS5_IN, PTS5_OUT, PTS5_IN_PU), -	PINMUX_DATA(PTS4_DATA, PTS4_IN, PTS4_OUT, PTS4_IN_PU), -	PINMUX_DATA(PTS3_DATA, PTS3_IN, PTS3_OUT, PTS3_IN_PU), -	PINMUX_DATA(PTS2_DATA, PTS2_IN, PTS2_OUT, PTS2_IN_PU), -	PINMUX_DATA(PTS1_DATA, PTS1_IN, PTS1_OUT, PTS1_IN_PU), -	PINMUX_DATA(PTS0_DATA, PTS0_IN, PTS0_OUT, PTS0_IN_PU), - -	/* PTT GPIO */ -	PINMUX_DATA(PTT7_DATA, PTT7_IN, PTT7_OUT, PTT7_IN_PU), -	PINMUX_DATA(PTT6_DATA, PTT6_IN, PTT6_OUT, PTT6_IN_PU), -	PINMUX_DATA(PTT5_DATA, PTT5_IN, PTT5_OUT, PTT5_IN_PU), -	PINMUX_DATA(PTT4_DATA, PTT4_IN, PTT4_OUT, PTT4_IN_PU), -	PINMUX_DATA(PTT3_DATA, PTT3_IN, PTT3_OUT, PTT3_IN_PU), -	PINMUX_DATA(PTT2_DATA, PTT2_IN, PTT2_OUT, PTT2_IN_PU), -	PINMUX_DATA(PTT1_DATA, PTT1_IN, PTT1_OUT, PTT1_IN_PU), -	PINMUX_DATA(PTT0_DATA, PTT0_IN, PTT0_OUT, PTT0_IN_PU), - -	/* PTU GPIO */ -	PINMUX_DATA(PTU7_DATA, PTU7_IN, PTU7_OUT, PTU7_IN_PU), -	PINMUX_DATA(PTU6_DATA, PTU6_IN, PTU6_OUT, PTU6_IN_PU), -	PINMUX_DATA(PTU5_DATA, PTU5_IN, PTU5_OUT, PTU5_IN_PU), -	PINMUX_DATA(PTU4_DATA, PTU4_IN, PTU4_OUT, PTU4_IN_PU), -	PINMUX_DATA(PTU3_DATA, PTU3_IN, PTU3_OUT, PTU3_IN_PU), -	PINMUX_DATA(PTU2_DATA, PTU2_IN, PTU2_OUT, PTU2_IN_PU), -	PINMUX_DATA(PTU1_DATA, PTU1_IN, PTU1_OUT, PTU1_IN_PU), -	PINMUX_DATA(PTU0_DATA, PTU0_IN, PTU0_OUT, PTU0_IN_PU), - -	/* PTV GPIO */ -	PINMUX_DATA(PTV7_DATA, PTV7_IN, PTV7_OUT, PTV7_IN_PU), -	PINMUX_DATA(PTV6_DATA, PTV6_IN, PTV6_OUT, PTV6_IN_PU), -	PINMUX_DATA(PTV5_DATA, PTV5_IN, PTV5_OUT, PTV5_IN_PU), -	PINMUX_DATA(PTV4_DATA, PTV4_IN, PTV4_OUT, PTV4_IN_PU), -	PINMUX_DATA(PTV3_DATA, PTV3_IN, PTV3_OUT, PTV3_IN_PU), -	PINMUX_DATA(PTV2_DATA, PTV2_IN, PTV2_OUT, PTV2_IN_PU), -	PINMUX_DATA(PTV1_DATA, PTV1_IN, PTV1_OUT, PTV1_IN_PU), -	PINMUX_DATA(PTV0_DATA, PTV0_IN, PTV0_OUT, PTV0_IN_PU), - -	/* PTW GPIO */ -	PINMUX_DATA(PTW7_DATA, PTW7_IN, PTW7_OUT, PTW7_IN_PU), -	PINMUX_DATA(PTW6_DATA, PTW6_IN, PTW6_OUT, PTW6_IN_PU), -	PINMUX_DATA(PTW5_DATA, PTW5_IN, PTW5_OUT, PTW5_IN_PU), -	PINMUX_DATA(PTW4_DATA, PTW4_IN, PTW4_OUT, PTW4_IN_PU), -	PINMUX_DATA(PTW3_DATA, PTW3_IN, PTW3_OUT, PTW3_IN_PU), -	PINMUX_DATA(PTW2_DATA, PTW2_IN, PTW2_OUT, PTW2_IN_PU), -	PINMUX_DATA(PTW1_DATA, PTW1_IN, PTW1_OUT, PTW1_IN_PU), -	PINMUX_DATA(PTW0_DATA, PTW0_IN, PTW0_OUT, PTW0_IN_PU), - -	/* PTX GPIO */ -	PINMUX_DATA(PTX7_DATA, PTX7_IN, PTX7_OUT, PTX7_IN_PU), -	PINMUX_DATA(PTX6_DATA, PTX6_IN, PTX6_OUT, PTX6_IN_PU), -	PINMUX_DATA(PTX5_DATA, PTX5_IN, PTX5_OUT, PTX5_IN_PU), -	PINMUX_DATA(PTX4_DATA, PTX4_IN, PTX4_OUT, PTX4_IN_PU), -	PINMUX_DATA(PTX3_DATA, PTX3_IN, PTX3_OUT, PTX3_IN_PU), -	PINMUX_DATA(PTX2_DATA, PTX2_IN, PTX2_OUT, PTX2_IN_PU), -	PINMUX_DATA(PTX1_DATA, PTX1_IN, PTX1_OUT, PTX1_IN_PU), -	PINMUX_DATA(PTX0_DATA, PTX0_IN, PTX0_OUT, PTX0_IN_PU), - -	/* PTY GPIO */ -	PINMUX_DATA(PTY7_DATA, PTY7_IN, PTY7_OUT, PTY7_IN_PU), -	PINMUX_DATA(PTY6_DATA, PTY6_IN, PTY6_OUT, PTY6_IN_PU), -	PINMUX_DATA(PTY5_DATA, PTY5_IN, PTY5_OUT, PTY5_IN_PU), -	PINMUX_DATA(PTY4_DATA, PTY4_IN, PTY4_OUT, PTY4_IN_PU), -	PINMUX_DATA(PTY3_DATA, PTY3_IN, PTY3_OUT, PTY3_IN_PU), -	PINMUX_DATA(PTY2_DATA, PTY2_IN, PTY2_OUT, PTY2_IN_PU), -	PINMUX_DATA(PTY1_DATA, PTY1_IN, PTY1_OUT, PTY1_IN_PU), -	PINMUX_DATA(PTY0_DATA, PTY0_IN, PTY0_OUT, PTY0_IN_PU), - -	/* PTZ GPIO */ -	PINMUX_DATA(PTZ7_DATA, PTZ7_IN, PTZ7_OUT, PTZ7_IN_PU), -	PINMUX_DATA(PTZ6_DATA, PTZ6_IN, PTZ6_OUT, PTZ6_IN_PU), -	PINMUX_DATA(PTZ5_DATA, PTZ5_IN, PTZ5_OUT, PTZ5_IN_PU), -	PINMUX_DATA(PTZ4_DATA, PTZ4_IN, PTZ4_OUT, PTZ4_IN_PU), -	PINMUX_DATA(PTZ3_DATA, PTZ3_IN, PTZ3_OUT, PTZ3_IN_PU), -	PINMUX_DATA(PTZ2_DATA, PTZ2_IN, PTZ2_OUT, PTZ2_IN_PU), -	PINMUX_DATA(PTZ1_DATA, PTZ1_IN, PTZ1_OUT, PTZ1_IN_PU), -	PINMUX_DATA(PTZ0_DATA, PTZ0_IN, PTZ0_OUT, PTZ0_IN_PU), - -	/* PTA FN */ -	PINMUX_DATA(D23_MARK,	PSA15_0, PSA14_0, PTA7_FN), -	PINMUX_DATA(D22_MARK,	PSA15_0, PSA14_0, PTA6_FN), -	PINMUX_DATA(D21_MARK,	PSA15_0, PSA14_0, PTA5_FN), -	PINMUX_DATA(D20_MARK,	PSA15_0, PSA14_0, PTA4_FN), -	PINMUX_DATA(D19_MARK,	PSA15_0, PSA14_0, PTA3_FN), -	PINMUX_DATA(D18_MARK,	PSA15_0, PSA14_0, PTA2_FN), -	PINMUX_DATA(D17_MARK,	PSA15_0, PSA14_0, PTA1_FN), -	PINMUX_DATA(D16_MARK,	PSA15_0, PSA14_0, PTA0_FN), - -	PINMUX_DATA(KEYOUT2_MARK,	PSA15_0, PSA14_1, PTA7_FN), -	PINMUX_DATA(KEYOUT1_MARK,	PSA15_0, PSA14_1, PTA6_FN), -	PINMUX_DATA(KEYOUT0_MARK,	PSA15_0, PSA14_1, PTA5_FN), -	PINMUX_DATA(KEYIN4_MARK,	PSA15_0, PSA14_1, PTA4_FN), -	PINMUX_DATA(KEYIN3_MARK,	PSA15_0, PSA14_1, PTA3_FN), -	PINMUX_DATA(KEYIN2_MARK,	PSA15_0, PSA14_1, PTA2_FN), -	PINMUX_DATA(KEYIN1_MARK,	PSA15_0, PSA14_1, PTA1_FN), -	PINMUX_DATA(KEYIN0_MARK,	PSA15_0, PSA14_1, PTA0_FN), - -	PINMUX_DATA(IDED15_MARK,	PSA15_1, PSA14_0, PTA7_FN), -	PINMUX_DATA(IDED14_MARK,	PSA15_1, PSA14_0, PTA6_FN), -	PINMUX_DATA(IDED13_MARK,	PSA15_1, PSA14_0, PTA5_FN), -	PINMUX_DATA(IDED12_MARK,	PSA15_1, PSA14_0, PTA4_FN), -	PINMUX_DATA(IDED11_MARK,	PSA15_1, PSA14_0, PTA3_FN), -	PINMUX_DATA(IDED10_MARK,	PSA15_1, PSA14_0, PTA2_FN), -	PINMUX_DATA(IDED9_MARK,		PSA15_1, PSA14_0, PTA1_FN), -	PINMUX_DATA(IDED8_MARK,		PSA15_1, PSA14_0, PTA0_FN), - -	/* PTB FN */ -	PINMUX_DATA(D31_MARK,		PSE15_0, PSE14_0, PTB7_FN), -	PINMUX_DATA(D30_MARK,		PSE15_0, PSE14_0, PTB6_FN), -	PINMUX_DATA(D29_MARK,		PSE11_0,          PTB5_FN), -	PINMUX_DATA(D28_MARK,		PSE11_0,          PTB4_FN), -	PINMUX_DATA(D27_MARK,		PSE11_0,          PTB3_FN), -	PINMUX_DATA(D26_MARK,		PSA15_0, PSA14_0, PTB2_FN), -	PINMUX_DATA(D25_MARK,		PSA15_0, PSA14_0, PTB1_FN), -	PINMUX_DATA(D24_MARK,		PSA15_0, PSA14_0, PTB0_FN), - -	PINMUX_DATA(IDEA1_MARK,		PSE15_1, PSE14_0, PTB7_FN), -	PINMUX_DATA(IDEA0_MARK,		PSE15_1, PSE14_0, PTB6_FN), -	PINMUX_DATA(IODREQ_MARK,	PSE11_1,          PTB5_FN), -	PINMUX_DATA(IDECS0_MARK,	PSE11_1,          PTB4_FN), -	PINMUX_DATA(IDECS1_MARK,	PSE11_1,          PTB3_FN), -	PINMUX_DATA(IDEIORD_MARK,	PSA15_1, PSA14_0, PTB2_FN), -	PINMUX_DATA(IDEIOWR_MARK,	PSA15_1, PSA14_0, PTB1_FN), -	PINMUX_DATA(IDEINT_MARK,	PSA15_1, PSA14_0, PTB0_FN), - -	PINMUX_DATA(TPUTO1_MARK,	PSE15_0, PSE14_1, PTB7_FN), -	PINMUX_DATA(TPUTO0_MARK,	PSE15_0, PSE14_1, PTB6_FN), - -	PINMUX_DATA(KEYOUT5_IN5_MARK,	PSA15_0, PSA14_1, PTB2_FN), -	PINMUX_DATA(KEYOUT4_IN6_MARK,	PSA15_0, PSA14_1, PTB1_FN), -	PINMUX_DATA(KEYOUT3_MARK,	PSA15_0, PSA14_1, PTB0_FN), - -	/* PTC FN */ -	PINMUX_DATA(LCDD7_MARK, PSD5_0, PTC7_FN), -	PINMUX_DATA(LCDD6_MARK, PSD5_0, PTC6_FN), -	PINMUX_DATA(LCDD5_MARK, PSD5_0, PTC5_FN), -	PINMUX_DATA(LCDD4_MARK, PSD5_0, PTC4_FN), -	PINMUX_DATA(LCDD3_MARK, PSD5_0, PTC3_FN), -	PINMUX_DATA(LCDD2_MARK, PSD5_0, PTC2_FN), -	PINMUX_DATA(LCDD1_MARK, PSD5_0, PTC1_FN), -	PINMUX_DATA(LCDD0_MARK, PSD5_0, PTC0_FN), - -	/* PTD FN */ -	PINMUX_DATA(LCDD15_MARK, PSD5_0, PTD7_FN), -	PINMUX_DATA(LCDD14_MARK, PSD5_0, PTD6_FN), -	PINMUX_DATA(LCDD13_MARK, PSD5_0, PTD5_FN), -	PINMUX_DATA(LCDD12_MARK, PSD5_0, PTD4_FN), -	PINMUX_DATA(LCDD11_MARK, PSD5_0, PTD3_FN), -	PINMUX_DATA(LCDD10_MARK, PSD5_0, PTD2_FN), -	PINMUX_DATA(LCDD9_MARK,  PSD5_0, PTD1_FN), -	PINMUX_DATA(LCDD8_MARK,  PSD5_0, PTD0_FN), - -	/* PTE FN */ -	PINMUX_DATA(FSIMCKB_MARK, PTE7_FN), -	PINMUX_DATA(FSIMCKA_MARK, PTE6_FN), - -	PINMUX_DATA(LCDD21_MARK,	PSC5_0, PSC4_0, PTE5_FN), -	PINMUX_DATA(LCDD20_MARK,	PSD3_0, PSD2_0, PTE4_FN), -	PINMUX_DATA(LCDD19_MARK,	PSA3_0, PSA2_0, PTE3_FN), -	PINMUX_DATA(LCDD18_MARK,	PSA3_0, PSA2_0, PTE2_FN), -	PINMUX_DATA(LCDD17_MARK,	PSD5_0,         PTE1_FN), -	PINMUX_DATA(LCDD16_MARK,	PSD5_0,         PTE0_FN), - -	PINMUX_DATA(SCIF2_L_TXD_MARK,	PSC5_0, PSC4_1, PTE5_FN), -	PINMUX_DATA(SCIF4_SCK_MARK,	PSD3_0, PSD2_1, PTE4_FN), -	PINMUX_DATA(SCIF4_RXD_MARK,	PSA3_0, PSA2_1, PTE3_FN), -	PINMUX_DATA(SCIF4_TXD_MARK,	PSA3_0, PSA2_1, PTE2_FN), - -	/* PTF FN */ -	PINMUX_DATA(LCDVSYN_MARK,	PSD8_0,          PTF7_FN), -	PINMUX_DATA(LCDDISP_MARK,	PSD10_0, PSD9_0, PTF6_FN), -	PINMUX_DATA(LCDHSYN_MARK,	PSD10_0, PSD9_0, PTF5_FN), -	PINMUX_DATA(LCDDON_MARK,	PSD8_0,          PTF4_FN), -	PINMUX_DATA(LCDDCK_MARK,	PSD10_0, PSD9_0, PTF3_FN), -	PINMUX_DATA(LCDVEPWC_MARK,	PSA6_0,          PTF2_FN), -	PINMUX_DATA(LCDD23_MARK,	PSC7_0,  PSC6_0, PTF1_FN), -	PINMUX_DATA(LCDD22_MARK,	PSC5_0,  PSC4_0, PTF0_FN), - -	PINMUX_DATA(LCDRS_MARK,		PSD10_0, PSD9_1, PTF6_FN), -	PINMUX_DATA(LCDCS_MARK,		PSD10_0, PSD9_1, PTF5_FN), -	PINMUX_DATA(LCDWR_MARK,		PSD10_0, PSD9_1, PTF3_FN), - -	PINMUX_DATA(SCIF0_TXD_MARK,	PSA6_1,          PTF2_FN), -	PINMUX_DATA(SCIF2_L_SCK_MARK,	PSC7_0,  PSC6_1, PTF1_FN), -	PINMUX_DATA(SCIF2_L_RXD_MARK,	PSC5_0,  PSC4_1, PTF0_FN), - -	/* PTG FN */ -	PINMUX_DATA(AUDCK_MARK,   PTG5_FN), -	PINMUX_DATA(AUDSYNC_MARK, PTG4_FN), -	PINMUX_DATA(AUDATA3_MARK, PTG3_FN), -	PINMUX_DATA(AUDATA2_MARK, PTG2_FN), -	PINMUX_DATA(AUDATA1_MARK, PTG1_FN), -	PINMUX_DATA(AUDATA0_MARK, PTG0_FN), - -	/* PTH FN */ -	PINMUX_DATA(VIO0_VD_MARK,  PTH7_FN), -	PINMUX_DATA(VIO0_CLK_MARK, PTH6_FN), -	PINMUX_DATA(VIO0_D7_MARK,  PTH5_FN), -	PINMUX_DATA(VIO0_D6_MARK,  PTH4_FN), -	PINMUX_DATA(VIO0_D5_MARK,  PTH3_FN), -	PINMUX_DATA(VIO0_D4_MARK,  PTH2_FN), -	PINMUX_DATA(VIO0_D3_MARK,  PTH1_FN), -	PINMUX_DATA(VIO0_D2_MARK,  PTH0_FN), - -	/* PTJ FN */ -	PINMUX_DATA(PDSTATUS_MARK,	PTJ7_FN), -	PINMUX_DATA(STATUS2_MARK,	PTJ6_FN), -	PINMUX_DATA(STATUS0_MARK,	PTJ5_FN), -	PINMUX_DATA(A25_MARK,		PSA8_0, PTJ3_FN), -	PINMUX_DATA(BS_MARK,		PSA8_1, PTJ3_FN), -	PINMUX_DATA(A24_MARK,		PTJ2_FN), -	PINMUX_DATA(A23_MARK,		PTJ1_FN), -	PINMUX_DATA(A22_MARK,		PTJ0_FN), - -	/* PTK FN */ -	PINMUX_DATA(VIO1_D5_MARK,	PSB7_0, PSB6_0, PTK7_FN), -	PINMUX_DATA(VIO1_D4_MARK,	PSB7_0, PSB6_0, PTK6_FN), -	PINMUX_DATA(VIO1_D3_MARK,	PSB7_0, PSB6_0, PTK5_FN), -	PINMUX_DATA(VIO1_D2_MARK,	PSB7_0, PSB6_0, PTK4_FN), -	PINMUX_DATA(VIO1_D1_MARK,	PSB7_0, PSB6_0, PTK3_FN), -	PINMUX_DATA(VIO1_D0_MARK,	PSB7_0, PSB6_0, PTK2_FN), - -	PINMUX_DATA(VIO0_D13_MARK,	PSB7_0, PSB6_1, PTK7_FN), -	PINMUX_DATA(VIO0_D12_MARK,	PSB7_0, PSB6_1, PTK6_FN), -	PINMUX_DATA(VIO0_D11_MARK,	PSB7_0, PSB6_1, PTK5_FN), -	PINMUX_DATA(VIO0_D10_MARK,	PSB7_0, PSB6_1, PTK4_FN), -	PINMUX_DATA(VIO0_D9_MARK,	PSB7_0, PSB6_1, PTK3_FN), -	PINMUX_DATA(VIO0_D8_MARK,	PSB7_0, PSB6_1, PTK2_FN), - -	PINMUX_DATA(IDED5_MARK,		PSB7_1, PSB6_0, PTK7_FN), -	PINMUX_DATA(IDED4_MARK,		PSB7_1, PSB6_0, PTK6_FN), -	PINMUX_DATA(IDED3_MARK,		PSB7_1, PSB6_0, PTK5_FN), -	PINMUX_DATA(IDED2_MARK,		PSB7_1, PSB6_0, PTK4_FN), -	PINMUX_DATA(IDED1_MARK,		PSB7_1, PSB6_0, PTK3_FN), -	PINMUX_DATA(IDED0_MARK,		PSB7_1, PSB6_0, PTK2_FN), - -	PINMUX_DATA(VIO0_FLD_MARK,	PTK1_FN), -	PINMUX_DATA(VIO0_HD_MARK,	PTK0_FN), - -	/* PTL FN */ -	PINMUX_DATA(DV_D5_MARK,		PSB9_0, PSB8_0, PTL7_FN), -	PINMUX_DATA(DV_D4_MARK,		PSB9_0, PSB8_0, PTL6_FN), -	PINMUX_DATA(DV_D3_MARK,		PSE7_0, PSE6_0, PTL5_FN), -	PINMUX_DATA(DV_D2_MARK,		PSC9_0, PSC8_0, PTL4_FN), -	PINMUX_DATA(DV_D1_MARK,		PSC9_0, PSC8_0, PTL3_FN), -	PINMUX_DATA(DV_D0_MARK,		PSC9_0, PSC8_0, PTL2_FN), -	PINMUX_DATA(DV_D15_MARK,	PSD4_0,         PTL1_FN), -	PINMUX_DATA(DV_D14_MARK,	PSE5_0, PSE4_0, PTL0_FN), - -	PINMUX_DATA(SCIF3_V_SCK_MARK,	PSB9_0, PSB8_1, PTL7_FN), -	PINMUX_DATA(SCIF3_V_RXD_MARK,	PSB9_0, PSB8_1, PTL6_FN), -	PINMUX_DATA(SCIF3_V_TXD_MARK,	PSE7_0, PSE6_1, PTL5_FN), -	PINMUX_DATA(SCIF1_SCK_MARK,	PSC9_0, PSC8_1, PTL4_FN), -	PINMUX_DATA(SCIF1_RXD_MARK,	PSC9_0, PSC8_1, PTL3_FN), -	PINMUX_DATA(SCIF1_TXD_MARK,	PSC9_0, PSC8_1, PTL2_FN), - -	PINMUX_DATA(RMII_RXD0_MARK,	PSB9_1, PSB8_0, PTL7_FN), -	PINMUX_DATA(RMII_RXD1_MARK,	PSB9_1, PSB8_0, PTL6_FN), -	PINMUX_DATA(RMII_REF_CLK_MARK,	PSE7_1, PSE6_0, PTL5_FN), -	PINMUX_DATA(RMII_TX_EN_MARK,	PSC9_1, PSC8_0, PTL4_FN), -	PINMUX_DATA(RMII_TXD0_MARK,	PSC9_1, PSC8_0, PTL3_FN), -	PINMUX_DATA(RMII_TXD1_MARK,	PSC9_1, PSC8_0, PTL2_FN), - -	PINMUX_DATA(MSIOF0_MCK_MARK,	PSE5_0, PSE4_1, PTL0_FN), - -	/* PTM FN */ -	PINMUX_DATA(DV_D13_MARK,	PSC13_0, PSC12_0, PTM7_FN), -	PINMUX_DATA(DV_D12_MARK,	PSC13_0, PSC12_0, PTM6_FN), -	PINMUX_DATA(DV_D11_MARK,	PSC13_0, PSC12_0, PTM5_FN), -	PINMUX_DATA(DV_D10_MARK,	PSC13_0, PSC12_0, PTM4_FN), -	PINMUX_DATA(DV_D9_MARK,		PSC11_0, PSC10_0, PTM3_FN), -	PINMUX_DATA(DV_D8_MARK,		PSC11_0, PSC10_0, PTM2_FN), - -	PINMUX_DATA(MSIOF0_TSCK_MARK,	PSC13_0, PSC12_1, PTM7_FN), -	PINMUX_DATA(MSIOF0_RXD_MARK,	PSC13_0, PSC12_1, PTM6_FN), -	PINMUX_DATA(MSIOF0_TXD_MARK,	PSC13_0, PSC12_1, PTM5_FN), -	PINMUX_DATA(MSIOF0_TSYNC_MARK,	PSC13_0, PSC12_1, PTM4_FN), -	PINMUX_DATA(MSIOF0_SS1_MARK,	PSC11_0, PSC10_1, PTM3_FN), -	PINMUX_DATA(MSIOF0_RSCK_MARK,	PSC11_1, PSC10_0, PTM3_FN), -	PINMUX_DATA(MSIOF0_SS2_MARK,	PSC11_0, PSC10_1, PTM2_FN), -	PINMUX_DATA(MSIOF0_RSYNC_MARK,	PSC11_1, PSC10_0, PTM2_FN), - -	PINMUX_DATA(LCDVCPWC_MARK,	PSA6_0, PTM1_FN), -	PINMUX_DATA(LCDRD_MARK,		PSA7_0, PTM0_FN), - -	PINMUX_DATA(SCIF0_RXD_MARK,	PSA6_1, PTM1_FN), -	PINMUX_DATA(SCIF0_SCK_MARK,	PSA7_1, PTM0_FN), - -	/* PTN FN */ -	PINMUX_DATA(VIO0_D1_MARK,	PTN7_FN), -	PINMUX_DATA(VIO0_D0_MARK,	PTN6_FN), - -	PINMUX_DATA(DV_CLKI_MARK,	PSD11_0,          PTN5_FN), -	PINMUX_DATA(DV_CLK_MARK,	PSD13_0, PSD12_0, PTN4_FN), -	PINMUX_DATA(DV_VSYNC_MARK,	PSD15_0, PSD14_0, PTN3_FN), -	PINMUX_DATA(DV_HSYNC_MARK,	PSB5_0,  PSB4_0,  PTN2_FN), -	PINMUX_DATA(DV_D7_MARK,		PSB3_0,  PSB2_0,  PTN1_FN), -	PINMUX_DATA(DV_D6_MARK,		PSB1_0,  PSB0_0,  PTN0_FN), - -	PINMUX_DATA(SCIF2_V_SCK_MARK,	PSD13_0, PSD12_1, PTN4_FN), -	PINMUX_DATA(SCIF2_V_RXD_MARK,	PSD15_0, PSD14_1, PTN3_FN), -	PINMUX_DATA(SCIF2_V_TXD_MARK,	PSB5_0,  PSB4_1,  PTN2_FN), -	PINMUX_DATA(SCIF3_V_CTS_MARK,	PSB3_0,  PSB2_1,  PTN1_FN), -	PINMUX_DATA(SCIF3_V_RTS_MARK,	PSB1_0,  PSB0_1,  PTN0_FN), - -	PINMUX_DATA(RMII_RX_ER_MARK,	PSB3_1, PSB2_0, PTN1_FN), -	PINMUX_DATA(RMII_CRS_DV_MARK,	PSB1_1, PSB0_0, PTN0_FN), - -	/* PTQ FN */ -	PINMUX_DATA(D7_MARK, PTQ7_FN), -	PINMUX_DATA(D6_MARK, PTQ6_FN), -	PINMUX_DATA(D5_MARK, PTQ5_FN), -	PINMUX_DATA(D4_MARK, PTQ4_FN), -	PINMUX_DATA(D3_MARK, PTQ3_FN), -	PINMUX_DATA(D2_MARK, PTQ2_FN), -	PINMUX_DATA(D1_MARK, PTQ1_FN), -	PINMUX_DATA(D0_MARK, PTQ0_FN), - -	/* PTR FN */ -	PINMUX_DATA(CS6B_CE1B_MARK,	                PTR7_FN), -	PINMUX_DATA(CS6A_CE2B_MARK,	                PTR6_FN), -	PINMUX_DATA(CS5B_CE1A_MARK,	                PTR5_FN), -	PINMUX_DATA(CS5A_CE2A_MARK,	                PTR4_FN), -	PINMUX_DATA(IOIS16_MARK,	PSA5_0,         PTR3_FN), -	PINMUX_DATA(WAIT_MARK,		                PTR2_FN), -	PINMUX_DATA(WE3_ICIOWR_MARK,	PSA1_0, PSA0_0, PTR1_FN), -	PINMUX_DATA(WE2_ICIORD_MARK,	PSD1_0, PSD0_0, PTR0_FN), - -	PINMUX_DATA(LCDLCLK_MARK,	PSA5_1,         PTR3_FN), - -	PINMUX_DATA(IDEA2_MARK,		PSD1_1, PSD0_0, PTR0_FN), - -	PINMUX_DATA(TPUTO3_MARK,	PSA1_0, PSA0_1, PTR1_FN), -	PINMUX_DATA(TPUTI3_MARK,	PSA1_1, PSA0_0, PTR1_FN), -	PINMUX_DATA(TPUTO2_MARK,	PSD1_0, PSD0_1, PTR0_FN), - -	/* PTS FN */ -	PINMUX_DATA(VIO_CKO_MARK,	PTS6_FN), - -	PINMUX_DATA(TPUTI2_MARK,	PSE9_0, PSE8_1, PTS5_FN), - -	PINMUX_DATA(IDEIORDY_MARK,	PSE9_1, PSE8_0, PTS5_FN), - -	PINMUX_DATA(VIO1_FLD_MARK,	PSE9_0, PSE8_0, PTS5_FN), -	PINMUX_DATA(VIO1_HD_MARK,	PSA10_0,        PTS4_FN), -	PINMUX_DATA(VIO1_VD_MARK,	PSA9_0,         PTS3_FN), -	PINMUX_DATA(VIO1_CLK_MARK,	PSA9_0,         PTS2_FN), -	PINMUX_DATA(VIO1_D7_MARK,	PSB7_0, PSB6_0, PTS1_FN), -	PINMUX_DATA(VIO1_D6_MARK,	PSB7_0, PSB6_0, PTS0_FN), - -	PINMUX_DATA(SCIF5_SCK_MARK,	PSA10_1, PTS4_FN), -	PINMUX_DATA(SCIF5_RXD_MARK,	PSA9_1,  PTS3_FN), -	PINMUX_DATA(SCIF5_TXD_MARK,	PSA9_1,  PTS2_FN), - -	PINMUX_DATA(VIO0_D15_MARK,	PSB7_0, PSB6_1, PTS1_FN), -	PINMUX_DATA(VIO0_D14_MARK,	PSB7_0, PSB6_1, PTS0_FN), - -	PINMUX_DATA(IDED7_MARK,		PSB7_1, PSB6_0, PTS1_FN), -	PINMUX_DATA(IDED6_MARK,		PSB7_1, PSB6_0, PTS0_FN), - -	/* PTT FN */ -	PINMUX_DATA(D15_MARK, PTT7_FN), -	PINMUX_DATA(D14_MARK, PTT6_FN), -	PINMUX_DATA(D13_MARK, PTT5_FN), -	PINMUX_DATA(D12_MARK, PTT4_FN), -	PINMUX_DATA(D11_MARK, PTT3_FN), -	PINMUX_DATA(D10_MARK, PTT2_FN), -	PINMUX_DATA(D9_MARK,  PTT1_FN), -	PINMUX_DATA(D8_MARK,  PTT0_FN), - -	/* PTU FN */ -	PINMUX_DATA(DMAC_DACK0_MARK, PTU7_FN), -	PINMUX_DATA(DMAC_DREQ0_MARK, PTU6_FN), - -	PINMUX_DATA(FSIOASD_MARK,	PSE1_0, PTU5_FN), -	PINMUX_DATA(FSIIABCK_MARK,	PSE1_0, PTU4_FN), -	PINMUX_DATA(FSIIALRCK_MARK,	PSE1_0, PTU3_FN), -	PINMUX_DATA(FSIOABCK_MARK,	PSE1_0, PTU2_FN), -	PINMUX_DATA(FSIOALRCK_MARK,	PSE1_0, PTU1_FN), -	PINMUX_DATA(CLKAUDIOAO_MARK,	PSE0_0, PTU0_FN), - -	/* PTV FN */ -	PINMUX_DATA(FSIIBSD_MARK,	PSD7_0,  PSD6_0,  PTV7_FN), -	PINMUX_DATA(FSIOBSD_MARK,	PSD7_0,  PSD6_0,  PTV6_FN), -	PINMUX_DATA(FSIIBBCK_MARK,	PSC15_0, PSC14_0, PTV5_FN), -	PINMUX_DATA(FSIIBLRCK_MARK,	PSC15_0, PSC14_0, PTV4_FN), -	PINMUX_DATA(FSIOBBCK_MARK,	PSC15_0, PSC14_0, PTV3_FN), -	PINMUX_DATA(FSIOBLRCK_MARK,	PSC15_0, PSC14_0, PTV2_FN), -	PINMUX_DATA(CLKAUDIOBO_MARK,	PSE3_0,  PSE2_0,  PTV1_FN), -	PINMUX_DATA(FSIIASD_MARK,	PSE10_0,          PTV0_FN), - -	PINMUX_DATA(MSIOF1_SS2_MARK,	PSD7_0,  PSD6_1,  PTV7_FN), -	PINMUX_DATA(MSIOF1_RSYNC_MARK,	PSD7_1,  PSD6_0,  PTV7_FN), -	PINMUX_DATA(MSIOF1_SS1_MARK,	PSD7_0,  PSD6_1,  PTV6_FN), -	PINMUX_DATA(MSIOF1_RSCK_MARK,	PSD7_1,  PSD6_0,  PTV6_FN), -	PINMUX_DATA(MSIOF1_RXD_MARK,	PSC15_0, PSC14_1, PTV5_FN), -	PINMUX_DATA(MSIOF1_TSYNC_MARK,	PSC15_0, PSC14_1, PTV4_FN), -	PINMUX_DATA(MSIOF1_TSCK_MARK,	PSC15_0, PSC14_1, PTV3_FN), -	PINMUX_DATA(MSIOF1_TXD_MARK,	PSC15_0, PSC14_1, PTV2_FN), -	PINMUX_DATA(MSIOF1_MCK_MARK,	PSE3_0,  PSE2_1,  PTV1_FN), - -	/* PTW FN */ -	PINMUX_DATA(MMC_D7_MARK,	PSE13_0, PSE12_0, PTW7_FN), -	PINMUX_DATA(MMC_D6_MARK,	PSE13_0, PSE12_0, PTW6_FN), -	PINMUX_DATA(MMC_D5_MARK,	PSE13_0, PSE12_0, PTW5_FN), -	PINMUX_DATA(MMC_D4_MARK,	PSE13_0, PSE12_0, PTW4_FN), -	PINMUX_DATA(MMC_D3_MARK,	PSA13_0,          PTW3_FN), -	PINMUX_DATA(MMC_D2_MARK,	PSA13_0,          PTW2_FN), -	PINMUX_DATA(MMC_D1_MARK,	PSA13_0,          PTW1_FN), -	PINMUX_DATA(MMC_D0_MARK,	PSA13_0,          PTW0_FN), - -	PINMUX_DATA(SDHI1CD_MARK,	PSE13_0, PSE12_1, PTW7_FN), -	PINMUX_DATA(SDHI1WP_MARK,	PSE13_0, PSE12_1, PTW6_FN), -	PINMUX_DATA(SDHI1D3_MARK,	PSE13_0, PSE12_1, PTW5_FN), -	PINMUX_DATA(SDHI1D2_MARK,	PSE13_0, PSE12_1, PTW4_FN), -	PINMUX_DATA(SDHI1D1_MARK,	PSA13_1,          PTW3_FN), -	PINMUX_DATA(SDHI1D0_MARK,	PSA13_1,          PTW2_FN), -	PINMUX_DATA(SDHI1CMD_MARK,	PSA13_1,          PTW1_FN), -	PINMUX_DATA(SDHI1CLK_MARK,	PSA13_1,          PTW0_FN), - -	PINMUX_DATA(IODACK_MARK,	PSE13_1, PSE12_0, PTW7_FN), -	PINMUX_DATA(IDERST_MARK,	PSE13_1, PSE12_0, PTW6_FN), -	PINMUX_DATA(EXBUF_ENB_MARK,	PSE13_1, PSE12_0, PTW5_FN), -	PINMUX_DATA(DIRECTION_MARK,	PSE13_1, PSE12_0, PTW4_FN), - -	/* PTX FN */ -	PINMUX_DATA(DMAC_DACK1_MARK,	PSA12_0, PTX7_FN), -	PINMUX_DATA(DMAC_DREQ1_MARK,	PSA12_0, PTX6_FN), - -	PINMUX_DATA(IRDA_OUT_MARK,	PSA12_1, PTX7_FN), -	PINMUX_DATA(IRDA_IN_MARK,	PSA12_1, PTX6_FN), - -	PINMUX_DATA(TSIF_TS0_SDAT_MARK,	PSC0_0, PTX5_FN), -	PINMUX_DATA(TSIF_TS0_SCK_MARK,	PSC1_0, PTX4_FN), -	PINMUX_DATA(TSIF_TS0_SDEN_MARK,	PSC2_0, PTX3_FN), -	PINMUX_DATA(TSIF_TS0_SPSYNC_MARK,       PTX2_FN), - -	PINMUX_DATA(LNKSTA_MARK,	PSC0_1, PTX5_FN), -	PINMUX_DATA(MDIO_MARK,		PSC1_1, PTX4_FN), -	PINMUX_DATA(MDC_MARK,		PSC2_1, PTX3_FN), - -	PINMUX_DATA(MMC_CLK_MARK, PTX1_FN), -	PINMUX_DATA(MMC_CMD_MARK, PTX0_FN), - -	/* PTY FN */ -	PINMUX_DATA(SDHI0CD_MARK,  PTY7_FN), -	PINMUX_DATA(SDHI0WP_MARK,  PTY6_FN), -	PINMUX_DATA(SDHI0D3_MARK,  PTY5_FN), -	PINMUX_DATA(SDHI0D2_MARK,  PTY4_FN), -	PINMUX_DATA(SDHI0D1_MARK,  PTY3_FN), -	PINMUX_DATA(SDHI0D0_MARK,  PTY2_FN), -	PINMUX_DATA(SDHI0CMD_MARK, PTY1_FN), -	PINMUX_DATA(SDHI0CLK_MARK, PTY0_FN), - -	/* PTZ FN */ -	PINMUX_DATA(INTC_IRQ7_MARK,	PSB10_0, PTZ7_FN), -	PINMUX_DATA(INTC_IRQ6_MARK,	PSB11_0, PTZ6_FN), -	PINMUX_DATA(INTC_IRQ5_MARK,	PSB12_0, PTZ5_FN), -	PINMUX_DATA(INTC_IRQ4_MARK,	PSB13_0, PTZ4_FN), -	PINMUX_DATA(INTC_IRQ3_MARK,	PSB14_0, PTZ3_FN), -	PINMUX_DATA(INTC_IRQ2_MARK,	         PTZ2_FN), -	PINMUX_DATA(INTC_IRQ1_MARK,	         PTZ1_FN), -	PINMUX_DATA(INTC_IRQ0_MARK,	         PTZ0_FN), - -	PINMUX_DATA(SCIF3_I_CTS_MARK,	PSB10_1, PTZ7_FN), -	PINMUX_DATA(SCIF3_I_RTS_MARK,	PSB11_1, PTZ6_FN), -	PINMUX_DATA(SCIF3_I_SCK_MARK,	PSB12_1, PTZ5_FN), -	PINMUX_DATA(SCIF3_I_RXD_MARK,	PSB13_1, PTZ4_FN), -	PINMUX_DATA(SCIF3_I_TXD_MARK,	PSB14_1, PTZ3_FN), -}; - -static struct pinmux_gpio pinmux_gpios[] = { -	/* PTA */ -	PINMUX_GPIO(GPIO_PTA7, PTA7_DATA), -	PINMUX_GPIO(GPIO_PTA6, PTA6_DATA), -	PINMUX_GPIO(GPIO_PTA5, PTA5_DATA), -	PINMUX_GPIO(GPIO_PTA4, PTA4_DATA), -	PINMUX_GPIO(GPIO_PTA3, PTA3_DATA), -	PINMUX_GPIO(GPIO_PTA2, PTA2_DATA), -	PINMUX_GPIO(GPIO_PTA1, PTA1_DATA), -	PINMUX_GPIO(GPIO_PTA0, PTA0_DATA), - -	/* PTB */ -	PINMUX_GPIO(GPIO_PTB7, PTB7_DATA), -	PINMUX_GPIO(GPIO_PTB6, PTB6_DATA), -	PINMUX_GPIO(GPIO_PTB5, PTB5_DATA), -	PINMUX_GPIO(GPIO_PTB4, PTB4_DATA), -	PINMUX_GPIO(GPIO_PTB3, PTB3_DATA), -	PINMUX_GPIO(GPIO_PTB2, PTB2_DATA), -	PINMUX_GPIO(GPIO_PTB1, PTB1_DATA), -	PINMUX_GPIO(GPIO_PTB0, PTB0_DATA), - -	/* PTC */ -	PINMUX_GPIO(GPIO_PTC7, PTC7_DATA), -	PINMUX_GPIO(GPIO_PTC6, PTC6_DATA), -	PINMUX_GPIO(GPIO_PTC5, PTC5_DATA), -	PINMUX_GPIO(GPIO_PTC4, PTC4_DATA), -	PINMUX_GPIO(GPIO_PTC3, PTC3_DATA), -	PINMUX_GPIO(GPIO_PTC2, PTC2_DATA), -	PINMUX_GPIO(GPIO_PTC1, PTC1_DATA), -	PINMUX_GPIO(GPIO_PTC0, PTC0_DATA), - -	/* PTD */ -	PINMUX_GPIO(GPIO_PTD7, PTD7_DATA), -	PINMUX_GPIO(GPIO_PTD6, PTD6_DATA), -	PINMUX_GPIO(GPIO_PTD5, PTD5_DATA), -	PINMUX_GPIO(GPIO_PTD4, PTD4_DATA), -	PINMUX_GPIO(GPIO_PTD3, PTD3_DATA), -	PINMUX_GPIO(GPIO_PTD2, PTD2_DATA), -	PINMUX_GPIO(GPIO_PTD1, PTD1_DATA), -	PINMUX_GPIO(GPIO_PTD0, PTD0_DATA), - -	/* PTE */ -	PINMUX_GPIO(GPIO_PTE7, PTE7_DATA), -	PINMUX_GPIO(GPIO_PTE6, PTE6_DATA), -	PINMUX_GPIO(GPIO_PTE5, PTE5_DATA), -	PINMUX_GPIO(GPIO_PTE4, PTE4_DATA), -	PINMUX_GPIO(GPIO_PTE3, PTE3_DATA), -	PINMUX_GPIO(GPIO_PTE2, PTE2_DATA), -	PINMUX_GPIO(GPIO_PTE1, PTE1_DATA), -	PINMUX_GPIO(GPIO_PTE0, PTE0_DATA), - -	/* PTF */ -	PINMUX_GPIO(GPIO_PTF7, PTF7_DATA), -	PINMUX_GPIO(GPIO_PTF6, PTF6_DATA), -	PINMUX_GPIO(GPIO_PTF5, PTF5_DATA), -	PINMUX_GPIO(GPIO_PTF4, PTF4_DATA), -	PINMUX_GPIO(GPIO_PTF3, PTF3_DATA), -	PINMUX_GPIO(GPIO_PTF2, PTF2_DATA), -	PINMUX_GPIO(GPIO_PTF1, PTF1_DATA), -	PINMUX_GPIO(GPIO_PTF0, PTF0_DATA), - -	/* PTG */ -	PINMUX_GPIO(GPIO_PTG5, PTG5_DATA), -	PINMUX_GPIO(GPIO_PTG4, PTG4_DATA), -	PINMUX_GPIO(GPIO_PTG3, PTG3_DATA), -	PINMUX_GPIO(GPIO_PTG2, PTG2_DATA), -	PINMUX_GPIO(GPIO_PTG1, PTG1_DATA), -	PINMUX_GPIO(GPIO_PTG0, PTG0_DATA), - -	/* PTH */ -	PINMUX_GPIO(GPIO_PTH7, PTH7_DATA), -	PINMUX_GPIO(GPIO_PTH6, PTH6_DATA), -	PINMUX_GPIO(GPIO_PTH5, PTH5_DATA), -	PINMUX_GPIO(GPIO_PTH4, PTH4_DATA), -	PINMUX_GPIO(GPIO_PTH3, PTH3_DATA), -	PINMUX_GPIO(GPIO_PTH2, PTH2_DATA), -	PINMUX_GPIO(GPIO_PTH1, PTH1_DATA), -	PINMUX_GPIO(GPIO_PTH0, PTH0_DATA), - -	/* PTJ */ -	PINMUX_GPIO(GPIO_PTJ7, PTJ7_DATA), -	PINMUX_GPIO(GPIO_PTJ6, PTJ6_DATA), -	PINMUX_GPIO(GPIO_PTJ5, PTJ5_DATA), -	PINMUX_GPIO(GPIO_PTJ3, PTJ3_DATA), -	PINMUX_GPIO(GPIO_PTJ2, PTJ2_DATA), -	PINMUX_GPIO(GPIO_PTJ1, PTJ1_DATA), -	PINMUX_GPIO(GPIO_PTJ0, PTJ0_DATA), - -	/* PTK */ -	PINMUX_GPIO(GPIO_PTK7, PTK7_DATA), -	PINMUX_GPIO(GPIO_PTK6, PTK6_DATA), -	PINMUX_GPIO(GPIO_PTK5, PTK5_DATA), -	PINMUX_GPIO(GPIO_PTK4, PTK4_DATA), -	PINMUX_GPIO(GPIO_PTK3, PTK3_DATA), -	PINMUX_GPIO(GPIO_PTK2, PTK2_DATA), -	PINMUX_GPIO(GPIO_PTK1, PTK1_DATA), -	PINMUX_GPIO(GPIO_PTK0, PTK0_DATA), - -	/* PTL */ -	PINMUX_GPIO(GPIO_PTL7, PTL7_DATA), -	PINMUX_GPIO(GPIO_PTL6, PTL6_DATA), -	PINMUX_GPIO(GPIO_PTL5, PTL5_DATA), -	PINMUX_GPIO(GPIO_PTL4, PTL4_DATA), -	PINMUX_GPIO(GPIO_PTL3, PTL3_DATA), -	PINMUX_GPIO(GPIO_PTL2, PTL2_DATA), -	PINMUX_GPIO(GPIO_PTL1, PTL1_DATA), -	PINMUX_GPIO(GPIO_PTL0, PTL0_DATA), - -	/* PTM */ -	PINMUX_GPIO(GPIO_PTM7, PTM7_DATA), -	PINMUX_GPIO(GPIO_PTM6, PTM6_DATA), -	PINMUX_GPIO(GPIO_PTM5, PTM5_DATA), -	PINMUX_GPIO(GPIO_PTM4, PTM4_DATA), -	PINMUX_GPIO(GPIO_PTM3, PTM3_DATA), -	PINMUX_GPIO(GPIO_PTM2, PTM2_DATA), -	PINMUX_GPIO(GPIO_PTM1, PTM1_DATA), -	PINMUX_GPIO(GPIO_PTM0, PTM0_DATA), - -	/* PTN */ -	PINMUX_GPIO(GPIO_PTN7, PTN7_DATA), -	PINMUX_GPIO(GPIO_PTN6, PTN6_DATA), -	PINMUX_GPIO(GPIO_PTN5, PTN5_DATA), -	PINMUX_GPIO(GPIO_PTN4, PTN4_DATA), -	PINMUX_GPIO(GPIO_PTN3, PTN3_DATA), -	PINMUX_GPIO(GPIO_PTN2, PTN2_DATA), -	PINMUX_GPIO(GPIO_PTN1, PTN1_DATA), -	PINMUX_GPIO(GPIO_PTN0, PTN0_DATA), - -	/* PTQ */ -	PINMUX_GPIO(GPIO_PTQ7, PTQ7_DATA), -	PINMUX_GPIO(GPIO_PTQ6, PTQ6_DATA), -	PINMUX_GPIO(GPIO_PTQ5, PTQ5_DATA), -	PINMUX_GPIO(GPIO_PTQ4, PTQ4_DATA), -	PINMUX_GPIO(GPIO_PTQ3, PTQ3_DATA), -	PINMUX_GPIO(GPIO_PTQ2, PTQ2_DATA), -	PINMUX_GPIO(GPIO_PTQ1, PTQ1_DATA), -	PINMUX_GPIO(GPIO_PTQ0, PTQ0_DATA), - -	/* PTR */ -	PINMUX_GPIO(GPIO_PTR7, PTR7_DATA), -	PINMUX_GPIO(GPIO_PTR6, PTR6_DATA), -	PINMUX_GPIO(GPIO_PTR5, PTR5_DATA), -	PINMUX_GPIO(GPIO_PTR4, PTR4_DATA), -	PINMUX_GPIO(GPIO_PTR3, PTR3_DATA), -	PINMUX_GPIO(GPIO_PTR2, PTR2_DATA), -	PINMUX_GPIO(GPIO_PTR1, PTR1_DATA), -	PINMUX_GPIO(GPIO_PTR0, PTR0_DATA), - -	/* PTS */ -	PINMUX_GPIO(GPIO_PTS6, PTS6_DATA), -	PINMUX_GPIO(GPIO_PTS5, PTS5_DATA), -	PINMUX_GPIO(GPIO_PTS4, PTS4_DATA), -	PINMUX_GPIO(GPIO_PTS3, PTS3_DATA), -	PINMUX_GPIO(GPIO_PTS2, PTS2_DATA), -	PINMUX_GPIO(GPIO_PTS1, PTS1_DATA), -	PINMUX_GPIO(GPIO_PTS0, PTS0_DATA), - -	/* PTT */ -	PINMUX_GPIO(GPIO_PTT7, PTT7_DATA), -	PINMUX_GPIO(GPIO_PTT6, PTT6_DATA), -	PINMUX_GPIO(GPIO_PTT5, PTT5_DATA), -	PINMUX_GPIO(GPIO_PTT4, PTT4_DATA), -	PINMUX_GPIO(GPIO_PTT3, PTT3_DATA), -	PINMUX_GPIO(GPIO_PTT2, PTT2_DATA), -	PINMUX_GPIO(GPIO_PTT1, PTT1_DATA), -	PINMUX_GPIO(GPIO_PTT0, PTT0_DATA), - -	/* PTU */ -	PINMUX_GPIO(GPIO_PTU7, PTU7_DATA), -	PINMUX_GPIO(GPIO_PTU6, PTU6_DATA), -	PINMUX_GPIO(GPIO_PTU5, PTU5_DATA), -	PINMUX_GPIO(GPIO_PTU4, PTU4_DATA), -	PINMUX_GPIO(GPIO_PTU3, PTU3_DATA), -	PINMUX_GPIO(GPIO_PTU2, PTU2_DATA), -	PINMUX_GPIO(GPIO_PTU1, PTU1_DATA), -	PINMUX_GPIO(GPIO_PTU0, PTU0_DATA), - -	/* PTV */ -	PINMUX_GPIO(GPIO_PTV7, PTV7_DATA), -	PINMUX_GPIO(GPIO_PTV6, PTV6_DATA), -	PINMUX_GPIO(GPIO_PTV5, PTV5_DATA), -	PINMUX_GPIO(GPIO_PTV4, PTV4_DATA), -	PINMUX_GPIO(GPIO_PTV3, PTV3_DATA), -	PINMUX_GPIO(GPIO_PTV2, PTV2_DATA), -	PINMUX_GPIO(GPIO_PTV1, PTV1_DATA), -	PINMUX_GPIO(GPIO_PTV0, PTV0_DATA), - -	/* PTW */ -	PINMUX_GPIO(GPIO_PTW7, PTW7_DATA), -	PINMUX_GPIO(GPIO_PTW6, PTW6_DATA), -	PINMUX_GPIO(GPIO_PTW5, PTW5_DATA), -	PINMUX_GPIO(GPIO_PTW4, PTW4_DATA), -	PINMUX_GPIO(GPIO_PTW3, PTW3_DATA), -	PINMUX_GPIO(GPIO_PTW2, PTW2_DATA), -	PINMUX_GPIO(GPIO_PTW1, PTW1_DATA), -	PINMUX_GPIO(GPIO_PTW0, PTW0_DATA), - -	/* PTX */ -	PINMUX_GPIO(GPIO_PTX7, PTX7_DATA), -	PINMUX_GPIO(GPIO_PTX6, PTX6_DATA), -	PINMUX_GPIO(GPIO_PTX5, PTX5_DATA), -	PINMUX_GPIO(GPIO_PTX4, PTX4_DATA), -	PINMUX_GPIO(GPIO_PTX3, PTX3_DATA), -	PINMUX_GPIO(GPIO_PTX2, PTX2_DATA), -	PINMUX_GPIO(GPIO_PTX1, PTX1_DATA), -	PINMUX_GPIO(GPIO_PTX0, PTX0_DATA), - -	/* PTY */ -	PINMUX_GPIO(GPIO_PTY7, PTY7_DATA), -	PINMUX_GPIO(GPIO_PTY6, PTY6_DATA), -	PINMUX_GPIO(GPIO_PTY5, PTY5_DATA), -	PINMUX_GPIO(GPIO_PTY4, PTY4_DATA), -	PINMUX_GPIO(GPIO_PTY3, PTY3_DATA), -	PINMUX_GPIO(GPIO_PTY2, PTY2_DATA), -	PINMUX_GPIO(GPIO_PTY1, PTY1_DATA), -	PINMUX_GPIO(GPIO_PTY0, PTY0_DATA), - -	/* PTZ */ -	PINMUX_GPIO(GPIO_PTZ7, PTZ7_DATA), -	PINMUX_GPIO(GPIO_PTZ6, PTZ6_DATA), -	PINMUX_GPIO(GPIO_PTZ5, PTZ5_DATA), -	PINMUX_GPIO(GPIO_PTZ4, PTZ4_DATA), -	PINMUX_GPIO(GPIO_PTZ3, PTZ3_DATA), -	PINMUX_GPIO(GPIO_PTZ2, PTZ2_DATA), -	PINMUX_GPIO(GPIO_PTZ1, PTZ1_DATA), -	PINMUX_GPIO(GPIO_PTZ0, PTZ0_DATA), - -	/* BSC */ -	PINMUX_GPIO(GPIO_FN_D31,	D31_MARK), -	PINMUX_GPIO(GPIO_FN_D30,	D30_MARK), -	PINMUX_GPIO(GPIO_FN_D29,	D29_MARK), -	PINMUX_GPIO(GPIO_FN_D28,	D28_MARK), -	PINMUX_GPIO(GPIO_FN_D27,	D27_MARK), -	PINMUX_GPIO(GPIO_FN_D26,	D26_MARK), -	PINMUX_GPIO(GPIO_FN_D25,	D25_MARK), -	PINMUX_GPIO(GPIO_FN_D24,	D24_MARK), -	PINMUX_GPIO(GPIO_FN_D23,	D23_MARK), -	PINMUX_GPIO(GPIO_FN_D22,	D22_MARK), -	PINMUX_GPIO(GPIO_FN_D21,	D21_MARK), -	PINMUX_GPIO(GPIO_FN_D20,	D20_MARK), -	PINMUX_GPIO(GPIO_FN_D19,	D19_MARK), -	PINMUX_GPIO(GPIO_FN_D18,	D18_MARK), -	PINMUX_GPIO(GPIO_FN_D17,	D17_MARK), -	PINMUX_GPIO(GPIO_FN_D16,	D16_MARK), -	PINMUX_GPIO(GPIO_FN_D15,	D15_MARK), -	PINMUX_GPIO(GPIO_FN_D14,	D14_MARK), -	PINMUX_GPIO(GPIO_FN_D13,	D13_MARK), -	PINMUX_GPIO(GPIO_FN_D12,	D12_MARK), -	PINMUX_GPIO(GPIO_FN_D11,	D11_MARK), -	PINMUX_GPIO(GPIO_FN_D10,	D10_MARK), -	PINMUX_GPIO(GPIO_FN_D9,		D9_MARK), -	PINMUX_GPIO(GPIO_FN_D8,		D8_MARK), -	PINMUX_GPIO(GPIO_FN_D7,		D7_MARK), -	PINMUX_GPIO(GPIO_FN_D6,		D6_MARK), -	PINMUX_GPIO(GPIO_FN_D5,		D5_MARK), -	PINMUX_GPIO(GPIO_FN_D4,		D4_MARK), -	PINMUX_GPIO(GPIO_FN_D3,		D3_MARK), -	PINMUX_GPIO(GPIO_FN_D2,		D2_MARK), -	PINMUX_GPIO(GPIO_FN_D1,		D1_MARK), -	PINMUX_GPIO(GPIO_FN_D0,		D0_MARK), -	PINMUX_GPIO(GPIO_FN_A25,	A25_MARK), -	PINMUX_GPIO(GPIO_FN_A24,	A24_MARK), -	PINMUX_GPIO(GPIO_FN_A23,	A23_MARK), -	PINMUX_GPIO(GPIO_FN_A22,	A22_MARK), -	PINMUX_GPIO(GPIO_FN_CS6B_CE1B,	CS6B_CE1B_MARK), -	PINMUX_GPIO(GPIO_FN_CS6A_CE2B,	CS6A_CE2B_MARK), -	PINMUX_GPIO(GPIO_FN_CS5B_CE1A,	CS5B_CE1A_MARK), -	PINMUX_GPIO(GPIO_FN_CS5A_CE2A,	CS5A_CE2A_MARK), -	PINMUX_GPIO(GPIO_FN_WE3_ICIOWR,	WE3_ICIOWR_MARK), -	PINMUX_GPIO(GPIO_FN_WE2_ICIORD,	WE2_ICIORD_MARK), -	PINMUX_GPIO(GPIO_FN_IOIS16,	IOIS16_MARK), -	PINMUX_GPIO(GPIO_FN_WAIT,	WAIT_MARK), -	PINMUX_GPIO(GPIO_FN_BS,		BS_MARK), - -	/* KEYSC */ -	PINMUX_GPIO(GPIO_FN_KEYOUT5_IN5,	KEYOUT5_IN5_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT4_IN6,	KEYOUT4_IN6_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN4,		KEYIN4_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN3,		KEYIN3_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN2,		KEYIN2_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN1,		KEYIN1_MARK), -	PINMUX_GPIO(GPIO_FN_KEYIN0,		KEYIN0_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT3,		KEYOUT3_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT2,		KEYOUT2_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT1,		KEYOUT1_MARK), -	PINMUX_GPIO(GPIO_FN_KEYOUT0,		KEYOUT0_MARK), - -	/* ATAPI */ -	PINMUX_GPIO(GPIO_FN_IDED15,	IDED15_MARK), -	PINMUX_GPIO(GPIO_FN_IDED14,	IDED14_MARK), -	PINMUX_GPIO(GPIO_FN_IDED13,	IDED13_MARK), -	PINMUX_GPIO(GPIO_FN_IDED12,	IDED12_MARK), -	PINMUX_GPIO(GPIO_FN_IDED11,	IDED11_MARK), -	PINMUX_GPIO(GPIO_FN_IDED10,	IDED10_MARK), -	PINMUX_GPIO(GPIO_FN_IDED9,	IDED9_MARK), -	PINMUX_GPIO(GPIO_FN_IDED8,	IDED8_MARK), -	PINMUX_GPIO(GPIO_FN_IDED7,	IDED7_MARK), -	PINMUX_GPIO(GPIO_FN_IDED6,	IDED6_MARK), -	PINMUX_GPIO(GPIO_FN_IDED5,	IDED5_MARK), -	PINMUX_GPIO(GPIO_FN_IDED4,	IDED4_MARK), -	PINMUX_GPIO(GPIO_FN_IDED3,	IDED3_MARK), -	PINMUX_GPIO(GPIO_FN_IDED2,	IDED2_MARK), -	PINMUX_GPIO(GPIO_FN_IDED1,	IDED1_MARK), -	PINMUX_GPIO(GPIO_FN_IDED0,	IDED0_MARK), -	PINMUX_GPIO(GPIO_FN_IDEA2,	IDEA2_MARK), -	PINMUX_GPIO(GPIO_FN_IDEA1,	IDEA1_MARK), -	PINMUX_GPIO(GPIO_FN_IDEA0,	IDEA0_MARK), -	PINMUX_GPIO(GPIO_FN_IDEIOWR,	IDEIOWR_MARK), -	PINMUX_GPIO(GPIO_FN_IODREQ,	IODREQ_MARK), -	PINMUX_GPIO(GPIO_FN_IDECS0,	IDECS0_MARK), -	PINMUX_GPIO(GPIO_FN_IDECS1,	IDECS1_MARK), -	PINMUX_GPIO(GPIO_FN_IDEIORD,	IDEIORD_MARK), -	PINMUX_GPIO(GPIO_FN_DIRECTION,	DIRECTION_MARK), -	PINMUX_GPIO(GPIO_FN_EXBUF_ENB,	EXBUF_ENB_MARK), -	PINMUX_GPIO(GPIO_FN_IDERST,	IDERST_MARK), -	PINMUX_GPIO(GPIO_FN_IODACK,	IODACK_MARK), -	PINMUX_GPIO(GPIO_FN_IDEINT,	IDEINT_MARK), -	PINMUX_GPIO(GPIO_FN_IDEIORDY,	IDEIORDY_MARK), - -	/* TPU */ -	PINMUX_GPIO(GPIO_FN_TPUTO3,	TPUTO3_MARK), -	PINMUX_GPIO(GPIO_FN_TPUTO2,	TPUTO2_MARK), -	PINMUX_GPIO(GPIO_FN_TPUTO1,	TPUTO1_MARK), -	PINMUX_GPIO(GPIO_FN_TPUTO0,	TPUTO0_MARK), -	PINMUX_GPIO(GPIO_FN_TPUTI3,	TPUTI3_MARK), -	PINMUX_GPIO(GPIO_FN_TPUTI2,	TPUTI2_MARK), - -	/* LCDC */ -	PINMUX_GPIO(GPIO_FN_LCDD23,	LCDD23_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD22,	LCDD22_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD21,	LCDD21_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD20,	LCDD20_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD19,	LCDD19_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD18,	LCDD18_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD17,	LCDD17_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD16,	LCDD16_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD15,	LCDD15_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD14,	LCDD14_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD13,	LCDD13_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD12,	LCDD12_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD11,	LCDD11_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD10,	LCDD10_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD9,	LCDD9_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD8,	LCDD8_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD7,	LCDD7_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD6,	LCDD6_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD5,	LCDD5_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD4,	LCDD4_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD3,	LCDD3_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD2,	LCDD2_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD1,	LCDD1_MARK), -	PINMUX_GPIO(GPIO_FN_LCDD0,	LCDD0_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVSYN,	LCDVSYN_MARK), -	PINMUX_GPIO(GPIO_FN_LCDDISP,	LCDDISP_MARK), -	PINMUX_GPIO(GPIO_FN_LCDRS,	LCDRS_MARK), -	PINMUX_GPIO(GPIO_FN_LCDHSYN,	LCDHSYN_MARK), -	PINMUX_GPIO(GPIO_FN_LCDCS,	LCDCS_MARK), -	PINMUX_GPIO(GPIO_FN_LCDDON,	LCDDON_MARK), -	PINMUX_GPIO(GPIO_FN_LCDDCK,	LCDDCK_MARK), -	PINMUX_GPIO(GPIO_FN_LCDWR,	LCDWR_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVEPWC,	LCDVEPWC_MARK), -	PINMUX_GPIO(GPIO_FN_LCDVCPWC,	LCDVCPWC_MARK), -	PINMUX_GPIO(GPIO_FN_LCDRD,	LCDRD_MARK), -	PINMUX_GPIO(GPIO_FN_LCDLCLK,	LCDLCLK_MARK), - -	/* SCIF0 */ -	PINMUX_GPIO(GPIO_FN_SCIF0_TXD,	SCIF0_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_RXD,	SCIF0_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_SCK,	SCIF0_SCK_MARK), - -	/* SCIF1 */ -	PINMUX_GPIO(GPIO_FN_SCIF1_SCK,	SCIF1_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_RXD,	SCIF1_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_TXD,	SCIF1_TXD_MARK), - -	/* SCIF2 */ -	PINMUX_GPIO(GPIO_FN_SCIF2_L_TXD,	SCIF2_L_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_L_SCK,	SCIF2_L_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_L_RXD,	SCIF2_L_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_V_TXD,	SCIF2_V_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_V_SCK,	SCIF2_V_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_V_RXD,	SCIF2_V_RXD_MARK), - -	/* SCIF3 */ -	PINMUX_GPIO(GPIO_FN_SCIF3_V_SCK,	SCIF3_V_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_V_RXD,	SCIF3_V_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_V_TXD,	SCIF3_V_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_V_CTS,	SCIF3_V_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_V_RTS,	SCIF3_V_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_I_SCK,	SCIF3_I_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_I_RXD,	SCIF3_I_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_I_TXD,	SCIF3_I_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_I_CTS,	SCIF3_I_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_I_RTS,	SCIF3_I_RTS_MARK), - -	/* SCIF4 */ -	PINMUX_GPIO(GPIO_FN_SCIF4_SCK,	SCIF4_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_RXD,	SCIF4_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_TXD,	SCIF4_TXD_MARK), - -	/* SCIF5 */ -	PINMUX_GPIO(GPIO_FN_SCIF5_SCK,	SCIF5_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_RXD,	SCIF5_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_TXD,	SCIF5_TXD_MARK), - -	/* FSI */ -	PINMUX_GPIO(GPIO_FN_FSIMCKB,	FSIMCKB_MARK), -	PINMUX_GPIO(GPIO_FN_FSIMCKA,	FSIMCKA_MARK), -	PINMUX_GPIO(GPIO_FN_FSIOASD,	FSIOASD_MARK), -	PINMUX_GPIO(GPIO_FN_FSIIABCK,	FSIIABCK_MARK), -	PINMUX_GPIO(GPIO_FN_FSIIALRCK,	FSIIALRCK_MARK), -	PINMUX_GPIO(GPIO_FN_FSIOABCK,	FSIOABCK_MARK), -	PINMUX_GPIO(GPIO_FN_FSIOALRCK,	FSIOALRCK_MARK), -	PINMUX_GPIO(GPIO_FN_CLKAUDIOAO,	CLKAUDIOAO_MARK), -	PINMUX_GPIO(GPIO_FN_FSIIBSD,	FSIIBSD_MARK), -	PINMUX_GPIO(GPIO_FN_FSIOBSD,	FSIOBSD_MARK), -	PINMUX_GPIO(GPIO_FN_FSIIBBCK,	FSIIBBCK_MARK), -	PINMUX_GPIO(GPIO_FN_FSIIBLRCK,	FSIIBLRCK_MARK), -	PINMUX_GPIO(GPIO_FN_FSIOBBCK,	FSIOBBCK_MARK), -	PINMUX_GPIO(GPIO_FN_FSIOBLRCK,	FSIOBLRCK_MARK), -	PINMUX_GPIO(GPIO_FN_CLKAUDIOBO,	CLKAUDIOBO_MARK), -	PINMUX_GPIO(GPIO_FN_FSIIASD,	FSIIASD_MARK), - -	/* AUD */ -	PINMUX_GPIO(GPIO_FN_AUDCK,	AUDCK_MARK), -	PINMUX_GPIO(GPIO_FN_AUDSYNC,	AUDSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA3,	AUDATA3_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA2,	AUDATA2_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA1,	AUDATA1_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA0,	AUDATA0_MARK), - -	/* VIO */ -	PINMUX_GPIO(GPIO_FN_VIO_CKO,	VIO_CKO_MARK), - -	/* VIO0 */ -	PINMUX_GPIO(GPIO_FN_VIO0_D15,	VIO0_D15_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D14,	VIO0_D14_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D13,	VIO0_D13_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D12,	VIO0_D12_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D11,	VIO0_D11_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D10,	VIO0_D10_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D9,	VIO0_D9_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D8,	VIO0_D8_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D7,	VIO0_D7_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D6,	VIO0_D6_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D5,	VIO0_D5_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D4,	VIO0_D4_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D3,	VIO0_D3_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D2,	VIO0_D2_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D1,	VIO0_D1_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_D0,	VIO0_D0_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_VD,	VIO0_VD_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_CLK,	VIO0_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_FLD,	VIO0_FLD_MARK), -	PINMUX_GPIO(GPIO_FN_VIO0_HD,	VIO0_HD_MARK), - -	/* VIO1 */ -	PINMUX_GPIO(GPIO_FN_VIO1_D7,	VIO1_D7_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_D6,	VIO1_D6_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_D5,	VIO1_D5_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_D4,	VIO1_D4_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_D3,	VIO1_D3_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_D2,	VIO1_D2_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_D1,	VIO1_D1_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_D0,	VIO1_D0_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_FLD,	VIO1_FLD_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_HD,	VIO1_HD_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_VD,	VIO1_VD_MARK), -	PINMUX_GPIO(GPIO_FN_VIO1_CLK,	VIO1_CLK_MARK), - -	/* Eth */ -	PINMUX_GPIO(GPIO_FN_RMII_RXD0,		RMII_RXD0_MARK), -	PINMUX_GPIO(GPIO_FN_RMII_RXD1,		RMII_RXD1_MARK), -	PINMUX_GPIO(GPIO_FN_RMII_TXD0,		RMII_TXD0_MARK), -	PINMUX_GPIO(GPIO_FN_RMII_TXD1,		RMII_TXD1_MARK), -	PINMUX_GPIO(GPIO_FN_RMII_REF_CLK,	RMII_REF_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_RMII_TX_EN,		RMII_TX_EN_MARK), -	PINMUX_GPIO(GPIO_FN_RMII_RX_ER,		RMII_RX_ER_MARK), -	PINMUX_GPIO(GPIO_FN_RMII_CRS_DV,	RMII_CRS_DV_MARK), -	PINMUX_GPIO(GPIO_FN_LNKSTA,		LNKSTA_MARK), -	PINMUX_GPIO(GPIO_FN_MDIO,		MDIO_MARK), -	PINMUX_GPIO(GPIO_FN_MDC,		MDC_MARK), - -	/* System */ -	PINMUX_GPIO(GPIO_FN_PDSTATUS,	PDSTATUS_MARK), -	PINMUX_GPIO(GPIO_FN_STATUS2,	STATUS2_MARK), -	PINMUX_GPIO(GPIO_FN_STATUS0,	STATUS0_MARK), - -	/* VOU */ -	PINMUX_GPIO(GPIO_FN_DV_D15,	DV_D15_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D14,	DV_D14_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D13,	DV_D13_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D12,	DV_D12_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D11,	DV_D11_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D10,	DV_D10_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D9,	DV_D9_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D8,	DV_D8_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D7,	DV_D7_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D6,	DV_D6_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D5,	DV_D5_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D4,	DV_D4_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D3,	DV_D3_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D2,	DV_D2_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D1,	DV_D1_MARK), -	PINMUX_GPIO(GPIO_FN_DV_D0,	DV_D0_MARK), -	PINMUX_GPIO(GPIO_FN_DV_CLKI,	DV_CLKI_MARK), -	PINMUX_GPIO(GPIO_FN_DV_CLK,	DV_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_DV_VSYNC,	DV_VSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_DV_HSYNC,	DV_HSYNC_MARK), - -	/* MSIOF0 */ -	PINMUX_GPIO(GPIO_FN_MSIOF0_RXD,		MSIOF0_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_TXD,		MSIOF0_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_MCK,		MSIOF0_MCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_TSCK,	MSIOF0_TSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_SS1,		MSIOF0_SS1_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_SS2,		MSIOF0_SS2_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_TSYNC,	MSIOF0_TSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_RSCK,	MSIOF0_RSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF0_RSYNC,	MSIOF0_RSYNC_MARK), - -	/* MSIOF1 */ -	PINMUX_GPIO(GPIO_FN_MSIOF1_RXD,		MSIOF1_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_TXD,		MSIOF1_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_MCK,		MSIOF1_MCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_TSCK,	MSIOF1_TSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_SS1,		MSIOF1_SS1_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_SS2,		MSIOF1_SS2_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_TSYNC,	MSIOF1_TSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_RSCK,	MSIOF1_RSCK_MARK), -	PINMUX_GPIO(GPIO_FN_MSIOF1_RSYNC,	MSIOF1_RSYNC_MARK), - -	/* DMAC */ -	PINMUX_GPIO(GPIO_FN_DMAC_DACK0,	DMAC_DACK0_MARK), -	PINMUX_GPIO(GPIO_FN_DMAC_DREQ0,	DMAC_DREQ0_MARK), -	PINMUX_GPIO(GPIO_FN_DMAC_DACK1,	DMAC_DACK1_MARK), -	PINMUX_GPIO(GPIO_FN_DMAC_DREQ1,	DMAC_DREQ1_MARK), - -	/* SDHI0 */ -	PINMUX_GPIO(GPIO_FN_SDHI0CD,	SDHI0CD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0WP,	SDHI0WP_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0CMD,	SDHI0CMD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0CLK,	SDHI0CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D3,	SDHI0D3_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D2,	SDHI0D2_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D1,	SDHI0D1_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI0D0,	SDHI0D0_MARK), - -	/* SDHI1 */ -	PINMUX_GPIO(GPIO_FN_SDHI1CD,	SDHI1CD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1WP,	SDHI1WP_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1CMD,	SDHI1CMD_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1CLK,	SDHI1CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1D3,	SDHI1D3_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1D2,	SDHI1D2_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1D1,	SDHI1D1_MARK), -	PINMUX_GPIO(GPIO_FN_SDHI1D0,	SDHI1D0_MARK), - -	/* MMC */ -	PINMUX_GPIO(GPIO_FN_MMC_D7,	MMC_D7_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_D6,	MMC_D6_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_D5,	MMC_D5_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_D4,	MMC_D4_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_D3,	MMC_D3_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_D2,	MMC_D2_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_D1,	MMC_D1_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_D0,	MMC_D0_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_CLK,	MMC_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_MMC_CMD,	MMC_CMD_MARK), - -	/* IrDA */ -	PINMUX_GPIO(GPIO_FN_IRDA_OUT,	IRDA_OUT_MARK), -	PINMUX_GPIO(GPIO_FN_IRDA_IN,	IRDA_IN_MARK), - -	/* TSIF */ -	PINMUX_GPIO(GPIO_FN_TSIF_TS0_SDAT,	TSIF_TS0_SDAT_MARK), -	PINMUX_GPIO(GPIO_FN_TSIF_TS0_SCK,	TSIF_TS0_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_TSIF_TS0_SDEN,	TSIF_TS0_SDEN_MARK), -	PINMUX_GPIO(GPIO_FN_TSIF_TS0_SPSYNC,	TSIF_TS0_SPSYNC_MARK), - -	/* IRQ */ -	PINMUX_GPIO(GPIO_FN_INTC_IRQ7,	INTC_IRQ7_MARK), -	PINMUX_GPIO(GPIO_FN_INTC_IRQ6,	INTC_IRQ6_MARK), -	PINMUX_GPIO(GPIO_FN_INTC_IRQ5,	INTC_IRQ5_MARK), -	PINMUX_GPIO(GPIO_FN_INTC_IRQ4,	INTC_IRQ4_MARK), -	PINMUX_GPIO(GPIO_FN_INTC_IRQ3,	INTC_IRQ3_MARK), -	PINMUX_GPIO(GPIO_FN_INTC_IRQ2,	INTC_IRQ2_MARK), -	PINMUX_GPIO(GPIO_FN_INTC_IRQ1,	INTC_IRQ1_MARK), -	PINMUX_GPIO(GPIO_FN_INTC_IRQ0,	INTC_IRQ0_MARK), - }; - -static struct pinmux_cfg_reg pinmux_config_regs[] = { -	{ PINMUX_CFG_REG("PACR", 0xa4050100, 16, 2) { -		PTA7_FN, PTA7_OUT, PTA7_IN_PU, PTA7_IN, -		PTA6_FN, PTA6_OUT, PTA6_IN_PU, PTA6_IN, -		PTA5_FN, PTA5_OUT, PTA5_IN_PU, PTA5_IN, -		PTA4_FN, PTA4_OUT, PTA4_IN_PU, PTA4_IN, -		PTA3_FN, PTA3_OUT, PTA3_IN_PU, PTA3_IN, -		PTA2_FN, PTA2_OUT, PTA2_IN_PU, PTA2_IN, -		PTA1_FN, PTA1_OUT, PTA1_IN_PU, PTA1_IN, -		PTA0_FN, PTA0_OUT, PTA0_IN_PU, PTA0_IN } +static struct resource sh7724_pfc_resources[] = { +	[0] = { +		.start	= 0xa4050100, +		.end	= 0xa405016f, +		.flags	= IORESOURCE_MEM,  	}, -	{ PINMUX_CFG_REG("PBCR", 0xa4050102, 16, 2) { -		PTB7_FN, PTB7_OUT, PTB7_IN_PU, PTB7_IN, -		PTB6_FN, PTB6_OUT, PTB6_IN_PU, PTB6_IN, -		PTB5_FN, PTB5_OUT, PTB5_IN_PU, PTB5_IN, -		PTB4_FN, PTB4_OUT, PTB4_IN_PU, PTB4_IN, -		PTB3_FN, PTB3_OUT, PTB3_IN_PU, PTB3_IN, -		PTB2_FN, PTB2_OUT, PTB2_IN_PU, PTB2_IN, -		PTB1_FN, PTB1_OUT, PTB1_IN_PU, PTB1_IN, -		PTB0_FN, PTB0_OUT, PTB0_IN_PU, PTB0_IN } -	}, -	{ PINMUX_CFG_REG("PCCR", 0xa4050104, 16, 2) { -		PTC7_FN, PTC7_OUT, PTC7_IN_PU, PTC7_IN, -		PTC6_FN, PTC6_OUT, PTC6_IN_PU, PTC6_IN, -		PTC5_FN, PTC5_OUT, PTC5_IN_PU, PTC5_IN, -		PTC4_FN, PTC4_OUT, PTC4_IN_PU, PTC4_IN, -		PTC3_FN, PTC3_OUT, PTC3_IN_PU, PTC3_IN, -		PTC2_FN, PTC2_OUT, PTC2_IN_PU, PTC2_IN, -		PTC1_FN, PTC1_OUT, PTC1_IN_PU, PTC1_IN, -		PTC0_FN, PTC0_OUT, PTC0_IN_PU, PTC0_IN } -	}, -	{ PINMUX_CFG_REG("PDCR", 0xa4050106, 16, 2) { -		PTD7_FN, PTD7_OUT, PTD7_IN_PU, PTD7_IN, -		PTD6_FN, PTD6_OUT, PTD6_IN_PU, PTD6_IN, -		PTD5_FN, PTD5_OUT, PTD5_IN_PU, PTD5_IN, -		PTD4_FN, PTD4_OUT, PTD4_IN_PU, PTD4_IN, -		PTD3_FN, PTD3_OUT, PTD3_IN_PU, PTD3_IN, -		PTD2_FN, PTD2_OUT, PTD2_IN_PU, PTD2_IN, -		PTD1_FN, PTD1_OUT, PTD1_IN_PU, PTD1_IN, -		PTD0_FN, PTD0_OUT, PTD0_IN_PU, PTD0_IN } -	}, -	{ PINMUX_CFG_REG("PECR", 0xa4050108, 16, 2) { -		PTE7_FN, PTE7_OUT, PTE7_IN_PU, PTE7_IN, -		PTE6_FN, PTE6_OUT, PTE6_IN_PU, PTE6_IN, -		PTE5_FN, PTE5_OUT, PTE5_IN_PU, PTE5_IN, -		PTE4_FN, PTE4_OUT, PTE4_IN_PU, PTE4_IN, -		PTE3_FN, PTE3_OUT, PTE3_IN_PU, PTE3_IN, -		PTE2_FN, PTE2_OUT, PTE2_IN_PU, PTE2_IN, -		PTE1_FN, PTE1_OUT, PTE1_IN_PU, PTE1_IN, -		PTE0_FN, PTE0_OUT, PTE0_IN_PU, PTE0_IN } -	}, -	{ PINMUX_CFG_REG("PFCR", 0xa405010a, 16, 2) { -		PTF7_FN, PTF7_OUT, PTF7_IN_PU, PTF7_IN, -		PTF6_FN, PTF6_OUT, PTF6_IN_PU, PTF6_IN, -		PTF5_FN, PTF5_OUT, PTF5_IN_PU, PTF5_IN, -		PTF4_FN, PTF4_OUT, PTF4_IN_PU, PTF4_IN, -		PTF3_FN, PTF3_OUT, PTF3_IN_PU, PTF3_IN, -		PTF2_FN, PTF2_OUT, PTF2_IN_PU, PTF2_IN, -		PTF1_FN, PTF1_OUT, PTF1_IN_PU, PTF1_IN, -		PTF0_FN, PTF0_OUT, PTF0_IN_PU, PTF0_IN } -	}, -	{ PINMUX_CFG_REG("PGCR", 0xa405010c, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		PTG5_FN, PTG5_OUT, 0, 0, -		PTG4_FN, PTG4_OUT, 0, 0, -		PTG3_FN, PTG3_OUT, 0, 0, -		PTG2_FN, PTG2_OUT, 0, 0, -		PTG1_FN, PTG1_OUT, 0, 0, -		PTG0_FN, PTG0_OUT, 0, 0 } -	}, -	{ PINMUX_CFG_REG("PHCR", 0xa405010e, 16, 2) { -		PTH7_FN, PTH7_OUT, PTH7_IN_PU, PTH7_IN, -		PTH6_FN, PTH6_OUT, PTH6_IN_PU, PTH6_IN, -		PTH5_FN, PTH5_OUT, PTH5_IN_PU, PTH5_IN, -		PTH4_FN, PTH4_OUT, PTH4_IN_PU, PTH4_IN, -		PTH3_FN, PTH3_OUT, PTH3_IN_PU, PTH3_IN, -		PTH2_FN, PTH2_OUT, PTH2_IN_PU, PTH2_IN, -		PTH1_FN, PTH1_OUT, PTH1_IN_PU, PTH1_IN, -		PTH0_FN, PTH0_OUT, PTH0_IN_PU, PTH0_IN } -	}, -	{ PINMUX_CFG_REG("PJCR", 0xa4050110, 16, 2) { -		PTJ7_FN, PTJ7_OUT, 0, 0, -		PTJ6_FN, PTJ6_OUT, 0, 0, -		PTJ5_FN, PTJ5_OUT, 0, 0, -		0, 0, 0, 0, -		PTJ3_FN, PTJ3_OUT, PTJ3_IN_PU, PTJ3_IN, -		PTJ2_FN, PTJ2_OUT, PTJ2_IN_PU, PTJ2_IN, -		PTJ1_FN, PTJ1_OUT, PTJ1_IN_PU, PTJ1_IN, -		PTJ0_FN, PTJ0_OUT, PTJ0_IN_PU, PTJ0_IN } -	}, -	{ PINMUX_CFG_REG("PKCR", 0xa4050112, 16, 2) { -		PTK7_FN, PTK7_OUT, PTK7_IN_PU, PTK7_IN, -		PTK6_FN, PTK6_OUT, PTK6_IN_PU, PTK6_IN, -		PTK5_FN, PTK5_OUT, PTK5_IN_PU, PTK5_IN, -		PTK4_FN, PTK4_OUT, PTK4_IN_PU, PTK4_IN, -		PTK3_FN, PTK3_OUT, PTK3_IN_PU, PTK3_IN, -		PTK2_FN, PTK2_OUT, PTK2_IN_PU, PTK2_IN, -		PTK1_FN, PTK1_OUT, PTK1_IN_PU, PTK1_IN, -		PTK0_FN, PTK0_OUT, PTK0_IN_PU, PTK0_IN } -	}, -	{ PINMUX_CFG_REG("PLCR", 0xa4050114, 16, 2) { -		PTL7_FN, PTL7_OUT, PTL7_IN_PU, PTL7_IN, -		PTL6_FN, PTL6_OUT, PTL6_IN_PU, PTL6_IN, -		PTL5_FN, PTL5_OUT, PTL5_IN_PU, PTL5_IN, -		PTL4_FN, PTL4_OUT, PTL4_IN_PU, PTL4_IN, -		PTL3_FN, PTL3_OUT, PTL3_IN_PU, PTL3_IN, -		PTL2_FN, PTL2_OUT, PTL2_IN_PU, PTL2_IN, -		PTL1_FN, PTL1_OUT, PTL1_IN_PU, PTL1_IN, -		PTL0_FN, PTL0_OUT, PTL0_IN_PU, PTL0_IN } -	}, -	{ PINMUX_CFG_REG("PMCR", 0xa4050116, 16, 2) { -		PTM7_FN, PTM7_OUT, PTM7_IN_PU, PTM7_IN, -		PTM6_FN, PTM6_OUT, PTM6_IN_PU, PTM6_IN, -		PTM5_FN, PTM5_OUT, PTM5_IN_PU, PTM5_IN, -		PTM4_FN, PTM4_OUT, PTM4_IN_PU, PTM4_IN, -		PTM3_FN, PTM3_OUT, PTM3_IN_PU, PTM3_IN, -		PTM2_FN, PTM2_OUT, PTM2_IN_PU, PTM2_IN, -		PTM1_FN, PTM1_OUT, PTM1_IN_PU, PTM1_IN, -		PTM0_FN, PTM0_OUT, PTM0_IN_PU, PTM0_IN } -	}, -	{ PINMUX_CFG_REG("PNCR", 0xa4050118, 16, 2) { -		PTN7_FN, PTN7_OUT, PTN7_IN_PU, PTN7_IN, -		PTN6_FN, PTN6_OUT, PTN6_IN_PU, PTN6_IN, -		PTN5_FN, PTN5_OUT, PTN5_IN_PU, PTN5_IN, -		PTN4_FN, PTN4_OUT, PTN4_IN_PU, PTN4_IN, -		PTN3_FN, PTN3_OUT, PTN3_IN_PU, PTN3_IN, -		PTN2_FN, PTN2_OUT, PTN2_IN_PU, PTN2_IN, -		PTN1_FN, PTN1_OUT, PTN1_IN_PU, PTN1_IN, -		PTN0_FN, PTN0_OUT, PTN0_IN_PU, PTN0_IN } -	}, -	{ PINMUX_CFG_REG("PQCR", 0xa405011a, 16, 2) { -		PTQ7_FN, PTQ7_OUT, PTQ7_IN_PU, PTQ7_IN, -		PTQ6_FN, PTQ6_OUT, PTQ6_IN_PU, PTQ6_IN, -		PTQ5_FN, PTQ5_OUT, PTQ5_IN_PU, PTQ5_IN, -		PTQ4_FN, PTQ4_OUT, PTQ4_IN_PU, PTQ4_IN, -		PTQ3_FN, PTQ3_OUT, PTQ3_IN_PU, PTQ3_IN, -		PTQ2_FN, PTQ2_OUT, PTQ2_IN_PU, PTQ2_IN, -		PTQ1_FN, PTQ1_OUT, PTQ1_IN_PU, PTQ1_IN, -		PTQ0_FN, PTQ0_OUT, PTQ0_IN_PU, PTQ0_IN } -	}, -	{ PINMUX_CFG_REG("PRCR", 0xa405011c, 16, 2) { -		PTR7_FN, PTR7_OUT, PTR7_IN_PU, PTR7_IN, -		PTR6_FN, PTR6_OUT, PTR6_IN_PU, PTR6_IN, -		PTR5_FN, PTR5_OUT, PTR5_IN_PU, PTR5_IN, -		PTR4_FN, PTR4_OUT, PTR4_IN_PU, PTR4_IN, -		PTR3_FN, 0,        PTR3_IN_PU, PTR3_IN, -		PTR2_FN, 0,        PTR2_IN_PU, PTR2_IN, -		PTR1_FN, PTR1_OUT, PTR1_IN_PU, PTR1_IN, -		PTR0_FN, PTR0_OUT, PTR0_IN_PU, PTR0_IN } -	}, -	{ PINMUX_CFG_REG("PSCR", 0xa405011e, 16, 2) { -		0, 0, 0, 0, -		PTS6_FN, PTS6_OUT, PTS6_IN_PU, PTS6_IN, -		PTS5_FN, PTS5_OUT, PTS5_IN_PU, PTS5_IN, -		PTS4_FN, PTS4_OUT, PTS4_IN_PU, PTS4_IN, -		PTS3_FN, PTS3_OUT, PTS3_IN_PU, PTS3_IN, -		PTS2_FN, PTS2_OUT, PTS2_IN_PU, PTS2_IN, -		PTS1_FN, PTS1_OUT, PTS1_IN_PU, PTS1_IN, -		PTS0_FN, PTS0_OUT, PTS0_IN_PU, PTS0_IN } -	}, -	{ PINMUX_CFG_REG("PTCR", 0xa4050140, 16, 2) { -		PTT7_FN, PTT7_OUT, PTT7_IN_PU, PTT7_IN, -		PTT6_FN, PTT6_OUT, PTT6_IN_PU, PTT6_IN, -		PTT5_FN, PTT5_OUT, PTT5_IN_PU, PTT5_IN, -		PTT4_FN, PTT4_OUT, PTT4_IN_PU, PTT4_IN, -		PTT3_FN, PTT3_OUT, PTT3_IN_PU, PTT3_IN, -		PTT2_FN, PTT2_OUT, PTT2_IN_PU, PTT2_IN, -		PTT1_FN, PTT1_OUT, PTT1_IN_PU, PTT1_IN, -		PTT0_FN, PTT0_OUT, PTT0_IN_PU, PTT0_IN } -	}, -	{ PINMUX_CFG_REG("PUCR", 0xa4050142, 16, 2) { -		PTU7_FN, PTU7_OUT, PTU7_IN_PU, PTU7_IN, -		PTU6_FN, PTU6_OUT, PTU6_IN_PU, PTU6_IN, -		PTU5_FN, PTU5_OUT, PTU5_IN_PU, PTU5_IN, -		PTU4_FN, PTU4_OUT, PTU4_IN_PU, PTU4_IN, -		PTU3_FN, PTU3_OUT, PTU3_IN_PU, PTU3_IN, -		PTU2_FN, PTU2_OUT, PTU2_IN_PU, PTU2_IN, -		PTU1_FN, PTU1_OUT, PTU1_IN_PU, PTU1_IN, -		PTU0_FN, PTU0_OUT, PTU0_IN_PU, PTU0_IN } -	}, -	{ PINMUX_CFG_REG("PVCR", 0xa4050144, 16, 2) { -		PTV7_FN, PTV7_OUT, PTV7_IN_PU, PTV7_IN, -		PTV6_FN, PTV6_OUT, PTV6_IN_PU, PTV6_IN, -		PTV5_FN, PTV5_OUT, PTV5_IN_PU, PTV5_IN, -		PTV4_FN, PTV4_OUT, PTV4_IN_PU, PTV4_IN, -		PTV3_FN, PTV3_OUT, PTV3_IN_PU, PTV3_IN, -		PTV2_FN, PTV2_OUT, PTV2_IN_PU, PTV2_IN, -		PTV1_FN, PTV1_OUT, PTV1_IN_PU, PTV1_IN, -		PTV0_FN, PTV0_OUT, PTV0_IN_PU, PTV0_IN } -	}, -	{ PINMUX_CFG_REG("PWCR", 0xa4050146, 16, 2) { -		PTW7_FN, PTW7_OUT, PTW7_IN_PU, PTW7_IN, -		PTW6_FN, PTW6_OUT, PTW6_IN_PU, PTW6_IN, -		PTW5_FN, PTW5_OUT, PTW5_IN_PU, PTW5_IN, -		PTW4_FN, PTW4_OUT, PTW4_IN_PU, PTW4_IN, -		PTW3_FN, PTW3_OUT, PTW3_IN_PU, PTW3_IN, -		PTW2_FN, PTW2_OUT, PTW2_IN_PU, PTW2_IN, -		PTW1_FN, PTW1_OUT, PTW1_IN_PU, PTW1_IN, -		PTW0_FN, PTW0_OUT, PTW0_IN_PU, PTW0_IN } -	}, -	{ PINMUX_CFG_REG("PXCR", 0xa4050148, 16, 2) { -		PTX7_FN, PTX7_OUT, PTX7_IN_PU, PTX7_IN, -		PTX6_FN, PTX6_OUT, PTX6_IN_PU, PTX6_IN, -		PTX5_FN, PTX5_OUT, PTX5_IN_PU, PTX5_IN, -		PTX4_FN, PTX4_OUT, PTX4_IN_PU, PTX4_IN, -		PTX3_FN, PTX3_OUT, PTX3_IN_PU, PTX3_IN, -		PTX2_FN, PTX2_OUT, PTX2_IN_PU, PTX2_IN, -		PTX1_FN, PTX1_OUT, PTX1_IN_PU, PTX1_IN, -		PTX0_FN, PTX0_OUT, PTX0_IN_PU, PTX0_IN } -	}, -	{ PINMUX_CFG_REG("PYCR", 0xa405014a, 16, 2) { -		PTY7_FN, PTY7_OUT, PTY7_IN_PU, PTY7_IN, -		PTY6_FN, PTY6_OUT, PTY6_IN_PU, PTY6_IN, -		PTY5_FN, PTY5_OUT, PTY5_IN_PU, PTY5_IN, -		PTY4_FN, PTY4_OUT, PTY4_IN_PU, PTY4_IN, -		PTY3_FN, PTY3_OUT, PTY3_IN_PU, PTY3_IN, -		PTY2_FN, PTY2_OUT, PTY2_IN_PU, PTY2_IN, -		PTY1_FN, PTY1_OUT, PTY1_IN_PU, PTY1_IN, -		PTY0_FN, PTY0_OUT, PTY0_IN_PU, PTY0_IN } -	}, -	{ PINMUX_CFG_REG("PZCR", 0xa405014c, 16, 2) { -		PTZ7_FN, PTZ7_OUT, PTZ7_IN_PU, PTZ7_IN, -		PTZ6_FN, PTZ6_OUT, PTZ6_IN_PU, PTZ6_IN, -		PTZ5_FN, PTZ5_OUT, PTZ5_IN_PU, PTZ5_IN, -		PTZ4_FN, PTZ4_OUT, PTZ4_IN_PU, PTZ4_IN, -		PTZ3_FN, PTZ3_OUT, PTZ3_IN_PU, PTZ3_IN, -		PTZ2_FN, PTZ2_OUT, PTZ2_IN_PU, PTZ2_IN, -		PTZ1_FN, PTZ1_OUT, PTZ1_IN_PU, PTZ1_IN, -		PTZ0_FN, PTZ0_OUT, PTZ0_IN_PU, PTZ0_IN } -	}, -	{ PINMUX_CFG_REG("PSELA", 0xa405014e, 16, 1) { -		PSA15_0, PSA15_1, -		PSA14_0, PSA14_1, -		PSA13_0, PSA13_1, -		PSA12_0, PSA12_1, -		0, 0, -		PSA10_0, PSA10_1, -		PSA9_0,  PSA9_1, -		PSA8_0,  PSA8_1, -		PSA7_0,  PSA7_1, -		PSA6_0,  PSA6_1, -		PSA5_0,  PSA5_1, -		0, 0, -		PSA3_0,  PSA3_1, -		PSA2_0,  PSA2_1, -		PSA1_0,  PSA1_1, -		PSA0_0,  PSA0_1} -	}, -	{ PINMUX_CFG_REG("PSELB", 0xa4050150, 16, 1) { -		0, 0, -		PSB14_0, PSB14_1, -		PSB13_0, PSB13_1, -		PSB12_0, PSB12_1, -		PSB11_0, PSB11_1, -		PSB10_0, PSB10_1, -		PSB9_0,  PSB9_1, -		PSB8_0,  PSB8_1, -		PSB7_0,  PSB7_1, -		PSB6_0,  PSB6_1, -		PSB5_0,  PSB5_1, -		PSB4_0,  PSB4_1, -		PSB3_0,  PSB3_1, -		PSB2_0,  PSB2_1, -		PSB1_0,  PSB1_1, -		PSB0_0,  PSB0_1} -	}, -	{ PINMUX_CFG_REG("PSELC", 0xa4050152, 16, 1) { -		PSC15_0, PSC15_1, -		PSC14_0, PSC14_1, -		PSC13_0, PSC13_1, -		PSC12_0, PSC12_1, -		PSC11_0, PSC11_1, -		PSC10_0, PSC10_1, -		PSC9_0,  PSC9_1, -		PSC8_0,  PSC8_1, -		PSC7_0,  PSC7_1, -		PSC6_0,  PSC6_1, -		PSC5_0,  PSC5_1, -		PSC4_0,  PSC4_1, -		0, 0, -		PSC2_0,  PSC2_1, -		PSC1_0,  PSC1_1, -		PSC0_0,  PSC0_1} -	}, -	{ PINMUX_CFG_REG("PSELD", 0xa4050154, 16, 1) { -		PSD15_0, PSD15_1, -		PSD14_0, PSD14_1, -		PSD13_0, PSD13_1, -		PSD12_0, PSD12_1, -		PSD11_0, PSD11_1, -		PSD10_0, PSD10_1, -		PSD9_0,  PSD9_1, -		PSD8_0,  PSD8_1, -		PSD7_0,  PSD7_1, -		PSD6_0,  PSD6_1, -		PSD5_0,  PSD5_1, -		PSD4_0,  PSD4_1, -		PSD3_0,  PSD3_1, -		PSD2_0,  PSD2_1, -		PSD1_0,  PSD1_1, -		PSD0_0,  PSD0_1} -	}, -	{ PINMUX_CFG_REG("PSELE", 0xa4050156, 16, 1) { -		PSE15_0, PSE15_1, -		PSE14_0, PSE14_1, -		PSE13_0, PSE13_1, -		PSE12_0, PSE12_1, -		PSE11_0, PSE11_1, -		PSE10_0, PSE10_1, -		PSE9_0,  PSE9_1, -		PSE8_0,  PSE8_1, -		PSE7_0,  PSE7_1, -		PSE6_0,  PSE6_1, -		PSE5_0,  PSE5_1, -		PSE4_0,  PSE4_1, -		PSE3_0,  PSE3_1, -		PSE2_0,  PSE2_1, -		PSE1_0,  PSE1_1, -		PSE0_0,  PSE0_1} -	}, -	{} -}; - -static struct pinmux_data_reg pinmux_data_regs[] = { -	{ PINMUX_DATA_REG("PADR", 0xa4050120, 8) { -		PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -		PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA } -	}, -	{ PINMUX_DATA_REG("PBDR", 0xa4050122, 8) { -		PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -		PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA } -	}, -	{ PINMUX_DATA_REG("PCDR", 0xa4050124, 8) { -		PTC7_DATA, PTC6_DATA, PTC5_DATA, PTC4_DATA, -		PTC3_DATA, PTC2_DATA, PTC1_DATA, PTC0_DATA } -	}, -	{ PINMUX_DATA_REG("PDDR", 0xa4050126, 8) { -		PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -		PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA } -	}, -	{ PINMUX_DATA_REG("PEDR", 0xa4050128, 8) { -		PTE7_DATA, PTE6_DATA, PTE5_DATA, PTE4_DATA, -		PTE3_DATA, PTE2_DATA, PTE1_DATA, PTE0_DATA } -	}, -	{ PINMUX_DATA_REG("PFDR", 0xa405012a, 8) { -		PTF7_DATA, PTF6_DATA, PTF5_DATA, PTF4_DATA, -		PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA } -	}, -	{ PINMUX_DATA_REG("PGDR", 0xa405012c, 8) { -		0,         0,         PTG5_DATA, PTG4_DATA, -		PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA } -	}, -	{ PINMUX_DATA_REG("PHDR", 0xa405012e, 8) { -		PTH7_DATA, PTH6_DATA, PTH5_DATA, PTH4_DATA, -		PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA } -	}, -	{ PINMUX_DATA_REG("PJDR", 0xa4050130, 8) { -		PTJ7_DATA, PTJ6_DATA, PTJ5_DATA, 0, -		PTJ3_DATA, PTJ2_DATA, PTJ1_DATA, PTJ0_DATA } -	}, -	{ PINMUX_DATA_REG("PKDR", 0xa4050132, 8) { -		PTK7_DATA, PTK6_DATA, PTK5_DATA, PTK4_DATA, -		PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA } -	}, -	{ PINMUX_DATA_REG("PLDR", 0xa4050134, 8) { -		PTL7_DATA, PTL6_DATA, PTL5_DATA, PTL4_DATA, -		PTL3_DATA, PTL2_DATA, PTL1_DATA, PTL0_DATA } -	}, -	{ PINMUX_DATA_REG("PMDR", 0xa4050136, 8) { -		PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -		PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA } -	}, -	{ PINMUX_DATA_REG("PNDR", 0xa4050138, 8) { -		PTN7_DATA, PTN6_DATA, PTN5_DATA, PTN4_DATA, -		PTN3_DATA, PTN2_DATA, PTN1_DATA, PTN0_DATA } -	}, -	{ PINMUX_DATA_REG("PQDR", 0xa405013a, 8) { -		PTQ7_DATA, PTQ6_DATA, PTQ5_DATA, PTQ4_DATA, -		PTQ3_DATA, PTQ2_DATA, PTQ1_DATA, PTQ0_DATA } -	}, -	{ PINMUX_DATA_REG("PRDR", 0xa405013c, 8) { -		PTR7_DATA, PTR6_DATA, PTR5_DATA, PTR4_DATA, -		PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA } -	}, -	{ PINMUX_DATA_REG("PSDR", 0xa405013e, 8) { -		0,         PTS6_DATA, PTS5_DATA, PTS4_DATA, -		PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA } -	}, -	{ PINMUX_DATA_REG("PTDR", 0xa4050160, 8) { -		PTT7_DATA, PTT6_DATA, PTT5_DATA, PTT4_DATA, -		PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA } -	}, -	{ PINMUX_DATA_REG("PUDR", 0xa4050162, 8) { -		PTU7_DATA, PTU6_DATA, PTU5_DATA, PTU4_DATA, -		PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA } -	}, -	{ PINMUX_DATA_REG("PVDR", 0xa4050164, 8) { -		PTV7_DATA, PTV6_DATA, PTV5_DATA, PTV4_DATA, -		PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA } -	}, -	{ PINMUX_DATA_REG("PWDR", 0xa4050166, 8) { -		PTW7_DATA, PTW6_DATA, PTW5_DATA, PTW4_DATA, -		PTW3_DATA, PTW2_DATA, PTW1_DATA, PTW0_DATA } -	}, -	{ PINMUX_DATA_REG("PXDR", 0xa4050168, 8) { -		PTX7_DATA, PTX6_DATA, PTX5_DATA, PTX4_DATA, -		PTX3_DATA, PTX2_DATA, PTX1_DATA, PTX0_DATA } -	}, -	{ PINMUX_DATA_REG("PYDR", 0xa405016a, 8) { -		PTY7_DATA, PTY6_DATA, PTY5_DATA, PTY4_DATA, -		PTY3_DATA, PTY2_DATA, PTY1_DATA, PTY0_DATA } -	}, -	{ PINMUX_DATA_REG("PZDR", 0xa405016c, 8) { -		PTZ7_DATA, PTZ6_DATA, PTZ5_DATA, PTZ4_DATA, -		PTZ3_DATA, PTZ2_DATA, PTZ1_DATA, PTZ0_DATA } -	}, -	{ }, -}; - -static struct pinmux_info sh7724_pinmux_info = { -	.name = "sh7724_pfc", -	.reserved_id = PINMUX_RESERVED, -	.data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, -	.input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, -	.input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, -	.output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, -	.mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, -	.function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, - -	.first_gpio = GPIO_PTA7, -	.last_gpio = GPIO_FN_INTC_IRQ0, - -	.gpios = pinmux_gpios, -	.cfg_regs = pinmux_config_regs, -	.data_regs = pinmux_data_regs, - -	.gpio_data = pinmux_data, -	.gpio_data_size = ARRAY_SIZE(pinmux_data),  };  static int __init plat_pinmux_setup(void)  { -	return register_pinmux(&sh7724_pinmux_info); +	return sh_pfc_register("pfc-sh7724", sh7724_pfc_resources, +			       ARRAY_SIZE(sh7724_pfc_resources));  }  arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh4a/pinmux-sh7734.c b/arch/sh/kernel/cpu/sh4a/pinmux-sh7734.c new file mode 100644 index 00000000000..ea2db632a76 --- /dev/null +++ b/arch/sh/kernel/cpu/sh4a/pinmux-sh7734.c @@ -0,0 +1,35 @@ +/* + * SH7734 processor support - PFC hardware block + * + * Copyright (C) 2012  Renesas Solutions Corp. + * Copyright (C) 2012  Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/bug.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> + +static struct resource sh7734_pfc_resources[] = { +	[0] = { /* PFC */ +		.start	= 0xFFFC0000, +		.end	= 0xFFFC011C, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { /* GPIO */ +		.start	= 0xFFC40000, +		.end	= 0xFFC4502B, +		.flags	= IORESOURCE_MEM, +	} +}; + +static int __init plat_pinmux_setup(void) +{ +	return sh_pfc_register("pfc-sh7734", sh7734_pfc_resources, +			       ARRAY_SIZE(sh7734_pfc_resources)); +} +arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh4a/pinmux-sh7757.c b/arch/sh/kernel/cpu/sh4a/pinmux-sh7757.c index 4c74bd04bba..567745d4422 100644 --- a/arch/sh/kernel/cpu/sh4a/pinmux-sh7757.c +++ b/arch/sh/kernel/cpu/sh4a/pinmux-sh7757.c @@ -13,2275 +13,23 @@   * for more details.   */ +#include <linux/bug.h>  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/gpio.h> -#include <cpu/sh7757.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> -enum { -	PINMUX_RESERVED = 0, - -	PINMUX_DATA_BEGIN, -	PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -	PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA, -	PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -	PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA, -	PTC7_DATA, PTC6_DATA, PTC5_DATA, PTC4_DATA, -	PTC3_DATA, PTC2_DATA, PTC1_DATA, PTC0_DATA, -	PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -	PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA, -	PTE7_DATA, PTE6_DATA, PTE5_DATA, PTE4_DATA, -	PTE3_DATA, PTE2_DATA, PTE1_DATA, PTE0_DATA, -	PTF7_DATA, PTF6_DATA, PTF5_DATA, PTF4_DATA, -	PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA, -	PTG7_DATA, PTG6_DATA, PTG5_DATA, PTG4_DATA, -	PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA, -	PTH7_DATA, PTH6_DATA, PTH5_DATA, PTH4_DATA, -	PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA, -	PTI7_DATA, PTI6_DATA, PTI5_DATA, PTI4_DATA, -	PTI3_DATA, PTI2_DATA, PTI1_DATA, PTI0_DATA, -		   PTJ6_DATA, PTJ5_DATA, PTJ4_DATA, -	PTJ3_DATA, PTJ2_DATA, PTJ1_DATA, PTJ0_DATA, -	PTK7_DATA, PTK6_DATA, PTK5_DATA, PTK4_DATA, -	PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA, -		   PTL6_DATA, PTL5_DATA, PTL4_DATA, -	PTL3_DATA, PTL2_DATA, PTL1_DATA, PTL0_DATA, -	PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -	PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA, -		   PTN6_DATA, PTN5_DATA, PTN4_DATA, -	PTN3_DATA, PTN2_DATA, PTN1_DATA, PTN0_DATA, -	PTO7_DATA, PTO6_DATA, PTO5_DATA, PTO4_DATA, -	PTO3_DATA, PTO2_DATA, PTO1_DATA, PTO0_DATA, -	PTP7_DATA, PTP6_DATA, PTP5_DATA, PTP4_DATA, -	PTP3_DATA, PTP2_DATA, PTP1_DATA, PTP0_DATA, -		   PTQ6_DATA, PTQ5_DATA, PTQ4_DATA, -	PTQ3_DATA, PTQ2_DATA, PTQ1_DATA, PTQ0_DATA, -	PTR7_DATA, PTR6_DATA, PTR5_DATA, PTR4_DATA, -	PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA, -	PTS7_DATA, PTS6_DATA, PTS5_DATA, PTS4_DATA, -	PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA, -	PTT7_DATA, PTT6_DATA, PTT5_DATA, PTT4_DATA, -	PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA, -	PTU7_DATA, PTU6_DATA, PTU5_DATA, PTU4_DATA, -	PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA, -	PTV7_DATA, PTV6_DATA, PTV5_DATA, PTV4_DATA, -	PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA, -	PTW7_DATA, PTW6_DATA, PTW5_DATA, PTW4_DATA, -	PTW3_DATA, PTW2_DATA, PTW1_DATA, PTW0_DATA, -	PTX7_DATA, PTX6_DATA, PTX5_DATA, PTX4_DATA, -	PTX3_DATA, PTX2_DATA, PTX1_DATA, PTX0_DATA, -	PTY7_DATA, PTY6_DATA, PTY5_DATA, PTY4_DATA, -	PTY3_DATA, PTY2_DATA, PTY1_DATA, PTY0_DATA, -	PTZ7_DATA, PTZ6_DATA, PTZ5_DATA, PTZ4_DATA, -	PTZ3_DATA, PTZ2_DATA, PTZ1_DATA, PTZ0_DATA, -	PINMUX_DATA_END, - -	PINMUX_INPUT_BEGIN, -	PTA7_IN, PTA6_IN, PTA5_IN, PTA4_IN, -	PTA3_IN, PTA2_IN, PTA1_IN, PTA0_IN, -	PTB7_IN, PTB6_IN, PTB5_IN, PTB4_IN, -	PTB3_IN, PTB2_IN, PTB1_IN, PTB0_IN, -	PTC7_IN, PTC6_IN, PTC5_IN, PTC4_IN, -	PTC3_IN, PTC2_IN, PTC1_IN, PTC0_IN, -	PTD7_IN, PTD6_IN, PTD5_IN, PTD4_IN, -	PTD3_IN, PTD2_IN, PTD1_IN, PTD0_IN, -	PTE7_IN, PTE6_IN, PTE5_IN, PTE4_IN, -	PTE3_IN, PTE2_IN, PTE1_IN, PTE0_IN, -	PTF7_IN, PTF6_IN, PTF5_IN, PTF4_IN, -	PTF3_IN, PTF2_IN, PTF1_IN, PTF0_IN, -	PTG7_IN, PTG6_IN, PTG5_IN, PTG4_IN, -	PTG3_IN, PTG2_IN, PTG1_IN, PTG0_IN, -	PTH7_IN, PTH6_IN, PTH5_IN, PTH4_IN, -	PTH3_IN, PTH2_IN, PTH1_IN, PTH0_IN, -	PTI7_IN, PTI6_IN, PTI5_IN, PTI4_IN, -	PTI3_IN, PTI2_IN, PTI1_IN, PTI0_IN, -		 PTJ6_IN, PTJ5_IN, PTJ4_IN, -	PTJ3_IN, PTJ2_IN, PTJ1_IN, PTJ0_IN, -	PTK7_IN, PTK6_IN, PTK5_IN, PTK4_IN, -	PTK3_IN, PTK2_IN, PTK1_IN, PTK0_IN, -		 PTL6_IN, PTL5_IN, PTL4_IN, -	PTL3_IN, PTL2_IN, PTL1_IN, PTL0_IN, -	PTM7_IN, PTM6_IN, PTM5_IN, PTM4_IN, -	PTM3_IN, PTM2_IN, PTM1_IN, PTM0_IN, -		 PTN6_IN, PTN5_IN, PTN4_IN, -	PTN3_IN, PTN2_IN, PTN1_IN, PTN0_IN, -	PTO7_IN, PTO6_IN, PTO5_IN, PTO4_IN, -	PTO3_IN, PTO2_IN, PTO1_IN, PTO0_IN, -	PTP7_IN, PTP6_IN, PTP5_IN, PTP4_IN, -	PTP3_IN, PTP2_IN, PTP1_IN, PTP0_IN, -		 PTQ6_IN, PTQ5_IN, PTQ4_IN, -	PTQ3_IN, PTQ2_IN, PTQ1_IN, PTQ0_IN, -	PTR7_IN, PTR6_IN, PTR5_IN, PTR4_IN, -	PTR3_IN, PTR2_IN, PTR1_IN, PTR0_IN, -	PTS7_IN, PTS6_IN, PTS5_IN, PTS4_IN, -	PTS3_IN, PTS2_IN, PTS1_IN, PTS0_IN, -	PTT7_IN, PTT6_IN, PTT5_IN, PTT4_IN, -	PTT3_IN, PTT2_IN, PTT1_IN, PTT0_IN, -	PTU7_IN, PTU6_IN, PTU5_IN, PTU4_IN, -	PTU3_IN, PTU2_IN, PTU1_IN, PTU0_IN, -	PTV7_IN, PTV6_IN, PTV5_IN, PTV4_IN, -	PTV3_IN, PTV2_IN, PTV1_IN, PTV0_IN, -	PTW7_IN, PTW6_IN, PTW5_IN, PTW4_IN, -	PTW3_IN, PTW2_IN, PTW1_IN, PTW0_IN, -	PTX7_IN, PTX6_IN, PTX5_IN, PTX4_IN, -	PTX3_IN, PTX2_IN, PTX1_IN, PTX0_IN, -	PTY7_IN, PTY6_IN, PTY5_IN, PTY4_IN, -	PTY3_IN, PTY2_IN, PTY1_IN, PTY0_IN, -	PTZ7_IN, PTZ6_IN, PTZ5_IN, PTZ4_IN, -	PTZ3_IN, PTZ2_IN, PTZ1_IN, PTZ0_IN, -	PINMUX_INPUT_END, - -	PINMUX_INPUT_PULLUP_BEGIN, -	PTA7_IN_PU, PTA6_IN_PU, PTA5_IN_PU, PTA4_IN_PU, -	PTA3_IN_PU, PTA2_IN_PU, PTA1_IN_PU, PTA0_IN_PU, -	PTD7_IN_PU, PTD6_IN_PU, PTD5_IN_PU, PTD4_IN_PU, -	PTD3_IN_PU, PTD2_IN_PU, PTD1_IN_PU, PTD0_IN_PU, -	PTE7_IN_PU, PTE6_IN_PU, PTE5_IN_PU, PTE4_IN_PU, -	PTE3_IN_PU, PTE2_IN_PU, PTE1_IN_PU, PTE0_IN_PU, -	PTF7_IN_PU, PTF6_IN_PU, PTF5_IN_PU, PTF4_IN_PU, -	PTF3_IN_PU, PTF2_IN_PU, PTF1_IN_PU, PTF0_IN_PU, -	PTG7_IN_PU, PTG6_IN_PU,		    PTG4_IN_PU, -	PTH7_IN_PU, PTH6_IN_PU, PTH5_IN_PU, PTH4_IN_PU, -	PTH3_IN_PU, PTH2_IN_PU, PTH1_IN_PU, PTH0_IN_PU, -	PTI7_IN_PU, PTI6_IN_PU,		    PTI4_IN_PU, -	PTI3_IN_PU, PTI2_IN_PU, PTI1_IN_PU, PTI0_IN_PU, -		    PTJ6_IN_PU, PTJ5_IN_PU, PTJ4_IN_PU, -	PTJ3_IN_PU, PTJ2_IN_PU, PTJ1_IN_PU, PTJ0_IN_PU, -	PTK7_IN_PU, PTK6_IN_PU, PTK5_IN_PU, PTK4_IN_PU, -	PTK3_IN_PU, PTK2_IN_PU, PTK1_IN_PU, PTK0_IN_PU, -		    PTL6_IN_PU, PTL5_IN_PU, PTL4_IN_PU, -	PTL3_IN_PU, PTL2_IN_PU, PTL1_IN_PU, PTL0_IN_PU, -	PTM7_IN_PU, PTM6_IN_PU, PTM5_IN_PU, PTM4_IN_PU, -					    PTN4_IN_PU, -	PTN3_IN_PU, PTN2_IN_PU, PTN1_IN_PU, PTN0_IN_PU, -	PTO7_IN_PU, PTO6_IN_PU, PTO5_IN_PU, PTO4_IN_PU, -	PTO3_IN_PU, PTO2_IN_PU, PTO1_IN_PU, PTO0_IN_PU, -	PTT7_IN_PU, PTT6_IN_PU, PTT5_IN_PU, PTT4_IN_PU, -	PTT3_IN_PU, PTT2_IN_PU, PTT1_IN_PU, PTT0_IN_PU, -	PTU7_IN_PU, PTU6_IN_PU, PTU5_IN_PU, PTU4_IN_PU, -	PTU3_IN_PU, PTU2_IN_PU, PTU1_IN_PU, PTU0_IN_PU, -	PTV7_IN_PU, PTV6_IN_PU, PTV5_IN_PU, PTV4_IN_PU, -	PTV3_IN_PU, PTV2_IN_PU, -				PTW1_IN_PU, PTW0_IN_PU, -	PTX7_IN_PU, PTX6_IN_PU, PTX5_IN_PU, PTX4_IN_PU, -	PTX3_IN_PU, PTX2_IN_PU, PTX1_IN_PU, PTX0_IN_PU, -	PTY7_IN_PU, PTY6_IN_PU, PTY5_IN_PU, PTY4_IN_PU, -	PTY3_IN_PU, PTY2_IN_PU, PTY1_IN_PU, PTY0_IN_PU, -	PTZ7_IN_PU, PTZ6_IN_PU, PTZ5_IN_PU, PTZ4_IN_PU, -	PTZ3_IN_PU, PTZ2_IN_PU, PTZ1_IN_PU, PTZ0_IN_PU, -	PINMUX_INPUT_PULLUP_END, - -	PINMUX_OUTPUT_BEGIN, -	PTA7_OUT, PTA6_OUT, PTA5_OUT, PTA4_OUT, -	PTA3_OUT, PTA2_OUT, PTA1_OUT, PTA0_OUT, -	PTB7_OUT, PTB6_OUT, PTB5_OUT, PTB4_OUT, -	PTB3_OUT, PTB2_OUT, PTB1_OUT, PTB0_OUT, -	PTC7_OUT, PTC6_OUT, PTC5_OUT, PTC4_OUT, -	PTC3_OUT, PTC2_OUT, PTC1_OUT, PTC0_OUT, -	PTD7_OUT, PTD6_OUT, PTD5_OUT, PTD4_OUT, -	PTD3_OUT, PTD2_OUT, PTD1_OUT, PTD0_OUT, -	PTE7_OUT, PTE6_OUT, PTE5_OUT, PTE4_OUT, -	PTE3_OUT, PTE2_OUT, PTE1_OUT, PTE0_OUT, -	PTF7_OUT, PTF6_OUT, PTF5_OUT, PTF4_OUT, -	PTF3_OUT, PTF2_OUT, PTF1_OUT, PTF0_OUT, -	PTG7_OUT, PTG6_OUT, PTG5_OUT, PTG4_OUT, -	PTG3_OUT, PTG2_OUT, PTG1_OUT, PTG0_OUT, -	PTH7_OUT, PTH6_OUT, PTH5_OUT, PTH4_OUT, -	PTH3_OUT, PTH2_OUT, PTH1_OUT, PTH0_OUT, -	PTI7_OUT, PTI6_OUT, PTI5_OUT, PTI4_OUT, -	PTI3_OUT, PTI2_OUT, PTI1_OUT, PTI0_OUT, -		  PTJ6_OUT, PTJ5_OUT, PTJ4_OUT, -	PTJ3_OUT, PTJ2_OUT, PTJ1_OUT, PTJ0_OUT, -	PTK7_OUT, PTK6_OUT, PTK5_OUT, PTK4_OUT, -	PTK3_OUT, PTK2_OUT, PTK1_OUT, PTK0_OUT, -		  PTL6_OUT, PTL5_OUT, PTL4_OUT, -	PTL3_OUT, PTL2_OUT, PTL1_OUT, PTL0_OUT, -	PTM7_OUT, PTM6_OUT, PTM5_OUT, PTM4_OUT, -	PTM3_OUT, PTM2_OUT, PTM1_OUT, PTM0_OUT, -		  PTN6_OUT, PTN5_OUT, PTN4_OUT, -	PTN3_OUT, PTN2_OUT, PTN1_OUT, PTN0_OUT, -	PTO7_OUT, PTO6_OUT, PTO5_OUT, PTO4_OUT, -	PTO3_OUT, PTO2_OUT, PTO1_OUT, PTO0_OUT, -	PTP7_OUT, PTP6_OUT, PTP5_OUT, PTP4_OUT, -	PTP3_OUT, PTP2_OUT, PTP1_OUT, PTP0_OUT, -		  PTQ6_OUT, PTQ5_OUT, PTQ4_OUT, -	PTQ3_OUT, PTQ2_OUT, PTQ1_OUT, PTQ0_OUT, -	PTR7_OUT, PTR6_OUT, PTR5_OUT, PTR4_OUT, -	PTR3_OUT, PTR2_OUT, PTR1_OUT, PTR0_OUT, -	PTS7_OUT, PTS6_OUT, PTS5_OUT, PTS4_OUT, -	PTS3_OUT, PTS2_OUT, PTS1_OUT, PTS0_OUT, -	PTT7_OUT, PTT6_OUT, PTT5_OUT, PTT4_OUT, -	PTT3_OUT, PTT2_OUT, PTT1_OUT, PTT0_OUT, -	PTU7_OUT, PTU6_OUT, PTU5_OUT, PTU4_OUT, -	PTU3_OUT, PTU2_OUT, PTU1_OUT, PTU0_OUT, -	PTV7_OUT, PTV6_OUT, PTV5_OUT, PTV4_OUT, -	PTV3_OUT, PTV2_OUT, PTV1_OUT, PTV0_OUT, -	PTW7_OUT, PTW6_OUT, PTW5_OUT, PTW4_OUT, -	PTW3_OUT, PTW2_OUT, PTW1_OUT, PTW0_OUT, -	PTX7_OUT, PTX6_OUT, PTX5_OUT, PTX4_OUT, -	PTX3_OUT, PTX2_OUT, PTX1_OUT, PTX0_OUT, -	PTY7_OUT, PTY6_OUT, PTY5_OUT, PTY4_OUT, -	PTY3_OUT, PTY2_OUT, PTY1_OUT, PTY0_OUT, -	PTZ7_OUT, PTZ6_OUT, PTZ5_OUT, PTZ4_OUT, -	PTZ3_OUT, PTZ2_OUT, PTZ1_OUT, PTZ0_OUT, -	PINMUX_OUTPUT_END, - -	PINMUX_FUNCTION_BEGIN, -	PTA7_FN, PTA6_FN, PTA5_FN, PTA4_FN, -	PTA3_FN, PTA2_FN, PTA1_FN, PTA0_FN, -	PTB7_FN, PTB6_FN, PTB5_FN, PTB4_FN, -	PTB3_FN, PTB2_FN, PTB1_FN, PTB0_FN, -	PTC7_FN, PTC6_FN, PTC5_FN, PTC4_FN, -	PTC3_FN, PTC2_FN, PTC1_FN, PTC0_FN, -	PTD7_FN, PTD6_FN, PTD5_FN, PTD4_FN, -	PTD3_FN, PTD2_FN, PTD1_FN, PTD0_FN, -	PTE7_FN, PTE6_FN, PTE5_FN, PTE4_FN, -	PTE3_FN, PTE2_FN, PTE1_FN, PTE0_FN, -	PTF7_FN, PTF6_FN, PTF5_FN, PTF4_FN, -	PTF3_FN, PTF2_FN, PTF1_FN, PTF0_FN, -	PTG7_FN, PTG6_FN, PTG5_FN, PTG4_FN, -	PTG3_FN, PTG2_FN, PTG1_FN, PTG0_FN, -	PTH7_FN, PTH6_FN, PTH5_FN, PTH4_FN, -	PTH3_FN, PTH2_FN, PTH1_FN, PTH0_FN, -	PTI7_FN, PTI6_FN, PTI5_FN, PTI4_FN, -	PTI3_FN, PTI2_FN, PTI1_FN, PTI0_FN, -		 PTJ6_FN, PTJ5_FN, PTJ4_FN, -	PTJ3_FN, PTJ2_FN, PTJ1_FN, PTJ0_FN, -	PTK7_FN, PTK6_FN, PTK5_FN, PTK4_FN, -	PTK3_FN, PTK2_FN, PTK1_FN, PTK0_FN, -		 PTL6_FN, PTL5_FN, PTL4_FN, -	PTL3_FN, PTL2_FN, PTL1_FN, PTL0_FN, -	PTM7_FN, PTM6_FN, PTM5_FN, PTM4_FN, -	PTM3_FN, PTM2_FN, PTM1_FN, PTM0_FN, -		 PTN6_FN, PTN5_FN, PTN4_FN, -	PTN3_FN, PTN2_FN, PTN1_FN, PTN0_FN, -	PTO7_FN, PTO6_FN, PTO5_FN, PTO4_FN, -	PTO3_FN, PTO2_FN, PTO1_FN, PTO0_FN, -	PTP7_FN, PTP6_FN, PTP5_FN, PTP4_FN, -	PTP3_FN, PTP2_FN, PTP1_FN, PTP0_FN, -		 PTQ6_FN, PTQ5_FN, PTQ4_FN, -	PTQ3_FN, PTQ2_FN, PTQ1_FN, PTQ0_FN, -	PTR7_FN, PTR6_FN, PTR5_FN, PTR4_FN, -	PTR3_FN, PTR2_FN, PTR1_FN, PTR0_FN, -	PTS7_FN, PTS6_FN, PTS5_FN, PTS4_FN, -	PTS3_FN, PTS2_FN, PTS1_FN, PTS0_FN, -	PTT7_FN, PTT6_FN, PTT5_FN, PTT4_FN, -	PTT3_FN, PTT2_FN, PTT1_FN, PTT0_FN, -	PTU7_FN, PTU6_FN, PTU5_FN, PTU4_FN, -	PTU3_FN, PTU2_FN, PTU1_FN, PTU0_FN, -	PTV7_FN, PTV6_FN, PTV5_FN, PTV4_FN, -	PTV3_FN, PTV2_FN, PTV1_FN, PTV0_FN, -	PTW7_FN, PTW6_FN, PTW5_FN, PTW4_FN, -	PTW3_FN, PTW2_FN, PTW1_FN, PTW0_FN, -	PTX7_FN, PTX6_FN, PTX5_FN, PTX4_FN, -	PTX3_FN, PTX2_FN, PTX1_FN, PTX0_FN, -	PTY7_FN, PTY6_FN, PTY5_FN, PTY4_FN, -	PTY3_FN, PTY2_FN, PTY1_FN, PTY0_FN, -	PTZ7_FN, PTZ6_FN, PTZ5_FN, PTZ4_FN, -	PTZ3_FN, PTZ2_FN, PTZ1_FN, PTZ0_FN, - -	PS0_15_FN1, PS0_15_FN2, -	PS0_14_FN1, PS0_14_FN2, -	PS0_13_FN1, PS0_13_FN2, -	PS0_12_FN1, PS0_12_FN2, -	PS0_11_FN1, PS0_11_FN2, -	PS0_10_FN1, PS0_10_FN2, -	PS0_9_FN1, PS0_9_FN2, -	PS0_8_FN1, PS0_8_FN2, -	PS0_7_FN1, PS0_7_FN2, -	PS0_6_FN1, PS0_6_FN2, -	PS0_5_FN1, PS0_5_FN2, -	PS0_4_FN1, PS0_4_FN2, -	PS0_3_FN1, PS0_3_FN2, -	PS0_2_FN1, PS0_2_FN2, - -	PS1_10_FN1, PS1_10_FN2, -	PS1_9_FN1, PS1_9_FN2, -	PS1_8_FN1, PS1_8_FN2, -	PS1_2_FN1, PS1_2_FN2, - -	PS2_13_FN1, PS2_13_FN2, -	PS2_12_FN1, PS2_12_FN2, -	PS2_7_FN1, PS2_7_FN2, -	PS2_6_FN1, PS2_6_FN2, -	PS2_5_FN1, PS2_5_FN2, -	PS2_4_FN1, PS2_4_FN2, -	PS2_2_FN1, PS2_2_FN2, - -	PS3_15_FN1, PS3_15_FN2, -	PS3_14_FN1, PS3_14_FN2, -	PS3_13_FN1, PS3_13_FN2, -	PS3_12_FN1, PS3_12_FN2, -	PS3_11_FN1, PS3_11_FN2, -	PS3_10_FN1, PS3_10_FN2, -	PS3_9_FN1, PS3_9_FN2, -	PS3_8_FN1, PS3_8_FN2, -	PS3_7_FN1, PS3_7_FN2, -	PS3_2_FN1, PS3_2_FN2, -	PS3_1_FN1, PS3_1_FN2, - -	PS4_14_FN1, PS4_14_FN2, -	PS4_13_FN1, PS4_13_FN2, -	PS4_12_FN1, PS4_12_FN2, -	PS4_10_FN1, PS4_10_FN2, -	PS4_9_FN1, PS4_9_FN2, -	PS4_8_FN1, PS4_8_FN2, -	PS4_4_FN1, PS4_4_FN2, -	PS4_3_FN1, PS4_3_FN2, -	PS4_2_FN1, PS4_2_FN2, -	PS4_1_FN1, PS4_1_FN2, -	PS4_0_FN1, PS4_0_FN2, - -	PS5_11_FN1, PS5_11_FN2, -	PS5_10_FN1, PS5_10_FN2, -	PS5_9_FN1, PS5_9_FN2, -	PS5_8_FN1, PS5_8_FN2, -	PS5_7_FN1, PS5_7_FN2, -	PS5_6_FN1, PS5_6_FN2, -	PS5_5_FN1, PS5_5_FN2, -	PS5_4_FN1, PS5_4_FN2, -	PS5_3_FN1, PS5_3_FN2, -	PS5_2_FN1, PS5_2_FN2, - -	PS6_15_FN1, PS6_15_FN2, -	PS6_14_FN1, PS6_14_FN2, -	PS6_13_FN1, PS6_13_FN2, -	PS6_12_FN1, PS6_12_FN2, -	PS6_11_FN1, PS6_11_FN2, -	PS6_10_FN1, PS6_10_FN2, -	PS6_9_FN1, PS6_9_FN2, -	PS6_8_FN1, PS6_8_FN2, -	PS6_7_FN1, PS6_7_FN2, -	PS6_6_FN1, PS6_6_FN2, -	PS6_5_FN1, PS6_5_FN2, -	PS6_4_FN1, PS6_4_FN2, -	PS6_3_FN1, PS6_3_FN2, -	PS6_2_FN1, PS6_2_FN2, -	PS6_1_FN1, PS6_1_FN2, -	PS6_0_FN1, PS6_0_FN2, - -	PS7_15_FN1, PS7_15_FN2, -	PS7_14_FN1, PS7_14_FN2, -	PS7_13_FN1, PS7_13_FN2, -	PS7_12_FN1, PS7_12_FN2, -	PS7_11_FN1, PS7_11_FN2, -	PS7_10_FN1, PS7_10_FN2, -	PS7_9_FN1, PS7_9_FN2, -	PS7_8_FN1, PS7_8_FN2, -	PS7_7_FN1, PS7_7_FN2, -	PS7_6_FN1, PS7_6_FN2, -	PS7_5_FN1, PS7_5_FN2, -	PS7_4_FN1, PS7_4_FN2, - -	PS8_15_FN1, PS8_15_FN2, -	PS8_14_FN1, PS8_14_FN2, -	PS8_13_FN1, PS8_13_FN2, -	PS8_12_FN1, PS8_12_FN2, -	PS8_11_FN1, PS8_11_FN2, -	PS8_10_FN1, PS8_10_FN2, -	PS8_9_FN1, PS8_9_FN2, -	PS8_8_FN1, PS8_8_FN2, -	PINMUX_FUNCTION_END, - -	PINMUX_MARK_BEGIN, -	/* PTA (mobule: LBSC, RGMII) */ -	BS_MARK,	RDWR_MARK,	WE1_MARK,	RDY_MARK, -	ET0_MDC_MARK,	ET0_MDIO_MARK,	ET1_MDC_MARK,	ET1_MDIO_MARK, - -	/* PTB (mobule: INTC, ONFI, TMU) */ -	IRQ15_MARK,	IRQ14_MARK,	IRQ13_MARK,	IRQ12_MARK, -	IRQ11_MARK,	IRQ10_MARK,	IRQ9_MARK,	IRQ8_MARK, -	ON_NRE_MARK,	ON_NWE_MARK,	ON_NWP_MARK,	ON_NCE0_MARK, -	ON_R_B0_MARK,	ON_ALE_MARK,	ON_CLE_MARK,	TCLK_MARK, - -	/* PTC (mobule: IRQ, PWMU) */ -	IRQ7_MARK,	IRQ6_MARK,	IRQ5_MARK,	IRQ4_MARK, -	IRQ3_MARK,	IRQ2_MARK,	IRQ1_MARK,	IRQ0_MARK, -	PWMU0_MARK,	PWMU1_MARK,	PWMU2_MARK,	PWMU3_MARK, -	PWMU4_MARK,	PWMU5_MARK, - -	/* PTD (mobule: SPI0, DMAC) */ -	SP0_MOSI_MARK,	SP0_MISO_MARK,	SP0_SCK_MARK,	SP0_SCK_FB_MARK, -	SP0_SS0_MARK,	SP0_SS1_MARK,	SP0_SS2_MARK,	SP0_SS3_MARK, -	DREQ0_MARK,	DACK0_MARK,	TEND0_MARK, - -	/* PTE (mobule: RMII) */ -	RMII0_CRS_DV_MARK,	RMII0_TXD1_MARK, -	RMII0_TXD0_MARK,	RMII0_TXEN_MARK, -	RMII0_REFCLK_MARK,	RMII0_RXD1_MARK, -	RMII0_RXD0_MARK,	RMII0_RX_ER_MARK, - -	/* PTF (mobule: RMII, SerMux) */ -	RMII1_CRS_DV_MARK,	RMII1_TXD1_MARK, -	RMII1_TXD0_MARK,	RMII1_TXEN_MARK, -	RMII1_REFCLK_MARK,	RMII1_RXD1_MARK, -	RMII1_RXD0_MARK,	RMII1_RX_ER_MARK, -	RAC_RI_MARK, - -	/* PTG (mobule: system, LBSC, LPC, WDT, LPC, eMMC) */ -	BOOTFMS_MARK,	BOOTWP_MARK,	A25_MARK,	A24_MARK, -	SERIRQ_MARK,	WDTOVF_MARK,	LPCPD_MARK,	LDRQ_MARK, -	MMCCLK_MARK,	MMCCMD_MARK, - -	/* PTH (mobule: SPI1, LPC, DMAC, ADC) */ -	SP1_MOSI_MARK,	SP1_MISO_MARK,	SP1_SCK_MARK,	SP1_SCK_FB_MARK, -	SP1_SS0_MARK,	SP1_SS1_MARK,	WP_MARK,	FMS0_MARK, -	TEND1_MARK,	DREQ1_MARK,	DACK1_MARK,	ADTRG1_MARK, -	ADTRG0_MARK, - -	/* PTI (mobule: LBSC, SDHI) */ -	D15_MARK,	D14_MARK,	D13_MARK,	D12_MARK, -	D11_MARK,	D10_MARK,	D9_MARK,	D8_MARK, -	SD_WP_MARK,	SD_CD_MARK,	SD_CLK_MARK,	SD_CMD_MARK, -	SD_D3_MARK,	SD_D2_MARK,	SD_D1_MARK,	SD_D0_MARK, - -	/* PTJ (mobule: SCIF234) */ -	RTS3_MARK,	CTS3_MARK,	TXD3_MARK,	RXD3_MARK, -	RTS4_MARK,	RXD4_MARK,	TXD4_MARK, - -	/* PTK (mobule: SERMUX, LBSC, SCIF) */ -	COM2_TXD_MARK,	COM2_RXD_MARK,	COM2_RTS_MARK,	COM2_CTS_MARK, -	COM2_DTR_MARK,	COM2_DSR_MARK,	COM2_DCD_MARK,	CLKOUT_MARK, -	SCK2_MARK,	SCK4_MARK,	SCK3_MARK, - -	/* PTL (mobule: SERMUX, SCIF, LBSC, AUD) */ -	RAC_RXD_MARK,	RAC_RTS_MARK,	RAC_CTS_MARK,	RAC_DTR_MARK, -	RAC_DSR_MARK,	RAC_DCD_MARK,	RAC_TXD_MARK,	RXD2_MARK, -	CS5_MARK,	CS6_MARK,	AUDSYNC_MARK,	AUDCK_MARK, -	TXD2_MARK, - -	/* PTM (mobule: LBSC, IIC) */ -	CS4_MARK,	RD_MARK,	WE0_MARK,	CS0_MARK, -	SDA6_MARK,	SCL6_MARK,	SDA7_MARK,	SCL7_MARK, - -	/* PTN (mobule: USB, JMC, SGPIO, WDT) */ -	VBUS_EN_MARK,	VBUS_OC_MARK,	JMCTCK_MARK,	JMCTMS_MARK, -	JMCTDO_MARK,	JMCTDI_MARK,	JMCTRST_MARK, -	SGPIO1_CLK_MARK,	SGPIO1_LOAD_MARK,	SGPIO1_DI_MARK, -	SGPIO1_DO_MARK,		SUB_CLKIN_MARK, - -	/* PTO (mobule: SGPIO, SerMux) */ -	SGPIO0_CLK_MARK,	SGPIO0_LOAD_MARK,	SGPIO0_DI_MARK, -	SGPIO0_DO_MARK,		SGPIO2_CLK_MARK,	SGPIO2_LOAD_MARK, -	SGPIO2_DI_MARK,		SGPIO2_DO_MARK, -	COM1_TXD_MARK,	COM1_RXD_MARK,	COM1_RTS_MARK,	COM1_CTS_MARK, - -	/* PTQ (mobule: LPC) */ -	LAD3_MARK,	LAD2_MARK,	LAD1_MARK,	LAD0_MARK, -	LFRAME_MARK,	LRESET_MARK,	LCLK_MARK, - -	/* PTR (mobule: GRA, IIC) */ -	DDC3_MARK,	DDC2_MARK,	SDA2_MARK,	SCL2_MARK, -	SDA1_MARK,	SCL1_MARK,	SDA0_MARK,	SCL0_MARK, -	SDA8_MARK,	SCL8_MARK, - -	/* PTS (mobule: GRA, IIC) */ -	DDC1_MARK,	DDC0_MARK,	SDA5_MARK,	SCL5_MARK, -	SDA4_MARK,	SCL4_MARK,	SDA3_MARK,	SCL3_MARK, -	SDA9_MARK,	SCL9_MARK, - -	/* PTT (mobule: PWMX, AUD) */ -	PWMX7_MARK,	PWMX6_MARK,	PWMX5_MARK,	PWMX4_MARK, -	PWMX3_MARK,	PWMX2_MARK,	PWMX1_MARK,	PWMX0_MARK, -	AUDATA3_MARK,	AUDATA2_MARK,	AUDATA1_MARK,	AUDATA0_MARK, -	STATUS1_MARK,	STATUS0_MARK, - -	/* PTU (mobule: LPC, APM) */ -	LGPIO7_MARK,	LGPIO6_MARK,	LGPIO5_MARK,	LGPIO4_MARK, -	LGPIO3_MARK,	LGPIO2_MARK,	LGPIO1_MARK,	LGPIO0_MARK, -	APMONCTL_O_MARK,	APMPWBTOUT_O_MARK,	APMSCI_O_MARK, -	APMVDDON_MARK,	APMSLPBTN_MARK,	APMPWRBTN_MARK,	APMS5N_MARK, -	APMS3N_MARK, - -	/* PTV (mobule: LBSC, SerMux, R-SPI, EVC, GRA) */ -	A23_MARK,	A22_MARK,	A21_MARK,	A20_MARK, -	A19_MARK,	A18_MARK,	A17_MARK,	A16_MARK, -	COM2_RI_MARK,		R_SPI_MOSI_MARK,	R_SPI_MISO_MARK, -	R_SPI_RSPCK_MARK,	R_SPI_SSL0_MARK,	R_SPI_SSL1_MARK, -	EVENT7_MARK,	EVENT6_MARK,	VBIOS_DI_MARK,	VBIOS_DO_MARK, -	VBIOS_CLK_MARK,	VBIOS_CS_MARK, - -	/* PTW (mobule: LBSC, EVC, SCIF) */ -	A15_MARK,	A14_MARK,	A13_MARK,	A12_MARK, -	A11_MARK,	A10_MARK,	A9_MARK,	A8_MARK, -	EVENT5_MARK,	EVENT4_MARK,	EVENT3_MARK,	EVENT2_MARK, -	EVENT1_MARK,	EVENT0_MARK,	CTS4_MARK,	CTS2_MARK, - -	/* PTX (mobule: LBSC, SCIF, SIM) */ -	A7_MARK,	A6_MARK,	A5_MARK,	A4_MARK, -	A3_MARK,	A2_MARK,	A1_MARK,	A0_MARK, -	RTS2_MARK,	SIM_D_MARK,	SIM_CLK_MARK,	SIM_RST_MARK, - -	/* PTY (mobule: LBSC) */ -	D7_MARK,	D6_MARK,	D5_MARK,	D4_MARK, -	D3_MARK,	D2_MARK,	D1_MARK,	D0_MARK, - -	/* PTZ (mobule: eMMC, ONFI) */ -	MMCDAT7_MARK,	MMCDAT6_MARK,	MMCDAT5_MARK,	MMCDAT4_MARK, -	MMCDAT3_MARK,	MMCDAT2_MARK,	MMCDAT1_MARK,	MMCDAT0_MARK, -	ON_DQ7_MARK,	ON_DQ6_MARK,	ON_DQ5_MARK,	ON_DQ4_MARK, -	ON_DQ3_MARK,	ON_DQ2_MARK,	ON_DQ1_MARK,	ON_DQ0_MARK, - -	PINMUX_MARK_END, -}; - -static pinmux_enum_t pinmux_data[] = { -	/* PTA GPIO */ -	PINMUX_DATA(PTA7_DATA, PTA7_IN, PTA7_OUT), -	PINMUX_DATA(PTA6_DATA, PTA6_IN, PTA6_OUT), -	PINMUX_DATA(PTA5_DATA, PTA5_IN, PTA5_OUT), -	PINMUX_DATA(PTA4_DATA, PTA4_IN, PTA4_OUT), -	PINMUX_DATA(PTA3_DATA, PTA3_IN, PTA3_OUT), -	PINMUX_DATA(PTA2_DATA, PTA2_IN, PTA2_OUT), -	PINMUX_DATA(PTA1_DATA, PTA1_IN, PTA1_OUT), -	PINMUX_DATA(PTA0_DATA, PTA0_IN, PTA0_OUT), - -	/* PTB GPIO */ -	PINMUX_DATA(PTB7_DATA, PTB7_IN, PTB7_OUT), -	PINMUX_DATA(PTB6_DATA, PTB6_IN, PTB6_OUT), -	PINMUX_DATA(PTB5_DATA, PTB5_IN, PTB5_OUT), -	PINMUX_DATA(PTB4_DATA, PTB4_IN, PTB4_OUT), -	PINMUX_DATA(PTB3_DATA, PTB3_IN, PTB3_OUT), -	PINMUX_DATA(PTB2_DATA, PTB2_IN, PTB2_OUT), -	PINMUX_DATA(PTB1_DATA, PTB1_IN, PTB1_OUT), -	PINMUX_DATA(PTB0_DATA, PTB0_IN, PTB0_OUT), - -	/* PTC GPIO */ -	PINMUX_DATA(PTC7_DATA, PTC7_IN, PTC7_OUT), -	PINMUX_DATA(PTC6_DATA, PTC6_IN, PTC6_OUT), -	PINMUX_DATA(PTC5_DATA, PTC5_IN, PTC5_OUT), -	PINMUX_DATA(PTC4_DATA, PTC4_IN, PTC4_OUT), -	PINMUX_DATA(PTC3_DATA, PTC3_IN, PTC3_OUT), -	PINMUX_DATA(PTC2_DATA, PTC2_IN, PTC2_OUT), -	PINMUX_DATA(PTC1_DATA, PTC1_IN, PTC1_OUT), -	PINMUX_DATA(PTC0_DATA, PTC0_IN, PTC0_OUT), - -	/* PTD GPIO */ -	PINMUX_DATA(PTD7_DATA, PTD7_IN, PTD7_OUT), -	PINMUX_DATA(PTD6_DATA, PTD6_IN, PTD6_OUT), -	PINMUX_DATA(PTD5_DATA, PTD5_IN, PTD5_OUT), -	PINMUX_DATA(PTD4_DATA, PTD4_IN, PTD4_OUT), -	PINMUX_DATA(PTD3_DATA, PTD3_IN, PTD3_OUT), -	PINMUX_DATA(PTD2_DATA, PTD2_IN, PTD2_OUT), -	PINMUX_DATA(PTD1_DATA, PTD1_IN, PTD1_OUT), -	PINMUX_DATA(PTD0_DATA, PTD0_IN, PTD0_OUT), - -	/* PTE GPIO */ -	PINMUX_DATA(PTE7_DATA, PTE7_IN, PTE7_OUT), -	PINMUX_DATA(PTE6_DATA, PTE6_IN, PTE6_OUT), -	PINMUX_DATA(PTE5_DATA, PTE5_IN, PTE5_OUT), -	PINMUX_DATA(PTE4_DATA, PTE4_IN, PTE4_OUT), -	PINMUX_DATA(PTE3_DATA, PTE3_IN, PTE3_OUT), -	PINMUX_DATA(PTE2_DATA, PTE2_IN, PTE2_OUT), -	PINMUX_DATA(PTE1_DATA, PTE1_IN, PTE1_OUT), -	PINMUX_DATA(PTE0_DATA, PTE0_IN, PTE0_OUT), - -	/* PTF GPIO */ -	PINMUX_DATA(PTF7_DATA, PTF7_IN, PTF7_OUT), -	PINMUX_DATA(PTF6_DATA, PTF6_IN, PTF6_OUT), -	PINMUX_DATA(PTF5_DATA, PTF5_IN, PTF5_OUT), -	PINMUX_DATA(PTF4_DATA, PTF4_IN, PTF4_OUT), -	PINMUX_DATA(PTF3_DATA, PTF3_IN, PTF3_OUT), -	PINMUX_DATA(PTF2_DATA, PTF2_IN, PTF2_OUT), -	PINMUX_DATA(PTF1_DATA, PTF1_IN, PTF1_OUT), -	PINMUX_DATA(PTF0_DATA, PTF0_IN, PTF0_OUT), - -	/* PTG GPIO */ -	PINMUX_DATA(PTG7_DATA, PTG7_IN, PTG7_OUT), -	PINMUX_DATA(PTG6_DATA, PTG6_IN, PTG6_OUT), -	PINMUX_DATA(PTG5_DATA, PTG5_IN, PTG5_OUT), -	PINMUX_DATA(PTG4_DATA, PTG4_IN, PTG4_OUT), -	PINMUX_DATA(PTG3_DATA, PTG3_IN, PTG3_OUT), -	PINMUX_DATA(PTG2_DATA, PTG2_IN, PTG2_OUT), -	PINMUX_DATA(PTG1_DATA, PTG1_IN, PTG1_OUT), -	PINMUX_DATA(PTG0_DATA, PTG0_IN, PTG0_OUT), - -	/* PTH GPIO */ -	PINMUX_DATA(PTH7_DATA, PTH7_IN, PTH7_OUT), -	PINMUX_DATA(PTH6_DATA, PTH6_IN, PTH6_OUT), -	PINMUX_DATA(PTH5_DATA, PTH5_IN, PTH5_OUT), -	PINMUX_DATA(PTH4_DATA, PTH4_IN, PTH4_OUT), -	PINMUX_DATA(PTH3_DATA, PTH3_IN, PTH3_OUT), -	PINMUX_DATA(PTH2_DATA, PTH2_IN, PTH2_OUT), -	PINMUX_DATA(PTH1_DATA, PTH1_IN, PTH1_OUT), -	PINMUX_DATA(PTH0_DATA, PTH0_IN, PTH0_OUT), - -	/* PTI GPIO */ -	PINMUX_DATA(PTI7_DATA, PTI7_IN, PTI7_OUT), -	PINMUX_DATA(PTI6_DATA, PTI6_IN, PTI6_OUT), -	PINMUX_DATA(PTI5_DATA, PTI5_IN, PTI5_OUT), -	PINMUX_DATA(PTI4_DATA, PTI4_IN, PTI4_OUT), -	PINMUX_DATA(PTI3_DATA, PTI3_IN, PTI3_OUT), -	PINMUX_DATA(PTI2_DATA, PTI2_IN, PTI2_OUT), -	PINMUX_DATA(PTI1_DATA, PTI1_IN, PTI1_OUT), -	PINMUX_DATA(PTI0_DATA, PTI0_IN, PTI0_OUT), - -	/* PTJ GPIO */ -	PINMUX_DATA(PTJ6_DATA, PTJ6_IN, PTJ6_OUT), -	PINMUX_DATA(PTJ5_DATA, PTJ5_IN, PTJ5_OUT), -	PINMUX_DATA(PTJ4_DATA, PTJ4_IN, PTJ4_OUT), -	PINMUX_DATA(PTJ3_DATA, PTJ3_IN, PTJ3_OUT), -	PINMUX_DATA(PTJ2_DATA, PTJ2_IN, PTJ2_OUT), -	PINMUX_DATA(PTJ1_DATA, PTJ1_IN, PTJ1_OUT), -	PINMUX_DATA(PTJ0_DATA, PTJ0_IN, PTJ0_OUT), - -	/* PTK GPIO */ -	PINMUX_DATA(PTK7_DATA, PTK7_IN, PTK7_OUT), -	PINMUX_DATA(PTK6_DATA, PTK6_IN, PTK6_OUT), -	PINMUX_DATA(PTK5_DATA, PTK5_IN, PTK5_OUT), -	PINMUX_DATA(PTK4_DATA, PTK4_IN, PTK4_OUT), -	PINMUX_DATA(PTK3_DATA, PTK3_IN, PTK3_OUT), -	PINMUX_DATA(PTK2_DATA, PTK2_IN, PTK2_OUT), -	PINMUX_DATA(PTK1_DATA, PTK1_IN, PTK1_OUT), -	PINMUX_DATA(PTK0_DATA, PTK0_IN, PTK0_OUT), - -	/* PTL GPIO */ -	PINMUX_DATA(PTL6_DATA, PTL6_IN, PTL6_OUT), -	PINMUX_DATA(PTL5_DATA, PTL5_IN, PTL5_OUT), -	PINMUX_DATA(PTL4_DATA, PTL4_IN, PTL4_OUT), -	PINMUX_DATA(PTL3_DATA, PTL3_IN, PTL3_OUT), -	PINMUX_DATA(PTL2_DATA, PTL2_IN, PTL2_OUT), -	PINMUX_DATA(PTL1_DATA, PTL1_IN, PTL1_OUT), -	PINMUX_DATA(PTL0_DATA, PTL0_IN, PTL0_OUT), - -	/* PTM GPIO */ -	PINMUX_DATA(PTM6_DATA, PTM6_IN, PTM6_OUT), -	PINMUX_DATA(PTM5_DATA, PTM5_IN, PTM5_OUT), -	PINMUX_DATA(PTM4_DATA, PTM4_IN, PTM4_OUT), -	PINMUX_DATA(PTM3_DATA, PTM3_IN, PTM3_OUT), -	PINMUX_DATA(PTM2_DATA, PTM2_IN, PTM2_OUT), -	PINMUX_DATA(PTM1_DATA, PTM1_IN, PTM1_OUT), -	PINMUX_DATA(PTM0_DATA, PTM0_IN, PTM0_OUT), - -	/* PTN GPIO */ -	PINMUX_DATA(PTN6_DATA, PTN6_IN, PTN6_OUT), -	PINMUX_DATA(PTN5_DATA, PTN5_IN, PTN5_OUT), -	PINMUX_DATA(PTN4_DATA, PTN4_IN, PTN4_OUT), -	PINMUX_DATA(PTN3_DATA, PTN3_IN, PTN3_OUT), -	PINMUX_DATA(PTN2_DATA, PTN2_IN, PTN2_OUT), -	PINMUX_DATA(PTN1_DATA, PTN1_IN, PTN1_OUT), -	PINMUX_DATA(PTN0_DATA, PTN0_IN, PTN0_OUT), - -	/* PTO GPIO */ -	PINMUX_DATA(PTO7_DATA, PTO7_IN, PTO7_OUT), -	PINMUX_DATA(PTO6_DATA, PTO6_IN, PTO6_OUT), -	PINMUX_DATA(PTO5_DATA, PTO5_IN, PTO5_OUT), -	PINMUX_DATA(PTO4_DATA, PTO4_IN, PTO4_OUT), -	PINMUX_DATA(PTO3_DATA, PTO3_IN, PTO3_OUT), -	PINMUX_DATA(PTO2_DATA, PTO2_IN, PTO2_OUT), -	PINMUX_DATA(PTO1_DATA, PTO1_IN, PTO1_OUT), -	PINMUX_DATA(PTO0_DATA, PTO0_IN, PTO0_OUT), - -	/* PTQ GPIO */ -	PINMUX_DATA(PTQ6_DATA, PTQ6_IN, PTQ6_OUT), -	PINMUX_DATA(PTQ5_DATA, PTQ5_IN, PTQ5_OUT), -	PINMUX_DATA(PTQ4_DATA, PTQ4_IN, PTQ4_OUT), -	PINMUX_DATA(PTQ3_DATA, PTQ3_IN, PTQ3_OUT), -	PINMUX_DATA(PTQ2_DATA, PTQ2_IN, PTQ2_OUT), -	PINMUX_DATA(PTQ1_DATA, PTQ1_IN, PTQ1_OUT), -	PINMUX_DATA(PTQ0_DATA, PTQ0_IN, PTQ0_OUT), - -	/* PTR GPIO */ -	PINMUX_DATA(PTR7_DATA, PTR7_IN, PTR7_OUT), -	PINMUX_DATA(PTR6_DATA, PTR6_IN, PTR6_OUT), -	PINMUX_DATA(PTR5_DATA, PTR5_IN, PTR5_OUT), -	PINMUX_DATA(PTR4_DATA, PTR4_IN, PTR4_OUT), -	PINMUX_DATA(PTR3_DATA, PTR3_IN, PTR3_OUT), -	PINMUX_DATA(PTR2_DATA, PTR2_IN, PTR2_OUT), -	PINMUX_DATA(PTR1_DATA, PTR1_IN, PTR1_OUT), -	PINMUX_DATA(PTR0_DATA, PTR0_IN, PTR0_OUT), - -	/* PTS GPIO */ -	PINMUX_DATA(PTS7_DATA, PTS7_IN, PTS7_OUT), -	PINMUX_DATA(PTS6_DATA, PTS6_IN, PTS6_OUT), -	PINMUX_DATA(PTS5_DATA, PTS5_IN, PTS5_OUT), -	PINMUX_DATA(PTS4_DATA, PTS4_IN, PTS4_OUT), -	PINMUX_DATA(PTS3_DATA, PTS3_IN, PTS3_OUT), -	PINMUX_DATA(PTS2_DATA, PTS2_IN, PTS2_OUT), -	PINMUX_DATA(PTS1_DATA, PTS1_IN, PTS1_OUT), -	PINMUX_DATA(PTS0_DATA, PTS0_IN, PTS0_OUT), - -	/* PTT GPIO */ -	PINMUX_DATA(PTT7_DATA, PTT7_IN, PTT7_OUT), -	PINMUX_DATA(PTT6_DATA, PTT6_IN, PTT6_OUT), -	PINMUX_DATA(PTT5_DATA, PTT5_IN, PTT5_OUT), -	PINMUX_DATA(PTT4_DATA, PTT4_IN, PTT4_OUT), -	PINMUX_DATA(PTT3_DATA, PTT3_IN, PTT3_OUT), -	PINMUX_DATA(PTT2_DATA, PTT2_IN, PTT2_OUT), -	PINMUX_DATA(PTT1_DATA, PTT1_IN, PTT1_OUT), -	PINMUX_DATA(PTT0_DATA, PTT0_IN, PTT0_OUT), - -	/* PTU GPIO */ -	PINMUX_DATA(PTU7_DATA, PTU7_IN, PTU7_OUT), -	PINMUX_DATA(PTU6_DATA, PTU6_IN, PTU6_OUT), -	PINMUX_DATA(PTU5_DATA, PTU5_IN, PTU5_OUT), -	PINMUX_DATA(PTU4_DATA, PTU4_IN, PTU4_OUT), -	PINMUX_DATA(PTU3_DATA, PTU3_IN, PTU3_OUT), -	PINMUX_DATA(PTU2_DATA, PTU2_IN, PTU2_OUT), -	PINMUX_DATA(PTU1_DATA, PTU1_IN, PTU1_OUT), -	PINMUX_DATA(PTU0_DATA, PTU0_IN, PTU0_OUT), - -	/* PTV GPIO */ -	PINMUX_DATA(PTV7_DATA, PTV7_IN, PTV7_OUT), -	PINMUX_DATA(PTV6_DATA, PTV6_IN, PTV6_OUT), -	PINMUX_DATA(PTV5_DATA, PTV5_IN, PTV5_OUT), -	PINMUX_DATA(PTV4_DATA, PTV4_IN, PTV4_OUT), -	PINMUX_DATA(PTV3_DATA, PTV3_IN, PTV3_OUT), -	PINMUX_DATA(PTV2_DATA, PTV2_IN, PTV2_OUT), -	PINMUX_DATA(PTV1_DATA, PTV1_IN, PTV1_OUT), -	PINMUX_DATA(PTV0_DATA, PTV0_IN, PTV0_OUT), - -	/* PTW GPIO */ -	PINMUX_DATA(PTW7_DATA, PTW7_IN, PTW7_OUT), -	PINMUX_DATA(PTW6_DATA, PTW6_IN, PTW6_OUT), -	PINMUX_DATA(PTW5_DATA, PTW5_IN, PTW5_OUT), -	PINMUX_DATA(PTW4_DATA, PTW4_IN, PTW4_OUT), -	PINMUX_DATA(PTW3_DATA, PTW3_IN, PTW3_OUT), -	PINMUX_DATA(PTW2_DATA, PTW2_IN, PTW2_OUT), -	PINMUX_DATA(PTW1_DATA, PTW1_IN, PTW1_OUT), -	PINMUX_DATA(PTW0_DATA, PTW0_IN, PTW0_OUT), - -	/* PTX GPIO */ -	PINMUX_DATA(PTX7_DATA, PTX7_IN, PTX7_OUT), -	PINMUX_DATA(PTX6_DATA, PTX6_IN, PTX6_OUT), -	PINMUX_DATA(PTX5_DATA, PTX5_IN, PTX5_OUT), -	PINMUX_DATA(PTX4_DATA, PTX4_IN, PTX4_OUT), -	PINMUX_DATA(PTX3_DATA, PTX3_IN, PTX3_OUT), -	PINMUX_DATA(PTX2_DATA, PTX2_IN, PTX2_OUT), -	PINMUX_DATA(PTX1_DATA, PTX1_IN, PTX1_OUT), -	PINMUX_DATA(PTX0_DATA, PTX0_IN, PTX0_OUT), - -	/* PTY GPIO */ -	PINMUX_DATA(PTY7_DATA, PTY7_IN, PTY7_OUT), -	PINMUX_DATA(PTY6_DATA, PTY6_IN, PTY6_OUT), -	PINMUX_DATA(PTY5_DATA, PTY5_IN, PTY5_OUT), -	PINMUX_DATA(PTY4_DATA, PTY4_IN, PTY4_OUT), -	PINMUX_DATA(PTY3_DATA, PTY3_IN, PTY3_OUT), -	PINMUX_DATA(PTY2_DATA, PTY2_IN, PTY2_OUT), -	PINMUX_DATA(PTY1_DATA, PTY1_IN, PTY1_OUT), -	PINMUX_DATA(PTY0_DATA, PTY0_IN, PTY0_OUT), - -	/* PTZ GPIO */ -	PINMUX_DATA(PTZ7_DATA, PTZ7_IN, PTZ7_OUT), -	PINMUX_DATA(PTZ6_DATA, PTZ6_IN, PTZ6_OUT), -	PINMUX_DATA(PTZ5_DATA, PTZ5_IN, PTZ5_OUT), -	PINMUX_DATA(PTZ4_DATA, PTZ4_IN, PTZ4_OUT), -	PINMUX_DATA(PTZ3_DATA, PTZ3_IN, PTZ3_OUT), -	PINMUX_DATA(PTZ2_DATA, PTZ2_IN, PTZ2_OUT), -	PINMUX_DATA(PTZ1_DATA, PTZ1_IN, PTZ1_OUT), -	PINMUX_DATA(PTZ0_DATA, PTZ0_IN, PTZ0_OUT), - -	/* PTA FN */ -	PINMUX_DATA(BS_MARK, PTA7_FN), -	PINMUX_DATA(RDWR_MARK, PTA6_FN), -	PINMUX_DATA(WE1_MARK, PTA5_FN), -	PINMUX_DATA(RDY_MARK, PTA4_FN), -	PINMUX_DATA(ET0_MDC_MARK, PTA3_FN), -	PINMUX_DATA(ET0_MDIO_MARK, PTA2_FN), -	PINMUX_DATA(ET1_MDC_MARK, PTA1_FN), -	PINMUX_DATA(ET1_MDIO_MARK, PTA0_FN), - -	/* PTB FN */ -	PINMUX_DATA(IRQ15_MARK, PS0_15_FN1, PTB7_FN), -	PINMUX_DATA(ON_NRE_MARK, PS0_15_FN2, PTB7_FN), -	PINMUX_DATA(IRQ14_MARK, PS0_14_FN1, PTB6_FN), -	PINMUX_DATA(ON_NWE_MARK, PS0_14_FN2, PTB6_FN), -	PINMUX_DATA(IRQ13_MARK, PS0_13_FN1, PTB5_FN), -	PINMUX_DATA(ON_NWP_MARK, PS0_13_FN2, PTB5_FN), -	PINMUX_DATA(IRQ12_MARK, PS0_12_FN1, PTB4_FN), -	PINMUX_DATA(ON_NCE0_MARK, PS0_12_FN2, PTB4_FN), -	PINMUX_DATA(IRQ11_MARK, PS0_11_FN1, PTB3_FN), -	PINMUX_DATA(ON_R_B0_MARK, PS0_11_FN2, PTB3_FN), -	PINMUX_DATA(IRQ10_MARK, PS0_10_FN1, PTB2_FN), -	PINMUX_DATA(ON_ALE_MARK, PS0_10_FN2, PTB2_FN), -	PINMUX_DATA(IRQ9_MARK, PS0_9_FN1, PTB1_FN), -	PINMUX_DATA(ON_CLE_MARK, PS0_9_FN2, PTB1_FN), -	PINMUX_DATA(IRQ8_MARK, PS0_8_FN1, PTB0_FN), -	PINMUX_DATA(TCLK_MARK, PS0_8_FN2, PTB0_FN), - -	/* PTC FN */ -	PINMUX_DATA(IRQ7_MARK, PS0_7_FN1, PTC7_FN), -	PINMUX_DATA(PWMU0_MARK, PS0_7_FN2, PTC7_FN), -	PINMUX_DATA(IRQ6_MARK, PS0_6_FN1, PTC6_FN), -	PINMUX_DATA(PWMU1_MARK, PS0_6_FN2, PTC6_FN), -	PINMUX_DATA(IRQ5_MARK, PS0_5_FN1, PTC5_FN), -	PINMUX_DATA(PWMU2_MARK, PS0_5_FN2, PTC5_FN), -	PINMUX_DATA(IRQ4_MARK, PS0_4_FN1, PTC5_FN), -	PINMUX_DATA(PWMU3_MARK, PS0_4_FN2, PTC4_FN), -	PINMUX_DATA(IRQ3_MARK, PS0_3_FN1, PTC3_FN), -	PINMUX_DATA(PWMU4_MARK, PS0_3_FN2, PTC3_FN), -	PINMUX_DATA(IRQ2_MARK, PS0_2_FN1, PTC2_FN), -	PINMUX_DATA(PWMU5_MARK, PS0_2_FN2, PTC2_FN), -	PINMUX_DATA(IRQ1_MARK, PTC1_FN), -	PINMUX_DATA(IRQ0_MARK, PTC0_FN), - -	/* PTD FN */ -	PINMUX_DATA(SP0_MOSI_MARK, PTD7_FN), -	PINMUX_DATA(SP0_MISO_MARK, PTD6_FN), -	PINMUX_DATA(SP0_SCK_MARK, PTD5_FN), -	PINMUX_DATA(SP0_SCK_FB_MARK, PTD4_FN), -	PINMUX_DATA(SP0_SS0_MARK, PTD3_FN), -	PINMUX_DATA(SP0_SS1_MARK, PS1_10_FN1, PTD2_FN), -	PINMUX_DATA(DREQ0_MARK, PS1_10_FN2, PTD2_FN), -	PINMUX_DATA(SP0_SS2_MARK, PS1_9_FN1, PTD1_FN), -	PINMUX_DATA(DACK0_MARK, PS1_9_FN2, PTD1_FN), -	PINMUX_DATA(SP0_SS3_MARK, PS1_8_FN1, PTD0_FN), -	PINMUX_DATA(TEND0_MARK, PS1_8_FN2, PTD0_FN), - -	/* PTE FN */ -	PINMUX_DATA(RMII0_CRS_DV_MARK, PTE7_FN), -	PINMUX_DATA(RMII0_TXD1_MARK, PTE6_FN), -	PINMUX_DATA(RMII0_TXD0_MARK, PTE5_FN), -	PINMUX_DATA(RMII0_TXEN_MARK, PTE4_FN), -	PINMUX_DATA(RMII0_REFCLK_MARK, PTE3_FN), -	PINMUX_DATA(RMII0_RXD1_MARK, PTE2_FN), -	PINMUX_DATA(RMII0_RXD0_MARK, PTE1_FN), -	PINMUX_DATA(RMII0_RX_ER_MARK, PTE0_FN), - -	/* PTF FN */ -	PINMUX_DATA(RMII1_CRS_DV_MARK, PTF7_FN), -	PINMUX_DATA(RMII1_TXD1_MARK, PTF6_FN), -	PINMUX_DATA(RMII1_TXD0_MARK, PTF5_FN), -	PINMUX_DATA(RMII1_TXEN_MARK, PTF4_FN), -	PINMUX_DATA(RMII1_REFCLK_MARK, PTF3_FN), -	PINMUX_DATA(RMII1_RXD1_MARK, PS1_2_FN1, PTF2_FN), -	PINMUX_DATA(RAC_RI_MARK, PS1_2_FN2, PTF2_FN), -	PINMUX_DATA(RMII1_RXD0_MARK, PTF1_FN), -	PINMUX_DATA(RMII1_RX_ER_MARK, PTF0_FN), - -	/* PTG FN */ -	PINMUX_DATA(BOOTFMS_MARK, PTG7_FN), -	PINMUX_DATA(BOOTWP_MARK, PTG6_FN), -	PINMUX_DATA(A25_MARK, PS2_13_FN1, PTG5_FN), -	PINMUX_DATA(MMCCLK_MARK, PS2_13_FN2, PTG5_FN), -	PINMUX_DATA(A24_MARK, PS2_12_FN1, PTG4_FN), -	PINMUX_DATA(MMCCMD_MARK, PS2_12_FN2, PTG4_FN), -	PINMUX_DATA(SERIRQ_MARK, PTG3_FN), -	PINMUX_DATA(WDTOVF_MARK, PTG2_FN), -	PINMUX_DATA(LPCPD_MARK, PTG1_FN), -	PINMUX_DATA(LDRQ_MARK, PTG0_FN), - -	/* PTH FN */ -	PINMUX_DATA(SP1_MOSI_MARK, PS2_7_FN1, PTH7_FN), -	PINMUX_DATA(TEND1_MARK, PS2_7_FN2, PTH7_FN), -	PINMUX_DATA(SP1_MISO_MARK, PS2_6_FN1, PTH6_FN), -	PINMUX_DATA(DREQ1_MARK, PS2_6_FN2, PTH6_FN), -	PINMUX_DATA(SP1_SCK_MARK, PS2_5_FN1, PTH5_FN), -	PINMUX_DATA(DACK1_MARK, PS2_5_FN2, PTH5_FN), -	PINMUX_DATA(SP1_SCK_FB_MARK, PS2_4_FN1, PTH4_FN), -	PINMUX_DATA(ADTRG1_MARK, PS2_4_FN2, PTH4_FN), -	PINMUX_DATA(SP1_SS0_MARK, PTH3_FN), -	PINMUX_DATA(SP1_SS1_MARK, PS2_2_FN1, PTH2_FN), -	PINMUX_DATA(ADTRG0_MARK, PS2_2_FN2, PTH2_FN), -	PINMUX_DATA(WP_MARK, PTH1_FN), -	PINMUX_DATA(FMS0_MARK, PTH0_FN), - -	/* PTI FN */ -	PINMUX_DATA(D15_MARK, PS3_15_FN1, PTI7_FN), -	PINMUX_DATA(SD_WP_MARK, PS3_15_FN2, PTI7_FN), -	PINMUX_DATA(D14_MARK, PS3_14_FN1, PTI6_FN), -	PINMUX_DATA(SD_CD_MARK, PS3_14_FN2, PTI6_FN), -	PINMUX_DATA(D13_MARK, PS3_13_FN1, PTI5_FN), -	PINMUX_DATA(SD_CLK_MARK, PS3_13_FN2, PTI5_FN), -	PINMUX_DATA(D12_MARK, PS3_12_FN1, PTI4_FN), -	PINMUX_DATA(SD_CMD_MARK, PS3_12_FN2, PTI4_FN), -	PINMUX_DATA(D11_MARK, PS3_11_FN1, PTI3_FN), -	PINMUX_DATA(SD_D3_MARK, PS3_11_FN2, PTI3_FN), -	PINMUX_DATA(D10_MARK, PS3_10_FN1, PTI2_FN), -	PINMUX_DATA(SD_D2_MARK, PS3_10_FN2, PTI2_FN), -	PINMUX_DATA(D9_MARK, PS3_9_FN1, PTI1_FN), -	PINMUX_DATA(SD_D1_MARK, PS3_9_FN2, PTI1_FN), -	PINMUX_DATA(D8_MARK, PS3_8_FN1, PTI0_FN), -	PINMUX_DATA(SD_D0_MARK, PS3_8_FN2, PTI0_FN), - -	/* PTJ FN */ -	PINMUX_DATA(RTS3_MARK, PTJ6_FN), -	PINMUX_DATA(CTS3_MARK, PTJ5_FN), -	PINMUX_DATA(TXD3_MARK, PTJ4_FN), -	PINMUX_DATA(RXD3_MARK, PTJ3_FN), -	PINMUX_DATA(RTS4_MARK, PTJ2_FN), -	PINMUX_DATA(RXD4_MARK, PTJ1_FN), -	PINMUX_DATA(TXD4_MARK, PTJ0_FN), - -	/* PTK FN */ -	PINMUX_DATA(COM2_TXD_MARK, PS3_7_FN1, PTK7_FN), -	PINMUX_DATA(SCK2_MARK, PS3_7_FN2, PTK7_FN), -	PINMUX_DATA(COM2_RXD_MARK, PTK6_FN), -	PINMUX_DATA(COM2_RTS_MARK, PTK5_FN), -	PINMUX_DATA(COM2_CTS_MARK, PTK4_FN), -	PINMUX_DATA(COM2_DTR_MARK, PTK3_FN), -	PINMUX_DATA(COM2_DSR_MARK, PS3_2_FN1, PTK2_FN), -	PINMUX_DATA(SCK4_MARK, PS3_2_FN2, PTK2_FN), -	PINMUX_DATA(COM2_DCD_MARK, PS3_1_FN1, PTK1_FN), -	PINMUX_DATA(SCK3_MARK, PS3_1_FN2, PTK1_FN), -	PINMUX_DATA(CLKOUT_MARK, PTK0_FN), - -	/* PTL FN */ -	PINMUX_DATA(RAC_RXD_MARK, PS4_14_FN1, PTL6_FN), -	PINMUX_DATA(RXD2_MARK, PS4_14_FN2, PTL6_FN), -	PINMUX_DATA(RAC_RTS_MARK, PS4_13_FN1, PTL5_FN), -	PINMUX_DATA(CS5_MARK, PS4_13_FN2, PTL5_FN), -	PINMUX_DATA(RAC_CTS_MARK, PS4_12_FN1, PTL4_FN), -	PINMUX_DATA(CS6_MARK, PS4_12_FN2, PTL4_FN), -	PINMUX_DATA(RAC_DTR_MARK, PTL3_FN), -	PINMUX_DATA(RAC_DSR_MARK, PS4_10_FN1, PTL2_FN), -	PINMUX_DATA(AUDSYNC_MARK, PS4_10_FN2, PTL2_FN), -	PINMUX_DATA(RAC_DCD_MARK, PS4_9_FN1, PTL1_FN), -	PINMUX_DATA(AUDCK_MARK, PS4_9_FN2, PTL1_FN), -	PINMUX_DATA(RAC_TXD_MARK, PS4_8_FN1, PTL0_FN), -	PINMUX_DATA(TXD2_MARK, PS4_8_FN1, PTL0_FN), - -	/* PTM FN */ -	PINMUX_DATA(CS4_MARK, PTM7_FN), -	PINMUX_DATA(RD_MARK, PTM6_FN), -	PINMUX_DATA(WE0_MARK, PTM7_FN), -	PINMUX_DATA(CS0_MARK, PTM4_FN), -	PINMUX_DATA(SDA6_MARK, PTM3_FN), -	PINMUX_DATA(SCL6_MARK, PTM2_FN), -	PINMUX_DATA(SDA7_MARK, PTM1_FN), -	PINMUX_DATA(SCL7_MARK, PTM0_FN), - -	/* PTN FN */ -	PINMUX_DATA(VBUS_EN_MARK, PTN6_FN), -	PINMUX_DATA(VBUS_OC_MARK, PTN5_FN), -	PINMUX_DATA(JMCTCK_MARK, PS4_4_FN1, PTN4_FN), -	PINMUX_DATA(SGPIO1_CLK_MARK, PS4_4_FN2, PTN4_FN), -	PINMUX_DATA(JMCTMS_MARK, PS4_3_FN1, PTN5_FN), -	PINMUX_DATA(SGPIO1_LOAD_MARK, PS4_3_FN2, PTN5_FN), -	PINMUX_DATA(JMCTDO_MARK, PS4_2_FN1, PTN2_FN), -	PINMUX_DATA(SGPIO1_DO_MARK, PS4_2_FN2, PTN2_FN), -	PINMUX_DATA(JMCTDI_MARK, PS4_1_FN1, PTN1_FN), -	PINMUX_DATA(SGPIO1_DI_MARK, PS4_1_FN2, PTN1_FN), -	PINMUX_DATA(JMCTRST_MARK, PS4_0_FN1, PTN0_FN), -	PINMUX_DATA(SUB_CLKIN_MARK, PS4_0_FN2, PTN0_FN), - -	/* PTO FN */ -	PINMUX_DATA(SGPIO0_CLK_MARK, PTO7_FN), -	PINMUX_DATA(SGPIO0_LOAD_MARK, PTO6_FN), -	PINMUX_DATA(SGPIO0_DI_MARK, PTO5_FN), -	PINMUX_DATA(SGPIO0_DO_MARK, PTO4_FN), -	PINMUX_DATA(SGPIO2_CLK_MARK, PS5_11_FN1, PTO3_FN), -	PINMUX_DATA(COM1_TXD_MARK, PS5_11_FN2, PTO3_FN), -	PINMUX_DATA(SGPIO2_LOAD_MARK, PS5_10_FN1, PTO2_FN), -	PINMUX_DATA(COM1_RXD_MARK, PS5_10_FN2, PTO2_FN), -	PINMUX_DATA(SGPIO2_DI_MARK, PS5_9_FN1, PTO1_FN), -	PINMUX_DATA(COM1_RTS_MARK, PS5_9_FN2, PTO1_FN), -	PINMUX_DATA(SGPIO2_DO_MARK, PS5_8_FN1, PTO0_FN), -	PINMUX_DATA(COM1_CTS_MARK, PS5_8_FN2, PTO0_FN), - -	/* PTP FN */ - -	/* PTQ FN */ -	PINMUX_DATA(LAD3_MARK, PTQ6_FN), -	PINMUX_DATA(LAD2_MARK, PTQ5_FN), -	PINMUX_DATA(LAD1_MARK, PTQ4_FN), -	PINMUX_DATA(LAD0_MARK, PTQ3_FN), -	PINMUX_DATA(LFRAME_MARK, PTQ2_FN), -	PINMUX_DATA(LRESET_MARK, PTQ1_FN), -	PINMUX_DATA(LCLK_MARK, PTQ0_FN), - -	/* PTR FN */ -	PINMUX_DATA(SDA8_MARK, PTR7_FN),	/* DDC3? */ -	PINMUX_DATA(SCL8_MARK, PTR6_FN),	/* DDC2? */ -	PINMUX_DATA(SDA2_MARK, PTR5_FN), -	PINMUX_DATA(SCL2_MARK, PTR4_FN), -	PINMUX_DATA(SDA1_MARK, PTR3_FN), -	PINMUX_DATA(SCL1_MARK, PTR2_FN), -	PINMUX_DATA(SDA0_MARK, PTR1_FN), -	PINMUX_DATA(SCL0_MARK, PTR0_FN), - -	/* PTS FN */ -	PINMUX_DATA(SDA9_MARK, PTS7_FN),	/* DDC1? */ -	PINMUX_DATA(SCL9_MARK, PTS6_FN),	/* DDC0? */ -	PINMUX_DATA(SDA5_MARK, PTS5_FN), -	PINMUX_DATA(SCL5_MARK, PTS4_FN), -	PINMUX_DATA(SDA4_MARK, PTS3_FN), -	PINMUX_DATA(SCL4_MARK, PTS2_FN), -	PINMUX_DATA(SDA3_MARK, PTS1_FN), -	PINMUX_DATA(SCL3_MARK, PTS0_FN), - -	/* PTT FN */ -	PINMUX_DATA(PWMX7_MARK, PS5_7_FN1, PTT7_FN), -	PINMUX_DATA(AUDATA3_MARK, PS5_7_FN2, PTT7_FN), -	PINMUX_DATA(PWMX6_MARK, PS5_6_FN1, PTT6_FN), -	PINMUX_DATA(AUDATA2_MARK, PS5_6_FN2, PTT6_FN), -	PINMUX_DATA(PWMX5_MARK, PS5_5_FN1, PTT5_FN), -	PINMUX_DATA(AUDATA1_MARK, PS5_5_FN2, PTT5_FN), -	PINMUX_DATA(PWMX4_MARK, PS5_4_FN1, PTT4_FN), -	PINMUX_DATA(AUDATA0_MARK, PS5_4_FN2, PTT4_FN), -	PINMUX_DATA(PWMX3_MARK, PS5_3_FN1, PTT3_FN), -	PINMUX_DATA(STATUS1_MARK, PS5_3_FN2, PTT3_FN), -	PINMUX_DATA(PWMX2_MARK, PS5_2_FN1, PTT2_FN), -	PINMUX_DATA(STATUS0_MARK, PS5_2_FN2, PTT2_FN), -	PINMUX_DATA(PWMX1_MARK, PTT1_FN), -	PINMUX_DATA(PWMX0_MARK, PTT0_FN), - -	/* PTU FN */ -	PINMUX_DATA(LGPIO7_MARK, PS6_15_FN1, PTU7_FN), -	PINMUX_DATA(APMONCTL_O_MARK, PS6_15_FN2, PTU7_FN), -	PINMUX_DATA(LGPIO6_MARK, PS6_14_FN1, PTU6_FN), -	PINMUX_DATA(APMPWBTOUT_O_MARK, PS6_14_FN2, PTU6_FN), -	PINMUX_DATA(LGPIO5_MARK, PS6_13_FN1, PTU5_FN), -	PINMUX_DATA(APMSCI_O_MARK, PS6_13_FN2, PTU5_FN), -	PINMUX_DATA(LGPIO4_MARK, PS6_12_FN1, PTU4_FN), -	PINMUX_DATA(APMVDDON_MARK, PS6_12_FN2, PTU4_FN), -	PINMUX_DATA(LGPIO3_MARK, PS6_11_FN1, PTU3_FN), -	PINMUX_DATA(APMSLPBTN_MARK, PS6_11_FN2, PTU3_FN), -	PINMUX_DATA(LGPIO2_MARK, PS6_10_FN1, PTU2_FN), -	PINMUX_DATA(APMPWRBTN_MARK, PS6_10_FN2, PTU2_FN), -	PINMUX_DATA(LGPIO1_MARK, PS6_9_FN1, PTU1_FN), -	PINMUX_DATA(APMS5N_MARK, PS6_9_FN2, PTU1_FN), -	PINMUX_DATA(LGPIO0_MARK, PS6_8_FN1, PTU0_FN), -	PINMUX_DATA(APMS3N_MARK, PS6_8_FN2, PTU0_FN), - -	/* PTV FN */ -	PINMUX_DATA(A23_MARK, PS6_7_FN1, PTV7_FN), -	PINMUX_DATA(COM2_RI_MARK, PS6_7_FN2, PTV7_FN), -	PINMUX_DATA(A22_MARK, PS6_6_FN1, PTV6_FN), -	PINMUX_DATA(R_SPI_MOSI_MARK, PS6_6_FN2, PTV6_FN), -	PINMUX_DATA(A21_MARK, PS6_5_FN1, PTV5_FN), -	PINMUX_DATA(R_SPI_MISO_MARK, PS6_5_FN2, PTV5_FN), -	PINMUX_DATA(A20_MARK, PS6_4_FN1, PTV4_FN), -	PINMUX_DATA(R_SPI_RSPCK_MARK, PS6_4_FN2, PTV4_FN), -	PINMUX_DATA(A19_MARK, PS6_3_FN1, PTV3_FN), -	PINMUX_DATA(R_SPI_SSL0_MARK, PS6_3_FN2, PTV3_FN), -	PINMUX_DATA(A18_MARK, PS6_2_FN1, PTV2_FN), -	PINMUX_DATA(R_SPI_SSL1_MARK, PS6_2_FN2, PTV2_FN), -	PINMUX_DATA(A17_MARK, PS6_1_FN1, PTV1_FN), -	PINMUX_DATA(EVENT7_MARK, PS6_1_FN2, PTV1_FN), -	PINMUX_DATA(A16_MARK, PS6_0_FN1, PTV0_FN), -	PINMUX_DATA(EVENT6_MARK, PS6_0_FN1, PTV0_FN), - -	/* PTW FN */ -	PINMUX_DATA(A15_MARK, PS7_15_FN1, PTW7_FN), -	PINMUX_DATA(EVENT5_MARK, PS7_15_FN2, PTW7_FN), -	PINMUX_DATA(A14_MARK, PS7_14_FN1, PTW6_FN), -	PINMUX_DATA(EVENT4_MARK, PS7_14_FN2, PTW6_FN), -	PINMUX_DATA(A13_MARK, PS7_13_FN1, PTW5_FN), -	PINMUX_DATA(EVENT3_MARK, PS7_13_FN2, PTW5_FN), -	PINMUX_DATA(A12_MARK, PS7_12_FN1, PTW4_FN), -	PINMUX_DATA(EVENT2_MARK, PS7_12_FN2, PTW4_FN), -	PINMUX_DATA(A11_MARK, PS7_11_FN1, PTW3_FN), -	PINMUX_DATA(EVENT1_MARK, PS7_11_FN2, PTW3_FN), -	PINMUX_DATA(A10_MARK, PS7_10_FN1, PTW2_FN), -	PINMUX_DATA(EVENT0_MARK, PS7_10_FN2, PTW2_FN), -	PINMUX_DATA(A9_MARK, PS7_9_FN1, PTW1_FN), -	PINMUX_DATA(CTS4_MARK, PS7_9_FN2, PTW1_FN), -	PINMUX_DATA(A8_MARK, PS7_8_FN1, PTW0_FN), -	PINMUX_DATA(CTS2_MARK, PS7_8_FN2, PTW0_FN), - -	/* PTX FN */ -	PINMUX_DATA(A7_MARK, PS7_7_FN1, PTX7_FN), -	PINMUX_DATA(RTS2_MARK, PS7_7_FN2, PTX7_FN), -	PINMUX_DATA(A6_MARK, PS7_6_FN1, PTX6_FN), -	PINMUX_DATA(SIM_D_MARK, PS7_6_FN2, PTX6_FN), -	PINMUX_DATA(A5_MARK, PS7_5_FN1, PTX5_FN), -	PINMUX_DATA(SIM_CLK_MARK, PS7_5_FN2, PTX5_FN), -	PINMUX_DATA(A4_MARK, PS7_4_FN1, PTX4_FN), -	PINMUX_DATA(SIM_RST_MARK, PS7_4_FN2, PTX4_FN), -	PINMUX_DATA(A3_MARK, PTX3_FN), -	PINMUX_DATA(A2_MARK, PTX2_FN), -	PINMUX_DATA(A1_MARK, PTX1_FN), -	PINMUX_DATA(A0_MARK, PTX0_FN), - -	/* PTY FN */ -	PINMUX_DATA(D7_MARK, PTY7_FN), -	PINMUX_DATA(D6_MARK, PTY6_FN), -	PINMUX_DATA(D5_MARK, PTY5_FN), -	PINMUX_DATA(D4_MARK, PTY4_FN), -	PINMUX_DATA(D3_MARK, PTY3_FN), -	PINMUX_DATA(D2_MARK, PTY2_FN), -	PINMUX_DATA(D1_MARK, PTY1_FN), -	PINMUX_DATA(D0_MARK, PTY0_FN), - -	/* PTZ FN */ -	PINMUX_DATA(MMCDAT7_MARK, PS8_15_FN1, PTZ7_FN), -	PINMUX_DATA(ON_DQ7_MARK, PS8_15_FN2, PTZ7_FN), -	PINMUX_DATA(MMCDAT6_MARK, PS8_14_FN1, PTZ6_FN), -	PINMUX_DATA(ON_DQ6_MARK, PS8_14_FN2, PTZ6_FN), -	PINMUX_DATA(MMCDAT5_MARK, PS8_13_FN1, PTZ5_FN), -	PINMUX_DATA(ON_DQ5_MARK, PS8_13_FN2, PTZ5_FN), -	PINMUX_DATA(MMCDAT4_MARK, PS8_12_FN1, PTZ4_FN), -	PINMUX_DATA(ON_DQ4_MARK, PS8_12_FN2, PTZ4_FN), -	PINMUX_DATA(MMCDAT3_MARK, PS8_11_FN1, PTZ3_FN), -	PINMUX_DATA(ON_DQ3_MARK, PS8_11_FN2, PTZ3_FN), -	PINMUX_DATA(MMCDAT2_MARK, PS8_10_FN1, PTZ2_FN), -	PINMUX_DATA(ON_DQ2_MARK, PS8_10_FN2, PTZ2_FN), -	PINMUX_DATA(MMCDAT1_MARK, PS8_9_FN1, PTZ1_FN), -	PINMUX_DATA(ON_DQ1_MARK, PS8_9_FN2, PTZ1_FN), -	PINMUX_DATA(MMCDAT0_MARK, PS8_8_FN1, PTZ0_FN), -	PINMUX_DATA(ON_DQ0_MARK, PS8_8_FN2, PTZ0_FN), -}; - -static struct pinmux_gpio pinmux_gpios[] = { -	/* PTA */ -	PINMUX_GPIO(GPIO_PTA7, PTA7_DATA), -	PINMUX_GPIO(GPIO_PTA6, PTA6_DATA), -	PINMUX_GPIO(GPIO_PTA5, PTA5_DATA), -	PINMUX_GPIO(GPIO_PTA4, PTA4_DATA), -	PINMUX_GPIO(GPIO_PTA3, PTA3_DATA), -	PINMUX_GPIO(GPIO_PTA2, PTA2_DATA), -	PINMUX_GPIO(GPIO_PTA1, PTA1_DATA), -	PINMUX_GPIO(GPIO_PTA0, PTA0_DATA), - -	/* PTB */ -	PINMUX_GPIO(GPIO_PTB7, PTB7_DATA), -	PINMUX_GPIO(GPIO_PTB6, PTB6_DATA), -	PINMUX_GPIO(GPIO_PTB5, PTB5_DATA), -	PINMUX_GPIO(GPIO_PTB4, PTB4_DATA), -	PINMUX_GPIO(GPIO_PTB3, PTB3_DATA), -	PINMUX_GPIO(GPIO_PTB2, PTB2_DATA), -	PINMUX_GPIO(GPIO_PTB1, PTB1_DATA), -	PINMUX_GPIO(GPIO_PTB0, PTB0_DATA), - -	/* PTC */ -	PINMUX_GPIO(GPIO_PTC7, PTC7_DATA), -	PINMUX_GPIO(GPIO_PTC6, PTC6_DATA), -	PINMUX_GPIO(GPIO_PTC5, PTC5_DATA), -	PINMUX_GPIO(GPIO_PTC4, PTC4_DATA), -	PINMUX_GPIO(GPIO_PTC3, PTC3_DATA), -	PINMUX_GPIO(GPIO_PTC2, PTC2_DATA), -	PINMUX_GPIO(GPIO_PTC1, PTC1_DATA), -	PINMUX_GPIO(GPIO_PTC0, PTC0_DATA), - -	/* PTD */ -	PINMUX_GPIO(GPIO_PTD7, PTD7_DATA), -	PINMUX_GPIO(GPIO_PTD6, PTD6_DATA), -	PINMUX_GPIO(GPIO_PTD5, PTD5_DATA), -	PINMUX_GPIO(GPIO_PTD4, PTD4_DATA), -	PINMUX_GPIO(GPIO_PTD3, PTD3_DATA), -	PINMUX_GPIO(GPIO_PTD2, PTD2_DATA), -	PINMUX_GPIO(GPIO_PTD1, PTD1_DATA), -	PINMUX_GPIO(GPIO_PTD0, PTD0_DATA), - -	/* PTE */ -	PINMUX_GPIO(GPIO_PTE7, PTE7_DATA), -	PINMUX_GPIO(GPIO_PTE6, PTE6_DATA), -	PINMUX_GPIO(GPIO_PTE5, PTE5_DATA), -	PINMUX_GPIO(GPIO_PTE4, PTE4_DATA), -	PINMUX_GPIO(GPIO_PTE3, PTE3_DATA), -	PINMUX_GPIO(GPIO_PTE2, PTE2_DATA), -	PINMUX_GPIO(GPIO_PTE1, PTE1_DATA), -	PINMUX_GPIO(GPIO_PTE0, PTE0_DATA), - -	/* PTF */ -	PINMUX_GPIO(GPIO_PTF7, PTF7_DATA), -	PINMUX_GPIO(GPIO_PTF6, PTF6_DATA), -	PINMUX_GPIO(GPIO_PTF5, PTF5_DATA), -	PINMUX_GPIO(GPIO_PTF4, PTF4_DATA), -	PINMUX_GPIO(GPIO_PTF3, PTF3_DATA), -	PINMUX_GPIO(GPIO_PTF2, PTF2_DATA), -	PINMUX_GPIO(GPIO_PTF1, PTF1_DATA), -	PINMUX_GPIO(GPIO_PTF0, PTF0_DATA), - -	/* PTG */ -	PINMUX_GPIO(GPIO_PTG7, PTG7_DATA), -	PINMUX_GPIO(GPIO_PTG6, PTG6_DATA), -	PINMUX_GPIO(GPIO_PTG5, PTG5_DATA), -	PINMUX_GPIO(GPIO_PTG4, PTG4_DATA), -	PINMUX_GPIO(GPIO_PTG3, PTG3_DATA), -	PINMUX_GPIO(GPIO_PTG2, PTG2_DATA), -	PINMUX_GPIO(GPIO_PTG1, PTG1_DATA), -	PINMUX_GPIO(GPIO_PTG0, PTG0_DATA), - -	/* PTH */ -	PINMUX_GPIO(GPIO_PTH7, PTH7_DATA), -	PINMUX_GPIO(GPIO_PTH6, PTH6_DATA), -	PINMUX_GPIO(GPIO_PTH5, PTH5_DATA), -	PINMUX_GPIO(GPIO_PTH4, PTH4_DATA), -	PINMUX_GPIO(GPIO_PTH3, PTH3_DATA), -	PINMUX_GPIO(GPIO_PTH2, PTH2_DATA), -	PINMUX_GPIO(GPIO_PTH1, PTH1_DATA), -	PINMUX_GPIO(GPIO_PTH0, PTH0_DATA), - -	/* PTI */ -	PINMUX_GPIO(GPIO_PTI7, PTI7_DATA), -	PINMUX_GPIO(GPIO_PTI6, PTI6_DATA), -	PINMUX_GPIO(GPIO_PTI5, PTI5_DATA), -	PINMUX_GPIO(GPIO_PTI4, PTI4_DATA), -	PINMUX_GPIO(GPIO_PTI3, PTI3_DATA), -	PINMUX_GPIO(GPIO_PTI2, PTI2_DATA), -	PINMUX_GPIO(GPIO_PTI1, PTI1_DATA), -	PINMUX_GPIO(GPIO_PTI0, PTI0_DATA), - -	/* PTJ */ -	PINMUX_GPIO(GPIO_PTJ6, PTJ6_DATA), -	PINMUX_GPIO(GPIO_PTJ5, PTJ5_DATA), -	PINMUX_GPIO(GPIO_PTJ4, PTJ4_DATA), -	PINMUX_GPIO(GPIO_PTJ3, PTJ3_DATA), -	PINMUX_GPIO(GPIO_PTJ2, PTJ2_DATA), -	PINMUX_GPIO(GPIO_PTJ1, PTJ1_DATA), -	PINMUX_GPIO(GPIO_PTJ0, PTJ0_DATA), - -	/* PTK */ -	PINMUX_GPIO(GPIO_PTK7, PTK7_DATA), -	PINMUX_GPIO(GPIO_PTK6, PTK6_DATA), -	PINMUX_GPIO(GPIO_PTK5, PTK5_DATA), -	PINMUX_GPIO(GPIO_PTK4, PTK4_DATA), -	PINMUX_GPIO(GPIO_PTK3, PTK3_DATA), -	PINMUX_GPIO(GPIO_PTK2, PTK2_DATA), -	PINMUX_GPIO(GPIO_PTK1, PTK1_DATA), -	PINMUX_GPIO(GPIO_PTK0, PTK0_DATA), - -	/* PTL */ -	PINMUX_GPIO(GPIO_PTL6, PTL6_DATA), -	PINMUX_GPIO(GPIO_PTL5, PTL5_DATA), -	PINMUX_GPIO(GPIO_PTL4, PTL4_DATA), -	PINMUX_GPIO(GPIO_PTL3, PTL3_DATA), -	PINMUX_GPIO(GPIO_PTL2, PTL2_DATA), -	PINMUX_GPIO(GPIO_PTL1, PTL1_DATA), -	PINMUX_GPIO(GPIO_PTL0, PTL0_DATA), - -	/* PTM */ -	PINMUX_GPIO(GPIO_PTM7, PTM7_DATA), -	PINMUX_GPIO(GPIO_PTM6, PTM6_DATA), -	PINMUX_GPIO(GPIO_PTM5, PTM5_DATA), -	PINMUX_GPIO(GPIO_PTM4, PTM4_DATA), -	PINMUX_GPIO(GPIO_PTM3, PTM3_DATA), -	PINMUX_GPIO(GPIO_PTM2, PTM2_DATA), -	PINMUX_GPIO(GPIO_PTM1, PTM1_DATA), -	PINMUX_GPIO(GPIO_PTM0, PTM0_DATA), - -	/* PTN */ -	PINMUX_GPIO(GPIO_PTN6, PTN6_DATA), -	PINMUX_GPIO(GPIO_PTN5, PTN5_DATA), -	PINMUX_GPIO(GPIO_PTN4, PTN4_DATA), -	PINMUX_GPIO(GPIO_PTN3, PTN3_DATA), -	PINMUX_GPIO(GPIO_PTN2, PTN2_DATA), -	PINMUX_GPIO(GPIO_PTN1, PTN1_DATA), -	PINMUX_GPIO(GPIO_PTN0, PTN0_DATA), - -	/* PTO */ -	PINMUX_GPIO(GPIO_PTO7, PTO7_DATA), -	PINMUX_GPIO(GPIO_PTO6, PTO6_DATA), -	PINMUX_GPIO(GPIO_PTO5, PTO5_DATA), -	PINMUX_GPIO(GPIO_PTO4, PTO4_DATA), -	PINMUX_GPIO(GPIO_PTO3, PTO3_DATA), -	PINMUX_GPIO(GPIO_PTO2, PTO2_DATA), -	PINMUX_GPIO(GPIO_PTO1, PTO1_DATA), -	PINMUX_GPIO(GPIO_PTO0, PTO0_DATA), - -	/* PTP */ -	PINMUX_GPIO(GPIO_PTP7, PTP7_DATA), -	PINMUX_GPIO(GPIO_PTP6, PTP6_DATA), -	PINMUX_GPIO(GPIO_PTP5, PTP5_DATA), -	PINMUX_GPIO(GPIO_PTP4, PTP4_DATA), -	PINMUX_GPIO(GPIO_PTP3, PTP3_DATA), -	PINMUX_GPIO(GPIO_PTP2, PTP2_DATA), -	PINMUX_GPIO(GPIO_PTP1, PTP1_DATA), -	PINMUX_GPIO(GPIO_PTP0, PTP0_DATA), - -	/* PTQ */ -	PINMUX_GPIO(GPIO_PTQ6, PTQ6_DATA), -	PINMUX_GPIO(GPIO_PTQ5, PTQ5_DATA), -	PINMUX_GPIO(GPIO_PTQ4, PTQ4_DATA), -	PINMUX_GPIO(GPIO_PTQ3, PTQ3_DATA), -	PINMUX_GPIO(GPIO_PTQ2, PTQ2_DATA), -	PINMUX_GPIO(GPIO_PTQ1, PTQ1_DATA), -	PINMUX_GPIO(GPIO_PTQ0, PTQ0_DATA), - -	/* PTR */ -	PINMUX_GPIO(GPIO_PTR7, PTR7_DATA), -	PINMUX_GPIO(GPIO_PTR6, PTR6_DATA), -	PINMUX_GPIO(GPIO_PTR5, PTR5_DATA), -	PINMUX_GPIO(GPIO_PTR4, PTR4_DATA), -	PINMUX_GPIO(GPIO_PTR3, PTR3_DATA), -	PINMUX_GPIO(GPIO_PTR2, PTR2_DATA), -	PINMUX_GPIO(GPIO_PTR1, PTR1_DATA), -	PINMUX_GPIO(GPIO_PTR0, PTR0_DATA), - -	/* PTS */ -	PINMUX_GPIO(GPIO_PTS7, PTS7_DATA), -	PINMUX_GPIO(GPIO_PTS6, PTS6_DATA), -	PINMUX_GPIO(GPIO_PTS5, PTS5_DATA), -	PINMUX_GPIO(GPIO_PTS4, PTS4_DATA), -	PINMUX_GPIO(GPIO_PTS3, PTS3_DATA), -	PINMUX_GPIO(GPIO_PTS2, PTS2_DATA), -	PINMUX_GPIO(GPIO_PTS1, PTS1_DATA), -	PINMUX_GPIO(GPIO_PTS0, PTS0_DATA), - -	/* PTT */ -	PINMUX_GPIO(GPIO_PTT7, PTT7_DATA), -	PINMUX_GPIO(GPIO_PTT6, PTT6_DATA), -	PINMUX_GPIO(GPIO_PTT5, PTT5_DATA), -	PINMUX_GPIO(GPIO_PTT4, PTT4_DATA), -	PINMUX_GPIO(GPIO_PTT3, PTT3_DATA), -	PINMUX_GPIO(GPIO_PTT2, PTT2_DATA), -	PINMUX_GPIO(GPIO_PTT1, PTT1_DATA), -	PINMUX_GPIO(GPIO_PTT0, PTT0_DATA), - -	/* PTU */ -	PINMUX_GPIO(GPIO_PTU7, PTU7_DATA), -	PINMUX_GPIO(GPIO_PTU6, PTU6_DATA), -	PINMUX_GPIO(GPIO_PTU5, PTU5_DATA), -	PINMUX_GPIO(GPIO_PTU4, PTU4_DATA), -	PINMUX_GPIO(GPIO_PTU3, PTU3_DATA), -	PINMUX_GPIO(GPIO_PTU2, PTU2_DATA), -	PINMUX_GPIO(GPIO_PTU1, PTU1_DATA), -	PINMUX_GPIO(GPIO_PTU0, PTU0_DATA), - -	/* PTV */ -	PINMUX_GPIO(GPIO_PTV7, PTV7_DATA), -	PINMUX_GPIO(GPIO_PTV6, PTV6_DATA), -	PINMUX_GPIO(GPIO_PTV5, PTV5_DATA), -	PINMUX_GPIO(GPIO_PTV4, PTV4_DATA), -	PINMUX_GPIO(GPIO_PTV3, PTV3_DATA), -	PINMUX_GPIO(GPIO_PTV2, PTV2_DATA), -	PINMUX_GPIO(GPIO_PTV1, PTV1_DATA), -	PINMUX_GPIO(GPIO_PTV0, PTV0_DATA), - -	/* PTW */ -	PINMUX_GPIO(GPIO_PTW7, PTW7_DATA), -	PINMUX_GPIO(GPIO_PTW6, PTW6_DATA), -	PINMUX_GPIO(GPIO_PTW5, PTW5_DATA), -	PINMUX_GPIO(GPIO_PTW4, PTW4_DATA), -	PINMUX_GPIO(GPIO_PTW3, PTW3_DATA), -	PINMUX_GPIO(GPIO_PTW2, PTW2_DATA), -	PINMUX_GPIO(GPIO_PTW1, PTW1_DATA), -	PINMUX_GPIO(GPIO_PTW0, PTW0_DATA), - -	/* PTX */ -	PINMUX_GPIO(GPIO_PTX7, PTX7_DATA), -	PINMUX_GPIO(GPIO_PTX6, PTX6_DATA), -	PINMUX_GPIO(GPIO_PTX5, PTX5_DATA), -	PINMUX_GPIO(GPIO_PTX4, PTX4_DATA), -	PINMUX_GPIO(GPIO_PTX3, PTX3_DATA), -	PINMUX_GPIO(GPIO_PTX2, PTX2_DATA), -	PINMUX_GPIO(GPIO_PTX1, PTX1_DATA), -	PINMUX_GPIO(GPIO_PTX0, PTX0_DATA), - -	/* PTY */ -	PINMUX_GPIO(GPIO_PTY7, PTY7_DATA), -	PINMUX_GPIO(GPIO_PTY6, PTY6_DATA), -	PINMUX_GPIO(GPIO_PTY5, PTY5_DATA), -	PINMUX_GPIO(GPIO_PTY4, PTY4_DATA), -	PINMUX_GPIO(GPIO_PTY3, PTY3_DATA), -	PINMUX_GPIO(GPIO_PTY2, PTY2_DATA), -	PINMUX_GPIO(GPIO_PTY1, PTY1_DATA), -	PINMUX_GPIO(GPIO_PTY0, PTY0_DATA), - -	/* PTZ */ -	PINMUX_GPIO(GPIO_PTZ7, PTZ7_DATA), -	PINMUX_GPIO(GPIO_PTZ6, PTZ6_DATA), -	PINMUX_GPIO(GPIO_PTZ5, PTZ5_DATA), -	PINMUX_GPIO(GPIO_PTZ4, PTZ4_DATA), -	PINMUX_GPIO(GPIO_PTZ3, PTZ3_DATA), -	PINMUX_GPIO(GPIO_PTZ2, PTZ2_DATA), -	PINMUX_GPIO(GPIO_PTZ1, PTZ1_DATA), -	PINMUX_GPIO(GPIO_PTZ0, PTZ0_DATA), - -	/* PTA (mobule: LBSC, RGMII) */ -	PINMUX_GPIO(GPIO_FN_BS, BS_MARK), -	PINMUX_GPIO(GPIO_FN_RDWR, RDWR_MARK), -	PINMUX_GPIO(GPIO_FN_WE1, WE1_MARK), -	PINMUX_GPIO(GPIO_FN_RDY, RDY_MARK), -	PINMUX_GPIO(GPIO_FN_ET0_MDC, ET0_MDC_MARK), -	PINMUX_GPIO(GPIO_FN_ET0_MDIO, ET0_MDC_MARK), -	PINMUX_GPIO(GPIO_FN_ET1_MDC, ET1_MDC_MARK), -	PINMUX_GPIO(GPIO_FN_ET1_MDIO, ET1_MDC_MARK), - -	/* PTB (mobule: INTC, ONFI, TMU) */ -	PINMUX_GPIO(GPIO_FN_IRQ15, IRQ15_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ14, IRQ14_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ13, IRQ13_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ12, IRQ12_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ11, IRQ11_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ10, IRQ10_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ9, IRQ9_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ8, IRQ8_MARK), -	PINMUX_GPIO(GPIO_FN_ON_NRE, ON_NRE_MARK), -	PINMUX_GPIO(GPIO_FN_ON_NWE, ON_NWE_MARK), -	PINMUX_GPIO(GPIO_FN_ON_NWP, ON_NWP_MARK), -	PINMUX_GPIO(GPIO_FN_ON_NCE0, ON_NCE0_MARK), -	PINMUX_GPIO(GPIO_FN_ON_R_B0, ON_R_B0_MARK), -	PINMUX_GPIO(GPIO_FN_ON_ALE, ON_ALE_MARK), -	PINMUX_GPIO(GPIO_FN_ON_CLE, ON_CLE_MARK), -	PINMUX_GPIO(GPIO_FN_TCLK, TCLK_MARK), - -	/* PTC (mobule: IRQ, PWMU) */ -	PINMUX_GPIO(GPIO_FN_IRQ7, IRQ7_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ6, IRQ6_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ5, IRQ5_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ4, IRQ4_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ3, IRQ3_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ2, IRQ2_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ1, IRQ1_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ0, IRQ0_MARK), -	PINMUX_GPIO(GPIO_FN_PWMU0, PWMU0_MARK), -	PINMUX_GPIO(GPIO_FN_PWMU1, PWMU1_MARK), -	PINMUX_GPIO(GPIO_FN_PWMU2, PWMU2_MARK), -	PINMUX_GPIO(GPIO_FN_PWMU3, PWMU3_MARK), -	PINMUX_GPIO(GPIO_FN_PWMU4, PWMU4_MARK), -	PINMUX_GPIO(GPIO_FN_PWMU5, PWMU5_MARK), - -	/* PTD (mobule: SPI0, DMAC) */ -	PINMUX_GPIO(GPIO_FN_SP0_MOSI, SP0_MOSI_MARK), -	PINMUX_GPIO(GPIO_FN_SP0_MISO, SP0_MISO_MARK), -	PINMUX_GPIO(GPIO_FN_SP0_SCK, SP0_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SP0_SCK_FB, SP0_SCK_FB_MARK), -	PINMUX_GPIO(GPIO_FN_SP0_SS0, SP0_SS0_MARK), -	PINMUX_GPIO(GPIO_FN_SP0_SS1, SP0_SS1_MARK), -	PINMUX_GPIO(GPIO_FN_SP0_SS2, SP0_SS2_MARK), -	PINMUX_GPIO(GPIO_FN_SP0_SS3, SP0_SS3_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ0, DREQ0_MARK), -	PINMUX_GPIO(GPIO_FN_DACK0, DACK0_MARK), -	PINMUX_GPIO(GPIO_FN_TEND0, TEND0_MARK), - -	/* PTE (mobule: RMII) */ -	PINMUX_GPIO(GPIO_FN_RMII0_CRS_DV, RMII0_CRS_DV_MARK), -	PINMUX_GPIO(GPIO_FN_RMII0_TXD1, RMII0_TXD1_MARK), -	PINMUX_GPIO(GPIO_FN_RMII0_TXD0, RMII0_TXD0_MARK), -	PINMUX_GPIO(GPIO_FN_RMII0_TXEN, RMII0_TXEN_MARK), -	PINMUX_GPIO(GPIO_FN_RMII0_REFCLK, RMII0_REFCLK_MARK), -	PINMUX_GPIO(GPIO_FN_RMII0_RXD1, RMII0_RXD1_MARK), -	PINMUX_GPIO(GPIO_FN_RMII0_RXD0, RMII0_RXD0_MARK), -	PINMUX_GPIO(GPIO_FN_RMII0_RX_ER, RMII0_RX_ER_MARK), - -	/* PTF (mobule: RMII, SerMux) */ -	PINMUX_GPIO(GPIO_FN_RMII1_CRS_DV, RMII1_CRS_DV_MARK), -	PINMUX_GPIO(GPIO_FN_RMII1_TXD1, RMII1_TXD1_MARK), -	PINMUX_GPIO(GPIO_FN_RMII1_TXD0, RMII1_TXD0_MARK), -	PINMUX_GPIO(GPIO_FN_RMII1_TXEN, RMII1_TXEN_MARK), -	PINMUX_GPIO(GPIO_FN_RMII1_REFCLK, RMII1_REFCLK_MARK), -	PINMUX_GPIO(GPIO_FN_RMII1_RXD1, RMII1_RXD1_MARK), -	PINMUX_GPIO(GPIO_FN_RMII1_RXD0, RMII1_RXD0_MARK), -	PINMUX_GPIO(GPIO_FN_RMII1_RX_ER, RMII1_RX_ER_MARK), -	PINMUX_GPIO(GPIO_FN_RAC_RI, RAC_RI_MARK), - -	/* PTG (mobule: system, LBSC, LPC, WDT, LPC, eMMC) */ -	PINMUX_GPIO(GPIO_FN_BOOTFMS, BOOTFMS_MARK), -	PINMUX_GPIO(GPIO_FN_BOOTWP, BOOTWP_MARK), -	PINMUX_GPIO(GPIO_FN_A25, A25_MARK), -	PINMUX_GPIO(GPIO_FN_A24, A24_MARK), -	PINMUX_GPIO(GPIO_FN_SERIRQ, SERIRQ_MARK), -	PINMUX_GPIO(GPIO_FN_WDTOVF, WDTOVF_MARK), -	PINMUX_GPIO(GPIO_FN_LPCPD, LPCPD_MARK), -	PINMUX_GPIO(GPIO_FN_LDRQ, LDRQ_MARK), -	PINMUX_GPIO(GPIO_FN_MMCCLK, MMCCLK_MARK), -	PINMUX_GPIO(GPIO_FN_MMCCMD, MMCCMD_MARK), - -	/* PTH (mobule: SPI1, LPC, DMAC, ADC) */ -	PINMUX_GPIO(GPIO_FN_SP1_MOSI, SP1_MOSI_MARK), -	PINMUX_GPIO(GPIO_FN_SP1_MISO, SP1_MISO_MARK), -	PINMUX_GPIO(GPIO_FN_SP1_SCK, SP1_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SP1_SCK_FB, SP1_SCK_FB_MARK), -	PINMUX_GPIO(GPIO_FN_SP1_SS0, SP1_SS0_MARK), -	PINMUX_GPIO(GPIO_FN_SP1_SS1, SP1_SS1_MARK), -	PINMUX_GPIO(GPIO_FN_WP, WP_MARK), -	PINMUX_GPIO(GPIO_FN_FMS0, FMS0_MARK), -	PINMUX_GPIO(GPIO_FN_TEND1, TEND1_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ1, DREQ1_MARK), -	PINMUX_GPIO(GPIO_FN_DACK1, DACK1_MARK), -	PINMUX_GPIO(GPIO_FN_ADTRG1, ADTRG1_MARK), -	PINMUX_GPIO(GPIO_FN_ADTRG0, ADTRG0_MARK), - -	/* PTI (mobule: LBSC, SDHI) */ -	PINMUX_GPIO(GPIO_FN_D15, D15_MARK), -	PINMUX_GPIO(GPIO_FN_D14, D14_MARK), -	PINMUX_GPIO(GPIO_FN_D13, D13_MARK), -	PINMUX_GPIO(GPIO_FN_D12, D12_MARK), -	PINMUX_GPIO(GPIO_FN_D11, D11_MARK), -	PINMUX_GPIO(GPIO_FN_D10, D10_MARK), -	PINMUX_GPIO(GPIO_FN_D9, D9_MARK), -	PINMUX_GPIO(GPIO_FN_D8, D8_MARK), -	PINMUX_GPIO(GPIO_FN_SD_WP, SD_WP_MARK), -	PINMUX_GPIO(GPIO_FN_SD_CD, SD_CD_MARK), -	PINMUX_GPIO(GPIO_FN_SD_CLK, SD_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SD_CMD, SD_CMD_MARK), -	PINMUX_GPIO(GPIO_FN_SD_D3, SD_D3_MARK), -	PINMUX_GPIO(GPIO_FN_SD_D2, SD_D2_MARK), -	PINMUX_GPIO(GPIO_FN_SD_D1, SD_D1_MARK), -	PINMUX_GPIO(GPIO_FN_SD_D0, SD_D0_MARK), - -	/* PTJ (mobule: SCIF234, SERMUX) */ -	PINMUX_GPIO(GPIO_FN_RTS3, RTS3_MARK), -	PINMUX_GPIO(GPIO_FN_CTS3, CTS3_MARK), -	PINMUX_GPIO(GPIO_FN_TXD3, TXD3_MARK), -	PINMUX_GPIO(GPIO_FN_RXD3, RXD3_MARK), -	PINMUX_GPIO(GPIO_FN_RTS4, RTS4_MARK), -	PINMUX_GPIO(GPIO_FN_RXD4, RXD4_MARK), -	PINMUX_GPIO(GPIO_FN_TXD4, TXD4_MARK), - -	/* PTK (mobule: SERMUX, LBSC, SCIF) */ -	PINMUX_GPIO(GPIO_FN_COM2_TXD, COM2_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_COM2_RXD, COM2_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_COM2_RTS, COM2_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_COM2_CTS, COM2_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_COM2_DTR, COM2_DTR_MARK), -	PINMUX_GPIO(GPIO_FN_COM2_DSR, COM2_DSR_MARK), -	PINMUX_GPIO(GPIO_FN_COM2_DCD, COM2_DCD_MARK), -	PINMUX_GPIO(GPIO_FN_CLKOUT, CLKOUT_MARK), -	PINMUX_GPIO(GPIO_FN_SCK2, SCK2_MARK), -	PINMUX_GPIO(GPIO_FN_SCK4, SCK4_MARK), -	PINMUX_GPIO(GPIO_FN_SCK3, SCK3_MARK), - -	/* PTL (mobule: SERMUX, SCIF, LBSC, AUD) */ -	PINMUX_GPIO(GPIO_FN_RAC_RXD, RAC_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_RAC_RTS, RAC_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_RAC_CTS, RAC_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_RAC_DTR, RAC_DTR_MARK), -	PINMUX_GPIO(GPIO_FN_RAC_DSR, RAC_DSR_MARK), -	PINMUX_GPIO(GPIO_FN_RAC_DCD, RAC_DCD_MARK), -	PINMUX_GPIO(GPIO_FN_RAC_TXD, RAC_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_RXD2, RXD2_MARK), -	PINMUX_GPIO(GPIO_FN_CS5, CS5_MARK), -	PINMUX_GPIO(GPIO_FN_CS6, CS6_MARK), -	PINMUX_GPIO(GPIO_FN_AUDSYNC, AUDSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_AUDCK, AUDCK_MARK), -	PINMUX_GPIO(GPIO_FN_TXD2, TXD2_MARK), - -	/* PTM (mobule: LBSC, IIC) */ -	PINMUX_GPIO(GPIO_FN_CS4, CS4_MARK), -	PINMUX_GPIO(GPIO_FN_RD, RD_MARK), -	PINMUX_GPIO(GPIO_FN_WE0, WE0_MARK), -	PINMUX_GPIO(GPIO_FN_CS0, CS0_MARK), -	PINMUX_GPIO(GPIO_FN_SDA6, SDA6_MARK), -	PINMUX_GPIO(GPIO_FN_SCL6, SCL6_MARK), -	PINMUX_GPIO(GPIO_FN_SDA7, SDA7_MARK), -	PINMUX_GPIO(GPIO_FN_SCL7, SCL7_MARK), - -	/* PTN (mobule: USB, JMC, SGPIO, WDT) */ -	PINMUX_GPIO(GPIO_FN_VBUS_EN, VBUS_EN_MARK), -	PINMUX_GPIO(GPIO_FN_VBUS_OC, VBUS_OC_MARK), -	PINMUX_GPIO(GPIO_FN_JMCTCK, JMCTCK_MARK), -	PINMUX_GPIO(GPIO_FN_JMCTMS, JMCTMS_MARK), -	PINMUX_GPIO(GPIO_FN_JMCTDO, JMCTDO_MARK), -	PINMUX_GPIO(GPIO_FN_JMCTDI, JMCTDI_MARK), -	PINMUX_GPIO(GPIO_FN_JMCTRST, JMCTRST_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO1_CLK, SGPIO1_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO1_LOAD, SGPIO1_LOAD_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO1_DI, SGPIO1_DI_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO1_DO, SGPIO1_DO_MARK), -	PINMUX_GPIO(GPIO_FN_SUB_CLKIN, SUB_CLKIN_MARK), - -	/* PTO (mobule: SGPIO, SerMux) */ -	PINMUX_GPIO(GPIO_FN_SGPIO0_CLK, SGPIO0_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO0_LOAD, SGPIO0_LOAD_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO0_DI, SGPIO0_DI_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO0_DO, SGPIO0_DO_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO2_CLK, SGPIO2_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO2_LOAD, SGPIO2_LOAD_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO2_DI, SGPIO2_DI_MARK), -	PINMUX_GPIO(GPIO_FN_SGPIO2_DO, SGPIO2_DO_MARK), -	PINMUX_GPIO(GPIO_FN_COM1_TXD, COM1_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_COM1_RXD, COM1_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_COM1_RTS, COM1_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_COM1_CTS, COM1_CTS_MARK), - -	/* PTP (mobule: EVC, ADC) */ - -	/* PTQ (mobule: LPC) */ -	PINMUX_GPIO(GPIO_FN_LAD3, LAD3_MARK), -	PINMUX_GPIO(GPIO_FN_LAD2, LAD2_MARK), -	PINMUX_GPIO(GPIO_FN_LAD1, LAD1_MARK), -	PINMUX_GPIO(GPIO_FN_LAD0, LAD0_MARK), -	PINMUX_GPIO(GPIO_FN_LFRAME, LFRAME_MARK), -	PINMUX_GPIO(GPIO_FN_LRESET, LRESET_MARK), -	PINMUX_GPIO(GPIO_FN_LCLK, LCLK_MARK), - -	/* PTR (mobule: GRA, IIC) */ -	PINMUX_GPIO(GPIO_FN_DDC3, DDC3_MARK), -	PINMUX_GPIO(GPIO_FN_DDC2, DDC2_MARK), -	PINMUX_GPIO(GPIO_FN_SDA8, SDA8_MARK), -	PINMUX_GPIO(GPIO_FN_SCL8, SCL8_MARK), -	PINMUX_GPIO(GPIO_FN_SDA2, SDA2_MARK), -	PINMUX_GPIO(GPIO_FN_SCL2, SCL2_MARK), -	PINMUX_GPIO(GPIO_FN_SDA1, SDA1_MARK), -	PINMUX_GPIO(GPIO_FN_SCL1, SCL1_MARK), -	PINMUX_GPIO(GPIO_FN_SDA0, SDA0_MARK), -	PINMUX_GPIO(GPIO_FN_SCL0, SCL0_MARK), - -	/* PTS (mobule: GRA, IIC) */ -	PINMUX_GPIO(GPIO_FN_DDC1, DDC1_MARK), -	PINMUX_GPIO(GPIO_FN_DDC0, DDC0_MARK), -	PINMUX_GPIO(GPIO_FN_SDA9, SDA9_MARK), -	PINMUX_GPIO(GPIO_FN_SCL9, SCL9_MARK), -	PINMUX_GPIO(GPIO_FN_SDA5, SDA5_MARK), -	PINMUX_GPIO(GPIO_FN_SCL5, SCL5_MARK), -	PINMUX_GPIO(GPIO_FN_SDA4, SDA4_MARK), -	PINMUX_GPIO(GPIO_FN_SCL4, SCL4_MARK), -	PINMUX_GPIO(GPIO_FN_SDA3, SDA3_MARK), -	PINMUX_GPIO(GPIO_FN_SCL3, SCL3_MARK), - -	/* PTT (mobule: PWMX, AUD) */ -	PINMUX_GPIO(GPIO_FN_PWMX7, PWMX7_MARK), -	PINMUX_GPIO(GPIO_FN_PWMX6, PWMX6_MARK), -	PINMUX_GPIO(GPIO_FN_PWMX5, PWMX5_MARK), -	PINMUX_GPIO(GPIO_FN_PWMX4, PWMX4_MARK), -	PINMUX_GPIO(GPIO_FN_PWMX3, PWMX3_MARK), -	PINMUX_GPIO(GPIO_FN_PWMX2, PWMX2_MARK), -	PINMUX_GPIO(GPIO_FN_PWMX1, PWMX1_MARK), -	PINMUX_GPIO(GPIO_FN_PWMX0, PWMX0_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA3, AUDATA3_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA2, AUDATA2_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA1, AUDATA1_MARK), -	PINMUX_GPIO(GPIO_FN_AUDATA0, AUDATA0_MARK), -	PINMUX_GPIO(GPIO_FN_STATUS1, STATUS1_MARK), -	PINMUX_GPIO(GPIO_FN_STATUS0, STATUS0_MARK), - -	/* PTU (mobule: LPC, APM) */ -	PINMUX_GPIO(GPIO_FN_LGPIO7, LGPIO7_MARK), -	PINMUX_GPIO(GPIO_FN_LGPIO6, LGPIO6_MARK), -	PINMUX_GPIO(GPIO_FN_LGPIO5, LGPIO5_MARK), -	PINMUX_GPIO(GPIO_FN_LGPIO4, LGPIO4_MARK), -	PINMUX_GPIO(GPIO_FN_LGPIO3, LGPIO3_MARK), -	PINMUX_GPIO(GPIO_FN_LGPIO2, LGPIO2_MARK), -	PINMUX_GPIO(GPIO_FN_LGPIO1, LGPIO1_MARK), -	PINMUX_GPIO(GPIO_FN_LGPIO0, LGPIO0_MARK), -	PINMUX_GPIO(GPIO_FN_APMONCTL_O, APMONCTL_O_MARK), -	PINMUX_GPIO(GPIO_FN_APMPWBTOUT_O, APMPWBTOUT_O_MARK), -	PINMUX_GPIO(GPIO_FN_APMSCI_O, APMSCI_O_MARK), -	PINMUX_GPIO(GPIO_FN_APMVDDON, APMVDDON_MARK), -	PINMUX_GPIO(GPIO_FN_APMSLPBTN, APMSLPBTN_MARK), -	PINMUX_GPIO(GPIO_FN_APMPWRBTN, APMPWRBTN_MARK), -	PINMUX_GPIO(GPIO_FN_APMS5N, APMS5N_MARK), -	PINMUX_GPIO(GPIO_FN_APMS3N, APMS3N_MARK), - -	/* PTV (mobule: LBSC, SerMux, R-SPI, EVC, GRA) */ -	PINMUX_GPIO(GPIO_FN_A23, A23_MARK), -	PINMUX_GPIO(GPIO_FN_A22, A22_MARK), -	PINMUX_GPIO(GPIO_FN_A21, A21_MARK), -	PINMUX_GPIO(GPIO_FN_A20, A20_MARK), -	PINMUX_GPIO(GPIO_FN_A19, A19_MARK), -	PINMUX_GPIO(GPIO_FN_A18, A18_MARK), -	PINMUX_GPIO(GPIO_FN_A17, A17_MARK), -	PINMUX_GPIO(GPIO_FN_A16, A16_MARK), -	PINMUX_GPIO(GPIO_FN_COM2_RI, COM2_RI_MARK), -	PINMUX_GPIO(GPIO_FN_R_SPI_MOSI, R_SPI_MOSI_MARK), -	PINMUX_GPIO(GPIO_FN_R_SPI_MISO, R_SPI_MISO_MARK), -	PINMUX_GPIO(GPIO_FN_R_SPI_RSPCK, R_SPI_RSPCK_MARK), -	PINMUX_GPIO(GPIO_FN_R_SPI_SSL0, R_SPI_SSL0_MARK), -	PINMUX_GPIO(GPIO_FN_R_SPI_SSL1, R_SPI_SSL1_MARK), -	PINMUX_GPIO(GPIO_FN_EVENT7, EVENT7_MARK), -	PINMUX_GPIO(GPIO_FN_EVENT6, EVENT6_MARK), -	PINMUX_GPIO(GPIO_FN_VBIOS_DI, VBIOS_DI_MARK), -	PINMUX_GPIO(GPIO_FN_VBIOS_DO, VBIOS_DO_MARK), -	PINMUX_GPIO(GPIO_FN_VBIOS_CLK, VBIOS_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_VBIOS_CS, VBIOS_CS_MARK), - -	/* PTW (mobule: LBSC, EVC, SCIF) */ -	PINMUX_GPIO(GPIO_FN_A16, A16_MARK), -	PINMUX_GPIO(GPIO_FN_A15, A15_MARK), -	PINMUX_GPIO(GPIO_FN_A14, A14_MARK), -	PINMUX_GPIO(GPIO_FN_A13, A13_MARK), -	PINMUX_GPIO(GPIO_FN_A12, A12_MARK), -	PINMUX_GPIO(GPIO_FN_A11, A11_MARK), -	PINMUX_GPIO(GPIO_FN_A10, A10_MARK), -	PINMUX_GPIO(GPIO_FN_A9, A9_MARK), -	PINMUX_GPIO(GPIO_FN_A8, A8_MARK), -	PINMUX_GPIO(GPIO_FN_EVENT5, EVENT5_MARK), -	PINMUX_GPIO(GPIO_FN_EVENT4, EVENT4_MARK), -	PINMUX_GPIO(GPIO_FN_EVENT3, EVENT3_MARK), -	PINMUX_GPIO(GPIO_FN_EVENT2, EVENT2_MARK), -	PINMUX_GPIO(GPIO_FN_EVENT1, EVENT1_MARK), -	PINMUX_GPIO(GPIO_FN_EVENT0, EVENT0_MARK), -	PINMUX_GPIO(GPIO_FN_CTS4, CTS4_MARK), -	PINMUX_GPIO(GPIO_FN_CTS2, CTS2_MARK), - -	/* PTX (mobule: LBSC) */ -	PINMUX_GPIO(GPIO_FN_A7, A7_MARK), -	PINMUX_GPIO(GPIO_FN_A6, A6_MARK), -	PINMUX_GPIO(GPIO_FN_A5, A5_MARK), -	PINMUX_GPIO(GPIO_FN_A4, A4_MARK), -	PINMUX_GPIO(GPIO_FN_A3, A3_MARK), -	PINMUX_GPIO(GPIO_FN_A2, A2_MARK), -	PINMUX_GPIO(GPIO_FN_A1, A1_MARK), -	PINMUX_GPIO(GPIO_FN_A0, A0_MARK), -	PINMUX_GPIO(GPIO_FN_RTS2, RTS2_MARK), -	PINMUX_GPIO(GPIO_FN_SIM_D, SIM_D_MARK), -	PINMUX_GPIO(GPIO_FN_SIM_CLK, SIM_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SIM_RST, SIM_RST_MARK), - -	/* PTY (mobule: LBSC) */ -	PINMUX_GPIO(GPIO_FN_D7, D7_MARK), -	PINMUX_GPIO(GPIO_FN_D6, D6_MARK), -	PINMUX_GPIO(GPIO_FN_D5, D5_MARK), -	PINMUX_GPIO(GPIO_FN_D4, D4_MARK), -	PINMUX_GPIO(GPIO_FN_D3, D3_MARK), -	PINMUX_GPIO(GPIO_FN_D2, D2_MARK), -	PINMUX_GPIO(GPIO_FN_D1, D1_MARK), -	PINMUX_GPIO(GPIO_FN_D0, D0_MARK), - -	/* PTZ (mobule: eMMC, ONFI) */ -	PINMUX_GPIO(GPIO_FN_MMCDAT7, MMCDAT7_MARK), -	PINMUX_GPIO(GPIO_FN_MMCDAT6, MMCDAT6_MARK), -	PINMUX_GPIO(GPIO_FN_MMCDAT5, MMCDAT5_MARK), -	PINMUX_GPIO(GPIO_FN_MMCDAT4, MMCDAT4_MARK), -	PINMUX_GPIO(GPIO_FN_MMCDAT3, MMCDAT3_MARK), -	PINMUX_GPIO(GPIO_FN_MMCDAT2, MMCDAT2_MARK), -	PINMUX_GPIO(GPIO_FN_MMCDAT1, MMCDAT1_MARK), -	PINMUX_GPIO(GPIO_FN_MMCDAT0, MMCDAT0_MARK), -	PINMUX_GPIO(GPIO_FN_ON_DQ7, ON_DQ7_MARK), -	PINMUX_GPIO(GPIO_FN_ON_DQ6, ON_DQ6_MARK), -	PINMUX_GPIO(GPIO_FN_ON_DQ5, ON_DQ5_MARK), -	PINMUX_GPIO(GPIO_FN_ON_DQ4, ON_DQ4_MARK), -	PINMUX_GPIO(GPIO_FN_ON_DQ3, ON_DQ3_MARK), -	PINMUX_GPIO(GPIO_FN_ON_DQ2, ON_DQ2_MARK), -	PINMUX_GPIO(GPIO_FN_ON_DQ1, ON_DQ1_MARK), -	PINMUX_GPIO(GPIO_FN_ON_DQ0, ON_DQ0_MARK), - }; - -static struct pinmux_cfg_reg pinmux_config_regs[] = { -	{ PINMUX_CFG_REG("PACR", 0xffec0000, 16, 2) { -		PTA7_FN, PTA7_OUT, PTA7_IN, PTA7_IN_PU, -		PTA6_FN, PTA6_OUT, PTA6_IN, PTA6_IN_PU, -		PTA5_FN, PTA5_OUT, PTA5_IN, PTA5_IN_PU, -		PTA4_FN, PTA4_OUT, PTA4_IN, PTA4_IN_PU, -		PTA3_FN, PTA3_OUT, PTA3_IN, PTA3_IN_PU, -		PTA2_FN, PTA2_OUT, PTA2_IN, PTA2_IN_PU, -		PTA1_FN, PTA1_OUT, PTA1_IN, PTA1_IN_PU, -		PTA0_FN, PTA0_OUT, PTA0_IN, PTA0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PBCR", 0xffec0002, 16, 2) { -		PTB7_FN, PTB7_OUT, PTB7_IN, 0, -		PTB6_FN, PTB6_OUT, PTB6_IN, 0, -		PTB5_FN, PTB5_OUT, PTB5_IN, 0, -		PTB4_FN, PTB4_OUT, PTB4_IN, 0, -		PTB3_FN, PTB3_OUT, PTB3_IN, 0, -		PTB2_FN, PTB2_OUT, PTB2_IN, 0, -		PTB1_FN, PTB1_OUT, PTB1_IN, 0, -		PTB0_FN, PTB0_OUT, PTB0_IN, 0 } -	}, -	{ PINMUX_CFG_REG("PCCR", 0xffec0004, 16, 2) { -		PTC7_FN, PTC7_OUT, PTC7_IN, 0, -		PTC6_FN, PTC6_OUT, PTC6_IN, 0, -		PTC5_FN, PTC5_OUT, PTC5_IN, 0, -		PTC4_FN, PTC4_OUT, PTC4_IN, 0, -		PTC3_FN, PTC3_OUT, PTC3_IN, 0, -		PTC2_FN, PTC2_OUT, PTC2_IN, 0, -		PTC1_FN, PTC1_OUT, PTC1_IN, 0, -		PTC0_FN, PTC0_OUT, PTC0_IN, 0 } -	}, -	{ PINMUX_CFG_REG("PDCR", 0xffec0006, 16, 2) { -		PTD7_FN, PTD7_OUT, PTD7_IN, PTD7_IN_PU, -		PTD6_FN, PTD6_OUT, PTD6_IN, PTD6_IN_PU, -		PTD5_FN, PTD5_OUT, PTD5_IN, PTD5_IN_PU, -		PTD4_FN, PTD4_OUT, PTD4_IN, PTD4_IN_PU, -		PTD3_FN, PTD3_OUT, PTD3_IN, PTD3_IN_PU, -		PTD2_FN, PTD2_OUT, PTD2_IN, PTD2_IN_PU, -		PTD1_FN, PTD1_OUT, PTD1_IN, PTD1_IN_PU, -		PTD0_FN, PTD0_OUT, PTD0_IN, PTD0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PECR", 0xffec0008, 16, 2) { -		PTE7_FN, PTE7_OUT, PTE7_IN, PTE7_IN_PU, -		PTE6_FN, PTE6_OUT, PTE6_IN, PTE6_IN_PU, -		PTE5_FN, PTE5_OUT, PTE5_IN, PTE5_IN_PU, -		PTE4_FN, PTE4_OUT, PTE4_IN, PTE4_IN_PU, -		PTE3_FN, PTE3_OUT, PTE3_IN, PTE3_IN_PU, -		PTE2_FN, PTE2_OUT, PTE2_IN, PTE2_IN_PU, -		PTE1_FN, PTE1_OUT, PTE1_IN, PTE1_IN_PU, -		PTE0_FN, PTE0_OUT, PTE0_IN, PTE0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PFCR", 0xffec000a, 16, 2) { -		PTF7_FN, PTF7_OUT, PTF7_IN, PTF7_IN_PU, -		PTF6_FN, PTF6_OUT, PTF6_IN, PTF6_IN_PU, -		PTF5_FN, PTF5_OUT, PTF5_IN, PTF5_IN_PU, -		PTF4_FN, PTF4_OUT, PTF4_IN, PTF4_IN_PU, -		PTF3_FN, PTF3_OUT, PTF3_IN, PTF3_IN_PU, -		PTF2_FN, PTF2_OUT, PTF2_IN, PTF2_IN_PU, -		PTF1_FN, PTF1_OUT, PTF1_IN, PTF1_IN_PU, -		PTF0_FN, PTF0_OUT, PTF0_IN, PTF0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PGCR", 0xffec000c, 16, 2) { -		PTG7_FN, PTG7_OUT, PTG7_IN, PTG7_IN_PU , -		PTG6_FN, PTG6_OUT, PTG6_IN, PTG6_IN_PU , -		PTG5_FN, PTG5_OUT, PTG5_IN, 0, -		PTG4_FN, PTG4_OUT, PTG4_IN, PTG4_IN_PU , -		PTG3_FN, PTG3_OUT, PTG3_IN, 0, -		PTG2_FN, PTG2_OUT, PTG2_IN, 0, -		PTG1_FN, PTG1_OUT, PTG1_IN, 0, -		PTG0_FN, PTG0_OUT, PTG0_IN, 0 } -	}, -	{ PINMUX_CFG_REG("PHCR", 0xffec000e, 16, 2) { -		PTH7_FN, PTH7_OUT, PTH7_IN, PTH7_IN_PU, -		PTH6_FN, PTH6_OUT, PTH6_IN, PTH6_IN_PU, -		PTH5_FN, PTH5_OUT, PTH5_IN, PTH5_IN_PU, -		PTH4_FN, PTH4_OUT, PTH4_IN, PTH4_IN_PU, -		PTH3_FN, PTH3_OUT, PTH3_IN, PTH3_IN_PU, -		PTH2_FN, PTH2_OUT, PTH2_IN, PTH2_IN_PU, -		PTH1_FN, PTH1_OUT, PTH1_IN, PTH1_IN_PU, -		PTH0_FN, PTH0_OUT, PTH0_IN, PTH0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PICR", 0xffec0010, 16, 2) { -		PTI7_FN, PTI7_OUT, PTI7_IN, PTI7_IN_PU, -		PTI6_FN, PTI6_OUT, PTI6_IN, PTI6_IN_PU, -		PTI5_FN, PTI5_OUT, PTI5_IN, 0, -		PTI4_FN, PTI4_OUT, PTI4_IN, PTI4_IN_PU, -		PTI3_FN, PTI3_OUT, PTI3_IN, PTI3_IN_PU, -		PTI2_FN, PTI2_OUT, PTI2_IN, PTI2_IN_PU, -		PTI1_FN, PTI1_OUT, PTI1_IN, PTI1_IN_PU, -		PTI0_FN, PTI0_OUT, PTI0_IN, PTI0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PJCR", 0xffec0012, 16, 2) { -		0, 0, 0, 0,	/* reserved: always set 1 */ -		PTJ6_FN, PTJ6_OUT, PTJ6_IN, PTJ6_IN_PU, -		PTJ5_FN, PTJ5_OUT, PTJ5_IN, PTJ5_IN_PU, -		PTJ4_FN, PTJ4_OUT, PTJ4_IN, PTJ4_IN_PU, -		PTJ3_FN, PTJ3_OUT, PTJ3_IN, PTJ3_IN_PU, -		PTJ2_FN, PTJ2_OUT, PTJ2_IN, PTJ2_IN_PU, -		PTJ1_FN, PTJ1_OUT, PTJ1_IN, PTJ1_IN_PU, -		PTJ0_FN, PTJ0_OUT, PTJ0_IN, PTJ0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PKCR", 0xffec0014, 16, 2) { -		PTK7_FN, PTK7_OUT, PTK7_IN, PTK7_IN_PU, -		PTK6_FN, PTK6_OUT, PTK6_IN, PTK6_IN_PU, -		PTK5_FN, PTK5_OUT, PTK5_IN, PTK5_IN_PU, -		PTK4_FN, PTK4_OUT, PTK4_IN, PTK4_IN_PU, -		PTK3_FN, PTK3_OUT, PTK3_IN, PTK3_IN_PU, -		PTK2_FN, PTK2_OUT, PTK2_IN, PTK2_IN_PU, -		PTK1_FN, PTK1_OUT, PTK1_IN, PTK1_IN_PU, -		PTK0_FN, PTK0_OUT, PTK0_IN, PTK0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PLCR", 0xffec0016, 16, 2) { -		0, 0, 0, 0,	/* reserved: always set 1 */ -		PTL6_FN, PTL6_OUT, PTL6_IN, PTL6_IN_PU, -		PTL5_FN, PTL5_OUT, PTL5_IN, PTL5_IN_PU, -		PTL4_FN, PTL4_OUT, PTL4_IN, PTL4_IN_PU, -		PTL3_FN, PTL3_OUT, PTL3_IN, PTL3_IN_PU, -		PTL2_FN, PTL2_OUT, PTL2_IN, PTL2_IN_PU, -		PTL1_FN, PTL1_OUT, PTL1_IN, PTL1_IN_PU, -		PTL0_FN, PTL0_OUT, PTL0_IN, PTL0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PMCR", 0xffec0018, 16, 2) { -		PTM7_FN, PTM7_OUT, PTM7_IN, PTM7_IN_PU, -		PTM6_FN, PTM6_OUT, PTM6_IN, PTM6_IN_PU, -		PTM5_FN, PTM5_OUT, PTM5_IN, PTM5_IN_PU, -		PTM4_FN, PTM4_OUT, PTM4_IN, PTM4_IN_PU, -		PTM3_FN, PTM3_OUT, PTM3_IN, 0, -		PTM2_FN, PTM2_OUT, PTM2_IN, 0, -		PTM1_FN, PTM1_OUT, PTM1_IN, 0, -		PTM0_FN, PTM0_OUT, PTM0_IN, 0 } -	}, -	{ PINMUX_CFG_REG("PNCR", 0xffec001a, 16, 2) { -		0, 0, 0, 0,	/* reserved: always set 1 */ -		PTN6_FN, PTN6_OUT, PTN6_IN, 0, -		PTN5_FN, PTN5_OUT, PTN5_IN, 0, -		PTN4_FN, PTN4_OUT, PTN4_IN, PTN4_IN_PU, -		PTN3_FN, PTN3_OUT, PTN3_IN, PTN3_IN_PU, -		PTN2_FN, PTN2_OUT, PTN2_IN, PTN2_IN_PU, -		PTN1_FN, PTN1_OUT, PTN1_IN, PTN1_IN_PU, -		PTN0_FN, PTN0_OUT, PTN0_IN, PTN0_IN_PU } -	}, -	{ PINMUX_CFG_REG("POCR", 0xffec001c, 16, 2) { -		PTO7_FN, PTO7_OUT, PTO7_IN, PTO7_IN_PU, -		PTO6_FN, PTO6_OUT, PTO6_IN, PTO6_IN_PU, -		PTO5_FN, PTO5_OUT, PTO5_IN, PTO5_IN_PU, -		PTO4_FN, PTO4_OUT, PTO4_IN, PTO4_IN_PU, -		PTO3_FN, PTO3_OUT, PTO3_IN, PTO3_IN_PU, -		PTO2_FN, PTO2_OUT, PTO2_IN, PTO2_IN_PU, -		PTO1_FN, PTO1_OUT, PTO1_IN, PTO1_IN_PU, -		PTO0_FN, PTO0_OUT, PTO0_IN, PTO0_IN_PU } -	}, -#if 0	/* FIXME: Remove it? */ -	{ PINMUX_CFG_REG("PPCR", 0xffec001e, 16, 2) { -		0, 0, 0, 0,	/* reserved: always set 1 */ -		PTP6_FN, PTP6_OUT, PTP6_IN, 0, -		PTP5_FN, PTP5_OUT, PTP5_IN, 0, -		PTP4_FN, PTP4_OUT, PTP4_IN, 0, -		PTP3_FN, PTP3_OUT, PTP3_IN, 0, -		PTP2_FN, PTP2_OUT, PTP2_IN, 0, -		PTP1_FN, PTP1_OUT, PTP1_IN, 0, -		PTP0_FN, PTP0_OUT, PTP0_IN, 0 } -	}, -#endif -	{ PINMUX_CFG_REG("PQCR", 0xffec0020, 16, 2) { -		0, 0, 0, 0,	/* reserved: always set 1 */ -		PTQ6_FN, PTQ6_OUT, PTQ6_IN, 0, -		PTQ5_FN, PTQ5_OUT, PTQ5_IN, 0, -		PTQ4_FN, PTQ4_OUT, PTQ4_IN, 0, -		PTQ3_FN, PTQ3_OUT, PTQ3_IN, 0, -		PTQ2_FN, PTQ2_OUT, PTQ2_IN, 0, -		PTQ1_FN, PTQ1_OUT, PTQ1_IN, 0, -		PTQ0_FN, PTQ0_OUT, PTQ0_IN, 0 } +static struct resource sh7757_pfc_resources[] = { +	[0] = { +		.start	= 0xffec0000, +		.end	= 0xffec008f, +		.flags	= IORESOURCE_MEM,  	}, -	{ PINMUX_CFG_REG("PRCR", 0xffec0022, 16, 2) { -		PTR7_FN, PTR7_OUT, PTR7_IN, 0, -		PTR6_FN, PTR6_OUT, PTR6_IN, 0, -		PTR5_FN, PTR5_OUT, PTR5_IN, 0, -		PTR4_FN, PTR4_OUT, PTR4_IN, 0, -		PTR3_FN, PTR3_OUT, PTR3_IN, 0, -		PTR2_FN, PTR2_OUT, PTR2_IN, 0, -		PTR1_FN, PTR1_OUT, PTR1_IN, 0, -		PTR0_FN, PTR0_OUT, PTR0_IN, 0 } -	}, -	{ PINMUX_CFG_REG("PSCR", 0xffec0024, 16, 2) { -		PTS7_FN, PTS7_OUT, PTS7_IN, 0, -		PTS6_FN, PTS6_OUT, PTS6_IN, 0, -		PTS5_FN, PTS5_OUT, PTS5_IN, 0, -		PTS4_FN, PTS4_OUT, PTS4_IN, 0, -		PTS3_FN, PTS3_OUT, PTS3_IN, 0, -		PTS2_FN, PTS2_OUT, PTS2_IN, 0, -		PTS1_FN, PTS1_OUT, PTS1_IN, 0, -		PTS0_FN, PTS0_OUT, PTS0_IN, 0 } -	}, -	{ PINMUX_CFG_REG("PTCR", 0xffec0026, 16, 2) { -		PTT7_FN, PTT7_OUT, PTT7_IN, PTO7_IN_PU, -		PTT6_FN, PTT6_OUT, PTT6_IN, PTO6_IN_PU, -		PTT5_FN, PTT5_OUT, PTT5_IN, PTO5_IN_PU, -		PTT4_FN, PTT4_OUT, PTT4_IN, PTO4_IN_PU, -		PTT3_FN, PTT3_OUT, PTT3_IN, PTO3_IN_PU, -		PTT2_FN, PTT2_OUT, PTT2_IN, PTO2_IN_PU, -		PTT1_FN, PTT1_OUT, PTT1_IN, PTO1_IN_PU, -		PTT0_FN, PTT0_OUT, PTT0_IN, PTO0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PUCR", 0xffec0028, 16, 2) { -		PTU7_FN, PTU7_OUT, PTU7_IN, PTU7_IN_PU, -		PTU6_FN, PTU6_OUT, PTU6_IN, PTU6_IN_PU, -		PTU5_FN, PTU5_OUT, PTU5_IN, PTU5_IN_PU, -		PTU4_FN, PTU4_OUT, PTU4_IN, PTU4_IN_PU, -		PTU3_FN, PTU3_OUT, PTU3_IN, PTU3_IN_PU, -		PTU2_FN, PTU2_OUT, PTU2_IN, PTU2_IN_PU, -		PTU1_FN, PTU1_OUT, PTU1_IN, PTU1_IN_PU, -		PTU0_FN, PTU0_OUT, PTU0_IN, PTU0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PVCR", 0xffec002a, 16, 2) { -		PTV7_FN, PTV7_OUT, PTV7_IN, PTV7_IN_PU, -		PTV6_FN, PTV6_OUT, PTV6_IN, PTV6_IN_PU, -		PTV5_FN, PTV5_OUT, PTV5_IN, PTV5_IN_PU, -		PTV4_FN, PTV4_OUT, PTV4_IN, PTV4_IN_PU, -		PTV3_FN, PTV3_OUT, PTV3_IN, PTV3_IN_PU, -		PTV2_FN, PTV2_OUT, PTV2_IN, PTV2_IN_PU, -		PTV1_FN, PTV1_OUT, PTV1_IN, 0, -		PTV0_FN, PTV0_OUT, PTV0_IN, 0 } -	}, -	{ PINMUX_CFG_REG("PWCR", 0xffec002c, 16, 2) { -		PTW7_FN, PTW7_OUT, PTW7_IN, 0, -		PTW6_FN, PTW6_OUT, PTW6_IN, 0, -		PTW5_FN, PTW5_OUT, PTW5_IN, 0, -		PTW4_FN, PTW4_OUT, PTW4_IN, 0, -		PTW3_FN, PTW3_OUT, PTW3_IN, 0, -		PTW2_FN, PTW2_OUT, PTW2_IN, 0, -		PTW1_FN, PTW1_OUT, PTW1_IN, PTW1_IN_PU, -		PTW0_FN, PTW0_OUT, PTW0_IN, PTW0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PXCR", 0xffec002e, 16, 2) { -		PTX7_FN, PTX7_OUT, PTX7_IN, PTX7_IN_PU, -		PTX6_FN, PTX6_OUT, PTX6_IN, PTX6_IN_PU, -		PTX5_FN, PTX5_OUT, PTX5_IN, PTX5_IN_PU, -		PTX4_FN, PTX4_OUT, PTX4_IN, PTX4_IN_PU, -		PTX3_FN, PTX3_OUT, PTX3_IN, PTX3_IN_PU, -		PTX2_FN, PTX2_OUT, PTX2_IN, PTX2_IN_PU, -		PTX1_FN, PTX1_OUT, PTX1_IN, PTX1_IN_PU, -		PTX0_FN, PTX0_OUT, PTX0_IN, PTX0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PYCR", 0xffec0030, 16, 2) { -		PTY7_FN, PTY7_OUT, PTY7_IN, PTY7_IN_PU, -		PTY6_FN, PTY6_OUT, PTY6_IN, PTY6_IN_PU, -		PTY5_FN, PTY5_OUT, PTY5_IN, PTY5_IN_PU, -		PTY4_FN, PTY4_OUT, PTY4_IN, PTY4_IN_PU, -		PTY3_FN, PTY3_OUT, PTY3_IN, PTY3_IN_PU, -		PTY2_FN, PTY2_OUT, PTY2_IN, PTY2_IN_PU, -		PTY1_FN, PTY1_OUT, PTY1_IN, PTY1_IN_PU, -		PTY0_FN, PTY0_OUT, PTY0_IN, PTY0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PZCR", 0xffec0032, 16, 2) { -		PTZ7_FN, PTZ7_OUT, PTZ7_IN, 0, -		PTZ6_FN, PTZ6_OUT, PTZ6_IN, 0, -		PTZ5_FN, PTZ5_OUT, PTZ5_IN, 0, -		PTZ4_FN, PTZ4_OUT, PTZ4_IN, 0, -		PTZ3_FN, PTZ3_OUT, PTZ3_IN, 0, -		PTZ2_FN, PTZ2_OUT, PTZ2_IN, 0, -		PTZ1_FN, PTZ1_OUT, PTZ1_IN, 0, -		PTZ0_FN, PTZ0_OUT, PTZ0_IN, 0 } -	}, - -	{ PINMUX_CFG_REG("PSEL0", 0xffec0070, 16, 1) { -		PS0_15_FN1, PS0_15_FN2, -		PS0_14_FN1, PS0_14_FN2, -		PS0_13_FN1, PS0_13_FN2, -		PS0_12_FN1, PS0_12_FN2, -		PS0_11_FN1, PS0_11_FN2, -		PS0_10_FN1, PS0_10_FN2, -		PS0_9_FN1, PS0_9_FN2, -		PS0_8_FN1, PS0_8_FN2, -		PS0_7_FN1, PS0_7_FN2, -		PS0_6_FN1, PS0_6_FN2, -		PS0_5_FN1, PS0_5_FN2, -		PS0_4_FN1, PS0_4_FN2, -		PS0_3_FN1, PS0_3_FN2, -		PS0_2_FN1, PS0_2_FN2, -		0, 0, -		0, 0, } -	}, -	{ PINMUX_CFG_REG("PSEL1", 0xffec0072, 16, 1) { -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PS1_10_FN1, PS1_10_FN2, -		PS1_9_FN1, PS1_9_FN2, -		PS1_8_FN1, PS1_8_FN2, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PS1_2_FN1, PS1_2_FN2, -		0, 0, -		0, 0, } -	}, -	{ PINMUX_CFG_REG("PSEL2", 0xffec0074, 16, 1) { -		0, 0, -		0, 0, -		PS2_13_FN1, PS2_13_FN2, -		PS2_12_FN1, PS2_12_FN2, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PS2_7_FN1, PS2_7_FN2, -		PS2_6_FN1, PS2_6_FN2, -		PS2_5_FN1, PS2_5_FN2, -		PS2_4_FN1, PS2_4_FN2, -		0, 0, -		PS2_2_FN1, PS2_2_FN2, -		0, 0, -		0, 0, } -	}, -	{ PINMUX_CFG_REG("PSEL3", 0xffec0076, 16, 1) { -		PS3_15_FN1, PS3_15_FN2, -		PS3_14_FN1, PS3_14_FN2, -		PS3_13_FN1, PS3_13_FN2, -		PS3_12_FN1, PS3_12_FN2, -		PS3_11_FN1, PS3_11_FN2, -		PS3_10_FN1, PS3_10_FN2, -		PS3_9_FN1, PS3_9_FN2, -		PS3_8_FN1, PS3_8_FN2, -		PS3_7_FN1, PS3_7_FN2, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PS3_2_FN1, PS3_2_FN2, -		PS3_1_FN1, PS3_1_FN2, -		0, 0, } -	}, - -	{ PINMUX_CFG_REG("PSEL4", 0xffec0078, 16, 1) { -		0, 0, -		PS4_14_FN1, PS4_14_FN2, -		PS4_13_FN1, PS4_13_FN2, -		PS4_12_FN1, PS4_12_FN2, -		0, 0, -		PS4_10_FN1, PS4_10_FN2, -		PS4_9_FN1, PS4_9_FN2, -		PS4_8_FN1, PS4_8_FN2, -		0, 0, -		0, 0, -		0, 0, -		PS4_4_FN1, PS4_4_FN2, -		PS4_3_FN1, PS4_3_FN2, -		PS4_2_FN1, PS4_2_FN2, -		PS4_1_FN1, PS4_1_FN2, -		PS4_0_FN1, PS4_0_FN2, } -	}, -	{ PINMUX_CFG_REG("PSEL5", 0xffec007a, 16, 1) { -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		PS5_11_FN1, PS5_11_FN2, -		PS5_10_FN1, PS5_10_FN2, -		PS5_9_FN1, PS5_9_FN2, -		PS5_8_FN1, PS5_8_FN2, -		PS5_7_FN1, PS5_7_FN2, -		PS5_6_FN1, PS5_6_FN2, -		PS5_5_FN1, PS5_5_FN2, -		PS5_4_FN1, PS5_4_FN2, -		PS5_3_FN1, PS5_3_FN2, -		PS5_2_FN1, PS5_2_FN2, -		0, 0, -		0, 0, } -	}, -	{ PINMUX_CFG_REG("PSEL6", 0xffec007c, 16, 1) { -		PS6_15_FN1, PS6_15_FN2, -		PS6_14_FN1, PS6_14_FN2, -		PS6_13_FN1, PS6_13_FN2, -		PS6_12_FN1, PS6_12_FN2, -		PS6_11_FN1, PS6_11_FN2, -		PS6_10_FN1, PS6_10_FN2, -		PS6_9_FN1, PS6_9_FN2, -		PS6_8_FN1, PS6_8_FN2, -		PS6_7_FN1, PS6_7_FN2, -		PS6_6_FN1, PS6_6_FN2, -		PS6_5_FN1, PS6_5_FN2, -		PS6_4_FN1, PS6_4_FN2, -		PS6_3_FN1, PS6_3_FN2, -		PS6_2_FN1, PS6_2_FN2, -		PS6_1_FN1, PS6_1_FN2, -		PS6_0_FN1, PS6_0_FN2, } -	}, -	{ PINMUX_CFG_REG("PSEL7", 0xffec0082, 16, 1) { -		PS7_15_FN1, PS7_15_FN2, -		PS7_14_FN1, PS7_14_FN2, -		PS7_13_FN1, PS7_13_FN2, -		PS7_12_FN1, PS7_12_FN2, -		PS7_11_FN1, PS7_11_FN2, -		PS7_10_FN1, PS7_10_FN2, -		PS7_9_FN1, PS7_9_FN2, -		PS7_8_FN1, PS7_8_FN2, -		PS7_7_FN1, PS7_7_FN2, -		PS7_6_FN1, PS7_6_FN2, -		PS7_5_FN1, PS7_5_FN2, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, } -	}, -	{ PINMUX_CFG_REG("PSEL8", 0xffec0084, 16, 1) { -		PS8_15_FN1, PS8_15_FN2, -		PS8_14_FN1, PS8_14_FN2, -		PS8_13_FN1, PS8_13_FN2, -		PS8_12_FN1, PS8_12_FN2, -		PS8_11_FN1, PS8_11_FN2, -		PS8_10_FN1, PS8_10_FN2, -		PS8_9_FN1, PS8_9_FN2, -		PS8_8_FN1, PS8_8_FN2, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, } -	}, -	{} -}; - -static struct pinmux_data_reg pinmux_data_regs[] = { -	{ PINMUX_DATA_REG("PADR", 0xffec0034, 8) { -		PTA7_DATA, PTA6_DATA, PTA5_DATA, PTA4_DATA, -		PTA3_DATA, PTA2_DATA, PTA1_DATA, PTA0_DATA } -	}, -	{ PINMUX_DATA_REG("PBDR", 0xffec0036, 8) { -		PTB7_DATA, PTB6_DATA, PTB5_DATA, PTB4_DATA, -		PTB3_DATA, PTB2_DATA, PTB1_DATA, PTB0_DATA } -	}, -	{ PINMUX_DATA_REG("PCDR", 0xffec0038, 8) { -		PTC7_DATA, PTC6_DATA, PTC5_DATA, PTC4_DATA, -		PTC3_DATA, PTC2_DATA, PTC1_DATA, PTC0_DATA } -	}, -	{ PINMUX_DATA_REG("PDDR", 0xffec003a, 8) { -		PTD7_DATA, PTD6_DATA, PTD5_DATA, PTD4_DATA, -		PTD3_DATA, PTD2_DATA, PTD1_DATA, PTD0_DATA } -	}, -	{ PINMUX_DATA_REG("PEDR", 0xffec003c, 8) { -		PTE7_DATA, PTE6_DATA, PTE5_DATA, PTE4_DATA, -		PTE3_DATA, PTE2_DATA, PTE1_DATA, PTE0_DATA } -	}, -	{ PINMUX_DATA_REG("PFDR", 0xffec003e, 8) { -		PTF7_DATA, PTF6_DATA, PTF5_DATA, PTF4_DATA, -		PTF3_DATA, PTF2_DATA, PTF1_DATA, PTF0_DATA } -	}, -	{ PINMUX_DATA_REG("PGDR", 0xffec0040, 8) { -		PTG7_DATA, PTG6_DATA, PTG5_DATA, PTG4_DATA, -		PTG3_DATA, PTG2_DATA, PTG1_DATA, PTG0_DATA } -	}, -	{ PINMUX_DATA_REG("PHDR", 0xffec0042, 8) { -		PTH7_DATA, PTH6_DATA, PTH5_DATA, PTH4_DATA, -		PTH3_DATA, PTH2_DATA, PTH1_DATA, PTH0_DATA } -	}, -	{ PINMUX_DATA_REG("PIDR", 0xffec0044, 8) { -		PTI7_DATA, PTI6_DATA, PTI5_DATA, PTI4_DATA, -		PTI3_DATA, PTI2_DATA, PTI1_DATA, PTI0_DATA } -	}, -	{ PINMUX_DATA_REG("PJDR", 0xffec0046, 8) { -		0, PTJ6_DATA, PTJ5_DATA, PTJ4_DATA, -		PTJ3_DATA, PTJ2_DATA, PTJ1_DATA, PTJ0_DATA } -	}, -	{ PINMUX_DATA_REG("PKDR", 0xffec0048, 8) { -		PTK7_DATA, PTK6_DATA, PTK5_DATA, PTK4_DATA, -		PTK3_DATA, PTK2_DATA, PTK1_DATA, PTK0_DATA } -	}, -	{ PINMUX_DATA_REG("PLDR", 0xffec004a, 8) { -		0, PTL6_DATA, PTL5_DATA, PTL4_DATA, -		PTL3_DATA, PTL2_DATA, PTL1_DATA, PTL0_DATA } -	}, -	{ PINMUX_DATA_REG("PMDR", 0xffec004c, 8) { -		PTM7_DATA, PTM6_DATA, PTM5_DATA, PTM4_DATA, -		PTM3_DATA, PTM2_DATA, PTM1_DATA, PTM0_DATA } -	}, -	{ PINMUX_DATA_REG("PNDR", 0xffec004e, 8) { -		0, PTN6_DATA, PTN5_DATA, PTN4_DATA, -		PTN3_DATA, PTN2_DATA, PTN1_DATA, PTN0_DATA } -	}, -	{ PINMUX_DATA_REG("PODR", 0xffec0050, 8) { -		PTO7_DATA, PTO6_DATA, PTO5_DATA, PTO4_DATA, -		PTO3_DATA, PTO2_DATA, PTO1_DATA, PTO0_DATA } -	}, -	{ PINMUX_DATA_REG("PPDR", 0xffec0052, 8) { -		PTP7_DATA, PTP6_DATA, PTP5_DATA, PTP4_DATA, -		PTP3_DATA, PTP2_DATA, PTP1_DATA, PTP0_DATA } -	}, -	{ PINMUX_DATA_REG("PQDR", 0xffec0054, 8) { -		0, PTQ6_DATA, PTQ5_DATA, PTQ4_DATA, -		PTQ3_DATA, PTQ2_DATA, PTQ1_DATA, PTQ0_DATA } -	}, -	{ PINMUX_DATA_REG("PRDR", 0xffec0056, 8) { -		PTR7_DATA, PTR6_DATA, PTR5_DATA, PTR4_DATA, -		PTR3_DATA, PTR2_DATA, PTR1_DATA, PTR0_DATA } -	}, -	{ PINMUX_DATA_REG("PSDR", 0xffec0058, 8) { -		PTS7_DATA, PTS6_DATA, PTS5_DATA, PTS4_DATA, -		PTS3_DATA, PTS2_DATA, PTS1_DATA, PTS0_DATA } -	}, -	{ PINMUX_DATA_REG("PTDR", 0xffec005a, 8) { -		PTT7_DATA, PTT6_DATA, PTT5_DATA, PTT4_DATA, -		PTT3_DATA, PTT2_DATA, PTT1_DATA, PTT0_DATA } -	}, -	{ PINMUX_DATA_REG("PUDR", 0xffec005c, 8) { -		PTU7_DATA, PTU6_DATA, PTU5_DATA, PTU4_DATA, -		PTU3_DATA, PTU2_DATA, PTU1_DATA, PTU0_DATA } -	}, -	{ PINMUX_DATA_REG("PVDR", 0xffec005e, 8) { -		PTV7_DATA, PTV6_DATA, PTV5_DATA, PTV4_DATA, -		PTV3_DATA, PTV2_DATA, PTV1_DATA, PTV0_DATA } -	}, -	{ PINMUX_DATA_REG("PWDR", 0xffec0060, 8) { -		PTW7_DATA, PTW6_DATA, PTW5_DATA, PTW4_DATA, -		PTW3_DATA, PTW2_DATA, PTW1_DATA, PTW0_DATA } -	}, -	{ PINMUX_DATA_REG("PXDR", 0xffec0062, 8) { -		PTX7_DATA, PTX6_DATA, PTX5_DATA, PTX4_DATA, -		PTX3_DATA, PTX2_DATA, PTX1_DATA, PTX0_DATA } -	}, -	{ PINMUX_DATA_REG("PYDR", 0xffec0064, 8) { -		PTY7_DATA, PTY6_DATA, PTY5_DATA, PTY4_DATA, -		PTY3_DATA, PTY2_DATA, PTY1_DATA, PTY0_DATA } -	}, -	{ PINMUX_DATA_REG("PZDR", 0xffec0066, 8) { -		PTZ7_DATA, PTZ6_DATA, PTZ5_DATA, PTZ4_DATA, -		PTZ3_DATA, PTZ2_DATA, PTZ1_DATA, PTZ0_DATA } -	}, -	{ }, -}; - -static struct pinmux_info sh7757_pinmux_info = { -	.name = "sh7757_pfc", -	.reserved_id = PINMUX_RESERVED, -	.data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, -	.input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, -	.input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, -	.output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, -	.mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, -	.function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, - -	.first_gpio = GPIO_PTA0, -	.last_gpio = GPIO_FN_ON_DQ0, - -	.gpios = pinmux_gpios, -	.cfg_regs = pinmux_config_regs, -	.data_regs = pinmux_data_regs, - -	.gpio_data = pinmux_data, -	.gpio_data_size = ARRAY_SIZE(pinmux_data),  };  static int __init plat_pinmux_setup(void)  { -	return register_pinmux(&sh7757_pinmux_info); +	return sh_pfc_register("pfc-sh7757", sh7757_pfc_resources, +			       ARRAY_SIZE(sh7757_pfc_resources));  }  arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh4a/pinmux-sh7785.c b/arch/sh/kernel/cpu/sh4a/pinmux-sh7785.c index 5ebc25fd9b2..e336ab8b512 100644 --- a/arch/sh/kernel/cpu/sh4a/pinmux-sh7785.c +++ b/arch/sh/kernel/cpu/sh4a/pinmux-sh7785.c @@ -8,1303 +8,23 @@   * for more details.   */ +#include <linux/bug.h>  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/gpio.h> -#include <cpu/sh7785.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> -enum { -	PINMUX_RESERVED = 0, - -	PINMUX_DATA_BEGIN, -	PA7_DATA, PA6_DATA, PA5_DATA, PA4_DATA, -	PA3_DATA, PA2_DATA, PA1_DATA, PA0_DATA, -	PB7_DATA, PB6_DATA, PB5_DATA, PB4_DATA, -	PB3_DATA, PB2_DATA, PB1_DATA, PB0_DATA, -	PC7_DATA, PC6_DATA, PC5_DATA, PC4_DATA, -	PC3_DATA, PC2_DATA, PC1_DATA, PC0_DATA, -	PD7_DATA, PD6_DATA, PD5_DATA, PD4_DATA, -	PD3_DATA, PD2_DATA, PD1_DATA, PD0_DATA, -	PE5_DATA, PE4_DATA, PE3_DATA, PE2_DATA, PE1_DATA, PE0_DATA, -	PF7_DATA, PF6_DATA, PF5_DATA, PF4_DATA, -	PF3_DATA, PF2_DATA, PF1_DATA, PF0_DATA, -	PG7_DATA, PG6_DATA, PG5_DATA, PG4_DATA, -	PG3_DATA, PG2_DATA, PG1_DATA, PG0_DATA, -	PH7_DATA, PH6_DATA, PH5_DATA, PH4_DATA, -	PH3_DATA, PH2_DATA, PH1_DATA, PH0_DATA, -	PJ7_DATA, PJ6_DATA, PJ5_DATA, PJ4_DATA, -	PJ3_DATA, PJ2_DATA, PJ1_DATA, PJ0_DATA, -	PK7_DATA, PK6_DATA, PK5_DATA, PK4_DATA, -	PK3_DATA, PK2_DATA, PK1_DATA, PK0_DATA, -	PL7_DATA, PL6_DATA, PL5_DATA, PL4_DATA, -	PL3_DATA, PL2_DATA, PL1_DATA, PL0_DATA, -	PM1_DATA, PM0_DATA, -	PN7_DATA, PN6_DATA, PN5_DATA, PN4_DATA, -	PN3_DATA, PN2_DATA, PN1_DATA, PN0_DATA, -	PP5_DATA, PP4_DATA, PP3_DATA, PP2_DATA, PP1_DATA, PP0_DATA, -	PQ4_DATA, PQ3_DATA, PQ2_DATA, PQ1_DATA, PQ0_DATA, -	PR3_DATA, PR2_DATA, PR1_DATA, PR0_DATA, -	PINMUX_DATA_END, - -	PINMUX_INPUT_BEGIN, -	PA7_IN, PA6_IN, PA5_IN, PA4_IN, -	PA3_IN, PA2_IN, PA1_IN, PA0_IN, -	PB7_IN, PB6_IN, PB5_IN, PB4_IN, -	PB3_IN, PB2_IN, PB1_IN, PB0_IN, -	PC7_IN, PC6_IN, PC5_IN, PC4_IN, -	PC3_IN, PC2_IN, PC1_IN, PC0_IN, -	PD7_IN, PD6_IN, PD5_IN, PD4_IN, -	PD3_IN, PD2_IN, PD1_IN, PD0_IN, -	PE5_IN, PE4_IN, PE3_IN, PE2_IN, PE1_IN, PE0_IN, -	PF7_IN, PF6_IN, PF5_IN, PF4_IN, -	PF3_IN, PF2_IN, PF1_IN, PF0_IN, -	PG7_IN, PG6_IN, PG5_IN, PG4_IN, -	PG3_IN, PG2_IN, PG1_IN, PG0_IN, -	PH7_IN, PH6_IN, PH5_IN, PH4_IN, -	PH3_IN, PH2_IN, PH1_IN, PH0_IN, -	PJ7_IN, PJ6_IN, PJ5_IN, PJ4_IN, -	PJ3_IN, PJ2_IN, PJ1_IN, PJ0_IN, -	PK7_IN, PK6_IN, PK5_IN, PK4_IN, -	PK3_IN, PK2_IN, PK1_IN, PK0_IN, -	PL7_IN, PL6_IN, PL5_IN, PL4_IN, -	PL3_IN, PL2_IN, PL1_IN, PL0_IN, -	PM1_IN, PM0_IN, -	PN7_IN, PN6_IN, PN5_IN, PN4_IN, -	PN3_IN, PN2_IN, PN1_IN, PN0_IN, -	PP5_IN, PP4_IN, PP3_IN, PP2_IN, PP1_IN, PP0_IN, -	PQ4_IN, PQ3_IN, PQ2_IN, PQ1_IN, PQ0_IN, -	PR3_IN, PR2_IN, PR1_IN, PR0_IN, -	PINMUX_INPUT_END, - -	PINMUX_INPUT_PULLUP_BEGIN, -	PA7_IN_PU, PA6_IN_PU, PA5_IN_PU, PA4_IN_PU, -	PA3_IN_PU, PA2_IN_PU, PA1_IN_PU, PA0_IN_PU, -	PB7_IN_PU, PB6_IN_PU, PB5_IN_PU, PB4_IN_PU, -	PB3_IN_PU, PB2_IN_PU, PB1_IN_PU, PB0_IN_PU, -	PC7_IN_PU, PC6_IN_PU, PC5_IN_PU, PC4_IN_PU, -	PC3_IN_PU, PC2_IN_PU, PC1_IN_PU, PC0_IN_PU, -	PD7_IN_PU, PD6_IN_PU, PD5_IN_PU, PD4_IN_PU, -	PD3_IN_PU, PD2_IN_PU, PD1_IN_PU, PD0_IN_PU, -	PE5_IN_PU, PE4_IN_PU, PE3_IN_PU, PE2_IN_PU, PE1_IN_PU, PE0_IN_PU, -	PF7_IN_PU, PF6_IN_PU, PF5_IN_PU, PF4_IN_PU, -	PF3_IN_PU, PF2_IN_PU, PF1_IN_PU, PF0_IN_PU, -	PG7_IN_PU, PG6_IN_PU, PG5_IN_PU, PG4_IN_PU, -	PG3_IN_PU, PG2_IN_PU, PG1_IN_PU, PG0_IN_PU, -	PH7_IN_PU, PH6_IN_PU, PH5_IN_PU, PH4_IN_PU, -	PH3_IN_PU, PH2_IN_PU, PH1_IN_PU, PH0_IN_PU, -	PJ7_IN_PU, PJ6_IN_PU, PJ5_IN_PU, PJ4_IN_PU, -	PJ3_IN_PU, PJ2_IN_PU, PJ1_IN_PU, PJ0_IN_PU, -	PK7_IN_PU, PK6_IN_PU, PK5_IN_PU, PK4_IN_PU, -	PK3_IN_PU, PK2_IN_PU, PK1_IN_PU, PK0_IN_PU, -	PL7_IN_PU, PL6_IN_PU, PL5_IN_PU, PL4_IN_PU, -	PL3_IN_PU, PL2_IN_PU, PL1_IN_PU, PL0_IN_PU, -	PM1_IN_PU, PM0_IN_PU, -	PN7_IN_PU, PN6_IN_PU, PN5_IN_PU, PN4_IN_PU, -	PN3_IN_PU, PN2_IN_PU, PN1_IN_PU, PN0_IN_PU, -	PP5_IN_PU, PP4_IN_PU, PP3_IN_PU, PP2_IN_PU, PP1_IN_PU, PP0_IN_PU, -	PQ4_IN_PU, PQ3_IN_PU, PQ2_IN_PU, PQ1_IN_PU, PQ0_IN_PU, -	PR3_IN_PU, PR2_IN_PU, PR1_IN_PU, PR0_IN_PU, -	PINMUX_INPUT_PULLUP_END, - -	PINMUX_OUTPUT_BEGIN, -	PA7_OUT, PA6_OUT, PA5_OUT, PA4_OUT, -	PA3_OUT, PA2_OUT, PA1_OUT, PA0_OUT, -	PB7_OUT, PB6_OUT, PB5_OUT, PB4_OUT, -	PB3_OUT, PB2_OUT, PB1_OUT, PB0_OUT, -	PC7_OUT, PC6_OUT, PC5_OUT, PC4_OUT, -	PC3_OUT, PC2_OUT, PC1_OUT, PC0_OUT, -	PD7_OUT, PD6_OUT, PD5_OUT, PD4_OUT, -	PD3_OUT, PD2_OUT, PD1_OUT, PD0_OUT, -	PE5_OUT, PE4_OUT, PE3_OUT, PE2_OUT, PE1_OUT, PE0_OUT, -	PF7_OUT, PF6_OUT, PF5_OUT, PF4_OUT, -	PF3_OUT, PF2_OUT, PF1_OUT, PF0_OUT, -	PG7_OUT, PG6_OUT, PG5_OUT, PG4_OUT, -	PG3_OUT, PG2_OUT, PG1_OUT, PG0_OUT, -	PH7_OUT, PH6_OUT, PH5_OUT, PH4_OUT, -	PH3_OUT, PH2_OUT, PH1_OUT, PH0_OUT, -	PJ7_OUT, PJ6_OUT, PJ5_OUT, PJ4_OUT, -	PJ3_OUT, PJ2_OUT, PJ1_OUT, PJ0_OUT, -	PK7_OUT, PK6_OUT, PK5_OUT, PK4_OUT, -	PK3_OUT, PK2_OUT, PK1_OUT, PK0_OUT, -	PL7_OUT, PL6_OUT, PL5_OUT, PL4_OUT, -	PL3_OUT, PL2_OUT, PL1_OUT, PL0_OUT, -	PM1_OUT, PM0_OUT, -	PN7_OUT, PN6_OUT, PN5_OUT, PN4_OUT, -	PN3_OUT, PN2_OUT, PN1_OUT, PN0_OUT, -	PP5_OUT, PP4_OUT, PP3_OUT, PP2_OUT, PP1_OUT, PP0_OUT, -	PQ4_OUT, PQ3_OUT, PQ2_OUT, PQ1_OUT, PQ0_OUT, -	PR3_OUT, PR2_OUT, PR1_OUT, PR0_OUT, -	PINMUX_OUTPUT_END, - -	PINMUX_FUNCTION_BEGIN, -	PA7_FN, PA6_FN, PA5_FN, PA4_FN, -	PA3_FN, PA2_FN, PA1_FN, PA0_FN, -	PB7_FN, PB6_FN, PB5_FN, PB4_FN, -	PB3_FN, PB2_FN, PB1_FN, PB0_FN, -	PC7_FN, PC6_FN, PC5_FN, PC4_FN, -	PC3_FN, PC2_FN, PC1_FN, PC0_FN, -	PD7_FN, PD6_FN, PD5_FN, PD4_FN, -	PD3_FN, PD2_FN, PD1_FN, PD0_FN, -	PE5_FN, PE4_FN, PE3_FN, PE2_FN, PE1_FN, PE0_FN, -	PF7_FN, PF6_FN, PF5_FN, PF4_FN, -	PF3_FN, PF2_FN, PF1_FN, PF0_FN, -	PG7_FN, PG6_FN, PG5_FN, PG4_FN, -	PG3_FN, PG2_FN, PG1_FN, PG0_FN, -	PH7_FN, PH6_FN, PH5_FN, PH4_FN, -	PH3_FN, PH2_FN, PH1_FN, PH0_FN, -	PJ7_FN, PJ6_FN, PJ5_FN, PJ4_FN, -	PJ3_FN, PJ2_FN, PJ1_FN, PJ0_FN, -	PK7_FN, PK6_FN, PK5_FN, PK4_FN, -	PK3_FN, PK2_FN, PK1_FN, PK0_FN, -	PL7_FN, PL6_FN, PL5_FN, PL4_FN, -	PL3_FN, PL2_FN, PL1_FN, PL0_FN, -	PM1_FN, PM0_FN, -	PN7_FN, PN6_FN, PN5_FN, PN4_FN, -	PN3_FN, PN2_FN, PN1_FN, PN0_FN, -	PP5_FN, PP4_FN, PP3_FN, PP2_FN, PP1_FN, PP0_FN, -	PQ4_FN, PQ3_FN, PQ2_FN, PQ1_FN, PQ0_FN, -	PR3_FN, PR2_FN, PR1_FN, PR0_FN, -	P1MSEL15_0, P1MSEL15_1, -	P1MSEL14_0, P1MSEL14_1, -	P1MSEL13_0, P1MSEL13_1, -	P1MSEL12_0, P1MSEL12_1, -	P1MSEL11_0, P1MSEL11_1, -	P1MSEL10_0, P1MSEL10_1, -	P1MSEL9_0, P1MSEL9_1, -	P1MSEL8_0, P1MSEL8_1, -	P1MSEL7_0, P1MSEL7_1, -	P1MSEL6_0, P1MSEL6_1, -	P1MSEL5_0, -	P1MSEL4_0, P1MSEL4_1, -	P1MSEL3_0, P1MSEL3_1, -	P1MSEL2_0, P1MSEL2_1, -	P1MSEL1_0, P1MSEL1_1, -	P1MSEL0_0, P1MSEL0_1, -	P2MSEL2_0, P2MSEL2_1, -	P2MSEL1_0, P2MSEL1_1, -	P2MSEL0_0, P2MSEL0_1, -	PINMUX_FUNCTION_END, - -	PINMUX_MARK_BEGIN, -	D63_AD31_MARK, -	D62_AD30_MARK, -	D61_AD29_MARK, -	D60_AD28_MARK, -	D59_AD27_MARK, -	D58_AD26_MARK, -	D57_AD25_MARK, -	D56_AD24_MARK, -	D55_AD23_MARK, -	D54_AD22_MARK, -	D53_AD21_MARK, -	D52_AD20_MARK, -	D51_AD19_MARK, -	D50_AD18_MARK, -	D49_AD17_DB5_MARK, -	D48_AD16_DB4_MARK, -	D47_AD15_DB3_MARK, -	D46_AD14_DB2_MARK, -	D45_AD13_DB1_MARK, -	D44_AD12_DB0_MARK, -	D43_AD11_DG5_MARK, -	D42_AD10_DG4_MARK, -	D41_AD9_DG3_MARK, -	D40_AD8_DG2_MARK, -	D39_AD7_DG1_MARK, -	D38_AD6_DG0_MARK, -	D37_AD5_DR5_MARK, -	D36_AD4_DR4_MARK, -	D35_AD3_DR3_MARK, -	D34_AD2_DR2_MARK, -	D33_AD1_DR1_MARK, -	D32_AD0_DR0_MARK, -	REQ1_MARK, -	REQ2_MARK, -	REQ3_MARK, -	GNT1_MARK, -	GNT2_MARK, -	GNT3_MARK, -	MMCCLK_MARK, -	D31_MARK, -	D30_MARK, -	D29_MARK, -	D28_MARK, -	D27_MARK, -	D26_MARK, -	D25_MARK, -	D24_MARK, -	D23_MARK, -	D22_MARK, -	D21_MARK, -	D20_MARK, -	D19_MARK, -	D18_MARK, -	D17_MARK, -	D16_MARK, -	SCIF1_SCK_MARK, -	SCIF1_RXD_MARK, -	SCIF1_TXD_MARK, -	SCIF0_CTS_MARK, -	INTD_MARK, -	FCE_MARK, -	SCIF0_RTS_MARK, -	HSPI_CS_MARK, -	FSE_MARK, -	SCIF0_SCK_MARK, -	HSPI_CLK_MARK, -	FRE_MARK, -	SCIF0_RXD_MARK, -	HSPI_RX_MARK, -	FRB_MARK, -	SCIF0_TXD_MARK, -	HSPI_TX_MARK, -	FWE_MARK, -	SCIF5_TXD_MARK, -	HAC1_SYNC_MARK, -	SSI1_WS_MARK, -	SIOF_TXD_PJ_MARK, -	HAC0_SDOUT_MARK, -	SSI0_SDATA_MARK, -	SIOF_RXD_PJ_MARK, -	HAC0_SDIN_MARK, -	SSI0_SCK_MARK, -	SIOF_SYNC_PJ_MARK, -	HAC0_SYNC_MARK, -	SSI0_WS_MARK, -	SIOF_MCLK_PJ_MARK, -	HAC_RES_MARK, -	SIOF_SCK_PJ_MARK, -	HAC0_BITCLK_MARK, -	SSI0_CLK_MARK, -	HAC1_BITCLK_MARK, -	SSI1_CLK_MARK, -	TCLK_MARK, -	IOIS16_MARK, -	STATUS0_MARK, -	DRAK0_PK3_MARK, -	STATUS1_MARK, -	DRAK1_PK2_MARK, -	DACK2_MARK, -	SCIF2_TXD_MARK, -	MMCCMD_MARK, -	SIOF_TXD_PK_MARK, -	DACK3_MARK, -	SCIF2_SCK_MARK, -	MMCDAT_MARK, -	SIOF_SCK_PK_MARK, -	DREQ0_MARK, -	DREQ1_MARK, -	DRAK0_PK1_MARK, -	DRAK1_PK0_MARK, -	DREQ2_MARK, -	INTB_MARK, -	DREQ3_MARK, -	INTC_MARK, -	DRAK2_MARK, -	CE2A_MARK, -	IRL4_MARK, -	FD4_MARK, -	IRL5_MARK, -	FD5_MARK, -	IRL6_MARK, -	FD6_MARK, -	IRL7_MARK, -	FD7_MARK, -	DRAK3_MARK, -	CE2B_MARK, -	BREQ_BSACK_MARK, -	BACK_BSREQ_MARK, -	SCIF5_RXD_MARK, -	HAC1_SDIN_MARK, -	SSI1_SCK_MARK, -	SCIF5_SCK_MARK, -	HAC1_SDOUT_MARK, -	SSI1_SDATA_MARK, -	SCIF3_TXD_MARK, -	FCLE_MARK, -	SCIF3_RXD_MARK, -	FALE_MARK, -	SCIF3_SCK_MARK, -	FD0_MARK, -	SCIF4_TXD_MARK, -	FD1_MARK, -	SCIF4_RXD_MARK, -	FD2_MARK, -	SCIF4_SCK_MARK, -	FD3_MARK, -	DEVSEL_DCLKOUT_MARK, -	STOP_CDE_MARK, -	LOCK_ODDF_MARK, -	TRDY_DISPL_MARK, -	IRDY_HSYNC_MARK, -	PCIFRAME_VSYNC_MARK, -	INTA_MARK, -	GNT0_GNTIN_MARK, -	REQ0_REQOUT_MARK, -	PERR_MARK, -	SERR_MARK, -	WE7_CBE3_MARK, -	WE6_CBE2_MARK, -	WE5_CBE1_MARK, -	WE4_CBE0_MARK, -	SCIF2_RXD_MARK, -	SIOF_RXD_MARK, -	MRESETOUT_MARK, -	IRQOUT_MARK, -	PINMUX_MARK_END, -}; - -static pinmux_enum_t pinmux_data[] = { - -	/* PA GPIO */ -	PINMUX_DATA(PA7_DATA, PA7_IN, PA7_OUT, PA7_IN_PU), -	PINMUX_DATA(PA6_DATA, PA6_IN, PA6_OUT, PA6_IN_PU), -	PINMUX_DATA(PA5_DATA, PA5_IN, PA5_OUT, PA5_IN_PU), -	PINMUX_DATA(PA4_DATA, PA4_IN, PA4_OUT, PA4_IN_PU), -	PINMUX_DATA(PA3_DATA, PA3_IN, PA3_OUT, PA3_IN_PU), -	PINMUX_DATA(PA2_DATA, PA2_IN, PA2_OUT, PA2_IN_PU), -	PINMUX_DATA(PA1_DATA, PA1_IN, PA1_OUT, PA1_IN_PU), -	PINMUX_DATA(PA0_DATA, PA0_IN, PA0_OUT, PA0_IN_PU), - -	/* PB GPIO */ -	PINMUX_DATA(PB7_DATA, PB7_IN, PB7_OUT, PB7_IN_PU), -	PINMUX_DATA(PB6_DATA, PB6_IN, PB6_OUT, PB6_IN_PU), -	PINMUX_DATA(PB5_DATA, PB5_IN, PB5_OUT, PB5_IN_PU), -	PINMUX_DATA(PB4_DATA, PB4_IN, PB4_OUT, PB4_IN_PU), -	PINMUX_DATA(PB3_DATA, PB3_IN, PB3_OUT, PB3_IN_PU), -	PINMUX_DATA(PB2_DATA, PB2_IN, PB2_OUT, PB2_IN_PU), -	PINMUX_DATA(PB1_DATA, PB1_IN, PB1_OUT, PB1_IN_PU), -	PINMUX_DATA(PB0_DATA, PB0_IN, PB0_OUT, PB0_IN_PU), - -	/* PC GPIO */ -	PINMUX_DATA(PC7_DATA, PC7_IN, PC7_OUT, PC7_IN_PU), -	PINMUX_DATA(PC6_DATA, PC6_IN, PC6_OUT, PC6_IN_PU), -	PINMUX_DATA(PC5_DATA, PC5_IN, PC5_OUT, PC5_IN_PU), -	PINMUX_DATA(PC4_DATA, PC4_IN, PC4_OUT, PC4_IN_PU), -	PINMUX_DATA(PC3_DATA, PC3_IN, PC3_OUT, PC3_IN_PU), -	PINMUX_DATA(PC2_DATA, PC2_IN, PC2_OUT, PC2_IN_PU), -	PINMUX_DATA(PC1_DATA, PC1_IN, PC1_OUT, PC1_IN_PU), -	PINMUX_DATA(PC0_DATA, PC0_IN, PC0_OUT, PC0_IN_PU), - -	/* PD GPIO */ -	PINMUX_DATA(PD7_DATA, PD7_IN, PD7_OUT, PD7_IN_PU), -	PINMUX_DATA(PD6_DATA, PD6_IN, PD6_OUT, PD6_IN_PU), -	PINMUX_DATA(PD5_DATA, PD5_IN, PD5_OUT, PD5_IN_PU), -	PINMUX_DATA(PD4_DATA, PD4_IN, PD4_OUT, PD4_IN_PU), -	PINMUX_DATA(PD3_DATA, PD3_IN, PD3_OUT, PD3_IN_PU), -	PINMUX_DATA(PD2_DATA, PD2_IN, PD2_OUT, PD2_IN_PU), -	PINMUX_DATA(PD1_DATA, PD1_IN, PD1_OUT, PD1_IN_PU), -	PINMUX_DATA(PD0_DATA, PD0_IN, PD0_OUT, PD0_IN_PU), - -	/* PE GPIO */ -	PINMUX_DATA(PE5_DATA, PE5_IN, PE5_OUT, PE5_IN_PU), -	PINMUX_DATA(PE4_DATA, PE4_IN, PE4_OUT, PE4_IN_PU), -	PINMUX_DATA(PE3_DATA, PE3_IN, PE3_OUT, PE3_IN_PU), -	PINMUX_DATA(PE2_DATA, PE2_IN, PE2_OUT, PE2_IN_PU), -	PINMUX_DATA(PE1_DATA, PE1_IN, PE1_OUT, PE1_IN_PU), -	PINMUX_DATA(PE0_DATA, PE0_IN, PE0_OUT, PE0_IN_PU), - -	/* PF GPIO */ -	PINMUX_DATA(PF7_DATA, PF7_IN, PF7_OUT, PF7_IN_PU), -	PINMUX_DATA(PF6_DATA, PF6_IN, PF6_OUT, PF6_IN_PU), -	PINMUX_DATA(PF5_DATA, PF5_IN, PF5_OUT, PF5_IN_PU), -	PINMUX_DATA(PF4_DATA, PF4_IN, PF4_OUT, PF4_IN_PU), -	PINMUX_DATA(PF3_DATA, PF3_IN, PF3_OUT, PF3_IN_PU), -	PINMUX_DATA(PF2_DATA, PF2_IN, PF2_OUT, PF2_IN_PU), -	PINMUX_DATA(PF1_DATA, PF1_IN, PF1_OUT, PF1_IN_PU), -	PINMUX_DATA(PF0_DATA, PF0_IN, PF0_OUT, PF0_IN_PU), - -	/* PG GPIO */ -	PINMUX_DATA(PG7_DATA, PG7_IN, PG7_OUT, PG7_IN_PU), -	PINMUX_DATA(PG6_DATA, PG6_IN, PG6_OUT, PG6_IN_PU), -	PINMUX_DATA(PG5_DATA, PG5_IN, PG5_OUT, PG5_IN_PU), -	PINMUX_DATA(PG4_DATA, PG4_IN, PG4_OUT, PG4_IN_PU), -	PINMUX_DATA(PG3_DATA, PG3_IN, PG3_OUT, PG3_IN_PU), -	PINMUX_DATA(PG2_DATA, PG2_IN, PG2_OUT, PG2_IN_PU), -	PINMUX_DATA(PG1_DATA, PG1_IN, PG1_OUT, PG1_IN_PU), -	PINMUX_DATA(PG0_DATA, PG0_IN, PG0_OUT, PG0_IN_PU), - -	/* PH GPIO */ -	PINMUX_DATA(PH7_DATA, PH7_IN, PH7_OUT, PH7_IN_PU), -	PINMUX_DATA(PH6_DATA, PH6_IN, PH6_OUT, PH6_IN_PU), -	PINMUX_DATA(PH5_DATA, PH5_IN, PH5_OUT, PH5_IN_PU), -	PINMUX_DATA(PH4_DATA, PH4_IN, PH4_OUT, PH4_IN_PU), -	PINMUX_DATA(PH3_DATA, PH3_IN, PH3_OUT, PH3_IN_PU), -	PINMUX_DATA(PH2_DATA, PH2_IN, PH2_OUT, PH2_IN_PU), -	PINMUX_DATA(PH1_DATA, PH1_IN, PH1_OUT, PH1_IN_PU), -	PINMUX_DATA(PH0_DATA, PH0_IN, PH0_OUT, PH0_IN_PU), - -	/* PJ GPIO */ -	PINMUX_DATA(PJ7_DATA, PJ7_IN, PJ7_OUT, PJ7_IN_PU), -	PINMUX_DATA(PJ6_DATA, PJ6_IN, PJ6_OUT, PJ6_IN_PU), -	PINMUX_DATA(PJ5_DATA, PJ5_IN, PJ5_OUT, PJ5_IN_PU), -	PINMUX_DATA(PJ4_DATA, PJ4_IN, PJ4_OUT, PJ4_IN_PU), -	PINMUX_DATA(PJ3_DATA, PJ3_IN, PJ3_OUT, PJ3_IN_PU), -	PINMUX_DATA(PJ2_DATA, PJ2_IN, PJ2_OUT, PJ2_IN_PU), -	PINMUX_DATA(PJ1_DATA, PJ1_IN, PJ1_OUT, PJ1_IN_PU), -	PINMUX_DATA(PJ0_DATA, PJ0_IN, PJ0_OUT, PJ0_IN_PU), - -	/* PK GPIO */ -	PINMUX_DATA(PK7_DATA, PK7_IN, PK7_OUT, PK7_IN_PU), -	PINMUX_DATA(PK6_DATA, PK6_IN, PK6_OUT, PK6_IN_PU), -	PINMUX_DATA(PK5_DATA, PK5_IN, PK5_OUT, PK5_IN_PU), -	PINMUX_DATA(PK4_DATA, PK4_IN, PK4_OUT, PK4_IN_PU), -	PINMUX_DATA(PK3_DATA, PK3_IN, PK3_OUT, PK3_IN_PU), -	PINMUX_DATA(PK2_DATA, PK2_IN, PK2_OUT, PK2_IN_PU), -	PINMUX_DATA(PK1_DATA, PK1_IN, PK1_OUT, PK1_IN_PU), -	PINMUX_DATA(PK0_DATA, PK0_IN, PK0_OUT, PK0_IN_PU), - -	/* PL GPIO */ -	PINMUX_DATA(PL7_DATA, PL7_IN, PL7_OUT, PL7_IN_PU), -	PINMUX_DATA(PL6_DATA, PL6_IN, PL6_OUT, PL6_IN_PU), -	PINMUX_DATA(PL5_DATA, PL5_IN, PL5_OUT, PL5_IN_PU), -	PINMUX_DATA(PL4_DATA, PL4_IN, PL4_OUT, PL4_IN_PU), -	PINMUX_DATA(PL3_DATA, PL3_IN, PL3_OUT, PL3_IN_PU), -	PINMUX_DATA(PL2_DATA, PL2_IN, PL2_OUT, PL2_IN_PU), -	PINMUX_DATA(PL1_DATA, PL1_IN, PL1_OUT, PL1_IN_PU), -	PINMUX_DATA(PL0_DATA, PL0_IN, PL0_OUT, PL0_IN_PU), - -	/* PM GPIO */ -	PINMUX_DATA(PM1_DATA, PM1_IN, PM1_OUT, PM1_IN_PU), -	PINMUX_DATA(PM0_DATA, PM0_IN, PM0_OUT, PM0_IN_PU), - -	/* PN GPIO */ -	PINMUX_DATA(PN7_DATA, PN7_IN, PN7_OUT, PN7_IN_PU), -	PINMUX_DATA(PN6_DATA, PN6_IN, PN6_OUT, PN6_IN_PU), -	PINMUX_DATA(PN5_DATA, PN5_IN, PN5_OUT, PN5_IN_PU), -	PINMUX_DATA(PN4_DATA, PN4_IN, PN4_OUT, PN4_IN_PU), -	PINMUX_DATA(PN3_DATA, PN3_IN, PN3_OUT, PN3_IN_PU), -	PINMUX_DATA(PN2_DATA, PN2_IN, PN2_OUT, PN2_IN_PU), -	PINMUX_DATA(PN1_DATA, PN1_IN, PN1_OUT, PN1_IN_PU), -	PINMUX_DATA(PN0_DATA, PN0_IN, PN0_OUT, PN0_IN_PU), - -	/* PP GPIO */ -	PINMUX_DATA(PP5_DATA, PP5_IN, PP5_OUT, PP5_IN_PU), -	PINMUX_DATA(PP4_DATA, PP4_IN, PP4_OUT, PP4_IN_PU), -	PINMUX_DATA(PP3_DATA, PP3_IN, PP3_OUT, PP3_IN_PU), -	PINMUX_DATA(PP2_DATA, PP2_IN, PP2_OUT, PP2_IN_PU), -	PINMUX_DATA(PP1_DATA, PP1_IN, PP1_OUT, PP1_IN_PU), -	PINMUX_DATA(PP0_DATA, PP0_IN, PP0_OUT, PP0_IN_PU), - -	/* PQ GPIO */ -	PINMUX_DATA(PQ4_DATA, PQ4_IN, PQ4_OUT, PQ4_IN_PU), -	PINMUX_DATA(PQ3_DATA, PQ3_IN, PQ3_OUT, PQ3_IN_PU), -	PINMUX_DATA(PQ2_DATA, PQ2_IN, PQ2_OUT, PQ2_IN_PU), -	PINMUX_DATA(PQ1_DATA, PQ1_IN, PQ1_OUT, PQ1_IN_PU), -	PINMUX_DATA(PQ0_DATA, PQ0_IN, PQ0_OUT, PQ0_IN_PU), - -	/* PR GPIO */ -	PINMUX_DATA(PR3_DATA, PR3_IN, PR3_OUT, PR3_IN_PU), -	PINMUX_DATA(PR2_DATA, PR2_IN, PR2_OUT, PR2_IN_PU), -	PINMUX_DATA(PR1_DATA, PR1_IN, PR1_OUT, PR1_IN_PU), -	PINMUX_DATA(PR0_DATA, PR0_IN, PR0_OUT, PR0_IN_PU), - -	/* PA FN */ -	PINMUX_DATA(D63_AD31_MARK, PA7_FN), -	PINMUX_DATA(D62_AD30_MARK, PA6_FN), -	PINMUX_DATA(D61_AD29_MARK, PA5_FN), -	PINMUX_DATA(D60_AD28_MARK, PA4_FN), -	PINMUX_DATA(D59_AD27_MARK, PA3_FN), -	PINMUX_DATA(D58_AD26_MARK, PA2_FN), -	PINMUX_DATA(D57_AD25_MARK, PA1_FN), -	PINMUX_DATA(D56_AD24_MARK, PA0_FN), - -	/* PB FN */ -	PINMUX_DATA(D55_AD23_MARK, PB7_FN), -	PINMUX_DATA(D54_AD22_MARK, PB6_FN), -	PINMUX_DATA(D53_AD21_MARK, PB5_FN), -	PINMUX_DATA(D52_AD20_MARK, PB4_FN), -	PINMUX_DATA(D51_AD19_MARK, PB3_FN), -	PINMUX_DATA(D50_AD18_MARK, PB2_FN), -	PINMUX_DATA(D49_AD17_DB5_MARK, PB1_FN), -	PINMUX_DATA(D48_AD16_DB4_MARK, PB0_FN), - -	/* PC FN */ -	PINMUX_DATA(D47_AD15_DB3_MARK, PC7_FN), -	PINMUX_DATA(D46_AD14_DB2_MARK, PC6_FN), -	PINMUX_DATA(D45_AD13_DB1_MARK, PC5_FN), -	PINMUX_DATA(D44_AD12_DB0_MARK, PC4_FN), -	PINMUX_DATA(D43_AD11_DG5_MARK, PC3_FN), -	PINMUX_DATA(D42_AD10_DG4_MARK, PC2_FN), -	PINMUX_DATA(D41_AD9_DG3_MARK, PC1_FN), -	PINMUX_DATA(D40_AD8_DG2_MARK, PC0_FN), - -	/* PD FN */ -	PINMUX_DATA(D39_AD7_DG1_MARK, PD7_FN), -	PINMUX_DATA(D38_AD6_DG0_MARK, PD6_FN), -	PINMUX_DATA(D37_AD5_DR5_MARK, PD5_FN), -	PINMUX_DATA(D36_AD4_DR4_MARK, PD4_FN), -	PINMUX_DATA(D35_AD3_DR3_MARK, PD3_FN), -	PINMUX_DATA(D34_AD2_DR2_MARK, PD2_FN), -	PINMUX_DATA(D33_AD1_DR1_MARK, PD1_FN), -	PINMUX_DATA(D32_AD0_DR0_MARK, PD0_FN), - -	/* PE FN */ -	PINMUX_DATA(REQ1_MARK, PE5_FN), -	PINMUX_DATA(REQ2_MARK, PE4_FN), -	PINMUX_DATA(REQ3_MARK, P2MSEL0_0, PE3_FN), -	PINMUX_DATA(GNT1_MARK, PE2_FN), -	PINMUX_DATA(GNT2_MARK, PE1_FN), -	PINMUX_DATA(GNT3_MARK, P2MSEL0_0, PE0_FN), -	PINMUX_DATA(MMCCLK_MARK, P2MSEL0_1, PE0_FN), - -	/* PF FN */ -	PINMUX_DATA(D31_MARK, PF7_FN), -	PINMUX_DATA(D30_MARK, PF6_FN), -	PINMUX_DATA(D29_MARK, PF5_FN), -	PINMUX_DATA(D28_MARK, PF4_FN), -	PINMUX_DATA(D27_MARK, PF3_FN), -	PINMUX_DATA(D26_MARK, PF2_FN), -	PINMUX_DATA(D25_MARK, PF1_FN), -	PINMUX_DATA(D24_MARK, PF0_FN), - -	/* PF FN */ -	PINMUX_DATA(D23_MARK, PG7_FN), -	PINMUX_DATA(D22_MARK, PG6_FN), -	PINMUX_DATA(D21_MARK, PG5_FN), -	PINMUX_DATA(D20_MARK, PG4_FN), -	PINMUX_DATA(D19_MARK, PG3_FN), -	PINMUX_DATA(D18_MARK, PG2_FN), -	PINMUX_DATA(D17_MARK, PG1_FN), -	PINMUX_DATA(D16_MARK, PG0_FN), - -	/* PH FN */ -	PINMUX_DATA(SCIF1_SCK_MARK, PH7_FN), -	PINMUX_DATA(SCIF1_RXD_MARK, PH6_FN), -	PINMUX_DATA(SCIF1_TXD_MARK, PH5_FN), -	PINMUX_DATA(SCIF0_CTS_MARK, PH4_FN), -	PINMUX_DATA(INTD_MARK, P1MSEL7_1, PH4_FN), -	PINMUX_DATA(FCE_MARK, P1MSEL8_1, P1MSEL7_0, PH4_FN), -	PINMUX_DATA(SCIF0_RTS_MARK, P1MSEL8_0, P1MSEL7_0, PH3_FN), -	PINMUX_DATA(HSPI_CS_MARK, P1MSEL8_0, P1MSEL7_1, PH3_FN), -	PINMUX_DATA(FSE_MARK, P1MSEL8_1, P1MSEL7_0, PH3_FN), -	PINMUX_DATA(SCIF0_SCK_MARK, P1MSEL8_0, P1MSEL7_0, PH2_FN), -	PINMUX_DATA(HSPI_CLK_MARK, P1MSEL8_0, P1MSEL7_1, PH2_FN), -	PINMUX_DATA(FRE_MARK, P1MSEL8_1, P1MSEL7_0, PH2_FN), -	PINMUX_DATA(SCIF0_RXD_MARK, P1MSEL8_0, P1MSEL7_0, PH1_FN), -	PINMUX_DATA(HSPI_RX_MARK, P1MSEL8_0, P1MSEL7_1, PH1_FN), -	PINMUX_DATA(FRB_MARK, P1MSEL8_1, P1MSEL7_0, PH1_FN), -	PINMUX_DATA(SCIF0_TXD_MARK, P1MSEL8_0, P1MSEL7_0, PH0_FN), -	PINMUX_DATA(HSPI_TX_MARK, P1MSEL8_0, P1MSEL7_1, PH0_FN), -	PINMUX_DATA(FWE_MARK, P1MSEL8_1, P1MSEL7_0, PH0_FN), - -	/* PJ FN */ -	PINMUX_DATA(SCIF5_TXD_MARK, P1MSEL2_0, P1MSEL1_0, PJ7_FN), -	PINMUX_DATA(HAC1_SYNC_MARK, P1MSEL2_0, P1MSEL1_1, PJ7_FN), -	PINMUX_DATA(SSI1_WS_MARK, P1MSEL2_1, P1MSEL1_0, PJ7_FN), -	PINMUX_DATA(SIOF_TXD_PJ_MARK, P2MSEL1_0, P1MSEL4_0, P1MSEL3_0, PJ6_FN), -	PINMUX_DATA(HAC0_SDOUT_MARK, P1MSEL4_0, P1MSEL3_1, PJ6_FN), -	PINMUX_DATA(SSI0_SDATA_MARK, P1MSEL4_1, P1MSEL3_0, PJ6_FN), -	PINMUX_DATA(SIOF_RXD_PJ_MARK, P2MSEL1_0, P1MSEL4_0, P1MSEL3_0, PJ5_FN), -	PINMUX_DATA(HAC0_SDIN_MARK, P1MSEL4_0, P1MSEL3_1, PJ5_FN), -	PINMUX_DATA(SSI0_SCK_MARK, P1MSEL4_1, P1MSEL3_0, PJ5_FN), -	PINMUX_DATA(SIOF_SYNC_PJ_MARK, P2MSEL1_0, P1MSEL4_0, P1MSEL3_0, PJ4_FN), -	PINMUX_DATA(HAC0_SYNC_MARK, P1MSEL4_0, P1MSEL3_1, PJ4_FN), -	PINMUX_DATA(SSI0_WS_MARK, P1MSEL4_1, P1MSEL3_0, PJ4_FN), -	PINMUX_DATA(SIOF_MCLK_PJ_MARK, P2MSEL1_0, P1MSEL4_0, P1MSEL3_0, PJ3_FN), -	PINMUX_DATA(HAC_RES_MARK, P1MSEL4_0, P1MSEL3_1, PJ3_FN), -	PINMUX_DATA(SIOF_SCK_PJ_MARK, P2MSEL1_0, P1MSEL4_0, P1MSEL3_0, PJ2_FN), -	PINMUX_DATA(HAC0_BITCLK_MARK, P1MSEL4_0, P1MSEL3_1, PJ2_FN), -	PINMUX_DATA(SSI0_CLK_MARK, P1MSEL4_1, P1MSEL3_0, PJ2_FN), -	PINMUX_DATA(HAC1_BITCLK_MARK, P1MSEL2_0, PJ1_FN), -	PINMUX_DATA(SSI1_CLK_MARK, P1MSEL2_1, P1MSEL1_0, PJ1_FN), -	PINMUX_DATA(TCLK_MARK, P1MSEL9_0, PJ0_FN), -	PINMUX_DATA(IOIS16_MARK, P1MSEL9_1, PJ0_FN), - -	/* PK FN */ -	PINMUX_DATA(STATUS0_MARK, P1MSEL15_0, PK7_FN), -	PINMUX_DATA(DRAK0_PK3_MARK, P1MSEL15_1, PK7_FN), -	PINMUX_DATA(STATUS1_MARK, P1MSEL15_0, PK6_FN), -	PINMUX_DATA(DRAK1_PK2_MARK, P1MSEL15_1, PK6_FN), -	PINMUX_DATA(DACK2_MARK, P1MSEL12_0, P1MSEL11_0, PK5_FN), -	PINMUX_DATA(SCIF2_TXD_MARK, P1MSEL12_1, P1MSEL11_0, PK5_FN), -	PINMUX_DATA(MMCCMD_MARK, P1MSEL12_1, P1MSEL11_1, PK5_FN), -	PINMUX_DATA(SIOF_TXD_PK_MARK, P2MSEL1_1, -		    P1MSEL12_0, P1MSEL11_1, PK5_FN), -	PINMUX_DATA(DACK3_MARK, P1MSEL12_0, P1MSEL11_0, PK4_FN), -	PINMUX_DATA(SCIF2_SCK_MARK, P1MSEL12_1, P1MSEL11_0, PK4_FN), -	PINMUX_DATA(MMCDAT_MARK, P1MSEL12_1, P1MSEL11_1, PK4_FN), -	PINMUX_DATA(SIOF_SCK_PK_MARK, P2MSEL1_1, -		    P1MSEL12_0, P1MSEL11_1, PK4_FN), -	PINMUX_DATA(DREQ0_MARK, PK3_FN), -	PINMUX_DATA(DREQ1_MARK, PK2_FN), -	PINMUX_DATA(DRAK0_PK1_MARK, PK1_FN), -	PINMUX_DATA(DRAK1_PK0_MARK, PK0_FN), - -	/* PL FN */ -	PINMUX_DATA(DREQ2_MARK, P1MSEL13_0, PL7_FN), -	PINMUX_DATA(INTB_MARK, P1MSEL13_1, PL7_FN), -	PINMUX_DATA(DREQ3_MARK, P1MSEL13_0, PL6_FN), -	PINMUX_DATA(INTC_MARK, P1MSEL13_1, PL6_FN), -	PINMUX_DATA(DRAK2_MARK, P1MSEL10_0, PL5_FN), -	PINMUX_DATA(CE2A_MARK, P1MSEL10_1, PL5_FN), -	PINMUX_DATA(IRL4_MARK, P1MSEL14_0, PL4_FN), -	PINMUX_DATA(FD4_MARK, P1MSEL14_1, PL4_FN), -	PINMUX_DATA(IRL5_MARK, P1MSEL14_0, PL3_FN), -	PINMUX_DATA(FD5_MARK, P1MSEL14_1, PL3_FN), -	PINMUX_DATA(IRL6_MARK, P1MSEL14_0, PL2_FN), -	PINMUX_DATA(FD6_MARK, P1MSEL14_1, PL2_FN), -	PINMUX_DATA(IRL7_MARK, P1MSEL14_0, PL1_FN), -	PINMUX_DATA(FD7_MARK, P1MSEL14_1, PL1_FN), -	PINMUX_DATA(DRAK3_MARK, P1MSEL10_0, PL0_FN), -	PINMUX_DATA(CE2B_MARK, P1MSEL10_1, PL0_FN), - -	/* PM FN */ -	PINMUX_DATA(BREQ_BSACK_MARK, PM1_FN), -	PINMUX_DATA(BACK_BSREQ_MARK, PM0_FN), - -	/* PN FN */ -	PINMUX_DATA(SCIF5_RXD_MARK, P1MSEL2_0, P1MSEL1_0, PN7_FN), -	PINMUX_DATA(HAC1_SDIN_MARK, P1MSEL2_0, P1MSEL1_1, PN7_FN), -	PINMUX_DATA(SSI1_SCK_MARK, P1MSEL2_1, P1MSEL1_0, PN7_FN), -	PINMUX_DATA(SCIF5_SCK_MARK, P1MSEL2_0, P1MSEL1_0, PN6_FN), -	PINMUX_DATA(HAC1_SDOUT_MARK, P1MSEL2_0, P1MSEL1_1, PN6_FN), -	PINMUX_DATA(SSI1_SDATA_MARK, P1MSEL2_1, P1MSEL1_0, PN6_FN), -	PINMUX_DATA(SCIF3_TXD_MARK, P1MSEL0_0, PN5_FN), -	PINMUX_DATA(FCLE_MARK, P1MSEL0_1, PN5_FN), -	PINMUX_DATA(SCIF3_RXD_MARK, P1MSEL0_0, PN4_FN), -	PINMUX_DATA(FALE_MARK, P1MSEL0_1, PN4_FN), -	PINMUX_DATA(SCIF3_SCK_MARK, P1MSEL0_0, PN3_FN), -	PINMUX_DATA(FD0_MARK, P1MSEL0_1, PN3_FN), -	PINMUX_DATA(SCIF4_TXD_MARK, P1MSEL0_0, PN2_FN), -	PINMUX_DATA(FD1_MARK, P1MSEL0_1, PN2_FN), -	PINMUX_DATA(SCIF4_RXD_MARK, P1MSEL0_0, PN1_FN), -	PINMUX_DATA(FD2_MARK, P1MSEL0_1, PN1_FN), -	PINMUX_DATA(SCIF4_SCK_MARK, P1MSEL0_0, PN0_FN), -	PINMUX_DATA(FD3_MARK, P1MSEL0_1, PN0_FN), - -	/* PP FN */ -	PINMUX_DATA(DEVSEL_DCLKOUT_MARK, PP5_FN), -	PINMUX_DATA(STOP_CDE_MARK, PP4_FN), -	PINMUX_DATA(LOCK_ODDF_MARK, PP3_FN), -	PINMUX_DATA(TRDY_DISPL_MARK, PP2_FN), -	PINMUX_DATA(IRDY_HSYNC_MARK, PP1_FN), -	PINMUX_DATA(PCIFRAME_VSYNC_MARK, PP0_FN), - -	/* PQ FN */ -	PINMUX_DATA(INTA_MARK, PQ4_FN), -	PINMUX_DATA(GNT0_GNTIN_MARK, PQ3_FN), -	PINMUX_DATA(REQ0_REQOUT_MARK, PQ2_FN), -	PINMUX_DATA(PERR_MARK, PQ1_FN), -	PINMUX_DATA(SERR_MARK, PQ0_FN), - -	/* PR FN */ -	PINMUX_DATA(WE7_CBE3_MARK, PR3_FN), -	PINMUX_DATA(WE6_CBE2_MARK, PR2_FN), -	PINMUX_DATA(WE5_CBE1_MARK, PR1_FN), -	PINMUX_DATA(WE4_CBE0_MARK, PR0_FN), - -	/* MISC FN */ -	PINMUX_DATA(SCIF2_RXD_MARK, P1MSEL6_0, P1MSEL5_0), -	PINMUX_DATA(SIOF_RXD_MARK, P2MSEL1_1, P1MSEL6_1, P1MSEL5_0), -	PINMUX_DATA(MRESETOUT_MARK, P2MSEL2_0), -	PINMUX_DATA(IRQOUT_MARK, P2MSEL2_1), -}; - -static struct pinmux_gpio pinmux_gpios[] = { -	/* PA */ -	PINMUX_GPIO(GPIO_PA7, PA7_DATA), -	PINMUX_GPIO(GPIO_PA6, PA6_DATA), -	PINMUX_GPIO(GPIO_PA5, PA5_DATA), -	PINMUX_GPIO(GPIO_PA4, PA4_DATA), -	PINMUX_GPIO(GPIO_PA3, PA3_DATA), -	PINMUX_GPIO(GPIO_PA2, PA2_DATA), -	PINMUX_GPIO(GPIO_PA1, PA1_DATA), -	PINMUX_GPIO(GPIO_PA0, PA0_DATA), - -	/* PB */ -	PINMUX_GPIO(GPIO_PB7, PB7_DATA), -	PINMUX_GPIO(GPIO_PB6, PB6_DATA), -	PINMUX_GPIO(GPIO_PB5, PB5_DATA), -	PINMUX_GPIO(GPIO_PB4, PB4_DATA), -	PINMUX_GPIO(GPIO_PB3, PB3_DATA), -	PINMUX_GPIO(GPIO_PB2, PB2_DATA), -	PINMUX_GPIO(GPIO_PB1, PB1_DATA), -	PINMUX_GPIO(GPIO_PB0, PB0_DATA), - -	/* PC */ -	PINMUX_GPIO(GPIO_PC7, PC7_DATA), -	PINMUX_GPIO(GPIO_PC6, PC6_DATA), -	PINMUX_GPIO(GPIO_PC5, PC5_DATA), -	PINMUX_GPIO(GPIO_PC4, PC4_DATA), -	PINMUX_GPIO(GPIO_PC3, PC3_DATA), -	PINMUX_GPIO(GPIO_PC2, PC2_DATA), -	PINMUX_GPIO(GPIO_PC1, PC1_DATA), -	PINMUX_GPIO(GPIO_PC0, PC0_DATA), - -	/* PD */ -	PINMUX_GPIO(GPIO_PD7, PD7_DATA), -	PINMUX_GPIO(GPIO_PD6, PD6_DATA), -	PINMUX_GPIO(GPIO_PD5, PD5_DATA), -	PINMUX_GPIO(GPIO_PD4, PD4_DATA), -	PINMUX_GPIO(GPIO_PD3, PD3_DATA), -	PINMUX_GPIO(GPIO_PD2, PD2_DATA), -	PINMUX_GPIO(GPIO_PD1, PD1_DATA), -	PINMUX_GPIO(GPIO_PD0, PD0_DATA), - -	/* PE */ -	PINMUX_GPIO(GPIO_PE5, PE5_DATA), -	PINMUX_GPIO(GPIO_PE4, PE4_DATA), -	PINMUX_GPIO(GPIO_PE3, PE3_DATA), -	PINMUX_GPIO(GPIO_PE2, PE2_DATA), -	PINMUX_GPIO(GPIO_PE1, PE1_DATA), -	PINMUX_GPIO(GPIO_PE0, PE0_DATA), - -	/* PF */ -	PINMUX_GPIO(GPIO_PF7, PF7_DATA), -	PINMUX_GPIO(GPIO_PF6, PF6_DATA), -	PINMUX_GPIO(GPIO_PF5, PF5_DATA), -	PINMUX_GPIO(GPIO_PF4, PF4_DATA), -	PINMUX_GPIO(GPIO_PF3, PF3_DATA), -	PINMUX_GPIO(GPIO_PF2, PF2_DATA), -	PINMUX_GPIO(GPIO_PF1, PF1_DATA), -	PINMUX_GPIO(GPIO_PF0, PF0_DATA), - -	/* PG */ -	PINMUX_GPIO(GPIO_PG7, PG7_DATA), -	PINMUX_GPIO(GPIO_PG6, PG6_DATA), -	PINMUX_GPIO(GPIO_PG5, PG5_DATA), -	PINMUX_GPIO(GPIO_PG4, PG4_DATA), -	PINMUX_GPIO(GPIO_PG3, PG3_DATA), -	PINMUX_GPIO(GPIO_PG2, PG2_DATA), -	PINMUX_GPIO(GPIO_PG1, PG1_DATA), -	PINMUX_GPIO(GPIO_PG0, PG0_DATA), - -	/* PH */ -	PINMUX_GPIO(GPIO_PH7, PH7_DATA), -	PINMUX_GPIO(GPIO_PH6, PH6_DATA), -	PINMUX_GPIO(GPIO_PH5, PH5_DATA), -	PINMUX_GPIO(GPIO_PH4, PH4_DATA), -	PINMUX_GPIO(GPIO_PH3, PH3_DATA), -	PINMUX_GPIO(GPIO_PH2, PH2_DATA), -	PINMUX_GPIO(GPIO_PH1, PH1_DATA), -	PINMUX_GPIO(GPIO_PH0, PH0_DATA), - -	/* PJ */ -	PINMUX_GPIO(GPIO_PJ7, PJ7_DATA), -	PINMUX_GPIO(GPIO_PJ6, PJ6_DATA), -	PINMUX_GPIO(GPIO_PJ5, PJ5_DATA), -	PINMUX_GPIO(GPIO_PJ4, PJ4_DATA), -	PINMUX_GPIO(GPIO_PJ3, PJ3_DATA), -	PINMUX_GPIO(GPIO_PJ2, PJ2_DATA), -	PINMUX_GPIO(GPIO_PJ1, PJ1_DATA), -	PINMUX_GPIO(GPIO_PJ0, PJ0_DATA), - -	/* PK */ -	PINMUX_GPIO(GPIO_PK7, PK7_DATA), -	PINMUX_GPIO(GPIO_PK6, PK6_DATA), -	PINMUX_GPIO(GPIO_PK5, PK5_DATA), -	PINMUX_GPIO(GPIO_PK4, PK4_DATA), -	PINMUX_GPIO(GPIO_PK3, PK3_DATA), -	PINMUX_GPIO(GPIO_PK2, PK2_DATA), -	PINMUX_GPIO(GPIO_PK1, PK1_DATA), -	PINMUX_GPIO(GPIO_PK0, PK0_DATA), - -	/* PL */ -	PINMUX_GPIO(GPIO_PL7, PL7_DATA), -	PINMUX_GPIO(GPIO_PL6, PL6_DATA), -	PINMUX_GPIO(GPIO_PL5, PL5_DATA), -	PINMUX_GPIO(GPIO_PL4, PL4_DATA), -	PINMUX_GPIO(GPIO_PL3, PL3_DATA), -	PINMUX_GPIO(GPIO_PL2, PL2_DATA), -	PINMUX_GPIO(GPIO_PL1, PL1_DATA), -	PINMUX_GPIO(GPIO_PL0, PL0_DATA), - -	/* PM */ -	PINMUX_GPIO(GPIO_PM1, PM1_DATA), -	PINMUX_GPIO(GPIO_PM0, PM0_DATA), - -	/* PN */ -	PINMUX_GPIO(GPIO_PN7, PN7_DATA), -	PINMUX_GPIO(GPIO_PN6, PN6_DATA), -	PINMUX_GPIO(GPIO_PN5, PN5_DATA), -	PINMUX_GPIO(GPIO_PN4, PN4_DATA), -	PINMUX_GPIO(GPIO_PN3, PN3_DATA), -	PINMUX_GPIO(GPIO_PN2, PN2_DATA), -	PINMUX_GPIO(GPIO_PN1, PN1_DATA), -	PINMUX_GPIO(GPIO_PN0, PN0_DATA), - -	/* PP */ -	PINMUX_GPIO(GPIO_PP5, PP5_DATA), -	PINMUX_GPIO(GPIO_PP4, PP4_DATA), -	PINMUX_GPIO(GPIO_PP3, PP3_DATA), -	PINMUX_GPIO(GPIO_PP2, PP2_DATA), -	PINMUX_GPIO(GPIO_PP1, PP1_DATA), -	PINMUX_GPIO(GPIO_PP0, PP0_DATA), - -	/* PQ */ -	PINMUX_GPIO(GPIO_PQ4, PQ4_DATA), -	PINMUX_GPIO(GPIO_PQ3, PQ3_DATA), -	PINMUX_GPIO(GPIO_PQ2, PQ2_DATA), -	PINMUX_GPIO(GPIO_PQ1, PQ1_DATA), -	PINMUX_GPIO(GPIO_PQ0, PQ0_DATA), - -	/* PR */ -	PINMUX_GPIO(GPIO_PR3, PR3_DATA), -	PINMUX_GPIO(GPIO_PR2, PR2_DATA), -	PINMUX_GPIO(GPIO_PR1, PR1_DATA), -	PINMUX_GPIO(GPIO_PR0, PR0_DATA), - -	/* FN */ -	PINMUX_GPIO(GPIO_FN_D63_AD31, D63_AD31_MARK), -	PINMUX_GPIO(GPIO_FN_D62_AD30, D62_AD30_MARK), -	PINMUX_GPIO(GPIO_FN_D61_AD29, D61_AD29_MARK), -	PINMUX_GPIO(GPIO_FN_D60_AD28, D60_AD28_MARK), -	PINMUX_GPIO(GPIO_FN_D59_AD27, D59_AD27_MARK), -	PINMUX_GPIO(GPIO_FN_D58_AD26, D58_AD26_MARK), -	PINMUX_GPIO(GPIO_FN_D57_AD25, D57_AD25_MARK), -	PINMUX_GPIO(GPIO_FN_D56_AD24, D56_AD24_MARK), -	PINMUX_GPIO(GPIO_FN_D55_AD23, D55_AD23_MARK), -	PINMUX_GPIO(GPIO_FN_D54_AD22, D54_AD22_MARK), -	PINMUX_GPIO(GPIO_FN_D53_AD21, D53_AD21_MARK), -	PINMUX_GPIO(GPIO_FN_D52_AD20, D52_AD20_MARK), -	PINMUX_GPIO(GPIO_FN_D51_AD19, D51_AD19_MARK), -	PINMUX_GPIO(GPIO_FN_D50_AD18, D50_AD18_MARK), -	PINMUX_GPIO(GPIO_FN_D49_AD17_DB5, D49_AD17_DB5_MARK), -	PINMUX_GPIO(GPIO_FN_D48_AD16_DB4, D48_AD16_DB4_MARK), -	PINMUX_GPIO(GPIO_FN_D47_AD15_DB3, D47_AD15_DB3_MARK), -	PINMUX_GPIO(GPIO_FN_D46_AD14_DB2, D46_AD14_DB2_MARK), -	PINMUX_GPIO(GPIO_FN_D45_AD13_DB1, D45_AD13_DB1_MARK), -	PINMUX_GPIO(GPIO_FN_D44_AD12_DB0, D44_AD12_DB0_MARK), -	PINMUX_GPIO(GPIO_FN_D43_AD11_DG5, D43_AD11_DG5_MARK), -	PINMUX_GPIO(GPIO_FN_D42_AD10_DG4, D42_AD10_DG4_MARK), -	PINMUX_GPIO(GPIO_FN_D41_AD9_DG3, D41_AD9_DG3_MARK), -	PINMUX_GPIO(GPIO_FN_D40_AD8_DG2, D40_AD8_DG2_MARK), -	PINMUX_GPIO(GPIO_FN_D39_AD7_DG1, D39_AD7_DG1_MARK), -	PINMUX_GPIO(GPIO_FN_D38_AD6_DG0, D38_AD6_DG0_MARK), -	PINMUX_GPIO(GPIO_FN_D37_AD5_DR5, D37_AD5_DR5_MARK), -	PINMUX_GPIO(GPIO_FN_D36_AD4_DR4, D36_AD4_DR4_MARK), -	PINMUX_GPIO(GPIO_FN_D35_AD3_DR3, D35_AD3_DR3_MARK), -	PINMUX_GPIO(GPIO_FN_D34_AD2_DR2, D34_AD2_DR2_MARK), -	PINMUX_GPIO(GPIO_FN_D33_AD1_DR1, D33_AD1_DR1_MARK), -	PINMUX_GPIO(GPIO_FN_D32_AD0_DR0, D32_AD0_DR0_MARK), -	PINMUX_GPIO(GPIO_FN_REQ1, REQ1_MARK), -	PINMUX_GPIO(GPIO_FN_REQ2, REQ2_MARK), -	PINMUX_GPIO(GPIO_FN_REQ3, REQ3_MARK), -	PINMUX_GPIO(GPIO_FN_GNT1, GNT1_MARK), -	PINMUX_GPIO(GPIO_FN_GNT2, GNT2_MARK), -	PINMUX_GPIO(GPIO_FN_GNT3, GNT3_MARK), -	PINMUX_GPIO(GPIO_FN_MMCCLK, MMCCLK_MARK), -	PINMUX_GPIO(GPIO_FN_D31, D31_MARK), -	PINMUX_GPIO(GPIO_FN_D30, D30_MARK), -	PINMUX_GPIO(GPIO_FN_D29, D29_MARK), -	PINMUX_GPIO(GPIO_FN_D28, D28_MARK), -	PINMUX_GPIO(GPIO_FN_D27, D27_MARK), -	PINMUX_GPIO(GPIO_FN_D26, D26_MARK), -	PINMUX_GPIO(GPIO_FN_D25, D25_MARK), -	PINMUX_GPIO(GPIO_FN_D24, D24_MARK), -	PINMUX_GPIO(GPIO_FN_D23, D23_MARK), -	PINMUX_GPIO(GPIO_FN_D22, D22_MARK), -	PINMUX_GPIO(GPIO_FN_D21, D21_MARK), -	PINMUX_GPIO(GPIO_FN_D20, D20_MARK), -	PINMUX_GPIO(GPIO_FN_D19, D19_MARK), -	PINMUX_GPIO(GPIO_FN_D18, D18_MARK), -	PINMUX_GPIO(GPIO_FN_D17, D17_MARK), -	PINMUX_GPIO(GPIO_FN_D16, D16_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_SCK, SCIF1_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_RXD, SCIF1_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_TXD, SCIF1_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_CTS, SCIF0_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_INTD, INTD_MARK), -	PINMUX_GPIO(GPIO_FN_FCE, FCE_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_RTS, SCIF0_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_HSPI_CS, HSPI_CS_MARK), -	PINMUX_GPIO(GPIO_FN_FSE, FSE_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_SCK, SCIF0_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_HSPI_CLK, HSPI_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_FRE, FRE_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_RXD, SCIF0_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_HSPI_RX, HSPI_RX_MARK), -	PINMUX_GPIO(GPIO_FN_FRB, FRB_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_TXD, SCIF0_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_HSPI_TX, HSPI_TX_MARK), -	PINMUX_GPIO(GPIO_FN_FWE, FWE_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_TXD, SCIF5_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_HAC1_SYNC, HAC1_SYNC_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_WS, SSI1_WS_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF_TXD_PJ, SIOF_TXD_PJ_MARK), -	PINMUX_GPIO(GPIO_FN_HAC0_SDOUT, HAC0_SDOUT_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_SDATA, SSI0_SDATA_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF_RXD_PJ, SIOF_RXD_PJ_MARK), -	PINMUX_GPIO(GPIO_FN_HAC0_SDIN, HAC0_SDIN_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_SCK, SSI0_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF_SYNC_PJ, SIOF_SYNC_PJ_MARK), -	PINMUX_GPIO(GPIO_FN_HAC0_SYNC, HAC0_SYNC_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_WS, SSI0_WS_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF_MCLK_PJ, SIOF_MCLK_PJ_MARK), -	PINMUX_GPIO(GPIO_FN_HAC_RES, HAC_RES_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF_SCK_PJ, SIOF_SCK_PJ_MARK), -	PINMUX_GPIO(GPIO_FN_HAC0_BITCLK, HAC0_BITCLK_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_CLK, SSI0_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_HAC1_BITCLK, HAC1_BITCLK_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_CLK, SSI1_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_TCLK, TCLK_MARK), -	PINMUX_GPIO(GPIO_FN_IOIS16, IOIS16_MARK), -	PINMUX_GPIO(GPIO_FN_STATUS0, STATUS0_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK0_PK3, DRAK0_PK3_MARK), -	PINMUX_GPIO(GPIO_FN_STATUS1, STATUS1_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK1_PK2, DRAK1_PK2_MARK), -	PINMUX_GPIO(GPIO_FN_DACK2, DACK2_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_TXD, SCIF2_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_MMCCMD, MMCCMD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF_TXD_PK, SIOF_TXD_PK_MARK), -	PINMUX_GPIO(GPIO_FN_DACK3, DACK3_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_SCK, SCIF2_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_MMCDAT, MMCDAT_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF_SCK_PK, SIOF_SCK_PK_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ0, DREQ0_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ1, DREQ1_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK0_PK1, DRAK0_PK1_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK1_PK0, DRAK1_PK0_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ2, DREQ2_MARK), -	PINMUX_GPIO(GPIO_FN_INTB, INTB_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ3, DREQ3_MARK), -	PINMUX_GPIO(GPIO_FN_INTC, INTC_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK2, DRAK2_MARK), -	PINMUX_GPIO(GPIO_FN_CE2A, CE2A_MARK), -	PINMUX_GPIO(GPIO_FN_IRL4, IRL4_MARK), -	PINMUX_GPIO(GPIO_FN_FD4, FD4_MARK), -	PINMUX_GPIO(GPIO_FN_IRL5, IRL5_MARK), -	PINMUX_GPIO(GPIO_FN_FD5, FD5_MARK), -	PINMUX_GPIO(GPIO_FN_IRL6, IRL6_MARK), -	PINMUX_GPIO(GPIO_FN_FD6, FD6_MARK), -	PINMUX_GPIO(GPIO_FN_IRL7, IRL7_MARK), -	PINMUX_GPIO(GPIO_FN_FD7, FD7_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK3, DRAK3_MARK), -	PINMUX_GPIO(GPIO_FN_CE2B, CE2B_MARK), -	PINMUX_GPIO(GPIO_FN_BREQ_BSACK, BREQ_BSACK_MARK), -	PINMUX_GPIO(GPIO_FN_BACK_BSREQ, BACK_BSREQ_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_RXD, SCIF5_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_HAC1_SDIN, HAC1_SDIN_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_SCK, SSI1_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_SCK, SCIF5_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_HAC1_SDOUT, HAC1_SDOUT_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_SDATA, SSI1_SDATA_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_TXD, SCIF3_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_FCLE, FCLE_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_RXD, SCIF3_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_FALE, FALE_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_SCK, SCIF3_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_FD0, FD0_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_TXD, SCIF4_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_FD1, FD1_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_RXD, SCIF4_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_FD2, FD2_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_SCK, SCIF4_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_FD3, FD3_MARK), -	PINMUX_GPIO(GPIO_FN_DEVSEL_DCLKOUT, DEVSEL_DCLKOUT_MARK), -	PINMUX_GPIO(GPIO_FN_STOP_CDE, STOP_CDE_MARK), -	PINMUX_GPIO(GPIO_FN_LOCK_ODDF, LOCK_ODDF_MARK), -	PINMUX_GPIO(GPIO_FN_TRDY_DISPL, TRDY_DISPL_MARK), -	PINMUX_GPIO(GPIO_FN_IRDY_HSYNC, IRDY_HSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_PCIFRAME_VSYNC, PCIFRAME_VSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_INTA, INTA_MARK), -	PINMUX_GPIO(GPIO_FN_GNT0_GNTIN, GNT0_GNTIN_MARK), -	PINMUX_GPIO(GPIO_FN_REQ0_REQOUT, REQ0_REQOUT_MARK), -	PINMUX_GPIO(GPIO_FN_PERR, PERR_MARK), -	PINMUX_GPIO(GPIO_FN_SERR, SERR_MARK), -	PINMUX_GPIO(GPIO_FN_WE7_CBE3, WE7_CBE3_MARK), -	PINMUX_GPIO(GPIO_FN_WE6_CBE2, WE6_CBE2_MARK), -	PINMUX_GPIO(GPIO_FN_WE5_CBE1, WE5_CBE1_MARK), -	PINMUX_GPIO(GPIO_FN_WE4_CBE0, WE4_CBE0_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF2_RXD, SCIF2_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SIOF_RXD, SIOF_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_MRESETOUT, MRESETOUT_MARK), -	PINMUX_GPIO(GPIO_FN_IRQOUT, IRQOUT_MARK), -}; - -static struct pinmux_cfg_reg pinmux_config_regs[] = { -	{ PINMUX_CFG_REG("PACR", 0xffe70000, 16, 2) { -		PA7_FN, PA7_OUT, PA7_IN, PA7_IN_PU, -		PA6_FN, PA6_OUT, PA6_IN, PA6_IN_PU, -		PA5_FN, PA5_OUT, PA5_IN, PA5_IN_PU, -		PA4_FN, PA4_OUT, PA4_IN, PA4_IN_PU, -		PA3_FN, PA3_OUT, PA3_IN, PA3_IN_PU, -		PA2_FN, PA2_OUT, PA2_IN, PA2_IN_PU, -		PA1_FN, PA1_OUT, PA1_IN, PA1_IN_PU, -		PA0_FN, PA0_OUT, PA0_IN, PA0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PBCR", 0xffe70002, 16, 2) { -		PB7_FN, PB7_OUT, PB7_IN, PB7_IN_PU, -		PB6_FN, PB6_OUT, PB6_IN, PB6_IN_PU, -		PB5_FN, PB5_OUT, PB5_IN, PB5_IN_PU, -		PB4_FN, PB4_OUT, PB4_IN, PB4_IN_PU, -		PB3_FN, PB3_OUT, PB3_IN, PB3_IN_PU, -		PB2_FN, PB2_OUT, PB2_IN, PB2_IN_PU, -		PB1_FN, PB1_OUT, PB1_IN, PB1_IN_PU, -		PB0_FN, PB0_OUT, PB0_IN, PB0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PCCR", 0xffe70004, 16, 2) { -		PC7_FN, PC7_OUT, PC7_IN, PC7_IN_PU, -		PC6_FN, PC6_OUT, PC6_IN, PC6_IN_PU, -		PC5_FN, PC5_OUT, PC5_IN, PC5_IN_PU, -		PC4_FN, PC4_OUT, PC4_IN, PC4_IN_PU, -		PC3_FN, PC3_OUT, PC3_IN, PC3_IN_PU, -		PC2_FN, PC2_OUT, PC2_IN, PC2_IN_PU, -		PC1_FN, PC1_OUT, PC1_IN, PC1_IN_PU, -		PC0_FN, PC0_OUT, PC0_IN, PC0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PDCR", 0xffe70006, 16, 2) { -		PD7_FN, PD7_OUT, PD7_IN, PD7_IN_PU, -		PD6_FN, PD6_OUT, PD6_IN, PD6_IN_PU, -		PD5_FN, PD5_OUT, PD5_IN, PD5_IN_PU, -		PD4_FN, PD4_OUT, PD4_IN, PD4_IN_PU, -		PD3_FN, PD3_OUT, PD3_IN, PD3_IN_PU, -		PD2_FN, PD2_OUT, PD2_IN, PD2_IN_PU, -		PD1_FN, PD1_OUT, PD1_IN, PD1_IN_PU, -		PD0_FN, PD0_OUT, PD0_IN, PD0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PECR", 0xffe70008, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		PE5_FN, PE5_OUT, PE5_IN, PE5_IN_PU, -		PE4_FN, PE4_OUT, PE4_IN, PE4_IN_PU, -		PE3_FN, PE3_OUT, PE3_IN, PE3_IN_PU, -		PE2_FN, PE2_OUT, PE2_IN, PE2_IN_PU, -		PE1_FN, PE1_OUT, PE1_IN, PE1_IN_PU, -		PE0_FN, PE0_OUT, PE0_IN, PE0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PFCR", 0xffe7000a, 16, 2) { -		PF7_FN, PF7_OUT, PF7_IN, PF7_IN_PU, -		PF6_FN, PF6_OUT, PF6_IN, PF6_IN_PU, -		PF5_FN, PF5_OUT, PF5_IN, PF5_IN_PU, -		PF4_FN, PF4_OUT, PF4_IN, PF4_IN_PU, -		PF3_FN, PF3_OUT, PF3_IN, PF3_IN_PU, -		PF2_FN, PF2_OUT, PF2_IN, PF2_IN_PU, -		PF1_FN, PF1_OUT, PF1_IN, PF1_IN_PU, -		PF0_FN, PF0_OUT, PF0_IN, PF0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PGCR", 0xffe7000c, 16, 2) { -		PG7_FN, PG7_OUT, PG7_IN, PG7_IN_PU, -		PG6_FN, PG6_OUT, PG6_IN, PG6_IN_PU, -		PG5_FN, PG5_OUT, PG5_IN, PG5_IN_PU, -		PG4_FN, PG4_OUT, PG4_IN, PG4_IN_PU, -		PG3_FN, PG3_OUT, PG3_IN, PG3_IN_PU, -		PG2_FN, PG2_OUT, PG2_IN, PG2_IN_PU, -		PG1_FN, PG1_OUT, PG1_IN, PG1_IN_PU, -		PG0_FN, PG0_OUT, PG0_IN, PG0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PHCR", 0xffe7000e, 16, 2) { -		PH7_FN, PH7_OUT, PH7_IN, PH7_IN_PU, -		PH6_FN, PH6_OUT, PH6_IN, PH6_IN_PU, -		PH5_FN, PH5_OUT, PH5_IN, PH5_IN_PU, -		PH4_FN, PH4_OUT, PH4_IN, PH4_IN_PU, -		PH3_FN, PH3_OUT, PH3_IN, PH3_IN_PU, -		PH2_FN, PH2_OUT, PH2_IN, PH2_IN_PU, -		PH1_FN, PH1_OUT, PH1_IN, PH1_IN_PU, -		PH0_FN, PH0_OUT, PH0_IN, PH0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PJCR", 0xffe70010, 16, 2) { -		PJ7_FN, PJ7_OUT, PJ7_IN, PJ7_IN_PU, -		PJ6_FN, PJ6_OUT, PJ6_IN, PJ6_IN_PU, -		PJ5_FN, PJ5_OUT, PJ5_IN, PJ5_IN_PU, -		PJ4_FN, PJ4_OUT, PJ4_IN, PJ4_IN_PU, -		PJ3_FN, PJ3_OUT, PJ3_IN, PJ3_IN_PU, -		PJ2_FN, PJ2_OUT, PJ2_IN, PJ2_IN_PU, -		PJ1_FN, PJ1_OUT, PJ1_IN, PJ1_IN_PU, -		PJ0_FN, PJ0_OUT, PJ0_IN, PJ0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PKCR", 0xffe70012, 16, 2) { -		PK7_FN, PK7_OUT, PK7_IN, PK7_IN_PU, -		PK6_FN, PK6_OUT, PK6_IN, PK6_IN_PU, -		PK5_FN, PK5_OUT, PK5_IN, PK5_IN_PU, -		PK4_FN, PK4_OUT, PK4_IN, PK4_IN_PU, -		PK3_FN, PK3_OUT, PK3_IN, PK3_IN_PU, -		PK2_FN, PK2_OUT, PK2_IN, PK2_IN_PU, -		PK1_FN, PK1_OUT, PK1_IN, PK1_IN_PU, -		PK0_FN, PK0_OUT, PK0_IN, PK0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PLCR", 0xffe70014, 16, 2) { -		PL7_FN, PL7_OUT, PL7_IN, PL7_IN_PU, -		PL6_FN, PL6_OUT, PL6_IN, PL6_IN_PU, -		PL5_FN, PL5_OUT, PL5_IN, PL5_IN_PU, -		PL4_FN, PL4_OUT, PL4_IN, PL4_IN_PU, -		PL3_FN, PL3_OUT, PL3_IN, PL3_IN_PU, -		PL2_FN, PL2_OUT, PL2_IN, PL2_IN_PU, -		PL1_FN, PL1_OUT, PL1_IN, PL1_IN_PU, -		PL0_FN, PL0_OUT, PL0_IN, PL0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PMCR", 0xffe70016, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PM1_FN, PM1_OUT, PM1_IN, PM1_IN_PU, -		PM0_FN, PM0_OUT, PM0_IN, PM0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PNCR", 0xffe70018, 16, 2) { -		PN7_FN, PN7_OUT, PN7_IN, PN7_IN_PU, -		PN6_FN, PN6_OUT, PN6_IN, PN6_IN_PU, -		PN5_FN, PN5_OUT, PN5_IN, PN5_IN_PU, -		PN4_FN, PN4_OUT, PN4_IN, PN4_IN_PU, -		PN3_FN, PN3_OUT, PN3_IN, PN3_IN_PU, -		PN2_FN, PN2_OUT, PN2_IN, PN2_IN_PU, -		PN1_FN, PN1_OUT, PN1_IN, PN1_IN_PU, -		PN0_FN, PN0_OUT, PN0_IN, PN0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PPCR", 0xffe7001a, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		PP5_FN, PP5_OUT, PP5_IN, PP5_IN_PU, -		PP4_FN, PP4_OUT, PP4_IN, PP4_IN_PU, -		PP3_FN, PP3_OUT, PP3_IN, PP3_IN_PU, -		PP2_FN, PP2_OUT, PP2_IN, PP2_IN_PU, -		PP1_FN, PP1_OUT, PP1_IN, PP1_IN_PU, -		PP0_FN, PP0_OUT, PP0_IN, PP0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PQCR", 0xffe7001c, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PQ4_FN, PQ4_OUT, PQ4_IN, PQ4_IN_PU, -		PQ3_FN, PQ3_OUT, PQ3_IN, PQ3_IN_PU, -		PQ2_FN, PQ2_OUT, PQ2_IN, PQ2_IN_PU, -		PQ1_FN, PQ1_OUT, PQ1_IN, PQ1_IN_PU, -		PQ0_FN, PQ0_OUT, PQ0_IN, PQ0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PRCR", 0xffe7001e, 16, 2) { -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PR3_FN, PR3_OUT, PR3_IN, PR3_IN_PU, -		PR2_FN, PR2_OUT, PR2_IN, PR2_IN_PU, -		PR1_FN, PR1_OUT, PR1_IN, PR1_IN_PU, -		PR0_FN, PR0_OUT, PR0_IN, PR0_IN_PU } -	}, -	{ PINMUX_CFG_REG("P1MSELR", 0xffe70080, 16, 1) { -		P1MSEL15_0, P1MSEL15_1, -		P1MSEL14_0, P1MSEL14_1, -		P1MSEL13_0, P1MSEL13_1, -		P1MSEL12_0, P1MSEL12_1, -		P1MSEL11_0, P1MSEL11_1, -		P1MSEL10_0, P1MSEL10_1, -		P1MSEL9_0, P1MSEL9_1, -		P1MSEL8_0, P1MSEL8_1, -		P1MSEL7_0, P1MSEL7_1, -		P1MSEL6_0, P1MSEL6_1, -		P1MSEL5_0, 0, -		P1MSEL4_0, P1MSEL4_1, -		P1MSEL3_0, P1MSEL3_1, -		P1MSEL2_0, P1MSEL2_1, -		P1MSEL1_0, P1MSEL1_1, -		P1MSEL0_0, P1MSEL0_1 } +static struct resource sh7785_pfc_resources[] = { +	[0] = { +		.start	= 0xffe70000, +		.end	= 0xffe7008f, +		.flags	= IORESOURCE_MEM,  	}, -	{ PINMUX_CFG_REG("P2MSELR", 0xffe70082, 16, 1) { -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		0, 0, -		P2MSEL2_0, P2MSEL2_1, -		P2MSEL1_0, P2MSEL1_1, -		P2MSEL0_0, P2MSEL0_1 } -	}, -	{} -}; - -static struct pinmux_data_reg pinmux_data_regs[] = { -	{ PINMUX_DATA_REG("PADR", 0xffe70020, 8) { -		PA7_DATA, PA6_DATA, PA5_DATA, PA4_DATA, -		PA3_DATA, PA2_DATA, PA1_DATA, PA0_DATA } -	}, -	{ PINMUX_DATA_REG("PBDR", 0xffe70022, 8) { -		PB7_DATA, PB6_DATA, PB5_DATA, PB4_DATA, -		PB3_DATA, PB2_DATA, PB1_DATA, PB0_DATA } -	}, -	{ PINMUX_DATA_REG("PCDR", 0xffe70024, 8) { -		PC7_DATA, PC6_DATA, PC5_DATA, PC4_DATA, -		PC3_DATA, PC2_DATA, PC1_DATA, PC0_DATA } -	}, -	{ PINMUX_DATA_REG("PDDR", 0xffe70026, 8) { -		PD7_DATA, PD6_DATA, PD5_DATA, PD4_DATA, -		PD3_DATA, PD2_DATA, PD1_DATA, PD0_DATA } -	}, -	{ PINMUX_DATA_REG("PEDR", 0xffe70028, 8) { -		0, 0, PE5_DATA, PE4_DATA, -		PE3_DATA, PE2_DATA, PE1_DATA, PE0_DATA } -	}, -	{ PINMUX_DATA_REG("PFDR", 0xffe7002a, 8) { -		PF7_DATA, PF6_DATA, PF5_DATA, PF4_DATA, -		PF3_DATA, PF2_DATA, PF1_DATA, PF0_DATA } -	}, -	{ PINMUX_DATA_REG("PGDR", 0xffe7002c, 8) { -		PG7_DATA, PG6_DATA, PG5_DATA, PG4_DATA, -		PG3_DATA, PG2_DATA, PG1_DATA, PG0_DATA } -	}, -	{ PINMUX_DATA_REG("PHDR", 0xffe7002e, 8) { -		PH7_DATA, PH6_DATA, PH5_DATA, PH4_DATA, -		PH3_DATA, PH2_DATA, PH1_DATA, PH0_DATA } -	}, -	{ PINMUX_DATA_REG("PJDR", 0xffe70030, 8) { -		PJ7_DATA, PJ6_DATA, PJ5_DATA, PJ4_DATA, -		PJ3_DATA, PJ2_DATA, PJ1_DATA, PJ0_DATA } -	}, -	{ PINMUX_DATA_REG("PKDR", 0xffe70032, 8) { -		PK7_DATA, PK6_DATA, PK5_DATA, PK4_DATA, -		PK3_DATA, PK2_DATA, PK1_DATA, PK0_DATA } -	}, -	{ PINMUX_DATA_REG("PLDR", 0xffe70034, 8) { -		PL7_DATA, PL6_DATA, PL5_DATA, PL4_DATA, -		PL3_DATA, PL2_DATA, PL1_DATA, PL0_DATA } -	}, -	{ PINMUX_DATA_REG("PMDR", 0xffe70036, 8) { -		0, 0, 0, 0, -		0, 0, PM1_DATA, PM0_DATA } -	}, -	{ PINMUX_DATA_REG("PNDR", 0xffe70038, 8) { -		PN7_DATA, PN6_DATA, PN5_DATA, PN4_DATA, -		PN3_DATA, PN2_DATA, PN1_DATA, PN0_DATA } -	}, -	{ PINMUX_DATA_REG("PPDR", 0xffe7003a, 8) { -		0, 0, PP5_DATA, PP4_DATA, -		PP3_DATA, PP2_DATA, PP1_DATA, PP0_DATA } -	}, -	{ PINMUX_DATA_REG("PQDR", 0xffe7003c, 8) { -		0, 0, 0, PQ4_DATA, -		PQ3_DATA, PQ2_DATA, PQ1_DATA, PQ0_DATA } -	}, -	{ PINMUX_DATA_REG("PRDR", 0xffe7003e, 8) { -		0, 0, 0, 0, -		PR3_DATA, PR2_DATA, PR1_DATA, PR0_DATA } -	}, -	{ }, -}; - -static struct pinmux_info sh7785_pinmux_info = { -	.name = "sh7785_pfc", -	.reserved_id = PINMUX_RESERVED, -	.data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, -	.input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, -	.input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, -	.output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, -	.mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, -	.function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, - -	.first_gpio = GPIO_PA7, -	.last_gpio = GPIO_FN_IRQOUT, - -	.gpios = pinmux_gpios, -	.cfg_regs = pinmux_config_regs, -	.data_regs = pinmux_data_regs, - -	.gpio_data = pinmux_data, -	.gpio_data_size = ARRAY_SIZE(pinmux_data),  };  static int __init plat_pinmux_setup(void)  { -	return register_pinmux(&sh7785_pinmux_info); +	return sh_pfc_register("pfc-sh7785", sh7785_pfc_resources, +			       ARRAY_SIZE(sh7785_pfc_resources));  } -  arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh4a/pinmux-sh7786.c b/arch/sh/kernel/cpu/sh4a/pinmux-sh7786.c index 4229e0724c8..9a459556a2f 100644 --- a/arch/sh/kernel/cpu/sh4a/pinmux-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/pinmux-sh7786.c @@ -13,831 +13,23 @@   * for more details.   */ +#include <linux/bug.h>  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/gpio.h> -#include <cpu/sh7786.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> -enum { -	PINMUX_RESERVED = 0, - -	PINMUX_DATA_BEGIN, -	PA7_DATA, PA6_DATA, PA5_DATA, PA4_DATA, -	PA3_DATA, PA2_DATA, PA1_DATA, PA0_DATA, -	PB7_DATA, PB6_DATA, PB5_DATA, PB4_DATA, -	PB3_DATA, PB2_DATA, PB1_DATA, PB0_DATA, -	PC7_DATA, PC6_DATA, PC5_DATA, PC4_DATA, -	PC3_DATA, PC2_DATA, PC1_DATA, PC0_DATA, -	PD7_DATA, PD6_DATA, PD5_DATA, PD4_DATA, -	PD3_DATA, PD2_DATA, PD1_DATA, PD0_DATA, -	PE7_DATA, PE6_DATA, -	PF7_DATA, PF6_DATA, PF5_DATA, PF4_DATA, -	PF3_DATA, PF2_DATA, PF1_DATA, PF0_DATA, -	PG7_DATA, PG6_DATA, PG5_DATA, -	PH7_DATA, PH6_DATA, PH5_DATA, PH4_DATA, -	PH3_DATA, PH2_DATA, PH1_DATA, PH0_DATA, -	PJ7_DATA, PJ6_DATA, PJ5_DATA, PJ4_DATA, -	PJ3_DATA, PJ2_DATA, PJ1_DATA, -	PINMUX_DATA_END, - -	PINMUX_INPUT_BEGIN, -	PA7_IN, PA6_IN, PA5_IN, PA4_IN, -	PA3_IN, PA2_IN, PA1_IN, PA0_IN, -	PB7_IN, PB6_IN, PB5_IN, PB4_IN, -	PB3_IN, PB2_IN, PB1_IN, PB0_IN, -	PC7_IN, PC6_IN, PC5_IN, PC4_IN, -	PC3_IN, PC2_IN, PC1_IN, PC0_IN, -	PD7_IN, PD6_IN, PD5_IN, PD4_IN, -	PD3_IN, PD2_IN, PD1_IN, PD0_IN, -	PE7_IN, PE6_IN, -	PF7_IN, PF6_IN, PF5_IN, PF4_IN, -	PF3_IN, PF2_IN, PF1_IN, PF0_IN, -	PG7_IN, PG6_IN, PG5_IN, -	PH7_IN, PH6_IN, PH5_IN, PH4_IN, -	PH3_IN, PH2_IN, PH1_IN, PH0_IN, -	PJ7_IN, PJ6_IN, PJ5_IN, PJ4_IN, -	PJ3_IN, PJ2_IN, PJ1_IN, -	PINMUX_INPUT_END, - -	PINMUX_INPUT_PULLUP_BEGIN, -	PA7_IN_PU, PA6_IN_PU, PA5_IN_PU, PA4_IN_PU, -	PA3_IN_PU, PA2_IN_PU, PA1_IN_PU, PA0_IN_PU, -	PB7_IN_PU, PB6_IN_PU, PB5_IN_PU, PB4_IN_PU, -	PB3_IN_PU, PB2_IN_PU, PB1_IN_PU, PB0_IN_PU, -	PC7_IN_PU, PC6_IN_PU, PC5_IN_PU, PC4_IN_PU, -	PC3_IN_PU, PC2_IN_PU, PC1_IN_PU, PC0_IN_PU, -	PD7_IN_PU, PD6_IN_PU, PD5_IN_PU, PD4_IN_PU, -	PD3_IN_PU, PD2_IN_PU, PD1_IN_PU, PD0_IN_PU, -	PE7_IN_PU, PE6_IN_PU, -	PF7_IN_PU, PF6_IN_PU, PF5_IN_PU, PF4_IN_PU, -	PF3_IN_PU, PF2_IN_PU, PF1_IN_PU, PF0_IN_PU, -	PG7_IN_PU, PG6_IN_PU, PG5_IN_PU, -	PH7_IN_PU, PH6_IN_PU, PH5_IN_PU, PH4_IN_PU, -	PH3_IN_PU, PH2_IN_PU, PH1_IN_PU, PH0_IN_PU, -	PJ7_IN_PU, PJ6_IN_PU, PJ5_IN_PU, PJ4_IN_PU, -	PJ3_IN_PU, PJ2_IN_PU, PJ1_IN_PU, -	PINMUX_INPUT_PULLUP_END, - -	PINMUX_OUTPUT_BEGIN, -	PA7_OUT, PA6_OUT, PA5_OUT, PA4_OUT, -	PA3_OUT, PA2_OUT, PA1_OUT, PA0_OUT, -	PB7_OUT, PB6_OUT, PB5_OUT, PB4_OUT, -	PB3_OUT, PB2_OUT, PB1_OUT, PB0_OUT, -	PC7_OUT, PC6_OUT, PC5_OUT, PC4_OUT, -	PC3_OUT, PC2_OUT, PC1_OUT, PC0_OUT, -	PD7_OUT, PD6_OUT, PD5_OUT, PD4_OUT, -	PD3_OUT, PD2_OUT, PD1_OUT, PD0_OUT, -	PE7_OUT, PE6_OUT, -	PF7_OUT, PF6_OUT, PF5_OUT, PF4_OUT, -	PF3_OUT, PF2_OUT, PF1_OUT, PF0_OUT, -	PG7_OUT, PG6_OUT, PG5_OUT, -	PH7_OUT, PH6_OUT, PH5_OUT, PH4_OUT, -	PH3_OUT, PH2_OUT, PH1_OUT, PH0_OUT, -	PJ7_OUT, PJ6_OUT, PJ5_OUT, PJ4_OUT, -	PJ3_OUT, PJ2_OUT, PJ1_OUT, -	PINMUX_OUTPUT_END, - -	PINMUX_FUNCTION_BEGIN, -	PA7_FN, PA6_FN, PA5_FN, PA4_FN, -	PA3_FN, PA2_FN, PA1_FN, PA0_FN, -	PB7_FN, PB6_FN, PB5_FN, PB4_FN, -	PB3_FN, PB2_FN, PB1_FN, PB0_FN, -	PC7_FN, PC6_FN, PC5_FN, PC4_FN, -	PC3_FN, PC2_FN, PC1_FN, PC0_FN, -	PD7_FN, PD6_FN, PD5_FN, PD4_FN, -	PD3_FN, PD2_FN, PD1_FN, PD0_FN, -	PE7_FN, PE6_FN, -	PF7_FN, PF6_FN, PF5_FN, PF4_FN, -	PF3_FN, PF2_FN, PF1_FN, PF0_FN, -	PG7_FN, PG6_FN, PG5_FN, -	PH7_FN, PH6_FN, PH5_FN, PH4_FN, -	PH3_FN, PH2_FN, PH1_FN, PH0_FN, -	PJ7_FN, PJ6_FN, PJ5_FN, PJ4_FN, -	PJ3_FN, PJ2_FN, PJ1_FN, -	P1MSEL14_0, P1MSEL14_1, -	P1MSEL13_0, P1MSEL13_1, -	P1MSEL12_0, P1MSEL12_1, -	P1MSEL11_0, P1MSEL11_1, -	P1MSEL10_0, P1MSEL10_1, -	P1MSEL9_0, P1MSEL9_1, -	P1MSEL8_0, P1MSEL8_1, -	P1MSEL7_0, P1MSEL7_1, -	P1MSEL6_0, P1MSEL6_1, -	P1MSEL5_0, P1MSEL5_1, -	P1MSEL4_0, P1MSEL4_1, -	P1MSEL3_0, P1MSEL3_1, -	P1MSEL2_0, P1MSEL2_1, -	P1MSEL1_0, P1MSEL1_1, -	P1MSEL0_0, P1MSEL0_1, - -	P2MSEL15_0, P2MSEL15_1, -	P2MSEL14_0, P2MSEL14_1, -	P2MSEL13_0, P2MSEL13_1, -	P2MSEL12_0, P2MSEL12_1, -	P2MSEL11_0, P2MSEL11_1, -	P2MSEL10_0, P2MSEL10_1, -	P2MSEL9_0, P2MSEL9_1, -	P2MSEL8_0, P2MSEL8_1, -	P2MSEL7_0, P2MSEL7_1, -	P2MSEL6_0, P2MSEL6_1, -	P2MSEL5_0, P2MSEL5_1, -	P2MSEL4_0, P2MSEL4_1, -	P2MSEL3_0, P2MSEL3_1, -	P2MSEL2_0, P2MSEL2_1, -	P2MSEL1_0, P2MSEL1_1, -	P2MSEL0_0, P2MSEL0_1, -	PINMUX_FUNCTION_END, - -	PINMUX_MARK_BEGIN, -	DCLKIN_MARK, DCLKOUT_MARK, ODDF_MARK, -	VSYNC_MARK, HSYNC_MARK, CDE_MARK, DISP_MARK, -	DR0_MARK, DR1_MARK, DR2_MARK, DR3_MARK, DR4_MARK, DR5_MARK, -	DG0_MARK, DG1_MARK, DG2_MARK, DG3_MARK, DG4_MARK, DG5_MARK, -	DB0_MARK, DB1_MARK, DB2_MARK, DB3_MARK, DB4_MARK, DB5_MARK, -	ETH_MAGIC_MARK, ETH_LINK_MARK, ETH_TX_ER_MARK, ETH_TX_EN_MARK, -	ETH_MDIO_MARK, ETH_RX_CLK_MARK, ETH_MDC_MARK, ETH_COL_MARK, -	ETH_TX_CLK_MARK, ETH_CRS_MARK, ETH_RX_DV_MARK, ETH_RX_ER_MARK, -	ETH_TXD3_MARK, ETH_TXD2_MARK, ETH_TXD1_MARK, ETH_TXD0_MARK, -	ETH_RXD3_MARK, ETH_RXD2_MARK, ETH_RXD1_MARK, ETH_RXD0_MARK, -	HSPI_CLK_MARK, HSPI_CS_MARK, HSPI_RX_MARK, HSPI_TX_MARK, -	SCIF0_CTS_MARK, SCIF0_RTS_MARK, -	SCIF0_SCK_MARK, SCIF0_RXD_MARK, SCIF0_TXD_MARK, -	SCIF1_SCK_MARK, SCIF1_RXD_MARK, SCIF1_TXD_MARK, -	SCIF3_SCK_MARK, SCIF3_RXD_MARK, SCIF3_TXD_MARK, -	SCIF4_SCK_MARK, SCIF4_RXD_MARK, SCIF4_TXD_MARK, -	SCIF5_SCK_MARK, SCIF5_RXD_MARK, SCIF5_TXD_MARK, -	BREQ_MARK, IOIS16_MARK, CE2B_MARK, CE2A_MARK, BACK_MARK, -	FALE_MARK, FRB_MARK, FSTATUS_MARK, -	FSE_MARK, FCLE_MARK, -	DACK0_MARK, DACK1_MARK, DACK2_MARK, DACK3_MARK, -	DREQ0_MARK, DREQ1_MARK, DREQ2_MARK, DREQ3_MARK, -	DRAK0_MARK, DRAK1_MARK, DRAK2_MARK, DRAK3_MARK, -	USB_OVC1_MARK, USB_OVC0_MARK, -	USB_PENC1_MARK, USB_PENC0_MARK, -	HAC_RES_MARK, -	HAC1_SDOUT_MARK, HAC1_SDIN_MARK, HAC1_SYNC_MARK, HAC1_BITCLK_MARK, -	HAC0_SDOUT_MARK, HAC0_SDIN_MARK, HAC0_SYNC_MARK, HAC0_BITCLK_MARK, -	SSI0_SDATA_MARK, SSI0_SCK_MARK, SSI0_WS_MARK, SSI0_CLK_MARK, -	SSI1_SDATA_MARK, SSI1_SCK_MARK, SSI1_WS_MARK, SSI1_CLK_MARK, -	SSI2_SDATA_MARK, SSI2_SCK_MARK, SSI2_WS_MARK, -	SSI3_SDATA_MARK, SSI3_SCK_MARK, SSI3_WS_MARK, -	SDIF1CMD_MARK, SDIF1CD_MARK, SDIF1WP_MARK, SDIF1CLK_MARK, -	SDIF1D3_MARK, SDIF1D2_MARK, SDIF1D1_MARK, SDIF1D0_MARK, -	SDIF0CMD_MARK, SDIF0CD_MARK, SDIF0WP_MARK, SDIF0CLK_MARK, -	SDIF0D3_MARK, SDIF0D2_MARK, SDIF0D1_MARK, SDIF0D0_MARK, -	TCLK_MARK, -	IRL7_MARK, IRL6_MARK, IRL5_MARK, IRL4_MARK, -	PINMUX_MARK_END, -}; - -static pinmux_enum_t pinmux_data[] = { - -	/* PA GPIO */ -	PINMUX_DATA(PA7_DATA, PA7_IN, PA7_OUT, PA7_IN_PU), -	PINMUX_DATA(PA6_DATA, PA6_IN, PA6_OUT, PA6_IN_PU), -	PINMUX_DATA(PA5_DATA, PA5_IN, PA5_OUT, PA5_IN_PU), -	PINMUX_DATA(PA4_DATA, PA4_IN, PA4_OUT, PA4_IN_PU), -	PINMUX_DATA(PA3_DATA, PA3_IN, PA3_OUT, PA3_IN_PU), -	PINMUX_DATA(PA2_DATA, PA2_IN, PA2_OUT, PA2_IN_PU), -	PINMUX_DATA(PA1_DATA, PA1_IN, PA1_OUT, PA1_IN_PU), -	PINMUX_DATA(PA0_DATA, PA0_IN, PA0_OUT, PA0_IN_PU), - -	/* PB GPIO */ -	PINMUX_DATA(PB7_DATA, PB7_IN, PB7_OUT, PB7_IN_PU), -	PINMUX_DATA(PB6_DATA, PB6_IN, PB6_OUT, PB6_IN_PU), -	PINMUX_DATA(PB5_DATA, PB5_IN, PB5_OUT, PB5_IN_PU), -	PINMUX_DATA(PB4_DATA, PB4_IN, PB4_OUT, PB4_IN_PU), -	PINMUX_DATA(PB3_DATA, PB3_IN, PB3_OUT, PB3_IN_PU), -	PINMUX_DATA(PB2_DATA, PB2_IN, PB2_OUT, PB2_IN_PU), -	PINMUX_DATA(PB1_DATA, PB1_IN, PB1_OUT, PB1_IN_PU), -	PINMUX_DATA(PB0_DATA, PB0_IN, PB0_OUT, PB0_IN_PU), - -	/* PC GPIO */ -	PINMUX_DATA(PC7_DATA, PC7_IN, PC7_OUT, PC7_IN_PU), -	PINMUX_DATA(PC6_DATA, PC6_IN, PC6_OUT, PC6_IN_PU), -	PINMUX_DATA(PC5_DATA, PC5_IN, PC5_OUT, PC5_IN_PU), -	PINMUX_DATA(PC4_DATA, PC4_IN, PC4_OUT, PC4_IN_PU), -	PINMUX_DATA(PC3_DATA, PC3_IN, PC3_OUT, PC3_IN_PU), -	PINMUX_DATA(PC2_DATA, PC2_IN, PC2_OUT, PC2_IN_PU), -	PINMUX_DATA(PC1_DATA, PC1_IN, PC1_OUT, PC1_IN_PU), -	PINMUX_DATA(PC0_DATA, PC0_IN, PC0_OUT, PC0_IN_PU), - -	/* PD GPIO */ -	PINMUX_DATA(PD7_DATA, PD7_IN, PD7_OUT, PD7_IN_PU), -	PINMUX_DATA(PD6_DATA, PD6_IN, PD6_OUT, PD6_IN_PU), -	PINMUX_DATA(PD5_DATA, PD5_IN, PD5_OUT, PD5_IN_PU), -	PINMUX_DATA(PD4_DATA, PD4_IN, PD4_OUT, PD4_IN_PU), -	PINMUX_DATA(PD3_DATA, PD3_IN, PD3_OUT, PD3_IN_PU), -	PINMUX_DATA(PD2_DATA, PD2_IN, PD2_OUT, PD2_IN_PU), -	PINMUX_DATA(PD1_DATA, PD1_IN, PD1_OUT, PD1_IN_PU), -	PINMUX_DATA(PD0_DATA, PD0_IN, PD0_OUT, PD0_IN_PU), - -	/* PE GPIO */ -	PINMUX_DATA(PE7_DATA, PE7_IN, PE7_OUT, PE7_IN_PU), -	PINMUX_DATA(PE6_DATA, PE6_IN, PE6_OUT, PE6_IN_PU), - -	/* PF GPIO */ -	PINMUX_DATA(PF7_DATA, PF7_IN, PF7_OUT, PF7_IN_PU), -	PINMUX_DATA(PF6_DATA, PF6_IN, PF6_OUT, PF6_IN_PU), -	PINMUX_DATA(PF5_DATA, PF5_IN, PF5_OUT, PF5_IN_PU), -	PINMUX_DATA(PF4_DATA, PF4_IN, PF4_OUT, PF4_IN_PU), -	PINMUX_DATA(PF3_DATA, PF3_IN, PF3_OUT, PF3_IN_PU), -	PINMUX_DATA(PF2_DATA, PF2_IN, PF2_OUT, PF2_IN_PU), -	PINMUX_DATA(PF1_DATA, PF1_IN, PF1_OUT, PF1_IN_PU), -	PINMUX_DATA(PF0_DATA, PF0_IN, PF0_OUT, PF0_IN_PU), - -	/* PG GPIO */ -	PINMUX_DATA(PG7_DATA, PG7_IN, PG7_OUT, PG7_IN_PU), -	PINMUX_DATA(PG6_DATA, PG6_IN, PG6_OUT, PG6_IN_PU), -	PINMUX_DATA(PG5_DATA, PG5_IN, PG5_OUT, PG5_IN_PU), - -	/* PH GPIO */ -	PINMUX_DATA(PH7_DATA, PH7_IN, PH7_OUT, PH7_IN_PU), -	PINMUX_DATA(PH6_DATA, PH6_IN, PH6_OUT, PH6_IN_PU), -	PINMUX_DATA(PH5_DATA, PH5_IN, PH5_OUT, PH5_IN_PU), -	PINMUX_DATA(PH4_DATA, PH4_IN, PH4_OUT, PH4_IN_PU), -	PINMUX_DATA(PH3_DATA, PH3_IN, PH3_OUT, PH3_IN_PU), -	PINMUX_DATA(PH2_DATA, PH2_IN, PH2_OUT, PH2_IN_PU), -	PINMUX_DATA(PH1_DATA, PH1_IN, PH1_OUT, PH1_IN_PU), -	PINMUX_DATA(PH0_DATA, PH0_IN, PH0_OUT, PH0_IN_PU), - -	/* PJ GPIO */ -	PINMUX_DATA(PJ7_DATA, PJ7_IN, PJ7_OUT, PJ7_IN_PU), -	PINMUX_DATA(PJ6_DATA, PJ6_IN, PJ6_OUT, PJ6_IN_PU), -	PINMUX_DATA(PJ5_DATA, PJ5_IN, PJ5_OUT, PJ5_IN_PU), -	PINMUX_DATA(PJ4_DATA, PJ4_IN, PJ4_OUT, PJ4_IN_PU), -	PINMUX_DATA(PJ3_DATA, PJ3_IN, PJ3_OUT, PJ3_IN_PU), -	PINMUX_DATA(PJ2_DATA, PJ2_IN, PJ2_OUT, PJ2_IN_PU), -	PINMUX_DATA(PJ1_DATA, PJ1_IN, PJ1_OUT, PJ1_IN_PU), - -	/* PA FN */ -	PINMUX_DATA(CDE_MARK,		P1MSEL2_0, PA7_FN), -	PINMUX_DATA(DISP_MARK,		P1MSEL2_0, PA6_FN), -	PINMUX_DATA(DR5_MARK,		P1MSEL2_0, PA5_FN), -	PINMUX_DATA(DR4_MARK,		P1MSEL2_0, PA4_FN), -	PINMUX_DATA(DR3_MARK,		P1MSEL2_0, PA3_FN), -	PINMUX_DATA(DR2_MARK,		P1MSEL2_0, PA2_FN), -	PINMUX_DATA(DR1_MARK,		P1MSEL2_0, PA1_FN), -	PINMUX_DATA(DR0_MARK,		P1MSEL2_0, PA0_FN), -	PINMUX_DATA(ETH_MAGIC_MARK,	P1MSEL2_1, PA7_FN), -	PINMUX_DATA(ETH_LINK_MARK,	P1MSEL2_1, PA6_FN), -	PINMUX_DATA(ETH_TX_ER_MARK,	P1MSEL2_1, PA5_FN), -	PINMUX_DATA(ETH_TX_EN_MARK,	P1MSEL2_1, PA4_FN), -	PINMUX_DATA(ETH_TXD3_MARK,	P1MSEL2_1, PA3_FN), -	PINMUX_DATA(ETH_TXD2_MARK,	P1MSEL2_1, PA2_FN), -	PINMUX_DATA(ETH_TXD1_MARK,	P1MSEL2_1, PA1_FN), -	PINMUX_DATA(ETH_TXD0_MARK,	P1MSEL2_1, PA0_FN), - -	/* PB FN */ -	PINMUX_DATA(VSYNC_MARK,		P1MSEL3_0, PB7_FN), -	PINMUX_DATA(ODDF_MARK,		P1MSEL3_0, PB6_FN), -	PINMUX_DATA(DG5_MARK,		P1MSEL2_0, PB5_FN), -	PINMUX_DATA(DG4_MARK,		P1MSEL2_0, PB4_FN), -	PINMUX_DATA(DG3_MARK,		P1MSEL2_0, PB3_FN), -	PINMUX_DATA(DG2_MARK,		P1MSEL2_0, PB2_FN), -	PINMUX_DATA(DG1_MARK,		P1MSEL2_0, PB1_FN), -	PINMUX_DATA(DG0_MARK,		P1MSEL2_0, PB0_FN), -	PINMUX_DATA(HSPI_CLK_MARK,	P1MSEL3_1, PB7_FN), -	PINMUX_DATA(HSPI_CS_MARK,	P1MSEL3_1, PB6_FN), -	PINMUX_DATA(ETH_MDIO_MARK,	P1MSEL2_1, PB5_FN), -	PINMUX_DATA(ETH_RX_CLK_MARK,	P1MSEL2_1, PB4_FN), -	PINMUX_DATA(ETH_MDC_MARK,	P1MSEL2_1, PB3_FN), -	PINMUX_DATA(ETH_COL_MARK,	P1MSEL2_1, PB2_FN), -	PINMUX_DATA(ETH_TX_CLK_MARK,	P1MSEL2_1, PB1_FN), -	PINMUX_DATA(ETH_CRS_MARK,	P1MSEL2_1, PB0_FN), - -	/* PC FN */ -	PINMUX_DATA(DCLKIN_MARK,	P1MSEL3_0, PC7_FN), -	PINMUX_DATA(HSYNC_MARK,		P1MSEL3_0, PC6_FN), -	PINMUX_DATA(DB5_MARK,		P1MSEL2_0, PC5_FN), -	PINMUX_DATA(DB4_MARK,		P1MSEL2_0, PC4_FN), -	PINMUX_DATA(DB3_MARK,		P1MSEL2_0, PC3_FN), -	PINMUX_DATA(DB2_MARK,		P1MSEL2_0, PC2_FN), -	PINMUX_DATA(DB1_MARK,		P1MSEL2_0, PC1_FN), -	PINMUX_DATA(DB0_MARK,		P1MSEL2_0, PC0_FN), - -	PINMUX_DATA(HSPI_RX_MARK,	P1MSEL3_1, PC7_FN), -	PINMUX_DATA(HSPI_TX_MARK,	P1MSEL3_1, PC6_FN), -	PINMUX_DATA(ETH_RXD3_MARK,	P1MSEL2_1, PC5_FN), -	PINMUX_DATA(ETH_RXD2_MARK,	P1MSEL2_1, PC4_FN), -	PINMUX_DATA(ETH_RXD1_MARK,	P1MSEL2_1, PC3_FN), -	PINMUX_DATA(ETH_RXD0_MARK,	P1MSEL2_1, PC2_FN), -	PINMUX_DATA(ETH_RX_DV_MARK,	P1MSEL2_1, PC1_FN), -	PINMUX_DATA(ETH_RX_ER_MARK,	P1MSEL2_1, PC0_FN), - -	/* PD FN */ -	PINMUX_DATA(DCLKOUT_MARK,	PD7_FN), -	PINMUX_DATA(SCIF1_SCK_MARK,	PD6_FN), -	PINMUX_DATA(SCIF1_RXD_MARK,	PD5_FN), -	PINMUX_DATA(SCIF1_TXD_MARK,	PD4_FN), -	PINMUX_DATA(DACK1_MARK,		P1MSEL13_1, P1MSEL12_0, PD3_FN), -	PINMUX_DATA(BACK_MARK,		P1MSEL13_0, P1MSEL12_1, PD3_FN), -	PINMUX_DATA(FALE_MARK,		P1MSEL13_0, P1MSEL12_0, PD3_FN), -	PINMUX_DATA(DACK0_MARK,		P1MSEL14_1, PD2_FN), -	PINMUX_DATA(FCLE_MARK,		P1MSEL14_0, PD2_FN), -	PINMUX_DATA(DREQ1_MARK,		P1MSEL10_0, P1MSEL9_1, PD1_FN), -	PINMUX_DATA(BREQ_MARK,		P1MSEL10_1, P1MSEL9_0, PD1_FN), -	PINMUX_DATA(USB_OVC1_MARK,	P1MSEL10_0, P1MSEL9_0, PD1_FN), -	PINMUX_DATA(DREQ0_MARK,		P1MSEL11_1, PD0_FN), -	PINMUX_DATA(USB_OVC0_MARK,	P1MSEL11_0, PD0_FN), - -	/* PE FN */ -	PINMUX_DATA(USB_PENC1_MARK,	PE7_FN), -	PINMUX_DATA(USB_PENC0_MARK,	PE6_FN), - -	/* PF FN */ -	PINMUX_DATA(HAC1_SDOUT_MARK,	P2MSEL15_0, P2MSEL14_0, PF7_FN), -	PINMUX_DATA(HAC1_SDIN_MARK,	P2MSEL15_0, P2MSEL14_0, PF6_FN), -	PINMUX_DATA(HAC1_SYNC_MARK,	P2MSEL15_0, P2MSEL14_0, PF5_FN), -	PINMUX_DATA(HAC1_BITCLK_MARK,	P2MSEL15_0, P2MSEL14_0, PF4_FN), -	PINMUX_DATA(HAC0_SDOUT_MARK,	P2MSEL13_0, P2MSEL12_0, PF3_FN), -	PINMUX_DATA(HAC0_SDIN_MARK,	P2MSEL13_0, P2MSEL12_0, PF2_FN), -	PINMUX_DATA(HAC0_SYNC_MARK,	P2MSEL13_0, P2MSEL12_0, PF1_FN), -	PINMUX_DATA(HAC0_BITCLK_MARK,	P2MSEL13_0, P2MSEL12_0, PF0_FN), -	PINMUX_DATA(SSI1_SDATA_MARK,	P2MSEL15_0, P2MSEL14_1, PF7_FN), -	PINMUX_DATA(SSI1_SCK_MARK,	P2MSEL15_0, P2MSEL14_1, PF6_FN), -	PINMUX_DATA(SSI1_WS_MARK,	P2MSEL15_0, P2MSEL14_1, PF5_FN), -	PINMUX_DATA(SSI1_CLK_MARK,	P2MSEL15_0, P2MSEL14_1, PF4_FN), -	PINMUX_DATA(SSI0_SDATA_MARK,	P2MSEL13_0, P2MSEL12_1, PF3_FN), -	PINMUX_DATA(SSI0_SCK_MARK,	P2MSEL13_0, P2MSEL12_1, PF2_FN), -	PINMUX_DATA(SSI0_WS_MARK,	P2MSEL13_0, P2MSEL12_1, PF1_FN), -	PINMUX_DATA(SSI0_CLK_MARK,	P2MSEL13_0, P2MSEL12_1, PF0_FN), -	PINMUX_DATA(SDIF1CMD_MARK,	P2MSEL15_1, P2MSEL14_0, PF7_FN), -	PINMUX_DATA(SDIF1CD_MARK,	P2MSEL15_1, P2MSEL14_0, PF6_FN), -	PINMUX_DATA(SDIF1WP_MARK,	P2MSEL15_1, P2MSEL14_0, PF5_FN), -	PINMUX_DATA(SDIF1CLK_MARK,	P2MSEL15_1, P2MSEL14_0, PF4_FN), -	PINMUX_DATA(SDIF1D3_MARK,	P2MSEL13_1, P2MSEL12_0, PF3_FN), -	PINMUX_DATA(SDIF1D2_MARK,	P2MSEL13_1, P2MSEL12_0, PF2_FN), -	PINMUX_DATA(SDIF1D1_MARK,	P2MSEL13_1, P2MSEL12_0, PF1_FN), -	PINMUX_DATA(SDIF1D0_MARK,	P2MSEL13_1, P2MSEL12_0, PF0_FN), - -	/* PG FN */ -	PINMUX_DATA(SCIF3_SCK_MARK,	P1MSEL8_0, PG7_FN), -	PINMUX_DATA(SSI2_SDATA_MARK,	P1MSEL8_1, PG7_FN), -	PINMUX_DATA(SCIF3_RXD_MARK,	P1MSEL7_0, P1MSEL6_0, PG6_FN), -	PINMUX_DATA(SSI2_SCK_MARK,	P1MSEL7_1, P1MSEL6_0, PG6_FN), -	PINMUX_DATA(TCLK_MARK,		P1MSEL7_0, P1MSEL6_1, PG6_FN), -	PINMUX_DATA(SCIF3_TXD_MARK,	P1MSEL5_0, P1MSEL4_0, PG5_FN), -	PINMUX_DATA(SSI2_WS_MARK,	P1MSEL5_1, P1MSEL4_0, PG5_FN), -	PINMUX_DATA(HAC_RES_MARK,	P1MSEL5_0, P1MSEL4_1, PG5_FN), - -	/* PH FN */ -	PINMUX_DATA(DACK3_MARK,		P2MSEL4_0, PH7_FN), -	PINMUX_DATA(SDIF0CMD_MARK,	P2MSEL4_1, PH7_FN), -	PINMUX_DATA(DACK2_MARK,		P2MSEL4_0, PH6_FN), -	PINMUX_DATA(SDIF0CD_MARK,	P2MSEL4_1, PH6_FN), -	PINMUX_DATA(DREQ3_MARK,		P2MSEL4_0, PH5_FN), -	PINMUX_DATA(SDIF0WP_MARK,	P2MSEL4_1, PH5_FN), -	PINMUX_DATA(DREQ2_MARK,		P2MSEL3_0, P2MSEL2_1, PH4_FN), -	PINMUX_DATA(SDIF0CLK_MARK,	P2MSEL3_1, P2MSEL2_0, PH4_FN), -	PINMUX_DATA(SCIF0_CTS_MARK,	P2MSEL3_0, P2MSEL2_0, PH4_FN), -	PINMUX_DATA(SDIF0D3_MARK,	P2MSEL1_1, P2MSEL0_0, PH3_FN), -	PINMUX_DATA(SCIF0_RTS_MARK,	P2MSEL1_0, P2MSEL0_0, PH3_FN), -	PINMUX_DATA(IRL7_MARK,		P2MSEL1_0, P2MSEL0_1, PH3_FN), -	PINMUX_DATA(SDIF0D2_MARK,	P2MSEL1_1, P2MSEL0_0, PH2_FN), -	PINMUX_DATA(SCIF0_SCK_MARK,	P2MSEL1_0, P2MSEL0_0, PH2_FN), -	PINMUX_DATA(IRL6_MARK,		P2MSEL1_0, P2MSEL0_1, PH2_FN), -	PINMUX_DATA(SDIF0D1_MARK,	P2MSEL1_1, P2MSEL0_0, PH1_FN), -	PINMUX_DATA(SCIF0_RXD_MARK,	P2MSEL1_0, P2MSEL0_0, PH1_FN), -	PINMUX_DATA(IRL5_MARK,		P2MSEL1_0, P2MSEL0_1, PH1_FN), -	PINMUX_DATA(SDIF0D0_MARK,	P2MSEL1_1, P2MSEL0_0, PH0_FN), -	PINMUX_DATA(SCIF0_TXD_MARK,	P2MSEL1_0, P2MSEL0_0, PH0_FN), -	PINMUX_DATA(IRL4_MARK,		P2MSEL1_0, P2MSEL0_1, PH0_FN), - -	/* PJ FN */ -	PINMUX_DATA(SCIF5_SCK_MARK,	P2MSEL11_1, PJ7_FN), -	PINMUX_DATA(FRB_MARK,		P2MSEL11_0, PJ7_FN), -	PINMUX_DATA(SCIF5_RXD_MARK,	P2MSEL10_0, PJ6_FN), -	PINMUX_DATA(IOIS16_MARK,	P2MSEL10_1, PJ6_FN), -	PINMUX_DATA(SCIF5_TXD_MARK,	P2MSEL10_0, PJ5_FN), -	PINMUX_DATA(CE2B_MARK,		P2MSEL10_1, PJ5_FN), -	PINMUX_DATA(DRAK3_MARK,		P2MSEL7_0, PJ4_FN), -	PINMUX_DATA(CE2A_MARK,		P2MSEL7_1, PJ4_FN), -	PINMUX_DATA(SCIF4_SCK_MARK,	P2MSEL9_0, P2MSEL8_0, PJ3_FN), -	PINMUX_DATA(DRAK2_MARK,		P2MSEL9_0, P2MSEL8_1, PJ3_FN), -	PINMUX_DATA(SSI3_WS_MARK,	P2MSEL9_1, P2MSEL8_0, PJ3_FN), -	PINMUX_DATA(SCIF4_RXD_MARK,	P2MSEL6_1, P2MSEL5_0, PJ2_FN), -	PINMUX_DATA(DRAK1_MARK,		P2MSEL6_0, P2MSEL5_1, PJ2_FN), -	PINMUX_DATA(FSTATUS_MARK,	P2MSEL6_0, P2MSEL5_0, PJ2_FN), -	PINMUX_DATA(SSI3_SDATA_MARK,	P2MSEL6_1, P2MSEL5_1, PJ2_FN), -	PINMUX_DATA(SCIF4_TXD_MARK,	P2MSEL6_1, P2MSEL5_0, PJ1_FN), -	PINMUX_DATA(DRAK0_MARK,		P2MSEL6_0, P2MSEL5_1, PJ1_FN), -	PINMUX_DATA(FSE_MARK,		P2MSEL6_0, P2MSEL5_0, PJ1_FN), -	PINMUX_DATA(SSI3_SCK_MARK,	P2MSEL6_1, P2MSEL5_1, PJ1_FN), -}; - -static struct pinmux_gpio pinmux_gpios[] = { -	/* PA */ -	PINMUX_GPIO(GPIO_PA7, PA7_DATA), -	PINMUX_GPIO(GPIO_PA6, PA6_DATA), -	PINMUX_GPIO(GPIO_PA5, PA5_DATA), -	PINMUX_GPIO(GPIO_PA4, PA4_DATA), -	PINMUX_GPIO(GPIO_PA3, PA3_DATA), -	PINMUX_GPIO(GPIO_PA2, PA2_DATA), -	PINMUX_GPIO(GPIO_PA1, PA1_DATA), -	PINMUX_GPIO(GPIO_PA0, PA0_DATA), - -	/* PB */ -	PINMUX_GPIO(GPIO_PB7, PB7_DATA), -	PINMUX_GPIO(GPIO_PB6, PB6_DATA), -	PINMUX_GPIO(GPIO_PB5, PB5_DATA), -	PINMUX_GPIO(GPIO_PB4, PB4_DATA), -	PINMUX_GPIO(GPIO_PB3, PB3_DATA), -	PINMUX_GPIO(GPIO_PB2, PB2_DATA), -	PINMUX_GPIO(GPIO_PB1, PB1_DATA), -	PINMUX_GPIO(GPIO_PB0, PB0_DATA), - -	/* PC */ -	PINMUX_GPIO(GPIO_PC7, PC7_DATA), -	PINMUX_GPIO(GPIO_PC6, PC6_DATA), -	PINMUX_GPIO(GPIO_PC5, PC5_DATA), -	PINMUX_GPIO(GPIO_PC4, PC4_DATA), -	PINMUX_GPIO(GPIO_PC3, PC3_DATA), -	PINMUX_GPIO(GPIO_PC2, PC2_DATA), -	PINMUX_GPIO(GPIO_PC1, PC1_DATA), -	PINMUX_GPIO(GPIO_PC0, PC0_DATA), - -	/* PD */ -	PINMUX_GPIO(GPIO_PD7, PD7_DATA), -	PINMUX_GPIO(GPIO_PD6, PD6_DATA), -	PINMUX_GPIO(GPIO_PD5, PD5_DATA), -	PINMUX_GPIO(GPIO_PD4, PD4_DATA), -	PINMUX_GPIO(GPIO_PD3, PD3_DATA), -	PINMUX_GPIO(GPIO_PD2, PD2_DATA), -	PINMUX_GPIO(GPIO_PD1, PD1_DATA), -	PINMUX_GPIO(GPIO_PD0, PD0_DATA), - -	/* PE */ -	PINMUX_GPIO(GPIO_PE5, PE7_DATA), -	PINMUX_GPIO(GPIO_PE4, PE6_DATA), - -	/* PF */ -	PINMUX_GPIO(GPIO_PF7, PF7_DATA), -	PINMUX_GPIO(GPIO_PF6, PF6_DATA), -	PINMUX_GPIO(GPIO_PF5, PF5_DATA), -	PINMUX_GPIO(GPIO_PF4, PF4_DATA), -	PINMUX_GPIO(GPIO_PF3, PF3_DATA), -	PINMUX_GPIO(GPIO_PF2, PF2_DATA), -	PINMUX_GPIO(GPIO_PF1, PF1_DATA), -	PINMUX_GPIO(GPIO_PF0, PF0_DATA), - -	/* PG */ -	PINMUX_GPIO(GPIO_PG7, PG7_DATA), -	PINMUX_GPIO(GPIO_PG6, PG6_DATA), -	PINMUX_GPIO(GPIO_PG5, PG5_DATA), - -	/* PH */ -	PINMUX_GPIO(GPIO_PH7, PH7_DATA), -	PINMUX_GPIO(GPIO_PH6, PH6_DATA), -	PINMUX_GPIO(GPIO_PH5, PH5_DATA), -	PINMUX_GPIO(GPIO_PH4, PH4_DATA), -	PINMUX_GPIO(GPIO_PH3, PH3_DATA), -	PINMUX_GPIO(GPIO_PH2, PH2_DATA), -	PINMUX_GPIO(GPIO_PH1, PH1_DATA), -	PINMUX_GPIO(GPIO_PH0, PH0_DATA), - -	/* PJ */ -	PINMUX_GPIO(GPIO_PJ7, PJ7_DATA), -	PINMUX_GPIO(GPIO_PJ6, PJ6_DATA), -	PINMUX_GPIO(GPIO_PJ5, PJ5_DATA), -	PINMUX_GPIO(GPIO_PJ4, PJ4_DATA), -	PINMUX_GPIO(GPIO_PJ3, PJ3_DATA), -	PINMUX_GPIO(GPIO_PJ2, PJ2_DATA), -	PINMUX_GPIO(GPIO_PJ1, PJ1_DATA), - -	/* FN */ -	PINMUX_GPIO(GPIO_FN_CDE,		CDE_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_MAGIC,		ETH_MAGIC_MARK), -	PINMUX_GPIO(GPIO_FN_DISP,		DISP_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_LINK,		ETH_LINK_MARK), -	PINMUX_GPIO(GPIO_FN_DR5,		DR5_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_TX_ER,		ETH_TX_ER_MARK), -	PINMUX_GPIO(GPIO_FN_DR4,		DR4_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_TX_EN,		ETH_TX_EN_MARK), -	PINMUX_GPIO(GPIO_FN_DR3,		DR3_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_TXD3,		ETH_TXD3_MARK), -	PINMUX_GPIO(GPIO_FN_DR2,		DR2_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_TXD2,		ETH_TXD2_MARK), -	PINMUX_GPIO(GPIO_FN_DR1,		DR1_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_TXD1,		ETH_TXD1_MARK), -	PINMUX_GPIO(GPIO_FN_DR0,		DR0_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_TXD0,		ETH_TXD0_MARK), -	PINMUX_GPIO(GPIO_FN_VSYNC,		VSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_HSPI_CLK,		HSPI_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_ODDF,		ODDF_MARK), -	PINMUX_GPIO(GPIO_FN_HSPI_CS,		HSPI_CS_MARK), -	PINMUX_GPIO(GPIO_FN_DG5,		DG5_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_MDIO,		ETH_MDIO_MARK), -	PINMUX_GPIO(GPIO_FN_DG4,		DG4_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_RX_CLK,		ETH_RX_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_DG3,		DG3_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_MDC,		ETH_MDC_MARK), -	PINMUX_GPIO(GPIO_FN_DG2,		DG2_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_COL,		ETH_COL_MARK), -	PINMUX_GPIO(GPIO_FN_DG1,		DG1_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_TX_CLK,		ETH_TX_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_DG0,		DG0_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_CRS,		ETH_CRS_MARK), -	PINMUX_GPIO(GPIO_FN_DCLKIN,		DCLKIN_MARK), -	PINMUX_GPIO(GPIO_FN_HSPI_RX,		HSPI_RX_MARK), -	PINMUX_GPIO(GPIO_FN_HSYNC,		HSYNC_MARK), -	PINMUX_GPIO(GPIO_FN_HSPI_TX,		HSPI_TX_MARK), -	PINMUX_GPIO(GPIO_FN_DB5,		DB5_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_RXD3,		ETH_RXD3_MARK), -	PINMUX_GPIO(GPIO_FN_DB4,		DB4_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_RXD2,		ETH_RXD2_MARK), -	PINMUX_GPIO(GPIO_FN_DB3,		DB3_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_RXD1,		ETH_RXD1_MARK), -	PINMUX_GPIO(GPIO_FN_DB2,		DB2_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_RXD0,		ETH_RXD0_MARK), -	PINMUX_GPIO(GPIO_FN_DB1,		DB1_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_RX_DV,		ETH_RX_DV_MARK), -	PINMUX_GPIO(GPIO_FN_DB0,		DB0_MARK), -	PINMUX_GPIO(GPIO_FN_ETH_RX_ER,		ETH_RX_ER_MARK), -	PINMUX_GPIO(GPIO_FN_DCLKOUT,		DCLKOUT_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_SCK,		SCIF1_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_RXD,		SCIF1_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF1_TXD,		SCIF1_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_DACK1,		DACK1_MARK), -	PINMUX_GPIO(GPIO_FN_BACK,		BACK_MARK), -	PINMUX_GPIO(GPIO_FN_FALE,		FALE_MARK), -	PINMUX_GPIO(GPIO_FN_DACK0,		DACK0_MARK), -	PINMUX_GPIO(GPIO_FN_FCLE,		FCLE_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ1,		DREQ1_MARK), -	PINMUX_GPIO(GPIO_FN_BREQ,		BREQ_MARK), -	PINMUX_GPIO(GPIO_FN_USB_OVC1,		USB_OVC1_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ0,		DREQ0_MARK), -	PINMUX_GPIO(GPIO_FN_USB_OVC0,		USB_OVC0_MARK), -	PINMUX_GPIO(GPIO_FN_USB_PENC1,		USB_PENC1_MARK), -	PINMUX_GPIO(GPIO_FN_USB_PENC0,		USB_PENC0_MARK), -	PINMUX_GPIO(GPIO_FN_HAC1_SDOUT,		HAC1_SDOUT_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_SDATA,		SSI1_SDATA_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF1CMD,		SDIF1CMD_MARK), -	PINMUX_GPIO(GPIO_FN_HAC1_SDIN,		HAC1_SDIN_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_SCK,		SSI1_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF1CD,		SDIF1CD_MARK), -	PINMUX_GPIO(GPIO_FN_HAC1_SYNC,		HAC1_SYNC_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_WS,		SSI1_WS_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF1WP,		SDIF1WP_MARK), -	PINMUX_GPIO(GPIO_FN_HAC1_BITCLK,	HAC1_BITCLK_MARK), -	PINMUX_GPIO(GPIO_FN_SSI1_CLK,		SSI1_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF1CLK,		SDIF1CLK_MARK), -	PINMUX_GPIO(GPIO_FN_HAC0_SDOUT,		HAC0_SDOUT_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_SDATA,		SSI0_SDATA_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF1D3,		SDIF1D3_MARK), -	PINMUX_GPIO(GPIO_FN_HAC0_SDIN,		HAC0_SDIN_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_SCK,		SSI0_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF1D2,		SDIF1D2_MARK), -	PINMUX_GPIO(GPIO_FN_HAC0_SYNC,		HAC0_SYNC_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_WS,		SSI0_WS_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF1D1,		SDIF1D1_MARK), -	PINMUX_GPIO(GPIO_FN_HAC0_BITCLK,	HAC0_BITCLK_MARK), -	PINMUX_GPIO(GPIO_FN_SSI0_CLK,		SSI0_CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF1D0,		SDIF1D0_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_SCK,		SCIF3_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SSI2_SDATA,		SSI2_SDATA_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_RXD,		SCIF3_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_TCLK,		TCLK_MARK), -	PINMUX_GPIO(GPIO_FN_SSI2_SCK,		SSI2_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF3_TXD,		SCIF3_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_HAC_RES,		HAC_RES_MARK), -	PINMUX_GPIO(GPIO_FN_SSI2_WS,		SSI2_WS_MARK), -	PINMUX_GPIO(GPIO_FN_DACK3,		DACK3_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF0CMD,		SDIF0CMD_MARK), -	PINMUX_GPIO(GPIO_FN_DACK2,		DACK2_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF0CD,		SDIF0CD_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ3,		DREQ3_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF0WP,		SDIF0WP_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_CTS,		SCIF0_CTS_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ2,		DREQ2_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF0CLK,		SDIF0CLK_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_RTS,		SCIF0_RTS_MARK), -	PINMUX_GPIO(GPIO_FN_IRL7,		IRL7_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF0D3,		SDIF0D3_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_SCK,		SCIF0_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_IRL6,		IRL6_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF0D2,		SDIF0D2_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_RXD,		SCIF0_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_IRL5,		IRL5_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF0D1,		SDIF0D1_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF0_TXD,		SCIF0_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_IRL4,		IRL4_MARK), -	PINMUX_GPIO(GPIO_FN_SDIF0D0,		SDIF0D0_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_SCK,		SCIF5_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_FRB,		FRB_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_RXD,		SCIF5_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_IOIS16,		IOIS16_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF5_TXD,		SCIF5_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_CE2B,		CE2B_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK3,		DRAK3_MARK), -	PINMUX_GPIO(GPIO_FN_CE2A,		CE2A_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_SCK,		SCIF4_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK2,		DRAK2_MARK), -	PINMUX_GPIO(GPIO_FN_SSI3_WS,		SSI3_WS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_RXD,		SCIF4_RXD_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK1,		DRAK1_MARK), -	PINMUX_GPIO(GPIO_FN_SSI3_SDATA,		SSI3_SDATA_MARK), -	PINMUX_GPIO(GPIO_FN_FSTATUS,		FSTATUS_MARK), -	PINMUX_GPIO(GPIO_FN_SCIF4_TXD,		SCIF4_TXD_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK0,		DRAK0_MARK), -	PINMUX_GPIO(GPIO_FN_SSI3_SCK,		SSI3_SCK_MARK), -	PINMUX_GPIO(GPIO_FN_FSE,		FSE_MARK), -}; - -static struct pinmux_cfg_reg pinmux_config_regs[] = { -	{ PINMUX_CFG_REG("PACR", 0xffcc0000, 16, 2) { -		PA7_FN, PA7_OUT, PA7_IN, PA7_IN_PU, -		PA6_FN, PA6_OUT, PA6_IN, PA6_IN_PU, -		PA5_FN, PA5_OUT, PA5_IN, PA5_IN_PU, -		PA4_FN, PA4_OUT, PA4_IN, PA4_IN_PU, -		PA3_FN, PA3_OUT, PA3_IN, PA3_IN_PU, -		PA2_FN, PA2_OUT, PA2_IN, PA2_IN_PU, -		PA1_FN, PA1_OUT, PA1_IN, PA1_IN_PU, -		PA0_FN, PA0_OUT, PA0_IN, PA0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PBCR", 0xffcc0002, 16, 2) { -		PB7_FN, PB7_OUT, PB7_IN, PB7_IN_PU, -		PB6_FN, PB6_OUT, PB6_IN, PB6_IN_PU, -		PB5_FN, PB5_OUT, PB5_IN, PB5_IN_PU, -		PB4_FN, PB4_OUT, PB4_IN, PB4_IN_PU, -		PB3_FN, PB3_OUT, PB3_IN, PB3_IN_PU, -		PB2_FN, PB2_OUT, PB2_IN, PB2_IN_PU, -		PB1_FN, PB1_OUT, PB1_IN, PB1_IN_PU, -		PB0_FN, PB0_OUT, PB0_IN, PB0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PCCR", 0xffcc0004, 16, 2) { -		PC7_FN, PC7_OUT, PC7_IN, PC7_IN_PU, -		PC6_FN, PC6_OUT, PC6_IN, PC6_IN_PU, -		PC5_FN, PC5_OUT, PC5_IN, PC5_IN_PU, -		PC4_FN, PC4_OUT, PC4_IN, PC4_IN_PU, -		PC3_FN, PC3_OUT, PC3_IN, PC3_IN_PU, -		PC2_FN, PC2_OUT, PC2_IN, PC2_IN_PU, -		PC1_FN, PC1_OUT, PC1_IN, PC1_IN_PU, -		PC0_FN, PC0_OUT, PC0_IN, PC0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PDCR", 0xffcc0006, 16, 2) { -		PD7_FN, PD7_OUT, PD7_IN, PD7_IN_PU, -		PD6_FN, PD6_OUT, PD6_IN, PD6_IN_PU, -		PD5_FN, PD5_OUT, PD5_IN, PD5_IN_PU, -		PD4_FN, PD4_OUT, PD4_IN, PD4_IN_PU, -		PD3_FN, PD3_OUT, PD3_IN, PD3_IN_PU, -		PD2_FN, PD2_OUT, PD2_IN, PD2_IN_PU, -		PD1_FN, PD1_OUT, PD1_IN, PD1_IN_PU, -		PD0_FN, PD0_OUT, PD0_IN, PD0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PECR", 0xffcc0008, 16, 2) { -		PE7_FN, PE7_OUT, PE7_IN, PE7_IN_PU, -		PE6_FN, PE6_OUT, PE6_IN, PE6_IN_PU, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, } -	}, -	{ PINMUX_CFG_REG("PFCR", 0xffcc000a, 16, 2) { -		PF7_FN, PF7_OUT, PF7_IN, PF7_IN_PU, -		PF6_FN, PF6_OUT, PF6_IN, PF6_IN_PU, -		PF5_FN, PF5_OUT, PF5_IN, PF5_IN_PU, -		PF4_FN, PF4_OUT, PF4_IN, PF4_IN_PU, -		PF3_FN, PF3_OUT, PF3_IN, PF3_IN_PU, -		PF2_FN, PF2_OUT, PF2_IN, PF2_IN_PU, -		PF1_FN, PF1_OUT, PF1_IN, PF1_IN_PU, -		PF0_FN, PF0_OUT, PF0_IN, PF0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PGCR", 0xffcc000c, 16, 2) { -		PG7_FN, PG7_OUT, PG7_IN, PG7_IN_PU, -		PG6_FN, PG6_OUT, PG6_IN, PG6_IN_PU, -		PG5_FN, PG5_OUT, PG5_IN, PG5_IN_PU, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, -		0, 0, 0, 0, } -	}, -	{ PINMUX_CFG_REG("PHCR", 0xffcc000e, 16, 2) { -		PH7_FN, PH7_OUT, PH7_IN, PH7_IN_PU, -		PH6_FN, PH6_OUT, PH6_IN, PH6_IN_PU, -		PH5_FN, PH5_OUT, PH5_IN, PH5_IN_PU, -		PH4_FN, PH4_OUT, PH4_IN, PH4_IN_PU, -		PH3_FN, PH3_OUT, PH3_IN, PH3_IN_PU, -		PH2_FN, PH2_OUT, PH2_IN, PH2_IN_PU, -		PH1_FN, PH1_OUT, PH1_IN, PH1_IN_PU, -		PH0_FN, PH0_OUT, PH0_IN, PH0_IN_PU } -	}, -	{ PINMUX_CFG_REG("PJCR", 0xffcc0010, 16, 2) { -		PJ7_FN, PJ7_OUT, PJ7_IN, PJ7_IN_PU, -		PJ6_FN, PJ6_OUT, PJ6_IN, PJ6_IN_PU, -		PJ5_FN, PJ5_OUT, PJ5_IN, PJ5_IN_PU, -		PJ4_FN, PJ4_OUT, PJ4_IN, PJ4_IN_PU, -		PJ3_FN, PJ3_OUT, PJ3_IN, PJ3_IN_PU, -		PJ2_FN, PJ2_OUT, PJ2_IN, PJ2_IN_PU, -		PJ1_FN, PJ1_OUT, PJ1_IN, PJ1_IN_PU, -		0, 0, 0, 0, } -	}, -	{ PINMUX_CFG_REG("P1MSELR", 0xffcc0080, 16, 1) { -		0, 0, -		P1MSEL14_0, P1MSEL14_1, -		P1MSEL13_0, P1MSEL13_1, -		P1MSEL12_0, P1MSEL12_1, -		P1MSEL11_0, P1MSEL11_1, -		P1MSEL10_0, P1MSEL10_1, -		P1MSEL9_0,  P1MSEL9_1, -		P1MSEL8_0,  P1MSEL8_1, -		P1MSEL7_0,  P1MSEL7_1, -		P1MSEL6_0,  P1MSEL6_1, -		P1MSEL5_0,  P1MSEL5_1, -		P1MSEL4_0,  P1MSEL4_1, -		P1MSEL3_0,  P1MSEL3_1, -		P1MSEL2_0,  P1MSEL2_1, -		P1MSEL1_0,  P1MSEL1_1, -		P1MSEL0_0,  P1MSEL0_1 } -	}, -	{ PINMUX_CFG_REG("P2MSELR", 0xffcc0082, 16, 1) { -		P2MSEL15_0, P2MSEL15_1, -		P2MSEL14_0, P2MSEL14_1, -		P2MSEL13_0, P2MSEL13_1, -		P2MSEL12_0, P2MSEL12_1, -		P2MSEL11_0, P2MSEL11_1, -		P2MSEL10_0, P2MSEL10_1, -		P2MSEL9_0,  P2MSEL9_1, -		P2MSEL8_0,  P2MSEL8_1, -		P2MSEL7_0,  P2MSEL7_1, -		P2MSEL6_0,  P2MSEL6_1, -		P2MSEL5_0,  P2MSEL5_1, -		P2MSEL4_0,  P2MSEL4_1, -		P2MSEL3_0,  P2MSEL3_1, -		P2MSEL2_0,  P2MSEL2_1, -		P2MSEL1_0,  P2MSEL1_1, -		P2MSEL0_0,  P2MSEL0_1 } +static struct resource sh7786_pfc_resources[] = { +	[0] = { +		.start	= 0xffcc0000, +		.end	= 0xffcc008f, +		.flags	= IORESOURCE_MEM,  	}, -	{} -}; - -static struct pinmux_data_reg pinmux_data_regs[] = { -	{ PINMUX_DATA_REG("PADR", 0xffcc0020, 8) { -		PA7_DATA, PA6_DATA, PA5_DATA, PA4_DATA, -		PA3_DATA, PA2_DATA, PA1_DATA, PA0_DATA } -	}, -	{ PINMUX_DATA_REG("PBDR", 0xffcc0022, 8) { -		PB7_DATA, PB6_DATA, PB5_DATA, PB4_DATA, -		PB3_DATA, PB2_DATA, PB1_DATA, PB0_DATA } -	}, -	{ PINMUX_DATA_REG("PCDR", 0xffcc0024, 8) { -		PC7_DATA, PC6_DATA, PC5_DATA, PC4_DATA, -		PC3_DATA, PC2_DATA, PC1_DATA, PC0_DATA } -	}, -	{ PINMUX_DATA_REG("PDDR", 0xffcc0026, 8) { -		PD7_DATA, PD6_DATA, PD5_DATA, PD4_DATA, -		PD3_DATA, PD2_DATA, PD1_DATA, PD0_DATA } -	}, -	{ PINMUX_DATA_REG("PEDR", 0xffcc0028, 8) { -		PE7_DATA, PE6_DATA, -		0, 0, 0, 0, 0, 0 } -	}, -	{ PINMUX_DATA_REG("PFDR", 0xffcc002a, 8) { -		PF7_DATA, PF6_DATA, PF5_DATA, PF4_DATA, -		PF3_DATA, PF2_DATA, PF1_DATA, PF0_DATA } -	}, -	{ PINMUX_DATA_REG("PGDR", 0xffcc002c, 8) { -		PG7_DATA, PG6_DATA, PG5_DATA, 0, -		0, 0, 0, 0 } -	}, -	{ PINMUX_DATA_REG("PHDR", 0xffcc002e, 8) { -		PH7_DATA, PH6_DATA, PH5_DATA, PH4_DATA, -		PH3_DATA, PH2_DATA, PH1_DATA, PH0_DATA } -	}, -	{ PINMUX_DATA_REG("PJDR", 0xffcc0030, 8) { -		PJ7_DATA, PJ6_DATA, PJ5_DATA, PJ4_DATA, -		PJ3_DATA, PJ2_DATA, PJ1_DATA, 0 } -	}, -	{ }, -}; - -static struct pinmux_info sh7786_pinmux_info = { -	.name = "sh7786_pfc", -	.reserved_id = PINMUX_RESERVED, -	.data = { PINMUX_DATA_BEGIN, PINMUX_DATA_END }, -	.input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END }, -	.input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END }, -	.output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END }, -	.mark = { PINMUX_MARK_BEGIN, PINMUX_MARK_END }, -	.function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, - -	.first_gpio = GPIO_PA7, -	.last_gpio = GPIO_FN_FSE, - -	.gpios = pinmux_gpios, -	.cfg_regs = pinmux_config_regs, -	.data_regs = pinmux_data_regs, - -	.gpio_data = pinmux_data, -	.gpio_data_size = ARRAY_SIZE(pinmux_data),  };  static int __init plat_pinmux_setup(void)  { -	return register_pinmux(&sh7786_pinmux_info); +	return sh_pfc_register("pfc-sh7786", sh7786_pfc_resources, +			       ARRAY_SIZE(sh7786_pfc_resources));  } -  arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh4a/pinmux-shx3.c b/arch/sh/kernel/cpu/sh4a/pinmux-shx3.c index aaa5338abbf..444bf25c60f 100644 --- a/arch/sh/kernel/cpu/sh4a/pinmux-shx3.c +++ b/arch/sh/kernel/cpu/sh4a/pinmux-shx3.c @@ -7,581 +7,23 @@   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   */ +#include <linux/bug.h>  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/gpio.h> -#include <cpu/shx3.h> +#include <linux/ioport.h> +#include <cpu/pfc.h> -enum { -	PINMUX_RESERVED = 0, - -	PINMUX_DATA_BEGIN, -	PA7_DATA, PA6_DATA, PA5_DATA, PA4_DATA, -	PA3_DATA, PA2_DATA, PA1_DATA, PA0_DATA, -	PB7_DATA, PB6_DATA, PB5_DATA, PB4_DATA, -	PB3_DATA, PB2_DATA, PB1_DATA, PB0_DATA, -	PC7_DATA, PC6_DATA, PC5_DATA, PC4_DATA, -	PC3_DATA, PC2_DATA, PC1_DATA, PC0_DATA, -	PD7_DATA, PD6_DATA, PD5_DATA, PD4_DATA, -	PD3_DATA, PD2_DATA, PD1_DATA, PD0_DATA, -	PE7_DATA, PE6_DATA, PE5_DATA, PE4_DATA, -	PE3_DATA, PE2_DATA, PE1_DATA, PE0_DATA, -	PF7_DATA, PF6_DATA, PF5_DATA, PF4_DATA, -	PF3_DATA, PF2_DATA, PF1_DATA, PF0_DATA, -	PG7_DATA, PG6_DATA, PG5_DATA, PG4_DATA, -	PG3_DATA, PG2_DATA, PG1_DATA, PG0_DATA, - -	PH5_DATA, PH4_DATA, -	PH3_DATA, PH2_DATA, PH1_DATA, PH0_DATA, -	PINMUX_DATA_END, - -	PINMUX_INPUT_BEGIN, -	PA7_IN, PA6_IN, PA5_IN, PA4_IN, -	PA3_IN, PA2_IN, PA1_IN, PA0_IN, -	PB7_IN, PB6_IN, PB5_IN, PB4_IN, -	PB3_IN, PB2_IN, PB1_IN, PB0_IN, -	PC7_IN, PC6_IN, PC5_IN, PC4_IN, -	PC3_IN, PC2_IN, PC1_IN, PC0_IN, -	PD7_IN, PD6_IN, PD5_IN, PD4_IN, -	PD3_IN, PD2_IN, PD1_IN, PD0_IN, -	PE7_IN, PE6_IN, PE5_IN, PE4_IN, -	PE3_IN, PE2_IN, PE1_IN, PE0_IN, -	PF7_IN, PF6_IN, PF5_IN, PF4_IN, -	PF3_IN, PF2_IN, PF1_IN, PF0_IN, -	PG7_IN, PG6_IN, PG5_IN, PG4_IN, -	PG3_IN, PG2_IN, PG1_IN, PG0_IN, - -	PH5_IN, PH4_IN, -	PH3_IN, PH2_IN, PH1_IN, PH0_IN, -	PINMUX_INPUT_END, - -	PINMUX_INPUT_PULLUP_BEGIN, -	PA7_IN_PU, PA6_IN_PU, PA5_IN_PU, PA4_IN_PU, -	PA3_IN_PU, PA2_IN_PU, PA1_IN_PU, PA0_IN_PU, -	PB7_IN_PU, PB6_IN_PU, PB5_IN_PU, PB4_IN_PU, -	PB3_IN_PU, PB2_IN_PU, PB1_IN_PU, PB0_IN_PU, -	PC7_IN_PU, PC6_IN_PU, PC5_IN_PU, PC4_IN_PU, -	PC3_IN_PU, PC2_IN_PU, PC1_IN_PU, PC0_IN_PU, -	PD7_IN_PU, PD6_IN_PU, PD5_IN_PU, PD4_IN_PU, -	PD3_IN_PU, PD2_IN_PU, PD1_IN_PU, PD0_IN_PU, -	PE7_IN_PU, PE6_IN_PU, PE5_IN_PU, PE4_IN_PU, -	PE3_IN_PU, PE2_IN_PU, PE1_IN_PU, PE0_IN_PU, -	PF7_IN_PU, PF6_IN_PU, PF5_IN_PU, PF4_IN_PU, -	PF3_IN_PU, PF2_IN_PU, PF1_IN_PU, PF0_IN_PU, -	PG7_IN_PU, PG6_IN_PU, PG5_IN_PU, PG4_IN_PU, -	PG3_IN_PU, PG2_IN_PU, PG1_IN_PU, PG0_IN_PU, - -	PH5_IN_PU, PH4_IN_PU, -	PH3_IN_PU, PH2_IN_PU, PH1_IN_PU, PH0_IN_PU, -	PINMUX_INPUT_PULLUP_END, - -	PINMUX_OUTPUT_BEGIN, -	PA7_OUT, PA6_OUT, PA5_OUT, PA4_OUT, -	PA3_OUT, PA2_OUT, PA1_OUT, PA0_OUT, -	PB7_OUT, PB6_OUT, PB5_OUT, PB4_OUT, -	PB3_OUT, PB2_OUT, PB1_OUT, PB0_OUT, -	PC7_OUT, PC6_OUT, PC5_OUT, PC4_OUT, -	PC3_OUT, PC2_OUT, PC1_OUT, PC0_OUT, -	PD7_OUT, PD6_OUT, PD5_OUT, PD4_OUT, -	PD3_OUT, PD2_OUT, PD1_OUT, PD0_OUT, -	PE7_OUT, PE6_OUT, PE5_OUT, PE4_OUT, -	PE3_OUT, PE2_OUT, PE1_OUT, PE0_OUT, -	PF7_OUT, PF6_OUT, PF5_OUT, PF4_OUT, -	PF3_OUT, PF2_OUT, PF1_OUT, PF0_OUT, -	PG7_OUT, PG6_OUT, PG5_OUT, PG4_OUT, -	PG3_OUT, PG2_OUT, PG1_OUT, PG0_OUT, - -	PH5_OUT, PH4_OUT, -	PH3_OUT, PH2_OUT, PH1_OUT, PH0_OUT, -	PINMUX_OUTPUT_END, - -	PINMUX_FUNCTION_BEGIN, -	PA7_FN, PA6_FN, PA5_FN, PA4_FN, -	PA3_FN, PA2_FN, PA1_FN, PA0_FN, -	PB7_FN, PB6_FN, PB5_FN, PB4_FN, -	PB3_FN, PB2_FN, PB1_FN, PB0_FN, -	PC7_FN, PC6_FN, PC5_FN, PC4_FN, -	PC3_FN, PC2_FN, PC1_FN, PC0_FN, -	PD7_FN, PD6_FN, PD5_FN, PD4_FN, -	PD3_FN, PD2_FN, PD1_FN, PD0_FN, -	PE7_FN, PE6_FN, PE5_FN, PE4_FN, -	PE3_FN, PE2_FN, PE1_FN, PE0_FN, -	PF7_FN, PF6_FN, PF5_FN, PF4_FN, -	PF3_FN, PF2_FN, PF1_FN, PF0_FN, -	PG7_FN, PG6_FN, PG5_FN, PG4_FN, -	PG3_FN, PG2_FN, PG1_FN, PG0_FN, - -	PH5_FN, PH4_FN, -	PH3_FN, PH2_FN, PH1_FN, PH0_FN, -	PINMUX_FUNCTION_END, - -	PINMUX_MARK_BEGIN, - -	D31_MARK, D30_MARK, D29_MARK, D28_MARK, D27_MARK, D26_MARK, -	D25_MARK, D24_MARK, D23_MARK, D22_MARK, D21_MARK, D20_MARK, -	D19_MARK, D18_MARK, D17_MARK, D16_MARK, - -	BACK_MARK, BREQ_MARK, -	WE3_MARK, WE2_MARK, -	CS6_MARK, CS5_MARK, CS4_MARK, -	CLKOUTENB_MARK, - -	DACK3_MARK, DACK2_MARK, DACK1_MARK, DACK0_MARK, -	DREQ3_MARK, DREQ2_MARK, DREQ1_MARK, DREQ0_MARK, - -	IRQ3_MARK, IRQ2_MARK, IRQ1_MARK, IRQ0_MARK, - -	DRAK3_MARK, DRAK2_MARK, DRAK1_MARK, DRAK0_MARK, - -	SCK3_MARK, SCK2_MARK, SCK1_MARK, SCK0_MARK, -	IRL3_MARK, IRL2_MARK, IRL1_MARK, IRL0_MARK, -	TXD3_MARK, TXD2_MARK, TXD1_MARK, TXD0_MARK, -	RXD3_MARK, RXD2_MARK, RXD1_MARK, RXD0_MARK, - -	CE2B_MARK, CE2A_MARK, IOIS16_MARK, -	STATUS1_MARK, STATUS0_MARK, - -	IRQOUT_MARK, - -	PINMUX_MARK_END, -}; - -static pinmux_enum_t shx3_pinmux_data[] = { - -	/* PA GPIO */ -	PINMUX_DATA(PA7_DATA, PA7_IN, PA7_OUT, PA7_IN_PU), -	PINMUX_DATA(PA6_DATA, PA6_IN, PA6_OUT, PA6_IN_PU), -	PINMUX_DATA(PA5_DATA, PA5_IN, PA5_OUT, PA5_IN_PU), -	PINMUX_DATA(PA4_DATA, PA4_IN, PA4_OUT, PA4_IN_PU), -	PINMUX_DATA(PA3_DATA, PA3_IN, PA3_OUT, PA3_IN_PU), -	PINMUX_DATA(PA2_DATA, PA2_IN, PA2_OUT, PA2_IN_PU), -	PINMUX_DATA(PA1_DATA, PA1_IN, PA1_OUT, PA1_IN_PU), -	PINMUX_DATA(PA0_DATA, PA0_IN, PA0_OUT, PA0_IN_PU), - -	/* PB GPIO */ -	PINMUX_DATA(PB7_DATA, PB7_IN, PB7_OUT, PB7_IN_PU), -	PINMUX_DATA(PB6_DATA, PB6_IN, PB6_OUT, PB6_IN_PU), -	PINMUX_DATA(PB5_DATA, PB5_IN, PB5_OUT, PB5_IN_PU), -	PINMUX_DATA(PB4_DATA, PB4_IN, PB4_OUT, PB4_IN_PU), -	PINMUX_DATA(PB3_DATA, PB3_IN, PB3_OUT, PB3_IN_PU), -	PINMUX_DATA(PB2_DATA, PB2_IN, PB2_OUT, PB2_IN_PU), -	PINMUX_DATA(PB1_DATA, PB1_IN, PB1_OUT, PB1_IN_PU), -	PINMUX_DATA(PB0_DATA, PB0_IN, PB0_OUT, PB0_IN_PU), - -	/* PC GPIO */ -	PINMUX_DATA(PC7_DATA, PC7_IN, PC7_OUT, PC7_IN_PU), -	PINMUX_DATA(PC6_DATA, PC6_IN, PC6_OUT, PC6_IN_PU), -	PINMUX_DATA(PC5_DATA, PC5_IN, PC5_OUT, PC5_IN_PU), -	PINMUX_DATA(PC4_DATA, PC4_IN, PC4_OUT, PC4_IN_PU), -	PINMUX_DATA(PC3_DATA, PC3_IN, PC3_OUT, PC3_IN_PU), -	PINMUX_DATA(PC2_DATA, PC2_IN, PC2_OUT, PC2_IN_PU), -	PINMUX_DATA(PC1_DATA, PC1_IN, PC1_OUT, PC1_IN_PU), -	PINMUX_DATA(PC0_DATA, PC0_IN, PC0_OUT, PC0_IN_PU), - -	/* PD GPIO */ -	PINMUX_DATA(PD7_DATA, PD7_IN, PD7_OUT, PD7_IN_PU), -	PINMUX_DATA(PD6_DATA, PD6_IN, PD6_OUT, PD6_IN_PU), -	PINMUX_DATA(PD5_DATA, PD5_IN, PD5_OUT, PD5_IN_PU), -	PINMUX_DATA(PD4_DATA, PD4_IN, PD4_OUT, PD4_IN_PU), -	PINMUX_DATA(PD3_DATA, PD3_IN, PD3_OUT, PD3_IN_PU), -	PINMUX_DATA(PD2_DATA, PD2_IN, PD2_OUT, PD2_IN_PU), -	PINMUX_DATA(PD1_DATA, PD1_IN, PD1_OUT, PD1_IN_PU), -	PINMUX_DATA(PD0_DATA, PD0_IN, PD0_OUT, PD0_IN_PU), - -	/* PE GPIO */ -	PINMUX_DATA(PE7_DATA, PE7_IN, PE7_OUT, PE7_IN_PU), -	PINMUX_DATA(PE6_DATA, PE6_IN, PE6_OUT, PE6_IN_PU), -	PINMUX_DATA(PE5_DATA, PE5_IN, PE5_OUT, PE5_IN_PU), -	PINMUX_DATA(PE4_DATA, PE4_IN, PE4_OUT, PE4_IN_PU), -	PINMUX_DATA(PE3_DATA, PE3_IN, PE3_OUT, PE3_IN_PU), -	PINMUX_DATA(PE2_DATA, PE2_IN, PE2_OUT, PE2_IN_PU), -	PINMUX_DATA(PE1_DATA, PE1_IN, PE1_OUT, PE1_IN_PU), -	PINMUX_DATA(PE0_DATA, PE0_IN, PE0_OUT, PE0_IN_PU), - -	/* PF GPIO */ -	PINMUX_DATA(PF7_DATA, PF7_IN, PF7_OUT, PF7_IN_PU), -	PINMUX_DATA(PF6_DATA, PF6_IN, PF6_OUT, PF6_IN_PU), -	PINMUX_DATA(PF5_DATA, PF5_IN, PF5_OUT, PF5_IN_PU), -	PINMUX_DATA(PF4_DATA, PF4_IN, PF4_OUT, PF4_IN_PU), -	PINMUX_DATA(PF3_DATA, PF3_IN, PF3_OUT, PF3_IN_PU), -	PINMUX_DATA(PF2_DATA, PF2_IN, PF2_OUT, PF2_IN_PU), -	PINMUX_DATA(PF1_DATA, PF1_IN, PF1_OUT, PF1_IN_PU), -	PINMUX_DATA(PF0_DATA, PF0_IN, PF0_OUT, PF0_IN_PU), - -	/* PG GPIO */ -	PINMUX_DATA(PG7_DATA, PG7_IN, PG7_OUT, PG7_IN_PU), -	PINMUX_DATA(PG6_DATA, PG6_IN, PG6_OUT, PG6_IN_PU), -	PINMUX_DATA(PG5_DATA, PG5_IN, PG5_OUT, PG5_IN_PU), -	PINMUX_DATA(PG4_DATA, PG4_IN, PG4_OUT, PG4_IN_PU), -	PINMUX_DATA(PG3_DATA, PG3_IN, PG3_OUT, PG3_IN_PU), -	PINMUX_DATA(PG2_DATA, PG2_IN, PG2_OUT, PG2_IN_PU), -	PINMUX_DATA(PG1_DATA, PG1_IN, PG1_OUT, PG1_IN_PU), -	PINMUX_DATA(PG0_DATA, PG0_IN, PG0_OUT, PG0_IN_PU), - -	/* PH GPIO */ -	PINMUX_DATA(PH5_DATA, PH5_IN, PH5_OUT, PH5_IN_PU), -	PINMUX_DATA(PH4_DATA, PH4_IN, PH4_OUT, PH4_IN_PU), -	PINMUX_DATA(PH3_DATA, PH3_IN, PH3_OUT, PH3_IN_PU), -	PINMUX_DATA(PH2_DATA, PH2_IN, PH2_OUT, PH2_IN_PU), -	PINMUX_DATA(PH1_DATA, PH1_IN, PH1_OUT, PH1_IN_PU), -	PINMUX_DATA(PH0_DATA, PH0_IN, PH0_OUT, PH0_IN_PU), - -	/* PA FN */ -	PINMUX_DATA(D31_MARK, PA7_FN), -	PINMUX_DATA(D30_MARK, PA6_FN), -	PINMUX_DATA(D29_MARK, PA5_FN), -	PINMUX_DATA(D28_MARK, PA4_FN), -	PINMUX_DATA(D27_MARK, PA3_FN), -	PINMUX_DATA(D26_MARK, PA2_FN), -	PINMUX_DATA(D25_MARK, PA1_FN), -	PINMUX_DATA(D24_MARK, PA0_FN), - -	/* PB FN */ -	PINMUX_DATA(D23_MARK, PB7_FN), -	PINMUX_DATA(D22_MARK, PB6_FN), -	PINMUX_DATA(D21_MARK, PB5_FN), -	PINMUX_DATA(D20_MARK, PB4_FN), -	PINMUX_DATA(D19_MARK, PB3_FN), -	PINMUX_DATA(D18_MARK, PB2_FN), -	PINMUX_DATA(D17_MARK, PB1_FN), -	PINMUX_DATA(D16_MARK, PB0_FN), - -	/* PC FN */ -	PINMUX_DATA(BACK_MARK,		PC7_FN), -	PINMUX_DATA(BREQ_MARK,		PC6_FN), -	PINMUX_DATA(WE3_MARK,		PC5_FN), -	PINMUX_DATA(WE2_MARK,		PC4_FN), -	PINMUX_DATA(CS6_MARK,		PC3_FN), -	PINMUX_DATA(CS5_MARK,		PC2_FN), -	PINMUX_DATA(CS4_MARK,		PC1_FN), -	PINMUX_DATA(CLKOUTENB_MARK,	PC0_FN), - -	/* PD FN */ -	PINMUX_DATA(DACK3_MARK,	PD7_FN), -	PINMUX_DATA(DACK2_MARK, PD6_FN), -	PINMUX_DATA(DACK1_MARK, PD5_FN), -	PINMUX_DATA(DACK0_MARK, PD4_FN), -	PINMUX_DATA(DREQ3_MARK, PD3_FN), -	PINMUX_DATA(DREQ2_MARK, PD2_FN), -	PINMUX_DATA(DREQ1_MARK, PD1_FN), -	PINMUX_DATA(DREQ0_MARK, PD0_FN), - -	/* PE FN */ -	PINMUX_DATA(IRQ3_MARK,	PE7_FN), -	PINMUX_DATA(IRQ2_MARK,	PE6_FN), -	PINMUX_DATA(IRQ1_MARK,	PE5_FN), -	PINMUX_DATA(IRQ0_MARK,	PE4_FN), -	PINMUX_DATA(DRAK3_MARK, PE3_FN), -	PINMUX_DATA(DRAK2_MARK, PE2_FN), -	PINMUX_DATA(DRAK1_MARK, PE1_FN), -	PINMUX_DATA(DRAK0_MARK, PE0_FN), - -	/* PF FN */ -	PINMUX_DATA(SCK3_MARK, PF7_FN), -	PINMUX_DATA(SCK2_MARK, PF6_FN), -	PINMUX_DATA(SCK1_MARK, PF5_FN), -	PINMUX_DATA(SCK0_MARK, PF4_FN), -	PINMUX_DATA(IRL3_MARK, PF3_FN), -	PINMUX_DATA(IRL2_MARK, PF2_FN), -	PINMUX_DATA(IRL1_MARK, PF1_FN), -	PINMUX_DATA(IRL0_MARK, PF0_FN), - -	/* PG FN */ -	PINMUX_DATA(TXD3_MARK, PG7_FN), -	PINMUX_DATA(TXD2_MARK, PG6_FN), -	PINMUX_DATA(TXD1_MARK, PG5_FN), -	PINMUX_DATA(TXD0_MARK, PG4_FN), -	PINMUX_DATA(RXD3_MARK, PG3_FN), -	PINMUX_DATA(RXD2_MARK, PG2_FN), -	PINMUX_DATA(RXD1_MARK, PG1_FN), -	PINMUX_DATA(RXD0_MARK, PG0_FN), - -	/* PH FN */ -	PINMUX_DATA(CE2B_MARK,		PH5_FN), -	PINMUX_DATA(CE2A_MARK,		PH4_FN), -	PINMUX_DATA(IOIS16_MARK,	PH3_FN), -	PINMUX_DATA(STATUS1_MARK,	PH2_FN), -	PINMUX_DATA(STATUS0_MARK,	PH1_FN), -	PINMUX_DATA(IRQOUT_MARK,	PH0_FN), -}; - -static struct pinmux_gpio shx3_pinmux_gpios[] = { -	/* PA */ -	PINMUX_GPIO(GPIO_PA7, PA7_DATA), -	PINMUX_GPIO(GPIO_PA6, PA6_DATA), -	PINMUX_GPIO(GPIO_PA5, PA5_DATA), -	PINMUX_GPIO(GPIO_PA4, PA4_DATA), -	PINMUX_GPIO(GPIO_PA3, PA3_DATA), -	PINMUX_GPIO(GPIO_PA2, PA2_DATA), -	PINMUX_GPIO(GPIO_PA1, PA1_DATA), -	PINMUX_GPIO(GPIO_PA0, PA0_DATA), - -	/* PB */ -	PINMUX_GPIO(GPIO_PB7, PB7_DATA), -	PINMUX_GPIO(GPIO_PB6, PB6_DATA), -	PINMUX_GPIO(GPIO_PB5, PB5_DATA), -	PINMUX_GPIO(GPIO_PB4, PB4_DATA), -	PINMUX_GPIO(GPIO_PB3, PB3_DATA), -	PINMUX_GPIO(GPIO_PB2, PB2_DATA), -	PINMUX_GPIO(GPIO_PB1, PB1_DATA), -	PINMUX_GPIO(GPIO_PB0, PB0_DATA), - -	/* PC */ -	PINMUX_GPIO(GPIO_PC7, PC7_DATA), -	PINMUX_GPIO(GPIO_PC6, PC6_DATA), -	PINMUX_GPIO(GPIO_PC5, PC5_DATA), -	PINMUX_GPIO(GPIO_PC4, PC4_DATA), -	PINMUX_GPIO(GPIO_PC3, PC3_DATA), -	PINMUX_GPIO(GPIO_PC2, PC2_DATA), -	PINMUX_GPIO(GPIO_PC1, PC1_DATA), -	PINMUX_GPIO(GPIO_PC0, PC0_DATA), - -	/* PD */ -	PINMUX_GPIO(GPIO_PD7, PD7_DATA), -	PINMUX_GPIO(GPIO_PD6, PD6_DATA), -	PINMUX_GPIO(GPIO_PD5, PD5_DATA), -	PINMUX_GPIO(GPIO_PD4, PD4_DATA), -	PINMUX_GPIO(GPIO_PD3, PD3_DATA), -	PINMUX_GPIO(GPIO_PD2, PD2_DATA), -	PINMUX_GPIO(GPIO_PD1, PD1_DATA), -	PINMUX_GPIO(GPIO_PD0, PD0_DATA), - -	/* PE */ -	PINMUX_GPIO(GPIO_PE7, PE7_DATA), -	PINMUX_GPIO(GPIO_PE6, PE6_DATA), -	PINMUX_GPIO(GPIO_PE5, PE5_DATA), -	PINMUX_GPIO(GPIO_PE4, PE4_DATA), -	PINMUX_GPIO(GPIO_PE3, PE3_DATA), -	PINMUX_GPIO(GPIO_PE2, PE2_DATA), -	PINMUX_GPIO(GPIO_PE1, PE1_DATA), -	PINMUX_GPIO(GPIO_PE0, PE0_DATA), - -	/* PF */ -	PINMUX_GPIO(GPIO_PF7, PF7_DATA), -	PINMUX_GPIO(GPIO_PF6, PF6_DATA), -	PINMUX_GPIO(GPIO_PF5, PF5_DATA), -	PINMUX_GPIO(GPIO_PF4, PF4_DATA), -	PINMUX_GPIO(GPIO_PF3, PF3_DATA), -	PINMUX_GPIO(GPIO_PF2, PF2_DATA), -	PINMUX_GPIO(GPIO_PF1, PF1_DATA), -	PINMUX_GPIO(GPIO_PF0, PF0_DATA), - -	/* PG */ -	PINMUX_GPIO(GPIO_PG7, PG7_DATA), -	PINMUX_GPIO(GPIO_PG6, PG6_DATA), -	PINMUX_GPIO(GPIO_PG5, PG5_DATA), -	PINMUX_GPIO(GPIO_PG4, PG4_DATA), -	PINMUX_GPIO(GPIO_PG3, PG3_DATA), -	PINMUX_GPIO(GPIO_PG2, PG2_DATA), -	PINMUX_GPIO(GPIO_PG1, PG1_DATA), -	PINMUX_GPIO(GPIO_PG0, PG0_DATA), - -	/* PH */ -	PINMUX_GPIO(GPIO_PH5, PH5_DATA), -	PINMUX_GPIO(GPIO_PH4, PH4_DATA), -	PINMUX_GPIO(GPIO_PH3, PH3_DATA), -	PINMUX_GPIO(GPIO_PH2, PH2_DATA), -	PINMUX_GPIO(GPIO_PH1, PH1_DATA), -	PINMUX_GPIO(GPIO_PH0, PH0_DATA), - -	/* FN */ -	PINMUX_GPIO(GPIO_FN_D31,	D31_MARK), -	PINMUX_GPIO(GPIO_FN_D30,	D30_MARK), -	PINMUX_GPIO(GPIO_FN_D29,	D29_MARK), -	PINMUX_GPIO(GPIO_FN_D28,	D28_MARK), -	PINMUX_GPIO(GPIO_FN_D27,	D27_MARK), -	PINMUX_GPIO(GPIO_FN_D26,	D26_MARK), -	PINMUX_GPIO(GPIO_FN_D25,	D25_MARK), -	PINMUX_GPIO(GPIO_FN_D24,	D24_MARK), -	PINMUX_GPIO(GPIO_FN_D23,	D23_MARK), -	PINMUX_GPIO(GPIO_FN_D22,	D22_MARK), -	PINMUX_GPIO(GPIO_FN_D21,	D21_MARK), -	PINMUX_GPIO(GPIO_FN_D20,	D20_MARK), -	PINMUX_GPIO(GPIO_FN_D19,	D19_MARK), -	PINMUX_GPIO(GPIO_FN_D18,	D18_MARK), -	PINMUX_GPIO(GPIO_FN_D17,	D17_MARK), -	PINMUX_GPIO(GPIO_FN_D16,	D16_MARK), -	PINMUX_GPIO(GPIO_FN_BACK,	BACK_MARK), -	PINMUX_GPIO(GPIO_FN_BREQ,	BREQ_MARK), -	PINMUX_GPIO(GPIO_FN_WE3,	WE3_MARK), -	PINMUX_GPIO(GPIO_FN_WE2,	WE2_MARK), -	PINMUX_GPIO(GPIO_FN_CS6,	CS6_MARK), -	PINMUX_GPIO(GPIO_FN_CS5,	CS5_MARK), -	PINMUX_GPIO(GPIO_FN_CS4,	CS4_MARK), -	PINMUX_GPIO(GPIO_FN_CLKOUTENB,	CLKOUTENB_MARK), -	PINMUX_GPIO(GPIO_FN_DACK3,	DACK3_MARK), -	PINMUX_GPIO(GPIO_FN_DACK2,	DACK2_MARK), -	PINMUX_GPIO(GPIO_FN_DACK1,	DACK1_MARK), -	PINMUX_GPIO(GPIO_FN_DACK0,	DACK0_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ3,	DREQ3_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ2,	DREQ2_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ1,	DREQ1_MARK), -	PINMUX_GPIO(GPIO_FN_DREQ0,	DREQ0_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ3,	IRQ3_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ2,	IRQ2_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ1,	IRQ1_MARK), -	PINMUX_GPIO(GPIO_FN_IRQ0,	IRQ0_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK3,	DRAK3_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK2,	DRAK2_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK1,	DRAK1_MARK), -	PINMUX_GPIO(GPIO_FN_DRAK0,	DRAK0_MARK), -	PINMUX_GPIO(GPIO_FN_SCK3,	SCK3_MARK), -	PINMUX_GPIO(GPIO_FN_SCK2,	SCK2_MARK), -	PINMUX_GPIO(GPIO_FN_SCK1,	SCK1_MARK), -	PINMUX_GPIO(GPIO_FN_SCK0,	SCK0_MARK), -	PINMUX_GPIO(GPIO_FN_IRL3,	IRL3_MARK), -	PINMUX_GPIO(GPIO_FN_IRL2,	IRL2_MARK), -	PINMUX_GPIO(GPIO_FN_IRL1,	IRL1_MARK), -	PINMUX_GPIO(GPIO_FN_IRL0,	IRL0_MARK), -	PINMUX_GPIO(GPIO_FN_TXD3,	TXD3_MARK), -	PINMUX_GPIO(GPIO_FN_TXD2,	TXD2_MARK), -	PINMUX_GPIO(GPIO_FN_TXD1,	TXD1_MARK), -	PINMUX_GPIO(GPIO_FN_TXD0,	TXD0_MARK), -	PINMUX_GPIO(GPIO_FN_RXD3,	RXD3_MARK), -	PINMUX_GPIO(GPIO_FN_RXD2,	RXD2_MARK), -	PINMUX_GPIO(GPIO_FN_RXD1,	RXD1_MARK), -	PINMUX_GPIO(GPIO_FN_RXD0,	RXD0_MARK), -	PINMUX_GPIO(GPIO_FN_CE2B,	CE2B_MARK), -	PINMUX_GPIO(GPIO_FN_CE2A,	CE2A_MARK), -	PINMUX_GPIO(GPIO_FN_IOIS16,	IOIS16_MARK), -	PINMUX_GPIO(GPIO_FN_STATUS1,	STATUS1_MARK), -	PINMUX_GPIO(GPIO_FN_STATUS0,	STATUS0_MARK), -	PINMUX_GPIO(GPIO_FN_IRQOUT,	IRQOUT_MARK), -}; - -static struct pinmux_cfg_reg shx3_pinmux_config_regs[] = { -	{ PINMUX_CFG_REG("PABCR", 0xffc70000, 32, 2) { -		PA7_FN, PA7_OUT, PA7_IN, PA7_IN_PU, -		PA6_FN, PA6_OUT, PA6_IN, PA6_IN_PU, -		PA5_FN, PA5_OUT, PA5_IN, PA5_IN_PU, -		PA4_FN, PA4_OUT, PA4_IN, PA4_IN_PU, -		PA3_FN, PA3_OUT, PA3_IN, PA3_IN_PU, -		PA2_FN, PA2_OUT, PA2_IN, PA2_IN_PU, -		PA1_FN, PA1_OUT, PA1_IN, PA1_IN_PU, -		PA0_FN, PA0_OUT, PA0_IN, PA0_IN_PU, -		PB7_FN, PB7_OUT, PB7_IN, PB7_IN_PU, -		PB6_FN, PB6_OUT, PB6_IN, PB6_IN_PU, -		PB5_FN, PB5_OUT, PB5_IN, PB5_IN_PU, -		PB4_FN, PB4_OUT, PB4_IN, PB4_IN_PU, -		PB3_FN, PB3_OUT, PB3_IN, PB3_IN_PU, -		PB2_FN, PB2_OUT, PB2_IN, PB2_IN_PU, -		PB1_FN, PB1_OUT, PB1_IN, PB1_IN_PU, -		PB0_FN, PB0_OUT, PB0_IN, PB0_IN_PU, }, +static struct resource shx3_pfc_resources[] = { +	[0] = { +		.start	= 0xffc70000, +		.end	= 0xffc7001f, +		.flags	= IORESOURCE_MEM,  	}, -	{ PINMUX_CFG_REG("PCDCR", 0xffc70004, 32, 2) { -		PC7_FN, PC7_OUT, PC7_IN, PC7_IN_PU, -		PC6_FN, PC6_OUT, PC6_IN, PC6_IN_PU, -		PC5_FN, PC5_OUT, PC5_IN, PC5_IN_PU, -		PC4_FN, PC4_OUT, PC4_IN, PC4_IN_PU, -		PC3_FN, PC3_OUT, PC3_IN, PC3_IN_PU, -		PC2_FN, PC2_OUT, PC2_IN, PC2_IN_PU, -		PC1_FN, PC1_OUT, PC1_IN, PC1_IN_PU, -		PC0_FN, PC0_OUT, PC0_IN, PC0_IN_PU, -		PD7_FN, PD7_OUT, PD7_IN, PD7_IN_PU, -		PD6_FN, PD6_OUT, PD6_IN, PD6_IN_PU, -		PD5_FN, PD5_OUT, PD5_IN, PD5_IN_PU, -		PD4_FN, PD4_OUT, PD4_IN, PD4_IN_PU, -		PD3_FN, PD3_OUT, PD3_IN, PD3_IN_PU, -		PD2_FN, PD2_OUT, PD2_IN, PD2_IN_PU, -		PD1_FN, PD1_OUT, PD1_IN, PD1_IN_PU, -		PD0_FN, PD0_OUT, PD0_IN, PD0_IN_PU, }, -	}, -	{ PINMUX_CFG_REG("PEFCR", 0xffc70008, 32, 2) { -		PE7_FN, PE7_OUT, PE7_IN, PE7_IN_PU, -		PE6_FN, PE6_OUT, PE6_IN, PE6_IN_PU, -		PE5_FN, PE5_OUT, PE5_IN, PE5_IN_PU, -		PE4_FN, PE4_OUT, PE4_IN, PE4_IN_PU, -		PE3_FN, PE3_OUT, PE3_IN, PE3_IN_PU, -		PE2_FN, PE2_OUT, PE2_IN, PE2_IN_PU, -		PE1_FN, PE1_OUT, PE1_IN, PE1_IN_PU, -		PE0_FN, PE0_OUT, PE0_IN, PE0_IN_PU, -		PF7_FN, PF7_OUT, PF7_IN, PF7_IN_PU, -		PF6_FN, PF6_OUT, PF6_IN, PF6_IN_PU, -		PF5_FN, PF5_OUT, PF5_IN, PF5_IN_PU, -		PF4_FN, PF4_OUT, PF4_IN, PF4_IN_PU, -		PF3_FN, PF3_OUT, PF3_IN, PF3_IN_PU, -		PF2_FN, PF2_OUT, PF2_IN, PF2_IN_PU, -		PF1_FN, PF1_OUT, PF1_IN, PF1_IN_PU, -		PF0_FN, PF0_OUT, PF0_IN, PF0_IN_PU, }, -	}, -	{ PINMUX_CFG_REG("PGHCR", 0xffc7000c, 32, 2) { -		PG7_FN, PG7_OUT, PG7_IN, PG7_IN_PU, -		PG6_FN, PG6_OUT, PG6_IN, PG6_IN_PU, -		PG5_FN, PG5_OUT, PG5_IN, PG5_IN_PU, -		PG4_FN, PG4_OUT, PG4_IN, PG4_IN_PU, -		PG3_FN, PG3_OUT, PG3_IN, PG3_IN_PU, -		PG2_FN, PG2_OUT, PG2_IN, PG2_IN_PU, -		PG1_FN, PG1_OUT, PG1_IN, PG1_IN_PU, -		PG0_FN, PG0_OUT, PG0_IN, PG0_IN_PU, -		0, 0, 0, 0, -		0, 0, 0, 0, -		PH5_FN, PH5_OUT, PH5_IN, PH5_IN_PU, -		PH4_FN, PH4_OUT, PH4_IN, PH4_IN_PU, -		PH3_FN, PH3_OUT, PH3_IN, PH3_IN_PU, -		PH2_FN, PH2_OUT, PH2_IN, PH2_IN_PU, -		PH1_FN, PH1_OUT, PH1_IN, PH1_IN_PU, -		PH0_FN, PH0_OUT, PH0_IN, PH0_IN_PU, }, -	}, -	{ }, -}; - -static struct pinmux_data_reg shx3_pinmux_data_regs[] = { -	{ PINMUX_DATA_REG("PABDR", 0xffc70010, 32) { -		0, 0, 0, 0, 0, 0, 0, 0, -		PA7_DATA, PA6_DATA, PA5_DATA, PA4_DATA, -		PA3_DATA, PA2_DATA, PA1_DATA, PA0_DATA, -		0, 0, 0, 0, 0, 0, 0, 0, -		PB7_DATA, PB6_DATA, PB5_DATA, PB4_DATA, -		PB3_DATA, PB2_DATA, PB1_DATA, PB0_DATA, }, -	}, -	{ PINMUX_DATA_REG("PCDDR", 0xffc70014, 32) { -		0, 0, 0, 0, 0, 0, 0, 0, -		PC7_DATA, PC6_DATA, PC5_DATA, PC4_DATA, -		PC3_DATA, PC2_DATA, PC1_DATA, PC0_DATA, -		0, 0, 0, 0, 0, 0, 0, 0, -		PD7_DATA, PD6_DATA, PD5_DATA, PD4_DATA, -		PD3_DATA, PD2_DATA, PD1_DATA, PD0_DATA, }, -	}, -	{ PINMUX_DATA_REG("PEFDR", 0xffc70018, 32) { -		0, 0, 0, 0, 0, 0, 0, 0, -		PE7_DATA, PE6_DATA, PE5_DATA, PE4_DATA, -		PE3_DATA, PE2_DATA, PE1_DATA, PE0_DATA, -		0, 0, 0, 0, 0, 0, 0, 0, -		PF7_DATA, PF6_DATA, PF5_DATA, PF4_DATA, -		PF3_DATA, PF2_DATA, PF1_DATA, PF0_DATA, }, -	}, -	{ PINMUX_DATA_REG("PGHDR", 0xffc7001c, 32) { -		0, 0, 0, 0, 0, 0, 0, 0, -		PG7_DATA, PG6_DATA, PG5_DATA, PG4_DATA, -		PG3_DATA, PG2_DATA, PG1_DATA, PG0_DATA, -		0, 0, 0, 0, 0, 0, 0, 0, -		0, 0, PH5_DATA, PH4_DATA, -		PH3_DATA, PH2_DATA, PH1_DATA, PH0_DATA, }, -	}, -	{ }, -}; - -static struct pinmux_info shx3_pinmux_info = { -	.name		= "shx3_pfc", -	.reserved_id	= PINMUX_RESERVED, -	.data		= { PINMUX_DATA_BEGIN,	   PINMUX_DATA_END }, -	.input		= { PINMUX_INPUT_BEGIN,	   PINMUX_INPUT_END }, -	.input_pu	= { PINMUX_INPUT_PULLUP_BEGIN, -			    PINMUX_INPUT_PULLUP_END }, -	.output		= { PINMUX_OUTPUT_BEGIN,   PINMUX_OUTPUT_END }, -	.mark		= { PINMUX_MARK_BEGIN,     PINMUX_MARK_END }, -	.function	= { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END }, -	.first_gpio	= GPIO_PA7, -	.last_gpio	= GPIO_FN_IRQOUT, -	.gpios		= shx3_pinmux_gpios, -	.gpio_data	= shx3_pinmux_data, -	.gpio_data_size	= ARRAY_SIZE(shx3_pinmux_data), -	.cfg_regs	= shx3_pinmux_config_regs, -	.data_regs	= shx3_pinmux_data_regs,  }; -static int __init shx3_pinmux_setup(void) +static int __init plat_pinmux_setup(void)  { -	return register_pinmux(&shx3_pinmux_info); +	return sh_pfc_register("pfc-shx3", shx3_pfc_resources, +			       ARRAY_SIZE(shx3_pfc_resources));  } -arch_initcall(shx3_pinmux_setup); +arch_initcall(plat_pinmux_setup); diff --git a/arch/sh/kernel/cpu/sh4a/serial-sh7722.c b/arch/sh/kernel/cpu/sh4a/serial-sh7722.c new file mode 100644 index 00000000000..59bc3a72702 --- /dev/null +++ b/arch/sh/kernel/cpu/sh4a/serial-sh7722.c @@ -0,0 +1,23 @@ +#include <linux/serial_sci.h> +#include <linux/serial_core.h> +#include <linux/io.h> + +#define PSCR 0xA405011E + +static void sh7722_sci_init_pins(struct uart_port *port, unsigned int cflag) +{ +	unsigned short data; + +	if (port->mapbase == 0xffe00000) { +		data = __raw_readw(PSCR); +		data &= ~0x03cf; +		if (!(cflag & CRTSCTS)) +			data |= 0x0340; + +		__raw_writew(data, PSCR); +	} +} + +struct plat_sci_port_ops sh7722_sci_port_ops = { +	.init_pins	= sh7722_sci_init_pins, +}; diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7343.c b/arch/sh/kernel/cpu/sh4a/setup-sh7343.c index 3681cafdb4a..ceb3dedad98 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7343.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7343.c @@ -13,64 +13,89 @@  #include <linux/serial_sci.h>  #include <linux/uio_driver.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <asm/clock.h>  /* Serial */  static struct plat_sci_port scif0_platform_data = { -	.mapbase        = 0xffe00000,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_CKE1,  	.type           = PORT_SCIF, -	.irqs           = { 80, 80, 80, 80 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffe00000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc00)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase        = 0xffe10000,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_CKE1,  	.type           = PORT_SCIF, -	.irqs           = { 81, 81, 81, 81 }, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffe10000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc20)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase        = 0xffe20000,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_CKE1,  	.type           = PORT_SCIF, -	.irqs           = { 82, 82, 82, 82 }, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xffe20000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc40)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase        = 0xffe30000,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_CKE1,  	.type           = PORT_SCIF, -	.irqs           = { 83, 83, 83, 83 }, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xffe30000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc60)),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	}, @@ -84,8 +109,8 @@ static struct resource iic0_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 96, -		.end    = 99, +		.start  = evt2irq(0xe00), +		.end    = evt2irq(0xe60),  		.flags  = IORESOURCE_IRQ,         },  }; @@ -105,8 +130,8 @@ static struct resource iic1_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 44, -		.end    = 47, +		.start  = evt2irq(0x780), +		.end    = evt2irq(0x7e0),  		.flags  = IORESOURCE_IRQ,         },  }; @@ -121,7 +146,7 @@ static struct platform_device iic1_device = {  static struct uio_info vpu_platform_data = {  	.name = "VPU4",  	.version = "0", -	.irq = 60, +	.irq = evt2irq(0x980),  };  static struct resource vpu_resources[] = { @@ -149,7 +174,7 @@ static struct platform_device vpu_device = {  static struct uio_info veu_platform_data = {  	.name = "VEU",  	.version = "0", -	.irq = 54, +	.irq = evt2irq(0x8c0),  };  static struct resource veu_resources[] = { @@ -177,7 +202,7 @@ static struct platform_device veu_device = {  static struct uio_info jpu_platform_data = {  	.name = "JPU",  	.version = "0", -	.irq = 27, +	.irq = evt2irq(0x560),  };  static struct resource jpu_resources[] = { @@ -203,26 +228,16 @@ static struct platform_device jpu_device = {  };  static struct sh_timer_config cmt_platform_data = { -	.channel_offset = 0x60, -	.timer_bit = 5, -	.clockevent_rating = 125, -	.clocksource_rating = 200, +	.channels_mask = 0x20,  };  static struct resource cmt_resources[] = { -	[0] = { -		.start	= 0x044a0060, -		.end	= 0x044a006b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0x044a0000, 0x70), +	DEFINE_RES_IRQ(evt2irq(0xf00)),  };  static struct platform_device cmt_device = { -	.name		= "sh_cmt", +	.name		= "sh-cmt-32",  	.id		= 0,  	.dev = {  		.platform_data	= &cmt_platform_data, @@ -232,25 +247,18 @@ static struct platform_device cmt_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -259,61 +267,6 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; -  static struct platform_device *sh7343_devices[] __initdata = {  	&scif0_device,  	&scif1_device, @@ -321,8 +274,6 @@ static struct platform_device *sh7343_devices[] __initdata = {  	&scif3_device,  	&cmt_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  	&iic0_device,  	&iic1_device,  	&vpu_device, @@ -348,8 +299,6 @@ static struct platform_device *sh7343_early_devices[] __initdata = {  	&scif3_device,  	&cmt_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  void __init plat_early_device_setup(void) @@ -360,6 +309,8 @@ void __init plat_early_device_setup(void)  enum {  	UNUSED = 0, +	ENABLED, +	DISABLED,  	/* interrupt sources */  	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, @@ -375,15 +326,13 @@ enum {  	I2C0_ALI, I2C0_TACKI, I2C0_WAITI, I2C0_DTEI,  	I2C1_ALI, I2C1_TACKI, I2C1_WAITI, I2C1_DTEI,  	SIM_TEI, SIM_TXI, SIM_RXI, SIM_ERI, -	IRDA, -	SDHI0, SDHI1, SDHI2, SDHI3, -	CMT, TSIF, SIU, +	IRDA, SDHI, CMT, TSIF, SIU,  	TMU0, TMU1, TMU2,  	JPU, LCDC,  	/* interrupt groups */ -	DMAC0123, VIOVOU, MMC, DMAC45, FLCTL, I2C0, I2C1, SIM, SDHI, USB, +	DMAC0123, VIOVOU, MMC, DMAC45, FLCTL, I2C0, I2C1, SIM, USB,  };  static struct intc_vect vectors[] __initdata = { @@ -412,8 +361,8 @@ static struct intc_vect vectors[] __initdata = {  	INTC_VECT(FLCTL_FLTREQ0I, 0xdc0), INTC_VECT(FLCTL_FLTREQ1I, 0xde0),  	INTC_VECT(I2C0_ALI, 0xe00), INTC_VECT(I2C0_TACKI, 0xe20),  	INTC_VECT(I2C0_WAITI, 0xe40), INTC_VECT(I2C0_DTEI, 0xe60), -	INTC_VECT(SDHI0, 0xe80), INTC_VECT(SDHI1, 0xea0), -	INTC_VECT(SDHI2, 0xec0), INTC_VECT(SDHI3, 0xee0), +	INTC_VECT(SDHI, 0xe80), INTC_VECT(SDHI, 0xea0), +	INTC_VECT(SDHI, 0xec0), INTC_VECT(SDHI, 0xee0),  	INTC_VECT(CMT, 0xf00), INTC_VECT(TSIF, 0xf20),  	INTC_VECT(SIU, 0xf80),  	INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420), @@ -431,7 +380,6 @@ static struct intc_group groups[] __initdata = {  	INTC_GROUP(I2C0, I2C0_ALI, I2C0_TACKI, I2C0_WAITI, I2C0_DTEI),  	INTC_GROUP(I2C1, I2C1_ALI, I2C1_TACKI, I2C1_WAITI, I2C1_DTEI),  	INTC_GROUP(SIM, SIM_TEI, SIM_TXI, SIM_RXI, SIM_ERI), -	INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2, SDHI3),  	INTC_GROUP(USB, USBI0, USBI1),  }; @@ -452,7 +400,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	  { I2C0_DTEI, I2C0_WAITI, I2C0_TACKI, I2C0_ALI,  	    FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLENDI, FLCTL_FLSTEI } },  	{ 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */ -	  { SDHI3, SDHI2, SDHI1, SDHI0, 0, 0, 0, SIU } }, +	  { DISABLED, ENABLED, ENABLED, ENABLED, 0, 0, 0, SIU } },  	{ 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */  	  { 0, 0, 0, CMT, 0, USBI1, USBI0 } },  	{ 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */ @@ -488,9 +436,13 @@ static struct intc_mask_reg ack_registers[] __initdata = {  	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },  }; -static DECLARE_INTC_DESC_ACK(intc_desc, "sh7343", vectors, groups, -			     mask_registers, prio_registers, sense_registers, -			     ack_registers); +static struct intc_desc intc_desc __initdata = { +	.name = "sh7343", +	.force_enable = ENABLED, +	.force_disable = DISABLED, +	.hw = INTC_HW_DESC(vectors, groups, mask_registers, +			   prio_registers, sense_registers, ack_registers), +};  void __init plat_irq_setup(void)  { diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7366.c b/arch/sh/kernel/cpu/sh4a/setup-sh7366.c index 8dab9e1bbd8..f75f6734313 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7366.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7366.c @@ -15,19 +15,27 @@  #include <linux/serial_sci.h>  #include <linux/uio_driver.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <linux/usb/r8a66597.h>  #include <asm/clock.h>  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xffe00000, +	.port_reg	= 0xa405013e,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 80, 80, 80, 80 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffe00000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc00)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	}, @@ -41,8 +49,8 @@ static struct resource iic_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 96, -		.end    = 99, +		.start  = evt2irq(0xe00), +		.end    = evt2irq(0xe60),  		.flags  = IORESOURCE_IRQ,         },  }; @@ -65,8 +73,8 @@ static struct resource usb_host_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 65, -		.end    = 65, +		.start  = evt2irq(0xa20), +		.end    = evt2irq(0xa20),  		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,  	},  }; @@ -86,7 +94,7 @@ static struct platform_device usb_host_device = {  static struct uio_info vpu_platform_data = {  	.name = "VPU5",  	.version = "0", -	.irq = 60, +	.irq = evt2irq(0x980),  };  static struct resource vpu_resources[] = { @@ -114,7 +122,7 @@ static struct platform_device vpu_device = {  static struct uio_info veu0_platform_data = {  	.name = "VEU",  	.version = "0", -	.irq = 54, +	.irq = evt2irq(0x8c0),  };  static struct resource veu0_resources[] = { @@ -142,7 +150,7 @@ static struct platform_device veu0_device = {  static struct uio_info veu1_platform_data = {  	.name = "VEU",  	.version = "0", -	.irq = 27, +	.irq = evt2irq(0x560),  };  static struct resource veu1_resources[] = { @@ -168,26 +176,16 @@ static struct platform_device veu1_device = {  };  static struct sh_timer_config cmt_platform_data = { -	.channel_offset = 0x60, -	.timer_bit = 5, -	.clockevent_rating = 125, -	.clocksource_rating = 200, +	.channels_mask = 0x20,  };  static struct resource cmt_resources[] = { -	[0] = { -		.start	= 0x044a0060, -		.end	= 0x044a006b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0x044a0000, 0x70), +	DEFINE_RES_IRQ(evt2irq(0xf00)),  };  static struct platform_device cmt_device = { -	.name		= "sh_cmt", +	.name		= "sh-cmt-32",  	.id		= 0,  	.dev = {  		.platform_data	= &cmt_platform_data, @@ -197,25 +195,18 @@ static struct platform_device cmt_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -224,67 +215,10 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; -  static struct platform_device *sh7366_devices[] __initdata = {  	&scif0_device,  	&cmt_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  	&iic_device,  	&usb_host_device,  	&vpu_device, @@ -307,8 +241,6 @@ static struct platform_device *sh7366_early_devices[] __initdata = {  	&scif0_device,  	&cmt_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  void __init plat_early_device_setup(void) @@ -319,6 +251,8 @@ void __init plat_early_device_setup(void)  enum {  	UNUSED=0, +	ENABLED, +	DISABLED,  	/* interrupt sources */  	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, @@ -332,14 +266,13 @@ enum {  	DENC, MSIOF,  	FLCTL_FLSTEI, FLCTL_FLENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I,  	I2C_ALI, I2C_TACKI, I2C_WAITI, I2C_DTEI, -	SDHI0, SDHI1, SDHI2, SDHI3, -	CMT, TSIF, SIU, +	SDHI, CMT, TSIF, SIU,  	TMU0, TMU1, TMU2,  	VEU2, LCDC,  	/* interrupt groups */ -	DMAC0123, VIOVOU, MMC, DMAC45, FLCTL, I2C, SDHI, +	DMAC0123, VIOVOU, MMC, DMAC45, FLCTL, I2C,  };  static struct intc_vect vectors[] __initdata = { @@ -364,8 +297,8 @@ static struct intc_vect vectors[] __initdata = {  	INTC_VECT(FLCTL_FLTREQ0I, 0xdc0), INTC_VECT(FLCTL_FLTREQ1I, 0xde0),  	INTC_VECT(I2C_ALI, 0xe00), INTC_VECT(I2C_TACKI, 0xe20),  	INTC_VECT(I2C_WAITI, 0xe40), INTC_VECT(I2C_DTEI, 0xe60), -	INTC_VECT(SDHI0, 0xe80), INTC_VECT(SDHI1, 0xea0), -	INTC_VECT(SDHI2, 0xec0), INTC_VECT(SDHI3, 0xee0), +	INTC_VECT(SDHI, 0xe80), INTC_VECT(SDHI, 0xea0), +	INTC_VECT(SDHI, 0xec0), INTC_VECT(SDHI, 0xee0),  	INTC_VECT(CMT, 0xf00), INTC_VECT(TSIF, 0xf20),  	INTC_VECT(SIU, 0xf80),  	INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420), @@ -381,7 +314,6 @@ static struct intc_group groups[] __initdata = {  	INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLENDI,  		   FLCTL_FLTREQ0I, FLCTL_FLTREQ1I),  	INTC_GROUP(I2C, I2C_ALI, I2C_TACKI, I2C_WAITI, I2C_DTEI), -	INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2, SDHI3),  };  static struct intc_mask_reg mask_registers[] __initdata = { @@ -403,7 +335,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	  { I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,  	    FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLENDI, FLCTL_FLSTEI } },  	{ 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */ -	  { SDHI3, SDHI2, SDHI1, SDHI0, 0, 0, 0, SIU } }, +	  { DISABLED, ENABLED, ENABLED, ENABLED, 0, 0, 0, SIU } },  	{ 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */  	  { 0, 0, 0, CMT, 0, USB, } },  	{ 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */ @@ -441,9 +373,13 @@ static struct intc_mask_reg ack_registers[] __initdata = {  	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },  }; -static DECLARE_INTC_DESC_ACK(intc_desc, "sh7366", vectors, groups, -			     mask_registers, prio_registers, sense_registers, -			     ack_registers); +static struct intc_desc intc_desc __initdata = { +	.name = "sh7366", +	.force_enable = ENABLED, +	.force_disable = DISABLED, +	.hw = INTC_HW_DESC(vectors, groups, mask_registers, +			   prio_registers, sense_registers, ack_registers), +};  void __init plat_irq_setup(void)  { diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c index d551ed8dea9..57f83a92a50 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c @@ -12,7 +12,9 @@  #include <linux/platform_device.h>  #include <linux/serial.h>  #include <linux/serial_sci.h> +#include <linux/sh_dma.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <linux/uio_driver.h>  #include <linux/usb/m66592.h> @@ -22,6 +24,7 @@  #include <cpu/dma-register.h>  #include <cpu/sh7722.h> +#include <cpu/serial.h>  static const struct sh_dmae_slave_config sh7722_dmae_slaves[] = {  	{ @@ -145,21 +148,21 @@ static struct resource sh7722_dmae_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	{ -		/* DMA error IRQ */ -		.start	= 78, -		.end	= 78, +		.name	= "error_irq", +		.start	= evt2irq(0xbc0), +		.end	= evt2irq(0xbc0),  		.flags	= IORESOURCE_IRQ,  	},  	{  		/* IRQ for channels 0-3 */ -		.start	= 48, -		.end	= 51, +		.start	= evt2irq(0x800), +		.end	= evt2irq(0x860),  		.flags	= IORESOURCE_IRQ,  	},  	{  		/* IRQ for channels 4-5 */ -		.start	= 76, -		.end	= 77, +		.start	= evt2irq(0xb80), +		.end	= evt2irq(0xba0),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -172,52 +175,73 @@ struct platform_device dma_device = {  	.dev		= {  		.platform_data	= &dma_platform_data,  	}, -	.archdata = { -		.hwblk_id = HWBLK_DMAC, -	},  };  /* Serial */  static struct plat_sci_port scif0_platform_data = { -	.mapbase        = 0xffe00000,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type           = PORT_SCIF, -	.irqs           = { 80, 80, 80, 80 }, +	.ops		= &sh7722_sci_port_ops, +	.regtype	= SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffe00000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc00)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase        = 0xffe10000,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type           = PORT_SCIF, -	.irqs           = { 81, 81, 81, 81 }, +	.ops		= &sh7722_sci_port_ops, +	.regtype	= SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffe10000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc20)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase        = 0xffe20000,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type           = PORT_SCIF, -	.irqs           = { 82, 82, 82, 82 }, +	.ops		= &sh7722_sci_port_ops, +	.regtype	= SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xffe20000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc40)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	}, @@ -231,17 +255,17 @@ static struct resource rtc_resources[] = {  	},  	[1] = {  		/* Period IRQ */ -		.start	= 45, +		.start	= evt2irq(0x7a0),  		.flags	= IORESOURCE_IRQ,  	},  	[2] = {  		/* Carry IRQ */ -		.start	= 46, +		.start	= evt2irq(0x7c0),  		.flags	= IORESOURCE_IRQ,  	},  	[3] = {  		/* Alarm IRQ */ -		.start	= 44, +		.start	= evt2irq(0x780),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -251,9 +275,6 @@ static struct platform_device rtc_device = {  	.id		= -1,  	.num_resources	= ARRAY_SIZE(rtc_resources),  	.resource	= rtc_resources, -	.archdata = { -		.hwblk_id = HWBLK_RTC, -	},  };  static struct m66592_platdata usbf_platdata = { @@ -268,8 +289,8 @@ static struct resource usbf_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 65, -		.end	= 65, +		.start	= evt2irq(0xa20), +		.end	= evt2irq(0xa20),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -284,9 +305,6 @@ static struct platform_device usbf_device = {  	},  	.num_resources	= ARRAY_SIZE(usbf_resources),  	.resource	= usbf_resources, -	.archdata = { -		.hwblk_id = HWBLK_USBF, -	},  };  static struct resource iic_resources[] = { @@ -297,8 +315,8 @@ static struct resource iic_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 96, -		.end    = 99, +		.start  = evt2irq(0xe00), +		.end    = evt2irq(0xe60),  		.flags  = IORESOURCE_IRQ,         },  }; @@ -308,15 +326,12 @@ static struct platform_device iic_device = {  	.id             = 0, /* "i2c0" clock */  	.num_resources  = ARRAY_SIZE(iic_resources),  	.resource       = iic_resources, -	.archdata = { -		.hwblk_id = HWBLK_IIC, -	},  };  static struct uio_info vpu_platform_data = {  	.name = "VPU4",  	.version = "0", -	.irq = 60, +	.irq = evt2irq(0x980),  };  static struct resource vpu_resources[] = { @@ -339,15 +354,12 @@ static struct platform_device vpu_device = {  	},  	.resource	= vpu_resources,  	.num_resources	= ARRAY_SIZE(vpu_resources), -	.archdata = { -		.hwblk_id = HWBLK_VPU, -	},  };  static struct uio_info veu_platform_data = {  	.name = "VEU",  	.version = "0", -	.irq = 54, +	.irq = evt2irq(0x8c0),  };  static struct resource veu_resources[] = { @@ -370,15 +382,12 @@ static struct platform_device veu_device = {  	},  	.resource	= veu_resources,  	.num_resources	= ARRAY_SIZE(veu_resources), -	.archdata = { -		.hwblk_id = HWBLK_VEU, -	},  };  static struct uio_info jpu_platform_data = {  	.name = "JPU",  	.version = "0", -	.irq = 27, +	.irq = evt2irq(0x560),  };  static struct resource jpu_resources[] = { @@ -401,137 +410,49 @@ static struct platform_device jpu_device = {  	},  	.resource	= jpu_resources,  	.num_resources	= ARRAY_SIZE(jpu_resources), -	.archdata = { -		.hwblk_id = HWBLK_JPU, -	},  };  static struct sh_timer_config cmt_platform_data = { -	.channel_offset = 0x60, -	.timer_bit = 5, -	.clockevent_rating = 125, -	.clocksource_rating = 125, +	.channels_mask = 0x20,  };  static struct resource cmt_resources[] = { -	[0] = { -		.start	= 0x044a0060, -		.end	= 0x044a006b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0x044a0000, 0x70), +	DEFINE_RES_IRQ(evt2irq(0xf00)),  };  static struct platform_device cmt_device = { -	.name		= "sh_cmt", +	.name		= "sh-cmt-32",  	.id		= 0,  	.dev = {  		.platform_data	= &cmt_platform_data,  	},  	.resource	= cmt_resources,  	.num_resources	= ARRAY_SIZE(cmt_resources), -	.archdata = { -		.hwblk_id = HWBLK_CMT, -	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data,  	},  	.resource	= tmu0_resources,  	.num_resources	= ARRAY_SIZE(tmu0_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU, -	}, -}; - -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU, -	}, -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU, -	},  };  static struct siu_platform siu_platform_data = { -	.dma_dev	= &dma_device.dev,  	.dma_slave_tx_a	= SHDMA_SLAVE_SIUA_TX,  	.dma_slave_rx_a	= SHDMA_SLAVE_SIUA_RX,  	.dma_slave_tx_b	= SHDMA_SLAVE_SIUB_TX, @@ -545,7 +466,7 @@ static struct resource siu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 108, +		.start	= evt2irq(0xf80),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -558,9 +479,6 @@ static struct platform_device siu_device = {  	},  	.resource	= siu_resources,  	.num_resources	= ARRAY_SIZE(siu_resources), -	.archdata = { -		.hwblk_id = HWBLK_SIU, -	},  };  static struct platform_device *sh7722_devices[] __initdata = { @@ -569,8 +487,6 @@ static struct platform_device *sh7722_devices[] __initdata = {  	&scif2_device,  	&cmt_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  	&rtc_device,  	&usbf_device,  	&iic_device, @@ -598,8 +514,6 @@ static struct platform_device *sh7722_early_devices[] __initdata = {  	&scif2_device,  	&cmt_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  void __init plat_early_device_setup(void) @@ -699,7 +613,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	  { I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,  	    FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLENDI, FLCTL_FLSTEI } },  	{ 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */ -	  { DISABLED, DISABLED, ENABLED, ENABLED, 0, 0, TWODG, SIU } }, +	  { DISABLED, ENABLED, ENABLED, ENABLED, 0, 0, TWODG, SIU } },  	{ 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */  	  { 0, 0, 0, CMT, 0, USB_USBI1, USB_USBI0, } },  	{ 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */ diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c index 0eadefdbbba..3533b56dd46 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c @@ -15,6 +15,7 @@  #include <linux/uio_driver.h>  #include <linux/usb/r8a66597.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <linux/io.h>  #include <asm/clock.h>  #include <asm/mmzone.h> @@ -22,90 +23,138 @@  /* Serial */  static struct plat_sci_port scif0_platform_data = { -	.mapbase        = 0xffe00000, +	.port_reg	= 0xa4050160,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type           = PORT_SCIF, -	.irqs           = { 80, 80, 80, 80 }, +	.regtype	= SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffe00000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc00)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase        = 0xffe10000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type           = PORT_SCIF, -	.irqs           = { 81, 81, 81, 81 }, +	.regtype	= SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffe10000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc20)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase        = 0xffe20000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type           = PORT_SCIF, -	.irqs           = { 82, 82, 82, 82 }, +	.regtype	= SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xffe20000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc40)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase        = 0xa4e30000,  	.flags          = UPF_BOOT_AUTOCONF, +	.port_reg	= SCIx_NOT_SUPPORTED, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE, +	.sampling_rate	= 8,  	.type           = PORT_SCIFA, -	.irqs           = { 56, 56, 56, 56 }, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xa4e30000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x900)),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  };  static struct plat_sci_port scif4_platform_data = { -	.mapbase        = 0xa4e40000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE, +	.sampling_rate	= 8,  	.type           = PORT_SCIFA, -	.irqs           = { 88, 88, 88, 88 }, +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xa4e40000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xd00)),  };  static struct platform_device scif4_device = {  	.name		= "sh-sci",  	.id		= 4, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources),  	.dev		= {  		.platform_data	= &scif4_platform_data,  	},  };  static struct plat_sci_port scif5_platform_data = { -	.mapbase        = 0xa4e50000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE, +	.sampling_rate	= 8,  	.type           = PORT_SCIFA, -	.irqs           = { 109, 109, 109, 109 }, +}; + +static struct resource scif5_resources[] = { +	DEFINE_RES_MEM(0xa4e50000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xfa0)),  };  static struct platform_device scif5_device = {  	.name		= "sh-sci",  	.id		= 5, +	.resource	= scif5_resources, +	.num_resources	= ARRAY_SIZE(scif5_resources),  	.dev		= {  		.platform_data	= &scif5_platform_data,  	}, @@ -114,7 +163,7 @@ static struct platform_device scif5_device = {  static struct uio_info vpu_platform_data = {  	.name = "VPU5",  	.version = "0", -	.irq = 60, +	.irq = evt2irq(0x980),  };  static struct resource vpu_resources[] = { @@ -137,15 +186,12 @@ static struct platform_device vpu_device = {  	},  	.resource	= vpu_resources,  	.num_resources	= ARRAY_SIZE(vpu_resources), -	.archdata = { -		.hwblk_id = HWBLK_VPU, -	},  };  static struct uio_info veu0_platform_data = {  	.name = "VEU2H",  	.version = "0", -	.irq = 54, +	.irq = evt2irq(0x8c0),  };  static struct resource veu0_resources[] = { @@ -168,15 +214,12 @@ static struct platform_device veu0_device = {  	},  	.resource	= veu0_resources,  	.num_resources	= ARRAY_SIZE(veu0_resources), -	.archdata = { -		.hwblk_id = HWBLK_VEU2H0, -	},  };  static struct uio_info veu1_platform_data = {  	.name = "VEU2H",  	.version = "0", -	.irq = 27, +	.irq = evt2irq(0x560),  };  static struct resource veu1_resources[] = { @@ -199,223 +242,67 @@ static struct platform_device veu1_device = {  	},  	.resource	= veu1_resources,  	.num_resources	= ARRAY_SIZE(veu1_resources), -	.archdata = { -		.hwblk_id = HWBLK_VEU2H1, -	},  };  static struct sh_timer_config cmt_platform_data = { -	.channel_offset = 0x60, -	.timer_bit = 5, -	.clockevent_rating = 125, -	.clocksource_rating = 125, +	.channels_mask = 0x20,  };  static struct resource cmt_resources[] = { -	[0] = { -		.start	= 0x044a0060, -		.end	= 0x044a006b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0x044a0000, 0x70), +	DEFINE_RES_IRQ(evt2irq(0xf00)),  };  static struct platform_device cmt_device = { -	.name		= "sh_cmt", +	.name		= "sh-cmt-32",  	.id		= 0,  	.dev = {  		.platform_data	= &cmt_platform_data,  	},  	.resource	= cmt_resources,  	.num_resources	= ARRAY_SIZE(cmt_resources), -	.archdata = { -		.hwblk_id = HWBLK_CMT, -	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data,  	},  	.resource	= tmu0_resources,  	.num_resources	= ARRAY_SIZE(tmu0_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU0, -	},  };  static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd90000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x920)), +	DEFINE_RES_IRQ(evt2irq(0x940)), +	DEFINE_RES_IRQ(evt2irq(0x960)),  };  static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 1,  	.dev = {  		.platform_data	= &tmu1_platform_data,  	},  	.resource	= tmu1_resources,  	.num_resources	= ARRAY_SIZE(tmu1_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU0, -	}, -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU0, -	}, -}; - -static struct sh_timer_config tmu3_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu3_resources[] = { -	[0] = { -		.start	= 0xffd90008, -		.end	= 0xffd90013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 57, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu3_device = { -	.name		= "sh_tmu", -	.id		= 3, -	.dev = { -		.platform_data	= &tmu3_platform_data, -	}, -	.resource	= tmu3_resources, -	.num_resources	= ARRAY_SIZE(tmu3_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU1, -	}, -}; - -static struct sh_timer_config tmu4_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu4_resources[] = { -	[0] = { -		.start	= 0xffd90014, -		.end	= 0xffd9001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 58, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu4_device = { -	.name		= "sh_tmu", -	.id		= 4, -	.dev = { -		.platform_data	= &tmu4_platform_data, -	}, -	.resource	= tmu4_resources, -	.num_resources	= ARRAY_SIZE(tmu4_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU1, -	}, -}; - -static struct sh_timer_config tmu5_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu5_resources[] = { -	[0] = { -		.start	= 0xffd90020, -		.end	= 0xffd9002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 57, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu5_device = { -	.name		= "sh_tmu", -	.id		= 5, -	.dev = { -		.platform_data	= &tmu5_platform_data, -	}, -	.resource	= tmu5_resources, -	.num_resources	= ARRAY_SIZE(tmu5_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU1, -	},  };  static struct resource rtc_resources[] = { @@ -426,17 +313,17 @@ static struct resource rtc_resources[] = {  	},  	[1] = {  		/* Period IRQ */ -		.start	= 69, +		.start	= evt2irq(0xaa0),  		.flags	= IORESOURCE_IRQ,  	},  	[2] = {  		/* Carry IRQ */ -		.start	= 70, +		.start	= evt2irq(0xac0),  		.flags	= IORESOURCE_IRQ,  	},  	[3] = {  		/* Alarm IRQ */ -		.start	= 68, +		.start	= evt2irq(0xa80),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -446,9 +333,6 @@ static struct platform_device rtc_device = {  	.id		= -1,  	.num_resources	= ARRAY_SIZE(rtc_resources),  	.resource	= rtc_resources, -	.archdata = { -		.hwblk_id = HWBLK_RTC, -	},  };  static struct r8a66597_platdata r8a66597_data = { @@ -462,8 +346,8 @@ static struct resource sh7723_usb_host_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 65, -		.end	= 65, +		.start	= evt2irq(0xa20), +		.end	= evt2irq(0xa20),  		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,  	},  }; @@ -478,9 +362,6 @@ static struct platform_device sh7723_usb_host_device = {  	},  	.num_resources	= ARRAY_SIZE(sh7723_usb_host_resources),  	.resource	= sh7723_usb_host_resources, -	.archdata = { -		.hwblk_id = HWBLK_USB, -	},  };  static struct resource iic_resources[] = { @@ -491,8 +372,8 @@ static struct resource iic_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 96, -		.end    = 99, +		.start  = evt2irq(0xe00), +		.end    = evt2irq(0xe60),  		.flags  = IORESOURCE_IRQ,         },  }; @@ -502,9 +383,6 @@ static struct platform_device iic_device = {  	.id             = 0, /* "i2c0" clock */  	.num_resources  = ARRAY_SIZE(iic_resources),  	.resource       = iic_resources, -	.archdata = { -		.hwblk_id = HWBLK_IIC, -	},  };  static struct platform_device *sh7723_devices[] __initdata = { @@ -517,10 +395,6 @@ static struct platform_device *sh7723_devices[] __initdata = {  	&cmt_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  	&rtc_device,  	&iic_device,  	&sh7723_usb_host_device, @@ -550,10 +424,6 @@ static struct platform_device *sh7723_early_devices[] __initdata = {  	&cmt_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  };  void __init plat_early_device_setup(void) @@ -719,7 +589,7 @@ static struct intc_group groups[] __initdata = {  static struct intc_mask_reg mask_registers[] __initdata = {  	{ 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */  	  { 0, TMU1_TUNI2, TMU1_TUNI1, TMU1_TUNI0, -	    0, DISABLED, ENABLED, ENABLED } }, +	    0, ENABLED, ENABLED, ENABLED } },  	{ 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */  	  { VIO_VOUI, VIO_VEU2HI,VIO_BEUI,VIO_CEUI,DMAC0A_DEI3,DMAC0A_DEI2,DMAC0A_DEI1,DMAC0A_DEI0 } },  	{ 0xa4080088, 0xa40800c8, 8, /* IMR2 / IMCR2 */ @@ -736,7 +606,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	  { I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,  	    FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } },  	{ 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */ -	  { 0, DISABLED, ENABLED, ENABLED, +	  { 0, ENABLED, ENABLED, ENABLED,  	    0, 0, SCIFA_SCIFA2, SIU_SIUI } },  	{ 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */  	  { 0, 0, 0, CMT_CMTI, 0, 0, USB_USI0,0 } }, diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c index 828c9657eb5..b9e84b1d3aa 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c @@ -20,6 +20,7 @@  #include <linux/uio_driver.h>  #include <linux/sh_dma.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <linux/io.h>  #include <linux/notifier.h> @@ -93,6 +94,46 @@ static const struct sh_dmae_slave_config sh7724_dmae_slaves[] = {  		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT),  		.mid_rid	= 0x36,  	}, { +		.slave_id	= SHDMA_SLAVE_USB0D0_TX, +		.addr		= 0xA4D80100, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0x73, +	}, { +		.slave_id	= SHDMA_SLAVE_USB0D0_RX, +		.addr		= 0xA4D80100, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0x73, +	}, { +		.slave_id	= SHDMA_SLAVE_USB0D1_TX, +		.addr		= 0xA4D80120, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0x77, +	}, { +		.slave_id	= SHDMA_SLAVE_USB0D1_RX, +		.addr		= 0xA4D80120, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0x77, +	}, { +		.slave_id	= SHDMA_SLAVE_USB1D0_TX, +		.addr		= 0xA4D90100, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xab, +	}, { +		.slave_id	= SHDMA_SLAVE_USB1D0_RX, +		.addr		= 0xA4D90100, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xab, +	}, { +		.slave_id	= SHDMA_SLAVE_USB1D1_TX, +		.addr		= 0xA4D90120, +		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xaf, +	}, { +		.slave_id	= SHDMA_SLAVE_USB1D1_RX, +		.addr		= 0xA4D90120, +		.chcr		= DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xaf, +	}, {  		.slave_id	= SHDMA_SLAVE_SDHI0_TX,  		.addr		= 0x04ce0030,  		.chcr		= DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), @@ -174,21 +215,21 @@ static struct resource sh7724_dmae0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	{ -		/* DMA error IRQ */ -		.start	= 78, -		.end	= 78, +		.name	= "error_irq", +		.start	= evt2irq(0xbc0), +		.end	= evt2irq(0xbc0),  		.flags	= IORESOURCE_IRQ,  	},  	{  		/* IRQ for channels 0-3 */ -		.start	= 48, -		.end	= 51, +		.start	= evt2irq(0x800), +		.end	= evt2irq(0x860),  		.flags	= IORESOURCE_IRQ,  	},  	{  		/* IRQ for channels 4-5 */ -		.start	= 76, -		.end	= 77, +		.start	= evt2irq(0xb80), +		.end	= evt2irq(0xba0),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -208,21 +249,21 @@ static struct resource sh7724_dmae1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	{ -		/* DMA error IRQ */ -		.start	= 74, -		.end	= 74, +		.name	= "error_irq", +		.start	= evt2irq(0xb40), +		.end	= evt2irq(0xb40),  		.flags	= IORESOURCE_IRQ,  	},  	{  		/* IRQ for channels 0-3 */ -		.start	= 40, -		.end	= 43, +		.start	= evt2irq(0x700), +		.end	= evt2irq(0x760),  		.flags	= IORESOURCE_IRQ,  	},  	{  		/* IRQ for channels 4-5 */ -		.start	= 72, -		.end	= 73, +		.start	= evt2irq(0xb00), +		.end	= evt2irq(0xb20),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -235,9 +276,6 @@ static struct platform_device dma0_device = {  	.dev		= {  		.platform_data	= &dma_platform_data,  	}, -	.archdata = { -		.hwblk_id = HWBLK_DMAC0, -	},  };  static struct platform_device dma1_device = { @@ -248,97 +286,142 @@ static struct platform_device dma1_device = {  	.dev		= {  		.platform_data	= &dma_platform_data,  	}, -	.archdata = { -		.hwblk_id = HWBLK_DMAC1, -	},  };  /* Serial */  static struct plat_sci_port scif0_platform_data = { -	.mapbase        = 0xffe00000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type           = PORT_SCIF, -	.irqs           = { 80, 80, 80, 80 }, +	.regtype	= SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffe00000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc00)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase        = 0xffe10000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type           = PORT_SCIF, -	.irqs           = { 81, 81, 81, 81 }, +	.regtype	= SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffe10000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc20)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase        = 0xffe20000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type           = PORT_SCIF, -	.irqs           = { 82, 82, 82, 82 }, +	.regtype	= SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xffe20000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xc40)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase        = 0xa4e30000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE, +	.sampling_rate	= 8,  	.type           = PORT_SCIFA, -	.irqs           = { 56, 56, 56, 56 }, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xa4e30000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x900)),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  };  static struct plat_sci_port scif4_platform_data = { -	.mapbase        = 0xa4e40000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE, +	.sampling_rate	= 8,  	.type           = PORT_SCIFA, -	.irqs           = { 88, 88, 88, 88 }, +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xa4e40000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xd00)),  };  static struct platform_device scif4_device = {  	.name		= "sh-sci",  	.id		= 4, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources),  	.dev		= {  		.platform_data	= &scif4_platform_data,  	},  };  static struct plat_sci_port scif5_platform_data = { -	.mapbase        = 0xa4e50000, +	.port_reg	= SCIx_NOT_SUPPORTED,  	.flags          = UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE, +	.sampling_rate	= 8,  	.type           = PORT_SCIFA, -	.irqs           = { 109, 109, 109, 109 }, +}; + +static struct resource scif5_resources[] = { +	DEFINE_RES_MEM(0xa4e50000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xfa0)),  };  static struct platform_device scif5_device = {  	.name		= "sh-sci",  	.id		= 5, +	.resource	= scif5_resources, +	.num_resources	= ARRAY_SIZE(scif5_resources),  	.dev		= {  		.platform_data	= &scif5_platform_data,  	}, @@ -353,17 +436,17 @@ static struct resource rtc_resources[] = {  	},  	[1] = {  		/* Period IRQ */ -		.start	= 69, +		.start	= evt2irq(0xaa0),  		.flags	= IORESOURCE_IRQ,  	},  	[2] = {  		/* Carry IRQ */ -		.start	= 70, +		.start	= evt2irq(0xac0),  		.flags	= IORESOURCE_IRQ,  	},  	[3] = {  		/* Alarm IRQ */ -		.start	= 68, +		.start	= evt2irq(0xa80),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -373,9 +456,6 @@ static struct platform_device rtc_device = {  	.id		= -1,  	.num_resources	= ARRAY_SIZE(rtc_resources),  	.resource	= rtc_resources, -	.archdata = { -		.hwblk_id = HWBLK_RTC, -	},  };  /* I2C0 */ @@ -387,8 +467,8 @@ static struct resource iic0_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 96, -		.end    = 99, +		.start  = evt2irq(0xe00), +		.end    = evt2irq(0xe60),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -398,9 +478,6 @@ static struct platform_device iic0_device = {  	.id             = 0, /* "i2c0" clock */  	.num_resources  = ARRAY_SIZE(iic0_resources),  	.resource       = iic0_resources, -	.archdata = { -		.hwblk_id = HWBLK_IIC0, -	},  };  /* I2C1 */ @@ -412,8 +489,8 @@ static struct resource iic1_resources[] = {  		.flags  = IORESOURCE_MEM,  	},  	[1] = { -		.start  = 92, -		.end    = 95, +		.start  = evt2irq(0xd80), +		.end    = evt2irq(0xde0),  		.flags  = IORESOURCE_IRQ,  	},  }; @@ -423,16 +500,13 @@ static struct platform_device iic1_device = {  	.id             = 1, /* "i2c1" clock */  	.num_resources  = ARRAY_SIZE(iic1_resources),  	.resource       = iic1_resources, -	.archdata = { -		.hwblk_id = HWBLK_IIC1, -	},  };  /* VPU */  static struct uio_info vpu_platform_data = {  	.name = "VPU5F",  	.version = "0", -	.irq = 60, +	.irq = evt2irq(0x980),  };  static struct resource vpu_resources[] = { @@ -455,16 +529,13 @@ static struct platform_device vpu_device = {  	},  	.resource	= vpu_resources,  	.num_resources	= ARRAY_SIZE(vpu_resources), -	.archdata = { -		.hwblk_id = HWBLK_VPU, -	},  };  /* VEU0 */  static struct uio_info veu0_platform_data = {  	.name = "VEU3F0",  	.version = "0", -	.irq = 83, +	.irq = evt2irq(0xc60),  };  static struct resource veu0_resources[] = { @@ -487,16 +558,13 @@ static struct platform_device veu0_device = {  	},  	.resource	= veu0_resources,  	.num_resources	= ARRAY_SIZE(veu0_resources), -	.archdata = { -		.hwblk_id = HWBLK_VEU0, -	},  };  /* VEU1 */  static struct uio_info veu1_platform_data = {  	.name = "VEU3F1",  	.version = "0", -	.irq = 54, +	.irq = evt2irq(0x8c0),  };  static struct resource veu1_resources[] = { @@ -519,9 +587,6 @@ static struct platform_device veu1_device = {  	},  	.resource	= veu1_resources,  	.num_resources	= ARRAY_SIZE(veu1_resources), -	.archdata = { -		.hwblk_id = HWBLK_VEU1, -	},  };  /* BEU0 */ @@ -551,9 +616,6 @@ static struct platform_device beu0_device = {  	},  	.resource	= beu0_resources,  	.num_resources	= ARRAY_SIZE(beu0_resources), -	.archdata = { -		.hwblk_id = HWBLK_BEU0, -	},  };  /* BEU1 */ @@ -583,231 +645,74 @@ static struct platform_device beu1_device = {  	},  	.resource	= beu1_resources,  	.num_resources	= ARRAY_SIZE(beu1_resources), -	.archdata = { -		.hwblk_id = HWBLK_BEU1, -	},  };  static struct sh_timer_config cmt_platform_data = { -	.channel_offset = 0x60, -	.timer_bit = 5, -	.clockevent_rating = 125, -	.clocksource_rating = 200, +	.channels_mask = 0x20,  };  static struct resource cmt_resources[] = { -	[0] = { -		.start	= 0x044a0060, -		.end	= 0x044a006b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 104, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0x044a0000, 0x70), +	DEFINE_RES_IRQ(evt2irq(0xf00)),  };  static struct platform_device cmt_device = { -	.name		= "sh_cmt", +	.name		= "sh-cmt-32",  	.id		= 0,  	.dev = {  		.platform_data	= &cmt_platform_data,  	},  	.resource	= cmt_resources,  	.num_resources	= ARRAY_SIZE(cmt_resources), -	.archdata = { -		.hwblk_id = HWBLK_CMT, -	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data,  	},  	.resource	= tmu0_resources,  	.num_resources	= ARRAY_SIZE(tmu0_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU0, -	},  };  static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd90000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x920)), +	DEFINE_RES_IRQ(evt2irq(0x940)), +	DEFINE_RES_IRQ(evt2irq(0x960)),  };  static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 1,  	.dev = {  		.platform_data	= &tmu1_platform_data,  	},  	.resource	= tmu1_resources,  	.num_resources	= ARRAY_SIZE(tmu1_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU0, -	}, -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU0, -	}, -}; - - -static struct sh_timer_config tmu3_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu3_resources[] = { -	[0] = { -		.start	= 0xffd90008, -		.end	= 0xffd90013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 57, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu3_device = { -	.name		= "sh_tmu", -	.id		= 3, -	.dev = { -		.platform_data	= &tmu3_platform_data, -	}, -	.resource	= tmu3_resources, -	.num_resources	= ARRAY_SIZE(tmu3_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU1, -	}, -}; - -static struct sh_timer_config tmu4_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu4_resources[] = { -	[0] = { -		.start	= 0xffd90014, -		.end	= 0xffd9001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 58, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu4_device = { -	.name		= "sh_tmu", -	.id		= 4, -	.dev = { -		.platform_data	= &tmu4_platform_data, -	}, -	.resource	= tmu4_resources, -	.num_resources	= ARRAY_SIZE(tmu4_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU1, -	}, -}; - -static struct sh_timer_config tmu5_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu5_resources[] = { -	[0] = { -		.start	= 0xffd90020, -		.end	= 0xffd9002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 57, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu5_device = { -	.name		= "sh_tmu", -	.id		= 5, -	.dev = { -		.platform_data	= &tmu5_platform_data, -	}, -	.resource	= tmu5_resources, -	.num_resources	= ARRAY_SIZE(tmu5_resources), -	.archdata = { -		.hwblk_id = HWBLK_TMU1, -	},  };  /* JPU */  static struct uio_info jpu_platform_data = {  	.name = "JPU",  	.version = "0", -	.irq = 27, +	.irq = evt2irq(0x560),  };  static struct resource jpu_resources[] = { @@ -830,16 +735,13 @@ static struct platform_device jpu_device = {  	},  	.resource	= jpu_resources,  	.num_resources	= ARRAY_SIZE(jpu_resources), -	.archdata = { -		.hwblk_id = HWBLK_JPU, -	},  };  /* SPU2DSP0 */  static struct uio_info spu0_platform_data = {  	.name = "SPU2DSP0",  	.version = "0", -	.irq = 86, +	.irq = evt2irq(0xcc0),  };  static struct resource spu0_resources[] = { @@ -862,16 +764,13 @@ static struct platform_device spu0_device = {  	},  	.resource	= spu0_resources,  	.num_resources	= ARRAY_SIZE(spu0_resources), -	.archdata = { -		.hwblk_id = HWBLK_SPU, -	},  };  /* SPU2DSP1 */  static struct uio_info spu1_platform_data = {  	.name = "SPU2DSP1",  	.version = "0", -	.irq = 87, +	.irq = evt2irq(0xce0),  };  static struct resource spu1_resources[] = { @@ -894,9 +793,6 @@ static struct platform_device spu1_device = {  	},  	.resource	= spu1_resources,  	.num_resources	= ARRAY_SIZE(spu1_resources), -	.archdata = { -		.hwblk_id = HWBLK_SPU, -	},  };  static struct platform_device *sh7724_devices[] __initdata = { @@ -909,10 +805,6 @@ static struct platform_device *sh7724_devices[] __initdata = {  	&cmt_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  	&dma0_device,  	&dma1_device,  	&rtc_device, @@ -952,10 +844,6 @@ static struct platform_device *sh7724_early_devices[] __initdata = {  	&cmt_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  };  void __init plat_early_device_setup(void) @@ -1144,7 +1032,7 @@ static struct intc_group groups[] __initdata = {  static struct intc_mask_reg mask_registers[] __initdata = {  	{ 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */  	  { 0, TMU1_TUNI2, TMU1_TUNI1, TMU1_TUNI0, -	    0, DISABLED, ENABLED, ENABLED } }, +	    0, ENABLED, ENABLED, ENABLED } },  	{ 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */  	  { VIO_VOU, VIO_VEU1, VIO_BEU0, VIO_CEU0,  	    DMAC0A_DEI3, DMAC0A_DEI2, DMAC0A_DEI1, DMAC0A_DEI0 } }, @@ -1166,7 +1054,7 @@ static struct intc_mask_reg mask_registers[] __initdata = {  	  { I2C0_DTEI, I2C0_WAITI, I2C0_TACKI, I2C0_ALI,  	    I2C1_DTEI, I2C1_WAITI, I2C1_TACKI, I2C1_ALI } },  	{ 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */ -	  { DISABLED, DISABLED, ENABLED, ENABLED, +	  { DISABLED, ENABLED, ENABLED, ENABLED,  	    0, 0, SCIFA5, FSI } },  	{ 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */  	  { 0, 0, 0, CMT, 0, USB1, USB0, 0 } }, diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7734.c b/arch/sh/kernel/cpu/sh4a/setup-sh7734.c new file mode 100644 index 00000000000..f617bcb734d --- /dev/null +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7734.c @@ -0,0 +1,629 @@ +/* + * arch/sh/kernel/cpu/sh4a/setup-sh7734.c + + * SH7734 Setup + * + * Copyright (C) 2011,2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> + * Copyright (C) 2011,2012 Renesas Solutions Corp. + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ + +#include <linux/platform_device.h> +#include <linux/init.h> +#include <linux/serial.h> +#include <linux/mm.h> +#include <linux/dma-mapping.h> +#include <linux/serial_sci.h> +#include <linux/sh_timer.h> +#include <linux/io.h> +#include <asm/clock.h> +#include <asm/irq.h> +#include <cpu/sh7734.h> + +/* SCIF */ +static struct plat_sci_port scif0_platform_data = { +	.flags          = UPF_BOOT_AUTOCONF, +	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, +	.type           = PORT_SCIF, +	.regtype        = SCIx_SH4_SCIF_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffe40000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x8c0)), +}; + +static struct platform_device scif0_device = { +	.name		= "sh-sci", +	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources), +	.dev		= { +		.platform_data	= &scif0_platform_data, +	}, +}; + +static struct plat_sci_port scif1_platform_data = { +	.flags          = UPF_BOOT_AUTOCONF, +	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, +	.type           = PORT_SCIF, +	.regtype        = SCIx_SH4_SCIF_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffe41000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x8e0)), +}; + +static struct platform_device scif1_device = { +	.name		= "sh-sci", +	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources), +	.dev		= { +		.platform_data = &scif1_platform_data, +	}, +}; + +static struct plat_sci_port scif2_platform_data = { +	.flags          = UPF_BOOT_AUTOCONF, +	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, +	.type           = PORT_SCIF, +	.regtype        = SCIx_SH4_SCIF_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xffe42000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x900)), +}; + +static struct platform_device scif2_device = { +	.name		= "sh-sci", +	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources), +	.dev		= { +		.platform_data = &scif2_platform_data, +	}, +}; + +static struct plat_sci_port scif3_platform_data = { +	.flags          = UPF_BOOT_AUTOCONF, +	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE, +	.type           = PORT_SCIF, +	.regtype        = SCIx_SH4_SCIF_REGTYPE, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xffe43000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x920)), +}; + +static struct platform_device scif3_device = { +	.name		= "sh-sci", +	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources), +	.dev		= { +		.platform_data	= &scif3_platform_data, +	}, +}; + +static struct plat_sci_port scif4_platform_data = { +	.flags          = UPF_BOOT_AUTOCONF, +	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, +	.type           = PORT_SCIF, +	.regtype        = SCIx_SH4_SCIF_REGTYPE, +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xffe44000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x940)), +}; + +static struct platform_device scif4_device = { +	.name		= "sh-sci", +	.id		= 4, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources), +	.dev		= { +		.platform_data	= &scif4_platform_data, +	}, +}; + +static struct plat_sci_port scif5_platform_data = { +	.flags          = UPF_BOOT_AUTOCONF, +	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, +	.type           = PORT_SCIF, +	.regtype		= SCIx_SH4_SCIF_REGTYPE, +}; + +static struct resource scif5_resources[] = { +	DEFINE_RES_MEM(0xffe43000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x960)), +}; + +static struct platform_device scif5_device = { +	.name		= "sh-sci", +	.id		= 5, +	.resource	= scif5_resources, +	.num_resources	= ARRAY_SIZE(scif5_resources), +	.dev		= { +		.platform_data	= &scif5_platform_data, +	}, +}; + +/* RTC */ +static struct resource rtc_resources[] = { +	[0] = { +		.name	= "rtc", +		.start	= 0xFFFC5000, +		.end	= 0xFFFC5000 + 0x26 - 1, +		.flags	= IORESOURCE_IO, +	}, +	[1] = { +		.start	= evt2irq(0xC00), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device rtc_device = { +	.name		= "sh-rtc", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(rtc_resources), +	.resource	= rtc_resources, +}; + +/* I2C 0 */ +static struct resource i2c0_resources[] = { +	[0] = { +		.name	= "IIC0", +		.start  = 0xFFC70000, +		.end    = 0xFFC7000A - 1, +		.flags  = IORESOURCE_MEM, +	}, +	[1] = { +		.start  = evt2irq(0x860), +		.flags  = IORESOURCE_IRQ, +	}, +}; + +static struct platform_device i2c0_device = { +	.name           = "i2c-sh7734", +	.id             = 0, +	.num_resources  = ARRAY_SIZE(i2c0_resources), +	.resource       = i2c0_resources, +}; + +/* TMU */ +static struct sh_timer_config tmu0_platform_data = { +	.channels_mask = 7, +}; + +static struct resource tmu0_resources[] = { +	DEFINE_RES_MEM(0xffd80000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)), +}; + +static struct platform_device tmu0_device = { +	.name		= "sh-tmu", +	.id		= 0, +	.dev = { +		.platform_data	= &tmu0_platform_data, +	}, +	.resource	= tmu0_resources, +	.num_resources	= ARRAY_SIZE(tmu0_resources), +}; + +static struct sh_timer_config tmu1_platform_data = { +	.channels_mask = 7, +}; + +static struct resource tmu1_resources[] = { +	DEFINE_RES_MEM(0xffd81000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x480)), +	DEFINE_RES_IRQ(evt2irq(0x4a0)), +	DEFINE_RES_IRQ(evt2irq(0x4c0)), +}; + +static struct platform_device tmu1_device = { +	.name		= "sh-tmu", +	.id		= 1, +	.dev = { +		.platform_data	= &tmu1_platform_data, +	}, +	.resource	= tmu1_resources, +	.num_resources	= ARRAY_SIZE(tmu1_resources), +}; + +static struct sh_timer_config tmu2_platform_data = { +	.channels_mask = 7, +}; + +static struct resource tmu2_resources[] = { +	DEFINE_RES_MEM(0xffd82000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x500)), +	DEFINE_RES_IRQ(evt2irq(0x520)), +	DEFINE_RES_IRQ(evt2irq(0x540)), +}; + +static struct platform_device tmu2_device = { +	.name		= "sh-tmu", +	.id		= 2, +	.dev = { +		.platform_data	= &tmu2_platform_data, +	}, +	.resource	= tmu2_resources, +	.num_resources	= ARRAY_SIZE(tmu2_resources), +}; + +static struct platform_device *sh7734_devices[] __initdata = { +	&scif0_device, +	&scif1_device, +	&scif2_device, +	&scif3_device, +	&scif4_device, +	&scif5_device, +	&tmu0_device, +	&tmu1_device, +	&tmu2_device, +	&rtc_device, +}; + +static struct platform_device *sh7734_early_devices[] __initdata = { +	&scif0_device, +	&scif1_device, +	&scif2_device, +	&scif3_device, +	&scif4_device, +	&scif5_device, +	&tmu0_device, +	&tmu1_device, +	&tmu2_device, +}; + +void __init plat_early_device_setup(void) +{ +	early_platform_add_devices(sh7734_early_devices, +		ARRAY_SIZE(sh7734_early_devices)); +} + +#define GROUP 0 +enum { +	UNUSED = 0, + +	/* interrupt sources */ + +	IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH, +	IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH, +	IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH, +	IRL0_HHLL, IRL0_HHLH, IRL0_HHHL, + +	IRQ0, IRQ1, IRQ2, IRQ3, +	DU, +	TMU00, TMU10, TMU20, TMU21, +	TMU30, TMU40, TMU50, TMU51, +	TMU60, TMU70, TMU80, +	RESET_WDT, +	USB, +	HUDI, +	SHDMAC, +	SSI0, SSI1,	SSI2, SSI3, +	VIN0, +	RGPVG, +	_2DG, +	MMC, +	HSPI, +	LBSCATA, +	I2C0, +	RCAN0, +	MIMLB, +	SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, +	LBSCDMAC0, LBSCDMAC1, LBSCDMAC2, +	RCAN1, +	SDHI0, SDHI1, +	IEBUS, +	HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, HPBDMAC19_22, HPBDMAC23_25_27_28, +	RTC, +	VIN1, +	LCDC, +	SRC0, SRC1, +	GETHER, +	SDHI2, +	GPIO0_3, GPIO4_5, +	STIF0, STIF1, +	ADMAC, +	HIF, +	FLCTL, +	ADC, +	MTU2, +	RSPI, +	QSPI, +	HSCIF, +	VEU3F_VE3, + +	/* Group */ +	/* Mask */ +	STIF_M, +	GPIO_M, +	HPBDMAC_M, +	LBSCDMAC_M, +	RCAN_M, +	SRC_M, +	SCIF_M, +	LCDC_M, +	_2DG_M, +	VIN_M, +	TMU_3_M, +	TMU_0_M, + +	/* Priority */ +	RCAN_P, +	LBSCDMAC_P, + +	/* Common */ +	SDHI, +	SSI, +	SPI, +}; + +static struct intc_vect vectors[] __initdata = { +	INTC_VECT(DU, 0x3E0), +	INTC_VECT(TMU00, 0x400), +	INTC_VECT(TMU10, 0x420), +	INTC_VECT(TMU20, 0x440), +	INTC_VECT(TMU30, 0x480), +	INTC_VECT(TMU40, 0x4A0), +	INTC_VECT(TMU50, 0x4C0), +	INTC_VECT(TMU51, 0x4E0), +	INTC_VECT(TMU60, 0x500), +	INTC_VECT(TMU70, 0x520), +	INTC_VECT(TMU80, 0x540), +	INTC_VECT(RESET_WDT, 0x560), +	INTC_VECT(USB, 0x580), +	INTC_VECT(HUDI, 0x600), +	INTC_VECT(SHDMAC, 0x620), +	INTC_VECT(SSI0, 0x6C0), +	INTC_VECT(SSI1, 0x6E0), +	INTC_VECT(SSI2, 0x700), +	INTC_VECT(SSI3, 0x720), +	INTC_VECT(VIN0, 0x740), +	INTC_VECT(RGPVG, 0x760), +	INTC_VECT(_2DG, 0x780), +	INTC_VECT(MMC, 0x7A0), +	INTC_VECT(HSPI, 0x7E0), +	INTC_VECT(LBSCATA, 0x840), +	INTC_VECT(I2C0, 0x860), +	INTC_VECT(RCAN0, 0x880), +	INTC_VECT(SCIF0, 0x8A0), +	INTC_VECT(SCIF1, 0x8C0), +	INTC_VECT(SCIF2, 0x900), +	INTC_VECT(SCIF3, 0x920), +	INTC_VECT(SCIF4, 0x940), +	INTC_VECT(SCIF5, 0x960), +	INTC_VECT(LBSCDMAC0, 0x9E0), +	INTC_VECT(LBSCDMAC1, 0xA00), +	INTC_VECT(LBSCDMAC2, 0xA20), +	INTC_VECT(RCAN1, 0xA60), +	INTC_VECT(SDHI0, 0xAE0), +	INTC_VECT(SDHI1, 0xB00), +	INTC_VECT(IEBUS, 0xB20), +	INTC_VECT(HPBDMAC0_3, 0xB60), +	INTC_VECT(HPBDMAC4_10, 0xB80), +	INTC_VECT(HPBDMAC11_18, 0xBA0), +	INTC_VECT(HPBDMAC19_22, 0xBC0), +	INTC_VECT(HPBDMAC23_25_27_28, 0xBE0), +	INTC_VECT(RTC, 0xC00), +	INTC_VECT(VIN1, 0xC20), +	INTC_VECT(LCDC, 0xC40), +	INTC_VECT(SRC0, 0xC60), +	INTC_VECT(SRC1, 0xC80), +	INTC_VECT(GETHER, 0xCA0), +	INTC_VECT(SDHI2, 0xCC0), +	INTC_VECT(GPIO0_3, 0xCE0), +	INTC_VECT(GPIO4_5, 0xD00), +	INTC_VECT(STIF0, 0xD20), +	INTC_VECT(STIF1, 0xD40), +	INTC_VECT(ADMAC, 0xDA0), +	INTC_VECT(HIF, 0xDC0), +	INTC_VECT(FLCTL, 0xDE0), +	INTC_VECT(ADC, 0xE00), +	INTC_VECT(MTU2, 0xE20), +	INTC_VECT(RSPI, 0xE40), +	INTC_VECT(QSPI, 0xE60), +	INTC_VECT(HSCIF, 0xFC0), +	INTC_VECT(VEU3F_VE3, 0xF40), +}; + +static struct intc_group groups[] __initdata = { +	/* Common */ +	INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2), +	INTC_GROUP(SPI, HSPI, RSPI, QSPI), +	INTC_GROUP(SSI, SSI0, SSI1, SSI2, SSI3), + +	/* Mask group */ +	INTC_GROUP(STIF_M, STIF0, STIF1), /* 22 */ +	INTC_GROUP(GPIO_M, GPIO0_3, GPIO4_5), /* 21 */ +	INTC_GROUP(HPBDMAC_M, HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, +			HPBDMAC19_22, HPBDMAC23_25_27_28), /* 19 */ +	INTC_GROUP(LBSCDMAC_M, LBSCDMAC0, LBSCDMAC1, LBSCDMAC2), /* 18 */ +	INTC_GROUP(RCAN_M, RCAN0, RCAN1, IEBUS), /* 17 */ +	INTC_GROUP(SRC_M, SRC0, SRC1), /* 16 */ +	INTC_GROUP(SCIF_M, SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, +			HSCIF), /* 14 */ +	INTC_GROUP(LCDC_M, LCDC, MIMLB), /* 13 */ +	INTC_GROUP(_2DG_M, _2DG, RGPVG), /* 12 */ +	INTC_GROUP(VIN_M, VIN0, VIN1), /* 10 */ +	INTC_GROUP(TMU_3_M, TMU30, TMU40, TMU50, TMU51, +			TMU60, TMU60, TMU70, TMU80), /* 2 */ +	INTC_GROUP(TMU_0_M, TMU00, TMU10, TMU20, TMU21), /* 1 */ + +	/* Priority group*/ +	INTC_GROUP(RCAN_P, RCAN0, RCAN1), /* INT2PRI5 */ +	INTC_GROUP(LBSCDMAC_P, LBSCDMAC0, LBSCDMAC1), /* INT2PRI5 */ +}; + +static struct intc_mask_reg mask_registers[] __initdata = { +	{ 0xFF804040, 0xFF804044, 32, /* INT2MSKRG / INT2MSKCR */ +	  { 0, +		VEU3F_VE3, +		SDHI, /* SDHI 0-2 */ +		ADMAC, +		FLCTL, +		RESET_WDT, +		HIF, +		ADC, +		MTU2, +		STIF_M, /* STIF 0,1 */ +		GPIO_M, /* GPIO 0-5*/ +		GETHER, +		HPBDMAC_M, /* HPBDMAC 0_3 - 23_25_27_28 */ +		LBSCDMAC_M, /* LBSCDMAC 0 - 2 */ +		RCAN_M, /* RCAN, IEBUS */ +		SRC_M,	/* SRC 0,1 */ +		LBSCATA, +		SCIF_M, /* SCIF 0-5, HSCIF */ +		LCDC_M, /* LCDC, MIMLB */ +		_2DG_M,	/* 2DG, RGPVG */ +		SPI, /* HSPI, RSPI, QSPI */ +		VIN_M,	/* VIN0, 1 */ +		SSI,	/* SSI 0-3 */ +		USB, +		SHDMAC, +		HUDI, +		MMC, +		RTC, +		I2C0, /* I2C */ /* I2C 0, 1*/ +		TMU_3_M, /* TMU30 - TMU80 */ +		TMU_0_M, /* TMU00 - TMU21 */ +		DU } }, +}; + +static struct intc_prio_reg prio_registers[] __initdata = { +	{ 0xFF804000, 0, 32, 8, /* INT2PRI0 */ +		{ DU, TMU00, TMU10, TMU20 } }, +	{ 0xFF804004, 0, 32, 8, /* INT2PRI1 */ +		{ TMU30, TMU60, RTC, SDHI } }, +	{ 0xFF804008, 0, 32, 8, /* INT2PRI2 */ +		{ HUDI, SHDMAC, USB, SSI } }, +	{ 0xFF80400C, 0, 32, 8, /* INT2PRI3 */ +		{ VIN0, SPI, _2DG, LBSCATA } }, +	{ 0xFF804010, 0, 32, 8, /* INT2PRI4 */ +		{ SCIF0, SCIF3, HSCIF, LCDC } }, +	{ 0xFF804014, 0, 32, 8, /* INT2PRI5 */ +		{ RCAN_P, LBSCDMAC_P, LBSCDMAC2, MMC } }, +	{ 0xFF804018, 0, 32, 8, /* INT2PRI6 */ +		{ HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, HPBDMAC19_22 } }, +	{ 0xFF80401C, 0, 32, 8, /* INT2PRI7 */ +		{ HPBDMAC23_25_27_28, I2C0, SRC0, SRC1 } }, +	{ 0xFF804020, 0, 32, 8, /* INT2PRI8 */ +		{ 0 /* ADIF */, VIN1, RESET_WDT, HIF } }, +	{ 0xFF804024, 0, 32, 8, /* INT2PRI9 */ +		{ ADMAC, FLCTL, GPIO0_3, GPIO4_5 } }, +	{ 0xFF804028, 0, 32, 8, /* INT2PRI10 */ +		{ STIF0, STIF1, VEU3F_VE3, GETHER } }, +	{ 0xFF80402C, 0, 32, 8, /* INT2PRI11 */ +		{ MTU2, RGPVG, MIMLB, IEBUS } }, +}; + +static DECLARE_INTC_DESC(intc_desc, "sh7734", vectors, groups, +	mask_registers, prio_registers, NULL); + +/* Support for external interrupt pins in IRQ mode */ + +static struct intc_vect irq3210_vectors[] __initdata = { +	INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280), +	INTC_VECT(IRQ2, 0x2C0), INTC_VECT(IRQ3, 0x300), +}; + +static struct intc_sense_reg irq3210_sense_registers[] __initdata = { +	{ 0xFF80201C, 32, 2, /* ICR1 */ +	{ IRQ0, IRQ1, IRQ2, IRQ3, } }, +}; + +static struct intc_mask_reg irq3210_ack_registers[] __initdata = { +	{ 0xFF802024, 0, 32, /* INTREQ */ +	{ IRQ0, IRQ1, IRQ2, IRQ3, } }, +}; + +static struct intc_mask_reg irq3210_mask_registers[] __initdata = { +	{ 0xFF802044, 0xFF802064, 32, /* INTMSK0 / INTMSKCLR0 */ +	{ IRQ0, IRQ1, IRQ2, IRQ3, } }, +}; + +static struct intc_prio_reg irq3210_prio_registers[] __initdata = { +	{ 0xFF802010, 0, 32, 4, /* INTPRI */ +	{ IRQ0, IRQ1, IRQ2, IRQ3, } }, +}; + +static DECLARE_INTC_DESC_ACK(intc_desc_irq3210, "sh7734-irq3210", +	irq3210_vectors, NULL, +	irq3210_mask_registers, irq3210_prio_registers, +	irq3210_sense_registers, irq3210_ack_registers); + +/* External interrupt pins in IRL mode */ + +static struct intc_vect vectors_irl3210[] __initdata = { +	INTC_VECT(IRL0_LLLL, 0x200), INTC_VECT(IRL0_LLLH, 0x220), +	INTC_VECT(IRL0_LLHL, 0x240), INTC_VECT(IRL0_LLHH, 0x260), +	INTC_VECT(IRL0_LHLL, 0x280), INTC_VECT(IRL0_LHLH, 0x2a0), +	INTC_VECT(IRL0_LHHL, 0x2c0), INTC_VECT(IRL0_LHHH, 0x2e0), +	INTC_VECT(IRL0_HLLL, 0x300), INTC_VECT(IRL0_HLLH, 0x320), +	INTC_VECT(IRL0_HLHL, 0x340), INTC_VECT(IRL0_HLHH, 0x360), +	INTC_VECT(IRL0_HHLL, 0x380), INTC_VECT(IRL0_HHLH, 0x3a0), +	INTC_VECT(IRL0_HHHL, 0x3c0), +}; + +static DECLARE_INTC_DESC(intc_desc_irl3210, "sh7734-irl3210", +	vectors_irl3210, NULL, mask_registers, NULL, NULL); + +#define INTC_ICR0		0xFF802000 +#define INTC_INTMSK0    0xFF802044 +#define INTC_INTMSK1    0xFF802048 +#define INTC_INTMSKCLR0 0xFF802064 +#define INTC_INTMSKCLR1 0xFF802068 + +void __init plat_irq_setup(void) +{ +	/* disable IRQ3-0 */ +	__raw_writel(0xF0000000, INTC_INTMSK0); + +	/* disable IRL3-0 */ +	__raw_writel(0x80000000, INTC_INTMSK1); + +	/* select IRL mode for IRL3-0 */ +	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00800000, INTC_ICR0); + +	/* disable holding function, ie enable "SH-4 Mode (LVLMODE)" */ +	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0); + +	register_intc_controller(&intc_desc); +} + +void __init plat_irq_setup_pins(int mode) +{ +	switch (mode) { +	case IRQ_MODE_IRQ3210: +		/* select IRQ mode for IRL3-0 */ +		__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0); +		register_intc_controller(&intc_desc_irq3210); +		break; +	case IRQ_MODE_IRL3210: +		/* enable IRL0-3 but don't provide any masking */ +		__raw_writel(0x80000000, INTC_INTMSKCLR1); +		__raw_writel(0xf0000000, INTC_INTMSKCLR0); +		break; +	case IRQ_MODE_IRL3210_MASK: +		/* enable IRL0-3 and mask using cpu intc controller */ +		__raw_writel(0x80000000, INTC_INTMSKCLR0); +		register_intc_controller(&intc_desc_irl3210); +		break; +	default: +		BUG(); +	} +} diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c index 749c6388d5a..7b24ec4b409 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c @@ -1,7 +1,7 @@  /*   * SH7757 Setup   * - * Copyright (C) 2009  Renesas Solutions Corp. + * Copyright (C) 2009, 2011  Renesas Solutions Corp.   *   *  based on setup-sh7785.c : Copyright (C) 2007  Paul Mundt   * @@ -15,73 +15,89 @@  #include <linux/serial_sci.h>  #include <linux/io.h>  #include <linux/mm.h> +#include <linux/dma-mapping.h>  #include <linux/sh_timer.h> +#include <linux/sh_dma.h> +#include <linux/sh_intc.h> +#include <linux/usb/ohci_pdriver.h> +#include <cpu/dma-register.h> +#include <cpu/sh7757.h>  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xfe4b0000,		/* SCIF2 */  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 40, 40, 40, 40 }, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xfe4b0000, 0x100),		/* SCIF2 */ +	DEFINE_RES_IRQ(evt2irq(0x700)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase	= 0xfe4c0000,		/* SCIF3 */  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 76, 76, 76, 76 }, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xfe4c0000, 0x100),		/* SCIF3 */ +	DEFINE_RES_IRQ(evt2irq(0xb80)),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  };  static struct plat_sci_port scif4_platform_data = { -	.mapbase	= 0xfe4d0000,		/* SCIF4 */  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 104, 104, 104, 104 }, +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xfe4d0000, 0x100),		/* SCIF4 */ +	DEFINE_RES_IRQ(evt2irq(0xf00)),  };  static struct platform_device scif4_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources),  	.dev		= {  		.platform_data	= &scif4_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 3,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xfe430008, -		.end	= 0xfe430013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 28, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xfe430000, 0x20), +	DEFINE_RES_IRQ(evt2irq(0x580)), +	DEFINE_RES_IRQ(evt2irq(0x5a0)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -90,32 +106,639 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +static struct resource spi0_resources[] = { +	[0] = { +		.start	= 0xfe002000, +		.end	= 0xfe0020ff, +		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_32BIT, +	}, +	[1] = { +		.start	= evt2irq(0xcc0), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +/* DMA */ +static const struct sh_dmae_slave_config sh7757_dmae0_slaves[] = { +	{ +		.slave_id	= SHDMA_SLAVE_SDHI_TX, +		.addr		= 0x1fe50030, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xc5, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_SDHI_RX, +		.addr		= 0x1fe50030, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xc6, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_MMCIF_TX, +		.addr		= 0x1fcb0034, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xd3, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_MMCIF_RX, +		.addr		= 0x1fcb0034, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_32BIT), +		.mid_rid	= 0xd7, +	}, +}; + +static const struct sh_dmae_slave_config sh7757_dmae1_slaves[] = { +	{ +		.slave_id	= SHDMA_SLAVE_SCIF2_TX, +		.addr		= 0x1f4b000c, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x21, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_SCIF2_RX, +		.addr		= 0x1f4b0014, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x22, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_SCIF3_TX, +		.addr		= 0x1f4c000c, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x29, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_SCIF3_RX, +		.addr		= 0x1f4c0014, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x2a, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_SCIF4_TX, +		.addr		= 0x1f4d000c, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x41, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_SCIF4_RX, +		.addr		= 0x1f4d0014, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x42, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RSPI_TX, +		.addr		= 0xfe480004, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xc1, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RSPI_RX, +		.addr		= 0xfe480004, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_16BIT), +		.mid_rid	= 0xc2, +	}, +}; + +static const struct sh_dmae_slave_config sh7757_dmae2_slaves[] = { +	{ +		.slave_id	= SHDMA_SLAVE_RIIC0_TX, +		.addr		= 0x1e500012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x21, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC0_RX, +		.addr		= 0x1e500013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x22, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC1_TX, +		.addr		= 0x1e510012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x29, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC1_RX, +		.addr		= 0x1e510013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x2a, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC2_TX, +		.addr		= 0x1e520012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0xa1, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC2_RX, +		.addr		= 0x1e520013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0xa2, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC3_TX, +		.addr		= 0x1e530012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0xa9, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC3_RX, +		.addr		= 0x1e530013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0xaf, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC4_TX, +		.addr		= 0x1e540012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0xc5, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC4_RX, +		.addr		= 0x1e540013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0xc6, +	}, +}; + +static const struct sh_dmae_slave_config sh7757_dmae3_slaves[] = { +	{ +		.slave_id	= SHDMA_SLAVE_RIIC5_TX, +		.addr		= 0x1e550012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x21, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC5_RX, +		.addr		= 0x1e550013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x22, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC6_TX, +		.addr		= 0x1e560012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x29, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC6_RX, +		.addr		= 0x1e560013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x2a, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC7_TX, +		.addr		= 0x1e570012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x41, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC7_RX, +		.addr		= 0x1e570013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x42, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC8_TX, +		.addr		= 0x1e580012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x45, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC8_RX, +		.addr		= 0x1e580013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x46, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC9_TX, +		.addr		= 0x1e590012, +		.chcr		= SM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x51, +	}, +	{ +		.slave_id	= SHDMA_SLAVE_RIIC9_RX, +		.addr		= 0x1e590013, +		.chcr		= DM_INC | 0x800 | 0x40000000 | +				  TS_INDEX2VAL(XMIT_SZ_8BIT), +		.mid_rid	= 0x52, +	}, +}; + +static const struct sh_dmae_channel sh7757_dmae_channels[] = { +	{ +		.offset = 0, +		.dmars = 0, +		.dmars_bit = 0, +	}, { +		.offset = 0x10, +		.dmars = 0, +		.dmars_bit = 8, +	}, { +		.offset = 0x20, +		.dmars = 4, +		.dmars_bit = 0, +	}, { +		.offset = 0x30, +		.dmars = 4, +		.dmars_bit = 8, +	}, { +		.offset = 0x50, +		.dmars = 8, +		.dmars_bit = 0, +	}, { +		.offset = 0x60, +		.dmars = 8, +		.dmars_bit = 8, +	} +}; + +static const unsigned int ts_shift[] = TS_SHIFT; + +static struct sh_dmae_pdata dma0_platform_data = { +	.slave		= sh7757_dmae0_slaves, +	.slave_num	= ARRAY_SIZE(sh7757_dmae0_slaves), +	.channel	= sh7757_dmae_channels, +	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT, +}; + +static struct sh_dmae_pdata dma1_platform_data = { +	.slave		= sh7757_dmae1_slaves, +	.slave_num	= ARRAY_SIZE(sh7757_dmae1_slaves), +	.channel	= sh7757_dmae_channels, +	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT, +}; + +static struct sh_dmae_pdata dma2_platform_data = { +	.slave		= sh7757_dmae2_slaves, +	.slave_num	= ARRAY_SIZE(sh7757_dmae2_slaves), +	.channel	= sh7757_dmae_channels, +	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT, +}; + +static struct sh_dmae_pdata dma3_platform_data = { +	.slave		= sh7757_dmae3_slaves, +	.slave_num	= ARRAY_SIZE(sh7757_dmae3_slaves), +	.channel	= sh7757_dmae_channels, +	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels), +	.ts_low_shift	= CHCR_TS_LOW_SHIFT, +	.ts_low_mask	= CHCR_TS_LOW_MASK, +	.ts_high_shift	= CHCR_TS_HIGH_SHIFT, +	.ts_high_mask	= CHCR_TS_HIGH_MASK, +	.ts_shift	= ts_shift, +	.ts_shift_num	= ARRAY_SIZE(ts_shift), +	.dmaor_init	= DMAOR_INIT, +}; + +/* channel 0 to 5 */ +static struct resource sh7757_dmae0_resources[] = { +	[0] = { +		/* Channel registers and DMAOR */ +		.start	= 0xff608020, +		.end	= 0xff60808f, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		/* DMARSx */ +		.start	= 0xff609000, +		.end	= 0xff60900b, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		.name	= "error_irq", +		.start	= evt2irq(0x640), +		.end	= evt2irq(0x640), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +}; + +/* channel 6 to 11 */ +static struct resource sh7757_dmae1_resources[] = { +	[0] = { +		/* Channel registers and DMAOR */ +		.start	= 0xff618020, +		.end	= 0xff61808f, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		/* DMARSx */ +		.start	= 0xff619000, +		.end	= 0xff61900b, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		.name	= "error_irq", +		.start	= evt2irq(0x640), +		.end	= evt2irq(0x640), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +	{ +		/* IRQ for channels 4 */ +		.start	= evt2irq(0x7c0), +		.end	= evt2irq(0x7c0), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +	{ +		/* IRQ for channels 5 */ +		.start	= evt2irq(0x7c0), +		.end	= evt2irq(0x7c0), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +	{ +		/* IRQ for channels 6 */ +		.start	= evt2irq(0xd00), +		.end	= evt2irq(0xd00), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +	{ +		/* IRQ for channels 7 */ +		.start	= evt2irq(0xd00), +		.end	= evt2irq(0xd00), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +	{ +		/* IRQ for channels 8 */ +		.start	= evt2irq(0xd00), +		.end	= evt2irq(0xd00), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +	{ +		/* IRQ for channels 9 */ +		.start	= evt2irq(0xd00), +		.end	= evt2irq(0xd00), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +	{ +		/* IRQ for channels 10 */ +		.start	= evt2irq(0xd00), +		.end	= evt2irq(0xd00), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +	{ +		/* IRQ for channels 11 */ +		.start	= evt2irq(0xd00), +		.end	= evt2irq(0xd00), +		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, +	}, +}; + +/* channel 12 to 17 */ +static struct resource sh7757_dmae2_resources[] = { +	[0] = { +		/* Channel registers and DMAOR */ +		.start	= 0xff708020, +		.end	= 0xff70808f, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		/* DMARSx */ +		.start	= 0xff709000, +		.end	= 0xff70900b, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		.name	= "error_irq", +		.start	= evt2irq(0x2a60), +		.end	= evt2irq(0x2a60), +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		/* IRQ for channels 12 to 16 */ +		.start	= evt2irq(0x2400), +		.end	= evt2irq(0x2480), +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		/* IRQ for channel 17 */ +		.start	= evt2irq(0x24e0), +		.end	= evt2irq(0x24e0), +		.flags	= IORESOURCE_IRQ, +	},  }; -static struct resource tmu1_resources[] = { +/* channel 18 to 23 */ +static struct resource sh7757_dmae3_resources[] = {  	[0] = { -		.start	= 0xfe430014, -		.end	= 0xfe43001f, +		/* Channel registers and DMAOR */ +		.start	= 0xff718020, +		.end	= 0xff71808f,  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 29, +		/* DMARSx */ +		.start	= 0xff719000, +		.end	= 0xff71900b, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		.name	= "error_irq", +		.start	= evt2irq(0x2a80), +		.end	= evt2irq(0x2a80), +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		/* IRQ for channels 18 to 22 */ +		.start	= evt2irq(0x2500), +		.end	= evt2irq(0x2580),  		.flags	= IORESOURCE_IRQ,  	}, +	{ +		/* IRQ for channel 23 */ +		.start	= evt2irq(0x2600), +		.end	= evt2irq(0x2600), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device dma0_device = { +	.name           = "sh-dma-engine", +	.id             = 0, +	.resource	= sh7757_dmae0_resources, +	.num_resources	= ARRAY_SIZE(sh7757_dmae0_resources), +	.dev            = { +		.platform_data	= &dma0_platform_data, +	},  }; -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +static struct platform_device dma1_device = { +	.name		= "sh-dma-engine",  	.id		= 1, +	.resource	= sh7757_dmae1_resources, +	.num_resources	= ARRAY_SIZE(sh7757_dmae1_resources), +	.dev		= { +		.platform_data	= &dma1_platform_data, +	}, +}; + +static struct platform_device dma2_device = { +	.name		= "sh-dma-engine", +	.id		= 2, +	.resource	= sh7757_dmae2_resources, +	.num_resources	= ARRAY_SIZE(sh7757_dmae2_resources), +	.dev		= { +		.platform_data	= &dma2_platform_data, +	}, +}; + +static struct platform_device dma3_device = { +	.name		= "sh-dma-engine", +	.id		= 3, +	.resource	= sh7757_dmae3_resources, +	.num_resources	= ARRAY_SIZE(sh7757_dmae3_resources), +	.dev		= { +		.platform_data	= &dma3_platform_data, +	}, +}; + +static struct platform_device spi0_device = { +	.name	= "sh_spi", +	.id	= 0, +	.dev	= { +		.dma_mask		= NULL, +		.coherent_dma_mask	= 0xffffffff, +	}, +	.num_resources	= ARRAY_SIZE(spi0_resources), +	.resource	= spi0_resources, +}; + +static struct resource spi1_resources[] = { +	{ +		.start	= 0xffd8ee70, +		.end	= 0xffd8eeff, +		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_8BIT, +	}, +	{ +		.start	= evt2irq(0x8c0), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device spi1_device = { +	.name	= "sh_spi", +	.id	= 1, +	.num_resources	= ARRAY_SIZE(spi1_resources), +	.resource	= spi1_resources, +}; + +static struct resource rspi_resources[] = { +	{ +		.start	= 0xfe480000, +		.end	= 0xfe4800ff, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		.start	= evt2irq(0x1d80), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device rspi_device = { +	.name	= "rspi", +	.id	= 2, +	.num_resources	= ARRAY_SIZE(rspi_resources), +	.resource	= rspi_resources, +}; + +static struct resource usb_ehci_resources[] = { +	[0] = { +		.start	= 0xfe4f1000, +		.end	= 0xfe4f10ff, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= evt2irq(0x920), +		.end	= evt2irq(0x920), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device usb_ehci_device = { +	.name		= "sh_ehci", +	.id		= -1, +	.dev = { +		.dma_mask = &usb_ehci_device.dev.coherent_dma_mask, +		.coherent_dma_mask = DMA_BIT_MASK(32), +	}, +	.num_resources	= ARRAY_SIZE(usb_ehci_resources), +	.resource	= usb_ehci_resources, +}; + +static struct resource usb_ohci_resources[] = { +	[0] = { +		.start	= 0xfe4f1800, +		.end	= 0xfe4f18ff, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= evt2irq(0x920), +		.end	= evt2irq(0x920), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct usb_ohci_pdata usb_ohci_pdata; + +static struct platform_device usb_ohci_device = { +	.name		= "ohci-platform", +	.id		= -1,  	.dev = { -		.platform_data	= &tmu1_platform_data, +		.dma_mask = &usb_ohci_device.dev.coherent_dma_mask, +		.coherent_dma_mask = DMA_BIT_MASK(32), +		.platform_data	= &usb_ohci_pdata,  	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), +	.num_resources	= ARRAY_SIZE(usb_ohci_resources), +	.resource	= usb_ohci_resources,  };  static struct platform_device *sh7757_devices[] __initdata = { @@ -123,7 +746,15 @@ static struct platform_device *sh7757_devices[] __initdata = {  	&scif3_device,  	&scif4_device,  	&tmu0_device, -	&tmu1_device, +	&dma0_device, +	&dma1_device, +	&dma2_device, +	&dma3_device, +	&spi0_device, +	&spi1_device, +	&rspi_device, +	&usb_ehci_device, +	&usb_ohci_device,  };  static int __init sh7757_devices_setup(void) @@ -138,7 +769,6 @@ static struct platform_device *sh7757_early_devices[] __initdata = {  	&scif3_device,  	&scif4_device,  	&tmu0_device, -	&tmu1_device,  };  void __init plat_early_device_setup(void) @@ -493,13 +1123,13 @@ static DECLARE_INTC_DESC(intc_desc, "sh7757", vectors, groups,  /* Support for external interrupt pins in IRQ mode */  static struct intc_vect vectors_irq0123[] __initdata = { -	INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280), -	INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300), +	INTC_VECT(IRQ0, 0x200), INTC_VECT(IRQ1, 0x240), +	INTC_VECT(IRQ2, 0x280), INTC_VECT(IRQ3, 0x2c0),  };  static struct intc_vect vectors_irq4567[] __initdata = { -	INTC_VECT(IRQ4, 0x340), INTC_VECT(IRQ5, 0x380), -	INTC_VECT(IRQ6, 0x3c0), INTC_VECT(IRQ7, 0x200), +	INTC_VECT(IRQ4, 0x300), INTC_VECT(IRQ5, 0x340), +	INTC_VECT(IRQ6, 0x380), INTC_VECT(IRQ7, 0x3c0),  };  static struct intc_sense_reg sense_registers[] __initdata = { @@ -533,14 +1163,14 @@ static struct intc_vect vectors_irl0123[] __initdata = {  };  static struct intc_vect vectors_irl4567[] __initdata = { -	INTC_VECT(IRL4_LLLL, 0xb00), INTC_VECT(IRL4_LLLH, 0xb20), -	INTC_VECT(IRL4_LLHL, 0xb40), INTC_VECT(IRL4_LLHH, 0xb60), -	INTC_VECT(IRL4_LHLL, 0xb80), INTC_VECT(IRL4_LHLH, 0xba0), -	INTC_VECT(IRL4_LHHL, 0xbc0), INTC_VECT(IRL4_LHHH, 0xbe0), -	INTC_VECT(IRL4_HLLL, 0xc00), INTC_VECT(IRL4_HLLH, 0xc20), -	INTC_VECT(IRL4_HLHL, 0xc40), INTC_VECT(IRL4_HLHH, 0xc60), -	INTC_VECT(IRL4_HHLL, 0xc80), INTC_VECT(IRL4_HHLH, 0xca0), -	INTC_VECT(IRL4_HHHL, 0xcc0), +	INTC_VECT(IRL4_LLLL, 0x200), INTC_VECT(IRL4_LLLH, 0x220), +	INTC_VECT(IRL4_LLHL, 0x240), INTC_VECT(IRL4_LLHH, 0x260), +	INTC_VECT(IRL4_LHLL, 0x280), INTC_VECT(IRL4_LHLH, 0x2a0), +	INTC_VECT(IRL4_LHHL, 0x2c0), INTC_VECT(IRL4_LHHH, 0x2e0), +	INTC_VECT(IRL4_HLLL, 0x300), INTC_VECT(IRL4_HLLH, 0x320), +	INTC_VECT(IRL4_HLHL, 0x340), INTC_VECT(IRL4_HLHH, 0x360), +	INTC_VECT(IRL4_HHLL, 0x380), INTC_VECT(IRL4_HHLH, 0x3a0), +	INTC_VECT(IRL4_HHHL, 0x3c0),  };  static DECLARE_INTC_DESC(intc_desc_irl0123, "sh7757-irl0123", vectors_irl0123, diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7763.c b/arch/sh/kernel/cpu/sh4a/setup-sh7763.c index 5b5f6b005fc..5a47d670dde 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7763.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7763.c @@ -13,49 +13,72 @@  #include <linux/init.h>  #include <linux/serial.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <linux/io.h>  #include <linux/serial_sci.h> +#include <linux/usb/ohci_pdriver.h>  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xffe00000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 40, 40, 40, 40 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffe00000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x700)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xffe08000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 76, 76, 76, 76 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffe08000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xb80)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xffe10000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 104, 104, 104, 104 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xffe10000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xf00)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	}, @@ -69,7 +92,7 @@ static struct resource rtc_resources[] = {  	},  	[1] = {  		/* Shared Period/Carry/Alarm IRQ */ -		.start  = 20, +		.start  = evt2irq(0x480),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -88,19 +111,23 @@ static struct resource usb_ohci_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 83, -		.end	= 83, +		.start	= evt2irq(0xc60), +		.end	= evt2irq(0xc60),  		.flags	= IORESOURCE_IRQ,  	},  };  static u64 usb_ohci_dma_mask = 0xffffffffUL; + +static struct usb_ohci_pdata usb_ohci_pdata; +  static struct platform_device usb_ohci_device = { -	.name		= "sh_ohci", +	.name		= "ohci-platform",  	.id		= -1,  	.dev = {  		.dma_mask		= &usb_ohci_dma_mask,  		.coherent_dma_mask	= 0xffffffff, +		.platform_data		= &usb_ohci_pdata,  	},  	.num_resources	= ARRAY_SIZE(usb_ohci_resources),  	.resource	= usb_ohci_resources, @@ -113,8 +140,8 @@ static struct resource usbf_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 84, -		.end	= 84, +		.start	= evt2irq(0xc80), +		.end	= evt2irq(0xc80),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -131,25 +158,18 @@ static struct platform_device usbf_device = {  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 28, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x580)), +	DEFINE_RES_IRQ(evt2irq(0x5a0)), +	DEFINE_RES_IRQ(evt2irq(0x5c0)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -159,25 +179,18 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 29, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd88000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0xe00)), +	DEFINE_RES_IRQ(evt2irq(0xe20)), +	DEFINE_RES_IRQ(evt2irq(0xe40)),  };  static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 1,  	.dev = {  		.platform_data	= &tmu1_platform_data, @@ -186,124 +199,12 @@ static struct platform_device tmu1_device = {  	.num_resources	= ARRAY_SIZE(tmu1_resources),  }; -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 30, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; - -static struct sh_timer_config tmu3_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu3_resources[] = { -	[0] = { -		.start	= 0xffd88008, -		.end	= 0xffd88013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 96, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu3_device = { -	.name		= "sh_tmu", -	.id		= 3, -	.dev = { -		.platform_data	= &tmu3_platform_data, -	}, -	.resource	= tmu3_resources, -	.num_resources	= ARRAY_SIZE(tmu3_resources), -}; - -static struct sh_timer_config tmu4_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu4_resources[] = { -	[0] = { -		.start	= 0xffd88014, -		.end	= 0xffd8801f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 97, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu4_device = { -	.name		= "sh_tmu", -	.id		= 4, -	.dev = { -		.platform_data	= &tmu4_platform_data, -	}, -	.resource	= tmu4_resources, -	.num_resources	= ARRAY_SIZE(tmu4_resources), -}; - -static struct sh_timer_config tmu5_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu5_resources[] = { -	[0] = { -		.start	= 0xffd88020, -		.end	= 0xffd8802b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 98, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu5_device = { -	.name		= "sh_tmu", -	.id		= 5, -	.dev = { -		.platform_data	= &tmu5_platform_data, -	}, -	.resource	= tmu5_resources, -	.num_resources	= ARRAY_SIZE(tmu5_resources), -}; -  static struct platform_device *sh7763_devices[] __initdata = {  	&scif0_device,  	&scif1_device,  	&scif2_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  	&rtc_device,  	&usb_ohci_device,  	&usbf_device, @@ -322,10 +223,6 @@ static struct platform_device *sh7763_early_devices[] __initdata = {  	&scif2_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7770.c b/arch/sh/kernel/cpu/sh4a/setup-sh7770.c index 7270d7fd676..e9b532a76c3 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7770.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7770.c @@ -12,178 +12,232 @@  #include <linux/serial.h>  #include <linux/serial_sci.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <linux/io.h>  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xff923000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 61, 61, 61, 61 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xff923000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x9a0)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xff924000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 62, 62, 62, 62 }, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xff924000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x9c0)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xff925000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 63, 63, 63, 63 }, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xff925000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x9e0)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase	= 0xff926000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 64, 64, 64, 64 }, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xff926000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xa00)),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  };  static struct plat_sci_port scif4_platform_data = { -	.mapbase	= 0xff927000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 65, 65, 65, 65 }, +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xff927000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xa20)),  };  static struct platform_device scif4_device = {  	.name		= "sh-sci",  	.id		= 4, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources),  	.dev		= {  		.platform_data	= &scif4_platform_data,  	},  };  static struct plat_sci_port scif5_platform_data = { -	.mapbase	= 0xff928000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 66, 66, 66, 66 }, +}; + +static struct resource scif5_resources[] = { +	DEFINE_RES_MEM(0xff928000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xa40)),  };  static struct platform_device scif5_device = {  	.name		= "sh-sci",  	.id		= 5, +	.resource	= scif5_resources, +	.num_resources	= ARRAY_SIZE(scif5_resources),  	.dev		= {  		.platform_data	= &scif5_platform_data,  	},  };  static struct plat_sci_port scif6_platform_data = { -	.mapbase	= 0xff929000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 67, 67, 67, 67 }, +}; + +static struct resource scif6_resources[] = { +	DEFINE_RES_MEM(0xff929000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xa60)),  };  static struct platform_device scif6_device = {  	.name		= "sh-sci",  	.id		= 6, +	.resource	= scif6_resources, +	.num_resources	= ARRAY_SIZE(scif6_resources),  	.dev		= {  		.platform_data	= &scif6_platform_data,  	},  };  static struct plat_sci_port scif7_platform_data = { -	.mapbase	= 0xff92a000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 68, 68, 68, 68 }, +}; + +static struct resource scif7_resources[] = { +	DEFINE_RES_MEM(0xff92a000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xa80)),  };  static struct platform_device scif7_device = {  	.name		= "sh-sci",  	.id		= 7, +	.resource	= scif7_resources, +	.num_resources	= ARRAY_SIZE(scif7_resources),  	.dev		= {  		.platform_data	= &scif7_platform_data,  	},  };  static struct plat_sci_port scif8_platform_data = { -	.mapbase	= 0xff92b000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 69, 69, 69, 69 }, +}; + +static struct resource scif8_resources[] = { +	DEFINE_RES_MEM(0xff92b000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xaa0)),  };  static struct platform_device scif8_device = {  	.name		= "sh-sci",  	.id		= 8, +	.resource	= scif8_resources, +	.num_resources	= ARRAY_SIZE(scif8_resources),  	.dev		= {  		.platform_data	= &scif8_platform_data,  	},  };  static struct plat_sci_port scif9_platform_data = { -	.mapbase	= 0xff92c000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE,  	.type		= PORT_SCIF, -	.irqs		= { 70, 70, 70, 70 }, +}; + +static struct resource scif9_resources[] = { +	DEFINE_RES_MEM(0xff92c000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xac0)),  };  static struct platform_device scif9_device = {  	.name		= "sh-sci",  	.id		= 9, +	.resource	= scif9_resources, +	.num_resources	= ARRAY_SIZE(scif9_resources),  	.dev		= {  		.platform_data	= &scif9_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -193,25 +247,18 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd81000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x460)), +	DEFINE_RES_IRQ(evt2irq(0x480)), +	DEFINE_RES_IRQ(evt2irq(0x4a0)),  };  static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 1,  	.dev = {  		.platform_data	= &tmu1_platform_data, @@ -221,24 +268,18 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, +	.channels_mask = 7,  };  static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd82000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x4c0)), +	DEFINE_RES_IRQ(evt2irq(0x4e0)), +	DEFINE_RES_IRQ(evt2irq(0x500)),  };  static struct platform_device tmu2_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 2,  	.dev = {  		.platform_data	= &tmu2_platform_data, @@ -247,168 +288,6 @@ static struct platform_device tmu2_device = {  	.num_resources	= ARRAY_SIZE(tmu2_resources),  }; -static struct sh_timer_config tmu3_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu3_resources[] = { -	[0] = { -		.start	= 0xffd81008, -		.end	= 0xffd81013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 19, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu3_device = { -	.name		= "sh_tmu", -	.id		= 3, -	.dev = { -		.platform_data	= &tmu3_platform_data, -	}, -	.resource	= tmu3_resources, -	.num_resources	= ARRAY_SIZE(tmu3_resources), -}; - -static struct sh_timer_config tmu4_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu4_resources[] = { -	[0] = { -		.start	= 0xffd81014, -		.end	= 0xffd8101f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 20, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu4_device = { -	.name		= "sh_tmu", -	.id		= 4, -	.dev = { -		.platform_data	= &tmu4_platform_data, -	}, -	.resource	= tmu4_resources, -	.num_resources	= ARRAY_SIZE(tmu4_resources), -}; - -static struct sh_timer_config tmu5_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu5_resources[] = { -	[0] = { -		.start	= 0xffd81020, -		.end	= 0xffd8102f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 21, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu5_device = { -	.name		= "sh_tmu", -	.id		= 5, -	.dev = { -		.platform_data	= &tmu5_platform_data, -	}, -	.resource	= tmu5_resources, -	.num_resources	= ARRAY_SIZE(tmu5_resources), -}; - -static struct sh_timer_config tmu6_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu6_resources[] = { -	[0] = { -		.start	= 0xffd82008, -		.end	= 0xffd82013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 22, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu6_device = { -	.name		= "sh_tmu", -	.id		= 6, -	.dev = { -		.platform_data	= &tmu6_platform_data, -	}, -	.resource	= tmu6_resources, -	.num_resources	= ARRAY_SIZE(tmu6_resources), -}; - -static struct sh_timer_config tmu7_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu7_resources[] = { -	[0] = { -		.start	= 0xffd82014, -		.end	= 0xffd8201f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 23, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu7_device = { -	.name		= "sh_tmu", -	.id		= 7, -	.dev = { -		.platform_data	= &tmu7_platform_data, -	}, -	.resource	= tmu7_resources, -	.num_resources	= ARRAY_SIZE(tmu7_resources), -}; - -static struct sh_timer_config tmu8_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu8_resources[] = { -	[0] = { -		.start	= 0xffd82020, -		.end	= 0xffd8202b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 24, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu8_device = { -	.name		= "sh_tmu", -	.id		= 8, -	.dev = { -		.platform_data	= &tmu8_platform_data, -	}, -	.resource	= tmu8_resources, -	.num_resources	= ARRAY_SIZE(tmu8_resources), -}; -  static struct platform_device *sh7770_devices[] __initdata = {  	&scif0_device,  	&scif1_device, @@ -423,12 +302,6 @@ static struct platform_device *sh7770_devices[] __initdata = {  	&tmu0_device,  	&tmu1_device,  	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device, -	&tmu6_device, -	&tmu7_device, -	&tmu8_device,  };  static int __init sh7770_devices_setup(void) @@ -452,12 +325,6 @@ static struct platform_device *sh7770_early_devices[] __initdata = {  	&tmu0_device,  	&tmu1_device,  	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device, -	&tmu6_device, -	&tmu7_device, -	&tmu8_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c index 0f414864f76..3ee7dd9b3a6 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c @@ -14,59 +14,66 @@  #include <linux/serial_sci.h>  #include <linux/sh_dma.h>  #include <linux/sh_timer.h> - +#include <linux/sh_intc.h>  #include <cpu/dma-register.h>  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xffe00000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 40, 40, 40, 40 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffe00000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x700)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xffe10000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 76, 76, 76, 76 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffe10000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0xb80)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 28, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x580)), +	DEFINE_RES_IRQ(evt2irq(0x5a0)), +	DEFINE_RES_IRQ(evt2irq(0x5c0)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -76,25 +83,18 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 29, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffdc0000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0xe00)), +	DEFINE_RES_IRQ(evt2irq(0xe20)), +	DEFINE_RES_IRQ(evt2irq(0xe40)),  };  static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 1,  	.dev = {  		.platform_data	= &tmu1_platform_data, @@ -103,114 +103,6 @@ static struct platform_device tmu1_device = {  	.num_resources	= ARRAY_SIZE(tmu1_resources),  }; -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 30, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; - -static struct sh_timer_config tmu3_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu3_resources[] = { -	[0] = { -		.start	= 0xffdc0008, -		.end	= 0xffdc0013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 96, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu3_device = { -	.name		= "sh_tmu", -	.id		= 3, -	.dev = { -		.platform_data	= &tmu3_platform_data, -	}, -	.resource	= tmu3_resources, -	.num_resources	= ARRAY_SIZE(tmu3_resources), -}; - -static struct sh_timer_config tmu4_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu4_resources[] = { -	[0] = { -		.start	= 0xffdc0014, -		.end	= 0xffdc001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 97, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu4_device = { -	.name		= "sh_tmu", -	.id		= 4, -	.dev = { -		.platform_data	= &tmu4_platform_data, -	}, -	.resource	= tmu4_resources, -	.num_resources	= ARRAY_SIZE(tmu4_resources), -}; - -static struct sh_timer_config tmu5_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu5_resources[] = { -	[0] = { -		.start	= 0xffdc0020, -		.end	= 0xffdc002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 98, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu5_device = { -	.name		= "sh_tmu", -	.id		= 5, -	.dev = { -		.platform_data	= &tmu5_platform_data, -	}, -	.resource	= tmu5_resources, -	.num_resources	= ARRAY_SIZE(tmu5_resources), -}; -  static struct resource rtc_resources[] = {  	[0] = {  		.start	= 0xffe80000, @@ -219,7 +111,7 @@ static struct resource rtc_resources[] = {  	},  	[1] = {  		/* Shared Period/Carry/Alarm IRQ */ -		.start	= 20, +		.start	= evt2irq(0x480),  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -316,9 +208,13 @@ static struct resource sh7780_dmae0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	{ -		/* Real DMA error IRQ is 38, and channel IRQs are 34-37, 44-45 */ -		.start	= 34, -		.end	= 34, +		/* +		 * Real DMA error vector is 0x6c0, and channel +		 * vectors are 0x640-0x6a0, 0x780-0x7a0 +		 */ +		.name	= "error_irq", +		.start	= evt2irq(0x640), +		.end	= evt2irq(0x640),  		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,  	},  }; @@ -332,9 +228,13 @@ static struct resource sh7780_dmae1_resources[] = {  	},  	/* DMAC1 has no DMARS */  	{ -		/* Real DMA error IRQ is 38, and channel IRQs are 46-47, 92-95 */ -		.start	= 46, -		.end	= 46, +		/* +		 * Real DMA error vector is 0x6c0, and channel +		 * vectors are 0x7c0-0x7e0, 0xd80-0xde0 +		 */ +		.name	= "error_irq", +		.start	= evt2irq(0x7c0), +		.end	= evt2irq(0x7c0),  		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,  	},  }; @@ -364,10 +264,6 @@ static struct platform_device *sh7780_devices[] __initdata = {  	&scif1_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  	&rtc_device,  	&dma0_device,  	&dma1_device, @@ -379,19 +275,21 @@ static int __init sh7780_devices_setup(void)  				    ARRAY_SIZE(sh7780_devices));  }  arch_initcall(sh7780_devices_setup); +  static struct platform_device *sh7780_early_devices[] __initdata = {  	&scif0_device,  	&scif1_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  };  void __init plat_early_device_setup(void)  { +	if (mach_is_sh2007()) { +		scif0_platform_data.scscr &= ~SCSCR_CKE1; +		scif1_platform_data.scscr &= ~SCSCR_CKE1; +	} +  	early_platform_add_devices(sh7780_early_devices,  				   ARRAY_SIZE(sh7780_early_devices));  } diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c index c9a572bc6dc..c72d5a5d099 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c @@ -15,121 +15,155 @@  #include <linux/mm.h>  #include <linux/sh_dma.h>  #include <linux/sh_timer.h> - +#include <linux/sh_intc.h>  #include <asm/mmzone.h> -  #include <cpu/dma-register.h>  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xffea0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 40, 40, 40, 40 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffea0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x700)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xffeb0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 44, 44, 44, 44 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffeb0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x780)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xffec0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 60, 60, 60, 60 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xffec0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x980)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase	= 0xffed0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 61, 61, 61, 61 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xffed0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x9a0)),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  };  static struct plat_sci_port scif4_platform_data = { -	.mapbase	= 0xffee0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 62, 62, 62, 62 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xffee0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x9c0)),  };  static struct platform_device scif4_device = {  	.name		= "sh-sci",  	.id		= 4, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources),  	.dev		= {  		.platform_data	= &scif4_platform_data,  	},  };  static struct plat_sci_port scif5_platform_data = { -	.mapbase	= 0xffef0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 63, 63, 63, 63 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif5_resources[] = { +	DEFINE_RES_MEM(0xffef0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x9e0)),  };  static struct platform_device scif5_device = {  	.name		= "sh-sci",  	.id		= 5, +	.resource	= scif5_resources, +	.num_resources	= ARRAY_SIZE(scif5_resources),  	.dev		= {  		.platform_data	= &scif5_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 28, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x580)), +	DEFINE_RES_IRQ(evt2irq(0x5a0)), +	DEFINE_RES_IRQ(evt2irq(0x5c0)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -139,25 +173,18 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 29, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffdc0000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0xe00)), +	DEFINE_RES_IRQ(evt2irq(0xe20)), +	DEFINE_RES_IRQ(evt2irq(0xe40)),  };  static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 1,  	.dev = {  		.platform_data	= &tmu1_platform_data, @@ -166,114 +193,6 @@ static struct platform_device tmu1_device = {  	.num_resources	= ARRAY_SIZE(tmu1_resources),  }; -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 30, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; - -static struct sh_timer_config tmu3_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu3_resources[] = { -	[0] = { -		.start	= 0xffdc0008, -		.end	= 0xffdc0013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 96, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu3_device = { -	.name		= "sh_tmu", -	.id		= 3, -	.dev = { -		.platform_data	= &tmu3_platform_data, -	}, -	.resource	= tmu3_resources, -	.num_resources	= ARRAY_SIZE(tmu3_resources), -}; - -static struct sh_timer_config tmu4_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu4_resources[] = { -	[0] = { -		.start	= 0xffdc0014, -		.end	= 0xffdc001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 97, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu4_device = { -	.name		= "sh_tmu", -	.id		= 4, -	.dev = { -		.platform_data	= &tmu4_platform_data, -	}, -	.resource	= tmu4_resources, -	.num_resources	= ARRAY_SIZE(tmu4_resources), -}; - -static struct sh_timer_config tmu5_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu5_resources[] = { -	[0] = { -		.start	= 0xffdc0020, -		.end	= 0xffdc002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 98, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu5_device = { -	.name		= "sh_tmu", -	.id		= 5, -	.dev = { -		.platform_data	= &tmu5_platform_data, -	}, -	.resource	= tmu5_resources, -	.num_resources	= ARRAY_SIZE(tmu5_resources), -}; -  /* DMA */  static const struct sh_dmae_channel sh7785_dmae0_channels[] = {  	{ @@ -359,9 +278,13 @@ static struct resource sh7785_dmae0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	{ -		/* Real DMA error IRQ is 39, and channel IRQs are 33-38 */ -		.start	= 33, -		.end	= 33, +		/* +		 * Real DMA error vector is 0x6e0, and channel +		 * vectors are 0x620-0x6c0 +		 */ +		.name	= "error_irq", +		.start	= evt2irq(0x620), +		.end	= evt2irq(0x620),  		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,  	},  }; @@ -375,9 +298,13 @@ static struct resource sh7785_dmae1_resources[] = {  	},  	/* DMAC1 has no DMARS */  	{ -		/* Real DMA error IRQ is 58, and channel IRQs are 52-57 */ -		.start	= 52, -		.end	= 52, +		/* +		 * Real DMA error vector is 0x940, and channel +		 * vectors are 0x880-0x920 +		 */ +		.name	= "error_irq", +		.start	= evt2irq(0x880), +		.end	= evt2irq(0x880),  		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,  	},  }; @@ -411,10 +338,6 @@ static struct platform_device *sh7785_devices[] __initdata = {  	&scif5_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  	&dma0_device,  	&dma1_device,  }; @@ -435,10 +358,6 @@ static struct platform_device *sh7785_early_devices[] __initdata = {  	&scif5_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  };  void __init plat_early_device_setup(void) diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index c016c000471..479e79bdd3d 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c @@ -1,7 +1,7 @@  /*   * SH7786 Setup   * - * Copyright (C) 2009 - 2010  Renesas Solutions Corp. + * Copyright (C) 2009 - 2011  Renesas Solutions Corp.   * Kuninori Morimoto <morimoto.kuninori@renesas.com>   * Paul Mundt <paul.mundt@renesas.com>   * @@ -23,19 +23,30 @@  #include <linux/sh_timer.h>  #include <linux/sh_dma.h>  #include <linux/sh_intc.h> +#include <linux/usb/ohci_pdriver.h>  #include <cpu/dma-register.h>  #include <asm/mmzone.h>  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xffea0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 40, 41, 43, 42 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffea0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x700)), +	DEFINE_RES_IRQ(evt2irq(0x720)), +	DEFINE_RES_IRQ(evt2irq(0x760)), +	DEFINE_RES_IRQ(evt2irq(0x740)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	}, @@ -45,100 +56,137 @@ static struct platform_device scif0_device = {   * The rest of these all have multiplexed IRQs   */  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xffeb0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 44, 44, 44, 44 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffeb0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x780)), +}; + +static struct resource scif1_demux_resources[] = { +	DEFINE_RES_MEM(0xffeb0000, 0x100), +	/* Placeholders, see sh7786_devices_setup() */ +	DEFINE_RES_IRQ(0), +	DEFINE_RES_IRQ(0), +	DEFINE_RES_IRQ(0), +	DEFINE_RES_IRQ(0),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xffec0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 50, 50, 50, 50 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xffec0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x840)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct plat_sci_port scif3_platform_data = { -	.mapbase	= 0xffed0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 51, 51, 51, 51 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif3_resources[] = { +	DEFINE_RES_MEM(0xffed0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x860)),  };  static struct platform_device scif3_device = {  	.name		= "sh-sci",  	.id		= 3, +	.resource	= scif3_resources, +	.num_resources	= ARRAY_SIZE(scif3_resources),  	.dev		= {  		.platform_data	= &scif3_platform_data,  	},  };  static struct plat_sci_port scif4_platform_data = { -	.mapbase	= 0xffee0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 52, 52, 52, 52 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif4_resources[] = { +	DEFINE_RES_MEM(0xffee0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x880)),  };  static struct platform_device scif4_device = {  	.name		= "sh-sci",  	.id		= 4, +	.resource	= scif4_resources, +	.num_resources	= ARRAY_SIZE(scif4_resources),  	.dev		= {  		.platform_data	= &scif4_platform_data,  	},  };  static struct plat_sci_port scif5_platform_data = { -	.mapbase	= 0xffef0000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1,  	.type		= PORT_SCIF, -	.irqs		= { 53, 53, 53, 53 }, +	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE, +}; + +static struct resource scif5_resources[] = { +	DEFINE_RES_MEM(0xffef0000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x8a0)),  };  static struct platform_device scif5_device = {  	.name		= "sh-sci",  	.id		= 5, +	.resource	= scif5_resources, +	.num_resources	= ARRAY_SIZE(scif5_resources),  	.dev		= {  		.platform_data	= &scif5_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffd80008, -		.end	= 0xffd80013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffd80000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -148,25 +196,18 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffd80014, -		.end	= 0xffd8001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffda0000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x480)), +	DEFINE_RES_IRQ(evt2irq(0x4a0)), +	DEFINE_RES_IRQ(evt2irq(0x4c0)),  };  static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 1,  	.dev = {  		.platform_data	= &tmu1_platform_data, @@ -176,24 +217,18 @@ static struct platform_device tmu1_device = {  };  static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, +	.channels_mask = 7,  };  static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffd80020, -		.end	= 0xffd8002f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffdc0000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x7a0)), +	DEFINE_RES_IRQ(evt2irq(0x7a0)), +	DEFINE_RES_IRQ(evt2irq(0x7a0)),  };  static struct platform_device tmu2_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 2,  	.dev = {  		.platform_data	= &tmu2_platform_data, @@ -203,24 +238,18 @@ static struct platform_device tmu2_device = {  };  static struct sh_timer_config tmu3_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, +	.channels_mask = 7,  };  static struct resource tmu3_resources[] = { -	[0] = { -		.start	= 0xffda0008, -		.end	= 0xffda0013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 20, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffde0000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x7c0)), +	DEFINE_RES_IRQ(evt2irq(0x7c0)), +	DEFINE_RES_IRQ(evt2irq(0x7c0)),  };  static struct platform_device tmu3_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 3,  	.dev = {  		.platform_data	= &tmu3_platform_data, @@ -229,222 +258,6 @@ static struct platform_device tmu3_device = {  	.num_resources	= ARRAY_SIZE(tmu3_resources),  }; -static struct sh_timer_config tmu4_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu4_resources[] = { -	[0] = { -		.start	= 0xffda0014, -		.end	= 0xffda001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 21, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu4_device = { -	.name		= "sh_tmu", -	.id		= 4, -	.dev = { -		.platform_data	= &tmu4_platform_data, -	}, -	.resource	= tmu4_resources, -	.num_resources	= ARRAY_SIZE(tmu4_resources), -}; - -static struct sh_timer_config tmu5_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu5_resources[] = { -	[0] = { -		.start	= 0xffda0020, -		.end	= 0xffda002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 22, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu5_device = { -	.name		= "sh_tmu", -	.id		= 5, -	.dev = { -		.platform_data	= &tmu5_platform_data, -	}, -	.resource	= tmu5_resources, -	.num_resources	= ARRAY_SIZE(tmu5_resources), -}; - -static struct sh_timer_config tmu6_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu6_resources[] = { -	[0] = { -		.start	= 0xffdc0008, -		.end	= 0xffdc0013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 45, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu6_device = { -	.name		= "sh_tmu", -	.id		= 6, -	.dev = { -		.platform_data	= &tmu6_platform_data, -	}, -	.resource	= tmu6_resources, -	.num_resources	= ARRAY_SIZE(tmu6_resources), -}; - -static struct sh_timer_config tmu7_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu7_resources[] = { -	[0] = { -		.start	= 0xffdc0014, -		.end	= 0xffdc001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 45, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu7_device = { -	.name		= "sh_tmu", -	.id		= 7, -	.dev = { -		.platform_data	= &tmu7_platform_data, -	}, -	.resource	= tmu7_resources, -	.num_resources	= ARRAY_SIZE(tmu7_resources), -}; - -static struct sh_timer_config tmu8_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu8_resources[] = { -	[0] = { -		.start	= 0xffdc0020, -		.end	= 0xffdc002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 45, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu8_device = { -	.name		= "sh_tmu", -	.id		= 8, -	.dev = { -		.platform_data	= &tmu8_platform_data, -	}, -	.resource	= tmu8_resources, -	.num_resources	= ARRAY_SIZE(tmu8_resources), -}; - -static struct sh_timer_config tmu9_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu9_resources[] = { -	[0] = { -		.start	= 0xffde0008, -		.end	= 0xffde0013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 46, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu9_device = { -	.name		= "sh_tmu", -	.id		= 9, -	.dev = { -		.platform_data	= &tmu9_platform_data, -	}, -	.resource	= tmu9_resources, -	.num_resources	= ARRAY_SIZE(tmu9_resources), -}; - -static struct sh_timer_config tmu10_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu10_resources[] = { -	[0] = { -		.start	= 0xffde0014, -		.end	= 0xffde001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 46, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu10_device = { -	.name		= "sh_tmu", -	.id		= 10, -	.dev = { -		.platform_data	= &tmu10_platform_data, -	}, -	.resource	= tmu10_resources, -	.num_resources	= ARRAY_SIZE(tmu10_resources), -}; - -static struct sh_timer_config tmu11_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu11_resources[] = { -	[0] = { -		.start	= 0xffde0020, -		.end	= 0xffde002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 46, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu11_device = { -	.name		= "sh_tmu", -	.id		= 11, -	.dev = { -		.platform_data	= &tmu11_platform_data, -	}, -	.resource	= tmu11_resources, -	.num_resources	= ARRAY_SIZE(tmu11_resources), -}; -  static const struct sh_dmae_channel dmac0_channels[] = {  	{  		.offset = 0, @@ -500,7 +313,7 @@ static struct resource dmac0_resources[] = {  		.end	= 0xfe00900b,  		.flags	= IORESOURCE_MEM,  	}, { -		/* DMA error IRQ */ +		.name	= "error_irq",  		.start	= evt2irq(0x5c0),  		.end	= evt2irq(0x5c0),  		.flags	= IORESOURCE_IRQ, @@ -522,26 +335,55 @@ static struct platform_device dma0_device = {  	},  }; +#define USB_EHCI_START 0xffe70000 +#define USB_OHCI_START 0xffe70400 + +static struct resource usb_ehci_resources[] = { +	[0] = { +		.start	= USB_EHCI_START, +		.end	= USB_EHCI_START + 0x3ff, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= evt2irq(0xba0), +		.end	= evt2irq(0xba0), +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device usb_ehci_device = { +	.name		= "sh_ehci", +	.id		= -1, +	.dev = { +		.dma_mask		= &usb_ehci_device.dev.coherent_dma_mask, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +	}, +	.num_resources	= ARRAY_SIZE(usb_ehci_resources), +	.resource	= usb_ehci_resources, +}; +  static struct resource usb_ohci_resources[] = {  	[0] = { -		.start	= 0xffe70400, -		.end	= 0xffe704ff, +		.start	= USB_OHCI_START, +		.end	= USB_OHCI_START + 0x3ff,  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= 77, -		.end	= 77, +		.start	= evt2irq(0xba0), +		.end	= evt2irq(0xba0),  		.flags	= IORESOURCE_IRQ,  	},  }; -static u64 usb_ohci_dma_mask = DMA_BIT_MASK(32); +static struct usb_ohci_pdata usb_ohci_pdata; +  static struct platform_device usb_ohci_device = { -	.name		= "sh_ohci", +	.name		= "ohci-platform",  	.id		= -1,  	.dev = { -		.dma_mask		= &usb_ohci_dma_mask, +		.dma_mask		= &usb_ohci_device.dev.coherent_dma_mask,  		.coherent_dma_mask	= DMA_BIT_MASK(32), +		.platform_data		= &usb_ohci_pdata,  	},  	.num_resources	= ARRAY_SIZE(usb_ohci_resources),  	.resource	= usb_ohci_resources, @@ -557,19 +399,11 @@ static struct platform_device *sh7786_early_devices[] __initdata = {  	&tmu0_device,  	&tmu1_device,  	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device, -	&tmu6_device, -	&tmu7_device, -	&tmu8_device, -	&tmu9_device, -	&tmu10_device, -	&tmu11_device,  };  static struct platform_device *sh7786_devices[] __initdata = {  	&dma0_device, +	&usb_ehci_device,  	&usb_ohci_device,  }; @@ -609,7 +443,7 @@ static void __init sh7786_usb_setup(void)  	 * The following settings are necessary  	 * for using the USB modules.  	 * -	 * see "USB Inital Settings" for detail +	 * see "USB Initial Settings" for detail  	 */  	__raw_writel(USBINITVAL1, USBINITREG1);  	__raw_writel(USBINITVAL2, USBINITREG2); @@ -985,13 +819,16 @@ static int __init sh7786_devices_setup(void)  	 */  	irq = intc_irq_lookup(sh7786_intc_desc.name, TXI1);  	if (irq > 0) { -		scif1_platform_data.irqs[SCIx_TXI_IRQ] = irq; -		scif1_platform_data.irqs[SCIx_ERI_IRQ] = +		scif1_demux_resources[1].start =  			intc_irq_lookup(sh7786_intc_desc.name, ERI1); -		scif1_platform_data.irqs[SCIx_BRI_IRQ] = -			intc_irq_lookup(sh7786_intc_desc.name, BRI1); -		scif1_platform_data.irqs[SCIx_RXI_IRQ] = +		scif1_demux_resources[2].start =  			intc_irq_lookup(sh7786_intc_desc.name, RXI1); +		scif1_demux_resources[3].start = irq; +		scif1_demux_resources[4].start = +			intc_irq_lookup(sh7786_intc_desc.name, BRI1); + +		scif1_device.resource = scif1_demux_resources; +		scif1_device.num_resources = ARRAY_SIZE(scif1_demux_resources);  	}  	ret = platform_add_devices(sh7786_early_devices, diff --git a/arch/sh/kernel/cpu/sh4a/setup-shx3.c b/arch/sh/kernel/cpu/sh4a/setup-shx3.c index 013f0b14448..a78c5feb4e3 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-shx3.c +++ b/arch/sh/kernel/cpu/sh4a/setup-shx3.c @@ -14,6 +14,7 @@  #include <linux/io.h>  #include <linux/gpio.h>  #include <linux/sh_timer.h> +#include <linux/sh_intc.h>  #include <cpu/shx3.h>  #include <asm/mmzone.h> @@ -27,70 +28,90 @@   * all rather than adding infrastructure to hack around it.   */  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= 0xffc30000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 40, 41, 43, 42 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(0xffc30000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x700)), +	DEFINE_RES_IRQ(evt2irq(0x720)), +	DEFINE_RES_IRQ(evt2irq(0x760)), +	DEFINE_RES_IRQ(evt2irq(0x740)),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	},  };  static struct plat_sci_port scif1_platform_data = { -	.mapbase	= 0xffc40000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 44, 45, 47, 46 }, +}; + +static struct resource scif1_resources[] = { +	DEFINE_RES_MEM(0xffc40000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x780)), +	DEFINE_RES_IRQ(evt2irq(0x7a0)), +	DEFINE_RES_IRQ(evt2irq(0x7e0)), +	DEFINE_RES_IRQ(evt2irq(0x7c0)),  };  static struct platform_device scif1_device = {  	.name		= "sh-sci",  	.id		= 1, +	.resource	= scif1_resources, +	.num_resources	= ARRAY_SIZE(scif1_resources),  	.dev		= {  		.platform_data	= &scif1_platform_data,  	},  };  static struct plat_sci_port scif2_platform_data = { -	.mapbase	= 0xffc60000,  	.flags		= UPF_BOOT_AUTOCONF, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 52, 53, 55, 54 }, +}; + +static struct resource scif2_resources[] = { +	DEFINE_RES_MEM(0xffc60000, 0x100), +	DEFINE_RES_IRQ(evt2irq(0x880)), +	DEFINE_RES_IRQ(evt2irq(0x8a0)), +	DEFINE_RES_IRQ(evt2irq(0x8e0)), +	DEFINE_RES_IRQ(evt2irq(0x8c0)),  };  static struct platform_device scif2_device = {  	.name		= "sh-sci",  	.id		= 2, +	.resource	= scif2_resources, +	.num_resources	= ARRAY_SIZE(scif2_resources),  	.dev		= {  		.platform_data	= &scif2_platform_data,  	},  };  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= 0xffc10008, -		.end	= 0xffc10013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 16, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffc10000, 0x30), +	DEFINE_RES_IRQ(evt2irq(0x400)), +	DEFINE_RES_IRQ(evt2irq(0x420)), +	DEFINE_RES_IRQ(evt2irq(0x440)),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -100,25 +121,18 @@ static struct platform_device tmu0_device = {  };  static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu1_resources[] = { -	[0] = { -		.start	= 0xffc10014, -		.end	= 0xffc1001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 17, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(0xffc20000, 0x2c), +	DEFINE_RES_IRQ(evt2irq(0x460)), +	DEFINE_RES_IRQ(evt2irq(0x480)), +	DEFINE_RES_IRQ(evt2irq(0x4a0)),  };  static struct platform_device tmu1_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 1,  	.dev = {  		.platform_data	= &tmu1_platform_data, @@ -127,124 +141,12 @@ static struct platform_device tmu1_device = {  	.num_resources	= ARRAY_SIZE(tmu1_resources),  }; -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= 0xffc10020, -		.end	= 0xffc1002f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 18, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; - -static struct sh_timer_config tmu3_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -}; - -static struct resource tmu3_resources[] = { -	[0] = { -		.start	= 0xffc20008, -		.end	= 0xffc20013, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 19, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu3_device = { -	.name		= "sh_tmu", -	.id		= 3, -	.dev = { -		.platform_data	= &tmu3_platform_data, -	}, -	.resource	= tmu3_resources, -	.num_resources	= ARRAY_SIZE(tmu3_resources), -}; - -static struct sh_timer_config tmu4_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -}; - -static struct resource tmu4_resources[] = { -	[0] = { -		.start	= 0xffc20014, -		.end	= 0xffc2001f, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 20, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu4_device = { -	.name		= "sh_tmu", -	.id		= 4, -	.dev = { -		.platform_data	= &tmu4_platform_data, -	}, -	.resource	= tmu4_resources, -	.num_resources	= ARRAY_SIZE(tmu4_resources), -}; - -static struct sh_timer_config tmu5_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu5_resources[] = { -	[0] = { -		.start	= 0xffc20020, -		.end	= 0xffc2002b, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= 21, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu5_device = { -	.name		= "sh_tmu", -	.id		= 5, -	.dev = { -		.platform_data	= &tmu5_platform_data, -	}, -	.resource	= tmu5_resources, -	.num_resources	= ARRAY_SIZE(tmu5_resources), -}; -  static struct platform_device *shx3_early_devices[] __initdata = {  	&scif0_device,  	&scif1_device,  	&scif2_device,  	&tmu0_device,  	&tmu1_device, -	&tmu2_device, -	&tmu3_device, -	&tmu4_device, -	&tmu5_device,  };  static int __init shx3_devices_setup(void) @@ -478,9 +380,6 @@ void __init plat_irq_setup_pins(int mode)  void __init plat_irq_setup(void)  { -	reserve_intc_vectors(vectors_irq, ARRAY_SIZE(vectors_irq)); -	reserve_intc_vectors(vectors_irl, ARRAY_SIZE(vectors_irl)); -  	register_intc_controller(&intc_desc);  } diff --git a/arch/sh/kernel/cpu/sh4a/smp-shx3.c b/arch/sh/kernel/cpu/sh4a/smp-shx3.c index de865cac02e..4a298808789 100644 --- a/arch/sh/kernel/cpu/sh4a/smp-shx3.c +++ b/arch/sh/kernel/cpu/sh4a/smp-shx3.c @@ -79,7 +79,7 @@ static void shx3_prepare_cpus(unsigned int max_cpus)  	for (i = 0; i < SMP_MSG_NR; i++)  		request_irq(104 + i, ipi_interrupt_handler, -			    IRQF_DISABLED | IRQF_PERCPU, "IPI", (void *)(long)i); +			    IRQF_PERCPU, "IPI", (void *)(long)i);  	for (i = 0; i < max_cpus; i++)  		set_cpu_present(i, true); @@ -124,7 +124,7 @@ static void shx3_update_boot_vector(unsigned int cpu)  	__raw_writel(STBCR_RESET, STBCR_REG(cpu));  } -static int __cpuinit +static int  shx3_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)  {  	unsigned int cpu = (unsigned int)hcpu; @@ -143,11 +143,11 @@ shx3_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)  	return NOTIFY_OK;  } -static struct notifier_block __cpuinitdata shx3_cpu_notifier = { +static struct notifier_block shx3_cpu_notifier = {  	.notifier_call		= shx3_cpu_callback,  }; -static int __cpuinit register_shx3_cpu_notifier(void) +static int register_shx3_cpu_notifier(void)  {  	register_hotcpu_notifier(&shx3_cpu_notifier);  	return 0; diff --git a/arch/sh/kernel/cpu/sh5/clock-sh5.c b/arch/sh/kernel/cpu/sh5/clock-sh5.c index 9cfc19b8dbe..c48b93d4c08 100644 --- a/arch/sh/kernel/cpu/sh5/clock-sh5.c +++ b/arch/sh/kernel/cpu/sh5/clock-sh5.c @@ -28,7 +28,7 @@ static void master_clk_init(struct clk *clk)  	clk->rate *= ifc_table[idx];  } -static struct clk_ops sh5_master_clk_ops = { +static struct sh_clk_ops sh5_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -38,7 +38,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_table[idx];  } -static struct clk_ops sh5_module_clk_ops = { +static struct sh_clk_ops sh5_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -48,7 +48,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_table[idx];  } -static struct clk_ops sh5_bus_clk_ops = { +static struct sh_clk_ops sh5_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -58,18 +58,18 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_table[idx];  } -static struct clk_ops sh5_cpu_clk_ops = { +static struct sh_clk_ops sh5_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh5_clk_ops[] = { +static struct sh_clk_ops *sh5_clk_ops[] = {  	&sh5_master_clk_ops,  	&sh5_module_clk_ops,  	&sh5_bus_clk_ops,  	&sh5_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  {  	cprc_base = (unsigned long)ioremap_nocache(CPRC_BASE, 1024);  	BUG_ON(!cprc_base); diff --git a/arch/sh/kernel/cpu/sh5/entry.S b/arch/sh/kernel/cpu/sh5/entry.S index 6b80295dd7a..0c8d0377d40 100644 --- a/arch/sh/kernel/cpu/sh5/entry.S +++ b/arch/sh/kernel/cpu/sh5/entry.S @@ -335,7 +335,7 @@ tlb_miss:  	/* If the fast path handler fixed the fault, just drop through quickly  	   to the restore code right away to return to the excepting context.  	   */ -	beqi/u	r2, 0, tr1 +	bnei/u	r2, 0, tr1  fast_tlb_miss_restore:  	ld.q	SP, SAVED_TR0, r2 @@ -933,7 +933,7 @@ ret_with_reschedule:  	pta	restore_all, tr1 -	movi	_TIF_SIGPENDING, r8 +	movi	(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME), r8  	and	r8, r7, r8  	pta	work_notifysig, tr0  	bne	r8, ZERO, tr0 @@ -1079,9 +1079,8 @@ restore_all:   *   * Kernel TLB fault handlers will get a slightly different interface.   * (r2)   struct pt_regs *, original register's frame pointer - * (r3)   writeaccess, whether it's a store fault as opposed to load fault - * (r4)   execaccess, whether it's a ITLB fault as opposed to DTLB fault - * (r5)   Effective Address of fault + * (r3)   page fault error code (see asm/thread_info.h) + * (r4)   Effective Address of fault   * (LINK) return address   * (SP)   = r2   * @@ -1092,26 +1091,25 @@ restore_all:  tlb_miss_load:  	or	SP, ZERO, r2  	or	ZERO, ZERO, r3		/* Read */ -	or	ZERO, ZERO, r4		/* Data */ -	getcon	TEA, r5 +	getcon	TEA, r4  	pta	call_do_page_fault, tr0  	beq	ZERO, ZERO, tr0  tlb_miss_store:  	or	SP, ZERO, r2 -	movi	1, r3			/* Write */ -	or	ZERO, ZERO, r4		/* Data */ -	getcon	TEA, r5 +	movi	FAULT_CODE_WRITE, r3		/* Write */ +	getcon	TEA, r4  	pta	call_do_page_fault, tr0  	beq	ZERO, ZERO, tr0  itlb_miss_or_IRQ:  	pta	its_IRQ, tr0  	beqi/u	r4, EVENT_INTERRUPT, tr0 + +	/* ITLB miss */  	or	SP, ZERO, r2 -	or	ZERO, ZERO, r3		/* Read */ -	movi	1, r4			/* Text */ -	getcon	TEA, r5 +	movi	FAULT_CODE_ITLB, r3 +	getcon	TEA, r4  	/* Fall through */  call_do_page_fault: @@ -1230,6 +1228,25 @@ ret_from_fork:  	pta	ret_from_syscall, tr0  	blink	tr0, ZERO +.global	ret_from_kernel_thread +ret_from_kernel_thread: + +	movi	schedule_tail,r5 +	ori	r5, 1, r5 +	ptabs	r5, tr0 +	blink	tr0, LINK + +	ld.q	SP, FRAME_R(2), r2 +	ld.q	SP, FRAME_R(3), r3 +	ptabs	r3, tr0 +	blink	tr0, LINK + +	ld.q	SP, FRAME_S(FSPC), r2 +	addi	r2, 4, r2		/* Move PC, being pre-execution event */ +	st.q	SP, FRAME_S(FSPC), r2 +	pta	ret_from_syscall, tr0 +	blink	tr0, ZERO +  syscall_allowed:  	/* Use LINK to deflect the exit point, default is syscall_ret */  	pta	syscall_ret, tr0 @@ -1571,86 +1588,6 @@ ___clear_user_exit:  #endif /* CONFIG_MMU */  /* - * int __strncpy_from_user(unsigned long __dest, unsigned long __src, - *			   int __count) - * - * Inputs: - * (r2)  target address - * (r3)  source address - * (r4)  maximum size in bytes - * - * Ouputs: - * (*r2) copied data - * (r2)  -EFAULT (in case of faulting) - *       copied data (otherwise) - */ -	.global	__strncpy_from_user -__strncpy_from_user: -	pta	___strncpy_from_user1, tr0 -	pta	___strncpy_from_user_done, tr1 -	or	r4, ZERO, r5		/* r5 = original count */ -	beq/u	r4, r63, tr1		/* early exit if r4==0 */ -	movi	-(EFAULT), r6		/* r6 = reply, no real fixup */ -	or	ZERO, ZERO, r7		/* r7 = data, clear top byte of data */ - -___strncpy_from_user1: -	ld.b	r3, 0, r7		/* Fault address: only in reading */ -	st.b	r2, 0, r7 -	addi	r2, 1, r2 -	addi	r3, 1, r3 -	beq/u	ZERO, r7, tr1 -	addi	r4, -1, r4		/* return real number of copied bytes */ -	bne/l	ZERO, r4, tr0 - -___strncpy_from_user_done: -	sub	r5, r4, r6		/* If done, return copied */ - -___strncpy_from_user_exit: -	or	r6, ZERO, r2 -	ptabs	LINK, tr0 -	blink	tr0, ZERO - -/* - * extern long __strnlen_user(const char *__s, long __n) - * - * Inputs: - * (r2)  source address - * (r3)  source size in bytes - * - * Ouputs: - * (r2)  -EFAULT (in case of faulting) - *       string length (otherwise) - */ -	.global	__strnlen_user -__strnlen_user: -	pta	___strnlen_user_set_reply, tr0 -	pta	___strnlen_user1, tr1 -	or	ZERO, ZERO, r5		/* r5 = counter */ -	movi	-(EFAULT), r6		/* r6 = reply, no real fixup */ -	or	ZERO, ZERO, r7		/* r7 = data, clear top byte of data */ -	beq	r3, ZERO, tr0 - -___strnlen_user1: -	ldx.b	r2, r5, r7		/* Fault address: only in reading */ -	addi	r3, -1, r3		/* No real fixup */ -	addi	r5, 1, r5 -	beq	r3, ZERO, tr0 -	bne	r7, ZERO, tr1 -! The line below used to be active.  This meant led to a junk byte lying between each pair -! of entries in the argv & envp structures in memory.  Whilst the program saw the right data -! via the argv and envp arguments to main, it meant the 'flat' representation visible through -! /proc/$pid/cmdline was corrupt, causing trouble with ps, for example. -!	addi	r5, 1, r5		/* Include '\0' */ - -___strnlen_user_set_reply: -	or	r5, ZERO, r6		/* If done, return counter */ - -___strnlen_user_exit: -	or	r6, ZERO, r2 -	ptabs	LINK, tr0 -	blink	tr0, ZERO - -/*   * extern long __get_user_asm_?(void *val, long addr)   *   * Inputs: @@ -1984,8 +1921,6 @@ asm_uaccess_start:  	.long	___copy_user2, ___copy_user_exit  	.long	___clear_user1, ___clear_user_exit  #endif -	.long	___strncpy_from_user1, ___strncpy_from_user_exit -	.long	___strnlen_user1, ___strnlen_user_exit  	.long	___get_user_asm_b1, ___get_user_asm_b_exit  	.long	___get_user_asm_w1, ___get_user_asm_w_exit  	.long	___get_user_asm_l1, ___get_user_asm_l_exit diff --git a/arch/sh/kernel/cpu/sh5/fpu.c b/arch/sh/kernel/cpu/sh5/fpu.c index 4b3bb35e99f..9f8713aa718 100644 --- a/arch/sh/kernel/cpu/sh5/fpu.c +++ b/arch/sh/kernel/cpu/sh5/fpu.c @@ -107,8 +107,5 @@ asmlinkage void do_fpu_error(unsigned long ex, struct pt_regs *regs)  	regs->pc += 4; -	tsk->thread.trap_no = 11; -	tsk->thread.error_code = 0; -  	force_sig(SIGFPE, tsk);  } diff --git a/arch/sh/kernel/cpu/sh5/probe.c b/arch/sh/kernel/cpu/sh5/probe.c index 9e882409e4e..eca427c2f2f 100644 --- a/arch/sh/kernel/cpu/sh5/probe.c +++ b/arch/sh/kernel/cpu/sh5/probe.c @@ -17,7 +17,7 @@  #include <asm/cache.h>  #include <asm/tlb.h> -void __cpuinit cpu_probe(void) +void cpu_probe(void)  {  	unsigned long long cir; diff --git a/arch/sh/kernel/cpu/sh5/setup-sh5.c b/arch/sh/kernel/cpu/sh5/setup-sh5.c index d910666142b..1bf0b2cf665 100644 --- a/arch/sh/kernel/cpu/sh5/setup-sh5.c +++ b/arch/sh/kernel/cpu/sh5/setup-sh5.c @@ -17,15 +17,23 @@  #include <asm/addrspace.h>  static struct plat_sci_port scif0_platform_data = { -	.mapbase	= PHYS_PERIPHERAL_BLOCK + 0x01030000,  	.flags		= UPF_BOOT_AUTOCONF | UPF_IOREMAP, +	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,  	.type		= PORT_SCIF, -	.irqs		= { 39, 40, 42, 0 }, +}; + +static struct resource scif0_resources[] = { +	DEFINE_RES_MEM(PHYS_PERIPHERAL_BLOCK + 0x01030000, 0x100), +	DEFINE_RES_IRQ(39), +	DEFINE_RES_IRQ(40), +	DEFINE_RES_IRQ(42),  };  static struct platform_device scif0_device = {  	.name		= "sh-sci",  	.id		= 0, +	.resource	= scif0_resources, +	.num_resources	= ARRAY_SIZE(scif0_resources),  	.dev		= {  		.platform_data	= &scif0_platform_data,  	}, @@ -63,30 +71,20 @@ static struct platform_device rtc_device = {  #define	TMU_BLOCK_OFF	0x01020000  #define TMU_BASE	PHYS_PERIPHERAL_BLOCK + TMU_BLOCK_OFF -#define TMU0_BASE	(TMU_BASE + 0x8 + (0xc * 0x0)) -#define TMU1_BASE	(TMU_BASE + 0x8 + (0xc * 0x1)) -#define TMU2_BASE	(TMU_BASE + 0x8 + (0xc * 0x2))  static struct sh_timer_config tmu0_platform_data = { -	.channel_offset = 0x04, -	.timer_bit = 0, -	.clockevent_rating = 200, +	.channels_mask = 7,  };  static struct resource tmu0_resources[] = { -	[0] = { -		.start	= TMU0_BASE, -		.end	= TMU0_BASE + 0xc - 1, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_TUNI0, -		.flags	= IORESOURCE_IRQ, -	}, +	DEFINE_RES_MEM(TMU_BASE, 0x30), +	DEFINE_RES_IRQ(IRQ_TUNI0), +	DEFINE_RES_IRQ(IRQ_TUNI1), +	DEFINE_RES_IRQ(IRQ_TUNI2),  };  static struct platform_device tmu0_device = { -	.name		= "sh_tmu", +	.name		= "sh-tmu",  	.id		= 0,  	.dev = {  		.platform_data	= &tmu0_platform_data, @@ -95,66 +93,9 @@ static struct platform_device tmu0_device = {  	.num_resources	= ARRAY_SIZE(tmu0_resources),  }; -static struct sh_timer_config tmu1_platform_data = { -	.channel_offset = 0x10, -	.timer_bit = 1, -	.clocksource_rating = 200, -}; - -static struct resource tmu1_resources[] = { -	[0] = { -		.start	= TMU1_BASE, -		.end	= TMU1_BASE + 0xc - 1, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_TUNI1, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu1_device = { -	.name		= "sh_tmu", -	.id		= 1, -	.dev = { -		.platform_data	= &tmu1_platform_data, -	}, -	.resource	= tmu1_resources, -	.num_resources	= ARRAY_SIZE(tmu1_resources), -}; - -static struct sh_timer_config tmu2_platform_data = { -	.channel_offset = 0x1c, -	.timer_bit = 2, -}; - -static struct resource tmu2_resources[] = { -	[0] = { -		.start	= TMU2_BASE, -		.end	= TMU2_BASE + 0xc - 1, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_TUNI2, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device tmu2_device = { -	.name		= "sh_tmu", -	.id		= 2, -	.dev = { -		.platform_data	= &tmu2_platform_data, -	}, -	.resource	= tmu2_resources, -	.num_resources	= ARRAY_SIZE(tmu2_resources), -}; -  static struct platform_device *sh5_early_devices[] __initdata = {  	&scif0_device,  	&tmu0_device, -	&tmu1_device, -	&tmu2_device,  };  static struct platform_device *sh5_devices[] __initdata = { diff --git a/arch/sh/kernel/cpu/sh5/unwind.c b/arch/sh/kernel/cpu/sh5/unwind.c index b205b25eaf4..10aed41757f 100644 --- a/arch/sh/kernel/cpu/sh5/unwind.c +++ b/arch/sh/kernel/cpu/sh5/unwind.c @@ -16,6 +16,8 @@  #include <asm/ptrace.h>  #include <asm/processor.h>  #include <asm/io.h> +#include <asm/unwinder.h> +#include <asm/stacktrace.h>  static u8 regcache[63]; @@ -199,8 +201,11 @@ static int lookup_prev_stack_frame(unsigned long fp, unsigned long pc,  	return 0;  } -/* Don't put this on the stack since we'll want to call sh64_unwind - * when we're close to underflowing the stack anyway. */ +/* + * Don't put this on the stack since we'll want to call in to + * sh64_unwinder_dump() when we're close to underflowing the stack + * anyway. + */  static struct pt_regs here_regs;  extern const char syscall_ret; @@ -208,17 +213,19 @@ extern const char ret_from_syscall;  extern const char ret_from_exception;  extern const char ret_from_irq; -static void sh64_unwind_inner(struct pt_regs *regs); +static void sh64_unwind_inner(const struct stacktrace_ops *ops, +			      void *data, struct pt_regs *regs); -static void unwind_nested (unsigned long pc, unsigned long fp) +static inline void unwind_nested(const struct stacktrace_ops *ops, void *data, +				 unsigned long pc, unsigned long fp)  {  	if ((fp >= __MEMORY_START) && -	    ((fp & 7) == 0)) { -		sh64_unwind_inner((struct pt_regs *) fp); -	} +	    ((fp & 7) == 0)) +		sh64_unwind_inner(ops, data, (struct pt_regs *)fp);  } -static void sh64_unwind_inner(struct pt_regs *regs) +static void sh64_unwind_inner(const struct stacktrace_ops *ops, +			      void *data, struct pt_regs *regs)  {  	unsigned long pc, fp;  	int ofs = 0; @@ -232,29 +239,29 @@ static void sh64_unwind_inner(struct pt_regs *regs)  		int cond;  		unsigned long next_fp, next_pc; -		if (pc == ((unsigned long) &syscall_ret & ~1)) { +		if (pc == ((unsigned long)&syscall_ret & ~1)) {  			printk("SYSCALL\n"); -			unwind_nested(pc,fp); +			unwind_nested(ops, data, pc, fp);  			return;  		} -		if (pc == ((unsigned long) &ret_from_syscall & ~1)) { +		if (pc == ((unsigned long)&ret_from_syscall & ~1)) {  			printk("SYSCALL (PREEMPTED)\n"); -			unwind_nested(pc,fp); +			unwind_nested(ops, data, pc, fp);  			return;  		}  		/* In this case, the PC is discovered by lookup_prev_stack_frame but  		   it has 4 taken off it to look like the 'caller' */ -		if (pc == ((unsigned long) &ret_from_exception & ~1)) { +		if (pc == ((unsigned long)&ret_from_exception & ~1)) {  			printk("EXCEPTION\n"); -			unwind_nested(pc,fp); +			unwind_nested(ops, data, pc, fp);  			return;  		} -		if (pc == ((unsigned long) &ret_from_irq & ~1)) { +		if (pc == ((unsigned long)&ret_from_irq & ~1)) {  			printk("IRQ\n"); -			unwind_nested(pc,fp); +			unwind_nested(ops, data, pc, fp);  			return;  		} @@ -263,8 +270,7 @@ static void sh64_unwind_inner(struct pt_regs *regs)  		pc -= ofs; -		printk("[<%08lx>] ", pc); -		print_symbol("%s\n", pc); +		ops->address(data, pc, 1);  		if (first_pass) {  			/* If the innermost frame is a leaf function, it's @@ -287,10 +293,13 @@ static void sh64_unwind_inner(struct pt_regs *regs)  	}  	printk("\n"); -  } -void sh64_unwind(struct pt_regs *regs) +static void sh64_unwinder_dump(struct task_struct *task, +			       struct pt_regs *regs, +			       unsigned long *sp, +			       const struct stacktrace_ops *ops, +			       void *data)  {  	if (!regs) {  		/* @@ -320,7 +329,17 @@ void sh64_unwind(struct pt_regs *regs)  		);  	} -	printk("\nCall Trace:\n"); -	sh64_unwind_inner(regs); +	sh64_unwind_inner(ops, data, regs);  } +static struct unwinder sh64_unwinder = { +	.name	= "sh64-unwinder", +	.dump	= sh64_unwinder_dump, +	.rating	= 150, +}; + +static int __init sh64_unwinder_init(void) +{ +	return unwinder_register(&sh64_unwinder); +} +early_initcall(sh64_unwinder_init); diff --git a/arch/sh/kernel/cpu/shmobile/Makefile b/arch/sh/kernel/cpu/shmobile/Makefile index a39f88ea1a8..e8a5111e848 100644 --- a/arch/sh/kernel/cpu/shmobile/Makefile +++ b/arch/sh/kernel/cpu/shmobile/Makefile @@ -5,4 +5,3 @@  # Power Management & Sleep mode  obj-$(CONFIG_PM)	+= pm.o sleep.o  obj-$(CONFIG_CPU_IDLE)	+= cpuidle.o -obj-$(CONFIG_PM_RUNTIME)	+= pm_runtime.o diff --git a/arch/sh/kernel/cpu/shmobile/cpuidle.c b/arch/sh/kernel/cpu/shmobile/cpuidle.c index 83972aa319c..e3abfd4277e 100644 --- a/arch/sh/kernel/cpu/shmobile/cpuidle.c +++ b/arch/sh/kernel/cpu/shmobile/cpuidle.c @@ -14,9 +14,9 @@  #include <linux/io.h>  #include <linux/suspend.h>  #include <linux/cpuidle.h> +#include <linux/export.h>  #include <asm/suspend.h>  #include <asm/uaccess.h> -#include <asm/hwblk.h>  static unsigned long cpuidle_mode[] = {  	SUSP_SH_SLEEP, /* regular sleep mode */ @@ -25,11 +25,11 @@ static unsigned long cpuidle_mode[] = {  };  static int cpuidle_sleep_enter(struct cpuidle_device *dev, -			       struct cpuidle_state *state) +				struct cpuidle_driver *drv, +				int index)  { -	unsigned long allowed_mode = arch_hwblk_sleep_mode(); -	ktime_t before, after; -	int requested_state = state - &dev->states[0]; +	unsigned long allowed_mode = SUSP_SH_SLEEP; +	int requested_state = index;  	int allowed_state;  	int k; @@ -46,74 +46,56 @@ static int cpuidle_sleep_enter(struct cpuidle_device *dev,  	 */  	k = min_t(int, allowed_state, requested_state); -	dev->last_state = &dev->states[k]; -	before = ktime_get();  	sh_mobile_call_standby(cpuidle_mode[k]); -	after = ktime_get(); -	return ktime_to_ns(ktime_sub(after, before)) >> 10; + +	return k;  } -static struct cpuidle_device cpuidle_dev;  static struct cpuidle_driver cpuidle_driver = { -	.name =		"sh_idle", -	.owner =	THIS_MODULE, +	.name   = "sh_idle", +	.owner  = THIS_MODULE, +	.states = { +		{ +			.exit_latency = 1, +			.target_residency = 1 * 2, +			.power_usage = 3, +			.flags = CPUIDLE_FLAG_TIME_VALID, +			.enter = cpuidle_sleep_enter, +			.name = "C1", +			.desc = "SuperH Sleep Mode", +		}, +		{ +			.exit_latency = 100, +			.target_residency = 1 * 2, +			.power_usage = 1, +			.flags = CPUIDLE_FLAG_TIME_VALID, +			.enter = cpuidle_sleep_enter, +			.name = "C2", +			.desc = "SuperH Sleep Mode [SF]", +			.disabled = true, +		}, +		{ +			.exit_latency = 2300, +			.target_residency = 1 * 2, +			.power_usage = 1, +			.flags = CPUIDLE_FLAG_TIME_VALID, +			.enter = cpuidle_sleep_enter, +			.name = "C3", +			.desc = "SuperH Mobile Standby Mode [SF]", +			.disabled = true, +		}, +	}, +	.safe_state_index = 0, +	.state_count = 3,  }; -void sh_mobile_setup_cpuidle(void) +int __init sh_mobile_setup_cpuidle(void)  { -	struct cpuidle_device *dev = &cpuidle_dev; -	struct cpuidle_state *state; -	int i; - -	cpuidle_register_driver(&cpuidle_driver); - -	for (i = 0; i < CPUIDLE_STATE_MAX; i++) { -		dev->states[i].name[0] = '\0'; -		dev->states[i].desc[0] = '\0'; -	} - -	i = CPUIDLE_DRIVER_STATE_START; - -	state = &dev->states[i++]; -	snprintf(state->name, CPUIDLE_NAME_LEN, "C0"); -	strncpy(state->desc, "SuperH Sleep Mode", CPUIDLE_DESC_LEN); -	state->exit_latency = 1; -	state->target_residency = 1 * 2; -	state->power_usage = 3; -	state->flags = 0; -	state->flags |= CPUIDLE_FLAG_SHALLOW; -	state->flags |= CPUIDLE_FLAG_TIME_VALID; -	state->enter = cpuidle_sleep_enter; - -	dev->safe_state = state; - -	if (sh_mobile_sleep_supported & SUSP_SH_SF) { -		state = &dev->states[i++]; -		snprintf(state->name, CPUIDLE_NAME_LEN, "C1"); -		strncpy(state->desc, "SuperH Sleep Mode [SF]", -			CPUIDLE_DESC_LEN); -		state->exit_latency = 100; -		state->target_residency = 1 * 2; -		state->power_usage = 1; -		state->flags = 0; -		state->flags |= CPUIDLE_FLAG_TIME_VALID; -		state->enter = cpuidle_sleep_enter; -	} - -	if (sh_mobile_sleep_supported & SUSP_SH_STANDBY) { -		state = &dev->states[i++]; -		snprintf(state->name, CPUIDLE_NAME_LEN, "C2"); -		strncpy(state->desc, "SuperH Mobile Standby Mode [SF]", -			CPUIDLE_DESC_LEN); -		state->exit_latency = 2300; -		state->target_residency = 1 * 2; -		state->power_usage = 1; -		state->flags = 0; -		state->flags |= CPUIDLE_FLAG_TIME_VALID; -		state->enter = cpuidle_sleep_enter; -	} +	if (sh_mobile_sleep_supported & SUSP_SH_SF) +		cpuidle_driver.states[1].disabled = false; -	dev->state_count = i; +	if (sh_mobile_sleep_supported & SUSP_SH_STANDBY) +		cpuidle_driver.states[2].disabled = false; -	cpuidle_register_device(dev); +	return cpuidle_register(&cpuidle_driver, NULL);  } diff --git a/arch/sh/kernel/cpu/shmobile/pm.c b/arch/sh/kernel/cpu/shmobile/pm.c index e5596871270..ac37b7234f8 100644 --- a/arch/sh/kernel/cpu/shmobile/pm.c +++ b/arch/sh/kernel/cpu/shmobile/pm.c @@ -16,6 +16,7 @@  #include <asm/suspend.h>  #include <asm/uaccess.h>  #include <asm/cacheflush.h> +#include <asm/bl_bit.h>  /*   * Notifier lists for pre/post sleep notification @@ -141,7 +142,7 @@ static int sh_pm_enter(suspend_state_t state)  	return 0;  } -static struct platform_suspend_ops sh_pm_ops = { +static const struct platform_suspend_ops sh_pm_ops = {  	.enter          = sh_pm_enter,  	.valid          = suspend_valid_only_mem,  }; @@ -149,8 +150,7 @@ static struct platform_suspend_ops sh_pm_ops = {  static int __init sh_pm_init(void)  {  	suspend_set_ops(&sh_pm_ops); -	sh_mobile_setup_cpuidle(); -	return 0; +	return sh_mobile_setup_cpuidle();  }  late_initcall(sh_pm_init); diff --git a/arch/sh/kernel/cpu/shmobile/pm_runtime.c b/arch/sh/kernel/cpu/shmobile/pm_runtime.c deleted file mode 100644 index 6dcb8166a64..00000000000 --- a/arch/sh/kernel/cpu/shmobile/pm_runtime.c +++ /dev/null @@ -1,308 +0,0 @@ -/* - * arch/sh/kernel/cpu/shmobile/pm_runtime.c - * - * Runtime PM support code for SuperH Mobile - * - *  Copyright (C) 2009 Magnus Damm - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/io.h> -#include <linux/pm_runtime.h> -#include <linux/platform_device.h> -#include <linux/mutex.h> -#include <asm/hwblk.h> - -static DEFINE_SPINLOCK(hwblk_lock); -static LIST_HEAD(hwblk_idle_list); -static struct work_struct hwblk_work; - -extern struct hwblk_info *hwblk_info; - -static void platform_pm_runtime_not_idle(struct platform_device *pdev) -{ -	unsigned long flags; - -	/* remove device from idle list */ -	spin_lock_irqsave(&hwblk_lock, flags); -	if (test_bit(PDEV_ARCHDATA_FLAG_IDLE, &pdev->archdata.flags)) { -		list_del(&pdev->archdata.entry); -		__clear_bit(PDEV_ARCHDATA_FLAG_IDLE, &pdev->archdata.flags); -	} -	spin_unlock_irqrestore(&hwblk_lock, flags); -} - -static int __platform_pm_runtime_resume(struct platform_device *pdev) -{ -	struct device *d = &pdev->dev; -	struct pdev_archdata *ad = &pdev->archdata; -	int hwblk = ad->hwblk_id; -	int ret = -ENOSYS; - -	dev_dbg(d, "__platform_pm_runtime_resume() [%d]\n", hwblk); - -	if (d->driver) { -		hwblk_enable(hwblk_info, hwblk); -		ret = 0; - -		if (test_bit(PDEV_ARCHDATA_FLAG_SUSP, &ad->flags)) { -			if (d->driver->pm && d->driver->pm->runtime_resume) -				ret = d->driver->pm->runtime_resume(d); - -			if (!ret) -				clear_bit(PDEV_ARCHDATA_FLAG_SUSP, &ad->flags); -			else -				hwblk_disable(hwblk_info, hwblk); -		} -	} - -	dev_dbg(d, "__platform_pm_runtime_resume() [%d] - returns %d\n", -		hwblk, ret); - -	return ret; -} - -static int __platform_pm_runtime_suspend(struct platform_device *pdev) -{ -	struct device *d = &pdev->dev; -	struct pdev_archdata *ad = &pdev->archdata; -	int hwblk = ad->hwblk_id; -	int ret = -ENOSYS; - -	dev_dbg(d, "__platform_pm_runtime_suspend() [%d]\n", hwblk); - -	if (d->driver) { -		BUG_ON(!test_bit(PDEV_ARCHDATA_FLAG_IDLE, &ad->flags)); -		ret = 0; - -		if (d->driver->pm && d->driver->pm->runtime_suspend) { -			hwblk_enable(hwblk_info, hwblk); -			ret = d->driver->pm->runtime_suspend(d); -			hwblk_disable(hwblk_info, hwblk); -		} - -		if (!ret) { -			set_bit(PDEV_ARCHDATA_FLAG_SUSP, &ad->flags); -			platform_pm_runtime_not_idle(pdev); -			hwblk_cnt_dec(hwblk_info, hwblk, HWBLK_CNT_IDLE); -		} -	} - -	dev_dbg(d, "__platform_pm_runtime_suspend() [%d] - returns %d\n", -		hwblk, ret); - -	return ret; -} - -static void platform_pm_runtime_work(struct work_struct *work) -{ -	struct platform_device *pdev; -	unsigned long flags; -	int ret; - -	/* go through the idle list and suspend one device at a time */ -	do { -		spin_lock_irqsave(&hwblk_lock, flags); -		if (list_empty(&hwblk_idle_list)) -			pdev = NULL; -		else -			pdev = list_first_entry(&hwblk_idle_list, -						struct platform_device, -						archdata.entry); -		spin_unlock_irqrestore(&hwblk_lock, flags); - -		if (pdev) { -			mutex_lock(&pdev->archdata.mutex); -			ret = __platform_pm_runtime_suspend(pdev); - -			/* at this point the platform device may be: -			 * suspended: ret = 0, FLAG_SUSP set, clock stopped -			 * failed: ret < 0, FLAG_IDLE set, clock stopped -			 */ -			mutex_unlock(&pdev->archdata.mutex); -		} else { -			ret = -ENODEV; -		} -	} while (!ret); -} - -/* this function gets called from cpuidle context when all devices in the - * main power domain are unused but some are counted as idle, ie the hwblk - * counter values are (HWBLK_CNT_USAGE == 0) && (HWBLK_CNT_IDLE != 0) - */ -void platform_pm_runtime_suspend_idle(void) -{ -	queue_work(pm_wq, &hwblk_work); -} - -int platform_pm_runtime_suspend(struct device *dev) -{ -	struct platform_device *pdev = to_platform_device(dev); -	struct pdev_archdata *ad = &pdev->archdata; -	unsigned long flags; -	int hwblk = ad->hwblk_id; -	int ret = 0; - -	dev_dbg(dev, "platform_pm_runtime_suspend() [%d]\n", hwblk); - -	/* ignore off-chip platform devices */ -	if (!hwblk) -		goto out; - -	/* interrupt context not allowed */ -	might_sleep(); - -	/* catch misconfigured drivers not starting with resume */ -	if (test_bit(PDEV_ARCHDATA_FLAG_INIT, &pdev->archdata.flags)) { -		ret = -EINVAL; -		goto out; -	} - -	/* serialize */ -	mutex_lock(&ad->mutex); - -	/* disable clock */ -	hwblk_disable(hwblk_info, hwblk); - -	/* put device on idle list */ -	spin_lock_irqsave(&hwblk_lock, flags); -	list_add_tail(&pdev->archdata.entry, &hwblk_idle_list); -	__set_bit(PDEV_ARCHDATA_FLAG_IDLE, &pdev->archdata.flags); -	spin_unlock_irqrestore(&hwblk_lock, flags); - -	/* increase idle count */ -	hwblk_cnt_inc(hwblk_info, hwblk, HWBLK_CNT_IDLE); - -	/* at this point the platform device is: -	 * idle: ret = 0, FLAG_IDLE set, clock stopped -	 */ -	mutex_unlock(&ad->mutex); - -out: -	dev_dbg(dev, "platform_pm_runtime_suspend() [%d] returns %d\n", -		hwblk, ret); - -	return ret; -} - -int platform_pm_runtime_resume(struct device *dev) -{ -	struct platform_device *pdev = to_platform_device(dev); -	struct pdev_archdata *ad = &pdev->archdata; -	int hwblk = ad->hwblk_id; -	int ret = 0; - -	dev_dbg(dev, "platform_pm_runtime_resume() [%d]\n", hwblk); - -	/* ignore off-chip platform devices */ -	if (!hwblk) -		goto out; - -	/* interrupt context not allowed */ -	might_sleep(); - -	/* serialize */ -	mutex_lock(&ad->mutex); - -	/* make sure device is removed from idle list */ -	platform_pm_runtime_not_idle(pdev); - -	/* decrease idle count */ -	if (!test_bit(PDEV_ARCHDATA_FLAG_INIT, &pdev->archdata.flags) && -	    !test_bit(PDEV_ARCHDATA_FLAG_SUSP, &pdev->archdata.flags)) -		hwblk_cnt_dec(hwblk_info, hwblk, HWBLK_CNT_IDLE); - -	/* resume the device if needed */ -	ret = __platform_pm_runtime_resume(pdev); - -	/* the driver has been initialized now, so clear the init flag */ -	clear_bit(PDEV_ARCHDATA_FLAG_INIT, &pdev->archdata.flags); - -	/* at this point the platform device may be: -	 * resumed: ret = 0, flags = 0, clock started -	 * failed: ret < 0, FLAG_SUSP set, clock stopped -	 */ -	mutex_unlock(&ad->mutex); -out: -	dev_dbg(dev, "platform_pm_runtime_resume() [%d] returns %d\n", -		hwblk, ret); - -	return ret; -} - -int platform_pm_runtime_idle(struct device *dev) -{ -	struct platform_device *pdev = to_platform_device(dev); -	int hwblk = pdev->archdata.hwblk_id; -	int ret = 0; - -	dev_dbg(dev, "platform_pm_runtime_idle() [%d]\n", hwblk); - -	/* ignore off-chip platform devices */ -	if (!hwblk) -		goto out; - -	/* interrupt context not allowed, use pm_runtime_put()! */ -	might_sleep(); - -	/* suspend synchronously to disable clocks immediately */ -	ret = pm_runtime_suspend(dev); -out: -	dev_dbg(dev, "platform_pm_runtime_idle() [%d] done!\n", hwblk); -	return ret; -} - -static int platform_bus_notify(struct notifier_block *nb, -			       unsigned long action, void *data) -{ -	struct device *dev = data; -	struct platform_device *pdev = to_platform_device(dev); -	int hwblk = pdev->archdata.hwblk_id; - -	/* ignore off-chip platform devices */ -	if (!hwblk) -		return 0; - -	switch (action) { -	case BUS_NOTIFY_ADD_DEVICE: -		INIT_LIST_HEAD(&pdev->archdata.entry); -		mutex_init(&pdev->archdata.mutex); -		/* platform devices without drivers should be disabled */ -		hwblk_enable(hwblk_info, hwblk); -		hwblk_disable(hwblk_info, hwblk); -		/* make sure driver re-inits itself once */ -		__set_bit(PDEV_ARCHDATA_FLAG_INIT, &pdev->archdata.flags); -		break; -	/* TODO: add BUS_NOTIFY_BIND_DRIVER and increase idle count */ -	case BUS_NOTIFY_BOUND_DRIVER: -		/* keep track of number of devices in use per hwblk */ -		hwblk_cnt_inc(hwblk_info, hwblk, HWBLK_CNT_DEVICES); -		break; -	case BUS_NOTIFY_UNBOUND_DRIVER: -		/* keep track of number of devices in use per hwblk */ -		hwblk_cnt_dec(hwblk_info, hwblk, HWBLK_CNT_DEVICES); -		/* make sure driver re-inits itself once */ -		__set_bit(PDEV_ARCHDATA_FLAG_INIT, &pdev->archdata.flags); -		break; -	case BUS_NOTIFY_DEL_DEVICE: -		break; -	} -	return 0; -} - -static struct notifier_block platform_bus_notifier = { -	.notifier_call = platform_bus_notify -}; - -static int __init sh_pm_runtime_init(void) -{ -	INIT_WORK(&hwblk_work, platform_pm_runtime_work); - -	bus_register_notifier(&platform_bus_type, &platform_bus_notifier); -	return 0; -} -core_initcall(sh_pm_runtime_init); diff --git a/arch/sh/kernel/cpufreq.c b/arch/sh/kernel/cpufreq.c deleted file mode 100644 index 0fffacea6ed..00000000000 --- a/arch/sh/kernel/cpufreq.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * arch/sh/kernel/cpufreq.c - * - * cpufreq driver for the SuperH processors. - * - * Copyright (C) 2002 - 2007 Paul Mundt - * Copyright (C) 2002 M. R. Brown - * - * Clock framework bits from arch/avr32/mach-at32ap/cpufreq.c - * - *   Copyright (C) 2004-2007 Atmel Corporation - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#include <linux/types.h> -#include <linux/cpufreq.h> -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/init.h> -#include <linux/err.h> -#include <linux/cpumask.h> -#include <linux/smp.h> -#include <linux/sched.h>	/* set_cpus_allowed() */ -#include <linux/clk.h> - -static struct clk *cpuclk; - -static unsigned int sh_cpufreq_get(unsigned int cpu) -{ -	return (clk_get_rate(cpuclk) + 500) / 1000; -} - -/* - * Here we notify other drivers of the proposed change and the final change. - */ -static int sh_cpufreq_target(struct cpufreq_policy *policy, -			     unsigned int target_freq, -			     unsigned int relation) -{ -	unsigned int cpu = policy->cpu; -	cpumask_t cpus_allowed; -	struct cpufreq_freqs freqs; -	long freq; - -	if (!cpu_online(cpu)) -		return -ENODEV; - -	cpus_allowed = current->cpus_allowed; -	set_cpus_allowed_ptr(current, cpumask_of(cpu)); - -	BUG_ON(smp_processor_id() != cpu); - -	/* Convert target_freq from kHz to Hz */ -	freq = clk_round_rate(cpuclk, target_freq * 1000); - -	if (freq < (policy->min * 1000) || freq > (policy->max * 1000)) -		return -EINVAL; - -	pr_debug("cpufreq: requested frequency %u Hz\n", target_freq * 1000); - -	freqs.cpu	= cpu; -	freqs.old	= sh_cpufreq_get(cpu); -	freqs.new	= (freq + 500) / 1000; -	freqs.flags	= 0; - -	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); -	set_cpus_allowed_ptr(current, &cpus_allowed); -	clk_set_rate(cpuclk, freq); -	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - -	pr_debug("cpufreq: set frequency %lu Hz\n", freq); - -	return 0; -} - -static int sh_cpufreq_cpu_init(struct cpufreq_policy *policy) -{ -	if (!cpu_online(policy->cpu)) -		return -ENODEV; - -	cpuclk = clk_get(NULL, "cpu_clk"); -	if (IS_ERR(cpuclk)) { -		printk(KERN_ERR "cpufreq: couldn't get CPU#%d clk\n", -		       policy->cpu); -		return PTR_ERR(cpuclk); -	} - -	/* cpuinfo and default policy values */ -	policy->cpuinfo.min_freq = (clk_round_rate(cpuclk, 1) + 500) / 1000; -	policy->cpuinfo.max_freq = (clk_round_rate(cpuclk, ~0UL) + 500) / 1000; -	policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL; - -	policy->cur		= sh_cpufreq_get(policy->cpu); -	policy->min		= policy->cpuinfo.min_freq; -	policy->max		= policy->cpuinfo.max_freq; - -	/* -	 * Catch the cases where the clock framework hasn't been wired up -	 * properly to support scaling. -	 */ -	if (unlikely(policy->min == policy->max)) { -		printk(KERN_ERR "cpufreq: clock framework rate rounding " -		       "not supported on CPU#%d.\n", policy->cpu); - -		clk_put(cpuclk); -		return -EINVAL; -	} - -	printk(KERN_INFO "cpufreq: CPU#%d Frequencies - Minimum %u.%03u MHz, " -	       "Maximum %u.%03u MHz.\n", -	       policy->cpu, policy->min / 1000, policy->min % 1000, -	       policy->max / 1000, policy->max % 1000); - -	return 0; -} - -static int sh_cpufreq_verify(struct cpufreq_policy *policy) -{ -	cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, -				     policy->cpuinfo.max_freq); -	return 0; -} - -static int sh_cpufreq_exit(struct cpufreq_policy *policy) -{ -	clk_put(cpuclk); -	return 0; -} - -static struct cpufreq_driver sh_cpufreq_driver = { -	.owner		= THIS_MODULE, -	.name		= "sh", -	.init		= sh_cpufreq_cpu_init, -	.verify		= sh_cpufreq_verify, -	.target		= sh_cpufreq_target, -	.get		= sh_cpufreq_get, -	.exit		= sh_cpufreq_exit, -}; - -static int __init sh_cpufreq_module_init(void) -{ -	printk(KERN_INFO "cpufreq: SuperH CPU frequency driver.\n"); -	return cpufreq_register_driver(&sh_cpufreq_driver); -} - -static void __exit sh_cpufreq_module_exit(void) -{ -	cpufreq_unregister_driver(&sh_cpufreq_driver); -} - -module_init(sh_cpufreq_module_init); -module_exit(sh_cpufreq_module_exit); - -MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>"); -MODULE_DESCRIPTION("cpufreq driver for SuperH"); -MODULE_LICENSE("GPL"); diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c index 37c97d44457..569e7b171c0 100644 --- a/arch/sh/kernel/crash_dump.c +++ b/arch/sh/kernel/crash_dump.c @@ -9,28 +9,6 @@  #include <linux/io.h>  #include <asm/uaccess.h> -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr = ELFCORE_ADDR_MAX; - -/* - * Note: elfcorehdr_addr is not just limited to vmcore. It is also used by - * is_kdump_kernel() to determine if we are booting after a panic. Hence - * ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. - * - * elfcorehdr= specifies the location of elf core header - * stored by the crashed kernel. - */ -static int __init parse_elfcorehdr(char *arg) -{ -	if (!arg) -		return -EINVAL; - -	elfcorehdr_addr = memparse(arg, &arg); - -	return 0; -} -early_param("elfcorehdr", parse_elfcorehdr); -  /**   * copy_oldmem_page - copy one page from "oldmem"   * @pfn: page frame number to be copied diff --git a/arch/sh/kernel/dma-nommu.c b/arch/sh/kernel/dma-nommu.c index 3c55b87f8b6..5b0bfcda6d0 100644 --- a/arch/sh/kernel/dma-nommu.c +++ b/arch/sh/kernel/dma-nommu.c @@ -63,8 +63,8 @@ static void nommu_sync_sg(struct device *dev, struct scatterlist *sg,  #endif  struct dma_map_ops nommu_dma_ops = { -	.alloc_coherent		= dma_generic_alloc_coherent, -	.free_coherent		= dma_generic_free_coherent, +	.alloc			= dma_generic_alloc_coherent, +	.free			= dma_generic_free_coherent,  	.map_page		= nommu_map_page,  	.map_sg			= nommu_map_sg,  #ifdef CONFIG_DMA_NONCOHERENT diff --git a/arch/sh/kernel/dumpstack.c b/arch/sh/kernel/dumpstack.c index 6f5ad151340..8dfe645bcc4 100644 --- a/arch/sh/kernel/dumpstack.c +++ b/arch/sh/kernel/dumpstack.c @@ -2,13 +2,48 @@   *  Copyright (C) 1991, 1992  Linus Torvalds   *  Copyright (C) 2000, 2001, 2002 Andi Kleen, SuSE Labs   *  Copyright (C) 2009  Matt Fleming + *  Copyright (C) 2002 - 2012  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details.   */  #include <linux/kallsyms.h>  #include <linux/ftrace.h>  #include <linux/debug_locks.h> +#include <linux/kdebug.h> +#include <linux/export.h> +#include <linux/uaccess.h>  #include <asm/unwinder.h>  #include <asm/stacktrace.h> +void dump_mem(const char *str, unsigned long bottom, unsigned long top) +{ +	unsigned long p; +	int i; + +	printk("%s(0x%08lx to 0x%08lx)\n", str, bottom, top); + +	for (p = bottom & ~31; p < top; ) { +		printk("%04lx: ", p & 0xffff); + +		for (i = 0; i < 8; i++, p += 4) { +			unsigned int val; + +			if (p < bottom || p >= top) +				printk("         "); +			else { +				if (__get_user(val, (unsigned int __user *)p)) { +					printk("\n"); +					return; +				} +				printk("%08x ", val); +			} +		} +		printk("\n"); +	} +} +  void printk_address(unsigned long address, int reliable)  {  	printk(" [<%p>] %s%pS\n", (void *) address, @@ -69,19 +104,6 @@ stack_reader_dump(struct task_struct *task, struct pt_regs *regs,  	}  } -static void -print_trace_warning_symbol(void *data, char *msg, unsigned long symbol) -{ -	printk(data); -	print_symbol(msg, symbol); -	printk("\n"); -} - -static void print_trace_warning(void *data, char *msg) -{ -	printk("%s%s\n", (char *)data, msg); -} -  static int print_trace_stack(void *data, char *name)  {  	printk("%s <%s> ", (char *)data, name); @@ -93,13 +115,11 @@ static int print_trace_stack(void *data, char *name)   */  static void print_trace_address(void *data, unsigned long addr, int reliable)  { -	printk(data); +	printk("%s", (char *)data);  	printk_address(addr, reliable);  }  static const struct stacktrace_ops print_trace_ops = { -	.warning = print_trace_warning, -	.warning_symbol = print_trace_warning_symbol,  	.stack = print_trace_stack,  	.address = print_trace_address,  }; @@ -121,3 +141,20 @@ void show_trace(struct task_struct *tsk, unsigned long *sp,  	debug_show_held_locks(tsk);  } + +void show_stack(struct task_struct *tsk, unsigned long *sp) +{ +	unsigned long stack; + +	if (!tsk) +		tsk = current; +	if (tsk == current) +		sp = (unsigned long *)current_stack_pointer; +	else +		sp = (unsigned long *)tsk->thread.sp; + +	stack = (unsigned long)sp; +	dump_mem("Stack: ", stack, THREAD_SIZE + +		 (unsigned long)task_stack_page(tsk)); +	show_trace(tsk, sp, NULL); +} diff --git a/arch/sh/kernel/dwarf.c b/arch/sh/kernel/dwarf.c index 49c09c7d5b7..67a049e75ec 100644 --- a/arch/sh/kernel/dwarf.c +++ b/arch/sh/kernel/dwarf.c @@ -995,29 +995,19 @@ static struct unwinder dwarf_unwinder = {  static void dwarf_unwinder_cleanup(void)  { -	struct rb_node **fde_rb_node = &fde_root.rb_node; -	struct rb_node **cie_rb_node = &cie_root.rb_node; +	struct dwarf_fde *fde, *next_fde; +	struct dwarf_cie *cie, *next_cie;  	/*  	 * Deallocate all the memory allocated for the DWARF unwinder.  	 * Traverse all the FDE/CIE lists and remove and free all the  	 * memory associated with those data structures.  	 */ -	while (*fde_rb_node) { -		struct dwarf_fde *fde; - -		fde = rb_entry(*fde_rb_node, struct dwarf_fde, node); -		rb_erase(*fde_rb_node, &fde_root); +	rbtree_postorder_for_each_entry_safe(fde, next_fde, &fde_root, node)  		kfree(fde); -	} -	while (*cie_rb_node) { -		struct dwarf_cie *cie; - -		cie = rb_entry(*cie_rb_node, struct dwarf_cie, node); -		rb_erase(*cie_rb_node, &cie_root); +	rbtree_postorder_for_each_entry_safe(cie, next_cie, &cie_root, node)  		kfree(cie); -	}  	kmem_cache_destroy(dwarf_reg_cachep);  	kmem_cache_destroy(dwarf_frame_cachep); diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S index 2b15ae60c3a..13047a4facd 100644 --- a/arch/sh/kernel/entry-common.S +++ b/arch/sh/kernel/entry-common.S @@ -108,7 +108,7 @@ need_resched:  	and	#(0xf0>>1), r0		! interrupts off (exception path)?  	cmp/eq	#(0xf0>>1), r0  	bt	noresched -	mov.l	3f, r0 +	mov.l	1f, r0  	jsr	@r0			! call preempt_schedule_irq  	 nop  	bra	need_resched @@ -119,9 +119,7 @@ noresched:  	 nop  	.align 2 -1:	.long	PREEMPT_ACTIVE -2:	.long	schedule -3:	.long	preempt_schedule_irq +1:	.long	preempt_schedule_irq  #endif  ENTRY(resume_userspace) @@ -139,12 +137,13 @@ work_pending:  	! r8: current_thread_info  	! t:  result of "tst	#_TIF_NEED_RESCHED, r0"  	bf/s	work_resched -	 tst	#_TIF_SIGPENDING, r0 +	 tst	#(_TIF_SIGPENDING | _TIF_NOTIFY_RESUME), r0  work_notifysig:  	bt/s	__restore_all  	 mov	r15, r4  	mov	r12, r5		! set arg1(save_r0)  	mov	r0, r6 +	sti  	mov.l	2f, r1  	mov.l	3f, r0  	jmp	@r1 @@ -194,10 +193,10 @@ syscall_trace_entry:  	!			Reload R0-R4 from kernel stack, where the  	!   	    	    	parent may have modified them using  	!   	    	    	ptrace(POKEUSR).  (Note that R0-R2 are -	!   	    	    	used by the system call handler directly -	!   	    	    	from the kernel stack anyway, so don't need -	!   	    	    	to be reloaded here.)  This allows the parent -	!   	    	    	to rewrite system calls and args on the fly. +	!   	    	    	reloaded from the kernel stack by syscall_call +	!   	    	    	below, so don't need to be reloaded here.) +	!   	    	    	This allows the parent to rewrite system calls +	!   	    	    	and args on the fly.  	mov.l	@(OFF_R4,r15), r4   ! arg0  	mov.l	@(OFF_R5,r15), r5  	mov.l	@(OFF_R6,r15), r6 @@ -296,6 +295,19 @@ ret_from_fork:  	 mov	r0, r4  	bra	syscall_exit  	 nop + +	.align	2 +	.globl	ret_from_kernel_thread +ret_from_kernel_thread: +	mov.l	1f, r8 +	jsr	@r8 +	 mov	r0, r4 +	mov.l	@(OFF_R5,r15), r5   ! fn +	jsr	@r5 +	 mov.l	@(OFF_R4,r15), r4   ! arg +	bra	syscall_exit +	 nop +  	.align	2  1:	.long	schedule_tail @@ -345,8 +357,15 @@ syscall_call:  	mov.l	3f, r8		! Load the address of sys_call_table  	add	r8, r3  	mov.l	@r3, r8 +	mov.l	@(OFF_R2,r15), r2 +	mov.l	@(OFF_R1,r15), r1 +	mov.l	@(OFF_R0,r15), r0 +	mov.l	r2, @-r15 +	mov.l	r1, @-r15 +	mov.l	r0, @-r15  	jsr	@r8	    	! jump to specific syscall handler  	 nop +	add	#12, r15  	mov.l	@(OFF_R0,r15), r12		! save r0  	mov.l	r0, @(OFF_R0,r15)		! save the return value  	! diff --git a/arch/sh/kernel/ftrace.c b/arch/sh/kernel/ftrace.c index 30e13196d35..3c74f53db6d 100644 --- a/arch/sh/kernel/ftrace.c +++ b/arch/sh/kernel/ftrace.c @@ -272,11 +272,8 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)  	return ftrace_modify_code(rec->ip, old, new);  } -int __init ftrace_dyn_arch_init(void *data) +int __init ftrace_dyn_arch_init(void)  { -	/* The return code is retured via data */ -	__raw_writel(0, (unsigned long)data); -  	return 0;  }  #endif /* CONFIG_DYNAMIC_FTRACE */ diff --git a/arch/sh/kernel/hw_breakpoint.c b/arch/sh/kernel/hw_breakpoint.c index efae6ab3d54..2197fc58418 100644 --- a/arch/sh/kernel/hw_breakpoint.c +++ b/arch/sh/kernel/hw_breakpoint.c @@ -22,6 +22,7 @@  #include <asm/hw_breakpoint.h>  #include <asm/mmu_context.h>  #include <asm/ptrace.h> +#include <asm/traps.h>  /*   * Stores the breakpoints currently in use on each breakpoint address @@ -51,7 +52,7 @@ int arch_install_hw_breakpoint(struct perf_event *bp)  	int i;  	for (i = 0; i < sh_ubc->num_events; i++) { -		struct perf_event **slot = &__get_cpu_var(bp_per_reg[i]); +		struct perf_event **slot = this_cpu_ptr(&bp_per_reg[i]);  		if (!*slot) {  			*slot = bp; @@ -83,7 +84,7 @@ void arch_uninstall_hw_breakpoint(struct perf_event *bp)  	int i;  	for (i = 0; i < sh_ubc->num_events; i++) { -		struct perf_event **slot = &__get_cpu_var(bp_per_reg[i]); +		struct perf_event **slot = this_cpu_ptr(&bp_per_reg[i]);  		if (*slot == bp) {  			*slot = NULL; diff --git a/arch/sh/kernel/idle.c b/arch/sh/kernel/idle.c index 425d604e3a2..be616ee0cf8 100644 --- a/arch/sh/kernel/idle.c +++ b/arch/sh/kernel/idle.c @@ -16,104 +16,30 @@  #include <linux/thread_info.h>  #include <linux/irqflags.h>  #include <linux/smp.h> +#include <linux/atomic.h>  #include <asm/pgalloc.h> -#include <asm/system.h> -#include <asm/atomic.h>  #include <asm/smp.h> +#include <asm/bl_bit.h> -void (*pm_idle)(void) = NULL; +static void (*sh_idle)(void); -static int hlt_counter; - -static int __init nohlt_setup(char *__unused) -{ -	hlt_counter = 1; -	return 1; -} -__setup("nohlt", nohlt_setup); - -static int __init hlt_setup(char *__unused) -{ -	hlt_counter = 0; -	return 1; -} -__setup("hlt", hlt_setup); - -static inline int hlt_works(void) -{ -	return !hlt_counter; -} - -/* - * On SMP it's slightly faster (but much more power-consuming!) - * to poll the ->work.need_resched flag instead of waiting for the - * cross-CPU IPI to arrive. Use this option with caution. - */ -static void poll_idle(void) +void default_idle(void)  { +	set_bl_bit();  	local_irq_enable(); -	while (!need_resched()) -		cpu_relax(); +	/* Isn't this racy ? */ +	cpu_sleep(); +	clear_bl_bit();  } -void default_idle(void) +void arch_cpu_idle_dead(void)  { -	if (hlt_works()) { -		clear_thread_flag(TIF_POLLING_NRFLAG); -		smp_mb__after_clear_bit(); - -		set_bl_bit(); -		if (!need_resched()) { -			local_irq_enable(); -			cpu_sleep(); -		} else -			local_irq_enable(); - -		set_thread_flag(TIF_POLLING_NRFLAG); -		clear_bl_bit(); -	} else -		poll_idle(); +	play_dead();  } -/* - * The idle thread. There's no useful work to be done, so just try to conserve - * power and have a low exit latency (ie sit in a loop waiting for somebody to - * say that they'd like to reschedule) - */ -void cpu_idle(void) +void arch_cpu_idle(void)  { -	unsigned int cpu = smp_processor_id(); - -	set_thread_flag(TIF_POLLING_NRFLAG); - -	/* endless idle loop with no priority at all */ -	while (1) { -		tick_nohz_stop_sched_tick(1); - -		while (!need_resched()) { -			check_pgt_cache(); -			rmb(); - -			if (cpu_is_offline(cpu)) -				play_dead(); - -			local_irq_disable(); -			/* Don't trace irqs off for idle */ -			stop_critical_timings(); -			pm_idle(); -			/* -			 * Sanity check to ensure that pm_idle() returns -			 * with IRQs enabled -			 */ -			WARN_ON(irqs_disabled()); -			start_critical_timings(); -		} - -		tick_nohz_restart_sched_tick(); -		preempt_enable_no_resched(); -		schedule(); -		preempt_disable(); -	} +	sh_idle();  }  void __init select_idle_routine(void) @@ -121,17 +47,8 @@ void __init select_idle_routine(void)  	/*  	 * If a platform has set its own idle routine, leave it alone.  	 */ -	if (pm_idle) -		return; - -	if (hlt_works()) -		pm_idle = default_idle; -	else -		pm_idle = poll_idle; -} - -static void do_nothing(void *unused) -{ +	if (!sh_idle) +		sh_idle = default_idle;  }  void stop_this_cpu(void *unused) @@ -142,19 +59,3 @@ void stop_this_cpu(void *unused)  	for (;;)  		cpu_sleep();  } - -/* - * cpu_idle_wait - Used to ensure that all the CPUs discard old value of - * pm_idle and update to new pm_idle value. Required while changing pm_idle - * handler on SMP systems. - * - * Caller must have changed pm_idle to the new value before the call. Old - * pm_idle value will not be used by any CPU after the return of this function. - */ -void cpu_idle_wait(void) -{ -	smp_mb(); -	/* kick all the CPUs so that they exit out of pm_idle */ -	smp_call_function(do_nothing, NULL, 1); -} -EXPORT_SYMBOL_GPL(cpu_idle_wait); diff --git a/arch/sh/kernel/init_task.c b/arch/sh/kernel/init_task.c deleted file mode 100644 index 11f2ea556a6..00000000000 --- a/arch/sh/kernel/init_task.c +++ /dev/null @@ -1,30 +0,0 @@ -#include <linux/mm.h> -#include <linux/module.h> -#include <linux/sched.h> -#include <linux/init_task.h> -#include <linux/mqueue.h> -#include <linux/fs.h> -#include <asm/uaccess.h> -#include <asm/pgtable.h> - -static struct signal_struct init_signals = INIT_SIGNALS(init_signals); -static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); -struct pt_regs fake_swapper_regs; -/* - * Initial thread structure. - * - * We need to make sure that this is 8192-byte aligned due to the - * way process stacks are handled. This is done by having a special - * "init_task" linker map entry.. - */ -union thread_union init_thread_union __init_task_data = -	{ INIT_THREAD_INFO(init_task) }; - -/* - * Initial task structure. - * - * All other task structs will be allocated on slabs in fork.c - */ -struct task_struct init_task = INIT_TASK(init_task); - -EXPORT_SYMBOL(init_task); diff --git a/arch/sh/kernel/io_generic.c b/arch/sh/kernel/io_generic.c deleted file mode 100644 index 447d78f666f..00000000000 --- a/arch/sh/kernel/io_generic.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * arch/sh/kernel/io_generic.c - * - * Copyright (C) 2000  Niibe Yutaka - * Copyright (C) 2005 - 2007 Paul Mundt - * - * Generic I/O routine. These can be used where a machine specific version - * is not required. - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#include <linux/module.h> -#include <linux/io.h> -#include <asm/machvec.h> - -#ifdef CONFIG_CPU_SH3 -/* SH3 has a PCMCIA bug that needs a dummy read from area 6 for a - * workaround. */ -/* I'm not sure SH7709 has this kind of bug */ -#define dummy_read()	__raw_readb(0xba000000) -#else -#define dummy_read() -#endif - -unsigned long generic_io_base = 0; - -u8 generic_inb(unsigned long port) -{ -	return __raw_readb(__ioport_map(port, 1)); -} - -u16 generic_inw(unsigned long port) -{ -	return __raw_readw(__ioport_map(port, 2)); -} - -u32 generic_inl(unsigned long port) -{ -	return __raw_readl(__ioport_map(port, 4)); -} - -u8 generic_inb_p(unsigned long port) -{ -	unsigned long v = generic_inb(port); - -	ctrl_delay(); -	return v; -} - -u16 generic_inw_p(unsigned long port) -{ -	unsigned long v = generic_inw(port); - -	ctrl_delay(); -	return v; -} - -u32 generic_inl_p(unsigned long port) -{ -	unsigned long v = generic_inl(port); - -	ctrl_delay(); -	return v; -} - -/* - * insb/w/l all read a series of bytes/words/longs from a fixed port - * address. However as the port address doesn't change we only need to - * convert the port address to real address once. - */ - -void generic_insb(unsigned long port, void *dst, unsigned long count) -{ -	__raw_readsb(__ioport_map(port, 1), dst, count); -	dummy_read(); -} - -void generic_insw(unsigned long port, void *dst, unsigned long count) -{ -	__raw_readsw(__ioport_map(port, 2), dst, count); -	dummy_read(); -} - -void generic_insl(unsigned long port, void *dst, unsigned long count) -{ -	__raw_readsl(__ioport_map(port, 4), dst, count); -	dummy_read(); -} - -void generic_outb(u8 b, unsigned long port) -{ -	__raw_writeb(b, __ioport_map(port, 1)); -} - -void generic_outw(u16 b, unsigned long port) -{ -	__raw_writew(b, __ioport_map(port, 2)); -} - -void generic_outl(u32 b, unsigned long port) -{ -	__raw_writel(b, __ioport_map(port, 4)); -} - -void generic_outb_p(u8 b, unsigned long port) -{ -	generic_outb(b, port); -	ctrl_delay(); -} - -void generic_outw_p(u16 b, unsigned long port) -{ -	generic_outw(b, port); -	ctrl_delay(); -} - -void generic_outl_p(u32 b, unsigned long port) -{ -	generic_outl(b, port); -	ctrl_delay(); -} - -/* - * outsb/w/l all write a series of bytes/words/longs to a fixed port - * address. However as the port address doesn't change we only need to - * convert the port address to real address once. - */ -void generic_outsb(unsigned long port, const void *src, unsigned long count) -{ -	__raw_writesb(__ioport_map(port, 1), src, count); -	dummy_read(); -} - -void generic_outsw(unsigned long port, const void *src, unsigned long count) -{ -	__raw_writesw(__ioport_map(port, 2), src, count); -	dummy_read(); -} - -void generic_outsl(unsigned long port, const void *src, unsigned long count) -{ -	__raw_writesl(__ioport_map(port, 4), src, count); -	dummy_read(); -} - -void __iomem *generic_ioport_map(unsigned long addr, unsigned int size) -{ -#ifdef P1SEG -	if (PXSEG(addr) >= P1SEG) -		return (void __iomem *)addr; -#endif - -	return (void __iomem *)(addr + generic_io_base); -} - -void generic_ioport_unmap(void __iomem *addr) -{ -} - -#ifndef CONFIG_GENERIC_IOMAP -void __iomem *ioport_map(unsigned long port, unsigned int nr) -{ -	void __iomem *ret; - -	ret = __ioport_map_trapped(port, nr); -	if (ret) -		return ret; - -	return __ioport_map(port, nr); -} -EXPORT_SYMBOL(ioport_map); - -void ioport_unmap(void __iomem *addr) -{ -	sh_mv.mv_ioport_unmap(addr); -} -EXPORT_SYMBOL(ioport_unmap); -#endif /* CONFIG_GENERIC_IOMAP */ diff --git a/arch/sh/kernel/io_trapped.c b/arch/sh/kernel/io_trapped.c index 32c385ef101..f8ce36286ce 100644 --- a/arch/sh/kernel/io_trapped.c +++ b/arch/sh/kernel/io_trapped.c @@ -15,7 +15,6 @@  #include <linux/vmalloc.h>  #include <linux/module.h>  #include <linux/init.h> -#include <asm/system.h>  #include <asm/mmu_context.h>  #include <asm/uaccess.h>  #include <asm/io.h> @@ -23,7 +22,7 @@  #define TRAPPED_PAGES_MAX 16 -#ifdef CONFIG_HAS_IOPORT +#ifdef CONFIG_HAS_IOPORT_MAP  LIST_HEAD(trapped_io);  EXPORT_SYMBOL_GPL(trapped_io);  #endif @@ -58,7 +57,7 @@ int register_trapped_io(struct trapped_io *tiop)  	for (k = 0; k < tiop->num_resources; k++) {  		res = tiop->resource + k; -		len += roundup((res->end - res->start) + 1, PAGE_SIZE); +		len += roundup(resource_size(res), PAGE_SIZE);  		flags |= res->flags;  	} @@ -85,13 +84,13 @@ int register_trapped_io(struct trapped_io *tiop)  		       (unsigned long)(tiop->virt_base + len),  		       res->flags & IORESOURCE_IO ? "io" : "mmio",  		       (unsigned long)res->start); -		len += roundup((res->end - res->start) + 1, PAGE_SIZE); +		len += roundup(resource_size(res), PAGE_SIZE);  	}  	tiop->magic = IO_TRAPPED_MAGIC;  	INIT_LIST_HEAD(&tiop->list);  	spin_lock_irq(&trapped_lock); -#ifdef CONFIG_HAS_IOPORT +#ifdef CONFIG_HAS_IOPORT_MAP  	if (flags & IORESOURCE_IO)  		list_add(&tiop->list, &trapped_io);  #endif @@ -128,7 +127,7 @@ void __iomem *match_trapped_io_handler(struct list_head *list,  				return tiop->virt_base + voffs;  			} -			len = (res->end - res->start) + 1; +			len = resource_size(res);  			voffs += roundup(len, PAGE_SIZE);  		}  	} @@ -173,7 +172,7 @@ static unsigned long lookup_address(struct trapped_io *tiop,  	for (k = 0; k < tiop->num_resources; k++) {  		res = tiop->resource + k; -		len = roundup((res->end - res->start) + 1, PAGE_SIZE); +		len = roundup(resource_size(res), PAGE_SIZE);  		if (address < (vaddr + len))  			return res->start + (address - vaddr);  		vaddr += len; diff --git a/arch/sh/kernel/iomap.c b/arch/sh/kernel/iomap.c new file mode 100644 index 00000000000..2e8e8b9b9ce --- /dev/null +++ b/arch/sh/kernel/iomap.c @@ -0,0 +1,165 @@ +/* + * arch/sh/kernel/iomap.c + * + * Copyright (C) 2000  Niibe Yutaka + * Copyright (C) 2005 - 2007 Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/module.h> +#include <linux/io.h> + +unsigned int ioread8(void __iomem *addr) +{ +	return readb(addr); +} +EXPORT_SYMBOL(ioread8); + +unsigned int ioread16(void __iomem *addr) +{ +	return readw(addr); +} +EXPORT_SYMBOL(ioread16); + +unsigned int ioread16be(void __iomem *addr) +{ +	return be16_to_cpu(__raw_readw(addr)); +} +EXPORT_SYMBOL(ioread16be); + +unsigned int ioread32(void __iomem *addr) +{ +	return readl(addr); +} +EXPORT_SYMBOL(ioread32); + +unsigned int ioread32be(void __iomem *addr) +{ +	return be32_to_cpu(__raw_readl(addr)); +} +EXPORT_SYMBOL(ioread32be); + +void iowrite8(u8 val, void __iomem *addr) +{ +	writeb(val, addr); +} +EXPORT_SYMBOL(iowrite8); + +void iowrite16(u16 val, void __iomem *addr) +{ +	writew(val, addr); +} +EXPORT_SYMBOL(iowrite16); + +void iowrite16be(u16 val, void __iomem *addr) +{ +	__raw_writew(cpu_to_be16(val), addr); +} +EXPORT_SYMBOL(iowrite16be); + +void iowrite32(u32 val, void __iomem *addr) +{ +	writel(val, addr); +} +EXPORT_SYMBOL(iowrite32); + +void iowrite32be(u32 val, void __iomem *addr) +{ +	__raw_writel(cpu_to_be32(val), addr); +} +EXPORT_SYMBOL(iowrite32be); + +/* + * These are the "repeat MMIO read/write" functions. + * Note the "__raw" accesses, since we don't want to + * convert to CPU byte order. We write in "IO byte + * order" (we also don't have IO barriers). + */ +static inline void mmio_insb(void __iomem *addr, u8 *dst, int count) +{ +	while (--count >= 0) { +		u8 data = __raw_readb(addr); +		*dst = data; +		dst++; +	} +} + +static inline void mmio_insw(void __iomem *addr, u16 *dst, int count) +{ +	while (--count >= 0) { +		u16 data = __raw_readw(addr); +		*dst = data; +		dst++; +	} +} + +static inline void mmio_insl(void __iomem *addr, u32 *dst, int count) +{ +	while (--count >= 0) { +		u32 data = __raw_readl(addr); +		*dst = data; +		dst++; +	} +} + +static inline void mmio_outsb(void __iomem *addr, const u8 *src, int count) +{ +	while (--count >= 0) { +		__raw_writeb(*src, addr); +		src++; +	} +} + +static inline void mmio_outsw(void __iomem *addr, const u16 *src, int count) +{ +	while (--count >= 0) { +		__raw_writew(*src, addr); +		src++; +	} +} + +static inline void mmio_outsl(void __iomem *addr, const u32 *src, int count) +{ +	while (--count >= 0) { +		__raw_writel(*src, addr); +		src++; +	} +} + +void ioread8_rep(void __iomem *addr, void *dst, unsigned long count) +{ +	mmio_insb(addr, dst, count); +} +EXPORT_SYMBOL(ioread8_rep); + +void ioread16_rep(void __iomem *addr, void *dst, unsigned long count) +{ +	mmio_insw(addr, dst, count); +} +EXPORT_SYMBOL(ioread16_rep); + +void ioread32_rep(void __iomem *addr, void *dst, unsigned long count) +{ +	mmio_insl(addr, dst, count); +} +EXPORT_SYMBOL(ioread32_rep); + +void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count) +{ +	mmio_outsb(addr, src, count); +} +EXPORT_SYMBOL(iowrite8_rep); + +void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count) +{ +	mmio_outsw(addr, src, count); +} +EXPORT_SYMBOL(iowrite16_rep); + +void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count) +{ +	mmio_outsl(addr, src, count); +} +EXPORT_SYMBOL(iowrite32_rep); diff --git a/arch/sh/kernel/ioport.c b/arch/sh/kernel/ioport.c new file mode 100644 index 00000000000..cca14ba84a3 --- /dev/null +++ b/arch/sh/kernel/ioport.c @@ -0,0 +1,43 @@ +/* + * arch/sh/kernel/ioport.c + * + * Copyright (C) 2000  Niibe Yutaka + * Copyright (C) 2005 - 2007 Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/module.h> +#include <linux/io.h> + +unsigned long sh_io_port_base __read_mostly = -1; +EXPORT_SYMBOL(sh_io_port_base); + +void __iomem *__ioport_map(unsigned long addr, unsigned int size) +{ +	if (sh_mv.mv_ioport_map) +		return sh_mv.mv_ioport_map(addr, size); + +	return (void __iomem *)(addr + sh_io_port_base); +} +EXPORT_SYMBOL(__ioport_map); + +void __iomem *ioport_map(unsigned long port, unsigned int nr) +{ +	void __iomem *ret; + +	ret = __ioport_map_trapped(port, nr); +	if (ret) +		return ret; + +	return __ioport_map(port, nr); +} +EXPORT_SYMBOL(ioport_map); + +void ioport_unmap(void __iomem *addr) +{ +	if (sh_mv.mv_ioport_unmap) +		sh_mv.mv_ioport_unmap(addr); +} +EXPORT_SYMBOL(ioport_unmap); diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index 68ecbe6c881..65a1ecd77f9 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c @@ -13,6 +13,7 @@  #include <linux/seq_file.h>  #include <linux/ftrace.h>  #include <linux/delay.h> +#include <linux/ratelimit.h>  #include <asm/processor.h>  #include <asm/machvec.h>  #include <asm/uaccess.h> @@ -34,9 +35,9 @@ void ack_bad_irq(unsigned int irq)  #if defined(CONFIG_PROC_FS)  /* - * /proc/interrupts printing: + * /proc/interrupts printing for arch specific interrupts   */ -static int show_other_interrupts(struct seq_file *p, int prec) +int arch_show_interrupts(struct seq_file *p, int prec)  {  	int j; @@ -49,63 +50,6 @@ static int show_other_interrupts(struct seq_file *p, int prec)  	return 0;  } - -int show_interrupts(struct seq_file *p, void *v) -{ -	unsigned long flags, any_count = 0; -	int i = *(loff_t *)v, j, prec; -	struct irqaction *action; -	struct irq_desc *desc; -	struct irq_data *data; -	struct irq_chip *chip; - -	if (i > nr_irqs) -		return 0; - -	for (prec = 3, j = 1000; prec < 10 && j <= nr_irqs; ++prec) -		j *= 10; - -	if (i == nr_irqs) -		return show_other_interrupts(p, prec); - -	if (i == 0) { -		seq_printf(p, "%*s", prec + 8, ""); -		for_each_online_cpu(j) -			seq_printf(p, "CPU%-8d", j); -		seq_putc(p, '\n'); -	} - -	desc = irq_to_desc(i); -	if (!desc) -		return 0; - -	data = irq_get_irq_data(i); -	chip = irq_data_get_irq_chip(data); - -	raw_spin_lock_irqsave(&desc->lock, flags); -	for_each_online_cpu(j) -		any_count |= kstat_irqs_cpu(i, j); -	action = desc->action; -	if (!action && !any_count) -		goto out; - -	seq_printf(p, "%*d: ", prec, i); -	for_each_online_cpu(j) -		seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); -	seq_printf(p, " %14s", chip->name); -	seq_printf(p, "-%-8s", desc->name); - -	if (action) { -		seq_printf(p, "  %s", action->name); -		while ((action = action->next) != NULL) -			seq_printf(p, ", %s", action->name); -	} - -	seq_putc(p, '\n'); -out: -	raw_spin_unlock_irqrestore(&desc->lock, flags); -	return 0; -}  #endif  #ifdef CONFIG_IRQSTACKS @@ -205,47 +149,32 @@ void irq_ctx_exit(int cpu)  	hardirq_ctx[cpu] = NULL;  } -asmlinkage void do_softirq(void) +void do_softirq_own_stack(void)  { -	unsigned long flags;  	struct thread_info *curctx;  	union irq_ctx *irqctx;  	u32 *isp; -	if (in_interrupt()) -		return; - -	local_irq_save(flags); - -	if (local_softirq_pending()) { -		curctx = current_thread_info(); -		irqctx = softirq_ctx[smp_processor_id()]; -		irqctx->tinfo.task = curctx->task; -		irqctx->tinfo.previous_sp = current_stack_pointer; - -		/* build the stack frame on the softirq stack */ -		isp = (u32 *)((char *)irqctx + sizeof(*irqctx)); - -		__asm__ __volatile__ ( -			"mov	r15, r9		\n" -			"jsr	@%0		\n" -			/* switch to the softirq stack */ -			" mov	%1, r15		\n" -			/* restore the thread stack */ -			"mov	r9, r15		\n" -			: /* no outputs */ -			: "r" (__do_softirq), "r" (isp) -			: "memory", "r0", "r1", "r2", "r3", "r4", -			  "r5", "r6", "r7", "r8", "r9", "r15", "t", "pr" -		); - -		/* -		 * Shouldnt happen, we returned above if in_interrupt(): -		 */ -		WARN_ON_ONCE(softirq_count()); -	} - -	local_irq_restore(flags); +	curctx = current_thread_info(); +	irqctx = softirq_ctx[smp_processor_id()]; +	irqctx->tinfo.task = curctx->task; +	irqctx->tinfo.previous_sp = current_stack_pointer; + +	/* build the stack frame on the softirq stack */ +	isp = (u32 *)((char *)irqctx + sizeof(*irqctx)); + +	__asm__ __volatile__ ( +		"mov	r15, r9		\n" +		"jsr	@%0		\n" +		/* switch to the softirq stack */ +		" mov	%1, r15		\n" +		/* restore the thread stack */ +		"mov	r9, r15		\n" +		: /* no outputs */ +		: "r" (__do_softirq), "r" (isp) +		: "memory", "r0", "r1", "r2", "r3", "r4", +		  "r5", "r6", "r7", "r8", "r9", "r15", "t", "pr" +	);  }  #else  static inline void handle_one_irq(unsigned int irq) @@ -287,28 +216,7 @@ void __init init_IRQ(void)  	irq_ctx_init(smp_processor_id());  } -#ifdef CONFIG_SPARSE_IRQ -int __init arch_probe_nr_irqs(void) -{ -	nr_irqs = sh_mv.mv_nr_irqs; -	return NR_IRQS_LEGACY; -} -#endif -  #ifdef CONFIG_HOTPLUG_CPU -static void route_irq(struct irq_data *data, unsigned int irq, unsigned int cpu) -{ -	struct irq_desc *desc = irq_to_desc(irq); -	struct irq_chip *chip = irq_data_get_irq_chip(data); - -	printk(KERN_INFO "IRQ%u: moving from cpu%u to cpu%u\n", -	       irq, data->node, cpu); - -	raw_spin_lock_irq(&desc->lock); -	chip->irq_set_affinity(data, cpumask_of(cpu), false); -	raw_spin_unlock_irq(&desc->lock); -} -  /*   * The CPU has been marked offline.  Migrate IRQs off this CPU.  If   * the affinity settings do not allow other CPUs, force them onto any @@ -325,16 +233,12 @@ void migrate_irqs(void)  			unsigned int newcpu = cpumask_any_and(data->affinity,  							      cpu_online_mask);  			if (newcpu >= nr_cpu_ids) { -				if (printk_ratelimit()) -					printk(KERN_INFO "IRQ%u no longer affine to CPU%u\n", -					       irq, cpu); +				pr_info_ratelimited("IRQ%u no longer affine to CPU%u\n", +						    irq, cpu);  				cpumask_setall(data->affinity); -				newcpu = cpumask_any_and(data->affinity, -							 cpu_online_mask);  			} - -			route_irq(data, irq, newcpu); +			irq_set_affinity(irq, data->affinity);  		}  	}  } diff --git a/arch/sh/kernel/kgdb.c b/arch/sh/kernel/kgdb.c index efb6d398dec..adad46e41a1 100644 --- a/arch/sh/kernel/kgdb.c +++ b/arch/sh/kernel/kgdb.c @@ -1,7 +1,7 @@  /*   * SuperH KGDB support   * - * Copyright (C) 2008 - 2009  Paul Mundt + * Copyright (C) 2008 - 2012  Paul Mundt   *   * Single stepping taken from the old stub by Henry Bell and Jeremy Siegel.   * @@ -13,7 +13,9 @@  #include <linux/kdebug.h>  #include <linux/irq.h>  #include <linux/io.h> +#include <linux/sched.h>  #include <asm/cacheflush.h> +#include <asm/traps.h>  /* Macros for single step instruction identification */  #define OPCODE_BT(op)		(((op) & 0xff00) == 0x8900) @@ -163,42 +165,89 @@ static void undo_single_step(struct pt_regs *linux_regs)  	stepped_opcode = 0;  } -void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) -{ -	int i; +struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = { +	{ "r0",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[0]) }, +	{ "r1",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[1]) }, +	{ "r2",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[2]) }, +	{ "r3",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[3]) }, +	{ "r4",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[4]) }, +	{ "r5",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[5]) }, +	{ "r6",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[6]) }, +	{ "r7",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[7]) }, +	{ "r8",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[8]) }, +	{ "r9",		GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[9]) }, +	{ "r10",	GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[10]) }, +	{ "r11",	GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[11]) }, +	{ "r12",	GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[12]) }, +	{ "r13",	GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[13]) }, +	{ "r14",	GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[14]) }, +	{ "r15",	GDB_SIZEOF_REG, offsetof(struct pt_regs, regs[15]) }, +	{ "pc",		GDB_SIZEOF_REG, offsetof(struct pt_regs, pc) }, +	{ "pr",		GDB_SIZEOF_REG, offsetof(struct pt_regs, pr) }, +	{ "sr",		GDB_SIZEOF_REG, offsetof(struct pt_regs, sr) }, +	{ "gbr",	GDB_SIZEOF_REG, offsetof(struct pt_regs, gbr) }, +	{ "mach",	GDB_SIZEOF_REG, offsetof(struct pt_regs, mach) }, +	{ "macl",	GDB_SIZEOF_REG, offsetof(struct pt_regs, macl) }, +	{ "vbr",	GDB_SIZEOF_REG, -1 }, +}; -	for (i = 0; i < 16; i++) -		gdb_regs[GDB_R0 + i] = regs->regs[i]; +int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) +{ +	if (regno < 0 || regno >= DBG_MAX_REG_NUM) +		return -EINVAL; -	gdb_regs[GDB_PC] = regs->pc; -	gdb_regs[GDB_PR] = regs->pr; -	gdb_regs[GDB_SR] = regs->sr; -	gdb_regs[GDB_GBR] = regs->gbr; -	gdb_regs[GDB_MACH] = regs->mach; -	gdb_regs[GDB_MACL] = regs->macl; +	if (dbg_reg_def[regno].offset != -1) +		memcpy((void *)regs + dbg_reg_def[regno].offset, mem, +		       dbg_reg_def[regno].size); -	__asm__ __volatile__ ("stc vbr, %0" : "=r" (gdb_regs[GDB_VBR])); +	return 0;  } -void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) +char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)  { -	int i; +	if (regno >= DBG_MAX_REG_NUM || regno < 0) +		return NULL; -	for (i = 0; i < 16; i++) -		regs->regs[GDB_R0 + i] = gdb_regs[GDB_R0 + i]; +	if (dbg_reg_def[regno].size != -1) +		memcpy(mem, (void *)regs + dbg_reg_def[regno].offset, +		       dbg_reg_def[regno].size); + +	switch (regno) { +	case GDB_VBR: +		__asm__ __volatile__ ("stc vbr, %0" : "=r" (mem)); +		break; +	} -	regs->pc = gdb_regs[GDB_PC]; -	regs->pr = gdb_regs[GDB_PR]; -	regs->sr = gdb_regs[GDB_SR]; -	regs->gbr = gdb_regs[GDB_GBR]; -	regs->mach = gdb_regs[GDB_MACH]; -	regs->macl = gdb_regs[GDB_MACL]; +	return dbg_reg_def[regno].name;  }  void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p)  { +	struct pt_regs *thread_regs = task_pt_regs(p); +	int reg; + +	/* Initialize to zero */ +	for (reg = 0; reg < DBG_MAX_REG_NUM; reg++) +		gdb_regs[reg] = 0; + +	/* +	 * Copy out GP regs 8 to 14. +	 * +	 * switch_to() relies on SR.RB toggling, so regs 0->7 are banked +	 * and need privileged instructions to get to. The r15 value we +	 * fetch from the thread info directly. +	 */ +	for (reg = GDB_R8; reg < GDB_R15; reg++) +		gdb_regs[reg] = thread_regs->regs[reg]; +  	gdb_regs[GDB_R15] = p->thread.sp;  	gdb_regs[GDB_PC] = p->thread.pc; + +	/* +	 * Additional registers we have context for +	 */ +	gdb_regs[GDB_PR] = thread_regs->pr; +	gdb_regs[GDB_GBR] = thread_regs->gbr;  }  int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, @@ -263,6 +312,18 @@ BUILD_TRAP_HANDLER(singlestep)  	local_irq_restore(flags);  } +static void kgdb_call_nmi_hook(void *ignored) +{ +	kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs()); +} + +void kgdb_roundup_cpus(unsigned long flags) +{ +	local_irq_enable(); +	smp_call_function(kgdb_call_nmi_hook, NULL, 0); +	local_irq_disable(); +} +  static int __kgdb_notify(struct die_args *args, unsigned long cmd)  {  	int ret; diff --git a/arch/sh/kernel/kprobes.c b/arch/sh/kernel/kprobes.c index 1208b09e95c..83acbf3f6de 100644 --- a/arch/sh/kernel/kprobes.c +++ b/arch/sh/kernel/kprobes.c @@ -102,7 +102,7 @@ int __kprobes kprobe_handle_illslot(unsigned long pc)  void __kprobes arch_remove_kprobe(struct kprobe *p)  { -	struct kprobe *saved = &__get_cpu_var(saved_next_opcode); +	struct kprobe *saved = this_cpu_ptr(&saved_next_opcode);  	if (saved->addr) {  		arch_disarm_kprobe(p); @@ -111,7 +111,7 @@ void __kprobes arch_remove_kprobe(struct kprobe *p)  		saved->addr = NULL;  		saved->opcode = 0; -		saved = &__get_cpu_var(saved_next_opcode2); +		saved = this_cpu_ptr(&saved_next_opcode2);  		if (saved->addr) {  			arch_disarm_kprobe(saved); @@ -129,14 +129,14 @@ static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb)  static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb)  { -	__get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp; +	__this_cpu_write(current_kprobe, kcb->prev_kprobe.kp);  	kcb->kprobe_status = kcb->prev_kprobe.status;  }  static void __kprobes set_current_kprobe(struct kprobe *p, struct pt_regs *regs,  					 struct kprobe_ctlblk *kcb)  { -	__get_cpu_var(current_kprobe) = p; +	__this_cpu_write(current_kprobe, p);  }  /* @@ -146,15 +146,15 @@ static void __kprobes set_current_kprobe(struct kprobe *p, struct pt_regs *regs,   */  static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)  { -	__get_cpu_var(saved_current_opcode).addr = (kprobe_opcode_t *)regs->pc; +	__this_cpu_write(saved_current_opcode.addr, (kprobe_opcode_t *)regs->pc);  	if (p != NULL) {  		struct kprobe *op1, *op2;  		arch_disarm_kprobe(p); -		op1 = &__get_cpu_var(saved_next_opcode); -		op2 = &__get_cpu_var(saved_next_opcode2); +		op1 = this_cpu_ptr(&saved_next_opcode); +		op2 = this_cpu_ptr(&saved_next_opcode2);  		if (OPCODE_JSR(p->opcode) || OPCODE_JMP(p->opcode)) {  			unsigned int reg_nr = ((p->opcode >> 8) & 0x000F); @@ -249,7 +249,7 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)  			kcb->kprobe_status = KPROBE_REENTER;  			return 1;  		} else { -			p = __get_cpu_var(current_kprobe); +			p = __this_cpu_read(current_kprobe);  			if (p->break_handler && p->break_handler(p, regs)) {  				goto ss_probe;  			} @@ -310,7 +310,7 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)  {  	struct kretprobe_instance *ri = NULL;  	struct hlist_head *head, empty_rp; -	struct hlist_node *node, *tmp; +	struct hlist_node *tmp;  	unsigned long flags, orig_ret_address = 0;  	unsigned long trampoline_address = (unsigned long)&kretprobe_trampoline; @@ -330,15 +330,15 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)  	 *       real return address, and all the rest will point to  	 *       kretprobe_trampoline  	 */ -	hlist_for_each_entry_safe(ri, node, tmp, head, hlist) { +	hlist_for_each_entry_safe(ri, tmp, head, hlist) {  		if (ri->task != current)  			/* another task is sharing our hash bucket */  			continue;  		if (ri->rp && ri->rp->handler) { -			__get_cpu_var(current_kprobe) = &ri->rp->kp; +			__this_cpu_write(current_kprobe, &ri->rp->kp);  			ri->rp->handler(ri, regs); -			__get_cpu_var(current_kprobe) = NULL; +			__this_cpu_write(current_kprobe, NULL);  		}  		orig_ret_address = (unsigned long)ri->ret_addr; @@ -360,7 +360,7 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)  	preempt_enable_no_resched(); -	hlist_for_each_entry_safe(ri, node, tmp, &empty_rp, hlist) { +	hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {  		hlist_del(&ri->hlist);  		kfree(ri);  	} @@ -383,19 +383,19 @@ static int __kprobes post_kprobe_handler(struct pt_regs *regs)  		cur->post_handler(cur, regs, 0);  	} -	p = &__get_cpu_var(saved_next_opcode); +	p = this_cpu_ptr(&saved_next_opcode);  	if (p->addr) {  		arch_disarm_kprobe(p);  		p->addr = NULL;  		p->opcode = 0; -		addr = __get_cpu_var(saved_current_opcode).addr; -		__get_cpu_var(saved_current_opcode).addr = NULL; +		addr = __this_cpu_read(saved_current_opcode.addr); +		__this_cpu_write(saved_current_opcode.addr, NULL);  		p = get_kprobe(addr);  		arch_arm_kprobe(p); -		p = &__get_cpu_var(saved_next_opcode2); +		p = this_cpu_ptr(&saved_next_opcode2);  		if (p->addr) {  			arch_disarm_kprobe(p);  			p->addr = NULL; @@ -511,7 +511,7 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,  				if (kprobe_handler(args->regs)) {  					ret = NOTIFY_STOP;  				} else { -					p = __get_cpu_var(current_kprobe); +					p = __this_cpu_read(current_kprobe);  					if (p->break_handler &&  					    p->break_handler(p, args->regs))  						ret = NOTIFY_STOP; diff --git a/arch/sh/kernel/localtimer.c b/arch/sh/kernel/localtimer.c index 8bfc6dfa8b9..b880a7e2ace 100644 --- a/arch/sh/kernel/localtimer.c +++ b/arch/sh/kernel/localtimer.c @@ -32,7 +32,7 @@ static DEFINE_PER_CPU(struct clock_event_device, local_clockevent);   */  void local_timer_interrupt(void)  { -	struct clock_event_device *clk = &__get_cpu_var(local_clockevent); +	struct clock_event_device *clk = this_cpu_ptr(&local_clockevent);  	irq_enter();  	clk->event_handler(clk); diff --git a/arch/sh/kernel/machine_kexec.c b/arch/sh/kernel/machine_kexec.c index e2a3af31ff9..9fea49f6e66 100644 --- a/arch/sh/kernel/machine_kexec.c +++ b/arch/sh/kernel/machine_kexec.c @@ -157,9 +157,6 @@ void __init reserve_crashkernel(void)  	unsigned long long crash_size, crash_base;  	int ret; -	/* this is necessary because of memblock_phys_mem_size() */ -	memblock_analyze(); -  	ret = parse_crashkernel(boot_command_line, memblock_phys_mem_size(),  			&crash_size, &crash_base);  	if (ret == 0 && crash_size > 0) { @@ -170,7 +167,7 @@ void __init reserve_crashkernel(void)  	if (crashk_res.end == crashk_res.start)  		goto disable; -	crash_size = PAGE_ALIGN(crashk_res.end - crashk_res.start + 1); +	crash_size = PAGE_ALIGN(resource_size(&crashk_res));  	if (!crashk_res.start) {  		unsigned long max = memblock_end_of_DRAM() - memory_limit;  		crashk_res.start = __memblock_alloc_base(crash_size, PAGE_SIZE, max); diff --git a/arch/sh/kernel/machvec.c b/arch/sh/kernel/machvec.c index 9f9bb63616a..ec05f491c34 100644 --- a/arch/sh/kernel/machvec.c +++ b/arch/sh/kernel/machvec.c @@ -118,32 +118,7 @@ void __init sh_mv_setup(void)  		sh_mv.mv_##elem = generic_##elem; \  } while (0) -#ifdef CONFIG_HAS_IOPORT - -#ifdef P2SEG -	__set_io_port_base(P2SEG); -#else -	__set_io_port_base(0); -#endif - -	mv_set(inb);	mv_set(inw);	mv_set(inl); -	mv_set(outb);	mv_set(outw);	mv_set(outl); - -	mv_set(inb_p);	mv_set(inw_p);	mv_set(inl_p); -	mv_set(outb_p);	mv_set(outw_p);	mv_set(outl_p); - -	mv_set(insb);	mv_set(insw);	mv_set(insl); -	mv_set(outsb);	mv_set(outsw);	mv_set(outsl); - -	mv_set(ioport_map); -	mv_set(ioport_unmap); - -#endif -  	mv_set(irq_demux);  	mv_set(mode_pins);  	mv_set(mem_init); - -	if (!sh_mv.mv_nr_irqs) -		sh_mv.mv_nr_irqs = NR_IRQS;  } diff --git a/arch/sh/kernel/module.c b/arch/sh/kernel/module.c index ae0be697a89..1b525dedd29 100644 --- a/arch/sh/kernel/module.c +++ b/arch/sh/kernel/module.c @@ -34,30 +34,6 @@  #include <asm/unaligned.h>  #include <asm/dwarf.h> -void *module_alloc(unsigned long size) -{ -	if (size == 0) -		return NULL; - -	return vmalloc_exec(size); -} - - -/* Free memory returned from module_alloc */ -void module_free(struct module *mod, void *module_region) -{ -	vfree(module_region); -} - -/* We don't need anything special. */ -int module_frob_arch_sections(Elf_Ehdr *hdr, -			      Elf_Shdr *sechdrs, -			      char *secstrings, -			      struct module *mod) -{ -	return 0; -} -  int apply_relocate_add(Elf32_Shdr *sechdrs,  		   const char *strtab,  		   unsigned int symindex, @@ -93,6 +69,8 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,  #endif  		switch (ELF32_R_TYPE(rel[i].r_info)) { +		case R_SH_NONE: +			break;  		case R_SH_DIR32:  			value = get_unaligned(location);  			value += relocation; @@ -131,17 +109,6 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,  	return 0;  } -int apply_relocate(Elf32_Shdr *sechdrs, -		       const char *strtab, -		       unsigned int symindex, -		       unsigned int relsec, -		       struct module *me) -{ -	printk(KERN_ERR "module %s: REL RELOCATION unsupported\n", -	       me->name); -	return -ENOEXEC; -} -  int module_finalize(const Elf_Ehdr *hdr,  		    const Elf_Shdr *sechdrs,  		    struct module *me) diff --git a/arch/sh/kernel/perf_callchain.c b/arch/sh/kernel/perf_callchain.c index d5ca1ef50fa..cc80b614b5f 100644 --- a/arch/sh/kernel/perf_callchain.c +++ b/arch/sh/kernel/perf_callchain.c @@ -14,16 +14,6 @@  #include <asm/unwinder.h>  #include <asm/ptrace.h> - -static void callchain_warning(void *data, char *msg) -{ -} - -static void -callchain_warning_symbol(void *data, char *msg, unsigned long symbol) -{ -} -  static int callchain_stack(void *data, char *name)  {  	return 0; @@ -38,8 +28,6 @@ static void callchain_address(void *data, unsigned long addr, int reliable)  }  static const struct stacktrace_ops callchain_ops = { -	.warning	= callchain_warning, -	.warning_symbol	= callchain_warning_symbol,  	.stack		= callchain_stack,  	.address	= callchain_address,  }; diff --git a/arch/sh/kernel/perf_event.c b/arch/sh/kernel/perf_event.c index 5a4b3343565..02331672b6d 100644 --- a/arch/sh/kernel/perf_event.c +++ b/arch/sh/kernel/perf_event.c @@ -25,6 +25,7 @@  #include <linux/io.h>  #include <linux/irq.h>  #include <linux/perf_event.h> +#include <linux/export.h>  #include <asm/processor.h>  struct cpu_hw_events { @@ -226,7 +227,7 @@ again:  static void sh_pmu_stop(struct perf_event *event, int flags)  { -	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);  	struct hw_perf_event *hwc = &event->hw;  	int idx = hwc->idx; @@ -244,7 +245,7 @@ static void sh_pmu_stop(struct perf_event *event, int flags)  static void sh_pmu_start(struct perf_event *event, int flags)  { -	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);  	struct hw_perf_event *hwc = &event->hw;  	int idx = hwc->idx; @@ -261,7 +262,7 @@ static void sh_pmu_start(struct perf_event *event, int flags)  static void sh_pmu_del(struct perf_event *event, int flags)  { -	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);  	sh_pmu_stop(event, PERF_EF_UPDATE);  	__clear_bit(event->hw.idx, cpuc->used_mask); @@ -271,7 +272,7 @@ static void sh_pmu_del(struct perf_event *event, int flags)  static int sh_pmu_add(struct perf_event *event, int flags)  { -	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);  	struct hw_perf_event *hwc = &event->hw;  	int idx = hwc->idx;  	int ret = -EAGAIN; @@ -309,6 +310,10 @@ static int sh_pmu_event_init(struct perf_event *event)  {  	int err; +	/* does not support taken branch sampling */ +	if (has_branch_stack(event)) +		return -EOPNOTSUPP; +  	switch (event->attr.type) {  	case PERF_TYPE_RAW:  	case PERF_TYPE_HW_CACHE: @@ -362,7 +367,7 @@ static void sh_pmu_setup(int cpu)  	memset(cpuhw, 0, sizeof(struct cpu_hw_events));  } -static int __cpuinit +static int  sh_pmu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)  {  	unsigned int cpu = (long)hcpu; @@ -379,7 +384,7 @@ sh_pmu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)  	return NOTIFY_OK;  } -int __cpuinit register_sh_pmu(struct sh_pmu *_pmu) +int register_sh_pmu(struct sh_pmu *_pmu)  {  	if (sh_pmu)  		return -EBUSY; @@ -389,7 +394,7 @@ int __cpuinit register_sh_pmu(struct sh_pmu *_pmu)  	WARN_ON(_pmu->num_events > MAX_HWEVENTS); -	perf_pmu_register(&pmu); +	perf_pmu_register(&pmu, "cpu", PERF_TYPE_RAW);  	perf_cpu_notifier(sh_pmu_notifier);  	return 0;  } diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c index dcb126dc76f..53bc6c4c84e 100644 --- a/arch/sh/kernel/process.c +++ b/arch/sh/kernel/process.c @@ -2,12 +2,27 @@  #include <linux/kernel.h>  #include <linux/slab.h>  #include <linux/sched.h> +#include <linux/export.h> +#include <linux/stackprotector.h> +#include <asm/fpu.h>  struct kmem_cache *task_xstate_cachep = NULL;  unsigned int xstate_size; +#ifdef CONFIG_CC_STACKPROTECTOR +unsigned long __stack_chk_guard __read_mostly; +EXPORT_SYMBOL(__stack_chk_guard); +#endif + +/* + * this gets called so that we can store lazy state into memory and copy the + * current task into the new thread. + */  int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)  { +#ifdef CONFIG_SUPERH32 +	unlazy_fpu(src, task_pt_regs(src)); +#endif  	*dst = *src;  	if (src->thread.xstate) { @@ -29,50 +44,10 @@ void free_thread_xstate(struct task_struct *tsk)  	}  } -#if THREAD_SHIFT < PAGE_SHIFT -static struct kmem_cache *thread_info_cache; - -struct thread_info *alloc_thread_info(struct task_struct *tsk) -{ -	struct thread_info *ti; - -	ti = kmem_cache_alloc(thread_info_cache, GFP_KERNEL); -	if (unlikely(ti == NULL)) -		return NULL; -#ifdef CONFIG_DEBUG_STACK_USAGE -	memset(ti, 0, THREAD_SIZE); -#endif -	return ti; -} - -void free_thread_info(struct thread_info *ti) -{ -	free_thread_xstate(ti->task); -	kmem_cache_free(thread_info_cache, ti); -} - -void thread_info_cache_init(void) -{ -	thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE, -					      THREAD_SIZE, SLAB_PANIC, NULL); -} -#else -struct thread_info *alloc_thread_info(struct task_struct *tsk) -{ -#ifdef CONFIG_DEBUG_STACK_USAGE -	gfp_t mask = GFP_KERNEL | __GFP_ZERO; -#else -	gfp_t mask = GFP_KERNEL; -#endif -	return (struct thread_info *)__get_free_pages(mask, THREAD_SIZE_ORDER); -} - -void free_thread_info(struct thread_info *ti) +void arch_release_task_struct(struct task_struct *tsk)  { -	free_thread_xstate(ti->task); -	free_pages((unsigned long)ti, THREAD_SIZE_ORDER); +	free_thread_xstate(tsk);  } -#endif /* THREAD_SHIFT < PAGE_SHIFT */  void arch_task_cache_init(void)  { @@ -90,7 +65,7 @@ void arch_task_cache_init(void)  # define HAVE_SOFTFP	0  #endif -void __cpuinit init_thread_xstate(void) +void init_thread_xstate(void)  {  	if (boot_cpu_data.flags & CPU_HAS_FPU)  		xstate_size = sizeof(struct sh_fpu_hard_struct); diff --git a/arch/sh/kernel/process_32.c b/arch/sh/kernel/process_32.c index 762a13984bb..2885fc9d9dc 100644 --- a/arch/sh/kernel/process_32.c +++ b/arch/sh/kernel/process_32.c @@ -21,20 +21,18 @@  #include <linux/fs.h>  #include <linux/ftrace.h>  #include <linux/hw_breakpoint.h> +#include <linux/prefetch.h> +#include <linux/stackprotector.h>  #include <asm/uaccess.h>  #include <asm/mmu_context.h> -#include <asm/system.h>  #include <asm/fpu.h>  #include <asm/syscalls.h> +#include <asm/switch_to.h>  void show_regs(struct pt_regs * regs)  {  	printk("\n"); -	printk("Pid : %d, Comm: \t\t%s\n", task_pid_nr(current), current->comm); -	printk("CPU : %d        \t\t%s  (%s %.*s)\n\n", -	       smp_processor_id(), print_tainted(), init_utsname()->release, -	       (int)strcspn(init_utsname()->version, " "), -	       init_utsname()->version); +	show_regs_print_info(KERN_DEFAULT);  	print_symbol("PC is at %s\n", instruction_pointer(regs));  	print_symbol("PR is at %s\n", regs->pr); @@ -66,43 +64,9 @@ void show_regs(struct pt_regs * regs)  	show_code(regs);  } -/* - * Create a kernel thread - */ -ATTRIB_NORET void kernel_thread_helper(void *arg, int (*fn)(void *)) -{ -	do_exit(fn(arg)); -} - -/* Don't use this in BL=1(cli).  Or else, CPU resets! */ -int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) -{ -	struct pt_regs regs; -	int pid; - -	memset(®s, 0, sizeof(regs)); -	regs.regs[4] = (unsigned long)arg; -	regs.regs[5] = (unsigned long)fn; - -	regs.pc = (unsigned long)kernel_thread_helper; -	regs.sr = SR_MD; -#if defined(CONFIG_SH_FPU) -	regs.sr |= SR_FD; -#endif - -	/* Ok, create the new process.. */ -	pid = do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, -		      ®s, 0, NULL, NULL); - -	return pid; -} -EXPORT_SYMBOL(kernel_thread); -  void start_thread(struct pt_regs *regs, unsigned long new_pc,  		  unsigned long new_sp)  { -	set_fs(USER_DS); -  	regs->pr = 0;  	regs->sr = SR_FD;  	regs->pc = new_pc; @@ -156,20 +120,11 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)  }  EXPORT_SYMBOL(dump_fpu); -/* - * This gets called before we allocate a new thread and copy - * the current task into it. - */ -void prepare_to_copy(struct task_struct *tsk) -{ -	unlazy_fpu(tsk, task_pt_regs(tsk)); -} -  asmlinkage void ret_from_fork(void); +asmlinkage void ret_from_kernel_thread(void);  int copy_thread(unsigned long clone_flags, unsigned long usp, -		unsigned long unused, -		struct task_struct *p, struct pt_regs *regs) +		unsigned long arg, struct task_struct *p)  {  	struct thread_info *ti = task_thread_info(p);  	struct pt_regs *childregs; @@ -186,29 +141,35 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,  	}  #endif -	childregs = task_pt_regs(p); -	*childregs = *regs; +	memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps)); -	if (user_mode(regs)) { -		childregs->regs[15] = usp; -		ti->addr_limit = USER_DS; -	} else { -		childregs->regs[15] = (unsigned long)childregs; +	childregs = task_pt_regs(p); +	p->thread.sp = (unsigned long) childregs; +	if (unlikely(p->flags & PF_KTHREAD)) { +		memset(childregs, 0, sizeof(struct pt_regs)); +		p->thread.pc = (unsigned long) ret_from_kernel_thread; +		childregs->regs[4] = arg; +		childregs->regs[5] = usp; +		childregs->sr = SR_MD; +#if defined(CONFIG_SH_FPU) +		childregs->sr |= SR_FD; +#endif  		ti->addr_limit = KERNEL_DS;  		ti->status &= ~TS_USEDFPU; -		p->fpu_counter = 0; +		p->thread.fpu_counter = 0; +		return 0;  	} +	*childregs = *current_pt_regs(); + +	if (usp) +		childregs->regs[15] = usp; +	ti->addr_limit = USER_DS;  	if (clone_flags & CLONE_SETTLS)  		childregs->gbr = childregs->regs[0];  	childregs->regs[0] = 0; /* Set return value for child */ - -	p->thread.sp = (unsigned long) childregs;  	p->thread.pc = (unsigned long) ret_from_fork; - -	memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps)); -  	return 0;  } @@ -221,10 +182,14 @@ __switch_to(struct task_struct *prev, struct task_struct *next)  {  	struct thread_struct *next_t = &next->thread; +#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP) +	__stack_chk_guard = next->stack_canary; +#endif +  	unlazy_fpu(prev, task_pt_regs(prev));  	/* we're going to use this soon, after a few expensive things */ -	if (next->fpu_counter > 5) +	if (next->thread.fpu_counter > 5)  		prefetch(next_t->xstate);  #ifdef CONFIG_MMU @@ -242,80 +207,12 @@ __switch_to(struct task_struct *prev, struct task_struct *next)  	 * restore of the math state immediately to avoid the trap; the  	 * chances of needing FPU soon are obviously high now  	 */ -	if (next->fpu_counter > 5) +	if (next->thread.fpu_counter > 5)  		__fpu_state_restore();  	return prev;  } -asmlinkage int sys_fork(unsigned long r4, unsigned long r5, -			unsigned long r6, unsigned long r7, -			struct pt_regs __regs) -{ -#ifdef CONFIG_MMU -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0); -	return do_fork(SIGCHLD, regs->regs[15], regs, 0, NULL, NULL); -#else -	/* fork almost works, enough to trick you into looking elsewhere :-( */ -	return -EINVAL; -#endif -} - -asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, -			 unsigned long parent_tidptr, -			 unsigned long child_tidptr, -			 struct pt_regs __regs) -{ -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0); -	if (!newsp) -		newsp = regs->regs[15]; -	return do_fork(clone_flags, newsp, regs, 0, -			(int __user *)parent_tidptr, -			(int __user *)child_tidptr); -} - -/* - * This is trivial, and on the face of it looks like it - * could equally well be done in user mode. - * - * Not so, for quite unobvious reasons - register pressure. - * In user mode vfork() cannot have a stack frame, and if - * done by calling the "clone()" system call directly, you - * do not have enough call-clobbered registers to hold all - * the information you need. - */ -asmlinkage int sys_vfork(unsigned long r4, unsigned long r5, -			 unsigned long r6, unsigned long r7, -			 struct pt_regs __regs) -{ -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0); -	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->regs[15], regs, -		       0, NULL, NULL); -} - -/* - * sys_execve() executes a new program. - */ -asmlinkage int sys_execve(const char __user *ufilename, -			  const char __user *const __user *uargv, -			  const char __user *const __user *uenvp, -			  unsigned long r7, struct pt_regs __regs) -{ -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0); -	int error; -	char *filename; - -	filename = getname(ufilename); -	error = PTR_ERR(filename); -	if (IS_ERR(filename)) -		goto out; - -	error = do_execve(filename, uargv, uenvp, regs); -	putname(filename); -out: -	return error; -} -  unsigned long get_wchan(struct task_struct *p)  {  	unsigned long pc; diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c index 210c1cabcb7..e2062e64334 100644 --- a/arch/sh/kernel/process_64.c +++ b/arch/sh/kernel/process_64.c @@ -30,14 +30,17 @@  #include <asm/pgtable.h>  #include <asm/mmu_context.h>  #include <asm/fpu.h> +#include <asm/switch_to.h>  struct task_struct *last_task_used_math = NULL; +struct pt_regs fake_swapper_regs = { 0, };  void show_regs(struct pt_regs *regs)  {  	unsigned long long ah, al, bh, bl, ch, cl;  	printk("\n"); +	show_regs_print_info(KERN_DEFAULT);  	ah = (regs->pc) >> 32;  	al = (regs->pc) & 0xffffffff; @@ -283,39 +286,6 @@ void show_regs(struct pt_regs *regs)  }  /* - * Create a kernel thread - */ -ATTRIB_NORET void kernel_thread_helper(void *arg, int (*fn)(void *)) -{ -	do_exit(fn(arg)); -} - -/* - * This is the mechanism for creating a new kernel thread. - * - * NOTE! Only a kernel-only process(ie the swapper or direct descendants - * who haven't done an "execve()") should use this: it will work within - * a system call from a "real" process, but the process memory space will - * not be freed until both the parent and the child have exited. - */ -int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) -{ -	struct pt_regs regs; - -	memset(®s, 0, sizeof(regs)); -	regs.regs[2] = (unsigned long)arg; -	regs.regs[3] = (unsigned long)fn; - -	regs.pc = (unsigned long)kernel_thread_helper; -	regs.sr = (1 << 30); - -	/* Ok, create the new process.. */ -	return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, -		      ®s, 0, NULL, NULL); -} -EXPORT_SYMBOL(kernel_thread); - -/*   * Free current thread data structures etc..   */  void exit_thread(void) @@ -399,26 +369,37 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)  EXPORT_SYMBOL(dump_fpu);  asmlinkage void ret_from_fork(void); +asmlinkage void ret_from_kernel_thread(void);  int copy_thread(unsigned long clone_flags, unsigned long usp, -		unsigned long unused, -		struct task_struct *p, struct pt_regs *regs) +		unsigned long arg, struct task_struct *p)  {  	struct pt_regs *childregs;  #ifdef CONFIG_SH_FPU -	if(last_task_used_math == current) { +	/* can't happen for a kernel thread */ +	if (last_task_used_math == current) {  		enable_fpu();  		save_fpu(current);  		disable_fpu();  		last_task_used_math = NULL; -		regs->sr |= SR_FD; +		current_pt_regs()->sr |= SR_FD;  	}  #endif  	/* Copy from sh version */  	childregs = (struct pt_regs *)(THREAD_SIZE + task_stack_page(p)) - 1; +	p->thread.sp = (unsigned long) childregs; -	*childregs = *regs; +	if (unlikely(p->flags & PF_KTHREAD)) { +		memset(childregs, 0, sizeof(struct pt_regs)); +		childregs->regs[2] = (unsigned long)arg; +		childregs->regs[3] = (unsigned long)usp; +		childregs->sr = (1 << 30); /* not user_mode */ +		childregs->sr |= SR_FD; /* Invalidate FPU flag */ +		p->thread.pc = (unsigned long) ret_from_kernel_thread; +		return 0; +	} +	*childregs = *current_pt_regs();  	/*  	 * Sign extend the edited stack. @@ -426,85 +407,18 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,  	 * 32-bit wide and context switch must take care  	 * of NEFF sign extension.  	 */ -	if (user_mode(regs)) { +	if (usp)  		childregs->regs[15] = neff_sign_extend(usp); -		p->thread.uregs = childregs; -	} else { -		childregs->regs[15] = -			neff_sign_extend((unsigned long)task_stack_page(p) + -					 THREAD_SIZE); -	} +	p->thread.uregs = childregs;  	childregs->regs[9] = 0; /* Set return value for child */  	childregs->sr |= SR_FD; /* Invalidate FPU flag */ -	p->thread.sp = (unsigned long) childregs;  	p->thread.pc = (unsigned long) ret_from_fork;  	return 0;  } -asmlinkage int sys_fork(unsigned long r2, unsigned long r3, -			unsigned long r4, unsigned long r5, -			unsigned long r6, unsigned long r7, -			struct pt_regs *pregs) -{ -	return do_fork(SIGCHLD, pregs->regs[15], pregs, 0, 0, 0); -} - -asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, -			 unsigned long r4, unsigned long r5, -			 unsigned long r6, unsigned long r7, -			 struct pt_regs *pregs) -{ -	if (!newsp) -		newsp = pregs->regs[15]; -	return do_fork(clone_flags, newsp, pregs, 0, 0, 0); -} - -/* - * This is trivial, and on the face of it looks like it - * could equally well be done in user mode. - * - * Not so, for quite unobvious reasons - register pressure. - * In user mode vfork() cannot have a stack frame, and if - * done by calling the "clone()" system call directly, you - * do not have enough call-clobbered registers to hold all - * the information you need. - */ -asmlinkage int sys_vfork(unsigned long r2, unsigned long r3, -			 unsigned long r4, unsigned long r5, -			 unsigned long r6, unsigned long r7, -			 struct pt_regs *pregs) -{ -	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, pregs->regs[15], pregs, 0, 0, 0); -} - -/* - * sys_execve() executes a new program. - */ -asmlinkage int sys_execve(const char *ufilename, char **uargv, -			  char **uenvp, unsigned long r5, -			  unsigned long r6, unsigned long r7, -			  struct pt_regs *pregs) -{ -	int error; -	char *filename; - -	filename = getname((char __user *)ufilename); -	error = PTR_ERR(filename); -	if (IS_ERR(filename)) -		goto out; - -	error = do_execve(filename, -			  (const char __user *const __user *)uargv, -			  (const char __user *const __user *)uenvp, -			  pregs); -	putname(filename); -out: -	return error; -} -  #ifdef CONFIG_FRAME_POINTER  static int in_sh64_switch_to(unsigned long pc)  { diff --git a/arch/sh/kernel/ptrace_32.c b/arch/sh/kernel/ptrace_32.c index 90a15d29fee..668c81631c0 100644 --- a/arch/sh/kernel/ptrace_32.c +++ b/arch/sh/kernel/ptrace_32.c @@ -28,7 +28,6 @@  #include <linux/hw_breakpoint.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h> -#include <asm/system.h>  #include <asm/processor.h>  #include <asm/mmu_context.h>  #include <asm/syscalls.h> @@ -63,7 +62,7 @@ static inline int put_stack_long(struct task_struct *task, int offset,  	return 0;  } -void ptrace_triggered(struct perf_event *bp, int nmi, +void ptrace_triggered(struct perf_event *bp,  		      struct perf_sample_data *data, struct pt_regs *regs)  {  	struct perf_event_attr attr; @@ -91,7 +90,8 @@ static int set_single_step(struct task_struct *tsk, unsigned long addr)  		attr.bp_len = HW_BREAKPOINT_LEN_2;  		attr.bp_type = HW_BREAKPOINT_R; -		bp = register_user_hw_breakpoint(&attr, ptrace_triggered, tsk); +		bp = register_user_hw_breakpoint(&attr, ptrace_triggered, +						 NULL, tsk);  		if (IS_ERR(bp))  			return PTR_ERR(bp); @@ -101,6 +101,8 @@ static int set_single_step(struct task_struct *tsk, unsigned long addr)  		attr = bp->attr;  		attr.bp_addr = addr; +		/* reenable breakpoint */ +		attr.disabled = false;  		err = modify_user_hw_breakpoint(bp, &attr);  		if (unlikely(err))  			return err; @@ -392,6 +394,9 @@ long arch_ptrace(struct task_struct *child, long request,  					tmp = 0;  			} else {  				unsigned long index; +				ret = init_fpu(child); +				if (ret) +					break;  				index = addr - offsetof(struct user, fpu);  				tmp = ((unsigned long *)child->thread.xstate)  					[index >> 2]; @@ -423,6 +428,9 @@ long arch_ptrace(struct task_struct *child, long request,  		else if (addr >= offsetof(struct user, fpu) &&  			 addr < offsetof(struct user, u_fpvalid)) {  			unsigned long index; +			ret = init_fpu(child); +			if (ret) +				break;  			index = addr - offsetof(struct user, fpu);  			set_stopped_child_used_math(child);  			((unsigned long *)child->thread.xstate) @@ -491,7 +499,7 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)  {  	long ret = 0; -	secure_computing(regs->regs[0]); +	secure_computing_strict(regs->regs[0]);  	if (test_thread_flag(TIF_SYSCALL_TRACE) &&  	    tracehook_report_syscall_entry(regs)) @@ -505,10 +513,9 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)  	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))  		trace_sys_enter(regs, regs->regs[0]); -	if (unlikely(current->audit_context)) -		audit_syscall_entry(audit_arch(), regs->regs[3], -				    regs->regs[4], regs->regs[5], -				    regs->regs[6], regs->regs[7]); +	audit_syscall_entry(audit_arch(), regs->regs[3], +			    regs->regs[4], regs->regs[5], +			    regs->regs[6], regs->regs[7]);  	return ret ?: regs->regs[0];  } @@ -517,9 +524,7 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)  {  	int step; -	if (unlikely(current->audit_context)) -		audit_syscall_exit(AUDITSC_RESULT(regs->regs[0]), -				   regs->regs[0]); +	audit_syscall_exit(regs);  	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))  		trace_sys_exit(regs, regs->regs[0]); diff --git a/arch/sh/kernel/ptrace_64.c b/arch/sh/kernel/ptrace_64.c index 4436eacddb1..af90339dadc 100644 --- a/arch/sh/kernel/ptrace_64.c +++ b/arch/sh/kernel/ptrace_64.c @@ -34,11 +34,11 @@  #include <asm/io.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h> -#include <asm/system.h>  #include <asm/processor.h>  #include <asm/mmu_context.h>  #include <asm/syscalls.h>  #include <asm/fpu.h> +#include <asm/traps.h>  #define CREATE_TRACE_POINTS  #include <trace/events/syscalls.h> @@ -403,6 +403,9 @@ long arch_ptrace(struct task_struct *child, long request,  		else if ((addr >= offsetof(struct user, fpu)) &&  			 (addr <  offsetof(struct user, u_fpvalid))) {  			unsigned long index; +			ret = init_fpu(child); +			if (ret) +				break;  			index = addr - offsetof(struct user, fpu);  			tmp = get_fpu_long(child, index);  		} else if (addr == offsetof(struct user, u_fpvalid)) { @@ -442,6 +445,9 @@ long arch_ptrace(struct task_struct *child, long request,  		else if ((addr >= offsetof(struct user, fpu)) &&  			 (addr <  offsetof(struct user, u_fpvalid))) {  			unsigned long index; +			ret = init_fpu(child); +			if (ret) +				break;  			index = addr - offsetof(struct user, fpu);  			ret = put_fpu_long(child, index, data);  		} @@ -516,7 +522,7 @@ asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs)  {  	long long ret = 0; -	secure_computing(regs->regs[9]); +	secure_computing_strict(regs->regs[9]);  	if (test_thread_flag(TIF_SYSCALL_TRACE) &&  	    tracehook_report_syscall_entry(regs)) @@ -530,10 +536,9 @@ asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs)  	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))  		trace_sys_enter(regs, regs->regs[9]); -	if (unlikely(current->audit_context)) -		audit_syscall_entry(audit_arch(), regs->regs[1], -				    regs->regs[2], regs->regs[3], -				    regs->regs[4], regs->regs[5]); +	audit_syscall_entry(audit_arch(), regs->regs[1], +			    regs->regs[2], regs->regs[3], +			    regs->regs[4], regs->regs[5]);  	return ret ?: regs->regs[9];  } @@ -542,9 +547,7 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)  {  	int step; -	if (unlikely(current->audit_context)) -		audit_syscall_exit(AUDITSC_RESULT(regs->regs[9]), -				   regs->regs[9]); +	audit_syscall_exit(regs);  	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))  		trace_sys_exit(regs, regs->regs[9]); diff --git a/arch/sh/kernel/reboot.c b/arch/sh/kernel/reboot.c index ca6a5ca6401..04afe5b2066 100644 --- a/arch/sh/kernel/reboot.c +++ b/arch/sh/kernel/reboot.c @@ -8,8 +8,8 @@  #endif  #include <asm/addrspace.h>  #include <asm/reboot.h> -#include <asm/system.h>  #include <asm/tlbflush.h> +#include <asm/traps.h>  void (*pm_power_off)(void);  EXPORT_SYMBOL(pm_power_off); diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c index d6b018c7ebd..de19cfa768f 100644 --- a/arch/sh/kernel/setup.c +++ b/arch/sh/kernel/setup.c @@ -12,7 +12,6 @@  #include <linux/initrd.h>  #include <linux/bootmem.h>  #include <linux/console.h> -#include <linux/seq_file.h>  #include <linux/root_dev.h>  #include <linux/utsname.h>  #include <linux/nodemask.h> @@ -151,7 +150,7 @@ void __init check_for_initrd(void)  	}  	/* -	 * If we got this far inspite of the boot loader's best efforts +	 * If we got this far in spite of the boot loader's best efforts  	 * to the contrary, assume we actually have a valid initrd and  	 * fix up the root dev.  	 */ @@ -173,7 +172,7 @@ disable:  #endif  } -void __cpuinit calibrate_delay(void) +void calibrate_delay(void)  {  	struct clk *clk = clk_get(NULL, "cpu_clk"); @@ -212,13 +211,16 @@ void __init __add_active_range(unsigned int nid, unsigned long start_pfn,  	}  	/* -	 *  We don't know which RAM region contains kernel data, -	 *  so we try it repeatedly and let the resource manager -	 *  test it. +	 * We don't know which RAM region contains kernel data or +	 * the reserved crashkernel region, so try it repeatedly +	 * and let the resource manager test it.  	 */  	request_resource(res, &code_resource);  	request_resource(res, &data_resource);  	request_resource(res, &bss_resource); +#ifdef CONFIG_KEXEC +	request_resource(res, &crashk_res); +#endif  	/*  	 * Also make sure that there is a PMB mapping that covers this @@ -228,7 +230,8 @@ void __init __add_active_range(unsigned int nid, unsigned long start_pfn,  	pmb_bolt_mapping((unsigned long)__va(start), start, end - start,  			 PAGE_KERNEL); -	add_active_range(nid, start_pfn, end_pfn); +	memblock_set_node(PFN_PHYS(start_pfn), PFN_PHYS(end_pfn - start_pfn), +			  &memblock.memory, nid);  }  void __init __weak plat_early_device_setup(void) @@ -270,7 +273,7 @@ void __init setup_arch(char **cmdline_p)  	data_resource.start = virt_to_phys(_etext);  	data_resource.end = virt_to_phys(_edata)-1;  	bss_resource.start = virt_to_phys(__bss_start); -	bss_resource.end = virt_to_phys(_ebss)-1; +	bss_resource.end = virt_to_phys(__bss_stop)-1;  #ifdef CONFIG_CMDLINE_OVERWRITE  	strlcpy(command_line, CONFIG_CMDLINE, sizeof(command_line)); @@ -319,146 +322,3 @@ int test_mode_pin(int pin)  {  	return sh_mv.mv_mode_pins() & pin;  } - -static const char *cpu_name[] = { -	[CPU_SH7201]	= "SH7201", -	[CPU_SH7203]	= "SH7203",	[CPU_SH7263]	= "SH7263", -	[CPU_SH7206]	= "SH7206",	[CPU_SH7619]	= "SH7619", -	[CPU_SH7705]	= "SH7705",	[CPU_SH7706]	= "SH7706", -	[CPU_SH7707]	= "SH7707",	[CPU_SH7708]	= "SH7708", -	[CPU_SH7709]	= "SH7709",	[CPU_SH7710]	= "SH7710", -	[CPU_SH7712]	= "SH7712",	[CPU_SH7720]	= "SH7720", -	[CPU_SH7721]	= "SH7721",	[CPU_SH7729]	= "SH7729", -	[CPU_SH7750]	= "SH7750",	[CPU_SH7750S]	= "SH7750S", -	[CPU_SH7750R]	= "SH7750R",	[CPU_SH7751]	= "SH7751", -	[CPU_SH7751R]	= "SH7751R",	[CPU_SH7760]	= "SH7760", -	[CPU_SH4_202]	= "SH4-202",	[CPU_SH4_501]	= "SH4-501", -	[CPU_SH7763]	= "SH7763",	[CPU_SH7770]	= "SH7770", -	[CPU_SH7780]	= "SH7780",	[CPU_SH7781]	= "SH7781", -	[CPU_SH7343]	= "SH7343",	[CPU_SH7785]	= "SH7785", -	[CPU_SH7786]	= "SH7786",	[CPU_SH7757]	= "SH7757", -	[CPU_SH7722]	= "SH7722",	[CPU_SHX3]	= "SH-X3", -	[CPU_SH5_101]	= "SH5-101",	[CPU_SH5_103]	= "SH5-103", -	[CPU_MXG]	= "MX-G",	[CPU_SH7723]	= "SH7723", -	[CPU_SH7366]	= "SH7366",	[CPU_SH7724]	= "SH7724", -	[CPU_SH_NONE]	= "Unknown" -}; - -const char *get_cpu_subtype(struct sh_cpuinfo *c) -{ -	return cpu_name[c->type]; -} -EXPORT_SYMBOL(get_cpu_subtype); - -#ifdef CONFIG_PROC_FS -/* Symbolic CPU flags, keep in sync with asm/cpu-features.h */ -static const char *cpu_flags[] = { -	"none", "fpu", "p2flush", "mmuassoc", "dsp", "perfctr", -	"ptea", "llsc", "l2", "op32", "pteaex", NULL -}; - -static void show_cpuflags(struct seq_file *m, struct sh_cpuinfo *c) -{ -	unsigned long i; - -	seq_printf(m, "cpu flags\t:"); - -	if (!c->flags) { -		seq_printf(m, " %s\n", cpu_flags[0]); -		return; -	} - -	for (i = 0; cpu_flags[i]; i++) -		if ((c->flags & (1 << i))) -			seq_printf(m, " %s", cpu_flags[i+1]); - -	seq_printf(m, "\n"); -} - -static void show_cacheinfo(struct seq_file *m, const char *type, -			   struct cache_info info) -{ -	unsigned int cache_size; - -	cache_size = info.ways * info.sets * info.linesz; - -	seq_printf(m, "%s size\t: %2dKiB (%d-way)\n", -		   type, cache_size >> 10, info.ways); -} - -/* - *	Get CPU information for use by the procfs. - */ -static int show_cpuinfo(struct seq_file *m, void *v) -{ -	struct sh_cpuinfo *c = v; -	unsigned int cpu = c - cpu_data; - -	if (!cpu_online(cpu)) -		return 0; - -	if (cpu == 0) -		seq_printf(m, "machine\t\t: %s\n", get_system_type()); -	else -		seq_printf(m, "\n"); - -	seq_printf(m, "processor\t: %d\n", cpu); -	seq_printf(m, "cpu family\t: %s\n", init_utsname()->machine); -	seq_printf(m, "cpu type\t: %s\n", get_cpu_subtype(c)); -	if (c->cut_major == -1) -		seq_printf(m, "cut\t\t: unknown\n"); -	else if (c->cut_minor == -1) -		seq_printf(m, "cut\t\t: %d.x\n", c->cut_major); -	else -		seq_printf(m, "cut\t\t: %d.%d\n", c->cut_major, c->cut_minor); - -	show_cpuflags(m, c); - -	seq_printf(m, "cache type\t: "); - -	/* -	 * Check for what type of cache we have, we support both the -	 * unified cache on the SH-2 and SH-3, as well as the harvard -	 * style cache on the SH-4. -	 */ -	if (c->icache.flags & SH_CACHE_COMBINED) { -		seq_printf(m, "unified\n"); -		show_cacheinfo(m, "cache", c->icache); -	} else { -		seq_printf(m, "split (harvard)\n"); -		show_cacheinfo(m, "icache", c->icache); -		show_cacheinfo(m, "dcache", c->dcache); -	} - -	/* Optional secondary cache */ -	if (c->flags & CPU_HAS_L2_CACHE) -		show_cacheinfo(m, "scache", c->scache); - -	seq_printf(m, "address sizes\t: %u bits physical\n", c->phys_bits); - -	seq_printf(m, "bogomips\t: %lu.%02lu\n", -		     c->loops_per_jiffy/(500000/HZ), -		     (c->loops_per_jiffy/(5000/HZ)) % 100); - -	return 0; -} - -static void *c_start(struct seq_file *m, loff_t *pos) -{ -	return *pos < NR_CPUS ? cpu_data + *pos : NULL; -} -static void *c_next(struct seq_file *m, void *v, loff_t *pos) -{ -	++*pos; -	return c_start(m, pos); -} -static void c_stop(struct seq_file *m, void *v) -{ -} -const struct seq_operations cpuinfo_op = { -	.start	= c_start, -	.next	= c_next, -	.stop	= c_stop, -	.show	= show_cpuinfo, -}; -#endif /* CONFIG_PROC_FS */ diff --git a/arch/sh/kernel/sh_bios.c b/arch/sh/kernel/sh_bios.c index 47475cca068..fe584e51696 100644 --- a/arch/sh/kernel/sh_bios.c +++ b/arch/sh/kernel/sh_bios.c @@ -104,6 +104,7 @@ void sh_bios_vbr_reload(void)  		);  } +#ifdef CONFIG_EARLY_PRINTK  /*   *	Print a string through the BIOS   */ @@ -144,8 +145,6 @@ static struct console bios_console = {  	.index		= -1,  }; -static struct console *early_console; -  static int __init setup_early_printk(char *buf)  {  	int keep_early = 0; @@ -170,3 +169,4 @@ static int __init setup_early_printk(char *buf)  	return 0;  }  early_param("earlyprintk", setup_early_printk); +#endif diff --git a/arch/sh/kernel/sh_ksyms_32.c b/arch/sh/kernel/sh_ksyms_32.c index 3896f26efa4..d77f2f6c7ff 100644 --- a/arch/sh/kernel/sh_ksyms_32.c +++ b/arch/sh/kernel/sh_ksyms_32.c @@ -19,8 +19,12 @@ EXPORT_SYMBOL(csum_partial);  EXPORT_SYMBOL(csum_partial_copy_generic);  EXPORT_SYMBOL(copy_page);  EXPORT_SYMBOL(__clear_user); -EXPORT_SYMBOL(_ebss);  EXPORT_SYMBOL(empty_zero_page); +#ifdef CONFIG_FLATMEM +/* need in pfn_valid macro */ +EXPORT_SYMBOL(min_low_pfn); +EXPORT_SYMBOL(max_low_pfn); +#endif  #define DECLARE_EXPORT(name)		\  	extern void name(void);EXPORT_SYMBOL(name) diff --git a/arch/sh/kernel/sh_ksyms_64.c b/arch/sh/kernel/sh_ksyms_64.c index 45afa5c51f6..26a0774f527 100644 --- a/arch/sh/kernel/sh_ksyms_64.c +++ b/arch/sh/kernel/sh_ksyms_64.c @@ -32,8 +32,6 @@ EXPORT_SYMBOL(__get_user_asm_b);  EXPORT_SYMBOL(__get_user_asm_w);  EXPORT_SYMBOL(__get_user_asm_l);  EXPORT_SYMBOL(__get_user_asm_q); -EXPORT_SYMBOL(__strnlen_user); -EXPORT_SYMBOL(__strncpy_from_user);  EXPORT_SYMBOL(__clear_user);  EXPORT_SYMBOL(copy_page);  EXPORT_SYMBOL(__copy_user); diff --git a/arch/sh/kernel/signal_32.c b/arch/sh/kernel/signal_32.c index 579cd2ca358..594cd371aa2 100644 --- a/arch/sh/kernel/signal_32.c +++ b/arch/sh/kernel/signal_32.c @@ -22,10 +22,8 @@  #include <linux/elf.h>  #include <linux/personality.h>  #include <linux/binfmts.h> -#include <linux/freezer.h>  #include <linux/io.h>  #include <linux/tracehook.h> -#include <asm/system.h>  #include <asm/ucontext.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h> @@ -33,8 +31,6 @@  #include <asm/syscalls.h>  #include <asm/fpu.h> -#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) -  struct fdpic_func_descriptor {  	unsigned long	text;  	unsigned long	GOT; @@ -51,71 +47,6 @@ struct fdpic_func_descriptor {  #define UNWINDGUARD 64  /* - * Atomically swap in the new signal mask, and wait for a signal. - */ -asmlinkage int -sys_sigsuspend(old_sigset_t mask, -	       unsigned long r5, unsigned long r6, unsigned long r7, -	       struct pt_regs __regs) -{ -	mask &= _BLOCKABLE; -	spin_lock_irq(¤t->sighand->siglock); -	current->saved_sigmask = current->blocked; -	siginitset(¤t->blocked, mask); -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); - -	current->state = TASK_INTERRUPTIBLE; -	schedule(); -	set_restore_sigmask(); - -	return -ERESTARTNOHAND; -} - -asmlinkage int -sys_sigaction(int sig, const struct old_sigaction __user *act, -	      struct old_sigaction __user *oact) -{ -	struct k_sigaction new_ka, old_ka; -	int ret; - -	if (act) { -		old_sigset_t mask; -		if (!access_ok(VERIFY_READ, act, sizeof(*act)) || -		    __get_user(new_ka.sa.sa_handler, &act->sa_handler) || -		    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) -			return -EFAULT; -		__get_user(new_ka.sa.sa_flags, &act->sa_flags); -		__get_user(mask, &act->sa_mask); -		siginitset(&new_ka.sa.sa_mask, mask); -	} - -	ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); - -	if (!ret && oact) { -		if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || -		    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || -		    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) -			return -EFAULT; -		__put_user(old_ka.sa.sa_flags, &oact->sa_flags); -		__put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); -	} - -	return ret; -} - -asmlinkage int -sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, -		unsigned long r6, unsigned long r7, -		struct pt_regs __regs) -{ -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0); - -	return do_sigaltstack(uss, uoss, regs->regs[15]); -} - - -/*   * Do a signal return; undo the signal stack.   */ @@ -162,12 +93,11 @@ static inline int save_sigcontext_fpu(struct sigcontext __user *sc,  	if (!(boot_cpu_data.flags & CPU_HAS_FPU))  		return 0; -	if (!used_math()) { -		__put_user(0, &sc->sc_ownedfp); -		return 0; -	} +	if (!used_math()) +		return __put_user(0, &sc->sc_ownedfp); -	__put_user(1, &sc->sc_ownedfp); +	if (__put_user(1, &sc->sc_ownedfp)) +		return -EFAULT;  	/* This will cause a "finit" to be triggered by the next  	   attempted FPU operation by the 'current' process. @@ -207,7 +137,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *r0_p  		regs->sr |= SR_FD; /* Release FPU */  		clear_fpu(tsk, regs);  		clear_used_math(); -		__get_user (owned_fp, &sc->sc_ownedfp); +		err |= __get_user (owned_fp, &sc->sc_ownedfp);  		if (owned_fp)  			err |= restore_sigcontext_fpu(sc);  	} @@ -218,11 +148,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *r0_p  	return err;  } -asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5, -			     unsigned long r6, unsigned long r7, -			     struct pt_regs __regs) +asmlinkage int sys_sigreturn(void)  { -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0); +	struct pt_regs *regs = current_pt_regs();  	struct sigframe __user *frame = (struct sigframe __user *)regs->regs[15];  	sigset_t set;  	int r0; @@ -239,12 +167,7 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5,  				    sizeof(frame->extramask))))  		goto badframe; -	sigdelsetmask(&set, ~_BLOCKABLE); - -	spin_lock_irq(¤t->sighand->siglock); -	current->blocked = set; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	set_current_blocked(&set);  	if (restore_sigcontext(regs, &frame->sc, &r0))  		goto badframe; @@ -255,11 +178,9 @@ badframe:  	return 0;  } -asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5, -				unsigned long r6, unsigned long r7, -				struct pt_regs __regs) +asmlinkage int sys_rt_sigreturn(void)  { -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0); +	struct pt_regs *regs = current_pt_regs();  	struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->regs[15];  	sigset_t set;  	int r0; @@ -273,17 +194,12 @@ asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5,  	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))  		goto badframe; -	sigdelsetmask(&set, ~_BLOCKABLE); -	spin_lock_irq(¤t->sighand->siglock); -	current->blocked = set; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	set_current_blocked(&set);  	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))  		goto badframe; -	if (do_sigaltstack(&frame->uc.uc_stack, NULL, -			   regs->regs[15]) == -EFAULT) +	if (restore_altstack(&frame->uc.uc_stack))  		goto badframe;  	return r0; @@ -405,11 +321,14 @@ static int setup_frame(int sig, struct k_sigaction *ka,  		struct fdpic_func_descriptor __user *funcptr =  			(struct fdpic_func_descriptor __user *)ka->sa.sa_handler; -		__get_user(regs->pc, &funcptr->text); -		__get_user(regs->regs[12], &funcptr->GOT); +		err |= __get_user(regs->pc, &funcptr->text); +		err |= __get_user(regs->regs[12], &funcptr->GOT);  	} else  		regs->pc = (unsigned long)ka->sa.sa_handler; +	if (err) +		goto give_sigsegv; +  	set_fs(USER_DS);  	pr_debug("SIG deliver (%s:%d): sp=%p pc=%08lx pr=%08lx\n", @@ -445,11 +364,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  	/* Create the ucontext.  */  	err |= __put_user(0, &frame->uc.uc_flags);  	err |= __put_user(NULL, &frame->uc.uc_link); -	err |= __put_user((void *)current->sas_ss_sp, -			  &frame->uc.uc_stack.ss_sp); -	err |= __put_user(sas_ss_flags(regs->regs[15]), -			  &frame->uc.uc_stack.ss_flags); -	err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); +	err |= __save_altstack(&frame->uc.uc_stack, regs->regs[15]);  	err |= setup_sigcontext(&frame->uc.uc_mcontext,  			        regs, set->sig[0]);  	err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); @@ -489,11 +404,14 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  		struct fdpic_func_descriptor __user *funcptr =  			(struct fdpic_func_descriptor __user *)ka->sa.sa_handler; -		__get_user(regs->pc, &funcptr->text); -		__get_user(regs->regs[12], &funcptr->GOT); +		err |= __get_user(regs->pc, &funcptr->text); +		err |= __get_user(regs->regs[12], &funcptr->GOT);  	} else  		regs->pc = (unsigned long)ka->sa.sa_handler; +	if (err) +		goto give_sigsegv; +  	set_fs(USER_DS);  	pr_debug("SIG deliver (%s:%d): sp=%p pc=%08lx pr=%08lx\n", @@ -536,10 +454,11 @@ handle_syscall_restart(unsigned long save_r0, struct pt_regs *regs,  /*   * OK, we're invoking a handler   */ -static int +static void  handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, -	      sigset_t *oldset, struct pt_regs *regs, unsigned int save_r0) +	      struct pt_regs *regs, unsigned int save_r0)  { +	sigset_t *oldset = sigmask_to_save();  	int ret;  	/* Set up the stack frame */ @@ -548,19 +467,10 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,  	else  		ret = setup_frame(sig, ka, oldset, regs); -	if (ka->sa.sa_flags & SA_ONESHOT) -		ka->sa.sa_handler = SIG_DFL; - -	if (ret == 0) { -		spin_lock_irq(¤t->sighand->siglock); -		sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); -		if (!(ka->sa.sa_flags & SA_NODEFER)) -			sigaddset(¤t->blocked,sig); -		recalc_sigpending(); -		spin_unlock_irq(¤t->sighand->siglock); -	} - -	return ret; +	if (ret) +		return; +	signal_delivered(sig, info, ka, regs, +			test_thread_flag(TIF_SINGLESTEP));  }  /* @@ -577,7 +487,6 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)  	siginfo_t info;  	int signr;  	struct k_sigaction ka; -	sigset_t *oldset;  	/*  	 * We want the common case to go fast, which @@ -588,37 +497,15 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)  	if (!user_mode(regs))  		return; -	if (try_to_freeze()) -		goto no_signal; - -	if (current_thread_info()->status & TS_RESTORE_SIGMASK) -		oldset = ¤t->saved_sigmask; -	else -		oldset = ¤t->blocked; -  	signr = get_signal_to_deliver(&info, &ka, regs, NULL);  	if (signr > 0) {  		handle_syscall_restart(save_r0, regs, &ka.sa);  		/* Whee!  Actually deliver the signal.  */ -		if (handle_signal(signr, &ka, &info, oldset, -				  regs, save_r0) == 0) { -			/* -			 * A signal was successfully delivered; the saved -			 * sigmask will have been stored in the signal frame, -			 * and will be restored by sigreturn, so we can simply -			 * clear the TS_RESTORE_SIGMASK flag -			 */ -			current_thread_info()->status &= ~TS_RESTORE_SIGMASK; - -			tracehook_signal_handler(signr, &info, &ka, regs, -					test_thread_flag(TIF_SINGLESTEP)); -		} - +		handle_signal(signr, &ka, &info, regs, save_r0);  		return;  	} -no_signal:  	/* Did we come from a system call? */  	if (regs->tra >= 0) {  		/* Restart the system call - no handlers present */ @@ -637,10 +524,7 @@ no_signal:  	 * If there's no signal to deliver, we just put the saved sigmask  	 * back.  	 */ -	if (current_thread_info()->status & TS_RESTORE_SIGMASK) { -		current_thread_info()->status &= ~TS_RESTORE_SIGMASK; -		sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); -	} +	restore_saved_sigmask();  }  asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned int save_r0, @@ -653,7 +537,5 @@ asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned int save_r0,  	if (thread_info_flags & _TIF_NOTIFY_RESUME) {  		clear_thread_flag(TIF_NOTIFY_RESUME);  		tracehook_notify_resume(regs); -		if (current->replacement_session_keyring) -			key_replace_session_keyring();  	}  } diff --git a/arch/sh/kernel/signal_64.c b/arch/sh/kernel/signal_64.c index 5a9f1f10ebf..23d4c71c91a 100644 --- a/arch/sh/kernel/signal_64.c +++ b/arch/sh/kernel/signal_64.c @@ -18,7 +18,6 @@  #include <linux/errno.h>  #include <linux/wait.h>  #include <linux/personality.h> -#include <linux/freezer.h>  #include <linux/ptrace.h>  #include <linux/unistd.h>  #include <linux/stddef.h> @@ -41,11 +40,9 @@  #define DEBUG_SIG 0 -#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) - -static int +static void  handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, -		sigset_t *oldset, struct pt_regs * regs); +		struct pt_regs * regs);  static inline void  handle_syscall_restart(struct pt_regs *regs, struct sigaction *sa) @@ -83,7 +80,7 @@ handle_syscall_restart(struct pt_regs *regs, struct sigaction *sa)   * the kernel can handle, and then we build all the user-level signal handling   * stack-frames in one go after that.   */ -static int do_signal(struct pt_regs *regs, sigset_t *oldset) +static void do_signal(struct pt_regs *regs)  {  	siginfo_t info;  	int signr; @@ -96,36 +93,17 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset)  	 * if so.  	 */  	if (!user_mode(regs)) -		return 1; - -	if (try_to_freeze()) -		goto no_signal; - -	if (current_thread_info()->status & TS_RESTORE_SIGMASK) -		oldset = ¤t->saved_sigmask; -	else if (!oldset) -		oldset = ¤t->blocked; +		return;  	signr = get_signal_to_deliver(&info, &ka, regs, 0);  	if (signr > 0) {  		handle_syscall_restart(regs, &ka.sa);  		/* Whee!  Actually deliver the signal.  */ -		if (handle_signal(signr, &info, &ka, oldset, regs) == 0) { -			/* -			 * If a signal was successfully delivered, the -			 * saved sigmask is in its frame, and we can -			 * clear the TS_RESTORE_SIGMASK flag. -			 */ -			current_thread_info()->status &= ~TS_RESTORE_SIGMASK; - -			tracehook_signal_handler(signr, &info, &ka, regs, -					test_thread_flag(TIF_SINGLESTEP)); -			return 1; -		} +		handle_signal(signr, &info, &ka, regs); +		return;  	} -no_signal:  	/* Did we come from a system call? */  	if (regs->syscall_nr >= 0) {  		/* Restart the system call - no handlers present */ @@ -146,121 +124,7 @@ no_signal:  	}  	/* No signal to deliver -- put the saved sigmask back */ -	if (current_thread_info()->status & TS_RESTORE_SIGMASK) { -		current_thread_info()->status &= ~TS_RESTORE_SIGMASK; -		sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); -	} - -	return 0; -} - -/* - * Atomically swap in the new signal mask, and wait for a signal. - */ -asmlinkage int -sys_sigsuspend(old_sigset_t mask, -	       unsigned long r3, unsigned long r4, unsigned long r5, -	       unsigned long r6, unsigned long r7, -	       struct pt_regs * regs) -{ -	sigset_t saveset; - -	mask &= _BLOCKABLE; -	spin_lock_irq(¤t->sighand->siglock); -	saveset = current->blocked; -	siginitset(¤t->blocked, mask); -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); - -	REF_REG_RET = -EINTR; -	while (1) { -		current->state = TASK_INTERRUPTIBLE; -		schedule(); -		set_restore_sigmask(); -		regs->pc += 4;    /* because sys_sigreturn decrements the pc */ -		if (do_signal(regs, &saveset)) { -			/* pc now points at signal handler. Need to decrement -			   it because entry.S will increment it. */ -			regs->pc -= 4; -			return -EINTR; -		} -	} -} - -asmlinkage int -sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, -	          unsigned long r4, unsigned long r5, unsigned long r6, -	          unsigned long r7, -	          struct pt_regs * regs) -{ -	sigset_t saveset, newset; - -	/* XXX: Don't preclude handling different sized sigset_t's.  */ -	if (sigsetsize != sizeof(sigset_t)) -		return -EINVAL; - -	if (copy_from_user(&newset, unewset, sizeof(newset))) -		return -EFAULT; -	sigdelsetmask(&newset, ~_BLOCKABLE); -	spin_lock_irq(¤t->sighand->siglock); -	saveset = current->blocked; -	current->blocked = newset; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); - -	REF_REG_RET = -EINTR; -	while (1) { -		current->state = TASK_INTERRUPTIBLE; -		schedule(); -		regs->pc += 4;    /* because sys_sigreturn decrements the pc */ -		if (do_signal(regs, &saveset)) { -			/* pc now points at signal handler. Need to decrement -			   it because entry.S will increment it. */ -			regs->pc -= 4; -			return -EINTR; -		} -	} -} - -asmlinkage int -sys_sigaction(int sig, const struct old_sigaction __user *act, -	      struct old_sigaction __user *oact) -{ -	struct k_sigaction new_ka, old_ka; -	int ret; - -	if (act) { -		old_sigset_t mask; -		if (!access_ok(VERIFY_READ, act, sizeof(*act)) || -		    __get_user(new_ka.sa.sa_handler, &act->sa_handler) || -		    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) -			return -EFAULT; -		__get_user(new_ka.sa.sa_flags, &act->sa_flags); -		__get_user(mask, &act->sa_mask); -		siginitset(&new_ka.sa.sa_mask, mask); -	} - -	ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); - -	if (!ret && oact) { -		if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || -		    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || -		    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) -			return -EFAULT; -		__put_user(old_ka.sa.sa_flags, &oact->sa_flags); -		__put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); -	} - -	return ret; -} - -asmlinkage int -sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, -	        unsigned long r4, unsigned long r5, unsigned long r6, -	        unsigned long r7, -	        struct pt_regs * regs) -{ -	return do_sigaltstack(uss, uoss, REF_REG_SP); +	restore_saved_sigmask();  }  /* @@ -411,12 +275,7 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3,  				    sizeof(frame->extramask))))  		goto badframe; -	sigdelsetmask(&set, ~_BLOCKABLE); - -	spin_lock_irq(¤t->sighand->siglock); -	current->blocked = set; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	set_current_blocked(&set);  	if (restore_sigcontext(regs, &frame->sc, &ret))  		goto badframe; @@ -436,7 +295,6 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,  {  	struct rt_sigframe __user *frame = (struct rt_sigframe __user *) (long) REF_REG_SP;  	sigset_t set; -	stack_t __user st;  	long long ret;  	/* Always make any pending restarted system calls return -EINTR */ @@ -448,21 +306,14 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,  	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))  		goto badframe; -	sigdelsetmask(&set, ~_BLOCKABLE); -	spin_lock_irq(¤t->sighand->siglock); -	current->blocked = set; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	set_current_blocked(&set);  	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ret))  		goto badframe;  	regs->pc -= 4; -	if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st))) +	if (restore_altstack(&frame->uc.uc_stack))  		goto badframe; -	/* It is more difficult to avoid calling this function than to -	   call it and ignore errors.  */ -	do_sigaltstack(&st, NULL, REF_REG_SP);  	return (int) ret; @@ -655,11 +506,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  	/* Create the ucontext.  */  	err |= __put_user(0, &frame->uc.uc_flags);  	err |= __put_user(0, &frame->uc.uc_link); -	err |= __put_user((void *)current->sas_ss_sp, -			  &frame->uc.uc_stack.ss_sp); -	err |= __put_user(sas_ss_flags(regs->regs[REG_SP]), -			  &frame->uc.uc_stack.ss_flags); -	err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); +	err |= __save_altstack(&frame->uc.uc_stack, regs->regs[REG_SP]);  	err |= setup_sigcontext(&frame->uc.uc_mcontext,  			        regs, set->sig[0]);  	err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); @@ -726,10 +573,11 @@ give_sigsegv:  /*   * OK, we're invoking a handler   */ -static int +static void  handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, -		sigset_t *oldset, struct pt_regs * regs) +		struct pt_regs * regs)  { +	sigset_t *oldset = sigmask_to_save();  	int ret;  	/* Set up the stack frame */ @@ -738,30 +586,20 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,  	else  		ret = setup_frame(sig, ka, oldset, regs); -	if (ka->sa.sa_flags & SA_ONESHOT) -		ka->sa.sa_handler = SIG_DFL; - -	if (ret == 0) { -		spin_lock_irq(¤t->sighand->siglock); -		sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); -		if (!(ka->sa.sa_flags & SA_NODEFER)) -			sigaddset(¤t->blocked,sig); -		recalc_sigpending(); -		spin_unlock_irq(¤t->sighand->siglock); -	} +	if (ret) +		return; -	return ret; +	signal_delivered(sig, info, ka, regs, +			test_thread_flag(TIF_SINGLESTEP));  }  asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)  {  	if (thread_info_flags & _TIF_SIGPENDING) -		do_signal(regs, 0); +		do_signal(regs);  	if (thread_info_flags & _TIF_NOTIFY_RESUME) {  		clear_thread_flag(TIF_NOTIFY_RESUME);  		tracehook_notify_resume(regs); -		if (current->replacement_session_keyring) -			key_replace_session_keyring();  	}  } diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index 509b36b4511..fc5acfc93c9 100644 --- a/arch/sh/kernel/smp.c +++ b/arch/sh/kernel/smp.c @@ -20,13 +20,14 @@  #include <linux/module.h>  #include <linux/cpu.h>  #include <linux/interrupt.h> -#include <asm/atomic.h> +#include <linux/sched.h> +#include <linux/atomic.h>  #include <asm/processor.h> -#include <asm/system.h>  #include <asm/mmu_context.h>  #include <asm/smp.h>  #include <asm/cacheflush.h>  #include <asm/sections.h> +#include <asm/setup.h>  int __cpu_number_map[NR_CPUS];		/* Map physical to logical */  int __cpu_logical_map[NR_CPUS];		/* Map logical to physical */ @@ -36,7 +37,7 @@ struct plat_smp_ops *mp_ops = NULL;  /* State of each CPU */  DEFINE_PER_CPU(int, cpu_state) = { 0 }; -void __cpuinit register_smp_ops(struct plat_smp_ops *ops) +void register_smp_ops(struct plat_smp_ops *ops)  {  	if (mp_ops)  		printk(KERN_WARNING "Overriding previously set SMP ops\n"); @@ -44,7 +45,7 @@ void __cpuinit register_smp_ops(struct plat_smp_ops *ops)  	mp_ops = ops;  } -static inline void __cpuinit smp_store_cpu_info(unsigned int cpu) +static inline void smp_store_cpu_info(unsigned int cpu)  {  	struct sh_cpuinfo *c = cpu_data + cpu; @@ -62,7 +63,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)  	mp_ops->prepare_cpus(max_cpus);  #ifndef CONFIG_HOTPLUG_CPU -	init_cpu_present(&cpu_possible_map); +	init_cpu_present(cpu_possible_mask);  #endif  } @@ -110,7 +111,7 @@ void play_dead_common(void)  	irq_ctx_exit(raw_smp_processor_id());  	mb(); -	__get_cpu_var(cpu_state) = CPU_DEAD; +	__this_cpu_write(cpu_state, CPU_DEAD);  	local_irq_disable();  } @@ -122,7 +123,6 @@ void native_play_dead(void)  int __cpu_disable(void)  {  	unsigned int cpu = smp_processor_id(); -	struct task_struct *p;  	int ret;  	ret = mp_ops->cpu_disable(cpu); @@ -152,11 +152,7 @@ int __cpu_disable(void)  	flush_cache_all();  	local_flush_tlb_all(); -	read_lock(&tasklist_lock); -	for_each_process(p) -		if (p->mm) -			cpumask_clear_cpu(cpu, mm_cpumask(p->mm)); -	read_unlock(&tasklist_lock); +	clear_tasks_mm_cpumask(cpu);  	return 0;  } @@ -178,7 +174,7 @@ void native_play_dead(void)  }  #endif -asmlinkage void __cpuinit start_secondary(void) +asmlinkage void start_secondary(void)  {  	unsigned int cpu = smp_processor_id();  	struct mm_struct *mm = &init_mm; @@ -207,7 +203,7 @@ asmlinkage void __cpuinit start_secondary(void)  	set_cpu_online(cpu, true);  	per_cpu(cpu_state, cpu) = CPU_ONLINE; -	cpu_idle(); +	cpu_startup_entry(CPUHP_ONLINE);  }  extern struct { @@ -219,22 +215,10 @@ extern struct {  	void *thread_info;  } stack_start; -int __cpuinit __cpu_up(unsigned int cpu) +int __cpu_up(unsigned int cpu, struct task_struct *tsk)  { -	struct task_struct *tsk;  	unsigned long timeout; -	tsk = cpu_data[cpu].idle; -	if (!tsk) { -		tsk = fork_idle(cpu); -		if (IS_ERR(tsk)) { -			pr_err("Failed forking idle task for cpu %d\n", cpu); -			return PTR_ERR(tsk); -		} - -		cpu_data[cpu].idle = tsk; -	} -  	per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;  	/* Fill in data in head.S for secondary cpus */ @@ -323,6 +307,7 @@ void smp_message_recv(unsigned int msg)  		generic_smp_call_function_interrupt();  		break;  	case SMP_MSG_RESCHEDULE: +		scheduler_ipi();  		break;  	case SMP_MSG_FUNCTION_SINGLE:  		generic_smp_call_function_single_interrupt(); diff --git a/arch/sh/kernel/stacktrace.c b/arch/sh/kernel/stacktrace.c index c2e45c48409..bf989e063a0 100644 --- a/arch/sh/kernel/stacktrace.c +++ b/arch/sh/kernel/stacktrace.c @@ -17,15 +17,6 @@  #include <asm/ptrace.h>  #include <asm/stacktrace.h> -static void save_stack_warning(void *data, char *msg) -{ -} - -static void -save_stack_warning_symbol(void *data, char *msg, unsigned long symbol) -{ -} -  static int save_stack_stack(void *data, char *name)  {  	return 0; @@ -51,8 +42,6 @@ static void save_stack_address(void *data, unsigned long addr, int reliable)  }  static const struct stacktrace_ops save_stack_ops = { -	.warning = save_stack_warning, -	.warning_symbol = save_stack_warning_symbol,  	.stack = save_stack_stack,  	.address = save_stack_address,  }; @@ -88,8 +77,6 @@ save_stack_address_nosched(void *data, unsigned long addr, int reliable)  }  static const struct stacktrace_ops save_stack_ops_nosched = { -	.warning = save_stack_warning, -	.warning_symbol = save_stack_warning_symbol,  	.stack = save_stack_stack,  	.address = save_stack_address_nosched,  }; diff --git a/arch/sh/kernel/sys_sh.c b/arch/sh/kernel/sys_sh.c index 81f58371613..8c6a350df75 100644 --- a/arch/sh/kernel/sys_sh.c +++ b/arch/sh/kernel/sys_sh.c @@ -88,7 +88,7 @@ asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op)  	}  	if (op & CACHEFLUSH_I) -		flush_cache_all(); +		flush_icache_range(addr, addr+len);  	up_read(¤t->mm->mmap_sem);  	return 0; diff --git a/arch/sh/kernel/sys_sh32.c b/arch/sh/kernel/sys_sh32.c index f56b6fe5c5d..b66d1c62eb1 100644 --- a/arch/sh/kernel/sys_sh32.c +++ b/arch/sh/kernel/sys_sh32.c @@ -21,17 +21,14 @@   * sys_pipe() is the normal C calling standard for creating   * a pipe. It's not the way Unix traditionally does this, though.   */ -asmlinkage int sys_sh_pipe(unsigned long r4, unsigned long r5, -	unsigned long r6, unsigned long r7, -	struct pt_regs __regs) +asmlinkage int sys_sh_pipe(void)  { -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);  	int fd[2];  	int error;  	error = do_pipe_flags(fd, 0);  	if (!error) { -		regs->regs[1] = fd[1]; +		current_pt_regs()->regs[1] = fd[1];  		return fd[0];  	}  	return error; @@ -60,27 +57,3 @@ asmlinkage int sys_fadvise64_64_wrapper(int fd, u32 offset0, u32 offset1,  				(u64)len0 << 32 | len1,	advice);  #endif  } - -#if defined(CONFIG_CPU_SH2) || defined(CONFIG_CPU_SH2A) -#define SYSCALL_ARG3	"trapa #0x23" -#else -#define SYSCALL_ARG3	"trapa #0x13" -#endif - -/* - * Do a system call from kernel instead of calling sys_execve so we - * end up with proper pt_regs. - */ -int kernel_execve(const char *filename, -		  const char *const argv[], -		  const char *const envp[]) -{ -	register long __sc0 __asm__ ("r3") = __NR_execve; -	register long __sc4 __asm__ ("r4") = (long) filename; -	register long __sc5 __asm__ ("r5") = (long) argv; -	register long __sc6 __asm__ ("r6") = (long) envp; -	__asm__ __volatile__ (SYSCALL_ARG3 : "=z" (__sc0) -			: "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6) -			: "memory"); -	return __sc0; -} diff --git a/arch/sh/kernel/sys_sh64.c b/arch/sh/kernel/sys_sh64.c deleted file mode 100644 index c5a38c4bf41..00000000000 --- a/arch/sh/kernel/sys_sh64.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * arch/sh/kernel/sys_sh64.c - * - * Copyright (C) 2000, 2001  Paolo Alberelli - * - * This file contains various random system calls that - * have a non-standard calling sequence on the Linux/SH5 - * platform. - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#include <linux/errno.h> -#include <linux/rwsem.h> -#include <linux/sched.h> -#include <linux/mm.h> -#include <linux/fs.h> -#include <linux/smp.h> -#include <linux/sem.h> -#include <linux/msg.h> -#include <linux/shm.h> -#include <linux/stat.h> -#include <linux/mman.h> -#include <linux/file.h> -#include <linux/syscalls.h> -#include <linux/ipc.h> -#include <asm/uaccess.h> -#include <asm/ptrace.h> -#include <asm/unistd.h> - -/* - * Do a system call from kernel instead of calling sys_execve so we - * end up with proper pt_regs. - */ -int kernel_execve(const char *filename, -		  const char *const argv[], -		  const char *const envp[]) -{ -	register unsigned long __sc0 __asm__ ("r9") = ((0x13 << 16) | __NR_execve); -	register unsigned long __sc2 __asm__ ("r2") = (unsigned long) filename; -	register unsigned long __sc3 __asm__ ("r3") = (unsigned long) argv; -	register unsigned long __sc4 __asm__ ("r4") = (unsigned long) envp; -	__asm__ __volatile__ ("trapa	%1 !\t\t\t execve(%2,%3,%4)" -	: "=r" (__sc0) -	: "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4) ); -	__asm__ __volatile__ ("!dummy	%0 %1 %2 %3" -	: : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4) : "memory"); -	return __sc0; -} diff --git a/arch/sh/kernel/syscalls_32.S b/arch/sh/kernel/syscalls_32.S index e872e81add8..734234be2f0 100644 --- a/arch/sh/kernel/syscalls_32.S +++ b/arch/sh/kernel/syscalls_32.S @@ -185,7 +185,7 @@ ENTRY(sys_call_table)  	.long sys_ni_syscall	/* vm86 */  	.long sys_ni_syscall	/* old "query_module" */  	.long sys_poll -	.long sys_nfsservctl +	.long sys_ni_syscall	/* was nfsservctl */  	.long sys_setresgid16	/* 170 */  	.long sys_getresgid16  	.long sys_prctl @@ -204,8 +204,8 @@ ENTRY(sys_call_table)  	.long sys_capset           /* 185 */  	.long sys_sigaltstack  	.long sys_sendfile -	.long sys_ni_syscall	/* streams1 */ -	.long sys_ni_syscall	/* streams2 */ +	.long sys_ni_syscall	/* getpmsg */ +	.long sys_ni_syscall	/* putpmsg */  	.long sys_vfork            /* 190 */  	.long sys_getrlimit  	.long sys_mmap2 @@ -259,8 +259,8 @@ ENTRY(sys_call_table)  	.long sys_futex		/* 240 */  	.long sys_sched_setaffinity  	.long sys_sched_getaffinity -	.long sys_ni_syscall -	.long sys_ni_syscall +	.long sys_ni_syscall	/* reserved for set_thread_area */ +	.long sys_ni_syscall	/* reserved for get_thread_area */  	.long sys_io_setup	/* 245 */  	.long sys_io_destroy  	.long sys_io_getevents @@ -375,3 +375,14 @@ ENTRY(sys_call_table)  	.long sys_sendmsg		/* 355 */  	.long sys_recvmsg  	.long sys_recvmmsg +	.long sys_accept4 +	.long sys_name_to_handle_at +	.long sys_open_by_handle_at	/* 360 */ +	.long sys_clock_adjtime +	.long sys_syncfs +	.long sys_sendmmsg +	.long sys_setns +	.long sys_process_vm_readv	/* 365 */ +	.long sys_process_vm_writev +	.long sys_kcmp +	.long sys_finit_module diff --git a/arch/sh/kernel/syscalls_64.S b/arch/sh/kernel/syscalls_64.S index 66585708ce9..579fcb9a896 100644 --- a/arch/sh/kernel/syscalls_64.S +++ b/arch/sh/kernel/syscalls_64.S @@ -189,7 +189,7 @@ sys_call_table:  	.long sys_ni_syscall	/* vm86 */  	.long sys_ni_syscall	/* old "query_module" */  	.long sys_poll -	.long sys_nfsservctl +	.long sys_ni_syscall	/* was nfsservctl */  	.long sys_setresgid16		/* 170 */  	.long sys_getresgid16  	.long sys_prctl @@ -208,8 +208,8 @@ sys_call_table:  	.long sys_capset		/* 185 */  	.long sys_sigaltstack  	.long sys_sendfile -	.long sys_ni_syscall	/* streams1 */ -	.long sys_ni_syscall	/* streams2 */ +	.long sys_ni_syscall	/* getpmsg */ +	.long sys_ni_syscall	/* putpmsg */  	.long sys_vfork			/* 190 */  	.long sys_getrlimit  	.long sys_mmap2 @@ -296,8 +296,8 @@ sys_call_table:  	.long sys_futex  	.long sys_sched_setaffinity  	.long sys_sched_getaffinity	/* 270 */ -	.long sys_ni_syscall -	.long sys_ni_syscall +	.long sys_ni_syscall		/* reserved for set_thread_area */ +	.long sys_ni_syscall		/* reserved for get_thread_area */  	.long sys_io_setup  	.long sys_io_destroy  	.long sys_io_getevents		/* 275 */ @@ -396,3 +396,13 @@ sys_call_table:  	.long sys_fanotify_init  	.long sys_fanotify_mark  	.long sys_prlimit64 +	.long sys_name_to_handle_at	/* 370 */ +	.long sys_open_by_handle_at +	.long sys_clock_adjtime +	.long sys_syncfs +	.long sys_sendmmsg +	.long sys_setns			/* 375 */ +	.long sys_process_vm_readv +	.long sys_process_vm_writev +	.long sys_kcmp +	.long sys_finit_module diff --git a/arch/sh/kernel/time.c b/arch/sh/kernel/time.c index 8a0072de2bc..552c8fcf941 100644 --- a/arch/sh/kernel/time.c +++ b/arch/sh/kernel/time.c @@ -21,7 +21,6 @@  #include <linux/smp.h>  #include <linux/rtc.h>  #include <asm/clock.h> -#include <asm/hwblk.h>  #include <asm/rtc.h>  /* Dummy RTC ops */ @@ -110,7 +109,6 @@ void __init time_init(void)  	if (board_time_init)  		board_time_init(); -	hwblk_init();  	clk_init();  	late_time_init = sh_late_time_init; diff --git a/arch/sh/kernel/topology.c b/arch/sh/kernel/topology.c index 948fdb65693..772caffba22 100644 --- a/arch/sh/kernel/topology.c +++ b/arch/sh/kernel/topology.c @@ -11,12 +11,15 @@  #include <linux/cpumask.h>  #include <linux/init.h>  #include <linux/percpu.h> +#include <linux/topology.h>  #include <linux/node.h>  #include <linux/nodemask.h> +#include <linux/export.h>  static DEFINE_PER_CPU(struct cpu, cpu_devices);  cpumask_t cpu_core_map[NR_CPUS]; +EXPORT_SYMBOL(cpu_core_map);  static cpumask_t cpu_coregroup_map(unsigned int cpu)  { @@ -24,7 +27,7 @@ static cpumask_t cpu_coregroup_map(unsigned int cpu)  	 * Presently all SH-X3 SMP cores are multi-cores, so just keep it  	 * simple until we have a method for determining topology..  	 */ -	return cpu_possible_map; +	return *cpu_possible_mask;  }  const struct cpumask *cpu_coregroup_mask(unsigned int cpu) diff --git a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c index 0830c2a9f71..dfdad72c61c 100644 --- a/arch/sh/kernel/traps.c +++ b/arch/sh/kernel/traps.c @@ -6,8 +6,79 @@  #include <linux/sched.h>  #include <linux/uaccess.h>  #include <linux/hardirq.h> +#include <linux/kernel.h> +#include <linux/kexec.h> +#include <linux/module.h>  #include <asm/unwinder.h> -#include <asm/system.h> +#include <asm/traps.h> + +static DEFINE_SPINLOCK(die_lock); + +void die(const char *str, struct pt_regs *regs, long err) +{ +	static int die_counter; + +	oops_enter(); + +	spin_lock_irq(&die_lock); +	console_verbose(); +	bust_spinlocks(1); + +	printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); +	print_modules(); +	show_regs(regs); + +	printk("Process: %s (pid: %d, stack limit = %p)\n", current->comm, +			task_pid_nr(current), task_stack_page(current) + 1); + +	if (!user_mode(regs) || in_interrupt()) +		dump_mem("Stack: ", regs->regs[15], THREAD_SIZE + +			 (unsigned long)task_stack_page(current)); + +	notify_die(DIE_OOPS, str, regs, err, 255, SIGSEGV); + +	bust_spinlocks(0); +	add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE); +	spin_unlock_irq(&die_lock); +	oops_exit(); + +	if (kexec_should_crash(current)) +		crash_kexec(regs); + +	if (in_interrupt()) +		panic("Fatal exception in interrupt"); + +	if (panic_on_oops) +		panic("Fatal exception"); + +	do_exit(SIGSEGV); +} + +void die_if_kernel(const char *str, struct pt_regs *regs, long err) +{ +	if (!user_mode(regs)) +		die(str, regs, err); +} + +/* + * try and fix up kernelspace address errors + * - userspace errors just cause EFAULT to be returned, resulting in SEGV + * - kernel/userspace interfaces cause a jump to an appropriate handler + * - other kernel errors are bad + */ +void die_if_no_fixup(const char *str, struct pt_regs *regs, long err) +{ +	if (!user_mode(regs)) { +		const struct exception_table_entry *fixup; +		fixup = search_exception_tables(regs->pc); +		if (fixup) { +			regs->pc = fixup->fixup; +			return; +		} + +		die(str, regs, err); +	} +}  #ifdef CONFIG_GENERIC_BUG  static void handle_BUG(struct pt_regs *regs) diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c index 3484c2f65ab..ff639342a8b 100644 --- a/arch/sh/kernel/traps_32.c +++ b/arch/sh/kernel/traps_32.c @@ -16,21 +16,20 @@  #include <linux/hardirq.h>  #include <linux/init.h>  #include <linux/spinlock.h> -#include <linux/module.h>  #include <linux/kallsyms.h>  #include <linux/io.h>  #include <linux/bug.h>  #include <linux/debug_locks.h>  #include <linux/kdebug.h> -#include <linux/kexec.h>  #include <linux/limits.h>  #include <linux/sysfs.h>  #include <linux/uaccess.h>  #include <linux/perf_event.h> -#include <asm/system.h>  #include <asm/alignment.h>  #include <asm/fpu.h>  #include <asm/kprobes.h> +#include <asm/traps.h> +#include <asm/bl_bit.h>  #ifdef CONFIG_CPU_SH2  # define TRAP_RESERVED_INST	4 @@ -47,103 +46,6 @@  #define TRAP_ILLEGAL_SLOT_INST	13  #endif -static void dump_mem(const char *str, unsigned long bottom, unsigned long top) -{ -	unsigned long p; -	int i; - -	printk("%s(0x%08lx to 0x%08lx)\n", str, bottom, top); - -	for (p = bottom & ~31; p < top; ) { -		printk("%04lx: ", p & 0xffff); - -		for (i = 0; i < 8; i++, p += 4) { -			unsigned int val; - -			if (p < bottom || p >= top) -				printk("         "); -			else { -				if (__get_user(val, (unsigned int __user *)p)) { -					printk("\n"); -					return; -				} -				printk("%08x ", val); -			} -		} -		printk("\n"); -	} -} - -static DEFINE_SPINLOCK(die_lock); - -void die(const char * str, struct pt_regs * regs, long err) -{ -	static int die_counter; - -	oops_enter(); - -	spin_lock_irq(&die_lock); -	console_verbose(); -	bust_spinlocks(1); - -	printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); -	sysfs_printk_last_file(); -	print_modules(); -	show_regs(regs); - -	printk("Process: %s (pid: %d, stack limit = %p)\n", current->comm, -			task_pid_nr(current), task_stack_page(current) + 1); - -	if (!user_mode(regs) || in_interrupt()) -		dump_mem("Stack: ", regs->regs[15], THREAD_SIZE + -			 (unsigned long)task_stack_page(current)); - -	notify_die(DIE_OOPS, str, regs, err, 255, SIGSEGV); - -	bust_spinlocks(0); -	add_taint(TAINT_DIE); -	spin_unlock_irq(&die_lock); -	oops_exit(); - -	if (kexec_should_crash(current)) -		crash_kexec(regs); - -	if (in_interrupt()) -		panic("Fatal exception in interrupt"); - -	if (panic_on_oops) -		panic("Fatal exception"); - -	do_exit(SIGSEGV); -} - -static inline void die_if_kernel(const char *str, struct pt_regs *regs, -				 long err) -{ -	if (!user_mode(regs)) -		die(str, regs, err); -} - -/* - * try and fix up kernelspace address errors - * - userspace errors just cause EFAULT to be returned, resulting in SEGV - * - kernel/userspace interfaces cause a jump to an appropriate handler - * - other kernel errors are bad - */ -static void die_if_no_fixup(const char * str, struct pt_regs * regs, long err) -{ -	if (!user_mode(regs)) { -		const struct exception_table_entry *fixup; -		fixup = search_exception_tables(regs->pc); -		if (fixup) { -			regs->pc = fixup->fixup; -			return; -		} - -		die(str, regs, err); -	} -} -  static inline void sign_extend(unsigned int count, unsigned char *dst)  {  #ifdef __LITTLE_ENDIAN__ @@ -317,6 +219,35 @@ static int handle_unaligned_ins(insn_size_t instruction, struct pt_regs *regs,  			break;  		}  		break; + +	case 9: /* mov.w @(disp,PC),Rn */ +		srcu = (unsigned char __user *)regs->pc; +		srcu += 4; +		srcu += (instruction & 0x00FF) << 1; +		dst = (unsigned char *)rn; +		*(unsigned long *)dst = 0; + +#if !defined(__LITTLE_ENDIAN__) +		dst += 2; +#endif + +		if (ma->from(dst, srcu, 2)) +			goto fetch_fault; +		sign_extend(2, dst); +		ret = 0; +		break; + +	case 0xd: /* mov.l @(disp,PC),Rn */ +		srcu = (unsigned char __user *)(regs->pc & ~0x3); +		srcu += 4; +		srcu += (instruction & 0x00FF) << 2; +		dst = (unsigned char *)rn; +		*(unsigned long *)dst = 0; + +		if (ma->from(dst, srcu, 4)) +			goto fetch_fault; +		ret = 0; +		break;  	}  	return ret; @@ -394,7 +325,7 @@ int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,  	 */  	if (!expected) {  		unaligned_fixups_notify(current, instruction, regs); -		perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, 0, +		perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1,  			      regs, address);  	} @@ -467,6 +398,7 @@ int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,  		case 0x0500: /* mov.w @(disp,Rm),R0 */  			goto simple;  		case 0x0B00: /* bf   lab - no delayslot*/ +			ret = 0;  			break;  		case 0x0F00: /* bf/s lab */  			ret = handle_delayslot(regs, instruction, ma); @@ -480,6 +412,7 @@ int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,  			}  			break;  		case 0x0900: /* bt   lab - no delayslot */ +			ret = 0;  			break;  		case 0x0D00: /* bt/s lab */  			ret = handle_delayslot(regs, instruction, ma); @@ -495,6 +428,9 @@ int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,  		}  		break; +	case 0x9000: /* mov.w @(disp,Rm),Rn */ +		goto simple; +  	case 0xA000: /* bra label */  		ret = handle_delayslot(regs, instruction, ma);  		if (ret==0) @@ -508,6 +444,9 @@ int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,  			regs->pc += SH_PC_12BIT_OFFSET(instruction);  		}  		break; + +	case 0xD000: /* mov.l @(disp,Rm),Rn */ +		goto simple;  	}  	return ret; @@ -655,9 +594,7 @@ int is_dsp_inst(struct pt_regs *regs)  #endif /* CONFIG_SH_DSP */  #ifdef CONFIG_CPU_SH2A -asmlinkage void do_divide_error(unsigned long r4, unsigned long r5, -				unsigned long r6, unsigned long r7, -				struct pt_regs __regs) +asmlinkage void do_divide_error(unsigned long r4)  {  	siginfo_t info; @@ -674,11 +611,9 @@ asmlinkage void do_divide_error(unsigned long r4, unsigned long r5,  }  #endif -asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5, -				unsigned long r6, unsigned long r7, -				struct pt_regs __regs) +asmlinkage void do_reserved_inst(void)  { -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0); +	struct pt_regs *regs = current_pt_regs();  	unsigned long error_code;  	struct task_struct *tsk = current; @@ -762,11 +697,9 @@ static int emulate_branch(unsigned short inst, struct pt_regs *regs)  }  #endif -asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5, -				unsigned long r6, unsigned long r7, -				struct pt_regs __regs) +asmlinkage void do_illegal_slot_inst(void)  { -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0); +	struct pt_regs *regs = current_pt_regs();  	unsigned long inst;  	struct task_struct *tsk = current; @@ -791,18 +724,15 @@ asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5,  	die_if_no_fixup("illegal slot instruction", regs, inst);  } -asmlinkage void do_exception_error(unsigned long r4, unsigned long r5, -				   unsigned long r6, unsigned long r7, -				   struct pt_regs __regs) +asmlinkage void do_exception_error(void)  { -	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);  	long ex;  	ex = lookup_exception_vector(); -	die_if_kernel("exception", regs, ex); +	die_if_kernel("exception", current_pt_regs(), ex);  } -void __cpuinit per_cpu_trap_init(void) +void per_cpu_trap_init(void)  {  	extern void *vbr_base; @@ -863,26 +793,3 @@ void __init trap_init(void)  	set_exception_table_vec(TRAP_UBC, breakpoint_trap_handler);  #endif  } - -void show_stack(struct task_struct *tsk, unsigned long *sp) -{ -	unsigned long stack; - -	if (!tsk) -		tsk = current; -	if (tsk == current) -		sp = (unsigned long *)current_stack_pointer; -	else -		sp = (unsigned long *)tsk->thread.sp; - -	stack = (unsigned long)sp; -	dump_mem("Stack: ", stack, THREAD_SIZE + -		 (unsigned long)task_stack_page(tsk)); -	show_trace(tsk, sp, NULL); -} - -void dump_stack(void) -{ -	show_stack(NULL, NULL); -} -EXPORT_SYMBOL(dump_stack); diff --git a/arch/sh/kernel/traps_64.c b/arch/sh/kernel/traps_64.c index 6713ca97e55..112ea11c030 100644 --- a/arch/sh/kernel/traps_64.c +++ b/arch/sh/kernel/traps_64.c @@ -25,288 +25,27 @@  #include <linux/sysctl.h>  #include <linux/module.h>  #include <linux/perf_event.h> -#include <asm/system.h>  #include <asm/uaccess.h>  #include <asm/io.h> -#include <asm/atomic.h> +#include <asm/alignment.h>  #include <asm/processor.h>  #include <asm/pgtable.h>  #include <asm/fpu.h> -#undef DEBUG_EXCEPTION -#ifdef DEBUG_EXCEPTION -/* implemented in ../lib/dbg.c */ -extern void show_excp_regs(char *fname, int trapnr, int signr, -			   struct pt_regs *regs); -#else -#define show_excp_regs(a, b, c, d) -#endif - -static void do_unhandled_exception(int trapnr, int signr, char *str, char *fn_name, -		unsigned long error_code, struct pt_regs *regs, struct task_struct *tsk); - -#define DO_ERROR(trapnr, signr, str, name, tsk) \ -asmlinkage void do_##name(unsigned long error_code, struct pt_regs *regs) \ -{ \ -	do_unhandled_exception(trapnr, signr, str, __stringify(name), error_code, regs, current); \ -} - -static DEFINE_SPINLOCK(die_lock); - -void die(const char * str, struct pt_regs * regs, long err) -{ -	console_verbose(); -	spin_lock_irq(&die_lock); -	printk("%s: %lx\n", str, (err & 0xffffff)); -	show_regs(regs); -	spin_unlock_irq(&die_lock); -	do_exit(SIGSEGV); -} - -static inline void die_if_kernel(const char * str, struct pt_regs * regs, long err) -{ -	if (!user_mode(regs)) -		die(str, regs, err); -} - -static void die_if_no_fixup(const char * str, struct pt_regs * regs, long err) -{ -	if (!user_mode(regs)) { -		const struct exception_table_entry *fixup; -		fixup = search_exception_tables(regs->pc); -		if (fixup) { -			regs->pc = fixup->fixup; -			return; -		} -		die(str, regs, err); -	} -} - -DO_ERROR(13, SIGILL,  "illegal slot instruction", illegal_slot_inst, current) -DO_ERROR(87, SIGSEGV, "address error (exec)", address_error_exec, current) - - -/* Implement misaligned load/store handling for kernel (and optionally for user -   mode too).  Limitation : only SHmedia mode code is handled - there is no -   handling at all for misaligned accesses occurring in SHcompact code yet. */ - -static int misaligned_fixup(struct pt_regs *regs); - -asmlinkage void do_address_error_load(unsigned long error_code, struct pt_regs *regs) -{ -	if (misaligned_fixup(regs) < 0) { -		do_unhandled_exception(7, SIGSEGV, "address error(load)", -				"do_address_error_load", -				error_code, regs, current); -	} -	return; -} - -asmlinkage void do_address_error_store(unsigned long error_code, struct pt_regs *regs) -{ -	if (misaligned_fixup(regs) < 0) { -		do_unhandled_exception(8, SIGSEGV, "address error(store)", -				"do_address_error_store", -				error_code, regs, current); -	} -	return; -} - -#if defined(CONFIG_SH64_ID2815_WORKAROUND) - -#define OPCODE_INVALID      0 -#define OPCODE_USER_VALID   1 -#define OPCODE_PRIV_VALID   2 - -/* getcon/putcon - requires checking which control register is referenced. */ -#define OPCODE_CTRL_REG     3 - -/* Table of valid opcodes for SHmedia mode. -   Form a 10-bit value by concatenating the major/minor opcodes i.e. -   opcode[31:26,20:16].  The 6 MSBs of this value index into the following -   array.  The 4 LSBs select the bit-pair in the entry (bits 1:0 correspond to -   LSBs==4'b0000 etc). */ -static unsigned long shmedia_opcode_table[64] = { -	0x55554044,0x54445055,0x15141514,0x14541414,0x00000000,0x10001000,0x01110055,0x04050015, -	0x00000444,0xc0000000,0x44545515,0x40405555,0x55550015,0x10005555,0x55555505,0x04050000, -	0x00000555,0x00000404,0x00040445,0x15151414,0x00000000,0x00000000,0x00000000,0x00000000, -	0x00000055,0x40404444,0x00000404,0xc0009495,0x00000000,0x00000000,0x00000000,0x00000000, -	0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555, -	0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555, -	0x80005050,0x04005055,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555, -	0x81055554,0x00000404,0x55555555,0x55555555,0x00000000,0x00000000,0x00000000,0x00000000 -}; - -void do_reserved_inst(unsigned long error_code, struct pt_regs *regs) -{ -	/* Workaround SH5-101 cut2 silicon defect #2815 : -	   in some situations, inter-mode branches from SHcompact -> SHmedia -	   which should take ITLBMISS or EXECPROT exceptions at the target -	   falsely take RESINST at the target instead. */ - -	unsigned long opcode = 0x6ff4fff0; /* guaranteed reserved opcode */ -	unsigned long pc, aligned_pc; -	int get_user_error; -	int trapnr = 12; -	int signr = SIGILL; -	char *exception_name = "reserved_instruction"; - -	pc = regs->pc; -	if ((pc & 3) == 1) { -		/* SHmedia : check for defect.  This requires executable vmas -		   to be readable too. */ -		aligned_pc = pc & ~3; -		if (!access_ok(VERIFY_READ, aligned_pc, sizeof(unsigned long))) { -			get_user_error = -EFAULT; -		} else { -			get_user_error = __get_user(opcode, (unsigned long *)aligned_pc); -		} -		if (get_user_error >= 0) { -			unsigned long index, shift; -			unsigned long major, minor, combined; -			unsigned long reserved_field; -			reserved_field = opcode & 0xf; /* These bits are currently reserved as zero in all valid opcodes */ -			major = (opcode >> 26) & 0x3f; -			minor = (opcode >> 16) & 0xf; -			combined = (major << 4) | minor; -			index = major; -			shift = minor << 1; -			if (reserved_field == 0) { -				int opcode_state = (shmedia_opcode_table[index] >> shift) & 0x3; -				switch (opcode_state) { -					case OPCODE_INVALID: -						/* Trap. */ -						break; -					case OPCODE_USER_VALID: -						/* Restart the instruction : the branch to the instruction will now be from an RTE -						   not from SHcompact so the silicon defect won't be triggered. */ -						return; -					case OPCODE_PRIV_VALID: -						if (!user_mode(regs)) { -							/* Should only ever get here if a module has -							   SHcompact code inside it.  If so, the same fix up is needed. */ -							return; /* same reason */ -						} -						/* Otherwise, user mode trying to execute a privileged instruction - -						   fall through to trap. */ -						break; -					case OPCODE_CTRL_REG: -						/* If in privileged mode, return as above. */ -						if (!user_mode(regs)) return; -						/* In user mode ... */ -						if (combined == 0x9f) { /* GETCON */ -							unsigned long regno = (opcode >> 20) & 0x3f; -							if (regno >= 62) { -								return; -							} -							/* Otherwise, reserved or privileged control register, => trap */ -						} else if (combined == 0x1bf) { /* PUTCON */ -							unsigned long regno = (opcode >> 4) & 0x3f; -							if (regno >= 62) { -								return; -							} -							/* Otherwise, reserved or privileged control register, => trap */ -						} else { -							/* Trap */ -						} -						break; -					default: -						/* Fall through to trap. */ -						break; -				} -			} -			/* fall through to normal resinst processing */ -		} else { -			/* Error trying to read opcode.  This typically means a -			   real fault, not a RESINST any more.  So change the -			   codes. */ -			trapnr = 87; -			exception_name = "address error (exec)"; -			signr = SIGSEGV; -		} -	} - -	do_unhandled_exception(trapnr, signr, exception_name, "do_reserved_inst", error_code, regs, current); -} - -#else /* CONFIG_SH64_ID2815_WORKAROUND */ - -/* If the workaround isn't needed, this is just a straightforward reserved -   instruction */ -DO_ERROR(12, SIGILL,  "reserved instruction", reserved_inst, current) - -#endif /* CONFIG_SH64_ID2815_WORKAROUND */ - -/* Called with interrupts disabled */ -asmlinkage void do_exception_error(unsigned long ex, struct pt_regs *regs) -{ -	show_excp_regs(__func__, -1, -1, regs); -	die_if_kernel("exception", regs, ex); -} - -int do_unknown_trapa(unsigned long scId, struct pt_regs *regs) -{ -	/* Syscall debug */ -        printk("System call ID error: [0x1#args:8 #syscall:16  0x%lx]\n", scId); - -	die_if_kernel("unknown trapa", regs, scId); - -	return -ENOSYS; -} - -void show_stack(struct task_struct *tsk, unsigned long *sp) -{ -#ifdef CONFIG_KALLSYMS -	extern void sh64_unwind(struct pt_regs *regs); -	struct pt_regs *regs; - -	regs = tsk ? tsk->thread.kregs : NULL; - -	sh64_unwind(regs); -#else -	printk(KERN_ERR "Can't backtrace on sh64 without CONFIG_KALLSYMS\n"); -#endif -} - -void show_task(unsigned long *sp) -{ -	show_stack(NULL, sp); -} - -void dump_stack(void) -{ -	show_task(NULL); -} -/* Needed by any user of WARN_ON in view of the defn in include/asm-sh/bug.h */ -EXPORT_SYMBOL(dump_stack); - -static void do_unhandled_exception(int trapnr, int signr, char *str, char *fn_name, -		unsigned long error_code, struct pt_regs *regs, struct task_struct *tsk) -{ -	show_excp_regs(fn_name, trapnr, signr, regs); -	tsk->thread.error_code = error_code; -	tsk->thread.trap_no = trapnr; - -	if (user_mode(regs)) -		force_sig(signr, tsk); - -	die_if_no_fixup(str, regs, error_code); -} - -static int read_opcode(unsigned long long pc, unsigned long *result_opcode, int from_user_mode) +static int read_opcode(reg_size_t pc, insn_size_t *result_opcode, int from_user_mode)  {  	int get_user_error;  	unsigned long aligned_pc; -	unsigned long opcode; +	insn_size_t opcode;  	if ((pc & 3) == 1) {  		/* SHmedia */  		aligned_pc = pc & ~3;  		if (from_user_mode) { -			if (!access_ok(VERIFY_READ, aligned_pc, sizeof(unsigned long))) { +			if (!access_ok(VERIFY_READ, aligned_pc, sizeof(insn_size_t))) {  				get_user_error = -EFAULT;  			} else { -				get_user_error = __get_user(opcode, (unsigned long *)aligned_pc); +				get_user_error = __get_user(opcode, (insn_size_t *)aligned_pc);  				*result_opcode = opcode;  			}  			return get_user_error; @@ -314,7 +53,7 @@ static int read_opcode(unsigned long long pc, unsigned long *result_opcode, int  			/* If the fault was in the kernel, we can either read  			 * this directly, or if not, we fault.  			*/ -			*result_opcode = *(unsigned long *) aligned_pc; +			*result_opcode = *(insn_size_t *)aligned_pc;  			return 0;  		}  	} else if ((pc & 1) == 0) { @@ -340,17 +79,23 @@ static int address_is_sign_extended(__u64 a)  #endif  } +/* return -1 for fault, 0 for OK */  static int generate_and_check_address(struct pt_regs *regs, -				      __u32 opcode, +				      insn_size_t opcode,  				      int displacement_not_indexed,  				      int width_shift,  				      __u64 *address)  { -	/* return -1 for fault, 0 for OK */ -  	__u64 base_address, addr;  	int basereg; +	switch (1 << width_shift) { +	case 1: inc_unaligned_byte_access(); break; +	case 2: inc_unaligned_word_access(); break; +	case 4: inc_unaligned_dword_access(); break; +	case 8: inc_unaligned_multi_access(); break; +	} +  	basereg = (opcode >> 20) & 0x3f;  	base_address = regs->regs[basereg];  	if (displacement_not_indexed) { @@ -367,28 +112,28 @@ static int generate_and_check_address(struct pt_regs *regs,  	}  	/* Check sign extended */ -	if (!address_is_sign_extended(addr)) { +	if (!address_is_sign_extended(addr))  		return -1; -	}  	/* Check accessible.  For misaligned access in the kernel, assume the  	   address is always accessible (and if not, just fault when the  	   load/store gets done.) */  	if (user_mode(regs)) { -		if (addr >= TASK_SIZE) { +		inc_unaligned_user_access(); + +		if (addr >= TASK_SIZE)  			return -1; -		} -		/* Do access_ok check later - it depends on whether it's a load or a store. */ -	} +	} else +		inc_unaligned_kernel_access();  	*address = addr; + +	perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, addr); +	unaligned_fixups_notify(current, opcode, regs); +  	return 0;  } -static int user_mode_unaligned_fixup_count = 10; -static int user_mode_unaligned_fixup_enable = 1; -static int kernel_mode_unaligned_fixup_count = 32; -  static void misaligned_kernel_word_load(__u64 address, int do_sign_extend, __u64 *result)  {  	unsigned short x; @@ -418,7 +163,7 @@ static void misaligned_kernel_word_store(__u64 address, __u64 value)  }  static int misaligned_load(struct pt_regs *regs, -			   __u32 opcode, +			   insn_size_t opcode,  			   int displacement_not_indexed,  			   int width_shift,  			   int do_sign_extend) @@ -430,11 +175,8 @@ static int misaligned_load(struct pt_regs *regs,  	error = generate_and_check_address(regs, opcode,  			displacement_not_indexed, width_shift, &address); -	if (error < 0) { +	if (error < 0)  		return error; -	} - -	perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, 0, regs, address);  	destreg = (opcode >> 4) & 0x3f;  	if (user_mode(regs)) { @@ -493,11 +235,10 @@ static int misaligned_load(struct pt_regs *regs,  	}  	return 0; -  }  static int misaligned_store(struct pt_regs *regs, -			    __u32 opcode, +			    insn_size_t opcode,  			    int displacement_not_indexed,  			    int width_shift)  { @@ -508,11 +249,8 @@ static int misaligned_store(struct pt_regs *regs,  	error = generate_and_check_address(regs, opcode,  			displacement_not_indexed, width_shift, &address); -	if (error < 0) { +	if (error < 0)  		return error; -	} - -	perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, 0, regs, address);  	srcreg = (opcode >> 4) & 0x3f;  	if (user_mode(regs)) { @@ -566,13 +304,12 @@ static int misaligned_store(struct pt_regs *regs,  	}  	return 0; -  }  /* Never need to fix up misaligned FPU accesses within the kernel since that's a real     error. */  static int misaligned_fpu_load(struct pt_regs *regs, -			   __u32 opcode, +			   insn_size_t opcode,  			   int displacement_not_indexed,  			   int width_shift,  			   int do_paired_load) @@ -584,11 +321,8 @@ static int misaligned_fpu_load(struct pt_regs *regs,  	error = generate_and_check_address(regs, opcode,  			displacement_not_indexed, width_shift, &address); -	if (error < 0) { +	if (error < 0)  		return error; -	} - -	perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, 0, regs, address);  	destreg = (opcode >> 4) & 0x3f;  	if (user_mode(regs)) { @@ -644,12 +378,10 @@ static int misaligned_fpu_load(struct pt_regs *regs,  		die ("Misaligned FPU load inside kernel", regs, 0);  		return -1;  	} - -  }  static int misaligned_fpu_store(struct pt_regs *regs, -			   __u32 opcode, +			   insn_size_t opcode,  			   int displacement_not_indexed,  			   int width_shift,  			   int do_paired_load) @@ -661,11 +393,8 @@ static int misaligned_fpu_store(struct pt_regs *regs,  	error = generate_and_check_address(regs, opcode,  			displacement_not_indexed, width_shift, &address); -	if (error < 0) { +	if (error < 0)  		return error; -	} - -	perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, 0, regs, address);  	srcreg = (opcode >> 4) & 0x3f;  	if (user_mode(regs)) { @@ -726,11 +455,13 @@ static int misaligned_fpu_store(struct pt_regs *regs,  static int misaligned_fixup(struct pt_regs *regs)  { -	unsigned long opcode; +	insn_size_t opcode;  	int error;  	int major, minor; +	unsigned int user_action; -	if (!user_mode_unaligned_fixup_enable) +	user_action = unaligned_user_action(); +	if (!(user_action & UM_FIXUP))  		return -1;  	error = read_opcode(regs->pc, &opcode, user_mode(regs)); @@ -740,23 +471,6 @@ static int misaligned_fixup(struct pt_regs *regs)  	major = (opcode >> 26) & 0x3f;  	minor = (opcode >> 16) & 0xf; -	if (user_mode(regs) && (user_mode_unaligned_fixup_count > 0)) { -		--user_mode_unaligned_fixup_count; -		/* Only do 'count' worth of these reports, to remove a potential DoS against syslog */ -		printk("Fixing up unaligned userspace access in \"%s\" pid=%d pc=0x%08x ins=0x%08lx\n", -		       current->comm, task_pid_nr(current), (__u32)regs->pc, opcode); -	} else if (!user_mode(regs) && (kernel_mode_unaligned_fixup_count > 0)) { -		--kernel_mode_unaligned_fixup_count; -		if (in_interrupt()) { -			printk("Fixing up unaligned kernelspace access in interrupt pc=0x%08x ins=0x%08lx\n", -			       (__u32)regs->pc, opcode); -		} else { -			printk("Fixing up unaligned kernelspace access in \"%s\" pid=%d pc=0x%08x ins=0x%08lx\n", -			       current->comm, task_pid_nr(current), (__u32)regs->pc, opcode); -		} -	} - -  	switch (major) {  		case (0x84>>2): /* LD.W */  			error = misaligned_load(regs, opcode, 1, 1, 1); @@ -881,59 +595,202 @@ static int misaligned_fixup(struct pt_regs *regs)  		regs->pc += 4; /* Skip the instruction that's just been emulated */  		return 0;  	} +} + +static void do_unhandled_exception(int signr, char *str, unsigned long error, +				   struct pt_regs *regs) +{ +	if (user_mode(regs)) +		force_sig(signr, current); +	die_if_no_fixup(str, regs, error);  } -static ctl_table unaligned_table[] = { -	{ -		.procname	= "kernel_reports", -		.data		= &kernel_mode_unaligned_fixup_count, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec -	}, -	{ -		.procname	= "user_reports", -		.data		= &user_mode_unaligned_fixup_count, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec -	}, -	{ -		.procname	= "user_enable", -		.data		= &user_mode_unaligned_fixup_enable, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec}, -	{} -}; +#define DO_ERROR(signr, str, name) \ +asmlinkage void do_##name(unsigned long error_code, struct pt_regs *regs) \ +{ \ +	do_unhandled_exception(signr, str, error_code, regs); \ +} -static ctl_table unaligned_root[] = { -	{ -		.procname	= "unaligned_fixup", -		.mode		= 0555, -		.child		= unaligned_table -	}, -	{} -}; +DO_ERROR(SIGILL,  "illegal slot instruction", illegal_slot_inst) +DO_ERROR(SIGSEGV, "address error (exec)", address_error_exec) + +#if defined(CONFIG_SH64_ID2815_WORKAROUND) + +#define OPCODE_INVALID      0 +#define OPCODE_USER_VALID   1 +#define OPCODE_PRIV_VALID   2 -static ctl_table sh64_root[] = { -	{ -		.procname	= "sh64", -		.mode		= 0555, -		.child		= unaligned_root -	}, -	{} +/* getcon/putcon - requires checking which control register is referenced. */ +#define OPCODE_CTRL_REG     3 + +/* Table of valid opcodes for SHmedia mode. +   Form a 10-bit value by concatenating the major/minor opcodes i.e. +   opcode[31:26,20:16].  The 6 MSBs of this value index into the following +   array.  The 4 LSBs select the bit-pair in the entry (bits 1:0 correspond to +   LSBs==4'b0000 etc). */ +static unsigned long shmedia_opcode_table[64] = { +	0x55554044,0x54445055,0x15141514,0x14541414,0x00000000,0x10001000,0x01110055,0x04050015, +	0x00000444,0xc0000000,0x44545515,0x40405555,0x55550015,0x10005555,0x55555505,0x04050000, +	0x00000555,0x00000404,0x00040445,0x15151414,0x00000000,0x00000000,0x00000000,0x00000000, +	0x00000055,0x40404444,0x00000404,0xc0009495,0x00000000,0x00000000,0x00000000,0x00000000, +	0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555, +	0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555, +	0x80005050,0x04005055,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555, +	0x81055554,0x00000404,0x55555555,0x55555555,0x00000000,0x00000000,0x00000000,0x00000000  }; -static struct ctl_table_header *sysctl_header; -static int __init init_sysctl(void) + +/* Workaround SH5-101 cut2 silicon defect #2815 : +   in some situations, inter-mode branches from SHcompact -> SHmedia +   which should take ITLBMISS or EXECPROT exceptions at the target +   falsely take RESINST at the target instead. */ +void do_reserved_inst(unsigned long error_code, struct pt_regs *regs)  { -	sysctl_header = register_sysctl_table(sh64_root); -	return 0; +	insn_size_t opcode = 0x6ff4fff0; /* guaranteed reserved opcode */ +	unsigned long pc, aligned_pc; +	unsigned long index, shift; +	unsigned long major, minor, combined; +	unsigned long reserved_field; +	int opcode_state; +	int get_user_error; +	int signr = SIGILL; +	char *exception_name = "reserved_instruction"; + +	pc = regs->pc; + +	/* SHcompact is not handled */ +	if (unlikely((pc & 3) == 0)) +		goto out; + +	/* SHmedia : check for defect.  This requires executable vmas +	   to be readable too. */ +	aligned_pc = pc & ~3; +	if (!access_ok(VERIFY_READ, aligned_pc, sizeof(insn_size_t))) +		get_user_error = -EFAULT; +	else +		get_user_error = __get_user(opcode, (insn_size_t *)aligned_pc); + +	if (get_user_error < 0) { +		/* +		 * Error trying to read opcode.  This typically means a +		 * real fault, not a RESINST any more.  So change the +		 * codes. +		 */ +		exception_name = "address error (exec)"; +		signr = SIGSEGV; +		goto out; +	} + +	/* These bits are currently reserved as zero in all valid opcodes */ +	reserved_field = opcode & 0xf; +	if (unlikely(reserved_field)) +		goto out;	/* invalid opcode */ + +	major = (opcode >> 26) & 0x3f; +	minor = (opcode >> 16) & 0xf; +	combined = (major << 4) | minor; +	index = major; +	shift = minor << 1; +	opcode_state = (shmedia_opcode_table[index] >> shift) & 0x3; +	switch (opcode_state) { +	case OPCODE_INVALID: +		/* Trap. */ +		break; +	case OPCODE_USER_VALID: +		/* +		 * Restart the instruction: the branch to the instruction +		 * will now be from an RTE not from SHcompact so the +		 * silicon defect won't be triggered. +		 */ +		return; +	case OPCODE_PRIV_VALID: +		if (!user_mode(regs)) { +			/* +			 * Should only ever get here if a module has +			 * SHcompact code inside it. If so, the same fix +			 * up is needed. +			 */ +			return; /* same reason */ +		} + +		/* +		 * Otherwise, user mode trying to execute a privileged +		 * instruction - fall through to trap. +		 */ +		break; +	case OPCODE_CTRL_REG: +		/* If in privileged mode, return as above. */ +		if (!user_mode(regs)) +			return; + +		/* In user mode ... */ +		if (combined == 0x9f) { /* GETCON */ +			unsigned long regno = (opcode >> 20) & 0x3f; + +			if (regno >= 62) +				return; + +			/* reserved/privileged control register => trap */ +		} else if (combined == 0x1bf) { /* PUTCON */ +			unsigned long regno = (opcode >> 4) & 0x3f; + +			if (regno >= 62) +				return; + +			/* reserved/privileged control register => trap */ +		} + +		break; +	default: +		/* Fall through to trap. */ +		break; +	} + +out: +	do_unhandled_exception(signr, exception_name, error_code, regs);  } -__initcall(init_sysctl); +#else /* CONFIG_SH64_ID2815_WORKAROUND */ +/* If the workaround isn't needed, this is just a straightforward reserved +   instruction */ +DO_ERROR(SIGILL, "reserved instruction", reserved_inst) + +#endif /* CONFIG_SH64_ID2815_WORKAROUND */ + +/* Called with interrupts disabled */ +asmlinkage void do_exception_error(unsigned long ex, struct pt_regs *regs) +{ +	die_if_kernel("exception", regs, ex); +} + +asmlinkage int do_unknown_trapa(unsigned long scId, struct pt_regs *regs) +{ +	/* Syscall debug */ +	printk("System call ID error: [0x1#args:8 #syscall:16  0x%lx]\n", scId); + +	die_if_kernel("unknown trapa", regs, scId); + +	return -ENOSYS; +} + +/* Implement misaligned load/store handling for kernel (and optionally for user +   mode too).  Limitation : only SHmedia mode code is handled - there is no +   handling at all for misaligned accesses occurring in SHcompact code yet. */ + +asmlinkage void do_address_error_load(unsigned long error_code, struct pt_regs *regs) +{ +	if (misaligned_fixup(regs) < 0) +		do_unhandled_exception(SIGSEGV, "address error(load)", +				       error_code, regs); +} + +asmlinkage void do_address_error_store(unsigned long error_code, struct pt_regs *regs) +{ +	if (misaligned_fixup(regs) < 0) +		do_unhandled_exception(SIGSEGV, "address error(store)", +				error_code, regs); +}  asmlinkage void do_debug_interrupt(unsigned long code, struct pt_regs *regs)  { @@ -945,16 +802,15 @@ asmlinkage void do_debug_interrupt(unsigned long code, struct pt_regs *regs)  	   of access we make to them - just go direct to their physical  	   addresses. */  	exp_cause = peek_real_address_q(DM_EXP_CAUSE_PHY); -	if (exp_cause & ~4) { +	if (exp_cause & ~4)  		printk("DM.EXP_CAUSE had unexpected bits set (=%08lx)\n",  			(unsigned long)(exp_cause & 0xffffffff)); -	}  	show_state();  	/* Clear all DEBUGINT causes */  	poke_real_address_q(DM_EXP_CAUSE_PHY, 0x0);  } -void __cpuinit per_cpu_trap_init(void) +void per_cpu_trap_init(void)  {  	/* Nothing to do for now, VBR initialization later. */  } diff --git a/arch/sh/kernel/unwinder.c b/arch/sh/kernel/unwinder.c index 468889d958f..521b5432471 100644 --- a/arch/sh/kernel/unwinder.c +++ b/arch/sh/kernel/unwinder.c @@ -13,7 +13,7 @@  #include <linux/spinlock.h>  #include <linux/module.h>  #include <asm/unwinder.h> -#include <asm/atomic.h> +#include <linux/atomic.h>  /*   * This is the most basic stack unwinder an architecture can diff --git a/arch/sh/kernel/vmlinux.lds.S b/arch/sh/kernel/vmlinux.lds.S index 7f8a709c3ad..db88cbf9eaf 100644 --- a/arch/sh/kernel/vmlinux.lds.S +++ b/arch/sh/kernel/vmlinux.lds.S @@ -23,7 +23,7 @@ OUTPUT_ARCH(sh)  ENTRY(_start)  SECTIONS  { -	. = PAGE_OFFSET + MEMORY_OFFSET + CONFIG_ZERO_PAGE_OFFSET; +	. = PAGE_OFFSET + MEMORY_OFFSET + PHYSICAL_OFFSET + CONFIG_ZERO_PAGE_OFFSET;  	_text = .;		/* Text and read-only data */ @@ -66,7 +66,7 @@ SECTIONS  		__machvec_end = .;  	} -	PERCPU(PAGE_SIZE) +	PERCPU_SECTION(L1_CACHE_BYTES)  	/*  	 * .exit.text is discarded at runtime, not link time, to deal with @@ -78,7 +78,6 @@ SECTIONS  	. = ALIGN(PAGE_SIZE);  	__init_end = .;  	BSS_SECTION(0, PAGE_SIZE, 4) -	_ebss = .;			/* uClinux MTD sucks */  	_end = . ;  	STABS_DEBUG diff --git a/arch/sh/kernel/vsyscall/vsyscall-sigreturn.S b/arch/sh/kernel/vsyscall/vsyscall-sigreturn.S index 555a64f124c..23af1758405 100644 --- a/arch/sh/kernel/vsyscall/vsyscall-sigreturn.S +++ b/arch/sh/kernel/vsyscall/vsyscall-sigreturn.S @@ -34,6 +34,41 @@ __kernel_rt_sigreturn:  1:	.short	__NR_rt_sigreturn  .LEND_rt_sigreturn:  	.size __kernel_rt_sigreturn,.-.LSTART_rt_sigreturn +	.previous  	.section .eh_frame,"a",@progbits +.LCIE1: +	.ualong	.LCIE1_end - .LCIE1_start +.LCIE1_start: +	.ualong	0		/* CIE ID */ +	.byte	0x1		/* Version number */ +	.string	"zRS"		/* NUL-terminated augmentation string */ +	.uleb128 0x1		/* Code alignment factor */ +	.sleb128 -4		/* Data alignment factor */ +	.byte	0x11		/* Return address register column */ +	.uleb128 0x1		/* Augmentation length and data */ +	.byte 0x1b              /* DW_EH_PE_pcrel | DW_EH_PE_sdata4. */ +	.byte	0xc, 0xf, 0x0	/* DW_CFA_def_cfa: r15 ofs 0 */ + +	.align 2 +.LCIE1_end: + +	.ualong	.LFDE0_end-.LFDE0_start	/* Length FDE0 */ +.LFDE0_start: +	.ualong	.LFDE0_start-.LCIE1	/* CIE pointer */ +	.ualong	.LSTART_sigreturn-.	/* PC-relative start address */ +	.ualong	.LEND_sigreturn-.LSTART_sigreturn +	.uleb128 0			/* Augmentation */ +	.align 2 +.LFDE0_end: + +	.ualong	.LFDE1_end-.LFDE1_start	/* Length FDE1 */ +.LFDE1_start: +	.ualong	.LFDE1_start-.LCIE1	/* CIE pointer */ +	.ualong	.LSTART_rt_sigreturn-.	/* PC-relative start address */ +	.ualong	.LEND_rt_sigreturn-.LSTART_rt_sigreturn +	.uleb128 0			/* Augmentation */ +	.align 2 +.LFDE1_end: +  	.previous diff --git a/arch/sh/kernel/vsyscall/vsyscall-trapa.S b/arch/sh/kernel/vsyscall/vsyscall-trapa.S index 3b6eb34c43f..0eb74d00690 100644 --- a/arch/sh/kernel/vsyscall/vsyscall-trapa.S +++ b/arch/sh/kernel/vsyscall/vsyscall-trapa.S @@ -3,9 +3,8 @@  	.type __kernel_vsyscall,@function  __kernel_vsyscall:  .LSTART_vsyscall: -	/* XXX: We'll have to do something here once we opt to use the vDSO -	 * page for something other than the signal trampoline.. as well as -	 * fill out .eh_frame -- PFM. */ +	trapa	#0x10 +	 nop  .LEND_vsyscall:  	.size __kernel_vsyscall,.-.LSTART_vsyscall  	.previous @@ -16,24 +15,22 @@ __kernel_vsyscall:  .LCIE_start:  	.ualong	0		/* CIE ID */  	.byte	0x1		/* Version number */ -	.string	"zRS"		/* NUL-terminated augmentation string */ +	.string	"zR"		/* NUL-terminated augmentation string */  	.uleb128 0x1		/* Code alignment factor */  	.sleb128 -4		/* Data alignment factor */  	.byte	0x11		/* Return address register column */ -				/* Augmentation length and data (none) */ -	.byte	0xc		/* DW_CFA_def_cfa */ -	.uleb128 0xf		/* r15 */ -	.uleb128 0x0		/* offset 0 */ - +	.uleb128 0x1		/* Augmentation length and data */ +	.byte 0x1b              /* DW_EH_PE_pcrel | DW_EH_PE_sdata4. */ +	.byte	0xc,0xf,0x0	/* DW_CFA_def_cfa: r15 ofs 0 */  	.align 2  .LCIE_end:  	.ualong	.LFDE_end-.LFDE_start	/* Length FDE */  .LFDE_start: -	.ualong	.LCIE			/* CIE pointer */ -	.ualong	.LSTART_vsyscall-.	/* start address */ +	.ualong	.LFDE_start-.LCIE	/* CIE pointer */ +	.ualong	.LSTART_vsyscall-.	/* PC-relative start address */  	.ualong	.LEND_vsyscall-.LSTART_vsyscall -	.uleb128 0 +	.uleb128 0			/* Augmentation */  	.align 2  .LFDE_end:  	.previous diff --git a/arch/sh/kernel/vsyscall/vsyscall.c b/arch/sh/kernel/vsyscall/vsyscall.c index 242117cbad6..5ca579720a0 100644 --- a/arch/sh/kernel/vsyscall/vsyscall.c +++ b/arch/sh/kernel/vsyscall/vsyscall.c @@ -73,8 +73,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)  	ret = install_special_mapping(mm, addr, PAGE_SIZE,  				      VM_READ | VM_EXEC | -				      VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC | -				      VM_ALWAYSDUMP, +				      VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,  				      syscall_pages);  	if (unlikely(ret))  		goto up_fail; @@ -94,17 +93,17 @@ const char *arch_vma_name(struct vm_area_struct *vma)  	return NULL;  } -struct vm_area_struct *get_gate_vma(struct task_struct *task) +struct vm_area_struct *get_gate_vma(struct mm_struct *mm)  {  	return NULL;  } -int in_gate_area(struct task_struct *task, unsigned long address) +int in_gate_area(struct mm_struct *mm, unsigned long address)  {  	return 0;  } -int in_gate_area_no_task(unsigned long address) +int in_gate_area_no_mm(unsigned long address)  {  	return 0;  } diff --git a/arch/sh/lib/Makefile b/arch/sh/lib/Makefile index 7b95f29e317..3baff31e58c 100644 --- a/arch/sh/lib/Makefile +++ b/arch/sh/lib/Makefile @@ -6,7 +6,7 @@ lib-y  = delay.o memmove.o memchr.o \  	 checksum.o strlen.o div64.o div64-generic.o  # Extracted from libgcc -lib-y += movmem.o ashldi3.o ashrdi3.o lshrdi3.o \ +obj-y += movmem.o ashldi3.o ashrdi3.o lshrdi3.o \  	 ashlsi3.o ashrsi3.o ashiftrt.o lshrsi3.o \  	 udiv_qrnnd.o diff --git a/arch/sh/lib/delay.c b/arch/sh/lib/delay.c index faa8f86c0db..0901b2f14e1 100644 --- a/arch/sh/lib/delay.c +++ b/arch/sh/lib/delay.c @@ -10,6 +10,16 @@  void __delay(unsigned long loops)  {  	__asm__ __volatile__( +		/* +		 * ST40-300 appears to have an issue with this code, +		 * normally taking two cycles each loop, as with all +		 * other SH variants. If however the branch and the +		 * delay slot straddle an 8 byte boundary, this increases +		 * to 3 cycles. +		 * This align directive ensures this doesn't occur. +		 */ +		".balign 8\n\t" +  		"tst	%0, %0\n\t"  		"1:\t"  		"bf/s	1b\n\t" diff --git a/arch/sh/lib/mcount.S b/arch/sh/lib/mcount.S index 84a57761f17..52aa2011d75 100644 --- a/arch/sh/lib/mcount.S +++ b/arch/sh/lib/mcount.S @@ -39,7 +39,7 @@   *   * Make sure the stack pointer contains a valid address. Valid   * addresses for kernel stacks are anywhere after the bss - * (after _ebss) and anywhere in init_thread_union (init_stack). + * (after __bss_stop) and anywhere in init_thread_union (init_stack).   */  #define STACK_CHECK()					\  	mov	#(THREAD_SIZE >> 10), r0;		\ @@ -60,7 +60,7 @@  	cmp/hi	r2, r1;					\  	bf	stack_panic;				\  							\ -	/* If sp > _ebss then we're OK. */		\ +	/* If sp > __bss_stop then we're OK. */		\  	mov.l	.L_ebss, r1;				\  	cmp/hi	r1, r15;				\  	bt	1f;					\ @@ -70,7 +70,7 @@  	cmp/hs	r1, r15;				\  	bf	stack_panic;				\  							\ -	/* If sp > init_stack && sp < _ebss, not OK. */	\ +	/* If sp > init_stack && sp < __bss_stop, not OK. */	\  	add	r0, r1;					\  	cmp/hs	r1, r15;				\  	bt	stack_panic;				\ @@ -292,10 +292,10 @@ stack_panic:  	 nop  	.align 2 -.L_ebss: -	.long	_ebss  .L_init_thread_union:  	.long	init_thread_union +.L_ebss: +	.long	__bss_stop  .Lpanic:  	.long	panic  .Lpanic_s: diff --git a/arch/sh/lib64/Makefile b/arch/sh/lib64/Makefile index 1fee75aa1f9..69779ff741d 100644 --- a/arch/sh/lib64/Makefile +++ b/arch/sh/lib64/Makefile @@ -10,7 +10,7 @@  #  # Panic should really be compiled as PIC -lib-y  := udelay.o dbg.o panic.o memcpy.o memset.o \ +lib-y  := udelay.o panic.o memcpy.o memset.o \  	  copy_user_memcpy.o copy_page.o strcpy.o strlen.o  # Extracted from libgcc diff --git a/arch/sh/lib64/copy_user_memcpy.S b/arch/sh/lib64/copy_user_memcpy.S index 2a62816d2dd..49aeabeba2c 100644 --- a/arch/sh/lib64/copy_user_memcpy.S +++ b/arch/sh/lib64/copy_user_memcpy.S @@ -27,7 +27,7 @@  ! 2.: When there are two or three bytes in the last word of an 11-or-more  !     bytes memory chunk to b copied, the rest of the word can be read  !     without side effects. -!     This could be easily changed by increasing the minumum size of +!     This could be easily changed by increasing the minimum size of  !     a fast memcpy and the amount subtracted from r7 before L_2l_loop be 2,  !     however, this would cost a few extra cyles on average.  !     For SHmedia, the assumption is that any quadword can be read in its diff --git a/arch/sh/lib64/dbg.c b/arch/sh/lib64/dbg.c deleted file mode 100644 index 6152a6a6d9c..00000000000 --- a/arch/sh/lib64/dbg.c +++ /dev/null @@ -1,248 +0,0 @@ -/*-------------------------------------------------------------------------- --- --- Identity : Linux50 Debug Funcions --- --- File     : arch/sh/lib64/dbg.c --- --- Copyright 2000, 2001 STMicroelectronics Limited. --- Copyright 2004 Richard Curnow (evt_debug etc) --- ---------------------------------------------------------------------------*/ -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/mm.h> -#include <linux/fs.h> -#include <asm/mmu_context.h> - -typedef u64 regType_t; - -static regType_t getConfigReg(u64 id) -{ -	register u64 reg __asm__("r2"); -	asm volatile ("getcfg   %1, 0, %0":"=r" (reg):"r"(id)); -	return (reg); -} - -/* ======================================================================= */ - -static char *szTab[] = { "4k", "64k", "1M", "512M" }; -static char *protTab[] = { "----", -	"---R", -	"--X-", -	"--XR", -	"-W--", -	"-W-R", -	"-WX-", -	"-WXR", -	"U---", -	"U--R", -	"U-X-", -	"U-XR", -	"UW--", -	"UW-R", -	"UWX-", -	"UWXR" -}; -#define  ITLB_BASE	0x00000000 -#define  DTLB_BASE	0x00800000 -#define  MAX_TLBs		64 -/* PTE High */ -#define  GET_VALID(pte)        ((pte) & 0x1) -#define  GET_SHARED(pte)       ((pte) & 0x2) -#define  GET_ASID(pte)         ((pte >> 2) & 0x0ff) -#define  GET_EPN(pte)          ((pte) & 0xfffff000) - -/* PTE Low */ -#define  GET_CBEHAVIOR(pte)    ((pte) & 0x3) -#define  GET_PAGE_SIZE(pte)    szTab[((pte >> 3) & 0x3)] -#define  GET_PROTECTION(pte)   protTab[((pte >> 6) & 0xf)] -#define  GET_PPN(pte)          ((pte) & 0xfffff000) - -#define PAGE_1K_MASK           0x00000000 -#define PAGE_4K_MASK           0x00000010 -#define PAGE_64K_MASK          0x00000080 -#define MMU_PAGESIZE_MASK      (PAGE_64K_MASK | PAGE_4K_MASK) -#define PAGE_1MB_MASK          MMU_PAGESIZE_MASK -#define PAGE_1K                (1024) -#define PAGE_4K                (1024 * 4) -#define PAGE_64K               (1024 * 64) -#define PAGE_1MB               (1024 * 1024) - -#define HOW_TO_READ_TLB_CONTENT  \ -       "[ ID]  PPN         EPN        ASID  Share  CB  P.Size   PROT.\n" - -void print_single_tlb(unsigned long tlb, int single_print) -{ -	regType_t pteH; -	regType_t pteL; -	unsigned int valid, shared, asid, epn, cb, ppn; -	char *pSize; -	char *pProt; - -	/* -	   ** in case of single print <single_print> is true, this implies: -	   **   1) print the TLB in any case also if NOT VALID -	   **   2) print out the header -	 */ - -	pteH = getConfigReg(tlb); -	valid = GET_VALID(pteH); -	if (single_print) -		printk(HOW_TO_READ_TLB_CONTENT); -	else if (!valid) -		return; - -	pteL = getConfigReg(tlb + 1); - -	shared = GET_SHARED(pteH); -	asid = GET_ASID(pteH); -	epn = GET_EPN(pteH); -	cb = GET_CBEHAVIOR(pteL); -	pSize = GET_PAGE_SIZE(pteL); -	pProt = GET_PROTECTION(pteL); -	ppn = GET_PPN(pteL); -	printk("[%c%2ld]  0x%08x  0x%08x  %03d   %02x    %02x   %4s    %s\n", -	       ((valid) ? ' ' : 'u'), ((tlb & 0x0ffff) / TLB_STEP), -	       ppn, epn, asid, shared, cb, pSize, pProt); -} - -void print_dtlb(void) -{ -	int count; -	unsigned long tlb; - -	printk(" ================= SH-5 D-TLBs Status ===================\n"); -	printk(HOW_TO_READ_TLB_CONTENT); -	tlb = DTLB_BASE; -	for (count = 0; count < MAX_TLBs; count++, tlb += TLB_STEP) -		print_single_tlb(tlb, 0); -	printk -	    (" =============================================================\n"); -} - -void print_itlb(void) -{ -	int count; -	unsigned long tlb; - -	printk(" ================= SH-5 I-TLBs Status ===================\n"); -	printk(HOW_TO_READ_TLB_CONTENT); -	tlb = ITLB_BASE; -	for (count = 0; count < MAX_TLBs; count++, tlb += TLB_STEP) -		print_single_tlb(tlb, 0); -	printk -	    (" =============================================================\n"); -} - -void show_excp_regs(char *from, int trapnr, int signr, struct pt_regs *regs) -{ - -	unsigned long long ah, al, bh, bl, ch, cl; - -	printk("\n"); -	printk("EXCEPTION - %s: task %d; Linux trap # %d; signal = %d\n", -	       ((from) ? from : "???"), current->pid, trapnr, signr); - -	asm volatile ("getcon   " __EXPEVT ", %0":"=r"(ah)); -	asm volatile ("getcon   " __EXPEVT ", %0":"=r"(al)); -	ah = (ah) >> 32; -	al = (al) & 0xffffffff; -	asm volatile ("getcon   " __KCR1 ", %0":"=r"(bh)); -	asm volatile ("getcon   " __KCR1 ", %0":"=r"(bl)); -	bh = (bh) >> 32; -	bl = (bl) & 0xffffffff; -	asm volatile ("getcon   " __INTEVT ", %0":"=r"(ch)); -	asm volatile ("getcon   " __INTEVT ", %0":"=r"(cl)); -	ch = (ch) >> 32; -	cl = (cl) & 0xffffffff; -	printk("EXPE: %08Lx%08Lx KCR1: %08Lx%08Lx INTE: %08Lx%08Lx\n", -	       ah, al, bh, bl, ch, cl); - -	asm volatile ("getcon   " __PEXPEVT ", %0":"=r"(ah)); -	asm volatile ("getcon   " __PEXPEVT ", %0":"=r"(al)); -	ah = (ah) >> 32; -	al = (al) & 0xffffffff; -	asm volatile ("getcon   " __PSPC ", %0":"=r"(bh)); -	asm volatile ("getcon   " __PSPC ", %0":"=r"(bl)); -	bh = (bh) >> 32; -	bl = (bl) & 0xffffffff; -	asm volatile ("getcon   " __PSSR ", %0":"=r"(ch)); -	asm volatile ("getcon   " __PSSR ", %0":"=r"(cl)); -	ch = (ch) >> 32; -	cl = (cl) & 0xffffffff; -	printk("PEXP: %08Lx%08Lx PSPC: %08Lx%08Lx PSSR: %08Lx%08Lx\n", -	       ah, al, bh, bl, ch, cl); - -	ah = (regs->pc) >> 32; -	al = (regs->pc) & 0xffffffff; -	bh = (regs->regs[18]) >> 32; -	bl = (regs->regs[18]) & 0xffffffff; -	ch = (regs->regs[15]) >> 32; -	cl = (regs->regs[15]) & 0xffffffff; -	printk("PC  : %08Lx%08Lx LINK: %08Lx%08Lx SP  : %08Lx%08Lx\n", -	       ah, al, bh, bl, ch, cl); - -	ah = (regs->sr) >> 32; -	al = (regs->sr) & 0xffffffff; -	asm volatile ("getcon   " __TEA ", %0":"=r"(bh)); -	asm volatile ("getcon   " __TEA ", %0":"=r"(bl)); -	bh = (bh) >> 32; -	bl = (bl) & 0xffffffff; -	asm volatile ("getcon   " __KCR0 ", %0":"=r"(ch)); -	asm volatile ("getcon   " __KCR0 ", %0":"=r"(cl)); -	ch = (ch) >> 32; -	cl = (cl) & 0xffffffff; -	printk("SR  : %08Lx%08Lx TEA : %08Lx%08Lx KCR0: %08Lx%08Lx\n", -	       ah, al, bh, bl, ch, cl); - -	ah = (regs->regs[0]) >> 32; -	al = (regs->regs[0]) & 0xffffffff; -	bh = (regs->regs[1]) >> 32; -	bl = (regs->regs[1]) & 0xffffffff; -	ch = (regs->regs[2]) >> 32; -	cl = (regs->regs[2]) & 0xffffffff; -	printk("R0  : %08Lx%08Lx R1  : %08Lx%08Lx R2  : %08Lx%08Lx\n", -	       ah, al, bh, bl, ch, cl); - -	ah = (regs->regs[3]) >> 32; -	al = (regs->regs[3]) & 0xffffffff; -	bh = (regs->regs[4]) >> 32; -	bl = (regs->regs[4]) & 0xffffffff; -	ch = (regs->regs[5]) >> 32; -	cl = (regs->regs[5]) & 0xffffffff; -	printk("R3  : %08Lx%08Lx R4  : %08Lx%08Lx R5  : %08Lx%08Lx\n", -	       ah, al, bh, bl, ch, cl); - -	ah = (regs->regs[6]) >> 32; -	al = (regs->regs[6]) & 0xffffffff; -	bh = (regs->regs[7]) >> 32; -	bl = (regs->regs[7]) & 0xffffffff; -	ch = (regs->regs[8]) >> 32; -	cl = (regs->regs[8]) & 0xffffffff; -	printk("R6  : %08Lx%08Lx R7  : %08Lx%08Lx R8  : %08Lx%08Lx\n", -	       ah, al, bh, bl, ch, cl); - -	ah = (regs->regs[9]) >> 32; -	al = (regs->regs[9]) & 0xffffffff; -	bh = (regs->regs[10]) >> 32; -	bl = (regs->regs[10]) & 0xffffffff; -	ch = (regs->regs[11]) >> 32; -	cl = (regs->regs[11]) & 0xffffffff; -	printk("R9  : %08Lx%08Lx R10 : %08Lx%08Lx R11 : %08Lx%08Lx\n", -	       ah, al, bh, bl, ch, cl); -	printk("....\n"); - -	ah = (regs->tregs[0]) >> 32; -	al = (regs->tregs[0]) & 0xffffffff; -	bh = (regs->tregs[1]) >> 32; -	bl = (regs->tregs[1]) & 0xffffffff; -	ch = (regs->tregs[2]) >> 32; -	cl = (regs->tregs[2]) & 0xffffffff; -	printk("T0  : %08Lx%08Lx T1  : %08Lx%08Lx T2  : %08Lx%08Lx\n", -	       ah, al, bh, bl, ch, cl); -	printk("....\n"); - -	print_dtlb(); -	print_itlb(); -} diff --git a/arch/sh/lib64/memcpy.S b/arch/sh/lib64/memcpy.S index dd300c372ce..5d682e0ee24 100644 --- a/arch/sh/lib64/memcpy.S +++ b/arch/sh/lib64/memcpy.S @@ -29,7 +29,7 @@  ! 2.: When there are two or three bytes in the last word of an 11-or-more  !     bytes memory chunk to b copied, the rest of the word can be read  !     without side effects. -!     This could be easily changed by increasing the minumum size of +!     This could be easily changed by increasing the minimum size of  !     a fast memcpy and the amount subtracted from r7 before L_2l_loop be 2,  !     however, this would cost a few extra cyles on average.  !     For SHmedia, the assumption is that any quadword can be read in its diff --git a/arch/sh/math-emu/math.c b/arch/sh/math-emu/math.c index f76a5090d5d..04aa55fa8c7 100644 --- a/arch/sh/math-emu/math.c +++ b/arch/sh/math-emu/math.c @@ -14,7 +14,6 @@  #include <linux/signal.h>  #include <linux/perf_event.h> -#include <asm/system.h>  #include <asm/uaccess.h>  #include <asm/processor.h>  #include <asm/io.h> @@ -575,24 +574,6 @@ static int ieee_fpe_handler(struct pt_regs *regs)  	return 0;  } -asmlinkage void do_fpu_error(unsigned long r4, unsigned long r5, -			     unsigned long r6, unsigned long r7, -			     struct pt_regs regs) -{ -	struct task_struct *tsk = current; -	siginfo_t info; - -	if (ieee_fpe_handler (®s)) -		return; - -	regs.pc += 2; -	info.si_signo = SIGFPE; -	info.si_errno = 0; -	info.si_code = FPE_FLTINV; -	info.si_addr = (void __user *)regs.pc; -	force_sig_info(SIGFPE, &info, tsk); -} -  /**   * fpu_init - Initialize FPU registers   * @fpu: Pointer to software emulated FPU registers. @@ -620,7 +601,7 @@ int do_fpu_inst(unsigned short inst, struct pt_regs *regs)  	struct task_struct *tsk = current;  	struct sh_fpu_soft_struct *fpu = &(tsk->thread.xstate->softfpu); -	perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, 0, regs, 0); +	perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, 0);  	if (!(task_thread_info(tsk)->status & TS_USEDFPU)) {  		/* initialize once. */ diff --git a/arch/sh/mm/Kconfig b/arch/sh/mm/Kconfig index c3e61b36649..dba285e8680 100644 --- a/arch/sh/mm/Kconfig +++ b/arch/sh/mm/Kconfig @@ -83,7 +83,7 @@ config 32BIT  config PMB  	bool "Support 32-bit physical addressing through PMB" -	depends on MMU && EXPERIMENTAL && CPU_SH4A && !CPU_SH4AL_DSP +	depends on MMU && CPU_SH4A && !CPU_SH4AL_DSP  	select 32BIT  	select UNCACHED_MAPPING  	help @@ -110,7 +110,8 @@ config VSYSCALL  config NUMA  	bool "Non Uniform Memory Access (NUMA) Support" -	depends on MMU && SYS_SUPPORTS_NUMA && EXPERIMENTAL +	depends on MMU && SYS_SUPPORTS_NUMA +	select ARCH_WANT_NUMA_VARIABLE_LOCALITY  	default n  	help  	  Some SH systems have many various memories scattered around @@ -136,16 +137,6 @@ config ARCH_SPARSEMEM_ENABLE  config ARCH_SPARSEMEM_DEFAULT  	def_bool y -config MAX_ACTIVE_REGIONS -	int -	default "6" if (CPU_SUBTYPE_SHX3 && SPARSEMEM) -	default "2" if SPARSEMEM && (CPU_SUBTYPE_SH7722 || \ -		       CPU_SUBTYPE_SH7785) -	default "1" - -config ARCH_POPULATES_NODE_MAP -	def_bool y -  config ARCH_SELECT_MEMORY_MODEL  	def_bool y diff --git a/arch/sh/mm/Makefile b/arch/sh/mm/Makefile index 150aa326aff..cee6b9999d8 100644 --- a/arch/sh/mm/Makefile +++ b/arch/sh/mm/Makefile @@ -15,8 +15,8 @@ cacheops-$(CONFIG_CPU_SHX3)		+= cache-shx3.o  obj-y			+= $(cacheops-y)  mmu-y			:= nommu.o extable_32.o -mmu-$(CONFIG_MMU)	:= extable_$(BITS).o fault_$(BITS).o gup.o \ -			   ioremap.o kmap.o pgtable.o tlbflush_$(BITS).o +mmu-$(CONFIG_MMU)	:= extable_$(BITS).o fault.o gup.o ioremap.o kmap.o \ +			   pgtable.o tlbex_$(BITS).o tlbflush_$(BITS).o  obj-y			+= $(mmu-y) @@ -42,7 +42,9 @@ obj-$(CONFIG_IOREMAP_FIXED)	+= ioremap_fixed.o  obj-$(CONFIG_UNCACHED_MAPPING)	+= uncached.o  obj-$(CONFIG_HAVE_SRAM_POOL)	+= sram.o -# Special flags for fault_64.o.  This puts restrictions on the number of +GCOV_PROFILE_pmb.o := n + +# Special flags for tlbex_64.o.  This puts restrictions on the number of  # caller-save registers that the compiler can target when building this file.  # This is required because the code is called from a context in entry.S where  # very few registers have been saved in the exception handler (for speed @@ -57,7 +59,7 @@ obj-$(CONFIG_HAVE_SRAM_POOL)	+= sram.o  # The resources not listed below are callee save, i.e. the compiler is free to  # use any of them and will spill them to the stack itself. -CFLAGS_fault_64.o += -ffixed-r7 \ +CFLAGS_tlbex_64.o += -ffixed-r7 \  	-ffixed-r8 -ffixed-r9 -ffixed-r10 -ffixed-r11 -ffixed-r12 \  	-ffixed-r13 -ffixed-r14 -ffixed-r16 -ffixed-r17 -ffixed-r19 \  	-ffixed-r20 -ffixed-r21 -ffixed-r22 -ffixed-r23 \ diff --git a/arch/sh/mm/alignment.c b/arch/sh/mm/alignment.c index b2595b8548e..ec2b2530242 100644 --- a/arch/sh/mm/alignment.c +++ b/arch/sh/mm/alignment.c @@ -13,6 +13,7 @@  #include <linux/seq_file.h>  #include <linux/proc_fs.h>  #include <linux/uaccess.h> +#include <linux/ratelimit.h>  #include <asm/alignment.h>  #include <asm/processor.h> @@ -95,13 +96,13 @@ int set_unalign_ctl(struct task_struct *tsk, unsigned int val)  void unaligned_fixups_notify(struct task_struct *tsk, insn_size_t insn,  			     struct pt_regs *regs)  { -	if (user_mode(regs) && (se_usermode & UM_WARN) && printk_ratelimit()) -		pr_notice("Fixing up unaligned userspace access " +	if (user_mode(regs) && (se_usermode & UM_WARN)) +		pr_notice_ratelimited("Fixing up unaligned userspace access "  			  "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n",  			  tsk->comm, task_pid_nr(tsk),  			  (void *)instruction_pointer(regs), insn); -	else if (se_kernmode_warn && printk_ratelimit()) -		pr_notice("Fixing up unaligned kernel access " +	else if (se_kernmode_warn) +		pr_notice_ratelimited("Fixing up unaligned kernel access "  			  "in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n",  			  tsk->comm, task_pid_nr(tsk),  			  (void *)instruction_pointer(regs), insn); @@ -139,7 +140,7 @@ static int alignment_proc_open(struct inode *inode, struct file *file)  static ssize_t alignment_proc_write(struct file *file,  		const char __user *buffer, size_t count, loff_t *pos)  { -	int *data = PDE(file->f_path.dentry->d_inode)->data; +	int *data = PDE_DATA(file_inode(file));  	char mode;  	if (count > 0) { diff --git a/arch/sh/mm/cache-debugfs.c b/arch/sh/mm/cache-debugfs.c index 52411462c40..777e50f33c0 100644 --- a/arch/sh/mm/cache-debugfs.c +++ b/arch/sh/mm/cache-debugfs.c @@ -26,9 +26,9 @@ static int cache_seq_show(struct seq_file *file, void *iter)  {  	unsigned int cache_type = (unsigned int)file->private;  	struct cache_info *cache; -	unsigned int waysize, way, cache_size; -	unsigned long ccr, base; -	static unsigned long addrstart = 0; +	unsigned int waysize, way; +	unsigned long ccr; +	unsigned long addrstart = 0;  	/*  	 * Go uncached immediately so we don't skew the results any @@ -36,7 +36,7 @@ static int cache_seq_show(struct seq_file *file, void *iter)  	 */  	jump_to_uncached(); -	ccr = __raw_readl(CCR); +	ccr = __raw_readl(SH_CCR);  	if ((ccr & CCR_CACHE_ENABLE) == 0) {  		back_to_cached(); @@ -45,28 +45,13 @@ static int cache_seq_show(struct seq_file *file, void *iter)  	}  	if (cache_type == CACHE_TYPE_DCACHE) { -		base = CACHE_OC_ADDRESS_ARRAY; +		addrstart = CACHE_OC_ADDRESS_ARRAY;  		cache = ¤t_cpu_data.dcache;  	} else { -		base = CACHE_IC_ADDRESS_ARRAY; +		addrstart = CACHE_IC_ADDRESS_ARRAY;  		cache = ¤t_cpu_data.icache;  	} -	/* -	 * Due to the amount of data written out (depending on the cache size), -	 * we may be iterated over multiple times. In this case, keep track of -	 * the entry position in addrstart, and rewind it when we've hit the -	 * end of the cache. -	 * -	 * Likewise, the same code is used for multiple caches, so care must -	 * be taken for bouncing addrstart back and forth so the appropriate -	 * cache is hit. -	 */ -	cache_size = cache->ways * cache->sets * cache->linesz; -	if (((addrstart & 0xff000000) != base) || -	     (addrstart & 0x00ffffff) > cache_size) -		addrstart = base; -  	waysize = cache->sets;  	/* diff --git a/arch/sh/mm/cache-sh2.c b/arch/sh/mm/cache-sh2.c index defcf719f2e..a74259f2f98 100644 --- a/arch/sh/mm/cache-sh2.c +++ b/arch/sh/mm/cache-sh2.c @@ -63,9 +63,9 @@ static void sh2__flush_invalidate_region(void *start, int size)  	local_irq_save(flags);  	jump_to_uncached(); -	ccr = __raw_readl(CCR); +	ccr = __raw_readl(SH_CCR);  	ccr |= CCR_CACHE_INVALIDATE; -	__raw_writel(ccr, CCR); +	__raw_writel(ccr, SH_CCR);  	back_to_cached();  	local_irq_restore(flags); diff --git a/arch/sh/mm/cache-sh2a.c b/arch/sh/mm/cache-sh2a.c index 1f51225426a..ee87d081259 100644 --- a/arch/sh/mm/cache-sh2a.c +++ b/arch/sh/mm/cache-sh2a.c @@ -15,35 +15,80 @@  #include <asm/cacheflush.h>  #include <asm/io.h> +/* + * The maximum number of pages we support up to when doing ranged dcache + * flushing. Anything exceeding this will simply flush the dcache in its + * entirety. + */ +#define MAX_OCACHE_PAGES	32 +#define MAX_ICACHE_PAGES	32 + +#ifdef CONFIG_CACHE_WRITEBACK +static void sh2a_flush_oc_line(unsigned long v, int way) +{ +	unsigned long addr = (v & 0x000007f0) | (way << 11); +	unsigned long data; + +	data = __raw_readl(CACHE_OC_ADDRESS_ARRAY | addr); +	if ((data & CACHE_PHYSADDR_MASK) == (v & CACHE_PHYSADDR_MASK)) { +		data &= ~SH_CACHE_UPDATED; +		__raw_writel(data, CACHE_OC_ADDRESS_ARRAY | addr); +	} +} +#endif + +static void sh2a_invalidate_line(unsigned long cache_addr, unsigned long v) +{ +	/* Set associative bit to hit all ways */ +	unsigned long addr = (v & 0x000007f0) | SH_CACHE_ASSOC; +	__raw_writel((addr & CACHE_PHYSADDR_MASK), cache_addr | addr); +} + +/* + * Write back the dirty D-caches, but not invalidate them. + */  static void sh2a__flush_wback_region(void *start, int size)  { +#ifdef CONFIG_CACHE_WRITEBACK  	unsigned long v;  	unsigned long begin, end;  	unsigned long flags; +	int nr_ways;  	begin = (unsigned long)start & ~(L1_CACHE_BYTES-1);  	end = ((unsigned long)start + size + L1_CACHE_BYTES-1)  		& ~(L1_CACHE_BYTES-1); +	nr_ways = current_cpu_data.dcache.ways;  	local_irq_save(flags);  	jump_to_uncached(); -	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		unsigned long addr = CACHE_OC_ADDRESS_ARRAY | (v & 0x000007f0); +	/* If there are too many pages then flush the entire cache */ +	if (((end - begin) >> PAGE_SHIFT) >= MAX_OCACHE_PAGES) { +		begin = CACHE_OC_ADDRESS_ARRAY; +		end = begin + (nr_ways * current_cpu_data.dcache.way_size); + +		for (v = begin; v < end; v += L1_CACHE_BYTES) { +			unsigned long data = __raw_readl(v); +			if (data & SH_CACHE_UPDATED) +				__raw_writel(data & ~SH_CACHE_UPDATED, v); +		} +	} else {  		int way; -		for (way = 0; way < 4; way++) { -			unsigned long data =  __raw_readl(addr | (way << 11)); -			if ((data & CACHE_PHYSADDR_MASK) == (v & CACHE_PHYSADDR_MASK)) { -				data &= ~SH_CACHE_UPDATED; -				__raw_writel(data, addr | (way << 11)); -			} +		for (way = 0; way < nr_ways; way++) { +			for (v = begin; v < end; v += L1_CACHE_BYTES) +				sh2a_flush_oc_line(v, way);  		}  	}  	back_to_cached();  	local_irq_restore(flags); +#endif  } +/* + * Write back the dirty D-caches and invalidate them. + */  static void sh2a__flush_purge_region(void *start, int size)  {  	unsigned long v; @@ -58,13 +103,22 @@ static void sh2a__flush_purge_region(void *start, int size)  	jump_to_uncached();  	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		__raw_writel((v & CACHE_PHYSADDR_MASK), -			  CACHE_OC_ADDRESS_ARRAY | (v & 0x000007f0) | 0x00000008); +#ifdef CONFIG_CACHE_WRITEBACK +		int way; +		int nr_ways = current_cpu_data.dcache.ways; +		for (way = 0; way < nr_ways; way++) +			sh2a_flush_oc_line(v, way); +#endif +		sh2a_invalidate_line(CACHE_OC_ADDRESS_ARRAY, v);  	} +  	back_to_cached();  	local_irq_restore(flags);  } +/* + * Invalidate the D-caches, but no write back please + */  static void sh2a__flush_invalidate_region(void *start, int size)  {  	unsigned long v; @@ -74,29 +128,26 @@ static void sh2a__flush_invalidate_region(void *start, int size)  	begin = (unsigned long)start & ~(L1_CACHE_BYTES-1);  	end = ((unsigned long)start + size + L1_CACHE_BYTES-1)  		& ~(L1_CACHE_BYTES-1); +  	local_irq_save(flags);  	jump_to_uncached(); -#ifdef CONFIG_CACHE_WRITEBACK -	__raw_writel(__raw_readl(CCR) | CCR_OCACHE_INVALIDATE, CCR); -	/* I-cache invalidate */ -	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		__raw_writel((v & CACHE_PHYSADDR_MASK), -			  CACHE_IC_ADDRESS_ARRAY | (v & 0x000007f0) | 0x00000008); +	/* If there are too many pages then just blow the cache */ +	if (((end - begin) >> PAGE_SHIFT) >= MAX_OCACHE_PAGES) { +		__raw_writel(__raw_readl(SH_CCR) | CCR_OCACHE_INVALIDATE, +			     SH_CCR); +	} else { +		for (v = begin; v < end; v += L1_CACHE_BYTES) +			sh2a_invalidate_line(CACHE_OC_ADDRESS_ARRAY, v);  	} -#else -	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		__raw_writel((v & CACHE_PHYSADDR_MASK), -			  CACHE_IC_ADDRESS_ARRAY | (v & 0x000007f0) | 0x00000008); -		__raw_writel((v & CACHE_PHYSADDR_MASK), -			  CACHE_OC_ADDRESS_ARRAY | (v & 0x000007f0) | 0x00000008); -	} -#endif +  	back_to_cached();  	local_irq_restore(flags);  } -/* WBack O-Cache and flush I-Cache */ +/* + * Write back the range of D-cache, and purge the I-cache. + */  static void sh2a_flush_icache_range(void *args)  {  	struct flusher_data *data = args; @@ -107,23 +158,21 @@ static void sh2a_flush_icache_range(void *args)  	start = data->addr1 & ~(L1_CACHE_BYTES-1);  	end = (data->addr2 + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); +#ifdef CONFIG_CACHE_WRITEBACK +	sh2a__flush_wback_region((void *)start, end-start); +#endif +  	local_irq_save(flags);  	jump_to_uncached(); -	for (v = start; v < end; v+=L1_CACHE_BYTES) { -		unsigned long addr = (v & 0x000007f0); -		int way; -		/* O-Cache writeback */ -		for (way = 0; way < 4; way++) { -			unsigned long data =  __raw_readl(CACHE_OC_ADDRESS_ARRAY | addr | (way << 11)); -			if ((data & CACHE_PHYSADDR_MASK) == (v & CACHE_PHYSADDR_MASK)) { -				data &= ~SH_CACHE_UPDATED; -				__raw_writel(data, CACHE_OC_ADDRESS_ARRAY | addr | (way << 11)); -			} -		} -		/* I-Cache invalidate */ -		__raw_writel(addr, -			  CACHE_IC_ADDRESS_ARRAY | addr | 0x00000008); +	/* I-Cache invalidate */ +	/* If there are too many pages then just blow the cache */ +	if (((end - start) >> PAGE_SHIFT) >= MAX_ICACHE_PAGES) { +		__raw_writel(__raw_readl(SH_CCR) | CCR_ICACHE_INVALIDATE, +			     SH_CCR); +	} else { +		for (v = start; v < end; v += L1_CACHE_BYTES) +			sh2a_invalidate_line(CACHE_IC_ADDRESS_ARRAY, v);  	}  	back_to_cached(); diff --git a/arch/sh/mm/cache-sh4.c b/arch/sh/mm/cache-sh4.c index 2cfae81914a..51d8f7f31d1 100644 --- a/arch/sh/mm/cache-sh4.c +++ b/arch/sh/mm/cache-sh4.c @@ -18,6 +18,7 @@  #include <linux/highmem.h>  #include <asm/pgtable.h>  #include <asm/mmu_context.h> +#include <asm/cache_insns.h>  #include <asm/cacheflush.h>  /* @@ -114,7 +115,7 @@ static void sh4_flush_dcache_page(void *arg)  	struct address_space *mapping = page_mapping(page);  	if (mapping && !mapping_mapped(mapping)) -		set_bit(PG_dcache_dirty, &page->flags); +		clear_bit(PG_dcache_clean, &page->flags);  	else  #endif  		flush_cache_one(CACHE_OC_ADDRESS_ARRAY | @@ -132,9 +133,9 @@ static void flush_icache_all(void)  	jump_to_uncached();  	/* Flush I-cache */ -	ccr = __raw_readl(CCR); +	ccr = __raw_readl(SH_CCR);  	ccr |= CCR_CACHE_ICI; -	__raw_writel(ccr, CCR); +	__raw_writel(ccr, SH_CCR);  	/*  	 * back_to_cached() will take care of the barrier for us, don't add @@ -239,12 +240,12 @@ static void sh4_flush_cache_page(void *args)  		 * another ASID than the current one.  		 */  		map_coherent = (current_cpu_data.dcache.n_aliases && -			!test_bit(PG_dcache_dirty, &page->flags) && +			test_bit(PG_dcache_clean, &page->flags) &&  			page_mapped(page));  		if (map_coherent)  			vaddr = kmap_coherent(page, address);  		else -			vaddr = kmap_atomic(page, KM_USER0); +			vaddr = kmap_atomic(page);  		address = (unsigned long)vaddr;  	} @@ -259,7 +260,7 @@ static void sh4_flush_cache_page(void *args)  		if (map_coherent)  			kunmap_coherent(vaddr);  		else -			kunmap_atomic(vaddr, KM_USER0); +			kunmap_atomic(vaddr);  	}  } diff --git a/arch/sh/mm/cache-sh5.c b/arch/sh/mm/cache-sh5.c index eb4cc4ec795..d1bffbcd9d5 100644 --- a/arch/sh/mm/cache-sh5.c +++ b/arch/sh/mm/cache-sh5.c @@ -568,7 +568,7 @@ static void sh5_flush_dcache_page(void *page)  }  /* - * Flush the range [start,end] of kernel virtual adddress space from + * Flush the range [start,end] of kernel virtual address space from   * the I-cache.  The corresponding range must be purged from the   * D-cache also because the SH-5 doesn't have cache snooping between   * the caches.  The addresses will be visible through the superpage diff --git a/arch/sh/mm/cache-sh7705.c b/arch/sh/mm/cache-sh7705.c index f498da1cce7..7729cca727e 100644 --- a/arch/sh/mm/cache-sh7705.c +++ b/arch/sh/mm/cache-sh7705.c @@ -139,7 +139,7 @@ static void sh7705_flush_dcache_page(void *arg)  	struct address_space *mapping = page_mapping(page);  	if (mapping && !mapping_mapped(mapping)) -		set_bit(PG_dcache_dirty, &page->flags); +		clear_bit(PG_dcache_clean, &page->flags);  	else  		__flush_dcache_page(__pa(page_address(page)));  } diff --git a/arch/sh/mm/cache-shx3.c b/arch/sh/mm/cache-shx3.c index c0adbee97b5..24c58b7dc02 100644 --- a/arch/sh/mm/cache-shx3.c +++ b/arch/sh/mm/cache-shx3.c @@ -19,7 +19,7 @@ void __init shx3_cache_init(void)  {  	unsigned int ccr; -	ccr = __raw_readl(CCR); +	ccr = __raw_readl(SH_CCR);  	/*  	 * If we've got cache aliases, resolve them in hardware. @@ -40,5 +40,5 @@ void __init shx3_cache_init(void)  	ccr |= CCR_CACHE_IBE;  #endif -	writel_uncached(ccr, CCR); +	writel_uncached(ccr, SH_CCR);  } diff --git a/arch/sh/mm/cache.c b/arch/sh/mm/cache.c index ba401d137bb..097c2cdd117 100644 --- a/arch/sh/mm/cache.c +++ b/arch/sh/mm/cache.c @@ -60,14 +60,14 @@ void copy_to_user_page(struct vm_area_struct *vma, struct page *page,  		       unsigned long len)  {  	if (boot_cpu_data.dcache.n_aliases && page_mapped(page) && -	    !test_bit(PG_dcache_dirty, &page->flags)) { +	    test_bit(PG_dcache_clean, &page->flags)) {  		void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK);  		memcpy(vto, src, len);  		kunmap_coherent(vto);  	} else {  		memcpy(dst, src, len);  		if (boot_cpu_data.dcache.n_aliases) -			set_bit(PG_dcache_dirty, &page->flags); +			clear_bit(PG_dcache_clean, &page->flags);  	}  	if (vma->vm_flags & VM_EXEC) @@ -79,14 +79,14 @@ void copy_from_user_page(struct vm_area_struct *vma, struct page *page,  			 unsigned long len)  {  	if (boot_cpu_data.dcache.n_aliases && page_mapped(page) && -	    !test_bit(PG_dcache_dirty, &page->flags)) { +	    test_bit(PG_dcache_clean, &page->flags)) {  		void *vfrom = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK);  		memcpy(dst, vfrom, len);  		kunmap_coherent(vfrom);  	} else {  		memcpy(dst, src, len);  		if (boot_cpu_data.dcache.n_aliases) -			set_bit(PG_dcache_dirty, &page->flags); +			clear_bit(PG_dcache_clean, &page->flags);  	}  } @@ -95,23 +95,24 @@ void copy_user_highpage(struct page *to, struct page *from,  {  	void *vfrom, *vto; -	vto = kmap_atomic(to, KM_USER1); +	vto = kmap_atomic(to);  	if (boot_cpu_data.dcache.n_aliases && page_mapped(from) && -	    !test_bit(PG_dcache_dirty, &from->flags)) { +	    test_bit(PG_dcache_clean, &from->flags)) {  		vfrom = kmap_coherent(from, vaddr);  		copy_page(vto, vfrom);  		kunmap_coherent(vfrom);  	} else { -		vfrom = kmap_atomic(from, KM_USER0); +		vfrom = kmap_atomic(from);  		copy_page(vto, vfrom); -		kunmap_atomic(vfrom, KM_USER0); +		kunmap_atomic(vfrom);  	} -	if (pages_do_alias((unsigned long)vto, vaddr & PAGE_MASK)) +	if (pages_do_alias((unsigned long)vto, vaddr & PAGE_MASK) || +	    (vma->vm_flags & VM_EXEC))  		__flush_purge_region(vto, PAGE_SIZE); -	kunmap_atomic(vto, KM_USER1); +	kunmap_atomic(vto);  	/* Make sure this page is cleared on other CPU's too before using it */  	smp_wmb();  } @@ -119,14 +120,14 @@ EXPORT_SYMBOL(copy_user_highpage);  void clear_user_highpage(struct page *page, unsigned long vaddr)  { -	void *kaddr = kmap_atomic(page, KM_USER0); +	void *kaddr = kmap_atomic(page);  	clear_page(kaddr);  	if (pages_do_alias((unsigned long)kaddr, vaddr & PAGE_MASK))  		__flush_purge_region(kaddr, PAGE_SIZE); -	kunmap_atomic(kaddr, KM_USER0); +	kunmap_atomic(kaddr);  }  EXPORT_SYMBOL(clear_user_highpage); @@ -141,7 +142,7 @@ void __update_cache(struct vm_area_struct *vma,  	page = pfn_to_page(pfn);  	if (pfn_valid(pfn)) { -		int dirty = test_and_clear_bit(PG_dcache_dirty, &page->flags); +		int dirty = !test_and_set_bit(PG_dcache_clean, &page->flags);  		if (dirty)  			__flush_purge_region(page_address(page), PAGE_SIZE);  	} @@ -153,7 +154,7 @@ void __flush_anon_page(struct page *page, unsigned long vmaddr)  	if (pages_do_alias(addr, vmaddr)) {  		if (boot_cpu_data.dcache.n_aliases && page_mapped(page) && -		    !test_bit(PG_dcache_dirty, &page->flags)) { +		    test_bit(PG_dcache_clean, &page->flags)) {  			void *kaddr;  			kaddr = kmap_coherent(page, vmaddr); @@ -284,8 +285,8 @@ void __init cpu_cache_init(void)  {  	unsigned int cache_disabled = 0; -#ifdef CCR -	cache_disabled = !(__raw_readl(CCR) & CCR_CACHE_ENABLE); +#ifdef SH_CCR +	cache_disabled = !(__raw_readl(SH_CCR) & CCR_CACHE_ENABLE);  #endif  	compute_alias(&boot_cpu_data.icache); diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c index 40733a95240..b81d9dbf9fe 100644 --- a/arch/sh/mm/consistent.c +++ b/arch/sh/mm/consistent.c @@ -33,7 +33,8 @@ static int __init dma_init(void)  fs_initcall(dma_init);  void *dma_generic_alloc_coherent(struct device *dev, size_t size, -				 dma_addr_t *dma_handle, gfp_t gfp) +				 dma_addr_t *dma_handle, gfp_t gfp, +				 struct dma_attrs *attrs)  {  	void *ret, *ret_nocache;  	int order = get_order(size); @@ -64,7 +65,8 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size,  }  void dma_generic_free_coherent(struct device *dev, size_t size, -			       void *vaddr, dma_addr_t dma_handle) +			       void *vaddr, dma_addr_t dma_handle, +			       struct dma_attrs *attrs)  {  	int order = get_order(size);  	unsigned long pfn = dma_handle >> PAGE_SHIFT; @@ -82,7 +84,7 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size,  	void *addr;  	addr = __in_29bit_mode() ? -	       (void *)P1SEGADDR((unsigned long)vaddr) : vaddr; +	       (void *)CAC_ADDR((unsigned long)vaddr) : vaddr;  	switch (direction) {  	case DMA_FROM_DEVICE:		/* invalidate only */ diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c new file mode 100644 index 00000000000..541dc610150 --- /dev/null +++ b/arch/sh/mm/fault.c @@ -0,0 +1,517 @@ +/* + * Page fault handler for SH with an MMU. + * + *  Copyright (C) 1999  Niibe Yutaka + *  Copyright (C) 2003 - 2012  Paul Mundt + * + *  Based on linux/arch/i386/mm/fault.c: + *   Copyright (C) 1995  Linus Torvalds + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/kernel.h> +#include <linux/mm.h> +#include <linux/hardirq.h> +#include <linux/kprobes.h> +#include <linux/perf_event.h> +#include <linux/kdebug.h> +#include <asm/io_trapped.h> +#include <asm/mmu_context.h> +#include <asm/tlbflush.h> +#include <asm/traps.h> + +static inline int notify_page_fault(struct pt_regs *regs, int trap) +{ +	int ret = 0; + +	if (kprobes_built_in() && !user_mode(regs)) { +		preempt_disable(); +		if (kprobe_running() && kprobe_fault_handler(regs, trap)) +			ret = 1; +		preempt_enable(); +	} + +	return ret; +} + +static void +force_sig_info_fault(int si_signo, int si_code, unsigned long address, +		     struct task_struct *tsk) +{ +	siginfo_t info; + +	info.si_signo	= si_signo; +	info.si_errno	= 0; +	info.si_code	= si_code; +	info.si_addr	= (void __user *)address; + +	force_sig_info(si_signo, &info, tsk); +} + +/* + * This is useful to dump out the page tables associated with + * 'addr' in mm 'mm'. + */ +static void show_pte(struct mm_struct *mm, unsigned long addr) +{ +	pgd_t *pgd; + +	if (mm) { +		pgd = mm->pgd; +	} else { +		pgd = get_TTB(); + +		if (unlikely(!pgd)) +			pgd = swapper_pg_dir; +	} + +	printk(KERN_ALERT "pgd = %p\n", pgd); +	pgd += pgd_index(addr); +	printk(KERN_ALERT "[%08lx] *pgd=%0*Lx", addr, +	       (u32)(sizeof(*pgd) * 2), (u64)pgd_val(*pgd)); + +	do { +		pud_t *pud; +		pmd_t *pmd; +		pte_t *pte; + +		if (pgd_none(*pgd)) +			break; + +		if (pgd_bad(*pgd)) { +			printk("(bad)"); +			break; +		} + +		pud = pud_offset(pgd, addr); +		if (PTRS_PER_PUD != 1) +			printk(", *pud=%0*Lx", (u32)(sizeof(*pud) * 2), +			       (u64)pud_val(*pud)); + +		if (pud_none(*pud)) +			break; + +		if (pud_bad(*pud)) { +			printk("(bad)"); +			break; +		} + +		pmd = pmd_offset(pud, addr); +		if (PTRS_PER_PMD != 1) +			printk(", *pmd=%0*Lx", (u32)(sizeof(*pmd) * 2), +			       (u64)pmd_val(*pmd)); + +		if (pmd_none(*pmd)) +			break; + +		if (pmd_bad(*pmd)) { +			printk("(bad)"); +			break; +		} + +		/* We must not map this if we have highmem enabled */ +		if (PageHighMem(pfn_to_page(pmd_val(*pmd) >> PAGE_SHIFT))) +			break; + +		pte = pte_offset_kernel(pmd, addr); +		printk(", *pte=%0*Lx", (u32)(sizeof(*pte) * 2), +		       (u64)pte_val(*pte)); +	} while (0); + +	printk("\n"); +} + +static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address) +{ +	unsigned index = pgd_index(address); +	pgd_t *pgd_k; +	pud_t *pud, *pud_k; +	pmd_t *pmd, *pmd_k; + +	pgd += index; +	pgd_k = init_mm.pgd + index; + +	if (!pgd_present(*pgd_k)) +		return NULL; + +	pud = pud_offset(pgd, address); +	pud_k = pud_offset(pgd_k, address); +	if (!pud_present(*pud_k)) +		return NULL; + +	if (!pud_present(*pud)) +	    set_pud(pud, *pud_k); + +	pmd = pmd_offset(pud, address); +	pmd_k = pmd_offset(pud_k, address); +	if (!pmd_present(*pmd_k)) +		return NULL; + +	if (!pmd_present(*pmd)) +		set_pmd(pmd, *pmd_k); +	else { +		/* +		 * The page tables are fully synchronised so there must +		 * be another reason for the fault. Return NULL here to +		 * signal that we have not taken care of the fault. +		 */ +		BUG_ON(pmd_page(*pmd) != pmd_page(*pmd_k)); +		return NULL; +	} + +	return pmd_k; +} + +#ifdef CONFIG_SH_STORE_QUEUES +#define __FAULT_ADDR_LIMIT	P3_ADDR_MAX +#else +#define __FAULT_ADDR_LIMIT	VMALLOC_END +#endif + +/* + * Handle a fault on the vmalloc or module mapping area + */ +static noinline int vmalloc_fault(unsigned long address) +{ +	pgd_t *pgd_k; +	pmd_t *pmd_k; +	pte_t *pte_k; + +	/* Make sure we are in vmalloc/module/P3 area: */ +	if (!(address >= VMALLOC_START && address < __FAULT_ADDR_LIMIT)) +		return -1; + +	/* +	 * Synchronize this task's top level page-table +	 * with the 'reference' page table. +	 * +	 * Do _not_ use "current" here. We might be inside +	 * an interrupt in the middle of a task switch.. +	 */ +	pgd_k = get_TTB(); +	pmd_k = vmalloc_sync_one(pgd_k, address); +	if (!pmd_k) +		return -1; + +	pte_k = pte_offset_kernel(pmd_k, address); +	if (!pte_present(*pte_k)) +		return -1; + +	return 0; +} + +static void +show_fault_oops(struct pt_regs *regs, unsigned long address) +{ +	if (!oops_may_print()) +		return; + +	printk(KERN_ALERT "BUG: unable to handle kernel "); +	if (address < PAGE_SIZE) +		printk(KERN_CONT "NULL pointer dereference"); +	else +		printk(KERN_CONT "paging request"); + +	printk(KERN_CONT " at %08lx\n", address); +	printk(KERN_ALERT "PC:"); +	printk_address(regs->pc, 1); + +	show_pte(NULL, address); +} + +static noinline void +no_context(struct pt_regs *regs, unsigned long error_code, +	   unsigned long address) +{ +	/* Are we prepared to handle this kernel fault?  */ +	if (fixup_exception(regs)) +		return; + +	if (handle_trapped_io(regs, address)) +		return; + +	/* +	 * Oops. The kernel tried to access some bad page. We'll have to +	 * terminate things with extreme prejudice. +	 */ +	bust_spinlocks(1); + +	show_fault_oops(regs, address); + +	die("Oops", regs, error_code); +	bust_spinlocks(0); +	do_exit(SIGKILL); +} + +static void +__bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, +		       unsigned long address, int si_code) +{ +	struct task_struct *tsk = current; + +	/* User mode accesses just cause a SIGSEGV */ +	if (user_mode(regs)) { +		/* +		 * It's possible to have interrupts off here: +		 */ +		local_irq_enable(); + +		force_sig_info_fault(SIGSEGV, si_code, address, tsk); + +		return; +	} + +	no_context(regs, error_code, address); +} + +static noinline void +bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, +		     unsigned long address) +{ +	__bad_area_nosemaphore(regs, error_code, address, SEGV_MAPERR); +} + +static void +__bad_area(struct pt_regs *regs, unsigned long error_code, +	   unsigned long address, int si_code) +{ +	struct mm_struct *mm = current->mm; + +	/* +	 * Something tried to access memory that isn't in our memory map.. +	 * Fix it, but check if it's kernel or user first.. +	 */ +	up_read(&mm->mmap_sem); + +	__bad_area_nosemaphore(regs, error_code, address, si_code); +} + +static noinline void +bad_area(struct pt_regs *regs, unsigned long error_code, unsigned long address) +{ +	__bad_area(regs, error_code, address, SEGV_MAPERR); +} + +static noinline void +bad_area_access_error(struct pt_regs *regs, unsigned long error_code, +		      unsigned long address) +{ +	__bad_area(regs, error_code, address, SEGV_ACCERR); +} + +static void +do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address) +{ +	struct task_struct *tsk = current; +	struct mm_struct *mm = tsk->mm; + +	up_read(&mm->mmap_sem); + +	/* Kernel mode? Handle exceptions or die: */ +	if (!user_mode(regs)) +		no_context(regs, error_code, address); + +	force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk); +} + +static noinline int +mm_fault_error(struct pt_regs *regs, unsigned long error_code, +	       unsigned long address, unsigned int fault) +{ +	/* +	 * Pagefault was interrupted by SIGKILL. We have no reason to +	 * continue pagefault. +	 */ +	if (fatal_signal_pending(current)) { +		if (!(fault & VM_FAULT_RETRY)) +			up_read(¤t->mm->mmap_sem); +		if (!user_mode(regs)) +			no_context(regs, error_code, address); +		return 1; +	} + +	if (!(fault & VM_FAULT_ERROR)) +		return 0; + +	if (fault & VM_FAULT_OOM) { +		/* Kernel mode? Handle exceptions or die: */ +		if (!user_mode(regs)) { +			up_read(¤t->mm->mmap_sem); +			no_context(regs, error_code, address); +			return 1; +		} +		up_read(¤t->mm->mmap_sem); + +		/* +		 * We ran out of memory, call the OOM killer, and return the +		 * userspace (which will retry the fault, or kill us if we got +		 * oom-killed): +		 */ +		pagefault_out_of_memory(); +	} else { +		if (fault & VM_FAULT_SIGBUS) +			do_sigbus(regs, error_code, address); +		else +			BUG(); +	} + +	return 1; +} + +static inline int access_error(int error_code, struct vm_area_struct *vma) +{ +	if (error_code & FAULT_CODE_WRITE) { +		/* write, present and write, not present: */ +		if (unlikely(!(vma->vm_flags & VM_WRITE))) +			return 1; +		return 0; +	} + +	/* ITLB miss on NX page */ +	if (unlikely((error_code & FAULT_CODE_ITLB) && +		     !(vma->vm_flags & VM_EXEC))) +		return 1; + +	/* read, not present: */ +	if (unlikely(!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE)))) +		return 1; + +	return 0; +} + +static int fault_in_kernel_space(unsigned long address) +{ +	return address >= TASK_SIZE; +} + +/* + * This routine handles page faults.  It determines the address, + * and the problem, and then passes it off to one of the appropriate + * routines. + */ +asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, +					unsigned long error_code, +					unsigned long address) +{ +	unsigned long vec; +	struct task_struct *tsk; +	struct mm_struct *mm; +	struct vm_area_struct * vma; +	int fault; +	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + +	tsk = current; +	mm = tsk->mm; +	vec = lookup_exception_vector(); + +	/* +	 * We fault-in kernel-space virtual memory on-demand. The +	 * 'reference' page table is init_mm.pgd. +	 * +	 * NOTE! We MUST NOT take any locks for this case. We may +	 * be in an interrupt or a critical region, and should +	 * only copy the information from the master page table, +	 * nothing more. +	 */ +	if (unlikely(fault_in_kernel_space(address))) { +		if (vmalloc_fault(address) >= 0) +			return; +		if (notify_page_fault(regs, vec)) +			return; + +		bad_area_nosemaphore(regs, error_code, address); +		return; +	} + +	if (unlikely(notify_page_fault(regs, vec))) +		return; + +	/* Only enable interrupts if they were on before the fault */ +	if ((regs->sr & SR_IMASK) != SR_IMASK) +		local_irq_enable(); + +	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); + +	/* +	 * If we're in an interrupt, have no user context or are running +	 * in an atomic region then we must not take the fault: +	 */ +	if (unlikely(in_atomic() || !mm)) { +		bad_area_nosemaphore(regs, error_code, address); +		return; +	} + +retry: +	down_read(&mm->mmap_sem); + +	vma = find_vma(mm, address); +	if (unlikely(!vma)) { +		bad_area(regs, error_code, address); +		return; +	} +	if (likely(vma->vm_start <= address)) +		goto good_area; +	if (unlikely(!(vma->vm_flags & VM_GROWSDOWN))) { +		bad_area(regs, error_code, address); +		return; +	} +	if (unlikely(expand_stack(vma, address))) { +		bad_area(regs, error_code, address); +		return; +	} + +	/* +	 * Ok, we have a good vm_area for this memory access, so +	 * we can handle it.. +	 */ +good_area: +	if (unlikely(access_error(error_code, vma))) { +		bad_area_access_error(regs, error_code, address); +		return; +	} + +	set_thread_fault_code(error_code); + +	if (user_mode(regs)) +		flags |= FAULT_FLAG_USER; +	if (error_code & FAULT_CODE_WRITE) +		flags |= FAULT_FLAG_WRITE; + +	/* +	 * If for any reason at all we couldn't handle the fault, +	 * make sure we exit gracefully rather than endlessly redo +	 * the fault. +	 */ +	fault = handle_mm_fault(mm, vma, address, flags); + +	if (unlikely(fault & (VM_FAULT_RETRY | VM_FAULT_ERROR))) +		if (mm_fault_error(regs, error_code, address, fault)) +			return; + +	if (flags & FAULT_FLAG_ALLOW_RETRY) { +		if (fault & VM_FAULT_MAJOR) { +			tsk->maj_flt++; +			perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, +				      regs, address); +		} else { +			tsk->min_flt++; +			perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, +				      regs, address); +		} +		if (fault & VM_FAULT_RETRY) { +			flags &= ~FAULT_FLAG_ALLOW_RETRY; +			flags |= FAULT_FLAG_TRIED; + +			/* +			 * No need to up_read(&mm->mmap_sem) as we would +			 * have already released it in __lock_page_or_retry +			 * in mm/filemap.c. +			 */ +			goto retry; +		} +	} + +	up_read(&mm->mmap_sem); +} diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c deleted file mode 100644 index d4c34d757f0..00000000000 --- a/arch/sh/mm/fault_32.c +++ /dev/null @@ -1,374 +0,0 @@ -/* - * Page fault handler for SH with an MMU. - * - *  Copyright (C) 1999  Niibe Yutaka - *  Copyright (C) 2003 - 2009  Paul Mundt - * - *  Based on linux/arch/i386/mm/fault.c: - *   Copyright (C) 1995  Linus Torvalds - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#include <linux/kernel.h> -#include <linux/mm.h> -#include <linux/hardirq.h> -#include <linux/kprobes.h> -#include <linux/perf_event.h> -#include <asm/io_trapped.h> -#include <asm/system.h> -#include <asm/mmu_context.h> -#include <asm/tlbflush.h> - -static inline int notify_page_fault(struct pt_regs *regs, int trap) -{ -	int ret = 0; - -	if (kprobes_built_in() && !user_mode(regs)) { -		preempt_disable(); -		if (kprobe_running() && kprobe_fault_handler(regs, trap)) -			ret = 1; -		preempt_enable(); -	} - -	return ret; -} - -static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address) -{ -	unsigned index = pgd_index(address); -	pgd_t *pgd_k; -	pud_t *pud, *pud_k; -	pmd_t *pmd, *pmd_k; - -	pgd += index; -	pgd_k = init_mm.pgd + index; - -	if (!pgd_present(*pgd_k)) -		return NULL; - -	pud = pud_offset(pgd, address); -	pud_k = pud_offset(pgd_k, address); -	if (!pud_present(*pud_k)) -		return NULL; - -	if (!pud_present(*pud)) -	    set_pud(pud, *pud_k); - -	pmd = pmd_offset(pud, address); -	pmd_k = pmd_offset(pud_k, address); -	if (!pmd_present(*pmd_k)) -		return NULL; - -	if (!pmd_present(*pmd)) -		set_pmd(pmd, *pmd_k); -	else { -		/* -		 * The page tables are fully synchronised so there must -		 * be another reason for the fault. Return NULL here to -		 * signal that we have not taken care of the fault. -		 */ -		BUG_ON(pmd_page(*pmd) != pmd_page(*pmd_k)); -		return NULL; -	} - -	return pmd_k; -} - -/* - * Handle a fault on the vmalloc or module mapping area - */ -static noinline int vmalloc_fault(unsigned long address) -{ -	pgd_t *pgd_k; -	pmd_t *pmd_k; -	pte_t *pte_k; - -	/* Make sure we are in vmalloc/module/P3 area: */ -	if (!(address >= VMALLOC_START && address < P3_ADDR_MAX)) -		return -1; - -	/* -	 * Synchronize this task's top level page-table -	 * with the 'reference' page table. -	 * -	 * Do _not_ use "current" here. We might be inside -	 * an interrupt in the middle of a task switch.. -	 */ -	pgd_k = get_TTB(); -	pmd_k = vmalloc_sync_one(pgd_k, address); -	if (!pmd_k) -		return -1; - -	pte_k = pte_offset_kernel(pmd_k, address); -	if (!pte_present(*pte_k)) -		return -1; - -	return 0; -} - -static int fault_in_kernel_space(unsigned long address) -{ -	return address >= TASK_SIZE; -} - -/* - * This routine handles page faults.  It determines the address, - * and the problem, and then passes it off to one of the appropriate - * routines. - */ -asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, -					unsigned long writeaccess, -					unsigned long address) -{ -	unsigned long vec; -	struct task_struct *tsk; -	struct mm_struct *mm; -	struct vm_area_struct * vma; -	int si_code; -	int fault; -	siginfo_t info; - -	tsk = current; -	mm = tsk->mm; -	si_code = SEGV_MAPERR; -	vec = lookup_exception_vector(); - -	/* -	 * We fault-in kernel-space virtual memory on-demand. The -	 * 'reference' page table is init_mm.pgd. -	 * -	 * NOTE! We MUST NOT take any locks for this case. We may -	 * be in an interrupt or a critical region, and should -	 * only copy the information from the master page table, -	 * nothing more. -	 */ -	if (unlikely(fault_in_kernel_space(address))) { -		if (vmalloc_fault(address) >= 0) -			return; -		if (notify_page_fault(regs, vec)) -			return; - -		goto bad_area_nosemaphore; -	} - -	if (unlikely(notify_page_fault(regs, vec))) -		return; - -	/* Only enable interrupts if they were on before the fault */ -	if ((regs->sr & SR_IMASK) != SR_IMASK) -		local_irq_enable(); - -	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address); - -	/* -	 * If we're in an interrupt, have no user context or are running -	 * in an atomic region then we must not take the fault: -	 */ -	if (in_atomic() || !mm) -		goto no_context; - -	down_read(&mm->mmap_sem); - -	vma = find_vma(mm, address); -	if (!vma) -		goto bad_area; -	if (vma->vm_start <= address) -		goto good_area; -	if (!(vma->vm_flags & VM_GROWSDOWN)) -		goto bad_area; -	if (expand_stack(vma, address)) -		goto bad_area; - -	/* -	 * Ok, we have a good vm_area for this memory access, so -	 * we can handle it.. -	 */ -good_area: -	si_code = SEGV_ACCERR; -	if (writeaccess) { -		if (!(vma->vm_flags & VM_WRITE)) -			goto bad_area; -	} else { -		if (!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE))) -			goto bad_area; -	} - -	/* -	 * If for any reason at all we couldn't handle the fault, -	 * make sure we exit gracefully rather than endlessly redo -	 * the fault. -	 */ -	fault = handle_mm_fault(mm, vma, address, writeaccess ? FAULT_FLAG_WRITE : 0); -	if (unlikely(fault & VM_FAULT_ERROR)) { -		if (fault & VM_FAULT_OOM) -			goto out_of_memory; -		else if (fault & VM_FAULT_SIGBUS) -			goto do_sigbus; -		BUG(); -	} -	if (fault & VM_FAULT_MAJOR) { -		tsk->maj_flt++; -		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, -				     regs, address); -	} else { -		tsk->min_flt++; -		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, -				     regs, address); -	} - -	up_read(&mm->mmap_sem); -	return; - -	/* -	 * Something tried to access memory that isn't in our memory map.. -	 * Fix it, but check if it's kernel or user first.. -	 */ -bad_area: -	up_read(&mm->mmap_sem); - -bad_area_nosemaphore: -	if (user_mode(regs)) { -		info.si_signo = SIGSEGV; -		info.si_errno = 0; -		info.si_code = si_code; -		info.si_addr = (void *) address; -		force_sig_info(SIGSEGV, &info, tsk); -		return; -	} - -no_context: -	/* Are we prepared to handle this kernel fault?  */ -	if (fixup_exception(regs)) -		return; - -	if (handle_trapped_io(regs, address)) -		return; -/* - * Oops. The kernel tried to access some bad page. We'll have to - * terminate things with extreme prejudice. - * - */ - -	bust_spinlocks(1); - -	if (oops_may_print()) { -		unsigned long page; - -		if (address < PAGE_SIZE) -			printk(KERN_ALERT "Unable to handle kernel NULL " -					  "pointer dereference"); -		else -			printk(KERN_ALERT "Unable to handle kernel paging " -					  "request"); -		printk(" at virtual address %08lx\n", address); -		printk(KERN_ALERT "pc = %08lx\n", regs->pc); -		page = (unsigned long)get_TTB(); -		if (page) { -			page = ((__typeof__(page) *)page)[address >> PGDIR_SHIFT]; -			printk(KERN_ALERT "*pde = %08lx\n", page); -			if (page & _PAGE_PRESENT) { -				page &= PAGE_MASK; -				address &= 0x003ff000; -				page = ((__typeof__(page) *) -						__va(page))[address >> -							    PAGE_SHIFT]; -				printk(KERN_ALERT "*pte = %08lx\n", page); -			} -		} -	} - -	die("Oops", regs, writeaccess); -	bust_spinlocks(0); -	do_exit(SIGKILL); - -/* - * We ran out of memory, or some other thing happened to us that made - * us unable to handle the page fault gracefully. - */ -out_of_memory: -	up_read(&mm->mmap_sem); -	if (!user_mode(regs)) -		goto no_context; -	pagefault_out_of_memory(); -	return; - -do_sigbus: -	up_read(&mm->mmap_sem); - -	/* -	 * Send a sigbus, regardless of whether we were in kernel -	 * or user mode. -	 */ -	info.si_signo = SIGBUS; -	info.si_errno = 0; -	info.si_code = BUS_ADRERR; -	info.si_addr = (void *)address; -	force_sig_info(SIGBUS, &info, tsk); - -	/* Kernel mode? Handle exceptions or die */ -	if (!user_mode(regs)) -		goto no_context; -} - -/* - * Called with interrupts disabled. - */ -asmlinkage int __kprobes -handle_tlbmiss(struct pt_regs *regs, unsigned long writeaccess, -	       unsigned long address) -{ -	pgd_t *pgd; -	pud_t *pud; -	pmd_t *pmd; -	pte_t *pte; -	pte_t entry; - -	/* -	 * We don't take page faults for P1, P2, and parts of P4, these -	 * are always mapped, whether it be due to legacy behaviour in -	 * 29-bit mode, or due to PMB configuration in 32-bit mode. -	 */ -	if (address >= P3SEG && address < P3_ADDR_MAX) { -		pgd = pgd_offset_k(address); -	} else { -		if (unlikely(address >= TASK_SIZE || !current->mm)) -			return 1; - -		pgd = pgd_offset(current->mm, address); -	} - -	pud = pud_offset(pgd, address); -	if (pud_none_or_clear_bad(pud)) -		return 1; -	pmd = pmd_offset(pud, address); -	if (pmd_none_or_clear_bad(pmd)) -		return 1; -	pte = pte_offset_kernel(pmd, address); -	entry = *pte; -	if (unlikely(pte_none(entry) || pte_not_present(entry))) -		return 1; -	if (unlikely(writeaccess && !pte_write(entry))) -		return 1; - -	if (writeaccess) -		entry = pte_mkdirty(entry); -	entry = pte_mkyoung(entry); - -	set_pte(pte, entry); - -#if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SMP) -	/* -	 * SH-4 does not set MMUCR.RC to the corresponding TLB entry in -	 * the case of an initial page write exception, so we need to -	 * flush it in order to avoid potential TLB entry duplication. -	 */ -	if (writeaccess == 2) -		local_flush_tlb_one(get_asid(), address & PAGE_MASK); -#endif - -	update_mmu_cache(NULL, address, pte); - -	return 0; -} diff --git a/arch/sh/mm/fault_64.c b/arch/sh/mm/fault_64.c deleted file mode 100644 index 2b356cec248..00000000000 --- a/arch/sh/mm/fault_64.c +++ /dev/null @@ -1,266 +0,0 @@ -/* - * The SH64 TLB miss. - * - * Original code from fault.c - * Copyright (C) 2000, 2001  Paolo Alberelli - * - * Fast PTE->TLB refill path - * Copyright (C) 2003 Richard.Curnow@superh.com - * - * IMPORTANT NOTES : - * The do_fast_page_fault function is called from a context in entry.S - * where very few registers have been saved.  In particular, the code in - * this file must be compiled not to use ANY caller-save registers that - * are not part of the restricted save set.  Also, it means that code in - * this file must not make calls to functions elsewhere in the kernel, or - * else the excepting context will see corruption in its caller-save - * registers.  Plus, the entry.S save area is non-reentrant, so this code - * has to run with SR.BL==1, i.e. no interrupts taken inside it and panic - * on any exception. - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - */ -#include <linux/signal.h> -#include <linux/sched.h> -#include <linux/kernel.h> -#include <linux/errno.h> -#include <linux/string.h> -#include <linux/types.h> -#include <linux/ptrace.h> -#include <linux/mman.h> -#include <linux/mm.h> -#include <linux/smp.h> -#include <linux/interrupt.h> -#include <asm/system.h> -#include <asm/tlb.h> -#include <asm/io.h> -#include <asm/uaccess.h> -#include <asm/pgalloc.h> -#include <asm/mmu_context.h> -#include <cpu/registers.h> - -/* Callable from fault.c, so not static */ -inline void __do_tlb_refill(unsigned long address, -                            unsigned long long is_text_not_data, pte_t *pte) -{ -	unsigned long long ptel; -	unsigned long long pteh=0; -	struct tlb_info *tlbp; -	unsigned long long next; - -	/* Get PTEL first */ -	ptel = pte_val(*pte); - -	/* -	 * Set PTEH register -	 */ -	pteh = neff_sign_extend(address & MMU_VPN_MASK); - -	/* Set the ASID. */ -	pteh |= get_asid() << PTEH_ASID_SHIFT; -	pteh |= PTEH_VALID; - -	/* Set PTEL register, set_pte has performed the sign extension */ -	ptel &= _PAGE_FLAGS_HARDWARE_MASK; /* drop software flags */ - -	tlbp = is_text_not_data ? &(cpu_data->itlb) : &(cpu_data->dtlb); -	next = tlbp->next; -	__flush_tlb_slot(next); -	asm volatile ("putcfg %0,1,%2\n\n\t" -		      "putcfg %0,0,%1\n" -		      :  : "r" (next), "r" (pteh), "r" (ptel) ); - -	next += TLB_STEP; -	if (next > tlbp->last) next = tlbp->first; -	tlbp->next = next; - -} - -static int handle_vmalloc_fault(struct mm_struct *mm, -				unsigned long protection_flags, -                                unsigned long long textaccess, -				unsigned long address) -{ -	pgd_t *dir; -	pud_t *pud; -	pmd_t *pmd; -	static pte_t *pte; -	pte_t entry; - -	dir = pgd_offset_k(address); - -	pud = pud_offset(dir, address); -	if (pud_none_or_clear_bad(pud)) -		return 0; - -	pmd = pmd_offset(pud, address); -	if (pmd_none_or_clear_bad(pmd)) -		return 0; - -	pte = pte_offset_kernel(pmd, address); -	entry = *pte; - -	if (pte_none(entry) || !pte_present(entry)) -		return 0; -	if ((pte_val(entry) & protection_flags) != protection_flags) -		return 0; - -        __do_tlb_refill(address, textaccess, pte); - -	return 1; -} - -static int handle_tlbmiss(struct mm_struct *mm, -			  unsigned long long protection_flags, -			  unsigned long long textaccess, -			  unsigned long address) -{ -	pgd_t *dir; -	pud_t *pud; -	pmd_t *pmd; -	pte_t *pte; -	pte_t entry; - -	/* NB. The PGD currently only contains a single entry - there is no -	   page table tree stored for the top half of the address space since -	   virtual pages in that region should never be mapped in user mode. -	   (In kernel mode, the only things in that region are the 512Mb super -	   page (locked in), and vmalloc (modules) +  I/O device pages (handled -	   by handle_vmalloc_fault), so no PGD for the upper half is required -	   by kernel mode either). - -	   See how mm->pgd is allocated and initialised in pgd_alloc to see why -	   the next test is necessary.  - RPC */ -	if (address >= (unsigned long) TASK_SIZE) -		/* upper half - never has page table entries. */ -		return 0; - -	dir = pgd_offset(mm, address); -	if (pgd_none(*dir) || !pgd_present(*dir)) -		return 0; -	if (!pgd_present(*dir)) -		return 0; - -	pud = pud_offset(dir, address); -	if (pud_none(*pud) || !pud_present(*pud)) -		return 0; - -	pmd = pmd_offset(pud, address); -	if (pmd_none(*pmd) || !pmd_present(*pmd)) -		return 0; - -	pte = pte_offset_kernel(pmd, address); -	entry = *pte; - -	if (pte_none(entry) || !pte_present(entry)) -		return 0; - -	/* -	 * If the page doesn't have sufficient protection bits set to -	 * service the kind of fault being handled, there's not much -	 * point doing the TLB refill.  Punt the fault to the general -	 * handler. -	 */ -	if ((pte_val(entry) & protection_flags) != protection_flags) -		return 0; - -        __do_tlb_refill(address, textaccess, pte); - -	return 1; -} - -/* - * Put all this information into one structure so that everything is just - * arithmetic relative to a single base address.  This reduces the number - * of movi/shori pairs needed just to load addresses of static data. - */ -struct expevt_lookup { -	unsigned short protection_flags[8]; -	unsigned char  is_text_access[8]; -	unsigned char  is_write_access[8]; -}; - -#define PRU (1<<9) -#define PRW (1<<8) -#define PRX (1<<7) -#define PRR (1<<6) - -#define DIRTY (_PAGE_DIRTY | _PAGE_ACCESSED) -#define YOUNG (_PAGE_ACCESSED) - -/* Sized as 8 rather than 4 to allow checking the PTE's PRU bit against whether -   the fault happened in user mode or privileged mode. */ -static struct expevt_lookup expevt_lookup_table = { -	.protection_flags = {PRX, PRX, 0, 0, PRR, PRR, PRW, PRW}, -	.is_text_access   = {1,   1,   0, 0, 0,   0,   0,   0} -}; - -/* -   This routine handles page faults that can be serviced just by refilling a -   TLB entry from an existing page table entry.  (This case represents a very -   large majority of page faults.) Return 1 if the fault was successfully -   handled.  Return 0 if the fault could not be handled.  (This leads into the -   general fault handling in fault.c which deals with mapping file-backed -   pages, stack growth, segmentation faults, swapping etc etc) - */ -asmlinkage int do_fast_page_fault(unsigned long long ssr_md, -				  unsigned long long expevt, -			          unsigned long address) -{ -	struct task_struct *tsk; -	struct mm_struct *mm; -	unsigned long long textaccess; -	unsigned long long protection_flags; -	unsigned long long index; -	unsigned long long expevt4; - -	/* The next few lines implement a way of hashing EXPEVT into a -	 * small array index which can be used to lookup parameters -	 * specific to the type of TLBMISS being handled. -	 * -	 * Note: -	 *	ITLBMISS has EXPEVT==0xa40 -	 *	RTLBMISS has EXPEVT==0x040 -	 *	WTLBMISS has EXPEVT==0x060 -	 */ -	expevt4 = (expevt >> 4); -	/* TODO : xor ssr_md into this expression too. Then we can check -	 * that PRU is set when it needs to be. */ -	index = expevt4 ^ (expevt4 >> 5); -	index &= 7; -	protection_flags = expevt_lookup_table.protection_flags[index]; -	textaccess       = expevt_lookup_table.is_text_access[index]; - -	/* SIM -	 * Note this is now called with interrupts still disabled -	 * This is to cope with being called for a missing IO port -	 * address with interrupts disabled. This should be fixed as -	 * soon as we have a better 'fast path' miss handler. -	 * -	 * Plus take care how you try and debug this stuff. -	 * For example, writing debug data to a port which you -	 * have just faulted on is not going to work. -	 */ - -	tsk = current; -	mm = tsk->mm; - -	if ((address >= VMALLOC_START && address < VMALLOC_END) || -	    (address >= IOBASE_VADDR  && address < IOBASE_END)) { -		if (ssr_md) -			/* -			 * Process-contexts can never have this address -			 * range mapped -			 */ -			if (handle_vmalloc_fault(mm, protection_flags, -						 textaccess, address)) -				return 1; -	} else if (!in_interrupt() && mm) { -		if (handle_tlbmiss(mm, protection_flags, textaccess, address)) -			return 1; -	} - -	return 0; -} diff --git a/arch/sh/mm/flush-sh4.c b/arch/sh/mm/flush-sh4.c index cef402678f4..0b85dd9dd3a 100644 --- a/arch/sh/mm/flush-sh4.c +++ b/arch/sh/mm/flush-sh4.c @@ -1,6 +1,8 @@  #include <linux/mm.h>  #include <asm/mmu_context.h> +#include <asm/cache_insns.h>  #include <asm/cacheflush.h> +#include <asm/traps.h>  /*   * Write back the dirty D-caches, but not invalidate them. diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c index 9163db3e8d1..d7762349ea4 100644 --- a/arch/sh/mm/hugetlbpage.c +++ b/arch/sh/mm/hugetlbpage.c @@ -35,7 +35,7 @@ pte_t *huge_pte_alloc(struct mm_struct *mm,  		if (pud) {  			pmd = pmd_alloc(mm, pud, addr);  			if (pmd) -				pte = pte_alloc_map(mm, pmd, addr); +				pte = pte_alloc_map(mm, NULL, pmd, addr);  		}  	} diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index 3385b28acaa..2d089fe2cba 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c @@ -2,7 +2,7 @@   * linux/arch/sh/mm/init.c   *   *  Copyright (C) 1999  Niibe Yutaka - *  Copyright (C) 2002 - 2010  Paul Mundt + *  Copyright (C) 2002 - 2011  Paul Mundt   *   *  Based on linux/arch/i386/mm/init.c:   *   Copyright (C) 1995  Linus Torvalds @@ -18,6 +18,7 @@  #include <linux/io.h>  #include <linux/memblock.h>  #include <linux/dma-mapping.h> +#include <linux/export.h>  #include <asm/mmu_context.h>  #include <asm/mmzone.h>  #include <asm/kexec.h> @@ -28,7 +29,6 @@  #include <asm/cache.h>  #include <asm/sizes.h> -DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);  pgd_t swapper_pg_dir[PTRS_PER_PGD];  void __init generic_mem_init(void) @@ -231,7 +231,7 @@ static void __init bootmem_init_one_node(unsigned int nid)  	if (!p->node_spanned_pages)  		return; -	end_pfn = p->node_start_pfn + p->node_spanned_pages; +	end_pfn = pgdat_end_pfn(p);  	total_pages = bootmem_bootmap_pages(p->node_spanned_pages); @@ -288,6 +288,8 @@ static void __init do_init_bootmem(void)  static void __init early_reserve_mem(void)  {  	unsigned long start_pfn; +	u32 zero_base = (u32)__MEMORY_START + (u32)PHYSICAL_OFFSET; +	u32 start = zero_base + (u32)CONFIG_ZERO_PAGE_OFFSET;  	/*  	 * Partially used pages are not usable - thus @@ -301,15 +303,13 @@ static void __init early_reserve_mem(void)  	 * this catches the (definitely buggy) case of us accidentally  	 * initializing the bootmem allocator with an invalid RAM area.  	 */ -	memblock_reserve(__MEMORY_START + CONFIG_ZERO_PAGE_OFFSET, -		    (PFN_PHYS(start_pfn) + PAGE_SIZE - 1) - -		    (__MEMORY_START + CONFIG_ZERO_PAGE_OFFSET)); +	memblock_reserve(start, (PFN_PHYS(start_pfn) + PAGE_SIZE - 1) - start);  	/*  	 * Reserve physical pages below CONFIG_ZERO_PAGE_OFFSET.  	 */  	if (CONFIG_ZERO_PAGE_OFFSET != 0) -		memblock_reserve(__MEMORY_START, CONFIG_ZERO_PAGE_OFFSET); +		memblock_reserve(zero_base, CONFIG_ZERO_PAGE_OFFSET);  	/*  	 * Handle additional early reservations @@ -324,14 +324,19 @@ void __init paging_init(void)  	unsigned long vaddr, end;  	int nid; -	memblock_init(); -  	sh_mv.mv_mem_init();  	early_reserve_mem(); +	/* +	 * Once the early reservations are out of the way, give the +	 * platforms a chance to kick out some memory. +	 */ +	if (sh_mv.mv_mem_reserve) +		sh_mv.mv_mem_reserve(); +  	memblock_enforce_memory_limit(memory_limit); -	memblock_analyze(); +	memblock_allow_resize();  	memblock_dump_all(); @@ -402,32 +407,16 @@ unsigned int mem_init_done = 0;  void __init mem_init(void)  { -	int codesize, datasize, initsize; -	int nid; +	pg_data_t *pgdat;  	iommu_init(); -	num_physpages = 0;  	high_memory = NULL; +	for_each_online_pgdat(pgdat) +		high_memory = max_t(void *, high_memory, +				    __va(pgdat_end_pfn(pgdat) << PAGE_SHIFT)); -	for_each_online_node(nid) { -		pg_data_t *pgdat = NODE_DATA(nid); -		unsigned long node_pages = 0; -		void *node_high_memory; - -		num_physpages += pgdat->node_present_pages; - -		if (pgdat->node_spanned_pages) -			node_pages = free_all_bootmem_node(pgdat); - -		totalram_pages += node_pages; - -		node_high_memory = (void *)__va((pgdat->node_start_pfn + -						 pgdat->node_spanned_pages) << -						 PAGE_SHIFT); -		if (node_high_memory > high_memory) -			high_memory = node_high_memory; -	} +	free_all_bootmem();  	/* Set this up early, so we can take care of the zero page */  	cpu_cache_init(); @@ -438,19 +427,8 @@ void __init mem_init(void)  	vsyscall_init(); -	codesize =  (unsigned long) &_etext - (unsigned long) &_text; -	datasize =  (unsigned long) &_edata - (unsigned long) &_etext; -	initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin; - -	printk(KERN_INFO "Memory: %luk/%luk available (%dk kernel code, " -	       "%dk data, %dk init)\n", -		nr_free_pages() << (PAGE_SHIFT-10), -		num_physpages << (PAGE_SHIFT-10), -		codesize >> 10, -		datasize >> 10, -		initsize >> 10); - -	printk(KERN_INFO "virtual kernel memory layout:\n" +	mem_init_print_info(NULL); +	pr_info("virtual kernel memory layout:\n"  		"    fixmap  : 0x%08lx - 0x%08lx   (%4ld kB)\n"  #ifdef CONFIG_HIGHMEM  		"    pkmap   : 0x%08lx - 0x%08lx   (%4ld kB)\n" @@ -496,31 +474,13 @@ void __init mem_init(void)  void free_initmem(void)  { -	unsigned long addr; - -	addr = (unsigned long)(&__init_begin); -	for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) { -		ClearPageReserved(virt_to_page(addr)); -		init_page_count(virt_to_page(addr)); -		free_page(addr); -		totalram_pages++; -	} -	printk("Freeing unused kernel memory: %ldk freed\n", -	       ((unsigned long)&__init_end - -	        (unsigned long)&__init_begin) >> 10); +	free_initmem_default(-1);  }  #ifdef CONFIG_BLK_DEV_INITRD  void free_initrd_mem(unsigned long start, unsigned long end)  { -	unsigned long p; -	for (p = start; p < end; p += PAGE_SIZE) { -		ClearPageReserved(virt_to_page(p)); -		init_page_count(virt_to_page(p)); -		free_page(p); -		totalram_pages++; -	} -	printk("Freeing initrd memory: %ldk freed\n", (end - start) >> 10); +	free_reserved_area((void *)start, (void *)end, -1, "initrd");  }  #endif @@ -553,4 +513,21 @@ int memory_add_physaddr_to_nid(u64 addr)  EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);  #endif +#ifdef CONFIG_MEMORY_HOTREMOVE +int arch_remove_memory(u64 start, u64 size) +{ +	unsigned long start_pfn = start >> PAGE_SHIFT; +	unsigned long nr_pages = size >> PAGE_SHIFT; +	struct zone *zone; +	int ret; + +	zone = page_zone(pfn_to_page(start_pfn)); +	ret = __remove_pages(zone, start_pfn, nr_pages); +	if (unlikely(ret)) +		pr_warn("%s: Failed, __remove_pages() == %d\n", __func__, +			ret); + +	return ret; +} +#endif  #endif /* CONFIG_MEMORY_HOTPLUG */ diff --git a/arch/sh/mm/kmap.c b/arch/sh/mm/kmap.c index 15d74ea4209..ec29e14ec5a 100644 --- a/arch/sh/mm/kmap.c +++ b/arch/sh/mm/kmap.c @@ -34,7 +34,7 @@ void *kmap_coherent(struct page *page, unsigned long addr)  	enum fixed_addresses idx;  	unsigned long vaddr; -	BUG_ON(test_bit(PG_dcache_dirty, &page->flags)); +	BUG_ON(!test_bit(PG_dcache_clean, &page->flags));  	pagefault_disable(); diff --git a/arch/sh/mm/mmap.c b/arch/sh/mm/mmap.c index afeb710ec5c..6777177807c 100644 --- a/arch/sh/mm/mmap.c +++ b/arch/sh/mm/mmap.c @@ -30,25 +30,13 @@ static inline unsigned long COLOUR_ALIGN(unsigned long addr,  	return base + off;  } -static inline unsigned long COLOUR_ALIGN_DOWN(unsigned long addr, -					      unsigned long pgoff) -{ -	unsigned long base = addr & ~shm_align_mask; -	unsigned long off = (pgoff << PAGE_SHIFT) & shm_align_mask; - -	if (base + off <= addr) -		return base + off; - -	return base - off; -} -  unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,  	unsigned long len, unsigned long pgoff, unsigned long flags)  {  	struct mm_struct *mm = current->mm;  	struct vm_area_struct *vma; -	unsigned long start_addr;  	int do_colour_align; +	struct vm_unmapped_area_info info;  	if (flags & MAP_FIXED) {  		/* We do not accept a shared mapping if it would violate @@ -79,47 +67,13 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,  			return addr;  	} -	if (len > mm->cached_hole_size) { -		start_addr = addr = mm->free_area_cache; -	} else { -	        mm->cached_hole_size = 0; -		start_addr = addr = TASK_UNMAPPED_BASE; -	} - -full_search: -	if (do_colour_align) -		addr = COLOUR_ALIGN(addr, pgoff); -	else -		addr = PAGE_ALIGN(mm->free_area_cache); - -	for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { -		/* At this point:  (!vma || addr < vma->vm_end). */ -		if (unlikely(TASK_SIZE - len < addr)) { -			/* -			 * Start a new search - just in case we missed -			 * some holes. -			 */ -			if (start_addr != TASK_UNMAPPED_BASE) { -				start_addr = addr = TASK_UNMAPPED_BASE; -				mm->cached_hole_size = 0; -				goto full_search; -			} -			return -ENOMEM; -		} -		if (likely(!vma || addr + len <= vma->vm_start)) { -			/* -			 * Remember the place where we stopped the search: -			 */ -			mm->free_area_cache = addr + len; -			return addr; -		} -		if (addr + mm->cached_hole_size < vma->vm_start) -		        mm->cached_hole_size = vma->vm_start - addr; - -		addr = vma->vm_end; -		if (do_colour_align) -			addr = COLOUR_ALIGN(addr, pgoff); -	} +	info.flags = 0; +	info.length = len; +	info.low_limit = TASK_UNMAPPED_BASE; +	info.high_limit = TASK_SIZE; +	info.align_mask = do_colour_align ? (PAGE_MASK & shm_align_mask) : 0; +	info.align_offset = pgoff << PAGE_SHIFT; +	return vm_unmapped_area(&info);  }  unsigned long @@ -131,6 +85,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,  	struct mm_struct *mm = current->mm;  	unsigned long addr = addr0;  	int do_colour_align; +	struct vm_unmapped_area_info info;  	if (flags & MAP_FIXED) {  		/* We do not accept a shared mapping if it would violate @@ -162,73 +117,27 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,  			return addr;  	} -	/* check if free_area_cache is useful for us */ -	if (len <= mm->cached_hole_size) { -	        mm->cached_hole_size = 0; -		mm->free_area_cache = mm->mmap_base; -	} - -	/* either no address requested or can't fit in requested address hole */ -	addr = mm->free_area_cache; -	if (do_colour_align) { -		unsigned long base = COLOUR_ALIGN_DOWN(addr-len, pgoff); +	info.flags = VM_UNMAPPED_AREA_TOPDOWN; +	info.length = len; +	info.low_limit = PAGE_SIZE; +	info.high_limit = mm->mmap_base; +	info.align_mask = do_colour_align ? (PAGE_MASK & shm_align_mask) : 0; +	info.align_offset = pgoff << PAGE_SHIFT; +	addr = vm_unmapped_area(&info); -		addr = base + len; -	} - -	/* make sure it can fit in the remaining address space */ -	if (likely(addr > len)) { -		vma = find_vma(mm, addr-len); -		if (!vma || addr <= vma->vm_start) { -			/* remember the address as a hint for next time */ -			return (mm->free_area_cache = addr-len); -		} -	} - -	if (unlikely(mm->mmap_base < len)) -		goto bottomup; - -	addr = mm->mmap_base-len; -	if (do_colour_align) -		addr = COLOUR_ALIGN_DOWN(addr, pgoff); - -	do { -		/* -		 * Lookup failure means no vma is above this address, -		 * else if new region fits below vma->vm_start, -		 * return with success: -		 */ -		vma = find_vma(mm, addr); -		if (likely(!vma || addr+len <= vma->vm_start)) { -			/* remember the address as a hint for next time */ -			return (mm->free_area_cache = addr); -		} - -		/* remember the largest hole we saw so far */ -		if (addr + mm->cached_hole_size < vma->vm_start) -		        mm->cached_hole_size = vma->vm_start - addr; - -		/* try just below the current vma->vm_start */ -		addr = vma->vm_start-len; -		if (do_colour_align) -			addr = COLOUR_ALIGN_DOWN(addr, pgoff); -	} while (likely(len < vma->vm_start)); - -bottomup:  	/*  	 * A failed mmap() very likely causes application failure,  	 * so fall back to the bottom-up function here. This scenario  	 * can happen with large stack limits and large mmap()  	 * allocations.  	 */ -	mm->cached_hole_size = ~0UL; -	mm->free_area_cache = TASK_UNMAPPED_BASE; -	addr = arch_get_unmapped_area(filp, addr0, len, pgoff, flags); -	/* -	 * Restore the topdown base: -	 */ -	mm->free_area_cache = mm->mmap_base; -	mm->cached_hole_size = ~0UL; +	if (addr & ~PAGE_MASK) { +		VM_BUG_ON(addr != -ENOMEM); +		info.flags = 0; +		info.low_limit = TASK_UNMAPPED_BASE; +		info.high_limit = TASK_SIZE; +		addr = vm_unmapped_area(&info); +	}  	return addr;  } @@ -238,7 +147,7 @@ bottomup:   * You really shouldn't be using read() or write() on /dev/mem.  This   * might go away in the future.   */ -int valid_phys_addr_range(unsigned long addr, size_t count) +int valid_phys_addr_range(phys_addr_t addr, size_t count)  {  	if (addr < __MEMORY_START)  		return 0; diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c index b20b1b3eee4..7160c9fd6fe 100644 --- a/arch/sh/mm/pmb.c +++ b/arch/sh/mm/pmb.c @@ -3,7 +3,7 @@   *   * Privileged Space Mapping Buffer (PMB) Support.   * - * Copyright (C) 2005 - 2010  Paul Mundt + * Copyright (C) 2005 - 2011  Paul Mundt   * Copyright (C) 2010  Matt Fleming   *   * This file is subject to the terms and conditions of the GNU General Public @@ -12,7 +12,7 @@   */  #include <linux/init.h>  #include <linux/kernel.h> -#include <linux/sysdev.h> +#include <linux/syscore_ops.h>  #include <linux/cpu.h>  #include <linux/module.h>  #include <linux/bitops.h> @@ -25,7 +25,6 @@  #include <linux/vmalloc.h>  #include <asm/cacheflush.h>  #include <asm/sizes.h> -#include <asm/system.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h>  #include <asm/page.h> @@ -874,46 +873,31 @@ static int __init pmb_debugfs_init(void)  subsys_initcall(pmb_debugfs_init);  #ifdef CONFIG_PM -static int pmb_sysdev_suspend(struct sys_device *dev, pm_message_t state) +static void pmb_syscore_resume(void)  { -	static pm_message_t prev_state; +	struct pmb_entry *pmbe;  	int i; -	/* Restore the PMB after a resume from hibernation */ -	if (state.event == PM_EVENT_ON && -	    prev_state.event == PM_EVENT_FREEZE) { -		struct pmb_entry *pmbe; - -		read_lock(&pmb_rwlock); +	read_lock(&pmb_rwlock); -		for (i = 0; i < ARRAY_SIZE(pmb_entry_list); i++) { -			if (test_bit(i, pmb_map)) { -				pmbe = &pmb_entry_list[i]; -				set_pmb_entry(pmbe); -			} +	for (i = 0; i < ARRAY_SIZE(pmb_entry_list); i++) { +		if (test_bit(i, pmb_map)) { +			pmbe = &pmb_entry_list[i]; +			set_pmb_entry(pmbe);  		} - -		read_unlock(&pmb_rwlock);  	} -	prev_state = state; - -	return 0; -} - -static int pmb_sysdev_resume(struct sys_device *dev) -{ -	return pmb_sysdev_suspend(dev, PMSG_ON); +	read_unlock(&pmb_rwlock);  } -static struct sysdev_driver pmb_sysdev_driver = { -	.suspend = pmb_sysdev_suspend, -	.resume = pmb_sysdev_resume, +static struct syscore_ops pmb_syscore_ops = { +	.resume = pmb_syscore_resume,  };  static int __init pmb_sysdev_init(void)  { -	return sysdev_driver_register(&cpu_sysdev_class, &pmb_sysdev_driver); +	register_syscore_ops(&pmb_syscore_ops); +	return 0;  }  subsys_initcall(pmb_sysdev_init);  #endif diff --git a/arch/sh/mm/sram.c b/arch/sh/mm/sram.c index bc156ec4545..2d8fa718d55 100644 --- a/arch/sh/mm/sram.c +++ b/arch/sh/mm/sram.c @@ -9,6 +9,7 @@   */  #include <linux/init.h>  #include <linux/kernel.h> +#include <linux/errno.h>  #include <asm/sram.h>  /* diff --git a/arch/sh/mm/tlb-pteaex.c b/arch/sh/mm/tlb-pteaex.c index b71db6af806..4db21adfe5d 100644 --- a/arch/sh/mm/tlb-pteaex.c +++ b/arch/sh/mm/tlb-pteaex.c @@ -12,7 +12,6 @@  #include <linux/kernel.h>  #include <linux/mm.h>  #include <linux/io.h> -#include <asm/system.h>  #include <asm/mmu_context.h>  #include <asm/cacheflush.h> diff --git a/arch/sh/mm/tlb-sh3.c b/arch/sh/mm/tlb-sh3.c index 7a940dbfc2e..6554fb439f0 100644 --- a/arch/sh/mm/tlb-sh3.c +++ b/arch/sh/mm/tlb-sh3.c @@ -20,7 +20,6 @@  #include <linux/smp.h>  #include <linux/interrupt.h> -#include <asm/system.h>  #include <asm/io.h>  #include <asm/uaccess.h>  #include <asm/pgalloc.h> diff --git a/arch/sh/mm/tlb-sh4.c b/arch/sh/mm/tlb-sh4.c index cfdf7930d29..d42dd7e443d 100644 --- a/arch/sh/mm/tlb-sh4.c +++ b/arch/sh/mm/tlb-sh4.c @@ -11,7 +11,6 @@  #include <linux/kernel.h>  #include <linux/mm.h>  #include <linux/io.h> -#include <asm/system.h>  #include <asm/mmu_context.h>  #include <asm/cacheflush.h> diff --git a/arch/sh/mm/tlb-sh5.c b/arch/sh/mm/tlb-sh5.c index f27dbe1c159..e4bb2a8e0a6 100644 --- a/arch/sh/mm/tlb-sh5.c +++ b/arch/sh/mm/tlb-sh5.c @@ -17,7 +17,7 @@  /**   * sh64_tlb_init - Perform initial setup for the DTLB and ITLB.   */ -int __init sh64_tlb_init(void) +int sh64_tlb_init(void)  {  	/* Assign some sane DTLB defaults */  	cpu_data->dtlb.entries	= 64; @@ -182,3 +182,43 @@ void tlb_unwire_entry(void)  	local_irq_restore(flags);  } + +void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t pte) +{ +	unsigned long long ptel; +	unsigned long long pteh=0; +	struct tlb_info *tlbp; +	unsigned long long next; +	unsigned int fault_code = get_thread_fault_code(); + +	/* Get PTEL first */ +	ptel = pte.pte_low; + +	/* +	 * Set PTEH register +	 */ +	pteh = neff_sign_extend(address & MMU_VPN_MASK); + +	/* Set the ASID. */ +	pteh |= get_asid() << PTEH_ASID_SHIFT; +	pteh |= PTEH_VALID; + +	/* Set PTEL register, set_pte has performed the sign extension */ +	ptel &= _PAGE_FLAGS_HARDWARE_MASK; /* drop software flags */ + +	if (fault_code & FAULT_CODE_ITLB) +		tlbp = &cpu_data->itlb; +	else +		tlbp = &cpu_data->dtlb; + +	next = tlbp->next; +	__flush_tlb_slot(next); +	asm volatile ("putcfg %0,1,%2\n\n\t" +		      "putcfg %0,0,%1\n" +		      :  : "r" (next), "r" (pteh), "r" (ptel) ); + +	next += TLB_STEP; +	if (next > tlbp->last) +		next = tlbp->first; +	tlbp->next = next; +} diff --git a/arch/sh/mm/tlbex_32.c b/arch/sh/mm/tlbex_32.c new file mode 100644 index 00000000000..382262dc0c4 --- /dev/null +++ b/arch/sh/mm/tlbex_32.c @@ -0,0 +1,78 @@ +/* + * TLB miss handler for SH with an MMU. + * + *  Copyright (C) 1999  Niibe Yutaka + *  Copyright (C) 2003 - 2012  Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/kernel.h> +#include <linux/mm.h> +#include <linux/kprobes.h> +#include <linux/kdebug.h> +#include <asm/mmu_context.h> +#include <asm/thread_info.h> + +/* + * Called with interrupts disabled. + */ +asmlinkage int __kprobes +handle_tlbmiss(struct pt_regs *regs, unsigned long error_code, +	       unsigned long address) +{ +	pgd_t *pgd; +	pud_t *pud; +	pmd_t *pmd; +	pte_t *pte; +	pte_t entry; + +	/* +	 * We don't take page faults for P1, P2, and parts of P4, these +	 * are always mapped, whether it be due to legacy behaviour in +	 * 29-bit mode, or due to PMB configuration in 32-bit mode. +	 */ +	if (address >= P3SEG && address < P3_ADDR_MAX) { +		pgd = pgd_offset_k(address); +	} else { +		if (unlikely(address >= TASK_SIZE || !current->mm)) +			return 1; + +		pgd = pgd_offset(current->mm, address); +	} + +	pud = pud_offset(pgd, address); +	if (pud_none_or_clear_bad(pud)) +		return 1; +	pmd = pmd_offset(pud, address); +	if (pmd_none_or_clear_bad(pmd)) +		return 1; +	pte = pte_offset_kernel(pmd, address); +	entry = *pte; +	if (unlikely(pte_none(entry) || pte_not_present(entry))) +		return 1; +	if (unlikely(error_code && !pte_write(entry))) +		return 1; + +	if (error_code) +		entry = pte_mkdirty(entry); +	entry = pte_mkyoung(entry); + +	set_pte(pte, entry); + +#if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SMP) +	/* +	 * SH-4 does not set MMUCR.RC to the corresponding TLB entry in +	 * the case of an initial page write exception, so we need to +	 * flush it in order to avoid potential TLB entry duplication. +	 */ +	if (error_code == FAULT_CODE_INITIAL) +		local_flush_tlb_one(get_asid(), address & PAGE_MASK); +#endif + +	set_thread_fault_code(error_code); +	update_mmu_cache(NULL, address, pte); + +	return 0; +} diff --git a/arch/sh/mm/tlbex_64.c b/arch/sh/mm/tlbex_64.c new file mode 100644 index 00000000000..8557548fc53 --- /dev/null +++ b/arch/sh/mm/tlbex_64.c @@ -0,0 +1,166 @@ +/* + * The SH64 TLB miss. + * + * Original code from fault.c + * Copyright (C) 2000, 2001  Paolo Alberelli + * + * Fast PTE->TLB refill path + * Copyright (C) 2003 Richard.Curnow@superh.com + * + * IMPORTANT NOTES : + * The do_fast_page_fault function is called from a context in entry.S + * where very few registers have been saved.  In particular, the code in + * this file must be compiled not to use ANY caller-save registers that + * are not part of the restricted save set.  Also, it means that code in + * this file must not make calls to functions elsewhere in the kernel, or + * else the excepting context will see corruption in its caller-save + * registers.  Plus, the entry.S save area is non-reentrant, so this code + * has to run with SR.BL==1, i.e. no interrupts taken inside it and panic + * on any exception. + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/signal.h> +#include <linux/sched.h> +#include <linux/kernel.h> +#include <linux/errno.h> +#include <linux/string.h> +#include <linux/types.h> +#include <linux/ptrace.h> +#include <linux/mman.h> +#include <linux/mm.h> +#include <linux/smp.h> +#include <linux/interrupt.h> +#include <linux/kprobes.h> +#include <asm/tlb.h> +#include <asm/io.h> +#include <asm/uaccess.h> +#include <asm/pgalloc.h> +#include <asm/mmu_context.h> + +static int handle_tlbmiss(unsigned long long protection_flags, +			  unsigned long address) +{ +	pgd_t *pgd; +	pud_t *pud; +	pmd_t *pmd; +	pte_t *pte; +	pte_t entry; + +	if (is_vmalloc_addr((void *)address)) { +		pgd = pgd_offset_k(address); +	} else { +		if (unlikely(address >= TASK_SIZE || !current->mm)) +			return 1; + +		pgd = pgd_offset(current->mm, address); +	} + +	pud = pud_offset(pgd, address); +	if (pud_none(*pud) || !pud_present(*pud)) +		return 1; + +	pmd = pmd_offset(pud, address); +	if (pmd_none(*pmd) || !pmd_present(*pmd)) +		return 1; + +	pte = pte_offset_kernel(pmd, address); +	entry = *pte; +	if (pte_none(entry) || !pte_present(entry)) +		return 1; + +	/* +	 * If the page doesn't have sufficient protection bits set to +	 * service the kind of fault being handled, there's not much +	 * point doing the TLB refill.  Punt the fault to the general +	 * handler. +	 */ +	if ((pte_val(entry) & protection_flags) != protection_flags) +		return 1; + +	update_mmu_cache(NULL, address, pte); + +	return 0; +} + +/* + * Put all this information into one structure so that everything is just + * arithmetic relative to a single base address.  This reduces the number + * of movi/shori pairs needed just to load addresses of static data. + */ +struct expevt_lookup { +	unsigned short protection_flags[8]; +	unsigned char  is_text_access[8]; +	unsigned char  is_write_access[8]; +}; + +#define PRU (1<<9) +#define PRW (1<<8) +#define PRX (1<<7) +#define PRR (1<<6) + +/* Sized as 8 rather than 4 to allow checking the PTE's PRU bit against whether +   the fault happened in user mode or privileged mode. */ +static struct expevt_lookup expevt_lookup_table = { +	.protection_flags = {PRX, PRX, 0, 0, PRR, PRR, PRW, PRW}, +	.is_text_access   = {1,   1,   0, 0, 0,   0,   0,   0} +}; + +static inline unsigned int +expevt_to_fault_code(unsigned long expevt) +{ +	if (expevt == 0xa40) +		return FAULT_CODE_ITLB; +	else if (expevt == 0x060) +		return FAULT_CODE_WRITE; + +	return 0; +} + +/* +   This routine handles page faults that can be serviced just by refilling a +   TLB entry from an existing page table entry.  (This case represents a very +   large majority of page faults.) Return 1 if the fault was successfully +   handled.  Return 0 if the fault could not be handled.  (This leads into the +   general fault handling in fault.c which deals with mapping file-backed +   pages, stack growth, segmentation faults, swapping etc etc) + */ +asmlinkage int __kprobes +do_fast_page_fault(unsigned long long ssr_md, unsigned long long expevt, +		   unsigned long address) +{ +	unsigned long long protection_flags; +	unsigned long long index; +	unsigned long long expevt4; +	unsigned int fault_code; + +	/* The next few lines implement a way of hashing EXPEVT into a +	 * small array index which can be used to lookup parameters +	 * specific to the type of TLBMISS being handled. +	 * +	 * Note: +	 *	ITLBMISS has EXPEVT==0xa40 +	 *	RTLBMISS has EXPEVT==0x040 +	 *	WTLBMISS has EXPEVT==0x060 +	 */ +	expevt4 = (expevt >> 4); +	/* TODO : xor ssr_md into this expression too. Then we can check +	 * that PRU is set when it needs to be. */ +	index = expevt4 ^ (expevt4 >> 5); +	index &= 7; + +	fault_code = expevt_to_fault_code(expevt); + +	protection_flags = expevt_lookup_table.protection_flags[index]; + +	if (expevt_lookup_table.is_text_access[index]) +		fault_code |= FAULT_CODE_ITLB; +	if (!ssr_md) +		fault_code |= FAULT_CODE_USER; + +	set_thread_fault_code(fault_code); + +	return handle_tlbmiss(protection_flags, address); +} diff --git a/arch/sh/mm/tlbflush_64.c b/arch/sh/mm/tlbflush_64.c index 7f5810f5dfd..f33fdd2558e 100644 --- a/arch/sh/mm/tlbflush_64.c +++ b/arch/sh/mm/tlbflush_64.c @@ -3,7 +3,7 @@   *   * Copyright (C) 2000, 2001  Paolo Alberelli   * Copyright (C) 2003  Richard Curnow (/proc/tlb, bug fixes) - * Copyright (C) 2003 - 2009 Paul Mundt + * Copyright (C) 2003 - 2012 Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -22,301 +22,12 @@  #include <linux/smp.h>  #include <linux/perf_event.h>  #include <linux/interrupt.h> -#include <asm/system.h>  #include <asm/io.h>  #include <asm/tlb.h>  #include <asm/uaccess.h>  #include <asm/pgalloc.h>  #include <asm/mmu_context.h> -extern void die(const char *,struct pt_regs *,long); - -#define PFLAG(val,flag)   (( (val) & (flag) ) ? #flag : "" ) -#define PPROT(flag) PFLAG(pgprot_val(prot),flag) - -static inline void print_prots(pgprot_t prot) -{ -	printk("prot is 0x%016llx\n",pgprot_val(prot)); - -	printk("%s %s %s %s %s\n",PPROT(_PAGE_SHARED),PPROT(_PAGE_READ), -	       PPROT(_PAGE_EXECUTE),PPROT(_PAGE_WRITE),PPROT(_PAGE_USER)); -} - -static inline void print_vma(struct vm_area_struct *vma) -{ -	printk("vma start 0x%08lx\n", vma->vm_start); -	printk("vma end   0x%08lx\n", vma->vm_end); - -	print_prots(vma->vm_page_prot); -	printk("vm_flags 0x%08lx\n", vma->vm_flags); -} - -static inline void print_task(struct task_struct *tsk) -{ -	printk("Task pid %d\n", task_pid_nr(tsk)); -} - -static pte_t *lookup_pte(struct mm_struct *mm, unsigned long address) -{ -	pgd_t *dir; -	pud_t *pud; -	pmd_t *pmd; -	pte_t *pte; -	pte_t entry; - -	dir = pgd_offset(mm, address); -	if (pgd_none(*dir)) -		return NULL; - -	pud = pud_offset(dir, address); -	if (pud_none(*pud)) -		return NULL; - -	pmd = pmd_offset(pud, address); -	if (pmd_none(*pmd)) -		return NULL; - -	pte = pte_offset_kernel(pmd, address); -	entry = *pte; -	if (pte_none(entry) || !pte_present(entry)) -		return NULL; - -	return pte; -} - -/* - * This routine handles page faults.  It determines the address, - * and the problem, and then passes it off to one of the appropriate - * routines. - */ -asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long writeaccess, -			      unsigned long textaccess, unsigned long address) -{ -	struct task_struct *tsk; -	struct mm_struct *mm; -	struct vm_area_struct * vma; -	const struct exception_table_entry *fixup; -	pte_t *pte; -	int fault; - -	/* SIM -	 * Note this is now called with interrupts still disabled -	 * This is to cope with being called for a missing IO port -	 * address with interrupts disabled. This should be fixed as -	 * soon as we have a better 'fast path' miss handler. -	 * -	 * Plus take care how you try and debug this stuff. -	 * For example, writing debug data to a port which you -	 * have just faulted on is not going to work. -	 */ - -	tsk = current; -	mm = tsk->mm; - -	/* Not an IO address, so reenable interrupts */ -	local_irq_enable(); - -	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address); - -	/* -	 * If we're in an interrupt or have no user -	 * context, we must not take the fault.. -	 */ -	if (in_atomic() || !mm) -		goto no_context; - -	/* TLB misses upon some cache flushes get done under cli() */ -	down_read(&mm->mmap_sem); - -	vma = find_vma(mm, address); - -	if (!vma) { -#ifdef DEBUG_FAULT -		print_task(tsk); -		printk("%s:%d fault, address is 0x%08x PC %016Lx textaccess %d writeaccess %d\n", -		       __func__, __LINE__, -		       address,regs->pc,textaccess,writeaccess); -		show_regs(regs); -#endif -		goto bad_area; -	} -	if (vma->vm_start <= address) { -		goto good_area; -	} - -	if (!(vma->vm_flags & VM_GROWSDOWN)) { -#ifdef DEBUG_FAULT -		print_task(tsk); -		printk("%s:%d fault, address is 0x%08x PC %016Lx textaccess %d writeaccess %d\n", -		       __func__, __LINE__, -		       address,regs->pc,textaccess,writeaccess); -		show_regs(regs); - -		print_vma(vma); -#endif -		goto bad_area; -	} -	if (expand_stack(vma, address)) { -#ifdef DEBUG_FAULT -		print_task(tsk); -		printk("%s:%d fault, address is 0x%08x PC %016Lx textaccess %d writeaccess %d\n", -		       __func__, __LINE__, -		       address,regs->pc,textaccess,writeaccess); -		show_regs(regs); -#endif -		goto bad_area; -	} -/* - * Ok, we have a good vm_area for this memory access, so - * we can handle it.. - */ -good_area: -	if (textaccess) { -		if (!(vma->vm_flags & VM_EXEC)) -			goto bad_area; -	} else { -		if (writeaccess) { -			if (!(vma->vm_flags & VM_WRITE)) -				goto bad_area; -		} else { -			if (!(vma->vm_flags & VM_READ)) -				goto bad_area; -		} -	} - -	/* -	 * If for any reason at all we couldn't handle the fault, -	 * make sure we exit gracefully rather than endlessly redo -	 * the fault. -	 */ -	fault = handle_mm_fault(mm, vma, address, writeaccess ? FAULT_FLAG_WRITE : 0); -	if (unlikely(fault & VM_FAULT_ERROR)) { -		if (fault & VM_FAULT_OOM) -			goto out_of_memory; -		else if (fault & VM_FAULT_SIGBUS) -			goto do_sigbus; -		BUG(); -	} - -	if (fault & VM_FAULT_MAJOR) { -		tsk->maj_flt++; -		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, -				     regs, address); -	} else { -		tsk->min_flt++; -		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, -				     regs, address); -	} - -	/* If we get here, the page fault has been handled.  Do the TLB refill -	   now from the newly-setup PTE, to avoid having to fault again right -	   away on the same instruction. */ -	pte = lookup_pte (mm, address); -	if (!pte) { -		/* From empirical evidence, we can get here, due to -		   !pte_present(pte).  (e.g. if a swap-in occurs, and the page -		   is swapped back out again before the process that wanted it -		   gets rescheduled?) */ -		goto no_pte; -	} - -	__do_tlb_refill(address, textaccess, pte); - -no_pte: - -	up_read(&mm->mmap_sem); -	return; - -/* - * Something tried to access memory that isn't in our memory map.. - * Fix it, but check if it's kernel or user first.. - */ -bad_area: -#ifdef DEBUG_FAULT -	printk("fault:bad area\n"); -#endif -	up_read(&mm->mmap_sem); - -	if (user_mode(regs)) { -		static int count=0; -		siginfo_t info; -		if (count < 4) { -			/* This is really to help debug faults when starting -			 * usermode, so only need a few */ -			count++; -			printk("user mode bad_area address=%08lx pid=%d (%s) pc=%08lx\n", -				address, task_pid_nr(current), current->comm, -				(unsigned long) regs->pc); -#if 0 -			show_regs(regs); -#endif -		} -		if (is_global_init(tsk)) { -			panic("INIT had user mode bad_area\n"); -		} -		tsk->thread.address = address; -		tsk->thread.error_code = writeaccess; -		info.si_signo = SIGSEGV; -		info.si_errno = 0; -		info.si_addr = (void *) address; -		force_sig_info(SIGSEGV, &info, tsk); -		return; -	} - -no_context: -#ifdef DEBUG_FAULT -	printk("fault:No context\n"); -#endif -	/* Are we prepared to handle this kernel fault?  */ -	fixup = search_exception_tables(regs->pc); -	if (fixup) { -		regs->pc = fixup->fixup; -		return; -	} - -/* - * Oops. The kernel tried to access some bad page. We'll have to - * terminate things with extreme prejudice. - * - */ -	if (address < PAGE_SIZE) -		printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference"); -	else -		printk(KERN_ALERT "Unable to handle kernel paging request"); -	printk(" at virtual address %08lx\n", address); -	printk(KERN_ALERT "pc = %08Lx%08Lx\n", regs->pc >> 32, regs->pc & 0xffffffff); -	die("Oops", regs, writeaccess); -	do_exit(SIGKILL); - -/* - * We ran out of memory, or some other thing happened to us that made - * us unable to handle the page fault gracefully. - */ -out_of_memory: -	up_read(&mm->mmap_sem); -	if (!user_mode(regs)) -		goto no_context; -	pagefault_out_of_memory(); -	return; - -do_sigbus: -	printk("fault:Do sigbus\n"); -	up_read(&mm->mmap_sem); - -	/* -	 * Send a sigbus, regardless of whether we were in kernel -	 * or user mode. -	 */ -	tsk->thread.address = address; -	tsk->thread.error_code = writeaccess; -	tsk->thread.trap_no = 14; -	force_sig(SIGBUS, tsk); - -	/* Kernel mode? Handle exceptions or die */ -	if (!user_mode(regs)) -		goto no_context; -} -  void local_flush_tlb_one(unsigned long asid, unsigned long page)  {  	unsigned long long match, pteh=0, lpage; @@ -459,7 +170,3 @@ void __flush_tlb_global(void)  {  	flush_tlb_all();  } - -void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t pte) -{ -} diff --git a/arch/sh/oprofile/backtrace.c b/arch/sh/oprofile/backtrace.c index 37f3a75ea6c..9c88dcd56e8 100644 --- a/arch/sh/oprofile/backtrace.c +++ b/arch/sh/oprofile/backtrace.c @@ -23,17 +23,6 @@  #include <asm/sections.h>  #include <asm/stacktrace.h> -static void backtrace_warning_symbol(void *data, char *msg, -				     unsigned long symbol) -{ -	/* Ignore warnings */ -} - -static void backtrace_warning(void *data, char *msg) -{ -	/* Ignore warnings */ -} -  static int backtrace_stack(void *data, char *name)  {  	/* Yes, we want all stacks */ @@ -49,8 +38,6 @@ static void backtrace_address(void *data, unsigned long addr, int reliable)  }  static struct stacktrace_ops backtrace_ops = { -	.warning = backtrace_warning, -	.warning_symbol = backtrace_warning_symbol,  	.stack = backtrace_stack,  	.address = backtrace_address,  }; diff --git a/arch/sh/oprofile/common.c b/arch/sh/oprofile/common.c index b4c2d2b946d..e4dd5d5a111 100644 --- a/arch/sh/oprofile/common.c +++ b/arch/sh/oprofile/common.c @@ -49,7 +49,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)  	return oprofile_perf_init(ops);  } -void __exit oprofile_arch_exit(void) +void oprofile_arch_exit(void)  {  	oprofile_perf_exit();  	kfree(sh_pmu_op_name); @@ -60,5 +60,5 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)  	ops->backtrace = sh_backtrace;  	return -ENODEV;  } -void __exit oprofile_arch_exit(void) {} +void oprofile_arch_exit(void) {}  #endif /* CONFIG_HW_PERF_EVENTS */ diff --git a/arch/sh/tools/mach-types b/arch/sh/tools/mach-types index 0e68465e7b5..569977e52c9 100644 --- a/arch/sh/tools/mach-types +++ b/arch/sh/tools/mach-types @@ -9,6 +9,7 @@ SE			SH_SOLUTION_ENGINE  HIGHLANDER		SH_HIGHLANDER  RTS7751R2D		SH_RTS7751R2D  RSK			SH_RSK +ALPHA_BOARD		SH_ALPHA_BOARD  #  # List of companion chips / MFDs. @@ -50,6 +51,8 @@ SDK7780			SH_SDK7780  MIGOR			SH_MIGOR  RSK7201			SH_RSK7201  RSK7203			SH_RSK7203 +RSK7264			SH_RSK7264 +RSK7269			SH_RSK7269  AP325RXA		SH_AP325RXA  SH2007			SH_SH2007  SH7757LCR		SH_SH7757LCR @@ -61,3 +64,5 @@ ESPT			SH_ESPT  POLARIS			SH_POLARIS  KFR2R09			SH_KFR2R09  ECOVEC			SH_ECOVEC +APSH4A3A		SH_APSH4A3A +APSH4AD0A		SH_APSH4AD0A  | 
