|
@@ -75,10 +75,10 @@ static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg)
|
|
|
u32 intmsk;
|
|
|
|
|
|
/* Clear any pending OTG Interrupts */
|
|
|
- dwc2_writel(0xffffffff, hsotg->regs + GOTGINT);
|
|
|
+ dwc2_writel(hsotg, 0xffffffff, GOTGINT);
|
|
|
|
|
|
/* Clear any pending interrupts */
|
|
|
- dwc2_writel(0xffffffff, hsotg->regs + GINTSTS);
|
|
|
+ dwc2_writel(hsotg, 0xffffffff, GINTSTS);
|
|
|
|
|
|
/* Enable the interrupts in the GINTMSK */
|
|
|
intmsk = GINTSTS_MODEMIS | GINTSTS_OTGINT;
|
|
@@ -94,7 +94,7 @@ static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg)
|
|
|
if (dwc2_is_device_mode(hsotg) && hsotg->params.lpm)
|
|
|
intmsk |= GINTSTS_LPMTRANRCVD;
|
|
|
|
|
|
- dwc2_writel(intmsk, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, intmsk, GINTMSK);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -117,10 +117,10 @@ static void dwc2_init_fs_ls_pclk_sel(struct dwc2_hsotg *hsotg)
|
|
|
}
|
|
|
|
|
|
dev_dbg(hsotg->dev, "Initializing HCFG.FSLSPClkSel to %08x\n", val);
|
|
|
- hcfg = dwc2_readl(hsotg->regs + HCFG);
|
|
|
+ hcfg = dwc2_readl(hsotg, HCFG);
|
|
|
hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
|
|
|
hcfg |= val << HCFG_FSLSPCLKSEL_SHIFT;
|
|
|
- dwc2_writel(hcfg, hsotg->regs + HCFG);
|
|
|
+ dwc2_writel(hsotg, hcfg, HCFG);
|
|
|
}
|
|
|
|
|
|
static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
|
@@ -135,10 +135,10 @@ static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
|
|
if (select_phy) {
|
|
|
dev_dbg(hsotg->dev, "FS PHY selected\n");
|
|
|
|
|
|
- usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
+ usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
if (!(usbcfg & GUSBCFG_PHYSEL)) {
|
|
|
usbcfg |= GUSBCFG_PHYSEL;
|
|
|
- dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
|
|
+ dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
|
|
|
|
|
/* Reset after a PHY select */
|
|
|
retval = dwc2_core_reset(hsotg, false);
|
|
@@ -151,7 +151,7 @@ static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
|
|
}
|
|
|
|
|
|
if (hsotg->params.activate_stm_fs_transceiver) {
|
|
|
- ggpio = dwc2_readl(hsotg->regs + GGPIO);
|
|
|
+ ggpio = dwc2_readl(hsotg, GGPIO);
|
|
|
if (!(ggpio & GGPIO_STM32_OTG_GCCFG_PWRDWN)) {
|
|
|
dev_dbg(hsotg->dev, "Activating transceiver\n");
|
|
|
/*
|
|
@@ -159,7 +159,7 @@ static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
|
|
* core configuration register.
|
|
|
*/
|
|
|
ggpio |= GGPIO_STM32_OTG_GCCFG_PWRDWN;
|
|
|
- dwc2_writel(ggpio, hsotg->regs + GGPIO);
|
|
|
+ dwc2_writel(hsotg, ggpio, GGPIO);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -176,18 +176,18 @@ static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
|
|
dev_dbg(hsotg->dev, "FS PHY enabling I2C\n");
|
|
|
|
|
|
/* Program GUSBCFG.OtgUtmiFsSel to I2C */
|
|
|
- usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
+ usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
usbcfg |= GUSBCFG_OTG_UTMI_FS_SEL;
|
|
|
- dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
|
|
+ dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
|
|
|
|
|
/* Program GI2CCTL.I2CEn */
|
|
|
- i2cctl = dwc2_readl(hsotg->regs + GI2CCTL);
|
|
|
+ i2cctl = dwc2_readl(hsotg, GI2CCTL);
|
|
|
i2cctl &= ~GI2CCTL_I2CDEVADDR_MASK;
|
|
|
i2cctl |= 1 << GI2CCTL_I2CDEVADDR_SHIFT;
|
|
|
i2cctl &= ~GI2CCTL_I2CEN;
|
|
|
- dwc2_writel(i2cctl, hsotg->regs + GI2CCTL);
|
|
|
+ dwc2_writel(hsotg, i2cctl, GI2CCTL);
|
|
|
i2cctl |= GI2CCTL_I2CEN;
|
|
|
- dwc2_writel(i2cctl, hsotg->regs + GI2CCTL);
|
|
|
+ dwc2_writel(hsotg, i2cctl, GI2CCTL);
|
|
|
}
|
|
|
|
|
|
return retval;
|
|
@@ -201,7 +201,7 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
|
|
if (!select_phy)
|
|
|
return 0;
|
|
|
|
|
|
- usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
+ usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
usbcfg_old = usbcfg;
|
|
|
|
|
|
/*
|
|
@@ -236,7 +236,7 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
|
|
}
|
|
|
|
|
|
if (usbcfg != usbcfg_old) {
|
|
|
- dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
|
|
+ dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
|
|
|
|
|
/* Reset after setting the PHY parameters */
|
|
|
retval = dwc2_core_reset(hsotg, false);
|
|
@@ -273,15 +273,15 @@ static int dwc2_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
|
|
hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED &&
|
|
|
hsotg->params.ulpi_fs_ls) {
|
|
|
dev_dbg(hsotg->dev, "Setting ULPI FSLS\n");
|
|
|
- usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
+ usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
usbcfg |= GUSBCFG_ULPI_FS_LS;
|
|
|
usbcfg |= GUSBCFG_ULPI_CLK_SUSP_M;
|
|
|
- dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
|
|
+ dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
|
|
} else {
|
|
|
- usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
+ usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
usbcfg &= ~GUSBCFG_ULPI_FS_LS;
|
|
|
usbcfg &= ~GUSBCFG_ULPI_CLK_SUSP_M;
|
|
|
- dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
|
|
+ dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
|
|
}
|
|
|
|
|
|
return retval;
|
|
@@ -289,7 +289,7 @@ static int dwc2_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
|
|
|
|
|
static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg)
|
|
|
{
|
|
|
- u32 ahbcfg = dwc2_readl(hsotg->regs + GAHBCFG);
|
|
|
+ u32 ahbcfg = dwc2_readl(hsotg, GAHBCFG);
|
|
|
|
|
|
switch (hsotg->hw_params.arch) {
|
|
|
case GHWCFG2_EXT_DMA_ARCH:
|
|
@@ -316,7 +316,7 @@ static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg)
|
|
|
else
|
|
|
hsotg->params.dma_desc_enable = false;
|
|
|
|
|
|
- dwc2_writel(ahbcfg, hsotg->regs + GAHBCFG);
|
|
|
+ dwc2_writel(hsotg, ahbcfg, GAHBCFG);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -325,7 +325,7 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg)
|
|
|
{
|
|
|
u32 usbcfg;
|
|
|
|
|
|
- usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
+ usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
usbcfg &= ~(GUSBCFG_HNPCAP | GUSBCFG_SRPCAP);
|
|
|
|
|
|
switch (hsotg->hw_params.op_mode) {
|
|
@@ -353,7 +353,7 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
|
|
+ dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
|
|
}
|
|
|
|
|
|
static int dwc2_vbus_supply_init(struct dwc2_hsotg *hsotg)
|
|
@@ -390,16 +390,16 @@ static void dwc2_enable_host_interrupts(struct dwc2_hsotg *hsotg)
|
|
|
dev_dbg(hsotg->dev, "%s()\n", __func__);
|
|
|
|
|
|
/* Disable all interrupts */
|
|
|
- dwc2_writel(0, hsotg->regs + GINTMSK);
|
|
|
- dwc2_writel(0, hsotg->regs + HAINTMSK);
|
|
|
+ dwc2_writel(hsotg, 0, GINTMSK);
|
|
|
+ dwc2_writel(hsotg, 0, HAINTMSK);
|
|
|
|
|
|
/* Enable the common interrupts */
|
|
|
dwc2_enable_common_interrupts(hsotg);
|
|
|
|
|
|
/* Enable host mode interrupts without disturbing common interrupts */
|
|
|
- intmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ intmsk = dwc2_readl(hsotg, GINTMSK);
|
|
|
intmsk |= GINTSTS_DISCONNINT | GINTSTS_PRTINT | GINTSTS_HCHINT;
|
|
|
- dwc2_writel(intmsk, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, intmsk, GINTMSK);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -409,12 +409,12 @@ static void dwc2_enable_host_interrupts(struct dwc2_hsotg *hsotg)
|
|
|
*/
|
|
|
static void dwc2_disable_host_interrupts(struct dwc2_hsotg *hsotg)
|
|
|
{
|
|
|
- u32 intmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ u32 intmsk = dwc2_readl(hsotg, GINTMSK);
|
|
|
|
|
|
/* Disable host mode interrupts without disturbing common interrupts */
|
|
|
intmsk &= ~(GINTSTS_SOF | GINTSTS_PRTINT | GINTSTS_HCHINT |
|
|
|
GINTSTS_PTXFEMP | GINTSTS_NPTXFEMP | GINTSTS_DISCONNINT);
|
|
|
- dwc2_writel(intmsk, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, intmsk, GINTMSK);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -494,37 +494,37 @@ static void dwc2_config_fifos(struct dwc2_hsotg *hsotg)
|
|
|
dwc2_calculate_dynamic_fifo(hsotg);
|
|
|
|
|
|
/* Rx FIFO */
|
|
|
- grxfsiz = dwc2_readl(hsotg->regs + GRXFSIZ);
|
|
|
+ grxfsiz = dwc2_readl(hsotg, GRXFSIZ);
|
|
|
dev_dbg(hsotg->dev, "initial grxfsiz=%08x\n", grxfsiz);
|
|
|
grxfsiz &= ~GRXFSIZ_DEPTH_MASK;
|
|
|
grxfsiz |= params->host_rx_fifo_size <<
|
|
|
GRXFSIZ_DEPTH_SHIFT & GRXFSIZ_DEPTH_MASK;
|
|
|
- dwc2_writel(grxfsiz, hsotg->regs + GRXFSIZ);
|
|
|
+ dwc2_writel(hsotg, grxfsiz, GRXFSIZ);
|
|
|
dev_dbg(hsotg->dev, "new grxfsiz=%08x\n",
|
|
|
- dwc2_readl(hsotg->regs + GRXFSIZ));
|
|
|
+ dwc2_readl(hsotg, GRXFSIZ));
|
|
|
|
|
|
/* Non-periodic Tx FIFO */
|
|
|
dev_dbg(hsotg->dev, "initial gnptxfsiz=%08x\n",
|
|
|
- dwc2_readl(hsotg->regs + GNPTXFSIZ));
|
|
|
+ dwc2_readl(hsotg, GNPTXFSIZ));
|
|
|
nptxfsiz = params->host_nperio_tx_fifo_size <<
|
|
|
FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK;
|
|
|
nptxfsiz |= params->host_rx_fifo_size <<
|
|
|
FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK;
|
|
|
- dwc2_writel(nptxfsiz, hsotg->regs + GNPTXFSIZ);
|
|
|
+ dwc2_writel(hsotg, nptxfsiz, GNPTXFSIZ);
|
|
|
dev_dbg(hsotg->dev, "new gnptxfsiz=%08x\n",
|
|
|
- dwc2_readl(hsotg->regs + GNPTXFSIZ));
|
|
|
+ dwc2_readl(hsotg, GNPTXFSIZ));
|
|
|
|
|
|
/* Periodic Tx FIFO */
|
|
|
dev_dbg(hsotg->dev, "initial hptxfsiz=%08x\n",
|
|
|
- dwc2_readl(hsotg->regs + HPTXFSIZ));
|
|
|
+ dwc2_readl(hsotg, HPTXFSIZ));
|
|
|
hptxfsiz = params->host_perio_tx_fifo_size <<
|
|
|
FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK;
|
|
|
hptxfsiz |= (params->host_rx_fifo_size +
|
|
|
params->host_nperio_tx_fifo_size) <<
|
|
|
FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK;
|
|
|
- dwc2_writel(hptxfsiz, hsotg->regs + HPTXFSIZ);
|
|
|
+ dwc2_writel(hsotg, hptxfsiz, HPTXFSIZ);
|
|
|
dev_dbg(hsotg->dev, "new hptxfsiz=%08x\n",
|
|
|
- dwc2_readl(hsotg->regs + HPTXFSIZ));
|
|
|
+ dwc2_readl(hsotg, HPTXFSIZ));
|
|
|
|
|
|
if (hsotg->params.en_multiple_tx_fifo &&
|
|
|
hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_91a) {
|
|
@@ -533,14 +533,14 @@ static void dwc2_config_fifos(struct dwc2_hsotg *hsotg)
|
|
|
* Global DFIFOCFG calculation for Host mode -
|
|
|
* include RxFIFO, NPTXFIFO and HPTXFIFO
|
|
|
*/
|
|
|
- dfifocfg = dwc2_readl(hsotg->regs + GDFIFOCFG);
|
|
|
+ dfifocfg = dwc2_readl(hsotg, GDFIFOCFG);
|
|
|
dfifocfg &= ~GDFIFOCFG_EPINFOBASE_MASK;
|
|
|
dfifocfg |= (params->host_rx_fifo_size +
|
|
|
params->host_nperio_tx_fifo_size +
|
|
|
params->host_perio_tx_fifo_size) <<
|
|
|
GDFIFOCFG_EPINFOBASE_SHIFT &
|
|
|
GDFIFOCFG_EPINFOBASE_MASK;
|
|
|
- dwc2_writel(dfifocfg, hsotg->regs + GDFIFOCFG);
|
|
|
+ dwc2_writel(hsotg, dfifocfg, GDFIFOCFG);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -560,8 +560,8 @@ u32 dwc2_calc_frame_interval(struct dwc2_hsotg *hsotg)
|
|
|
u32 hprt0;
|
|
|
int clock = 60; /* default value */
|
|
|
|
|
|
- usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
- hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
|
|
+ usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
+ hprt0 = dwc2_readl(hsotg, HPRT0);
|
|
|
|
|
|
if (!(usbcfg & GUSBCFG_PHYSEL) && (usbcfg & GUSBCFG_ULPI_UTMI_SEL) &&
|
|
|
!(usbcfg & GUSBCFG_PHYIF16))
|
|
@@ -603,7 +603,6 @@ u32 dwc2_calc_frame_interval(struct dwc2_hsotg *hsotg)
|
|
|
*/
|
|
|
void dwc2_read_packet(struct dwc2_hsotg *hsotg, u8 *dest, u16 bytes)
|
|
|
{
|
|
|
- u32 __iomem *fifo = hsotg->regs + HCFIFO(0);
|
|
|
u32 *data_buf = (u32 *)dest;
|
|
|
int word_count = (bytes + 3) / 4;
|
|
|
int i;
|
|
@@ -617,7 +616,7 @@ void dwc2_read_packet(struct dwc2_hsotg *hsotg, u8 *dest, u16 bytes)
|
|
|
dev_vdbg(hsotg->dev, "%s(%p,%p,%d)\n", __func__, hsotg, dest, bytes);
|
|
|
|
|
|
for (i = 0; i < word_count; i++, data_buf++)
|
|
|
- *data_buf = dwc2_readl(fifo);
|
|
|
+ *data_buf = dwc2_readl(hsotg, HCFIFO(0));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -646,10 +645,10 @@ static void dwc2_dump_channel_info(struct dwc2_hsotg *hsotg,
|
|
|
if (!chan)
|
|
|
return;
|
|
|
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
- hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chan->hc_num));
|
|
|
- hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chan->hc_num));
|
|
|
- hc_dma = dwc2_readl(hsotg->regs + HCDMA(chan->hc_num));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num));
|
|
|
+ hcsplt = dwc2_readl(hsotg, HCSPLT(chan->hc_num));
|
|
|
+ hctsiz = dwc2_readl(hsotg, HCTSIZ(chan->hc_num));
|
|
|
+ hc_dma = dwc2_readl(hsotg, HCDMA(chan->hc_num));
|
|
|
|
|
|
dev_dbg(hsotg->dev, " Assigned to channel %p:\n", chan);
|
|
|
dev_dbg(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n",
|
|
@@ -797,7 +796,7 @@ static void dwc2_hc_enable_slave_ints(struct dwc2_hsotg *hsotg,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- dwc2_writel(hcintmsk, hsotg->regs + HCINTMSK(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcintmsk, HCINTMSK(chan->hc_num));
|
|
|
if (dbg_hc(chan))
|
|
|
dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk);
|
|
|
}
|
|
@@ -834,7 +833,7 @@ static void dwc2_hc_enable_dma_ints(struct dwc2_hsotg *hsotg,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- dwc2_writel(hcintmsk, hsotg->regs + HCINTMSK(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcintmsk, HCINTMSK(chan->hc_num));
|
|
|
if (dbg_hc(chan))
|
|
|
dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk);
|
|
|
}
|
|
@@ -855,16 +854,16 @@ static void dwc2_hc_enable_ints(struct dwc2_hsotg *hsotg,
|
|
|
}
|
|
|
|
|
|
/* Enable the top level host channel interrupt */
|
|
|
- intmsk = dwc2_readl(hsotg->regs + HAINTMSK);
|
|
|
+ intmsk = dwc2_readl(hsotg, HAINTMSK);
|
|
|
intmsk |= 1 << chan->hc_num;
|
|
|
- dwc2_writel(intmsk, hsotg->regs + HAINTMSK);
|
|
|
+ dwc2_writel(hsotg, intmsk, HAINTMSK);
|
|
|
if (dbg_hc(chan))
|
|
|
dev_vdbg(hsotg->dev, "set HAINTMSK to %08x\n", intmsk);
|
|
|
|
|
|
/* Make sure host channel interrupts are enabled */
|
|
|
- intmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ intmsk = dwc2_readl(hsotg, GINTMSK);
|
|
|
intmsk |= GINTSTS_HCHINT;
|
|
|
- dwc2_writel(intmsk, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, intmsk, GINTMSK);
|
|
|
if (dbg_hc(chan))
|
|
|
dev_vdbg(hsotg->dev, "set GINTMSK to %08x\n", intmsk);
|
|
|
}
|
|
@@ -893,7 +892,7 @@ static void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan)
|
|
|
/* Clear old interrupt conditions for this host channel */
|
|
|
hcintmsk = 0xffffffff;
|
|
|
hcintmsk &= ~HCINTMSK_RESERVED14_31;
|
|
|
- dwc2_writel(hcintmsk, hsotg->regs + HCINT(hc_num));
|
|
|
+ dwc2_writel(hsotg, hcintmsk, HCINT(hc_num));
|
|
|
|
|
|
/* Enable channel interrupts required for this transfer */
|
|
|
dwc2_hc_enable_ints(hsotg, chan);
|
|
@@ -910,7 +909,7 @@ static void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan)
|
|
|
hcchar |= HCCHAR_LSPDDEV;
|
|
|
hcchar |= chan->ep_type << HCCHAR_EPTYPE_SHIFT & HCCHAR_EPTYPE_MASK;
|
|
|
hcchar |= chan->max_packet << HCCHAR_MPS_SHIFT & HCCHAR_MPS_MASK;
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(hc_num));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(hc_num));
|
|
|
if (dbg_hc(chan)) {
|
|
|
dev_vdbg(hsotg->dev, "set HCCHAR(%d) to %08x\n",
|
|
|
hc_num, hcchar);
|
|
@@ -964,7 +963,7 @@ static void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- dwc2_writel(hcsplt, hsotg->regs + HCSPLT(hc_num));
|
|
|
+ dwc2_writel(hsotg, hcsplt, HCSPLT(hc_num));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1034,14 +1033,14 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
|
|
|
u32 hcintmsk = HCINTMSK_CHHLTD;
|
|
|
|
|
|
dev_vdbg(hsotg->dev, "dequeue/error\n");
|
|
|
- dwc2_writel(hcintmsk, hsotg->regs + HCINTMSK(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcintmsk, HCINTMSK(chan->hc_num));
|
|
|
|
|
|
/*
|
|
|
* Make sure no other interrupts besides halt are currently
|
|
|
* pending. Handling another interrupt could cause a crash due
|
|
|
* to the QTD and QH state.
|
|
|
*/
|
|
|
- dwc2_writel(~hcintmsk, hsotg->regs + HCINT(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, ~hcintmsk, HCINT(chan->hc_num));
|
|
|
|
|
|
/*
|
|
|
* Make sure the halt status is set to URB_DEQUEUE or AHB_ERR
|
|
@@ -1050,7 +1049,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
|
|
|
*/
|
|
|
chan->halt_status = halt_status;
|
|
|
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num));
|
|
|
if (!(hcchar & HCCHAR_CHENA)) {
|
|
|
/*
|
|
|
* The channel is either already halted or it hasn't
|
|
@@ -1078,7 +1077,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num));
|
|
|
|
|
|
/* No need to set the bit in DDMA for disabling the channel */
|
|
|
/* TODO check it everywhere channel is disabled */
|
|
@@ -1101,7 +1100,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
|
|
|
if (chan->ep_type == USB_ENDPOINT_XFER_CONTROL ||
|
|
|
chan->ep_type == USB_ENDPOINT_XFER_BULK) {
|
|
|
dev_vdbg(hsotg->dev, "control/bulk\n");
|
|
|
- nptxsts = dwc2_readl(hsotg->regs + GNPTXSTS);
|
|
|
+ nptxsts = dwc2_readl(hsotg, GNPTXSTS);
|
|
|
if ((nptxsts & TXSTS_QSPCAVAIL_MASK) == 0) {
|
|
|
dev_vdbg(hsotg->dev, "Disabling channel\n");
|
|
|
hcchar &= ~HCCHAR_CHENA;
|
|
@@ -1109,7 +1108,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
|
|
|
} else {
|
|
|
if (dbg_perio())
|
|
|
dev_vdbg(hsotg->dev, "isoc/intr\n");
|
|
|
- hptxsts = dwc2_readl(hsotg->regs + HPTXSTS);
|
|
|
+ hptxsts = dwc2_readl(hsotg, HPTXSTS);
|
|
|
if ((hptxsts & TXSTS_QSPCAVAIL_MASK) == 0 ||
|
|
|
hsotg->queuing_high_bandwidth) {
|
|
|
if (dbg_perio())
|
|
@@ -1122,7 +1121,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
|
|
|
dev_vdbg(hsotg->dev, "DMA enabled\n");
|
|
|
}
|
|
|
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num));
|
|
|
chan->halt_status = halt_status;
|
|
|
|
|
|
if (hcchar & HCCHAR_CHENA) {
|
|
@@ -1171,10 +1170,10 @@ void dwc2_hc_cleanup(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan)
|
|
|
* Clear channel interrupt enables and any unhandled channel interrupt
|
|
|
* conditions
|
|
|
*/
|
|
|
- dwc2_writel(0, hsotg->regs + HCINTMSK(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, 0, HCINTMSK(chan->hc_num));
|
|
|
hcintmsk = 0xffffffff;
|
|
|
hcintmsk &= ~HCINTMSK_RESERVED14_31;
|
|
|
- dwc2_writel(hcintmsk, hsotg->regs + HCINT(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcintmsk, HCINT(chan->hc_num));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1228,7 +1227,7 @@ static void dwc2_hc_set_even_odd_frame(struct dwc2_hsotg *hsotg,
|
|
|
!chan->do_split) ? chan->speed : USB_SPEED_HIGH;
|
|
|
|
|
|
/* See how many bytes are in the periodic FIFO right now */
|
|
|
- fifo_space = (dwc2_readl(hsotg->regs + HPTXSTS) &
|
|
|
+ fifo_space = (dwc2_readl(hsotg, HPTXSTS) &
|
|
|
TXSTS_FSPCAVAIL_MASK) >> TXSTS_FSPCAVAIL_SHIFT;
|
|
|
bytes_in_fifo = sizeof(u32) *
|
|
|
(hsotg->params.host_perio_tx_fifo_size -
|
|
@@ -1348,13 +1347,13 @@ static void dwc2_hc_write_packet(struct dwc2_hsotg *hsotg,
|
|
|
if (((unsigned long)data_buf & 0x3) == 0) {
|
|
|
/* xfer_buf is DWORD aligned */
|
|
|
for (i = 0; i < dword_count; i++, data_buf++)
|
|
|
- dwc2_writel(*data_buf, data_fifo);
|
|
|
+ dwc2_writel(hsotg, *data_buf, HCFIFO(chan->hc_num));
|
|
|
} else {
|
|
|
/* xfer_buf is not DWORD aligned */
|
|
|
for (i = 0; i < dword_count; i++, data_buf++) {
|
|
|
u32 data = data_buf[0] | data_buf[1] << 8 |
|
|
|
data_buf[2] << 16 | data_buf[3] << 24;
|
|
|
- dwc2_writel(data, data_fifo);
|
|
|
+ dwc2_writel(hsotg, data, HCFIFO(chan->hc_num));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1383,12 +1382,12 @@ static void dwc2_hc_do_ping(struct dwc2_hsotg *hsotg,
|
|
|
|
|
|
hctsiz = TSIZ_DOPNG;
|
|
|
hctsiz |= 1 << TSIZ_PKTCNT_SHIFT;
|
|
|
- dwc2_writel(hctsiz, hsotg->regs + HCTSIZ(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hctsiz, HCTSIZ(chan->hc_num));
|
|
|
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num));
|
|
|
hcchar |= HCCHAR_CHENA;
|
|
|
hcchar &= ~HCCHAR_CHDIS;
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1548,7 +1547,7 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,
|
|
|
hctsiz |= num_packets << TSIZ_PKTCNT_SHIFT & TSIZ_PKTCNT_MASK;
|
|
|
hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT &
|
|
|
TSIZ_SC_MC_PID_MASK;
|
|
|
- dwc2_writel(hctsiz, hsotg->regs + HCTSIZ(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hctsiz, HCTSIZ(chan->hc_num));
|
|
|
if (dbg_hc(chan)) {
|
|
|
dev_vdbg(hsotg->dev, "Wrote %08x to HCTSIZ(%d)\n",
|
|
|
hctsiz, chan->hc_num);
|
|
@@ -1576,7 +1575,7 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,
|
|
|
} else {
|
|
|
dma_addr = chan->xfer_dma;
|
|
|
}
|
|
|
- dwc2_writel((u32)dma_addr, hsotg->regs + HCDMA(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, (u32)dma_addr, HCDMA(chan->hc_num));
|
|
|
|
|
|
if (dbg_hc(chan))
|
|
|
dev_vdbg(hsotg->dev, "Wrote %08lx to HCDMA(%d)\n",
|
|
@@ -1585,13 +1584,13 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,
|
|
|
|
|
|
/* Start the split */
|
|
|
if (chan->do_split) {
|
|
|
- u32 hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chan->hc_num));
|
|
|
+ u32 hcsplt = dwc2_readl(hsotg, HCSPLT(chan->hc_num));
|
|
|
|
|
|
hcsplt |= HCSPLT_SPLTENA;
|
|
|
- dwc2_writel(hcsplt, hsotg->regs + HCSPLT(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcsplt, HCSPLT(chan->hc_num));
|
|
|
}
|
|
|
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num));
|
|
|
hcchar &= ~HCCHAR_MULTICNT_MASK;
|
|
|
hcchar |= (ec_mc << HCCHAR_MULTICNT_SHIFT) & HCCHAR_MULTICNT_MASK;
|
|
|
dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar);
|
|
@@ -1610,7 +1609,7 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,
|
|
|
(hcchar & HCCHAR_MULTICNT_MASK) >>
|
|
|
HCCHAR_MULTICNT_SHIFT);
|
|
|
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num));
|
|
|
if (dbg_hc(chan))
|
|
|
dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
|
|
|
chan->hc_num);
|
|
@@ -1668,18 +1667,18 @@ void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg,
|
|
|
dev_vdbg(hsotg->dev, " NTD: %d\n", chan->ntd - 1);
|
|
|
}
|
|
|
|
|
|
- dwc2_writel(hctsiz, hsotg->regs + HCTSIZ(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hctsiz, HCTSIZ(chan->hc_num));
|
|
|
|
|
|
dma_sync_single_for_device(hsotg->dev, chan->desc_list_addr,
|
|
|
chan->desc_list_sz, DMA_TO_DEVICE);
|
|
|
|
|
|
- dwc2_writel(chan->desc_list_addr, hsotg->regs + HCDMA(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, chan->desc_list_addr, HCDMA(chan->hc_num));
|
|
|
|
|
|
if (dbg_hc(chan))
|
|
|
dev_vdbg(hsotg->dev, "Wrote %pad to HCDMA(%d)\n",
|
|
|
&chan->desc_list_addr, chan->hc_num);
|
|
|
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num));
|
|
|
hcchar &= ~HCCHAR_MULTICNT_MASK;
|
|
|
hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT &
|
|
|
HCCHAR_MULTICNT_MASK;
|
|
@@ -1698,7 +1697,7 @@ void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg,
|
|
|
(hcchar & HCCHAR_MULTICNT_MASK) >>
|
|
|
HCCHAR_MULTICNT_SHIFT);
|
|
|
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num));
|
|
|
if (dbg_hc(chan))
|
|
|
dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
|
|
|
chan->hc_num);
|
|
@@ -1755,7 +1754,7 @@ static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg,
|
|
|
* transfer completes, the extra requests for the channel will
|
|
|
* be flushed.
|
|
|
*/
|
|
|
- u32 hcchar = dwc2_readl(hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ u32 hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num));
|
|
|
|
|
|
dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar);
|
|
|
hcchar |= HCCHAR_CHENA;
|
|
@@ -1763,7 +1762,7 @@ static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg,
|
|
|
if (dbg_hc(chan))
|
|
|
dev_vdbg(hsotg->dev, " IN xfer: hcchar = 0x%08x\n",
|
|
|
hcchar);
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num));
|
|
|
chan->requests++;
|
|
|
return 1;
|
|
|
}
|
|
@@ -1773,7 +1772,7 @@ static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg,
|
|
|
if (chan->xfer_count < chan->xfer_len) {
|
|
|
if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
|
|
|
chan->ep_type == USB_ENDPOINT_XFER_ISOC) {
|
|
|
- u32 hcchar = dwc2_readl(hsotg->regs +
|
|
|
+ u32 hcchar = dwc2_readl(hsotg,
|
|
|
HCCHAR(chan->hc_num));
|
|
|
|
|
|
dwc2_hc_set_even_odd_frame(hsotg, chan,
|
|
@@ -1887,7 +1886,7 @@ void dwc2_hcd_start(struct dwc2_hsotg *hsotg)
|
|
|
*/
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
hprt0 |= HPRT0_RST;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
}
|
|
|
|
|
|
queue_delayed_work(hsotg->wq_otg, &hsotg->start_work,
|
|
@@ -1908,11 +1907,11 @@ static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg)
|
|
|
channel = hsotg->hc_ptr_array[i];
|
|
|
if (!list_empty(&channel->hc_list_entry))
|
|
|
continue;
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(i));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(i));
|
|
|
if (hcchar & HCCHAR_CHENA) {
|
|
|
hcchar &= ~(HCCHAR_CHENA | HCCHAR_EPDIR);
|
|
|
hcchar |= HCCHAR_CHDIS;
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(i));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(i));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1921,11 +1920,11 @@ static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg)
|
|
|
channel = hsotg->hc_ptr_array[i];
|
|
|
if (!list_empty(&channel->hc_list_entry))
|
|
|
continue;
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(i));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(i));
|
|
|
if (hcchar & HCCHAR_CHENA) {
|
|
|
/* Halt the channel */
|
|
|
hcchar |= HCCHAR_CHDIS;
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(i));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(i));
|
|
|
}
|
|
|
|
|
|
dwc2_hc_cleanup(hsotg, channel);
|
|
@@ -1985,11 +1984,11 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force)
|
|
|
* interrupt mask and status bits and disabling subsequent host
|
|
|
* channel interrupts.
|
|
|
*/
|
|
|
- intr = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ intr = dwc2_readl(hsotg, GINTMSK);
|
|
|
intr &= ~(GINTSTS_NPTXFEMP | GINTSTS_PTXFEMP | GINTSTS_HCHINT);
|
|
|
- dwc2_writel(intr, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, intr, GINTMSK);
|
|
|
intr = GINTSTS_NPTXFEMP | GINTSTS_PTXFEMP | GINTSTS_HCHINT;
|
|
|
- dwc2_writel(intr, hsotg->regs + GINTSTS);
|
|
|
+ dwc2_writel(hsotg, intr, GINTSTS);
|
|
|
|
|
|
/*
|
|
|
* Turn off the vbus power only if the core has transitioned to device
|
|
@@ -1999,7 +1998,7 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force)
|
|
|
if (dwc2_is_device_mode(hsotg)) {
|
|
|
if (hsotg->op_state != OTG_STATE_A_SUSPEND) {
|
|
|
dev_dbg(hsotg->dev, "Disconnect: PortPower off\n");
|
|
|
- dwc2_writel(0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, 0, HPRT0);
|
|
|
}
|
|
|
|
|
|
dwc2_disable_host_interrupts(hsotg);
|
|
@@ -2027,7 +2026,7 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force)
|
|
|
* and won't get any future interrupts to handle the connect.
|
|
|
*/
|
|
|
if (!force) {
|
|
|
- hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
|
|
+ hprt0 = dwc2_readl(hsotg, HPRT0);
|
|
|
if (!(hprt0 & HPRT0_CONNDET) && (hprt0 & HPRT0_CONNSTS))
|
|
|
dwc2_hcd_connect(hsotg);
|
|
|
}
|
|
@@ -2071,7 +2070,7 @@ void dwc2_hcd_stop(struct dwc2_hsotg *hsotg)
|
|
|
|
|
|
/* Turn off the vbus power */
|
|
|
dev_dbg(hsotg->dev, "PortPower off\n");
|
|
|
- dwc2_writel(0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, 0, HPRT0);
|
|
|
}
|
|
|
|
|
|
/* Caller must hold driver lock */
|
|
@@ -2095,7 +2094,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
|
|
|
if ((dev_speed == USB_SPEED_LOW) &&
|
|
|
(hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) &&
|
|
|
(hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI)) {
|
|
|
- u32 hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
|
|
+ u32 hprt0 = dwc2_readl(hsotg, HPRT0);
|
|
|
u32 prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
|
|
|
|
|
|
if (prtspd == HPRT0_SPD_FULL_SPEED)
|
|
@@ -2114,7 +2113,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
- intr_mask = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ intr_mask = dwc2_readl(hsotg, GINTMSK);
|
|
|
if (!(intr_mask & GINTSTS_SOF)) {
|
|
|
enum dwc2_transaction_type tr_type;
|
|
|
|
|
@@ -2279,7 +2278,7 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup)
|
|
|
|
|
|
dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
|
|
|
|
|
|
- usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
+ usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
|
|
|
/* Set ULPI External VBUS bit if needed */
|
|
|
usbcfg &= ~GUSBCFG_ULPI_EXT_VBUS_DRV;
|
|
@@ -2291,7 +2290,7 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup)
|
|
|
if (hsotg->params.ts_dline)
|
|
|
usbcfg |= GUSBCFG_TERMSELDLPULSE;
|
|
|
|
|
|
- dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
|
|
+ dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
|
|
|
|
|
/*
|
|
|
* Reset the Controller
|
|
@@ -2325,9 +2324,9 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup)
|
|
|
dwc2_gusbcfg_init(hsotg);
|
|
|
|
|
|
/* Program the GOTGCTL register */
|
|
|
- otgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
|
|
+ otgctl = dwc2_readl(hsotg, GOTGCTL);
|
|
|
otgctl &= ~GOTGCTL_OTGVER;
|
|
|
- dwc2_writel(otgctl, hsotg->regs + GOTGCTL);
|
|
|
+ dwc2_writel(hsotg, otgctl, GOTGCTL);
|
|
|
|
|
|
/* Clear the SRP success bit for FS-I2c */
|
|
|
hsotg->srp_success = 0;
|
|
@@ -2374,20 +2373,20 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
|
|
|
* introduced by the PHY in generating the linestate condition
|
|
|
* can vary from one PHY to another.
|
|
|
*/
|
|
|
- usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
+ usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
usbcfg |= GUSBCFG_TOUTCAL(7);
|
|
|
- dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
|
|
+ dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
|
|
|
|
|
/* Restart the Phy Clock */
|
|
|
- dwc2_writel(0, hsotg->regs + PCGCTL);
|
|
|
+ dwc2_writel(hsotg, 0, PCGCTL);
|
|
|
|
|
|
/* Initialize Host Configuration Register */
|
|
|
dwc2_init_fs_ls_pclk_sel(hsotg);
|
|
|
if (hsotg->params.speed == DWC2_SPEED_PARAM_FULL ||
|
|
|
hsotg->params.speed == DWC2_SPEED_PARAM_LOW) {
|
|
|
- hcfg = dwc2_readl(hsotg->regs + HCFG);
|
|
|
+ hcfg = dwc2_readl(hsotg, HCFG);
|
|
|
hcfg |= HCFG_FSLSSUPP;
|
|
|
- dwc2_writel(hcfg, hsotg->regs + HCFG);
|
|
|
+ dwc2_writel(hsotg, hcfg, HCFG);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -2396,9 +2395,9 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
|
|
|
* and its value must not be changed during runtime.
|
|
|
*/
|
|
|
if (hsotg->params.reload_ctl) {
|
|
|
- hfir = dwc2_readl(hsotg->regs + HFIR);
|
|
|
+ hfir = dwc2_readl(hsotg, HFIR);
|
|
|
hfir |= HFIR_RLDCTRL;
|
|
|
- dwc2_writel(hfir, hsotg->regs + HFIR);
|
|
|
+ dwc2_writel(hsotg, hfir, HFIR);
|
|
|
}
|
|
|
|
|
|
if (hsotg->params.dma_desc_enable) {
|
|
@@ -2415,9 +2414,9 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
|
|
|
"falling back to buffer DMA mode.\n");
|
|
|
hsotg->params.dma_desc_enable = false;
|
|
|
} else {
|
|
|
- hcfg = dwc2_readl(hsotg->regs + HCFG);
|
|
|
+ hcfg = dwc2_readl(hsotg, HCFG);
|
|
|
hcfg |= HCFG_DESCDMA;
|
|
|
- dwc2_writel(hcfg, hsotg->regs + HCFG);
|
|
|
+ dwc2_writel(hsotg, hcfg, HCFG);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2426,18 +2425,18 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
|
|
|
|
|
|
/* TODO - check this */
|
|
|
/* Clear Host Set HNP Enable in the OTG Control Register */
|
|
|
- otgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
|
|
+ otgctl = dwc2_readl(hsotg, GOTGCTL);
|
|
|
otgctl &= ~GOTGCTL_HSTSETHNPEN;
|
|
|
- dwc2_writel(otgctl, hsotg->regs + GOTGCTL);
|
|
|
+ dwc2_writel(hsotg, otgctl, GOTGCTL);
|
|
|
|
|
|
/* Make sure the FIFOs are flushed */
|
|
|
dwc2_flush_tx_fifo(hsotg, 0x10 /* all TX FIFOs */);
|
|
|
dwc2_flush_rx_fifo(hsotg);
|
|
|
|
|
|
/* Clear Host Set HNP Enable in the OTG Control Register */
|
|
|
- otgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
|
|
+ otgctl = dwc2_readl(hsotg, GOTGCTL);
|
|
|
otgctl &= ~GOTGCTL_HSTSETHNPEN;
|
|
|
- dwc2_writel(otgctl, hsotg->regs + GOTGCTL);
|
|
|
+ dwc2_writel(hsotg, otgctl, GOTGCTL);
|
|
|
|
|
|
if (!hsotg->params.dma_desc_enable) {
|
|
|
int num_channels, i;
|
|
@@ -2446,19 +2445,19 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
|
|
|
/* Flush out any leftover queued requests */
|
|
|
num_channels = hsotg->params.host_channels;
|
|
|
for (i = 0; i < num_channels; i++) {
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(i));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(i));
|
|
|
hcchar &= ~HCCHAR_CHENA;
|
|
|
hcchar |= HCCHAR_CHDIS;
|
|
|
hcchar &= ~HCCHAR_EPDIR;
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(i));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(i));
|
|
|
}
|
|
|
|
|
|
/* Halt all channels to put them into a known state */
|
|
|
for (i = 0; i < num_channels; i++) {
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(i));
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(i));
|
|
|
hcchar |= HCCHAR_CHENA | HCCHAR_CHDIS;
|
|
|
hcchar &= ~HCCHAR_EPDIR;
|
|
|
- dwc2_writel(hcchar, hsotg->regs + HCCHAR(i));
|
|
|
+ dwc2_writel(hsotg, hcchar, HCCHAR(i));
|
|
|
dev_dbg(hsotg->dev, "%s: Halt channel %d\n",
|
|
|
__func__, i);
|
|
|
|
|
@@ -2482,7 +2481,7 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
|
|
|
!!(hprt0 & HPRT0_PWR));
|
|
|
if (!(hprt0 & HPRT0_PWR)) {
|
|
|
hprt0 |= HPRT0_PWR;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -3076,7 +3075,7 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
|
|
|
if (dbg_perio())
|
|
|
dev_vdbg(hsotg->dev, "Queue periodic transactions\n");
|
|
|
|
|
|
- tx_status = dwc2_readl(hsotg->regs + HPTXSTS);
|
|
|
+ tx_status = dwc2_readl(hsotg, HPTXSTS);
|
|
|
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
|
|
TXSTS_QSPCAVAIL_SHIFT;
|
|
|
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
|
|
@@ -3091,7 +3090,7 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
|
|
|
|
|
|
qh_ptr = hsotg->periodic_sched_assigned.next;
|
|
|
while (qh_ptr != &hsotg->periodic_sched_assigned) {
|
|
|
- tx_status = dwc2_readl(hsotg->regs + HPTXSTS);
|
|
|
+ tx_status = dwc2_readl(hsotg, HPTXSTS);
|
|
|
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
|
|
TXSTS_QSPCAVAIL_SHIFT;
|
|
|
if (qspcavail == 0) {
|
|
@@ -3161,10 +3160,10 @@ exit:
|
|
|
* level to ensure that new requests are loaded as
|
|
|
* soon as possible.)
|
|
|
*/
|
|
|
- gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ gintmsk = dwc2_readl(hsotg, GINTMSK);
|
|
|
if (!(gintmsk & GINTSTS_PTXFEMP)) {
|
|
|
gintmsk |= GINTSTS_PTXFEMP;
|
|
|
- dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, gintmsk, GINTMSK);
|
|
|
}
|
|
|
} else {
|
|
|
/*
|
|
@@ -3174,10 +3173,10 @@ exit:
|
|
|
* handlers to queue more transactions as transfer
|
|
|
* states change.
|
|
|
*/
|
|
|
- gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ gintmsk = dwc2_readl(hsotg, GINTMSK);
|
|
|
if (gintmsk & GINTSTS_PTXFEMP) {
|
|
|
gintmsk &= ~GINTSTS_PTXFEMP;
|
|
|
- dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, gintmsk, GINTMSK);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -3206,7 +3205,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
|
|
|
|
|
|
dev_vdbg(hsotg->dev, "Queue non-periodic transactions\n");
|
|
|
|
|
|
- tx_status = dwc2_readl(hsotg->regs + GNPTXSTS);
|
|
|
+ tx_status = dwc2_readl(hsotg, GNPTXSTS);
|
|
|
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
|
|
TXSTS_QSPCAVAIL_SHIFT;
|
|
|
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
|
|
@@ -3229,7 +3228,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
|
|
|
* available in the request queue or the Tx FIFO
|
|
|
*/
|
|
|
do {
|
|
|
- tx_status = dwc2_readl(hsotg->regs + GNPTXSTS);
|
|
|
+ tx_status = dwc2_readl(hsotg, GNPTXSTS);
|
|
|
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
|
|
TXSTS_QSPCAVAIL_SHIFT;
|
|
|
if (!hsotg->params.host_dma && qspcavail == 0) {
|
|
@@ -3266,7 +3265,7 @@ next:
|
|
|
} while (hsotg->non_periodic_qh_ptr != orig_qh_ptr);
|
|
|
|
|
|
if (!hsotg->params.host_dma) {
|
|
|
- tx_status = dwc2_readl(hsotg->regs + GNPTXSTS);
|
|
|
+ tx_status = dwc2_readl(hsotg, GNPTXSTS);
|
|
|
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
|
|
TXSTS_QSPCAVAIL_SHIFT;
|
|
|
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
|
|
@@ -3286,9 +3285,9 @@ next:
|
|
|
* level to ensure that new requests are loaded as
|
|
|
* soon as possible.)
|
|
|
*/
|
|
|
- gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ gintmsk = dwc2_readl(hsotg, GINTMSK);
|
|
|
gintmsk |= GINTSTS_NPTXFEMP;
|
|
|
- dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, gintmsk, GINTMSK);
|
|
|
} else {
|
|
|
/*
|
|
|
* Disable the Tx FIFO empty interrupt since there are
|
|
@@ -3297,9 +3296,9 @@ next:
|
|
|
* handlers to queue more transactions as transfer
|
|
|
* states change.
|
|
|
*/
|
|
|
- gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ gintmsk = dwc2_readl(hsotg, GINTMSK);
|
|
|
gintmsk &= ~GINTSTS_NPTXFEMP;
|
|
|
- dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, gintmsk, GINTMSK);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -3336,10 +3335,10 @@ void dwc2_hcd_queue_transactions(struct dwc2_hsotg *hsotg,
|
|
|
* Ensure NP Tx FIFO empty interrupt is disabled when
|
|
|
* there are no non-periodic transfers to process
|
|
|
*/
|
|
|
- u32 gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
|
|
+ u32 gintmsk = dwc2_readl(hsotg, GINTMSK);
|
|
|
|
|
|
gintmsk &= ~GINTSTS_NPTXFEMP;
|
|
|
- dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, gintmsk, GINTMSK);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -3354,7 +3353,7 @@ static void dwc2_conn_id_status_change(struct work_struct *work)
|
|
|
|
|
|
dev_dbg(hsotg->dev, "%s()\n", __func__);
|
|
|
|
|
|
- gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
|
|
+ gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
|
|
dev_dbg(hsotg->dev, "gotgctl=%0x\n", gotgctl);
|
|
|
dev_dbg(hsotg->dev, "gotgctl.b.conidsts=%d\n",
|
|
|
!!(gotgctl & GOTGCTL_CONID_B));
|
|
@@ -3380,7 +3379,7 @@ static void dwc2_conn_id_status_change(struct work_struct *work)
|
|
|
* check it again and jump to host mode if that was
|
|
|
* the case.
|
|
|
*/
|
|
|
- gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
|
|
+ gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
|
|
if (!(gotgctl & GOTGCTL_CONID_B))
|
|
|
goto host;
|
|
|
if (++count > 250)
|
|
@@ -3440,9 +3439,9 @@ static void dwc2_wakeup_detected(struct timer_list *t)
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
dev_dbg(hsotg->dev, "Resume: HPRT0=%0x\n", hprt0);
|
|
|
hprt0 &= ~HPRT0_RES;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
dev_dbg(hsotg->dev, "Clear Resume: HPRT0=%0x\n",
|
|
|
- dwc2_readl(hsotg->regs + HPRT0));
|
|
|
+ dwc2_readl(hsotg, HPRT0));
|
|
|
|
|
|
dwc2_hcd_rem_wakeup(hsotg);
|
|
|
hsotg->bus_suspended = false;
|
|
@@ -3471,15 +3470,15 @@ static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex)
|
|
|
spin_lock_irqsave(&hsotg->lock, flags);
|
|
|
|
|
|
if (windex == hsotg->otg_port && dwc2_host_is_b_hnp_enabled(hsotg)) {
|
|
|
- gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
|
|
+ gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
|
|
gotgctl |= GOTGCTL_HSTSETHNPEN;
|
|
|
- dwc2_writel(gotgctl, hsotg->regs + GOTGCTL);
|
|
|
+ dwc2_writel(hsotg, gotgctl, GOTGCTL);
|
|
|
hsotg->op_state = OTG_STATE_A_SUSPEND;
|
|
|
}
|
|
|
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
hprt0 |= HPRT0_SUSP;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
|
|
|
hsotg->bus_suspended = true;
|
|
|
|
|
@@ -3489,17 +3488,17 @@ static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex)
|
|
|
*/
|
|
|
if (!hsotg->params.power_down) {
|
|
|
/* Suspend the Phy Clock */
|
|
|
- pcgctl = dwc2_readl(hsotg->regs + PCGCTL);
|
|
|
+ pcgctl = dwc2_readl(hsotg, PCGCTL);
|
|
|
pcgctl |= PCGCTL_STOPPCLK;
|
|
|
- dwc2_writel(pcgctl, hsotg->regs + PCGCTL);
|
|
|
+ dwc2_writel(hsotg, pcgctl, PCGCTL);
|
|
|
udelay(10);
|
|
|
}
|
|
|
|
|
|
/* For HNP the bus must be suspended for at least 200ms */
|
|
|
if (dwc2_host_is_b_hnp_enabled(hsotg)) {
|
|
|
- pcgctl = dwc2_readl(hsotg->regs + PCGCTL);
|
|
|
+ pcgctl = dwc2_readl(hsotg, PCGCTL);
|
|
|
pcgctl &= ~PCGCTL_STOPPCLK;
|
|
|
- dwc2_writel(pcgctl, hsotg->regs + PCGCTL);
|
|
|
+ dwc2_writel(hsotg, pcgctl, PCGCTL);
|
|
|
|
|
|
spin_unlock_irqrestore(&hsotg->lock, flags);
|
|
|
|
|
@@ -3523,9 +3522,9 @@ static void dwc2_port_resume(struct dwc2_hsotg *hsotg)
|
|
|
* after registers restore.
|
|
|
*/
|
|
|
if (!hsotg->params.power_down) {
|
|
|
- pcgctl = dwc2_readl(hsotg->regs + PCGCTL);
|
|
|
+ pcgctl = dwc2_readl(hsotg, PCGCTL);
|
|
|
pcgctl &= ~PCGCTL_STOPPCLK;
|
|
|
- dwc2_writel(pcgctl, hsotg->regs + PCGCTL);
|
|
|
+ dwc2_writel(hsotg, pcgctl, PCGCTL);
|
|
|
spin_unlock_irqrestore(&hsotg->lock, flags);
|
|
|
msleep(20);
|
|
|
spin_lock_irqsave(&hsotg->lock, flags);
|
|
@@ -3534,7 +3533,7 @@ static void dwc2_port_resume(struct dwc2_hsotg *hsotg)
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
hprt0 |= HPRT0_RES;
|
|
|
hprt0 &= ~HPRT0_SUSP;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
spin_unlock_irqrestore(&hsotg->lock, flags);
|
|
|
|
|
|
msleep(USB_RESUME_TIMEOUT);
|
|
@@ -3542,7 +3541,7 @@ static void dwc2_port_resume(struct dwc2_hsotg *hsotg)
|
|
|
spin_lock_irqsave(&hsotg->lock, flags);
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
hprt0 &= ~(HPRT0_RES | HPRT0_SUSP);
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
hsotg->bus_suspended = false;
|
|
|
spin_unlock_irqrestore(&hsotg->lock, flags);
|
|
|
}
|
|
@@ -3586,7 +3585,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
|
|
"ClearPortFeature USB_PORT_FEAT_ENABLE\n");
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
hprt0 |= HPRT0_ENA;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
break;
|
|
|
|
|
|
case USB_PORT_FEAT_SUSPEND:
|
|
@@ -3606,7 +3605,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
|
|
"ClearPortFeature USB_PORT_FEAT_POWER\n");
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
hprt0 &= ~HPRT0_PWR;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
break;
|
|
|
|
|
|
case USB_PORT_FEAT_INDICATOR:
|
|
@@ -3727,7 +3726,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
|
|
+ hprt0 = dwc2_readl(hsotg, HPRT0);
|
|
|
dev_vdbg(hsotg->dev, " HPRT0: 0x%08x\n", hprt0);
|
|
|
|
|
|
if (hprt0 & HPRT0_CONNSTS)
|
|
@@ -3768,9 +3767,9 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
|
|
|
|
|
dev_info(hsotg->dev, "Enabling descriptor DMA mode\n");
|
|
|
hsotg->params.dma_desc_enable = true;
|
|
|
- hcfg = dwc2_readl(hsotg->regs + HCFG);
|
|
|
+ hcfg = dwc2_readl(hsotg, HCFG);
|
|
|
hcfg |= HCFG_DESCDMA;
|
|
|
- dwc2_writel(hcfg, hsotg->regs + HCFG);
|
|
|
+ dwc2_writel(hsotg, hcfg, HCFG);
|
|
|
hsotg->new_connection = false;
|
|
|
}
|
|
|
}
|
|
@@ -3817,7 +3816,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
|
|
"SetPortFeature - USB_PORT_FEAT_POWER\n");
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
hprt0 |= HPRT0_PWR;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
break;
|
|
|
|
|
|
case USB_PORT_FEAT_RESET:
|
|
@@ -3827,11 +3826,11 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
dev_dbg(hsotg->dev,
|
|
|
"SetPortFeature - USB_PORT_FEAT_RESET\n");
|
|
|
- pcgctl = dwc2_readl(hsotg->regs + PCGCTL);
|
|
|
+ pcgctl = dwc2_readl(hsotg, PCGCTL);
|
|
|
pcgctl &= ~(PCGCTL_ENBL_SLEEP_GATING | PCGCTL_STOPPCLK);
|
|
|
- dwc2_writel(pcgctl, hsotg->regs + PCGCTL);
|
|
|
+ dwc2_writel(hsotg, pcgctl, PCGCTL);
|
|
|
/* ??? Original driver does this */
|
|
|
- dwc2_writel(0, hsotg->regs + PCGCTL);
|
|
|
+ dwc2_writel(hsotg, 0, PCGCTL);
|
|
|
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
/* Clear suspend bit if resetting from suspend state */
|
|
@@ -3846,13 +3845,13 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
|
|
hprt0 |= HPRT0_PWR | HPRT0_RST;
|
|
|
dev_dbg(hsotg->dev,
|
|
|
"In host mode, hprt0=%08x\n", hprt0);
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
}
|
|
|
|
|
|
/* Clear reset bit in 10ms (FS/LS) or 50ms (HS) */
|
|
|
msleep(50);
|
|
|
hprt0 &= ~HPRT0_RST;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
hsotg->lx_state = DWC2_L0; /* Now back to On state */
|
|
|
break;
|
|
|
|
|
@@ -3868,7 +3867,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
|
|
"SetPortFeature - USB_PORT_FEAT_TEST\n");
|
|
|
hprt0 &= ~HPRT0_TSTCTL_MASK;
|
|
|
hprt0 |= (windex >> 8) << HPRT0_TSTCTL_SHIFT;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
break;
|
|
|
|
|
|
default:
|
|
@@ -3925,7 +3924,7 @@ static int dwc2_hcd_is_status_changed(struct dwc2_hsotg *hsotg, int port)
|
|
|
|
|
|
int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg)
|
|
|
{
|
|
|
- u32 hfnum = dwc2_readl(hsotg->regs + HFNUM);
|
|
|
+ u32 hfnum = dwc2_readl(hsotg, HFNUM);
|
|
|
|
|
|
#ifdef DWC2_DEBUG_SOF
|
|
|
dev_vdbg(hsotg->dev, "DWC OTG HCD GET FRAME NUMBER %d\n",
|
|
@@ -3936,9 +3935,9 @@ int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg)
|
|
|
|
|
|
int dwc2_hcd_get_future_frame_number(struct dwc2_hsotg *hsotg, int us)
|
|
|
{
|
|
|
- u32 hprt = dwc2_readl(hsotg->regs + HPRT0);
|
|
|
- u32 hfir = dwc2_readl(hsotg->regs + HFIR);
|
|
|
- u32 hfnum = dwc2_readl(hsotg->regs + HFNUM);
|
|
|
+ u32 hprt = dwc2_readl(hsotg, HPRT0);
|
|
|
+ u32 hfir = dwc2_readl(hsotg, HFIR);
|
|
|
+ u32 hfnum = dwc2_readl(hsotg, HFNUM);
|
|
|
unsigned int us_per_frame;
|
|
|
unsigned int frame_number;
|
|
|
unsigned int remaining;
|
|
@@ -4057,11 +4056,11 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
|
|
|
if (chan->xfer_started) {
|
|
|
u32 hfnum, hcchar, hctsiz, hcint, hcintmsk;
|
|
|
|
|
|
- hfnum = dwc2_readl(hsotg->regs + HFNUM);
|
|
|
- hcchar = dwc2_readl(hsotg->regs + HCCHAR(i));
|
|
|
- hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(i));
|
|
|
- hcint = dwc2_readl(hsotg->regs + HCINT(i));
|
|
|
- hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(i));
|
|
|
+ hfnum = dwc2_readl(hsotg, HFNUM);
|
|
|
+ hcchar = dwc2_readl(hsotg, HCCHAR(i));
|
|
|
+ hctsiz = dwc2_readl(hsotg, HCTSIZ(i));
|
|
|
+ hcint = dwc2_readl(hsotg, HCINT(i));
|
|
|
+ hcintmsk = dwc2_readl(hsotg, HCINTMSK(i));
|
|
|
dev_dbg(hsotg->dev, " hfnum: 0x%08x\n", hfnum);
|
|
|
dev_dbg(hsotg->dev, " hcchar: 0x%08x\n", hcchar);
|
|
|
dev_dbg(hsotg->dev, " hctsiz: 0x%08x\n", hctsiz);
|
|
@@ -4109,12 +4108,12 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
|
|
|
dev_dbg(hsotg->dev, " periodic_channels: %d\n",
|
|
|
hsotg->periodic_channels);
|
|
|
dev_dbg(hsotg->dev, " periodic_usecs: %d\n", hsotg->periodic_usecs);
|
|
|
- np_tx_status = dwc2_readl(hsotg->regs + GNPTXSTS);
|
|
|
+ np_tx_status = dwc2_readl(hsotg, GNPTXSTS);
|
|
|
dev_dbg(hsotg->dev, " NP Tx Req Queue Space Avail: %d\n",
|
|
|
(np_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
|
|
|
dev_dbg(hsotg->dev, " NP Tx FIFO Space Avail: %d\n",
|
|
|
(np_tx_status & TXSTS_FSPCAVAIL_MASK) >> TXSTS_FSPCAVAIL_SHIFT);
|
|
|
- p_tx_status = dwc2_readl(hsotg->regs + HPTXSTS);
|
|
|
+ p_tx_status = dwc2_readl(hsotg, HPTXSTS);
|
|
|
dev_dbg(hsotg->dev, " P Tx Req Queue Space Avail: %d\n",
|
|
|
(p_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
|
|
|
dev_dbg(hsotg->dev, " P Tx FIFO Space Avail: %d\n",
|
|
@@ -4364,7 +4363,7 @@ static void dwc2_hcd_reset_func(struct work_struct *work)
|
|
|
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
hprt0 &= ~HPRT0_RST;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
hsotg->flags.b.port_reset_change = 1;
|
|
|
|
|
|
spin_unlock_irqrestore(&hsotg->lock, flags);
|
|
@@ -4474,7 +4473,7 @@ static int _dwc2_hcd_suspend(struct usb_hcd *hcd)
|
|
|
hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
hprt0 |= HPRT0_SUSP;
|
|
|
hprt0 &= ~HPRT0_PWR;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
dwc2_vbus_supply_exit(hsotg);
|
|
|
}
|
|
|
|
|
@@ -4565,8 +4564,8 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd)
|
|
|
* Clear Port Enable and Port Status changes.
|
|
|
* Enable Port Power.
|
|
|
*/
|
|
|
- dwc2_writel(HPRT0_PWR | HPRT0_CONNDET |
|
|
|
- HPRT0_ENACHG, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, HPRT0_PWR | HPRT0_CONNDET |
|
|
|
+ HPRT0_ENACHG, HPRT0);
|
|
|
/* Wait for controller to detect Port Connect */
|
|
|
usleep_range(5000, 7000);
|
|
|
}
|
|
@@ -5086,17 +5085,17 @@ static void dwc2_hcd_free(struct dwc2_hsotg *hsotg)
|
|
|
hsotg->status_buf = NULL;
|
|
|
}
|
|
|
|
|
|
- ahbcfg = dwc2_readl(hsotg->regs + GAHBCFG);
|
|
|
+ ahbcfg = dwc2_readl(hsotg, GAHBCFG);
|
|
|
|
|
|
/* Disable all interrupts */
|
|
|
ahbcfg &= ~GAHBCFG_GLBL_INTR_EN;
|
|
|
- dwc2_writel(ahbcfg, hsotg->regs + GAHBCFG);
|
|
|
- dwc2_writel(0, hsotg->regs + GINTMSK);
|
|
|
+ dwc2_writel(hsotg, ahbcfg, GAHBCFG);
|
|
|
+ dwc2_writel(hsotg, 0, GINTMSK);
|
|
|
|
|
|
if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a) {
|
|
|
- dctl = dwc2_readl(hsotg->regs + DCTL);
|
|
|
+ dctl = dwc2_readl(hsotg, DCTL);
|
|
|
dctl |= DCTL_SFTDISCON;
|
|
|
- dwc2_writel(dctl, hsotg->regs + DCTL);
|
|
|
+ dwc2_writel(hsotg, dctl, DCTL);
|
|
|
}
|
|
|
|
|
|
if (hsotg->wq_otg) {
|
|
@@ -5139,7 +5138,7 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg)
|
|
|
|
|
|
retval = -ENOMEM;
|
|
|
|
|
|
- hcfg = dwc2_readl(hsotg->regs + HCFG);
|
|
|
+ hcfg = dwc2_readl(hsotg, HCFG);
|
|
|
dev_dbg(hsotg->dev, "hcfg=%08x\n", hcfg);
|
|
|
|
|
|
#ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
|
|
@@ -5429,14 +5428,14 @@ int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg)
|
|
|
|
|
|
/* Backup Host regs */
|
|
|
hr = &hsotg->hr_backup;
|
|
|
- hr->hcfg = dwc2_readl(hsotg->regs + HCFG);
|
|
|
- hr->haintmsk = dwc2_readl(hsotg->regs + HAINTMSK);
|
|
|
+ hr->hcfg = dwc2_readl(hsotg, HCFG);
|
|
|
+ hr->haintmsk = dwc2_readl(hsotg, HAINTMSK);
|
|
|
for (i = 0; i < hsotg->params.host_channels; ++i)
|
|
|
- hr->hcintmsk[i] = dwc2_readl(hsotg->regs + HCINTMSK(i));
|
|
|
+ hr->hcintmsk[i] = dwc2_readl(hsotg, HCINTMSK(i));
|
|
|
|
|
|
hr->hprt0 = dwc2_read_hprt0(hsotg);
|
|
|
- hr->hfir = dwc2_readl(hsotg->regs + HFIR);
|
|
|
- hr->hptxfsiz = dwc2_readl(hsotg->regs + HPTXFSIZ);
|
|
|
+ hr->hfir = dwc2_readl(hsotg, HFIR);
|
|
|
+ hr->hptxfsiz = dwc2_readl(hsotg, HPTXFSIZ);
|
|
|
hr->valid = true;
|
|
|
|
|
|
return 0;
|
|
@@ -5465,15 +5464,15 @@ int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg)
|
|
|
}
|
|
|
hr->valid = false;
|
|
|
|
|
|
- dwc2_writel(hr->hcfg, hsotg->regs + HCFG);
|
|
|
- dwc2_writel(hr->haintmsk, hsotg->regs + HAINTMSK);
|
|
|
+ dwc2_writel(hsotg, hr->hcfg, HCFG);
|
|
|
+ dwc2_writel(hsotg, hr->haintmsk, HAINTMSK);
|
|
|
|
|
|
for (i = 0; i < hsotg->params.host_channels; ++i)
|
|
|
- dwc2_writel(hr->hcintmsk[i], hsotg->regs + HCINTMSK(i));
|
|
|
+ dwc2_writel(hsotg, hr->hcintmsk[i], HCINTMSK(i));
|
|
|
|
|
|
- dwc2_writel(hr->hprt0, hsotg->regs + HPRT0);
|
|
|
- dwc2_writel(hr->hfir, hsotg->regs + HFIR);
|
|
|
- dwc2_writel(hr->hptxfsiz, hsotg->regs + HPTXFSIZ);
|
|
|
+ dwc2_writel(hsotg, hr->hprt0, HPRT0);
|
|
|
+ dwc2_writel(hsotg, hr->hfir, HFIR);
|
|
|
+ dwc2_writel(hsotg, hr->hptxfsiz, HPTXFSIZ);
|
|
|
hsotg->frame_number = 0;
|
|
|
|
|
|
return 0;
|
|
@@ -5508,10 +5507,10 @@ int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg)
|
|
|
}
|
|
|
|
|
|
/* Enter USB Suspend Mode */
|
|
|
- hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
|
|
+ hprt0 = dwc2_readl(hsotg, HPRT0);
|
|
|
hprt0 |= HPRT0_SUSP;
|
|
|
hprt0 &= ~HPRT0_ENA;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
|
|
|
/* Wait for the HPRT0.PrtSusp register field to be set */
|
|
|
if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 3000))
|
|
@@ -5524,56 +5523,56 @@ int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg)
|
|
|
spin_lock_irqsave(&hsotg->lock, flags);
|
|
|
hsotg->lx_state = DWC2_L2;
|
|
|
|
|
|
- gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
+ gusbcfg = dwc2_readl(hsotg, GUSBCFG);
|
|
|
if (gusbcfg & GUSBCFG_ULPI_UTMI_SEL) {
|
|
|
/* ULPI interface */
|
|
|
/* Suspend the Phy Clock */
|
|
|
- pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
|
|
|
+ pcgcctl = dwc2_readl(hsotg, PCGCTL);
|
|
|
pcgcctl |= PCGCTL_STOPPCLK;
|
|
|
- dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
|
|
+ dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
|
|
udelay(10);
|
|
|
|
|
|
- gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
|
|
+ gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
|
|
gpwrdn |= GPWRDN_PMUACTV;
|
|
|
- dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
|
|
+ dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
|
|
udelay(10);
|
|
|
} else {
|
|
|
/* UTMI+ Interface */
|
|
|
- gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
|
|
+ gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
|
|
gpwrdn |= GPWRDN_PMUACTV;
|
|
|
- dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
|
|
+ dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
|
|
udelay(10);
|
|
|
|
|
|
- pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
|
|
|
+ pcgcctl = dwc2_readl(hsotg, PCGCTL);
|
|
|
pcgcctl |= PCGCTL_STOPPCLK;
|
|
|
- dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
|
|
+ dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
|
|
udelay(10);
|
|
|
}
|
|
|
|
|
|
/* Enable interrupts from wake up logic */
|
|
|
- gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
|
|
+ gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
|
|
gpwrdn |= GPWRDN_PMUINTSEL;
|
|
|
- dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
|
|
+ dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
|
|
udelay(10);
|
|
|
|
|
|
/* Unmask host mode interrupts in GPWRDN */
|
|
|
- gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
|
|
+ gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
|
|
gpwrdn |= GPWRDN_DISCONN_DET_MSK;
|
|
|
gpwrdn |= GPWRDN_LNSTSCHG_MSK;
|
|
|
gpwrdn |= GPWRDN_STS_CHGINT_MSK;
|
|
|
- dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
|
|
+ dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
|
|
udelay(10);
|
|
|
|
|
|
/* Enable Power Down Clamp */
|
|
|
- gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
|
|
+ gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
|
|
gpwrdn |= GPWRDN_PWRDNCLMP;
|
|
|
- dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
|
|
+ dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
|
|
udelay(10);
|
|
|
|
|
|
/* Switch off VDD */
|
|
|
- gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
|
|
+ gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
|
|
gpwrdn |= GPWRDN_PWRDNSWTCH;
|
|
|
- dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
|
|
+ dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
|
|
|
|
|
hsotg->hibernated = 1;
|
|
|
hsotg->bus_suspended = 1;
|
|
@@ -5621,29 +5620,29 @@ int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup,
|
|
|
mdelay(100);
|
|
|
|
|
|
/* Clear all pending interupts */
|
|
|
- dwc2_writel(0xffffffff, hsotg->regs + GINTSTS);
|
|
|
+ dwc2_writel(hsotg, 0xffffffff, GINTSTS);
|
|
|
|
|
|
/* De-assert Restore */
|
|
|
- gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
|
|
+ gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
|
|
gpwrdn &= ~GPWRDN_RESTORE;
|
|
|
- dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
|
|
+ dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
|
|
udelay(10);
|
|
|
|
|
|
/* Restore GUSBCFG, HCFG */
|
|
|
- dwc2_writel(gr->gusbcfg, hsotg->regs + GUSBCFG);
|
|
|
- dwc2_writel(hr->hcfg, hsotg->regs + HCFG);
|
|
|
+ dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG);
|
|
|
+ dwc2_writel(hsotg, hr->hcfg, HCFG);
|
|
|
|
|
|
/* De-assert Wakeup Logic */
|
|
|
- gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
|
|
+ gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
|
|
gpwrdn &= ~GPWRDN_PMUACTV;
|
|
|
- dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
|
|
+ dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
|
|
udelay(10);
|
|
|
|
|
|
hprt0 = hr->hprt0;
|
|
|
hprt0 |= HPRT0_PWR;
|
|
|
hprt0 &= ~HPRT0_ENA;
|
|
|
hprt0 &= ~HPRT0_SUSP;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
|
|
|
hprt0 = hr->hprt0;
|
|
|
hprt0 |= HPRT0_PWR;
|
|
@@ -5652,32 +5651,32 @@ int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup,
|
|
|
|
|
|
if (reset) {
|
|
|
hprt0 |= HPRT0_RST;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
|
|
|
/* Wait for Resume time and then program HPRT again */
|
|
|
mdelay(60);
|
|
|
hprt0 &= ~HPRT0_RST;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
} else {
|
|
|
hprt0 |= HPRT0_RES;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
|
|
|
/* Wait for Resume time and then program HPRT again */
|
|
|
mdelay(100);
|
|
|
hprt0 &= ~HPRT0_RES;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
}
|
|
|
/* Clear all interrupt status */
|
|
|
- hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
|
|
+ hprt0 = dwc2_readl(hsotg, HPRT0);
|
|
|
hprt0 |= HPRT0_CONNDET;
|
|
|
hprt0 |= HPRT0_ENACHG;
|
|
|
hprt0 &= ~HPRT0_ENA;
|
|
|
- dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
|
|
+ dwc2_writel(hsotg, hprt0, HPRT0);
|
|
|
|
|
|
- hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
|
|
+ hprt0 = dwc2_readl(hsotg, HPRT0);
|
|
|
|
|
|
/* Clear all pending interupts */
|
|
|
- dwc2_writel(0xffffffff, hsotg->regs + GINTSTS);
|
|
|
+ dwc2_writel(hsotg, 0xffffffff, GINTSTS);
|
|
|
|
|
|
/* Restore global registers */
|
|
|
ret = dwc2_restore_global_registers(hsotg);
|