xref: /OK3568_Linux_fs/u-boot/arch/arm/mach-rockchip/rv1106/rv1106.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (c) 2022 Rockchip Electronics Co., Ltd
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * SPDX-License-Identifier:     GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun #include <common.h>
7*4882a593Smuzhiyun #include <boot_rkimg.h>
8*4882a593Smuzhiyun #include <cli.h>
9*4882a593Smuzhiyun #include <debug_uart.h>
10*4882a593Smuzhiyun #include <miiphy.h>
11*4882a593Smuzhiyun #include <syscon.h>
12*4882a593Smuzhiyun #include <asm/arch/clock.h>
13*4882a593Smuzhiyun #include <asm/io.h>
14*4882a593Smuzhiyun #include <asm/arch/hardware.h>
15*4882a593Smuzhiyun #include <asm/arch/grf_rv1106.h>
16*4882a593Smuzhiyun #include <asm/arch/ioc_rv1106.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun DECLARE_GLOBAL_DATA_PTR;
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define PERI_GRF_BASE			0xff000000
21*4882a593Smuzhiyun #define PERI_GRF_PERI_CON1		0x0004
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #define CORE_GRF_BASE			0xff040000
24*4882a593Smuzhiyun #define CORE_GRF_CACHE_PERI_ADDR_START	0x0024
25*4882a593Smuzhiyun #define CORE_GRF_CACHE_PERI_ADDR_END	0x0028
26*4882a593Smuzhiyun #define CORE_GRF_MCU_CACHE_MISC		0x002c
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #define PERI_GRF_BASE			0xff000000
29*4882a593Smuzhiyun #define PERI_GRF_USBPHY_CON0		0x0050
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #define PERI_SGRF_BASE			0xff070000
32*4882a593Smuzhiyun #define PERI_SGRF_FIREWALL_CON0		0x0020
33*4882a593Smuzhiyun #define PERI_SGRF_FIREWALL_CON1		0x0024
34*4882a593Smuzhiyun #define PERI_SGRF_FIREWALL_CON2		0x0028
35*4882a593Smuzhiyun #define PERI_SGRF_FIREWALL_CON3		0x002c
36*4882a593Smuzhiyun #define PERI_SGRF_FIREWALL_CON4		0x0030
37*4882a593Smuzhiyun #define PERI_SGRF_SOC_CON3		0x00bc
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #define CORE_SGRF_BASE			0xff076000
40*4882a593Smuzhiyun #define CORE_SGRF_FIREWALL_CON0		0x0020
41*4882a593Smuzhiyun #define CORE_SGRF_FIREWALL_CON1		0x0024
42*4882a593Smuzhiyun #define CORE_SGRF_FIREWALL_CON2		0x0028
43*4882a593Smuzhiyun #define CORE_SGRF_FIREWALL_CON3		0x002c
44*4882a593Smuzhiyun #define CORE_SGRF_FIREWALL_CON4		0x0030
45*4882a593Smuzhiyun #define CORE_SGRF_CPU_CTRL_CON		0x0040
46*4882a593Smuzhiyun #define CORE_SGRF_HPMCU_BOOT_ADDR	0x0044
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define PMU_SGRF_BASE			0xff080000
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /* QoS Generator Base Address */
51*4882a593Smuzhiyun #define QOS_CPU_BASE			0xff110000
52*4882a593Smuzhiyun #define QOS_CRYPTO_BASE			0xff120000
53*4882a593Smuzhiyun #define QOS_DECOM_BASE			0xff120080
54*4882a593Smuzhiyun #define QOS_DMAC_BASE			0xff120100
55*4882a593Smuzhiyun #define QOS_EMMC_BASE			0xff120180
56*4882a593Smuzhiyun #define QOS_FSPI_BASE			0xff120200
57*4882a593Smuzhiyun #define QOS_IVE_RD_BASE			0xff120280
58*4882a593Smuzhiyun #define QOS_IVE_WR_BASE			0xff120300
59*4882a593Smuzhiyun #define QOS_USB_BASE			0xff120380
60*4882a593Smuzhiyun #define QOS_ISP_BASE			0xff130000
61*4882a593Smuzhiyun #define QOS_SDMMC0_BASE			0xff130080
62*4882a593Smuzhiyun #define QOS_VICAP_BASE			0xff130100
63*4882a593Smuzhiyun #define QOS_NPU_BASE			0xff140000
64*4882a593Smuzhiyun #define QOS_VENC_BASE			0xff150000
65*4882a593Smuzhiyun #define QOS_VEPU_PP_BASE		0xff150080
66*4882a593Smuzhiyun #define QOS_MAC_BASE			0xff160000
67*4882a593Smuzhiyun #define QOS_RGA_RD_BASE			0xff160080
68*4882a593Smuzhiyun #define QOS_RGA_WR_BASE			0xff160100
69*4882a593Smuzhiyun #define QOS_SDIO_BASE			0xff160280
70*4882a593Smuzhiyun #define QOS_VOP_BASE			0xff160300
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun #define QOS_PRIORITY			0x0008
73*4882a593Smuzhiyun #define QOS_MODE			0x000c
74*4882a593Smuzhiyun #define QOS_BANDWIDTH			0x0010
75*4882a593Smuzhiyun #define QOS_SATURATION			0x0014
76*4882a593Smuzhiyun #define QOS_EXTCONTROL			0x0018
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /* Shaping Base Address */
79*4882a593Smuzhiyun #define SHAPING_CPU_BASE		0xff110080
80*4882a593Smuzhiyun #define SHAPING_DECOM_BASE		0xff110400
81*4882a593Smuzhiyun #define SHAPING_IVE_RD_BASE		0xff120480
82*4882a593Smuzhiyun #define SHAPING_IVE_WR_BASE		0xff120500
83*4882a593Smuzhiyun #define SHAPING_ISP_BASE		0xff130180
84*4882a593Smuzhiyun #define SHAPING_VICAP_BASE		0xff130200
85*4882a593Smuzhiyun #define SHAPING_NPU_BASE		0xff140080
86*4882a593Smuzhiyun #define SHAPING_VENC_BASE		0xff150100
87*4882a593Smuzhiyun #define SHAPING_VEPU_PP_BASE		0xff150180
88*4882a593Smuzhiyun #define SHAPING_RGA_RD_BASE		0xff160380
89*4882a593Smuzhiyun #define SHAPING_RGA_WR_BASE		0xff160400
90*4882a593Smuzhiyun #define SHAPING_VOP_BASE		0xff160580
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun #define SHAPING_NBPKTMAX		0x0008
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun #define FW_DDR_BASE			0xff900000
95*4882a593Smuzhiyun #define FW_DDR_MST3_REG			0x4c
96*4882a593Smuzhiyun #define FW_SHRM_BASE			0xff910000
97*4882a593Smuzhiyun #define FW_SHRM_MST1_REG		0x44
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun #define PMU_BASE			0xff300000
100*4882a593Smuzhiyun #define PMU_BIU_IDLE_ST			0x00d8
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun #define CRU_BASE			0xff3b0000
103*4882a593Smuzhiyun #define CRU_GLB_RST_CON			0x0c10
104*4882a593Smuzhiyun #define CRU_PVTPLL0_CON0_L		0x1000
105*4882a593Smuzhiyun #define CRU_PVTPLL0_CON1_L		0x1008
106*4882a593Smuzhiyun #define CRU_PVTPLL1_CON0_L		0x1030
107*4882a593Smuzhiyun #define CRU_PVTPLL1_CON1_L		0x1038
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun #define CORECRU_BASE			0xff3b8000
110*4882a593Smuzhiyun #define CORECRU_CORESOFTRST_CON01	0xa04
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #define USBPHY_APB_BASE			0xff3e0000
113*4882a593Smuzhiyun #define USBPHY_FSLS_DIFF_RECEIVER	0x0100
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun #define GPIO0_IOC_BASE			0xFF388000
116*4882a593Smuzhiyun #define GPIO1_IOC_BASE			0xFF538000
117*4882a593Smuzhiyun #define GPIO2_IOC_BASE			0xFF548000
118*4882a593Smuzhiyun #define GPIO3_IOC_BASE			0xFF558000
119*4882a593Smuzhiyun #define GPIO4_IOC_BASE			0xFF568000
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun #define GPIO3A_IOMUX_SEL_L		0x0040
122*4882a593Smuzhiyun #define GPIO3A_IOMUX_SEL_H		0x0044
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun #define GPIO4A_IOMUX_SEL_L		0x000
125*4882a593Smuzhiyun #define GPIO4A_IOMUX_SEL_H		0x004
126*4882a593Smuzhiyun #define GPIO4B_IOMUX_SEL_L		0x008
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define GPIO4_IOC_GPIO4B_DS0		0x0030
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* OS_REG1[2:0]: chip ver */
131*4882a593Smuzhiyun #define CHIP_VER_REG			0xff020204
132*4882a593Smuzhiyun #define CHIP_VER_MSK			0x7
133*4882a593Smuzhiyun #define V(x)				((x) - 1)
134*4882a593Smuzhiyun #define ROM_VER_REG			0xffff4ffc
135*4882a593Smuzhiyun #define ROM_V2				0x30303256
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun /* uart0 iomux */
138*4882a593Smuzhiyun /* gpio0a0 */
139*4882a593Smuzhiyun #define UART0_RX_M0			1
140*4882a593Smuzhiyun #define UART0_RX_M0_OFFSET		0
141*4882a593Smuzhiyun #define UART0_RX_M0_ADDR		(GPIO1_IOC_BASE)
142*4882a593Smuzhiyun /* gpio0a1 */
143*4882a593Smuzhiyun #define UART0_TX_M0			1
144*4882a593Smuzhiyun #define UART0_TX_M0_OFFSET		4
145*4882a593Smuzhiyun #define UART0_TX_M0_ADDR		(GPIO1_IOC_BASE)
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun /* gpio2b0 */
148*4882a593Smuzhiyun #define UART0_RX_M1			1
149*4882a593Smuzhiyun #define UART0_RX_M1_OFFSET		0
150*4882a593Smuzhiyun #define UART0_RX_M1_ADDR		(GPIO2_IOC_BASE + 0x28)
151*4882a593Smuzhiyun /* gpio2b1 */
152*4882a593Smuzhiyun #define UART0_TX_M1			1
153*4882a593Smuzhiyun #define UART0_TX_M1_OFFSET		4
154*4882a593Smuzhiyun #define UART0_TX_M1_ADDR		(GPIO2_IOC_BASE + 0x28)
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun /* gpio4a0 */
157*4882a593Smuzhiyun #define UART0_RX_M2			3
158*4882a593Smuzhiyun #define UART0_RX_M2_OFFSET		0
159*4882a593Smuzhiyun #define UART0_RX_M2_ADDR		(GPIO4_IOC_BASE)
160*4882a593Smuzhiyun /* gpio4a1 */
161*4882a593Smuzhiyun #define UART0_TX_M2			3
162*4882a593Smuzhiyun #define UART0_TX_M2_OFFSET		4
163*4882a593Smuzhiyun #define UART0_TX_M2_ADDR		(GPIO4_IOC_BASE)
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /* uart1 iomux */
166*4882a593Smuzhiyun /* gpio1a4 */
167*4882a593Smuzhiyun #define UART1_RX_M0			1
168*4882a593Smuzhiyun #define UART1_RX_M0_OFFSET		0
169*4882a593Smuzhiyun #define UART1_RX_M0_ADDR		(GPIO1_IOC_BASE + 0x4)
170*4882a593Smuzhiyun /* gpio1a3 */
171*4882a593Smuzhiyun #define UART1_TX_M0			1
172*4882a593Smuzhiyun #define UART1_TX_M0_OFFSET		12
173*4882a593Smuzhiyun #define UART1_TX_M0_ADDR		(GPIO1_IOC_BASE)
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun /* gpio2a5 */
176*4882a593Smuzhiyun #define UART1_RX_M1			4
177*4882a593Smuzhiyun #define UART1_RX_M1_OFFSET		4
178*4882a593Smuzhiyun #define UART1_RX_M1_ADDR		(GPIO2_IOC_BASE + 0x24)
179*4882a593Smuzhiyun /* gpio2a4 */
180*4882a593Smuzhiyun #define UART1_TX_M1			4
181*4882a593Smuzhiyun #define UART1_TX_M1_OFFSET		0
182*4882a593Smuzhiyun #define UART1_TX_M1_ADDR		(GPIO2_IOC_BASE + 0x24)
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun /* gpio4a7 */
185*4882a593Smuzhiyun #define UART1_RX_M2			3
186*4882a593Smuzhiyun #define UART1_RX_M2_OFFSET		12
187*4882a593Smuzhiyun #define UART1_RX_M2_ADDR		(GPIO4_IOC_BASE + 0x4)
188*4882a593Smuzhiyun /* gpio4a5 */
189*4882a593Smuzhiyun #define UART1_TX_M2			3
190*4882a593Smuzhiyun #define UART1_TX_M2_OFFSET		4
191*4882a593Smuzhiyun #define UART1_TX_M2_ADDR		(GPIO4_IOC_BASE + 0x4)
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /* uart2 iomux */
194*4882a593Smuzhiyun /* gpio3a3 */
195*4882a593Smuzhiyun #define UART2_RX_M0			2
196*4882a593Smuzhiyun #define UART2_RX_M0_OFFSET		12
197*4882a593Smuzhiyun #define UART2_RX_M0_ADDR		(GPIO3_IOC_BASE + 0x40)
198*4882a593Smuzhiyun /* gpio3a2 */
199*4882a593Smuzhiyun #define UART2_TX_M0			2
200*4882a593Smuzhiyun #define UART2_TX_M0_OFFSET		8
201*4882a593Smuzhiyun #define UART2_TX_M0_ADDR		(GPIO3_IOC_BASE + 0x40)
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun /* gpio1b3 */
204*4882a593Smuzhiyun #define UART2_RX_M1			2
205*4882a593Smuzhiyun #define UART2_RX_M1_OFFSET		12
206*4882a593Smuzhiyun #define UART2_RX_M1_ADDR		(GPIO1_IOC_BASE + 0x8)
207*4882a593Smuzhiyun /* gpio1b2 */
208*4882a593Smuzhiyun #define UART2_TX_M1			2
209*4882a593Smuzhiyun #define UART2_TX_M1_OFFSET		8
210*4882a593Smuzhiyun #define UART2_TX_M1_ADDR		(GPIO1_IOC_BASE + 0x8)
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun /* uart3 iomux */
213*4882a593Smuzhiyun /* gpio1a1 */
214*4882a593Smuzhiyun #define UART3_RX_M0			1
215*4882a593Smuzhiyun #define UART3_RX_M0_OFFSET		4
216*4882a593Smuzhiyun #define UART3_RX_M0_ADDR		(GPIO1_IOC_BASE)
217*4882a593Smuzhiyun /* gpio1a0 */
218*4882a593Smuzhiyun #define UART3_TX_M0			1
219*4882a593Smuzhiyun #define UART3_TX_M0_OFFSET		0
220*4882a593Smuzhiyun #define UART3_TX_M0_ADDR		(GPIO1_IOC_BASE)
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun /* gpio1d1 */
223*4882a593Smuzhiyun #define UART3_RX_M1			5
224*4882a593Smuzhiyun #define UART3_RX_M1_OFFSET		4
225*4882a593Smuzhiyun #define UART3_RX_M1_ADDR		(GPIO1_IOC_BASE + 0x18)
226*4882a593Smuzhiyun /* gpio1d0 */
227*4882a593Smuzhiyun #define UART3_TX_M1			5
228*4882a593Smuzhiyun #define UART3_TX_M1_OFFSET		0
229*4882a593Smuzhiyun #define UART3_TX_M1_ADDR		(GPIO2_IOC_BASE + 0x18)
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun /* uart4 iomux */
232*4882a593Smuzhiyun /* gpio1b0 */
233*4882a593Smuzhiyun #define UART4_RX_M0			1
234*4882a593Smuzhiyun #define UART4_RX_M0_OFFSET		0
235*4882a593Smuzhiyun #define UART4_RX_M0_ADDR		(GPIO1_IOC_BASE + 0x8)
236*4882a593Smuzhiyun /* gpio1b1 */
237*4882a593Smuzhiyun #define UART4_TX_M0			1
238*4882a593Smuzhiyun #define UART4_TX_M0_OFFSET		4
239*4882a593Smuzhiyun #define UART4_TX_M0_ADDR		(GPIO1_IOC_BASE + 0x8)
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun /* gpio1c4 */
242*4882a593Smuzhiyun #define UART4_RX_M1			4
243*4882a593Smuzhiyun #define UART4_RX_M1_OFFSET		0
244*4882a593Smuzhiyun #define UART4_RX_M1_ADDR		(GPIO1_IOC_BASE + 0x14)
245*4882a593Smuzhiyun /* gpio1c5 */
246*4882a593Smuzhiyun #define UART4_TX_M1			4
247*4882a593Smuzhiyun #define UART4_TX_M1_OFFSET		4
248*4882a593Smuzhiyun #define UART4_TX_M1_ADDR		(GPIO1_IOC_BASE + 0x14)
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun /* uart5 iomux */
251*4882a593Smuzhiyun /* gpio3a7 */
252*4882a593Smuzhiyun #define UART5_RX_M0			2
253*4882a593Smuzhiyun #define UART5_RX_M0_OFFSET		11
254*4882a593Smuzhiyun #define UART5_RX_M0_ADDR		(GPIO3_IOC_BASE + 0x44)
255*4882a593Smuzhiyun /* gpio3a6 */
256*4882a593Smuzhiyun #define UART5_TX_M0			1
257*4882a593Smuzhiyun #define UART5_TX_M0_OFFSET		8
258*4882a593Smuzhiyun #define UART5_TX_M0_ADDR		(GPIO1_IOC_BASE + 0x44)
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun /* gpio1d2 */
261*4882a593Smuzhiyun #define UART5_RX_M1			4
262*4882a593Smuzhiyun #define UART5_RX_M1_OFFSET		8
263*4882a593Smuzhiyun #define UART5_RX_M1_ADDR		(GPIO1_IOC_BASE + 0x18)
264*4882a593Smuzhiyun /* gpio1d3 */
265*4882a593Smuzhiyun #define UART5_TX_M1			4
266*4882a593Smuzhiyun #define UART5_TX_M1_OFFSET		12
267*4882a593Smuzhiyun #define UART5_TX_M1_ADDR		(GPIO1_IOC_BASE + 0x18)
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun /* gpio3d0 */
270*4882a593Smuzhiyun #define UART5_RX_M2			2
271*4882a593Smuzhiyun #define UART5_RX_M2_OFFSET		0
272*4882a593Smuzhiyun #define UART5_RX_M2_ADDR		(GPIO3_IOC_BASE + 0x58)
273*4882a593Smuzhiyun /* gpio3c7 */
274*4882a593Smuzhiyun #define UART5_TX_M2			2
275*4882a593Smuzhiyun #define UART5_TX_M2_OFFSET		12
276*4882a593Smuzhiyun #define UART5_TX_M2_ADDR		(GPIO4_IOC_BASE + 0x54)
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun #define set_uart_iomux(bits_offset, bits_val, addr) \
279*4882a593Smuzhiyun 	writel(GENMASK(bits_offset + 19, bits_offset + 16) | (bits_val << bits_offset) , addr)
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun #define set_uart_iomux_rx(ID, MODE) \
282*4882a593Smuzhiyun 	set_uart_iomux(UART##ID##_RX_M##MODE##_OFFSET, UART##ID##_RX_M##MODE, UART##ID##_RX_M##MODE##_ADDR);
283*4882a593Smuzhiyun #define set_uart_iomux_tx(ID, MODE) \
284*4882a593Smuzhiyun 	set_uart_iomux(UART##ID##_TX_M##MODE##_OFFSET, UART##ID##_TX_M##MODE, UART##ID##_TX_M##MODE##_ADDR);
285*4882a593Smuzhiyun 
board_debug_uart_init(void)286*4882a593Smuzhiyun void board_debug_uart_init(void)
287*4882a593Smuzhiyun {
288*4882a593Smuzhiyun /* UART 0 */
289*4882a593Smuzhiyun #if defined(CONFIG_DEBUG_UART_BASE) && (CONFIG_DEBUG_UART_BASE == 0xff4a0000)
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun #if defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
292*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 0)
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun 	/* UART0_M0 Switch iomux */
295*4882a593Smuzhiyun 	set_uart_iomux_rx(0, 0);
296*4882a593Smuzhiyun 	set_uart_iomux_tx(0, 0);
297*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
298*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 1)
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun 	/* UART0_M1 Switch iomux */
301*4882a593Smuzhiyun 	set_uart_iomux_rx(0, 1);
302*4882a593Smuzhiyun 	set_uart_iomux_tx(0, 1);
303*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
304*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 2)
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun 	/* UART0_M2 Switch iomux */
307*4882a593Smuzhiyun 	set_uart_iomux_rx(0, 2);
308*4882a593Smuzhiyun 	set_uart_iomux_tx(0, 2);
309*4882a593Smuzhiyun #endif
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun /* UART 1 */
312*4882a593Smuzhiyun #elif defined(CONFIG_DEBUG_UART_BASE) && (CONFIG_DEBUG_UART_BASE == 0xff4b0000)
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun #if defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
315*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 0)
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun 	/* UART1_M0 Switch iomux */
318*4882a593Smuzhiyun 	set_uart_iomux_rx(1, 0);
319*4882a593Smuzhiyun 	set_uart_iomux_tx(1, 0);
320*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
321*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 1)
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun 	/* UART1_M1 Switch iomux */
324*4882a593Smuzhiyun 	set_uart_iomux_rx(1, 1);
325*4882a593Smuzhiyun 	set_uart_iomux_tx(1, 1);
326*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
327*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 2)
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun 	/* UART1_M2 Switch iomux */
330*4882a593Smuzhiyun 	set_uart_iomux_rx(1, 2);
331*4882a593Smuzhiyun 	set_uart_iomux_tx(1, 2);
332*4882a593Smuzhiyun #endif
333*4882a593Smuzhiyun /* UART 2 */
334*4882a593Smuzhiyun #elif defined(CONFIG_DEBUG_UART_BASE) && (CONFIG_DEBUG_UART_BASE == 0xff4c0000)
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun #if defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
337*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 0)
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun 	/* UART2_M0 Switch iomux */
340*4882a593Smuzhiyun 	set_uart_iomux_rx(2, 0);
341*4882a593Smuzhiyun 	set_uart_iomux_tx(2, 0);
342*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
343*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 1)
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun 	/* UART2_M1 Switch iomux */
346*4882a593Smuzhiyun 	set_uart_iomux_rx(2, 1);
347*4882a593Smuzhiyun 	set_uart_iomux_tx(2, 1);
348*4882a593Smuzhiyun #endif
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun /* UART 3 */
351*4882a593Smuzhiyun #elif defined(CONFIG_DEBUG_UART_BASE) && (CONFIG_DEBUG_UART_BASE == 0xff4d0000)
352*4882a593Smuzhiyun #if defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
353*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 0)
354*4882a593Smuzhiyun 
355*4882a593Smuzhiyun 	/* UART3_M0 Switch iomux */
356*4882a593Smuzhiyun 	set_uart_iomux_rx(3, 0);
357*4882a593Smuzhiyun 	set_uart_iomux_tx(3, 0);
358*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
359*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 1)
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun 	/* UART3_M1 Switch iomux */
362*4882a593Smuzhiyun 	set_uart_iomux_rx(3, 1);
363*4882a593Smuzhiyun 	set_uart_iomux_tx(3, 1);
364*4882a593Smuzhiyun #endif
365*4882a593Smuzhiyun /* UART 4 */
366*4882a593Smuzhiyun #elif defined(CONFIG_DEBUG_UART_BASE) && (CONFIG_DEBUG_UART_BASE == 0xff4e0000)
367*4882a593Smuzhiyun #if defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
368*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 0)
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun 	/* UART4_M0 Switch iomux */
371*4882a593Smuzhiyun 	set_uart_iomux_rx(4, 0);
372*4882a593Smuzhiyun 	set_uart_iomux_tx(4, 0);
373*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
374*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 1)
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun 	/* UART4_M1 Switch iomux */
377*4882a593Smuzhiyun 	set_uart_iomux_rx(4, 1);
378*4882a593Smuzhiyun 	set_uart_iomux_tx(4, 1);
379*4882a593Smuzhiyun #endif
380*4882a593Smuzhiyun /* UART 5 */
381*4882a593Smuzhiyun #elif defined(CONFIG_DEBUG_UART_BASE) && (CONFIG_DEBUG_UART_BASE == 0xff4f0000)
382*4882a593Smuzhiyun #if defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
383*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 0)
384*4882a593Smuzhiyun 
385*4882a593Smuzhiyun 	/* UART5_M0 Switch iomux */
386*4882a593Smuzhiyun 	set_uart_iomux_rx(5, 0);
387*4882a593Smuzhiyun 	set_uart_iomux_tx(5, 0);
388*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
389*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 1)
390*4882a593Smuzhiyun 
391*4882a593Smuzhiyun 	/* UART5_M1 Switch iomux */
392*4882a593Smuzhiyun 	set_uart_iomux_rx(5, 1);
393*4882a593Smuzhiyun 	set_uart_iomux_tx(5, 1);
394*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_UART_MUX_SEL_M) && \
395*4882a593Smuzhiyun 	(CONFIG_ROCKCHIP_UART_MUX_SEL_M == 2)
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun 	/* UART5_M2 Switch iomux */
398*4882a593Smuzhiyun 	set_uart_iomux_rx(5, 2);
399*4882a593Smuzhiyun 	set_uart_iomux_tx(5, 2);
400*4882a593Smuzhiyun #endif
401*4882a593Smuzhiyun #endif
402*4882a593Smuzhiyun }
403*4882a593Smuzhiyun 
arch_cpu_init(void)404*4882a593Smuzhiyun int arch_cpu_init(void)
405*4882a593Smuzhiyun {
406*4882a593Smuzhiyun #ifdef CONFIG_SPL_BUILD
407*4882a593Smuzhiyun 	/* Save chip version to OS_REG1[2:0] */
408*4882a593Smuzhiyun 	if (readl(ROM_VER_REG) == ROM_V2)
409*4882a593Smuzhiyun 		writel((readl(CHIP_VER_REG) & ~CHIP_VER_MSK) | V(2), CHIP_VER_REG);
410*4882a593Smuzhiyun 	else
411*4882a593Smuzhiyun 		writel((readl(CHIP_VER_REG) & ~CHIP_VER_MSK) | V(1), CHIP_VER_REG);
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun 	/* Set all devices to Non-secure */
414*4882a593Smuzhiyun 	writel(0xffff0000, PERI_SGRF_BASE + PERI_SGRF_FIREWALL_CON0);
415*4882a593Smuzhiyun 	writel(0xffff0000, PERI_SGRF_BASE + PERI_SGRF_FIREWALL_CON1);
416*4882a593Smuzhiyun 	writel(0xffff0000, PERI_SGRF_BASE + PERI_SGRF_FIREWALL_CON2);
417*4882a593Smuzhiyun 	writel(0xffff0000, PERI_SGRF_BASE + PERI_SGRF_FIREWALL_CON3);
418*4882a593Smuzhiyun 	writel(0xffff0000, PERI_SGRF_BASE + PERI_SGRF_FIREWALL_CON4);
419*4882a593Smuzhiyun 	writel(0x000f0000, PERI_SGRF_BASE + PERI_SGRF_SOC_CON3);
420*4882a593Smuzhiyun 	writel(0xffff0000, CORE_SGRF_BASE + CORE_SGRF_FIREWALL_CON0);
421*4882a593Smuzhiyun 	writel(0xffff0000, CORE_SGRF_BASE + CORE_SGRF_FIREWALL_CON1);
422*4882a593Smuzhiyun 	writel(0xffff0000, CORE_SGRF_BASE + CORE_SGRF_FIREWALL_CON2);
423*4882a593Smuzhiyun 	writel(0xffff0000, CORE_SGRF_BASE + CORE_SGRF_FIREWALL_CON3);
424*4882a593Smuzhiyun 	writel(0xffff0000, CORE_SGRF_BASE + CORE_SGRF_FIREWALL_CON4);
425*4882a593Smuzhiyun 	writel(0x00030002, CORE_SGRF_BASE + CORE_SGRF_CPU_CTRL_CON);
426*4882a593Smuzhiyun 	writel(0x20000000, PMU_SGRF_BASE);
427*4882a593Smuzhiyun 
428*4882a593Smuzhiyun 	/* Set the emmc and fspi to access secure area */
429*4882a593Smuzhiyun 	writel(0x00000000, FW_DDR_BASE + FW_DDR_MST3_REG);
430*4882a593Smuzhiyun 	writel(0xff00ffff, FW_SHRM_BASE + FW_SHRM_MST1_REG);
431*4882a593Smuzhiyun 
432*4882a593Smuzhiyun 	/* Set fspi clk 6mA */
433*4882a593Smuzhiyun 	if ((readl(GPIO4_IOC_BASE + GPIO4B_IOMUX_SEL_L) & 0x70) == 0x20)
434*4882a593Smuzhiyun 		writel(0x3f000700, GPIO4_IOC_BASE + GPIO4_IOC_GPIO4B_DS0);
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun 	/*
437*4882a593Smuzhiyun 	 * Set the USB2 PHY in suspend mode and turn off the
438*4882a593Smuzhiyun 	 * USB2 PHY FS/LS differential receiver to save power:
439*4882a593Smuzhiyun 	 * VCC1V8_USB : reduce 3.8 mA
440*4882a593Smuzhiyun 	 * VDD_0V9 : reduce 4.4 mA
441*4882a593Smuzhiyun 	 */
442*4882a593Smuzhiyun 	writel(0x01ff01d1, PERI_GRF_BASE + PERI_GRF_USBPHY_CON0);
443*4882a593Smuzhiyun 	writel(0x00000000, USBPHY_APB_BASE + USBPHY_FSLS_DIFF_RECEIVER);
444*4882a593Smuzhiyun 
445*4882a593Smuzhiyun 	/* release the wdt */
446*4882a593Smuzhiyun 	writel(0x2000200, PERI_GRF_BASE + PERI_GRF_PERI_CON1);
447*4882a593Smuzhiyun 	writel(0x400040, CRU_BASE + CRU_GLB_RST_CON);
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun 	/*
450*4882a593Smuzhiyun 	 * When venc/npu use pvtpll, reboot will fail, because
451*4882a593Smuzhiyun 	 * pvtpll is reset before venc/npu reset, so venc/npu
452*4882a593Smuzhiyun 	 * is not completely reset, system will block when access
453*4882a593Smuzhiyun 	 * NoC in SPL.
454*4882a593Smuzhiyun 	 * Enable pvtpll can make venc/npu reset go on, wait
455*4882a593Smuzhiyun 	 * until venc/npu is reset completely.
456*4882a593Smuzhiyun 	 */
457*4882a593Smuzhiyun 	writel(0xffff0018, CRU_BASE + CRU_PVTPLL0_CON1_L);
458*4882a593Smuzhiyun 	writel(0x00030003, CRU_BASE + CRU_PVTPLL0_CON0_L);
459*4882a593Smuzhiyun 	writel(0xffff0018, CRU_BASE + CRU_PVTPLL1_CON1_L);
460*4882a593Smuzhiyun 	writel(0x00030003, CRU_BASE + CRU_PVTPLL1_CON0_L);
461*4882a593Smuzhiyun 	udelay(2);
462*4882a593Smuzhiyun 
463*4882a593Smuzhiyun 	if (readl(PMU_BASE + PMU_BIU_IDLE_ST)) {
464*4882a593Smuzhiyun 		printascii("BAD PMU_BIU_IDLE_ST: ");
465*4882a593Smuzhiyun 		printhex8(readl(PMU_BASE + PMU_BIU_IDLE_ST));
466*4882a593Smuzhiyun 	}
467*4882a593Smuzhiyun 
468*4882a593Smuzhiyun 	/*
469*4882a593Smuzhiyun 	 * Limits npu max transport packets to 4 for route to scheduler,
470*4882a593Smuzhiyun 	 * give much more chance for other controllers to access memory.
471*4882a593Smuzhiyun 	 * such as VENC.
472*4882a593Smuzhiyun 	 */
473*4882a593Smuzhiyun 	writel(0x4, SHAPING_NPU_BASE + SHAPING_NBPKTMAX);
474*4882a593Smuzhiyun 
475*4882a593Smuzhiyun 	/* Improve VENC QOS PRIORITY */
476*4882a593Smuzhiyun 	writel(0x303, QOS_VENC_BASE + QOS_PRIORITY);
477*4882a593Smuzhiyun 
478*4882a593Smuzhiyun #ifdef CONFIG_ROCKCHIP_IMAGE_TINY
479*4882a593Smuzhiyun 	/* Pinctrl is disabled, set sdmmc0 iomux here */
480*4882a593Smuzhiyun 	writel(0xfff01110, GPIO3_IOC_BASE + GPIO3A_IOMUX_SEL_L);
481*4882a593Smuzhiyun 	writel(0xffff1111, GPIO3_IOC_BASE + GPIO3A_IOMUX_SEL_H);
482*4882a593Smuzhiyun #endif
483*4882a593Smuzhiyun 
484*4882a593Smuzhiyun #if defined(CONFIG_ROCKCHIP_SFC_IOMUX)
485*4882a593Smuzhiyun 	/* fspi iomux */
486*4882a593Smuzhiyun 	writel(0x0f000700, GPIO4_IOC_BASE + 0x0030);
487*4882a593Smuzhiyun 	writel(0xff002200, GPIO4_IOC_BASE + GPIO4A_IOMUX_SEL_L);
488*4882a593Smuzhiyun 	writel(0x0f0f0202, GPIO4_IOC_BASE + GPIO4A_IOMUX_SEL_H);
489*4882a593Smuzhiyun 	writel(0x00ff0022, GPIO4_IOC_BASE + GPIO4B_IOMUX_SEL_L);
490*4882a593Smuzhiyun #elif defined(CONFIG_ROCKCHIP_EMMC_IOMUX)
491*4882a593Smuzhiyun 	/* emmc iomux */
492*4882a593Smuzhiyun 	writel(0xffff1111, GPIO4_IOC_BASE + GPIO4A_IOMUX_SEL_L);
493*4882a593Smuzhiyun 	writel(0xffff1111, GPIO4_IOC_BASE + GPIO4A_IOMUX_SEL_H);
494*4882a593Smuzhiyun 	writel(0x00ff0011, GPIO4_IOC_BASE + GPIO4B_IOMUX_SEL_L);
495*4882a593Smuzhiyun #endif
496*4882a593Smuzhiyun 
497*4882a593Smuzhiyun #endif
498*4882a593Smuzhiyun 	return 0;
499*4882a593Smuzhiyun }
500*4882a593Smuzhiyun 
501*4882a593Smuzhiyun #ifdef CONFIG_SPL_BUILD
spl_fit_standalone_release(char * id,uintptr_t entry_point)502*4882a593Smuzhiyun int spl_fit_standalone_release(char *id, uintptr_t entry_point)
503*4882a593Smuzhiyun {
504*4882a593Smuzhiyun 	/* set the mcu uncache area, usually set the devices address */
505*4882a593Smuzhiyun 	writel(0xff000, CORE_GRF_BASE + CORE_GRF_CACHE_PERI_ADDR_START);
506*4882a593Smuzhiyun 	writel(0xffc00, CORE_GRF_BASE + CORE_GRF_CACHE_PERI_ADDR_END);
507*4882a593Smuzhiyun 	/* Reset the hp mcu */
508*4882a593Smuzhiyun 	writel(0x1e001e, CORECRU_BASE + CORECRU_CORESOFTRST_CON01);
509*4882a593Smuzhiyun 	/* set the mcu addr */
510*4882a593Smuzhiyun 	writel(entry_point, CORE_SGRF_BASE + CORE_SGRF_HPMCU_BOOT_ADDR);
511*4882a593Smuzhiyun 	/* release the mcu */
512*4882a593Smuzhiyun 	writel(0x1e0000, CORECRU_BASE + CORECRU_CORESOFTRST_CON01);
513*4882a593Smuzhiyun 
514*4882a593Smuzhiyun 	return 0;
515*4882a593Smuzhiyun }
516*4882a593Smuzhiyun 
rk_meta_process(void)517*4882a593Smuzhiyun void rk_meta_process(void)
518*4882a593Smuzhiyun {
519*4882a593Smuzhiyun 	writel(0x00080008, CORE_GRF_BASE + CORE_GRF_MCU_CACHE_MISC);
520*4882a593Smuzhiyun }
521*4882a593Smuzhiyun #endif
522*4882a593Smuzhiyun 
523*4882a593Smuzhiyun #ifdef CONFIG_ROCKCHIP_IMAGE_TINY
rk_board_scan_bootdev(void)524*4882a593Smuzhiyun int rk_board_scan_bootdev(void)
525*4882a593Smuzhiyun {
526*4882a593Smuzhiyun 	char *devtype, *devnum;
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun 	if (!run_command("blk dev mmc 1", 0) &&
529*4882a593Smuzhiyun 	    !run_command("rkimgtest mmc 1", 0)) {
530*4882a593Smuzhiyun 		devtype = "mmc";
531*4882a593Smuzhiyun 		devnum = "1";
532*4882a593Smuzhiyun 	} else {
533*4882a593Smuzhiyun 		run_command("blk dev mtd 2", 0);
534*4882a593Smuzhiyun 		devtype = "mtd";
535*4882a593Smuzhiyun 		devnum = "2";
536*4882a593Smuzhiyun 	}
537*4882a593Smuzhiyun 	env_set("devtype", devtype);
538*4882a593Smuzhiyun 	env_set("devnum", devnum);
539*4882a593Smuzhiyun 
540*4882a593Smuzhiyun 	return 0;
541*4882a593Smuzhiyun }
542*4882a593Smuzhiyun #endif
543*4882a593Smuzhiyun 
544*4882a593Smuzhiyun #if (defined CONFIG_MII || defined CONFIG_CMD_MII || defined CONFIG_PHYLIB)
545*4882a593Smuzhiyun #define GMAC_NODE_FDT_PATH		"/ethernet@ffa80000"
546*4882a593Smuzhiyun #define RK630_MII_NAME			"ethernet@ffa80000"
547*4882a593Smuzhiyun #define	PHY_ADDR			2
548*4882a593Smuzhiyun #define	PAGE_SWITCH			0x1f
549*4882a593Smuzhiyun #define	DISABLE_APS_REG			0x12
550*4882a593Smuzhiyun #define	DISABLE_APS_VAL			0x4824
551*4882a593Smuzhiyun #define	PHYAFE_PDCW_REG			0x1c
552*4882a593Smuzhiyun #define	PHYAFE_PDCW_VAL			0x8880
553*4882a593Smuzhiyun #define	PD_ANALOG_REG			0x0
554*4882a593Smuzhiyun #define PD_ANALOG_VAL			0x3900
555*4882a593Smuzhiyun #define RV1106_MACPHY_SHUTDOWN		BIT(1)
556*4882a593Smuzhiyun #define RV1106_MACPHY_ENABLE_MASK	BIT(1)
557*4882a593Smuzhiyun 
rk_board_fdt_pwrdn_gmac(const void * blob)558*4882a593Smuzhiyun static int rk_board_fdt_pwrdn_gmac(const void *blob)
559*4882a593Smuzhiyun {
560*4882a593Smuzhiyun 	void *fdt = (void *)gd->fdt_blob;
561*4882a593Smuzhiyun 	struct rv1106_grf *grf;
562*4882a593Smuzhiyun 	int gmac_node;
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun 	/* Turn off GMAC FEPHY to reduce chip power consumption at uboot level,
565*4882a593Smuzhiyun 	 * if the gmac node is disabled at kernel dtb. RV1106/1103 has the
566*4882a593Smuzhiyun 	 * internal gmac phy, u-boot.dtb defines and enables the gmac node
567*4882a593Smuzhiyun 	 * by default, so even if the gmac node of the kernel dts is disabled,
568*4882a593Smuzhiyun 	 * U-Boot will enable and initialize the gmac phy. So it is not okay
569*4882a593Smuzhiyun 	 * to turn off gmac phy by default in arch_cpu_init(), need to turn off
570*4882a593Smuzhiyun 	 * gmac phy in the current function.
571*4882a593Smuzhiyun 	 */
572*4882a593Smuzhiyun 	gmac_node = fdt_path_offset(gd->fdt_blob, GMAC_NODE_FDT_PATH);
573*4882a593Smuzhiyun 	if (fdt_stringlist_search(fdt, gmac_node, "status", "disabled") >= 0) {
574*4882a593Smuzhiyun 		/* switch to page 1 */
575*4882a593Smuzhiyun 		miiphy_write(RK630_MII_NAME, PHY_ADDR, PAGE_SWITCH, 0x0100);
576*4882a593Smuzhiyun 		miiphy_write(RK630_MII_NAME, PHY_ADDR, DISABLE_APS_REG,
577*4882a593Smuzhiyun 			     DISABLE_APS_VAL);
578*4882a593Smuzhiyun 		/* switch to pae 6 */
579*4882a593Smuzhiyun 		miiphy_write(RK630_MII_NAME, PHY_ADDR, PAGE_SWITCH, 0x0600);
580*4882a593Smuzhiyun 		miiphy_write(RK630_MII_NAME, PHY_ADDR, PHYAFE_PDCW_REG,
581*4882a593Smuzhiyun 			     PHYAFE_PDCW_VAL);
582*4882a593Smuzhiyun 		/* switch to page 0 */
583*4882a593Smuzhiyun 		miiphy_write(RK630_MII_NAME, PHY_ADDR, PAGE_SWITCH, 0x0000);
584*4882a593Smuzhiyun 		miiphy_write(RK630_MII_NAME, PHY_ADDR, PD_ANALOG_REG,
585*4882a593Smuzhiyun 			     PD_ANALOG_VAL);
586*4882a593Smuzhiyun 
587*4882a593Smuzhiyun 		grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
588*4882a593Smuzhiyun 		if (grf)
589*4882a593Smuzhiyun 			rk_clrsetreg(&grf->macphy_con0,
590*4882a593Smuzhiyun 				     RV1106_MACPHY_ENABLE_MASK,
591*4882a593Smuzhiyun 				     RV1106_MACPHY_SHUTDOWN);
592*4882a593Smuzhiyun 	}
593*4882a593Smuzhiyun 
594*4882a593Smuzhiyun 	return 0;
595*4882a593Smuzhiyun }
596*4882a593Smuzhiyun #endif
597*4882a593Smuzhiyun 
rk_board_fdt_fixup(const void * blob)598*4882a593Smuzhiyun int rk_board_fdt_fixup(const void *blob)
599*4882a593Smuzhiyun {
600*4882a593Smuzhiyun #if (defined CONFIG_MII || defined CONFIG_CMD_MII || defined CONFIG_PHYLIB)
601*4882a593Smuzhiyun 	rk_board_fdt_pwrdn_gmac(blob);
602*4882a593Smuzhiyun #endif
603*4882a593Smuzhiyun 
604*4882a593Smuzhiyun 	return 0;
605*4882a593Smuzhiyun }
606