Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * NVIDIA Tegra xHCI host controller driver
0004  *
0005  * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights reserved.
0006  * Copyright (C) 2014 Google, Inc.
0007  */
0008 
0009 #include <linux/clk.h>
0010 #include <linux/delay.h>
0011 #include <linux/dma-mapping.h>
0012 #include <linux/firmware.h>
0013 #include <linux/interrupt.h>
0014 #include <linux/iopoll.h>
0015 #include <linux/kernel.h>
0016 #include <linux/module.h>
0017 #include <linux/of_device.h>
0018 #include <linux/of_irq.h>
0019 #include <linux/phy/phy.h>
0020 #include <linux/phy/tegra/xusb.h>
0021 #include <linux/platform_device.h>
0022 #include <linux/usb/ch9.h>
0023 #include <linux/pm.h>
0024 #include <linux/pm_domain.h>
0025 #include <linux/pm_runtime.h>
0026 #include <linux/regulator/consumer.h>
0027 #include <linux/reset.h>
0028 #include <linux/slab.h>
0029 #include <linux/usb/otg.h>
0030 #include <linux/usb/phy.h>
0031 #include <linux/usb/role.h>
0032 #include <soc/tegra/pmc.h>
0033 
0034 #include "xhci.h"
0035 
0036 #define TEGRA_XHCI_SS_HIGH_SPEED 120000000
0037 #define TEGRA_XHCI_SS_LOW_SPEED   12000000
0038 
0039 /* FPCI CFG registers */
0040 #define XUSB_CFG_1              0x004
0041 #define  XUSB_IO_SPACE_EN           BIT(0)
0042 #define  XUSB_MEM_SPACE_EN          BIT(1)
0043 #define  XUSB_BUS_MASTER_EN         BIT(2)
0044 #define XUSB_CFG_4              0x010
0045 #define  XUSB_BASE_ADDR_SHIFT           15
0046 #define  XUSB_BASE_ADDR_MASK            0x1ffff
0047 #define XUSB_CFG_16             0x040
0048 #define XUSB_CFG_24             0x060
0049 #define XUSB_CFG_AXI_CFG            0x0f8
0050 #define XUSB_CFG_ARU_C11_CSBRANGE       0x41c
0051 #define XUSB_CFG_ARU_CONTEXT            0x43c
0052 #define XUSB_CFG_ARU_CONTEXT_HS_PLS     0x478
0053 #define XUSB_CFG_ARU_CONTEXT_FS_PLS     0x47c
0054 #define XUSB_CFG_ARU_CONTEXT_HSFS_SPEED     0x480
0055 #define XUSB_CFG_ARU_CONTEXT_HSFS_PP        0x484
0056 #define XUSB_CFG_CSB_BASE_ADDR          0x800
0057 
0058 /* FPCI mailbox registers */
0059 /* XUSB_CFG_ARU_MBOX_CMD */
0060 #define  MBOX_DEST_FALC             BIT(27)
0061 #define  MBOX_DEST_PME              BIT(28)
0062 #define  MBOX_DEST_SMI              BIT(29)
0063 #define  MBOX_DEST_XHCI             BIT(30)
0064 #define  MBOX_INT_EN                BIT(31)
0065 /* XUSB_CFG_ARU_MBOX_DATA_IN and XUSB_CFG_ARU_MBOX_DATA_OUT */
0066 #define  CMD_DATA_SHIFT             0
0067 #define  CMD_DATA_MASK              0xffffff
0068 #define  CMD_TYPE_SHIFT             24
0069 #define  CMD_TYPE_MASK              0xff
0070 /* XUSB_CFG_ARU_MBOX_OWNER */
0071 #define  MBOX_OWNER_NONE            0
0072 #define  MBOX_OWNER_FW              1
0073 #define  MBOX_OWNER_SW              2
0074 #define XUSB_CFG_ARU_SMI_INTR           0x428
0075 #define  MBOX_SMI_INTR_FW_HANG          BIT(1)
0076 #define  MBOX_SMI_INTR_EN           BIT(3)
0077 
0078 /* IPFS registers */
0079 #define IPFS_XUSB_HOST_MSI_BAR_SZ_0     0x0c0
0080 #define IPFS_XUSB_HOST_MSI_AXI_BAR_ST_0     0x0c4
0081 #define IPFS_XUSB_HOST_MSI_FPCI_BAR_ST_0    0x0c8
0082 #define IPFS_XUSB_HOST_MSI_VEC0_0       0x100
0083 #define IPFS_XUSB_HOST_MSI_EN_VEC0_0        0x140
0084 #define IPFS_XUSB_HOST_CONFIGURATION_0      0x180
0085 #define  IPFS_EN_FPCI               BIT(0)
0086 #define IPFS_XUSB_HOST_FPCI_ERROR_MASKS_0   0x184
0087 #define IPFS_XUSB_HOST_INTR_MASK_0      0x188
0088 #define  IPFS_IP_INT_MASK           BIT(16)
0089 #define IPFS_XUSB_HOST_INTR_ENABLE_0        0x198
0090 #define IPFS_XUSB_HOST_UFPCI_CONFIG_0       0x19c
0091 #define IPFS_XUSB_HOST_CLKGATE_HYSTERESIS_0 0x1bc
0092 #define IPFS_XUSB_HOST_MCCIF_FIFOCTRL_0     0x1dc
0093 
0094 #define CSB_PAGE_SELECT_MASK            0x7fffff
0095 #define CSB_PAGE_SELECT_SHIFT           9
0096 #define CSB_PAGE_OFFSET_MASK            0x1ff
0097 #define CSB_PAGE_SELECT(addr)   ((addr) >> (CSB_PAGE_SELECT_SHIFT) &    \
0098                  CSB_PAGE_SELECT_MASK)
0099 #define CSB_PAGE_OFFSET(addr)   ((addr) & CSB_PAGE_OFFSET_MASK)
0100 
0101 /* Falcon CSB registers */
0102 #define XUSB_FALC_CPUCTL            0x100
0103 #define  CPUCTL_STARTCPU            BIT(1)
0104 #define  CPUCTL_STATE_HALTED            BIT(4)
0105 #define  CPUCTL_STATE_STOPPED           BIT(5)
0106 #define XUSB_FALC_BOOTVEC           0x104
0107 #define XUSB_FALC_DMACTL            0x10c
0108 #define XUSB_FALC_IMFILLRNG1            0x154
0109 #define  IMFILLRNG1_TAG_MASK            0xffff
0110 #define  IMFILLRNG1_TAG_LO_SHIFT        0
0111 #define  IMFILLRNG1_TAG_HI_SHIFT        16
0112 #define XUSB_FALC_IMFILLCTL         0x158
0113 
0114 /* MP CSB registers */
0115 #define XUSB_CSB_MP_ILOAD_ATTR          0x101a00
0116 #define XUSB_CSB_MP_ILOAD_BASE_LO       0x101a04
0117 #define XUSB_CSB_MP_ILOAD_BASE_HI       0x101a08
0118 #define XUSB_CSB_MP_L2IMEMOP_SIZE       0x101a10
0119 #define  L2IMEMOP_SIZE_SRC_OFFSET_SHIFT     8
0120 #define  L2IMEMOP_SIZE_SRC_OFFSET_MASK      0x3ff
0121 #define  L2IMEMOP_SIZE_SRC_COUNT_SHIFT      24
0122 #define  L2IMEMOP_SIZE_SRC_COUNT_MASK       0xff
0123 #define XUSB_CSB_MP_L2IMEMOP_TRIG       0x101a14
0124 #define  L2IMEMOP_ACTION_SHIFT          24
0125 #define  L2IMEMOP_INVALIDATE_ALL        (0x40 << L2IMEMOP_ACTION_SHIFT)
0126 #define  L2IMEMOP_LOAD_LOCKED_RESULT        (0x11 << L2IMEMOP_ACTION_SHIFT)
0127 #define XUSB_CSB_MEMPOOL_L2IMEMOP_RESULT    0x101a18
0128 #define  L2IMEMOP_RESULT_VLD            BIT(31)
0129 #define XUSB_CSB_MP_APMAP           0x10181c
0130 #define  APMAP_BOOTPATH             BIT(31)
0131 
0132 #define IMEM_BLOCK_SIZE             256
0133 
0134 struct tegra_xusb_fw_header {
0135     __le32 boot_loadaddr_in_imem;
0136     __le32 boot_codedfi_offset;
0137     __le32 boot_codetag;
0138     __le32 boot_codesize;
0139     __le32 phys_memaddr;
0140     __le16 reqphys_memsize;
0141     __le16 alloc_phys_memsize;
0142     __le32 rodata_img_offset;
0143     __le32 rodata_section_start;
0144     __le32 rodata_section_end;
0145     __le32 main_fnaddr;
0146     __le32 fwimg_cksum;
0147     __le32 fwimg_created_time;
0148     __le32 imem_resident_start;
0149     __le32 imem_resident_end;
0150     __le32 idirect_start;
0151     __le32 idirect_end;
0152     __le32 l2_imem_start;
0153     __le32 l2_imem_end;
0154     __le32 version_id;
0155     u8 init_ddirect;
0156     u8 reserved[3];
0157     __le32 phys_addr_log_buffer;
0158     __le32 total_log_entries;
0159     __le32 dequeue_ptr;
0160     __le32 dummy_var[2];
0161     __le32 fwimg_len;
0162     u8 magic[8];
0163     __le32 ss_low_power_entry_timeout;
0164     u8 num_hsic_port;
0165     u8 padding[139]; /* Pad to 256 bytes */
0166 };
0167 
0168 struct tegra_xusb_phy_type {
0169     const char *name;
0170     unsigned int num;
0171 };
0172 
0173 struct tegra_xusb_mbox_regs {
0174     u16 cmd;
0175     u16 data_in;
0176     u16 data_out;
0177     u16 owner;
0178 };
0179 
0180 struct tegra_xusb_context_soc {
0181     struct {
0182         const unsigned int *offsets;
0183         unsigned int num_offsets;
0184     } ipfs;
0185 
0186     struct {
0187         const unsigned int *offsets;
0188         unsigned int num_offsets;
0189     } fpci;
0190 };
0191 
0192 struct tegra_xusb_soc {
0193     const char *firmware;
0194     const char * const *supply_names;
0195     unsigned int num_supplies;
0196     const struct tegra_xusb_phy_type *phy_types;
0197     unsigned int num_types;
0198     const struct tegra_xusb_context_soc *context;
0199 
0200     struct {
0201         struct {
0202             unsigned int offset;
0203             unsigned int count;
0204         } usb2, ulpi, hsic, usb3;
0205     } ports;
0206 
0207     struct tegra_xusb_mbox_regs mbox;
0208 
0209     bool scale_ss_clock;
0210     bool has_ipfs;
0211     bool lpm_support;
0212     bool otg_reset_sspi;
0213 };
0214 
0215 struct tegra_xusb_context {
0216     u32 *ipfs;
0217     u32 *fpci;
0218 };
0219 
0220 struct tegra_xusb {
0221     struct device *dev;
0222     void __iomem *regs;
0223     struct usb_hcd *hcd;
0224 
0225     struct mutex lock;
0226 
0227     int xhci_irq;
0228     int mbox_irq;
0229     int padctl_irq;
0230 
0231     void __iomem *ipfs_base;
0232     void __iomem *fpci_base;
0233 
0234     const struct tegra_xusb_soc *soc;
0235 
0236     struct regulator_bulk_data *supplies;
0237 
0238     struct tegra_xusb_padctl *padctl;
0239 
0240     struct clk *host_clk;
0241     struct clk *falcon_clk;
0242     struct clk *ss_clk;
0243     struct clk *ss_src_clk;
0244     struct clk *hs_src_clk;
0245     struct clk *fs_src_clk;
0246     struct clk *pll_u_480m;
0247     struct clk *clk_m;
0248     struct clk *pll_e;
0249 
0250     struct reset_control *host_rst;
0251     struct reset_control *ss_rst;
0252 
0253     struct device *genpd_dev_host;
0254     struct device *genpd_dev_ss;
0255     bool use_genpd;
0256 
0257     struct phy **phys;
0258     unsigned int num_phys;
0259 
0260     struct usb_phy **usbphy;
0261     unsigned int num_usb_phys;
0262     int otg_usb2_port;
0263     int otg_usb3_port;
0264     bool host_mode;
0265     struct notifier_block id_nb;
0266     struct work_struct id_work;
0267 
0268     /* Firmware loading related */
0269     struct {
0270         size_t size;
0271         void *virt;
0272         dma_addr_t phys;
0273     } fw;
0274 
0275     bool suspended;
0276     struct tegra_xusb_context context;
0277 };
0278 
0279 static struct hc_driver __read_mostly tegra_xhci_hc_driver;
0280 
0281 static inline u32 fpci_readl(struct tegra_xusb *tegra, unsigned int offset)
0282 {
0283     return readl(tegra->fpci_base + offset);
0284 }
0285 
0286 static inline void fpci_writel(struct tegra_xusb *tegra, u32 value,
0287                    unsigned int offset)
0288 {
0289     writel(value, tegra->fpci_base + offset);
0290 }
0291 
0292 static inline u32 ipfs_readl(struct tegra_xusb *tegra, unsigned int offset)
0293 {
0294     return readl(tegra->ipfs_base + offset);
0295 }
0296 
0297 static inline void ipfs_writel(struct tegra_xusb *tegra, u32 value,
0298                    unsigned int offset)
0299 {
0300     writel(value, tegra->ipfs_base + offset);
0301 }
0302 
0303 static u32 csb_readl(struct tegra_xusb *tegra, unsigned int offset)
0304 {
0305     u32 page = CSB_PAGE_SELECT(offset);
0306     u32 ofs = CSB_PAGE_OFFSET(offset);
0307 
0308     fpci_writel(tegra, page, XUSB_CFG_ARU_C11_CSBRANGE);
0309 
0310     return fpci_readl(tegra, XUSB_CFG_CSB_BASE_ADDR + ofs);
0311 }
0312 
0313 static void csb_writel(struct tegra_xusb *tegra, u32 value,
0314                unsigned int offset)
0315 {
0316     u32 page = CSB_PAGE_SELECT(offset);
0317     u32 ofs = CSB_PAGE_OFFSET(offset);
0318 
0319     fpci_writel(tegra, page, XUSB_CFG_ARU_C11_CSBRANGE);
0320     fpci_writel(tegra, value, XUSB_CFG_CSB_BASE_ADDR + ofs);
0321 }
0322 
0323 static int tegra_xusb_set_ss_clk(struct tegra_xusb *tegra,
0324                  unsigned long rate)
0325 {
0326     unsigned long new_parent_rate, old_parent_rate;
0327     struct clk *clk = tegra->ss_src_clk;
0328     unsigned int div;
0329     int err;
0330 
0331     if (clk_get_rate(clk) == rate)
0332         return 0;
0333 
0334     switch (rate) {
0335     case TEGRA_XHCI_SS_HIGH_SPEED:
0336         /*
0337          * Reparent to PLLU_480M. Set divider first to avoid
0338          * overclocking.
0339          */
0340         old_parent_rate = clk_get_rate(clk_get_parent(clk));
0341         new_parent_rate = clk_get_rate(tegra->pll_u_480m);
0342         div = new_parent_rate / rate;
0343 
0344         err = clk_set_rate(clk, old_parent_rate / div);
0345         if (err)
0346             return err;
0347 
0348         err = clk_set_parent(clk, tegra->pll_u_480m);
0349         if (err)
0350             return err;
0351 
0352         /*
0353          * The rate should already be correct, but set it again just
0354          * to be sure.
0355          */
0356         err = clk_set_rate(clk, rate);
0357         if (err)
0358             return err;
0359 
0360         break;
0361 
0362     case TEGRA_XHCI_SS_LOW_SPEED:
0363         /* Reparent to CLK_M */
0364         err = clk_set_parent(clk, tegra->clk_m);
0365         if (err)
0366             return err;
0367 
0368         err = clk_set_rate(clk, rate);
0369         if (err)
0370             return err;
0371 
0372         break;
0373 
0374     default:
0375         dev_err(tegra->dev, "Invalid SS rate: %lu Hz\n", rate);
0376         return -EINVAL;
0377     }
0378 
0379     if (clk_get_rate(clk) != rate) {
0380         dev_err(tegra->dev, "SS clock doesn't match requested rate\n");
0381         return -EINVAL;
0382     }
0383 
0384     return 0;
0385 }
0386 
0387 static unsigned long extract_field(u32 value, unsigned int start,
0388                    unsigned int count)
0389 {
0390     return (value >> start) & ((1 << count) - 1);
0391 }
0392 
0393 /* Command requests from the firmware */
0394 enum tegra_xusb_mbox_cmd {
0395     MBOX_CMD_MSG_ENABLED = 1,
0396     MBOX_CMD_INC_FALC_CLOCK,
0397     MBOX_CMD_DEC_FALC_CLOCK,
0398     MBOX_CMD_INC_SSPI_CLOCK,
0399     MBOX_CMD_DEC_SSPI_CLOCK,
0400     MBOX_CMD_SET_BW, /* no ACK/NAK required */
0401     MBOX_CMD_SET_SS_PWR_GATING,
0402     MBOX_CMD_SET_SS_PWR_UNGATING,
0403     MBOX_CMD_SAVE_DFE_CTLE_CTX,
0404     MBOX_CMD_AIRPLANE_MODE_ENABLED, /* unused */
0405     MBOX_CMD_AIRPLANE_MODE_DISABLED, /* unused */
0406     MBOX_CMD_START_HSIC_IDLE,
0407     MBOX_CMD_STOP_HSIC_IDLE,
0408     MBOX_CMD_DBC_WAKE_STACK, /* unused */
0409     MBOX_CMD_HSIC_PRETEND_CONNECT,
0410     MBOX_CMD_RESET_SSPI,
0411     MBOX_CMD_DISABLE_SS_LFPS_DETECTION,
0412     MBOX_CMD_ENABLE_SS_LFPS_DETECTION,
0413 
0414     MBOX_CMD_MAX,
0415 
0416     /* Response message to above commands */
0417     MBOX_CMD_ACK = 128,
0418     MBOX_CMD_NAK
0419 };
0420 
0421 struct tegra_xusb_mbox_msg {
0422     u32 cmd;
0423     u32 data;
0424 };
0425 
0426 static inline u32 tegra_xusb_mbox_pack(const struct tegra_xusb_mbox_msg *msg)
0427 {
0428     return (msg->cmd & CMD_TYPE_MASK) << CMD_TYPE_SHIFT |
0429            (msg->data & CMD_DATA_MASK) << CMD_DATA_SHIFT;
0430 }
0431 static inline void tegra_xusb_mbox_unpack(struct tegra_xusb_mbox_msg *msg,
0432                       u32 value)
0433 {
0434     msg->cmd = (value >> CMD_TYPE_SHIFT) & CMD_TYPE_MASK;
0435     msg->data = (value >> CMD_DATA_SHIFT) & CMD_DATA_MASK;
0436 }
0437 
0438 static bool tegra_xusb_mbox_cmd_requires_ack(enum tegra_xusb_mbox_cmd cmd)
0439 {
0440     switch (cmd) {
0441     case MBOX_CMD_SET_BW:
0442     case MBOX_CMD_ACK:
0443     case MBOX_CMD_NAK:
0444         return false;
0445 
0446     default:
0447         return true;
0448     }
0449 }
0450 
0451 static int tegra_xusb_mbox_send(struct tegra_xusb *tegra,
0452                 const struct tegra_xusb_mbox_msg *msg)
0453 {
0454     bool wait_for_idle = false;
0455     u32 value;
0456 
0457     /*
0458      * Acquire the mailbox. The firmware still owns the mailbox for
0459      * ACK/NAK messages.
0460      */
0461     if (!(msg->cmd == MBOX_CMD_ACK || msg->cmd == MBOX_CMD_NAK)) {
0462         value = fpci_readl(tegra, tegra->soc->mbox.owner);
0463         if (value != MBOX_OWNER_NONE) {
0464             dev_err(tegra->dev, "mailbox is busy\n");
0465             return -EBUSY;
0466         }
0467 
0468         fpci_writel(tegra, MBOX_OWNER_SW, tegra->soc->mbox.owner);
0469 
0470         value = fpci_readl(tegra, tegra->soc->mbox.owner);
0471         if (value != MBOX_OWNER_SW) {
0472             dev_err(tegra->dev, "failed to acquire mailbox\n");
0473             return -EBUSY;
0474         }
0475 
0476         wait_for_idle = true;
0477     }
0478 
0479     value = tegra_xusb_mbox_pack(msg);
0480     fpci_writel(tegra, value, tegra->soc->mbox.data_in);
0481 
0482     value = fpci_readl(tegra, tegra->soc->mbox.cmd);
0483     value |= MBOX_INT_EN | MBOX_DEST_FALC;
0484     fpci_writel(tegra, value, tegra->soc->mbox.cmd);
0485 
0486     if (wait_for_idle) {
0487         unsigned long timeout = jiffies + msecs_to_jiffies(250);
0488 
0489         while (time_before(jiffies, timeout)) {
0490             value = fpci_readl(tegra, tegra->soc->mbox.owner);
0491             if (value == MBOX_OWNER_NONE)
0492                 break;
0493 
0494             usleep_range(10, 20);
0495         }
0496 
0497         if (time_after(jiffies, timeout))
0498             value = fpci_readl(tegra, tegra->soc->mbox.owner);
0499 
0500         if (value != MBOX_OWNER_NONE)
0501             return -ETIMEDOUT;
0502     }
0503 
0504     return 0;
0505 }
0506 
0507 static irqreturn_t tegra_xusb_mbox_irq(int irq, void *data)
0508 {
0509     struct tegra_xusb *tegra = data;
0510     u32 value;
0511 
0512     /* clear mailbox interrupts */
0513     value = fpci_readl(tegra, XUSB_CFG_ARU_SMI_INTR);
0514     fpci_writel(tegra, value, XUSB_CFG_ARU_SMI_INTR);
0515 
0516     if (value & MBOX_SMI_INTR_FW_HANG)
0517         dev_err(tegra->dev, "controller firmware hang\n");
0518 
0519     return IRQ_WAKE_THREAD;
0520 }
0521 
0522 static void tegra_xusb_mbox_handle(struct tegra_xusb *tegra,
0523                    const struct tegra_xusb_mbox_msg *msg)
0524 {
0525     struct tegra_xusb_padctl *padctl = tegra->padctl;
0526     const struct tegra_xusb_soc *soc = tegra->soc;
0527     struct device *dev = tegra->dev;
0528     struct tegra_xusb_mbox_msg rsp;
0529     unsigned long mask;
0530     unsigned int port;
0531     bool idle, enable;
0532     int err = 0;
0533 
0534     memset(&rsp, 0, sizeof(rsp));
0535 
0536     switch (msg->cmd) {
0537     case MBOX_CMD_INC_FALC_CLOCK:
0538     case MBOX_CMD_DEC_FALC_CLOCK:
0539         rsp.data = clk_get_rate(tegra->falcon_clk) / 1000;
0540         if (rsp.data != msg->data)
0541             rsp.cmd = MBOX_CMD_NAK;
0542         else
0543             rsp.cmd = MBOX_CMD_ACK;
0544 
0545         break;
0546 
0547     case MBOX_CMD_INC_SSPI_CLOCK:
0548     case MBOX_CMD_DEC_SSPI_CLOCK:
0549         if (tegra->soc->scale_ss_clock) {
0550             err = tegra_xusb_set_ss_clk(tegra, msg->data * 1000);
0551             if (err < 0)
0552                 rsp.cmd = MBOX_CMD_NAK;
0553             else
0554                 rsp.cmd = MBOX_CMD_ACK;
0555 
0556             rsp.data = clk_get_rate(tegra->ss_src_clk) / 1000;
0557         } else {
0558             rsp.cmd = MBOX_CMD_ACK;
0559             rsp.data = msg->data;
0560         }
0561 
0562         break;
0563 
0564     case MBOX_CMD_SET_BW:
0565         /*
0566          * TODO: Request bandwidth once EMC scaling is supported.
0567          * Ignore for now since ACK/NAK is not required for SET_BW
0568          * messages.
0569          */
0570         break;
0571 
0572     case MBOX_CMD_SAVE_DFE_CTLE_CTX:
0573         err = tegra_xusb_padctl_usb3_save_context(padctl, msg->data);
0574         if (err < 0) {
0575             dev_err(dev, "failed to save context for USB3#%u: %d\n",
0576                 msg->data, err);
0577             rsp.cmd = MBOX_CMD_NAK;
0578         } else {
0579             rsp.cmd = MBOX_CMD_ACK;
0580         }
0581 
0582         rsp.data = msg->data;
0583         break;
0584 
0585     case MBOX_CMD_START_HSIC_IDLE:
0586     case MBOX_CMD_STOP_HSIC_IDLE:
0587         if (msg->cmd == MBOX_CMD_STOP_HSIC_IDLE)
0588             idle = false;
0589         else
0590             idle = true;
0591 
0592         mask = extract_field(msg->data, 1 + soc->ports.hsic.offset,
0593                      soc->ports.hsic.count);
0594 
0595         for_each_set_bit(port, &mask, 32) {
0596             err = tegra_xusb_padctl_hsic_set_idle(padctl, port,
0597                                   idle);
0598             if (err < 0)
0599                 break;
0600         }
0601 
0602         if (err < 0) {
0603             dev_err(dev, "failed to set HSIC#%u %s: %d\n", port,
0604                 idle ? "idle" : "busy", err);
0605             rsp.cmd = MBOX_CMD_NAK;
0606         } else {
0607             rsp.cmd = MBOX_CMD_ACK;
0608         }
0609 
0610         rsp.data = msg->data;
0611         break;
0612 
0613     case MBOX_CMD_DISABLE_SS_LFPS_DETECTION:
0614     case MBOX_CMD_ENABLE_SS_LFPS_DETECTION:
0615         if (msg->cmd == MBOX_CMD_DISABLE_SS_LFPS_DETECTION)
0616             enable = false;
0617         else
0618             enable = true;
0619 
0620         mask = extract_field(msg->data, 1 + soc->ports.usb3.offset,
0621                      soc->ports.usb3.count);
0622 
0623         for_each_set_bit(port, &mask, soc->ports.usb3.count) {
0624             err = tegra_xusb_padctl_usb3_set_lfps_detect(padctl,
0625                                      port,
0626                                      enable);
0627             if (err < 0)
0628                 break;
0629 
0630             /*
0631              * wait 500us for LFPS detector to be disabled before
0632              * sending ACK
0633              */
0634             if (!enable)
0635                 usleep_range(500, 1000);
0636         }
0637 
0638         if (err < 0) {
0639             dev_err(dev,
0640                 "failed to %s LFPS detection on USB3#%u: %d\n",
0641                 enable ? "enable" : "disable", port, err);
0642             rsp.cmd = MBOX_CMD_NAK;
0643         } else {
0644             rsp.cmd = MBOX_CMD_ACK;
0645         }
0646 
0647         rsp.data = msg->data;
0648         break;
0649 
0650     default:
0651         dev_warn(dev, "unknown message: %#x\n", msg->cmd);
0652         break;
0653     }
0654 
0655     if (rsp.cmd) {
0656         const char *cmd = (rsp.cmd == MBOX_CMD_ACK) ? "ACK" : "NAK";
0657 
0658         err = tegra_xusb_mbox_send(tegra, &rsp);
0659         if (err < 0)
0660             dev_err(dev, "failed to send %s: %d\n", cmd, err);
0661     }
0662 }
0663 
0664 static irqreturn_t tegra_xusb_mbox_thread(int irq, void *data)
0665 {
0666     struct tegra_xusb *tegra = data;
0667     struct tegra_xusb_mbox_msg msg;
0668     u32 value;
0669 
0670     mutex_lock(&tegra->lock);
0671 
0672     if (pm_runtime_suspended(tegra->dev) || tegra->suspended)
0673         goto out;
0674 
0675     value = fpci_readl(tegra, tegra->soc->mbox.data_out);
0676     tegra_xusb_mbox_unpack(&msg, value);
0677 
0678     value = fpci_readl(tegra, tegra->soc->mbox.cmd);
0679     value &= ~MBOX_DEST_SMI;
0680     fpci_writel(tegra, value, tegra->soc->mbox.cmd);
0681 
0682     /* clear mailbox owner if no ACK/NAK is required */
0683     if (!tegra_xusb_mbox_cmd_requires_ack(msg.cmd))
0684         fpci_writel(tegra, MBOX_OWNER_NONE, tegra->soc->mbox.owner);
0685 
0686     tegra_xusb_mbox_handle(tegra, &msg);
0687 
0688 out:
0689     mutex_unlock(&tegra->lock);
0690     return IRQ_HANDLED;
0691 }
0692 
0693 static void tegra_xusb_config(struct tegra_xusb *tegra)
0694 {
0695     u32 regs = tegra->hcd->rsrc_start;
0696     u32 value;
0697 
0698     if (tegra->soc->has_ipfs) {
0699         value = ipfs_readl(tegra, IPFS_XUSB_HOST_CONFIGURATION_0);
0700         value |= IPFS_EN_FPCI;
0701         ipfs_writel(tegra, value, IPFS_XUSB_HOST_CONFIGURATION_0);
0702 
0703         usleep_range(10, 20);
0704     }
0705 
0706     /* Program BAR0 space */
0707     value = fpci_readl(tegra, XUSB_CFG_4);
0708     value &= ~(XUSB_BASE_ADDR_MASK << XUSB_BASE_ADDR_SHIFT);
0709     value |= regs & (XUSB_BASE_ADDR_MASK << XUSB_BASE_ADDR_SHIFT);
0710     fpci_writel(tegra, value, XUSB_CFG_4);
0711 
0712     usleep_range(100, 200);
0713 
0714     /* Enable bus master */
0715     value = fpci_readl(tegra, XUSB_CFG_1);
0716     value |= XUSB_IO_SPACE_EN | XUSB_MEM_SPACE_EN | XUSB_BUS_MASTER_EN;
0717     fpci_writel(tegra, value, XUSB_CFG_1);
0718 
0719     if (tegra->soc->has_ipfs) {
0720         /* Enable interrupt assertion */
0721         value = ipfs_readl(tegra, IPFS_XUSB_HOST_INTR_MASK_0);
0722         value |= IPFS_IP_INT_MASK;
0723         ipfs_writel(tegra, value, IPFS_XUSB_HOST_INTR_MASK_0);
0724 
0725         /* Set hysteresis */
0726         ipfs_writel(tegra, 0x80, IPFS_XUSB_HOST_CLKGATE_HYSTERESIS_0);
0727     }
0728 }
0729 
0730 static int tegra_xusb_clk_enable(struct tegra_xusb *tegra)
0731 {
0732     int err;
0733 
0734     err = clk_prepare_enable(tegra->pll_e);
0735     if (err < 0)
0736         return err;
0737 
0738     err = clk_prepare_enable(tegra->host_clk);
0739     if (err < 0)
0740         goto disable_plle;
0741 
0742     err = clk_prepare_enable(tegra->ss_clk);
0743     if (err < 0)
0744         goto disable_host;
0745 
0746     err = clk_prepare_enable(tegra->falcon_clk);
0747     if (err < 0)
0748         goto disable_ss;
0749 
0750     err = clk_prepare_enable(tegra->fs_src_clk);
0751     if (err < 0)
0752         goto disable_falc;
0753 
0754     err = clk_prepare_enable(tegra->hs_src_clk);
0755     if (err < 0)
0756         goto disable_fs_src;
0757 
0758     if (tegra->soc->scale_ss_clock) {
0759         err = tegra_xusb_set_ss_clk(tegra, TEGRA_XHCI_SS_HIGH_SPEED);
0760         if (err < 0)
0761             goto disable_hs_src;
0762     }
0763 
0764     return 0;
0765 
0766 disable_hs_src:
0767     clk_disable_unprepare(tegra->hs_src_clk);
0768 disable_fs_src:
0769     clk_disable_unprepare(tegra->fs_src_clk);
0770 disable_falc:
0771     clk_disable_unprepare(tegra->falcon_clk);
0772 disable_ss:
0773     clk_disable_unprepare(tegra->ss_clk);
0774 disable_host:
0775     clk_disable_unprepare(tegra->host_clk);
0776 disable_plle:
0777     clk_disable_unprepare(tegra->pll_e);
0778     return err;
0779 }
0780 
0781 static void tegra_xusb_clk_disable(struct tegra_xusb *tegra)
0782 {
0783     clk_disable_unprepare(tegra->pll_e);
0784     clk_disable_unprepare(tegra->host_clk);
0785     clk_disable_unprepare(tegra->ss_clk);
0786     clk_disable_unprepare(tegra->falcon_clk);
0787     clk_disable_unprepare(tegra->fs_src_clk);
0788     clk_disable_unprepare(tegra->hs_src_clk);
0789 }
0790 
0791 static int tegra_xusb_phy_enable(struct tegra_xusb *tegra)
0792 {
0793     unsigned int i;
0794     int err;
0795 
0796     for (i = 0; i < tegra->num_phys; i++) {
0797         err = phy_init(tegra->phys[i]);
0798         if (err)
0799             goto disable_phy;
0800 
0801         err = phy_power_on(tegra->phys[i]);
0802         if (err) {
0803             phy_exit(tegra->phys[i]);
0804             goto disable_phy;
0805         }
0806     }
0807 
0808     return 0;
0809 
0810 disable_phy:
0811     while (i--) {
0812         phy_power_off(tegra->phys[i]);
0813         phy_exit(tegra->phys[i]);
0814     }
0815 
0816     return err;
0817 }
0818 
0819 static void tegra_xusb_phy_disable(struct tegra_xusb *tegra)
0820 {
0821     unsigned int i;
0822 
0823     for (i = 0; i < tegra->num_phys; i++) {
0824         phy_power_off(tegra->phys[i]);
0825         phy_exit(tegra->phys[i]);
0826     }
0827 }
0828 
0829 #ifdef CONFIG_PM_SLEEP
0830 static int tegra_xusb_init_context(struct tegra_xusb *tegra)
0831 {
0832     const struct tegra_xusb_context_soc *soc = tegra->soc->context;
0833 
0834     tegra->context.ipfs = devm_kcalloc(tegra->dev, soc->ipfs.num_offsets,
0835                        sizeof(u32), GFP_KERNEL);
0836     if (!tegra->context.ipfs)
0837         return -ENOMEM;
0838 
0839     tegra->context.fpci = devm_kcalloc(tegra->dev, soc->fpci.num_offsets,
0840                        sizeof(u32), GFP_KERNEL);
0841     if (!tegra->context.fpci)
0842         return -ENOMEM;
0843 
0844     return 0;
0845 }
0846 #else
0847 static inline int tegra_xusb_init_context(struct tegra_xusb *tegra)
0848 {
0849     return 0;
0850 }
0851 #endif
0852 
0853 static int tegra_xusb_request_firmware(struct tegra_xusb *tegra)
0854 {
0855     struct tegra_xusb_fw_header *header;
0856     const struct firmware *fw;
0857     int err;
0858 
0859     err = request_firmware(&fw, tegra->soc->firmware, tegra->dev);
0860     if (err < 0) {
0861         dev_err(tegra->dev, "failed to request firmware: %d\n", err);
0862         return err;
0863     }
0864 
0865     /* Load Falcon controller with its firmware. */
0866     header = (struct tegra_xusb_fw_header *)fw->data;
0867     tegra->fw.size = le32_to_cpu(header->fwimg_len);
0868 
0869     tegra->fw.virt = dma_alloc_coherent(tegra->dev, tegra->fw.size,
0870                         &tegra->fw.phys, GFP_KERNEL);
0871     if (!tegra->fw.virt) {
0872         dev_err(tegra->dev, "failed to allocate memory for firmware\n");
0873         release_firmware(fw);
0874         return -ENOMEM;
0875     }
0876 
0877     header = (struct tegra_xusb_fw_header *)tegra->fw.virt;
0878     memcpy(tegra->fw.virt, fw->data, tegra->fw.size);
0879     release_firmware(fw);
0880 
0881     return 0;
0882 }
0883 
0884 static int tegra_xusb_load_firmware(struct tegra_xusb *tegra)
0885 {
0886     unsigned int code_tag_blocks, code_size_blocks, code_blocks;
0887     struct xhci_cap_regs __iomem *cap = tegra->regs;
0888     struct tegra_xusb_fw_header *header;
0889     struct device *dev = tegra->dev;
0890     struct xhci_op_regs __iomem *op;
0891     unsigned long timeout;
0892     time64_t timestamp;
0893     u64 address;
0894     u32 value;
0895     int err;
0896 
0897     header = (struct tegra_xusb_fw_header *)tegra->fw.virt;
0898     op = tegra->regs + HC_LENGTH(readl(&cap->hc_capbase));
0899 
0900     if (csb_readl(tegra, XUSB_CSB_MP_ILOAD_BASE_LO) != 0) {
0901         dev_info(dev, "Firmware already loaded, Falcon state %#x\n",
0902              csb_readl(tegra, XUSB_FALC_CPUCTL));
0903         return 0;
0904     }
0905 
0906     /* Program the size of DFI into ILOAD_ATTR. */
0907     csb_writel(tegra, tegra->fw.size, XUSB_CSB_MP_ILOAD_ATTR);
0908 
0909     /*
0910      * Boot code of the firmware reads the ILOAD_BASE registers
0911      * to get to the start of the DFI in system memory.
0912      */
0913     address = tegra->fw.phys + sizeof(*header);
0914     csb_writel(tegra, address >> 32, XUSB_CSB_MP_ILOAD_BASE_HI);
0915     csb_writel(tegra, address, XUSB_CSB_MP_ILOAD_BASE_LO);
0916 
0917     /* Set BOOTPATH to 1 in APMAP. */
0918     csb_writel(tegra, APMAP_BOOTPATH, XUSB_CSB_MP_APMAP);
0919 
0920     /* Invalidate L2IMEM. */
0921     csb_writel(tegra, L2IMEMOP_INVALIDATE_ALL, XUSB_CSB_MP_L2IMEMOP_TRIG);
0922 
0923     /*
0924      * Initiate fetch of bootcode from system memory into L2IMEM.
0925      * Program bootcode location and size in system memory.
0926      */
0927     code_tag_blocks = DIV_ROUND_UP(le32_to_cpu(header->boot_codetag),
0928                        IMEM_BLOCK_SIZE);
0929     code_size_blocks = DIV_ROUND_UP(le32_to_cpu(header->boot_codesize),
0930                     IMEM_BLOCK_SIZE);
0931     code_blocks = code_tag_blocks + code_size_blocks;
0932 
0933     value = ((code_tag_blocks & L2IMEMOP_SIZE_SRC_OFFSET_MASK) <<
0934             L2IMEMOP_SIZE_SRC_OFFSET_SHIFT) |
0935         ((code_size_blocks & L2IMEMOP_SIZE_SRC_COUNT_MASK) <<
0936             L2IMEMOP_SIZE_SRC_COUNT_SHIFT);
0937     csb_writel(tegra, value, XUSB_CSB_MP_L2IMEMOP_SIZE);
0938 
0939     /* Trigger L2IMEM load operation. */
0940     csb_writel(tegra, L2IMEMOP_LOAD_LOCKED_RESULT,
0941            XUSB_CSB_MP_L2IMEMOP_TRIG);
0942 
0943     /* Setup Falcon auto-fill. */
0944     csb_writel(tegra, code_size_blocks, XUSB_FALC_IMFILLCTL);
0945 
0946     value = ((code_tag_blocks & IMFILLRNG1_TAG_MASK) <<
0947             IMFILLRNG1_TAG_LO_SHIFT) |
0948         ((code_blocks & IMFILLRNG1_TAG_MASK) <<
0949             IMFILLRNG1_TAG_HI_SHIFT);
0950     csb_writel(tegra, value, XUSB_FALC_IMFILLRNG1);
0951 
0952     csb_writel(tegra, 0, XUSB_FALC_DMACTL);
0953 
0954     /* wait for RESULT_VLD to get set */
0955 #define tegra_csb_readl(offset) csb_readl(tegra, offset)
0956     err = readx_poll_timeout(tegra_csb_readl,
0957                  XUSB_CSB_MEMPOOL_L2IMEMOP_RESULT, value,
0958                  value & L2IMEMOP_RESULT_VLD, 100, 10000);
0959     if (err < 0) {
0960         dev_err(dev, "DMA controller not ready %#010x\n", value);
0961         return err;
0962     }
0963 #undef tegra_csb_readl
0964 
0965     csb_writel(tegra, le32_to_cpu(header->boot_codetag),
0966            XUSB_FALC_BOOTVEC);
0967 
0968     /* Boot Falcon CPU and wait for USBSTS_CNR to get cleared. */
0969     csb_writel(tegra, CPUCTL_STARTCPU, XUSB_FALC_CPUCTL);
0970 
0971     timeout = jiffies + msecs_to_jiffies(200);
0972 
0973     do {
0974         value = readl(&op->status);
0975         if ((value & STS_CNR) == 0)
0976             break;
0977 
0978         usleep_range(1000, 2000);
0979     } while (time_is_after_jiffies(timeout));
0980 
0981     value = readl(&op->status);
0982     if (value & STS_CNR) {
0983         value = csb_readl(tegra, XUSB_FALC_CPUCTL);
0984         dev_err(dev, "XHCI controller not read: %#010x\n", value);
0985         return -EIO;
0986     }
0987 
0988     timestamp = le32_to_cpu(header->fwimg_created_time);
0989 
0990     dev_info(dev, "Firmware timestamp: %ptTs UTC\n", &timestamp);
0991 
0992     return 0;
0993 }
0994 
0995 static void tegra_xusb_powerdomain_remove(struct device *dev,
0996                       struct tegra_xusb *tegra)
0997 {
0998     if (!tegra->use_genpd)
0999         return;
1000 
1001     if (!IS_ERR_OR_NULL(tegra->genpd_dev_ss))
1002         dev_pm_domain_detach(tegra->genpd_dev_ss, true);
1003     if (!IS_ERR_OR_NULL(tegra->genpd_dev_host))
1004         dev_pm_domain_detach(tegra->genpd_dev_host, true);
1005 }
1006 
1007 static int tegra_xusb_powerdomain_init(struct device *dev,
1008                        struct tegra_xusb *tegra)
1009 {
1010     int err;
1011 
1012     tegra->genpd_dev_host = dev_pm_domain_attach_by_name(dev, "xusb_host");
1013     if (IS_ERR_OR_NULL(tegra->genpd_dev_host)) {
1014         err = PTR_ERR(tegra->genpd_dev_host) ? : -ENODATA;
1015         dev_err(dev, "failed to get host pm-domain: %d\n", err);
1016         return err;
1017     }
1018 
1019     tegra->genpd_dev_ss = dev_pm_domain_attach_by_name(dev, "xusb_ss");
1020     if (IS_ERR_OR_NULL(tegra->genpd_dev_ss)) {
1021         err = PTR_ERR(tegra->genpd_dev_ss) ? : -ENODATA;
1022         dev_err(dev, "failed to get superspeed pm-domain: %d\n", err);
1023         return err;
1024     }
1025 
1026     tegra->use_genpd = true;
1027 
1028     return 0;
1029 }
1030 
1031 static int tegra_xusb_unpowergate_partitions(struct tegra_xusb *tegra)
1032 {
1033     struct device *dev = tegra->dev;
1034     int rc;
1035 
1036     if (tegra->use_genpd) {
1037         rc = pm_runtime_resume_and_get(tegra->genpd_dev_ss);
1038         if (rc < 0) {
1039             dev_err(dev, "failed to enable XUSB SS partition\n");
1040             return rc;
1041         }
1042 
1043         rc = pm_runtime_resume_and_get(tegra->genpd_dev_host);
1044         if (rc < 0) {
1045             dev_err(dev, "failed to enable XUSB Host partition\n");
1046             pm_runtime_put_sync(tegra->genpd_dev_ss);
1047             return rc;
1048         }
1049     } else {
1050         rc = tegra_powergate_sequence_power_up(TEGRA_POWERGATE_XUSBA,
1051                             tegra->ss_clk,
1052                             tegra->ss_rst);
1053         if (rc < 0) {
1054             dev_err(dev, "failed to enable XUSB SS partition\n");
1055             return rc;
1056         }
1057 
1058         rc = tegra_powergate_sequence_power_up(TEGRA_POWERGATE_XUSBC,
1059                             tegra->host_clk,
1060                             tegra->host_rst);
1061         if (rc < 0) {
1062             dev_err(dev, "failed to enable XUSB Host partition\n");
1063             tegra_powergate_power_off(TEGRA_POWERGATE_XUSBA);
1064             return rc;
1065         }
1066     }
1067 
1068     return 0;
1069 }
1070 
1071 static int tegra_xusb_powergate_partitions(struct tegra_xusb *tegra)
1072 {
1073     struct device *dev = tegra->dev;
1074     int rc;
1075 
1076     if (tegra->use_genpd) {
1077         rc = pm_runtime_put_sync(tegra->genpd_dev_host);
1078         if (rc < 0) {
1079             dev_err(dev, "failed to disable XUSB Host partition\n");
1080             return rc;
1081         }
1082 
1083         rc = pm_runtime_put_sync(tegra->genpd_dev_ss);
1084         if (rc < 0) {
1085             dev_err(dev, "failed to disable XUSB SS partition\n");
1086             pm_runtime_get_sync(tegra->genpd_dev_host);
1087             return rc;
1088         }
1089     } else {
1090         rc = tegra_powergate_power_off(TEGRA_POWERGATE_XUSBC);
1091         if (rc < 0) {
1092             dev_err(dev, "failed to disable XUSB Host partition\n");
1093             return rc;
1094         }
1095 
1096         rc = tegra_powergate_power_off(TEGRA_POWERGATE_XUSBA);
1097         if (rc < 0) {
1098             dev_err(dev, "failed to disable XUSB SS partition\n");
1099             tegra_powergate_sequence_power_up(TEGRA_POWERGATE_XUSBC,
1100                               tegra->host_clk,
1101                               tegra->host_rst);
1102             return rc;
1103         }
1104     }
1105 
1106     return 0;
1107 }
1108 
1109 static int __tegra_xusb_enable_firmware_messages(struct tegra_xusb *tegra)
1110 {
1111     struct tegra_xusb_mbox_msg msg;
1112     int err;
1113 
1114     /* Enable firmware messages from controller. */
1115     msg.cmd = MBOX_CMD_MSG_ENABLED;
1116     msg.data = 0;
1117 
1118     err = tegra_xusb_mbox_send(tegra, &msg);
1119     if (err < 0)
1120         dev_err(tegra->dev, "failed to enable messages: %d\n", err);
1121 
1122     return err;
1123 }
1124 
1125 static irqreturn_t tegra_xusb_padctl_irq(int irq, void *data)
1126 {
1127     struct tegra_xusb *tegra = data;
1128 
1129     mutex_lock(&tegra->lock);
1130 
1131     if (tegra->suspended) {
1132         mutex_unlock(&tegra->lock);
1133         return IRQ_HANDLED;
1134     }
1135 
1136     mutex_unlock(&tegra->lock);
1137 
1138     pm_runtime_resume(tegra->dev);
1139 
1140     return IRQ_HANDLED;
1141 }
1142 
1143 static int tegra_xusb_enable_firmware_messages(struct tegra_xusb *tegra)
1144 {
1145     int err;
1146 
1147     mutex_lock(&tegra->lock);
1148     err = __tegra_xusb_enable_firmware_messages(tegra);
1149     mutex_unlock(&tegra->lock);
1150 
1151     return err;
1152 }
1153 
1154 static void tegra_xhci_set_port_power(struct tegra_xusb *tegra, bool main,
1155                          bool set)
1156 {
1157     struct xhci_hcd *xhci = hcd_to_xhci(tegra->hcd);
1158     struct usb_hcd *hcd = main ?  xhci->main_hcd : xhci->shared_hcd;
1159     unsigned int wait = (!main && !set) ? 1000 : 10;
1160     u16 typeReq = set ? SetPortFeature : ClearPortFeature;
1161     u16 wIndex = main ? tegra->otg_usb2_port + 1 : tegra->otg_usb3_port + 1;
1162     u32 status;
1163     u32 stat_power = main ? USB_PORT_STAT_POWER : USB_SS_PORT_STAT_POWER;
1164     u32 status_val = set ? stat_power : 0;
1165 
1166     dev_dbg(tegra->dev, "%s():%s %s port power\n", __func__,
1167         set ? "set" : "clear", main ? "HS" : "SS");
1168 
1169     hcd->driver->hub_control(hcd, typeReq, USB_PORT_FEAT_POWER, wIndex,
1170                  NULL, 0);
1171 
1172     do {
1173         tegra_xhci_hc_driver.hub_control(hcd, GetPortStatus, 0, wIndex,
1174                     (char *) &status, sizeof(status));
1175         if (status_val == (status & stat_power))
1176             break;
1177 
1178         if (!main && !set)
1179             usleep_range(600, 700);
1180         else
1181             usleep_range(10, 20);
1182     } while (--wait > 0);
1183 
1184     if (status_val != (status & stat_power))
1185         dev_info(tegra->dev, "failed to %s %s PP %d\n",
1186                         set ? "set" : "clear",
1187                         main ? "HS" : "SS", status);
1188 }
1189 
1190 static struct phy *tegra_xusb_get_phy(struct tegra_xusb *tegra, char *name,
1191                                 int port)
1192 {
1193     unsigned int i, phy_count = 0;
1194 
1195     for (i = 0; i < tegra->soc->num_types; i++) {
1196         if (!strncmp(tegra->soc->phy_types[i].name, name,
1197                                 strlen(name)))
1198             return tegra->phys[phy_count+port];
1199 
1200         phy_count += tegra->soc->phy_types[i].num;
1201     }
1202 
1203     return NULL;
1204 }
1205 
1206 static void tegra_xhci_id_work(struct work_struct *work)
1207 {
1208     struct tegra_xusb *tegra = container_of(work, struct tegra_xusb,
1209                         id_work);
1210     struct xhci_hcd *xhci = hcd_to_xhci(tegra->hcd);
1211     struct tegra_xusb_mbox_msg msg;
1212     struct phy *phy = tegra_xusb_get_phy(tegra, "usb2",
1213                             tegra->otg_usb2_port);
1214     u32 status;
1215     int ret;
1216 
1217     dev_dbg(tegra->dev, "host mode %s\n", tegra->host_mode ? "on" : "off");
1218 
1219     mutex_lock(&tegra->lock);
1220 
1221     if (tegra->host_mode)
1222         phy_set_mode_ext(phy, PHY_MODE_USB_OTG, USB_ROLE_HOST);
1223     else
1224         phy_set_mode_ext(phy, PHY_MODE_USB_OTG, USB_ROLE_NONE);
1225 
1226     mutex_unlock(&tegra->lock);
1227 
1228     if (tegra->host_mode) {
1229         /* switch to host mode */
1230         if (tegra->otg_usb3_port >= 0) {
1231             if (tegra->soc->otg_reset_sspi) {
1232                 /* set PP=0 */
1233                 tegra_xhci_hc_driver.hub_control(
1234                     xhci->shared_hcd, GetPortStatus,
1235                     0, tegra->otg_usb3_port+1,
1236                     (char *) &status, sizeof(status));
1237                 if (status & USB_SS_PORT_STAT_POWER)
1238                     tegra_xhci_set_port_power(tegra, false,
1239                                   false);
1240 
1241                 /* reset OTG port SSPI */
1242                 msg.cmd = MBOX_CMD_RESET_SSPI;
1243                 msg.data = tegra->otg_usb3_port+1;
1244 
1245                 ret = tegra_xusb_mbox_send(tegra, &msg);
1246                 if (ret < 0) {
1247                     dev_info(tegra->dev,
1248                         "failed to RESET_SSPI %d\n",
1249                         ret);
1250                 }
1251             }
1252 
1253             tegra_xhci_set_port_power(tegra, false, true);
1254         }
1255 
1256         tegra_xhci_set_port_power(tegra, true, true);
1257 
1258     } else {
1259         if (tegra->otg_usb3_port >= 0)
1260             tegra_xhci_set_port_power(tegra, false, false);
1261 
1262         tegra_xhci_set_port_power(tegra, true, false);
1263     }
1264 }
1265 
1266 #if IS_ENABLED(CONFIG_PM) || IS_ENABLED(CONFIG_PM_SLEEP)
1267 static bool is_usb2_otg_phy(struct tegra_xusb *tegra, unsigned int index)
1268 {
1269     return (tegra->usbphy[index] != NULL);
1270 }
1271 
1272 static bool is_usb3_otg_phy(struct tegra_xusb *tegra, unsigned int index)
1273 {
1274     struct tegra_xusb_padctl *padctl = tegra->padctl;
1275     unsigned int i;
1276     int port;
1277 
1278     for (i = 0; i < tegra->num_usb_phys; i++) {
1279         if (is_usb2_otg_phy(tegra, i)) {
1280             port = tegra_xusb_padctl_get_usb3_companion(padctl, i);
1281             if ((port >= 0) && (index == (unsigned int)port))
1282                 return true;
1283         }
1284     }
1285 
1286     return false;
1287 }
1288 
1289 static bool is_host_mode_phy(struct tegra_xusb *tegra, unsigned int phy_type, unsigned int index)
1290 {
1291     if (strcmp(tegra->soc->phy_types[phy_type].name, "hsic") == 0)
1292         return true;
1293 
1294     if (strcmp(tegra->soc->phy_types[phy_type].name, "usb2") == 0) {
1295         if (is_usb2_otg_phy(tegra, index))
1296             return ((index == tegra->otg_usb2_port) && tegra->host_mode);
1297         else
1298             return true;
1299     }
1300 
1301     if (strcmp(tegra->soc->phy_types[phy_type].name, "usb3") == 0) {
1302         if (is_usb3_otg_phy(tegra, index))
1303             return ((index == tegra->otg_usb3_port) && tegra->host_mode);
1304         else
1305             return true;
1306     }
1307 
1308     return false;
1309 }
1310 #endif
1311 
1312 static int tegra_xusb_get_usb2_port(struct tegra_xusb *tegra,
1313                           struct usb_phy *usbphy)
1314 {
1315     unsigned int i;
1316 
1317     for (i = 0; i < tegra->num_usb_phys; i++) {
1318         if (tegra->usbphy[i] && usbphy == tegra->usbphy[i])
1319             return i;
1320     }
1321 
1322     return -1;
1323 }
1324 
1325 static int tegra_xhci_id_notify(struct notifier_block *nb,
1326                      unsigned long action, void *data)
1327 {
1328     struct tegra_xusb *tegra = container_of(nb, struct tegra_xusb,
1329                             id_nb);
1330     struct usb_phy *usbphy = (struct usb_phy *)data;
1331 
1332     dev_dbg(tegra->dev, "%s(): action is %d", __func__, usbphy->last_event);
1333 
1334     if ((tegra->host_mode && usbphy->last_event == USB_EVENT_ID) ||
1335         (!tegra->host_mode && usbphy->last_event != USB_EVENT_ID)) {
1336         dev_dbg(tegra->dev, "Same role(%d) received. Ignore",
1337             tegra->host_mode);
1338         return NOTIFY_OK;
1339     }
1340 
1341     tegra->otg_usb2_port = tegra_xusb_get_usb2_port(tegra, usbphy);
1342     tegra->otg_usb3_port = tegra_xusb_padctl_get_usb3_companion(
1343                             tegra->padctl,
1344                             tegra->otg_usb2_port);
1345 
1346     tegra->host_mode = (usbphy->last_event == USB_EVENT_ID) ? true : false;
1347 
1348     schedule_work(&tegra->id_work);
1349 
1350     return NOTIFY_OK;
1351 }
1352 
1353 static int tegra_xusb_init_usb_phy(struct tegra_xusb *tegra)
1354 {
1355     unsigned int i;
1356 
1357     tegra->usbphy = devm_kcalloc(tegra->dev, tegra->num_usb_phys,
1358                    sizeof(*tegra->usbphy), GFP_KERNEL);
1359     if (!tegra->usbphy)
1360         return -ENOMEM;
1361 
1362     INIT_WORK(&tegra->id_work, tegra_xhci_id_work);
1363     tegra->id_nb.notifier_call = tegra_xhci_id_notify;
1364     tegra->otg_usb2_port = -EINVAL;
1365     tegra->otg_usb3_port = -EINVAL;
1366 
1367     for (i = 0; i < tegra->num_usb_phys; i++) {
1368         struct phy *phy = tegra_xusb_get_phy(tegra, "usb2", i);
1369 
1370         if (!phy)
1371             continue;
1372 
1373         tegra->usbphy[i] = devm_usb_get_phy_by_node(tegra->dev,
1374                             phy->dev.of_node,
1375                             &tegra->id_nb);
1376         if (!IS_ERR(tegra->usbphy[i])) {
1377             dev_dbg(tegra->dev, "usbphy-%d registered", i);
1378             otg_set_host(tegra->usbphy[i]->otg, &tegra->hcd->self);
1379         } else {
1380             /*
1381              * usb-phy is optional, continue if its not available.
1382              */
1383             tegra->usbphy[i] = NULL;
1384         }
1385     }
1386 
1387     return 0;
1388 }
1389 
1390 static void tegra_xusb_deinit_usb_phy(struct tegra_xusb *tegra)
1391 {
1392     unsigned int i;
1393 
1394     cancel_work_sync(&tegra->id_work);
1395 
1396     for (i = 0; i < tegra->num_usb_phys; i++)
1397         if (tegra->usbphy[i])
1398             otg_set_host(tegra->usbphy[i]->otg, NULL);
1399 }
1400 
1401 static int tegra_xusb_probe(struct platform_device *pdev)
1402 {
1403     struct of_phandle_args args;
1404     struct tegra_xusb *tegra;
1405     struct device_node *np;
1406     struct resource *regs;
1407     struct xhci_hcd *xhci;
1408     unsigned int i, j, k;
1409     struct phy *phy;
1410     int err;
1411 
1412     BUILD_BUG_ON(sizeof(struct tegra_xusb_fw_header) != 256);
1413 
1414     tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL);
1415     if (!tegra)
1416         return -ENOMEM;
1417 
1418     tegra->soc = of_device_get_match_data(&pdev->dev);
1419     mutex_init(&tegra->lock);
1420     tegra->dev = &pdev->dev;
1421 
1422     err = tegra_xusb_init_context(tegra);
1423     if (err < 0)
1424         return err;
1425 
1426     tegra->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &regs);
1427     if (IS_ERR(tegra->regs))
1428         return PTR_ERR(tegra->regs);
1429 
1430     tegra->fpci_base = devm_platform_ioremap_resource(pdev, 1);
1431     if (IS_ERR(tegra->fpci_base))
1432         return PTR_ERR(tegra->fpci_base);
1433 
1434     if (tegra->soc->has_ipfs) {
1435         tegra->ipfs_base = devm_platform_ioremap_resource(pdev, 2);
1436         if (IS_ERR(tegra->ipfs_base))
1437             return PTR_ERR(tegra->ipfs_base);
1438     }
1439 
1440     tegra->xhci_irq = platform_get_irq(pdev, 0);
1441     if (tegra->xhci_irq < 0)
1442         return tegra->xhci_irq;
1443 
1444     tegra->mbox_irq = platform_get_irq(pdev, 1);
1445     if (tegra->mbox_irq < 0)
1446         return tegra->mbox_irq;
1447 
1448     tegra->padctl = tegra_xusb_padctl_get(&pdev->dev);
1449     if (IS_ERR(tegra->padctl))
1450         return PTR_ERR(tegra->padctl);
1451 
1452     np = of_parse_phandle(pdev->dev.of_node, "nvidia,xusb-padctl", 0);
1453     if (!np) {
1454         err = -ENODEV;
1455         goto put_padctl;
1456     }
1457 
1458     /* Older device-trees don't have padctrl interrupt */
1459     err = of_irq_parse_one(np, 0, &args);
1460     if (!err) {
1461         tegra->padctl_irq = of_irq_get(np, 0);
1462         if (tegra->padctl_irq <= 0) {
1463             err = (tegra->padctl_irq == 0) ? -ENODEV : tegra->padctl_irq;
1464             goto put_padctl;
1465         }
1466     } else {
1467         dev_dbg(&pdev->dev,
1468             "%pOF is missing an interrupt, disabling PM support\n", np);
1469     }
1470 
1471     tegra->host_clk = devm_clk_get(&pdev->dev, "xusb_host");
1472     if (IS_ERR(tegra->host_clk)) {
1473         err = PTR_ERR(tegra->host_clk);
1474         dev_err(&pdev->dev, "failed to get xusb_host: %d\n", err);
1475         goto put_padctl;
1476     }
1477 
1478     tegra->falcon_clk = devm_clk_get(&pdev->dev, "xusb_falcon_src");
1479     if (IS_ERR(tegra->falcon_clk)) {
1480         err = PTR_ERR(tegra->falcon_clk);
1481         dev_err(&pdev->dev, "failed to get xusb_falcon_src: %d\n", err);
1482         goto put_padctl;
1483     }
1484 
1485     tegra->ss_clk = devm_clk_get(&pdev->dev, "xusb_ss");
1486     if (IS_ERR(tegra->ss_clk)) {
1487         err = PTR_ERR(tegra->ss_clk);
1488         dev_err(&pdev->dev, "failed to get xusb_ss: %d\n", err);
1489         goto put_padctl;
1490     }
1491 
1492     tegra->ss_src_clk = devm_clk_get(&pdev->dev, "xusb_ss_src");
1493     if (IS_ERR(tegra->ss_src_clk)) {
1494         err = PTR_ERR(tegra->ss_src_clk);
1495         dev_err(&pdev->dev, "failed to get xusb_ss_src: %d\n", err);
1496         goto put_padctl;
1497     }
1498 
1499     tegra->hs_src_clk = devm_clk_get(&pdev->dev, "xusb_hs_src");
1500     if (IS_ERR(tegra->hs_src_clk)) {
1501         err = PTR_ERR(tegra->hs_src_clk);
1502         dev_err(&pdev->dev, "failed to get xusb_hs_src: %d\n", err);
1503         goto put_padctl;
1504     }
1505 
1506     tegra->fs_src_clk = devm_clk_get(&pdev->dev, "xusb_fs_src");
1507     if (IS_ERR(tegra->fs_src_clk)) {
1508         err = PTR_ERR(tegra->fs_src_clk);
1509         dev_err(&pdev->dev, "failed to get xusb_fs_src: %d\n", err);
1510         goto put_padctl;
1511     }
1512 
1513     tegra->pll_u_480m = devm_clk_get(&pdev->dev, "pll_u_480m");
1514     if (IS_ERR(tegra->pll_u_480m)) {
1515         err = PTR_ERR(tegra->pll_u_480m);
1516         dev_err(&pdev->dev, "failed to get pll_u_480m: %d\n", err);
1517         goto put_padctl;
1518     }
1519 
1520     tegra->clk_m = devm_clk_get(&pdev->dev, "clk_m");
1521     if (IS_ERR(tegra->clk_m)) {
1522         err = PTR_ERR(tegra->clk_m);
1523         dev_err(&pdev->dev, "failed to get clk_m: %d\n", err);
1524         goto put_padctl;
1525     }
1526 
1527     tegra->pll_e = devm_clk_get(&pdev->dev, "pll_e");
1528     if (IS_ERR(tegra->pll_e)) {
1529         err = PTR_ERR(tegra->pll_e);
1530         dev_err(&pdev->dev, "failed to get pll_e: %d\n", err);
1531         goto put_padctl;
1532     }
1533 
1534     if (!of_property_read_bool(pdev->dev.of_node, "power-domains")) {
1535         tegra->host_rst = devm_reset_control_get(&pdev->dev,
1536                              "xusb_host");
1537         if (IS_ERR(tegra->host_rst)) {
1538             err = PTR_ERR(tegra->host_rst);
1539             dev_err(&pdev->dev,
1540                 "failed to get xusb_host reset: %d\n", err);
1541             goto put_padctl;
1542         }
1543 
1544         tegra->ss_rst = devm_reset_control_get(&pdev->dev, "xusb_ss");
1545         if (IS_ERR(tegra->ss_rst)) {
1546             err = PTR_ERR(tegra->ss_rst);
1547             dev_err(&pdev->dev, "failed to get xusb_ss reset: %d\n",
1548                 err);
1549             goto put_padctl;
1550         }
1551     } else {
1552         err = tegra_xusb_powerdomain_init(&pdev->dev, tegra);
1553         if (err)
1554             goto put_powerdomains;
1555     }
1556 
1557     tegra->supplies = devm_kcalloc(&pdev->dev, tegra->soc->num_supplies,
1558                        sizeof(*tegra->supplies), GFP_KERNEL);
1559     if (!tegra->supplies) {
1560         err = -ENOMEM;
1561         goto put_powerdomains;
1562     }
1563 
1564     regulator_bulk_set_supply_names(tegra->supplies,
1565                     tegra->soc->supply_names,
1566                     tegra->soc->num_supplies);
1567 
1568     err = devm_regulator_bulk_get(&pdev->dev, tegra->soc->num_supplies,
1569                       tegra->supplies);
1570     if (err) {
1571         dev_err(&pdev->dev, "failed to get regulators: %d\n", err);
1572         goto put_powerdomains;
1573     }
1574 
1575     for (i = 0; i < tegra->soc->num_types; i++) {
1576         if (!strncmp(tegra->soc->phy_types[i].name, "usb2", 4))
1577             tegra->num_usb_phys = tegra->soc->phy_types[i].num;
1578         tegra->num_phys += tegra->soc->phy_types[i].num;
1579     }
1580 
1581     tegra->phys = devm_kcalloc(&pdev->dev, tegra->num_phys,
1582                    sizeof(*tegra->phys), GFP_KERNEL);
1583     if (!tegra->phys) {
1584         err = -ENOMEM;
1585         goto put_powerdomains;
1586     }
1587 
1588     for (i = 0, k = 0; i < tegra->soc->num_types; i++) {
1589         char prop[8];
1590 
1591         for (j = 0; j < tegra->soc->phy_types[i].num; j++) {
1592             snprintf(prop, sizeof(prop), "%s-%d",
1593                  tegra->soc->phy_types[i].name, j);
1594 
1595             phy = devm_phy_optional_get(&pdev->dev, prop);
1596             if (IS_ERR(phy)) {
1597                 dev_err(&pdev->dev,
1598                     "failed to get PHY %s: %ld\n", prop,
1599                     PTR_ERR(phy));
1600                 err = PTR_ERR(phy);
1601                 goto put_powerdomains;
1602             }
1603 
1604             tegra->phys[k++] = phy;
1605         }
1606     }
1607 
1608     tegra->hcd = usb_create_hcd(&tegra_xhci_hc_driver, &pdev->dev,
1609                     dev_name(&pdev->dev));
1610     if (!tegra->hcd) {
1611         err = -ENOMEM;
1612         goto put_powerdomains;
1613     }
1614 
1615     tegra->hcd->skip_phy_initialization = 1;
1616     tegra->hcd->regs = tegra->regs;
1617     tegra->hcd->rsrc_start = regs->start;
1618     tegra->hcd->rsrc_len = resource_size(regs);
1619 
1620     /*
1621      * This must happen after usb_create_hcd(), because usb_create_hcd()
1622      * will overwrite the drvdata of the device with the hcd it creates.
1623      */
1624     platform_set_drvdata(pdev, tegra);
1625 
1626     err = tegra_xusb_clk_enable(tegra);
1627     if (err) {
1628         dev_err(tegra->dev, "failed to enable clocks: %d\n", err);
1629         goto put_hcd;
1630     }
1631 
1632     err = regulator_bulk_enable(tegra->soc->num_supplies, tegra->supplies);
1633     if (err) {
1634         dev_err(tegra->dev, "failed to enable regulators: %d\n", err);
1635         goto disable_clk;
1636     }
1637 
1638     err = tegra_xusb_phy_enable(tegra);
1639     if (err < 0) {
1640         dev_err(&pdev->dev, "failed to enable PHYs: %d\n", err);
1641         goto disable_regulator;
1642     }
1643 
1644     /*
1645      * The XUSB Falcon microcontroller can only address 40 bits, so set
1646      * the DMA mask accordingly.
1647      */
1648     err = dma_set_mask_and_coherent(tegra->dev, DMA_BIT_MASK(40));
1649     if (err < 0) {
1650         dev_err(&pdev->dev, "failed to set DMA mask: %d\n", err);
1651         goto disable_phy;
1652     }
1653 
1654     err = tegra_xusb_request_firmware(tegra);
1655     if (err < 0) {
1656         dev_err(&pdev->dev, "failed to request firmware: %d\n", err);
1657         goto disable_phy;
1658     }
1659 
1660     err = tegra_xusb_unpowergate_partitions(tegra);
1661     if (err)
1662         goto free_firmware;
1663 
1664     tegra_xusb_config(tegra);
1665 
1666     err = tegra_xusb_load_firmware(tegra);
1667     if (err < 0) {
1668         dev_err(&pdev->dev, "failed to load firmware: %d\n", err);
1669         goto powergate;
1670     }
1671 
1672     err = usb_add_hcd(tegra->hcd, tegra->xhci_irq, IRQF_SHARED);
1673     if (err < 0) {
1674         dev_err(&pdev->dev, "failed to add USB HCD: %d\n", err);
1675         goto powergate;
1676     }
1677 
1678     device_wakeup_enable(tegra->hcd->self.controller);
1679 
1680     xhci = hcd_to_xhci(tegra->hcd);
1681 
1682     xhci->shared_hcd = usb_create_shared_hcd(&tegra_xhci_hc_driver,
1683                          &pdev->dev,
1684                          dev_name(&pdev->dev),
1685                          tegra->hcd);
1686     if (!xhci->shared_hcd) {
1687         dev_err(&pdev->dev, "failed to create shared HCD\n");
1688         err = -ENOMEM;
1689         goto remove_usb2;
1690     }
1691 
1692     err = usb_add_hcd(xhci->shared_hcd, tegra->xhci_irq, IRQF_SHARED);
1693     if (err < 0) {
1694         dev_err(&pdev->dev, "failed to add shared HCD: %d\n", err);
1695         goto put_usb3;
1696     }
1697 
1698     err = devm_request_threaded_irq(&pdev->dev, tegra->mbox_irq,
1699                     tegra_xusb_mbox_irq,
1700                     tegra_xusb_mbox_thread, 0,
1701                     dev_name(&pdev->dev), tegra);
1702     if (err < 0) {
1703         dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
1704         goto remove_usb3;
1705     }
1706 
1707     if (tegra->padctl_irq) {
1708         err = devm_request_threaded_irq(&pdev->dev, tegra->padctl_irq,
1709                         NULL, tegra_xusb_padctl_irq,
1710                         IRQF_ONESHOT, dev_name(&pdev->dev),
1711                         tegra);
1712         if (err < 0) {
1713             dev_err(&pdev->dev, "failed to request padctl IRQ: %d\n", err);
1714             goto remove_usb3;
1715         }
1716     }
1717 
1718     err = tegra_xusb_enable_firmware_messages(tegra);
1719     if (err < 0) {
1720         dev_err(&pdev->dev, "failed to enable messages: %d\n", err);
1721         goto remove_usb3;
1722     }
1723 
1724     err = tegra_xusb_init_usb_phy(tegra);
1725     if (err < 0) {
1726         dev_err(&pdev->dev, "failed to init USB PHY: %d\n", err);
1727         goto remove_usb3;
1728     }
1729 
1730     /* Enable wake for both USB 2.0 and USB 3.0 roothubs */
1731     device_init_wakeup(&tegra->hcd->self.root_hub->dev, true);
1732     device_init_wakeup(&xhci->shared_hcd->self.root_hub->dev, true);
1733 
1734     pm_runtime_use_autosuspend(tegra->dev);
1735     pm_runtime_set_autosuspend_delay(tegra->dev, 2000);
1736     pm_runtime_mark_last_busy(tegra->dev);
1737     pm_runtime_set_active(tegra->dev);
1738 
1739     if (tegra->padctl_irq) {
1740         device_init_wakeup(tegra->dev, true);
1741         pm_runtime_enable(tegra->dev);
1742     }
1743 
1744     return 0;
1745 
1746 remove_usb3:
1747     usb_remove_hcd(xhci->shared_hcd);
1748 put_usb3:
1749     usb_put_hcd(xhci->shared_hcd);
1750 remove_usb2:
1751     usb_remove_hcd(tegra->hcd);
1752 powergate:
1753     tegra_xusb_powergate_partitions(tegra);
1754 free_firmware:
1755     dma_free_coherent(&pdev->dev, tegra->fw.size, tegra->fw.virt,
1756               tegra->fw.phys);
1757 disable_phy:
1758     tegra_xusb_phy_disable(tegra);
1759 disable_regulator:
1760     regulator_bulk_disable(tegra->soc->num_supplies, tegra->supplies);
1761 disable_clk:
1762     tegra_xusb_clk_disable(tegra);
1763 put_hcd:
1764     usb_put_hcd(tegra->hcd);
1765 put_powerdomains:
1766     tegra_xusb_powerdomain_remove(&pdev->dev, tegra);
1767 put_padctl:
1768     of_node_put(np);
1769     tegra_xusb_padctl_put(tegra->padctl);
1770     return err;
1771 }
1772 
1773 static int tegra_xusb_remove(struct platform_device *pdev)
1774 {
1775     struct tegra_xusb *tegra = platform_get_drvdata(pdev);
1776     struct xhci_hcd *xhci = hcd_to_xhci(tegra->hcd);
1777 
1778     tegra_xusb_deinit_usb_phy(tegra);
1779 
1780     pm_runtime_get_sync(&pdev->dev);
1781     usb_remove_hcd(xhci->shared_hcd);
1782     usb_put_hcd(xhci->shared_hcd);
1783     xhci->shared_hcd = NULL;
1784     usb_remove_hcd(tegra->hcd);
1785     usb_put_hcd(tegra->hcd);
1786 
1787     dma_free_coherent(&pdev->dev, tegra->fw.size, tegra->fw.virt,
1788               tegra->fw.phys);
1789 
1790     if (tegra->padctl_irq)
1791         pm_runtime_disable(&pdev->dev);
1792 
1793     pm_runtime_put(&pdev->dev);
1794 
1795     tegra_xusb_powergate_partitions(tegra);
1796 
1797     tegra_xusb_powerdomain_remove(&pdev->dev, tegra);
1798 
1799     tegra_xusb_phy_disable(tegra);
1800     tegra_xusb_clk_disable(tegra);
1801     regulator_bulk_disable(tegra->soc->num_supplies, tegra->supplies);
1802     tegra_xusb_padctl_put(tegra->padctl);
1803 
1804     return 0;
1805 }
1806 
1807 static bool xhci_hub_ports_suspended(struct xhci_hub *hub)
1808 {
1809     struct device *dev = hub->hcd->self.controller;
1810     bool status = true;
1811     unsigned int i;
1812     u32 value;
1813 
1814     for (i = 0; i < hub->num_ports; i++) {
1815         value = readl(hub->ports[i]->addr);
1816         if ((value & PORT_PE) == 0)
1817             continue;
1818 
1819         if ((value & PORT_PLS_MASK) != XDEV_U3) {
1820             dev_info(dev, "%u-%u isn't suspended: %#010x\n",
1821                  hub->hcd->self.busnum, i + 1, value);
1822             status = false;
1823         }
1824     }
1825 
1826     return status;
1827 }
1828 
1829 static int tegra_xusb_check_ports(struct tegra_xusb *tegra)
1830 {
1831     struct xhci_hcd *xhci = hcd_to_xhci(tegra->hcd);
1832     struct xhci_bus_state *bus_state = &xhci->usb2_rhub.bus_state;
1833     unsigned long flags;
1834     int err = 0;
1835 
1836     if (bus_state->bus_suspended) {
1837         /* xusb_hub_suspend() has just directed one or more USB2 port(s)
1838          * to U3 state, it takes 3ms to enter U3.
1839          */
1840         usleep_range(3000, 4000);
1841     }
1842 
1843     spin_lock_irqsave(&xhci->lock, flags);
1844 
1845     if (!xhci_hub_ports_suspended(&xhci->usb2_rhub) ||
1846         !xhci_hub_ports_suspended(&xhci->usb3_rhub))
1847         err = -EBUSY;
1848 
1849     spin_unlock_irqrestore(&xhci->lock, flags);
1850 
1851     return err;
1852 }
1853 
1854 static void tegra_xusb_save_context(struct tegra_xusb *tegra)
1855 {
1856     const struct tegra_xusb_context_soc *soc = tegra->soc->context;
1857     struct tegra_xusb_context *ctx = &tegra->context;
1858     unsigned int i;
1859 
1860     if (soc->ipfs.num_offsets > 0) {
1861         for (i = 0; i < soc->ipfs.num_offsets; i++)
1862             ctx->ipfs[i] = ipfs_readl(tegra, soc->ipfs.offsets[i]);
1863     }
1864 
1865     if (soc->fpci.num_offsets > 0) {
1866         for (i = 0; i < soc->fpci.num_offsets; i++)
1867             ctx->fpci[i] = fpci_readl(tegra, soc->fpci.offsets[i]);
1868     }
1869 }
1870 
1871 static void tegra_xusb_restore_context(struct tegra_xusb *tegra)
1872 {
1873     const struct tegra_xusb_context_soc *soc = tegra->soc->context;
1874     struct tegra_xusb_context *ctx = &tegra->context;
1875     unsigned int i;
1876 
1877     if (soc->fpci.num_offsets > 0) {
1878         for (i = 0; i < soc->fpci.num_offsets; i++)
1879             fpci_writel(tegra, ctx->fpci[i], soc->fpci.offsets[i]);
1880     }
1881 
1882     if (soc->ipfs.num_offsets > 0) {
1883         for (i = 0; i < soc->ipfs.num_offsets; i++)
1884             ipfs_writel(tegra, ctx->ipfs[i], soc->ipfs.offsets[i]);
1885     }
1886 }
1887 
1888 static enum usb_device_speed tegra_xhci_portsc_to_speed(struct tegra_xusb *tegra, u32 portsc)
1889 {
1890     if (DEV_LOWSPEED(portsc))
1891         return USB_SPEED_LOW;
1892 
1893     if (DEV_HIGHSPEED(portsc))
1894         return USB_SPEED_HIGH;
1895 
1896     if (DEV_FULLSPEED(portsc))
1897         return USB_SPEED_FULL;
1898 
1899     if (DEV_SUPERSPEED_ANY(portsc))
1900         return USB_SPEED_SUPER;
1901 
1902     return USB_SPEED_UNKNOWN;
1903 }
1904 
1905 static void tegra_xhci_enable_phy_sleepwalk_wake(struct tegra_xusb *tegra)
1906 {
1907     struct tegra_xusb_padctl *padctl = tegra->padctl;
1908     struct xhci_hcd *xhci = hcd_to_xhci(tegra->hcd);
1909     enum usb_device_speed speed;
1910     struct phy *phy;
1911     unsigned int index, offset;
1912     unsigned int i, j, k;
1913     struct xhci_hub *rhub;
1914     u32 portsc;
1915 
1916     for (i = 0, k = 0; i < tegra->soc->num_types; i++) {
1917         if (strcmp(tegra->soc->phy_types[i].name, "usb3") == 0)
1918             rhub = &xhci->usb3_rhub;
1919         else
1920             rhub = &xhci->usb2_rhub;
1921 
1922         if (strcmp(tegra->soc->phy_types[i].name, "hsic") == 0)
1923             offset = tegra->soc->ports.usb2.count;
1924         else
1925             offset = 0;
1926 
1927         for (j = 0; j < tegra->soc->phy_types[i].num; j++) {
1928             phy = tegra->phys[k++];
1929 
1930             if (!phy)
1931                 continue;
1932 
1933             index = j + offset;
1934 
1935             if (index >= rhub->num_ports)
1936                 continue;
1937 
1938             if (!is_host_mode_phy(tegra, i, j))
1939                 continue;
1940 
1941             portsc = readl(rhub->ports[index]->addr);
1942             speed = tegra_xhci_portsc_to_speed(tegra, portsc);
1943             tegra_xusb_padctl_enable_phy_sleepwalk(padctl, phy, speed);
1944             tegra_xusb_padctl_enable_phy_wake(padctl, phy);
1945         }
1946     }
1947 }
1948 
1949 static void tegra_xhci_disable_phy_wake(struct tegra_xusb *tegra)
1950 {
1951     struct tegra_xusb_padctl *padctl = tegra->padctl;
1952     unsigned int i;
1953 
1954     for (i = 0; i < tegra->num_phys; i++) {
1955         if (!tegra->phys[i])
1956             continue;
1957 
1958         tegra_xusb_padctl_disable_phy_wake(padctl, tegra->phys[i]);
1959     }
1960 }
1961 
1962 static void tegra_xhci_disable_phy_sleepwalk(struct tegra_xusb *tegra)
1963 {
1964     struct tegra_xusb_padctl *padctl = tegra->padctl;
1965     unsigned int i;
1966 
1967     for (i = 0; i < tegra->num_phys; i++) {
1968         if (!tegra->phys[i])
1969             continue;
1970 
1971         tegra_xusb_padctl_disable_phy_sleepwalk(padctl, tegra->phys[i]);
1972     }
1973 }
1974 
1975 static int tegra_xusb_enter_elpg(struct tegra_xusb *tegra, bool runtime)
1976 {
1977     struct xhci_hcd *xhci = hcd_to_xhci(tegra->hcd);
1978     struct device *dev = tegra->dev;
1979     bool wakeup = runtime ? true : device_may_wakeup(dev);
1980     unsigned int i;
1981     int err;
1982     u32 usbcmd;
1983 
1984     dev_dbg(dev, "entering ELPG\n");
1985 
1986     usbcmd = readl(&xhci->op_regs->command);
1987     usbcmd &= ~CMD_EIE;
1988     writel(usbcmd, &xhci->op_regs->command);
1989 
1990     err = tegra_xusb_check_ports(tegra);
1991     if (err < 0) {
1992         dev_err(tegra->dev, "not all ports suspended: %d\n", err);
1993         goto out;
1994     }
1995 
1996     err = xhci_suspend(xhci, wakeup);
1997     if (err < 0) {
1998         dev_err(tegra->dev, "failed to suspend XHCI: %d\n", err);
1999         goto out;
2000     }
2001 
2002     tegra_xusb_save_context(tegra);
2003 
2004     if (wakeup)
2005         tegra_xhci_enable_phy_sleepwalk_wake(tegra);
2006 
2007     tegra_xusb_powergate_partitions(tegra);
2008 
2009     for (i = 0; i < tegra->num_phys; i++) {
2010         if (!tegra->phys[i])
2011             continue;
2012 
2013         phy_power_off(tegra->phys[i]);
2014         if (!wakeup)
2015             phy_exit(tegra->phys[i]);
2016     }
2017 
2018     tegra_xusb_clk_disable(tegra);
2019 
2020 out:
2021     if (!err)
2022         dev_dbg(tegra->dev, "entering ELPG done\n");
2023     else {
2024         usbcmd = readl(&xhci->op_regs->command);
2025         usbcmd |= CMD_EIE;
2026         writel(usbcmd, &xhci->op_regs->command);
2027 
2028         dev_dbg(tegra->dev, "entering ELPG failed\n");
2029         pm_runtime_mark_last_busy(tegra->dev);
2030     }
2031 
2032     return err;
2033 }
2034 
2035 static int tegra_xusb_exit_elpg(struct tegra_xusb *tegra, bool runtime)
2036 {
2037     struct xhci_hcd *xhci = hcd_to_xhci(tegra->hcd);
2038     struct device *dev = tegra->dev;
2039     bool wakeup = runtime ? true : device_may_wakeup(dev);
2040     unsigned int i;
2041     u32 usbcmd;
2042     int err;
2043 
2044     dev_dbg(dev, "exiting ELPG\n");
2045     pm_runtime_mark_last_busy(tegra->dev);
2046 
2047     err = tegra_xusb_clk_enable(tegra);
2048     if (err < 0) {
2049         dev_err(tegra->dev, "failed to enable clocks: %d\n", err);
2050         goto out;
2051     }
2052 
2053     err = tegra_xusb_unpowergate_partitions(tegra);
2054     if (err)
2055         goto disable_clks;
2056 
2057     if (wakeup)
2058         tegra_xhci_disable_phy_wake(tegra);
2059 
2060     for (i = 0; i < tegra->num_phys; i++) {
2061         if (!tegra->phys[i])
2062             continue;
2063 
2064         if (!wakeup)
2065             phy_init(tegra->phys[i]);
2066 
2067         phy_power_on(tegra->phys[i]);
2068     }
2069 
2070     tegra_xusb_config(tegra);
2071     tegra_xusb_restore_context(tegra);
2072 
2073     err = tegra_xusb_load_firmware(tegra);
2074     if (err < 0) {
2075         dev_err(tegra->dev, "failed to load firmware: %d\n", err);
2076         goto disable_phy;
2077     }
2078 
2079     err = __tegra_xusb_enable_firmware_messages(tegra);
2080     if (err < 0) {
2081         dev_err(tegra->dev, "failed to enable messages: %d\n", err);
2082         goto disable_phy;
2083     }
2084 
2085     if (wakeup)
2086         tegra_xhci_disable_phy_sleepwalk(tegra);
2087 
2088     err = xhci_resume(xhci, 0);
2089     if (err < 0) {
2090         dev_err(tegra->dev, "failed to resume XHCI: %d\n", err);
2091         goto disable_phy;
2092     }
2093 
2094     usbcmd = readl(&xhci->op_regs->command);
2095     usbcmd |= CMD_EIE;
2096     writel(usbcmd, &xhci->op_regs->command);
2097 
2098     goto out;
2099 
2100 disable_phy:
2101     for (i = 0; i < tegra->num_phys; i++) {
2102         if (!tegra->phys[i])
2103             continue;
2104 
2105         phy_power_off(tegra->phys[i]);
2106         if (!wakeup)
2107             phy_exit(tegra->phys[i]);
2108     }
2109     tegra_xusb_powergate_partitions(tegra);
2110 disable_clks:
2111     tegra_xusb_clk_disable(tegra);
2112 out:
2113     if (!err)
2114         dev_dbg(dev, "exiting ELPG done\n");
2115     else
2116         dev_dbg(dev, "exiting ELPG failed\n");
2117 
2118     return err;
2119 }
2120 
2121 static __maybe_unused int tegra_xusb_suspend(struct device *dev)
2122 {
2123     struct tegra_xusb *tegra = dev_get_drvdata(dev);
2124     int err;
2125 
2126     synchronize_irq(tegra->mbox_irq);
2127 
2128     mutex_lock(&tegra->lock);
2129 
2130     if (pm_runtime_suspended(dev)) {
2131         err = tegra_xusb_exit_elpg(tegra, true);
2132         if (err < 0)
2133             goto out;
2134     }
2135 
2136     err = tegra_xusb_enter_elpg(tegra, false);
2137     if (err < 0) {
2138         if (pm_runtime_suspended(dev)) {
2139             pm_runtime_disable(dev);
2140             pm_runtime_set_active(dev);
2141             pm_runtime_enable(dev);
2142         }
2143 
2144         goto out;
2145     }
2146 
2147 out:
2148     if (!err) {
2149         tegra->suspended = true;
2150         pm_runtime_disable(dev);
2151 
2152         if (device_may_wakeup(dev)) {
2153             if (enable_irq_wake(tegra->padctl_irq))
2154                 dev_err(dev, "failed to enable padctl wakes\n");
2155         }
2156     }
2157 
2158     mutex_unlock(&tegra->lock);
2159 
2160     return err;
2161 }
2162 
2163 static __maybe_unused int tegra_xusb_resume(struct device *dev)
2164 {
2165     struct tegra_xusb *tegra = dev_get_drvdata(dev);
2166     int err;
2167 
2168     mutex_lock(&tegra->lock);
2169 
2170     if (!tegra->suspended) {
2171         mutex_unlock(&tegra->lock);
2172         return 0;
2173     }
2174 
2175     err = tegra_xusb_exit_elpg(tegra, false);
2176     if (err < 0) {
2177         mutex_unlock(&tegra->lock);
2178         return err;
2179     }
2180 
2181     if (device_may_wakeup(dev)) {
2182         if (disable_irq_wake(tegra->padctl_irq))
2183             dev_err(dev, "failed to disable padctl wakes\n");
2184     }
2185     tegra->suspended = false;
2186     mutex_unlock(&tegra->lock);
2187 
2188     pm_runtime_set_active(dev);
2189     pm_runtime_enable(dev);
2190 
2191     return 0;
2192 }
2193 
2194 static __maybe_unused int tegra_xusb_runtime_suspend(struct device *dev)
2195 {
2196     struct tegra_xusb *tegra = dev_get_drvdata(dev);
2197     int ret;
2198 
2199     synchronize_irq(tegra->mbox_irq);
2200     mutex_lock(&tegra->lock);
2201     ret = tegra_xusb_enter_elpg(tegra, true);
2202     mutex_unlock(&tegra->lock);
2203 
2204     return ret;
2205 }
2206 
2207 static __maybe_unused int tegra_xusb_runtime_resume(struct device *dev)
2208 {
2209     struct tegra_xusb *tegra = dev_get_drvdata(dev);
2210     int err;
2211 
2212     mutex_lock(&tegra->lock);
2213     err = tegra_xusb_exit_elpg(tegra, true);
2214     mutex_unlock(&tegra->lock);
2215 
2216     return err;
2217 }
2218 
2219 static const struct dev_pm_ops tegra_xusb_pm_ops = {
2220     SET_RUNTIME_PM_OPS(tegra_xusb_runtime_suspend,
2221                tegra_xusb_runtime_resume, NULL)
2222     SET_SYSTEM_SLEEP_PM_OPS(tegra_xusb_suspend, tegra_xusb_resume)
2223 };
2224 
2225 static const char * const tegra124_supply_names[] = {
2226     "avddio-pex",
2227     "dvddio-pex",
2228     "avdd-usb",
2229     "hvdd-usb-ss",
2230 };
2231 
2232 static const struct tegra_xusb_phy_type tegra124_phy_types[] = {
2233     { .name = "usb3", .num = 2, },
2234     { .name = "usb2", .num = 3, },
2235     { .name = "hsic", .num = 2, },
2236 };
2237 
2238 static const unsigned int tegra124_xusb_context_ipfs[] = {
2239     IPFS_XUSB_HOST_MSI_BAR_SZ_0,
2240     IPFS_XUSB_HOST_MSI_AXI_BAR_ST_0,
2241     IPFS_XUSB_HOST_MSI_FPCI_BAR_ST_0,
2242     IPFS_XUSB_HOST_MSI_VEC0_0,
2243     IPFS_XUSB_HOST_MSI_EN_VEC0_0,
2244     IPFS_XUSB_HOST_FPCI_ERROR_MASKS_0,
2245     IPFS_XUSB_HOST_INTR_MASK_0,
2246     IPFS_XUSB_HOST_INTR_ENABLE_0,
2247     IPFS_XUSB_HOST_UFPCI_CONFIG_0,
2248     IPFS_XUSB_HOST_CLKGATE_HYSTERESIS_0,
2249     IPFS_XUSB_HOST_MCCIF_FIFOCTRL_0,
2250 };
2251 
2252 static const unsigned int tegra124_xusb_context_fpci[] = {
2253     XUSB_CFG_ARU_CONTEXT_HS_PLS,
2254     XUSB_CFG_ARU_CONTEXT_FS_PLS,
2255     XUSB_CFG_ARU_CONTEXT_HSFS_SPEED,
2256     XUSB_CFG_ARU_CONTEXT_HSFS_PP,
2257     XUSB_CFG_ARU_CONTEXT,
2258     XUSB_CFG_AXI_CFG,
2259     XUSB_CFG_24,
2260     XUSB_CFG_16,
2261 };
2262 
2263 static const struct tegra_xusb_context_soc tegra124_xusb_context = {
2264     .ipfs = {
2265         .num_offsets = ARRAY_SIZE(tegra124_xusb_context_ipfs),
2266         .offsets = tegra124_xusb_context_ipfs,
2267     },
2268     .fpci = {
2269         .num_offsets = ARRAY_SIZE(tegra124_xusb_context_fpci),
2270         .offsets = tegra124_xusb_context_fpci,
2271     },
2272 };
2273 
2274 static const struct tegra_xusb_soc tegra124_soc = {
2275     .firmware = "nvidia/tegra124/xusb.bin",
2276     .supply_names = tegra124_supply_names,
2277     .num_supplies = ARRAY_SIZE(tegra124_supply_names),
2278     .phy_types = tegra124_phy_types,
2279     .num_types = ARRAY_SIZE(tegra124_phy_types),
2280     .context = &tegra124_xusb_context,
2281     .ports = {
2282         .usb2 = { .offset = 4, .count = 4, },
2283         .hsic = { .offset = 6, .count = 2, },
2284         .usb3 = { .offset = 0, .count = 2, },
2285     },
2286     .scale_ss_clock = true,
2287     .has_ipfs = true,
2288     .otg_reset_sspi = false,
2289     .mbox = {
2290         .cmd = 0xe4,
2291         .data_in = 0xe8,
2292         .data_out = 0xec,
2293         .owner = 0xf0,
2294     },
2295 };
2296 MODULE_FIRMWARE("nvidia/tegra124/xusb.bin");
2297 
2298 static const char * const tegra210_supply_names[] = {
2299     "dvddio-pex",
2300     "hvddio-pex",
2301     "avdd-usb",
2302 };
2303 
2304 static const struct tegra_xusb_phy_type tegra210_phy_types[] = {
2305     { .name = "usb3", .num = 4, },
2306     { .name = "usb2", .num = 4, },
2307     { .name = "hsic", .num = 1, },
2308 };
2309 
2310 static const struct tegra_xusb_soc tegra210_soc = {
2311     .firmware = "nvidia/tegra210/xusb.bin",
2312     .supply_names = tegra210_supply_names,
2313     .num_supplies = ARRAY_SIZE(tegra210_supply_names),
2314     .phy_types = tegra210_phy_types,
2315     .num_types = ARRAY_SIZE(tegra210_phy_types),
2316     .context = &tegra124_xusb_context,
2317     .ports = {
2318         .usb2 = { .offset = 4, .count = 4, },
2319         .hsic = { .offset = 8, .count = 1, },
2320         .usb3 = { .offset = 0, .count = 4, },
2321     },
2322     .scale_ss_clock = false,
2323     .has_ipfs = true,
2324     .otg_reset_sspi = true,
2325     .mbox = {
2326         .cmd = 0xe4,
2327         .data_in = 0xe8,
2328         .data_out = 0xec,
2329         .owner = 0xf0,
2330     },
2331 };
2332 MODULE_FIRMWARE("nvidia/tegra210/xusb.bin");
2333 
2334 static const char * const tegra186_supply_names[] = {
2335 };
2336 MODULE_FIRMWARE("nvidia/tegra186/xusb.bin");
2337 
2338 static const struct tegra_xusb_phy_type tegra186_phy_types[] = {
2339     { .name = "usb3", .num = 3, },
2340     { .name = "usb2", .num = 3, },
2341     { .name = "hsic", .num = 1, },
2342 };
2343 
2344 static const struct tegra_xusb_context_soc tegra186_xusb_context = {
2345     .fpci = {
2346         .num_offsets = ARRAY_SIZE(tegra124_xusb_context_fpci),
2347         .offsets = tegra124_xusb_context_fpci,
2348     },
2349 };
2350 
2351 static const struct tegra_xusb_soc tegra186_soc = {
2352     .firmware = "nvidia/tegra186/xusb.bin",
2353     .supply_names = tegra186_supply_names,
2354     .num_supplies = ARRAY_SIZE(tegra186_supply_names),
2355     .phy_types = tegra186_phy_types,
2356     .num_types = ARRAY_SIZE(tegra186_phy_types),
2357     .context = &tegra186_xusb_context,
2358     .ports = {
2359         .usb3 = { .offset = 0, .count = 3, },
2360         .usb2 = { .offset = 3, .count = 3, },
2361         .hsic = { .offset = 6, .count = 1, },
2362     },
2363     .scale_ss_clock = false,
2364     .has_ipfs = false,
2365     .otg_reset_sspi = false,
2366     .mbox = {
2367         .cmd = 0xe4,
2368         .data_in = 0xe8,
2369         .data_out = 0xec,
2370         .owner = 0xf0,
2371     },
2372     .lpm_support = true,
2373 };
2374 
2375 static const char * const tegra194_supply_names[] = {
2376 };
2377 
2378 static const struct tegra_xusb_phy_type tegra194_phy_types[] = {
2379     { .name = "usb3", .num = 4, },
2380     { .name = "usb2", .num = 4, },
2381 };
2382 
2383 static const struct tegra_xusb_soc tegra194_soc = {
2384     .firmware = "nvidia/tegra194/xusb.bin",
2385     .supply_names = tegra194_supply_names,
2386     .num_supplies = ARRAY_SIZE(tegra194_supply_names),
2387     .phy_types = tegra194_phy_types,
2388     .num_types = ARRAY_SIZE(tegra194_phy_types),
2389     .context = &tegra186_xusb_context,
2390     .ports = {
2391         .usb3 = { .offset = 0, .count = 4, },
2392         .usb2 = { .offset = 4, .count = 4, },
2393     },
2394     .scale_ss_clock = false,
2395     .has_ipfs = false,
2396     .otg_reset_sspi = false,
2397     .mbox = {
2398         .cmd = 0x68,
2399         .data_in = 0x6c,
2400         .data_out = 0x70,
2401         .owner = 0x74,
2402     },
2403     .lpm_support = true,
2404 };
2405 MODULE_FIRMWARE("nvidia/tegra194/xusb.bin");
2406 
2407 static const struct of_device_id tegra_xusb_of_match[] = {
2408     { .compatible = "nvidia,tegra124-xusb", .data = &tegra124_soc },
2409     { .compatible = "nvidia,tegra210-xusb", .data = &tegra210_soc },
2410     { .compatible = "nvidia,tegra186-xusb", .data = &tegra186_soc },
2411     { .compatible = "nvidia,tegra194-xusb", .data = &tegra194_soc },
2412     { },
2413 };
2414 MODULE_DEVICE_TABLE(of, tegra_xusb_of_match);
2415 
2416 static struct platform_driver tegra_xusb_driver = {
2417     .probe = tegra_xusb_probe,
2418     .remove = tegra_xusb_remove,
2419     .driver = {
2420         .name = "tegra-xusb",
2421         .pm = &tegra_xusb_pm_ops,
2422         .of_match_table = tegra_xusb_of_match,
2423     },
2424 };
2425 
2426 static void tegra_xhci_quirks(struct device *dev, struct xhci_hcd *xhci)
2427 {
2428     struct tegra_xusb *tegra = dev_get_drvdata(dev);
2429 
2430     xhci->quirks |= XHCI_PLAT;
2431     if (tegra && tegra->soc->lpm_support)
2432         xhci->quirks |= XHCI_LPM_SUPPORT;
2433 }
2434 
2435 static int tegra_xhci_setup(struct usb_hcd *hcd)
2436 {
2437     return xhci_gen_setup(hcd, tegra_xhci_quirks);
2438 }
2439 
2440 static const struct xhci_driver_overrides tegra_xhci_overrides __initconst = {
2441     .reset = tegra_xhci_setup,
2442 };
2443 
2444 static int __init tegra_xusb_init(void)
2445 {
2446     xhci_init_driver(&tegra_xhci_hc_driver, &tegra_xhci_overrides);
2447 
2448     return platform_driver_register(&tegra_xusb_driver);
2449 }
2450 module_init(tegra_xusb_init);
2451 
2452 static void __exit tegra_xusb_exit(void)
2453 {
2454     platform_driver_unregister(&tegra_xusb_driver);
2455 }
2456 module_exit(tegra_xusb_exit);
2457 
2458 MODULE_AUTHOR("Andrew Bresticker <abrestic@chromium.org>");
2459 MODULE_DESCRIPTION("NVIDIA Tegra XUSB xHCI host-controller driver");
2460 MODULE_LICENSE("GPL v2");