113194f3bSVivek Gautam /* include/linux/usb/dwc3.h 213194f3bSVivek Gautam * 313194f3bSVivek Gautam * Copyright (c) 2012 Samsung Electronics Co. Ltd 413194f3bSVivek Gautam * 513194f3bSVivek Gautam * Designware SuperSpeed USB 3.0 DRD Controller global and OTG registers 613194f3bSVivek Gautam * 713194f3bSVivek Gautam * SPDX-License-Identifier: GPL-2.0+ 813194f3bSVivek Gautam */ 913194f3bSVivek Gautam 1013194f3bSVivek Gautam #ifndef __DWC3_H_ 1113194f3bSVivek Gautam #define __DWC3_H_ 1213194f3bSVivek Gautam 1313194f3bSVivek Gautam /* Global constants */ 1413194f3bSVivek Gautam #define DWC3_ENDPOINTS_NUM 32 1513194f3bSVivek Gautam 1613194f3bSVivek Gautam #define DWC3_EVENT_BUFFERS_SIZE PAGE_SIZE 1713194f3bSVivek Gautam #define DWC3_EVENT_TYPE_MASK 0xfe 1813194f3bSVivek Gautam 1913194f3bSVivek Gautam #define DWC3_EVENT_TYPE_DEV 0 2013194f3bSVivek Gautam #define DWC3_EVENT_TYPE_CARKIT 3 2113194f3bSVivek Gautam #define DWC3_EVENT_TYPE_I2C 4 2213194f3bSVivek Gautam 2313194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_DISCONNECT 0 2413194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_RESET 1 2513194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_CONNECT_DONE 2 2613194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE 3 2713194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_WAKEUP 4 2813194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_EOPF 6 2913194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_SOF 7 3013194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_ERRATIC_ERROR 9 3113194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_CMD_CMPL 10 3213194f3bSVivek Gautam #define DWC3_DEVICE_EVENT_OVERFLOW 11 3313194f3bSVivek Gautam 3413194f3bSVivek Gautam #define DWC3_GEVNTCOUNT_MASK 0xfffc 3513194f3bSVivek Gautam #define DWC3_GSNPSID_MASK 0xffff0000 3613194f3bSVivek Gautam #define DWC3_GSNPSID_SHIFT 16 3713194f3bSVivek Gautam #define DWC3_GSNPSREV_MASK 0xffff 3813194f3bSVivek Gautam 3913194f3bSVivek Gautam #define DWC3_REVISION_MASK 0xffff 4013194f3bSVivek Gautam 4113194f3bSVivek Gautam #define DWC3_REG_OFFSET 0xC100 4213194f3bSVivek Gautam 4313194f3bSVivek Gautam struct g_event_buffer { 44*bc0e8d7cSWingMan Kwok u32 g_evntadrlo; 45*bc0e8d7cSWingMan Kwok u32 g_evntadrhi; 4613194f3bSVivek Gautam u32 g_evntsiz; 4713194f3bSVivek Gautam u32 g_evntcount; 4813194f3bSVivek Gautam }; 4913194f3bSVivek Gautam 5013194f3bSVivek Gautam struct d_physical_endpoint { 5113194f3bSVivek Gautam u32 d_depcmdpar2; 5213194f3bSVivek Gautam u32 d_depcmdpar1; 5313194f3bSVivek Gautam u32 d_depcmdpar0; 5413194f3bSVivek Gautam u32 d_depcmd; 5513194f3bSVivek Gautam }; 5613194f3bSVivek Gautam 5713194f3bSVivek Gautam struct dwc3 { /* offset: 0xC100 */ 5813194f3bSVivek Gautam u32 g_sbuscfg0; 5913194f3bSVivek Gautam u32 g_sbuscfg1; 6013194f3bSVivek Gautam u32 g_txthrcfg; 6113194f3bSVivek Gautam u32 g_rxthrcfg; 6213194f3bSVivek Gautam u32 g_ctl; 6313194f3bSVivek Gautam 6413194f3bSVivek Gautam u32 reserved1; 6513194f3bSVivek Gautam 6613194f3bSVivek Gautam u32 g_sts; 6713194f3bSVivek Gautam 6813194f3bSVivek Gautam u32 reserved2; 6913194f3bSVivek Gautam 7013194f3bSVivek Gautam u32 g_snpsid; 7113194f3bSVivek Gautam u32 g_gpio; 7213194f3bSVivek Gautam u32 g_uid; 7313194f3bSVivek Gautam u32 g_uctl; 7413194f3bSVivek Gautam u64 g_buserraddr; 7513194f3bSVivek Gautam u64 g_prtbimap; 7613194f3bSVivek Gautam 7713194f3bSVivek Gautam u32 g_hwparams0; 7813194f3bSVivek Gautam u32 g_hwparams1; 7913194f3bSVivek Gautam u32 g_hwparams2; 8013194f3bSVivek Gautam u32 g_hwparams3; 8113194f3bSVivek Gautam u32 g_hwparams4; 8213194f3bSVivek Gautam u32 g_hwparams5; 8313194f3bSVivek Gautam u32 g_hwparams6; 8413194f3bSVivek Gautam u32 g_hwparams7; 8513194f3bSVivek Gautam 8613194f3bSVivek Gautam u32 g_dbgfifospace; 8713194f3bSVivek Gautam u32 g_dbgltssm; 8813194f3bSVivek Gautam u32 g_dbglnmcc; 8913194f3bSVivek Gautam u32 g_dbgbmu; 9013194f3bSVivek Gautam u32 g_dbglspmux; 9113194f3bSVivek Gautam u32 g_dbglsp; 9213194f3bSVivek Gautam u32 g_dbgepinfo0; 9313194f3bSVivek Gautam u32 g_dbgepinfo1; 9413194f3bSVivek Gautam 9513194f3bSVivek Gautam u64 g_prtbimap_hs; 9613194f3bSVivek Gautam u64 g_prtbimap_fs; 9713194f3bSVivek Gautam 9813194f3bSVivek Gautam u32 reserved3[28]; 9913194f3bSVivek Gautam 10013194f3bSVivek Gautam u32 g_usb2phycfg[16]; 10113194f3bSVivek Gautam u32 g_usb2i2cctl[16]; 10213194f3bSVivek Gautam u32 g_usb2phyacc[16]; 10313194f3bSVivek Gautam u32 g_usb3pipectl[16]; 10413194f3bSVivek Gautam 10513194f3bSVivek Gautam u32 g_txfifosiz[32]; 10613194f3bSVivek Gautam u32 g_rxfifosiz[32]; 10713194f3bSVivek Gautam 10813194f3bSVivek Gautam struct g_event_buffer g_evnt_buf[32]; 10913194f3bSVivek Gautam 11013194f3bSVivek Gautam u32 g_hwparams8; 11113194f3bSVivek Gautam 11213194f3bSVivek Gautam u32 reserved4[63]; 11313194f3bSVivek Gautam 11413194f3bSVivek Gautam u32 d_cfg; 11513194f3bSVivek Gautam u32 d_ctl; 11613194f3bSVivek Gautam u32 d_evten; 11713194f3bSVivek Gautam u32 d_sts; 11813194f3bSVivek Gautam u32 d_gcmdpar; 11913194f3bSVivek Gautam u32 d_gcmd; 12013194f3bSVivek Gautam 12113194f3bSVivek Gautam u32 reserved5[2]; 12213194f3bSVivek Gautam 12313194f3bSVivek Gautam u32 d_alepena; 12413194f3bSVivek Gautam 12513194f3bSVivek Gautam u32 reserved6[55]; 12613194f3bSVivek Gautam 12713194f3bSVivek Gautam struct d_physical_endpoint d_phy_ep_cmd[32]; 12813194f3bSVivek Gautam 12913194f3bSVivek Gautam u32 reserved7[128]; 13013194f3bSVivek Gautam 13113194f3bSVivek Gautam u32 o_cfg; 13213194f3bSVivek Gautam u32 o_ctl; 13313194f3bSVivek Gautam u32 o_evt; 13413194f3bSVivek Gautam u32 o_evten; 13513194f3bSVivek Gautam u32 o_sts; 13613194f3bSVivek Gautam 13713194f3bSVivek Gautam u32 reserved8[3]; 13813194f3bSVivek Gautam 13913194f3bSVivek Gautam u32 adp_cfg; 14013194f3bSVivek Gautam u32 adp_ctl; 14113194f3bSVivek Gautam u32 adp_evt; 14213194f3bSVivek Gautam u32 adp_evten; 14313194f3bSVivek Gautam 14413194f3bSVivek Gautam u32 bc_cfg; 14513194f3bSVivek Gautam 14613194f3bSVivek Gautam u32 reserved9; 14713194f3bSVivek Gautam 14813194f3bSVivek Gautam u32 bc_evt; 14913194f3bSVivek Gautam u32 bc_evten; 15013194f3bSVivek Gautam }; 15113194f3bSVivek Gautam 15213194f3bSVivek Gautam /* Global Configuration Register */ 15313194f3bSVivek Gautam #define DWC3_GCTL_PWRDNSCALE(n) ((n) << 19) 15413194f3bSVivek Gautam #define DWC3_GCTL_U2RSTECN (1 << 16) 15513194f3bSVivek Gautam #define DWC3_GCTL_RAMCLKSEL(x) \ 15613194f3bSVivek Gautam (((x) & DWC3_GCTL_CLK_MASK) << 6) 15713194f3bSVivek Gautam #define DWC3_GCTL_CLK_BUS (0) 15813194f3bSVivek Gautam #define DWC3_GCTL_CLK_PIPE (1) 15913194f3bSVivek Gautam #define DWC3_GCTL_CLK_PIPEHALF (2) 16013194f3bSVivek Gautam #define DWC3_GCTL_CLK_MASK (3) 16113194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP(n) (((n) & (3 << 12)) >> 12) 16213194f3bSVivek Gautam #define DWC3_GCTL_PRTCAPDIR(n) ((n) << 12) 16313194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_HOST 1 16413194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_DEVICE 2 16513194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_OTG 3 16613194f3bSVivek Gautam #define DWC3_GCTL_CORESOFTRESET (1 << 11) 16713194f3bSVivek Gautam #define DWC3_GCTL_SCALEDOWN(n) ((n) << 4) 16813194f3bSVivek Gautam #define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3) 16913194f3bSVivek Gautam #define DWC3_GCTL_DISSCRAMBLE (1 << 3) 17013194f3bSVivek Gautam #define DWC3_GCTL_DSBLCLKGTNG (1 << 0) 17113194f3bSVivek Gautam 17213194f3bSVivek Gautam /* Global HWPARAMS1 Register */ 17313194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT(n) (((n) & (3 << 24)) >> 24) 17413194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT_NO 0 17513194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT_CLK 1 17613194f3bSVivek Gautam 17713194f3bSVivek Gautam /* Global USB2 PHY Configuration Register */ 17813194f3bSVivek Gautam #define DWC3_GUSB2PHYCFG_PHYSOFTRST (1 << 31) 17913194f3bSVivek Gautam #define DWC3_GUSB2PHYCFG_SUSPHY (1 << 6) 18013194f3bSVivek Gautam 18113194f3bSVivek Gautam /* Global USB3 PIPE Control Register */ 18213194f3bSVivek Gautam #define DWC3_GUSB3PIPECTL_PHYSOFTRST (1 << 31) 18313194f3bSVivek Gautam #define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17) 18413194f3bSVivek Gautam 18513194f3bSVivek Gautam /* Global TX Fifo Size Register */ 18613194f3bSVivek Gautam #define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff) 18713194f3bSVivek Gautam #define DWC3_GTXFIFOSIZ_TXFSTADDR(n) ((n) & 0xffff0000) 18813194f3bSVivek Gautam 189*bc0e8d7cSWingMan Kwok /* Device Control Register */ 190*bc0e8d7cSWingMan Kwok #define DWC3_DCTL_RUN_STOP (1 << 31) 191*bc0e8d7cSWingMan Kwok #define DWC3_DCTL_CSFTRST (1 << 30) 192*bc0e8d7cSWingMan Kwok #define DWC3_DCTL_LSFTRST (1 << 29) 193*bc0e8d7cSWingMan Kwok 19413194f3bSVivek Gautam #endif /* __DWC3_H_ */ 195