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 { 44bc0e8d7cSWingMan Kwok u32 g_evntadrlo; 45bc0e8d7cSWingMan 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 112667f4dd9SNikhil Badola u32 reserved4[11]; 113667f4dd9SNikhil Badola 114667f4dd9SNikhil Badola u32 g_fladj; 115667f4dd9SNikhil Badola 116667f4dd9SNikhil Badola u32 reserved5[51]; 11713194f3bSVivek Gautam 11813194f3bSVivek Gautam u32 d_cfg; 11913194f3bSVivek Gautam u32 d_ctl; 12013194f3bSVivek Gautam u32 d_evten; 12113194f3bSVivek Gautam u32 d_sts; 12213194f3bSVivek Gautam u32 d_gcmdpar; 12313194f3bSVivek Gautam u32 d_gcmd; 12413194f3bSVivek Gautam 125667f4dd9SNikhil Badola u32 reserved6[2]; 12613194f3bSVivek Gautam 12713194f3bSVivek Gautam u32 d_alepena; 12813194f3bSVivek Gautam 129667f4dd9SNikhil Badola u32 reserved7[55]; 13013194f3bSVivek Gautam 13113194f3bSVivek Gautam struct d_physical_endpoint d_phy_ep_cmd[32]; 13213194f3bSVivek Gautam 133667f4dd9SNikhil Badola u32 reserved8[128]; 13413194f3bSVivek Gautam 13513194f3bSVivek Gautam u32 o_cfg; 13613194f3bSVivek Gautam u32 o_ctl; 13713194f3bSVivek Gautam u32 o_evt; 13813194f3bSVivek Gautam u32 o_evten; 13913194f3bSVivek Gautam u32 o_sts; 14013194f3bSVivek Gautam 141667f4dd9SNikhil Badola u32 reserved9[3]; 14213194f3bSVivek Gautam 14313194f3bSVivek Gautam u32 adp_cfg; 14413194f3bSVivek Gautam u32 adp_ctl; 14513194f3bSVivek Gautam u32 adp_evt; 14613194f3bSVivek Gautam u32 adp_evten; 14713194f3bSVivek Gautam 14813194f3bSVivek Gautam u32 bc_cfg; 14913194f3bSVivek Gautam 150667f4dd9SNikhil Badola u32 reserved10; 15113194f3bSVivek Gautam 15213194f3bSVivek Gautam u32 bc_evt; 15313194f3bSVivek Gautam u32 bc_evten; 15413194f3bSVivek Gautam }; 15513194f3bSVivek Gautam 15613194f3bSVivek Gautam /* Global Configuration Register */ 15713194f3bSVivek Gautam #define DWC3_GCTL_PWRDNSCALE(n) ((n) << 19) 15813194f3bSVivek Gautam #define DWC3_GCTL_U2RSTECN (1 << 16) 15913194f3bSVivek Gautam #define DWC3_GCTL_RAMCLKSEL(x) \ 16013194f3bSVivek Gautam (((x) & DWC3_GCTL_CLK_MASK) << 6) 16113194f3bSVivek Gautam #define DWC3_GCTL_CLK_BUS (0) 16213194f3bSVivek Gautam #define DWC3_GCTL_CLK_PIPE (1) 16313194f3bSVivek Gautam #define DWC3_GCTL_CLK_PIPEHALF (2) 16413194f3bSVivek Gautam #define DWC3_GCTL_CLK_MASK (3) 16513194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP(n) (((n) & (3 << 12)) >> 12) 16613194f3bSVivek Gautam #define DWC3_GCTL_PRTCAPDIR(n) ((n) << 12) 16713194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_HOST 1 16813194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_DEVICE 2 16913194f3bSVivek Gautam #define DWC3_GCTL_PRTCAP_OTG 3 17013194f3bSVivek Gautam #define DWC3_GCTL_CORESOFTRESET (1 << 11) 17113194f3bSVivek Gautam #define DWC3_GCTL_SCALEDOWN(n) ((n) << 4) 17213194f3bSVivek Gautam #define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3) 17313194f3bSVivek Gautam #define DWC3_GCTL_DISSCRAMBLE (1 << 3) 17413194f3bSVivek Gautam #define DWC3_GCTL_DSBLCLKGTNG (1 << 0) 17513194f3bSVivek Gautam 17613194f3bSVivek Gautam /* Global HWPARAMS1 Register */ 17713194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT(n) (((n) & (3 << 24)) >> 24) 17813194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT_NO 0 17913194f3bSVivek Gautam #define DWC3_GHWPARAMS1_EN_PWROPT_CLK 1 18013194f3bSVivek Gautam 18113194f3bSVivek Gautam /* Global USB2 PHY Configuration Register */ 18213194f3bSVivek Gautam #define DWC3_GUSB2PHYCFG_PHYSOFTRST (1 << 31) 183b44566c4SMengDongyang #define DWC3_GUSB2PHYCFG_U2_FREECLK_EXISTS (1 << 30) 184b44566c4SMengDongyang #define DWC3_GUSB2PHYCFG_ENBLSLPM (1 << 8) 18513194f3bSVivek Gautam #define DWC3_GUSB2PHYCFG_SUSPHY (1 << 6) 186b44566c4SMengDongyang #define DWC3_GUSB2PHYCFG_PHYIF (1 << 3) 187b44566c4SMengDongyang 188b44566c4SMengDongyang /* Global USB2 PHY Configuration Mask */ 189b44566c4SMengDongyang #define DWC3_GUSB2PHYCFG_USBTRDTIM_MASK (0xf << 10) 190b44566c4SMengDongyang 191b44566c4SMengDongyang /* Global USB2 PHY Configuration Offset */ 192b44566c4SMengDongyang #define DWC3_GUSB2PHYCFG_USBTRDTIM_OFFSET 10 193b44566c4SMengDongyang 194b44566c4SMengDongyang #define DWC3_GUSB2PHYCFG_USBTRDTIM_16BIT (0x5 << \ 195b44566c4SMengDongyang DWC3_GUSB2PHYCFG_USBTRDTIM_OFFSET) 196b44566c4SMengDongyang #define DWC3_GUSB2PHYCFG_USBTRDTIM_8BIT (0x9 << \ 197b44566c4SMengDongyang DWC3_GUSB2PHYCFG_USBTRDTIM_OFFSET) 19813194f3bSVivek Gautam 19913194f3bSVivek Gautam /* Global USB3 PIPE Control Register */ 20013194f3bSVivek Gautam #define DWC3_GUSB3PIPECTL_PHYSOFTRST (1 << 31) 201*4c043712SSriram Dash #define DWC3_GUSB3PIPECTL_DISRXDETP3 (1 << 28) 20213194f3bSVivek Gautam #define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17) 20313194f3bSVivek Gautam 20413194f3bSVivek Gautam /* Global TX Fifo Size Register */ 20513194f3bSVivek Gautam #define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff) 20613194f3bSVivek Gautam #define DWC3_GTXFIFOSIZ_TXFSTADDR(n) ((n) & 0xffff0000) 20713194f3bSVivek Gautam 208bc0e8d7cSWingMan Kwok /* Device Control Register */ 209bc0e8d7cSWingMan Kwok #define DWC3_DCTL_RUN_STOP (1 << 31) 210bc0e8d7cSWingMan Kwok #define DWC3_DCTL_CSFTRST (1 << 30) 211bc0e8d7cSWingMan Kwok #define DWC3_DCTL_LSFTRST (1 << 29) 212bc0e8d7cSWingMan Kwok 213667f4dd9SNikhil Badola /* Global Frame Length Adjustment Register */ 214667f4dd9SNikhil Badola #define GFLADJ_30MHZ_REG_SEL (1 << 7) 215667f4dd9SNikhil Badola #define GFLADJ_30MHZ(n) ((n) & 0x3f) 216667f4dd9SNikhil Badola #define GFLADJ_30MHZ_DEFAULT 0x20 217667f4dd9SNikhil Badola 218dc9cdf85SRamneek Mehresh #ifdef CONFIG_USB_XHCI_DWC3 219dc9cdf85SRamneek Mehresh void dwc3_set_mode(struct dwc3 *dwc3_reg, u32 mode); 220dc9cdf85SRamneek Mehresh void dwc3_core_soft_reset(struct dwc3 *dwc3_reg); 221dc9cdf85SRamneek Mehresh int dwc3_core_init(struct dwc3 *dwc3_reg); 222667f4dd9SNikhil Badola void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val); 223dc9cdf85SRamneek Mehresh #endif 22413194f3bSVivek Gautam #endif /* __DWC3_H_ */ 225