xref: /rk3399_rockchip-uboot/drivers/usb/gadget/dwc2_udc_otg_regs.h (revision 5b2bcb4f4876b482fa1a7e95cccab65aad50f90b)
1f4d9bd06SMarek Vasut /* linux/arch/arm/plat-s3c/include/plat/regs-otg.h
2f4d9bd06SMarek Vasut  *
3f4d9bd06SMarek Vasut  * Copyright (C) 2004 Herbert Poetzl <herbert@13thfloor.at>
4f4d9bd06SMarek Vasut  *
5f4d9bd06SMarek Vasut  * Registers remapping:
6f4d9bd06SMarek Vasut  * Lukasz Majewski <l.majewski@samsumg.com>
7f4d9bd06SMarek Vasut  *
8f4d9bd06SMarek Vasut  * SPDX-License-Identifier:	GPL-2.0+
9f4d9bd06SMarek Vasut  */
10f4d9bd06SMarek Vasut 
11f4d9bd06SMarek Vasut #ifndef __ASM_ARCH_REGS_USB_OTG_HS_H
12f4d9bd06SMarek Vasut #define __ASM_ARCH_REGS_USB_OTG_HS_H
13f4d9bd06SMarek Vasut 
14f4d9bd06SMarek Vasut /* USB2.0 OTG Controller register */
15f4d9bd06SMarek Vasut struct dwc2_usbotg_phy {
16f4d9bd06SMarek Vasut 	u32 phypwr;
17f4d9bd06SMarek Vasut 	u32 phyclk;
18f4d9bd06SMarek Vasut 	u32 rstcon;
19f4d9bd06SMarek Vasut };
20f4d9bd06SMarek Vasut 
21f4d9bd06SMarek Vasut /* Device Logical IN Endpoint-Specific Registers */
22f4d9bd06SMarek Vasut struct dwc2_dev_in_endp {
23f4d9bd06SMarek Vasut 	u32 diepctl;
24f4d9bd06SMarek Vasut 	u8  res1[4];
25f4d9bd06SMarek Vasut 	u32 diepint;
26f4d9bd06SMarek Vasut 	u8  res2[4];
27f4d9bd06SMarek Vasut 	u32 dieptsiz;
28f4d9bd06SMarek Vasut 	u32 diepdma;
29f4d9bd06SMarek Vasut 	u8  res3[4];
30f4d9bd06SMarek Vasut 	u32 diepdmab;
31f4d9bd06SMarek Vasut };
32f4d9bd06SMarek Vasut 
33f4d9bd06SMarek Vasut /* Device Logical OUT Endpoint-Specific Registers */
34f4d9bd06SMarek Vasut struct dwc2_dev_out_endp {
35f4d9bd06SMarek Vasut 	u32 doepctl;
36f4d9bd06SMarek Vasut 	u8  res1[4];
37f4d9bd06SMarek Vasut 	u32 doepint;
38f4d9bd06SMarek Vasut 	u8  res2[4];
39f4d9bd06SMarek Vasut 	u32 doeptsiz;
40f4d9bd06SMarek Vasut 	u32 doepdma;
41f4d9bd06SMarek Vasut 	u8  res3[4];
42f4d9bd06SMarek Vasut 	u32 doepdmab;
43f4d9bd06SMarek Vasut };
44f4d9bd06SMarek Vasut 
45f4d9bd06SMarek Vasut struct ep_fifo {
46f4d9bd06SMarek Vasut 	u32 fifo;
47f4d9bd06SMarek Vasut 	u8  res[4092];
48f4d9bd06SMarek Vasut };
49f4d9bd06SMarek Vasut 
50f4d9bd06SMarek Vasut /* USB2.0 OTG Controller register */
51f4d9bd06SMarek Vasut struct dwc2_usbotg_reg {
52f4d9bd06SMarek Vasut 	/* Core Global Registers */
53f4d9bd06SMarek Vasut 	u32 gotgctl; /* OTG Control & Status */
54f4d9bd06SMarek Vasut 	u32 gotgint; /* OTG Interrupt */
55f4d9bd06SMarek Vasut 	u32 gahbcfg; /* Core AHB Configuration */
56f4d9bd06SMarek Vasut 	u32 gusbcfg; /* Core USB Configuration */
57f4d9bd06SMarek Vasut 	u32 grstctl; /* Core Reset */
58f4d9bd06SMarek Vasut 	u32 gintsts; /* Core Interrupt */
59f4d9bd06SMarek Vasut 	u32 gintmsk; /* Core Interrupt Mask */
60f4d9bd06SMarek Vasut 	u32 grxstsr; /* Receive Status Debug Read/Status Read */
61f4d9bd06SMarek Vasut 	u32 grxstsp; /* Receive Status Debug Pop/Status Pop */
62f4d9bd06SMarek Vasut 	u32 grxfsiz; /* Receive FIFO Size */
63f4d9bd06SMarek Vasut 	u32 gnptxfsiz; /* Non-Periodic Transmit FIFO Size */
64f4d9bd06SMarek Vasut 	u8  res1[216];
65f4d9bd06SMarek Vasut 	u32 dieptxf[15]; /* Device Periodic Transmit FIFO size register */
66f4d9bd06SMarek Vasut 	u8  res2[1728];
67f4d9bd06SMarek Vasut 	/* Device Configuration */
68f4d9bd06SMarek Vasut 	u32 dcfg; /* Device Configuration Register */
69f4d9bd06SMarek Vasut 	u32 dctl; /* Device Control */
70f4d9bd06SMarek Vasut 	u32 dsts; /* Device Status */
71f4d9bd06SMarek Vasut 	u8  res3[4];
72f4d9bd06SMarek Vasut 	u32 diepmsk; /* Device IN Endpoint Common Interrupt Mask */
73f4d9bd06SMarek Vasut 	u32 doepmsk; /* Device OUT Endpoint Common Interrupt Mask */
74f4d9bd06SMarek Vasut 	u32 daint; /* Device All Endpoints Interrupt */
75f4d9bd06SMarek Vasut 	u32 daintmsk; /* Device All Endpoints Interrupt Mask */
76f4d9bd06SMarek Vasut 	u8  res4[224];
77f4d9bd06SMarek Vasut 	struct dwc2_dev_in_endp in_endp[16];
78f4d9bd06SMarek Vasut 	struct dwc2_dev_out_endp out_endp[16];
79f4d9bd06SMarek Vasut 	u8  res5[768];
80f4d9bd06SMarek Vasut 	struct ep_fifo ep[16];
81f4d9bd06SMarek Vasut };
82f4d9bd06SMarek Vasut 
83f4d9bd06SMarek Vasut /*===================================================================== */
84f4d9bd06SMarek Vasut /*definitions related to CSR setting */
85f4d9bd06SMarek Vasut 
86507e677bSMarek Vasut /* DWC2_UDC_OTG_GOTGCTL */
87f4d9bd06SMarek Vasut #define B_SESSION_VALID		(0x1<<19)
88f4d9bd06SMarek Vasut #define A_SESSION_VALID		(0x1<<18)
89f4d9bd06SMarek Vasut 
90507e677bSMarek Vasut /* DWC2_UDC_OTG_GAHBCFG */
91f4d9bd06SMarek Vasut #define PTXFE_HALF			(0<<8)
92f4d9bd06SMarek Vasut #define PTXFE_ZERO			(1<<8)
93f4d9bd06SMarek Vasut #define NPTXFE_HALF			(0<<7)
94f4d9bd06SMarek Vasut #define NPTXFE_ZERO			(1<<7)
95f4d9bd06SMarek Vasut #define MODE_SLAVE			(0<<5)
96f4d9bd06SMarek Vasut #define MODE_DMA			(1<<5)
97f4d9bd06SMarek Vasut #define BURST_SINGLE			(0<<1)
98f4d9bd06SMarek Vasut #define BURST_INCR			(1<<1)
99f4d9bd06SMarek Vasut #define BURST_INCR4			(3<<1)
100f4d9bd06SMarek Vasut #define BURST_INCR8			(5<<1)
101f4d9bd06SMarek Vasut #define BURST_INCR16			(7<<1)
102f4d9bd06SMarek Vasut #define GBL_INT_UNMASK			(1<<0)
103f4d9bd06SMarek Vasut #define GBL_INT_MASK			(0<<0)
104f4d9bd06SMarek Vasut 
105507e677bSMarek Vasut /* DWC2_UDC_OTG_GRSTCTL */
106f4d9bd06SMarek Vasut #define AHB_MASTER_IDLE		(1u<<31)
107f4d9bd06SMarek Vasut #define CORE_SOFT_RESET		(0x1<<0)
108f4d9bd06SMarek Vasut 
109507e677bSMarek Vasut /* DWC2_UDC_OTG_GINTSTS/DWC2_UDC_OTG_GINTMSK core interrupt register */
110f4d9bd06SMarek Vasut #define INT_RESUME			(1u<<31)
111f4d9bd06SMarek Vasut #define INT_DISCONN			(0x1<<29)
112f4d9bd06SMarek Vasut #define INT_CONN_ID_STS_CNG		(0x1<<28)
113f4d9bd06SMarek Vasut #define INT_OUT_EP			(0x1<<19)
114f4d9bd06SMarek Vasut #define INT_IN_EP			(0x1<<18)
115f4d9bd06SMarek Vasut #define INT_ENUMDONE			(0x1<<13)
116f4d9bd06SMarek Vasut #define INT_RESET			(0x1<<12)
117f4d9bd06SMarek Vasut #define INT_SUSPEND			(0x1<<11)
118f4d9bd06SMarek Vasut #define INT_EARLY_SUSPEND		(0x1<<10)
119f4d9bd06SMarek Vasut #define INT_NP_TX_FIFO_EMPTY		(0x1<<5)
120f4d9bd06SMarek Vasut #define INT_RX_FIFO_NOT_EMPTY		(0x1<<4)
121f4d9bd06SMarek Vasut #define INT_SOF			(0x1<<3)
122f4d9bd06SMarek Vasut #define INT_DEV_MODE			(0x0<<0)
123f4d9bd06SMarek Vasut #define INT_HOST_MODE			(0x1<<1)
124f4d9bd06SMarek Vasut #define INT_GOUTNakEff			(0x01<<7)
125f4d9bd06SMarek Vasut #define INT_GINNakEff			(0x01<<6)
126f4d9bd06SMarek Vasut 
127f4d9bd06SMarek Vasut #define FULL_SPEED_CONTROL_PKT_SIZE	8
128f4d9bd06SMarek Vasut #define FULL_SPEED_BULK_PKT_SIZE	64
129f4d9bd06SMarek Vasut 
130f4d9bd06SMarek Vasut #define HIGH_SPEED_CONTROL_PKT_SIZE	64
131f4d9bd06SMarek Vasut #define HIGH_SPEED_BULK_PKT_SIZE	512
132f4d9bd06SMarek Vasut 
13347117882SXu Ziyuan #define RX_FIFO_SIZE			(1024)
13447117882SXu Ziyuan #define NPTX_FIFO_SIZE			(1024)
13547117882SXu Ziyuan #define PTX_FIFO_SIZE			(384)
136f4d9bd06SMarek Vasut 
137f4d9bd06SMarek Vasut #define DEPCTL_TXFNUM_0		(0x0<<22)
138f4d9bd06SMarek Vasut #define DEPCTL_TXFNUM_1		(0x1<<22)
139f4d9bd06SMarek Vasut #define DEPCTL_TXFNUM_2		(0x2<<22)
140f4d9bd06SMarek Vasut #define DEPCTL_TXFNUM_3		(0x3<<22)
141f4d9bd06SMarek Vasut #define DEPCTL_TXFNUM_4		(0x4<<22)
142f4d9bd06SMarek Vasut 
143f4d9bd06SMarek Vasut /* Enumeration speed */
144f4d9bd06SMarek Vasut #define USB_HIGH_30_60MHZ		(0x0<<1)
145f4d9bd06SMarek Vasut #define USB_FULL_30_60MHZ		(0x1<<1)
146f4d9bd06SMarek Vasut #define USB_LOW_6MHZ			(0x2<<1)
147f4d9bd06SMarek Vasut #define USB_FULL_48MHZ			(0x3<<1)
148f4d9bd06SMarek Vasut 
149507e677bSMarek Vasut /* DWC2_UDC_OTG_GRXSTSP STATUS */
150f4d9bd06SMarek Vasut #define OUT_PKT_RECEIVED		(0x2<<17)
151f4d9bd06SMarek Vasut #define OUT_TRANSFER_COMPLELTED	(0x3<<17)
152f4d9bd06SMarek Vasut #define SETUP_TRANSACTION_COMPLETED	(0x4<<17)
153f4d9bd06SMarek Vasut #define SETUP_PKT_RECEIVED		(0x6<<17)
154f4d9bd06SMarek Vasut #define GLOBAL_OUT_NAK			(0x1<<17)
155f4d9bd06SMarek Vasut 
156507e677bSMarek Vasut /* DWC2_UDC_OTG_DCTL device control register */
157f4d9bd06SMarek Vasut #define NORMAL_OPERATION		(0x1<<0)
158f4d9bd06SMarek Vasut #define SOFT_DISCONNECT		(0x1<<1)
159f4d9bd06SMarek Vasut 
160507e677bSMarek Vasut /* DWC2_UDC_OTG_DAINT device all endpoint interrupt register */
161f4d9bd06SMarek Vasut #define DAINT_OUT_BIT			(16)
162f4d9bd06SMarek Vasut #define DAINT_MASK			(0xFFFF)
163f4d9bd06SMarek Vasut 
164507e677bSMarek Vasut /* DWC2_UDC_OTG_DIEPCTL0/DOEPCTL0 device
165f4d9bd06SMarek Vasut    control IN/OUT endpoint 0 control register */
166f4d9bd06SMarek Vasut #define DEPCTL_EPENA			(0x1<<31)
167f4d9bd06SMarek Vasut #define DEPCTL_EPDIS			(0x1<<30)
168f4d9bd06SMarek Vasut #define DEPCTL_SETD1PID		(0x1<<29)
169f4d9bd06SMarek Vasut #define DEPCTL_SETD0PID		(0x1<<28)
170f4d9bd06SMarek Vasut #define DEPCTL_SNAK			(0x1<<27)
171f4d9bd06SMarek Vasut #define DEPCTL_CNAK			(0x1<<26)
172f4d9bd06SMarek Vasut #define DEPCTL_STALL			(0x1<<21)
173f4d9bd06SMarek Vasut #define DEPCTL_TYPE_BIT		(18)
174f4d9bd06SMarek Vasut #define DEPCTL_TYPE_MASK		(0x3<<18)
175f4d9bd06SMarek Vasut #define DEPCTL_CTRL_TYPE		(0x0<<18)
176f4d9bd06SMarek Vasut #define DEPCTL_ISO_TYPE		(0x1<<18)
177f4d9bd06SMarek Vasut #define DEPCTL_BULK_TYPE		(0x2<<18)
178f4d9bd06SMarek Vasut #define DEPCTL_INTR_TYPE		(0x3<<18)
179f4d9bd06SMarek Vasut #define DEPCTL_USBACTEP		(0x1<<15)
180f4d9bd06SMarek Vasut #define DEPCTL_NEXT_EP_BIT		(11)
181f4d9bd06SMarek Vasut #define DEPCTL_MPS_BIT			(0)
182f4d9bd06SMarek Vasut #define DEPCTL_MPS_MASK		(0x7FF)
183f4d9bd06SMarek Vasut 
184f4d9bd06SMarek Vasut #define DEPCTL0_MPS_64			(0x0<<0)
185f4d9bd06SMarek Vasut #define DEPCTL0_MPS_32			(0x1<<0)
186f4d9bd06SMarek Vasut #define DEPCTL0_MPS_16			(0x2<<0)
187f4d9bd06SMarek Vasut #define DEPCTL0_MPS_8			(0x3<<0)
188f4d9bd06SMarek Vasut #define DEPCTL_MPS_BULK_512		(512<<0)
189f4d9bd06SMarek Vasut #define DEPCTL_MPS_INT_MPS_16		(16<<0)
190f4d9bd06SMarek Vasut 
191f4d9bd06SMarek Vasut #define DIEPCTL0_NEXT_EP_BIT		(11)
192f4d9bd06SMarek Vasut 
193f4d9bd06SMarek Vasut 
194507e677bSMarek Vasut /* DWC2_UDC_OTG_DIEPMSK/DOEPMSK device IN/OUT endpoint
195f4d9bd06SMarek Vasut    common interrupt mask register */
196507e677bSMarek Vasut /* DWC2_UDC_OTG_DIEPINTn/DOEPINTn device IN/OUT endpoint interrupt register */
197f4d9bd06SMarek Vasut #define BACK2BACK_SETUP_RECEIVED	(0x1<<6)
198f4d9bd06SMarek Vasut #define INTKNEPMIS			(0x1<<5)
199f4d9bd06SMarek Vasut #define INTKN_TXFEMP			(0x1<<4)
200f4d9bd06SMarek Vasut #define NON_ISO_IN_EP_TIMEOUT		(0x1<<3)
201f4d9bd06SMarek Vasut #define CTRL_OUT_EP_SETUP_PHASE_DONE	(0x1<<3)
202f4d9bd06SMarek Vasut #define AHB_ERROR			(0x1<<2)
203f4d9bd06SMarek Vasut #define EPDISBLD			(0x1<<1)
204f4d9bd06SMarek Vasut #define TRANSFER_DONE			(0x1<<0)
205f4d9bd06SMarek Vasut 
206f4d9bd06SMarek Vasut #define USB_PHY_CTRL_EN0                (0x1 << 0)
207f4d9bd06SMarek Vasut 
208f4d9bd06SMarek Vasut /* OPHYPWR */
209f4d9bd06SMarek Vasut #define PHY_0_SLEEP                     (0x1 << 5)
210f4d9bd06SMarek Vasut #define OTG_DISABLE_0                   (0x1 << 4)
211f4d9bd06SMarek Vasut #define ANALOG_PWRDOWN                  (0x1 << 3)
212f4d9bd06SMarek Vasut #define FORCE_SUSPEND_0                 (0x1 << 0)
213f4d9bd06SMarek Vasut 
214f4d9bd06SMarek Vasut /* URSTCON */
215f4d9bd06SMarek Vasut #define HOST_SW_RST                     (0x1 << 4)
216f4d9bd06SMarek Vasut #define PHY_SW_RST1                     (0x1 << 3)
217f4d9bd06SMarek Vasut #define PHYLNK_SW_RST                   (0x1 << 2)
218f4d9bd06SMarek Vasut #define LINK_SW_RST                     (0x1 << 1)
219f4d9bd06SMarek Vasut #define PHY_SW_RST0                     (0x1 << 0)
220f4d9bd06SMarek Vasut 
221f4d9bd06SMarek Vasut /* OPHYCLK */
222f4d9bd06SMarek Vasut #define COMMON_ON_N1                    (0x1 << 7)
223f4d9bd06SMarek Vasut #define COMMON_ON_N0                    (0x1 << 4)
224f4d9bd06SMarek Vasut #define ID_PULLUP0                      (0x1 << 2)
225f4d9bd06SMarek Vasut #define CLK_SEL_24MHZ                   (0x3 << 0)
226f4d9bd06SMarek Vasut #define CLK_SEL_12MHZ                   (0x2 << 0)
227f4d9bd06SMarek Vasut #define CLK_SEL_48MHZ                   (0x0 << 0)
228f4d9bd06SMarek Vasut 
229f4d9bd06SMarek Vasut #define EXYNOS4X12_ID_PULLUP0		(0x01 << 3)
230f4d9bd06SMarek Vasut #define EXYNOS4X12_COMMON_ON_N0	(0x01 << 4)
231f4d9bd06SMarek Vasut #define EXYNOS4X12_CLK_SEL_12MHZ	(0x02 << 0)
232f4d9bd06SMarek Vasut #define EXYNOS4X12_CLK_SEL_24MHZ	(0x05 << 0)
233f4d9bd06SMarek Vasut 
234f4d9bd06SMarek Vasut /* Device Configuration Register DCFG */
235f4d9bd06SMarek Vasut #define DEV_SPEED_HIGH_SPEED_20         (0x0 << 0)
236f4d9bd06SMarek Vasut #define DEV_SPEED_FULL_SPEED_20         (0x1 << 0)
237f4d9bd06SMarek Vasut #define DEV_SPEED_LOW_SPEED_11          (0x2 << 0)
238f4d9bd06SMarek Vasut #define DEV_SPEED_FULL_SPEED_11         (0x3 << 0)
239f4d9bd06SMarek Vasut #define EP_MISS_CNT(x)                  (x << 18)
240f4d9bd06SMarek Vasut #define DEVICE_ADDRESS(x)               (x << 4)
241a52e8dd4SFrank Wang #define DCFG_DEVADDR_MASK		(0x7f << 4)
242f4d9bd06SMarek Vasut 
243f4d9bd06SMarek Vasut /* Core Reset Register (GRSTCTL) */
244f4d9bd06SMarek Vasut #define TX_FIFO_FLUSH                   (0x1 << 5)
245f4d9bd06SMarek Vasut #define RX_FIFO_FLUSH                   (0x1 << 4)
246f4d9bd06SMarek Vasut #define TX_FIFO_NUMBER(x)               (x << 6)
247f4d9bd06SMarek Vasut #define TX_FIFO_FLUSH_ALL               TX_FIFO_NUMBER(0x10)
248f4d9bd06SMarek Vasut 
249f4d9bd06SMarek Vasut /* Masks definitions */
250f4d9bd06SMarek Vasut #define GINTMSK_INIT	(INT_OUT_EP | INT_IN_EP | INT_RESUME | INT_ENUMDONE\
251f4d9bd06SMarek Vasut 			| INT_RESET | INT_SUSPEND)
252f4d9bd06SMarek Vasut #define DOEPMSK_INIT	(CTRL_OUT_EP_SETUP_PHASE_DONE | AHB_ERROR|TRANSFER_DONE)
253f4d9bd06SMarek Vasut #define DIEPMSK_INIT	(NON_ISO_IN_EP_TIMEOUT|AHB_ERROR|TRANSFER_DONE)
254f4d9bd06SMarek Vasut #define GAHBCFG_INIT	(PTXFE_HALF | NPTXFE_HALF | MODE_DMA | BURST_INCR4\
255f4d9bd06SMarek Vasut 			| GBL_INT_UNMASK)
256f4d9bd06SMarek Vasut 
257f4d9bd06SMarek Vasut /* Device Endpoint X Transfer Size Register (DIEPTSIZX) */
258f4d9bd06SMarek Vasut #define DIEPT_SIZ_PKT_CNT(x)                      (x << 19)
259f4d9bd06SMarek Vasut #define DIEPT_SIZ_XFER_SIZE(x)                    (x << 0)
260f4d9bd06SMarek Vasut 
261f4d9bd06SMarek Vasut /* Device OUT Endpoint X Transfer Size Register (DOEPTSIZX) */
262f4d9bd06SMarek Vasut #define DOEPT_SIZ_PKT_CNT(x)                      (x << 19)
263f4d9bd06SMarek Vasut #define DOEPT_SIZ_XFER_SIZE(x)                    (x << 0)
264f4d9bd06SMarek Vasut #define DOEPT_SIZ_XFER_SIZE_MAX_EP0               (0x7F << 0)
265*5b2bcb4fSFrank Wang #define DOEPT_SIZ_XFER_SIZE_MAX_EP                (0x7FFFF << 0)
266f4d9bd06SMarek Vasut 
267f4d9bd06SMarek Vasut /* Device Endpoint-N Control Register (DIEPCTLn/DOEPCTLn) */
268f4d9bd06SMarek Vasut #define DIEPCTL_TX_FIFO_NUM(x)                    (x << 22)
269f4d9bd06SMarek Vasut #define DIEPCTL_TX_FIFO_NUM_MASK                  (~DIEPCTL_TX_FIFO_NUM(0xF))
270f4d9bd06SMarek Vasut 
271f4d9bd06SMarek Vasut /* Device ALL Endpoints Interrupt Register (DAINT) */
272f4d9bd06SMarek Vasut #define DAINT_IN_EP_INT(x)                        (x << 0)
273f4d9bd06SMarek Vasut #define DAINT_OUT_EP_INT(x)                       (x << 16)
274f4d9bd06SMarek Vasut #endif
275