xref: /openbmc/u-boot/board/samsung/odroid/setup.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1  /* SPDX-License-Identifier: GPL-2.0+ */
2  /*
3   * Copyright (C) 2014 Samsung Electronics
4   * Przemyslaw Marczak <p.marczak@samsung.com>
5   */
6  
7  #ifndef __ODROIDU3_SETUP__
8  #define __ODROIDU3_SETUP__
9  
10  /* A/M PLL_CON0 */
11  #define SDIV(x)                 ((x) & 0x7)
12  #define PDIV(x)                 (((x) & 0x3f) << 8)
13  #define MDIV(x)                 (((x) & 0x3ff) << 16)
14  #define FSEL(x)                 (((x) & 0x1) << 27)
15  #define PLL_LOCKED_BIT          (0x1 << 29)
16  #define PLL_ENABLE(x)           (((x) & 0x1) << 31)
17  
18  /* CLK_SRC_CPU */
19  #define MUX_APLL_SEL(x)         ((x) & 0x1)
20  #define MUX_CORE_SEL(x)         (((x) & 0x1) << 16)
21  #define MUX_HPM_SEL(x)          (((x) & 0x1) << 20)
22  #define MUX_MPLL_USER_SEL_C(x)  (((x) & 0x1) << 24)
23  
24  #define MUX_STAT_CHANGING       0x100
25  
26  /* CLK_MUX_STAT_CPU */
27  #define APLL_SEL(x)             ((x) & 0x7)
28  #define CORE_SEL(x)             (((x) & 0x7) << 16)
29  #define HPM_SEL(x)              (((x) & 0x7) << 20)
30  #define MPLL_USER_SEL_C(x)      (((x) & 0x7) << 24)
31  #define MUX_STAT_CPU_CHANGING   (APLL_SEL(MUX_STAT_CHANGING) | \
32  				CORE_SEL(MUX_STAT_CHANGING) | \
33  				HPM_SEL(MUX_STAT_CHANGING) | \
34  				MPLL_USER_SEL_C(MUX_STAT_CHANGING))
35  
36  /* CLK_DIV_CPU0 */
37  #define CORE_RATIO(x)           ((x) & 0x7)
38  #define COREM0_RATIO(x)         (((x) & 0x7) << 4)
39  #define COREM1_RATIO(x)         (((x) & 0x7) << 8)
40  #define PERIPH_RATIO(x)         (((x) & 0x7) << 12)
41  #define ATB_RATIO(x)            (((x) & 0x7) << 16)
42  #define PCLK_DBG_RATIO(x)       (((x) & 0x7) << 20)
43  #define APLL_RATIO(x)           (((x) & 0x7) << 24)
44  #define CORE2_RATIO(x)          (((x) & 0x7) << 28)
45  
46  /* CLK_DIV_STAT_CPU0 */
47  #define DIV_CORE(x)             ((x) & 0x1)
48  #define DIV_COREM0(x)           (((x) & 0x1) << 4)
49  #define DIV_COREM1(x)           (((x) & 0x1) << 8)
50  #define DIV_PERIPH(x)           (((x) & 0x1) << 12)
51  #define DIV_ATB(x)              (((x) & 0x1) << 16)
52  #define DIV_PCLK_DBG(x)         (((x) & 0x1) << 20)
53  #define DIV_APLL(x)             (((x) & 0x1) << 24)
54  #define DIV_CORE2(x)            (((x) & 0x1) << 28)
55  
56  #define DIV_STAT_CHANGING       0x1
57  #define DIV_STAT_CPU0_CHANGING  (DIV_CORE(DIV_STAT_CHANGING) | \
58  				DIV_COREM0(DIV_STAT_CHANGING) | \
59  				DIV_COREM1(DIV_STAT_CHANGING) | \
60  				DIV_PERIPH(DIV_STAT_CHANGING) | \
61  				DIV_ATB(DIV_STAT_CHANGING) | \
62  				DIV_PCLK_DBG(DIV_STAT_CHANGING) | \
63  				DIV_APLL(DIV_STAT_CHANGING) | \
64  				DIV_CORE2(DIV_STAT_CHANGING))
65  
66  /* CLK_DIV_CPU1 */
67  #define COPY_RATIO(x)           ((x) & 0x7)
68  #define HPM_RATIO(x)            (((x) & 0x7) << 4)
69  #define CORES_RATIO(x)          (((x) & 0x7) << 8)
70  
71  /* CLK_DIV_STAT_CPU1 */
72  #define DIV_COPY(x)             ((x) & 0x7)
73  #define DIV_HPM(x)              (((x) & 0x1) << 4)
74  #define DIV_CORES(x)            (((x) & 0x1) << 8)
75  
76  #define DIV_STAT_CPU1_CHANGING	(DIV_COPY(DIV_STAT_CHANGING) | \
77  				DIV_HPM(DIV_STAT_CHANGING) | \
78  				DIV_CORES(DIV_STAT_CHANGING))
79  
80  /* CLK_SRC_DMC */
81  #define MUX_C2C_SEL(x)		((x) & 0x1)
82  #define MUX_DMC_BUS_SEL(x)	(((x) & 0x1) << 4)
83  #define MUX_DPHY_SEL(x)		(((x) & 0x1) << 8)
84  #define MUX_MPLL_SEL(x)		(((x) & 0x1) << 12)
85  #define MUX_PWI_SEL(x)		(((x) & 0xf) << 16)
86  #define MUX_G2D_ACP0_SEL(x)	(((x) & 0x1) << 20)
87  #define MUX_G2D_ACP1_SEL(x)	(((x) & 0x1) << 24)
88  #define MUX_G2D_ACP_SEL(x)	(((x) & 0x1) << 28)
89  
90  /* CLK_MUX_STAT_DMC */
91  #define C2C_SEL(x)		(((x)) & 0x7)
92  #define DMC_BUS_SEL(x)		(((x) & 0x7) << 4)
93  #define DPHY_SEL(x)		(((x) & 0x7) << 8)
94  #define MPLL_SEL(x)		(((x) & 0x7) << 12)
95  /* #define PWI_SEL(x)		(((x) & 0xf) << 16)  - Reserved */
96  #define G2D_ACP0_SEL(x)		(((x) & 0x7) << 20)
97  #define G2D_ACP1_SEL(x)		(((x) & 0x7) << 24)
98  #define G2D_ACP_SEL(x)		(((x) & 0x7) << 28)
99  
100  #define MUX_STAT_DMC_CHANGING	(C2C_SEL(MUX_STAT_CHANGING) | \
101  				DMC_BUS_SEL(MUX_STAT_CHANGING) | \
102  				DPHY_SEL(MUX_STAT_CHANGING) | \
103  				MPLL_SEL(MUX_STAT_CHANGING) |\
104  				G2D_ACP0_SEL(MUX_STAT_CHANGING) | \
105  				G2D_ACP1_SEL(MUX_STAT_CHANGING) | \
106  				G2D_ACP_SEL(MUX_STAT_CHANGING))
107  
108  /* CLK_DIV_DMC0 */
109  #define ACP_RATIO(x)		((x) & 0x7)
110  #define ACP_PCLK_RATIO(x)	(((x) & 0x7) << 4)
111  #define DPHY_RATIO(x)		(((x) & 0x7) << 8)
112  #define DMC_RATIO(x)		(((x) & 0x7) << 12)
113  #define DMCD_RATIO(x)		(((x) & 0x7) << 16)
114  #define DMCP_RATIO(x)		(((x) & 0x7) << 20)
115  
116  /* CLK_DIV_STAT_DMC0 */
117  #define DIV_ACP(x)		((x) & 0x1)
118  #define DIV_ACP_PCLK(x)		(((x) & 0x1) << 4)
119  #define DIV_DPHY(x)		(((x) & 0x1) << 8)
120  #define DIV_DMC(x)		(((x) & 0x1) << 12)
121  #define DIV_DMCD(x)		(((x) & 0x1) << 16)
122  #define DIV_DMCP(x)		(((x) & 0x1) << 20)
123  
124  #define DIV_STAT_DMC0_CHANGING	(DIV_ACP(DIV_STAT_CHANGING) | \
125  				DIV_ACP_PCLK(DIV_STAT_CHANGING) | \
126  				DIV_DPHY(DIV_STAT_CHANGING) | \
127  				DIV_DMC(DIV_STAT_CHANGING) | \
128  				DIV_DMCD(DIV_STAT_CHANGING) | \
129  				DIV_DMCP(DIV_STAT_CHANGING))
130  
131  /* CLK_DIV_DMC1 */
132  #define G2D_ACP_RATIO(x)	((x) & 0xf)
133  #define C2C_RATIO(x)		(((x) & 0x7) << 4)
134  #define PWI_RATIO(x)		(((x) & 0xf) << 8)
135  #define C2C_ACLK_RATIO(x)	(((x) & 0x7) << 12)
136  #define DVSEM_RATIO(x)		(((x) & 0x7f) << 16)
137  #define DPM_RATIO(x)		(((x) & 0x7f) << 24)
138  
139  /* CLK_DIV_STAT_DMC1 */
140  #define DIV_G2D_ACP(x)		((x) & 0x1)
141  #define DIV_C2C(x)		(((x) & 0x1) << 4)
142  #define DIV_PWI(x)		(((x) & 0x1) << 8)
143  #define DIV_C2C_ACLK(x)		(((x) & 0x1) << 12)
144  #define DIV_DVSEM(x)		(((x) & 0x1) << 16)
145  #define DIV_DPM(x)		(((x) & 0x1) << 24)
146  
147  #define DIV_STAT_DMC1_CHANGING	(DIV_G2D_ACP(DIV_STAT_CHANGING) | \
148  				DIV_C2C(DIV_STAT_CHANGING) | \
149  				DIV_PWI(DIV_STAT_CHANGING) | \
150  				DIV_C2C_ACLK(DIV_STAT_CHANGING) | \
151  				DIV_DVSEM(DIV_STAT_CHANGING) | \
152  				DIV_DPM(DIV_STAT_CHANGING))
153  
154  /* Set CLK_SRC_PERIL0 */
155  #define UART4_SEL(x)		(((x) & 0xf) << 16)
156  #define UART3_SEL(x)		(((x) & 0xf) << 12)
157  #define UART2_SEL(x)		(((x) & 0xf) << 8)
158  #define UART1_SEL(x)		(((x) & 0xf) << 4)
159  #define UART0_SEL(x)		((x) & 0xf)
160  
161  /* Set CLK_DIV_PERIL0 */
162  #define UART4_RATIO(x)		(((x) & 0xf) << 16)
163  #define UART3_RATIO(x)		(((x) & 0xf) << 12)
164  #define UART2_RATIO(x)		(((x) & 0xf) << 8)
165  #define UART1_RATIO(x)		(((x) & 0xf) << 4)
166  #define UART0_RATIO(x)		((x) & 0xf)
167  
168  /* Set CLK_DIV_STAT_PERIL0 */
169  #define DIV_UART4(x)		(((x) & 0x1) << 16)
170  #define DIV_UART3(x)		(((x) & 0x1) << 12)
171  #define DIV_UART2(x)		(((x) & 0x1) << 8)
172  #define DIV_UART1(x)		(((x) & 0x1) << 4)
173  #define DIV_UART0(x)		((x) & 0x1)
174  
175  #define DIV_STAT_PERIL0_CHANGING	(DIV_UART4(DIV_STAT_CHANGING) | \
176  					DIV_UART3(DIV_STAT_CHANGING) | \
177  					DIV_UART2(DIV_STAT_CHANGING) | \
178  					DIV_UART1(DIV_STAT_CHANGING) | \
179  					DIV_UART0(DIV_STAT_CHANGING))
180  
181  /* CLK_DIV_FSYS1 */
182  #define MMC0_RATIO(x)		((x) & 0xf)
183  #define MMC0_PRE_RATIO(x)	(((x) & 0xff) << 8)
184  #define MMC1_RATIO(x)		(((x) & 0xf) << 16)
185  #define MMC1_PRE_RATIO(x)	(((x) & 0xff) << 24)
186  
187  /* CLK_DIV_STAT_FSYS1 */
188  #define DIV_MMC0(x)		((x) & 1)
189  #define DIV_MMC0_PRE(x)		(((x) & 1) << 8)
190  #define DIV_MMC1(x)		(((x) & 1) << 16)
191  #define DIV_MMC1_PRE(x)		(((x) & 1) << 24)
192  
193  #define DIV_STAT_FSYS1_CHANGING		(DIV_MMC0(DIV_STAT_CHANGING) | \
194  					DIV_MMC0_PRE(DIV_STAT_CHANGING) | \
195  					DIV_MMC1(DIV_STAT_CHANGING) | \
196  					DIV_MMC1_PRE(DIV_STAT_CHANGING))
197  
198  /* CLK_DIV_FSYS2 */
199  #define MMC2_RATIO(x)		((x) & 0xf)
200  #define MMC2_PRE_RATIO(x)	(((x) & 0xff) << 8)
201  #define MMC3_RATIO(x)		(((x) & 0xf) << 16)
202  #define MMC3_PRE_RATIO(x)	(((x) & 0xff) << 24)
203  
204  /* CLK_DIV_STAT_FSYS2 */
205  #define DIV_MMC2(x)		((x) & 0x1)
206  #define DIV_MMC2_PRE(x)		(((x) & 0x1) << 8)
207  #define DIV_MMC3(x)		(((x) & 0x1) << 16)
208  #define DIV_MMC3_PRE(x)		(((x) & 0x1) << 24)
209  
210  #define DIV_STAT_FSYS2_CHANGING		(DIV_MMC2(DIV_STAT_CHANGING) | \
211  					DIV_MMC2_PRE(DIV_STAT_CHANGING) | \
212  					DIV_MMC3(DIV_STAT_CHANGING) | \
213  					DIV_MMC3_PRE(DIV_STAT_CHANGING))
214  
215  /* CLK_DIV_FSYS3 */
216  #define MMC4_RATIO(x)		((x) & 0x7)
217  #define MMC4_PRE_RATIO(x)	(((x) & 0xff) << 8)
218  
219  /* CLK_DIV_STAT_FSYS3 */
220  #define DIV_MMC4(x)		((x) & 0x1)
221  #define DIV_MMC4_PRE(x)		(((x) & 0x1) << 8)
222  
223  #define DIV_STAT_FSYS3_CHANGING		(DIV_MMC4(DIV_STAT_CHANGING) | \
224  					DIV_MMC4_PRE(DIV_STAT_CHANGING))
225  
226  /* XCL205 GPIO config - Odroid U3 */
227  #define XCL205_GPIO_BASE		EXYNOS4X12_GPIO_PART1_BASE
228  #define XCL205_EN_GPIO_OFFSET		0x20 /* GPA1 */
229  #define XCL205_EN_GPIO_PIN		1
230  #define XCL205_EN_GPIO_CON		(XCL205_GPIO_BASE + \
231  					 XCL205_EN_GPIO_OFFSET)
232  #define XCL205_EN_GPIO_CON_CFG		(S5P_GPIO_OUTPUT << \
233  					 4 * XCL205_EN_GPIO_PIN)
234  #define XCL205_EN_GPIO_DAT_CFG		(0x1 << XCL205_EN_GPIO_PIN)
235  #define XCL205_EN_GPIO_PUD_CFG		(S5P_GPIO_PULL_UP << \
236  					 2 * XCL205_EN_GPIO_PIN)
237  #define XCL205_EN_GPIO_DRV_CFG		(S5P_GPIO_DRV_4X << \
238  					 2 * XCL205_EN_GPIO_PIN)
239  
240  #define XCL205_STATE_GPIO_OFFSET	0x80 /* GPC1 */
241  #define XCL205_STATE_GPIO_PIN		2
242  #define XCL205_STATE_GPIO_CON		(XCL205_GPIO_BASE + \
243  					 XCL205_STATE_GPIO_OFFSET)
244  #define XCL205_STATE_GPIO_DAT		XCL205_STATE_GPIO_CON + 0x4
245  #define XCL205_STATE_GPIO_CON_CFG	(S5P_GPIO_INPUT << \
246  					4 * XCL205_STATE_GPIO_PIN)
247  #define XCL205_STATE_GPIO_PUD_CFG	(S5P_GPIO_PULL_NONE << \
248  					 2 * XCL205_STATE_GPIO_PIN)
249  
250  #ifdef CONFIG_BOARD_TYPES
251  extern void sdelay(unsigned long);
252  #endif
253  
254  #endif /*__ODROIDU3_SETUP__ */
255