xusb-tegra210.c (102665B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights reserved. 4 * Copyright (C) 2015 Google, Inc. 5 */ 6 7#include <linux/clk.h> 8#include <linux/clk/tegra.h> 9#include <linux/delay.h> 10#include <linux/io.h> 11#include <linux/mailbox_client.h> 12#include <linux/module.h> 13#include <linux/of.h> 14#include <linux/of_platform.h> 15#include <linux/phy/phy.h> 16#include <linux/platform_device.h> 17#include <linux/regmap.h> 18#include <linux/regulator/consumer.h> 19#include <linux/reset.h> 20#include <linux/slab.h> 21 22#include <soc/tegra/fuse.h> 23 24#include "xusb.h" 25 26#define FUSE_SKU_CALIB_HS_CURR_LEVEL_PADX_SHIFT(x) \ 27 ((x) ? (11 + ((x) - 1) * 6) : 0) 28#define FUSE_SKU_CALIB_HS_CURR_LEVEL_PAD_MASK 0x3f 29#define FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_SHIFT 7 30#define FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_MASK 0xf 31 32#define FUSE_USB_CALIB_EXT_RPD_CTRL_SHIFT 0 33#define FUSE_USB_CALIB_EXT_RPD_CTRL_MASK 0x1f 34 35#define XUSB_PADCTL_USB2_PAD_MUX 0x004 36#define XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_SHIFT 16 37#define XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_MASK 0x3 38#define XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_XUSB 0x1 39#define XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_SHIFT 18 40#define XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_MASK 0x3 41#define XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_XUSB 0x1 42 43#define XUSB_PADCTL_USB2_PORT_CAP 0x008 44#define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DISABLED(x) (0x0 << ((x) * 4)) 45#define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_HOST(x) (0x1 << ((x) * 4)) 46#define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DEVICE(x) (0x2 << ((x) * 4)) 47#define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_OTG(x) (0x3 << ((x) * 4)) 48#define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_MASK(x) (0x3 << ((x) * 4)) 49 50#define XUSB_PADCTL_SS_PORT_MAP 0x014 51#define XUSB_PADCTL_SS_PORT_MAP_PORTX_INTERNAL(x) (1 << (((x) * 5) + 4)) 52#define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_SHIFT(x) ((x) * 5) 53#define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK(x) (0x7 << ((x) * 5)) 54#define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(x, v) (((v) & 0x7) << ((x) * 5)) 55#define XUSB_PADCTL_SS_PORT_MAP_PORT_DISABLED 0x7 56 57#define XUSB_PADCTL_ELPG_PROGRAM_0 0x20 58#define USB2_PORT_WAKE_INTERRUPT_ENABLE(x) BIT((x)) 59#define USB2_PORT_WAKEUP_EVENT(x) BIT((x) + 7) 60#define SS_PORT_WAKE_INTERRUPT_ENABLE(x) BIT((x) + 14) 61#define SS_PORT_WAKEUP_EVENT(x) BIT((x) + 21) 62#define USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(x) BIT((x) + 28) 63#define USB2_HSIC_PORT_WAKEUP_EVENT(x) BIT((x) + 30) 64#define ALL_WAKE_EVENTS ( \ 65 USB2_PORT_WAKEUP_EVENT(0) | USB2_PORT_WAKEUP_EVENT(1) | \ 66 USB2_PORT_WAKEUP_EVENT(2) | USB2_PORT_WAKEUP_EVENT(3) | \ 67 SS_PORT_WAKEUP_EVENT(0) | SS_PORT_WAKEUP_EVENT(1) | \ 68 SS_PORT_WAKEUP_EVENT(2) | SS_PORT_WAKEUP_EVENT(3) | \ 69 USB2_HSIC_PORT_WAKEUP_EVENT(0)) 70 71#define XUSB_PADCTL_ELPG_PROGRAM1 0x024 72#define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN (1 << 31) 73#define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN_EARLY (1 << 30) 74#define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN (1 << 29) 75#define XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(x) (1 << (2 + (x) * 3)) 76#define XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(x) \ 77 (1 << (1 + (x) * 3)) 78#define XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(x) (1 << ((x) * 3)) 79 80#define XUSB_PADCTL_USB3_PAD_MUX 0x028 81#define XUSB_PADCTL_USB3_PAD_MUX_PCIE_IDDQ_DISABLE(x) (1 << (1 + (x))) 82#define XUSB_PADCTL_USB3_PAD_MUX_SATA_IDDQ_DISABLE(x) (1 << (8 + (x))) 83 84#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL0(x) (0x080 + (x) * 0x40) 85#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIP (1 << 18) 86#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIN (1 << 22) 87 88#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL1(x) (0x084 + (x) * 0x40) 89#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_SHIFT 7 90#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_MASK 0x3 91#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_VAL 0x1 92#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_FIX18 (1 << 6) 93 94#define XUSB_PADCTL_USB2_OTG_PADX_CTL0(x) (0x088 + (x) * 0x40) 95#define XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD_ZI (1 << 29) 96#define XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD2 (1 << 27) 97#define XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD (1 << 26) 98#define XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_SHIFT 0 99#define XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_MASK 0x3f 100 101#define XUSB_PADCTL_USB2_OTG_PADX_CTL1(x) (0x08c + (x) * 0x40) 102#define XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_SHIFT 26 103#define XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_MASK 0x1f 104#define XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_SHIFT 3 105#define XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_MASK 0xf 106#define XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DR (1 << 2) 107#define XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DISC_OVRD (1 << 1) 108#define XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_CHRP_OVRD (1 << 0) 109#define RPD_CTRL(x) (((x) & 0x1f) << 26) 110#define RPD_CTRL_VALUE(x) (((x) >> 26) & 0x1f) 111 112#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0 0x284 113#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_PD (1 << 11) 114#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_SHIFT 3 115#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_MASK 0x7 116#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_VAL 0x7 117#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_SHIFT 0 118#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_MASK 0x7 119#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_VAL 0x2 120 121#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1 0x288 122#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_PD_TRK (1 << 26) 123#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_SHIFT 19 124#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_MASK 0x7f 125#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_VAL 0x0a 126#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_SHIFT 12 127#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_MASK 0x7f 128#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_VAL 0x1e 129#define TCTRL_VALUE(x) (((x) & 0x3f) >> 0) 130#define PCTRL_VALUE(x) (((x) >> 6) & 0x3f) 131 132#define XUSB_PADCTL_HSIC_PADX_CTL0(x) (0x300 + (x) * 0x20) 133#define XUSB_PADCTL_HSIC_PAD_CTL0_RPU_STROBE (1 << 18) 134#define XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA1 (1 << 17) 135#define XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA0 (1 << 16) 136#define XUSB_PADCTL_HSIC_PAD_CTL0_RPD_STROBE (1 << 15) 137#define XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA1 (1 << 14) 138#define XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA0 (1 << 13) 139#define XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_STROBE (1 << 9) 140#define XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA1 (1 << 8) 141#define XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA0 (1 << 7) 142#define XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_STROBE (1 << 6) 143#define XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA1 (1 << 5) 144#define XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA0 (1 << 4) 145#define XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_STROBE (1 << 3) 146#define XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA1 (1 << 2) 147#define XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA0 (1 << 1) 148 149#define XUSB_PADCTL_HSIC_PADX_CTL1(x) (0x304 + (x) * 0x20) 150#define XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_SHIFT 0 151#define XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_MASK 0xf 152 153#define XUSB_PADCTL_HSIC_PADX_CTL2(x) (0x308 + (x) * 0x20) 154#define XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_SHIFT 8 155#define XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_MASK 0xf 156#define XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_SHIFT 0 157#define XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_MASK 0xff 158 159#define XUSB_PADCTL_HSIC_PAD_TRK_CTL 0x340 160#define XUSB_PADCTL_HSIC_PAD_TRK_CTL_PD_TRK (1 << 19) 161#define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_SHIFT 12 162#define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_MASK 0x7f 163#define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_VAL 0x0a 164#define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_SHIFT 5 165#define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_MASK 0x7f 166#define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_VAL 0x1e 167 168#define XUSB_PADCTL_HSIC_STRB_TRIM_CONTROL 0x344 169 170#define XUSB_PADCTL_UPHY_PLL_P0_CTL1 0x360 171#define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT 20 172#define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_MASK 0xff 173#define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_USB_VAL 0x19 174#define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SATA_VAL 0x1e 175#define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_SHIFT 16 176#define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_MASK 0x3 177#define XUSB_PADCTL_UPHY_PLL_CTL1_LOCKDET_STATUS (1 << 15) 178#define XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD (1 << 4) 179#define XUSB_PADCTL_UPHY_PLL_CTL1_ENABLE (1 << 3) 180#define XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_SHIFT 1 181#define XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_MASK 0x3 182#define XUSB_PADCTL_UPHY_PLL_CTL1_IDDQ (1 << 0) 183 184#define XUSB_PADCTL_UPHY_PLL_P0_CTL2 0x364 185#define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT 4 186#define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_MASK 0xffffff 187#define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_VAL 0x136 188#define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD (1 << 2) 189#define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE (1 << 1) 190#define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN (1 << 0) 191 192#define XUSB_PADCTL_UPHY_PLL_P0_CTL4 0x36c 193#define XUSB_PADCTL_UPHY_PLL_CTL4_XDIGCLK_EN (1 << 19) 194#define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_EN (1 << 15) 195#define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT 12 196#define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_MASK 0x3 197#define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_USB_VAL 0x2 198#define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SATA_VAL 0x0 199#define XUSB_PADCTL_UPHY_PLL_CTL4_REFCLKBUF_EN (1 << 8) 200#define XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_SHIFT 4 201#define XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_MASK 0xf 202 203#define XUSB_PADCTL_UPHY_PLL_P0_CTL5 0x370 204#define XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT 16 205#define XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_MASK 0xff 206#define XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_VAL 0x2a 207 208#define XUSB_PADCTL_UPHY_PLL_P0_CTL8 0x37c 209#define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE (1 << 31) 210#define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD (1 << 15) 211#define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN (1 << 13) 212#define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN (1 << 12) 213 214#define XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL1(x) (0x460 + (x) * 0x40) 215#define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_SHIFT 20 216#define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_MASK 0x3 217#define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_VAL 0x1 218#define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_TERM_EN BIT(18) 219#define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_MODE_OVRD BIT(13) 220 221#define XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(x) (0x464 + (x) * 0x40) 222#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ BIT(0) 223#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ_OVRD BIT(1) 224#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_MASK GENMASK(5, 4) 225#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_VAL GENMASK(5, 4) 226#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_PWR_OVRD BIT(24) 227#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ BIT(8) 228#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ_OVRD BIT(9) 229#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_MASK GENMASK(13, 12) 230#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_VAL GENMASK(13, 12) 231#define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_PWR_OVRD BIT(25) 232 233#define XUSB_PADCTL_UPHY_PLL_S0_CTL1 0x860 234 235#define XUSB_PADCTL_UPHY_PLL_S0_CTL2 0x864 236 237#define XUSB_PADCTL_UPHY_PLL_S0_CTL4 0x86c 238 239#define XUSB_PADCTL_UPHY_PLL_S0_CTL5 0x870 240 241#define XUSB_PADCTL_UPHY_PLL_S0_CTL8 0x87c 242 243#define XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL1 0x960 244#define XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL2 0x964 245 246#define XUSB_PADCTL_UPHY_USB3_PADX_ECTL1(x) (0xa60 + (x) * 0x40) 247#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_SHIFT 16 248#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_MASK 0x3 249#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_VAL 0x2 250 251#define XUSB_PADCTL_UPHY_USB3_PADX_ECTL2(x) (0xa64 + (x) * 0x40) 252#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_SHIFT 0 253#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_MASK 0xffff 254#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_VAL 0x00fc 255 256#define XUSB_PADCTL_UPHY_USB3_PADX_ECTL3(x) (0xa68 + (x) * 0x40) 257#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL3_RX_DFE_VAL 0xc0077f1f 258 259#define XUSB_PADCTL_UPHY_USB3_PADX_ECTL4(x) (0xa6c + (x) * 0x40) 260#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_SHIFT 16 261#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_MASK 0xffff 262#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_VAL 0x01c7 263 264#define XUSB_PADCTL_UPHY_USB3_PADX_ECTL6(x) (0xa74 + (x) * 0x40) 265#define XUSB_PADCTL_UPHY_USB3_PAD_ECTL6_RX_EQ_CTRL_H_VAL 0xfcf01368 266 267#define XUSB_PADCTL_USB2_VBUS_ID 0xc60 268#define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON (1 << 14) 269#define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT 18 270#define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_MASK 0xf 271#define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_FLOATING 8 272#define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_GROUNDED 0 273 274/* USB2 SLEEPWALK registers */ 275#define UTMIP(_port, _offset1, _offset2) \ 276 (((_port) <= 2) ? (_offset1) : (_offset2)) 277 278#define PMC_UTMIP_UHSIC_SLEEP_CFG(x) UTMIP(x, 0x1fc, 0x4d0) 279#define UTMIP_MASTER_ENABLE(x) UTMIP(x, BIT(8 * (x)), BIT(0)) 280#define UTMIP_FSLS_USE_PMC(x) UTMIP(x, BIT(8 * (x) + 1), \ 281 BIT(1)) 282#define UTMIP_PCTRL_USE_PMC(x) UTMIP(x, BIT(8 * (x) + 2), \ 283 BIT(2)) 284#define UTMIP_TCTRL_USE_PMC(x) UTMIP(x, BIT(8 * (x) + 3), \ 285 BIT(3)) 286#define UTMIP_WAKE_VAL(_port, _value) (((_value) & 0xf) << \ 287 (UTMIP(_port, 8 * (_port) + 4, 4))) 288#define UTMIP_WAKE_VAL_NONE(_port) UTMIP_WAKE_VAL(_port, 12) 289#define UTMIP_WAKE_VAL_ANY(_port) UTMIP_WAKE_VAL(_port, 15) 290 291#define PMC_UTMIP_UHSIC_SLEEP_CFG1 (0x4d0) 292#define UTMIP_RPU_SWITC_LOW_USE_PMC_PX(x) BIT((x) + 8) 293#define UTMIP_RPD_CTRL_USE_PMC_PX(x) BIT((x) + 16) 294 295#define PMC_UTMIP_MASTER_CONFIG (0x274) 296#define UTMIP_PWR(x) UTMIP(x, BIT(x), BIT(4)) 297#define UHSIC_PWR BIT(3) 298 299#define PMC_USB_DEBOUNCE_DEL (0xec) 300#define DEBOUNCE_VAL(x) (((x) & 0xffff) << 0) 301#define UTMIP_LINE_DEB_CNT(x) (((x) & 0xf) << 16) 302#define UHSIC_LINE_DEB_CNT(x) (((x) & 0xf) << 20) 303 304#define PMC_UTMIP_UHSIC_FAKE(x) UTMIP(x, 0x218, 0x294) 305#define UTMIP_FAKE_USBOP_VAL(x) UTMIP(x, BIT(4 * (x)), BIT(8)) 306#define UTMIP_FAKE_USBON_VAL(x) UTMIP(x, BIT(4 * (x) + 1), \ 307 BIT(9)) 308#define UTMIP_FAKE_USBOP_EN(x) UTMIP(x, BIT(4 * (x) + 2), \ 309 BIT(10)) 310#define UTMIP_FAKE_USBON_EN(x) UTMIP(x, BIT(4 * (x) + 3), \ 311 BIT(11)) 312 313#define PMC_UTMIP_UHSIC_SLEEPWALK_CFG(x) UTMIP(x, 0x200, 0x288) 314#define UTMIP_LINEVAL_WALK_EN(x) UTMIP(x, BIT(8 * (x) + 7), \ 315 BIT(15)) 316 317#define PMC_USB_AO (0xf0) 318#define USBOP_VAL_PD(x) UTMIP(x, BIT(4 * (x)), BIT(20)) 319#define USBON_VAL_PD(x) UTMIP(x, BIT(4 * (x) + 1), \ 320 BIT(21)) 321#define STROBE_VAL_PD BIT(12) 322#define DATA0_VAL_PD BIT(13) 323#define DATA1_VAL_PD BIT(24) 324 325#define PMC_UTMIP_UHSIC_SAVED_STATE(x) UTMIP(x, 0x1f0, 0x280) 326#define SPEED(_port, _value) (((_value) & 0x3) << \ 327 (UTMIP(_port, 8 * (_port), 8))) 328#define UTMI_HS(_port) SPEED(_port, 0) 329#define UTMI_FS(_port) SPEED(_port, 1) 330#define UTMI_LS(_port) SPEED(_port, 2) 331#define UTMI_RST(_port) SPEED(_port, 3) 332 333#define PMC_UTMIP_UHSIC_TRIGGERS (0x1ec) 334#define UTMIP_CLR_WALK_PTR(x) UTMIP(x, BIT(x), BIT(16)) 335#define UTMIP_CAP_CFG(x) UTMIP(x, BIT((x) + 4), BIT(17)) 336#define UTMIP_CLR_WAKE_ALARM(x) UTMIP(x, BIT((x) + 12), \ 337 BIT(19)) 338#define UHSIC_CLR_WALK_PTR BIT(3) 339#define UHSIC_CLR_WAKE_ALARM BIT(15) 340 341#define PMC_UTMIP_SLEEPWALK_PX(x) UTMIP(x, 0x204 + (4 * (x)), \ 342 0x4e0) 343/* phase A */ 344#define UTMIP_USBOP_RPD_A BIT(0) 345#define UTMIP_USBON_RPD_A BIT(1) 346#define UTMIP_AP_A BIT(4) 347#define UTMIP_AN_A BIT(5) 348#define UTMIP_HIGHZ_A BIT(6) 349/* phase B */ 350#define UTMIP_USBOP_RPD_B BIT(8) 351#define UTMIP_USBON_RPD_B BIT(9) 352#define UTMIP_AP_B BIT(12) 353#define UTMIP_AN_B BIT(13) 354#define UTMIP_HIGHZ_B BIT(14) 355/* phase C */ 356#define UTMIP_USBOP_RPD_C BIT(16) 357#define UTMIP_USBON_RPD_C BIT(17) 358#define UTMIP_AP_C BIT(20) 359#define UTMIP_AN_C BIT(21) 360#define UTMIP_HIGHZ_C BIT(22) 361/* phase D */ 362#define UTMIP_USBOP_RPD_D BIT(24) 363#define UTMIP_USBON_RPD_D BIT(25) 364#define UTMIP_AP_D BIT(28) 365#define UTMIP_AN_D BIT(29) 366#define UTMIP_HIGHZ_D BIT(30) 367 368#define PMC_UTMIP_UHSIC_LINE_WAKEUP (0x26c) 369#define UTMIP_LINE_WAKEUP_EN(x) UTMIP(x, BIT(x), BIT(4)) 370#define UHSIC_LINE_WAKEUP_EN BIT(3) 371 372#define PMC_UTMIP_TERM_PAD_CFG (0x1f8) 373#define PCTRL_VAL(x) (((x) & 0x3f) << 1) 374#define TCTRL_VAL(x) (((x) & 0x3f) << 7) 375 376#define PMC_UTMIP_PAD_CFGX(x) (0x4c0 + (4 * (x))) 377#define RPD_CTRL_PX(x) (((x) & 0x1f) << 22) 378 379#define PMC_UHSIC_SLEEP_CFG PMC_UTMIP_UHSIC_SLEEP_CFG(0) 380#define UHSIC_MASTER_ENABLE BIT(24) 381#define UHSIC_WAKE_VAL(_value) (((_value) & 0xf) << 28) 382#define UHSIC_WAKE_VAL_SD10 UHSIC_WAKE_VAL(2) 383#define UHSIC_WAKE_VAL_NONE UHSIC_WAKE_VAL(12) 384 385#define PMC_UHSIC_FAKE PMC_UTMIP_UHSIC_FAKE(0) 386#define UHSIC_FAKE_STROBE_VAL BIT(12) 387#define UHSIC_FAKE_DATA_VAL BIT(13) 388#define UHSIC_FAKE_STROBE_EN BIT(14) 389#define UHSIC_FAKE_DATA_EN BIT(15) 390 391#define PMC_UHSIC_SAVED_STATE PMC_UTMIP_UHSIC_SAVED_STATE(0) 392#define UHSIC_MODE(_value) (((_value) & 0x1) << 24) 393#define UHSIC_HS UHSIC_MODE(0) 394#define UHSIC_RST UHSIC_MODE(1) 395 396#define PMC_UHSIC_SLEEPWALK_CFG PMC_UTMIP_UHSIC_SLEEPWALK_CFG(0) 397#define UHSIC_WAKE_WALK_EN BIT(30) 398#define UHSIC_LINEVAL_WALK_EN BIT(31) 399 400#define PMC_UHSIC_SLEEPWALK_P0 (0x210) 401#define UHSIC_DATA0_RPD_A BIT(1) 402#define UHSIC_DATA0_RPU_B BIT(11) 403#define UHSIC_DATA0_RPU_C BIT(19) 404#define UHSIC_DATA0_RPU_D BIT(27) 405#define UHSIC_STROBE_RPU_A BIT(2) 406#define UHSIC_STROBE_RPD_B BIT(8) 407#define UHSIC_STROBE_RPD_C BIT(16) 408#define UHSIC_STROBE_RPD_D BIT(24) 409 410struct tegra210_xusb_fuse_calibration { 411 u32 hs_curr_level[4]; 412 u32 hs_term_range_adj; 413 u32 rpd_ctrl; 414}; 415 416struct tegra210_xusb_padctl_context { 417 u32 usb2_pad_mux; 418 u32 usb2_port_cap; 419 u32 ss_port_map; 420 u32 usb3_pad_mux; 421}; 422 423struct tegra210_xusb_padctl { 424 struct tegra_xusb_padctl base; 425 struct regmap *regmap; 426 427 struct tegra210_xusb_fuse_calibration fuse; 428 struct tegra210_xusb_padctl_context context; 429}; 430 431static inline struct tegra210_xusb_padctl * 432to_tegra210_xusb_padctl(struct tegra_xusb_padctl *padctl) 433{ 434 return container_of(padctl, struct tegra210_xusb_padctl, base); 435} 436 437static const struct tegra_xusb_lane_map tegra210_usb3_map[] = { 438 { 0, "pcie", 6 }, 439 { 1, "pcie", 5 }, 440 { 2, "pcie", 0 }, 441 { 2, "pcie", 3 }, 442 { 3, "pcie", 4 }, 443 { 3, "sata", 0 }, 444 { 0, NULL, 0 } 445}; 446 447static int tegra210_usb3_lane_map(struct tegra_xusb_lane *lane) 448{ 449 const struct tegra_xusb_lane_map *map; 450 451 for (map = tegra210_usb3_map; map->type; map++) { 452 if (map->index == lane->index && 453 strcmp(map->type, lane->pad->soc->name) == 0) { 454 dev_dbg(lane->pad->padctl->dev, "lane = %s map to port = usb3-%d\n", 455 lane->pad->soc->lanes[lane->index].name, map->port); 456 return map->port; 457 } 458 } 459 460 return -EINVAL; 461} 462 463/* must be called under padctl->lock */ 464static int tegra210_pex_uphy_enable(struct tegra_xusb_padctl *padctl) 465{ 466 struct tegra_xusb_pcie_pad *pcie = to_pcie_pad(padctl->pcie); 467 unsigned long timeout; 468 u32 value; 469 unsigned int i; 470 int err; 471 472 if (pcie->enable) 473 return 0; 474 475 err = clk_prepare_enable(pcie->pll); 476 if (err < 0) 477 return err; 478 479 if (tegra210_plle_hw_sequence_is_enabled()) 480 goto skip_pll_init; 481 482 err = reset_control_deassert(pcie->rst); 483 if (err < 0) 484 goto disable; 485 486 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 487 value &= ~(XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_MASK << 488 XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT); 489 value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_VAL << 490 XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT; 491 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 492 493 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL5); 494 value &= ~(XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_MASK << 495 XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT); 496 value |= XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_VAL << 497 XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT; 498 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL5); 499 500 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 501 value |= XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD; 502 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 503 504 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 505 value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD; 506 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 507 508 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 509 value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD; 510 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 511 512 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL4); 513 value &= ~((XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_MASK << 514 XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT) | 515 (XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_MASK << 516 XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_SHIFT)); 517 value |= (XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_USB_VAL << 518 XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT) | 519 XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_EN; 520 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL4); 521 522 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 523 value &= ~((XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_MASK << 524 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_SHIFT) | 525 (XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_MASK << 526 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT)); 527 value |= XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_USB_VAL << 528 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT; 529 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 530 531 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 532 value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_IDDQ; 533 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 534 535 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 536 value &= ~(XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_MASK << 537 XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_SHIFT); 538 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 539 540 usleep_range(10, 20); 541 542 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL4); 543 value |= XUSB_PADCTL_UPHY_PLL_CTL4_REFCLKBUF_EN; 544 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL4); 545 546 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 547 value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN; 548 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 549 550 timeout = jiffies + msecs_to_jiffies(100); 551 552 while (time_before(jiffies, timeout)) { 553 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 554 if (value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE) 555 break; 556 557 usleep_range(10, 20); 558 } 559 560 if (time_after_eq(jiffies, timeout)) { 561 err = -ETIMEDOUT; 562 goto reset; 563 } 564 565 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 566 value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN; 567 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 568 569 timeout = jiffies + msecs_to_jiffies(100); 570 571 while (time_before(jiffies, timeout)) { 572 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 573 if (!(value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE)) 574 break; 575 576 usleep_range(10, 20); 577 } 578 579 if (time_after_eq(jiffies, timeout)) { 580 err = -ETIMEDOUT; 581 goto reset; 582 } 583 584 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 585 value |= XUSB_PADCTL_UPHY_PLL_CTL1_ENABLE; 586 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 587 588 timeout = jiffies + msecs_to_jiffies(100); 589 590 while (time_before(jiffies, timeout)) { 591 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 592 if (value & XUSB_PADCTL_UPHY_PLL_CTL1_LOCKDET_STATUS) 593 break; 594 595 usleep_range(10, 20); 596 } 597 598 if (time_after_eq(jiffies, timeout)) { 599 err = -ETIMEDOUT; 600 goto reset; 601 } 602 603 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 604 value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN | 605 XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN; 606 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 607 608 timeout = jiffies + msecs_to_jiffies(100); 609 610 while (time_before(jiffies, timeout)) { 611 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 612 if (value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE) 613 break; 614 615 usleep_range(10, 20); 616 } 617 618 if (time_after_eq(jiffies, timeout)) { 619 err = -ETIMEDOUT; 620 goto reset; 621 } 622 623 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 624 value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN; 625 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 626 627 timeout = jiffies + msecs_to_jiffies(100); 628 629 while (time_before(jiffies, timeout)) { 630 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 631 if (!(value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE)) 632 break; 633 634 usleep_range(10, 20); 635 } 636 637 if (time_after_eq(jiffies, timeout)) { 638 err = -ETIMEDOUT; 639 goto reset; 640 } 641 642 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 643 value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN; 644 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 645 646 tegra210_xusb_pll_hw_control_enable(); 647 648 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 649 value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD; 650 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1); 651 652 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 653 value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD; 654 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2); 655 656 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 657 value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD; 658 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8); 659 660 usleep_range(10, 20); 661 662 tegra210_xusb_pll_hw_sequence_start(); 663 664skip_pll_init: 665 pcie->enable = true; 666 667 for (i = 0; i < padctl->pcie->soc->num_lanes; i++) { 668 value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX); 669 value |= XUSB_PADCTL_USB3_PAD_MUX_PCIE_IDDQ_DISABLE(i); 670 padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX); 671 } 672 673 return 0; 674 675reset: 676 reset_control_assert(pcie->rst); 677disable: 678 clk_disable_unprepare(pcie->pll); 679 return err; 680} 681 682static void tegra210_pex_uphy_disable(struct tegra_xusb_padctl *padctl) 683{ 684 struct tegra_xusb_pcie_pad *pcie = to_pcie_pad(padctl->pcie); 685 u32 value; 686 unsigned int i; 687 688 if (WARN_ON(!pcie->enable)) 689 return; 690 691 pcie->enable = false; 692 693 for (i = 0; i < padctl->pcie->soc->num_lanes; i++) { 694 value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX); 695 value &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_IDDQ_DISABLE(i); 696 padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX); 697 } 698 699 clk_disable_unprepare(pcie->pll); 700} 701 702/* must be called under padctl->lock */ 703static int tegra210_sata_uphy_enable(struct tegra_xusb_padctl *padctl) 704{ 705 struct tegra_xusb_sata_pad *sata = to_sata_pad(padctl->sata); 706 struct tegra_xusb_lane *lane = tegra_xusb_find_lane(padctl, "sata", 0); 707 unsigned long timeout; 708 u32 value; 709 unsigned int i; 710 int err; 711 bool usb; 712 713 if (sata->enable) 714 return 0; 715 716 if (IS_ERR(lane)) 717 return 0; 718 719 if (tegra210_plle_hw_sequence_is_enabled()) 720 goto skip_pll_init; 721 722 usb = tegra_xusb_lane_check(lane, "usb3-ss"); 723 724 err = clk_prepare_enable(sata->pll); 725 if (err < 0) 726 return err; 727 728 err = reset_control_deassert(sata->rst); 729 if (err < 0) 730 goto disable; 731 732 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 733 value &= ~(XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_MASK << 734 XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT); 735 value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_VAL << 736 XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT; 737 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 738 739 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL5); 740 value &= ~(XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_MASK << 741 XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT); 742 value |= XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_VAL << 743 XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT; 744 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL5); 745 746 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 747 value |= XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD; 748 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 749 750 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 751 value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD; 752 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 753 754 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 755 value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD; 756 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 757 758 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL4); 759 value &= ~((XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_MASK << 760 XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT) | 761 (XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_MASK << 762 XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_SHIFT)); 763 value |= XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_EN; 764 765 if (usb) 766 value |= (XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_USB_VAL << 767 XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT); 768 else 769 value |= (XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SATA_VAL << 770 XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT); 771 772 value &= ~XUSB_PADCTL_UPHY_PLL_CTL4_XDIGCLK_EN; 773 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL4); 774 775 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 776 value &= ~((XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_MASK << 777 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_SHIFT) | 778 (XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_MASK << 779 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT)); 780 781 if (usb) 782 value |= XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_USB_VAL << 783 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT; 784 else 785 value |= XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SATA_VAL << 786 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT; 787 788 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 789 790 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 791 value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_IDDQ; 792 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 793 794 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 795 value &= ~(XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_MASK << 796 XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_SHIFT); 797 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 798 799 usleep_range(10, 20); 800 801 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL4); 802 value |= XUSB_PADCTL_UPHY_PLL_CTL4_REFCLKBUF_EN; 803 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL4); 804 805 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 806 value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN; 807 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 808 809 timeout = jiffies + msecs_to_jiffies(100); 810 811 while (time_before(jiffies, timeout)) { 812 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 813 if (value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE) 814 break; 815 816 usleep_range(10, 20); 817 } 818 819 if (time_after_eq(jiffies, timeout)) { 820 err = -ETIMEDOUT; 821 goto reset; 822 } 823 824 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 825 value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN; 826 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 827 828 timeout = jiffies + msecs_to_jiffies(100); 829 830 while (time_before(jiffies, timeout)) { 831 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 832 if (!(value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE)) 833 break; 834 835 usleep_range(10, 20); 836 } 837 838 if (time_after_eq(jiffies, timeout)) { 839 err = -ETIMEDOUT; 840 goto reset; 841 } 842 843 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 844 value |= XUSB_PADCTL_UPHY_PLL_CTL1_ENABLE; 845 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 846 847 timeout = jiffies + msecs_to_jiffies(100); 848 849 while (time_before(jiffies, timeout)) { 850 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 851 if (value & XUSB_PADCTL_UPHY_PLL_CTL1_LOCKDET_STATUS) 852 break; 853 854 usleep_range(10, 20); 855 } 856 857 if (time_after_eq(jiffies, timeout)) { 858 err = -ETIMEDOUT; 859 goto reset; 860 } 861 862 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 863 value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN | 864 XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN; 865 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 866 867 timeout = jiffies + msecs_to_jiffies(100); 868 869 while (time_before(jiffies, timeout)) { 870 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 871 if (value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE) 872 break; 873 874 usleep_range(10, 20); 875 } 876 877 if (time_after_eq(jiffies, timeout)) { 878 err = -ETIMEDOUT; 879 goto reset; 880 } 881 882 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 883 value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN; 884 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 885 886 timeout = jiffies + msecs_to_jiffies(100); 887 888 while (time_before(jiffies, timeout)) { 889 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 890 if (!(value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE)) 891 break; 892 893 usleep_range(10, 20); 894 } 895 896 if (time_after_eq(jiffies, timeout)) { 897 err = -ETIMEDOUT; 898 goto reset; 899 } 900 901 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 902 value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN; 903 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 904 905 tegra210_sata_pll_hw_control_enable(); 906 907 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 908 value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD; 909 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1); 910 911 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 912 value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD; 913 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2); 914 915 value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 916 value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD; 917 padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8); 918 919 usleep_range(10, 20); 920 921 tegra210_sata_pll_hw_sequence_start(); 922 923skip_pll_init: 924 sata->enable = true; 925 926 for (i = 0; i < padctl->sata->soc->num_lanes; i++) { 927 value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX); 928 value |= XUSB_PADCTL_USB3_PAD_MUX_SATA_IDDQ_DISABLE(i); 929 padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX); 930 } 931 932 return 0; 933 934reset: 935 reset_control_assert(sata->rst); 936disable: 937 clk_disable_unprepare(sata->pll); 938 return err; 939} 940 941static void tegra210_sata_uphy_disable(struct tegra_xusb_padctl *padctl) 942{ 943 struct tegra_xusb_sata_pad *sata = to_sata_pad(padctl->sata); 944 u32 value; 945 unsigned int i; 946 947 if (WARN_ON(!sata->enable)) 948 return; 949 950 sata->enable = false; 951 952 for (i = 0; i < padctl->sata->soc->num_lanes; i++) { 953 value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX); 954 value &= ~XUSB_PADCTL_USB3_PAD_MUX_SATA_IDDQ_DISABLE(i); 955 padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX); 956 } 957 958 clk_disable_unprepare(sata->pll); 959} 960 961static void tegra210_aux_mux_lp0_clamp_disable(struct tegra_xusb_padctl *padctl) 962{ 963 u32 value; 964 965 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1); 966 value &= ~XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN; 967 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1); 968 969 usleep_range(100, 200); 970 971 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1); 972 value &= ~XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN_EARLY; 973 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1); 974 975 usleep_range(100, 200); 976 977 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1); 978 value &= ~XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN; 979 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1); 980} 981 982static void tegra210_aux_mux_lp0_clamp_enable(struct tegra_xusb_padctl *padctl) 983{ 984 u32 value; 985 986 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1); 987 value |= XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN; 988 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1); 989 990 usleep_range(100, 200); 991 992 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1); 993 value |= XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN_EARLY; 994 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1); 995 996 usleep_range(100, 200); 997 998 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1); 999 value |= XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN; 1000 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1); 1001} 1002 1003static 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 1021static void __maybe_unused 1022tegra210_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 1033static 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 1058static 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 1090static 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 1119static 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 1150static 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 1181static 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 1197static 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 1222static 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 1247static 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 1261static 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 1286static 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 1311static 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 1335static 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 1508static 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 1556static 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 1658static 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 1695static 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 1742static const char *tegra210_usb2_functions[] = { 1743 "snps", 1744 "xusb", 1745 "uart" 1746}; 1747 1748static 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 1755static struct tegra_xusb_lane * 1756tegra210_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 1781static 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 1788static 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 1798static 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 1833static 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 1855static 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 1879static 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 1913static 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 1952static 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 2107out: 2108 mutex_unlock(&padctl->lock); 2109 return err; 2110} 2111 2112static 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 2165out: 2166 mutex_unlock(&padctl->lock); 2167 return 0; 2168} 2169 2170static 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 2179static struct tegra_xusb_pad * 2180tegra210_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 2217unregister: 2218 device_unregister(&pad->dev); 2219out: 2220 return ERR_PTR(err); 2221} 2222 2223static 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 2230static const struct tegra_xusb_pad_ops tegra210_usb2_ops = { 2231 .probe = tegra210_usb2_pad_probe, 2232 .remove = tegra210_usb2_pad_remove, 2233}; 2234 2235static 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 2242static const char *tegra210_hsic_functions[] = { 2243 "snps", 2244 "xusb", 2245}; 2246 2247static const struct tegra_xusb_lane_soc tegra210_hsic_lanes[] = { 2248 TEGRA210_LANE("hsic-0", 0x004, 14, 0x1, hsic), 2249}; 2250 2251static struct tegra_xusb_lane * 2252tegra210_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 2277static 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 2284static 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 2294static 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 2310static int tegra210_hsic_phy_exit(struct phy *phy) 2311{ 2312 return 0; 2313} 2314 2315static 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 2395disable: 2396 regulator_disable(pad->supply); 2397 return err; 2398} 2399 2400static 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 2425static 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 2433static struct tegra_xusb_pad * 2434tegra210_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 2471unregister: 2472 device_unregister(&pad->dev); 2473out: 2474 return ERR_PTR(err); 2475} 2476 2477static 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 2484static const struct tegra_xusb_pad_ops tegra210_hsic_ops = { 2485 .probe = tegra210_hsic_pad_probe, 2486 .remove = tegra210_hsic_pad_remove, 2487}; 2488 2489static 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 2496static 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 2515static 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 2545static const char *tegra210_pcie_functions[] = { 2546 "pcie-x1", 2547 "usb3-ss", 2548 "sata", 2549 "pcie-x4", 2550}; 2551 2552static 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 2562static struct tegra_xusb_usb3_port * 2563tegra210_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 2577static 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 2650static 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} 2684static struct tegra_xusb_lane * 2685tegra210_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 2710static 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 2717static 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 2729static 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 2743static 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 2758static 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 2773static 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 2780static struct tegra_xusb_pad * 2781tegra210_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 2825unregister: 2826 device_unregister(&pad->dev); 2827out: 2828 return ERR_PTR(err); 2829} 2830 2831static 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 2838static const struct tegra_xusb_pad_ops tegra210_pcie_ops = { 2839 .probe = tegra210_pcie_pad_probe, 2840 .remove = tegra210_pcie_pad_remove, 2841}; 2842 2843static 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 2850static 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 2854static struct tegra_xusb_lane * 2855tegra210_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 2880static 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 2887static 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 2899static 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 2912static 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 2927static 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 2942static 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 2949static struct tegra_xusb_pad * 2950tegra210_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 2987unregister: 2988 device_unregister(&pad->dev); 2989out: 2990 return ERR_PTR(err); 2991} 2992 2993static 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 3000static const struct tegra_xusb_pad_ops tegra210_sata_ops = { 3001 .probe = tegra210_sata_pad_probe, 3002 .remove = tegra210_sata_pad_remove, 3003}; 3004 3005static 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 3012static 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 3019static int tegra210_usb2_port_enable(struct tegra_xusb_port *port) 3020{ 3021 return 0; 3022} 3023 3024static void tegra210_usb2_port_disable(struct tegra_xusb_port *port) 3025{ 3026} 3027 3028static struct tegra_xusb_lane * 3029tegra210_usb2_port_map(struct tegra_xusb_port *port) 3030{ 3031 return tegra_xusb_find_lane(port->padctl, "usb2", port->index); 3032} 3033 3034static 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 3042static int tegra210_hsic_port_enable(struct tegra_xusb_port *port) 3043{ 3044 return 0; 3045} 3046 3047static void tegra210_hsic_port_disable(struct tegra_xusb_port *port) 3048{ 3049} 3050 3051static struct tegra_xusb_lane * 3052tegra210_hsic_port_map(struct tegra_xusb_port *port) 3053{ 3054 return tegra_xusb_find_lane(port->padctl, "hsic", port->index); 3055} 3056 3057static 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 3064static int tegra210_usb3_port_enable(struct tegra_xusb_port *port) 3065{ 3066 return 0; 3067} 3068 3069static void tegra210_usb3_port_disable(struct tegra_xusb_port *port) 3070{ 3071} 3072 3073static struct tegra_xusb_lane * 3074tegra210_usb3_port_map(struct tegra_xusb_port *port) 3075{ 3076 return tegra_xusb_port_find_lane(port, tegra210_usb3_map, "usb3-ss"); 3077} 3078 3079static 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 3087static 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 3109static int 3110tegra210_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 3141static struct tegra_xusb_padctl * 3142tegra210_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 3180out: 3181 return &padctl->base; 3182} 3183 3184static void tegra210_xusb_padctl_remove(struct tegra_xusb_padctl *padctl) 3185{ 3186} 3187 3188static 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 3202static 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 3228static 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 3240static 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 3252static 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 3263static 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 3270const 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}; 3292EXPORT_SYMBOL_GPL(tegra210_xusb_padctl_soc); 3293 3294MODULE_AUTHOR("Andrew Bresticker <abrestic@chromium.org>"); 3295MODULE_DESCRIPTION("NVIDIA Tegra 210 XUSB Pad Controller driver"); 3296MODULE_LICENSE("GPL v2");