blob: 7d83182874ba56d9f97dd9dc8dd529903b95ce15 [file] [log] [blame]
Bharat Gooty29e3eb92020-09-24 15:29:28 +05301/*
2 * Copyright (c) 2017 - 2021, Broadcom
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef USB_PHY_H
8#define USB_PHY_H
9
10#include <stdint.h>
11
12#include <common/debug.h>
13#include <drivers/delay_timer.h>
14#include <lib/mmio.h>
15
16#include <platform_def.h>
17
18#define DRDU2_U2PLL_NDIV_FRAC_OFFSET 0x0U
19
20#define DRDU2_U2PLL_NDIV_INT 0x4U
21
22#define DRDU2_U2PLL_CTRL 0x8U
23#define DRDU2_U2PLL_LOCK BIT(6U)
24#define DRDU2_U2PLL_RESETB BIT(5U)
25#define DRDU2_U2PLL_PDIV_MASK 0xFU
26#define DRDU2_U2PLL_PDIV_OFFSET 1U
27#define DRDU2_U2PLL_SUSPEND_EN BIT(0U)
28
29#define DRDU2_PHY_CTRL 0x0CU
30#define DRDU2_U2IDDQ BIT(30U)
31#define DRDU2_U2SOFT_RST_N BIT(29U)
32#define DRDU2_U2PHY_ON_FLAG BIT(22U)
33#define DRDU2_U2PHY_PCTL_MASK 0xFFFFU
34#define DRDU2_U2PHY_PCTL_OFFSET 6U
35#define DRDU2_U2PHY_RESETB BIT(5U)
36#define DRDU2_U2PHY_ISO BIT(4U)
37#define DRDU2_U2AFE_BG_PWRDWNB BIT(3U)
38#define DRDU2_U2AFE_PLL_PWRDWNB BIT(2U)
39#define DRDU2_U2AFE_LDO_PWRDWNB BIT(1U)
40#define DRDU2_U2CTRL_CORERDY BIT(0U)
41
42#define DRDU2_STRAP_CTRL 0x18U
43#define DRDU2_FORCE_HOST_MODE BIT(5U)
44#define DRDU2_FORCE_DEVICE_MODE BIT(4U)
45#define BDC_USB_STP_SPD_MASK 0x7U
46#define BDC_USB_STP_SPD_OFFSET 0U
47
48#define DRDU2_PWR_CTRL 0x1CU
49#define DRDU2_U2PHY_DFE_SWITCH_PWROKIN_I BIT(2U)
50#define DRDU2_U2PHY_DFE_SWITCH_PWRONIN_I BIT(1U)
51
52#define DRDU2_SOFT_RESET_CTRL 0x20U
53#define DRDU2_BDC_AXI_SOFT_RST_N BIT(0U)
54
55#define USB3H_U2PLL_NDIV_FRAC 0x4U
56
57#define USB3H_U2PLL_NDIV_INT 0x8U
58
59#define USB3H_U2PLL_CTRL 0xCU
60#define USB3H_U2PLL_LOCK BIT(6U)
61#define USB3H_U2PLL_RESETB BIT(5U)
62#define USB3H_U2PLL_PDIV_MASK 0xFU
63#define USB3H_U2PLL_PDIV_OFFSET 1U
64
65#define USB3H_U2PHY_CTRL 0x10U
66#define USB3H_U2PHY_ON_FLAG 22U
67#define USB3H_U2PHY_PCTL_MASK 0xFFFFU
68#define USB3H_U2PHY_PCTL_OFFSET 6U
69#define USB3H_U2PHY_IDDQ BIT(29U)
70#define USB3H_U2PHY_RESETB BIT(5U)
71#define USB3H_U2PHY_ISO BIT(4U)
72#define USB3H_U2AFE_BG_PWRDWNB BIT(3U)
73#define USB3H_U2AFE_PLL_PWRDWNB BIT(2U)
74#define USB3H_U2AFE_LDO_PWRDWNB BIT(1U)
75#define USB3H_U2CTRL_CORERDY BIT(0U)
76
77#define USB3H_U3PHY_CTRL 0x14U
78#define USB3H_U3SOFT_RST_N BIT(30U)
79#define USB3H_U3MDIO_RESETB_I BIT(29U)
80#define USB3H_U3POR_RESET_I BIT(28U)
81#define USB3H_U3PHY_PCTL_MASK 0xFFFFU
82#define USB3H_U3PHY_PCTL_OFFSET 2U
83#define USB3H_U3PHY_RESETB BIT(1U)
84
85#define USB3H_U3PHY_PLL_CTRL 0x18U
86#define USB3H_U3PLL_REFCLK_MASK 0x7U
87#define USB3H_U3PLL_REFCLK_OFFSET 4U
88#define USB3H_U3PLL_SS_LOCK BIT(3U)
89#define USB3H_U3PLL_SEQ_START BIT(2U)
90#define USB3H_U3SSPLL_SUSPEND_EN BIT(1U)
91#define USB3H_U3PLL_RESETB BIT(0U)
92
93#define USB3H_PWR_CTRL 0x28U
94#define USB3H_PWR_CTRL_OVERRIDE_I_R 4U
95#define USB3H_PWR_CTRL_U2PHY_DFE_SWITCH_PWROKIN BIT(11U)
96#define USB3H_PWR_CTRL_U2PHY_DFE_SWITCH_PWRONIN BIT(10U)
97
98#define USB3H_SOFT_RESET_CTRL 0x2CU
99#define USB3H_XHC_AXI_SOFT_RST_N BIT(1U)
100
101#define USB3H_PHY_PWR_CTRL 0x38U
102#define USB3H_DISABLE_USB30_P0 BIT(2U)
103#define USB3H_DISABLE_EUSB_P1 BIT(1U)
104#define USB3H_DISABLE_EUSB_P0 BIT(0U)
105
106
107#define DRDU3_U2PLL_NDIV_FRAC 0x4U
108
109#define DRDU3_U2PLL_NDIV_INT 0x8U
110
111#define DRDU3_U2PLL_CTRL 0xCU
112#define DRDU3_U2PLL_LOCK BIT(6U)
113#define DRDU3_U2PLL_RESETB BIT(5U)
114#define DRDU3_U2PLL_PDIV_MASK 0xFU
115#define DRDU3_U2PLL_PDIV_OFFSET 1U
116
117#define DRDU3_U2PHY_CTRL 0x10U
118#define DRDU3_U2PHY_IDDQ BIT(29U)
119#define DRDU3_U2PHY_ON_FLAG BIT(22U)
120#define DRDU3_U2PHY_PCTL_MASK 0xFFFFU
121#define DRDU3_U2PHY_PCTL_OFFSET 6U
122#define DRDU3_U2PHY_RESETB BIT(5U)
123#define DRDU3_U2PHY_ISO BIT(4U)
124#define DRDU3_U2AFE_BG_PWRDWNB BIT(3U)
125#define DRDU3_U2AFE_PLL_PWRDWNB BIT(2U)
126#define DRDU3_U2AFE_LDO_PWRDWNB BIT(1U)
127#define DRDU3_U2CTRL_CORERDY BIT(0U)
128
129#define DRDU3_U3PHY_CTRL 0x14U
130#define DRDU3_U3XHC_SOFT_RST_N BIT(31U)
131#define DRDU3_U3BDC_SOFT_RST_N BIT(30U)
132#define DRDU3_U3MDIO_RESETB_I BIT(29U)
133#define DRDU3_U3POR_RESET_I BIT(28U)
134#define DRDU3_U3PHY_PCTL_MASK 0xFFFFU
135#define DRDU3_U3PHY_PCTL_OFFSET 2U
136#define DRDU3_U3PHY_RESETB BIT(1U)
137
138#define DRDU3_U3PHY_PLL_CTRL 0x18U
139#define DRDU3_U3PLL_REFCLK_MASK 0x7U
140#define DRDU3_U3PLL_REFCLK_OFFSET 4U
141#define DRDU3_U3PLL_SS_LOCK BIT(3U)
142#define DRDU3_U3PLL_SEQ_START BIT(2U)
143#define DRDU3_U3SSPLL_SUSPEND_EN BIT(1U)
144#define DRDU3_U3PLL_RESETB BIT(0U)
145
146#define DRDU3_STRAP_CTRL 0x28U
147#define BDC_USB_STP_SPD_MASK 0x7U
148#define BDC_USB_STP_SPD_OFFSET 0U
149#define BDC_USB_STP_SPD_SS 0x0U
150#define BDC_USB_STP_SPD_HS 0x2U
151
152#define DRDU3_PWR_CTRL 0x2cU
153#define DRDU3_U2PHY_DFE_SWITCH_PWROKIN BIT(12U)
154#define DRDU3_U2PHY_DFE_SWITCH_PWRONIN BIT(11U)
155#define DRDU3_PWR_CTRL_OVERRIDE_I_R 4U
156
157#define DRDU3_SOFT_RESET_CTRL 0x30U
158#define DRDU3_XHC_AXI_SOFT_RST_N BIT(1U)
159#define DRDU3_BDC_AXI_SOFT_RST_N BIT(0U)
160
161#define DRDU3_PHY_PWR_CTRL 0x3cU
162#define DRDU3_DISABLE_USB30_P0 BIT(2U)
163#define DRDU3_DISABLE_EUSB_P1 BIT(1U)
164#define DRDU3_DISABLE_EUSB_P0 BIT(0U)
165
166#define PLL_REFCLK_PAD 0x0U
167#define PLL_REFCLK_25MHZ 0x1U
168#define PLL_REFCLK_96MHZ 0x2U
169#define PLL_REFCLK_INTERNAL 0x3U
170/* USB PLL lock time out for 10 ms */
171#define PLL_LOCK_RETRY_COUNT 10000U
172
173
174#define U2PLL_NDIV_INT_VAL 0x13U
175#define U2PLL_NDIV_FRAC_VAL 0x1005U
176#define U2PLL_PDIV_VAL 0x1U
177/*
178 * Using external FSM
179 * BIT-3:2: device mode; mode is not effect
180 * BIT-1: soft reset active low
181 */
182#define U2PHY_PCTL_VAL 0x0003U
183/* Non-driving signal low */
184#define U2PHY_PCTL_NON_DRV_LOW 0x0002U
185#define U3PHY_PCTL_VAL 0x0006U
186
187#define MAX_NR_PORTS 3U
188
189#define USB3H_DRDU2_PHY 1U
190#define DRDU3_PHY 2U
191
192#define USB_HOST_MODE 1U
193#define USB_DEV_MODE 2U
194
195#define USB3SS_PORT 0U
196#define DRDU2_PORT 1U
197#define USB3HS_PORT 2U
198
199#define DRD3SS_PORT 0U
200#define DRD3HS_PORT 1U
201
202#define SR_USB_PHY_COUNT 2U
203
204#define DRDU3_PIPE_CTRL 0x68500000U
205#define DRDU3H_XHC_REGS_CPLIVER 0x68501000U
206#define USB3H_PIPE_CTRL 0x68510000U
207#define DRD2U3H_XHC_REGS_CPLIVER 0x68511000U
208#define DRDU2_U2PLL_NDIV_FRAC 0x68520000U
209
210#define AXI_DEBUG_CTRL 0x68500038U
211#define AXI_DBG_CTRL_SSPHY_DRD_MODE_DISABLE BIT(12U)
212
213#define USB3H_DEBUG_CTRL 0x68510034U
214#define USB3H_DBG_CTRL_SSPHY_DRD_MODE_DISABLE BIT(7U)
215
216typedef struct _usb_phy_port usb_phy_port_t;
217
218typedef struct {
219 uint32_t drdu2reg;
220 uint32_t usb3hreg;
221 uint32_t drdu3reg;
222 uint32_t phy_id;
223 uint32_t ports_enabled;
224 uint32_t initialized;
225 usb_phy_port_t *phy_port;
226} usb_phy_t;
227
228struct _usb_phy_port {
229 uint32_t port_id;
230 uint32_t mode;
231 uint32_t enabled;
232 usb_phy_t *p;
233};
234
235struct u2_phy_ext_fsm {
236 uint32_t pll_ctrl_reg;
237 uint32_t phy_ctrl_reg;
238 uint32_t phy_iddq;
239 uint32_t pwr_ctrl_reg;
240 uint32_t pwr_okin;
241 uint32_t pwr_onin;
242};
243
244#endif /* USB_PHY_H */