usb: dwc2: Modify dwc2_readl/writel functions prototype
Added hsotg argument to dwc2_readl/writel function prototype, and also instead of address pass offset of register. hsotg will contain flag field for endianness. Also customized dwc2_set_bit and dwc2_clear_bit function for dwc2_readl/writel functions. Signed-off-by: Gevorg Sahakyan <sahakyan@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
Родитель
c31d983bea
Коммит
f25c42b8d6
|
@ -73,17 +73,17 @@ int dwc2_backup_global_registers(struct dwc2_hsotg *hsotg)
|
|||
/* Backup global regs */
|
||||
gr = &hsotg->gr_backup;
|
||||
|
||||
gr->gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gr->gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gr->gahbcfg = dwc2_readl(hsotg->regs + GAHBCFG);
|
||||
gr->gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
||||
gr->grxfsiz = dwc2_readl(hsotg->regs + GRXFSIZ);
|
||||
gr->gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ);
|
||||
gr->gdfifocfg = dwc2_readl(hsotg->regs + GDFIFOCFG);
|
||||
gr->pcgcctl1 = dwc2_readl(hsotg->regs + PCGCCTL1);
|
||||
gr->glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG);
|
||||
gr->gi2cctl = dwc2_readl(hsotg->regs + GI2CCTL);
|
||||
gr->pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
gr->gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
gr->gintmsk = dwc2_readl(hsotg, GINTMSK);
|
||||
gr->gahbcfg = dwc2_readl(hsotg, GAHBCFG);
|
||||
gr->gusbcfg = dwc2_readl(hsotg, GUSBCFG);
|
||||
gr->grxfsiz = dwc2_readl(hsotg, GRXFSIZ);
|
||||
gr->gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ);
|
||||
gr->gdfifocfg = dwc2_readl(hsotg, GDFIFOCFG);
|
||||
gr->pcgcctl1 = dwc2_readl(hsotg, PCGCCTL1);
|
||||
gr->glpmcfg = dwc2_readl(hsotg, GLPMCFG);
|
||||
gr->gi2cctl = dwc2_readl(hsotg, GI2CCTL);
|
||||
gr->pcgcctl = dwc2_readl(hsotg, PCGCTL);
|
||||
|
||||
gr->valid = true;
|
||||
return 0;
|
||||
|
@ -111,18 +111,18 @@ int dwc2_restore_global_registers(struct dwc2_hsotg *hsotg)
|
|||
}
|
||||
gr->valid = false;
|
||||
|
||||
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(gr->gotgctl, hsotg->regs + GOTGCTL);
|
||||
dwc2_writel(gr->gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gr->gusbcfg, hsotg->regs + GUSBCFG);
|
||||
dwc2_writel(gr->gahbcfg, hsotg->regs + GAHBCFG);
|
||||
dwc2_writel(gr->grxfsiz, hsotg->regs + GRXFSIZ);
|
||||
dwc2_writel(gr->gnptxfsiz, hsotg->regs + GNPTXFSIZ);
|
||||
dwc2_writel(gr->gdfifocfg, hsotg->regs + GDFIFOCFG);
|
||||
dwc2_writel(gr->pcgcctl1, hsotg->regs + PCGCCTL1);
|
||||
dwc2_writel(gr->glpmcfg, hsotg->regs + GLPMCFG);
|
||||
dwc2_writel(gr->pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(gr->gi2cctl, hsotg->regs + GI2CCTL);
|
||||
dwc2_writel(hsotg, 0xffffffff, GINTSTS);
|
||||
dwc2_writel(hsotg, gr->gotgctl, GOTGCTL);
|
||||
dwc2_writel(hsotg, gr->gintmsk, GINTMSK);
|
||||
dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG);
|
||||
dwc2_writel(hsotg, gr->gahbcfg, GAHBCFG);
|
||||
dwc2_writel(hsotg, gr->grxfsiz, GRXFSIZ);
|
||||
dwc2_writel(hsotg, gr->gnptxfsiz, GNPTXFSIZ);
|
||||
dwc2_writel(hsotg, gr->gdfifocfg, GDFIFOCFG);
|
||||
dwc2_writel(hsotg, gr->pcgcctl1, PCGCCTL1);
|
||||
dwc2_writel(hsotg, gr->glpmcfg, GLPMCFG);
|
||||
dwc2_writel(hsotg, gr->pcgcctl, PCGCTL);
|
||||
dwc2_writel(hsotg, gr->gi2cctl, GI2CCTL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -141,17 +141,17 @@ int dwc2_exit_partial_power_down(struct dwc2_hsotg *hsotg, bool restore)
|
|||
if (hsotg->params.power_down != DWC2_POWER_DOWN_PARAM_PARTIAL)
|
||||
return -ENOTSUPP;
|
||||
|
||||
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);
|
||||
|
||||
pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
pcgcctl = dwc2_readl(hsotg, PCGCTL);
|
||||
pcgcctl &= ~PCGCTL_PWRCLMP;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
|
||||
pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
pcgcctl = dwc2_readl(hsotg, PCGCTL);
|
||||
pcgcctl &= ~PCGCTL_RSTPDWNMODULE;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
|
||||
udelay(100);
|
||||
if (restore) {
|
||||
|
@ -222,21 +222,21 @@ int dwc2_enter_partial_power_down(struct dwc2_hsotg *hsotg)
|
|||
* Clear any pending interrupts since dwc2 will not be able to
|
||||
* clear them after entering partial_power_down.
|
||||
*/
|
||||
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, 0xffffffff, GINTSTS);
|
||||
|
||||
/* Put the controller in low power state */
|
||||
pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
pcgcctl = dwc2_readl(hsotg, PCGCTL);
|
||||
|
||||
pcgcctl |= PCGCTL_PWRCLMP;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
ndelay(20);
|
||||
|
||||
pcgcctl |= PCGCTL_RSTPDWNMODULE;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
ndelay(20);
|
||||
|
||||
pcgcctl |= PCGCTL_STOPPCLK;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -272,39 +272,39 @@ static void dwc2_restore_essential_regs(struct dwc2_hsotg *hsotg, int rmode,
|
|||
if (!(pcgcctl & PCGCTL_P2HD_DEV_ENUM_SPD_MASK))
|
||||
pcgcctl |= BIT(17);
|
||||
}
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
|
||||
/* Umnask global Interrupt in GAHBCFG and restore it */
|
||||
dwc2_writel(gr->gahbcfg | GAHBCFG_GLBL_INTR_EN, hsotg->regs + GAHBCFG);
|
||||
dwc2_writel(hsotg, gr->gahbcfg | GAHBCFG_GLBL_INTR_EN, GAHBCFG);
|
||||
|
||||
/* Clear all pending interupts */
|
||||
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, 0xffffffff, GINTSTS);
|
||||
|
||||
/* Unmask restore done interrupt */
|
||||
dwc2_writel(GINTSTS_RESTOREDONE, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(hsotg, GINTSTS_RESTOREDONE, GINTMSK);
|
||||
|
||||
/* Restore GUSBCFG and HCFG/DCFG */
|
||||
dwc2_writel(gr->gusbcfg, hsotg->regs + GUSBCFG);
|
||||
dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG);
|
||||
|
||||
if (is_host) {
|
||||
dwc2_writel(hr->hcfg, hsotg->regs + HCFG);
|
||||
dwc2_writel(hsotg, hr->hcfg, HCFG);
|
||||
if (rmode)
|
||||
pcgcctl |= PCGCTL_RESTOREMODE;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
udelay(10);
|
||||
|
||||
pcgcctl |= PCGCTL_ESS_REG_RESTORED;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
udelay(10);
|
||||
} else {
|
||||
dwc2_writel(dr->dcfg, hsotg->regs + DCFG);
|
||||
dwc2_writel(hsotg, dr->dcfg, DCFG);
|
||||
if (!rmode)
|
||||
pcgcctl |= PCGCTL_RESTOREMODE | PCGCTL_RSTPDWNMODULE;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
udelay(10);
|
||||
|
||||
pcgcctl |= PCGCTL_ESS_REG_RESTORED;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
udelay(10);
|
||||
}
|
||||
}
|
||||
|
@ -322,42 +322,42 @@ void dwc2_hib_restore_common(struct dwc2_hsotg *hsotg, int rem_wakeup,
|
|||
u32 gpwrdn;
|
||||
|
||||
/* Switch-on voltage to the core */
|
||||
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);
|
||||
udelay(10);
|
||||
|
||||
/* Reset core */
|
||||
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
||||
gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
||||
gpwrdn &= ~GPWRDN_PWRDNRSTN;
|
||||
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
||||
dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
||||
udelay(10);
|
||||
|
||||
/* Enable restore from PMU */
|
||||
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);
|
||||
|
||||
/* Disable 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(50);
|
||||
|
||||
if (!is_host && rem_wakeup)
|
||||
udelay(70);
|
||||
|
||||
/* Deassert reset core */
|
||||
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
||||
gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
||||
gpwrdn |= GPWRDN_PWRDNRSTN;
|
||||
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
||||
dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
||||
udelay(10);
|
||||
|
||||
/* Disable PMU interrupt */
|
||||
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);
|
||||
|
||||
/* Set Restore Essential Regs bit in PCGCCTL register */
|
||||
|
@ -431,7 +431,7 @@ static bool dwc2_iddig_filter_enabled(struct dwc2_hsotg *hsotg)
|
|||
return false;
|
||||
|
||||
/* Check if core configuration includes the IDDIG filter. */
|
||||
ghwcfg4 = dwc2_readl(hsotg->regs + GHWCFG4);
|
||||
ghwcfg4 = dwc2_readl(hsotg, GHWCFG4);
|
||||
if (!(ghwcfg4 & GHWCFG4_IDDIG_FILT_EN))
|
||||
return false;
|
||||
|
||||
|
@ -439,9 +439,9 @@ static bool dwc2_iddig_filter_enabled(struct dwc2_hsotg *hsotg)
|
|||
* Check if the IDDIG debounce filter is bypassed. Available
|
||||
* in core version >= 3.10a.
|
||||
*/
|
||||
gsnpsid = dwc2_readl(hsotg->regs + GSNPSID);
|
||||
gsnpsid = dwc2_readl(hsotg, GSNPSID);
|
||||
if (gsnpsid >= DWC2_CORE_REV_3_10a) {
|
||||
u32 gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
u32 gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
|
||||
if (gotgctl & GOTGCTL_DBNCE_FLTR_BYPASS)
|
||||
return false;
|
||||
|
@ -510,8 +510,8 @@ int dwc2_core_reset(struct dwc2_hsotg *hsotg, bool skip_wait)
|
|||
* reset and account for this delay after the reset.
|
||||
*/
|
||||
if (dwc2_iddig_filter_enabled(hsotg)) {
|
||||
u32 gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
u32 gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
||||
u32 gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
u32 gusbcfg = dwc2_readl(hsotg, GUSBCFG);
|
||||
|
||||
if (!(gotgctl & GOTGCTL_CONID_B) ||
|
||||
(gusbcfg & GUSBCFG_FORCEHOSTMODE)) {
|
||||
|
@ -520,9 +520,9 @@ int dwc2_core_reset(struct dwc2_hsotg *hsotg, bool skip_wait)
|
|||
}
|
||||
|
||||
/* Core Soft Reset */
|
||||
greset = dwc2_readl(hsotg->regs + GRSTCTL);
|
||||
greset = dwc2_readl(hsotg, GRSTCTL);
|
||||
greset |= GRSTCTL_CSFTRST;
|
||||
dwc2_writel(greset, hsotg->regs + GRSTCTL);
|
||||
dwc2_writel(hsotg, greset, GRSTCTL);
|
||||
|
||||
if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_CSFTRST, 50)) {
|
||||
dev_warn(hsotg->dev, "%s: HANG! Soft Reset timeout GRSTCTL GRSTCTL_CSFTRST\n",
|
||||
|
@ -594,14 +594,14 @@ void dwc2_force_mode(struct dwc2_hsotg *hsotg, bool host)
|
|||
if (WARN_ON(!host && hsotg->dr_mode == USB_DR_MODE_HOST))
|
||||
return;
|
||||
|
||||
gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
||||
gusbcfg = dwc2_readl(hsotg, GUSBCFG);
|
||||
|
||||
set = host ? GUSBCFG_FORCEHOSTMODE : GUSBCFG_FORCEDEVMODE;
|
||||
clear = host ? GUSBCFG_FORCEDEVMODE : GUSBCFG_FORCEHOSTMODE;
|
||||
|
||||
gusbcfg &= ~clear;
|
||||
gusbcfg |= set;
|
||||
dwc2_writel(gusbcfg, hsotg->regs + GUSBCFG);
|
||||
dwc2_writel(hsotg, gusbcfg, GUSBCFG);
|
||||
|
||||
dwc2_wait_for_mode(hsotg, host);
|
||||
return;
|
||||
|
@ -627,10 +627,10 @@ static void dwc2_clear_force_mode(struct dwc2_hsotg *hsotg)
|
|||
|
||||
dev_dbg(hsotg->dev, "Clearing force mode bits\n");
|
||||
|
||||
gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
||||
gusbcfg = dwc2_readl(hsotg, GUSBCFG);
|
||||
gusbcfg &= ~GUSBCFG_FORCEHOSTMODE;
|
||||
gusbcfg &= ~GUSBCFG_FORCEDEVMODE;
|
||||
dwc2_writel(gusbcfg, hsotg->regs + GUSBCFG);
|
||||
dwc2_writel(hsotg, gusbcfg, GUSBCFG);
|
||||
|
||||
if (dwc2_iddig_filter_enabled(hsotg))
|
||||
msleep(100);
|
||||
|
@ -670,11 +670,11 @@ void dwc2_force_dr_mode(struct dwc2_hsotg *hsotg)
|
|||
void dwc2_enable_acg(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
if (hsotg->params.acg_enable) {
|
||||
u32 pcgcctl1 = dwc2_readl(hsotg->regs + PCGCCTL1);
|
||||
u32 pcgcctl1 = dwc2_readl(hsotg, PCGCCTL1);
|
||||
|
||||
dev_dbg(hsotg->dev, "Enabling Active Clock Gating\n");
|
||||
pcgcctl1 |= PCGCCTL1_GATEEN;
|
||||
dwc2_writel(pcgcctl1, hsotg->regs + PCGCCTL1);
|
||||
dwc2_writel(hsotg, pcgcctl1, PCGCCTL1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -695,56 +695,57 @@ void dwc2_dump_host_registers(struct dwc2_hsotg *hsotg)
|
|||
dev_dbg(hsotg->dev, "Host Global Registers\n");
|
||||
addr = hsotg->regs + HCFG;
|
||||
dev_dbg(hsotg->dev, "HCFG @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HCFG));
|
||||
addr = hsotg->regs + HFIR;
|
||||
dev_dbg(hsotg->dev, "HFIR @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HFIR));
|
||||
addr = hsotg->regs + HFNUM;
|
||||
dev_dbg(hsotg->dev, "HFNUM @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HFNUM));
|
||||
addr = hsotg->regs + HPTXSTS;
|
||||
dev_dbg(hsotg->dev, "HPTXSTS @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HPTXSTS));
|
||||
addr = hsotg->regs + HAINT;
|
||||
dev_dbg(hsotg->dev, "HAINT @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HAINT));
|
||||
addr = hsotg->regs + HAINTMSK;
|
||||
dev_dbg(hsotg->dev, "HAINTMSK @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HAINTMSK));
|
||||
if (hsotg->params.dma_desc_enable) {
|
||||
addr = hsotg->regs + HFLBADDR;
|
||||
dev_dbg(hsotg->dev, "HFLBADDR @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HFLBADDR));
|
||||
}
|
||||
|
||||
addr = hsotg->regs + HPRT0;
|
||||
dev_dbg(hsotg->dev, "HPRT0 @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HPRT0));
|
||||
|
||||
for (i = 0; i < hsotg->params.host_channels; i++) {
|
||||
dev_dbg(hsotg->dev, "Host Channel %d Specific Registers\n", i);
|
||||
addr = hsotg->regs + HCCHAR(i);
|
||||
dev_dbg(hsotg->dev, "HCCHAR @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HCCHAR(i)));
|
||||
addr = hsotg->regs + HCSPLT(i);
|
||||
dev_dbg(hsotg->dev, "HCSPLT @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HCSPLT(i)));
|
||||
addr = hsotg->regs + HCINT(i);
|
||||
dev_dbg(hsotg->dev, "HCINT @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HCINT(i)));
|
||||
addr = hsotg->regs + HCINTMSK(i);
|
||||
dev_dbg(hsotg->dev, "HCINTMSK @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HCINTMSK(i)));
|
||||
addr = hsotg->regs + HCTSIZ(i);
|
||||
dev_dbg(hsotg->dev, "HCTSIZ @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HCTSIZ(i)));
|
||||
addr = hsotg->regs + HCDMA(i);
|
||||
dev_dbg(hsotg->dev, "HCDMA @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HCDMA(i)));
|
||||
if (hsotg->params.dma_desc_enable) {
|
||||
addr = hsotg->regs + HCDMAB(i);
|
||||
dev_dbg(hsotg->dev, "HCDMAB @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg,
|
||||
HCDMAB(i)));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -766,80 +767,80 @@ void dwc2_dump_global_registers(struct dwc2_hsotg *hsotg)
|
|||
dev_dbg(hsotg->dev, "Core Global Registers\n");
|
||||
addr = hsotg->regs + GOTGCTL;
|
||||
dev_dbg(hsotg->dev, "GOTGCTL @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GOTGCTL));
|
||||
addr = hsotg->regs + GOTGINT;
|
||||
dev_dbg(hsotg->dev, "GOTGINT @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GOTGINT));
|
||||
addr = hsotg->regs + GAHBCFG;
|
||||
dev_dbg(hsotg->dev, "GAHBCFG @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GAHBCFG));
|
||||
addr = hsotg->regs + GUSBCFG;
|
||||
dev_dbg(hsotg->dev, "GUSBCFG @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GUSBCFG));
|
||||
addr = hsotg->regs + GRSTCTL;
|
||||
dev_dbg(hsotg->dev, "GRSTCTL @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GRSTCTL));
|
||||
addr = hsotg->regs + GINTSTS;
|
||||
dev_dbg(hsotg->dev, "GINTSTS @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GINTSTS));
|
||||
addr = hsotg->regs + GINTMSK;
|
||||
dev_dbg(hsotg->dev, "GINTMSK @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GINTMSK));
|
||||
addr = hsotg->regs + GRXSTSR;
|
||||
dev_dbg(hsotg->dev, "GRXSTSR @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GRXSTSR));
|
||||
addr = hsotg->regs + GRXFSIZ;
|
||||
dev_dbg(hsotg->dev, "GRXFSIZ @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GRXFSIZ));
|
||||
addr = hsotg->regs + GNPTXFSIZ;
|
||||
dev_dbg(hsotg->dev, "GNPTXFSIZ @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GNPTXFSIZ));
|
||||
addr = hsotg->regs + GNPTXSTS;
|
||||
dev_dbg(hsotg->dev, "GNPTXSTS @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GNPTXSTS));
|
||||
addr = hsotg->regs + GI2CCTL;
|
||||
dev_dbg(hsotg->dev, "GI2CCTL @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GI2CCTL));
|
||||
addr = hsotg->regs + GPVNDCTL;
|
||||
dev_dbg(hsotg->dev, "GPVNDCTL @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GPVNDCTL));
|
||||
addr = hsotg->regs + GGPIO;
|
||||
dev_dbg(hsotg->dev, "GGPIO @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GGPIO));
|
||||
addr = hsotg->regs + GUID;
|
||||
dev_dbg(hsotg->dev, "GUID @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GUID));
|
||||
addr = hsotg->regs + GSNPSID;
|
||||
dev_dbg(hsotg->dev, "GSNPSID @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GSNPSID));
|
||||
addr = hsotg->regs + GHWCFG1;
|
||||
dev_dbg(hsotg->dev, "GHWCFG1 @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GHWCFG1));
|
||||
addr = hsotg->regs + GHWCFG2;
|
||||
dev_dbg(hsotg->dev, "GHWCFG2 @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GHWCFG2));
|
||||
addr = hsotg->regs + GHWCFG3;
|
||||
dev_dbg(hsotg->dev, "GHWCFG3 @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GHWCFG3));
|
||||
addr = hsotg->regs + GHWCFG4;
|
||||
dev_dbg(hsotg->dev, "GHWCFG4 @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GHWCFG4));
|
||||
addr = hsotg->regs + GLPMCFG;
|
||||
dev_dbg(hsotg->dev, "GLPMCFG @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GLPMCFG));
|
||||
addr = hsotg->regs + GPWRDN;
|
||||
dev_dbg(hsotg->dev, "GPWRDN @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GPWRDN));
|
||||
addr = hsotg->regs + GDFIFOCFG;
|
||||
dev_dbg(hsotg->dev, "GDFIFOCFG @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, GDFIFOCFG));
|
||||
addr = hsotg->regs + HPTXFSIZ;
|
||||
dev_dbg(hsotg->dev, "HPTXFSIZ @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, HPTXFSIZ));
|
||||
|
||||
addr = hsotg->regs + PCGCTL;
|
||||
dev_dbg(hsotg->dev, "PCGCTL @0x%08lX : 0x%08X\n",
|
||||
(unsigned long)addr, dwc2_readl(addr));
|
||||
(unsigned long)addr, dwc2_readl(hsotg, PCGCTL));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -862,7 +863,7 @@ void dwc2_flush_tx_fifo(struct dwc2_hsotg *hsotg, const int num)
|
|||
|
||||
greset = GRSTCTL_TXFFLSH;
|
||||
greset |= num << GRSTCTL_TXFNUM_SHIFT & GRSTCTL_TXFNUM_MASK;
|
||||
dwc2_writel(greset, hsotg->regs + GRSTCTL);
|
||||
dwc2_writel(hsotg, greset, GRSTCTL);
|
||||
|
||||
if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_TXFFLSH, 10000))
|
||||
dev_warn(hsotg->dev, "%s: HANG! timeout GRSTCTL GRSTCTL_TXFFLSH\n",
|
||||
|
@ -889,7 +890,7 @@ void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg)
|
|||
__func__);
|
||||
|
||||
greset = GRSTCTL_RXFFLSH;
|
||||
dwc2_writel(greset, hsotg->regs + GRSTCTL);
|
||||
dwc2_writel(hsotg, greset, GRSTCTL);
|
||||
|
||||
/* Wait for RxFIFO flush done */
|
||||
if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_RXFFLSH, 10000))
|
||||
|
@ -902,7 +903,7 @@ void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg)
|
|||
|
||||
bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
if (dwc2_readl(hsotg->regs + GSNPSID) == 0xffffffff)
|
||||
if (dwc2_readl(hsotg, GSNPSID) == 0xffffffff)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
|
@ -916,10 +917,10 @@ bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg)
|
|||
*/
|
||||
void dwc2_enable_global_interrupts(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 ahbcfg = dwc2_readl(hsotg->regs + GAHBCFG);
|
||||
u32 ahbcfg = dwc2_readl(hsotg, GAHBCFG);
|
||||
|
||||
ahbcfg |= GAHBCFG_GLBL_INTR_EN;
|
||||
dwc2_writel(ahbcfg, hsotg->regs + GAHBCFG);
|
||||
dwc2_writel(hsotg, ahbcfg, GAHBCFG);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -930,16 +931,16 @@ void dwc2_enable_global_interrupts(struct dwc2_hsotg *hsotg)
|
|||
*/
|
||||
void dwc2_disable_global_interrupts(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 ahbcfg = dwc2_readl(hsotg->regs + GAHBCFG);
|
||||
u32 ahbcfg = dwc2_readl(hsotg, GAHBCFG);
|
||||
|
||||
ahbcfg &= ~GAHBCFG_GLBL_INTR_EN;
|
||||
dwc2_writel(ahbcfg, hsotg->regs + GAHBCFG);
|
||||
dwc2_writel(hsotg, ahbcfg, GAHBCFG);
|
||||
}
|
||||
|
||||
/* Returns the controller's GHWCFG2.OTG_MODE. */
|
||||
unsigned int dwc2_op_mode(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 ghwcfg2 = dwc2_readl(hsotg->regs + GHWCFG2);
|
||||
u32 ghwcfg2 = dwc2_readl(hsotg, GHWCFG2);
|
||||
|
||||
return (ghwcfg2 & GHWCFG2_OP_MODE_MASK) >>
|
||||
GHWCFG2_OP_MODE_SHIFT;
|
||||
|
@ -988,7 +989,7 @@ int dwc2_hsotg_wait_bit_set(struct dwc2_hsotg *hsotg, u32 offset, u32 mask,
|
|||
u32 i;
|
||||
|
||||
for (i = 0; i < timeout; i++) {
|
||||
if (dwc2_readl(hsotg->regs + offset) & mask)
|
||||
if (dwc2_readl(hsotg, offset) & mask)
|
||||
return 0;
|
||||
udelay(1);
|
||||
}
|
||||
|
@ -1011,7 +1012,7 @@ int dwc2_hsotg_wait_bit_clear(struct dwc2_hsotg *hsotg, u32 offset, u32 mask,
|
|||
u32 i;
|
||||
|
||||
for (i = 0; i < timeout; i++) {
|
||||
if (!(dwc2_readl(hsotg->regs + offset) & mask))
|
||||
if (!(dwc2_readl(hsotg, offset) & mask))
|
||||
return 0;
|
||||
udelay(1);
|
||||
}
|
||||
|
|
|
@ -1172,9 +1172,9 @@ struct dwc2_hsotg {
|
|||
* writes. This set of operations was added specifically for MIPS and
|
||||
* should only be used there.
|
||||
*/
|
||||
static inline u32 dwc2_readl(const void __iomem *addr)
|
||||
static inline u32 dwc2_readl(struct dwc2_hsotg *hsotg, u32 offset)
|
||||
{
|
||||
u32 value = __raw_readl(addr);
|
||||
u32 value = __raw_readl(hsotg->regs + offset);
|
||||
|
||||
/* In order to preserve endianness __raw_* operation is used. Therefore
|
||||
* a barrier is needed to ensure IO access is not re-ordered across
|
||||
|
@ -1184,9 +1184,9 @@ static inline u32 dwc2_readl(const void __iomem *addr)
|
|||
return value;
|
||||
}
|
||||
|
||||
static inline void dwc2_writel(u32 value, void __iomem *addr)
|
||||
static inline void dwc2_writel(struct dwc2_hsotg *hsotg, u32 value, u32 offset)
|
||||
{
|
||||
__raw_writel(value, addr);
|
||||
__raw_writel(value, hsotg->regs + offset);
|
||||
|
||||
/*
|
||||
* In order to preserve endianness __raw_* operation is used. Therefore
|
||||
|
@ -1195,22 +1195,23 @@ static inline void dwc2_writel(u32 value, void __iomem *addr)
|
|||
*/
|
||||
mb();
|
||||
#ifdef DWC2_LOG_WRITES
|
||||
pr_info("INFO:: wrote %08x to %p\n", value, addr);
|
||||
pr_info("INFO:: wrote %08x to %p\n", value, hsotg->regs + offset);
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
|
||||
/* Normal architectures just use readl/write */
|
||||
static inline u32 dwc2_readl(const void __iomem *addr)
|
||||
static inline u32 dwc2_readl(struct dwc2_hsotg *hsotg, u32 offset)
|
||||
{
|
||||
return readl(addr);
|
||||
return readl(hsotg->regs + offset);
|
||||
}
|
||||
|
||||
static inline void dwc2_writel(u32 value, void __iomem *addr)
|
||||
static inline void dwc2_writel(struct dwc2_hsotg *hsotg, u32 value, u32 offset)
|
||||
{
|
||||
writel(value, addr);
|
||||
writel(value, hsotg->regs + offset);
|
||||
|
||||
#ifdef DWC2_LOG_WRITES
|
||||
pr_info("info:: wrote %08x to %p\n", value, addr);
|
||||
pr_info("info:: wrote %08x to %p\n", value, hsotg->regs + offset);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
@ -1320,12 +1321,12 @@ bool dwc2_hw_is_device(struct dwc2_hsotg *hsotg);
|
|||
*/
|
||||
static inline int dwc2_is_host_mode(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
return (dwc2_readl(hsotg->regs + GINTSTS) & GINTSTS_CURMODE_HOST) != 0;
|
||||
return (dwc2_readl(hsotg, GINTSTS) & GINTSTS_CURMODE_HOST) != 0;
|
||||
}
|
||||
|
||||
static inline int dwc2_is_device_mode(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
return (dwc2_readl(hsotg->regs + GINTSTS) & GINTSTS_CURMODE_HOST) == 0;
|
||||
return (dwc2_readl(hsotg, GINTSTS) & GINTSTS_CURMODE_HOST) == 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -81,11 +81,11 @@ static const char *dwc2_op_state_str(struct dwc2_hsotg *hsotg)
|
|||
*/
|
||||
static void dwc2_handle_usb_port_intr(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
||||
u32 hprt0 = dwc2_readl(hsotg, HPRT0);
|
||||
|
||||
if (hprt0 & HPRT0_ENACHG) {
|
||||
hprt0 &= ~HPRT0_ENA;
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hsotg, hprt0, HPRT0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,7 @@ static void dwc2_handle_usb_port_intr(struct dwc2_hsotg *hsotg)
|
|||
static void dwc2_handle_mode_mismatch_intr(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
/* Clear interrupt */
|
||||
dwc2_writel(GINTSTS_MODEMIS, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, GINTSTS_MODEMIS, GINTSTS);
|
||||
|
||||
dev_warn(hsotg->dev, "Mode Mismatch Interrupt: currently in %s mode\n",
|
||||
dwc2_is_host_mode(hsotg) ? "Host" : "Device");
|
||||
|
@ -115,8 +115,8 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
|||
u32 gotgctl;
|
||||
u32 gintmsk;
|
||||
|
||||
gotgint = dwc2_readl(hsotg->regs + GOTGINT);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgint = dwc2_readl(hsotg, GOTGINT);
|
||||
gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
dev_dbg(hsotg->dev, "++OTG Interrupt gotgint=%0x [%s]\n", gotgint,
|
||||
dwc2_op_state_str(hsotg));
|
||||
|
||||
|
@ -124,7 +124,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
|||
dev_dbg(hsotg->dev,
|
||||
" ++OTG Interrupt: Session End Detected++ (%s)\n",
|
||||
dwc2_op_state_str(hsotg));
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
|
||||
if (dwc2_is_device_mode(hsotg))
|
||||
dwc2_hsotg_disconnect(hsotg);
|
||||
|
@ -150,24 +150,24 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
|||
hsotg->lx_state = DWC2_L0;
|
||||
}
|
||||
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
gotgctl &= ~GOTGCTL_DEVHNPEN;
|
||||
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
dwc2_writel(hsotg, gotgctl, GOTGCTL);
|
||||
}
|
||||
|
||||
if (gotgint & GOTGINT_SES_REQ_SUC_STS_CHNG) {
|
||||
dev_dbg(hsotg->dev,
|
||||
" ++OTG Interrupt: Session Request Success Status Change++\n");
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
if (gotgctl & GOTGCTL_SESREQSCS) {
|
||||
if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS &&
|
||||
hsotg->params.i2c_enable) {
|
||||
hsotg->srp_success = 1;
|
||||
} else {
|
||||
/* Clear Session Request */
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
gotgctl &= ~GOTGCTL_SESREQ;
|
||||
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
dwc2_writel(hsotg, gotgctl, GOTGCTL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -177,7 +177,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
|||
* Print statements during the HNP interrupt handling
|
||||
* can cause it to fail
|
||||
*/
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
/*
|
||||
* WA for 3.00a- HW is not setting cur_mode, even sometimes
|
||||
* this does not help
|
||||
|
@ -197,9 +197,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
|||
* interrupt does not get handled and Linux
|
||||
* complains loudly.
|
||||
*/
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg, GINTMSK);
|
||||
gintmsk &= ~GINTSTS_SOF;
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(hsotg, gintmsk, GINTMSK);
|
||||
|
||||
/*
|
||||
* Call callback function with spin lock
|
||||
|
@ -213,9 +213,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
|||
hsotg->op_state = OTG_STATE_B_HOST;
|
||||
}
|
||||
} else {
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg, GOTGCTL);
|
||||
gotgctl &= ~(GOTGCTL_HNPREQ | GOTGCTL_DEVHNPEN);
|
||||
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
dwc2_writel(hsotg, gotgctl, GOTGCTL);
|
||||
dev_dbg(hsotg->dev, "HNP Failed\n");
|
||||
dev_err(hsotg->dev,
|
||||
"Device Not Connected/Responding\n");
|
||||
|
@ -241,9 +241,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
|||
hsotg->op_state = OTG_STATE_A_PERIPHERAL;
|
||||
} else {
|
||||
/* Need to disable SOF interrupt immediately */
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg, GINTMSK);
|
||||
gintmsk &= ~GINTSTS_SOF;
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(hsotg, gintmsk, GINTMSK);
|
||||
spin_unlock(&hsotg->lock);
|
||||
dwc2_hcd_start(hsotg);
|
||||
spin_lock(&hsotg->lock);
|
||||
|
@ -258,7 +258,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
|||
dev_dbg(hsotg->dev, " ++OTG Interrupt: Debounce Done++\n");
|
||||
|
||||
/* Clear GOTGINT */
|
||||
dwc2_writel(gotgint, hsotg->regs + GOTGINT);
|
||||
dwc2_writel(hsotg, gotgint, GOTGINT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -276,12 +276,12 @@ static void dwc2_handle_conn_id_status_change_intr(struct dwc2_hsotg *hsotg)
|
|||
u32 gintmsk;
|
||||
|
||||
/* Clear interrupt */
|
||||
dwc2_writel(GINTSTS_CONIDSTSCHNG, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, GINTSTS_CONIDSTSCHNG, GINTSTS);
|
||||
|
||||
/* Need to disable SOF interrupt immediately */
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg, GINTMSK);
|
||||
gintmsk &= ~GINTSTS_SOF;
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(hsotg, gintmsk, GINTMSK);
|
||||
|
||||
dev_dbg(hsotg->dev, " ++Connector ID Status Change Interrupt++ (%s)\n",
|
||||
dwc2_is_host_mode(hsotg) ? "Host" : "Device");
|
||||
|
@ -314,7 +314,7 @@ static void dwc2_handle_session_req_intr(struct dwc2_hsotg *hsotg)
|
|||
int ret;
|
||||
|
||||
/* Clear interrupt */
|
||||
dwc2_writel(GINTSTS_SESSREQINT, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, GINTSTS_SESSREQINT, GINTSTS);
|
||||
|
||||
dev_dbg(hsotg->dev, "Session request interrupt - lx_state=%d\n",
|
||||
hsotg->lx_state);
|
||||
|
@ -351,15 +351,15 @@ static void dwc2_wakeup_from_lpm_l1(struct dwc2_hsotg *hsotg)
|
|||
return;
|
||||
}
|
||||
|
||||
glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG);
|
||||
glpmcfg = dwc2_readl(hsotg, GLPMCFG);
|
||||
if (dwc2_is_device_mode(hsotg)) {
|
||||
dev_dbg(hsotg->dev, "Exit from L1 state\n");
|
||||
glpmcfg &= ~GLPMCFG_ENBLSLPM;
|
||||
glpmcfg &= ~GLPMCFG_HIRD_THRES_EN;
|
||||
dwc2_writel(glpmcfg, hsotg->regs + GLPMCFG);
|
||||
dwc2_writel(hsotg, glpmcfg, GLPMCFG);
|
||||
|
||||
do {
|
||||
glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG);
|
||||
glpmcfg = dwc2_readl(hsotg, GLPMCFG);
|
||||
|
||||
if (!(glpmcfg & (GLPMCFG_COREL1RES_MASK |
|
||||
GLPMCFG_L1RESUMEOK | GLPMCFG_SLPSTS)))
|
||||
|
@ -398,7 +398,7 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
|
|||
int ret;
|
||||
|
||||
/* Clear interrupt */
|
||||
dwc2_writel(GINTSTS_WKUPINT, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, GINTSTS_WKUPINT, GINTSTS);
|
||||
|
||||
dev_dbg(hsotg->dev, "++Resume or Remote Wakeup Detected Interrupt++\n");
|
||||
dev_dbg(hsotg->dev, "%s lxstate = %d\n", __func__, hsotg->lx_state);
|
||||
|
@ -410,13 +410,13 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
|
|||
|
||||
if (dwc2_is_device_mode(hsotg)) {
|
||||
dev_dbg(hsotg->dev, "DSTS=0x%0x\n",
|
||||
dwc2_readl(hsotg->regs + DSTS));
|
||||
dwc2_readl(hsotg, DSTS));
|
||||
if (hsotg->lx_state == DWC2_L2) {
|
||||
u32 dctl = dwc2_readl(hsotg->regs + DCTL);
|
||||
u32 dctl = dwc2_readl(hsotg, DCTL);
|
||||
|
||||
/* Clear Remote Wakeup Signaling */
|
||||
dctl &= ~DCTL_RMTWKUPSIG;
|
||||
dwc2_writel(dctl, hsotg->regs + DCTL);
|
||||
dwc2_writel(hsotg, dctl, DCTL);
|
||||
ret = dwc2_exit_partial_power_down(hsotg, true);
|
||||
if (ret && (ret != -ENOTSUPP))
|
||||
dev_err(hsotg->dev, "exit power_down failed\n");
|
||||
|
@ -430,11 +430,11 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
|
|||
return;
|
||||
|
||||
if (hsotg->lx_state != DWC2_L1) {
|
||||
u32 pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
u32 pcgcctl = dwc2_readl(hsotg, PCGCTL);
|
||||
|
||||
/* Restart the Phy Clock */
|
||||
pcgcctl &= ~PCGCTL_STOPPCLK;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
mod_timer(&hsotg->wkp_timer,
|
||||
jiffies + msecs_to_jiffies(71));
|
||||
} else {
|
||||
|
@ -450,7 +450,7 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
|
|||
*/
|
||||
static void dwc2_handle_disconnect_intr(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
dwc2_writel(GINTSTS_DISCONNINT, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, GINTSTS_DISCONNINT, GINTSTS);
|
||||
|
||||
dev_dbg(hsotg->dev, "++Disconnect Detected Interrupt++ (%s) %s\n",
|
||||
dwc2_is_host_mode(hsotg) ? "Host" : "Device",
|
||||
|
@ -474,7 +474,7 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg)
|
|||
int ret;
|
||||
|
||||
/* Clear interrupt */
|
||||
dwc2_writel(GINTSTS_USBSUSP, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, GINTSTS_USBSUSP, GINTSTS);
|
||||
|
||||
dev_dbg(hsotg->dev, "USB SUSPEND\n");
|
||||
|
||||
|
@ -483,7 +483,7 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg)
|
|||
* Check the Device status register to determine if the Suspend
|
||||
* state is active
|
||||
*/
|
||||
dsts = dwc2_readl(hsotg->regs + DSTS);
|
||||
dsts = dwc2_readl(hsotg, DSTS);
|
||||
dev_dbg(hsotg->dev, "%s: DSTS=0x%0x\n", __func__, dsts);
|
||||
dev_dbg(hsotg->dev,
|
||||
"DSTS.Suspend Status=%d HWCFG4.Power Optimize=%d HWCFG4.Hibernation=%d\n",
|
||||
|
@ -563,9 +563,9 @@ static void dwc2_handle_lpm_intr(struct dwc2_hsotg *hsotg)
|
|||
u32 enslpm;
|
||||
|
||||
/* Clear interrupt */
|
||||
dwc2_writel(GINTSTS_LPMTRANRCVD, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, GINTSTS_LPMTRANRCVD, GINTSTS);
|
||||
|
||||
glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG);
|
||||
glpmcfg = dwc2_readl(hsotg, GLPMCFG);
|
||||
|
||||
if (!(glpmcfg & GLPMCFG_LPMCAP)) {
|
||||
dev_err(hsotg->dev, "Unexpected LPM interrupt\n");
|
||||
|
@ -588,16 +588,16 @@ static void dwc2_handle_lpm_intr(struct dwc2_hsotg *hsotg)
|
|||
} else {
|
||||
dev_dbg(hsotg->dev, "Entering Sleep with L1 Gating\n");
|
||||
|
||||
pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
pcgcctl = dwc2_readl(hsotg, PCGCTL);
|
||||
pcgcctl |= PCGCTL_ENBL_SLEEP_GATING;
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(hsotg, pcgcctl, PCGCTL);
|
||||
}
|
||||
/**
|
||||
* Examine prt_sleep_sts after TL1TokenTetry period max (10 us)
|
||||
*/
|
||||
udelay(10);
|
||||
|
||||
glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG);
|
||||
glpmcfg = dwc2_readl(hsotg, GLPMCFG);
|
||||
|
||||
if (glpmcfg & GLPMCFG_SLPSTS) {
|
||||
/* Save the current state */
|
||||
|
@ -627,9 +627,9 @@ static u32 dwc2_read_common_intr(struct dwc2_hsotg *hsotg)
|
|||
u32 gahbcfg;
|
||||
u32 gintmsk_common = GINTMSK_COMMON;
|
||||
|
||||
gintsts = dwc2_readl(hsotg->regs + GINTSTS);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gahbcfg = dwc2_readl(hsotg->regs + GAHBCFG);
|
||||
gintsts = dwc2_readl(hsotg, GINTSTS);
|
||||
gintmsk = dwc2_readl(hsotg, GINTMSK);
|
||||
gahbcfg = dwc2_readl(hsotg, GAHBCFG);
|
||||
|
||||
/* If any common interrupts set */
|
||||
if (gintsts & gintmsk_common)
|
||||
|
@ -653,9 +653,9 @@ static void dwc2_handle_gpwrdn_intr(struct dwc2_hsotg *hsotg)
|
|||
u32 gpwrdn;
|
||||
int linestate;
|
||||
|
||||
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN);
|
||||
gpwrdn = dwc2_readl(hsotg, GPWRDN);
|
||||
/* clear all interrupt */
|
||||
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN);
|
||||
dwc2_writel(hsotg, gpwrdn, GPWRDN);
|
||||
linestate = (gpwrdn & GPWRDN_LINESTATE_MASK) >> GPWRDN_LINESTATE_SHIFT;
|
||||
dev_dbg(hsotg->dev,
|
||||
"%s: dwc2_handle_gpwrdwn_intr called gpwrdn= %08x\n", __func__,
|
||||
|
@ -668,38 +668,38 @@ static void dwc2_handle_gpwrdn_intr(struct dwc2_hsotg *hsotg)
|
|||
dev_dbg(hsotg->dev, "%s: GPWRDN_DISCONN_DET\n", __func__);
|
||||
|
||||
/* Switch-on voltage to the core */
|
||||
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN);
|
||||
gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
|
||||
gpwrdn_tmp &= ~GPWRDN_PWRDNSWTCH;
|
||||
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN);
|
||||
dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
|
||||
udelay(10);
|
||||
|
||||
/* Reset core */
|
||||
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN);
|
||||
gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
|
||||
gpwrdn_tmp &= ~GPWRDN_PWRDNRSTN;
|
||||
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN);
|
||||
dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
|
||||
udelay(10);
|
||||
|
||||
/* Disable Power Down Clamp */
|
||||
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN);
|
||||
gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
|
||||
gpwrdn_tmp &= ~GPWRDN_PWRDNCLMP;
|
||||
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN);
|
||||
dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
|
||||
udelay(10);
|
||||
|
||||
/* Deassert reset core */
|
||||
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN);
|
||||
gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
|
||||
gpwrdn_tmp |= GPWRDN_PWRDNRSTN;
|
||||
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN);
|
||||
dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
|
||||
udelay(10);
|
||||
|
||||
/* Disable PMU interrupt */
|
||||
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN);
|
||||
gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
|
||||
gpwrdn_tmp &= ~GPWRDN_PMUINTSEL;
|
||||
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN);
|
||||
dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
|
||||
|
||||
/* De-assert Wakeup Logic */
|
||||
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN);
|
||||
gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
|
||||
gpwrdn_tmp &= ~GPWRDN_PMUACTV;
|
||||
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN);
|
||||
dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
|
||||
|
||||
hsotg->hibernated = 0;
|
||||
|
||||
|
@ -780,10 +780,10 @@ irqreturn_t dwc2_handle_common_intr(int irq, void *dev)
|
|||
|
||||
/* Reading current frame number value in device or host modes. */
|
||||
if (dwc2_is_device_mode(hsotg))
|
||||
hsotg->frame_number = (dwc2_readl(hsotg->regs + DSTS)
|
||||
hsotg->frame_number = (dwc2_readl(hsotg, DSTS)
|
||||
& DSTS_SOFFN_MASK) >> DSTS_SOFFN_SHIFT;
|
||||
else
|
||||
hsotg->frame_number = (dwc2_readl(hsotg->regs + HFNUM)
|
||||
hsotg->frame_number = (dwc2_readl(hsotg, HFNUM)
|
||||
& HFNUM_FRNUM_MASK) >> HFNUM_FRNUM_SHIFT;
|
||||
|
||||
gintsts = dwc2_read_common_intr(hsotg);
|
||||
|
|
|
@ -69,7 +69,7 @@ static int testmode_show(struct seq_file *s, void *unused)
|
|||
int dctl;
|
||||
|
||||
spin_lock_irqsave(&hsotg->lock, flags);
|
||||
dctl = dwc2_readl(hsotg->regs + DCTL);
|
||||
dctl = dwc2_readl(hsotg, DCTL);
|
||||
dctl &= DCTL_TSTCTL_MASK;
|
||||
dctl >>= DCTL_TSTCTL_SHIFT;
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
|
@ -126,42 +126,41 @@ static const struct file_operations testmode_fops = {
|
|||
static int state_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
struct dwc2_hsotg *hsotg = seq->private;
|
||||
void __iomem *regs = hsotg->regs;
|
||||
int idx;
|
||||
|
||||
seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n",
|
||||
dwc2_readl(regs + DCFG),
|
||||
dwc2_readl(regs + DCTL),
|
||||
dwc2_readl(regs + DSTS));
|
||||
dwc2_readl(hsotg, DCFG),
|
||||
dwc2_readl(hsotg, DCTL),
|
||||
dwc2_readl(hsotg, DSTS));
|
||||
|
||||
seq_printf(seq, "DIEPMSK=0x%08x, DOEPMASK=0x%08x\n",
|
||||
dwc2_readl(regs + DIEPMSK), dwc2_readl(regs + DOEPMSK));
|
||||
dwc2_readl(hsotg, DIEPMSK), dwc2_readl(hsotg, DOEPMSK));
|
||||
|
||||
seq_printf(seq, "GINTMSK=0x%08x, GINTSTS=0x%08x\n",
|
||||
dwc2_readl(regs + GINTMSK),
|
||||
dwc2_readl(regs + GINTSTS));
|
||||
dwc2_readl(hsotg, GINTMSK),
|
||||
dwc2_readl(hsotg, GINTSTS));
|
||||
|
||||
seq_printf(seq, "DAINTMSK=0x%08x, DAINT=0x%08x\n",
|
||||
dwc2_readl(regs + DAINTMSK),
|
||||
dwc2_readl(regs + DAINT));
|
||||
dwc2_readl(hsotg, DAINTMSK),
|
||||
dwc2_readl(hsotg, DAINT));
|
||||
|
||||
seq_printf(seq, "GNPTXSTS=0x%08x, GRXSTSR=%08x\n",
|
||||
dwc2_readl(regs + GNPTXSTS),
|
||||
dwc2_readl(regs + GRXSTSR));
|
||||
dwc2_readl(hsotg, GNPTXSTS),
|
||||
dwc2_readl(hsotg, GRXSTSR));
|
||||
|
||||
seq_puts(seq, "\nEndpoint status:\n");
|
||||
|
||||
for (idx = 0; idx < hsotg->num_of_eps; idx++) {
|
||||
u32 in, out;
|
||||
|
||||
in = dwc2_readl(regs + DIEPCTL(idx));
|
||||
out = dwc2_readl(regs + DOEPCTL(idx));
|
||||
in = dwc2_readl(hsotg, DIEPCTL(idx));
|
||||
out = dwc2_readl(hsotg, DOEPCTL(idx));
|
||||
|
||||
seq_printf(seq, "ep%d: DIEPCTL=0x%08x, DOEPCTL=0x%08x",
|
||||
idx, in, out);
|
||||
|
||||
in = dwc2_readl(regs + DIEPTSIZ(idx));
|
||||
out = dwc2_readl(regs + DOEPTSIZ(idx));
|
||||
in = dwc2_readl(hsotg, DIEPTSIZ(idx));
|
||||
out = dwc2_readl(hsotg, DOEPTSIZ(idx));
|
||||
|
||||
seq_printf(seq, ", DIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x",
|
||||
in, out);
|
||||
|
@ -184,14 +183,13 @@ DEFINE_SHOW_ATTRIBUTE(state);
|
|||
static int fifo_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
struct dwc2_hsotg *hsotg = seq->private;
|
||||
void __iomem *regs = hsotg->regs;
|
||||
u32 val;
|
||||
int idx;
|
||||
|
||||
seq_puts(seq, "Non-periodic FIFOs:\n");
|
||||
seq_printf(seq, "RXFIFO: Size %d\n", dwc2_readl(regs + GRXFSIZ));
|
||||
seq_printf(seq, "RXFIFO: Size %d\n", dwc2_readl(hsotg, GRXFSIZ));
|
||||
|
||||
val = dwc2_readl(regs + GNPTXFSIZ);
|
||||
val = dwc2_readl(hsotg, GNPTXFSIZ);
|
||||
seq_printf(seq, "NPTXFIFO: Size %d, Start 0x%08x\n",
|
||||
val >> FIFOSIZE_DEPTH_SHIFT,
|
||||
val & FIFOSIZE_STARTADDR_MASK);
|
||||
|
@ -199,7 +197,7 @@ static int fifo_show(struct seq_file *seq, void *v)
|
|||
seq_puts(seq, "\nPeriodic TXFIFOs:\n");
|
||||
|
||||
for (idx = 1; idx < hsotg->num_of_eps; idx++) {
|
||||
val = dwc2_readl(regs + DPTXFSIZN(idx));
|
||||
val = dwc2_readl(hsotg, DPTXFSIZN(idx));
|
||||
|
||||
seq_printf(seq, "\tDPTXFIFO%2d: Size %d, Start 0x%08x\n", idx,
|
||||
val >> FIFOSIZE_DEPTH_SHIFT,
|
||||
|
@ -228,7 +226,6 @@ static int ep_show(struct seq_file *seq, void *v)
|
|||
struct dwc2_hsotg_ep *ep = seq->private;
|
||||
struct dwc2_hsotg *hsotg = ep->parent;
|
||||
struct dwc2_hsotg_req *req;
|
||||
void __iomem *regs = hsotg->regs;
|
||||
int index = ep->index;
|
||||
int show_limit = 15;
|
||||
unsigned long flags;
|
||||
|
@ -239,20 +236,20 @@ static int ep_show(struct seq_file *seq, void *v)
|
|||
/* first show the register state */
|
||||
|
||||
seq_printf(seq, "\tDIEPCTL=0x%08x, DOEPCTL=0x%08x\n",
|
||||
dwc2_readl(regs + DIEPCTL(index)),
|
||||
dwc2_readl(regs + DOEPCTL(index)));
|
||||
dwc2_readl(hsotg, DIEPCTL(index)),
|
||||
dwc2_readl(hsotg, DOEPCTL(index)));
|
||||
|
||||
seq_printf(seq, "\tDIEPDMA=0x%08x, DOEPDMA=0x%08x\n",
|
||||
dwc2_readl(regs + DIEPDMA(index)),
|
||||
dwc2_readl(regs + DOEPDMA(index)));
|
||||
dwc2_readl(hsotg, DIEPDMA(index)),
|
||||
dwc2_readl(hsotg, DOEPDMA(index)));
|
||||
|
||||
seq_printf(seq, "\tDIEPINT=0x%08x, DOEPINT=0x%08x\n",
|
||||
dwc2_readl(regs + DIEPINT(index)),
|
||||
dwc2_readl(regs + DOEPINT(index)));
|
||||
dwc2_readl(hsotg, DIEPINT(index)),
|
||||
dwc2_readl(hsotg, DOEPINT(index)));
|
||||
|
||||
seq_printf(seq, "\tDIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x\n",
|
||||
dwc2_readl(regs + DIEPTSIZ(index)),
|
||||
dwc2_readl(regs + DOEPTSIZ(index)));
|
||||
dwc2_readl(hsotg, DIEPTSIZ(index)),
|
||||
dwc2_readl(hsotg, DOEPTSIZ(index)));
|
||||
|
||||
seq_puts(seq, "\n");
|
||||
seq_printf(seq, "mps %d\n", ep->ep.maxpacket);
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -469,10 +469,10 @@ static inline struct usb_hcd *dwc2_hsotg_to_hcd(struct dwc2_hsotg *hsotg)
|
|||
*/
|
||||
static inline void disable_hc_int(struct dwc2_hsotg *hsotg, int chnum, u32 intr)
|
||||
{
|
||||
u32 mask = dwc2_readl(hsotg->regs + HCINTMSK(chnum));
|
||||
u32 mask = dwc2_readl(hsotg, HCINTMSK(chnum));
|
||||
|
||||
mask &= ~intr;
|
||||
dwc2_writel(mask, hsotg->regs + HCINTMSK(chnum));
|
||||
dwc2_writel(hsotg, mask, HCINTMSK(chnum));
|
||||
}
|
||||
|
||||
void dwc2_hc_cleanup(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan);
|
||||
|
@ -487,7 +487,7 @@ void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg,
|
|||
*/
|
||||
static inline u32 dwc2_read_hprt0(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
||||
u32 hprt0 = dwc2_readl(hsotg, HPRT0);
|
||||
|
||||
hprt0 &= ~(HPRT0_ENA | HPRT0_CONNDET | HPRT0_ENACHG | HPRT0_OVRCURRCHG);
|
||||
return hprt0;
|
||||
|
@ -690,8 +690,8 @@ static inline u16 dwc2_micro_frame_num(u16 frame)
|
|||
*/
|
||||
static inline u32 dwc2_read_core_intr(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
return dwc2_readl(hsotg->regs + GINTSTS) &
|
||||
dwc2_readl(hsotg->regs + GINTMSK);
|
||||
return dwc2_readl(hsotg, GINTSTS) &
|
||||
dwc2_readl(hsotg, GINTMSK);
|
||||
}
|
||||
|
||||
static inline u32 dwc2_hcd_urb_get_status(struct dwc2_hcd_urb *dwc2_urb)
|
||||
|
|
|
@ -185,19 +185,19 @@ static void dwc2_per_sched_enable(struct dwc2_hsotg *hsotg, u32 fr_list_en)
|
|||
|
||||
spin_lock_irqsave(&hsotg->lock, flags);
|
||||
|
||||
hcfg = dwc2_readl(hsotg->regs + HCFG);
|
||||
hcfg = dwc2_readl(hsotg, HCFG);
|
||||
if (hcfg & HCFG_PERSCHEDENA) {
|
||||
/* already enabled */
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
dwc2_writel(hsotg->frame_list_dma, hsotg->regs + HFLBADDR);
|
||||
dwc2_writel(hsotg, hsotg->frame_list_dma, HFLBADDR);
|
||||
|
||||
hcfg &= ~HCFG_FRLISTEN_MASK;
|
||||
hcfg |= fr_list_en | HCFG_PERSCHEDENA;
|
||||
dev_vdbg(hsotg->dev, "Enabling Periodic schedule\n");
|
||||
dwc2_writel(hcfg, hsotg->regs + HCFG);
|
||||
dwc2_writel(hsotg, hcfg, HCFG);
|
||||
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
}
|
||||
|
@ -209,7 +209,7 @@ static void dwc2_per_sched_disable(struct dwc2_hsotg *hsotg)
|
|||
|
||||
spin_lock_irqsave(&hsotg->lock, flags);
|
||||
|
||||
hcfg = dwc2_readl(hsotg->regs + HCFG);
|
||||
hcfg = dwc2_readl(hsotg, HCFG);
|
||||
if (!(hcfg & HCFG_PERSCHEDENA)) {
|
||||
/* already disabled */
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
|
@ -218,7 +218,7 @@ static void dwc2_per_sched_disable(struct dwc2_hsotg *hsotg)
|
|||
|
||||
hcfg &= ~HCFG_PERSCHEDENA;
|
||||
dev_vdbg(hsotg->dev, "Disabling Periodic schedule\n");
|
||||
dwc2_writel(hcfg, hsotg->regs + HCFG);
|
||||
dwc2_writel(hsotg, hcfg, HCFG);
|
||||
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
}
|
||||
|
|
|
@ -144,7 +144,7 @@ static void dwc2_sof_intr(struct dwc2_hsotg *hsotg)
|
|||
enum dwc2_transaction_type tr_type;
|
||||
|
||||
/* Clear interrupt */
|
||||
dwc2_writel(GINTSTS_SOF, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(hsotg, GINTSTS_SOF, GINTSTS);
|
||||
|
||||
#ifdef DEBUG_SOF
|
||||
dev_vdbg(hsotg->dev, "--Start of Frame Interrupt--\n");
|
||||
|
@ -191,7 +191,7 @@ static void dwc2_rx_fifo_level_intr(struct dwc2_hsotg *hsotg)
|
|||
if (dbg_perio())
|
||||
dev_vdbg(hsotg->dev, "--RxFIFO Level Interrupt--\n");
|
||||
|
||||
grxsts = dwc2_readl(hsotg->regs + GRXSTSP);
|
||||
grxsts = dwc2_readl(hsotg, GRXSTSP);
|
||||
chnum = (grxsts & GRXSTS_HCHNUM_MASK) >> GRXSTS_HCHNUM_SHIFT;
|
||||
chan = hsotg->hc_ptr_array[chnum];
|
||||
if (!chan) {
|
||||
|
@ -274,11 +274,11 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
|||
dev_vdbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
|
||||
|
||||
/* Every time when port enables calculate HFIR.FrInterval */
|
||||
hfir = dwc2_readl(hsotg->regs + HFIR);
|
||||
hfir = dwc2_readl(hsotg, HFIR);
|
||||
hfir &= ~HFIR_FRINT_MASK;
|
||||
hfir |= dwc2_calc_frame_interval(hsotg) << HFIR_FRINT_SHIFT &
|
||||
HFIR_FRINT_MASK;
|
||||
dwc2_writel(hfir, hsotg->regs + HFIR);
|
||||
dwc2_writel(hsotg, hfir, HFIR);
|
||||
|
||||
/* Check if we need to adjust the PHY clock speed for low power */
|
||||
if (!params->host_support_fs_ls_low_power) {
|
||||
|
@ -287,7 +287,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
|||
return;
|
||||
}
|
||||
|
||||
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
||||
usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
||||
prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
|
||||
|
||||
if (prtspd == HPRT0_SPD_LOW_SPEED || prtspd == HPRT0_SPD_FULL_SPEED) {
|
||||
|
@ -295,11 +295,11 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
|||
if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL)) {
|
||||
/* Set PHY low power clock select for FS/LS devices */
|
||||
usbcfg |= GUSBCFG_PHY_LP_CLK_SEL;
|
||||
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
||||
dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
||||
do_reset = 1;
|
||||
}
|
||||
|
||||
hcfg = dwc2_readl(hsotg->regs + HCFG);
|
||||
hcfg = dwc2_readl(hsotg, HCFG);
|
||||
fslspclksel = (hcfg & HCFG_FSLSPCLKSEL_MASK) >>
|
||||
HCFG_FSLSPCLKSEL_SHIFT;
|
||||
|
||||
|
@ -312,7 +312,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
|||
fslspclksel = HCFG_FSLSPCLKSEL_6_MHZ;
|
||||
hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
|
||||
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
|
||||
dwc2_writel(hcfg, hsotg->regs + HCFG);
|
||||
dwc2_writel(hsotg, hcfg, HCFG);
|
||||
do_reset = 1;
|
||||
}
|
||||
} else {
|
||||
|
@ -323,7 +323,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
|||
fslspclksel = HCFG_FSLSPCLKSEL_48_MHZ;
|
||||
hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
|
||||
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
|
||||
dwc2_writel(hcfg, hsotg->regs + HCFG);
|
||||
dwc2_writel(hsotg, hcfg, HCFG);
|
||||
do_reset = 1;
|
||||
}
|
||||
}
|
||||
|
@ -331,14 +331,14 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
|||
/* Not low power */
|
||||
if (usbcfg & GUSBCFG_PHY_LP_CLK_SEL) {
|
||||
usbcfg &= ~GUSBCFG_PHY_LP_CLK_SEL;
|
||||
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
||||
dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
||||
do_reset = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (do_reset) {
|
||||
*hprt0_modify |= HPRT0_RST;
|
||||
dwc2_writel(*hprt0_modify, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hsotg, *hprt0_modify, HPRT0);
|
||||
queue_delayed_work(hsotg->wq_otg, &hsotg->reset_work,
|
||||
msecs_to_jiffies(60));
|
||||
} else {
|
||||
|
@ -359,7 +359,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
|
|||
|
||||
dev_vdbg(hsotg->dev, "--Port Interrupt--\n");
|
||||
|
||||
hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
||||
hprt0 = dwc2_readl(hsotg, HPRT0);
|
||||
hprt0_modify = hprt0;
|
||||
|
||||
/*
|
||||
|
@ -374,7 +374,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
|
|||
* Set flag and clear if detected
|
||||
*/
|
||||
if (hprt0 & HPRT0_CONNDET) {
|
||||
dwc2_writel(hprt0_modify | HPRT0_CONNDET, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hsotg, hprt0_modify | HPRT0_CONNDET, HPRT0);
|
||||
|
||||
dev_vdbg(hsotg->dev,
|
||||
"--Port Interrupt HPRT0=0x%08x Port Connect Detected--\n",
|
||||
|
@ -392,7 +392,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
|
|||
* Clear if detected - Set internal flag if disabled
|
||||
*/
|
||||
if (hprt0 & HPRT0_ENACHG) {
|
||||
dwc2_writel(hprt0_modify | HPRT0_ENACHG, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hsotg, hprt0_modify | HPRT0_ENACHG, HPRT0);
|
||||
dev_vdbg(hsotg->dev,
|
||||
" --Port Interrupt HPRT0=0x%08x Port Enable Changed (now %d)--\n",
|
||||
hprt0, !!(hprt0 & HPRT0_ENA));
|
||||
|
@ -406,17 +406,17 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
|
|||
|
||||
hsotg->params.dma_desc_enable = false;
|
||||
hsotg->new_connection = false;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Overcurrent Change Interrupt */
|
||||
if (hprt0 & HPRT0_OVRCURRCHG) {
|
||||
dwc2_writel(hprt0_modify | HPRT0_OVRCURRCHG,
|
||||
hsotg->regs + HPRT0);
|
||||
dwc2_writel(hsotg, hprt0_modify | HPRT0_OVRCURRCHG,
|
||||
HPRT0);
|
||||
dev_vdbg(hsotg->dev,
|
||||
" --Port Interrupt HPRT0=0x%08x Port Overcurrent Changed--\n",
|
||||
hprt0);
|
||||
|
@ -441,7 +441,7 @@ static u32 dwc2_get_actual_xfer_length(struct dwc2_hsotg *hsotg,
|
|||
{
|
||||
u32 hctsiz, count, length;
|
||||
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
|
||||
|
||||
if (halt_status == DWC2_HC_XFER_COMPLETE) {
|
||||
if (chan->ep_is_in) {
|
||||
|
@ -518,7 +518,7 @@ static int dwc2_update_urb_state(struct dwc2_hsotg *hsotg,
|
|||
urb->status = 0;
|
||||
}
|
||||
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
|
||||
dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
|
||||
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
|
||||
dev_vdbg(hsotg->dev, " chan->xfer_len %d\n", chan->xfer_len);
|
||||
|
@ -541,7 +541,7 @@ void dwc2_hcd_save_data_toggle(struct dwc2_hsotg *hsotg,
|
|||
struct dwc2_host_chan *chan, int chnum,
|
||||
struct dwc2_qtd *qtd)
|
||||
{
|
||||
u32 hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
u32 hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
|
||||
u32 pid = (hctsiz & TSIZ_SC_MC_PID_MASK) >> TSIZ_SC_MC_PID_SHIFT;
|
||||
|
||||
if (chan->ep_type != USB_ENDPOINT_XFER_CONTROL) {
|
||||
|
@ -780,9 +780,9 @@ cleanup:
|
|||
}
|
||||
}
|
||||
|
||||
haintmsk = dwc2_readl(hsotg->regs + HAINTMSK);
|
||||
haintmsk = dwc2_readl(hsotg, HAINTMSK);
|
||||
haintmsk &= ~(1 << chan->hc_num);
|
||||
dwc2_writel(haintmsk, hsotg->regs + HAINTMSK);
|
||||
dwc2_writel(hsotg, haintmsk, HAINTMSK);
|
||||
|
||||
/* Try to queue more transfers now that there's a free channel */
|
||||
tr_type = dwc2_hcd_select_transactions(hsotg);
|
||||
|
@ -829,9 +829,9 @@ static void dwc2_halt_channel(struct dwc2_hsotg *hsotg,
|
|||
* is enabled so that the non-periodic schedule will
|
||||
* be processed
|
||||
*/
|
||||
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 {
|
||||
dev_vdbg(hsotg->dev, "isoc/intr\n");
|
||||
/*
|
||||
|
@ -848,9 +848,9 @@ static void dwc2_halt_channel(struct dwc2_hsotg *hsotg,
|
|||
* enabled so that the periodic schedule will be
|
||||
* processed
|
||||
*/
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg, GINTMSK);
|
||||
gintmsk |= GINTSTS_PTXFEMP;
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(hsotg, gintmsk, GINTMSK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -915,7 +915,7 @@ static void dwc2_complete_periodic_xfer(struct dwc2_hsotg *hsotg,
|
|||
struct dwc2_qtd *qtd,
|
||||
enum dwc2_halt_status halt_status)
|
||||
{
|
||||
u32 hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
u32 hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
|
||||
|
||||
qtd->error_count = 0;
|
||||
|
||||
|
@ -959,7 +959,7 @@ static int dwc2_xfercomp_isoc_split_in(struct dwc2_hsotg *hsotg,
|
|||
|
||||
qtd->isoc_split_offset += len;
|
||||
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
|
||||
pid = (hctsiz & TSIZ_SC_MC_PID_MASK) >> TSIZ_SC_MC_PID_SHIFT;
|
||||
|
||||
if (frame_desc->actual_length >= frame_desc->length || pid == 0) {
|
||||
|
@ -1185,7 +1185,7 @@ static void dwc2_update_urb_state_abn(struct dwc2_hsotg *hsotg,
|
|||
|
||||
urb->actual_length += xfer_length;
|
||||
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
|
||||
dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
|
||||
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
|
||||
dev_vdbg(hsotg->dev, " chan->start_pkt_count %d\n",
|
||||
|
@ -1561,10 +1561,10 @@ static void dwc2_hc_ahberr_intr(struct dwc2_hsotg *hsotg,
|
|||
|
||||
dwc2_hc_handle_tt_clear(hsotg, chan, qtd);
|
||||
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chnum));
|
||||
hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chnum));
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hc_dma = dwc2_readl(hsotg->regs + HCDMA(chnum));
|
||||
hcchar = dwc2_readl(hsotg, HCCHAR(chnum));
|
||||
hcsplt = dwc2_readl(hsotg, HCSPLT(chnum));
|
||||
hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
|
||||
hc_dma = dwc2_readl(hsotg, HCDMA(chnum));
|
||||
|
||||
dev_err(hsotg->dev, "AHB ERROR, Channel %d\n", chnum);
|
||||
dev_err(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", hcchar, hcsplt);
|
||||
|
@ -1776,10 +1776,10 @@ static bool dwc2_halt_status_ok(struct dwc2_hsotg *hsotg,
|
|||
* This code is here only as a check. This condition should
|
||||
* never happen. Ignore the halt if it does occur.
|
||||
*/
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chnum));
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(chnum));
|
||||
hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chnum));
|
||||
hcchar = dwc2_readl(hsotg, HCCHAR(chnum));
|
||||
hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
|
||||
hcintmsk = dwc2_readl(hsotg, HCINTMSK(chnum));
|
||||
hcsplt = dwc2_readl(hsotg, HCSPLT(chnum));
|
||||
dev_dbg(hsotg->dev,
|
||||
"%s: chan->halt_status DWC2_HC_XFER_NO_HALT_STATUS,\n",
|
||||
__func__);
|
||||
|
@ -1803,7 +1803,7 @@ static bool dwc2_halt_status_ok(struct dwc2_hsotg *hsotg,
|
|||
* when the halt interrupt occurs. Halt the channel again if it does
|
||||
* occur.
|
||||
*/
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chnum));
|
||||
hcchar = dwc2_readl(hsotg, HCCHAR(chnum));
|
||||
if (hcchar & HCCHAR_CHDIS) {
|
||||
dev_warn(hsotg->dev,
|
||||
"%s: hcchar.chdis set unexpectedly, hcchar 0x%08x, trying to halt again\n",
|
||||
|
@ -1863,7 +1863,7 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg,
|
|||
return;
|
||||
}
|
||||
|
||||
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(chnum));
|
||||
hcintmsk = dwc2_readl(hsotg, HCINTMSK(chnum));
|
||||
|
||||
if (chan->hcint & HCINTMSK_XFERCOMPL) {
|
||||
/*
|
||||
|
@ -1958,7 +1958,7 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg,
|
|||
dev_err(hsotg->dev,
|
||||
"hcint 0x%08x, intsts 0x%08x\n",
|
||||
chan->hcint,
|
||||
dwc2_readl(hsotg->regs + GINTSTS));
|
||||
dwc2_readl(hsotg, GINTSTS));
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
@ -2031,11 +2031,11 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)
|
|||
|
||||
chan = hsotg->hc_ptr_array[chnum];
|
||||
|
||||
hcint = dwc2_readl(hsotg->regs + HCINT(chnum));
|
||||
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(chnum));
|
||||
hcint = dwc2_readl(hsotg, HCINT(chnum));
|
||||
hcintmsk = dwc2_readl(hsotg, HCINTMSK(chnum));
|
||||
if (!chan) {
|
||||
dev_err(hsotg->dev, "## hc_ptr_array for channel is NULL ##\n");
|
||||
dwc2_writel(hcint, hsotg->regs + HCINT(chnum));
|
||||
dwc2_writel(hsotg, hcint, HCINT(chnum));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2047,7 +2047,7 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)
|
|||
hcint, hcintmsk, hcint & hcintmsk);
|
||||
}
|
||||
|
||||
dwc2_writel(hcint, hsotg->regs + HCINT(chnum));
|
||||
dwc2_writel(hsotg, hcint, HCINT(chnum));
|
||||
|
||||
/*
|
||||
* If we got an interrupt after someone called
|
||||
|
@ -2182,7 +2182,7 @@ static void dwc2_hc_intr(struct dwc2_hsotg *hsotg)
|
|||
int i;
|
||||
struct dwc2_host_chan *chan, *chan_tmp;
|
||||
|
||||
haint = dwc2_readl(hsotg->regs + HAINT);
|
||||
haint = dwc2_readl(hsotg, HAINT);
|
||||
if (dbg_perio()) {
|
||||
dev_vdbg(hsotg->dev, "%s()\n", __func__);
|
||||
|
||||
|
@ -2266,8 +2266,8 @@ irqreturn_t dwc2_handle_hcd_intr(struct dwc2_hsotg *hsotg)
|
|||
"DWC OTG HCD Finished Servicing Interrupts\n");
|
||||
dev_vdbg(hsotg->dev,
|
||||
"DWC OTG HCD gintsts=0x%08x gintmsk=0x%08x\n",
|
||||
dwc2_readl(hsotg->regs + GINTSTS),
|
||||
dwc2_readl(hsotg->regs + GINTMSK));
|
||||
dwc2_readl(hsotg, GINTSTS),
|
||||
dwc2_readl(hsotg, GINTMSK));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1510,7 +1510,7 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
|
|||
bool ep_is_in = !!dwc2_hcd_is_pipe_in(&urb->pipe_info);
|
||||
bool ep_is_isoc = (ep_type == USB_ENDPOINT_XFER_ISOC);
|
||||
bool ep_is_int = (ep_type == USB_ENDPOINT_XFER_INT);
|
||||
u32 hprt = dwc2_readl(hsotg->regs + HPRT0);
|
||||
u32 hprt = dwc2_readl(hsotg, HPRT0);
|
||||
u32 prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
|
||||
bool do_split = (prtspd == HPRT0_SPD_HIGH_SPEED &&
|
||||
dev_speed != USB_SPEED_HIGH);
|
||||
|
@ -1747,9 +1747,9 @@ int dwc2_hcd_qh_add(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
|
|||
if (status)
|
||||
return status;
|
||||
if (!hsotg->periodic_qh_count) {
|
||||
intr_mask = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
intr_mask = dwc2_readl(hsotg, GINTMSK);
|
||||
intr_mask |= GINTSTS_SOF;
|
||||
dwc2_writel(intr_mask, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(hsotg, intr_mask, GINTMSK);
|
||||
}
|
||||
hsotg->periodic_qh_count++;
|
||||
|
||||
|
@ -1788,9 +1788,9 @@ void dwc2_hcd_qh_unlink(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
|
|||
hsotg->periodic_qh_count--;
|
||||
if (!hsotg->periodic_qh_count &&
|
||||
!hsotg->params.dma_desc_enable) {
|
||||
intr_mask = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
intr_mask = dwc2_readl(hsotg, GINTMSK);
|
||||
intr_mask &= ~GINTSTS_SOF;
|
||||
dwc2_writel(intr_mask, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(hsotg, intr_mask, GINTMSK);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -654,8 +654,8 @@ static void dwc2_get_host_hwparams(struct dwc2_hsotg *hsotg)
|
|||
|
||||
dwc2_force_mode(hsotg, true);
|
||||
|
||||
gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ);
|
||||
hptxfsiz = dwc2_readl(hsotg->regs + HPTXFSIZ);
|
||||
gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ);
|
||||
hptxfsiz = dwc2_readl(hsotg, HPTXFSIZ);
|
||||
|
||||
hw->host_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >>
|
||||
FIFOSIZE_DEPTH_SHIFT;
|
||||
|
@ -679,13 +679,13 @@ static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg)
|
|||
|
||||
dwc2_force_mode(hsotg, false);
|
||||
|
||||
gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ);
|
||||
gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ);
|
||||
|
||||
fifo_count = dwc2_hsotg_tx_fifo_count(hsotg);
|
||||
|
||||
for (fifo = 1; fifo <= fifo_count; fifo++) {
|
||||
hw->g_tx_fifo_size[fifo] =
|
||||
(dwc2_readl(hsotg->regs + DPTXFSIZN(fifo)) &
|
||||
(dwc2_readl(hsotg, DPTXFSIZN(fifo)) &
|
||||
FIFOSIZE_DEPTH_MASK) >> FIFOSIZE_DEPTH_SHIFT;
|
||||
}
|
||||
|
||||
|
@ -713,7 +713,7 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
|
|||
* 0x45f4xxxx, 0x5531xxxx or 0x5532xxxx
|
||||
*/
|
||||
|
||||
hw->snpsid = dwc2_readl(hsotg->regs + GSNPSID);
|
||||
hw->snpsid = dwc2_readl(hsotg, GSNPSID);
|
||||
if ((hw->snpsid & GSNPSID_ID_MASK) != DWC2_OTG_ID &&
|
||||
(hw->snpsid & GSNPSID_ID_MASK) != DWC2_FS_IOT_ID &&
|
||||
(hw->snpsid & GSNPSID_ID_MASK) != DWC2_HS_IOT_ID) {
|
||||
|
@ -726,11 +726,11 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
|
|||
hw->snpsid >> 12 & 0xf, hw->snpsid >> 8 & 0xf,
|
||||
hw->snpsid >> 4 & 0xf, hw->snpsid & 0xf, hw->snpsid);
|
||||
|
||||
hwcfg1 = dwc2_readl(hsotg->regs + GHWCFG1);
|
||||
hwcfg2 = dwc2_readl(hsotg->regs + GHWCFG2);
|
||||
hwcfg3 = dwc2_readl(hsotg->regs + GHWCFG3);
|
||||
hwcfg4 = dwc2_readl(hsotg->regs + GHWCFG4);
|
||||
grxfsiz = dwc2_readl(hsotg->regs + GRXFSIZ);
|
||||
hwcfg1 = dwc2_readl(hsotg, GHWCFG1);
|
||||
hwcfg2 = dwc2_readl(hsotg, GHWCFG2);
|
||||
hwcfg3 = dwc2_readl(hsotg, GHWCFG3);
|
||||
hwcfg4 = dwc2_readl(hsotg, GHWCFG4);
|
||||
grxfsiz = dwc2_readl(hsotg, GRXFSIZ);
|
||||
|
||||
/* hwcfg1 */
|
||||
hw->dev_ep_dirs = hwcfg1;
|
||||
|
|
Загрузка…
Ссылка в новой задаче