/* include/linux/usb/dwc3.h * * Copyright (c) 2012 Samsung Electronics Co. Ltd * * Designware SuperSpeed USB 3.0 DRD Controller global and OTG registers * * SPDX-License-Identifier: GPL-2.0+ */ #ifndef __DWC3_H_ #define __DWC3_H_ /* Global constants */ #define DWC3_ENDPOINTS_NUM 32 #define DWC3_EVENT_BUFFERS_SIZE PAGE_SIZE #define DWC3_EVENT_TYPE_MASK 0xfe #define DWC3_EVENT_TYPE_DEV 0 #define DWC3_EVENT_TYPE_CARKIT 3 #define DWC3_EVENT_TYPE_I2C 4 #define DWC3_DEVICE_EVENT_DISCONNECT 0 #define DWC3_DEVICE_EVENT_RESET 1 #define DWC3_DEVICE_EVENT_CONNECT_DONE 2 #define DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE 3 #define DWC3_DEVICE_EVENT_WAKEUP 4 #define DWC3_DEVICE_EVENT_EOPF 6 #define DWC3_DEVICE_EVENT_SOF 7 #define DWC3_DEVICE_EVENT_ERRATIC_ERROR 9 #define DWC3_DEVICE_EVENT_CMD_CMPL 10 #define DWC3_DEVICE_EVENT_OVERFLOW 11 #define DWC3_GEVNTCOUNT_MASK 0xfffc #define DWC3_GSNPSID_MASK 0xffff0000 #define DWC3_GSNPSID_SHIFT 16 #define DWC3_GSNPSREV_MASK 0xffff #define DWC3_REVISION_MASK 0xffff #define DWC3_REG_OFFSET 0xC100 struct g_event_buffer { u32 g_evntadrlo; u32 g_evntadrhi; u32 g_evntsiz; u32 g_evntcount; }; struct d_physical_endpoint { u32 d_depcmdpar2; u32 d_depcmdpar1; u32 d_depcmdpar0; u32 d_depcmd; }; struct dwc3 { /* offset: 0xC100 */ u32 g_sbuscfg0; u32 g_sbuscfg1; u32 g_txthrcfg; u32 g_rxthrcfg; u32 g_ctl; u32 reserved1; u32 g_sts; u32 reserved2; u32 g_snpsid; u32 g_gpio; u32 g_uid; u32 g_uctl; u64 g_buserraddr; u64 g_prtbimap; u32 g_hwparams0; u32 g_hwparams1; u32 g_hwparams2; u32 g_hwparams3; u32 g_hwparams4; u32 g_hwparams5; u32 g_hwparams6; u32 g_hwparams7; u32 g_dbgfifospace; u32 g_dbgltssm; u32 g_dbglnmcc; u32 g_dbgbmu; u32 g_dbglspmux; u32 g_dbglsp; u32 g_dbgepinfo0; u32 g_dbgepinfo1; u64 g_prtbimap_hs; u64 g_prtbimap_fs; u32 reserved3[28]; u32 g_usb2phycfg[16]; u32 g_usb2i2cctl[16]; u32 g_usb2phyacc[16]; u32 g_usb3pipectl[16]; u32 g_txfifosiz[32]; u32 g_rxfifosiz[32]; struct g_event_buffer g_evnt_buf[32]; u32 g_hwparams8; u32 reserved4[63]; u32 d_cfg; u32 d_ctl; u32 d_evten; u32 d_sts; u32 d_gcmdpar; u32 d_gcmd; u32 reserved5[2]; u32 d_alepena; u32 reserved6[55]; struct d_physical_endpoint d_phy_ep_cmd[32]; u32 reserved7[128]; u32 o_cfg; u32 o_ctl; u32 o_evt; u32 o_evten; u32 o_sts; u32 reserved8[3]; u32 adp_cfg; u32 adp_ctl; u32 adp_evt; u32 adp_evten; u32 bc_cfg; u32 reserved9; u32 bc_evt; u32 bc_evten; }; /* Global Configuration Register */ #define DWC3_GCTL_PWRDNSCALE(n) ((n) << 19) #define DWC3_GCTL_U2RSTECN (1 << 16) #define DWC3_GCTL_RAMCLKSEL(x) \ (((x) & DWC3_GCTL_CLK_MASK) << 6) #define DWC3_GCTL_CLK_BUS (0) #define DWC3_GCTL_CLK_PIPE (1) #define DWC3_GCTL_CLK_PIPEHALF (2) #define DWC3_GCTL_CLK_MASK (3) #define DWC3_GCTL_PRTCAP(n) (((n) & (3 << 12)) >> 12) #define DWC3_GCTL_PRTCAPDIR(n) ((n) << 12) #define DWC3_GCTL_PRTCAP_HOST 1 #define DWC3_GCTL_PRTCAP_DEVICE 2 #define DWC3_GCTL_PRTCAP_OTG 3 #define DWC3_GCTL_CORESOFTRESET (1 << 11) #define DWC3_GCTL_SCALEDOWN(n) ((n) << 4) #define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3) #define DWC3_GCTL_DISSCRAMBLE (1 << 3) #define DWC3_GCTL_DSBLCLKGTNG (1 << 0) /* Global HWPARAMS1 Register */ #define DWC3_GHWPARAMS1_EN_PWROPT(n) (((n) & (3 << 24)) >> 24) #define DWC3_GHWPARAMS1_EN_PWROPT_NO 0 #define DWC3_GHWPARAMS1_EN_PWROPT_CLK 1 /* Global USB2 PHY Configuration Register */ #define DWC3_GUSB2PHYCFG_PHYSOFTRST (1 << 31) #define DWC3_GUSB2PHYCFG_SUSPHY (1 << 6) /* Global USB3 PIPE Control Register */ #define DWC3_GUSB3PIPECTL_PHYSOFTRST (1 << 31) #define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17) /* Global TX Fifo Size Register */ #define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff) #define DWC3_GTXFIFOSIZ_TXFSTADDR(n) ((n) & 0xffff0000) /* Device Control Register */ #define DWC3_DCTL_RUN_STOP (1 << 31) #define DWC3_DCTL_CSFTRST (1 << 30) #define DWC3_DCTL_LSFTRST (1 << 29) #endif /* __DWC3_H_ */