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