1 /*
2  * Copyright (c) 2019 - 2021, Broadcom
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef SR_USB_H
8 #define SR_USB_H
9 
10 #define CDRU_PM_RESET_N_R	BIT(CDRU_MISC_RESET_CONTROL__CDRU_PM_RESET_N_R)
11 #define CDRU_USBSS_RESET_N	BIT(CDRU_MISC_RESET_CONTROL__CDRU_USBSS_RESET_N)
12 #define CDRU_MISC_CLK_USBSS \
13 			BIT(CDRU_MISC_CLK_ENABLE_CONTROL__CDRU_USBSS_CLK_EN_R)
14 
15 #define RESCAL_I_RSTB			BIT(26)
16 #define RESCAL_I_PWRDNB			BIT(27)
17 
18 #define DRDU3_U3PHY_CTRL		0x68500014
19 #define	PHY_RESET			BIT(1)
20 #define	POR_RESET			BIT(28)
21 #define	MDIO_RESET			BIT(29)
22 
23 #define DRDU3_PWR_CTRL			0x6850002c
24 #define POWER_CTRL_OVRD			BIT(2)
25 
26 #define USB3H_U3PHY_CTRL		0x68510014
27 #define USB3H_U3SOFT_RST_N		BIT(30)
28 
29 #define USB3H_PWR_CTRL			0x68510028
30 
31 #define USB3_PHY_MDIO_BLOCK_BASE_REG	0x1f
32 #define BDC_AXI_SOFT_RST_N_OFFSET	0
33 #define XHC_AXI_SOFT_RST_N_OFFSET	1
34 #define MDIO_BUS_ID			3
35 #define USB3H_PHY_ID			5
36 #define USB3DRD_PHY_ID			2
37 
38 #define USB3_PHY_RXPMD_BLOCK_BASE	0x8020
39 #define USB3_PHY_RXPMD_REG1		0x1
40 #define USB3_PHY_RXPMD_REG2		0x2
41 #define USB3_PHY_RXPMD_REG5		0x5
42 #define USB3_PHY_RXPMD_REG7		0x7
43 
44 #define USB3_PHY_TXPMD_BLOCK_BASE	0x8040
45 #define USB3_PHY_TXPMD_REG1		0x1
46 #define USB3_PHY_TXPMD_REG2		0x2
47 
48 #define USB3_PHY_ANA_BLOCK_BASE		0x8090
49 #define USB3_PHY_ANA_REG0		0x0
50 #define USB3_PHY_ANA_REG1		0x1
51 #define USB3_PHY_ANA_REG2		0x2
52 #define USB3_PHY_ANA_REG5		0x5
53 #define USB3_PHY_ANA_REG8		0x8
54 #define USB3_PHY_ANA_REG11		0xb
55 
56 #define USB3_PHY_AEQ_BLOCK_BASE		0x80e0
57 #define USB3_PHY_AEQ_REG1		0x1
58 #define USB3_PHY_AEQ_REG3		0x3
59 
60 #ifdef USB_DMA_COHERENT
61 #define DRDU3_U3XHC_SOFT_RST_N		BIT(31)
62 #define DRDU3_U3BDC_SOFT_RST_N		BIT(30)
63 
64 #define DRDU3_SOFT_RESET_CTRL		0x68500030
65 #define DRDU3_XHC_AXI_SOFT_RST_N	BIT(1)
66 #define DRDU3_BDC_AXI_SOFT_RST_N	BIT(0)
67 
68 #define DRDU2_PHY_CTRL			0x6852000c
69 #define DRDU2_U2SOFT_RST_N		BIT(29)
70 
71 #define USB3H_SOFT_RESET_CTRL		0x6851002c
72 #define USB3H_XHC_AXI_SOFT_RST_N	BIT(1)
73 
74 #define DRDU2_SOFT_RESET_CTRL		0x68520020
75 #define DRDU2_BDC_AXI_SOFT_RST_N	BIT(0)
76 
77 #define DRD2U3H_XHC_REGS_AXIWRA		0x68511c08
78 #define DRD2U3H_XHC_REGS_AXIRDA		0x68511c0c
79 #define DRDU2D_BDC_REGS_AXIWRA		0x68521c08
80 #define DRDU2D_BDC_REGS_AXIRDA		0x68521c0c
81 #define DRDU3H_XHC_REGS_AXIWRA		0x68501c08
82 #define DRDU3H_XHC_REGS_AXIRDA		0x68501c0c
83 #define DRDU3D_BDC_REGS_AXIWRA		0x68502c08
84 #define DRDU3D_BDC_REGS_AXIRDA		0x68502c0c
85 /* cacheable write-back, allocate on both reads and writes */
86 #define USBAXI_AWCACHE		0xf
87 #define USBAXI_ARCACHE		0xf
88 /* non-secure */
89 #define USBAXI_AWPROT		0x8
90 #define USBAXI_ARPROT		0x8
91 #define USBAXIWR_SA_VAL		((USBAXI_AWCACHE << 4 | USBAXI_AWPROT) << 0)
92 #define USBAXIWR_SA_MASK	((0xf << 4 | 0xf) << 0)
93 #define USBAXIWR_UA_VAL		((USBAXI_AWCACHE << 4 | USBAXI_AWPROT) << 16)
94 #define USBAXIWR_UA_MASK	((0xf << 4 | 0xf) << 0)
95 #define USBAXIRD_SA_VAL		((USBAXI_ARCACHE << 4 | USBAXI_ARPROT) << 0)
96 #define USBAXIRD_SA_MASK	((0xf << 4 | 0xf) << 0)
97 #define USBAXIRD_UA_VAL		((USBAXI_ARCACHE << 4 | USBAXI_ARPROT) << 16)
98 #define USBAXIRD_UA_MASK	((0xf << 4 | 0xf) << 0)
99 #endif /* USB_DMA_COHERENT */
100 
101 #define ICFG_DRDU3_SID_CTRL		0x6850001c
102 #define ICFG_USB3H_SID_CTRL		0x6851001c
103 #define ICFG_DRDU2_SID_CTRL		0x68520010
104 #define ICFG_USB_SID_SHIFT		5
105 #define ICFG_USB_SID_AWADDR_OFFSET	0x0
106 #define ICFG_USB_SID_ARADDR_OFFSET	0x4
107 
108 #define USBIC_GPV_BASE			0x68600000
109 #define USBIC_GPV_SECURITY0		(USBIC_GPV_BASE + 0x8)
110 #define USBIC_GPV_SECURITY0_FIELD	BIT(0)
111 #define USBIC_GPV_SECURITY1		(USBIC_GPV_BASE + 0xc)
112 #define USBIC_GPV_SECURITY1_FIELD	(BIT(0) | BIT(1))
113 #define USBIC_GPV_SECURITY2		(USBIC_GPV_BASE + 0x10)
114 #define USBIC_GPV_SECURITY2_FIELD	(BIT(0) | BIT(1))
115 #define USBIC_GPV_SECURITY4		(USBIC_GPV_BASE + 0x18)
116 #define USBIC_GPV_SECURITY4_FIELD	BIT(0)
117 #define USBIC_GPV_SECURITY10		(USBIC_GPV_BASE + 0x30)
118 #define USBIC_GPV_SECURITY10_FIELD	(0x7 << 0)
119 
120 #define USBSS_TZPCDECPROT_BASE		0x68540800
121 #define USBSS_TZPCDECPROT0set		(USBSS_TZPCDECPROT_BASE + 0x4)
122 #define USBSS_TZPCDECPROT0clr		(USBSS_TZPCDECPROT_BASE + 0x8)
123 #define DECPROT0_USBSS_DRD2U3H		BIT(3)
124 #define DECPROT0_USBSS_DRDU2H		BIT(2)
125 #define DECPROT0_USBSS_DRDU3D		BIT(1)
126 #define DECPROT0_USBSS_DRDU2D		BIT(0)
127 #define USBSS_TZPCDECPROT0 \
128 		(DECPROT0_USBSS_DRD2U3H | \
129 		DECPROT0_USBSS_DRDU2H |   \
130 		DECPROT0_USBSS_DRDU3D |   \
131 		DECPROT0_USBSS_DRDU2D)
132 
133 int32_t usb_device_init(unsigned int);
134 
135 #endif /* SR_USB_H */
136