Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2014-2020, NVIDIA CORPORATION.  All rights reserved.
0004  * Copyright (C) 2015 Google, Inc.
0005  */
0006 
0007 #include <linux/clk.h>
0008 #include <linux/clk/tegra.h>
0009 #include <linux/delay.h>
0010 #include <linux/io.h>
0011 #include <linux/mailbox_client.h>
0012 #include <linux/module.h>
0013 #include <linux/of.h>
0014 #include <linux/of_platform.h>
0015 #include <linux/phy/phy.h>
0016 #include <linux/platform_device.h>
0017 #include <linux/regmap.h>
0018 #include <linux/regulator/consumer.h>
0019 #include <linux/reset.h>
0020 #include <linux/slab.h>
0021 
0022 #include <soc/tegra/fuse.h>
0023 
0024 #include "xusb.h"
0025 
0026 #define FUSE_SKU_CALIB_HS_CURR_LEVEL_PADX_SHIFT(x) \
0027                     ((x) ? (11 + ((x) - 1) * 6) : 0)
0028 #define FUSE_SKU_CALIB_HS_CURR_LEVEL_PAD_MASK 0x3f
0029 #define FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_SHIFT 7
0030 #define FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_MASK 0xf
0031 
0032 #define FUSE_USB_CALIB_EXT_RPD_CTRL_SHIFT 0
0033 #define FUSE_USB_CALIB_EXT_RPD_CTRL_MASK 0x1f
0034 
0035 #define XUSB_PADCTL_USB2_PAD_MUX 0x004
0036 #define XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_SHIFT 16
0037 #define XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_MASK 0x3
0038 #define XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_XUSB 0x1
0039 #define XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_SHIFT 18
0040 #define XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_MASK 0x3
0041 #define XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_XUSB 0x1
0042 
0043 #define XUSB_PADCTL_USB2_PORT_CAP 0x008
0044 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DISABLED(x) (0x0 << ((x) * 4))
0045 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_HOST(x) (0x1 << ((x) * 4))
0046 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DEVICE(x) (0x2 << ((x) * 4))
0047 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_OTG(x) (0x3 << ((x) * 4))
0048 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_MASK(x) (0x3 << ((x) * 4))
0049 
0050 #define XUSB_PADCTL_SS_PORT_MAP 0x014
0051 #define XUSB_PADCTL_SS_PORT_MAP_PORTX_INTERNAL(x) (1 << (((x) * 5) + 4))
0052 #define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_SHIFT(x) ((x) * 5)
0053 #define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK(x) (0x7 << ((x) * 5))
0054 #define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(x, v) (((v) & 0x7) << ((x) * 5))
0055 #define XUSB_PADCTL_SS_PORT_MAP_PORT_DISABLED 0x7
0056 
0057 #define XUSB_PADCTL_ELPG_PROGRAM_0 0x20
0058 #define   USB2_PORT_WAKE_INTERRUPT_ENABLE(x)      BIT((x))
0059 #define   USB2_PORT_WAKEUP_EVENT(x)               BIT((x) + 7)
0060 #define   SS_PORT_WAKE_INTERRUPT_ENABLE(x)        BIT((x) + 14)
0061 #define   SS_PORT_WAKEUP_EVENT(x)                 BIT((x) + 21)
0062 #define   USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(x) BIT((x) + 28)
0063 #define   USB2_HSIC_PORT_WAKEUP_EVENT(x)          BIT((x) + 30)
0064 #define   ALL_WAKE_EVENTS ( \
0065         USB2_PORT_WAKEUP_EVENT(0) | USB2_PORT_WAKEUP_EVENT(1) | \
0066         USB2_PORT_WAKEUP_EVENT(2) | USB2_PORT_WAKEUP_EVENT(3) | \
0067         SS_PORT_WAKEUP_EVENT(0) | SS_PORT_WAKEUP_EVENT(1) | \
0068         SS_PORT_WAKEUP_EVENT(2) | SS_PORT_WAKEUP_EVENT(3) | \
0069         USB2_HSIC_PORT_WAKEUP_EVENT(0))
0070 
0071 #define XUSB_PADCTL_ELPG_PROGRAM1 0x024
0072 #define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN (1 << 31)
0073 #define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN_EARLY (1 << 30)
0074 #define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN (1 << 29)
0075 #define XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(x) (1 << (2 + (x) * 3))
0076 #define XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(x) \
0077                             (1 << (1 + (x) * 3))
0078 #define XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(x) (1 << ((x) * 3))
0079 
0080 #define XUSB_PADCTL_USB3_PAD_MUX 0x028
0081 #define XUSB_PADCTL_USB3_PAD_MUX_PCIE_IDDQ_DISABLE(x) (1 << (1 + (x)))
0082 #define XUSB_PADCTL_USB3_PAD_MUX_SATA_IDDQ_DISABLE(x) (1 << (8 + (x)))
0083 
0084 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL0(x) (0x080 + (x) * 0x40)
0085 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIP (1 << 18)
0086 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIN (1 << 22)
0087 
0088 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL1(x) (0x084 + (x) * 0x40)
0089 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_SHIFT 7
0090 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_MASK 0x3
0091 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_VAL 0x1
0092 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_FIX18 (1 << 6)
0093 
0094 #define XUSB_PADCTL_USB2_OTG_PADX_CTL0(x) (0x088 + (x) * 0x40)
0095 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD_ZI (1 << 29)
0096 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD2 (1 << 27)
0097 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD (1 << 26)
0098 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_SHIFT 0
0099 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_MASK 0x3f
0100 
0101 #define XUSB_PADCTL_USB2_OTG_PADX_CTL1(x) (0x08c + (x) * 0x40)
0102 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_SHIFT 26
0103 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_MASK 0x1f
0104 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_SHIFT 3
0105 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_MASK 0xf
0106 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DR (1 << 2)
0107 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DISC_OVRD (1 << 1)
0108 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_CHRP_OVRD (1 << 0)
0109 #define   RPD_CTRL(x)                      (((x) & 0x1f) << 26)
0110 #define   RPD_CTRL_VALUE(x)                (((x) >> 26) & 0x1f)
0111 
0112 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0 0x284
0113 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_PD (1 << 11)
0114 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_SHIFT 3
0115 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_MASK 0x7
0116 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_VAL 0x7
0117 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_SHIFT 0
0118 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_MASK 0x7
0119 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_VAL 0x2
0120 
0121 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1 0x288
0122 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_PD_TRK (1 << 26)
0123 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_SHIFT 19
0124 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_MASK 0x7f
0125 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_VAL 0x0a
0126 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_SHIFT 12
0127 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_MASK 0x7f
0128 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_VAL 0x1e
0129 #define   TCTRL_VALUE(x)                (((x) & 0x3f) >> 0)
0130 #define   PCTRL_VALUE(x)                (((x) >> 6) & 0x3f)
0131 
0132 #define XUSB_PADCTL_HSIC_PADX_CTL0(x) (0x300 + (x) * 0x20)
0133 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPU_STROBE (1 << 18)
0134 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA1 (1 << 17)
0135 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA0 (1 << 16)
0136 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPD_STROBE (1 << 15)
0137 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA1 (1 << 14)
0138 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA0 (1 << 13)
0139 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_STROBE (1 << 9)
0140 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA1 (1 << 8)
0141 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA0 (1 << 7)
0142 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_STROBE (1 << 6)
0143 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA1 (1 << 5)
0144 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA0 (1 << 4)
0145 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_STROBE (1 << 3)
0146 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA1 (1 << 2)
0147 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA0 (1 << 1)
0148 
0149 #define XUSB_PADCTL_HSIC_PADX_CTL1(x) (0x304 + (x) * 0x20)
0150 #define XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_SHIFT 0
0151 #define XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_MASK 0xf
0152 
0153 #define XUSB_PADCTL_HSIC_PADX_CTL2(x) (0x308 + (x) * 0x20)
0154 #define XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_SHIFT 8
0155 #define XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_MASK 0xf
0156 #define XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_SHIFT 0
0157 #define XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_MASK 0xff
0158 
0159 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL 0x340
0160 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_PD_TRK (1 << 19)
0161 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_SHIFT 12
0162 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_MASK 0x7f
0163 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_VAL 0x0a
0164 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_SHIFT 5
0165 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_MASK 0x7f
0166 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_VAL 0x1e
0167 
0168 #define XUSB_PADCTL_HSIC_STRB_TRIM_CONTROL 0x344
0169 
0170 #define XUSB_PADCTL_UPHY_PLL_P0_CTL1 0x360
0171 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT 20
0172 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_MASK 0xff
0173 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_USB_VAL 0x19
0174 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SATA_VAL 0x1e
0175 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_SHIFT 16
0176 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_MASK 0x3
0177 #define XUSB_PADCTL_UPHY_PLL_CTL1_LOCKDET_STATUS (1 << 15)
0178 #define XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD (1 << 4)
0179 #define XUSB_PADCTL_UPHY_PLL_CTL1_ENABLE (1 << 3)
0180 #define XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_SHIFT 1
0181 #define XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_MASK 0x3
0182 #define XUSB_PADCTL_UPHY_PLL_CTL1_IDDQ (1 << 0)
0183 
0184 #define XUSB_PADCTL_UPHY_PLL_P0_CTL2 0x364
0185 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT 4
0186 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_MASK 0xffffff
0187 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_VAL 0x136
0188 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD (1 << 2)
0189 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE (1 << 1)
0190 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN (1 << 0)
0191 
0192 #define XUSB_PADCTL_UPHY_PLL_P0_CTL4 0x36c
0193 #define XUSB_PADCTL_UPHY_PLL_CTL4_XDIGCLK_EN (1 << 19)
0194 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_EN (1 << 15)
0195 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT 12
0196 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_MASK 0x3
0197 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_USB_VAL 0x2
0198 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SATA_VAL 0x0
0199 #define XUSB_PADCTL_UPHY_PLL_CTL4_REFCLKBUF_EN (1 << 8)
0200 #define XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_SHIFT 4
0201 #define XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_MASK 0xf
0202 
0203 #define XUSB_PADCTL_UPHY_PLL_P0_CTL5 0x370
0204 #define XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT 16
0205 #define XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_MASK 0xff
0206 #define XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_VAL 0x2a
0207 
0208 #define XUSB_PADCTL_UPHY_PLL_P0_CTL8 0x37c
0209 #define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE (1 << 31)
0210 #define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD (1 << 15)
0211 #define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN (1 << 13)
0212 #define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN (1 << 12)
0213 
0214 #define XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL1(x) (0x460 + (x) * 0x40)
0215 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_SHIFT 20
0216 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_MASK 0x3
0217 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_VAL 0x1
0218 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_TERM_EN BIT(18)
0219 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_MODE_OVRD BIT(13)
0220 
0221 #define XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(x) (0x464 + (x) * 0x40)
0222 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ BIT(0)
0223 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ_OVRD BIT(1)
0224 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_MASK GENMASK(5, 4)
0225 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_VAL GENMASK(5, 4)
0226 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_PWR_OVRD BIT(24)
0227 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ BIT(8)
0228 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ_OVRD BIT(9)
0229 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_MASK GENMASK(13, 12)
0230 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_VAL GENMASK(13, 12)
0231 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_PWR_OVRD BIT(25)
0232 
0233 #define XUSB_PADCTL_UPHY_PLL_S0_CTL1 0x860
0234 
0235 #define XUSB_PADCTL_UPHY_PLL_S0_CTL2 0x864
0236 
0237 #define XUSB_PADCTL_UPHY_PLL_S0_CTL4 0x86c
0238 
0239 #define XUSB_PADCTL_UPHY_PLL_S0_CTL5 0x870
0240 
0241 #define XUSB_PADCTL_UPHY_PLL_S0_CTL8 0x87c
0242 
0243 #define XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL1 0x960
0244 #define XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL2 0x964
0245 
0246 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL1(x) (0xa60 + (x) * 0x40)
0247 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_SHIFT 16
0248 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_MASK 0x3
0249 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_VAL 0x2
0250 
0251 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL2(x) (0xa64 + (x) * 0x40)
0252 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_SHIFT 0
0253 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_MASK 0xffff
0254 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_VAL 0x00fc
0255 
0256 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL3(x) (0xa68 + (x) * 0x40)
0257 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL3_RX_DFE_VAL 0xc0077f1f
0258 
0259 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL4(x) (0xa6c + (x) * 0x40)
0260 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_SHIFT 16
0261 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_MASK 0xffff
0262 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_VAL 0x01c7
0263 
0264 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL6(x) (0xa74 + (x) * 0x40)
0265 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL6_RX_EQ_CTRL_H_VAL 0xfcf01368
0266 
0267 #define XUSB_PADCTL_USB2_VBUS_ID 0xc60
0268 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON (1 << 14)
0269 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT 18
0270 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_MASK 0xf
0271 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_FLOATING 8
0272 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_GROUNDED 0
0273 
0274 /* USB2 SLEEPWALK registers */
0275 #define UTMIP(_port, _offset1, _offset2) \
0276         (((_port) <= 2) ? (_offset1) : (_offset2))
0277 
0278 #define PMC_UTMIP_UHSIC_SLEEP_CFG(x)    UTMIP(x, 0x1fc, 0x4d0)
0279 #define   UTMIP_MASTER_ENABLE(x)        UTMIP(x, BIT(8 * (x)), BIT(0))
0280 #define   UTMIP_FSLS_USE_PMC(x)         UTMIP(x, BIT(8 * (x) + 1), \
0281                             BIT(1))
0282 #define   UTMIP_PCTRL_USE_PMC(x)        UTMIP(x, BIT(8 * (x) + 2), \
0283                             BIT(2))
0284 #define   UTMIP_TCTRL_USE_PMC(x)        UTMIP(x, BIT(8 * (x) + 3), \
0285                             BIT(3))
0286 #define   UTMIP_WAKE_VAL(_port, _value)     (((_value) & 0xf) << \
0287                     (UTMIP(_port, 8 * (_port) + 4, 4)))
0288 #define   UTMIP_WAKE_VAL_NONE(_port)        UTMIP_WAKE_VAL(_port, 12)
0289 #define   UTMIP_WAKE_VAL_ANY(_port)     UTMIP_WAKE_VAL(_port, 15)
0290 
0291 #define PMC_UTMIP_UHSIC_SLEEP_CFG1  (0x4d0)
0292 #define   UTMIP_RPU_SWITC_LOW_USE_PMC_PX(x) BIT((x) + 8)
0293 #define   UTMIP_RPD_CTRL_USE_PMC_PX(x)      BIT((x) + 16)
0294 
0295 #define PMC_UTMIP_MASTER_CONFIG     (0x274)
0296 #define   UTMIP_PWR(x)              UTMIP(x, BIT(x), BIT(4))
0297 #define   UHSIC_PWR             BIT(3)
0298 
0299 #define PMC_USB_DEBOUNCE_DEL        (0xec)
0300 #define   DEBOUNCE_VAL(x)           (((x) & 0xffff) << 0)
0301 #define   UTMIP_LINE_DEB_CNT(x)         (((x) & 0xf) << 16)
0302 #define   UHSIC_LINE_DEB_CNT(x)         (((x) & 0xf) << 20)
0303 
0304 #define PMC_UTMIP_UHSIC_FAKE(x)     UTMIP(x, 0x218, 0x294)
0305 #define   UTMIP_FAKE_USBOP_VAL(x)       UTMIP(x, BIT(4 * (x)), BIT(8))
0306 #define   UTMIP_FAKE_USBON_VAL(x)       UTMIP(x, BIT(4 * (x) + 1), \
0307                             BIT(9))
0308 #define   UTMIP_FAKE_USBOP_EN(x)        UTMIP(x, BIT(4 * (x) + 2), \
0309                             BIT(10))
0310 #define   UTMIP_FAKE_USBON_EN(x)        UTMIP(x, BIT(4 * (x) + 3), \
0311                             BIT(11))
0312 
0313 #define PMC_UTMIP_UHSIC_SLEEPWALK_CFG(x)    UTMIP(x, 0x200, 0x288)
0314 #define   UTMIP_LINEVAL_WALK_EN(x)      UTMIP(x, BIT(8 * (x) + 7), \
0315                             BIT(15))
0316 
0317 #define PMC_USB_AO          (0xf0)
0318 #define   USBOP_VAL_PD(x)           UTMIP(x, BIT(4 * (x)), BIT(20))
0319 #define   USBON_VAL_PD(x)           UTMIP(x, BIT(4 * (x) + 1), \
0320                             BIT(21))
0321 #define   STROBE_VAL_PD             BIT(12)
0322 #define   DATA0_VAL_PD              BIT(13)
0323 #define   DATA1_VAL_PD              BIT(24)
0324 
0325 #define PMC_UTMIP_UHSIC_SAVED_STATE(x)  UTMIP(x, 0x1f0, 0x280)
0326 #define   SPEED(_port, _value)          (((_value) & 0x3) << \
0327                         (UTMIP(_port, 8 * (_port), 8)))
0328 #define   UTMI_HS(_port)            SPEED(_port, 0)
0329 #define   UTMI_FS(_port)            SPEED(_port, 1)
0330 #define   UTMI_LS(_port)            SPEED(_port, 2)
0331 #define   UTMI_RST(_port)           SPEED(_port, 3)
0332 
0333 #define PMC_UTMIP_UHSIC_TRIGGERS        (0x1ec)
0334 #define   UTMIP_CLR_WALK_PTR(x)         UTMIP(x, BIT(x), BIT(16))
0335 #define   UTMIP_CAP_CFG(x)          UTMIP(x, BIT((x) + 4), BIT(17))
0336 #define   UTMIP_CLR_WAKE_ALARM(x)       UTMIP(x, BIT((x) + 12), \
0337                             BIT(19))
0338 #define   UHSIC_CLR_WALK_PTR            BIT(3)
0339 #define   UHSIC_CLR_WAKE_ALARM          BIT(15)
0340 
0341 #define PMC_UTMIP_SLEEPWALK_PX(x)   UTMIP(x, 0x204 + (4 * (x)), \
0342                             0x4e0)
0343 /* phase A */
0344 #define   UTMIP_USBOP_RPD_A         BIT(0)
0345 #define   UTMIP_USBON_RPD_A         BIT(1)
0346 #define   UTMIP_AP_A                BIT(4)
0347 #define   UTMIP_AN_A                BIT(5)
0348 #define   UTMIP_HIGHZ_A             BIT(6)
0349 /* phase B */
0350 #define   UTMIP_USBOP_RPD_B         BIT(8)
0351 #define   UTMIP_USBON_RPD_B         BIT(9)
0352 #define   UTMIP_AP_B                BIT(12)
0353 #define   UTMIP_AN_B                BIT(13)
0354 #define   UTMIP_HIGHZ_B             BIT(14)
0355 /* phase C */
0356 #define   UTMIP_USBOP_RPD_C         BIT(16)
0357 #define   UTMIP_USBON_RPD_C         BIT(17)
0358 #define   UTMIP_AP_C                BIT(20)
0359 #define   UTMIP_AN_C                BIT(21)
0360 #define   UTMIP_HIGHZ_C             BIT(22)
0361 /* phase D */
0362 #define   UTMIP_USBOP_RPD_D         BIT(24)
0363 #define   UTMIP_USBON_RPD_D         BIT(25)
0364 #define   UTMIP_AP_D                BIT(28)
0365 #define   UTMIP_AN_D                BIT(29)
0366 #define   UTMIP_HIGHZ_D             BIT(30)
0367 
0368 #define PMC_UTMIP_UHSIC_LINE_WAKEUP (0x26c)
0369 #define   UTMIP_LINE_WAKEUP_EN(x)       UTMIP(x, BIT(x), BIT(4))
0370 #define   UHSIC_LINE_WAKEUP_EN          BIT(3)
0371 
0372 #define PMC_UTMIP_TERM_PAD_CFG      (0x1f8)
0373 #define   PCTRL_VAL(x)              (((x) & 0x3f) << 1)
0374 #define   TCTRL_VAL(x)              (((x) & 0x3f) << 7)
0375 
0376 #define PMC_UTMIP_PAD_CFGX(x)       (0x4c0 + (4 * (x)))
0377 #define   RPD_CTRL_PX(x)            (((x) & 0x1f) << 22)
0378 
0379 #define PMC_UHSIC_SLEEP_CFG PMC_UTMIP_UHSIC_SLEEP_CFG(0)
0380 #define   UHSIC_MASTER_ENABLE           BIT(24)
0381 #define   UHSIC_WAKE_VAL(_value)        (((_value) & 0xf) << 28)
0382 #define   UHSIC_WAKE_VAL_SD10           UHSIC_WAKE_VAL(2)
0383 #define   UHSIC_WAKE_VAL_NONE           UHSIC_WAKE_VAL(12)
0384 
0385 #define PMC_UHSIC_FAKE          PMC_UTMIP_UHSIC_FAKE(0)
0386 #define   UHSIC_FAKE_STROBE_VAL         BIT(12)
0387 #define   UHSIC_FAKE_DATA_VAL           BIT(13)
0388 #define   UHSIC_FAKE_STROBE_EN          BIT(14)
0389 #define   UHSIC_FAKE_DATA_EN            BIT(15)
0390 
0391 #define PMC_UHSIC_SAVED_STATE       PMC_UTMIP_UHSIC_SAVED_STATE(0)
0392 #define   UHSIC_MODE(_value)            (((_value) & 0x1) << 24)
0393 #define   UHSIC_HS              UHSIC_MODE(0)
0394 #define   UHSIC_RST             UHSIC_MODE(1)
0395 
0396 #define PMC_UHSIC_SLEEPWALK_CFG     PMC_UTMIP_UHSIC_SLEEPWALK_CFG(0)
0397 #define   UHSIC_WAKE_WALK_EN            BIT(30)
0398 #define   UHSIC_LINEVAL_WALK_EN         BIT(31)
0399 
0400 #define PMC_UHSIC_SLEEPWALK_P0      (0x210)
0401 #define   UHSIC_DATA0_RPD_A         BIT(1)
0402 #define   UHSIC_DATA0_RPU_B         BIT(11)
0403 #define   UHSIC_DATA0_RPU_C         BIT(19)
0404 #define   UHSIC_DATA0_RPU_D         BIT(27)
0405 #define   UHSIC_STROBE_RPU_A            BIT(2)
0406 #define   UHSIC_STROBE_RPD_B            BIT(8)
0407 #define   UHSIC_STROBE_RPD_C            BIT(16)
0408 #define   UHSIC_STROBE_RPD_D            BIT(24)
0409 
0410 struct tegra210_xusb_fuse_calibration {
0411     u32 hs_curr_level[4];
0412     u32 hs_term_range_adj;
0413     u32 rpd_ctrl;
0414 };
0415 
0416 struct tegra210_xusb_padctl_context {
0417     u32 usb2_pad_mux;
0418     u32 usb2_port_cap;
0419     u32 ss_port_map;
0420     u32 usb3_pad_mux;
0421 };
0422 
0423 struct tegra210_xusb_padctl {
0424     struct tegra_xusb_padctl base;
0425     struct regmap *regmap;
0426 
0427     struct tegra210_xusb_fuse_calibration fuse;
0428     struct tegra210_xusb_padctl_context context;
0429 };
0430 
0431 static inline struct tegra210_xusb_padctl *
0432 to_tegra210_xusb_padctl(struct tegra_xusb_padctl *padctl)
0433 {
0434     return container_of(padctl, struct tegra210_xusb_padctl, base);
0435 }
0436 
0437 static const struct tegra_xusb_lane_map tegra210_usb3_map[] = {
0438     { 0, "pcie", 6 },
0439     { 1, "pcie", 5 },
0440     { 2, "pcie", 0 },
0441     { 2, "pcie", 3 },
0442     { 3, "pcie", 4 },
0443     { 3, "sata", 0 },
0444     { 0, NULL,   0 }
0445 };
0446 
0447 static int tegra210_usb3_lane_map(struct tegra_xusb_lane *lane)
0448 {
0449     const struct tegra_xusb_lane_map *map;
0450 
0451     for (map = tegra210_usb3_map; map->type; map++) {
0452         if (map->index == lane->index &&
0453             strcmp(map->type, lane->pad->soc->name) == 0) {
0454             dev_dbg(lane->pad->padctl->dev, "lane = %s map to port = usb3-%d\n",
0455                 lane->pad->soc->lanes[lane->index].name, map->port);
0456             return map->port;
0457         }
0458     }
0459 
0460     return -EINVAL;
0461 }
0462 
0463 /* must be called under padctl->lock */
0464 static int tegra210_pex_uphy_enable(struct tegra_xusb_padctl *padctl)
0465 {
0466     struct tegra_xusb_pcie_pad *pcie = to_pcie_pad(padctl->pcie);
0467     unsigned long timeout;
0468     u32 value;
0469     unsigned int i;
0470     int err;
0471 
0472     if (pcie->enable)
0473         return 0;
0474 
0475     err = clk_prepare_enable(pcie->pll);
0476     if (err < 0)
0477         return err;
0478 
0479     if (tegra210_plle_hw_sequence_is_enabled())
0480         goto skip_pll_init;
0481 
0482     err = reset_control_deassert(pcie->rst);
0483     if (err < 0)
0484         goto disable;
0485 
0486     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0487     value &= ~(XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_MASK <<
0488            XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT);
0489     value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_VAL <<
0490          XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT;
0491     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0492 
0493     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL5);
0494     value &= ~(XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_MASK <<
0495            XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT);
0496     value |= XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_VAL <<
0497          XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT;
0498     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL5);
0499 
0500     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0501     value |= XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD;
0502     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0503 
0504     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0505     value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD;
0506     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0507 
0508     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0509     value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD;
0510     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0511 
0512     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL4);
0513     value &= ~((XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_MASK <<
0514             XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT) |
0515            (XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_MASK <<
0516             XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_SHIFT));
0517     value |= (XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_USB_VAL <<
0518           XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT) |
0519          XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_EN;
0520     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL4);
0521 
0522     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0523     value &= ~((XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_MASK <<
0524             XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_SHIFT) |
0525            (XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_MASK <<
0526             XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT));
0527     value |= XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_USB_VAL <<
0528          XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT;
0529     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0530 
0531     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0532     value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_IDDQ;
0533     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0534 
0535     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0536     value &= ~(XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_MASK <<
0537            XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_SHIFT);
0538     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0539 
0540     usleep_range(10, 20);
0541 
0542     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL4);
0543     value |= XUSB_PADCTL_UPHY_PLL_CTL4_REFCLKBUF_EN;
0544     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL4);
0545 
0546     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0547     value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN;
0548     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0549 
0550     timeout = jiffies + msecs_to_jiffies(100);
0551 
0552     while (time_before(jiffies, timeout)) {
0553         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0554         if (value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE)
0555             break;
0556 
0557         usleep_range(10, 20);
0558     }
0559 
0560     if (time_after_eq(jiffies, timeout)) {
0561         err = -ETIMEDOUT;
0562         goto reset;
0563     }
0564 
0565     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0566     value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN;
0567     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0568 
0569     timeout = jiffies + msecs_to_jiffies(100);
0570 
0571     while (time_before(jiffies, timeout)) {
0572         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0573         if (!(value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE))
0574             break;
0575 
0576         usleep_range(10, 20);
0577     }
0578 
0579     if (time_after_eq(jiffies, timeout)) {
0580         err = -ETIMEDOUT;
0581         goto reset;
0582     }
0583 
0584     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0585     value |= XUSB_PADCTL_UPHY_PLL_CTL1_ENABLE;
0586     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0587 
0588     timeout = jiffies + msecs_to_jiffies(100);
0589 
0590     while (time_before(jiffies, timeout)) {
0591         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0592         if (value & XUSB_PADCTL_UPHY_PLL_CTL1_LOCKDET_STATUS)
0593             break;
0594 
0595         usleep_range(10, 20);
0596     }
0597 
0598     if (time_after_eq(jiffies, timeout)) {
0599         err = -ETIMEDOUT;
0600         goto reset;
0601     }
0602 
0603     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0604     value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN |
0605          XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN;
0606     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0607 
0608     timeout = jiffies + msecs_to_jiffies(100);
0609 
0610     while (time_before(jiffies, timeout)) {
0611         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0612         if (value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE)
0613             break;
0614 
0615         usleep_range(10, 20);
0616     }
0617 
0618     if (time_after_eq(jiffies, timeout)) {
0619         err = -ETIMEDOUT;
0620         goto reset;
0621     }
0622 
0623     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0624     value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN;
0625     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0626 
0627     timeout = jiffies + msecs_to_jiffies(100);
0628 
0629     while (time_before(jiffies, timeout)) {
0630         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0631         if (!(value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE))
0632             break;
0633 
0634         usleep_range(10, 20);
0635     }
0636 
0637     if (time_after_eq(jiffies, timeout)) {
0638         err = -ETIMEDOUT;
0639         goto reset;
0640     }
0641 
0642     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0643     value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN;
0644     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0645 
0646     tegra210_xusb_pll_hw_control_enable();
0647 
0648     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0649     value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD;
0650     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
0651 
0652     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0653     value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD;
0654     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
0655 
0656     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0657     value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD;
0658     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
0659 
0660     usleep_range(10, 20);
0661 
0662     tegra210_xusb_pll_hw_sequence_start();
0663 
0664 skip_pll_init:
0665     pcie->enable = true;
0666 
0667     for (i = 0; i < padctl->pcie->soc->num_lanes; i++) {
0668         value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
0669         value |= XUSB_PADCTL_USB3_PAD_MUX_PCIE_IDDQ_DISABLE(i);
0670         padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX);
0671     }
0672 
0673     return 0;
0674 
0675 reset:
0676     reset_control_assert(pcie->rst);
0677 disable:
0678     clk_disable_unprepare(pcie->pll);
0679     return err;
0680 }
0681 
0682 static void tegra210_pex_uphy_disable(struct tegra_xusb_padctl *padctl)
0683 {
0684     struct tegra_xusb_pcie_pad *pcie = to_pcie_pad(padctl->pcie);
0685     u32 value;
0686     unsigned int i;
0687 
0688     if (WARN_ON(!pcie->enable))
0689         return;
0690 
0691     pcie->enable = false;
0692 
0693     for (i = 0; i < padctl->pcie->soc->num_lanes; i++) {
0694         value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
0695         value &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_IDDQ_DISABLE(i);
0696         padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX);
0697     }
0698 
0699     clk_disable_unprepare(pcie->pll);
0700 }
0701 
0702 /* must be called under padctl->lock */
0703 static int tegra210_sata_uphy_enable(struct tegra_xusb_padctl *padctl)
0704 {
0705     struct tegra_xusb_sata_pad *sata = to_sata_pad(padctl->sata);
0706     struct tegra_xusb_lane *lane = tegra_xusb_find_lane(padctl, "sata", 0);
0707     unsigned long timeout;
0708     u32 value;
0709     unsigned int i;
0710     int err;
0711     bool usb;
0712 
0713     if (sata->enable)
0714         return 0;
0715 
0716     if (IS_ERR(lane))
0717         return 0;
0718 
0719     if (tegra210_plle_hw_sequence_is_enabled())
0720         goto skip_pll_init;
0721 
0722     usb = tegra_xusb_lane_check(lane, "usb3-ss");
0723 
0724     err = clk_prepare_enable(sata->pll);
0725     if (err < 0)
0726         return err;
0727 
0728     err = reset_control_deassert(sata->rst);
0729     if (err < 0)
0730         goto disable;
0731 
0732     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0733     value &= ~(XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_MASK <<
0734            XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT);
0735     value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_VAL <<
0736          XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT;
0737     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0738 
0739     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL5);
0740     value &= ~(XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_MASK <<
0741            XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT);
0742     value |= XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_VAL <<
0743          XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT;
0744     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL5);
0745 
0746     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0747     value |= XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD;
0748     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0749 
0750     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0751     value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD;
0752     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0753 
0754     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0755     value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD;
0756     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0757 
0758     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL4);
0759     value &= ~((XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_MASK <<
0760             XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT) |
0761            (XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_MASK <<
0762             XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_SHIFT));
0763     value |= XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_EN;
0764 
0765     if (usb)
0766         value |= (XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_USB_VAL <<
0767               XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT);
0768     else
0769         value |= (XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SATA_VAL <<
0770               XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT);
0771 
0772     value &= ~XUSB_PADCTL_UPHY_PLL_CTL4_XDIGCLK_EN;
0773     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL4);
0774 
0775     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0776     value &= ~((XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_MASK <<
0777             XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_SHIFT) |
0778            (XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_MASK <<
0779             XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT));
0780 
0781     if (usb)
0782         value |= XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_USB_VAL <<
0783              XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT;
0784     else
0785         value |= XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SATA_VAL <<
0786              XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT;
0787 
0788     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0789 
0790     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0791     value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_IDDQ;
0792     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0793 
0794     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0795     value &= ~(XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_MASK <<
0796            XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_SHIFT);
0797     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0798 
0799     usleep_range(10, 20);
0800 
0801     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL4);
0802     value |= XUSB_PADCTL_UPHY_PLL_CTL4_REFCLKBUF_EN;
0803     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL4);
0804 
0805     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0806     value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN;
0807     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0808 
0809     timeout = jiffies + msecs_to_jiffies(100);
0810 
0811     while (time_before(jiffies, timeout)) {
0812         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0813         if (value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE)
0814             break;
0815 
0816         usleep_range(10, 20);
0817     }
0818 
0819     if (time_after_eq(jiffies, timeout)) {
0820         err = -ETIMEDOUT;
0821         goto reset;
0822     }
0823 
0824     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0825     value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN;
0826     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0827 
0828     timeout = jiffies + msecs_to_jiffies(100);
0829 
0830     while (time_before(jiffies, timeout)) {
0831         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0832         if (!(value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE))
0833             break;
0834 
0835         usleep_range(10, 20);
0836     }
0837 
0838     if (time_after_eq(jiffies, timeout)) {
0839         err = -ETIMEDOUT;
0840         goto reset;
0841     }
0842 
0843     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0844     value |= XUSB_PADCTL_UPHY_PLL_CTL1_ENABLE;
0845     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0846 
0847     timeout = jiffies + msecs_to_jiffies(100);
0848 
0849     while (time_before(jiffies, timeout)) {
0850         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0851         if (value & XUSB_PADCTL_UPHY_PLL_CTL1_LOCKDET_STATUS)
0852             break;
0853 
0854         usleep_range(10, 20);
0855     }
0856 
0857     if (time_after_eq(jiffies, timeout)) {
0858         err = -ETIMEDOUT;
0859         goto reset;
0860     }
0861 
0862     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0863     value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN |
0864          XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN;
0865     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0866 
0867     timeout = jiffies + msecs_to_jiffies(100);
0868 
0869     while (time_before(jiffies, timeout)) {
0870         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0871         if (value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE)
0872             break;
0873 
0874         usleep_range(10, 20);
0875     }
0876 
0877     if (time_after_eq(jiffies, timeout)) {
0878         err = -ETIMEDOUT;
0879         goto reset;
0880     }
0881 
0882     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0883     value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN;
0884     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0885 
0886     timeout = jiffies + msecs_to_jiffies(100);
0887 
0888     while (time_before(jiffies, timeout)) {
0889         value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0890         if (!(value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE))
0891             break;
0892 
0893         usleep_range(10, 20);
0894     }
0895 
0896     if (time_after_eq(jiffies, timeout)) {
0897         err = -ETIMEDOUT;
0898         goto reset;
0899     }
0900 
0901     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0902     value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN;
0903     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0904 
0905     tegra210_sata_pll_hw_control_enable();
0906 
0907     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0908     value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD;
0909     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
0910 
0911     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0912     value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD;
0913     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
0914 
0915     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0916     value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD;
0917     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
0918 
0919     usleep_range(10, 20);
0920 
0921     tegra210_sata_pll_hw_sequence_start();
0922 
0923 skip_pll_init:
0924     sata->enable = true;
0925 
0926     for (i = 0; i < padctl->sata->soc->num_lanes; i++) {
0927         value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
0928         value |= XUSB_PADCTL_USB3_PAD_MUX_SATA_IDDQ_DISABLE(i);
0929         padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX);
0930     }
0931 
0932     return 0;
0933 
0934 reset:
0935     reset_control_assert(sata->rst);
0936 disable:
0937     clk_disable_unprepare(sata->pll);
0938     return err;
0939 }
0940 
0941 static void tegra210_sata_uphy_disable(struct tegra_xusb_padctl *padctl)
0942 {
0943     struct tegra_xusb_sata_pad *sata = to_sata_pad(padctl->sata);
0944     u32 value;
0945     unsigned int i;
0946 
0947     if (WARN_ON(!sata->enable))
0948         return;
0949 
0950     sata->enable = false;
0951 
0952     for (i = 0; i < padctl->sata->soc->num_lanes; i++) {
0953         value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
0954         value &= ~XUSB_PADCTL_USB3_PAD_MUX_SATA_IDDQ_DISABLE(i);
0955         padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX);
0956     }
0957 
0958     clk_disable_unprepare(sata->pll);
0959 }
0960 
0961 static void tegra210_aux_mux_lp0_clamp_disable(struct tegra_xusb_padctl *padctl)
0962 {
0963     u32 value;
0964 
0965     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
0966     value &= ~XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN;
0967     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
0968 
0969     usleep_range(100, 200);
0970 
0971     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
0972     value &= ~XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN_EARLY;
0973     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
0974 
0975     usleep_range(100, 200);
0976 
0977     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
0978     value &= ~XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN;
0979     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
0980 }
0981 
0982 static void tegra210_aux_mux_lp0_clamp_enable(struct tegra_xusb_padctl *padctl)
0983 {
0984     u32 value;
0985 
0986     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
0987     value |= XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN;
0988     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
0989 
0990     usleep_range(100, 200);
0991 
0992     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
0993     value |= XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN_EARLY;
0994     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
0995 
0996     usleep_range(100, 200);
0997 
0998     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
0999     value |= XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN;
1000     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1001 }
1002 
1003 static int tegra210_uphy_init(struct tegra_xusb_padctl *padctl)
1004 {
1005     if (padctl->pcie)
1006         tegra210_pex_uphy_enable(padctl);
1007 
1008     if (padctl->sata)
1009         tegra210_sata_uphy_enable(padctl);
1010 
1011     if (!tegra210_plle_hw_sequence_is_enabled())
1012         tegra210_plle_hw_sequence_start();
1013     else
1014         dev_dbg(padctl->dev, "PLLE is already in HW control\n");
1015 
1016     tegra210_aux_mux_lp0_clamp_disable(padctl);
1017 
1018     return 0;
1019 }
1020 
1021 static void __maybe_unused
1022 tegra210_uphy_deinit(struct tegra_xusb_padctl *padctl)
1023 {
1024     tegra210_aux_mux_lp0_clamp_enable(padctl);
1025 
1026     if (padctl->sata)
1027         tegra210_sata_uphy_disable(padctl);
1028 
1029     if (padctl->pcie)
1030         tegra210_pex_uphy_disable(padctl);
1031 }
1032 
1033 static int tegra210_hsic_set_idle(struct tegra_xusb_padctl *padctl,
1034                   unsigned int index, bool idle)
1035 {
1036     u32 value;
1037 
1038     value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL0(index));
1039 
1040     value &= ~(XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA0 |
1041            XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA1 |
1042            XUSB_PADCTL_HSIC_PAD_CTL0_RPD_STROBE);
1043 
1044     if (idle)
1045         value |= XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA0 |
1046              XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA1 |
1047              XUSB_PADCTL_HSIC_PAD_CTL0_RPU_STROBE;
1048     else
1049         value &= ~(XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA0 |
1050                XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA1 |
1051                XUSB_PADCTL_HSIC_PAD_CTL0_RPU_STROBE);
1052 
1053     padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL0(index));
1054 
1055     return 0;
1056 }
1057 
1058 static int tegra210_usb3_enable_phy_sleepwalk(struct tegra_xusb_lane *lane,
1059                           enum usb_device_speed speed)
1060 {
1061     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1062     int port = tegra210_usb3_lane_map(lane);
1063     struct device *dev = padctl->dev;
1064     u32 value;
1065 
1066     if (port < 0) {
1067         dev_err(dev, "invalid usb3 port number\n");
1068         return -EINVAL;
1069     }
1070 
1071     mutex_lock(&padctl->lock);
1072 
1073     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1074     value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(port);
1075     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1076 
1077     usleep_range(100, 200);
1078 
1079     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1080     value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(port);
1081     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1082 
1083     usleep_range(250, 350);
1084 
1085     mutex_unlock(&padctl->lock);
1086 
1087     return 0;
1088 }
1089 
1090 static int tegra210_usb3_disable_phy_sleepwalk(struct tegra_xusb_lane *lane)
1091 {
1092     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1093     int port = tegra210_usb3_lane_map(lane);
1094     struct device *dev = padctl->dev;
1095     u32 value;
1096 
1097     if (port < 0) {
1098         dev_err(dev, "invalid usb3 port number\n");
1099         return -EINVAL;
1100     }
1101 
1102     mutex_lock(&padctl->lock);
1103 
1104     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1105     value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(port);
1106     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1107 
1108     usleep_range(100, 200);
1109 
1110     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1111     value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(port);
1112     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1113 
1114     mutex_unlock(&padctl->lock);
1115 
1116     return 0;
1117 }
1118 
1119 static int tegra210_usb3_enable_phy_wake(struct tegra_xusb_lane *lane)
1120 {
1121     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1122     int port = tegra210_usb3_lane_map(lane);
1123     struct device *dev = padctl->dev;
1124     u32 value;
1125 
1126     if (port < 0) {
1127         dev_err(dev, "invalid usb3 port number\n");
1128         return -EINVAL;
1129     }
1130 
1131     mutex_lock(&padctl->lock);
1132 
1133     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1134     value &= ~ALL_WAKE_EVENTS;
1135     value |= SS_PORT_WAKEUP_EVENT(port);
1136     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1137 
1138     usleep_range(10, 20);
1139 
1140     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1141     value &= ~ALL_WAKE_EVENTS;
1142     value |= SS_PORT_WAKE_INTERRUPT_ENABLE(port);
1143     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1144 
1145     mutex_unlock(&padctl->lock);
1146 
1147     return 0;
1148 }
1149 
1150 static int tegra210_usb3_disable_phy_wake(struct tegra_xusb_lane *lane)
1151 {
1152     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1153     int port = tegra210_usb3_lane_map(lane);
1154     struct device *dev = padctl->dev;
1155     u32 value;
1156 
1157     if (port < 0) {
1158         dev_err(dev, "invalid usb3 port number\n");
1159         return -EINVAL;
1160     }
1161 
1162     mutex_lock(&padctl->lock);
1163 
1164     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1165     value &= ~ALL_WAKE_EVENTS;
1166     value &= ~SS_PORT_WAKE_INTERRUPT_ENABLE(port);
1167     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1168 
1169     usleep_range(10, 20);
1170 
1171     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1172     value &= ~ALL_WAKE_EVENTS;
1173     value |= SS_PORT_WAKEUP_EVENT(port);
1174     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1175 
1176     mutex_unlock(&padctl->lock);
1177 
1178     return 0;
1179 }
1180 
1181 static bool tegra210_usb3_phy_remote_wake_detected(struct tegra_xusb_lane *lane)
1182 {
1183     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1184     int index = tegra210_usb3_lane_map(lane);
1185     u32 value;
1186 
1187     if (index < 0)
1188         return false;
1189 
1190     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1191     if ((value & SS_PORT_WAKE_INTERRUPT_ENABLE(index)) && (value & SS_PORT_WAKEUP_EVENT(index)))
1192         return true;
1193 
1194     return false;
1195 }
1196 
1197 static int tegra210_utmi_enable_phy_wake(struct tegra_xusb_lane *lane)
1198 {
1199     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1200     unsigned int index = lane->index;
1201     u32 value;
1202 
1203     mutex_lock(&padctl->lock);
1204 
1205     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1206     value &= ~ALL_WAKE_EVENTS;
1207     value |= USB2_PORT_WAKEUP_EVENT(index);
1208     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1209 
1210     usleep_range(10, 20);
1211 
1212     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1213     value &= ~ALL_WAKE_EVENTS;
1214     value |= USB2_PORT_WAKE_INTERRUPT_ENABLE(index);
1215     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1216 
1217     mutex_unlock(&padctl->lock);
1218 
1219     return 0;
1220 }
1221 
1222 static int tegra210_utmi_disable_phy_wake(struct tegra_xusb_lane *lane)
1223 {
1224     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1225     unsigned int index = lane->index;
1226     u32 value;
1227 
1228     mutex_lock(&padctl->lock);
1229 
1230     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1231     value &= ~ALL_WAKE_EVENTS;
1232     value &= ~USB2_PORT_WAKE_INTERRUPT_ENABLE(index);
1233     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1234 
1235     usleep_range(10, 20);
1236 
1237     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1238     value &= ~ALL_WAKE_EVENTS;
1239     value |= USB2_PORT_WAKEUP_EVENT(index);
1240     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1241 
1242     mutex_unlock(&padctl->lock);
1243 
1244     return 0;
1245 }
1246 
1247 static bool tegra210_utmi_phy_remote_wake_detected(struct tegra_xusb_lane *lane)
1248 {
1249     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1250     unsigned int index = lane->index;
1251     u32 value;
1252 
1253     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1254     if ((value & USB2_PORT_WAKE_INTERRUPT_ENABLE(index)) &&
1255         (value & USB2_PORT_WAKEUP_EVENT(index)))
1256         return true;
1257 
1258     return false;
1259 }
1260 
1261 static int tegra210_hsic_enable_phy_wake(struct tegra_xusb_lane *lane)
1262 {
1263     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1264     unsigned int index = lane->index;
1265     u32 value;
1266 
1267     mutex_lock(&padctl->lock);
1268 
1269     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1270     value &= ~ALL_WAKE_EVENTS;
1271     value |= USB2_HSIC_PORT_WAKEUP_EVENT(index);
1272     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1273 
1274     usleep_range(10, 20);
1275 
1276     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1277     value &= ~ALL_WAKE_EVENTS;
1278     value |= USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(index);
1279     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1280 
1281     mutex_unlock(&padctl->lock);
1282 
1283     return 0;
1284 }
1285 
1286 static int tegra210_hsic_disable_phy_wake(struct tegra_xusb_lane *lane)
1287 {
1288     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1289     unsigned int index = lane->index;
1290     u32 value;
1291 
1292     mutex_lock(&padctl->lock);
1293 
1294     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1295     value &= ~ALL_WAKE_EVENTS;
1296     value &= ~USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(index);
1297     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1298 
1299     usleep_range(10, 20);
1300 
1301     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1302     value &= ~ALL_WAKE_EVENTS;
1303     value |= USB2_HSIC_PORT_WAKEUP_EVENT(index);
1304     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1305 
1306     mutex_unlock(&padctl->lock);
1307 
1308     return 0;
1309 }
1310 
1311 static bool tegra210_hsic_phy_remote_wake_detected(struct tegra_xusb_lane *lane)
1312 {
1313     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1314     unsigned int index = lane->index;
1315     u32 value;
1316 
1317     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1318     if ((value & USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(index)) &&
1319         (value & USB2_HSIC_PORT_WAKEUP_EVENT(index)))
1320         return true;
1321 
1322     return false;
1323 }
1324 
1325 #define padctl_pmc_readl(_priv, _offset)                        \
1326 ({                                          \
1327     u32 value;                                  \
1328     WARN(regmap_read(_priv->regmap, _offset, &value), "read %s failed\n", #_offset);\
1329     value;                                      \
1330 })
1331 
1332 #define padctl_pmc_writel(_priv, _value, _offset)                   \
1333     WARN(regmap_write(_priv->regmap, _offset, _value), "write %s failed\n", #_offset)
1334 
1335 static int tegra210_pmc_utmi_enable_phy_sleepwalk(struct tegra_xusb_lane *lane,
1336                           enum usb_device_speed speed)
1337 {
1338     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1339     struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1340     unsigned int port = lane->index;
1341     u32 value, tctrl, pctrl, rpd_ctrl;
1342 
1343     if (!priv->regmap)
1344         return -EOPNOTSUPP;
1345 
1346     if (speed > USB_SPEED_HIGH)
1347         return -EINVAL;
1348 
1349     value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
1350     tctrl = TCTRL_VALUE(value);
1351     pctrl = PCTRL_VALUE(value);
1352 
1353     value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(port));
1354     rpd_ctrl = RPD_CTRL_VALUE(value);
1355 
1356     /* ensure sleepwalk logic is disabled */
1357     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1358     value &= ~UTMIP_MASTER_ENABLE(port);
1359     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1360 
1361     /* ensure sleepwalk logics are in low power mode */
1362     value = padctl_pmc_readl(priv, PMC_UTMIP_MASTER_CONFIG);
1363     value |= UTMIP_PWR(port);
1364     padctl_pmc_writel(priv, value, PMC_UTMIP_MASTER_CONFIG);
1365 
1366     /* set debounce time */
1367     value = padctl_pmc_readl(priv, PMC_USB_DEBOUNCE_DEL);
1368     value &= ~UTMIP_LINE_DEB_CNT(~0);
1369     value |= UTMIP_LINE_DEB_CNT(0x1);
1370     padctl_pmc_writel(priv, value, PMC_USB_DEBOUNCE_DEL);
1371 
1372     /* ensure fake events of sleepwalk logic are desiabled */
1373     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_FAKE(port));
1374     value &= ~(UTMIP_FAKE_USBOP_VAL(port) | UTMIP_FAKE_USBON_VAL(port) |
1375            UTMIP_FAKE_USBOP_EN(port) | UTMIP_FAKE_USBON_EN(port));
1376     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_FAKE(port));
1377 
1378     /* ensure wake events of sleepwalk logic are not latched */
1379     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1380     value &= ~UTMIP_LINE_WAKEUP_EN(port);
1381     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1382 
1383     /* disable wake event triggers of sleepwalk logic */
1384     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1385     value &= ~UTMIP_WAKE_VAL(port, ~0);
1386     value |= UTMIP_WAKE_VAL_NONE(port);
1387     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1388 
1389     /* power down the line state detectors of the pad */
1390     value = padctl_pmc_readl(priv, PMC_USB_AO);
1391     value |= (USBOP_VAL_PD(port) | USBON_VAL_PD(port));
1392     padctl_pmc_writel(priv, value, PMC_USB_AO);
1393 
1394     /* save state per speed */
1395     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SAVED_STATE(port));
1396     value &= ~SPEED(port, ~0);
1397 
1398     switch (speed) {
1399     case USB_SPEED_HIGH:
1400         value |= UTMI_HS(port);
1401         break;
1402 
1403     case USB_SPEED_FULL:
1404         value |= UTMI_FS(port);
1405         break;
1406 
1407     case USB_SPEED_LOW:
1408         value |= UTMI_LS(port);
1409         break;
1410 
1411     default:
1412         value |= UTMI_RST(port);
1413         break;
1414     }
1415 
1416     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SAVED_STATE(port));
1417 
1418     /* enable the trigger of the sleepwalk logic */
1419     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEPWALK_CFG(port));
1420     value |= UTMIP_LINEVAL_WALK_EN(port);
1421     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEPWALK_CFG(port));
1422 
1423     /*
1424      * Reset the walk pointer and clear the alarm of the sleepwalk logic,
1425      * as well as capture the configuration of the USB2.0 pad.
1426      */
1427     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1428     value |= UTMIP_CLR_WALK_PTR(port) | UTMIP_CLR_WAKE_ALARM(port) | UTMIP_CAP_CFG(port);
1429     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_TRIGGERS);
1430 
1431     /* program electrical parameters read from XUSB PADCTL */
1432     value = padctl_pmc_readl(priv, PMC_UTMIP_TERM_PAD_CFG);
1433     value &= ~(TCTRL_VAL(~0) | PCTRL_VAL(~0));
1434     value |= (TCTRL_VAL(tctrl) | PCTRL_VAL(pctrl));
1435     padctl_pmc_writel(priv, value, PMC_UTMIP_TERM_PAD_CFG);
1436 
1437     value = padctl_pmc_readl(priv, PMC_UTMIP_PAD_CFGX(port));
1438     value &= ~RPD_CTRL_PX(~0);
1439     value |= RPD_CTRL_PX(rpd_ctrl);
1440     padctl_pmc_writel(priv, value, PMC_UTMIP_PAD_CFGX(port));
1441 
1442     /*
1443      * Set up the pull-ups and pull-downs of the signals during the four
1444      * stages of sleepwalk. If a device is connected, program sleepwalk
1445      * logic to maintain a J and keep driving K upon seeing remote wake.
1446      */
1447     value = padctl_pmc_readl(priv, PMC_UTMIP_SLEEPWALK_PX(port));
1448     value = UTMIP_USBOP_RPD_A | UTMIP_USBOP_RPD_B | UTMIP_USBOP_RPD_C | UTMIP_USBOP_RPD_D;
1449     value |= UTMIP_USBON_RPD_A | UTMIP_USBON_RPD_B | UTMIP_USBON_RPD_C | UTMIP_USBON_RPD_D;
1450 
1451     switch (speed) {
1452     case USB_SPEED_HIGH:
1453     case USB_SPEED_FULL:
1454         /* J state: D+/D- = high/low, K state: D+/D- = low/high */
1455         value |= UTMIP_HIGHZ_A;
1456         value |= UTMIP_AP_A;
1457         value |= UTMIP_AN_B | UTMIP_AN_C | UTMIP_AN_D;
1458         break;
1459 
1460     case USB_SPEED_LOW:
1461         /* J state: D+/D- = low/high, K state: D+/D- = high/low */
1462         value |= UTMIP_HIGHZ_A;
1463         value |= UTMIP_AN_A;
1464         value |= UTMIP_AP_B | UTMIP_AP_C | UTMIP_AP_D;
1465         break;
1466 
1467     default:
1468         value |= UTMIP_HIGHZ_A | UTMIP_HIGHZ_B | UTMIP_HIGHZ_C | UTMIP_HIGHZ_D;
1469         break;
1470     }
1471 
1472     padctl_pmc_writel(priv, value, PMC_UTMIP_SLEEPWALK_PX(port));
1473 
1474     /* power up the line state detectors of the pad */
1475     value = padctl_pmc_readl(priv, PMC_USB_AO);
1476     value &= ~(USBOP_VAL_PD(port) | USBON_VAL_PD(port));
1477     padctl_pmc_writel(priv, value, PMC_USB_AO);
1478 
1479     usleep_range(50, 100);
1480 
1481     /* switch the electric control of the USB2.0 pad to PMC */
1482     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1483     value |= UTMIP_FSLS_USE_PMC(port) | UTMIP_PCTRL_USE_PMC(port) | UTMIP_TCTRL_USE_PMC(port);
1484     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1485 
1486     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1487     value |= UTMIP_RPD_CTRL_USE_PMC_PX(port) | UTMIP_RPU_SWITC_LOW_USE_PMC_PX(port);
1488     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1489 
1490     /* set the wake signaling trigger events */
1491     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1492     value &= ~UTMIP_WAKE_VAL(port, ~0);
1493     value |= UTMIP_WAKE_VAL_ANY(port);
1494     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1495 
1496     /* enable the wake detection */
1497     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1498     value |= UTMIP_MASTER_ENABLE(port);
1499     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1500 
1501     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1502     value |= UTMIP_LINE_WAKEUP_EN(port);
1503     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1504 
1505     return 0;
1506 }
1507 
1508 static int tegra210_pmc_utmi_disable_phy_sleepwalk(struct tegra_xusb_lane *lane)
1509 {
1510     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1511     struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1512     unsigned int port = lane->index;
1513     u32 value;
1514 
1515     if (!priv->regmap)
1516         return -EOPNOTSUPP;
1517 
1518     /* disable the wake detection */
1519     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1520     value &= ~UTMIP_MASTER_ENABLE(port);
1521     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1522 
1523     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1524     value &= ~UTMIP_LINE_WAKEUP_EN(port);
1525     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1526 
1527     /* switch the electric control of the USB2.0 pad to XUSB or USB2 */
1528     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1529     value &= ~(UTMIP_FSLS_USE_PMC(port) | UTMIP_PCTRL_USE_PMC(port) |
1530            UTMIP_TCTRL_USE_PMC(port));
1531     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1532 
1533     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1534     value &= ~(UTMIP_RPD_CTRL_USE_PMC_PX(port) | UTMIP_RPU_SWITC_LOW_USE_PMC_PX(port));
1535     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1536 
1537     /* disable wake event triggers of sleepwalk logic */
1538     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1539     value &= ~UTMIP_WAKE_VAL(port, ~0);
1540     value |= UTMIP_WAKE_VAL_NONE(port);
1541     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1542 
1543     /* power down the line state detectors of the port */
1544     value = padctl_pmc_readl(priv, PMC_USB_AO);
1545     value |= (USBOP_VAL_PD(port) | USBON_VAL_PD(port));
1546     padctl_pmc_writel(priv, value, PMC_USB_AO);
1547 
1548     /* clear alarm of the sleepwalk logic */
1549     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1550     value |= UTMIP_CLR_WAKE_ALARM(port);
1551     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_TRIGGERS);
1552 
1553     return 0;
1554 }
1555 
1556 static int tegra210_pmc_hsic_enable_phy_sleepwalk(struct tegra_xusb_lane *lane,
1557                           enum usb_device_speed speed)
1558 {
1559     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1560     struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1561     u32 value;
1562 
1563     if (!priv->regmap)
1564         return -EOPNOTSUPP;
1565 
1566     /* ensure sleepwalk logic is disabled */
1567     value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1568     value &= ~UHSIC_MASTER_ENABLE;
1569     padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1570 
1571     /* ensure sleepwalk logics are in low power mode */
1572     value = padctl_pmc_readl(priv, PMC_UTMIP_MASTER_CONFIG);
1573     value |= UHSIC_PWR;
1574     padctl_pmc_writel(priv, value, PMC_UTMIP_MASTER_CONFIG);
1575 
1576     /* set debounce time */
1577     value = padctl_pmc_readl(priv, PMC_USB_DEBOUNCE_DEL);
1578     value &= ~UHSIC_LINE_DEB_CNT(~0);
1579     value |= UHSIC_LINE_DEB_CNT(0x1);
1580     padctl_pmc_writel(priv, value, PMC_USB_DEBOUNCE_DEL);
1581 
1582     /* ensure fake events of sleepwalk logic are desiabled */
1583     value = padctl_pmc_readl(priv, PMC_UHSIC_FAKE);
1584     value &= ~(UHSIC_FAKE_STROBE_VAL | UHSIC_FAKE_DATA_VAL |
1585            UHSIC_FAKE_STROBE_EN | UHSIC_FAKE_DATA_EN);
1586     padctl_pmc_writel(priv, value, PMC_UHSIC_FAKE);
1587 
1588     /* ensure wake events of sleepwalk logic are not latched */
1589     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1590     value &= ~UHSIC_LINE_WAKEUP_EN;
1591     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1592 
1593     /* disable wake event triggers of sleepwalk logic */
1594     value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1595     value &= ~UHSIC_WAKE_VAL(~0);
1596     value |= UHSIC_WAKE_VAL_NONE;
1597     padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1598 
1599     /* power down the line state detectors of the port */
1600     value = padctl_pmc_readl(priv, PMC_USB_AO);
1601     value |= STROBE_VAL_PD | DATA0_VAL_PD | DATA1_VAL_PD;
1602     padctl_pmc_writel(priv, value, PMC_USB_AO);
1603 
1604     /* save state, HSIC always comes up as HS */
1605     value = padctl_pmc_readl(priv, PMC_UHSIC_SAVED_STATE);
1606     value &= ~UHSIC_MODE(~0);
1607     value |= UHSIC_HS;
1608     padctl_pmc_writel(priv, value, PMC_UHSIC_SAVED_STATE);
1609 
1610     /* enable the trigger of the sleepwalk logic */
1611     value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEPWALK_CFG);
1612     value |= UHSIC_WAKE_WALK_EN | UHSIC_LINEVAL_WALK_EN;
1613     padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEPWALK_CFG);
1614 
1615     /*
1616      * Reset the walk pointer and clear the alarm of the sleepwalk logic,
1617      * as well as capture the configuration of the USB2.0 port.
1618      */
1619     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1620     value |= UHSIC_CLR_WALK_PTR | UHSIC_CLR_WAKE_ALARM;
1621     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_TRIGGERS);
1622 
1623     /*
1624      * Set up the pull-ups and pull-downs of the signals during the four
1625      * stages of sleepwalk. Maintain a HSIC IDLE and keep driving HSIC
1626      * RESUME upon remote wake.
1627      */
1628     value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEPWALK_P0);
1629     value = UHSIC_DATA0_RPD_A | UHSIC_DATA0_RPU_B | UHSIC_DATA0_RPU_C | UHSIC_DATA0_RPU_D |
1630         UHSIC_STROBE_RPU_A | UHSIC_STROBE_RPD_B | UHSIC_STROBE_RPD_C | UHSIC_STROBE_RPD_D;
1631     padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEPWALK_P0);
1632 
1633     /* power up the line state detectors of the port */
1634     value = padctl_pmc_readl(priv, PMC_USB_AO);
1635     value &= ~(STROBE_VAL_PD | DATA0_VAL_PD | DATA1_VAL_PD);
1636     padctl_pmc_writel(priv, value, PMC_USB_AO);
1637 
1638     usleep_range(50, 100);
1639 
1640     /* set the wake signaling trigger events */
1641     value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1642     value &= ~UHSIC_WAKE_VAL(~0);
1643     value |= UHSIC_WAKE_VAL_SD10;
1644     padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1645 
1646     /* enable the wake detection */
1647     value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1648     value |= UHSIC_MASTER_ENABLE;
1649     padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1650 
1651     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1652     value |= UHSIC_LINE_WAKEUP_EN;
1653     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1654 
1655     return 0;
1656 }
1657 
1658 static int tegra210_pmc_hsic_disable_phy_sleepwalk(struct tegra_xusb_lane *lane)
1659 {
1660     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1661     struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1662     u32 value;
1663 
1664     if (!priv->regmap)
1665         return -EOPNOTSUPP;
1666 
1667     /* disable the wake detection */
1668     value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1669     value &= ~UHSIC_MASTER_ENABLE;
1670     padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1671 
1672     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1673     value &= ~UHSIC_LINE_WAKEUP_EN;
1674     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1675 
1676     /* disable wake event triggers of sleepwalk logic */
1677     value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1678     value &= ~UHSIC_WAKE_VAL(~0);
1679     value |= UHSIC_WAKE_VAL_NONE;
1680     padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1681 
1682     /* power down the line state detectors of the port */
1683     value = padctl_pmc_readl(priv, PMC_USB_AO);
1684     value |= STROBE_VAL_PD | DATA0_VAL_PD | DATA1_VAL_PD;
1685     padctl_pmc_writel(priv, value, PMC_USB_AO);
1686 
1687     /* clear alarm of the sleepwalk logic */
1688     value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1689     value |= UHSIC_CLR_WAKE_ALARM;
1690     padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_TRIGGERS);
1691 
1692     return 0;
1693 }
1694 
1695 static int tegra210_usb3_set_lfps_detect(struct tegra_xusb_padctl *padctl,
1696                      unsigned int index, bool enable)
1697 {
1698     struct tegra_xusb_port *port;
1699     struct tegra_xusb_lane *lane;
1700     u32 value, offset;
1701 
1702     port = tegra_xusb_find_port(padctl, "usb3", index);
1703     if (!port)
1704         return -ENODEV;
1705 
1706     lane = port->lane;
1707 
1708     if (lane->pad == padctl->pcie)
1709         offset = XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL1(lane->index);
1710     else
1711         offset = XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL1;
1712 
1713     value = padctl_readl(padctl, offset);
1714 
1715     value &= ~((XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_MASK <<
1716             XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_SHIFT) |
1717            XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_TERM_EN |
1718            XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_MODE_OVRD);
1719 
1720     if (!enable) {
1721         value |= (XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_VAL <<
1722               XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_SHIFT) |
1723              XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_TERM_EN |
1724              XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_MODE_OVRD;
1725     }
1726 
1727     padctl_writel(padctl, value, offset);
1728 
1729     return 0;
1730 }
1731 
1732 #define TEGRA210_LANE(_name, _offset, _shift, _mask, _type)     \
1733     {                               \
1734         .name = _name,                      \
1735         .offset = _offset,                  \
1736         .shift = _shift,                    \
1737         .mask = _mask,                      \
1738         .num_funcs = ARRAY_SIZE(tegra210_##_type##_functions),  \
1739         .funcs = tegra210_##_type##_functions,          \
1740     }
1741 
1742 static const char *tegra210_usb2_functions[] = {
1743     "snps",
1744     "xusb",
1745     "uart"
1746 };
1747 
1748 static const struct tegra_xusb_lane_soc tegra210_usb2_lanes[] = {
1749     TEGRA210_LANE("usb2-0", 0x004,  0, 0x3, usb2),
1750     TEGRA210_LANE("usb2-1", 0x004,  2, 0x3, usb2),
1751     TEGRA210_LANE("usb2-2", 0x004,  4, 0x3, usb2),
1752     TEGRA210_LANE("usb2-3", 0x004,  6, 0x3, usb2),
1753 };
1754 
1755 static struct tegra_xusb_lane *
1756 tegra210_usb2_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
1757              unsigned int index)
1758 {
1759     struct tegra_xusb_usb2_lane *usb2;
1760     int err;
1761 
1762     usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
1763     if (!usb2)
1764         return ERR_PTR(-ENOMEM);
1765 
1766     INIT_LIST_HEAD(&usb2->base.list);
1767     usb2->base.soc = &pad->soc->lanes[index];
1768     usb2->base.index = index;
1769     usb2->base.pad = pad;
1770     usb2->base.np = np;
1771 
1772     err = tegra_xusb_lane_parse_dt(&usb2->base, np);
1773     if (err < 0) {
1774         kfree(usb2);
1775         return ERR_PTR(err);
1776     }
1777 
1778     return &usb2->base;
1779 }
1780 
1781 static void tegra210_usb2_lane_remove(struct tegra_xusb_lane *lane)
1782 {
1783     struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
1784 
1785     kfree(usb2);
1786 }
1787 
1788 static const struct tegra_xusb_lane_ops tegra210_usb2_lane_ops = {
1789     .probe = tegra210_usb2_lane_probe,
1790     .remove = tegra210_usb2_lane_remove,
1791     .enable_phy_sleepwalk = tegra210_pmc_utmi_enable_phy_sleepwalk,
1792     .disable_phy_sleepwalk = tegra210_pmc_utmi_disable_phy_sleepwalk,
1793     .enable_phy_wake = tegra210_utmi_enable_phy_wake,
1794     .disable_phy_wake = tegra210_utmi_disable_phy_wake,
1795     .remote_wake_detected = tegra210_utmi_phy_remote_wake_detected,
1796 };
1797 
1798 static int tegra210_usb2_phy_init(struct phy *phy)
1799 {
1800     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1801     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1802     unsigned int index = lane->index;
1803     struct tegra_xusb_usb2_port *port;
1804     int err;
1805     u32 value;
1806 
1807     port = tegra_xusb_find_usb2_port(padctl, index);
1808     if (!port) {
1809         dev_err(&phy->dev, "no port found for USB2 lane %u\n", index);
1810         return -ENODEV;
1811     }
1812 
1813     if (port->supply && port->mode == USB_DR_MODE_HOST) {
1814         err = regulator_enable(port->supply);
1815         if (err)
1816             return err;
1817     }
1818 
1819     mutex_lock(&padctl->lock);
1820 
1821     value = padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX);
1822     value &= ~(XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_MASK <<
1823            XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_SHIFT);
1824     value |= XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_XUSB <<
1825          XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_SHIFT;
1826     padctl_writel(padctl, value, XUSB_PADCTL_USB2_PAD_MUX);
1827 
1828     mutex_unlock(&padctl->lock);
1829 
1830     return 0;
1831 }
1832 
1833 static int tegra210_usb2_phy_exit(struct phy *phy)
1834 {
1835     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1836     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1837     struct tegra_xusb_usb2_port *port;
1838     int err;
1839 
1840     port = tegra_xusb_find_usb2_port(padctl, lane->index);
1841     if (!port) {
1842         dev_err(&phy->dev, "no port found for USB2 lane %u\n", lane->index);
1843         return -ENODEV;
1844     }
1845 
1846     if (port->supply && port->mode == USB_DR_MODE_HOST) {
1847         err = regulator_disable(port->supply);
1848         if (err)
1849             return err;
1850     }
1851 
1852     return 0;
1853 }
1854 
1855 static int tegra210_xusb_padctl_vbus_override(struct tegra_xusb_padctl *padctl,
1856                           bool status)
1857 {
1858     u32 value;
1859 
1860     dev_dbg(padctl->dev, "%s vbus override\n", status ? "set" : "clear");
1861 
1862     value = padctl_readl(padctl, XUSB_PADCTL_USB2_VBUS_ID);
1863 
1864     if (status) {
1865         value |= XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON;
1866         value &= ~(XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_MASK <<
1867                XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT);
1868         value |= XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_FLOATING <<
1869              XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT;
1870     } else {
1871         value &= ~XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON;
1872     }
1873 
1874     padctl_writel(padctl, value, XUSB_PADCTL_USB2_VBUS_ID);
1875 
1876     return 0;
1877 }
1878 
1879 static int tegra210_xusb_padctl_id_override(struct tegra_xusb_padctl *padctl,
1880                         bool status)
1881 {
1882     u32 value;
1883 
1884     dev_dbg(padctl->dev, "%s id override\n", status ? "set" : "clear");
1885 
1886     value = padctl_readl(padctl, XUSB_PADCTL_USB2_VBUS_ID);
1887 
1888     if (status) {
1889         if (value & XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON) {
1890             value &= ~XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON;
1891             padctl_writel(padctl, value, XUSB_PADCTL_USB2_VBUS_ID);
1892             usleep_range(1000, 2000);
1893 
1894             value = padctl_readl(padctl, XUSB_PADCTL_USB2_VBUS_ID);
1895         }
1896 
1897         value &= ~(XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_MASK <<
1898                XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT);
1899         value |= XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_GROUNDED <<
1900              XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT;
1901     } else {
1902         value &= ~(XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_MASK <<
1903                XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT);
1904         value |= XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_FLOATING <<
1905              XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT;
1906     }
1907 
1908     padctl_writel(padctl, value, XUSB_PADCTL_USB2_VBUS_ID);
1909 
1910     return 0;
1911 }
1912 
1913 static int tegra210_usb2_phy_set_mode(struct phy *phy, enum phy_mode mode,
1914                       int submode)
1915 {
1916     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1917     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1918     struct tegra_xusb_usb2_port *port = tegra_xusb_find_usb2_port(padctl,
1919                                 lane->index);
1920     int err = 0;
1921 
1922     mutex_lock(&padctl->lock);
1923 
1924     dev_dbg(&port->base.dev, "%s: mode %d", __func__, mode);
1925 
1926     if (mode == PHY_MODE_USB_OTG) {
1927         if (submode == USB_ROLE_HOST) {
1928             tegra210_xusb_padctl_id_override(padctl, true);
1929 
1930             err = regulator_enable(port->supply);
1931         } else if (submode == USB_ROLE_DEVICE) {
1932             tegra210_xusb_padctl_vbus_override(padctl, true);
1933         } else if (submode == USB_ROLE_NONE) {
1934             /*
1935              * When port is peripheral only or role transitions to
1936              * USB_ROLE_NONE from USB_ROLE_DEVICE, regulator is not
1937              * be enabled.
1938              */
1939             if (regulator_is_enabled(port->supply))
1940                 regulator_disable(port->supply);
1941 
1942             tegra210_xusb_padctl_id_override(padctl, false);
1943             tegra210_xusb_padctl_vbus_override(padctl, false);
1944         }
1945     }
1946 
1947     mutex_unlock(&padctl->lock);
1948 
1949     return err;
1950 }
1951 
1952 static int tegra210_usb2_phy_power_on(struct phy *phy)
1953 {
1954     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1955     struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
1956     struct tegra_xusb_usb2_pad *pad = to_usb2_pad(lane->pad);
1957     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1958     struct tegra210_xusb_padctl *priv;
1959     struct tegra_xusb_usb2_port *port;
1960     unsigned int index = lane->index;
1961     u32 value;
1962     int err;
1963 
1964     port = tegra_xusb_find_usb2_port(padctl, index);
1965     if (!port) {
1966         dev_err(&phy->dev, "no port found for USB2 lane %u\n", index);
1967         return -ENODEV;
1968     }
1969 
1970     priv = to_tegra210_xusb_padctl(padctl);
1971 
1972     mutex_lock(&padctl->lock);
1973 
1974     if (port->usb3_port_fake != -1) {
1975         value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP);
1976         value &= ~XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK(
1977                     port->usb3_port_fake);
1978         value |= XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(
1979                     port->usb3_port_fake, index);
1980         padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_MAP);
1981 
1982         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1983         value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(
1984                     port->usb3_port_fake);
1985         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1986 
1987         usleep_range(100, 200);
1988 
1989         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1990         value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(
1991                     port->usb3_port_fake);
1992         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1993 
1994         usleep_range(100, 200);
1995 
1996         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1997         value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(
1998                     port->usb3_port_fake);
1999         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2000     }
2001 
2002     value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2003     value &= ~((XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_MASK <<
2004             XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_SHIFT) |
2005            (XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_MASK <<
2006             XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_SHIFT));
2007     value |= (XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_VAL <<
2008           XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_SHIFT);
2009 
2010     if (tegra_sku_info.revision < TEGRA_REVISION_A02)
2011         value |=
2012             (XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_VAL <<
2013             XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_SHIFT);
2014 
2015     padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2016 
2017     value = padctl_readl(padctl, XUSB_PADCTL_USB2_PORT_CAP);
2018     value &= ~XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_MASK(index);
2019     if (port->mode == USB_DR_MODE_UNKNOWN)
2020         value |= XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DISABLED(index);
2021     else if (port->mode == USB_DR_MODE_PERIPHERAL)
2022         value |= XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DEVICE(index);
2023     else if (port->mode == USB_DR_MODE_HOST)
2024         value |= XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_HOST(index);
2025     else if (port->mode == USB_DR_MODE_OTG)
2026         value |= XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_OTG(index);
2027     padctl_writel(padctl, value, XUSB_PADCTL_USB2_PORT_CAP);
2028 
2029     value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
2030     value &= ~((XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_MASK <<
2031             XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_SHIFT) |
2032            XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD |
2033            XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD2 |
2034            XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD_ZI);
2035     value |= (priv->fuse.hs_curr_level[index] +
2036           usb2->hs_curr_level_offset) <<
2037          XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_SHIFT;
2038     padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
2039 
2040     value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
2041     value &= ~((XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_MASK <<
2042             XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_SHIFT) |
2043            (XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_MASK <<
2044             XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_SHIFT) |
2045            XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DR |
2046            XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_CHRP_OVRD |
2047            XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DISC_OVRD);
2048     value |= (priv->fuse.hs_term_range_adj <<
2049           XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_SHIFT) |
2050          (priv->fuse.rpd_ctrl <<
2051           XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_SHIFT);
2052     padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
2053 
2054     value = padctl_readl(padctl,
2055                  XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL1(index));
2056     value &= ~(XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_MASK <<
2057            XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_SHIFT);
2058     if (port->mode == USB_DR_MODE_HOST)
2059         value |= XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_FIX18;
2060     else
2061         value |=
2062               XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_VAL <<
2063               XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_SHIFT;
2064     padctl_writel(padctl, value,
2065               XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL1(index));
2066 
2067     if (pad->enable > 0) {
2068         pad->enable++;
2069         mutex_unlock(&padctl->lock);
2070         return 0;
2071     }
2072 
2073     err = clk_prepare_enable(pad->clk);
2074     if (err)
2075         goto out;
2076 
2077     value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
2078     value &= ~((XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_MASK <<
2079             XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_SHIFT) |
2080            (XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_MASK <<
2081             XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_SHIFT));
2082     value |= (XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_VAL <<
2083           XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_SHIFT) |
2084          (XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_VAL <<
2085           XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_SHIFT);
2086     padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
2087 
2088     value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2089     value &= ~XUSB_PADCTL_USB2_BIAS_PAD_CTL0_PD;
2090     padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2091 
2092     udelay(1);
2093 
2094     value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
2095     value &= ~XUSB_PADCTL_USB2_BIAS_PAD_CTL1_PD_TRK;
2096     padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
2097 
2098     udelay(50);
2099 
2100     clk_disable_unprepare(pad->clk);
2101 
2102     pad->enable++;
2103     mutex_unlock(&padctl->lock);
2104 
2105     return 0;
2106 
2107 out:
2108     mutex_unlock(&padctl->lock);
2109     return err;
2110 }
2111 
2112 static int tegra210_usb2_phy_power_off(struct phy *phy)
2113 {
2114     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2115     struct tegra_xusb_usb2_pad *pad = to_usb2_pad(lane->pad);
2116     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2117     struct tegra_xusb_usb2_port *port;
2118     u32 value;
2119 
2120     port = tegra_xusb_find_usb2_port(padctl, lane->index);
2121     if (!port) {
2122         dev_err(&phy->dev, "no port found for USB2 lane %u\n",
2123             lane->index);
2124         return -ENODEV;
2125     }
2126 
2127     mutex_lock(&padctl->lock);
2128 
2129     if (port->usb3_port_fake != -1) {
2130         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2131         value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(
2132                     port->usb3_port_fake);
2133         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2134 
2135         usleep_range(100, 200);
2136 
2137         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2138         value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(
2139                     port->usb3_port_fake);
2140         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2141 
2142         usleep_range(250, 350);
2143 
2144         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2145         value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(
2146                     port->usb3_port_fake);
2147         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2148 
2149         value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP);
2150         value |= XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(port->usb3_port_fake,
2151                     XUSB_PADCTL_SS_PORT_MAP_PORT_DISABLED);
2152         padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_MAP);
2153     }
2154 
2155     if (WARN_ON(pad->enable == 0))
2156         goto out;
2157 
2158     if (--pad->enable > 0)
2159         goto out;
2160 
2161     value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2162     value |= XUSB_PADCTL_USB2_BIAS_PAD_CTL0_PD;
2163     padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2164 
2165 out:
2166     mutex_unlock(&padctl->lock);
2167     return 0;
2168 }
2169 
2170 static const struct phy_ops tegra210_usb2_phy_ops = {
2171     .init = tegra210_usb2_phy_init,
2172     .exit = tegra210_usb2_phy_exit,
2173     .power_on = tegra210_usb2_phy_power_on,
2174     .power_off = tegra210_usb2_phy_power_off,
2175     .set_mode = tegra210_usb2_phy_set_mode,
2176     .owner = THIS_MODULE,
2177 };
2178 
2179 static struct tegra_xusb_pad *
2180 tegra210_usb2_pad_probe(struct tegra_xusb_padctl *padctl,
2181             const struct tegra_xusb_pad_soc *soc,
2182             struct device_node *np)
2183 {
2184     struct tegra_xusb_usb2_pad *usb2;
2185     struct tegra_xusb_pad *pad;
2186     int err;
2187 
2188     usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
2189     if (!usb2)
2190         return ERR_PTR(-ENOMEM);
2191 
2192     pad = &usb2->base;
2193     pad->ops = &tegra210_usb2_lane_ops;
2194     pad->soc = soc;
2195 
2196     err = tegra_xusb_pad_init(pad, padctl, np);
2197     if (err < 0) {
2198         kfree(usb2);
2199         goto out;
2200     }
2201 
2202     usb2->clk = devm_clk_get(&pad->dev, "trk");
2203     if (IS_ERR(usb2->clk)) {
2204         err = PTR_ERR(usb2->clk);
2205         dev_err(&pad->dev, "failed to get trk clock: %d\n", err);
2206         goto unregister;
2207     }
2208 
2209     err = tegra_xusb_pad_register(pad, &tegra210_usb2_phy_ops);
2210     if (err < 0)
2211         goto unregister;
2212 
2213     dev_set_drvdata(&pad->dev, pad);
2214 
2215     return pad;
2216 
2217 unregister:
2218     device_unregister(&pad->dev);
2219 out:
2220     return ERR_PTR(err);
2221 }
2222 
2223 static void tegra210_usb2_pad_remove(struct tegra_xusb_pad *pad)
2224 {
2225     struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad);
2226 
2227     kfree(usb2);
2228 }
2229 
2230 static const struct tegra_xusb_pad_ops tegra210_usb2_ops = {
2231     .probe = tegra210_usb2_pad_probe,
2232     .remove = tegra210_usb2_pad_remove,
2233 };
2234 
2235 static const struct tegra_xusb_pad_soc tegra210_usb2_pad = {
2236     .name = "usb2",
2237     .num_lanes = ARRAY_SIZE(tegra210_usb2_lanes),
2238     .lanes = tegra210_usb2_lanes,
2239     .ops = &tegra210_usb2_ops,
2240 };
2241 
2242 static const char *tegra210_hsic_functions[] = {
2243     "snps",
2244     "xusb",
2245 };
2246 
2247 static const struct tegra_xusb_lane_soc tegra210_hsic_lanes[] = {
2248     TEGRA210_LANE("hsic-0", 0x004, 14, 0x1, hsic),
2249 };
2250 
2251 static struct tegra_xusb_lane *
2252 tegra210_hsic_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
2253              unsigned int index)
2254 {
2255     struct tegra_xusb_hsic_lane *hsic;
2256     int err;
2257 
2258     hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
2259     if (!hsic)
2260         return ERR_PTR(-ENOMEM);
2261 
2262     INIT_LIST_HEAD(&hsic->base.list);
2263     hsic->base.soc = &pad->soc->lanes[index];
2264     hsic->base.index = index;
2265     hsic->base.pad = pad;
2266     hsic->base.np = np;
2267 
2268     err = tegra_xusb_lane_parse_dt(&hsic->base, np);
2269     if (err < 0) {
2270         kfree(hsic);
2271         return ERR_PTR(err);
2272     }
2273 
2274     return &hsic->base;
2275 }
2276 
2277 static void tegra210_hsic_lane_remove(struct tegra_xusb_lane *lane)
2278 {
2279     struct tegra_xusb_hsic_lane *hsic = to_hsic_lane(lane);
2280 
2281     kfree(hsic);
2282 }
2283 
2284 static const struct tegra_xusb_lane_ops tegra210_hsic_lane_ops = {
2285     .probe = tegra210_hsic_lane_probe,
2286     .remove = tegra210_hsic_lane_remove,
2287     .enable_phy_sleepwalk = tegra210_pmc_hsic_enable_phy_sleepwalk,
2288     .disable_phy_sleepwalk = tegra210_pmc_hsic_disable_phy_sleepwalk,
2289     .enable_phy_wake = tegra210_hsic_enable_phy_wake,
2290     .disable_phy_wake = tegra210_hsic_disable_phy_wake,
2291     .remote_wake_detected = tegra210_hsic_phy_remote_wake_detected,
2292 };
2293 
2294 static int tegra210_hsic_phy_init(struct phy *phy)
2295 {
2296     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2297     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2298     u32 value;
2299 
2300     value = padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX);
2301     value &= ~(XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_MASK <<
2302            XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_SHIFT);
2303     value |= XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_XUSB <<
2304          XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_SHIFT;
2305     padctl_writel(padctl, value, XUSB_PADCTL_USB2_PAD_MUX);
2306 
2307     return 0;
2308 }
2309 
2310 static int tegra210_hsic_phy_exit(struct phy *phy)
2311 {
2312     return 0;
2313 }
2314 
2315 static int tegra210_hsic_phy_power_on(struct phy *phy)
2316 {
2317     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2318     struct tegra_xusb_hsic_lane *hsic = to_hsic_lane(lane);
2319     struct tegra_xusb_hsic_pad *pad = to_hsic_pad(lane->pad);
2320     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2321     unsigned int index = lane->index;
2322     u32 value;
2323     int err;
2324 
2325     err = regulator_enable(pad->supply);
2326     if (err)
2327         return err;
2328 
2329     padctl_writel(padctl, hsic->strobe_trim,
2330               XUSB_PADCTL_HSIC_STRB_TRIM_CONTROL);
2331 
2332     value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL1(index));
2333     value &= ~(XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_MASK <<
2334            XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_SHIFT);
2335     value |= (hsic->tx_rtune_p <<
2336           XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_SHIFT);
2337     padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL1(index));
2338 
2339     value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL2(index));
2340     value &= ~((XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_MASK <<
2341             XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_SHIFT) |
2342            (XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_MASK <<
2343             XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_SHIFT));
2344     value |= (hsic->rx_strobe_trim <<
2345           XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_SHIFT) |
2346          (hsic->rx_data_trim <<
2347           XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_SHIFT);
2348     padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL2(index));
2349 
2350     value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL0(index));
2351     value &= ~(XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA0 |
2352            XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA1 |
2353            XUSB_PADCTL_HSIC_PAD_CTL0_RPU_STROBE |
2354            XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA0 |
2355            XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA1 |
2356            XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_STROBE |
2357            XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA0 |
2358            XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA1 |
2359            XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_STROBE |
2360            XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA0 |
2361            XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA1 |
2362            XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_STROBE);
2363     value |= XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA0 |
2364          XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA1 |
2365          XUSB_PADCTL_HSIC_PAD_CTL0_RPD_STROBE;
2366     padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL0(index));
2367 
2368     err = clk_prepare_enable(pad->clk);
2369     if (err)
2370         goto disable;
2371 
2372     value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PAD_TRK_CTL);
2373     value &= ~((XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_MASK <<
2374             XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_SHIFT) |
2375            (XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_MASK <<
2376             XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_SHIFT));
2377     value |= (XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_VAL <<
2378           XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_SHIFT) |
2379          (XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_VAL <<
2380           XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_SHIFT);
2381     padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PAD_TRK_CTL);
2382 
2383     udelay(1);
2384 
2385     value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PAD_TRK_CTL);
2386     value &= ~XUSB_PADCTL_HSIC_PAD_TRK_CTL_PD_TRK;
2387     padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PAD_TRK_CTL);
2388 
2389     udelay(50);
2390 
2391     clk_disable_unprepare(pad->clk);
2392 
2393     return 0;
2394 
2395 disable:
2396     regulator_disable(pad->supply);
2397     return err;
2398 }
2399 
2400 static int tegra210_hsic_phy_power_off(struct phy *phy)
2401 {
2402     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2403     struct tegra_xusb_hsic_pad *pad = to_hsic_pad(lane->pad);
2404     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2405     unsigned int index = lane->index;
2406     u32 value;
2407 
2408     value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL0(index));
2409     value |= XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA0 |
2410          XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA1 |
2411          XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_STROBE |
2412          XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA0 |
2413          XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA1 |
2414          XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_STROBE |
2415          XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA0 |
2416          XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA1 |
2417          XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_STROBE;
2418     padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL1(index));
2419 
2420     regulator_disable(pad->supply);
2421 
2422     return 0;
2423 }
2424 
2425 static const struct phy_ops tegra210_hsic_phy_ops = {
2426     .init = tegra210_hsic_phy_init,
2427     .exit = tegra210_hsic_phy_exit,
2428     .power_on = tegra210_hsic_phy_power_on,
2429     .power_off = tegra210_hsic_phy_power_off,
2430     .owner = THIS_MODULE,
2431 };
2432 
2433 static struct tegra_xusb_pad *
2434 tegra210_hsic_pad_probe(struct tegra_xusb_padctl *padctl,
2435             const struct tegra_xusb_pad_soc *soc,
2436             struct device_node *np)
2437 {
2438     struct tegra_xusb_hsic_pad *hsic;
2439     struct tegra_xusb_pad *pad;
2440     int err;
2441 
2442     hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
2443     if (!hsic)
2444         return ERR_PTR(-ENOMEM);
2445 
2446     pad = &hsic->base;
2447     pad->ops = &tegra210_hsic_lane_ops;
2448     pad->soc = soc;
2449 
2450     err = tegra_xusb_pad_init(pad, padctl, np);
2451     if (err < 0) {
2452         kfree(hsic);
2453         goto out;
2454     }
2455 
2456     hsic->clk = devm_clk_get(&pad->dev, "trk");
2457     if (IS_ERR(hsic->clk)) {
2458         err = PTR_ERR(hsic->clk);
2459         dev_err(&pad->dev, "failed to get trk clock: %d\n", err);
2460         goto unregister;
2461     }
2462 
2463     err = tegra_xusb_pad_register(pad, &tegra210_hsic_phy_ops);
2464     if (err < 0)
2465         goto unregister;
2466 
2467     dev_set_drvdata(&pad->dev, pad);
2468 
2469     return pad;
2470 
2471 unregister:
2472     device_unregister(&pad->dev);
2473 out:
2474     return ERR_PTR(err);
2475 }
2476 
2477 static void tegra210_hsic_pad_remove(struct tegra_xusb_pad *pad)
2478 {
2479     struct tegra_xusb_hsic_pad *hsic = to_hsic_pad(pad);
2480 
2481     kfree(hsic);
2482 }
2483 
2484 static const struct tegra_xusb_pad_ops tegra210_hsic_ops = {
2485     .probe = tegra210_hsic_pad_probe,
2486     .remove = tegra210_hsic_pad_remove,
2487 };
2488 
2489 static const struct tegra_xusb_pad_soc tegra210_hsic_pad = {
2490     .name = "hsic",
2491     .num_lanes = ARRAY_SIZE(tegra210_hsic_lanes),
2492     .lanes = tegra210_hsic_lanes,
2493     .ops = &tegra210_hsic_ops,
2494 };
2495 
2496 static void tegra210_uphy_lane_iddq_enable(struct tegra_xusb_lane *lane)
2497 {
2498     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2499     u32 value;
2500 
2501     value = padctl_readl(padctl, lane->soc->regs.misc_ctl2);
2502     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ_OVRD;
2503     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ_OVRD;
2504     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_PWR_OVRD;
2505     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_PWR_OVRD;
2506     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ;
2507     value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_MASK;
2508     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_VAL;
2509     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ;
2510     value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_MASK;
2511     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_VAL;
2512     padctl_writel(padctl, value, lane->soc->regs.misc_ctl2);
2513 }
2514 
2515 static void tegra210_uphy_lane_iddq_disable(struct tegra_xusb_lane *lane)
2516 {
2517     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2518     u32 value;
2519 
2520     value = padctl_readl(padctl, lane->soc->regs.misc_ctl2);
2521     value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ_OVRD;
2522     value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ_OVRD;
2523     value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_PWR_OVRD;
2524     value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_PWR_OVRD;
2525     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ;
2526     value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_MASK;
2527     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_VAL;
2528     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ;
2529     value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_MASK;
2530     value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_VAL;
2531     padctl_writel(padctl, value, lane->soc->regs.misc_ctl2);
2532 }
2533 
2534 #define TEGRA210_UPHY_LANE(_name, _offset, _shift, _mask, _type, _misc) \
2535     {                               \
2536         .name = _name,                      \
2537         .offset = _offset,                  \
2538         .shift = _shift,                    \
2539         .mask = _mask,                      \
2540         .num_funcs = ARRAY_SIZE(tegra210_##_type##_functions),  \
2541         .funcs = tegra210_##_type##_functions,          \
2542         .regs.misc_ctl2 = _misc,                \
2543     }
2544 
2545 static const char *tegra210_pcie_functions[] = {
2546     "pcie-x1",
2547     "usb3-ss",
2548     "sata",
2549     "pcie-x4",
2550 };
2551 
2552 static const struct tegra_xusb_lane_soc tegra210_pcie_lanes[] = {
2553     TEGRA210_UPHY_LANE("pcie-0", 0x028, 12, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(0)),
2554     TEGRA210_UPHY_LANE("pcie-1", 0x028, 14, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(1)),
2555     TEGRA210_UPHY_LANE("pcie-2", 0x028, 16, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(2)),
2556     TEGRA210_UPHY_LANE("pcie-3", 0x028, 18, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(3)),
2557     TEGRA210_UPHY_LANE("pcie-4", 0x028, 20, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(4)),
2558     TEGRA210_UPHY_LANE("pcie-5", 0x028, 22, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(5)),
2559     TEGRA210_UPHY_LANE("pcie-6", 0x028, 24, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(6)),
2560 };
2561 
2562 static struct tegra_xusb_usb3_port *
2563 tegra210_lane_to_usb3_port(struct tegra_xusb_lane *lane)
2564 {
2565     int port;
2566 
2567     if (!lane || !lane->pad || !lane->pad->padctl)
2568         return NULL;
2569 
2570     port = tegra210_usb3_lane_map(lane);
2571     if (port < 0)
2572         return NULL;
2573 
2574     return tegra_xusb_find_usb3_port(lane->pad->padctl, port);
2575 }
2576 
2577 static int tegra210_usb3_phy_power_on(struct phy *phy)
2578 {
2579     struct device *dev = &phy->dev;
2580     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2581     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2582     struct tegra_xusb_usb3_port *usb3 = tegra210_lane_to_usb3_port(lane);
2583     unsigned int index;
2584     u32 value;
2585 
2586     if (!usb3) {
2587         dev_err(dev, "no USB3 port found for lane %u\n", lane->index);
2588         return -ENODEV;
2589     }
2590 
2591     index = usb3->base.index;
2592 
2593     value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP);
2594 
2595     if (!usb3->internal)
2596         value &= ~XUSB_PADCTL_SS_PORT_MAP_PORTX_INTERNAL(index);
2597     else
2598         value |= XUSB_PADCTL_SS_PORT_MAP_PORTX_INTERNAL(index);
2599 
2600     value &= ~XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK(index);
2601     value |= XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(index, usb3->port);
2602     padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_MAP);
2603 
2604     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_USB3_PADX_ECTL1(index));
2605     value &= ~(XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_MASK <<
2606            XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_SHIFT);
2607     value |= XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_VAL <<
2608          XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_SHIFT;
2609     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_USB3_PADX_ECTL1(index));
2610 
2611     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_USB3_PADX_ECTL2(index));
2612     value &= ~(XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_MASK <<
2613            XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_SHIFT);
2614     value |= XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_VAL <<
2615          XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_SHIFT;
2616     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_USB3_PADX_ECTL2(index));
2617 
2618     padctl_writel(padctl, XUSB_PADCTL_UPHY_USB3_PAD_ECTL3_RX_DFE_VAL,
2619               XUSB_PADCTL_UPHY_USB3_PADX_ECTL3(index));
2620 
2621     value = padctl_readl(padctl, XUSB_PADCTL_UPHY_USB3_PADX_ECTL4(index));
2622     value &= ~(XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_MASK <<
2623            XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_SHIFT);
2624     value |= XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_VAL <<
2625          XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_SHIFT;
2626     padctl_writel(padctl, value, XUSB_PADCTL_UPHY_USB3_PADX_ECTL4(index));
2627 
2628     padctl_writel(padctl, XUSB_PADCTL_UPHY_USB3_PAD_ECTL6_RX_EQ_CTRL_H_VAL,
2629               XUSB_PADCTL_UPHY_USB3_PADX_ECTL6(index));
2630 
2631     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2632     value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(index);
2633     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2634 
2635     usleep_range(100, 200);
2636 
2637     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2638     value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(index);
2639     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2640 
2641     usleep_range(100, 200);
2642 
2643     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2644     value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(index);
2645     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2646 
2647     return 0;
2648 }
2649 
2650 static int tegra210_usb3_phy_power_off(struct phy *phy)
2651 {
2652     struct device *dev = &phy->dev;
2653     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2654     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2655     struct tegra_xusb_usb3_port *usb3 = tegra210_lane_to_usb3_port(lane);
2656     unsigned int index;
2657     u32 value;
2658 
2659     if (!usb3) {
2660         dev_err(dev, "no USB3 port found for lane %u\n", lane->index);
2661         return -ENODEV;
2662     }
2663 
2664     index = usb3->base.index;
2665 
2666     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2667     value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(index);
2668     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2669 
2670     usleep_range(100, 200);
2671 
2672     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2673     value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(index);
2674     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2675 
2676     usleep_range(250, 350);
2677 
2678     value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2679     value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(index);
2680     padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2681 
2682     return 0;
2683 }
2684 static struct tegra_xusb_lane *
2685 tegra210_pcie_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
2686              unsigned int index)
2687 {
2688     struct tegra_xusb_pcie_lane *pcie;
2689     int err;
2690 
2691     pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
2692     if (!pcie)
2693         return ERR_PTR(-ENOMEM);
2694 
2695     INIT_LIST_HEAD(&pcie->base.list);
2696     pcie->base.soc = &pad->soc->lanes[index];
2697     pcie->base.index = index;
2698     pcie->base.pad = pad;
2699     pcie->base.np = np;
2700 
2701     err = tegra_xusb_lane_parse_dt(&pcie->base, np);
2702     if (err < 0) {
2703         kfree(pcie);
2704         return ERR_PTR(err);
2705     }
2706 
2707     return &pcie->base;
2708 }
2709 
2710 static void tegra210_pcie_lane_remove(struct tegra_xusb_lane *lane)
2711 {
2712     struct tegra_xusb_pcie_lane *pcie = to_pcie_lane(lane);
2713 
2714     kfree(pcie);
2715 }
2716 
2717 static const struct tegra_xusb_lane_ops tegra210_pcie_lane_ops = {
2718     .probe = tegra210_pcie_lane_probe,
2719     .remove = tegra210_pcie_lane_remove,
2720     .iddq_enable = tegra210_uphy_lane_iddq_enable,
2721     .iddq_disable = tegra210_uphy_lane_iddq_disable,
2722     .enable_phy_sleepwalk = tegra210_usb3_enable_phy_sleepwalk,
2723     .disable_phy_sleepwalk = tegra210_usb3_disable_phy_sleepwalk,
2724     .enable_phy_wake = tegra210_usb3_enable_phy_wake,
2725     .disable_phy_wake = tegra210_usb3_disable_phy_wake,
2726     .remote_wake_detected = tegra210_usb3_phy_remote_wake_detected,
2727 };
2728 
2729 static int tegra210_pcie_phy_init(struct phy *phy)
2730 {
2731     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2732     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2733 
2734     mutex_lock(&padctl->lock);
2735 
2736     tegra210_uphy_init(padctl);
2737 
2738     mutex_unlock(&padctl->lock);
2739 
2740     return 0;
2741 }
2742 
2743 static int tegra210_pcie_phy_power_on(struct phy *phy)
2744 {
2745     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2746     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2747     int err = 0;
2748 
2749     mutex_lock(&padctl->lock);
2750 
2751     if (tegra_xusb_lane_check(lane, "usb3-ss"))
2752         err = tegra210_usb3_phy_power_on(phy);
2753 
2754     mutex_unlock(&padctl->lock);
2755     return err;
2756 }
2757 
2758 static int tegra210_pcie_phy_power_off(struct phy *phy)
2759 {
2760     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2761     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2762     int err = 0;
2763 
2764     mutex_lock(&padctl->lock);
2765 
2766     if (tegra_xusb_lane_check(lane, "usb3-ss"))
2767         err = tegra210_usb3_phy_power_off(phy);
2768 
2769     mutex_unlock(&padctl->lock);
2770     return err;
2771 }
2772 
2773 static const struct phy_ops tegra210_pcie_phy_ops = {
2774     .init = tegra210_pcie_phy_init,
2775     .power_on = tegra210_pcie_phy_power_on,
2776     .power_off = tegra210_pcie_phy_power_off,
2777     .owner = THIS_MODULE,
2778 };
2779 
2780 static struct tegra_xusb_pad *
2781 tegra210_pcie_pad_probe(struct tegra_xusb_padctl *padctl,
2782             const struct tegra_xusb_pad_soc *soc,
2783             struct device_node *np)
2784 {
2785     struct tegra_xusb_pcie_pad *pcie;
2786     struct tegra_xusb_pad *pad;
2787     int err;
2788 
2789     pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
2790     if (!pcie)
2791         return ERR_PTR(-ENOMEM);
2792 
2793     pad = &pcie->base;
2794     pad->ops = &tegra210_pcie_lane_ops;
2795     pad->soc = soc;
2796 
2797     err = tegra_xusb_pad_init(pad, padctl, np);
2798     if (err < 0) {
2799         kfree(pcie);
2800         goto out;
2801     }
2802 
2803     pcie->pll = devm_clk_get(&pad->dev, "pll");
2804     if (IS_ERR(pcie->pll)) {
2805         err = PTR_ERR(pcie->pll);
2806         dev_err(&pad->dev, "failed to get PLL: %d\n", err);
2807         goto unregister;
2808     }
2809 
2810     pcie->rst = devm_reset_control_get(&pad->dev, "phy");
2811     if (IS_ERR(pcie->rst)) {
2812         err = PTR_ERR(pcie->rst);
2813         dev_err(&pad->dev, "failed to get PCIe pad reset: %d\n", err);
2814         goto unregister;
2815     }
2816 
2817     err = tegra_xusb_pad_register(pad, &tegra210_pcie_phy_ops);
2818     if (err < 0)
2819         goto unregister;
2820 
2821     dev_set_drvdata(&pad->dev, pad);
2822 
2823     return pad;
2824 
2825 unregister:
2826     device_unregister(&pad->dev);
2827 out:
2828     return ERR_PTR(err);
2829 }
2830 
2831 static void tegra210_pcie_pad_remove(struct tegra_xusb_pad *pad)
2832 {
2833     struct tegra_xusb_pcie_pad *pcie = to_pcie_pad(pad);
2834 
2835     kfree(pcie);
2836 }
2837 
2838 static const struct tegra_xusb_pad_ops tegra210_pcie_ops = {
2839     .probe = tegra210_pcie_pad_probe,
2840     .remove = tegra210_pcie_pad_remove,
2841 };
2842 
2843 static const struct tegra_xusb_pad_soc tegra210_pcie_pad = {
2844     .name = "pcie",
2845     .num_lanes = ARRAY_SIZE(tegra210_pcie_lanes),
2846     .lanes = tegra210_pcie_lanes,
2847     .ops = &tegra210_pcie_ops,
2848 };
2849 
2850 static const struct tegra_xusb_lane_soc tegra210_sata_lanes[] = {
2851     TEGRA210_UPHY_LANE("sata-0", 0x028, 30, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL2),
2852 };
2853 
2854 static struct tegra_xusb_lane *
2855 tegra210_sata_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
2856              unsigned int index)
2857 {
2858     struct tegra_xusb_sata_lane *sata;
2859     int err;
2860 
2861     sata = kzalloc(sizeof(*sata), GFP_KERNEL);
2862     if (!sata)
2863         return ERR_PTR(-ENOMEM);
2864 
2865     INIT_LIST_HEAD(&sata->base.list);
2866     sata->base.soc = &pad->soc->lanes[index];
2867     sata->base.index = index;
2868     sata->base.pad = pad;
2869     sata->base.np = np;
2870 
2871     err = tegra_xusb_lane_parse_dt(&sata->base, np);
2872     if (err < 0) {
2873         kfree(sata);
2874         return ERR_PTR(err);
2875     }
2876 
2877     return &sata->base;
2878 }
2879 
2880 static void tegra210_sata_lane_remove(struct tegra_xusb_lane *lane)
2881 {
2882     struct tegra_xusb_sata_lane *sata = to_sata_lane(lane);
2883 
2884     kfree(sata);
2885 }
2886 
2887 static const struct tegra_xusb_lane_ops tegra210_sata_lane_ops = {
2888     .probe = tegra210_sata_lane_probe,
2889     .remove = tegra210_sata_lane_remove,
2890     .iddq_enable = tegra210_uphy_lane_iddq_enable,
2891     .iddq_disable = tegra210_uphy_lane_iddq_disable,
2892     .enable_phy_sleepwalk = tegra210_usb3_enable_phy_sleepwalk,
2893     .disable_phy_sleepwalk = tegra210_usb3_disable_phy_sleepwalk,
2894     .enable_phy_wake = tegra210_usb3_enable_phy_wake,
2895     .disable_phy_wake = tegra210_usb3_disable_phy_wake,
2896     .remote_wake_detected = tegra210_usb3_phy_remote_wake_detected,
2897 };
2898 
2899 static int tegra210_sata_phy_init(struct phy *phy)
2900 {
2901     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2902     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2903 
2904     mutex_lock(&padctl->lock);
2905 
2906     tegra210_uphy_init(padctl);
2907 
2908     mutex_unlock(&padctl->lock);
2909     return 0;
2910 }
2911 
2912 static int tegra210_sata_phy_power_on(struct phy *phy)
2913 {
2914     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2915     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2916     int err = 0;
2917 
2918     mutex_lock(&padctl->lock);
2919 
2920     if (tegra_xusb_lane_check(lane, "usb3-ss"))
2921         err = tegra210_usb3_phy_power_on(phy);
2922 
2923     mutex_unlock(&padctl->lock);
2924     return err;
2925 }
2926 
2927 static int tegra210_sata_phy_power_off(struct phy *phy)
2928 {
2929     struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2930     struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2931     int err = 0;
2932 
2933     mutex_lock(&padctl->lock);
2934 
2935     if (tegra_xusb_lane_check(lane, "usb3-ss"))
2936         err = tegra210_usb3_phy_power_off(phy);
2937 
2938     mutex_unlock(&padctl->lock);
2939     return err;
2940 }
2941 
2942 static const struct phy_ops tegra210_sata_phy_ops = {
2943     .init = tegra210_sata_phy_init,
2944     .power_on = tegra210_sata_phy_power_on,
2945     .power_off = tegra210_sata_phy_power_off,
2946     .owner = THIS_MODULE,
2947 };
2948 
2949 static struct tegra_xusb_pad *
2950 tegra210_sata_pad_probe(struct tegra_xusb_padctl *padctl,
2951             const struct tegra_xusb_pad_soc *soc,
2952             struct device_node *np)
2953 {
2954     struct tegra_xusb_sata_pad *sata;
2955     struct tegra_xusb_pad *pad;
2956     int err;
2957 
2958     sata = kzalloc(sizeof(*sata), GFP_KERNEL);
2959     if (!sata)
2960         return ERR_PTR(-ENOMEM);
2961 
2962     pad = &sata->base;
2963     pad->ops = &tegra210_sata_lane_ops;
2964     pad->soc = soc;
2965 
2966     err = tegra_xusb_pad_init(pad, padctl, np);
2967     if (err < 0) {
2968         kfree(sata);
2969         goto out;
2970     }
2971 
2972     sata->rst = devm_reset_control_get(&pad->dev, "phy");
2973     if (IS_ERR(sata->rst)) {
2974         err = PTR_ERR(sata->rst);
2975         dev_err(&pad->dev, "failed to get SATA pad reset: %d\n", err);
2976         goto unregister;
2977     }
2978 
2979     err = tegra_xusb_pad_register(pad, &tegra210_sata_phy_ops);
2980     if (err < 0)
2981         goto unregister;
2982 
2983     dev_set_drvdata(&pad->dev, pad);
2984 
2985     return pad;
2986 
2987 unregister:
2988     device_unregister(&pad->dev);
2989 out:
2990     return ERR_PTR(err);
2991 }
2992 
2993 static void tegra210_sata_pad_remove(struct tegra_xusb_pad *pad)
2994 {
2995     struct tegra_xusb_sata_pad *sata = to_sata_pad(pad);
2996 
2997     kfree(sata);
2998 }
2999 
3000 static const struct tegra_xusb_pad_ops tegra210_sata_ops = {
3001     .probe = tegra210_sata_pad_probe,
3002     .remove = tegra210_sata_pad_remove,
3003 };
3004 
3005 static const struct tegra_xusb_pad_soc tegra210_sata_pad = {
3006     .name = "sata",
3007     .num_lanes = ARRAY_SIZE(tegra210_sata_lanes),
3008     .lanes = tegra210_sata_lanes,
3009     .ops = &tegra210_sata_ops,
3010 };
3011 
3012 static const struct tegra_xusb_pad_soc * const tegra210_pads[] = {
3013     &tegra210_usb2_pad,
3014     &tegra210_hsic_pad,
3015     &tegra210_pcie_pad,
3016     &tegra210_sata_pad,
3017 };
3018 
3019 static int tegra210_usb2_port_enable(struct tegra_xusb_port *port)
3020 {
3021     return 0;
3022 }
3023 
3024 static void tegra210_usb2_port_disable(struct tegra_xusb_port *port)
3025 {
3026 }
3027 
3028 static struct tegra_xusb_lane *
3029 tegra210_usb2_port_map(struct tegra_xusb_port *port)
3030 {
3031     return tegra_xusb_find_lane(port->padctl, "usb2", port->index);
3032 }
3033 
3034 static const struct tegra_xusb_port_ops tegra210_usb2_port_ops = {
3035     .release = tegra_xusb_usb2_port_release,
3036     .remove = tegra_xusb_usb2_port_remove,
3037     .enable = tegra210_usb2_port_enable,
3038     .disable = tegra210_usb2_port_disable,
3039     .map = tegra210_usb2_port_map,
3040 };
3041 
3042 static int tegra210_hsic_port_enable(struct tegra_xusb_port *port)
3043 {
3044     return 0;
3045 }
3046 
3047 static void tegra210_hsic_port_disable(struct tegra_xusb_port *port)
3048 {
3049 }
3050 
3051 static struct tegra_xusb_lane *
3052 tegra210_hsic_port_map(struct tegra_xusb_port *port)
3053 {
3054     return tegra_xusb_find_lane(port->padctl, "hsic", port->index);
3055 }
3056 
3057 static const struct tegra_xusb_port_ops tegra210_hsic_port_ops = {
3058     .release = tegra_xusb_hsic_port_release,
3059     .enable = tegra210_hsic_port_enable,
3060     .disable = tegra210_hsic_port_disable,
3061     .map = tegra210_hsic_port_map,
3062 };
3063 
3064 static int tegra210_usb3_port_enable(struct tegra_xusb_port *port)
3065 {
3066     return 0;
3067 }
3068 
3069 static void tegra210_usb3_port_disable(struct tegra_xusb_port *port)
3070 {
3071 }
3072 
3073 static struct tegra_xusb_lane *
3074 tegra210_usb3_port_map(struct tegra_xusb_port *port)
3075 {
3076     return tegra_xusb_port_find_lane(port, tegra210_usb3_map, "usb3-ss");
3077 }
3078 
3079 static const struct tegra_xusb_port_ops tegra210_usb3_port_ops = {
3080     .release = tegra_xusb_usb3_port_release,
3081     .remove = tegra_xusb_usb3_port_remove,
3082     .enable = tegra210_usb3_port_enable,
3083     .disable = tegra210_usb3_port_disable,
3084     .map = tegra210_usb3_port_map,
3085 };
3086 
3087 static int tegra210_utmi_port_reset(struct phy *phy)
3088 {
3089     struct tegra_xusb_padctl *padctl;
3090     struct tegra_xusb_lane *lane;
3091     u32 value;
3092 
3093     lane = phy_get_drvdata(phy);
3094     padctl = lane->pad->padctl;
3095 
3096     value = padctl_readl(padctl,
3097              XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL0(lane->index));
3098 
3099     if ((value & XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIP) ||
3100         (value & XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIN)) {
3101         tegra210_xusb_padctl_vbus_override(padctl, false);
3102         tegra210_xusb_padctl_vbus_override(padctl, true);
3103         return 1;
3104     }
3105 
3106     return 0;
3107 }
3108 
3109 static int
3110 tegra210_xusb_read_fuse_calibration(struct tegra210_xusb_fuse_calibration *fuse)
3111 {
3112     unsigned int i;
3113     u32 value;
3114     int err;
3115 
3116     err = tegra_fuse_readl(TEGRA_FUSE_SKU_CALIB_0, &value);
3117     if (err < 0)
3118         return err;
3119 
3120     for (i = 0; i < ARRAY_SIZE(fuse->hs_curr_level); i++) {
3121         fuse->hs_curr_level[i] =
3122             (value >> FUSE_SKU_CALIB_HS_CURR_LEVEL_PADX_SHIFT(i)) &
3123             FUSE_SKU_CALIB_HS_CURR_LEVEL_PAD_MASK;
3124     }
3125 
3126     fuse->hs_term_range_adj =
3127         (value >> FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_SHIFT) &
3128         FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_MASK;
3129 
3130     err = tegra_fuse_readl(TEGRA_FUSE_USB_CALIB_EXT_0, &value);
3131     if (err < 0)
3132         return err;
3133 
3134     fuse->rpd_ctrl =
3135         (value >> FUSE_USB_CALIB_EXT_RPD_CTRL_SHIFT) &
3136         FUSE_USB_CALIB_EXT_RPD_CTRL_MASK;
3137 
3138     return 0;
3139 }
3140 
3141 static struct tegra_xusb_padctl *
3142 tegra210_xusb_padctl_probe(struct device *dev,
3143                const struct tegra_xusb_padctl_soc *soc)
3144 {
3145     struct tegra210_xusb_padctl *padctl;
3146     struct platform_device *pdev;
3147     struct device_node *np;
3148     int err;
3149 
3150     padctl = devm_kzalloc(dev, sizeof(*padctl), GFP_KERNEL);
3151     if (!padctl)
3152         return ERR_PTR(-ENOMEM);
3153 
3154     padctl->base.dev = dev;
3155     padctl->base.soc = soc;
3156 
3157     err = tegra210_xusb_read_fuse_calibration(&padctl->fuse);
3158     if (err < 0)
3159         return ERR_PTR(err);
3160 
3161     np = of_parse_phandle(dev->of_node, "nvidia,pmc", 0);
3162     if (!np) {
3163         dev_warn(dev, "nvidia,pmc property is missing\n");
3164         goto out;
3165     }
3166 
3167     pdev = of_find_device_by_node(np);
3168     if (!pdev) {
3169         dev_warn(dev, "PMC device is not available\n");
3170         goto out;
3171     }
3172 
3173     if (!platform_get_drvdata(pdev))
3174         return ERR_PTR(-EPROBE_DEFER);
3175 
3176     padctl->regmap = dev_get_regmap(&pdev->dev, "usb_sleepwalk");
3177     if (!padctl->regmap)
3178         dev_info(dev, "failed to find PMC regmap\n");
3179 
3180 out:
3181     return &padctl->base;
3182 }
3183 
3184 static void tegra210_xusb_padctl_remove(struct tegra_xusb_padctl *padctl)
3185 {
3186 }
3187 
3188 static void tegra210_xusb_padctl_save(struct tegra_xusb_padctl *padctl)
3189 {
3190     struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
3191 
3192     priv->context.usb2_pad_mux =
3193         padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX);
3194     priv->context.usb2_port_cap =
3195         padctl_readl(padctl, XUSB_PADCTL_USB2_PORT_CAP);
3196     priv->context.ss_port_map =
3197         padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP);
3198     priv->context.usb3_pad_mux =
3199         padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
3200 }
3201 
3202 static void tegra210_xusb_padctl_restore(struct tegra_xusb_padctl *padctl)
3203 {
3204     struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
3205     struct tegra_xusb_lane *lane;
3206 
3207     padctl_writel(padctl, priv->context.usb2_pad_mux,
3208         XUSB_PADCTL_USB2_PAD_MUX);
3209     padctl_writel(padctl, priv->context.usb2_port_cap,
3210         XUSB_PADCTL_USB2_PORT_CAP);
3211     padctl_writel(padctl, priv->context.ss_port_map,
3212         XUSB_PADCTL_SS_PORT_MAP);
3213 
3214     list_for_each_entry(lane, &padctl->lanes, list) {
3215         if (lane->pad->ops->iddq_enable)
3216             tegra210_uphy_lane_iddq_enable(lane);
3217     }
3218 
3219     padctl_writel(padctl, priv->context.usb3_pad_mux,
3220         XUSB_PADCTL_USB3_PAD_MUX);
3221 
3222     list_for_each_entry(lane, &padctl->lanes, list) {
3223         if (lane->pad->ops->iddq_disable)
3224             tegra210_uphy_lane_iddq_disable(lane);
3225     }
3226 }
3227 
3228 static int tegra210_xusb_padctl_suspend_noirq(struct tegra_xusb_padctl *padctl)
3229 {
3230     mutex_lock(&padctl->lock);
3231 
3232     tegra210_uphy_deinit(padctl);
3233 
3234     tegra210_xusb_padctl_save(padctl);
3235 
3236     mutex_unlock(&padctl->lock);
3237     return 0;
3238 }
3239 
3240 static int tegra210_xusb_padctl_resume_noirq(struct tegra_xusb_padctl *padctl)
3241 {
3242     mutex_lock(&padctl->lock);
3243 
3244     tegra210_xusb_padctl_restore(padctl);
3245 
3246     tegra210_uphy_init(padctl);
3247 
3248     mutex_unlock(&padctl->lock);
3249     return 0;
3250 }
3251 
3252 static const struct tegra_xusb_padctl_ops tegra210_xusb_padctl_ops = {
3253     .probe = tegra210_xusb_padctl_probe,
3254     .remove = tegra210_xusb_padctl_remove,
3255     .suspend_noirq = tegra210_xusb_padctl_suspend_noirq,
3256     .resume_noirq = tegra210_xusb_padctl_resume_noirq,
3257     .usb3_set_lfps_detect = tegra210_usb3_set_lfps_detect,
3258     .hsic_set_idle = tegra210_hsic_set_idle,
3259     .vbus_override = tegra210_xusb_padctl_vbus_override,
3260     .utmi_port_reset = tegra210_utmi_port_reset,
3261 };
3262 
3263 static const char * const tegra210_xusb_padctl_supply_names[] = {
3264     "avdd-pll-utmip",
3265     "avdd-pll-uerefe",
3266     "dvdd-pex-pll",
3267     "hvdd-pex-pll-e",
3268 };
3269 
3270 const struct tegra_xusb_padctl_soc tegra210_xusb_padctl_soc = {
3271     .num_pads = ARRAY_SIZE(tegra210_pads),
3272     .pads = tegra210_pads,
3273     .ports = {
3274         .usb2 = {
3275             .ops = &tegra210_usb2_port_ops,
3276             .count = 4,
3277         },
3278         .hsic = {
3279             .ops = &tegra210_hsic_port_ops,
3280             .count = 1,
3281         },
3282         .usb3 = {
3283             .ops = &tegra210_usb3_port_ops,
3284             .count = 4,
3285         },
3286     },
3287     .ops = &tegra210_xusb_padctl_ops,
3288     .supply_names = tegra210_xusb_padctl_supply_names,
3289     .num_supplies = ARRAY_SIZE(tegra210_xusb_padctl_supply_names),
3290     .need_fake_usb3_port = true,
3291 };
3292 EXPORT_SYMBOL_GPL(tegra210_xusb_padctl_soc);
3293 
3294 MODULE_AUTHOR("Andrew Bresticker <abrestic@chromium.org>");
3295 MODULE_DESCRIPTION("NVIDIA Tegra 210 XUSB Pad Controller driver");
3296 MODULE_LICENSE("GPL v2");