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