1*13194f3bSVivek Gautam /* include/linux/usb/dwc3.h 2*13194f3bSVivek Gautam * 3*13194f3bSVivek Gautam * Copyright (c) 2012 Samsung Electronics Co. Ltd 4*13194f3bSVivek Gautam * 5*13194f3bSVivek Gautam * Designware SuperSpeed USB 3.0 DRD Controller global and OTG registers 6*13194f3bSVivek Gautam * 7*13194f3bSVivek Gautam * SPDX-License-Identifier: GPL-2.0+ 8*13194f3bSVivek Gautam */ 9*13194f3bSVivek Gautam 10*13194f3bSVivek Gautam #ifndef __DWC3_H_ 11*13194f3bSVivek Gautam #define __DWC3_H_ 12*13194f3bSVivek Gautam 13*13194f3bSVivek Gautam /* Global constants */ 14*13194f3bSVivek Gautam #define DWC3_ENDPOINTS_NUM 32 15*13194f3bSVivek Gautam 16*13194f3bSVivek Gautam #define DWC3_EVENT_BUFFERS_SIZE PAGE_SIZE 17*13194f3bSVivek Gautam #define DWC3_EVENT_TYPE_MASK 0xfe 18*13194f3bSVivek Gautam 19*13194f3bSVivek Gautam #define DWC3_EVENT_TYPE_DEV 0 20*13194f3bSVivek Gautam #define DWC3_EVENT_TYPE_CARKIT 3 21*13194f3bSVivek Gautam #define DWC3_EVENT_TYPE_I2C 4 22*13194f3bSVivek Gautam 23*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_DISCONNECT 0 24*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_RESET 1 25*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_CONNECT_DONE 2 26*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE 3 27*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_WAKEUP 4 28*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_EOPF 6 29*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_SOF 7 30*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_ERRATIC_ERROR 9 31*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_CMD_CMPL 10 32*13194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_OVERFLOW 11 33*13194f3bSVivek Gautam 34*13194f3bSVivek Gautam #define DWC3_GEVNTCOUNT_MASK 0xfffc 35*13194f3bSVivek Gautam #define DWC3_GSNPSID_MASK 0xffff0000 36*13194f3bSVivek Gautam #define DWC3_GSNPSID_SHIFT 16 37*13194f3bSVivek Gautam #define DWC3_GSNPSREV_MASK 0xffff 38*13194f3bSVivek Gautam 39*13194f3bSVivek Gautam #define DWC3_REVISION_MASK 0xffff 40*13194f3bSVivek Gautam 41*13194f3bSVivek Gautam #define DWC3_REG_OFFSET 0xC100 42*13194f3bSVivek Gautam 43*13194f3bSVivek Gautam struct g_event_buffer { 44*13194f3bSVivek Gautam u64 g_evntadr; 45*13194f3bSVivek Gautam u32 g_evntsiz; 46*13194f3bSVivek Gautam u32 g_evntcount; 47*13194f3bSVivek Gautam }; 48*13194f3bSVivek Gautam 49*13194f3bSVivek Gautam struct d_physical_endpoint { 50*13194f3bSVivek Gautam u32 d_depcmdpar2; 51*13194f3bSVivek Gautam u32 d_depcmdpar1; 52*13194f3bSVivek Gautam u32 d_depcmdpar0; 53*13194f3bSVivek Gautam u32 d_depcmd; 54*13194f3bSVivek Gautam }; 55*13194f3bSVivek Gautam 56*13194f3bSVivek Gautam struct dwc3 { /* offset: 0xC100 */ 57*13194f3bSVivek Gautam u32 g_sbuscfg0; 58*13194f3bSVivek Gautam u32 g_sbuscfg1; 59*13194f3bSVivek Gautam u32 g_txthrcfg; 60*13194f3bSVivek Gautam u32 g_rxthrcfg; 61*13194f3bSVivek Gautam u32 g_ctl; 62*13194f3bSVivek Gautam 63*13194f3bSVivek Gautam u32 reserved1; 64*13194f3bSVivek Gautam 65*13194f3bSVivek Gautam u32 g_sts; 66*13194f3bSVivek Gautam 67*13194f3bSVivek Gautam u32 reserved2; 68*13194f3bSVivek Gautam 69*13194f3bSVivek Gautam u32 g_snpsid; 70*13194f3bSVivek Gautam u32 g_gpio; 71*13194f3bSVivek Gautam u32 g_uid; 72*13194f3bSVivek Gautam u32 g_uctl; 73*13194f3bSVivek Gautam u64 g_buserraddr; 74*13194f3bSVivek Gautam u64 g_prtbimap; 75*13194f3bSVivek Gautam 76*13194f3bSVivek Gautam u32 g_hwparams0; 77*13194f3bSVivek Gautam u32 g_hwparams1; 78*13194f3bSVivek Gautam u32 g_hwparams2; 79*13194f3bSVivek Gautam u32 g_hwparams3; 80*13194f3bSVivek Gautam u32 g_hwparams4; 81*13194f3bSVivek Gautam u32 g_hwparams5; 82*13194f3bSVivek Gautam u32 g_hwparams6; 83*13194f3bSVivek Gautam u32 g_hwparams7; 84*13194f3bSVivek Gautam 85*13194f3bSVivek Gautam u32 g_dbgfifospace; 86*13194f3bSVivek Gautam u32 g_dbgltssm; 87*13194f3bSVivek Gautam u32 g_dbglnmcc; 88*13194f3bSVivek Gautam u32 g_dbgbmu; 89*13194f3bSVivek Gautam u32 g_dbglspmux; 90*13194f3bSVivek Gautam u32 g_dbglsp; 91*13194f3bSVivek Gautam u32 g_dbgepinfo0; 92*13194f3bSVivek Gautam u32 g_dbgepinfo1; 93*13194f3bSVivek Gautam 94*13194f3bSVivek Gautam u64 g_prtbimap_hs; 95*13194f3bSVivek Gautam u64 g_prtbimap_fs; 96*13194f3bSVivek Gautam 97*13194f3bSVivek Gautam u32 reserved3[28]; 98*13194f3bSVivek Gautam 99*13194f3bSVivek Gautam u32 g_usb2phycfg[16]; 100*13194f3bSVivek Gautam u32 g_usb2i2cctl[16]; 101*13194f3bSVivek Gautam u32 g_usb2phyacc[16]; 102*13194f3bSVivek Gautam u32 g_usb3pipectl[16]; 103*13194f3bSVivek Gautam 104*13194f3bSVivek Gautam u32 g_txfifosiz[32]; 105*13194f3bSVivek Gautam u32 g_rxfifosiz[32]; 106*13194f3bSVivek Gautam 107*13194f3bSVivek Gautam struct g_event_buffer g_evnt_buf[32]; 108*13194f3bSVivek Gautam 109*13194f3bSVivek Gautam u32 g_hwparams8; 110*13194f3bSVivek Gautam 111*13194f3bSVivek Gautam u32 reserved4[63]; 112*13194f3bSVivek Gautam 113*13194f3bSVivek Gautam u32 d_cfg; 114*13194f3bSVivek Gautam u32 d_ctl; 115*13194f3bSVivek Gautam u32 d_evten; 116*13194f3bSVivek Gautam u32 d_sts; 117*13194f3bSVivek Gautam u32 d_gcmdpar; 118*13194f3bSVivek Gautam u32 d_gcmd; 119*13194f3bSVivek Gautam 120*13194f3bSVivek Gautam u32 reserved5[2]; 121*13194f3bSVivek Gautam 122*13194f3bSVivek Gautam u32 d_alepena; 123*13194f3bSVivek Gautam 124*13194f3bSVivek Gautam u32 reserved6[55]; 125*13194f3bSVivek Gautam 126*13194f3bSVivek Gautam struct d_physical_endpoint d_phy_ep_cmd[32]; 127*13194f3bSVivek Gautam 128*13194f3bSVivek Gautam u32 reserved7[128]; 129*13194f3bSVivek Gautam 130*13194f3bSVivek Gautam u32 o_cfg; 131*13194f3bSVivek Gautam u32 o_ctl; 132*13194f3bSVivek Gautam u32 o_evt; 133*13194f3bSVivek Gautam u32 o_evten; 134*13194f3bSVivek Gautam u32 o_sts; 135*13194f3bSVivek Gautam 136*13194f3bSVivek Gautam u32 reserved8[3]; 137*13194f3bSVivek Gautam 138*13194f3bSVivek Gautam u32 adp_cfg; 139*13194f3bSVivek Gautam u32 adp_ctl; 140*13194f3bSVivek Gautam u32 adp_evt; 141*13194f3bSVivek Gautam u32 adp_evten; 142*13194f3bSVivek Gautam 143*13194f3bSVivek Gautam u32 bc_cfg; 144*13194f3bSVivek Gautam 145*13194f3bSVivek Gautam u32 reserved9; 146*13194f3bSVivek Gautam 147*13194f3bSVivek Gautam u32 bc_evt; 148*13194f3bSVivek Gautam u32 bc_evten; 149*13194f3bSVivek Gautam }; 150*13194f3bSVivek Gautam 151*13194f3bSVivek Gautam /* Global Configuration Register */ 152*13194f3bSVivek Gautam #define DWC3_GCTL_PWRDNSCALE(n) ((n) << 19) 153*13194f3bSVivek Gautam #define DWC3_GCTL_U2RSTECN (1 << 16) 154*13194f3bSVivek Gautam #define DWC3_GCTL_RAMCLKSEL(x) \ 155*13194f3bSVivek Gautam (((x) & DWC3_GCTL_CLK_MASK) << 6) 156*13194f3bSVivek Gautam #define DWC3_GCTL_CLK_BUS (0) 157*13194f3bSVivek Gautam #define DWC3_GCTL_CLK_PIPE (1) 158*13194f3bSVivek Gautam #define DWC3_GCTL_CLK_PIPEHALF (2) 159*13194f3bSVivek Gautam #define DWC3_GCTL_CLK_MASK (3) 160*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP(n) (((n) & (3 << 12)) >> 12) 161*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAPDIR(n) ((n) << 12) 162*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_HOST 1 163*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_DEVICE 2 164*13194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_OTG 3 165*13194f3bSVivek Gautam #define DWC3_GCTL_CORESOFTRESET (1 << 11) 166*13194f3bSVivek Gautam #define DWC3_GCTL_SCALEDOWN(n) ((n) << 4) 167*13194f3bSVivek Gautam #define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3) 168*13194f3bSVivek Gautam #define DWC3_GCTL_DISSCRAMBLE (1 << 3) 169*13194f3bSVivek Gautam #define DWC3_GCTL_DSBLCLKGTNG (1 << 0) 170*13194f3bSVivek Gautam 171*13194f3bSVivek Gautam /* Global HWPARAMS1 Register */ 172*13194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT(n) (((n) & (3 << 24)) >> 24) 173*13194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT_NO 0 174*13194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT_CLK 1 175*13194f3bSVivek Gautam 176*13194f3bSVivek Gautam /* Global USB2 PHY Configuration Register */ 177*13194f3bSVivek Gautam #define DWC3_GUSB2PHYCFG_PHYSOFTRST (1 << 31) 178*13194f3bSVivek Gautam #define DWC3_GUSB2PHYCFG_SUSPHY (1 << 6) 179*13194f3bSVivek Gautam 180*13194f3bSVivek Gautam /* Global USB3 PIPE Control Register */ 181*13194f3bSVivek Gautam #define DWC3_GUSB3PIPECTL_PHYSOFTRST (1 << 31) 182*13194f3bSVivek Gautam #define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17) 183*13194f3bSVivek Gautam 184*13194f3bSVivek Gautam /* Global TX Fifo Size Register */ 185*13194f3bSVivek Gautam #define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff) 186*13194f3bSVivek Gautam #define DWC3_GTXFIFOSIZ_TXFSTADDR(n) ((n) & 0xffff0000) 187*13194f3bSVivek Gautam 188*13194f3bSVivek Gautam #endif /* __DWC3_H_ */ 189