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