xref: /rk3399_rockchip-uboot/arch/arm/mach-rmobile/pfc-r8a7790.h (revision c98b171e1098f94b2ff7720c45a25a602882f876)
1badbb63cSNobuhiro Iwamatsu /*
2badbb63cSNobuhiro Iwamatsu  * arch/arm/cpu/armv7/rmobile/pfc-r8a7790.h
3badbb63cSNobuhiro Iwamatsu  *
4badbb63cSNobuhiro Iwamatsu  * Copyright (C) 2013 Renesas Electronics Corporation
5badbb63cSNobuhiro Iwamatsu  *
6badbb63cSNobuhiro Iwamatsu  * SPDX-License-Identifier: GPL-2.0
7badbb63cSNobuhiro Iwamatsu  */
8badbb63cSNobuhiro Iwamatsu 
9badbb63cSNobuhiro Iwamatsu #ifndef __PFC_R8A7790_H__
10badbb63cSNobuhiro Iwamatsu #define __PFC_R8A7790_H__
11badbb63cSNobuhiro Iwamatsu 
12badbb63cSNobuhiro Iwamatsu #include <sh_pfc.h>
13badbb63cSNobuhiro Iwamatsu #include <asm/gpio.h>
14badbb63cSNobuhiro Iwamatsu 
15badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT(fn, pfx, sfx)				\
16badbb63cSNobuhiro Iwamatsu 	PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx),	\
17badbb63cSNobuhiro Iwamatsu 	PORT_10(fn, pfx##2, sfx), PORT_1(fn, pfx##30, sfx),	\
18badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##31, sfx)
19badbb63cSNobuhiro Iwamatsu 
20badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT2(fn, pfx, sfx)				\
21badbb63cSNobuhiro Iwamatsu 	PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx),	\
22badbb63cSNobuhiro Iwamatsu 	PORT_10(fn, pfx##2, sfx)
23badbb63cSNobuhiro Iwamatsu 
24badbb63cSNobuhiro Iwamatsu #if defined(CONFIG_R8A7790)
25badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT1(fn, pfx, sfx)				\
26badbb63cSNobuhiro Iwamatsu 	PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx),	\
27badbb63cSNobuhiro Iwamatsu 	PORT_10(fn, pfx##2, sfx)				\
28badbb63cSNobuhiro Iwamatsu /* GP_0_0_DATA -> GP_5_31_DATA (except for GP1[30],GP1[31],GP2[30],GP2[31]) */
29badbb63cSNobuhiro Iwamatsu #define CPU_ALL_PORT(fn, pfx, sfx)				\
30badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_0_, sfx),				\
31badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT1(fn, pfx##_1_, sfx),			\
32badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT2(fn, pfx##_2_, sfx),			\
33badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_3_, sfx),				\
34badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_4_, sfx),				\
35badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_5_, sfx)
36badbb63cSNobuhiro Iwamatsu 
37badbb63cSNobuhiro Iwamatsu #elif defined(CONFIG_R8A7791)
38badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT1(fn, pfx, sfx)				\
39badbb63cSNobuhiro Iwamatsu 	PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx),	\
40badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx),	\
41badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##22, sfx), PORT_1(fn, pfx##23, sfx),	\
42badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##24, sfx), PORT_1(fn, pfx##25, sfx)
43badbb63cSNobuhiro Iwamatsu 
44badbb63cSNobuhiro Iwamatsu /*
45badbb63cSNobuhiro Iwamatsu  * GP_0_0_DATA -> GP_7_25_DATA
46badbb63cSNobuhiro Iwamatsu  * (except for GP1[26],GP1[27],GP1[28],GP1[29]),GP1[30]),GP1[31]
47badbb63cSNobuhiro Iwamatsu  *  GP7[26],GP7[27],GP7[28],GP7[29]),GP7[30]),GP7[31])
48badbb63cSNobuhiro Iwamatsu  */
49badbb63cSNobuhiro Iwamatsu #define CPU_ALL_PORT(fn, pfx, sfx)				\
50badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_0_, sfx),				\
51badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT1(fn, pfx##_1_, sfx),			\
52badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_2_, sfx),				\
53badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_3_, sfx),				\
54badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_4_, sfx),				\
55badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_5_, sfx),				\
56badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT(fn, pfx##_6_, sfx),				\
57badbb63cSNobuhiro Iwamatsu 	CPU_32_PORT1(fn, pfx##_7_, sfx)
58*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 
59*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #elif defined(CONFIG_R8A7792)
60*6f107e4cSmasakazu.mochizuki.wd@hitachi.com /*
61*6f107e4cSmasakazu.mochizuki.wd@hitachi.com  * GP_0_0_DATA -> GP_11_29_DATA
62*6f107e4cSmasakazu.mochizuki.wd@hitachi.com  * (except for GP0[29..31],GP1[23..31],GP3[28..31],GP4[17..31],GP5[17..31]
63*6f107e4cSmasakazu.mochizuki.wd@hitachi.com  *  GP6[17..31],GP7[17..31],GP8[17..31],GP9[17..31],GP11[30..31])
64*6f107e4cSmasakazu.mochizuki.wd@hitachi.com  */
65*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_32_PORT0_28(fn, pfx, sfx)				\
66*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx),	\
67*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx),	\
68*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##22, sfx), PORT_1(fn, pfx##23, sfx),	\
69*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##24, sfx), PORT_1(fn, pfx##25, sfx),	\
70*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##26, sfx), PORT_1(fn, pfx##27, sfx),	\
71*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##28, sfx)
72*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 
73*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_32_PORT0_22(fn, pfx, sfx)				\
74*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx),	\
75*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx),	\
76*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##22, sfx)
77*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 
78*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_32_PORT0_27(fn, pfx, sfx)				\
79*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx),	\
80*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx),	\
81*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##22, sfx), PORT_1(fn, pfx##23, sfx),	\
82*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##24, sfx), PORT_1(fn, pfx##25, sfx),	\
83*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##26, sfx), PORT_1(fn, pfx##27, sfx)
84*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 
85*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_32_PORT0_16(fn, pfx, sfx)				\
86*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_10(fn, pfx, sfx), 					\
87*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##10, sfx),PORT_1(fn, pfx##11, sfx),	\
88*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##12, sfx), PORT_1(fn, pfx##13, sfx),	\
89*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##14, sfx), PORT_1(fn, pfx##15, sfx),	\
90*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	PORT_1(fn, pfx##16, sfx)
91*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 
92*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_ALL_PORT(fn, pfx, sfx)				\
93*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT0_28(fn, pfx##_0_, sfx),			\
94*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT0_22(fn, pfx##_1_, sfx),			\
95*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT(fn, pfx##_2_, sfx),				\
96*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT0_27(fn, pfx##_3_, sfx),			\
97*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT0_16(fn, pfx##_4_, sfx),			\
98*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT0_16(fn, pfx##_5_, sfx),			\
99*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT0_16(fn, pfx##_6_, sfx),			\
100*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT0_16(fn, pfx##_7_, sfx),			\
101*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT0_16(fn, pfx##_8_, sfx),			\
102*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT0_16(fn, pfx##_9_, sfx),			\
103*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT(fn, pfx##_10_, sfx),			\
104*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 	CPU_32_PORT2(fn, pfx##_11_, sfx)
105*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 
106badbb63cSNobuhiro Iwamatsu #else
107badbb63cSNobuhiro Iwamatsu #error "NO support"
108badbb63cSNobuhiro Iwamatsu #endif
109badbb63cSNobuhiro Iwamatsu 
110badbb63cSNobuhiro Iwamatsu #define _GP_GPIO(pfx, sfx) PINMUX_GPIO(GPIO_GP##pfx, GP##pfx##_DATA)
111badbb63cSNobuhiro Iwamatsu #define _GP_DATA(pfx, sfx) PINMUX_DATA(GP##pfx##_DATA, GP##pfx##_FN,	\
112badbb63cSNobuhiro Iwamatsu 				       GP##pfx##_IN, GP##pfx##_OUT)
113badbb63cSNobuhiro Iwamatsu 
114badbb63cSNobuhiro Iwamatsu #define _GP_INOUTSEL(pfx, sfx) GP##pfx##_IN, GP##pfx##_OUT
115badbb63cSNobuhiro Iwamatsu #define _GP_INDT(pfx, sfx) GP##pfx##_DATA
116badbb63cSNobuhiro Iwamatsu 
117badbb63cSNobuhiro Iwamatsu #define GP_ALL(str)	CPU_ALL_PORT(_PORT_ALL, GP, str)
118badbb63cSNobuhiro Iwamatsu #define PINMUX_GPIO_GP_ALL()	CPU_ALL_PORT(_GP_GPIO, , unused)
119badbb63cSNobuhiro Iwamatsu #define PINMUX_DATA_GP_ALL()	CPU_ALL_PORT(_GP_DATA, , unused)
120badbb63cSNobuhiro Iwamatsu 
121badbb63cSNobuhiro Iwamatsu #define PORT_10_REV(fn, pfx, sfx)				\
122badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##9, sfx), PORT_1(fn, pfx##8, sfx),	\
123badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##7, sfx), PORT_1(fn, pfx##6, sfx),	\
124badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##5, sfx), PORT_1(fn, pfx##4, sfx),	\
125badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##3, sfx), PORT_1(fn, pfx##2, sfx),	\
126badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##1, sfx), PORT_1(fn, pfx##0, sfx)
127badbb63cSNobuhiro Iwamatsu 
128badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT_REV(fn, pfx, sfx)					\
129badbb63cSNobuhiro Iwamatsu 	PORT_1(fn, pfx##31, sfx), PORT_1(fn, pfx##30, sfx),		\
130badbb63cSNobuhiro Iwamatsu 	PORT_10_REV(fn, pfx##2, sfx), PORT_10_REV(fn, pfx##1, sfx),	\
131badbb63cSNobuhiro Iwamatsu 	PORT_10_REV(fn, pfx, sfx)
132badbb63cSNobuhiro Iwamatsu 
133badbb63cSNobuhiro Iwamatsu #define GP_INOUTSEL(bank) CPU_32_PORT_REV(_GP_INOUTSEL, _##bank##_, unused)
134badbb63cSNobuhiro Iwamatsu #define GP_INDT(bank) CPU_32_PORT_REV(_GP_INDT, _##bank##_, unused)
135badbb63cSNobuhiro Iwamatsu 
136badbb63cSNobuhiro Iwamatsu #define PINMUX_IPSR_DATA(ipsr, fn) PINMUX_DATA(fn##_MARK, FN_##ipsr, FN_##fn)
137badbb63cSNobuhiro Iwamatsu #define PINMUX_IPSR_MODSEL_DATA(ipsr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##ms, \
138badbb63cSNobuhiro Iwamatsu 							  FN_##ipsr, FN_##fn)
139badbb63cSNobuhiro Iwamatsu 
140badbb63cSNobuhiro Iwamatsu #endif /* __PFC_R8A7790_H__ */
141