xref: /arm-trusted-firmware/plat/brcm/board/stingray/driver/usb.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2019 - 2021, Broadcom
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #include <stdint.h>
8*91f16700Schasinglulu 
9*91f16700Schasinglulu #include <common/debug.h>
10*91f16700Schasinglulu #include <drivers/delay_timer.h>
11*91f16700Schasinglulu #include <lib/mmio.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu #include <mdio.h>
14*91f16700Schasinglulu #include <platform_usb.h>
15*91f16700Schasinglulu #include <sr_utils.h>
16*91f16700Schasinglulu #include "sr_usb.h"
17*91f16700Schasinglulu #include <usbh_xhci_regs.h>
18*91f16700Schasinglulu 
19*91f16700Schasinglulu static uint32_t usb_func = USB3_DRD | USB3H_USB2DRD;
20*91f16700Schasinglulu 
21*91f16700Schasinglulu static void usb_pm_rescal_init(void)
22*91f16700Schasinglulu {
23*91f16700Schasinglulu 	uint32_t data;
24*91f16700Schasinglulu 	uint32_t try;
25*91f16700Schasinglulu 
26*91f16700Schasinglulu 	mmio_setbits_32(CDRU_MISC_RESET_CONTROL, CDRU_PM_RESET_N_R);
27*91f16700Schasinglulu 	/* release reset */
28*91f16700Schasinglulu 	mmio_setbits_32(CDRU_CHIP_TOP_SPARE_REG0, RESCAL_I_RSTB);
29*91f16700Schasinglulu 	udelay(10U);
30*91f16700Schasinglulu 	/* power up */
31*91f16700Schasinglulu 	mmio_setbits_32(CDRU_CHIP_TOP_SPARE_REG0,
32*91f16700Schasinglulu 			RESCAL_I_RSTB | RESCAL_I_PWRDNB);
33*91f16700Schasinglulu 	try = 1000U;
34*91f16700Schasinglulu 	do {
35*91f16700Schasinglulu 		udelay(1U);
36*91f16700Schasinglulu 		data = mmio_read_32(CDRU_CHIP_TOP_SPARE_REG1);
37*91f16700Schasinglulu 		try--;
38*91f16700Schasinglulu 	} while ((data & RESCAL_I_PWRDNB) == 0x0U && (try != 0U));
39*91f16700Schasinglulu 
40*91f16700Schasinglulu 	if (try == 0U) {
41*91f16700Schasinglulu 		ERROR("CDRU_CHIP_TOP_SPARE_REG1: 0x%x\n", data);
42*91f16700Schasinglulu 	}
43*91f16700Schasinglulu 
44*91f16700Schasinglulu 	INFO("USB and PM Rescal Init done..\n");
45*91f16700Schasinglulu }
46*91f16700Schasinglulu 
47*91f16700Schasinglulu const unsigned int xhc_portsc_reg_offset[MAX_USB_PORTS] = {
48*91f16700Schasinglulu 	XHC_PORTSC1_OFFSET,
49*91f16700Schasinglulu 	XHC_PORTSC2_OFFSET,
50*91f16700Schasinglulu 	XHC_PORTSC3_OFFSET,
51*91f16700Schasinglulu };
52*91f16700Schasinglulu 
53*91f16700Schasinglulu static void usb3h_usb2drd_init(void)
54*91f16700Schasinglulu {
55*91f16700Schasinglulu 	uint32_t val;
56*91f16700Schasinglulu 
57*91f16700Schasinglulu 	INFO("USB3H + USB 2DRD init\n");
58*91f16700Schasinglulu 	mmio_clrbits_32(USB3H_U3PHY_CTRL, POR_RESET);
59*91f16700Schasinglulu 	val = mmio_read_32(USB3H_PWR_CTRL);
60*91f16700Schasinglulu 	val &= ~(0x3U << POWER_CTRL_OVRD);
61*91f16700Schasinglulu 	val |= (1U << POWER_CTRL_OVRD);
62*91f16700Schasinglulu 	mmio_write_32(USB3H_PWR_CTRL, val);
63*91f16700Schasinglulu 	mmio_setbits_32(USB3H_U3PHY_CTRL, PHY_RESET);
64*91f16700Schasinglulu 	/* Phy to come out of reset */
65*91f16700Schasinglulu 	udelay(2U);
66*91f16700Schasinglulu 	mmio_clrbits_32(USB3H_U3PHY_CTRL, MDIO_RESET);
67*91f16700Schasinglulu 
68*91f16700Schasinglulu 	/* MDIO in reset */
69*91f16700Schasinglulu 	udelay(2U);
70*91f16700Schasinglulu 	mmio_setbits_32(USB3H_U3PHY_CTRL, MDIO_RESET);
71*91f16700Schasinglulu 
72*91f16700Schasinglulu 	/* After MDIO reset release */
73*91f16700Schasinglulu 	udelay(2U);
74*91f16700Schasinglulu 
75*91f16700Schasinglulu 	/* USB 3.0 phy Analog Block Initialization */
76*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_MDIO_BLOCK_BASE_REG,
77*91f16700Schasinglulu 			USB3_PHY_ANA_BLOCK_BASE);
78*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_ANA_REG0, 0x4646U);
79*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_ANA_REG1, 0x80c9U);
80*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_ANA_REG2, 0x88a6U);
81*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_ANA_REG5, 0x7c12U);
82*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_ANA_REG8, 0x1d07U);
83*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_ANA_REG11, 0x25cU);
84*91f16700Schasinglulu 
85*91f16700Schasinglulu 	/* USB 3.0 phy RXPMD Block initialization*/
86*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_MDIO_BLOCK_BASE_REG,
87*91f16700Schasinglulu 			USB3_PHY_RXPMD_BLOCK_BASE);
88*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_RXPMD_REG1, 0x4052U);
89*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_RXPMD_REG2, 0x4cU);
90*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_RXPMD_REG5, 0x7U);
91*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_RXPMD_REG7, 0x173U);
92*91f16700Schasinglulu 
93*91f16700Schasinglulu 	/* USB 3.0 phy AEQ Block initialization*/
94*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_MDIO_BLOCK_BASE_REG,
95*91f16700Schasinglulu 			USB3_PHY_AEQ_BLOCK_BASE);
96*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_AEQ_REG1, 0x3000U);
97*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_AEQ_REG3, 0x2c70U);
98*91f16700Schasinglulu 
99*91f16700Schasinglulu 	/* USB 3.0 phy TXPMD Block initialization*/
100*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_MDIO_BLOCK_BASE_REG,
101*91f16700Schasinglulu 			USB3_PHY_TXPMD_BLOCK_BASE);
102*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_TXPMD_REG1, 0x100fU);
103*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3H_PHY_ID, USB3_PHY_TXPMD_REG2, 0x238cU);
104*91f16700Schasinglulu }
105*91f16700Schasinglulu 
106*91f16700Schasinglulu static void usb3drd_init(void)
107*91f16700Schasinglulu {
108*91f16700Schasinglulu 	uint32_t val;
109*91f16700Schasinglulu 
110*91f16700Schasinglulu 	INFO("USB3DRD init\n");
111*91f16700Schasinglulu 	mmio_clrbits_32(DRDU3_U3PHY_CTRL, POR_RESET);
112*91f16700Schasinglulu 	val = mmio_read_32(DRDU3_PWR_CTRL);
113*91f16700Schasinglulu 	val &= ~(0x3U << POWER_CTRL_OVRD);
114*91f16700Schasinglulu 	val |= (1U << POWER_CTRL_OVRD);
115*91f16700Schasinglulu 	mmio_write_32(DRDU3_PWR_CTRL, val);
116*91f16700Schasinglulu 	mmio_setbits_32(DRDU3_U3PHY_CTRL, PHY_RESET);
117*91f16700Schasinglulu 	/* Phy to come out of reset */
118*91f16700Schasinglulu 	udelay(2U);
119*91f16700Schasinglulu 	mmio_clrbits_32(DRDU3_U3PHY_CTRL, MDIO_RESET);
120*91f16700Schasinglulu 
121*91f16700Schasinglulu 	/* MDIO in reset */
122*91f16700Schasinglulu 	udelay(2U);
123*91f16700Schasinglulu 	mmio_setbits_32(DRDU3_U3PHY_CTRL, MDIO_RESET);
124*91f16700Schasinglulu 
125*91f16700Schasinglulu 	/* After MDIO reset release */
126*91f16700Schasinglulu 	udelay(2U);
127*91f16700Schasinglulu 
128*91f16700Schasinglulu 	/* USB 3.0 DRD phy Analog Block Initialization */
129*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_MDIO_BLOCK_BASE_REG,
130*91f16700Schasinglulu 			USB3_PHY_ANA_BLOCK_BASE);
131*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_ANA_REG0, 0x4646U);
132*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_ANA_REG1, 0x80c9U);
133*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_ANA_REG2, 0x88a6U);
134*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_ANA_REG5, 0x7c12U);
135*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_ANA_REG8, 0x1d07U);
136*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_ANA_REG11, 0x25cU);
137*91f16700Schasinglulu 
138*91f16700Schasinglulu 	/* USB 3.0 DRD phy RXPMD Block initialization*/
139*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_MDIO_BLOCK_BASE_REG,
140*91f16700Schasinglulu 			USB3_PHY_RXPMD_BLOCK_BASE);
141*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_RXPMD_REG1, 0x4052U);
142*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_RXPMD_REG2, 0x4cU);
143*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_RXPMD_REG5, 0x7U);
144*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_RXPMD_REG7, 0x173U);
145*91f16700Schasinglulu 
146*91f16700Schasinglulu 	/* USB 3.0 DRD phy AEQ Block initialization*/
147*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_MDIO_BLOCK_BASE_REG,
148*91f16700Schasinglulu 			USB3_PHY_AEQ_BLOCK_BASE);
149*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_AEQ_REG1, 0x3000U);
150*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_AEQ_REG3, 0x2c70U);
151*91f16700Schasinglulu 
152*91f16700Schasinglulu 	/* USB 3.0 DRD phy TXPMD Block initialization*/
153*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_MDIO_BLOCK_BASE_REG,
154*91f16700Schasinglulu 			USB3_PHY_TXPMD_BLOCK_BASE);
155*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_TXPMD_REG1, 0x100fU);
156*91f16700Schasinglulu 	mdio_write(MDIO_BUS_ID, USB3DRD_PHY_ID, USB3_PHY_TXPMD_REG2, 0x238cU);
157*91f16700Schasinglulu }
158*91f16700Schasinglulu 
159*91f16700Schasinglulu static void usb3_phy_init(void)
160*91f16700Schasinglulu {
161*91f16700Schasinglulu 	usb_pm_rescal_init();
162*91f16700Schasinglulu 
163*91f16700Schasinglulu 	if ((usb_func & USB3H_USB2DRD) != 0U) {
164*91f16700Schasinglulu 		usb3h_usb2drd_init();
165*91f16700Schasinglulu 	}
166*91f16700Schasinglulu 
167*91f16700Schasinglulu 	if ((usb_func & USB3_DRD) != 0U) {
168*91f16700Schasinglulu 		usb3drd_init();
169*91f16700Schasinglulu 	}
170*91f16700Schasinglulu }
171*91f16700Schasinglulu 
172*91f16700Schasinglulu #ifdef USB_DMA_COHERENT
173*91f16700Schasinglulu void usb_enable_coherence(void)
174*91f16700Schasinglulu {
175*91f16700Schasinglulu 	if (usb_func & USB3H_USB2DRD) {
176*91f16700Schasinglulu 		mmio_setbits_32(USB3H_SOFT_RESET_CTRL,
177*91f16700Schasinglulu 				USB3H_XHC_AXI_SOFT_RST_N);
178*91f16700Schasinglulu 		mmio_setbits_32(DRDU2_SOFT_RESET_CTRL,
179*91f16700Schasinglulu 				DRDU2_BDC_AXI_SOFT_RST_N);
180*91f16700Schasinglulu 		mmio_setbits_32(USB3H_U3PHY_CTRL, USB3H_U3SOFT_RST_N);
181*91f16700Schasinglulu 		mmio_setbits_32(DRDU2_PHY_CTRL, DRDU2_U2SOFT_RST_N);
182*91f16700Schasinglulu 
183*91f16700Schasinglulu 		mmio_clrsetbits_32(DRD2U3H_XHC_REGS_AXIWRA,
184*91f16700Schasinglulu 				   (USBAXIWR_UA_MASK | USBAXIWR_SA_MASK),
185*91f16700Schasinglulu 				   (USBAXIWR_UA_VAL | USBAXIWR_SA_VAL));
186*91f16700Schasinglulu 
187*91f16700Schasinglulu 		mmio_clrsetbits_32(DRD2U3H_XHC_REGS_AXIRDA,
188*91f16700Schasinglulu 				   (USBAXIRD_UA_MASK | USBAXIRD_SA_MASK),
189*91f16700Schasinglulu 				   (USBAXIRD_UA_VAL | USBAXIRD_SA_VAL));
190*91f16700Schasinglulu 
191*91f16700Schasinglulu 		mmio_clrsetbits_32(DRDU2D_BDC_REGS_AXIWRA,
192*91f16700Schasinglulu 				   (USBAXIWR_UA_MASK | USBAXIWR_SA_MASK),
193*91f16700Schasinglulu 				   (USBAXIWR_UA_VAL | USBAXIWR_SA_VAL));
194*91f16700Schasinglulu 
195*91f16700Schasinglulu 		mmio_clrsetbits_32(DRDU2D_BDC_REGS_AXIRDA,
196*91f16700Schasinglulu 				   (USBAXIRD_UA_MASK | USBAXIRD_SA_MASK),
197*91f16700Schasinglulu 				   (USBAXIRD_UA_VAL | USBAXIRD_SA_VAL));
198*91f16700Schasinglulu 
199*91f16700Schasinglulu 	}
200*91f16700Schasinglulu 
201*91f16700Schasinglulu 	if (usb_func & USB3_DRD) {
202*91f16700Schasinglulu 		mmio_setbits_32(DRDU3_SOFT_RESET_CTRL,
203*91f16700Schasinglulu 				(DRDU3_XHC_AXI_SOFT_RST_N |
204*91f16700Schasinglulu 				DRDU3_BDC_AXI_SOFT_RST_N));
205*91f16700Schasinglulu 		mmio_setbits_32(DRDU3_U3PHY_CTRL,
206*91f16700Schasinglulu 				(DRDU3_U3XHC_SOFT_RST_N |
207*91f16700Schasinglulu 				DRDU3_U3BDC_SOFT_RST_N));
208*91f16700Schasinglulu 
209*91f16700Schasinglulu 		mmio_clrsetbits_32(DRDU3H_XHC_REGS_AXIWRA,
210*91f16700Schasinglulu 				   (USBAXIWR_UA_MASK | USBAXIWR_SA_MASK),
211*91f16700Schasinglulu 				   (USBAXIWR_UA_VAL | USBAXIWR_SA_VAL));
212*91f16700Schasinglulu 
213*91f16700Schasinglulu 		mmio_clrsetbits_32(DRDU3H_XHC_REGS_AXIRDA,
214*91f16700Schasinglulu 				   (USBAXIRD_UA_MASK | USBAXIRD_SA_MASK),
215*91f16700Schasinglulu 				   (USBAXIRD_UA_VAL | USBAXIRD_SA_VAL));
216*91f16700Schasinglulu 
217*91f16700Schasinglulu 		mmio_clrsetbits_32(DRDU3D_BDC_REGS_AXIWRA,
218*91f16700Schasinglulu 				   (USBAXIWR_UA_MASK | USBAXIWR_SA_MASK),
219*91f16700Schasinglulu 				   (USBAXIWR_UA_VAL | USBAXIWR_SA_VAL));
220*91f16700Schasinglulu 
221*91f16700Schasinglulu 		mmio_clrsetbits_32(DRDU3D_BDC_REGS_AXIRDA,
222*91f16700Schasinglulu 				   (USBAXIRD_UA_MASK | USBAXIRD_SA_MASK),
223*91f16700Schasinglulu 				   (USBAXIRD_UA_VAL | USBAXIRD_SA_VAL));
224*91f16700Schasinglulu 	}
225*91f16700Schasinglulu }
226*91f16700Schasinglulu #endif
227*91f16700Schasinglulu 
228*91f16700Schasinglulu void xhci_phy_init(void)
229*91f16700Schasinglulu {
230*91f16700Schasinglulu 	uint32_t val;
231*91f16700Schasinglulu 
232*91f16700Schasinglulu 	INFO("usb init start\n");
233*91f16700Schasinglulu 	mmio_setbits_32(CDRU_MISC_CLK_ENABLE_CONTROL,
234*91f16700Schasinglulu 			CDRU_MISC_CLK_USBSS);
235*91f16700Schasinglulu 
236*91f16700Schasinglulu 	mmio_setbits_32(CDRU_MISC_RESET_CONTROL, CDRU_USBSS_RESET_N);
237*91f16700Schasinglulu 
238*91f16700Schasinglulu 	if (usb_func & USB3_DRD) {
239*91f16700Schasinglulu 		VERBOSE(" - configure stream_id = 0x6800 for DRDU3\n");
240*91f16700Schasinglulu 		val = SR_SID_VAL(0x3U, 0x1U, 0x0U) << ICFG_USB_SID_SHIFT;
241*91f16700Schasinglulu 		mmio_write_32(ICFG_DRDU3_SID_CTRL + ICFG_USB_SID_AWADDR_OFFSET,
242*91f16700Schasinglulu 				val);
243*91f16700Schasinglulu 		mmio_write_32(ICFG_DRDU3_SID_CTRL + ICFG_USB_SID_ARADDR_OFFSET,
244*91f16700Schasinglulu 				val);
245*91f16700Schasinglulu 
246*91f16700Schasinglulu 		/*
247*91f16700Schasinglulu 		 * DRDU3 Device USB Space, DRDU3 Host USB Space,
248*91f16700Schasinglulu 		 * DRDU3 SS Config
249*91f16700Schasinglulu 		 */
250*91f16700Schasinglulu 		mmio_setbits_32(USBIC_GPV_SECURITY10,
251*91f16700Schasinglulu 				USBIC_GPV_SECURITY10_FIELD);
252*91f16700Schasinglulu 	}
253*91f16700Schasinglulu 
254*91f16700Schasinglulu 	if (usb_func & USB3H_USB2DRD) {
255*91f16700Schasinglulu 		VERBOSE(" - configure stream_id = 0x6801 for USB3H\n");
256*91f16700Schasinglulu 		val = SR_SID_VAL(0x3U, 0x1U, 0x1U) << ICFG_USB_SID_SHIFT;
257*91f16700Schasinglulu 		mmio_write_32(ICFG_USB3H_SID_CTRL + ICFG_USB_SID_AWADDR_OFFSET,
258*91f16700Schasinglulu 				val);
259*91f16700Schasinglulu 		mmio_write_32(ICFG_USB3H_SID_CTRL + ICFG_USB_SID_ARADDR_OFFSET,
260*91f16700Schasinglulu 				val);
261*91f16700Schasinglulu 
262*91f16700Schasinglulu 		VERBOSE(" - configure stream_id = 0x6802 for DRDU2\n");
263*91f16700Schasinglulu 		val = SR_SID_VAL(0x3U, 0x1U, 0x2U) << ICFG_USB_SID_SHIFT;
264*91f16700Schasinglulu 		mmio_write_32(ICFG_DRDU2_SID_CTRL + ICFG_USB_SID_AWADDR_OFFSET,
265*91f16700Schasinglulu 				val);
266*91f16700Schasinglulu 		mmio_write_32(ICFG_DRDU2_SID_CTRL + ICFG_USB_SID_ARADDR_OFFSET,
267*91f16700Schasinglulu 				val);
268*91f16700Schasinglulu 
269*91f16700Schasinglulu 		/* DRDU2 APB Bridge:DRDU2 USB Device, USB3H SS Config */
270*91f16700Schasinglulu 		mmio_setbits_32(USBIC_GPV_SECURITY1, USBIC_GPV_SECURITY1_FIELD);
271*91f16700Schasinglulu 
272*91f16700Schasinglulu 		/*
273*91f16700Schasinglulu 		 * USB3H APB Bridge:DRDU2 Host + USB3 Host USB Space,
274*91f16700Schasinglulu 		 * USB3H SS Config
275*91f16700Schasinglulu 		 */
276*91f16700Schasinglulu 		mmio_setbits_32(USBIC_GPV_SECURITY2, USBIC_GPV_SECURITY2_FIELD);
277*91f16700Schasinglulu 	}
278*91f16700Schasinglulu 
279*91f16700Schasinglulu 	/* Configure Host masters as non-Secure */
280*91f16700Schasinglulu 	mmio_setbits_32(USBSS_TZPCDECPROT0set, USBSS_TZPCDECPROT0);
281*91f16700Schasinglulu 
282*91f16700Schasinglulu 	/* CCN Slave on USBIC */
283*91f16700Schasinglulu 	mmio_setbits_32(USBIC_GPV_SECURITY0, USBIC_GPV_SECURITY0_FIELD);
284*91f16700Schasinglulu 
285*91f16700Schasinglulu 	/* SLAVE_8:IDM Register Space */
286*91f16700Schasinglulu 	mmio_setbits_32(USBIC_GPV_SECURITY4, USBIC_GPV_SECURITY4_FIELD);
287*91f16700Schasinglulu 
288*91f16700Schasinglulu 	usb3_phy_init();
289*91f16700Schasinglulu #ifdef USB_DMA_COHERENT
290*91f16700Schasinglulu 	usb_enable_coherence();
291*91f16700Schasinglulu #endif
292*91f16700Schasinglulu 
293*91f16700Schasinglulu 	usb_device_init(usb_func);
294*91f16700Schasinglulu 
295*91f16700Schasinglulu 	INFO("PLAT USB: init done.\n");
296*91f16700Schasinglulu }
297