diff options
Diffstat (limited to 'arch/sh/kernel')
164 files changed, 6837 insertions, 21333 deletions
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;  }  | 
