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