Commit f25c42b8 authored by Gevorg Sahakyan's avatar Gevorg Sahakyan Committed by Felipe Balbi

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: default avatarGevorg Sahakyan <sahakyan@synopsys.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent c31d983b
...@@ -73,17 +73,17 @@ int dwc2_backup_global_registers(struct dwc2_hsotg *hsotg) ...@@ -73,17 +73,17 @@ int dwc2_backup_global_registers(struct dwc2_hsotg *hsotg)
/* Backup global regs */ /* Backup global regs */
gr = &hsotg->gr_backup; gr = &hsotg->gr_backup;
gr->gotgctl = dwc2_readl(hsotg->regs + GOTGCTL); gr->gotgctl = dwc2_readl(hsotg, GOTGCTL);
gr->gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gr->gintmsk = dwc2_readl(hsotg, GINTMSK);
gr->gahbcfg = dwc2_readl(hsotg->regs + GAHBCFG); gr->gahbcfg = dwc2_readl(hsotg, GAHBCFG);
gr->gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG); gr->gusbcfg = dwc2_readl(hsotg, GUSBCFG);
gr->grxfsiz = dwc2_readl(hsotg->regs + GRXFSIZ); gr->grxfsiz = dwc2_readl(hsotg, GRXFSIZ);
gr->gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ); gr->gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ);
gr->gdfifocfg = dwc2_readl(hsotg->regs + GDFIFOCFG); gr->gdfifocfg = dwc2_readl(hsotg, GDFIFOCFG);
gr->pcgcctl1 = dwc2_readl(hsotg->regs + PCGCCTL1); gr->pcgcctl1 = dwc2_readl(hsotg, PCGCCTL1);
gr->glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG); gr->glpmcfg = dwc2_readl(hsotg, GLPMCFG);
gr->gi2cctl = dwc2_readl(hsotg->regs + GI2CCTL); gr->gi2cctl = dwc2_readl(hsotg, GI2CCTL);
gr->pcgcctl = dwc2_readl(hsotg->regs + PCGCTL); gr->pcgcctl = dwc2_readl(hsotg, PCGCTL);
gr->valid = true; gr->valid = true;
return 0; return 0;
...@@ -111,18 +111,18 @@ int dwc2_restore_global_registers(struct dwc2_hsotg *hsotg) ...@@ -111,18 +111,18 @@ int dwc2_restore_global_registers(struct dwc2_hsotg *hsotg)
} }
gr->valid = false; gr->valid = false;
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS); dwc2_writel(hsotg, 0xffffffff, GINTSTS);
dwc2_writel(gr->gotgctl, hsotg->regs + GOTGCTL); dwc2_writel(hsotg, gr->gotgctl, GOTGCTL);
dwc2_writel(gr->gintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, gr->gintmsk, GINTMSK);
dwc2_writel(gr->gusbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG);
dwc2_writel(gr->gahbcfg, hsotg->regs + GAHBCFG); dwc2_writel(hsotg, gr->gahbcfg, GAHBCFG);
dwc2_writel(gr->grxfsiz, hsotg->regs + GRXFSIZ); dwc2_writel(hsotg, gr->grxfsiz, GRXFSIZ);
dwc2_writel(gr->gnptxfsiz, hsotg->regs + GNPTXFSIZ); dwc2_writel(hsotg, gr->gnptxfsiz, GNPTXFSIZ);
dwc2_writel(gr->gdfifocfg, hsotg->regs + GDFIFOCFG); dwc2_writel(hsotg, gr->gdfifocfg, GDFIFOCFG);
dwc2_writel(gr->pcgcctl1, hsotg->regs + PCGCCTL1); dwc2_writel(hsotg, gr->pcgcctl1, PCGCCTL1);
dwc2_writel(gr->glpmcfg, hsotg->regs + GLPMCFG); dwc2_writel(hsotg, gr->glpmcfg, GLPMCFG);
dwc2_writel(gr->pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, gr->pcgcctl, PCGCTL);
dwc2_writel(gr->gi2cctl, hsotg->regs + GI2CCTL); dwc2_writel(hsotg, gr->gi2cctl, GI2CCTL);
return 0; return 0;
} }
...@@ -141,17 +141,17 @@ int dwc2_exit_partial_power_down(struct dwc2_hsotg *hsotg, bool restore) ...@@ -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) if (hsotg->params.power_down != DWC2_POWER_DOWN_PARAM_PARTIAL)
return -ENOTSUPP; return -ENOTSUPP;
pcgcctl = dwc2_readl(hsotg->regs + PCGCTL); pcgcctl = dwc2_readl(hsotg, PCGCTL);
pcgcctl &= ~PCGCTL_STOPPCLK; 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; 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; pcgcctl &= ~PCGCTL_RSTPDWNMODULE;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
udelay(100); udelay(100);
if (restore) { if (restore) {
...@@ -222,21 +222,21 @@ int dwc2_enter_partial_power_down(struct dwc2_hsotg *hsotg) ...@@ -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 any pending interrupts since dwc2 will not be able to
* clear them after entering partial_power_down. * 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 */ /* Put the controller in low power state */
pcgcctl = dwc2_readl(hsotg->regs + PCGCTL); pcgcctl = dwc2_readl(hsotg, PCGCTL);
pcgcctl |= PCGCTL_PWRCLMP; pcgcctl |= PCGCTL_PWRCLMP;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
ndelay(20); ndelay(20);
pcgcctl |= PCGCTL_RSTPDWNMODULE; pcgcctl |= PCGCTL_RSTPDWNMODULE;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
ndelay(20); ndelay(20);
pcgcctl |= PCGCTL_STOPPCLK; pcgcctl |= PCGCTL_STOPPCLK;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
return ret; return ret;
} }
...@@ -272,39 +272,39 @@ static void dwc2_restore_essential_regs(struct dwc2_hsotg *hsotg, int rmode, ...@@ -272,39 +272,39 @@ static void dwc2_restore_essential_regs(struct dwc2_hsotg *hsotg, int rmode,
if (!(pcgcctl & PCGCTL_P2HD_DEV_ENUM_SPD_MASK)) if (!(pcgcctl & PCGCTL_P2HD_DEV_ENUM_SPD_MASK))
pcgcctl |= BIT(17); pcgcctl |= BIT(17);
} }
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
/* Umnask global Interrupt in GAHBCFG and restore it */ /* 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 */ /* Clear all pending interupts */
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS); dwc2_writel(hsotg, 0xffffffff, GINTSTS);
/* Unmask restore done interrupt */ /* Unmask restore done interrupt */
dwc2_writel(GINTSTS_RESTOREDONE, hsotg->regs + GINTMSK); dwc2_writel(hsotg, GINTSTS_RESTOREDONE, GINTMSK);
/* Restore GUSBCFG and HCFG/DCFG */ /* Restore GUSBCFG and HCFG/DCFG */
dwc2_writel(gr->gusbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG);
if (is_host) { if (is_host) {
dwc2_writel(hr->hcfg, hsotg->regs + HCFG); dwc2_writel(hsotg, hr->hcfg, HCFG);
if (rmode) if (rmode)
pcgcctl |= PCGCTL_RESTOREMODE; pcgcctl |= PCGCTL_RESTOREMODE;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
udelay(10); udelay(10);
pcgcctl |= PCGCTL_ESS_REG_RESTORED; pcgcctl |= PCGCTL_ESS_REG_RESTORED;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
udelay(10); udelay(10);
} else { } else {
dwc2_writel(dr->dcfg, hsotg->regs + DCFG); dwc2_writel(hsotg, dr->dcfg, DCFG);
if (!rmode) if (!rmode)
pcgcctl |= PCGCTL_RESTOREMODE | PCGCTL_RSTPDWNMODULE; pcgcctl |= PCGCTL_RESTOREMODE | PCGCTL_RSTPDWNMODULE;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
udelay(10); udelay(10);
pcgcctl |= PCGCTL_ESS_REG_RESTORED; pcgcctl |= PCGCTL_ESS_REG_RESTORED;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
udelay(10); udelay(10);
} }
} }
...@@ -322,42 +322,42 @@ void dwc2_hib_restore_common(struct dwc2_hsotg *hsotg, int rem_wakeup, ...@@ -322,42 +322,42 @@ void dwc2_hib_restore_common(struct dwc2_hsotg *hsotg, int rem_wakeup,
u32 gpwrdn; u32 gpwrdn;
/* Switch-on voltage to the core */ /* Switch-on voltage to the core */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn &= ~GPWRDN_PWRDNSWTCH; gpwrdn &= ~GPWRDN_PWRDNSWTCH;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Reset core */ /* Reset core */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn &= ~GPWRDN_PWRDNRSTN; gpwrdn &= ~GPWRDN_PWRDNRSTN;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Enable restore from PMU */ /* Enable restore from PMU */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_RESTORE; gpwrdn |= GPWRDN_RESTORE;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Disable Power Down Clamp */ /* Disable Power Down Clamp */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn &= ~GPWRDN_PWRDNCLMP; gpwrdn &= ~GPWRDN_PWRDNCLMP;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(50); udelay(50);
if (!is_host && rem_wakeup) if (!is_host && rem_wakeup)
udelay(70); udelay(70);
/* Deassert reset core */ /* Deassert reset core */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_PWRDNRSTN; gpwrdn |= GPWRDN_PWRDNRSTN;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Disable PMU interrupt */ /* Disable PMU interrupt */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn &= ~GPWRDN_PMUINTSEL; gpwrdn &= ~GPWRDN_PMUINTSEL;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Set Restore Essential Regs bit in PCGCCTL register */ /* Set Restore Essential Regs bit in PCGCCTL register */
...@@ -431,7 +431,7 @@ static bool dwc2_iddig_filter_enabled(struct dwc2_hsotg *hsotg) ...@@ -431,7 +431,7 @@ static bool dwc2_iddig_filter_enabled(struct dwc2_hsotg *hsotg)
return false; return false;
/* Check if core configuration includes the IDDIG filter. */ /* 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)) if (!(ghwcfg4 & GHWCFG4_IDDIG_FILT_EN))
return false; return false;
...@@ -439,9 +439,9 @@ static bool dwc2_iddig_filter_enabled(struct dwc2_hsotg *hsotg) ...@@ -439,9 +439,9 @@ static bool dwc2_iddig_filter_enabled(struct dwc2_hsotg *hsotg)
* Check if the IDDIG debounce filter is bypassed. Available * Check if the IDDIG debounce filter is bypassed. Available
* in core version >= 3.10a. * in core version >= 3.10a.
*/ */
gsnpsid = dwc2_readl(hsotg->regs + GSNPSID); gsnpsid = dwc2_readl(hsotg, GSNPSID);
if (gsnpsid >= DWC2_CORE_REV_3_10a) { 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) if (gotgctl & GOTGCTL_DBNCE_FLTR_BYPASS)
return false; return false;
...@@ -510,8 +510,8 @@ int dwc2_core_reset(struct dwc2_hsotg *hsotg, bool skip_wait) ...@@ -510,8 +510,8 @@ int dwc2_core_reset(struct dwc2_hsotg *hsotg, bool skip_wait)
* reset and account for this delay after the reset. * reset and account for this delay after the reset.
*/ */
if (dwc2_iddig_filter_enabled(hsotg)) { if (dwc2_iddig_filter_enabled(hsotg)) {
u32 gotgctl = dwc2_readl(hsotg->regs + GOTGCTL); u32 gotgctl = dwc2_readl(hsotg, GOTGCTL);
u32 gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG); u32 gusbcfg = dwc2_readl(hsotg, GUSBCFG);
if (!(gotgctl & GOTGCTL_CONID_B) || if (!(gotgctl & GOTGCTL_CONID_B) ||
(gusbcfg & GUSBCFG_FORCEHOSTMODE)) { (gusbcfg & GUSBCFG_FORCEHOSTMODE)) {
...@@ -520,9 +520,9 @@ int dwc2_core_reset(struct dwc2_hsotg *hsotg, bool skip_wait) ...@@ -520,9 +520,9 @@ int dwc2_core_reset(struct dwc2_hsotg *hsotg, bool skip_wait)
} }
/* Core Soft Reset */ /* Core Soft Reset */
greset = dwc2_readl(hsotg->regs + GRSTCTL); greset = dwc2_readl(hsotg, GRSTCTL);
greset |= GRSTCTL_CSFTRST; 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)) { if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_CSFTRST, 50)) {
dev_warn(hsotg->dev, "%s: HANG! Soft Reset timeout GRSTCTL GRSTCTL_CSFTRST\n", 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) ...@@ -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)) if (WARN_ON(!host && hsotg->dr_mode == USB_DR_MODE_HOST))
return; return;
gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG); gusbcfg = dwc2_readl(hsotg, GUSBCFG);
set = host ? GUSBCFG_FORCEHOSTMODE : GUSBCFG_FORCEDEVMODE; set = host ? GUSBCFG_FORCEHOSTMODE : GUSBCFG_FORCEDEVMODE;
clear = host ? GUSBCFG_FORCEDEVMODE : GUSBCFG_FORCEHOSTMODE; clear = host ? GUSBCFG_FORCEDEVMODE : GUSBCFG_FORCEHOSTMODE;
gusbcfg &= ~clear; gusbcfg &= ~clear;
gusbcfg |= set; gusbcfg |= set;
dwc2_writel(gusbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, gusbcfg, GUSBCFG);
dwc2_wait_for_mode(hsotg, host); dwc2_wait_for_mode(hsotg, host);
return; return;
...@@ -627,10 +627,10 @@ static void dwc2_clear_force_mode(struct dwc2_hsotg *hsotg) ...@@ -627,10 +627,10 @@ static void dwc2_clear_force_mode(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, "Clearing force mode bits\n"); 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_FORCEHOSTMODE;
gusbcfg &= ~GUSBCFG_FORCEDEVMODE; gusbcfg &= ~GUSBCFG_FORCEDEVMODE;
dwc2_writel(gusbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, gusbcfg, GUSBCFG);
if (dwc2_iddig_filter_enabled(hsotg)) if (dwc2_iddig_filter_enabled(hsotg))
msleep(100); msleep(100);
...@@ -670,11 +670,11 @@ void dwc2_force_dr_mode(struct dwc2_hsotg *hsotg) ...@@ -670,11 +670,11 @@ void dwc2_force_dr_mode(struct dwc2_hsotg *hsotg)
void dwc2_enable_acg(struct dwc2_hsotg *hsotg) void dwc2_enable_acg(struct dwc2_hsotg *hsotg)
{ {
if (hsotg->params.acg_enable) { 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"); dev_dbg(hsotg->dev, "Enabling Active Clock Gating\n");
pcgcctl1 |= PCGCCTL1_GATEEN; 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) ...@@ -695,56 +695,57 @@ void dwc2_dump_host_registers(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, "Host Global Registers\n"); dev_dbg(hsotg->dev, "Host Global Registers\n");
addr = hsotg->regs + HCFG; addr = hsotg->regs + HCFG;
dev_dbg(hsotg->dev, "HCFG @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + HFIR;
dev_dbg(hsotg->dev, "HFIR @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + HFNUM;
dev_dbg(hsotg->dev, "HFNUM @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + HPTXSTS;
dev_dbg(hsotg->dev, "HPTXSTS @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + HAINT;
dev_dbg(hsotg->dev, "HAINT @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + HAINTMSK;
dev_dbg(hsotg->dev, "HAINTMSK @0x%08lX : 0x%08X\n", 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) { if (hsotg->params.dma_desc_enable) {
addr = hsotg->regs + HFLBADDR; addr = hsotg->regs + HFLBADDR;
dev_dbg(hsotg->dev, "HFLBADDR @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + HPRT0;
dev_dbg(hsotg->dev, "HPRT0 @0x%08lX : 0x%08X\n", 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++) { for (i = 0; i < hsotg->params.host_channels; i++) {
dev_dbg(hsotg->dev, "Host Channel %d Specific Registers\n", i); dev_dbg(hsotg->dev, "Host Channel %d Specific Registers\n", i);
addr = hsotg->regs + HCCHAR(i); addr = hsotg->regs + HCCHAR(i);
dev_dbg(hsotg->dev, "HCCHAR @0x%08lX : 0x%08X\n", 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); addr = hsotg->regs + HCSPLT(i);
dev_dbg(hsotg->dev, "HCSPLT @0x%08lX : 0x%08X\n", 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); addr = hsotg->regs + HCINT(i);
dev_dbg(hsotg->dev, "HCINT @0x%08lX : 0x%08X\n", 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); addr = hsotg->regs + HCINTMSK(i);
dev_dbg(hsotg->dev, "HCINTMSK @0x%08lX : 0x%08X\n", 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); addr = hsotg->regs + HCTSIZ(i);
dev_dbg(hsotg->dev, "HCTSIZ @0x%08lX : 0x%08X\n", 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); addr = hsotg->regs + HCDMA(i);
dev_dbg(hsotg->dev, "HCDMA @0x%08lX : 0x%08X\n", 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) { if (hsotg->params.dma_desc_enable) {
addr = hsotg->regs + HCDMAB(i); addr = hsotg->regs + HCDMAB(i);
dev_dbg(hsotg->dev, "HCDMAB @0x%08lX : 0x%08X\n", 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 #endif
...@@ -766,80 +767,80 @@ void dwc2_dump_global_registers(struct dwc2_hsotg *hsotg) ...@@ -766,80 +767,80 @@ void dwc2_dump_global_registers(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, "Core Global Registers\n"); dev_dbg(hsotg->dev, "Core Global Registers\n");
addr = hsotg->regs + GOTGCTL; addr = hsotg->regs + GOTGCTL;
dev_dbg(hsotg->dev, "GOTGCTL @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GOTGINT;
dev_dbg(hsotg->dev, "GOTGINT @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GAHBCFG;
dev_dbg(hsotg->dev, "GAHBCFG @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GUSBCFG;
dev_dbg(hsotg->dev, "GUSBCFG @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GRSTCTL;
dev_dbg(hsotg->dev, "GRSTCTL @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GINTSTS;
dev_dbg(hsotg->dev, "GINTSTS @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GINTMSK;
dev_dbg(hsotg->dev, "GINTMSK @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GRXSTSR;
dev_dbg(hsotg->dev, "GRXSTSR @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GRXFSIZ;
dev_dbg(hsotg->dev, "GRXFSIZ @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GNPTXFSIZ;
dev_dbg(hsotg->dev, "GNPTXFSIZ @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GNPTXSTS;
dev_dbg(hsotg->dev, "GNPTXSTS @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GI2CCTL;
dev_dbg(hsotg->dev, "GI2CCTL @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GPVNDCTL;
dev_dbg(hsotg->dev, "GPVNDCTL @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GGPIO;
dev_dbg(hsotg->dev, "GGPIO @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GUID;
dev_dbg(hsotg->dev, "GUID @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GSNPSID;
dev_dbg(hsotg->dev, "GSNPSID @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GHWCFG1;
dev_dbg(hsotg->dev, "GHWCFG1 @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GHWCFG2;
dev_dbg(hsotg->dev, "GHWCFG2 @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GHWCFG3;
dev_dbg(hsotg->dev, "GHWCFG3 @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GHWCFG4;
dev_dbg(hsotg->dev, "GHWCFG4 @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GLPMCFG;
dev_dbg(hsotg->dev, "GLPMCFG @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GPWRDN;
dev_dbg(hsotg->dev, "GPWRDN @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + GDFIFOCFG;
dev_dbg(hsotg->dev, "GDFIFOCFG @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + HPTXFSIZ;
dev_dbg(hsotg->dev, "HPTXFSIZ @0x%08lX : 0x%08X\n", 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; addr = hsotg->regs + PCGCTL;
dev_dbg(hsotg->dev, "PCGCTL @0x%08lX : 0x%08X\n", dev_dbg(hsotg->dev, "PCGCTL @0x%08lX : 0x%08X\n",
(unsigned long)addr, dwc2_readl(addr)); (unsigned long)addr, dwc2_readl(hsotg, PCGCTL));
#endif #endif
} }
...@@ -862,7 +863,7 @@ void dwc2_flush_tx_fifo(struct dwc2_hsotg *hsotg, const int num) ...@@ -862,7 +863,7 @@ void dwc2_flush_tx_fifo(struct dwc2_hsotg *hsotg, const int num)
greset = GRSTCTL_TXFFLSH; greset = GRSTCTL_TXFFLSH;
greset |= num << GRSTCTL_TXFNUM_SHIFT & GRSTCTL_TXFNUM_MASK; 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)) if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_TXFFLSH, 10000))
dev_warn(hsotg->dev, "%s: HANG! timeout GRSTCTL GRSTCTL_TXFFLSH\n", dev_warn(hsotg->dev, "%s: HANG! timeout GRSTCTL GRSTCTL_TXFFLSH\n",
...@@ -889,7 +890,7 @@ void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg) ...@@ -889,7 +890,7 @@ void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg)
__func__); __func__);
greset = GRSTCTL_RXFFLSH; greset = GRSTCTL_RXFFLSH;
dwc2_writel(greset, hsotg->regs + GRSTCTL); dwc2_writel(hsotg, greset, GRSTCTL);
/* Wait for RxFIFO flush done */ /* Wait for RxFIFO flush done */
if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_RXFFLSH, 10000)) if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_RXFFLSH, 10000))
...@@ -902,7 +903,7 @@ void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg) ...@@ -902,7 +903,7 @@ void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg)
bool dwc2_is_controller_alive(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; return false;
else else
return true; return true;
...@@ -916,10 +917,10 @@ bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg) ...@@ -916,10 +917,10 @@ bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg)
*/ */
void dwc2_enable_global_interrupts(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; 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) ...@@ -930,16 +931,16 @@ void dwc2_enable_global_interrupts(struct dwc2_hsotg *hsotg)
*/ */
void dwc2_disable_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; ahbcfg &= ~GAHBCFG_GLBL_INTR_EN;
dwc2_writel(ahbcfg, hsotg->regs + GAHBCFG); dwc2_writel(hsotg, ahbcfg, GAHBCFG);
} }
/* Returns the controller's GHWCFG2.OTG_MODE. */ /* Returns the controller's GHWCFG2.OTG_MODE. */
unsigned int dwc2_op_mode(struct dwc2_hsotg *hsotg) 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) >> return (ghwcfg2 & GHWCFG2_OP_MODE_MASK) >>
GHWCFG2_OP_MODE_SHIFT; GHWCFG2_OP_MODE_SHIFT;
...@@ -988,7 +989,7 @@ int dwc2_hsotg_wait_bit_set(struct dwc2_hsotg *hsotg, u32 offset, u32 mask, ...@@ -988,7 +989,7 @@ int dwc2_hsotg_wait_bit_set(struct dwc2_hsotg *hsotg, u32 offset, u32 mask,
u32 i; u32 i;
for (i = 0; i < timeout; i++) { for (i = 0; i < timeout; i++) {
if (dwc2_readl(hsotg->regs + offset) & mask) if (dwc2_readl(hsotg, offset) & mask)
return 0; return 0;
udelay(1); udelay(1);
} }
...@@ -1011,7 +1012,7 @@ int dwc2_hsotg_wait_bit_clear(struct dwc2_hsotg *hsotg, u32 offset, u32 mask, ...@@ -1011,7 +1012,7 @@ int dwc2_hsotg_wait_bit_clear(struct dwc2_hsotg *hsotg, u32 offset, u32 mask,
u32 i; u32 i;
for (i = 0; i < timeout; i++) { for (i = 0; i < timeout; i++) {
if (!(dwc2_readl(hsotg->regs + offset) & mask)) if (!(dwc2_readl(hsotg, offset) & mask))
return 0; return 0;
udelay(1); udelay(1);
} }
......
...@@ -1172,9 +1172,9 @@ struct dwc2_hsotg { ...@@ -1172,9 +1172,9 @@ struct dwc2_hsotg {
* writes. This set of operations was added specifically for MIPS and * writes. This set of operations was added specifically for MIPS and
* should only be used there. * 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 /* In order to preserve endianness __raw_* operation is used. Therefore
* a barrier is needed to ensure IO access is not re-ordered across * 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) ...@@ -1184,9 +1184,9 @@ static inline u32 dwc2_readl(const void __iomem *addr)
return value; 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 * In order to preserve endianness __raw_* operation is used. Therefore
...@@ -1195,22 +1195,23 @@ static inline void dwc2_writel(u32 value, void __iomem *addr) ...@@ -1195,22 +1195,23 @@ static inline void dwc2_writel(u32 value, void __iomem *addr)
*/ */
mb(); mb();
#ifdef DWC2_LOG_WRITES #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
} }
#else #else
/* Normal architectures just use readl/write */ /* 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 #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
} }
#endif #endif
...@@ -1320,12 +1321,12 @@ bool dwc2_hw_is_device(struct dwc2_hsotg *hsotg); ...@@ -1320,12 +1321,12 @@ bool dwc2_hw_is_device(struct dwc2_hsotg *hsotg);
*/ */
static inline int dwc2_is_host_mode(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) 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) ...@@ -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) 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) { if (hprt0 & HPRT0_ENACHG) {
hprt0 &= ~HPRT0_ENA; 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) ...@@ -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) static void dwc2_handle_mode_mismatch_intr(struct dwc2_hsotg *hsotg)
{ {
/* Clear interrupt */ /* 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", dev_warn(hsotg->dev, "Mode Mismatch Interrupt: currently in %s mode\n",
dwc2_is_host_mode(hsotg) ? "Host" : "Device"); dwc2_is_host_mode(hsotg) ? "Host" : "Device");
...@@ -115,8 +115,8 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg) ...@@ -115,8 +115,8 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
u32 gotgctl; u32 gotgctl;
u32 gintmsk; u32 gintmsk;
gotgint = dwc2_readl(hsotg->regs + GOTGINT); gotgint = dwc2_readl(hsotg, GOTGINT);
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL); gotgctl = dwc2_readl(hsotg, GOTGCTL);
dev_dbg(hsotg->dev, "++OTG Interrupt gotgint=%0x [%s]\n", gotgint, dev_dbg(hsotg->dev, "++OTG Interrupt gotgint=%0x [%s]\n", gotgint,
dwc2_op_state_str(hsotg)); dwc2_op_state_str(hsotg));
...@@ -124,7 +124,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg) ...@@ -124,7 +124,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
" ++OTG Interrupt: Session End Detected++ (%s)\n", " ++OTG Interrupt: Session End Detected++ (%s)\n",
dwc2_op_state_str(hsotg)); dwc2_op_state_str(hsotg));
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL); gotgctl = dwc2_readl(hsotg, GOTGCTL);
if (dwc2_is_device_mode(hsotg)) if (dwc2_is_device_mode(hsotg))
dwc2_hsotg_disconnect(hsotg); dwc2_hsotg_disconnect(hsotg);
...@@ -150,24 +150,24 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg) ...@@ -150,24 +150,24 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
hsotg->lx_state = DWC2_L0; hsotg->lx_state = DWC2_L0;
} }
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL); gotgctl = dwc2_readl(hsotg, GOTGCTL);
gotgctl &= ~GOTGCTL_DEVHNPEN; gotgctl &= ~GOTGCTL_DEVHNPEN;
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL); dwc2_writel(hsotg, gotgctl, GOTGCTL);
} }
if (gotgint & GOTGINT_SES_REQ_SUC_STS_CHNG) { if (gotgint & GOTGINT_SES_REQ_SUC_STS_CHNG) {
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
" ++OTG Interrupt: Session Request Success Status Change++\n"); " ++OTG Interrupt: Session Request Success Status Change++\n");
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL); gotgctl = dwc2_readl(hsotg, GOTGCTL);
if (gotgctl & GOTGCTL_SESREQSCS) { if (gotgctl & GOTGCTL_SESREQSCS) {
if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS && if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS &&
hsotg->params.i2c_enable) { hsotg->params.i2c_enable) {
hsotg->srp_success = 1; hsotg->srp_success = 1;
} else { } else {
/* Clear Session Request */ /* Clear Session Request */
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL); gotgctl = dwc2_readl(hsotg, GOTGCTL);
gotgctl &= ~GOTGCTL_SESREQ; 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) ...@@ -177,7 +177,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
* Print statements during the HNP interrupt handling * Print statements during the HNP interrupt handling
* can cause it to fail * 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 * WA for 3.00a- HW is not setting cur_mode, even sometimes
* this does not help * this does not help
...@@ -197,9 +197,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg) ...@@ -197,9 +197,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
* interrupt does not get handled and Linux * interrupt does not get handled and Linux
* complains loudly. * complains loudly.
*/ */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk &= ~GINTSTS_SOF; gintmsk &= ~GINTSTS_SOF;
dwc2_writel(gintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, gintmsk, GINTMSK);
/* /*
* Call callback function with spin lock * Call callback function with spin lock
...@@ -213,9 +213,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg) ...@@ -213,9 +213,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
hsotg->op_state = OTG_STATE_B_HOST; hsotg->op_state = OTG_STATE_B_HOST;
} }
} else { } else {
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL); gotgctl = dwc2_readl(hsotg, GOTGCTL);
gotgctl &= ~(GOTGCTL_HNPREQ | GOTGCTL_DEVHNPEN); gotgctl &= ~(GOTGCTL_HNPREQ | GOTGCTL_DEVHNPEN);
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL); dwc2_writel(hsotg, gotgctl, GOTGCTL);
dev_dbg(hsotg->dev, "HNP Failed\n"); dev_dbg(hsotg->dev, "HNP Failed\n");
dev_err(hsotg->dev, dev_err(hsotg->dev,
"Device Not Connected/Responding\n"); "Device Not Connected/Responding\n");
...@@ -241,9 +241,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg) ...@@ -241,9 +241,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
hsotg->op_state = OTG_STATE_A_PERIPHERAL; hsotg->op_state = OTG_STATE_A_PERIPHERAL;
} else { } else {
/* Need to disable SOF interrupt immediately */ /* Need to disable SOF interrupt immediately */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk &= ~GINTSTS_SOF; gintmsk &= ~GINTSTS_SOF;
dwc2_writel(gintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, gintmsk, GINTMSK);
spin_unlock(&hsotg->lock); spin_unlock(&hsotg->lock);
dwc2_hcd_start(hsotg); dwc2_hcd_start(hsotg);
spin_lock(&hsotg->lock); spin_lock(&hsotg->lock);
...@@ -258,7 +258,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg) ...@@ -258,7 +258,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, " ++OTG Interrupt: Debounce Done++\n"); dev_dbg(hsotg->dev, " ++OTG Interrupt: Debounce Done++\n");
/* Clear GOTGINT */ /* 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) ...@@ -276,12 +276,12 @@ static void dwc2_handle_conn_id_status_change_intr(struct dwc2_hsotg *hsotg)
u32 gintmsk; u32 gintmsk;
/* Clear interrupt */ /* Clear interrupt */
dwc2_writel(GINTSTS_CONIDSTSCHNG, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_CONIDSTSCHNG, GINTSTS);
/* Need to disable SOF interrupt immediately */ /* Need to disable SOF interrupt immediately */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk &= ~GINTSTS_SOF; 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", dev_dbg(hsotg->dev, " ++Connector ID Status Change Interrupt++ (%s)\n",
dwc2_is_host_mode(hsotg) ? "Host" : "Device"); dwc2_is_host_mode(hsotg) ? "Host" : "Device");
...@@ -314,7 +314,7 @@ static void dwc2_handle_session_req_intr(struct dwc2_hsotg *hsotg) ...@@ -314,7 +314,7 @@ static void dwc2_handle_session_req_intr(struct dwc2_hsotg *hsotg)
int ret; int ret;
/* Clear interrupt */ /* 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", dev_dbg(hsotg->dev, "Session request interrupt - lx_state=%d\n",
hsotg->lx_state); hsotg->lx_state);
...@@ -351,15 +351,15 @@ static void dwc2_wakeup_from_lpm_l1(struct dwc2_hsotg *hsotg) ...@@ -351,15 +351,15 @@ static void dwc2_wakeup_from_lpm_l1(struct dwc2_hsotg *hsotg)
return; return;
} }
glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG); glpmcfg = dwc2_readl(hsotg, GLPMCFG);
if (dwc2_is_device_mode(hsotg)) { if (dwc2_is_device_mode(hsotg)) {
dev_dbg(hsotg->dev, "Exit from L1 state\n"); dev_dbg(hsotg->dev, "Exit from L1 state\n");
glpmcfg &= ~GLPMCFG_ENBLSLPM; glpmcfg &= ~GLPMCFG_ENBLSLPM;
glpmcfg &= ~GLPMCFG_HIRD_THRES_EN; glpmcfg &= ~GLPMCFG_HIRD_THRES_EN;
dwc2_writel(glpmcfg, hsotg->regs + GLPMCFG); dwc2_writel(hsotg, glpmcfg, GLPMCFG);
do { do {
glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG); glpmcfg = dwc2_readl(hsotg, GLPMCFG);
if (!(glpmcfg & (GLPMCFG_COREL1RES_MASK | if (!(glpmcfg & (GLPMCFG_COREL1RES_MASK |
GLPMCFG_L1RESUMEOK | GLPMCFG_SLPSTS))) GLPMCFG_L1RESUMEOK | GLPMCFG_SLPSTS)))
...@@ -398,7 +398,7 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg) ...@@ -398,7 +398,7 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
int ret; int ret;
/* Clear interrupt */ /* 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, "++Resume or Remote Wakeup Detected Interrupt++\n");
dev_dbg(hsotg->dev, "%s lxstate = %d\n", __func__, hsotg->lx_state); 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) ...@@ -410,13 +410,13 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
if (dwc2_is_device_mode(hsotg)) { if (dwc2_is_device_mode(hsotg)) {
dev_dbg(hsotg->dev, "DSTS=0x%0x\n", dev_dbg(hsotg->dev, "DSTS=0x%0x\n",
dwc2_readl(hsotg->regs + DSTS)); dwc2_readl(hsotg, DSTS));
if (hsotg->lx_state == DWC2_L2) { if (hsotg->lx_state == DWC2_L2) {
u32 dctl = dwc2_readl(hsotg->regs + DCTL); u32 dctl = dwc2_readl(hsotg, DCTL);
/* Clear Remote Wakeup Signaling */ /* Clear Remote Wakeup Signaling */
dctl &= ~DCTL_RMTWKUPSIG; dctl &= ~DCTL_RMTWKUPSIG;
dwc2_writel(dctl, hsotg->regs + DCTL); dwc2_writel(hsotg, dctl, DCTL);
ret = dwc2_exit_partial_power_down(hsotg, true); ret = dwc2_exit_partial_power_down(hsotg, true);
if (ret && (ret != -ENOTSUPP)) if (ret && (ret != -ENOTSUPP))
dev_err(hsotg->dev, "exit power_down failed\n"); dev_err(hsotg->dev, "exit power_down failed\n");
...@@ -430,11 +430,11 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg) ...@@ -430,11 +430,11 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
return; return;
if (hsotg->lx_state != DWC2_L1) { if (hsotg->lx_state != DWC2_L1) {
u32 pcgcctl = dwc2_readl(hsotg->regs + PCGCTL); u32 pcgcctl = dwc2_readl(hsotg, PCGCTL);
/* Restart the Phy Clock */ /* Restart the Phy Clock */
pcgcctl &= ~PCGCTL_STOPPCLK; pcgcctl &= ~PCGCTL_STOPPCLK;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
mod_timer(&hsotg->wkp_timer, mod_timer(&hsotg->wkp_timer,
jiffies + msecs_to_jiffies(71)); jiffies + msecs_to_jiffies(71));
} else { } else {
...@@ -450,7 +450,7 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg) ...@@ -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) 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", dev_dbg(hsotg->dev, "++Disconnect Detected Interrupt++ (%s) %s\n",
dwc2_is_host_mode(hsotg) ? "Host" : "Device", dwc2_is_host_mode(hsotg) ? "Host" : "Device",
...@@ -474,7 +474,7 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg) ...@@ -474,7 +474,7 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg)
int ret; int ret;
/* Clear interrupt */ /* Clear interrupt */
dwc2_writel(GINTSTS_USBSUSP, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_USBSUSP, GINTSTS);
dev_dbg(hsotg->dev, "USB SUSPEND\n"); dev_dbg(hsotg->dev, "USB SUSPEND\n");
...@@ -483,7 +483,7 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg) ...@@ -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 * Check the Device status register to determine if the Suspend
* state is active * 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, "%s: DSTS=0x%0x\n", __func__, dsts);
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"DSTS.Suspend Status=%d HWCFG4.Power Optimize=%d HWCFG4.Hibernation=%d\n", "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) ...@@ -563,9 +563,9 @@ static void dwc2_handle_lpm_intr(struct dwc2_hsotg *hsotg)
u32 enslpm; u32 enslpm;
/* Clear interrupt */ /* 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)) { if (!(glpmcfg & GLPMCFG_LPMCAP)) {
dev_err(hsotg->dev, "Unexpected LPM interrupt\n"); dev_err(hsotg->dev, "Unexpected LPM interrupt\n");
...@@ -588,16 +588,16 @@ static void dwc2_handle_lpm_intr(struct dwc2_hsotg *hsotg) ...@@ -588,16 +588,16 @@ static void dwc2_handle_lpm_intr(struct dwc2_hsotg *hsotg)
} else { } else {
dev_dbg(hsotg->dev, "Entering Sleep with L1 Gating\n"); 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; 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) * Examine prt_sleep_sts after TL1TokenTetry period max (10 us)
*/ */
udelay(10); udelay(10);
glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG); glpmcfg = dwc2_readl(hsotg, GLPMCFG);
if (glpmcfg & GLPMCFG_SLPSTS) { if (glpmcfg & GLPMCFG_SLPSTS) {
/* Save the current state */ /* Save the current state */
...@@ -627,9 +627,9 @@ static u32 dwc2_read_common_intr(struct dwc2_hsotg *hsotg) ...@@ -627,9 +627,9 @@ static u32 dwc2_read_common_intr(struct dwc2_hsotg *hsotg)
u32 gahbcfg; u32 gahbcfg;
u32 gintmsk_common = GINTMSK_COMMON; u32 gintmsk_common = GINTMSK_COMMON;
gintsts = dwc2_readl(hsotg->regs + GINTSTS); gintsts = dwc2_readl(hsotg, GINTSTS);
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gahbcfg = dwc2_readl(hsotg->regs + GAHBCFG); gahbcfg = dwc2_readl(hsotg, GAHBCFG);
/* If any common interrupts set */ /* If any common interrupts set */
if (gintsts & gintmsk_common) if (gintsts & gintmsk_common)
...@@ -653,9 +653,9 @@ static void dwc2_handle_gpwrdn_intr(struct dwc2_hsotg *hsotg) ...@@ -653,9 +653,9 @@ static void dwc2_handle_gpwrdn_intr(struct dwc2_hsotg *hsotg)
u32 gpwrdn; u32 gpwrdn;
int linestate; int linestate;
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
/* clear all interrupt */ /* clear all interrupt */
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
linestate = (gpwrdn & GPWRDN_LINESTATE_MASK) >> GPWRDN_LINESTATE_SHIFT; linestate = (gpwrdn & GPWRDN_LINESTATE_MASK) >> GPWRDN_LINESTATE_SHIFT;
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"%s: dwc2_handle_gpwrdwn_intr called gpwrdn= %08x\n", __func__, "%s: dwc2_handle_gpwrdwn_intr called gpwrdn= %08x\n", __func__,
...@@ -668,38 +668,38 @@ static void dwc2_handle_gpwrdn_intr(struct dwc2_hsotg *hsotg) ...@@ -668,38 +668,38 @@ static void dwc2_handle_gpwrdn_intr(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, "%s: GPWRDN_DISCONN_DET\n", __func__); dev_dbg(hsotg->dev, "%s: GPWRDN_DISCONN_DET\n", __func__);
/* Switch-on voltage to the core */ /* Switch-on voltage to the core */
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
gpwrdn_tmp &= ~GPWRDN_PWRDNSWTCH; gpwrdn_tmp &= ~GPWRDN_PWRDNSWTCH;
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
udelay(10); udelay(10);
/* Reset core */ /* Reset core */
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
gpwrdn_tmp &= ~GPWRDN_PWRDNRSTN; gpwrdn_tmp &= ~GPWRDN_PWRDNRSTN;
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
udelay(10); udelay(10);
/* Disable Power Down Clamp */ /* Disable Power Down Clamp */
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
gpwrdn_tmp &= ~GPWRDN_PWRDNCLMP; gpwrdn_tmp &= ~GPWRDN_PWRDNCLMP;
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
udelay(10); udelay(10);
/* Deassert reset core */ /* Deassert reset core */
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
gpwrdn_tmp |= GPWRDN_PWRDNRSTN; gpwrdn_tmp |= GPWRDN_PWRDNRSTN;
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
udelay(10); udelay(10);
/* Disable PMU interrupt */ /* Disable PMU interrupt */
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
gpwrdn_tmp &= ~GPWRDN_PMUINTSEL; gpwrdn_tmp &= ~GPWRDN_PMUINTSEL;
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
/* De-assert Wakeup Logic */ /* De-assert Wakeup Logic */
gpwrdn_tmp = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN);
gpwrdn_tmp &= ~GPWRDN_PMUACTV; gpwrdn_tmp &= ~GPWRDN_PMUACTV;
dwc2_writel(gpwrdn_tmp, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN);
hsotg->hibernated = 0; hsotg->hibernated = 0;
...@@ -780,10 +780,10 @@ irqreturn_t dwc2_handle_common_intr(int irq, void *dev) ...@@ -780,10 +780,10 @@ irqreturn_t dwc2_handle_common_intr(int irq, void *dev)
/* Reading current frame number value in device or host modes. */ /* Reading current frame number value in device or host modes. */
if (dwc2_is_device_mode(hsotg)) 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; & DSTS_SOFFN_MASK) >> DSTS_SOFFN_SHIFT;
else else
hsotg->frame_number = (dwc2_readl(hsotg->regs + HFNUM) hsotg->frame_number = (dwc2_readl(hsotg, HFNUM)
& HFNUM_FRNUM_MASK) >> HFNUM_FRNUM_SHIFT; & HFNUM_FRNUM_MASK) >> HFNUM_FRNUM_SHIFT;
gintsts = dwc2_read_common_intr(hsotg); gintsts = dwc2_read_common_intr(hsotg);
......
...@@ -69,7 +69,7 @@ static int testmode_show(struct seq_file *s, void *unused) ...@@ -69,7 +69,7 @@ static int testmode_show(struct seq_file *s, void *unused)
int dctl; int dctl;
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
dctl = dwc2_readl(hsotg->regs + DCTL); dctl = dwc2_readl(hsotg, DCTL);
dctl &= DCTL_TSTCTL_MASK; dctl &= DCTL_TSTCTL_MASK;
dctl >>= DCTL_TSTCTL_SHIFT; dctl >>= DCTL_TSTCTL_SHIFT;
spin_unlock_irqrestore(&hsotg->lock, flags); spin_unlock_irqrestore(&hsotg->lock, flags);
...@@ -126,42 +126,41 @@ static const struct file_operations testmode_fops = { ...@@ -126,42 +126,41 @@ static const struct file_operations testmode_fops = {
static int state_show(struct seq_file *seq, void *v) static int state_show(struct seq_file *seq, void *v)
{ {
struct dwc2_hsotg *hsotg = seq->private; struct dwc2_hsotg *hsotg = seq->private;
void __iomem *regs = hsotg->regs;
int idx; int idx;
seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n", seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n",
dwc2_readl(regs + DCFG), dwc2_readl(hsotg, DCFG),
dwc2_readl(regs + DCTL), dwc2_readl(hsotg, DCTL),
dwc2_readl(regs + DSTS)); dwc2_readl(hsotg, DSTS));
seq_printf(seq, "DIEPMSK=0x%08x, DOEPMASK=0x%08x\n", 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", seq_printf(seq, "GINTMSK=0x%08x, GINTSTS=0x%08x\n",
dwc2_readl(regs + GINTMSK), dwc2_readl(hsotg, GINTMSK),
dwc2_readl(regs + GINTSTS)); dwc2_readl(hsotg, GINTSTS));
seq_printf(seq, "DAINTMSK=0x%08x, DAINT=0x%08x\n", seq_printf(seq, "DAINTMSK=0x%08x, DAINT=0x%08x\n",
dwc2_readl(regs + DAINTMSK), dwc2_readl(hsotg, DAINTMSK),
dwc2_readl(regs + DAINT)); dwc2_readl(hsotg, DAINT));
seq_printf(seq, "GNPTXSTS=0x%08x, GRXSTSR=%08x\n", seq_printf(seq, "GNPTXSTS=0x%08x, GRXSTSR=%08x\n",
dwc2_readl(regs + GNPTXSTS), dwc2_readl(hsotg, GNPTXSTS),
dwc2_readl(regs + GRXSTSR)); dwc2_readl(hsotg, GRXSTSR));
seq_puts(seq, "\nEndpoint status:\n"); seq_puts(seq, "\nEndpoint status:\n");
for (idx = 0; idx < hsotg->num_of_eps; idx++) { for (idx = 0; idx < hsotg->num_of_eps; idx++) {
u32 in, out; u32 in, out;
in = dwc2_readl(regs + DIEPCTL(idx)); in = dwc2_readl(hsotg, DIEPCTL(idx));
out = dwc2_readl(regs + DOEPCTL(idx)); out = dwc2_readl(hsotg, DOEPCTL(idx));
seq_printf(seq, "ep%d: DIEPCTL=0x%08x, DOEPCTL=0x%08x", seq_printf(seq, "ep%d: DIEPCTL=0x%08x, DOEPCTL=0x%08x",
idx, in, out); idx, in, out);
in = dwc2_readl(regs + DIEPTSIZ(idx)); in = dwc2_readl(hsotg, DIEPTSIZ(idx));
out = dwc2_readl(regs + DOEPTSIZ(idx)); out = dwc2_readl(hsotg, DOEPTSIZ(idx));
seq_printf(seq, ", DIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x", seq_printf(seq, ", DIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x",
in, out); in, out);
...@@ -184,14 +183,13 @@ DEFINE_SHOW_ATTRIBUTE(state); ...@@ -184,14 +183,13 @@ DEFINE_SHOW_ATTRIBUTE(state);
static int fifo_show(struct seq_file *seq, void *v) static int fifo_show(struct seq_file *seq, void *v)
{ {
struct dwc2_hsotg *hsotg = seq->private; struct dwc2_hsotg *hsotg = seq->private;
void __iomem *regs = hsotg->regs;
u32 val; u32 val;
int idx; int idx;
seq_puts(seq, "Non-periodic FIFOs:\n"); 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", seq_printf(seq, "NPTXFIFO: Size %d, Start 0x%08x\n",
val >> FIFOSIZE_DEPTH_SHIFT, val >> FIFOSIZE_DEPTH_SHIFT,
val & FIFOSIZE_STARTADDR_MASK); val & FIFOSIZE_STARTADDR_MASK);
...@@ -199,7 +197,7 @@ static int fifo_show(struct seq_file *seq, void *v) ...@@ -199,7 +197,7 @@ static int fifo_show(struct seq_file *seq, void *v)
seq_puts(seq, "\nPeriodic TXFIFOs:\n"); seq_puts(seq, "\nPeriodic TXFIFOs:\n");
for (idx = 1; idx < hsotg->num_of_eps; idx++) { 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, seq_printf(seq, "\tDPTXFIFO%2d: Size %d, Start 0x%08x\n", idx,
val >> FIFOSIZE_DEPTH_SHIFT, val >> FIFOSIZE_DEPTH_SHIFT,
...@@ -228,7 +226,6 @@ static int ep_show(struct seq_file *seq, void *v) ...@@ -228,7 +226,6 @@ static int ep_show(struct seq_file *seq, void *v)
struct dwc2_hsotg_ep *ep = seq->private; struct dwc2_hsotg_ep *ep = seq->private;
struct dwc2_hsotg *hsotg = ep->parent; struct dwc2_hsotg *hsotg = ep->parent;
struct dwc2_hsotg_req *req; struct dwc2_hsotg_req *req;
void __iomem *regs = hsotg->regs;
int index = ep->index; int index = ep->index;
int show_limit = 15; int show_limit = 15;
unsigned long flags; unsigned long flags;
...@@ -239,20 +236,20 @@ static int ep_show(struct seq_file *seq, void *v) ...@@ -239,20 +236,20 @@ static int ep_show(struct seq_file *seq, void *v)
/* first show the register state */ /* first show the register state */
seq_printf(seq, "\tDIEPCTL=0x%08x, DOEPCTL=0x%08x\n", seq_printf(seq, "\tDIEPCTL=0x%08x, DOEPCTL=0x%08x\n",
dwc2_readl(regs + DIEPCTL(index)), dwc2_readl(hsotg, DIEPCTL(index)),
dwc2_readl(regs + DOEPCTL(index))); dwc2_readl(hsotg, DOEPCTL(index)));
seq_printf(seq, "\tDIEPDMA=0x%08x, DOEPDMA=0x%08x\n", seq_printf(seq, "\tDIEPDMA=0x%08x, DOEPDMA=0x%08x\n",
dwc2_readl(regs + DIEPDMA(index)), dwc2_readl(hsotg, DIEPDMA(index)),
dwc2_readl(regs + DOEPDMA(index))); dwc2_readl(hsotg, DOEPDMA(index)));
seq_printf(seq, "\tDIEPINT=0x%08x, DOEPINT=0x%08x\n", seq_printf(seq, "\tDIEPINT=0x%08x, DOEPINT=0x%08x\n",
dwc2_readl(regs + DIEPINT(index)), dwc2_readl(hsotg, DIEPINT(index)),
dwc2_readl(regs + DOEPINT(index))); dwc2_readl(hsotg, DOEPINT(index)));
seq_printf(seq, "\tDIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x\n", seq_printf(seq, "\tDIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x\n",
dwc2_readl(regs + DIEPTSIZ(index)), dwc2_readl(hsotg, DIEPTSIZ(index)),
dwc2_readl(regs + DOEPTSIZ(index))); dwc2_readl(hsotg, DOEPTSIZ(index)));
seq_puts(seq, "\n"); seq_puts(seq, "\n");
seq_printf(seq, "mps %d\n", ep->ep.maxpacket); seq_printf(seq, "mps %d\n", ep->ep.maxpacket);
......
...@@ -47,14 +47,14 @@ static inline struct dwc2_hsotg *to_hsotg(struct usb_gadget *gadget) ...@@ -47,14 +47,14 @@ static inline struct dwc2_hsotg *to_hsotg(struct usb_gadget *gadget)
return container_of(gadget, struct dwc2_hsotg, gadget); return container_of(gadget, struct dwc2_hsotg, gadget);
} }
static inline void dwc2_set_bit(void __iomem *ptr, u32 val) static inline void dwc2_set_bit(struct dwc2_hsotg *hsotg, u32 offset, u32 val)
{ {
dwc2_writel(dwc2_readl(ptr) | val, ptr); dwc2_writel(hsotg, dwc2_readl(hsotg, offset) | val, offset);
} }
static inline void dwc2_clear_bit(void __iomem *ptr, u32 val) static inline void dwc2_clear_bit(struct dwc2_hsotg *hsotg, u32 offset, u32 val)
{ {
dwc2_writel(dwc2_readl(ptr) & ~val, ptr); dwc2_writel(hsotg, dwc2_readl(hsotg, offset) & ~val, offset);
} }
static inline struct dwc2_hsotg_ep *index_to_ep(struct dwc2_hsotg *hsotg, static inline struct dwc2_hsotg_ep *index_to_ep(struct dwc2_hsotg *hsotg,
...@@ -129,14 +129,14 @@ static inline void dwc2_gadget_incr_frame_num(struct dwc2_hsotg_ep *hs_ep) ...@@ -129,14 +129,14 @@ static inline void dwc2_gadget_incr_frame_num(struct dwc2_hsotg_ep *hs_ep)
*/ */
static void dwc2_hsotg_en_gsint(struct dwc2_hsotg *hsotg, u32 ints) static void dwc2_hsotg_en_gsint(struct dwc2_hsotg *hsotg, u32 ints)
{ {
u32 gsintmsk = dwc2_readl(hsotg->regs + GINTMSK); u32 gsintmsk = dwc2_readl(hsotg, GINTMSK);
u32 new_gsintmsk; u32 new_gsintmsk;
new_gsintmsk = gsintmsk | ints; new_gsintmsk = gsintmsk | ints;
if (new_gsintmsk != gsintmsk) { if (new_gsintmsk != gsintmsk) {
dev_dbg(hsotg->dev, "gsintmsk now 0x%08x\n", new_gsintmsk); dev_dbg(hsotg->dev, "gsintmsk now 0x%08x\n", new_gsintmsk);
dwc2_writel(new_gsintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, new_gsintmsk, GINTMSK);
} }
} }
...@@ -147,13 +147,13 @@ static void dwc2_hsotg_en_gsint(struct dwc2_hsotg *hsotg, u32 ints) ...@@ -147,13 +147,13 @@ static void dwc2_hsotg_en_gsint(struct dwc2_hsotg *hsotg, u32 ints)
*/ */
static void dwc2_hsotg_disable_gsint(struct dwc2_hsotg *hsotg, u32 ints) static void dwc2_hsotg_disable_gsint(struct dwc2_hsotg *hsotg, u32 ints)
{ {
u32 gsintmsk = dwc2_readl(hsotg->regs + GINTMSK); u32 gsintmsk = dwc2_readl(hsotg, GINTMSK);
u32 new_gsintmsk; u32 new_gsintmsk;
new_gsintmsk = gsintmsk & ~ints; new_gsintmsk = gsintmsk & ~ints;
if (new_gsintmsk != gsintmsk) if (new_gsintmsk != gsintmsk)
dwc2_writel(new_gsintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, new_gsintmsk, GINTMSK);
} }
/** /**
...@@ -178,12 +178,12 @@ static void dwc2_hsotg_ctrl_epint(struct dwc2_hsotg *hsotg, ...@@ -178,12 +178,12 @@ static void dwc2_hsotg_ctrl_epint(struct dwc2_hsotg *hsotg,
bit <<= 16; bit <<= 16;
local_irq_save(flags); local_irq_save(flags);
daint = dwc2_readl(hsotg->regs + DAINTMSK); daint = dwc2_readl(hsotg, DAINTMSK);
if (en) if (en)
daint |= bit; daint |= bit;
else else
daint &= ~bit; daint &= ~bit;
dwc2_writel(daint, hsotg->regs + DAINTMSK); dwc2_writel(hsotg, daint, DAINTMSK);
local_irq_restore(flags); local_irq_restore(flags);
} }
...@@ -266,10 +266,11 @@ static void dwc2_hsotg_init_fifo(struct dwc2_hsotg *hsotg) ...@@ -266,10 +266,11 @@ static void dwc2_hsotg_init_fifo(struct dwc2_hsotg *hsotg)
hsotg->fifo_map = 0; hsotg->fifo_map = 0;
/* set RX/NPTX FIFO sizes */ /* set RX/NPTX FIFO sizes */
dwc2_writel(hsotg->params.g_rx_fifo_size, hsotg->regs + GRXFSIZ); dwc2_writel(hsotg, hsotg->params.g_rx_fifo_size, GRXFSIZ);
dwc2_writel((hsotg->params.g_rx_fifo_size << FIFOSIZE_STARTADDR_SHIFT) | dwc2_writel(hsotg, (hsotg->params.g_rx_fifo_size <<
FIFOSIZE_STARTADDR_SHIFT) |
(hsotg->params.g_np_tx_fifo_size << FIFOSIZE_DEPTH_SHIFT), (hsotg->params.g_np_tx_fifo_size << FIFOSIZE_DEPTH_SHIFT),
hsotg->regs + GNPTXFSIZ); GNPTXFSIZ);
/* /*
* arange all the rest of the TX FIFOs, as some versions of this * arange all the rest of the TX FIFOs, as some versions of this
...@@ -295,25 +296,25 @@ static void dwc2_hsotg_init_fifo(struct dwc2_hsotg *hsotg) ...@@ -295,25 +296,25 @@ static void dwc2_hsotg_init_fifo(struct dwc2_hsotg *hsotg)
"insufficient fifo memory"); "insufficient fifo memory");
addr += txfsz[ep]; addr += txfsz[ep];
dwc2_writel(val, hsotg->regs + DPTXFSIZN(ep)); dwc2_writel(hsotg, val, DPTXFSIZN(ep));
val = dwc2_readl(hsotg->regs + DPTXFSIZN(ep)); val = dwc2_readl(hsotg, DPTXFSIZN(ep));
} }
dwc2_writel(hsotg->hw_params.total_fifo_size | dwc2_writel(hsotg, hsotg->hw_params.total_fifo_size |
addr << GDFIFOCFG_EPINFOBASE_SHIFT, addr << GDFIFOCFG_EPINFOBASE_SHIFT,
hsotg->regs + GDFIFOCFG); GDFIFOCFG);
/* /*
* according to p428 of the design guide, we need to ensure that * according to p428 of the design guide, we need to ensure that
* all fifos are flushed before continuing * all fifos are flushed before continuing
*/ */
dwc2_writel(GRSTCTL_TXFNUM(0x10) | GRSTCTL_TXFFLSH | dwc2_writel(hsotg, GRSTCTL_TXFNUM(0x10) | GRSTCTL_TXFFLSH |
GRSTCTL_RXFFLSH, hsotg->regs + GRSTCTL); GRSTCTL_RXFFLSH, GRSTCTL);
/* wait until the fifos are both flushed */ /* wait until the fifos are both flushed */
timeout = 100; timeout = 100;
while (1) { while (1) {
val = dwc2_readl(hsotg->regs + GRSTCTL); val = dwc2_readl(hsotg, GRSTCTL);
if ((val & (GRSTCTL_TXFFLSH | GRSTCTL_RXFFLSH)) == 0) if ((val & (GRSTCTL_TXFFLSH | GRSTCTL_RXFFLSH)) == 0)
break; break;
...@@ -451,7 +452,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg, ...@@ -451,7 +452,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg,
struct dwc2_hsotg_req *hs_req) struct dwc2_hsotg_req *hs_req)
{ {
bool periodic = is_ep_periodic(hs_ep); bool periodic = is_ep_periodic(hs_ep);
u32 gnptxsts = dwc2_readl(hsotg->regs + GNPTXSTS); u32 gnptxsts = dwc2_readl(hsotg, GNPTXSTS);
int buf_pos = hs_req->req.actual; int buf_pos = hs_req->req.actual;
int to_write = hs_ep->size_loaded; int to_write = hs_ep->size_loaded;
void *data; void *data;
...@@ -466,7 +467,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg, ...@@ -466,7 +467,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg,
return 0; return 0;
if (periodic && !hsotg->dedicated_fifos) { if (periodic && !hsotg->dedicated_fifos) {
u32 epsize = dwc2_readl(hsotg->regs + DIEPTSIZ(hs_ep->index)); u32 epsize = dwc2_readl(hsotg, DIEPTSIZ(hs_ep->index));
int size_left; int size_left;
int size_done; int size_done;
...@@ -507,7 +508,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg, ...@@ -507,7 +508,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg,
return -ENOSPC; return -ENOSPC;
} }
} else if (hsotg->dedicated_fifos && hs_ep->index != 0) { } else if (hsotg->dedicated_fifos && hs_ep->index != 0) {
can_write = dwc2_readl(hsotg->regs + can_write = dwc2_readl(hsotg,
DTXFSTS(hs_ep->fifo_index)); DTXFSTS(hs_ep->fifo_index));
can_write &= 0xffff; can_write &= 0xffff;
...@@ -652,7 +653,7 @@ static u32 dwc2_hsotg_read_frameno(struct dwc2_hsotg *hsotg) ...@@ -652,7 +653,7 @@ static u32 dwc2_hsotg_read_frameno(struct dwc2_hsotg *hsotg)
{ {
u32 dsts; u32 dsts;
dsts = dwc2_readl(hsotg->regs + DSTS); dsts = dwc2_readl(hsotg, DSTS);
dsts &= DSTS_SOFFN_MASK; dsts &= DSTS_SOFFN_MASK;
dsts >>= DSTS_SOFFN_SHIFT; dsts >>= DSTS_SOFFN_SHIFT;
...@@ -915,11 +916,11 @@ static void dwc2_gadget_start_isoc_ddma(struct dwc2_hsotg_ep *hs_ep) ...@@ -915,11 +916,11 @@ static void dwc2_gadget_start_isoc_ddma(struct dwc2_hsotg_ep *hs_ep)
dma_reg = hs_ep->dir_in ? DIEPDMA(index) : DOEPDMA(index); dma_reg = hs_ep->dir_in ? DIEPDMA(index) : DOEPDMA(index);
/* write descriptor chain address to control register */ /* write descriptor chain address to control register */
dwc2_writel(hs_ep->desc_list_dma, hsotg->regs + dma_reg); dwc2_writel(hsotg, hs_ep->desc_list_dma, dma_reg);
ctrl = dwc2_readl(hsotg->regs + depctl); ctrl = dwc2_readl(hsotg, depctl);
ctrl |= DXEPCTL_EPENA | DXEPCTL_CNAK; ctrl |= DXEPCTL_EPENA | DXEPCTL_CNAK;
dwc2_writel(ctrl, hsotg->regs + depctl); dwc2_writel(hsotg, ctrl, depctl);
} }
/** /**
...@@ -967,11 +968,11 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg, ...@@ -967,11 +968,11 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
epsize_reg = dir_in ? DIEPTSIZ(index) : DOEPTSIZ(index); epsize_reg = dir_in ? DIEPTSIZ(index) : DOEPTSIZ(index);
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x, ep %d, dir %s\n", dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x, ep %d, dir %s\n",
__func__, dwc2_readl(hsotg->regs + epctrl_reg), index, __func__, dwc2_readl(hsotg, epctrl_reg), index,
hs_ep->dir_in ? "in" : "out"); hs_ep->dir_in ? "in" : "out");
/* If endpoint is stalled, we will restart request later */ /* If endpoint is stalled, we will restart request later */
ctrl = dwc2_readl(hsotg->regs + epctrl_reg); ctrl = dwc2_readl(hsotg, epctrl_reg);
if (index && ctrl & DXEPCTL_STALL) { if (index && ctrl & DXEPCTL_STALL) {
dev_warn(hsotg->dev, "%s: ep%d is stalled\n", __func__, index); dev_warn(hsotg->dev, "%s: ep%d is stalled\n", __func__, index);
...@@ -1064,13 +1065,13 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg, ...@@ -1064,13 +1065,13 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
length); length);
/* write descriptor chain address to control register */ /* write descriptor chain address to control register */
dwc2_writel(hs_ep->desc_list_dma, hsotg->regs + dma_reg); dwc2_writel(hsotg, hs_ep->desc_list_dma, dma_reg);
dev_dbg(hsotg->dev, "%s: %08x pad => 0x%08x\n", dev_dbg(hsotg->dev, "%s: %08x pad => 0x%08x\n",
__func__, (u32)hs_ep->desc_list_dma, dma_reg); __func__, (u32)hs_ep->desc_list_dma, dma_reg);
} else { } else {
/* write size / packets */ /* write size / packets */
dwc2_writel(epsize, hsotg->regs + epsize_reg); dwc2_writel(hsotg, epsize, epsize_reg);
if (using_dma(hsotg) && !continuing && (length != 0)) { if (using_dma(hsotg) && !continuing && (length != 0)) {
/* /*
...@@ -1078,7 +1079,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg, ...@@ -1078,7 +1079,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
* already synced by dwc2_hsotg_ep_queue(). * already synced by dwc2_hsotg_ep_queue().
*/ */
dwc2_writel(ureq->dma, hsotg->regs + dma_reg); dwc2_writel(hsotg, ureq->dma, dma_reg);
dev_dbg(hsotg->dev, "%s: %pad => 0x%08x\n", dev_dbg(hsotg->dev, "%s: %pad => 0x%08x\n",
__func__, &ureq->dma, dma_reg); __func__, &ureq->dma, dma_reg);
...@@ -1104,7 +1105,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg, ...@@ -1104,7 +1105,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
ctrl |= DXEPCTL_CNAK; /* clear NAK set by core */ ctrl |= DXEPCTL_CNAK; /* clear NAK set by core */
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl); dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl);
dwc2_writel(ctrl, hsotg->regs + epctrl_reg); dwc2_writel(hsotg, ctrl, epctrl_reg);
/* /*
* set these, it seems that DMA support increments past the end * set these, it seems that DMA support increments past the end
...@@ -1127,13 +1128,13 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg, ...@@ -1127,13 +1128,13 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
*/ */
/* check ep is enabled */ /* check ep is enabled */
if (!(dwc2_readl(hsotg->regs + epctrl_reg) & DXEPCTL_EPENA)) if (!(dwc2_readl(hsotg, epctrl_reg) & DXEPCTL_EPENA))
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"ep%d: failed to become enabled (DXEPCTL=0x%08x)?\n", "ep%d: failed to become enabled (DXEPCTL=0x%08x)?\n",
index, dwc2_readl(hsotg->regs + epctrl_reg)); index, dwc2_readl(hsotg, epctrl_reg));
dev_dbg(hsotg->dev, "%s: DXEPCTL=0x%08x\n", dev_dbg(hsotg->dev, "%s: DXEPCTL=0x%08x\n",
__func__, dwc2_readl(hsotg->regs + epctrl_reg)); __func__, dwc2_readl(hsotg, epctrl_reg));
/* enable ep interrupts */ /* enable ep interrupts */
dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 1); dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 1);
...@@ -1466,7 +1467,7 @@ static struct dwc2_hsotg_ep *ep_from_windex(struct dwc2_hsotg *hsotg, ...@@ -1466,7 +1467,7 @@ static struct dwc2_hsotg_ep *ep_from_windex(struct dwc2_hsotg *hsotg,
*/ */
int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, int testmode) int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, int testmode)
{ {
int dctl = dwc2_readl(hsotg->regs + DCTL); int dctl = dwc2_readl(hsotg, DCTL);
dctl &= ~DCTL_TSTCTL_MASK; dctl &= ~DCTL_TSTCTL_MASK;
switch (testmode) { switch (testmode) {
...@@ -1480,7 +1481,7 @@ int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, int testmode) ...@@ -1480,7 +1481,7 @@ int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, int testmode)
default: default:
return -EINVAL; return -EINVAL;
} }
dwc2_writel(dctl, hsotg->regs + DCTL); dwc2_writel(hsotg, dctl, DCTL);
return 0; return 0;
} }
...@@ -1634,9 +1635,9 @@ static void dwc2_gadget_start_next_request(struct dwc2_hsotg_ep *hs_ep) ...@@ -1634,9 +1635,9 @@ static void dwc2_gadget_start_next_request(struct dwc2_hsotg_ep *hs_ep)
} else { } else {
dev_dbg(hsotg->dev, "%s: No more ISOC-OUT requests\n", dev_dbg(hsotg->dev, "%s: No more ISOC-OUT requests\n",
__func__); __func__);
mask = dwc2_readl(hsotg->regs + epmsk_reg); mask = dwc2_readl(hsotg, epmsk_reg);
mask |= DOEPMSK_OUTTKNEPDISMSK; mask |= DOEPMSK_OUTTKNEPDISMSK;
dwc2_writel(mask, hsotg->regs + epmsk_reg); dwc2_writel(hsotg, mask, epmsk_reg);
} }
} }
...@@ -1773,14 +1774,14 @@ static void dwc2_hsotg_stall_ep0(struct dwc2_hsotg *hsotg) ...@@ -1773,14 +1774,14 @@ static void dwc2_hsotg_stall_ep0(struct dwc2_hsotg *hsotg)
* taken effect, so no need to clear later. * taken effect, so no need to clear later.
*/ */
ctrl = dwc2_readl(hsotg->regs + reg); ctrl = dwc2_readl(hsotg, reg);
ctrl |= DXEPCTL_STALL; ctrl |= DXEPCTL_STALL;
ctrl |= DXEPCTL_CNAK; ctrl |= DXEPCTL_CNAK;
dwc2_writel(ctrl, hsotg->regs + reg); dwc2_writel(hsotg, ctrl, reg);
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"written DXEPCTL=0x%08x to %08x (DXEPCTL=0x%08x)\n", "written DXEPCTL=0x%08x to %08x (DXEPCTL=0x%08x)\n",
ctrl, reg, dwc2_readl(hsotg->regs + reg)); ctrl, reg, dwc2_readl(hsotg, reg));
/* /*
* complete won't be called, so we enqueue * complete won't be called, so we enqueue
...@@ -1825,11 +1826,11 @@ static void dwc2_hsotg_process_control(struct dwc2_hsotg *hsotg, ...@@ -1825,11 +1826,11 @@ static void dwc2_hsotg_process_control(struct dwc2_hsotg *hsotg,
switch (ctrl->bRequest) { switch (ctrl->bRequest) {
case USB_REQ_SET_ADDRESS: case USB_REQ_SET_ADDRESS:
hsotg->connected = 1; hsotg->connected = 1;
dcfg = dwc2_readl(hsotg->regs + DCFG); dcfg = dwc2_readl(hsotg, DCFG);
dcfg &= ~DCFG_DEVADDR_MASK; dcfg &= ~DCFG_DEVADDR_MASK;
dcfg |= (le16_to_cpu(ctrl->wValue) << dcfg |= (le16_to_cpu(ctrl->wValue) <<
DCFG_DEVADDR_SHIFT) & DCFG_DEVADDR_MASK; DCFG_DEVADDR_SHIFT) & DCFG_DEVADDR_MASK;
dwc2_writel(dcfg, hsotg->regs + DCFG); dwc2_writel(hsotg, dcfg, DCFG);
dev_info(hsotg->dev, "new address %d\n", ctrl->wValue); dev_info(hsotg->dev, "new address %d\n", ctrl->wValue);
...@@ -1955,16 +1956,16 @@ static void dwc2_hsotg_program_zlp(struct dwc2_hsotg *hsotg, ...@@ -1955,16 +1956,16 @@ static void dwc2_hsotg_program_zlp(struct dwc2_hsotg *hsotg,
dwc2_gadget_config_nonisoc_xfer_ddma(hs_ep, dma, 0); dwc2_gadget_config_nonisoc_xfer_ddma(hs_ep, dma, 0);
} else { } else {
dwc2_writel(DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) | dwc2_writel(hsotg, DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) |
DXEPTSIZ_XFERSIZE(0), hsotg->regs + DXEPTSIZ_XFERSIZE(0),
epsiz_reg); epsiz_reg);
} }
ctrl = dwc2_readl(hsotg->regs + epctl_reg); ctrl = dwc2_readl(hsotg, epctl_reg);
ctrl |= DXEPCTL_CNAK; /* clear NAK set by core */ ctrl |= DXEPCTL_CNAK; /* clear NAK set by core */
ctrl |= DXEPCTL_EPENA; /* ensure ep enabled */ ctrl |= DXEPCTL_EPENA; /* ensure ep enabled */
ctrl |= DXEPCTL_USBACTEP; ctrl |= DXEPCTL_USBACTEP;
dwc2_writel(ctrl, hsotg->regs + epctl_reg); dwc2_writel(hsotg, ctrl, epctl_reg);
} }
/** /**
...@@ -2124,13 +2125,12 @@ static void dwc2_hsotg_rx_data(struct dwc2_hsotg *hsotg, int ep_idx, int size) ...@@ -2124,13 +2125,12 @@ static void dwc2_hsotg_rx_data(struct dwc2_hsotg *hsotg, int ep_idx, int size)
{ {
struct dwc2_hsotg_ep *hs_ep = hsotg->eps_out[ep_idx]; struct dwc2_hsotg_ep *hs_ep = hsotg->eps_out[ep_idx];
struct dwc2_hsotg_req *hs_req = hs_ep->req; struct dwc2_hsotg_req *hs_req = hs_ep->req;
void __iomem *fifo = hsotg->regs + EPFIFO(ep_idx);
int to_read; int to_read;
int max_req; int max_req;
int read_ptr; int read_ptr;
if (!hs_req) { if (!hs_req) {
u32 epctl = dwc2_readl(hsotg->regs + DOEPCTL(ep_idx)); u32 epctl = dwc2_readl(hsotg, DOEPCTL(ep_idx));
int ptr; int ptr;
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
...@@ -2139,7 +2139,7 @@ static void dwc2_hsotg_rx_data(struct dwc2_hsotg *hsotg, int ep_idx, int size) ...@@ -2139,7 +2139,7 @@ static void dwc2_hsotg_rx_data(struct dwc2_hsotg *hsotg, int ep_idx, int size)
/* dump the data from the FIFO, we've nothing we can do */ /* dump the data from the FIFO, we've nothing we can do */
for (ptr = 0; ptr < size; ptr += 4) for (ptr = 0; ptr < size; ptr += 4)
(void)dwc2_readl(fifo); (void)dwc2_readl(hsotg, EPFIFO(ep_idx));
return; return;
} }
...@@ -2169,7 +2169,8 @@ static void dwc2_hsotg_rx_data(struct dwc2_hsotg *hsotg, int ep_idx, int size) ...@@ -2169,7 +2169,8 @@ static void dwc2_hsotg_rx_data(struct dwc2_hsotg *hsotg, int ep_idx, int size)
* note, we might over-write the buffer end by 3 bytes depending on * note, we might over-write the buffer end by 3 bytes depending on
* alignment of the data. * alignment of the data.
*/ */
ioread32_rep(fifo, hs_req->req.buf + read_ptr, to_read); ioread32_rep(hsotg->regs + EPFIFO(ep_idx),
hs_req->req.buf + read_ptr, to_read);
} }
/** /**
...@@ -2198,12 +2199,12 @@ static void dwc2_hsotg_change_ep_iso_parity(struct dwc2_hsotg *hsotg, ...@@ -2198,12 +2199,12 @@ static void dwc2_hsotg_change_ep_iso_parity(struct dwc2_hsotg *hsotg,
{ {
u32 ctrl; u32 ctrl;
ctrl = dwc2_readl(hsotg->regs + epctl_reg); ctrl = dwc2_readl(hsotg, epctl_reg);
if (ctrl & DXEPCTL_EOFRNUM) if (ctrl & DXEPCTL_EOFRNUM)
ctrl |= DXEPCTL_SETEVENFR; ctrl |= DXEPCTL_SETEVENFR;
else else
ctrl |= DXEPCTL_SETODDFR; ctrl |= DXEPCTL_SETODDFR;
dwc2_writel(ctrl, hsotg->regs + epctl_reg); dwc2_writel(hsotg, ctrl, epctl_reg);
} }
/* /*
...@@ -2247,7 +2248,7 @@ static unsigned int dwc2_gadget_get_xfersize_ddma(struct dwc2_hsotg_ep *hs_ep) ...@@ -2247,7 +2248,7 @@ static unsigned int dwc2_gadget_get_xfersize_ddma(struct dwc2_hsotg_ep *hs_ep)
*/ */
static void dwc2_hsotg_handle_outdone(struct dwc2_hsotg *hsotg, int epnum) static void dwc2_hsotg_handle_outdone(struct dwc2_hsotg *hsotg, int epnum)
{ {
u32 epsize = dwc2_readl(hsotg->regs + DOEPTSIZ(epnum)); u32 epsize = dwc2_readl(hsotg, DOEPTSIZ(epnum));
struct dwc2_hsotg_ep *hs_ep = hsotg->eps_out[epnum]; struct dwc2_hsotg_ep *hs_ep = hsotg->eps_out[epnum];
struct dwc2_hsotg_req *hs_req = hs_ep->req; struct dwc2_hsotg_req *hs_req = hs_ep->req;
struct usb_request *req = &hs_req->req; struct usb_request *req = &hs_req->req;
...@@ -2343,7 +2344,7 @@ static void dwc2_hsotg_handle_outdone(struct dwc2_hsotg *hsotg, int epnum) ...@@ -2343,7 +2344,7 @@ static void dwc2_hsotg_handle_outdone(struct dwc2_hsotg *hsotg, int epnum)
*/ */
static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg) static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg)
{ {
u32 grxstsr = dwc2_readl(hsotg->regs + GRXSTSP); u32 grxstsr = dwc2_readl(hsotg, GRXSTSP);
u32 epnum, status, size; u32 epnum, status, size;
WARN_ON(using_dma(hsotg)); WARN_ON(using_dma(hsotg));
...@@ -2374,7 +2375,7 @@ static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg) ...@@ -2374,7 +2375,7 @@ static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"SetupDone (Frame=0x%08x, DOPEPCTL=0x%08x)\n", "SetupDone (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
dwc2_hsotg_read_frameno(hsotg), dwc2_hsotg_read_frameno(hsotg),
dwc2_readl(hsotg->regs + DOEPCTL(0))); dwc2_readl(hsotg, DOEPCTL(0)));
/* /*
* Call dwc2_hsotg_handle_outdone here if it was not called from * Call dwc2_hsotg_handle_outdone here if it was not called from
* GRXSTS_PKTSTS_OUTDONE. That is, if the core didn't * GRXSTS_PKTSTS_OUTDONE. That is, if the core didn't
...@@ -2392,7 +2393,7 @@ static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg) ...@@ -2392,7 +2393,7 @@ static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"SetupRX (Frame=0x%08x, DOPEPCTL=0x%08x)\n", "SetupRX (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
dwc2_hsotg_read_frameno(hsotg), dwc2_hsotg_read_frameno(hsotg),
dwc2_readl(hsotg->regs + DOEPCTL(0))); dwc2_readl(hsotg, DOEPCTL(0)));
WARN_ON(hsotg->ep0_state != DWC2_EP0_SETUP); WARN_ON(hsotg->ep0_state != DWC2_EP0_SETUP);
...@@ -2446,7 +2447,6 @@ static void dwc2_hsotg_set_ep_maxpacket(struct dwc2_hsotg *hsotg, ...@@ -2446,7 +2447,6 @@ static void dwc2_hsotg_set_ep_maxpacket(struct dwc2_hsotg *hsotg,
unsigned int mc, unsigned int dir_in) unsigned int mc, unsigned int dir_in)
{ {
struct dwc2_hsotg_ep *hs_ep; struct dwc2_hsotg_ep *hs_ep;
void __iomem *regs = hsotg->regs;
u32 reg; u32 reg;
hs_ep = index_to_ep(hsotg, ep, dir_in); hs_ep = index_to_ep(hsotg, ep, dir_in);
...@@ -2472,15 +2472,15 @@ static void dwc2_hsotg_set_ep_maxpacket(struct dwc2_hsotg *hsotg, ...@@ -2472,15 +2472,15 @@ static void dwc2_hsotg_set_ep_maxpacket(struct dwc2_hsotg *hsotg,
} }
if (dir_in) { if (dir_in) {
reg = dwc2_readl(regs + DIEPCTL(ep)); reg = dwc2_readl(hsotg, DIEPCTL(ep));
reg &= ~DXEPCTL_MPS_MASK; reg &= ~DXEPCTL_MPS_MASK;
reg |= mps; reg |= mps;
dwc2_writel(reg, regs + DIEPCTL(ep)); dwc2_writel(hsotg, reg, DIEPCTL(ep));
} else { } else {
reg = dwc2_readl(regs + DOEPCTL(ep)); reg = dwc2_readl(hsotg, DOEPCTL(ep));
reg &= ~DXEPCTL_MPS_MASK; reg &= ~DXEPCTL_MPS_MASK;
reg |= mps; reg |= mps;
dwc2_writel(reg, regs + DOEPCTL(ep)); dwc2_writel(hsotg, reg, DOEPCTL(ep));
} }
return; return;
...@@ -2496,8 +2496,8 @@ static void dwc2_hsotg_set_ep_maxpacket(struct dwc2_hsotg *hsotg, ...@@ -2496,8 +2496,8 @@ static void dwc2_hsotg_set_ep_maxpacket(struct dwc2_hsotg *hsotg,
*/ */
static void dwc2_hsotg_txfifo_flush(struct dwc2_hsotg *hsotg, unsigned int idx) static void dwc2_hsotg_txfifo_flush(struct dwc2_hsotg *hsotg, unsigned int idx)
{ {
dwc2_writel(GRSTCTL_TXFNUM(idx) | GRSTCTL_TXFFLSH, dwc2_writel(hsotg, GRSTCTL_TXFNUM(idx) | GRSTCTL_TXFFLSH,
hsotg->regs + GRSTCTL); GRSTCTL);
/* wait until the fifo is flushed */ /* wait until the fifo is flushed */
if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_TXFFLSH, 100)) if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_TXFFLSH, 100))
...@@ -2550,7 +2550,7 @@ static void dwc2_hsotg_complete_in(struct dwc2_hsotg *hsotg, ...@@ -2550,7 +2550,7 @@ static void dwc2_hsotg_complete_in(struct dwc2_hsotg *hsotg,
struct dwc2_hsotg_ep *hs_ep) struct dwc2_hsotg_ep *hs_ep)
{ {
struct dwc2_hsotg_req *hs_req = hs_ep->req; struct dwc2_hsotg_req *hs_req = hs_ep->req;
u32 epsize = dwc2_readl(hsotg->regs + DIEPTSIZ(hs_ep->index)); u32 epsize = dwc2_readl(hsotg, DIEPTSIZ(hs_ep->index));
int size_left, size_done; int size_left, size_done;
if (!hs_req) { if (!hs_req) {
...@@ -2654,12 +2654,12 @@ static u32 dwc2_gadget_read_ep_interrupts(struct dwc2_hsotg *hsotg, ...@@ -2654,12 +2654,12 @@ static u32 dwc2_gadget_read_ep_interrupts(struct dwc2_hsotg *hsotg,
u32 mask; u32 mask;
u32 diepempmsk; u32 diepempmsk;
mask = dwc2_readl(hsotg->regs + epmsk_reg); mask = dwc2_readl(hsotg, epmsk_reg);
diepempmsk = dwc2_readl(hsotg->regs + DIEPEMPMSK); diepempmsk = dwc2_readl(hsotg, DIEPEMPMSK);
mask |= ((diepempmsk >> idx) & 0x1) ? DIEPMSK_TXFIFOEMPTY : 0; mask |= ((diepempmsk >> idx) & 0x1) ? DIEPMSK_TXFIFOEMPTY : 0;
mask |= DXEPINT_SETUP_RCVD; mask |= DXEPINT_SETUP_RCVD;
ints = dwc2_readl(hsotg->regs + epint_reg); ints = dwc2_readl(hsotg, epint_reg);
ints &= mask; ints &= mask;
return ints; return ints;
} }
...@@ -2684,12 +2684,12 @@ static void dwc2_gadget_handle_ep_disabled(struct dwc2_hsotg_ep *hs_ep) ...@@ -2684,12 +2684,12 @@ static void dwc2_gadget_handle_ep_disabled(struct dwc2_hsotg_ep *hs_ep)
unsigned char idx = hs_ep->index; unsigned char idx = hs_ep->index;
int dir_in = hs_ep->dir_in; int dir_in = hs_ep->dir_in;
u32 epctl_reg = dir_in ? DIEPCTL(idx) : DOEPCTL(idx); u32 epctl_reg = dir_in ? DIEPCTL(idx) : DOEPCTL(idx);
int dctl = dwc2_readl(hsotg->regs + DCTL); int dctl = dwc2_readl(hsotg, DCTL);
dev_dbg(hsotg->dev, "%s: EPDisbld\n", __func__); dev_dbg(hsotg->dev, "%s: EPDisbld\n", __func__);
if (dir_in) { if (dir_in) {
int epctl = dwc2_readl(hsotg->regs + epctl_reg); int epctl = dwc2_readl(hsotg, epctl_reg);
dwc2_hsotg_txfifo_flush(hsotg, hs_ep->fifo_index); dwc2_hsotg_txfifo_flush(hsotg, hs_ep->fifo_index);
...@@ -2699,17 +2699,17 @@ static void dwc2_gadget_handle_ep_disabled(struct dwc2_hsotg_ep *hs_ep) ...@@ -2699,17 +2699,17 @@ static void dwc2_gadget_handle_ep_disabled(struct dwc2_hsotg_ep *hs_ep)
} }
if ((epctl & DXEPCTL_STALL) && (epctl & DXEPCTL_EPTYPE_BULK)) { if ((epctl & DXEPCTL_STALL) && (epctl & DXEPCTL_EPTYPE_BULK)) {
int dctl = dwc2_readl(hsotg->regs + DCTL); int dctl = dwc2_readl(hsotg, DCTL);
dctl |= DCTL_CGNPINNAK; dctl |= DCTL_CGNPINNAK;
dwc2_writel(dctl, hsotg->regs + DCTL); dwc2_writel(hsotg, dctl, DCTL);
} }
return; return;
} }
if (dctl & DCTL_GOUTNAKSTS) { if (dctl & DCTL_GOUTNAKSTS) {
dctl |= DCTL_CGOUTNAK; dctl |= DCTL_CGOUTNAK;
dwc2_writel(dctl, hsotg->regs + DCTL); dwc2_writel(hsotg, dctl, DCTL);
} }
if (!hs_ep->isochronous) if (!hs_ep->isochronous)
...@@ -2775,23 +2775,23 @@ static void dwc2_gadget_handle_out_token_ep_disabled(struct dwc2_hsotg_ep *ep) ...@@ -2775,23 +2775,23 @@ static void dwc2_gadget_handle_out_token_ep_disabled(struct dwc2_hsotg_ep *ep)
u32 dsts; u32 dsts;
u32 ctrl; u32 ctrl;
dsts = dwc2_readl(hsotg->regs + DSTS); dsts = dwc2_readl(hsotg, DSTS);
ep->target_frame = dwc2_hsotg_read_frameno(hsotg); ep->target_frame = dwc2_hsotg_read_frameno(hsotg);
dwc2_gadget_incr_frame_num(ep); dwc2_gadget_incr_frame_num(ep);
ctrl = dwc2_readl(hsotg->regs + DOEPCTL(ep->index)); ctrl = dwc2_readl(hsotg, DOEPCTL(ep->index));
if (ep->target_frame & 0x1) if (ep->target_frame & 0x1)
ctrl |= DXEPCTL_SETODDFR; ctrl |= DXEPCTL_SETODDFR;
else else
ctrl |= DXEPCTL_SETEVENFR; ctrl |= DXEPCTL_SETEVENFR;
dwc2_writel(ctrl, hsotg->regs + DOEPCTL(ep->index)); dwc2_writel(hsotg, ctrl, DOEPCTL(ep->index));
} }
dwc2_gadget_start_next_request(ep); dwc2_gadget_start_next_request(ep);
doepmsk = dwc2_readl(hsotg->regs + DOEPMSK); doepmsk = dwc2_readl(hsotg, DOEPMSK);
doepmsk &= ~DOEPMSK_OUTTKNEPDISMSK; doepmsk &= ~DOEPMSK_OUTTKNEPDISMSK;
dwc2_writel(doepmsk, hsotg->regs + DOEPMSK); dwc2_writel(hsotg, doepmsk, DOEPMSK);
} }
/** /**
...@@ -2829,14 +2829,14 @@ static void dwc2_gadget_handle_nak(struct dwc2_hsotg_ep *hs_ep) ...@@ -2829,14 +2829,14 @@ static void dwc2_gadget_handle_nak(struct dwc2_hsotg_ep *hs_ep)
hs_ep->target_frame = tmp; hs_ep->target_frame = tmp;
if (hs_ep->interval > 1) { if (hs_ep->interval > 1) {
u32 ctrl = dwc2_readl(hsotg->regs + u32 ctrl = dwc2_readl(hsotg,
DIEPCTL(hs_ep->index)); DIEPCTL(hs_ep->index));
if (hs_ep->target_frame & 0x1) if (hs_ep->target_frame & 0x1)
ctrl |= DXEPCTL_SETODDFR; ctrl |= DXEPCTL_SETODDFR;
else else
ctrl |= DXEPCTL_SETEVENFR; ctrl |= DXEPCTL_SETEVENFR;
dwc2_writel(ctrl, hsotg->regs + DIEPCTL(hs_ep->index)); dwc2_writel(hsotg, ctrl, DIEPCTL(hs_ep->index));
} }
dwc2_hsotg_complete_request(hsotg, hs_ep, dwc2_hsotg_complete_request(hsotg, hs_ep,
...@@ -2866,10 +2866,10 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx, ...@@ -2866,10 +2866,10 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
u32 ctrl; u32 ctrl;
ints = dwc2_gadget_read_ep_interrupts(hsotg, idx, dir_in); ints = dwc2_gadget_read_ep_interrupts(hsotg, idx, dir_in);
ctrl = dwc2_readl(hsotg->regs + epctl_reg); ctrl = dwc2_readl(hsotg, epctl_reg);
/* Clear endpoint interrupts */ /* Clear endpoint interrupts */
dwc2_writel(ints, hsotg->regs + epint_reg); dwc2_writel(hsotg, ints, epint_reg);
if (!hs_ep) { if (!hs_ep) {
dev_err(hsotg->dev, "%s:Interrupt for unconfigured ep%d(%s)\n", dev_err(hsotg->dev, "%s:Interrupt for unconfigured ep%d(%s)\n",
...@@ -2897,8 +2897,8 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx, ...@@ -2897,8 +2897,8 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
if (ints & DXEPINT_XFERCOMPL) { if (ints & DXEPINT_XFERCOMPL) {
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"%s: XferCompl: DxEPCTL=0x%08x, DXEPTSIZ=%08x\n", "%s: XferCompl: DxEPCTL=0x%08x, DXEPTSIZ=%08x\n",
__func__, dwc2_readl(hsotg->regs + epctl_reg), __func__, dwc2_readl(hsotg, epctl_reg),
dwc2_readl(hsotg->regs + epsiz_reg)); dwc2_readl(hsotg, epsiz_reg));
/* In DDMA handle isochronous requests separately */ /* In DDMA handle isochronous requests separately */
if (using_desc_dma(hsotg) && hs_ep->isochronous) { if (using_desc_dma(hsotg) && hs_ep->isochronous) {
...@@ -3016,7 +3016,7 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx, ...@@ -3016,7 +3016,7 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
*/ */
static void dwc2_hsotg_irq_enumdone(struct dwc2_hsotg *hsotg) static void dwc2_hsotg_irq_enumdone(struct dwc2_hsotg *hsotg)
{ {
u32 dsts = dwc2_readl(hsotg->regs + DSTS); u32 dsts = dwc2_readl(hsotg, DSTS);
int ep0_mps = 0, ep_mps = 8; int ep0_mps = 0, ep_mps = 8;
/* /*
...@@ -3087,8 +3087,8 @@ static void dwc2_hsotg_irq_enumdone(struct dwc2_hsotg *hsotg) ...@@ -3087,8 +3087,8 @@ static void dwc2_hsotg_irq_enumdone(struct dwc2_hsotg *hsotg)
dwc2_hsotg_enqueue_setup(hsotg); dwc2_hsotg_enqueue_setup(hsotg);
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n", dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
dwc2_readl(hsotg->regs + DIEPCTL0), dwc2_readl(hsotg, DIEPCTL0),
dwc2_readl(hsotg->regs + DOEPCTL0)); dwc2_readl(hsotg, DOEPCTL0));
} }
/** /**
...@@ -3115,7 +3115,7 @@ static void kill_all_requests(struct dwc2_hsotg *hsotg, ...@@ -3115,7 +3115,7 @@ static void kill_all_requests(struct dwc2_hsotg *hsotg,
if (!hsotg->dedicated_fifos) if (!hsotg->dedicated_fifos)
return; return;
size = (dwc2_readl(hsotg->regs + DTXFSTS(ep->fifo_index)) & 0xffff) * 4; size = (dwc2_readl(hsotg, DTXFSTS(ep->fifo_index)) & 0xffff) * 4;
if (size < ep->fifo_size) if (size < ep->fifo_size)
dwc2_hsotg_txfifo_flush(hsotg, ep->fifo_index); dwc2_hsotg_txfifo_flush(hsotg, ep->fifo_index);
} }
...@@ -3216,7 +3216,7 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, ...@@ -3216,7 +3216,7 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
*/ */
/* keep other bits untouched (so e.g. forced modes are not lost) */ /* keep other bits untouched (so e.g. forced modes are not lost) */
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP | usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP |
GUSBCFG_HNPCAP | GUSBCFG_USBTRDTIM_MASK); GUSBCFG_HNPCAP | GUSBCFG_USBTRDTIM_MASK);
...@@ -3231,12 +3231,12 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, ...@@ -3231,12 +3231,12 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
usbcfg |= hsotg->phyif | GUSBCFG_TOUTCAL(7) | usbcfg |= hsotg->phyif | GUSBCFG_TOUTCAL(7) |
(val << GUSBCFG_USBTRDTIM_SHIFT); (val << GUSBCFG_USBTRDTIM_SHIFT);
} }
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
dwc2_hsotg_init_fifo(hsotg); dwc2_hsotg_init_fifo(hsotg);
if (!is_usb_reset) if (!is_usb_reset)
dwc2_set_bit(hsotg->regs + DCTL, DCTL_SFTDISCON); dwc2_set_bit(hsotg, DCTL, DCTL_SFTDISCON);
dcfg |= DCFG_EPMISCNT(1); dcfg |= DCFG_EPMISCNT(1);
...@@ -3257,13 +3257,13 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, ...@@ -3257,13 +3257,13 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
if (hsotg->params.ipg_isoc_en) if (hsotg->params.ipg_isoc_en)
dcfg |= DCFG_IPG_ISOC_SUPPORDED; dcfg |= DCFG_IPG_ISOC_SUPPORDED;
dwc2_writel(dcfg, hsotg->regs + DCFG); dwc2_writel(hsotg, dcfg, DCFG);
/* Clear any pending OTG interrupts */ /* Clear any pending OTG interrupts */
dwc2_writel(0xffffffff, hsotg->regs + GOTGINT); dwc2_writel(hsotg, 0xffffffff, GOTGINT);
/* Clear any pending interrupts */ /* Clear any pending interrupts */
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS); dwc2_writel(hsotg, 0xffffffff, GINTSTS);
intmsk = GINTSTS_ERLYSUSP | GINTSTS_SESSREQINT | intmsk = GINTSTS_ERLYSUSP | GINTSTS_SESSREQINT |
GINTSTS_GOUTNAKEFF | GINTSTS_GINNAKEFF | GINTSTS_GOUTNAKEFF | GINTSTS_GINNAKEFF |
GINTSTS_USBRST | GINTSTS_RESETDET | GINTSTS_USBRST | GINTSTS_RESETDET |
...@@ -3277,22 +3277,22 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, ...@@ -3277,22 +3277,22 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
if (!hsotg->params.external_id_pin_ctl) if (!hsotg->params.external_id_pin_ctl)
intmsk |= GINTSTS_CONIDSTSCHNG; intmsk |= GINTSTS_CONIDSTSCHNG;
dwc2_writel(intmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, intmsk, GINTMSK);
if (using_dma(hsotg)) { if (using_dma(hsotg)) {
dwc2_writel(GAHBCFG_GLBL_INTR_EN | GAHBCFG_DMA_EN | dwc2_writel(hsotg, GAHBCFG_GLBL_INTR_EN | GAHBCFG_DMA_EN |
hsotg->params.ahbcfg, hsotg->params.ahbcfg,
hsotg->regs + GAHBCFG); GAHBCFG);
/* Set DDMA mode support in the core if needed */ /* Set DDMA mode support in the core if needed */
if (using_desc_dma(hsotg)) if (using_desc_dma(hsotg))
dwc2_set_bit(hsotg->regs + DCFG, DCFG_DESCDMA_EN); dwc2_set_bit(hsotg, DCFG, DCFG_DESCDMA_EN);
} else { } else {
dwc2_writel(((hsotg->dedicated_fifos) ? dwc2_writel(hsotg, ((hsotg->dedicated_fifos) ?
(GAHBCFG_NP_TXF_EMP_LVL | (GAHBCFG_NP_TXF_EMP_LVL |
GAHBCFG_P_TXF_EMP_LVL) : 0) | GAHBCFG_P_TXF_EMP_LVL) : 0) |
GAHBCFG_GLBL_INTR_EN, hsotg->regs + GAHBCFG); GAHBCFG_GLBL_INTR_EN, GAHBCFG);
} }
/* /*
...@@ -3301,33 +3301,33 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, ...@@ -3301,33 +3301,33 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
* interrupts. * interrupts.
*/ */
dwc2_writel(((hsotg->dedicated_fifos && !using_dma(hsotg)) ? dwc2_writel(hsotg, ((hsotg->dedicated_fifos && !using_dma(hsotg)) ?
DIEPMSK_TXFIFOEMPTY | DIEPMSK_INTKNTXFEMPMSK : 0) | DIEPMSK_TXFIFOEMPTY | DIEPMSK_INTKNTXFEMPMSK : 0) |
DIEPMSK_EPDISBLDMSK | DIEPMSK_XFERCOMPLMSK | DIEPMSK_EPDISBLDMSK | DIEPMSK_XFERCOMPLMSK |
DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK, DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK,
hsotg->regs + DIEPMSK); DIEPMSK);
/* /*
* don't need XferCompl, we get that from RXFIFO in slave mode. In * don't need XferCompl, we get that from RXFIFO in slave mode. In
* DMA mode we may need this and StsPhseRcvd. * DMA mode we may need this and StsPhseRcvd.
*/ */
dwc2_writel((using_dma(hsotg) ? (DIEPMSK_XFERCOMPLMSK | dwc2_writel(hsotg, (using_dma(hsotg) ? (DIEPMSK_XFERCOMPLMSK |
DOEPMSK_STSPHSERCVDMSK) : 0) | DOEPMSK_STSPHSERCVDMSK) : 0) |
DOEPMSK_EPDISBLDMSK | DOEPMSK_AHBERRMSK | DOEPMSK_EPDISBLDMSK | DOEPMSK_AHBERRMSK |
DOEPMSK_SETUPMSK, DOEPMSK_SETUPMSK,
hsotg->regs + DOEPMSK); DOEPMSK);
/* Enable BNA interrupt for DDMA */ /* Enable BNA interrupt for DDMA */
if (using_desc_dma(hsotg)) { if (using_desc_dma(hsotg)) {
dwc2_set_bit(hsotg->regs + DOEPMSK, DOEPMSK_BNAMSK); dwc2_set_bit(hsotg, DOEPMSK, DOEPMSK_BNAMSK);
dwc2_set_bit(hsotg->regs + DIEPMSK, DIEPMSK_BNAININTRMSK); dwc2_set_bit(hsotg, DIEPMSK, DIEPMSK_BNAININTRMSK);
} }
dwc2_writel(0, hsotg->regs + DAINTMSK); dwc2_writel(hsotg, 0, DAINTMSK);
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n", dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
dwc2_readl(hsotg->regs + DIEPCTL0), dwc2_readl(hsotg, DIEPCTL0),
dwc2_readl(hsotg->regs + DOEPCTL0)); dwc2_readl(hsotg, DOEPCTL0));
/* enable in and out endpoint interrupts */ /* enable in and out endpoint interrupts */
dwc2_hsotg_en_gsint(hsotg, GINTSTS_OEPINT | GINTSTS_IEPINT); dwc2_hsotg_en_gsint(hsotg, GINTSTS_OEPINT | GINTSTS_IEPINT);
...@@ -3345,12 +3345,12 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, ...@@ -3345,12 +3345,12 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
dwc2_hsotg_ctrl_epint(hsotg, 0, 1, 1); dwc2_hsotg_ctrl_epint(hsotg, 0, 1, 1);
if (!is_usb_reset) { if (!is_usb_reset) {
dwc2_set_bit(hsotg->regs + DCTL, DCTL_PWRONPRGDONE); dwc2_set_bit(hsotg, DCTL, DCTL_PWRONPRGDONE);
udelay(10); /* see openiboot */ udelay(10); /* see openiboot */
dwc2_clear_bit(hsotg->regs + DCTL, DCTL_PWRONPRGDONE); dwc2_clear_bit(hsotg, DCTL, DCTL_PWRONPRGDONE);
} }
dev_dbg(hsotg->dev, "DCTL=0x%08x\n", dwc2_readl(hsotg->regs + DCTL)); dev_dbg(hsotg->dev, "DCTL=0x%08x\n", dwc2_readl(hsotg, DCTL));
/* /*
* DxEPCTL_USBActEp says RO in manual, but seems to be set by * DxEPCTL_USBActEp says RO in manual, but seems to be set by
...@@ -3358,23 +3358,23 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, ...@@ -3358,23 +3358,23 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
*/ */
/* set to read 1 8byte packet */ /* set to read 1 8byte packet */
dwc2_writel(DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) | dwc2_writel(hsotg, DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) |
DXEPTSIZ_XFERSIZE(8), hsotg->regs + DOEPTSIZ0); DXEPTSIZ_XFERSIZE(8), DOEPTSIZ0);
dwc2_writel(dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) | dwc2_writel(hsotg, dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) |
DXEPCTL_CNAK | DXEPCTL_EPENA | DXEPCTL_CNAK | DXEPCTL_EPENA |
DXEPCTL_USBACTEP, DXEPCTL_USBACTEP,
hsotg->regs + DOEPCTL0); DOEPCTL0);
/* enable, but don't activate EP0in */ /* enable, but don't activate EP0in */
dwc2_writel(dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) | dwc2_writel(hsotg, dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) |
DXEPCTL_USBACTEP, hsotg->regs + DIEPCTL0); DXEPCTL_USBACTEP, DIEPCTL0);
/* clear global NAKs */ /* clear global NAKs */
val = DCTL_CGOUTNAK | DCTL_CGNPINNAK; val = DCTL_CGOUTNAK | DCTL_CGNPINNAK;
if (!is_usb_reset) if (!is_usb_reset)
val |= DCTL_SFTDISCON; val |= DCTL_SFTDISCON;
dwc2_set_bit(hsotg->regs + DCTL, val); dwc2_set_bit(hsotg, DCTL, val);
/* configure the core to support LPM */ /* configure the core to support LPM */
dwc2_gadget_init_lpm(hsotg); dwc2_gadget_init_lpm(hsotg);
...@@ -3387,20 +3387,20 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, ...@@ -3387,20 +3387,20 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
dwc2_hsotg_enqueue_setup(hsotg); dwc2_hsotg_enqueue_setup(hsotg);
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n", dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
dwc2_readl(hsotg->regs + DIEPCTL0), dwc2_readl(hsotg, DIEPCTL0),
dwc2_readl(hsotg->regs + DOEPCTL0)); dwc2_readl(hsotg, DOEPCTL0));
} }
static void dwc2_hsotg_core_disconnect(struct dwc2_hsotg *hsotg) static void dwc2_hsotg_core_disconnect(struct dwc2_hsotg *hsotg)
{ {
/* set the soft-disconnect bit */ /* set the soft-disconnect bit */
dwc2_set_bit(hsotg->regs + DCTL, DCTL_SFTDISCON); dwc2_set_bit(hsotg, DCTL, DCTL_SFTDISCON);
} }
void dwc2_hsotg_core_connect(struct dwc2_hsotg *hsotg) void dwc2_hsotg_core_connect(struct dwc2_hsotg *hsotg)
{ {
/* remove the soft-disconnect and let's go */ /* remove the soft-disconnect and let's go */
dwc2_clear_bit(hsotg->regs + DCTL, DCTL_SFTDISCON); dwc2_clear_bit(hsotg, DCTL, DCTL_SFTDISCON);
} }
/** /**
...@@ -3425,7 +3425,7 @@ static void dwc2_gadget_handle_incomplete_isoc_in(struct dwc2_hsotg *hsotg) ...@@ -3425,7 +3425,7 @@ static void dwc2_gadget_handle_incomplete_isoc_in(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, "Incomplete isoc in interrupt received:\n"); dev_dbg(hsotg->dev, "Incomplete isoc in interrupt received:\n");
daintmsk = dwc2_readl(hsotg->regs + DAINTMSK); daintmsk = dwc2_readl(hsotg, DAINTMSK);
for (idx = 1; idx < hsotg->num_of_eps; idx++) { for (idx = 1; idx < hsotg->num_of_eps; idx++) {
hs_ep = hsotg->eps_in[idx]; hs_ep = hsotg->eps_in[idx];
...@@ -3433,17 +3433,17 @@ static void dwc2_gadget_handle_incomplete_isoc_in(struct dwc2_hsotg *hsotg) ...@@ -3433,17 +3433,17 @@ static void dwc2_gadget_handle_incomplete_isoc_in(struct dwc2_hsotg *hsotg)
if (!hs_ep->isochronous || (BIT(idx) & ~daintmsk)) if (!hs_ep->isochronous || (BIT(idx) & ~daintmsk))
continue; continue;
epctrl = dwc2_readl(hsotg->regs + DIEPCTL(idx)); epctrl = dwc2_readl(hsotg, DIEPCTL(idx));
if ((epctrl & DXEPCTL_EPENA) && if ((epctrl & DXEPCTL_EPENA) &&
dwc2_gadget_target_frame_elapsed(hs_ep)) { dwc2_gadget_target_frame_elapsed(hs_ep)) {
epctrl |= DXEPCTL_SNAK; epctrl |= DXEPCTL_SNAK;
epctrl |= DXEPCTL_EPDIS; epctrl |= DXEPCTL_EPDIS;
dwc2_writel(epctrl, hsotg->regs + DIEPCTL(idx)); dwc2_writel(hsotg, epctrl, DIEPCTL(idx));
} }
} }
/* Clear interrupt */ /* Clear interrupt */
dwc2_writel(GINTSTS_INCOMPL_SOIN, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_INCOMPL_SOIN, GINTSTS);
} }
/** /**
...@@ -3470,7 +3470,7 @@ static void dwc2_gadget_handle_incomplete_isoc_out(struct dwc2_hsotg *hsotg) ...@@ -3470,7 +3470,7 @@ static void dwc2_gadget_handle_incomplete_isoc_out(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, "%s: GINTSTS_INCOMPL_SOOUT\n", __func__); dev_dbg(hsotg->dev, "%s: GINTSTS_INCOMPL_SOOUT\n", __func__);
daintmsk = dwc2_readl(hsotg->regs + DAINTMSK); daintmsk = dwc2_readl(hsotg, DAINTMSK);
daintmsk >>= DAINT_OUTEP_SHIFT; daintmsk >>= DAINT_OUTEP_SHIFT;
for (idx = 1; idx < hsotg->num_of_eps; idx++) { for (idx = 1; idx < hsotg->num_of_eps; idx++) {
...@@ -3479,24 +3479,24 @@ static void dwc2_gadget_handle_incomplete_isoc_out(struct dwc2_hsotg *hsotg) ...@@ -3479,24 +3479,24 @@ static void dwc2_gadget_handle_incomplete_isoc_out(struct dwc2_hsotg *hsotg)
if (!hs_ep->isochronous || (BIT(idx) & ~daintmsk)) if (!hs_ep->isochronous || (BIT(idx) & ~daintmsk))
continue; continue;
epctrl = dwc2_readl(hsotg->regs + DOEPCTL(idx)); epctrl = dwc2_readl(hsotg, DOEPCTL(idx));
if ((epctrl & DXEPCTL_EPENA) && if ((epctrl & DXEPCTL_EPENA) &&
dwc2_gadget_target_frame_elapsed(hs_ep)) { dwc2_gadget_target_frame_elapsed(hs_ep)) {
/* Unmask GOUTNAKEFF interrupt */ /* Unmask GOUTNAKEFF interrupt */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk |= GINTSTS_GOUTNAKEFF; gintmsk |= GINTSTS_GOUTNAKEFF;
dwc2_writel(gintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, gintmsk, GINTMSK);
gintsts = dwc2_readl(hsotg->regs + GINTSTS); gintsts = dwc2_readl(hsotg, GINTSTS);
if (!(gintsts & GINTSTS_GOUTNAKEFF)) { if (!(gintsts & GINTSTS_GOUTNAKEFF)) {
dwc2_set_bit(hsotg->regs + DCTL, DCTL_SGOUTNAK); dwc2_set_bit(hsotg, DCTL, DCTL_SGOUTNAK);
break; break;
} }
} }
} }
/* Clear interrupt */ /* Clear interrupt */
dwc2_writel(GINTSTS_INCOMPL_SOOUT, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_INCOMPL_SOOUT, GINTSTS);
} }
/** /**
...@@ -3516,8 +3516,8 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw) ...@@ -3516,8 +3516,8 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
spin_lock(&hsotg->lock); spin_lock(&hsotg->lock);
irq_retry: irq_retry:
gintsts = dwc2_readl(hsotg->regs + GINTSTS); gintsts = dwc2_readl(hsotg, GINTSTS);
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
dev_dbg(hsotg->dev, "%s: %08x %08x (%08x) retry %d\n", dev_dbg(hsotg->dev, "%s: %08x %08x (%08x) retry %d\n",
__func__, gintsts, gintsts & gintmsk, gintmsk, retry_count); __func__, gintsts, gintsts & gintmsk, gintmsk, retry_count);
...@@ -3527,7 +3527,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw) ...@@ -3527,7 +3527,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
if (gintsts & GINTSTS_RESETDET) { if (gintsts & GINTSTS_RESETDET) {
dev_dbg(hsotg->dev, "%s: USBRstDet\n", __func__); dev_dbg(hsotg->dev, "%s: USBRstDet\n", __func__);
dwc2_writel(GINTSTS_RESETDET, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_RESETDET, GINTSTS);
/* This event must be used only if controller is suspended */ /* This event must be used only if controller is suspended */
if (hsotg->lx_state == DWC2_L2) { if (hsotg->lx_state == DWC2_L2) {
...@@ -3537,34 +3537,34 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw) ...@@ -3537,34 +3537,34 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
} }
if (gintsts & (GINTSTS_USBRST | GINTSTS_RESETDET)) { if (gintsts & (GINTSTS_USBRST | GINTSTS_RESETDET)) {
u32 usb_status = dwc2_readl(hsotg->regs + GOTGCTL); u32 usb_status = dwc2_readl(hsotg, GOTGCTL);
u32 connected = hsotg->connected; u32 connected = hsotg->connected;
dev_dbg(hsotg->dev, "%s: USBRst\n", __func__); dev_dbg(hsotg->dev, "%s: USBRst\n", __func__);
dev_dbg(hsotg->dev, "GNPTXSTS=%08x\n", dev_dbg(hsotg->dev, "GNPTXSTS=%08x\n",
dwc2_readl(hsotg->regs + GNPTXSTS)); dwc2_readl(hsotg, GNPTXSTS));
dwc2_writel(GINTSTS_USBRST, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_USBRST, GINTSTS);
/* Report disconnection if it is not already done. */ /* Report disconnection if it is not already done. */
dwc2_hsotg_disconnect(hsotg); dwc2_hsotg_disconnect(hsotg);
/* Reset device address to zero */ /* Reset device address to zero */
dwc2_clear_bit(hsotg->regs + DCFG, DCFG_DEVADDR_MASK); dwc2_clear_bit(hsotg, DCFG, DCFG_DEVADDR_MASK);
if (usb_status & GOTGCTL_BSESVLD && connected) if (usb_status & GOTGCTL_BSESVLD && connected)
dwc2_hsotg_core_init_disconnected(hsotg, true); dwc2_hsotg_core_init_disconnected(hsotg, true);
} }
if (gintsts & GINTSTS_ENUMDONE) { if (gintsts & GINTSTS_ENUMDONE) {
dwc2_writel(GINTSTS_ENUMDONE, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_ENUMDONE, GINTSTS);
dwc2_hsotg_irq_enumdone(hsotg); dwc2_hsotg_irq_enumdone(hsotg);
} }
if (gintsts & (GINTSTS_OEPINT | GINTSTS_IEPINT)) { if (gintsts & (GINTSTS_OEPINT | GINTSTS_IEPINT)) {
u32 daint = dwc2_readl(hsotg->regs + DAINT); u32 daint = dwc2_readl(hsotg, DAINT);
u32 daintmsk = dwc2_readl(hsotg->regs + DAINTMSK); u32 daintmsk = dwc2_readl(hsotg, DAINTMSK);
u32 daint_out, daint_in; u32 daint_out, daint_in;
int ep; int ep;
...@@ -3623,7 +3623,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw) ...@@ -3623,7 +3623,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
if (gintsts & GINTSTS_ERLYSUSP) { if (gintsts & GINTSTS_ERLYSUSP) {
dev_dbg(hsotg->dev, "GINTSTS_ErlySusp\n"); dev_dbg(hsotg->dev, "GINTSTS_ErlySusp\n");
dwc2_writel(GINTSTS_ERLYSUSP, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_ERLYSUSP, GINTSTS);
} }
/* /*
...@@ -3639,12 +3639,12 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw) ...@@ -3639,12 +3639,12 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
u32 daintmsk; u32 daintmsk;
struct dwc2_hsotg_ep *hs_ep; struct dwc2_hsotg_ep *hs_ep;
daintmsk = dwc2_readl(hsotg->regs + DAINTMSK); daintmsk = dwc2_readl(hsotg, DAINTMSK);
daintmsk >>= DAINT_OUTEP_SHIFT; daintmsk >>= DAINT_OUTEP_SHIFT;
/* Mask this interrupt */ /* Mask this interrupt */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk &= ~GINTSTS_GOUTNAKEFF; gintmsk &= ~GINTSTS_GOUTNAKEFF;
dwc2_writel(gintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, gintmsk, GINTMSK);
dev_dbg(hsotg->dev, "GOUTNakEff triggered\n"); dev_dbg(hsotg->dev, "GOUTNakEff triggered\n");
for (idx = 1; idx < hsotg->num_of_eps; idx++) { for (idx = 1; idx < hsotg->num_of_eps; idx++) {
...@@ -3653,12 +3653,12 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw) ...@@ -3653,12 +3653,12 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
if (!hs_ep->isochronous || (BIT(idx) & ~daintmsk)) if (!hs_ep->isochronous || (BIT(idx) & ~daintmsk))
continue; continue;
epctrl = dwc2_readl(hsotg->regs + DOEPCTL(idx)); epctrl = dwc2_readl(hsotg, DOEPCTL(idx));
if (epctrl & DXEPCTL_EPENA) { if (epctrl & DXEPCTL_EPENA) {
epctrl |= DXEPCTL_SNAK; epctrl |= DXEPCTL_SNAK;
epctrl |= DXEPCTL_EPDIS; epctrl |= DXEPCTL_EPDIS;
dwc2_writel(epctrl, hsotg->regs + DOEPCTL(idx)); dwc2_writel(hsotg, epctrl, DOEPCTL(idx));
} }
} }
...@@ -3668,7 +3668,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw) ...@@ -3668,7 +3668,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
if (gintsts & GINTSTS_GINNAKEFF) { if (gintsts & GINTSTS_GINNAKEFF) {
dev_info(hsotg->dev, "GINNakEff triggered\n"); dev_info(hsotg->dev, "GINNakEff triggered\n");
dwc2_set_bit(hsotg->regs + DCTL, DCTL_CGNPINNAK); dwc2_set_bit(hsotg, DCTL, DCTL_CGNPINNAK);
dwc2_hsotg_dump(hsotg); dwc2_hsotg_dump(hsotg);
} }
...@@ -3708,7 +3708,7 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg, ...@@ -3708,7 +3708,7 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
if (hs_ep->dir_in) { if (hs_ep->dir_in) {
if (hsotg->dedicated_fifos || hs_ep->periodic) { if (hsotg->dedicated_fifos || hs_ep->periodic) {
dwc2_set_bit(hsotg->regs + epctrl_reg, DXEPCTL_SNAK); dwc2_set_bit(hsotg, epctrl_reg, DXEPCTL_SNAK);
/* Wait for Nak effect */ /* Wait for Nak effect */
if (dwc2_hsotg_wait_bit_set(hsotg, epint_reg, if (dwc2_hsotg_wait_bit_set(hsotg, epint_reg,
DXEPINT_INEPNAKEFF, 100)) DXEPINT_INEPNAKEFF, 100))
...@@ -3716,7 +3716,7 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg, ...@@ -3716,7 +3716,7 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
"%s: timeout DIEPINT.NAKEFF\n", "%s: timeout DIEPINT.NAKEFF\n",
__func__); __func__);
} else { } else {
dwc2_set_bit(hsotg->regs + DCTL, DCTL_SGNPINNAK); dwc2_set_bit(hsotg, DCTL, DCTL_SGNPINNAK);
/* Wait for Nak effect */ /* Wait for Nak effect */
if (dwc2_hsotg_wait_bit_set(hsotg, GINTSTS, if (dwc2_hsotg_wait_bit_set(hsotg, GINTSTS,
GINTSTS_GINNAKEFF, 100)) GINTSTS_GINNAKEFF, 100))
...@@ -3725,8 +3725,8 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg, ...@@ -3725,8 +3725,8 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
__func__); __func__);
} }
} else { } else {
if (!(dwc2_readl(hsotg->regs + GINTSTS) & GINTSTS_GOUTNAKEFF)) if (!(dwc2_readl(hsotg, GINTSTS) & GINTSTS_GOUTNAKEFF))
dwc2_set_bit(hsotg->regs + DCTL, DCTL_SGOUTNAK); dwc2_set_bit(hsotg, DCTL, DCTL_SGOUTNAK);
/* Wait for global nak to take effect */ /* Wait for global nak to take effect */
if (dwc2_hsotg_wait_bit_set(hsotg, GINTSTS, if (dwc2_hsotg_wait_bit_set(hsotg, GINTSTS,
...@@ -3736,7 +3736,7 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg, ...@@ -3736,7 +3736,7 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
} }
/* Disable ep */ /* Disable ep */
dwc2_set_bit(hsotg->regs + epctrl_reg, DXEPCTL_EPDIS | DXEPCTL_SNAK); dwc2_set_bit(hsotg, epctrl_reg, DXEPCTL_EPDIS | DXEPCTL_SNAK);
/* Wait for ep to be disabled */ /* Wait for ep to be disabled */
if (dwc2_hsotg_wait_bit_set(hsotg, epint_reg, DXEPINT_EPDISBLD, 100)) if (dwc2_hsotg_wait_bit_set(hsotg, epint_reg, DXEPINT_EPDISBLD, 100))
...@@ -3744,7 +3744,7 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg, ...@@ -3744,7 +3744,7 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
"%s: timeout DOEPCTL.EPDisable\n", __func__); "%s: timeout DOEPCTL.EPDisable\n", __func__);
/* Clear EPDISBLD interrupt */ /* Clear EPDISBLD interrupt */
dwc2_set_bit(hsotg->regs + epint_reg, DXEPINT_EPDISBLD); dwc2_set_bit(hsotg, epint_reg, DXEPINT_EPDISBLD);
if (hs_ep->dir_in) { if (hs_ep->dir_in) {
unsigned short fifo_index; unsigned short fifo_index;
...@@ -3759,11 +3759,11 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg, ...@@ -3759,11 +3759,11 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
/* Clear Global In NP NAK in Shared FIFO for non periodic ep */ /* Clear Global In NP NAK in Shared FIFO for non periodic ep */
if (!hsotg->dedicated_fifos && !hs_ep->periodic) if (!hsotg->dedicated_fifos && !hs_ep->periodic)
dwc2_set_bit(hsotg->regs + DCTL, DCTL_CGNPINNAK); dwc2_set_bit(hsotg, DCTL, DCTL_CGNPINNAK);
} else { } else {
/* Remove global NAKs */ /* Remove global NAKs */
dwc2_set_bit(hsotg->regs + DCTL, DCTL_CGOUTNAK); dwc2_set_bit(hsotg, DCTL, DCTL_CGOUTNAK);
} }
} }
...@@ -3831,7 +3831,7 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep, ...@@ -3831,7 +3831,7 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
/* note, we handle this here instead of dwc2_hsotg_set_ep_maxpacket */ /* note, we handle this here instead of dwc2_hsotg_set_ep_maxpacket */
epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index); epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
epctrl = dwc2_readl(hsotg->regs + epctrl_reg); epctrl = dwc2_readl(hsotg, epctrl_reg);
dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x from 0x%08x\n", dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x from 0x%08x\n",
__func__, epctrl, epctrl_reg); __func__, epctrl, epctrl_reg);
...@@ -3879,13 +3879,13 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep, ...@@ -3879,13 +3879,13 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
hs_ep->compl_desc = 0; hs_ep->compl_desc = 0;
if (dir_in) { if (dir_in) {
hs_ep->periodic = 1; hs_ep->periodic = 1;
mask = dwc2_readl(hsotg->regs + DIEPMSK); mask = dwc2_readl(hsotg, DIEPMSK);
mask |= DIEPMSK_NAKMSK; mask |= DIEPMSK_NAKMSK;
dwc2_writel(mask, hsotg->regs + DIEPMSK); dwc2_writel(hsotg, mask, DIEPMSK);
} else { } else {
mask = dwc2_readl(hsotg->regs + DOEPMSK); mask = dwc2_readl(hsotg, DOEPMSK);
mask |= DOEPMSK_OUTTKNEPDISMSK; mask |= DOEPMSK_OUTTKNEPDISMSK;
dwc2_writel(mask, hsotg->regs + DOEPMSK); dwc2_writel(hsotg, mask, DOEPMSK);
} }
break; break;
...@@ -3920,7 +3920,7 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep, ...@@ -3920,7 +3920,7 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
for (i = 1; i < hsotg->num_of_eps; ++i) { for (i = 1; i < hsotg->num_of_eps; ++i) {
if (hsotg->fifo_map & (1 << i)) if (hsotg->fifo_map & (1 << i))
continue; continue;
val = dwc2_readl(hsotg->regs + DPTXFSIZN(i)); val = dwc2_readl(hsotg, DPTXFSIZN(i));
val = (val >> FIFOSIZE_DEPTH_SHIFT) * 4; val = (val >> FIFOSIZE_DEPTH_SHIFT) * 4;
if (val < size) if (val < size)
continue; continue;
...@@ -3958,7 +3958,7 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep, ...@@ -3958,7 +3958,7 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
* to 4.00a (including both). Also for FS_IOT_1.00a * to 4.00a (including both). Also for FS_IOT_1.00a
* and HS_IOT_1.00a. * and HS_IOT_1.00a.
*/ */
u32 gsnpsid = dwc2_readl(hsotg->regs + GSNPSID); u32 gsnpsid = dwc2_readl(hsotg, GSNPSID);
if ((gsnpsid >= DWC2_CORE_REV_2_72a && if ((gsnpsid >= DWC2_CORE_REV_2_72a &&
gsnpsid <= DWC2_CORE_REV_4_00a) || gsnpsid <= DWC2_CORE_REV_4_00a) ||
...@@ -3970,9 +3970,9 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep, ...@@ -3970,9 +3970,9 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
dev_dbg(hsotg->dev, "%s: write DxEPCTL=0x%08x\n", dev_dbg(hsotg->dev, "%s: write DxEPCTL=0x%08x\n",
__func__, epctrl); __func__, epctrl);
dwc2_writel(epctrl, hsotg->regs + epctrl_reg); dwc2_writel(hsotg, epctrl, epctrl_reg);
dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x\n", dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x\n",
__func__, dwc2_readl(hsotg->regs + epctrl_reg)); __func__, dwc2_readl(hsotg, epctrl_reg));
/* enable the endpoint interrupt */ /* enable the endpoint interrupt */
dwc2_hsotg_ctrl_epint(hsotg, index, dir_in, 1); dwc2_hsotg_ctrl_epint(hsotg, index, dir_in, 1);
...@@ -4021,7 +4021,7 @@ static int dwc2_hsotg_ep_disable(struct usb_ep *ep) ...@@ -4021,7 +4021,7 @@ static int dwc2_hsotg_ep_disable(struct usb_ep *ep)
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
ctrl = dwc2_readl(hsotg->regs + epctrl_reg); ctrl = dwc2_readl(hsotg, epctrl_reg);
if (ctrl & DXEPCTL_EPENA) if (ctrl & DXEPCTL_EPENA)
dwc2_hsotg_ep_stop_xfr(hsotg, hs_ep); dwc2_hsotg_ep_stop_xfr(hsotg, hs_ep);
...@@ -4031,7 +4031,7 @@ static int dwc2_hsotg_ep_disable(struct usb_ep *ep) ...@@ -4031,7 +4031,7 @@ static int dwc2_hsotg_ep_disable(struct usb_ep *ep)
ctrl |= DXEPCTL_SNAK; ctrl |= DXEPCTL_SNAK;
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl); dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl);
dwc2_writel(ctrl, hsotg->regs + epctrl_reg); dwc2_writel(hsotg, ctrl, epctrl_reg);
/* disable endpoint interrupts */ /* disable endpoint interrupts */
dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 0); dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 0);
...@@ -4138,7 +4138,7 @@ static int dwc2_hsotg_ep_sethalt(struct usb_ep *ep, int value, bool now) ...@@ -4138,7 +4138,7 @@ static int dwc2_hsotg_ep_sethalt(struct usb_ep *ep, int value, bool now)
if (hs_ep->dir_in) { if (hs_ep->dir_in) {
epreg = DIEPCTL(index); epreg = DIEPCTL(index);
epctl = dwc2_readl(hs->regs + epreg); epctl = dwc2_readl(hs, epreg);
if (value) { if (value) {
epctl |= DXEPCTL_STALL | DXEPCTL_SNAK; epctl |= DXEPCTL_STALL | DXEPCTL_SNAK;
...@@ -4151,10 +4151,10 @@ static int dwc2_hsotg_ep_sethalt(struct usb_ep *ep, int value, bool now) ...@@ -4151,10 +4151,10 @@ static int dwc2_hsotg_ep_sethalt(struct usb_ep *ep, int value, bool now)
xfertype == DXEPCTL_EPTYPE_INTERRUPT) xfertype == DXEPCTL_EPTYPE_INTERRUPT)
epctl |= DXEPCTL_SETD0PID; epctl |= DXEPCTL_SETD0PID;
} }
dwc2_writel(epctl, hs->regs + epreg); dwc2_writel(hs, epctl, epreg);
} else { } else {
epreg = DOEPCTL(index); epreg = DOEPCTL(index);
epctl = dwc2_readl(hs->regs + epreg); epctl = dwc2_readl(hs, epreg);
if (value) { if (value) {
epctl |= DXEPCTL_STALL; epctl |= DXEPCTL_STALL;
...@@ -4165,7 +4165,7 @@ static int dwc2_hsotg_ep_sethalt(struct usb_ep *ep, int value, bool now) ...@@ -4165,7 +4165,7 @@ static int dwc2_hsotg_ep_sethalt(struct usb_ep *ep, int value, bool now)
xfertype == DXEPCTL_EPTYPE_INTERRUPT) xfertype == DXEPCTL_EPTYPE_INTERRUPT)
epctl |= DXEPCTL_SETD0PID; epctl |= DXEPCTL_SETD0PID;
} }
dwc2_writel(epctl, hs->regs + epreg); dwc2_writel(hs, epctl, epreg);
} }
hs_ep->halted = value; hs_ep->halted = value;
...@@ -4213,29 +4213,29 @@ static void dwc2_hsotg_init(struct dwc2_hsotg *hsotg) ...@@ -4213,29 +4213,29 @@ static void dwc2_hsotg_init(struct dwc2_hsotg *hsotg)
u32 usbcfg; u32 usbcfg;
/* unmask subset of endpoint interrupts */ /* unmask subset of endpoint interrupts */
dwc2_writel(DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK | dwc2_writel(hsotg, DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK |
DIEPMSK_EPDISBLDMSK | DIEPMSK_XFERCOMPLMSK, DIEPMSK_EPDISBLDMSK | DIEPMSK_XFERCOMPLMSK,
hsotg->regs + DIEPMSK); DIEPMSK);
dwc2_writel(DOEPMSK_SETUPMSK | DOEPMSK_AHBERRMSK | dwc2_writel(hsotg, DOEPMSK_SETUPMSK | DOEPMSK_AHBERRMSK |
DOEPMSK_EPDISBLDMSK | DOEPMSK_XFERCOMPLMSK, DOEPMSK_EPDISBLDMSK | DOEPMSK_XFERCOMPLMSK,
hsotg->regs + DOEPMSK); DOEPMSK);
dwc2_writel(0, hsotg->regs + DAINTMSK); dwc2_writel(hsotg, 0, DAINTMSK);
/* Be in disconnected state until gadget is registered */ /* Be in disconnected state until gadget is registered */
dwc2_set_bit(hsotg->regs + DCTL, DCTL_SFTDISCON); dwc2_set_bit(hsotg, DCTL, DCTL_SFTDISCON);
/* setup fifos */ /* setup fifos */
dev_dbg(hsotg->dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n", dev_dbg(hsotg->dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n",
dwc2_readl(hsotg->regs + GRXFSIZ), dwc2_readl(hsotg, GRXFSIZ),
dwc2_readl(hsotg->regs + GNPTXFSIZ)); dwc2_readl(hsotg, GNPTXFSIZ));
dwc2_hsotg_init_fifo(hsotg); dwc2_hsotg_init_fifo(hsotg);
/* keep other bits untouched (so e.g. forced modes are not lost) */ /* keep other bits untouched (so e.g. forced modes are not lost) */
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP | usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP |
GUSBCFG_HNPCAP | GUSBCFG_USBTRDTIM_MASK); GUSBCFG_HNPCAP | GUSBCFG_USBTRDTIM_MASK);
...@@ -4243,10 +4243,10 @@ static void dwc2_hsotg_init(struct dwc2_hsotg *hsotg) ...@@ -4243,10 +4243,10 @@ static void dwc2_hsotg_init(struct dwc2_hsotg *hsotg)
trdtim = (hsotg->phyif == GUSBCFG_PHYIF8) ? 9 : 5; trdtim = (hsotg->phyif == GUSBCFG_PHYIF8) ? 9 : 5;
usbcfg |= hsotg->phyif | GUSBCFG_TOUTCAL(7) | usbcfg |= hsotg->phyif | GUSBCFG_TOUTCAL(7) |
(trdtim << GUSBCFG_USBTRDTIM_SHIFT); (trdtim << GUSBCFG_USBTRDTIM_SHIFT);
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
if (using_dma(hsotg)) if (using_dma(hsotg))
dwc2_set_bit(hsotg->regs + GAHBCFG, GAHBCFG_DMA_EN); dwc2_set_bit(hsotg, GAHBCFG, GAHBCFG_DMA_EN);
} }
/** /**
...@@ -4536,9 +4536,9 @@ static void dwc2_hsotg_initep(struct dwc2_hsotg *hsotg, ...@@ -4536,9 +4536,9 @@ static void dwc2_hsotg_initep(struct dwc2_hsotg *hsotg,
u32 next = DXEPCTL_NEXTEP((epnum + 1) % 15); u32 next = DXEPCTL_NEXTEP((epnum + 1) % 15);
if (dir_in) if (dir_in)
dwc2_writel(next, hsotg->regs + DIEPCTL(epnum)); dwc2_writel(hsotg, next, DIEPCTL(epnum));
else else
dwc2_writel(next, hsotg->regs + DOEPCTL(epnum)); dwc2_writel(hsotg, next, DOEPCTL(epnum));
} }
} }
...@@ -4607,24 +4607,23 @@ static void dwc2_hsotg_dump(struct dwc2_hsotg *hsotg) ...@@ -4607,24 +4607,23 @@ static void dwc2_hsotg_dump(struct dwc2_hsotg *hsotg)
{ {
#ifdef DEBUG #ifdef DEBUG
struct device *dev = hsotg->dev; struct device *dev = hsotg->dev;
void __iomem *regs = hsotg->regs;
u32 val; u32 val;
int idx; int idx;
dev_info(dev, "DCFG=0x%08x, DCTL=0x%08x, DIEPMSK=%08x\n", dev_info(dev, "DCFG=0x%08x, DCTL=0x%08x, DIEPMSK=%08x\n",
dwc2_readl(regs + DCFG), dwc2_readl(regs + DCTL), dwc2_readl(hsotg, DCFG), dwc2_readl(hsotg, DCTL),
dwc2_readl(regs + DIEPMSK)); dwc2_readl(hsotg, DIEPMSK));
dev_info(dev, "GAHBCFG=0x%08x, GHWCFG1=0x%08x\n", dev_info(dev, "GAHBCFG=0x%08x, GHWCFG1=0x%08x\n",
dwc2_readl(regs + GAHBCFG), dwc2_readl(regs + GHWCFG1)); dwc2_readl(hsotg, GAHBCFG), dwc2_readl(hsotg, GHWCFG1));
dev_info(dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n", dev_info(dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n",
dwc2_readl(regs + GRXFSIZ), dwc2_readl(regs + GNPTXFSIZ)); dwc2_readl(hsotg, GRXFSIZ), dwc2_readl(hsotg, GNPTXFSIZ));
/* show periodic fifo settings */ /* show periodic fifo settings */
for (idx = 1; idx < hsotg->num_of_eps; idx++) { for (idx = 1; idx < hsotg->num_of_eps; idx++) {
val = dwc2_readl(regs + DPTXFSIZN(idx)); val = dwc2_readl(hsotg, DPTXFSIZN(idx));
dev_info(dev, "DPTx[%d] FSize=%d, StAddr=0x%08x\n", idx, dev_info(dev, "DPTx[%d] FSize=%d, StAddr=0x%08x\n", idx,
val >> FIFOSIZE_DEPTH_SHIFT, val >> FIFOSIZE_DEPTH_SHIFT,
val & FIFOSIZE_STARTADDR_MASK); val & FIFOSIZE_STARTADDR_MASK);
...@@ -4633,20 +4632,20 @@ static void dwc2_hsotg_dump(struct dwc2_hsotg *hsotg) ...@@ -4633,20 +4632,20 @@ static void dwc2_hsotg_dump(struct dwc2_hsotg *hsotg)
for (idx = 0; idx < hsotg->num_of_eps; idx++) { for (idx = 0; idx < hsotg->num_of_eps; idx++) {
dev_info(dev, dev_info(dev,
"ep%d-in: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n", idx, "ep%d-in: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n", idx,
dwc2_readl(regs + DIEPCTL(idx)), dwc2_readl(hsotg, DIEPCTL(idx)),
dwc2_readl(regs + DIEPTSIZ(idx)), dwc2_readl(hsotg, DIEPTSIZ(idx)),
dwc2_readl(regs + DIEPDMA(idx))); dwc2_readl(hsotg, DIEPDMA(idx)));
val = dwc2_readl(regs + DOEPCTL(idx)); val = dwc2_readl(hsotg, DOEPCTL(idx));
dev_info(dev, dev_info(dev,
"ep%d-out: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n", "ep%d-out: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n",
idx, dwc2_readl(regs + DOEPCTL(idx)), idx, dwc2_readl(hsotg, DOEPCTL(idx)),
dwc2_readl(regs + DOEPTSIZ(idx)), dwc2_readl(hsotg, DOEPTSIZ(idx)),
dwc2_readl(regs + DOEPDMA(idx))); dwc2_readl(hsotg, DOEPDMA(idx)));
} }
dev_info(dev, "DVBUSDIS=0x%08x, DVBUSPULSE=%08x\n", dev_info(dev, "DVBUSDIS=0x%08x, DVBUSPULSE=%08x\n",
dwc2_readl(regs + DVBUSDIS), dwc2_readl(regs + DVBUSPULSE)); dwc2_readl(hsotg, DVBUSDIS), dwc2_readl(hsotg, DVBUSPULSE));
#endif #endif
} }
...@@ -4835,15 +4834,15 @@ int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg) ...@@ -4835,15 +4834,15 @@ int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg)
/* Backup dev regs */ /* Backup dev regs */
dr = &hsotg->dr_backup; dr = &hsotg->dr_backup;
dr->dcfg = dwc2_readl(hsotg->regs + DCFG); dr->dcfg = dwc2_readl(hsotg, DCFG);
dr->dctl = dwc2_readl(hsotg->regs + DCTL); dr->dctl = dwc2_readl(hsotg, DCTL);
dr->daintmsk = dwc2_readl(hsotg->regs + DAINTMSK); dr->daintmsk = dwc2_readl(hsotg, DAINTMSK);
dr->diepmsk = dwc2_readl(hsotg->regs + DIEPMSK); dr->diepmsk = dwc2_readl(hsotg, DIEPMSK);
dr->doepmsk = dwc2_readl(hsotg->regs + DOEPMSK); dr->doepmsk = dwc2_readl(hsotg, DOEPMSK);
for (i = 0; i < hsotg->num_of_eps; i++) { for (i = 0; i < hsotg->num_of_eps; i++) {
/* Backup IN EPs */ /* Backup IN EPs */
dr->diepctl[i] = dwc2_readl(hsotg->regs + DIEPCTL(i)); dr->diepctl[i] = dwc2_readl(hsotg, DIEPCTL(i));
/* Ensure DATA PID is correctly configured */ /* Ensure DATA PID is correctly configured */
if (dr->diepctl[i] & DXEPCTL_DPID) if (dr->diepctl[i] & DXEPCTL_DPID)
...@@ -4851,11 +4850,11 @@ int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg) ...@@ -4851,11 +4850,11 @@ int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg)
else else
dr->diepctl[i] |= DXEPCTL_SETD0PID; dr->diepctl[i] |= DXEPCTL_SETD0PID;
dr->dieptsiz[i] = dwc2_readl(hsotg->regs + DIEPTSIZ(i)); dr->dieptsiz[i] = dwc2_readl(hsotg, DIEPTSIZ(i));
dr->diepdma[i] = dwc2_readl(hsotg->regs + DIEPDMA(i)); dr->diepdma[i] = dwc2_readl(hsotg, DIEPDMA(i));
/* Backup OUT EPs */ /* Backup OUT EPs */
dr->doepctl[i] = dwc2_readl(hsotg->regs + DOEPCTL(i)); dr->doepctl[i] = dwc2_readl(hsotg, DOEPCTL(i));
/* Ensure DATA PID is correctly configured */ /* Ensure DATA PID is correctly configured */
if (dr->doepctl[i] & DXEPCTL_DPID) if (dr->doepctl[i] & DXEPCTL_DPID)
...@@ -4863,9 +4862,9 @@ int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg) ...@@ -4863,9 +4862,9 @@ int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg)
else else
dr->doepctl[i] |= DXEPCTL_SETD0PID; dr->doepctl[i] |= DXEPCTL_SETD0PID;
dr->doeptsiz[i] = dwc2_readl(hsotg->regs + DOEPTSIZ(i)); dr->doeptsiz[i] = dwc2_readl(hsotg, DOEPTSIZ(i));
dr->doepdma[i] = dwc2_readl(hsotg->regs + DOEPDMA(i)); dr->doepdma[i] = dwc2_readl(hsotg, DOEPDMA(i));
dr->dtxfsiz[i] = dwc2_readl(hsotg->regs + DPTXFSIZN(i)); dr->dtxfsiz[i] = dwc2_readl(hsotg, DPTXFSIZN(i));
} }
dr->valid = true; dr->valid = true;
return 0; return 0;
...@@ -4898,17 +4897,17 @@ int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, int remote_wakeup) ...@@ -4898,17 +4897,17 @@ int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, int remote_wakeup)
dr->valid = false; dr->valid = false;
if (!remote_wakeup) if (!remote_wakeup)
dwc2_writel(dr->dctl, hsotg->regs + DCTL); dwc2_writel(hsotg, dr->dctl, DCTL);
dwc2_writel(dr->daintmsk, hsotg->regs + DAINTMSK); dwc2_writel(hsotg, dr->daintmsk, DAINTMSK);
dwc2_writel(dr->diepmsk, hsotg->regs + DIEPMSK); dwc2_writel(hsotg, dr->diepmsk, DIEPMSK);
dwc2_writel(dr->doepmsk, hsotg->regs + DOEPMSK); dwc2_writel(hsotg, dr->doepmsk, DOEPMSK);
for (i = 0; i < hsotg->num_of_eps; i++) { for (i = 0; i < hsotg->num_of_eps; i++) {
/* Restore IN EPs */ /* Restore IN EPs */
dwc2_writel(dr->dieptsiz[i], hsotg->regs + DIEPTSIZ(i)); dwc2_writel(hsotg, dr->dieptsiz[i], DIEPTSIZ(i));
dwc2_writel(dr->diepdma[i], hsotg->regs + DIEPDMA(i)); dwc2_writel(hsotg, dr->diepdma[i], DIEPDMA(i));
dwc2_writel(dr->doeptsiz[i], hsotg->regs + DOEPTSIZ(i)); dwc2_writel(hsotg, dr->doeptsiz[i], DOEPTSIZ(i));
/** WA for enabled EPx's IN in DDMA mode. On entering to /** WA for enabled EPx's IN in DDMA mode. On entering to
* hibernation wrong value read and saved from DIEPDMAx, * hibernation wrong value read and saved from DIEPDMAx,
* as result BNA interrupt asserted on hibernation exit * as result BNA interrupt asserted on hibernation exit
...@@ -4917,10 +4916,10 @@ int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, int remote_wakeup) ...@@ -4917,10 +4916,10 @@ int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, int remote_wakeup)
if (hsotg->params.g_dma_desc && if (hsotg->params.g_dma_desc &&
(dr->diepctl[i] & DXEPCTL_EPENA)) (dr->diepctl[i] & DXEPCTL_EPENA))
dr->diepdma[i] = hsotg->eps_in[i]->desc_list_dma; dr->diepdma[i] = hsotg->eps_in[i]->desc_list_dma;
dwc2_writel(dr->dtxfsiz[i], hsotg->regs + DPTXFSIZN(i)); dwc2_writel(hsotg, dr->dtxfsiz[i], DPTXFSIZN(i));
dwc2_writel(dr->diepctl[i], hsotg->regs + DIEPCTL(i)); dwc2_writel(hsotg, dr->diepctl[i], DIEPCTL(i));
/* Restore OUT EPs */ /* Restore OUT EPs */
dwc2_writel(dr->doeptsiz[i], hsotg->regs + DOEPTSIZ(i)); dwc2_writel(hsotg, dr->doeptsiz[i], DOEPTSIZ(i));
/* WA for enabled EPx's OUT in DDMA mode. On entering to /* WA for enabled EPx's OUT in DDMA mode. On entering to
* hibernation wrong value read and saved from DOEPDMAx, * hibernation wrong value read and saved from DOEPDMAx,
* as result BNA interrupt asserted on hibernation exit * as result BNA interrupt asserted on hibernation exit
...@@ -4929,8 +4928,8 @@ int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, int remote_wakeup) ...@@ -4929,8 +4928,8 @@ int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, int remote_wakeup)
if (hsotg->params.g_dma_desc && if (hsotg->params.g_dma_desc &&
(dr->doepctl[i] & DXEPCTL_EPENA)) (dr->doepctl[i] & DXEPCTL_EPENA))
dr->doepdma[i] = hsotg->eps_out[i]->desc_list_dma; dr->doepdma[i] = hsotg->eps_out[i]->desc_list_dma;
dwc2_writel(dr->doepdma[i], hsotg->regs + DOEPDMA(i)); dwc2_writel(hsotg, dr->doepdma[i], DOEPDMA(i));
dwc2_writel(dr->doepctl[i], hsotg->regs + DOEPCTL(i)); dwc2_writel(hsotg, dr->doepctl[i], DOEPCTL(i));
} }
return 0; return 0;
...@@ -4954,9 +4953,8 @@ void dwc2_gadget_init_lpm(struct dwc2_hsotg *hsotg) ...@@ -4954,9 +4953,8 @@ void dwc2_gadget_init_lpm(struct dwc2_hsotg *hsotg)
val |= hsotg->params.lpm_clock_gating ? GLPMCFG_ENBLSLPM : 0; val |= hsotg->params.lpm_clock_gating ? GLPMCFG_ENBLSLPM : 0;
val |= hsotg->params.hird_threshold << GLPMCFG_HIRD_THRES_SHIFT; val |= hsotg->params.hird_threshold << GLPMCFG_HIRD_THRES_SHIFT;
val |= hsotg->params.besl ? GLPMCFG_ENBESL : 0; val |= hsotg->params.besl ? GLPMCFG_ENBESL : 0;
dwc2_writel(val, hsotg->regs + GLPMCFG); dwc2_writel(hsotg, val, GLPMCFG);
dev_dbg(hsotg->dev, "GLPMCFG=0x%08x\n", dwc2_readl(hsotg->regs dev_dbg(hsotg->dev, "GLPMCFG=0x%08x\n", dwc2_readl(hsotg, GLPMCFG));
+ GLPMCFG));
} }
/** /**
...@@ -4989,40 +4987,40 @@ int dwc2_gadget_enter_hibernation(struct dwc2_hsotg *hsotg) ...@@ -4989,40 +4987,40 @@ int dwc2_gadget_enter_hibernation(struct dwc2_hsotg *hsotg)
gpwrdn = GPWRDN_PWRDNRSTN; gpwrdn = GPWRDN_PWRDNRSTN;
gpwrdn |= GPWRDN_PMUACTV; gpwrdn |= GPWRDN_PMUACTV;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Set flag to indicate that we are in hibernation */ /* Set flag to indicate that we are in hibernation */
hsotg->hibernated = 1; hsotg->hibernated = 1;
/* Enable interrupts from wake up logic */ /* Enable interrupts from wake up logic */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_PMUINTSEL; gpwrdn |= GPWRDN_PMUINTSEL;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Unmask device mode interrupts in GPWRDN */ /* Unmask device mode interrupts in GPWRDN */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_RST_DET_MSK; gpwrdn |= GPWRDN_RST_DET_MSK;
gpwrdn |= GPWRDN_LNSTSCHG_MSK; gpwrdn |= GPWRDN_LNSTSCHG_MSK;
gpwrdn |= GPWRDN_STS_CHGINT_MSK; gpwrdn |= GPWRDN_STS_CHGINT_MSK;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Enable Power Down Clamp */ /* Enable Power Down Clamp */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_PWRDNCLMP; gpwrdn |= GPWRDN_PWRDNCLMP;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Switch off VDD */ /* Switch off VDD */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_PWRDNSWTCH; gpwrdn |= GPWRDN_PWRDNSWTCH;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Save gpwrdn register for further usage if stschng interrupt */ /* Save gpwrdn register for further usage if stschng interrupt */
hsotg->gr_backup.gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); hsotg->gr_backup.gpwrdn = dwc2_readl(hsotg, GPWRDN);
dev_dbg(hsotg->dev, "Hibernation completed\n"); dev_dbg(hsotg->dev, "Hibernation completed\n");
return ret; return ret;
...@@ -5064,46 +5062,46 @@ int dwc2_gadget_exit_hibernation(struct dwc2_hsotg *hsotg, ...@@ -5064,46 +5062,46 @@ int dwc2_gadget_exit_hibernation(struct dwc2_hsotg *hsotg,
if (!reset) { if (!reset) {
/* Clear all pending interupts */ /* Clear all pending interupts */
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS); dwc2_writel(hsotg, 0xffffffff, GINTSTS);
} }
/* De-assert Restore */ /* De-assert Restore */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn &= ~GPWRDN_RESTORE; gpwrdn &= ~GPWRDN_RESTORE;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
if (!rem_wakeup) { if (!rem_wakeup) {
pcgcctl = dwc2_readl(hsotg->regs + PCGCTL); pcgcctl = dwc2_readl(hsotg, PCGCTL);
pcgcctl &= ~PCGCTL_RSTPDWNMODULE; pcgcctl &= ~PCGCTL_RSTPDWNMODULE;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
} }
/* Restore GUSBCFG, DCFG and DCTL */ /* Restore GUSBCFG, DCFG and DCTL */
dwc2_writel(gr->gusbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG);
dwc2_writel(dr->dcfg, hsotg->regs + DCFG); dwc2_writel(hsotg, dr->dcfg, DCFG);
dwc2_writel(dr->dctl, hsotg->regs + DCTL); dwc2_writel(hsotg, dr->dctl, DCTL);
/* De-assert Wakeup Logic */ /* De-assert Wakeup Logic */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn &= ~GPWRDN_PMUACTV; gpwrdn &= ~GPWRDN_PMUACTV;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
if (rem_wakeup) { if (rem_wakeup) {
udelay(10); udelay(10);
/* Start Remote Wakeup Signaling */ /* Start Remote Wakeup Signaling */
dwc2_writel(dr->dctl | DCTL_RMTWKUPSIG, hsotg->regs + DCTL); dwc2_writel(hsotg, dr->dctl | DCTL_RMTWKUPSIG, DCTL);
} else { } else {
udelay(50); udelay(50);
/* Set Device programming done bit */ /* Set Device programming done bit */
dctl = dwc2_readl(hsotg->regs + DCTL); dctl = dwc2_readl(hsotg, DCTL);
dctl |= DCTL_PWRONPRGDONE; dctl |= DCTL_PWRONPRGDONE;
dwc2_writel(dctl, hsotg->regs + DCTL); dwc2_writel(hsotg, dctl, DCTL);
} }
/* Wait for interrupts which must be cleared */ /* Wait for interrupts which must be cleared */
mdelay(2); mdelay(2);
/* Clear all pending interupts */ /* Clear all pending interupts */
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS); dwc2_writel(hsotg, 0xffffffff, GINTSTS);
/* Restore global registers */ /* Restore global registers */
ret = dwc2_restore_global_registers(hsotg); ret = dwc2_restore_global_registers(hsotg);
...@@ -5123,9 +5121,9 @@ int dwc2_gadget_exit_hibernation(struct dwc2_hsotg *hsotg, ...@@ -5123,9 +5121,9 @@ int dwc2_gadget_exit_hibernation(struct dwc2_hsotg *hsotg,
if (rem_wakeup) { if (rem_wakeup) {
mdelay(10); mdelay(10);
dctl = dwc2_readl(hsotg->regs + DCTL); dctl = dwc2_readl(hsotg, DCTL);
dctl &= ~DCTL_RMTWKUPSIG; dctl &= ~DCTL_RMTWKUPSIG;
dwc2_writel(dctl, hsotg->regs + DCTL); dwc2_writel(hsotg, dctl, DCTL);
} }
hsotg->hibernated = 0; hsotg->hibernated = 0;
......
...@@ -75,10 +75,10 @@ static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg) ...@@ -75,10 +75,10 @@ static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg)
u32 intmsk; u32 intmsk;
/* Clear any pending OTG Interrupts */ /* Clear any pending OTG Interrupts */
dwc2_writel(0xffffffff, hsotg->regs + GOTGINT); dwc2_writel(hsotg, 0xffffffff, GOTGINT);
/* Clear any pending interrupts */ /* Clear any pending interrupts */
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS); dwc2_writel(hsotg, 0xffffffff, GINTSTS);
/* Enable the interrupts in the GINTMSK */ /* Enable the interrupts in the GINTMSK */
intmsk = GINTSTS_MODEMIS | GINTSTS_OTGINT; intmsk = GINTSTS_MODEMIS | GINTSTS_OTGINT;
...@@ -94,7 +94,7 @@ static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg) ...@@ -94,7 +94,7 @@ static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg)
if (dwc2_is_device_mode(hsotg) && hsotg->params.lpm) if (dwc2_is_device_mode(hsotg) && hsotg->params.lpm)
intmsk |= GINTSTS_LPMTRANRCVD; 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) ...@@ -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); 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 &= ~HCFG_FSLSPCLKSEL_MASK;
hcfg |= val << HCFG_FSLSPCLKSEL_SHIFT; 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) 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) ...@@ -135,10 +135,10 @@ static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
if (select_phy) { if (select_phy) {
dev_dbg(hsotg->dev, "FS PHY selected\n"); dev_dbg(hsotg->dev, "FS PHY selected\n");
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
if (!(usbcfg & GUSBCFG_PHYSEL)) { if (!(usbcfg & GUSBCFG_PHYSEL)) {
usbcfg |= GUSBCFG_PHYSEL; usbcfg |= GUSBCFG_PHYSEL;
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
/* Reset after a PHY select */ /* Reset after a PHY select */
retval = dwc2_core_reset(hsotg, false); retval = dwc2_core_reset(hsotg, false);
...@@ -151,7 +151,7 @@ static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) ...@@ -151,7 +151,7 @@ static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
} }
if (hsotg->params.activate_stm_fs_transceiver) { 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)) { if (!(ggpio & GGPIO_STM32_OTG_GCCFG_PWRDWN)) {
dev_dbg(hsotg->dev, "Activating transceiver\n"); dev_dbg(hsotg->dev, "Activating transceiver\n");
/* /*
...@@ -159,7 +159,7 @@ static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) ...@@ -159,7 +159,7 @@ static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
* core configuration register. * core configuration register.
*/ */
ggpio |= GGPIO_STM32_OTG_GCCFG_PWRDWN; 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) ...@@ -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"); dev_dbg(hsotg->dev, "FS PHY enabling I2C\n");
/* Program GUSBCFG.OtgUtmiFsSel to I2C */ /* Program GUSBCFG.OtgUtmiFsSel to I2C */
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
usbcfg |= GUSBCFG_OTG_UTMI_FS_SEL; usbcfg |= GUSBCFG_OTG_UTMI_FS_SEL;
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
/* Program GI2CCTL.I2CEn */ /* Program GI2CCTL.I2CEn */
i2cctl = dwc2_readl(hsotg->regs + GI2CCTL); i2cctl = dwc2_readl(hsotg, GI2CCTL);
i2cctl &= ~GI2CCTL_I2CDEVADDR_MASK; i2cctl &= ~GI2CCTL_I2CDEVADDR_MASK;
i2cctl |= 1 << GI2CCTL_I2CDEVADDR_SHIFT; i2cctl |= 1 << GI2CCTL_I2CDEVADDR_SHIFT;
i2cctl &= ~GI2CCTL_I2CEN; i2cctl &= ~GI2CCTL_I2CEN;
dwc2_writel(i2cctl, hsotg->regs + GI2CCTL); dwc2_writel(hsotg, i2cctl, GI2CCTL);
i2cctl |= GI2CCTL_I2CEN; i2cctl |= GI2CCTL_I2CEN;
dwc2_writel(i2cctl, hsotg->regs + GI2CCTL); dwc2_writel(hsotg, i2cctl, GI2CCTL);
} }
return retval; return retval;
...@@ -201,7 +201,7 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) ...@@ -201,7 +201,7 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
if (!select_phy) if (!select_phy)
return 0; return 0;
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
usbcfg_old = usbcfg; usbcfg_old = usbcfg;
/* /*
...@@ -236,7 +236,7 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) ...@@ -236,7 +236,7 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
} }
if (usbcfg != usbcfg_old) { if (usbcfg != usbcfg_old) {
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
/* Reset after setting the PHY parameters */ /* Reset after setting the PHY parameters */
retval = dwc2_core_reset(hsotg, false); retval = dwc2_core_reset(hsotg, false);
...@@ -273,15 +273,15 @@ static int dwc2_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) ...@@ -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->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED &&
hsotg->params.ulpi_fs_ls) { hsotg->params.ulpi_fs_ls) {
dev_dbg(hsotg->dev, "Setting ULPI FSLS\n"); 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_FS_LS;
usbcfg |= GUSBCFG_ULPI_CLK_SUSP_M; usbcfg |= GUSBCFG_ULPI_CLK_SUSP_M;
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
} else { } else {
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
usbcfg &= ~GUSBCFG_ULPI_FS_LS; usbcfg &= ~GUSBCFG_ULPI_FS_LS;
usbcfg &= ~GUSBCFG_ULPI_CLK_SUSP_M; usbcfg &= ~GUSBCFG_ULPI_CLK_SUSP_M;
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
} }
return retval; return retval;
...@@ -289,7 +289,7 @@ static int dwc2_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) ...@@ -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) 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) { switch (hsotg->hw_params.arch) {
case GHWCFG2_EXT_DMA_ARCH: case GHWCFG2_EXT_DMA_ARCH:
...@@ -316,7 +316,7 @@ static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg) ...@@ -316,7 +316,7 @@ static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg)
else else
hsotg->params.dma_desc_enable = false; hsotg->params.dma_desc_enable = false;
dwc2_writel(ahbcfg, hsotg->regs + GAHBCFG); dwc2_writel(hsotg, ahbcfg, GAHBCFG);
return 0; return 0;
} }
...@@ -325,7 +325,7 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg) ...@@ -325,7 +325,7 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg)
{ {
u32 usbcfg; u32 usbcfg;
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
usbcfg &= ~(GUSBCFG_HNPCAP | GUSBCFG_SRPCAP); usbcfg &= ~(GUSBCFG_HNPCAP | GUSBCFG_SRPCAP);
switch (hsotg->hw_params.op_mode) { switch (hsotg->hw_params.op_mode) {
...@@ -353,7 +353,7 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg) ...@@ -353,7 +353,7 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg)
break; break;
} }
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
} }
static int dwc2_vbus_supply_init(struct dwc2_hsotg *hsotg) static int dwc2_vbus_supply_init(struct dwc2_hsotg *hsotg)
...@@ -390,16 +390,16 @@ static void dwc2_enable_host_interrupts(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__); dev_dbg(hsotg->dev, "%s()\n", __func__);
/* Disable all interrupts */ /* Disable all interrupts */
dwc2_writel(0, hsotg->regs + GINTMSK); dwc2_writel(hsotg, 0, GINTMSK);
dwc2_writel(0, hsotg->regs + HAINTMSK); dwc2_writel(hsotg, 0, HAINTMSK);
/* Enable the common interrupts */ /* Enable the common interrupts */
dwc2_enable_common_interrupts(hsotg); dwc2_enable_common_interrupts(hsotg);
/* Enable host mode interrupts without disturbing common interrupts */ /* 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; 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) ...@@ -409,12 +409,12 @@ static void dwc2_enable_host_interrupts(struct dwc2_hsotg *hsotg)
*/ */
static void dwc2_disable_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 */ /* Disable host mode interrupts without disturbing common interrupts */
intmsk &= ~(GINTSTS_SOF | GINTSTS_PRTINT | GINTSTS_HCHINT | intmsk &= ~(GINTSTS_SOF | GINTSTS_PRTINT | GINTSTS_HCHINT |
GINTSTS_PTXFEMP | GINTSTS_NPTXFEMP | GINTSTS_DISCONNINT); 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) ...@@ -494,37 +494,37 @@ static void dwc2_config_fifos(struct dwc2_hsotg *hsotg)
dwc2_calculate_dynamic_fifo(hsotg); dwc2_calculate_dynamic_fifo(hsotg);
/* Rx FIFO */ /* Rx FIFO */
grxfsiz = dwc2_readl(hsotg->regs + GRXFSIZ); grxfsiz = dwc2_readl(hsotg, GRXFSIZ);
dev_dbg(hsotg->dev, "initial grxfsiz=%08x\n", grxfsiz); dev_dbg(hsotg->dev, "initial grxfsiz=%08x\n", grxfsiz);
grxfsiz &= ~GRXFSIZ_DEPTH_MASK; grxfsiz &= ~GRXFSIZ_DEPTH_MASK;
grxfsiz |= params->host_rx_fifo_size << grxfsiz |= params->host_rx_fifo_size <<
GRXFSIZ_DEPTH_SHIFT & GRXFSIZ_DEPTH_MASK; 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", dev_dbg(hsotg->dev, "new grxfsiz=%08x\n",
dwc2_readl(hsotg->regs + GRXFSIZ)); dwc2_readl(hsotg, GRXFSIZ));
/* Non-periodic Tx FIFO */ /* Non-periodic Tx FIFO */
dev_dbg(hsotg->dev, "initial gnptxfsiz=%08x\n", dev_dbg(hsotg->dev, "initial gnptxfsiz=%08x\n",
dwc2_readl(hsotg->regs + GNPTXFSIZ)); dwc2_readl(hsotg, GNPTXFSIZ));
nptxfsiz = params->host_nperio_tx_fifo_size << nptxfsiz = params->host_nperio_tx_fifo_size <<
FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK; FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK;
nptxfsiz |= params->host_rx_fifo_size << nptxfsiz |= params->host_rx_fifo_size <<
FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK; 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", dev_dbg(hsotg->dev, "new gnptxfsiz=%08x\n",
dwc2_readl(hsotg->regs + GNPTXFSIZ)); dwc2_readl(hsotg, GNPTXFSIZ));
/* Periodic Tx FIFO */ /* Periodic Tx FIFO */
dev_dbg(hsotg->dev, "initial hptxfsiz=%08x\n", dev_dbg(hsotg->dev, "initial hptxfsiz=%08x\n",
dwc2_readl(hsotg->regs + HPTXFSIZ)); dwc2_readl(hsotg, HPTXFSIZ));
hptxfsiz = params->host_perio_tx_fifo_size << hptxfsiz = params->host_perio_tx_fifo_size <<
FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK; FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK;
hptxfsiz |= (params->host_rx_fifo_size + hptxfsiz |= (params->host_rx_fifo_size +
params->host_nperio_tx_fifo_size) << params->host_nperio_tx_fifo_size) <<
FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK; 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", dev_dbg(hsotg->dev, "new hptxfsiz=%08x\n",
dwc2_readl(hsotg->regs + HPTXFSIZ)); dwc2_readl(hsotg, HPTXFSIZ));
if (hsotg->params.en_multiple_tx_fifo && if (hsotg->params.en_multiple_tx_fifo &&
hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_91a) { hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_91a) {
...@@ -533,14 +533,14 @@ static void dwc2_config_fifos(struct dwc2_hsotg *hsotg) ...@@ -533,14 +533,14 @@ static void dwc2_config_fifos(struct dwc2_hsotg *hsotg)
* Global DFIFOCFG calculation for Host mode - * Global DFIFOCFG calculation for Host mode -
* include RxFIFO, NPTXFIFO and HPTXFIFO * include RxFIFO, NPTXFIFO and HPTXFIFO
*/ */
dfifocfg = dwc2_readl(hsotg->regs + GDFIFOCFG); dfifocfg = dwc2_readl(hsotg, GDFIFOCFG);
dfifocfg &= ~GDFIFOCFG_EPINFOBASE_MASK; dfifocfg &= ~GDFIFOCFG_EPINFOBASE_MASK;
dfifocfg |= (params->host_rx_fifo_size + dfifocfg |= (params->host_rx_fifo_size +
params->host_nperio_tx_fifo_size + params->host_nperio_tx_fifo_size +
params->host_perio_tx_fifo_size) << params->host_perio_tx_fifo_size) <<
GDFIFOCFG_EPINFOBASE_SHIFT & GDFIFOCFG_EPINFOBASE_SHIFT &
GDFIFOCFG_EPINFOBASE_MASK; 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) ...@@ -560,8 +560,8 @@ u32 dwc2_calc_frame_interval(struct dwc2_hsotg *hsotg)
u32 hprt0; u32 hprt0;
int clock = 60; /* default value */ int clock = 60; /* default value */
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
hprt0 = dwc2_readl(hsotg->regs + HPRT0); hprt0 = dwc2_readl(hsotg, HPRT0);
if (!(usbcfg & GUSBCFG_PHYSEL) && (usbcfg & GUSBCFG_ULPI_UTMI_SEL) && if (!(usbcfg & GUSBCFG_PHYSEL) && (usbcfg & GUSBCFG_ULPI_UTMI_SEL) &&
!(usbcfg & GUSBCFG_PHYIF16)) !(usbcfg & GUSBCFG_PHYIF16))
...@@ -603,7 +603,6 @@ u32 dwc2_calc_frame_interval(struct dwc2_hsotg *hsotg) ...@@ -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) void dwc2_read_packet(struct dwc2_hsotg *hsotg, u8 *dest, u16 bytes)
{ {
u32 __iomem *fifo = hsotg->regs + HCFIFO(0);
u32 *data_buf = (u32 *)dest; u32 *data_buf = (u32 *)dest;
int word_count = (bytes + 3) / 4; int word_count = (bytes + 3) / 4;
int i; int i;
...@@ -617,7 +616,7 @@ void dwc2_read_packet(struct dwc2_hsotg *hsotg, u8 *dest, u16 bytes) ...@@ -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); dev_vdbg(hsotg->dev, "%s(%p,%p,%d)\n", __func__, hsotg, dest, bytes);
for (i = 0; i < word_count; i++, data_buf++) 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, ...@@ -646,10 +645,10 @@ static void dwc2_dump_channel_info(struct dwc2_hsotg *hsotg,
if (!chan) if (!chan)
return; return;
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chan->hc_num)); hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num));
hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chan->hc_num)); hcsplt = dwc2_readl(hsotg, HCSPLT(chan->hc_num));
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chan->hc_num)); hctsiz = dwc2_readl(hsotg, HCTSIZ(chan->hc_num));
hc_dma = dwc2_readl(hsotg->regs + HCDMA(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, " Assigned to channel %p:\n", chan);
dev_dbg(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", 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, ...@@ -797,7 +796,7 @@ static void dwc2_hc_enable_slave_ints(struct dwc2_hsotg *hsotg,
break; break;
} }
dwc2_writel(hcintmsk, hsotg->regs + HCINTMSK(chan->hc_num)); dwc2_writel(hsotg, hcintmsk, HCINTMSK(chan->hc_num));
if (dbg_hc(chan)) if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk); 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, ...@@ -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)) if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk); dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk);
} }
...@@ -855,16 +854,16 @@ static void dwc2_hc_enable_ints(struct dwc2_hsotg *hsotg, ...@@ -855,16 +854,16 @@ static void dwc2_hc_enable_ints(struct dwc2_hsotg *hsotg,
} }
/* Enable the top level host channel interrupt */ /* Enable the top level host channel interrupt */
intmsk = dwc2_readl(hsotg->regs + HAINTMSK); intmsk = dwc2_readl(hsotg, HAINTMSK);
intmsk |= 1 << chan->hc_num; intmsk |= 1 << chan->hc_num;
dwc2_writel(intmsk, hsotg->regs + HAINTMSK); dwc2_writel(hsotg, intmsk, HAINTMSK);
if (dbg_hc(chan)) if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set HAINTMSK to %08x\n", intmsk); dev_vdbg(hsotg->dev, "set HAINTMSK to %08x\n", intmsk);
/* Make sure host channel interrupts are enabled */ /* Make sure host channel interrupts are enabled */
intmsk = dwc2_readl(hsotg->regs + GINTMSK); intmsk = dwc2_readl(hsotg, GINTMSK);
intmsk |= GINTSTS_HCHINT; intmsk |= GINTSTS_HCHINT;
dwc2_writel(intmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, intmsk, GINTMSK);
if (dbg_hc(chan)) if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set GINTMSK to %08x\n", intmsk); 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) ...@@ -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 */ /* Clear old interrupt conditions for this host channel */
hcintmsk = 0xffffffff; hcintmsk = 0xffffffff;
hcintmsk &= ~HCINTMSK_RESERVED14_31; 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 */ /* Enable channel interrupts required for this transfer */
dwc2_hc_enable_ints(hsotg, chan); dwc2_hc_enable_ints(hsotg, chan);
...@@ -910,7 +909,7 @@ static void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) ...@@ -910,7 +909,7 @@ static void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan)
hcchar |= HCCHAR_LSPDDEV; hcchar |= HCCHAR_LSPDDEV;
hcchar |= chan->ep_type << HCCHAR_EPTYPE_SHIFT & HCCHAR_EPTYPE_MASK; hcchar |= chan->ep_type << HCCHAR_EPTYPE_SHIFT & HCCHAR_EPTYPE_MASK;
hcchar |= chan->max_packet << HCCHAR_MPS_SHIFT & HCCHAR_MPS_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)) { if (dbg_hc(chan)) {
dev_vdbg(hsotg->dev, "set HCCHAR(%d) to %08x\n", dev_vdbg(hsotg->dev, "set HCCHAR(%d) to %08x\n",
hc_num, hcchar); hc_num, hcchar);
...@@ -964,7 +963,7 @@ static void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) ...@@ -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, ...@@ -1034,14 +1033,14 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
u32 hcintmsk = HCINTMSK_CHHLTD; u32 hcintmsk = HCINTMSK_CHHLTD;
dev_vdbg(hsotg->dev, "dequeue/error\n"); 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 * Make sure no other interrupts besides halt are currently
* pending. Handling another interrupt could cause a crash due * pending. Handling another interrupt could cause a crash due
* to the QTD and QH state. * 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 * 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, ...@@ -1050,7 +1049,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
*/ */
chan->halt_status = halt_status; 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)) { if (!(hcchar & HCCHAR_CHENA)) {
/* /*
* The channel is either already halted or it hasn't * 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, ...@@ -1078,7 +1077,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
return; 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 */ /* No need to set the bit in DDMA for disabling the channel */
/* TODO check it everywhere channel is disabled */ /* TODO check it everywhere channel is disabled */
...@@ -1101,7 +1100,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, ...@@ -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 || if (chan->ep_type == USB_ENDPOINT_XFER_CONTROL ||
chan->ep_type == USB_ENDPOINT_XFER_BULK) { chan->ep_type == USB_ENDPOINT_XFER_BULK) {
dev_vdbg(hsotg->dev, "control/bulk\n"); dev_vdbg(hsotg->dev, "control/bulk\n");
nptxsts = dwc2_readl(hsotg->regs + GNPTXSTS); nptxsts = dwc2_readl(hsotg, GNPTXSTS);
if ((nptxsts & TXSTS_QSPCAVAIL_MASK) == 0) { if ((nptxsts & TXSTS_QSPCAVAIL_MASK) == 0) {
dev_vdbg(hsotg->dev, "Disabling channel\n"); dev_vdbg(hsotg->dev, "Disabling channel\n");
hcchar &= ~HCCHAR_CHENA; hcchar &= ~HCCHAR_CHENA;
...@@ -1109,7 +1108,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, ...@@ -1109,7 +1108,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
} else { } else {
if (dbg_perio()) if (dbg_perio())
dev_vdbg(hsotg->dev, "isoc/intr\n"); dev_vdbg(hsotg->dev, "isoc/intr\n");
hptxsts = dwc2_readl(hsotg->regs + HPTXSTS); hptxsts = dwc2_readl(hsotg, HPTXSTS);
if ((hptxsts & TXSTS_QSPCAVAIL_MASK) == 0 || if ((hptxsts & TXSTS_QSPCAVAIL_MASK) == 0 ||
hsotg->queuing_high_bandwidth) { hsotg->queuing_high_bandwidth) {
if (dbg_perio()) if (dbg_perio())
...@@ -1122,7 +1121,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, ...@@ -1122,7 +1121,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
dev_vdbg(hsotg->dev, "DMA enabled\n"); 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; chan->halt_status = halt_status;
if (hcchar & HCCHAR_CHENA) { if (hcchar & HCCHAR_CHENA) {
...@@ -1171,10 +1170,10 @@ void dwc2_hc_cleanup(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) ...@@ -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 * Clear channel interrupt enables and any unhandled channel interrupt
* conditions * conditions
*/ */
dwc2_writel(0, hsotg->regs + HCINTMSK(chan->hc_num)); dwc2_writel(hsotg, 0, HCINTMSK(chan->hc_num));
hcintmsk = 0xffffffff; hcintmsk = 0xffffffff;
hcintmsk &= ~HCINTMSK_RESERVED14_31; 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, ...@@ -1228,7 +1227,7 @@ static void dwc2_hc_set_even_odd_frame(struct dwc2_hsotg *hsotg,
!chan->do_split) ? chan->speed : USB_SPEED_HIGH; !chan->do_split) ? chan->speed : USB_SPEED_HIGH;
/* See how many bytes are in the periodic FIFO right now */ /* 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; TXSTS_FSPCAVAIL_MASK) >> TXSTS_FSPCAVAIL_SHIFT;
bytes_in_fifo = sizeof(u32) * bytes_in_fifo = sizeof(u32) *
(hsotg->params.host_perio_tx_fifo_size - (hsotg->params.host_perio_tx_fifo_size -
...@@ -1348,13 +1347,13 @@ static void dwc2_hc_write_packet(struct dwc2_hsotg *hsotg, ...@@ -1348,13 +1347,13 @@ static void dwc2_hc_write_packet(struct dwc2_hsotg *hsotg,
if (((unsigned long)data_buf & 0x3) == 0) { if (((unsigned long)data_buf & 0x3) == 0) {
/* xfer_buf is DWORD aligned */ /* xfer_buf is DWORD aligned */
for (i = 0; i < dword_count; i++, data_buf++) 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 { } else {
/* xfer_buf is not DWORD aligned */ /* xfer_buf is not DWORD aligned */
for (i = 0; i < dword_count; i++, data_buf++) { for (i = 0; i < dword_count; i++, data_buf++) {
u32 data = data_buf[0] | data_buf[1] << 8 | u32 data = data_buf[0] | data_buf[1] << 8 |
data_buf[2] << 16 | data_buf[3] << 24; 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, ...@@ -1383,12 +1382,12 @@ static void dwc2_hc_do_ping(struct dwc2_hsotg *hsotg,
hctsiz = TSIZ_DOPNG; hctsiz = TSIZ_DOPNG;
hctsiz |= 1 << TSIZ_PKTCNT_SHIFT; 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_CHENA;
hcchar &= ~HCCHAR_CHDIS; 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, ...@@ -1548,7 +1547,7 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,
hctsiz |= num_packets << TSIZ_PKTCNT_SHIFT & TSIZ_PKTCNT_MASK; hctsiz |= num_packets << TSIZ_PKTCNT_SHIFT & TSIZ_PKTCNT_MASK;
hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT & hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT &
TSIZ_SC_MC_PID_MASK; 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)) { if (dbg_hc(chan)) {
dev_vdbg(hsotg->dev, "Wrote %08x to HCTSIZ(%d)\n", dev_vdbg(hsotg->dev, "Wrote %08x to HCTSIZ(%d)\n",
hctsiz, chan->hc_num); hctsiz, chan->hc_num);
...@@ -1576,7 +1575,7 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg, ...@@ -1576,7 +1575,7 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,
} else { } else {
dma_addr = chan->xfer_dma; 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)) if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %08lx to HCDMA(%d)\n", dev_vdbg(hsotg->dev, "Wrote %08lx to HCDMA(%d)\n",
...@@ -1585,13 +1584,13 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg, ...@@ -1585,13 +1584,13 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,
/* Start the split */ /* Start the split */
if (chan->do_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; 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 &= ~HCCHAR_MULTICNT_MASK;
hcchar |= (ec_mc << HCCHAR_MULTICNT_SHIFT) & HCCHAR_MULTICNT_MASK; hcchar |= (ec_mc << HCCHAR_MULTICNT_SHIFT) & HCCHAR_MULTICNT_MASK;
dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar); dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar);
...@@ -1610,7 +1609,7 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg, ...@@ -1610,7 +1609,7 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,
(hcchar & HCCHAR_MULTICNT_MASK) >> (hcchar & HCCHAR_MULTICNT_MASK) >>
HCCHAR_MULTICNT_SHIFT); HCCHAR_MULTICNT_SHIFT);
dwc2_writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num)); dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num));
if (dbg_hc(chan)) if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar, dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
chan->hc_num); chan->hc_num);
...@@ -1668,18 +1667,18 @@ void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg, ...@@ -1668,18 +1667,18 @@ void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg,
dev_vdbg(hsotg->dev, " NTD: %d\n", chan->ntd - 1); 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, dma_sync_single_for_device(hsotg->dev, chan->desc_list_addr,
chan->desc_list_sz, DMA_TO_DEVICE); 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)) if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %pad to HCDMA(%d)\n", dev_vdbg(hsotg->dev, "Wrote %pad to HCDMA(%d)\n",
&chan->desc_list_addr, chan->hc_num); &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 &= ~HCCHAR_MULTICNT_MASK;
hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT & hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT &
HCCHAR_MULTICNT_MASK; HCCHAR_MULTICNT_MASK;
...@@ -1698,7 +1697,7 @@ void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg, ...@@ -1698,7 +1697,7 @@ void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg,
(hcchar & HCCHAR_MULTICNT_MASK) >> (hcchar & HCCHAR_MULTICNT_MASK) >>
HCCHAR_MULTICNT_SHIFT); HCCHAR_MULTICNT_SHIFT);
dwc2_writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num)); dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num));
if (dbg_hc(chan)) if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar, dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
chan->hc_num); chan->hc_num);
...@@ -1755,7 +1754,7 @@ static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg, ...@@ -1755,7 +1754,7 @@ static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg,
* transfer completes, the extra requests for the channel will * transfer completes, the extra requests for the channel will
* be flushed. * 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); dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar);
hcchar |= HCCHAR_CHENA; hcchar |= HCCHAR_CHENA;
...@@ -1763,7 +1762,7 @@ static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg, ...@@ -1763,7 +1762,7 @@ static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg,
if (dbg_hc(chan)) if (dbg_hc(chan))
dev_vdbg(hsotg->dev, " IN xfer: hcchar = 0x%08x\n", dev_vdbg(hsotg->dev, " IN xfer: hcchar = 0x%08x\n",
hcchar); hcchar);
dwc2_writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num)); dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num));
chan->requests++; chan->requests++;
return 1; return 1;
} }
...@@ -1773,7 +1772,7 @@ static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg, ...@@ -1773,7 +1772,7 @@ static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg,
if (chan->xfer_count < chan->xfer_len) { if (chan->xfer_count < chan->xfer_len) {
if (chan->ep_type == USB_ENDPOINT_XFER_INT || if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
chan->ep_type == USB_ENDPOINT_XFER_ISOC) { chan->ep_type == USB_ENDPOINT_XFER_ISOC) {
u32 hcchar = dwc2_readl(hsotg->regs + u32 hcchar = dwc2_readl(hsotg,
HCCHAR(chan->hc_num)); HCCHAR(chan->hc_num));
dwc2_hc_set_even_odd_frame(hsotg, chan, dwc2_hc_set_even_odd_frame(hsotg, chan,
...@@ -1887,7 +1886,7 @@ void dwc2_hcd_start(struct dwc2_hsotg *hsotg) ...@@ -1887,7 +1886,7 @@ void dwc2_hcd_start(struct dwc2_hsotg *hsotg)
*/ */
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_RST; hprt0 |= HPRT0_RST;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
} }
queue_delayed_work(hsotg->wq_otg, &hsotg->start_work, queue_delayed_work(hsotg->wq_otg, &hsotg->start_work,
...@@ -1908,11 +1907,11 @@ static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg) ...@@ -1908,11 +1907,11 @@ static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg)
channel = hsotg->hc_ptr_array[i]; channel = hsotg->hc_ptr_array[i];
if (!list_empty(&channel->hc_list_entry)) if (!list_empty(&channel->hc_list_entry))
continue; continue;
hcchar = dwc2_readl(hsotg->regs + HCCHAR(i)); hcchar = dwc2_readl(hsotg, HCCHAR(i));
if (hcchar & HCCHAR_CHENA) { if (hcchar & HCCHAR_CHENA) {
hcchar &= ~(HCCHAR_CHENA | HCCHAR_EPDIR); hcchar &= ~(HCCHAR_CHENA | HCCHAR_EPDIR);
hcchar |= HCCHAR_CHDIS; 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) ...@@ -1921,11 +1920,11 @@ static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg)
channel = hsotg->hc_ptr_array[i]; channel = hsotg->hc_ptr_array[i];
if (!list_empty(&channel->hc_list_entry)) if (!list_empty(&channel->hc_list_entry))
continue; continue;
hcchar = dwc2_readl(hsotg->regs + HCCHAR(i)); hcchar = dwc2_readl(hsotg, HCCHAR(i));
if (hcchar & HCCHAR_CHENA) { if (hcchar & HCCHAR_CHENA) {
/* Halt the channel */ /* Halt the channel */
hcchar |= HCCHAR_CHDIS; hcchar |= HCCHAR_CHDIS;
dwc2_writel(hcchar, hsotg->regs + HCCHAR(i)); dwc2_writel(hsotg, hcchar, HCCHAR(i));
} }
dwc2_hc_cleanup(hsotg, channel); dwc2_hc_cleanup(hsotg, channel);
...@@ -1985,11 +1984,11 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force) ...@@ -1985,11 +1984,11 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force)
* interrupt mask and status bits and disabling subsequent host * interrupt mask and status bits and disabling subsequent host
* channel interrupts. * channel interrupts.
*/ */
intr = dwc2_readl(hsotg->regs + GINTMSK); intr = dwc2_readl(hsotg, GINTMSK);
intr &= ~(GINTSTS_NPTXFEMP | GINTSTS_PTXFEMP | GINTSTS_HCHINT); 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; 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 * 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) ...@@ -1999,7 +1998,7 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force)
if (dwc2_is_device_mode(hsotg)) { if (dwc2_is_device_mode(hsotg)) {
if (hsotg->op_state != OTG_STATE_A_SUSPEND) { if (hsotg->op_state != OTG_STATE_A_SUSPEND) {
dev_dbg(hsotg->dev, "Disconnect: PortPower off\n"); dev_dbg(hsotg->dev, "Disconnect: PortPower off\n");
dwc2_writel(0, hsotg->regs + HPRT0); dwc2_writel(hsotg, 0, HPRT0);
} }
dwc2_disable_host_interrupts(hsotg); dwc2_disable_host_interrupts(hsotg);
...@@ -2027,7 +2026,7 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force) ...@@ -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. * and won't get any future interrupts to handle the connect.
*/ */
if (!force) { if (!force) {
hprt0 = dwc2_readl(hsotg->regs + HPRT0); hprt0 = dwc2_readl(hsotg, HPRT0);
if (!(hprt0 & HPRT0_CONNDET) && (hprt0 & HPRT0_CONNSTS)) if (!(hprt0 & HPRT0_CONNDET) && (hprt0 & HPRT0_CONNSTS))
dwc2_hcd_connect(hsotg); dwc2_hcd_connect(hsotg);
} }
...@@ -2071,7 +2070,7 @@ void dwc2_hcd_stop(struct dwc2_hsotg *hsotg) ...@@ -2071,7 +2070,7 @@ void dwc2_hcd_stop(struct dwc2_hsotg *hsotg)
/* Turn off the vbus power */ /* Turn off the vbus power */
dev_dbg(hsotg->dev, "PortPower off\n"); dev_dbg(hsotg->dev, "PortPower off\n");
dwc2_writel(0, hsotg->regs + HPRT0); dwc2_writel(hsotg, 0, HPRT0);
} }
/* Caller must hold driver lock */ /* Caller must hold driver lock */
...@@ -2095,7 +2094,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg, ...@@ -2095,7 +2094,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
if ((dev_speed == USB_SPEED_LOW) && if ((dev_speed == USB_SPEED_LOW) &&
(hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) && (hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) &&
(hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI)) { (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; u32 prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
if (prtspd == HPRT0_SPD_FULL_SPEED) if (prtspd == HPRT0_SPD_FULL_SPEED)
...@@ -2114,7 +2113,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg, ...@@ -2114,7 +2113,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
return retval; return retval;
} }
intr_mask = dwc2_readl(hsotg->regs + GINTMSK); intr_mask = dwc2_readl(hsotg, GINTMSK);
if (!(intr_mask & GINTSTS_SOF)) { if (!(intr_mask & GINTSTS_SOF)) {
enum dwc2_transaction_type tr_type; enum dwc2_transaction_type tr_type;
...@@ -2279,7 +2278,7 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup) ...@@ -2279,7 +2278,7 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup)
dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); 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 */ /* Set ULPI External VBUS bit if needed */
usbcfg &= ~GUSBCFG_ULPI_EXT_VBUS_DRV; usbcfg &= ~GUSBCFG_ULPI_EXT_VBUS_DRV;
...@@ -2291,7 +2290,7 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup) ...@@ -2291,7 +2290,7 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup)
if (hsotg->params.ts_dline) if (hsotg->params.ts_dline)
usbcfg |= GUSBCFG_TERMSELDLPULSE; usbcfg |= GUSBCFG_TERMSELDLPULSE;
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
/* /*
* Reset the Controller * Reset the Controller
...@@ -2325,9 +2324,9 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup) ...@@ -2325,9 +2324,9 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup)
dwc2_gusbcfg_init(hsotg); dwc2_gusbcfg_init(hsotg);
/* Program the GOTGCTL register */ /* Program the GOTGCTL register */
otgctl = dwc2_readl(hsotg->regs + GOTGCTL); otgctl = dwc2_readl(hsotg, GOTGCTL);
otgctl &= ~GOTGCTL_OTGVER; otgctl &= ~GOTGCTL_OTGVER;
dwc2_writel(otgctl, hsotg->regs + GOTGCTL); dwc2_writel(hsotg, otgctl, GOTGCTL);
/* Clear the SRP success bit for FS-I2c */ /* Clear the SRP success bit for FS-I2c */
hsotg->srp_success = 0; hsotg->srp_success = 0;
...@@ -2374,20 +2373,20 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg) ...@@ -2374,20 +2373,20 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
* introduced by the PHY in generating the linestate condition * introduced by the PHY in generating the linestate condition
* can vary from one PHY to another. * can vary from one PHY to another.
*/ */
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
usbcfg |= GUSBCFG_TOUTCAL(7); usbcfg |= GUSBCFG_TOUTCAL(7);
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
/* Restart the Phy Clock */ /* Restart the Phy Clock */
dwc2_writel(0, hsotg->regs + PCGCTL); dwc2_writel(hsotg, 0, PCGCTL);
/* Initialize Host Configuration Register */ /* Initialize Host Configuration Register */
dwc2_init_fs_ls_pclk_sel(hsotg); dwc2_init_fs_ls_pclk_sel(hsotg);
if (hsotg->params.speed == DWC2_SPEED_PARAM_FULL || if (hsotg->params.speed == DWC2_SPEED_PARAM_FULL ||
hsotg->params.speed == DWC2_SPEED_PARAM_LOW) { hsotg->params.speed == DWC2_SPEED_PARAM_LOW) {
hcfg = dwc2_readl(hsotg->regs + HCFG); hcfg = dwc2_readl(hsotg, HCFG);
hcfg |= HCFG_FSLSSUPP; 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) ...@@ -2396,9 +2395,9 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
* and its value must not be changed during runtime. * and its value must not be changed during runtime.
*/ */
if (hsotg->params.reload_ctl) { if (hsotg->params.reload_ctl) {
hfir = dwc2_readl(hsotg->regs + HFIR); hfir = dwc2_readl(hsotg, HFIR);
hfir |= HFIR_RLDCTRL; hfir |= HFIR_RLDCTRL;
dwc2_writel(hfir, hsotg->regs + HFIR); dwc2_writel(hsotg, hfir, HFIR);
} }
if (hsotg->params.dma_desc_enable) { if (hsotg->params.dma_desc_enable) {
...@@ -2415,9 +2414,9 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg) ...@@ -2415,9 +2414,9 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
"falling back to buffer DMA mode.\n"); "falling back to buffer DMA mode.\n");
hsotg->params.dma_desc_enable = false; hsotg->params.dma_desc_enable = false;
} else { } else {
hcfg = dwc2_readl(hsotg->regs + HCFG); hcfg = dwc2_readl(hsotg, HCFG);
hcfg |= HCFG_DESCDMA; 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) ...@@ -2426,18 +2425,18 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
/* TODO - check this */ /* TODO - check this */
/* Clear Host Set HNP Enable in the OTG Control Register */ /* Clear Host Set HNP Enable in the OTG Control Register */
otgctl = dwc2_readl(hsotg->regs + GOTGCTL); otgctl = dwc2_readl(hsotg, GOTGCTL);
otgctl &= ~GOTGCTL_HSTSETHNPEN; otgctl &= ~GOTGCTL_HSTSETHNPEN;
dwc2_writel(otgctl, hsotg->regs + GOTGCTL); dwc2_writel(hsotg, otgctl, GOTGCTL);
/* Make sure the FIFOs are flushed */ /* Make sure the FIFOs are flushed */
dwc2_flush_tx_fifo(hsotg, 0x10 /* all TX FIFOs */); dwc2_flush_tx_fifo(hsotg, 0x10 /* all TX FIFOs */);
dwc2_flush_rx_fifo(hsotg); dwc2_flush_rx_fifo(hsotg);
/* Clear Host Set HNP Enable in the OTG Control Register */ /* Clear Host Set HNP Enable in the OTG Control Register */
otgctl = dwc2_readl(hsotg->regs + GOTGCTL); otgctl = dwc2_readl(hsotg, GOTGCTL);
otgctl &= ~GOTGCTL_HSTSETHNPEN; otgctl &= ~GOTGCTL_HSTSETHNPEN;
dwc2_writel(otgctl, hsotg->regs + GOTGCTL); dwc2_writel(hsotg, otgctl, GOTGCTL);
if (!hsotg->params.dma_desc_enable) { if (!hsotg->params.dma_desc_enable) {
int num_channels, i; int num_channels, i;
...@@ -2446,19 +2445,19 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg) ...@@ -2446,19 +2445,19 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
/* Flush out any leftover queued requests */ /* Flush out any leftover queued requests */
num_channels = hsotg->params.host_channels; num_channels = hsotg->params.host_channels;
for (i = 0; i < num_channels; i++) { 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_CHENA;
hcchar |= HCCHAR_CHDIS; hcchar |= HCCHAR_CHDIS;
hcchar &= ~HCCHAR_EPDIR; 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 */ /* Halt all channels to put them into a known state */
for (i = 0; i < num_channels; i++) { 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_CHENA | HCCHAR_CHDIS;
hcchar &= ~HCCHAR_EPDIR; 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", dev_dbg(hsotg->dev, "%s: Halt channel %d\n",
__func__, i); __func__, i);
...@@ -2482,7 +2481,7 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg) ...@@ -2482,7 +2481,7 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
!!(hprt0 & HPRT0_PWR)); !!(hprt0 & HPRT0_PWR));
if (!(hprt0 & HPRT0_PWR)) { if (!(hprt0 & HPRT0_PWR)) {
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) ...@@ -3076,7 +3075,7 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
if (dbg_perio()) if (dbg_perio())
dev_vdbg(hsotg->dev, "Queue periodic transactions\n"); 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) >> qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT; TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >> fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
...@@ -3091,7 +3090,7 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg) ...@@ -3091,7 +3090,7 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
qh_ptr = hsotg->periodic_sched_assigned.next; qh_ptr = hsotg->periodic_sched_assigned.next;
while (qh_ptr != &hsotg->periodic_sched_assigned) { 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) >> qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT; TXSTS_QSPCAVAIL_SHIFT;
if (qspcavail == 0) { if (qspcavail == 0) {
...@@ -3161,10 +3160,10 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg) ...@@ -3161,10 +3160,10 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
* level to ensure that new requests are loaded as * level to ensure that new requests are loaded as
* soon as possible.) * soon as possible.)
*/ */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
if (!(gintmsk & GINTSTS_PTXFEMP)) { if (!(gintmsk & GINTSTS_PTXFEMP)) {
gintmsk |= GINTSTS_PTXFEMP; gintmsk |= GINTSTS_PTXFEMP;
dwc2_writel(gintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, gintmsk, GINTMSK);
} }
} else { } else {
/* /*
...@@ -3174,10 +3173,10 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg) ...@@ -3174,10 +3173,10 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
* handlers to queue more transactions as transfer * handlers to queue more transactions as transfer
* states change. * states change.
*/ */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
if (gintmsk & GINTSTS_PTXFEMP) { if (gintmsk & GINTSTS_PTXFEMP) {
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) ...@@ -3206,7 +3205,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
dev_vdbg(hsotg->dev, "Queue non-periodic transactions\n"); 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) >> qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT; TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >> fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
...@@ -3229,7 +3228,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg) ...@@ -3229,7 +3228,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
* available in the request queue or the Tx FIFO * available in the request queue or the Tx FIFO
*/ */
do { do {
tx_status = dwc2_readl(hsotg->regs + GNPTXSTS); tx_status = dwc2_readl(hsotg, GNPTXSTS);
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >> qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT; TXSTS_QSPCAVAIL_SHIFT;
if (!hsotg->params.host_dma && qspcavail == 0) { if (!hsotg->params.host_dma && qspcavail == 0) {
...@@ -3266,7 +3265,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg) ...@@ -3266,7 +3265,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
} while (hsotg->non_periodic_qh_ptr != orig_qh_ptr); } while (hsotg->non_periodic_qh_ptr != orig_qh_ptr);
if (!hsotg->params.host_dma) { if (!hsotg->params.host_dma) {
tx_status = dwc2_readl(hsotg->regs + GNPTXSTS); tx_status = dwc2_readl(hsotg, GNPTXSTS);
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >> qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT; TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >> fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
...@@ -3286,9 +3285,9 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg) ...@@ -3286,9 +3285,9 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
* level to ensure that new requests are loaded as * level to ensure that new requests are loaded as
* soon as possible.) * soon as possible.)
*/ */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk |= GINTSTS_NPTXFEMP; gintmsk |= GINTSTS_NPTXFEMP;
dwc2_writel(gintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, gintmsk, GINTMSK);
} else { } else {
/* /*
* Disable the Tx FIFO empty interrupt since there are * Disable the Tx FIFO empty interrupt since there are
...@@ -3297,9 +3296,9 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg) ...@@ -3297,9 +3296,9 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
* handlers to queue more transactions as transfer * handlers to queue more transactions as transfer
* states change. * states change.
*/ */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk &= ~GINTSTS_NPTXFEMP; 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, ...@@ -3336,10 +3335,10 @@ void dwc2_hcd_queue_transactions(struct dwc2_hsotg *hsotg,
* Ensure NP Tx FIFO empty interrupt is disabled when * Ensure NP Tx FIFO empty interrupt is disabled when
* there are no non-periodic transfers to process * there are no non-periodic transfers to process
*/ */
u32 gintmsk = dwc2_readl(hsotg->regs + GINTMSK); u32 gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk &= ~GINTSTS_NPTXFEMP; 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) ...@@ -3354,7 +3353,7 @@ static void dwc2_conn_id_status_change(struct work_struct *work)
dev_dbg(hsotg->dev, "%s()\n", __func__); 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=%0x\n", gotgctl);
dev_dbg(hsotg->dev, "gotgctl.b.conidsts=%d\n", dev_dbg(hsotg->dev, "gotgctl.b.conidsts=%d\n",
!!(gotgctl & GOTGCTL_CONID_B)); !!(gotgctl & GOTGCTL_CONID_B));
...@@ -3380,7 +3379,7 @@ static void dwc2_conn_id_status_change(struct work_struct *work) ...@@ -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 * check it again and jump to host mode if that was
* the case. * the case.
*/ */
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL); gotgctl = dwc2_readl(hsotg, GOTGCTL);
if (!(gotgctl & GOTGCTL_CONID_B)) if (!(gotgctl & GOTGCTL_CONID_B))
goto host; goto host;
if (++count > 250) if (++count > 250)
...@@ -3440,9 +3439,9 @@ static void dwc2_wakeup_detected(struct timer_list *t) ...@@ -3440,9 +3439,9 @@ static void dwc2_wakeup_detected(struct timer_list *t)
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
dev_dbg(hsotg->dev, "Resume: HPRT0=%0x\n", hprt0); dev_dbg(hsotg->dev, "Resume: HPRT0=%0x\n", hprt0);
hprt0 &= ~HPRT0_RES; hprt0 &= ~HPRT0_RES;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
dev_dbg(hsotg->dev, "Clear Resume: HPRT0=%0x\n", dev_dbg(hsotg->dev, "Clear Resume: HPRT0=%0x\n",
dwc2_readl(hsotg->regs + HPRT0)); dwc2_readl(hsotg, HPRT0));
dwc2_hcd_rem_wakeup(hsotg); dwc2_hcd_rem_wakeup(hsotg);
hsotg->bus_suspended = false; hsotg->bus_suspended = false;
...@@ -3471,15 +3470,15 @@ static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex) ...@@ -3471,15 +3470,15 @@ static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex)
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
if (windex == hsotg->otg_port && dwc2_host_is_b_hnp_enabled(hsotg)) { 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; gotgctl |= GOTGCTL_HSTSETHNPEN;
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL); dwc2_writel(hsotg, gotgctl, GOTGCTL);
hsotg->op_state = OTG_STATE_A_SUSPEND; hsotg->op_state = OTG_STATE_A_SUSPEND;
} }
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_SUSP; hprt0 |= HPRT0_SUSP;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
hsotg->bus_suspended = true; hsotg->bus_suspended = true;
...@@ -3489,17 +3488,17 @@ static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex) ...@@ -3489,17 +3488,17 @@ static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex)
*/ */
if (!hsotg->params.power_down) { if (!hsotg->params.power_down) {
/* Suspend the Phy Clock */ /* Suspend the Phy Clock */
pcgctl = dwc2_readl(hsotg->regs + PCGCTL); pcgctl = dwc2_readl(hsotg, PCGCTL);
pcgctl |= PCGCTL_STOPPCLK; pcgctl |= PCGCTL_STOPPCLK;
dwc2_writel(pcgctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgctl, PCGCTL);
udelay(10); udelay(10);
} }
/* For HNP the bus must be suspended for at least 200ms */ /* For HNP the bus must be suspended for at least 200ms */
if (dwc2_host_is_b_hnp_enabled(hsotg)) { if (dwc2_host_is_b_hnp_enabled(hsotg)) {
pcgctl = dwc2_readl(hsotg->regs + PCGCTL); pcgctl = dwc2_readl(hsotg, PCGCTL);
pcgctl &= ~PCGCTL_STOPPCLK; pcgctl &= ~PCGCTL_STOPPCLK;
dwc2_writel(pcgctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgctl, PCGCTL);
spin_unlock_irqrestore(&hsotg->lock, flags); spin_unlock_irqrestore(&hsotg->lock, flags);
...@@ -3523,9 +3522,9 @@ static void dwc2_port_resume(struct dwc2_hsotg *hsotg) ...@@ -3523,9 +3522,9 @@ static void dwc2_port_resume(struct dwc2_hsotg *hsotg)
* after registers restore. * after registers restore.
*/ */
if (!hsotg->params.power_down) { if (!hsotg->params.power_down) {
pcgctl = dwc2_readl(hsotg->regs + PCGCTL); pcgctl = dwc2_readl(hsotg, PCGCTL);
pcgctl &= ~PCGCTL_STOPPCLK; pcgctl &= ~PCGCTL_STOPPCLK;
dwc2_writel(pcgctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgctl, PCGCTL);
spin_unlock_irqrestore(&hsotg->lock, flags); spin_unlock_irqrestore(&hsotg->lock, flags);
msleep(20); msleep(20);
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
...@@ -3534,7 +3533,7 @@ static void dwc2_port_resume(struct dwc2_hsotg *hsotg) ...@@ -3534,7 +3533,7 @@ static void dwc2_port_resume(struct dwc2_hsotg *hsotg)
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_RES; hprt0 |= HPRT0_RES;
hprt0 &= ~HPRT0_SUSP; hprt0 &= ~HPRT0_SUSP;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
spin_unlock_irqrestore(&hsotg->lock, flags); spin_unlock_irqrestore(&hsotg->lock, flags);
msleep(USB_RESUME_TIMEOUT); msleep(USB_RESUME_TIMEOUT);
...@@ -3542,7 +3541,7 @@ static void dwc2_port_resume(struct dwc2_hsotg *hsotg) ...@@ -3542,7 +3541,7 @@ static void dwc2_port_resume(struct dwc2_hsotg *hsotg)
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
hprt0 &= ~(HPRT0_RES | HPRT0_SUSP); hprt0 &= ~(HPRT0_RES | HPRT0_SUSP);
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
hsotg->bus_suspended = false; hsotg->bus_suspended = false;
spin_unlock_irqrestore(&hsotg->lock, flags); spin_unlock_irqrestore(&hsotg->lock, flags);
} }
...@@ -3586,7 +3585,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, ...@@ -3586,7 +3585,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
"ClearPortFeature USB_PORT_FEAT_ENABLE\n"); "ClearPortFeature USB_PORT_FEAT_ENABLE\n");
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_ENA; hprt0 |= HPRT0_ENA;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
break; break;
case USB_PORT_FEAT_SUSPEND: case USB_PORT_FEAT_SUSPEND:
...@@ -3606,7 +3605,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, ...@@ -3606,7 +3605,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
"ClearPortFeature USB_PORT_FEAT_POWER\n"); "ClearPortFeature USB_PORT_FEAT_POWER\n");
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
hprt0 &= ~HPRT0_PWR; hprt0 &= ~HPRT0_PWR;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
break; break;
case USB_PORT_FEAT_INDICATOR: case USB_PORT_FEAT_INDICATOR:
...@@ -3727,7 +3726,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, ...@@ -3727,7 +3726,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
break; break;
} }
hprt0 = dwc2_readl(hsotg->regs + HPRT0); hprt0 = dwc2_readl(hsotg, HPRT0);
dev_vdbg(hsotg->dev, " HPRT0: 0x%08x\n", hprt0); dev_vdbg(hsotg->dev, " HPRT0: 0x%08x\n", hprt0);
if (hprt0 & HPRT0_CONNSTS) if (hprt0 & HPRT0_CONNSTS)
...@@ -3768,9 +3767,9 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, ...@@ -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"); dev_info(hsotg->dev, "Enabling descriptor DMA mode\n");
hsotg->params.dma_desc_enable = true; hsotg->params.dma_desc_enable = true;
hcfg = dwc2_readl(hsotg->regs + HCFG); hcfg = dwc2_readl(hsotg, HCFG);
hcfg |= HCFG_DESCDMA; hcfg |= HCFG_DESCDMA;
dwc2_writel(hcfg, hsotg->regs + HCFG); dwc2_writel(hsotg, hcfg, HCFG);
hsotg->new_connection = false; hsotg->new_connection = false;
} }
} }
...@@ -3817,7 +3816,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, ...@@ -3817,7 +3816,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
"SetPortFeature - USB_PORT_FEAT_POWER\n"); "SetPortFeature - USB_PORT_FEAT_POWER\n");
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_PWR; hprt0 |= HPRT0_PWR;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
break; break;
case USB_PORT_FEAT_RESET: case USB_PORT_FEAT_RESET:
...@@ -3827,11 +3826,11 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, ...@@ -3827,11 +3826,11 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"SetPortFeature - USB_PORT_FEAT_RESET\n"); "SetPortFeature - USB_PORT_FEAT_RESET\n");
pcgctl = dwc2_readl(hsotg->regs + PCGCTL); pcgctl = dwc2_readl(hsotg, PCGCTL);
pcgctl &= ~(PCGCTL_ENBL_SLEEP_GATING | PCGCTL_STOPPCLK); pcgctl &= ~(PCGCTL_ENBL_SLEEP_GATING | PCGCTL_STOPPCLK);
dwc2_writel(pcgctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgctl, PCGCTL);
/* ??? Original driver does this */ /* ??? Original driver does this */
dwc2_writel(0, hsotg->regs + PCGCTL); dwc2_writel(hsotg, 0, PCGCTL);
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
/* Clear suspend bit if resetting from suspend state */ /* Clear suspend bit if resetting from suspend state */
...@@ -3846,13 +3845,13 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, ...@@ -3846,13 +3845,13 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
hprt0 |= HPRT0_PWR | HPRT0_RST; hprt0 |= HPRT0_PWR | HPRT0_RST;
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"In host mode, hprt0=%08x\n", hprt0); "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) */ /* Clear reset bit in 10ms (FS/LS) or 50ms (HS) */
msleep(50); msleep(50);
hprt0 &= ~HPRT0_RST; hprt0 &= ~HPRT0_RST;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
hsotg->lx_state = DWC2_L0; /* Now back to On state */ hsotg->lx_state = DWC2_L0; /* Now back to On state */
break; break;
...@@ -3868,7 +3867,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, ...@@ -3868,7 +3867,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
"SetPortFeature - USB_PORT_FEAT_TEST\n"); "SetPortFeature - USB_PORT_FEAT_TEST\n");
hprt0 &= ~HPRT0_TSTCTL_MASK; hprt0 &= ~HPRT0_TSTCTL_MASK;
hprt0 |= (windex >> 8) << HPRT0_TSTCTL_SHIFT; hprt0 |= (windex >> 8) << HPRT0_TSTCTL_SHIFT;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
break; break;
default: default:
...@@ -3925,7 +3924,7 @@ static int dwc2_hcd_is_status_changed(struct dwc2_hsotg *hsotg, int port) ...@@ -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) 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 #ifdef DWC2_DEBUG_SOF
dev_vdbg(hsotg->dev, "DWC OTG HCD GET FRAME NUMBER %d\n", 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) ...@@ -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) int dwc2_hcd_get_future_frame_number(struct dwc2_hsotg *hsotg, int us)
{ {
u32 hprt = dwc2_readl(hsotg->regs + HPRT0); u32 hprt = dwc2_readl(hsotg, HPRT0);
u32 hfir = dwc2_readl(hsotg->regs + HFIR); u32 hfir = dwc2_readl(hsotg, HFIR);
u32 hfnum = dwc2_readl(hsotg->regs + HFNUM); u32 hfnum = dwc2_readl(hsotg, HFNUM);
unsigned int us_per_frame; unsigned int us_per_frame;
unsigned int frame_number; unsigned int frame_number;
unsigned int remaining; unsigned int remaining;
...@@ -4057,11 +4056,11 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg) ...@@ -4057,11 +4056,11 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
if (chan->xfer_started) { if (chan->xfer_started) {
u32 hfnum, hcchar, hctsiz, hcint, hcintmsk; u32 hfnum, hcchar, hctsiz, hcint, hcintmsk;
hfnum = dwc2_readl(hsotg->regs + HFNUM); hfnum = dwc2_readl(hsotg, HFNUM);
hcchar = dwc2_readl(hsotg->regs + HCCHAR(i)); hcchar = dwc2_readl(hsotg, HCCHAR(i));
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(i)); hctsiz = dwc2_readl(hsotg, HCTSIZ(i));
hcint = dwc2_readl(hsotg->regs + HCINT(i)); hcint = dwc2_readl(hsotg, HCINT(i));
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(i)); hcintmsk = dwc2_readl(hsotg, HCINTMSK(i));
dev_dbg(hsotg->dev, " hfnum: 0x%08x\n", hfnum); dev_dbg(hsotg->dev, " hfnum: 0x%08x\n", hfnum);
dev_dbg(hsotg->dev, " hcchar: 0x%08x\n", hcchar); dev_dbg(hsotg->dev, " hcchar: 0x%08x\n", hcchar);
dev_dbg(hsotg->dev, " hctsiz: 0x%08x\n", hctsiz); dev_dbg(hsotg->dev, " hctsiz: 0x%08x\n", hctsiz);
...@@ -4109,12 +4108,12 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg) ...@@ -4109,12 +4108,12 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
dev_dbg(hsotg->dev, " periodic_channels: %d\n", dev_dbg(hsotg->dev, " periodic_channels: %d\n",
hsotg->periodic_channels); hsotg->periodic_channels);
dev_dbg(hsotg->dev, " periodic_usecs: %d\n", hsotg->periodic_usecs); 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", dev_dbg(hsotg->dev, " NP Tx Req Queue Space Avail: %d\n",
(np_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT); (np_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
dev_dbg(hsotg->dev, " NP Tx FIFO Space Avail: %d\n", dev_dbg(hsotg->dev, " NP Tx FIFO Space Avail: %d\n",
(np_tx_status & TXSTS_FSPCAVAIL_MASK) >> TXSTS_FSPCAVAIL_SHIFT); (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", dev_dbg(hsotg->dev, " P Tx Req Queue Space Avail: %d\n",
(p_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT); (p_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
dev_dbg(hsotg->dev, " P Tx FIFO Space Avail: %d\n", 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) ...@@ -4364,7 +4363,7 @@ static void dwc2_hcd_reset_func(struct work_struct *work)
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
hprt0 &= ~HPRT0_RST; hprt0 &= ~HPRT0_RST;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
hsotg->flags.b.port_reset_change = 1; hsotg->flags.b.port_reset_change = 1;
spin_unlock_irqrestore(&hsotg->lock, flags); spin_unlock_irqrestore(&hsotg->lock, flags);
...@@ -4474,7 +4473,7 @@ static int _dwc2_hcd_suspend(struct usb_hcd *hcd) ...@@ -4474,7 +4473,7 @@ static int _dwc2_hcd_suspend(struct usb_hcd *hcd)
hprt0 = dwc2_read_hprt0(hsotg); hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_SUSP; hprt0 |= HPRT0_SUSP;
hprt0 &= ~HPRT0_PWR; hprt0 &= ~HPRT0_PWR;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
dwc2_vbus_supply_exit(hsotg); dwc2_vbus_supply_exit(hsotg);
} }
...@@ -4565,8 +4564,8 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd) ...@@ -4565,8 +4564,8 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd)
* Clear Port Enable and Port Status changes. * Clear Port Enable and Port Status changes.
* Enable Port Power. * Enable Port Power.
*/ */
dwc2_writel(HPRT0_PWR | HPRT0_CONNDET | dwc2_writel(hsotg, HPRT0_PWR | HPRT0_CONNDET |
HPRT0_ENACHG, hsotg->regs + HPRT0); HPRT0_ENACHG, HPRT0);
/* Wait for controller to detect Port Connect */ /* Wait for controller to detect Port Connect */
usleep_range(5000, 7000); usleep_range(5000, 7000);
} }
...@@ -5086,17 +5085,17 @@ static void dwc2_hcd_free(struct dwc2_hsotg *hsotg) ...@@ -5086,17 +5085,17 @@ static void dwc2_hcd_free(struct dwc2_hsotg *hsotg)
hsotg->status_buf = NULL; hsotg->status_buf = NULL;
} }
ahbcfg = dwc2_readl(hsotg->regs + GAHBCFG); ahbcfg = dwc2_readl(hsotg, GAHBCFG);
/* Disable all interrupts */ /* Disable all interrupts */
ahbcfg &= ~GAHBCFG_GLBL_INTR_EN; ahbcfg &= ~GAHBCFG_GLBL_INTR_EN;
dwc2_writel(ahbcfg, hsotg->regs + GAHBCFG); dwc2_writel(hsotg, ahbcfg, GAHBCFG);
dwc2_writel(0, hsotg->regs + GINTMSK); dwc2_writel(hsotg, 0, GINTMSK);
if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a) { if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a) {
dctl = dwc2_readl(hsotg->regs + DCTL); dctl = dwc2_readl(hsotg, DCTL);
dctl |= DCTL_SFTDISCON; dctl |= DCTL_SFTDISCON;
dwc2_writel(dctl, hsotg->regs + DCTL); dwc2_writel(hsotg, dctl, DCTL);
} }
if (hsotg->wq_otg) { if (hsotg->wq_otg) {
...@@ -5139,7 +5138,7 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg) ...@@ -5139,7 +5138,7 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg)
retval = -ENOMEM; retval = -ENOMEM;
hcfg = dwc2_readl(hsotg->regs + HCFG); hcfg = dwc2_readl(hsotg, HCFG);
dev_dbg(hsotg->dev, "hcfg=%08x\n", hcfg); dev_dbg(hsotg->dev, "hcfg=%08x\n", hcfg);
#ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
...@@ -5429,14 +5428,14 @@ int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg) ...@@ -5429,14 +5428,14 @@ int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg)
/* Backup Host regs */ /* Backup Host regs */
hr = &hsotg->hr_backup; hr = &hsotg->hr_backup;
hr->hcfg = dwc2_readl(hsotg->regs + HCFG); hr->hcfg = dwc2_readl(hsotg, HCFG);
hr->haintmsk = dwc2_readl(hsotg->regs + HAINTMSK); hr->haintmsk = dwc2_readl(hsotg, HAINTMSK);
for (i = 0; i < hsotg->params.host_channels; ++i) 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->hprt0 = dwc2_read_hprt0(hsotg);
hr->hfir = dwc2_readl(hsotg->regs + HFIR); hr->hfir = dwc2_readl(hsotg, HFIR);
hr->hptxfsiz = dwc2_readl(hsotg->regs + HPTXFSIZ); hr->hptxfsiz = dwc2_readl(hsotg, HPTXFSIZ);
hr->valid = true; hr->valid = true;
return 0; return 0;
...@@ -5465,15 +5464,15 @@ int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg) ...@@ -5465,15 +5464,15 @@ int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg)
} }
hr->valid = false; hr->valid = false;
dwc2_writel(hr->hcfg, hsotg->regs + HCFG); dwc2_writel(hsotg, hr->hcfg, HCFG);
dwc2_writel(hr->haintmsk, hsotg->regs + HAINTMSK); dwc2_writel(hsotg, hr->haintmsk, HAINTMSK);
for (i = 0; i < hsotg->params.host_channels; ++i) 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(hsotg, hr->hprt0, HPRT0);
dwc2_writel(hr->hfir, hsotg->regs + HFIR); dwc2_writel(hsotg, hr->hfir, HFIR);
dwc2_writel(hr->hptxfsiz, hsotg->regs + HPTXFSIZ); dwc2_writel(hsotg, hr->hptxfsiz, HPTXFSIZ);
hsotg->frame_number = 0; hsotg->frame_number = 0;
return 0; return 0;
...@@ -5508,10 +5507,10 @@ int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg) ...@@ -5508,10 +5507,10 @@ int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg)
} }
/* Enter USB Suspend Mode */ /* Enter USB Suspend Mode */
hprt0 = dwc2_readl(hsotg->regs + HPRT0); hprt0 = dwc2_readl(hsotg, HPRT0);
hprt0 |= HPRT0_SUSP; hprt0 |= HPRT0_SUSP;
hprt0 &= ~HPRT0_ENA; hprt0 &= ~HPRT0_ENA;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
/* Wait for the HPRT0.PrtSusp register field to be set */ /* Wait for the HPRT0.PrtSusp register field to be set */
if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 3000)) if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 3000))
...@@ -5524,56 +5523,56 @@ int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg) ...@@ -5524,56 +5523,56 @@ int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg)
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
hsotg->lx_state = DWC2_L2; hsotg->lx_state = DWC2_L2;
gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG); gusbcfg = dwc2_readl(hsotg, GUSBCFG);
if (gusbcfg & GUSBCFG_ULPI_UTMI_SEL) { if (gusbcfg & GUSBCFG_ULPI_UTMI_SEL) {
/* ULPI interface */ /* ULPI interface */
/* Suspend the Phy Clock */ /* Suspend the Phy Clock */
pcgcctl = dwc2_readl(hsotg->regs + PCGCTL); pcgcctl = dwc2_readl(hsotg, PCGCTL);
pcgcctl |= PCGCTL_STOPPCLK; pcgcctl |= PCGCTL_STOPPCLK;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
udelay(10); udelay(10);
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_PMUACTV; gpwrdn |= GPWRDN_PMUACTV;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
} else { } else {
/* UTMI+ Interface */ /* UTMI+ Interface */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_PMUACTV; gpwrdn |= GPWRDN_PMUACTV;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
pcgcctl = dwc2_readl(hsotg->regs + PCGCTL); pcgcctl = dwc2_readl(hsotg, PCGCTL);
pcgcctl |= PCGCTL_STOPPCLK; pcgcctl |= PCGCTL_STOPPCLK;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
udelay(10); udelay(10);
} }
/* Enable interrupts from wake up logic */ /* Enable interrupts from wake up logic */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_PMUINTSEL; gpwrdn |= GPWRDN_PMUINTSEL;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Unmask host mode interrupts in GPWRDN */ /* Unmask host mode interrupts in GPWRDN */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_DISCONN_DET_MSK; gpwrdn |= GPWRDN_DISCONN_DET_MSK;
gpwrdn |= GPWRDN_LNSTSCHG_MSK; gpwrdn |= GPWRDN_LNSTSCHG_MSK;
gpwrdn |= GPWRDN_STS_CHGINT_MSK; gpwrdn |= GPWRDN_STS_CHGINT_MSK;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Enable Power Down Clamp */ /* Enable Power Down Clamp */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_PWRDNCLMP; gpwrdn |= GPWRDN_PWRDNCLMP;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Switch off VDD */ /* Switch off VDD */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn |= GPWRDN_PWRDNSWTCH; gpwrdn |= GPWRDN_PWRDNSWTCH;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
hsotg->hibernated = 1; hsotg->hibernated = 1;
hsotg->bus_suspended = 1; hsotg->bus_suspended = 1;
...@@ -5621,29 +5620,29 @@ int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup, ...@@ -5621,29 +5620,29 @@ int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup,
mdelay(100); mdelay(100);
/* Clear all pending interupts */ /* Clear all pending interupts */
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS); dwc2_writel(hsotg, 0xffffffff, GINTSTS);
/* De-assert Restore */ /* De-assert Restore */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn &= ~GPWRDN_RESTORE; gpwrdn &= ~GPWRDN_RESTORE;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
/* Restore GUSBCFG, HCFG */ /* Restore GUSBCFG, HCFG */
dwc2_writel(gr->gusbcfg, hsotg->regs + GUSBCFG); dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG);
dwc2_writel(hr->hcfg, hsotg->regs + HCFG); dwc2_writel(hsotg, hr->hcfg, HCFG);
/* De-assert Wakeup Logic */ /* De-assert Wakeup Logic */
gpwrdn = dwc2_readl(hsotg->regs + GPWRDN); gpwrdn = dwc2_readl(hsotg, GPWRDN);
gpwrdn &= ~GPWRDN_PMUACTV; gpwrdn &= ~GPWRDN_PMUACTV;
dwc2_writel(gpwrdn, hsotg->regs + GPWRDN); dwc2_writel(hsotg, gpwrdn, GPWRDN);
udelay(10); udelay(10);
hprt0 = hr->hprt0; hprt0 = hr->hprt0;
hprt0 |= HPRT0_PWR; hprt0 |= HPRT0_PWR;
hprt0 &= ~HPRT0_ENA; hprt0 &= ~HPRT0_ENA;
hprt0 &= ~HPRT0_SUSP; hprt0 &= ~HPRT0_SUSP;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
hprt0 = hr->hprt0; hprt0 = hr->hprt0;
hprt0 |= HPRT0_PWR; hprt0 |= HPRT0_PWR;
...@@ -5652,32 +5651,32 @@ int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup, ...@@ -5652,32 +5651,32 @@ int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup,
if (reset) { if (reset) {
hprt0 |= HPRT0_RST; hprt0 |= HPRT0_RST;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
/* Wait for Resume time and then program HPRT again */ /* Wait for Resume time and then program HPRT again */
mdelay(60); mdelay(60);
hprt0 &= ~HPRT0_RST; hprt0 &= ~HPRT0_RST;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
} else { } else {
hprt0 |= HPRT0_RES; hprt0 |= HPRT0_RES;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
/* Wait for Resume time and then program HPRT again */ /* Wait for Resume time and then program HPRT again */
mdelay(100); mdelay(100);
hprt0 &= ~HPRT0_RES; hprt0 &= ~HPRT0_RES;
dwc2_writel(hprt0, hsotg->regs + HPRT0); dwc2_writel(hsotg, hprt0, HPRT0);
} }
/* Clear all interrupt status */ /* Clear all interrupt status */
hprt0 = dwc2_readl(hsotg->regs + HPRT0); hprt0 = dwc2_readl(hsotg, HPRT0);
hprt0 |= HPRT0_CONNDET; hprt0 |= HPRT0_CONNDET;
hprt0 |= HPRT0_ENACHG; hprt0 |= HPRT0_ENACHG;
hprt0 &= ~HPRT0_ENA; 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 */ /* Clear all pending interupts */
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS); dwc2_writel(hsotg, 0xffffffff, GINTSTS);
/* Restore global registers */ /* Restore global registers */
ret = dwc2_restore_global_registers(hsotg); ret = dwc2_restore_global_registers(hsotg);
......
...@@ -469,10 +469,10 @@ static inline struct usb_hcd *dwc2_hsotg_to_hcd(struct dwc2_hsotg *hsotg) ...@@ -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) 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; 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); 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, ...@@ -487,7 +487,7 @@ void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg,
*/ */
static inline u32 dwc2_read_hprt0(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); hprt0 &= ~(HPRT0_ENA | HPRT0_CONNDET | HPRT0_ENACHG | HPRT0_OVRCURRCHG);
return hprt0; return hprt0;
...@@ -690,8 +690,8 @@ static inline u16 dwc2_micro_frame_num(u16 frame) ...@@ -690,8 +690,8 @@ static inline u16 dwc2_micro_frame_num(u16 frame)
*/ */
static inline u32 dwc2_read_core_intr(struct dwc2_hsotg *hsotg) static inline u32 dwc2_read_core_intr(struct dwc2_hsotg *hsotg)
{ {
return dwc2_readl(hsotg->regs + GINTSTS) & return dwc2_readl(hsotg, GINTSTS) &
dwc2_readl(hsotg->regs + GINTMSK); dwc2_readl(hsotg, GINTMSK);
} }
static inline u32 dwc2_hcd_urb_get_status(struct dwc2_hcd_urb *dwc2_urb) 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) ...@@ -185,19 +185,19 @@ static void dwc2_per_sched_enable(struct dwc2_hsotg *hsotg, u32 fr_list_en)
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
hcfg = dwc2_readl(hsotg->regs + HCFG); hcfg = dwc2_readl(hsotg, HCFG);
if (hcfg & HCFG_PERSCHEDENA) { if (hcfg & HCFG_PERSCHEDENA) {
/* already enabled */ /* already enabled */
spin_unlock_irqrestore(&hsotg->lock, flags); spin_unlock_irqrestore(&hsotg->lock, flags);
return; return;
} }
dwc2_writel(hsotg->frame_list_dma, hsotg->regs + HFLBADDR); dwc2_writel(hsotg, hsotg->frame_list_dma, HFLBADDR);
hcfg &= ~HCFG_FRLISTEN_MASK; hcfg &= ~HCFG_FRLISTEN_MASK;
hcfg |= fr_list_en | HCFG_PERSCHEDENA; hcfg |= fr_list_en | HCFG_PERSCHEDENA;
dev_vdbg(hsotg->dev, "Enabling Periodic schedule\n"); 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); spin_unlock_irqrestore(&hsotg->lock, flags);
} }
...@@ -209,7 +209,7 @@ static void dwc2_per_sched_disable(struct dwc2_hsotg *hsotg) ...@@ -209,7 +209,7 @@ static void dwc2_per_sched_disable(struct dwc2_hsotg *hsotg)
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
hcfg = dwc2_readl(hsotg->regs + HCFG); hcfg = dwc2_readl(hsotg, HCFG);
if (!(hcfg & HCFG_PERSCHEDENA)) { if (!(hcfg & HCFG_PERSCHEDENA)) {
/* already disabled */ /* already disabled */
spin_unlock_irqrestore(&hsotg->lock, flags); spin_unlock_irqrestore(&hsotg->lock, flags);
...@@ -218,7 +218,7 @@ static void dwc2_per_sched_disable(struct dwc2_hsotg *hsotg) ...@@ -218,7 +218,7 @@ static void dwc2_per_sched_disable(struct dwc2_hsotg *hsotg)
hcfg &= ~HCFG_PERSCHEDENA; hcfg &= ~HCFG_PERSCHEDENA;
dev_vdbg(hsotg->dev, "Disabling Periodic schedule\n"); 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); spin_unlock_irqrestore(&hsotg->lock, flags);
} }
......
...@@ -144,7 +144,7 @@ static void dwc2_sof_intr(struct dwc2_hsotg *hsotg) ...@@ -144,7 +144,7 @@ static void dwc2_sof_intr(struct dwc2_hsotg *hsotg)
enum dwc2_transaction_type tr_type; enum dwc2_transaction_type tr_type;
/* Clear interrupt */ /* Clear interrupt */
dwc2_writel(GINTSTS_SOF, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_SOF, GINTSTS);
#ifdef DEBUG_SOF #ifdef DEBUG_SOF
dev_vdbg(hsotg->dev, "--Start of Frame Interrupt--\n"); dev_vdbg(hsotg->dev, "--Start of Frame Interrupt--\n");
...@@ -191,7 +191,7 @@ static void dwc2_rx_fifo_level_intr(struct dwc2_hsotg *hsotg) ...@@ -191,7 +191,7 @@ static void dwc2_rx_fifo_level_intr(struct dwc2_hsotg *hsotg)
if (dbg_perio()) if (dbg_perio())
dev_vdbg(hsotg->dev, "--RxFIFO Level Interrupt--\n"); 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; chnum = (grxsts & GRXSTS_HCHNUM_MASK) >> GRXSTS_HCHNUM_SHIFT;
chan = hsotg->hc_ptr_array[chnum]; chan = hsotg->hc_ptr_array[chnum];
if (!chan) { if (!chan) {
...@@ -274,11 +274,11 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0, ...@@ -274,11 +274,11 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
dev_vdbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); dev_vdbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
/* Every time when port enables calculate HFIR.FrInterval */ /* Every time when port enables calculate HFIR.FrInterval */
hfir = dwc2_readl(hsotg->regs + HFIR); hfir = dwc2_readl(hsotg, HFIR);
hfir &= ~HFIR_FRINT_MASK; hfir &= ~HFIR_FRINT_MASK;
hfir |= dwc2_calc_frame_interval(hsotg) << HFIR_FRINT_SHIFT & hfir |= dwc2_calc_frame_interval(hsotg) << HFIR_FRINT_SHIFT &
HFIR_FRINT_MASK; 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 */ /* Check if we need to adjust the PHY clock speed for low power */
if (!params->host_support_fs_ls_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, ...@@ -287,7 +287,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
return; return;
} }
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT; prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
if (prtspd == HPRT0_SPD_LOW_SPEED || prtspd == HPRT0_SPD_FULL_SPEED) { 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, ...@@ -295,11 +295,11 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL)) { if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL)) {
/* Set PHY low power clock select for FS/LS devices */ /* Set PHY low power clock select for FS/LS devices */
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; do_reset = 1;
} }
hcfg = dwc2_readl(hsotg->regs + HCFG); hcfg = dwc2_readl(hsotg, HCFG);
fslspclksel = (hcfg & HCFG_FSLSPCLKSEL_MASK) >> fslspclksel = (hcfg & HCFG_FSLSPCLKSEL_MASK) >>
HCFG_FSLSPCLKSEL_SHIFT; HCFG_FSLSPCLKSEL_SHIFT;
...@@ -312,7 +312,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0, ...@@ -312,7 +312,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
fslspclksel = HCFG_FSLSPCLKSEL_6_MHZ; fslspclksel = HCFG_FSLSPCLKSEL_6_MHZ;
hcfg &= ~HCFG_FSLSPCLKSEL_MASK; hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT; hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
dwc2_writel(hcfg, hsotg->regs + HCFG); dwc2_writel(hsotg, hcfg, HCFG);
do_reset = 1; do_reset = 1;
} }
} else { } else {
...@@ -323,7 +323,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0, ...@@ -323,7 +323,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
fslspclksel = HCFG_FSLSPCLKSEL_48_MHZ; fslspclksel = HCFG_FSLSPCLKSEL_48_MHZ;
hcfg &= ~HCFG_FSLSPCLKSEL_MASK; hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT; hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
dwc2_writel(hcfg, hsotg->regs + HCFG); dwc2_writel(hsotg, hcfg, HCFG);
do_reset = 1; do_reset = 1;
} }
} }
...@@ -331,14 +331,14 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0, ...@@ -331,14 +331,14 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
/* Not low power */ /* Not low power */
if (usbcfg & GUSBCFG_PHY_LP_CLK_SEL) { if (usbcfg & GUSBCFG_PHY_LP_CLK_SEL) {
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; do_reset = 1;
} }
} }
if (do_reset) { if (do_reset) {
*hprt0_modify |= HPRT0_RST; *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, queue_delayed_work(hsotg->wq_otg, &hsotg->reset_work,
msecs_to_jiffies(60)); msecs_to_jiffies(60));
} else { } else {
...@@ -359,7 +359,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg) ...@@ -359,7 +359,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
dev_vdbg(hsotg->dev, "--Port Interrupt--\n"); dev_vdbg(hsotg->dev, "--Port Interrupt--\n");
hprt0 = dwc2_readl(hsotg->regs + HPRT0); hprt0 = dwc2_readl(hsotg, HPRT0);
hprt0_modify = hprt0; hprt0_modify = hprt0;
/* /*
...@@ -374,7 +374,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg) ...@@ -374,7 +374,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
* Set flag and clear if detected * Set flag and clear if detected
*/ */
if (hprt0 & HPRT0_CONNDET) { 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, dev_vdbg(hsotg->dev,
"--Port Interrupt HPRT0=0x%08x Port Connect Detected--\n", "--Port Interrupt HPRT0=0x%08x Port Connect Detected--\n",
...@@ -392,7 +392,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg) ...@@ -392,7 +392,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
* Clear if detected - Set internal flag if disabled * Clear if detected - Set internal flag if disabled
*/ */
if (hprt0 & HPRT0_ENACHG) { 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, dev_vdbg(hsotg->dev,
" --Port Interrupt HPRT0=0x%08x Port Enable Changed (now %d)--\n", " --Port Interrupt HPRT0=0x%08x Port Enable Changed (now %d)--\n",
hprt0, !!(hprt0 & HPRT0_ENA)); hprt0, !!(hprt0 & HPRT0_ENA));
...@@ -406,17 +406,17 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg) ...@@ -406,17 +406,17 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
hsotg->params.dma_desc_enable = false; hsotg->params.dma_desc_enable = false;
hsotg->new_connection = false; hsotg->new_connection = false;
hcfg = dwc2_readl(hsotg->regs + HCFG); hcfg = dwc2_readl(hsotg, HCFG);
hcfg &= ~HCFG_DESCDMA; hcfg &= ~HCFG_DESCDMA;
dwc2_writel(hcfg, hsotg->regs + HCFG); dwc2_writel(hsotg, hcfg, HCFG);
} }
} }
} }
/* Overcurrent Change Interrupt */ /* Overcurrent Change Interrupt */
if (hprt0 & HPRT0_OVRCURRCHG) { if (hprt0 & HPRT0_OVRCURRCHG) {
dwc2_writel(hprt0_modify | HPRT0_OVRCURRCHG, dwc2_writel(hsotg, hprt0_modify | HPRT0_OVRCURRCHG,
hsotg->regs + HPRT0); HPRT0);
dev_vdbg(hsotg->dev, dev_vdbg(hsotg->dev,
" --Port Interrupt HPRT0=0x%08x Port Overcurrent Changed--\n", " --Port Interrupt HPRT0=0x%08x Port Overcurrent Changed--\n",
hprt0); hprt0);
...@@ -441,7 +441,7 @@ static u32 dwc2_get_actual_xfer_length(struct dwc2_hsotg *hsotg, ...@@ -441,7 +441,7 @@ static u32 dwc2_get_actual_xfer_length(struct dwc2_hsotg *hsotg,
{ {
u32 hctsiz, count, length; 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 (halt_status == DWC2_HC_XFER_COMPLETE) {
if (chan->ep_is_in) { if (chan->ep_is_in) {
...@@ -518,7 +518,7 @@ static int dwc2_update_urb_state(struct dwc2_hsotg *hsotg, ...@@ -518,7 +518,7 @@ static int dwc2_update_urb_state(struct dwc2_hsotg *hsotg,
urb->status = 0; 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", dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum); __func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
dev_vdbg(hsotg->dev, " chan->xfer_len %d\n", chan->xfer_len); 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, ...@@ -541,7 +541,7 @@ void dwc2_hcd_save_data_toggle(struct dwc2_hsotg *hsotg,
struct dwc2_host_chan *chan, int chnum, struct dwc2_host_chan *chan, int chnum,
struct dwc2_qtd *qtd) 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; u32 pid = (hctsiz & TSIZ_SC_MC_PID_MASK) >> TSIZ_SC_MC_PID_SHIFT;
if (chan->ep_type != USB_ENDPOINT_XFER_CONTROL) { if (chan->ep_type != USB_ENDPOINT_XFER_CONTROL) {
...@@ -780,9 +780,9 @@ static void dwc2_release_channel(struct dwc2_hsotg *hsotg, ...@@ -780,9 +780,9 @@ static void dwc2_release_channel(struct dwc2_hsotg *hsotg,
} }
} }
haintmsk = dwc2_readl(hsotg->regs + HAINTMSK); haintmsk = dwc2_readl(hsotg, HAINTMSK);
haintmsk &= ~(1 << chan->hc_num); 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 */ /* Try to queue more transfers now that there's a free channel */
tr_type = dwc2_hcd_select_transactions(hsotg); tr_type = dwc2_hcd_select_transactions(hsotg);
...@@ -829,9 +829,9 @@ static void dwc2_halt_channel(struct dwc2_hsotg *hsotg, ...@@ -829,9 +829,9 @@ static void dwc2_halt_channel(struct dwc2_hsotg *hsotg,
* is enabled so that the non-periodic schedule will * is enabled so that the non-periodic schedule will
* be processed * be processed
*/ */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk |= GINTSTS_NPTXFEMP; gintmsk |= GINTSTS_NPTXFEMP;
dwc2_writel(gintmsk, hsotg->regs + GINTMSK); dwc2_writel(hsotg, gintmsk, GINTMSK);
} else { } else {
dev_vdbg(hsotg->dev, "isoc/intr\n"); dev_vdbg(hsotg->dev, "isoc/intr\n");
/* /*
...@@ -848,9 +848,9 @@ static void dwc2_halt_channel(struct dwc2_hsotg *hsotg, ...@@ -848,9 +848,9 @@ static void dwc2_halt_channel(struct dwc2_hsotg *hsotg,
* enabled so that the periodic schedule will be * enabled so that the periodic schedule will be
* processed * processed
*/ */
gintmsk = dwc2_readl(hsotg->regs + GINTMSK); gintmsk = dwc2_readl(hsotg, GINTMSK);
gintmsk |= GINTSTS_PTXFEMP; 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, ...@@ -915,7 +915,7 @@ static void dwc2_complete_periodic_xfer(struct dwc2_hsotg *hsotg,
struct dwc2_qtd *qtd, struct dwc2_qtd *qtd,
enum dwc2_halt_status halt_status) 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; qtd->error_count = 0;
...@@ -959,7 +959,7 @@ static int dwc2_xfercomp_isoc_split_in(struct dwc2_hsotg *hsotg, ...@@ -959,7 +959,7 @@ static int dwc2_xfercomp_isoc_split_in(struct dwc2_hsotg *hsotg,
qtd->isoc_split_offset += len; 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; pid = (hctsiz & TSIZ_SC_MC_PID_MASK) >> TSIZ_SC_MC_PID_SHIFT;
if (frame_desc->actual_length >= frame_desc->length || pid == 0) { 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, ...@@ -1185,7 +1185,7 @@ static void dwc2_update_urb_state_abn(struct dwc2_hsotg *hsotg,
urb->actual_length += xfer_length; 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", dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum); __func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
dev_vdbg(hsotg->dev, " chan->start_pkt_count %d\n", dev_vdbg(hsotg->dev, " chan->start_pkt_count %d\n",
...@@ -1561,10 +1561,10 @@ static void dwc2_hc_ahberr_intr(struct dwc2_hsotg *hsotg, ...@@ -1561,10 +1561,10 @@ static void dwc2_hc_ahberr_intr(struct dwc2_hsotg *hsotg,
dwc2_hc_handle_tt_clear(hsotg, chan, qtd); dwc2_hc_handle_tt_clear(hsotg, chan, qtd);
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chnum)); hcchar = dwc2_readl(hsotg, HCCHAR(chnum));
hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chnum)); hcsplt = dwc2_readl(hsotg, HCSPLT(chnum));
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum)); hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
hc_dma = dwc2_readl(hsotg->regs + HCDMA(chnum)); hc_dma = dwc2_readl(hsotg, HCDMA(chnum));
dev_err(hsotg->dev, "AHB ERROR, Channel %d\n", chnum); dev_err(hsotg->dev, "AHB ERROR, Channel %d\n", chnum);
dev_err(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", hcchar, hcsplt); 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, ...@@ -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 * This code is here only as a check. This condition should
* never happen. Ignore the halt if it does occur. * never happen. Ignore the halt if it does occur.
*/ */
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chnum)); hcchar = dwc2_readl(hsotg, HCCHAR(chnum));
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum)); hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum));
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(chnum)); hcintmsk = dwc2_readl(hsotg, HCINTMSK(chnum));
hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chnum)); hcsplt = dwc2_readl(hsotg, HCSPLT(chnum));
dev_dbg(hsotg->dev, dev_dbg(hsotg->dev,
"%s: chan->halt_status DWC2_HC_XFER_NO_HALT_STATUS,\n", "%s: chan->halt_status DWC2_HC_XFER_NO_HALT_STATUS,\n",
__func__); __func__);
...@@ -1803,7 +1803,7 @@ static bool dwc2_halt_status_ok(struct dwc2_hsotg *hsotg, ...@@ -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 * when the halt interrupt occurs. Halt the channel again if it does
* occur. * occur.
*/ */
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chnum)); hcchar = dwc2_readl(hsotg, HCCHAR(chnum));
if (hcchar & HCCHAR_CHDIS) { if (hcchar & HCCHAR_CHDIS) {
dev_warn(hsotg->dev, dev_warn(hsotg->dev,
"%s: hcchar.chdis set unexpectedly, hcchar 0x%08x, trying to halt again\n", "%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, ...@@ -1863,7 +1863,7 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg,
return; return;
} }
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(chnum)); hcintmsk = dwc2_readl(hsotg, HCINTMSK(chnum));
if (chan->hcint & HCINTMSK_XFERCOMPL) { if (chan->hcint & HCINTMSK_XFERCOMPL) {
/* /*
...@@ -1958,7 +1958,7 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg, ...@@ -1958,7 +1958,7 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg,
dev_err(hsotg->dev, dev_err(hsotg->dev,
"hcint 0x%08x, intsts 0x%08x\n", "hcint 0x%08x, intsts 0x%08x\n",
chan->hcint, chan->hcint,
dwc2_readl(hsotg->regs + GINTSTS)); dwc2_readl(hsotg, GINTSTS));
goto error; goto error;
} }
} }
...@@ -2031,11 +2031,11 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum) ...@@ -2031,11 +2031,11 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)
chan = hsotg->hc_ptr_array[chnum]; chan = hsotg->hc_ptr_array[chnum];
hcint = dwc2_readl(hsotg->regs + HCINT(chnum)); hcint = dwc2_readl(hsotg, HCINT(chnum));
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(chnum)); hcintmsk = dwc2_readl(hsotg, HCINTMSK(chnum));
if (!chan) { if (!chan) {
dev_err(hsotg->dev, "## hc_ptr_array for channel is NULL ##\n"); 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; return;
} }
...@@ -2047,7 +2047,7 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum) ...@@ -2047,7 +2047,7 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)
hcint, hcintmsk, hcint & hcintmsk); 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 * If we got an interrupt after someone called
...@@ -2182,7 +2182,7 @@ static void dwc2_hc_intr(struct dwc2_hsotg *hsotg) ...@@ -2182,7 +2182,7 @@ static void dwc2_hc_intr(struct dwc2_hsotg *hsotg)
int i; int i;
struct dwc2_host_chan *chan, *chan_tmp; struct dwc2_host_chan *chan, *chan_tmp;
haint = dwc2_readl(hsotg->regs + HAINT); haint = dwc2_readl(hsotg, HAINT);
if (dbg_perio()) { if (dbg_perio()) {
dev_vdbg(hsotg->dev, "%s()\n", __func__); dev_vdbg(hsotg->dev, "%s()\n", __func__);
...@@ -2266,8 +2266,8 @@ irqreturn_t dwc2_handle_hcd_intr(struct dwc2_hsotg *hsotg) ...@@ -2266,8 +2266,8 @@ irqreturn_t dwc2_handle_hcd_intr(struct dwc2_hsotg *hsotg)
"DWC OTG HCD Finished Servicing Interrupts\n"); "DWC OTG HCD Finished Servicing Interrupts\n");
dev_vdbg(hsotg->dev, dev_vdbg(hsotg->dev,
"DWC OTG HCD gintsts=0x%08x gintmsk=0x%08x\n", "DWC OTG HCD gintsts=0x%08x gintmsk=0x%08x\n",
dwc2_readl(hsotg->regs + GINTSTS), dwc2_readl(hsotg, GINTSTS),
dwc2_readl(hsotg->regs + GINTMSK)); dwc2_readl(hsotg, GINTMSK));
} }
} }
......
...@@ -1510,7 +1510,7 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, ...@@ -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_in = !!dwc2_hcd_is_pipe_in(&urb->pipe_info);
bool ep_is_isoc = (ep_type == USB_ENDPOINT_XFER_ISOC); bool ep_is_isoc = (ep_type == USB_ENDPOINT_XFER_ISOC);
bool ep_is_int = (ep_type == USB_ENDPOINT_XFER_INT); 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; u32 prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
bool do_split = (prtspd == HPRT0_SPD_HIGH_SPEED && bool do_split = (prtspd == HPRT0_SPD_HIGH_SPEED &&
dev_speed != USB_SPEED_HIGH); dev_speed != USB_SPEED_HIGH);
...@@ -1747,9 +1747,9 @@ int dwc2_hcd_qh_add(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) ...@@ -1747,9 +1747,9 @@ int dwc2_hcd_qh_add(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
if (status) if (status)
return status; return status;
if (!hsotg->periodic_qh_count) { if (!hsotg->periodic_qh_count) {
intr_mask = dwc2_readl(hsotg->regs + GINTMSK); intr_mask = dwc2_readl(hsotg, GINTMSK);
intr_mask |= GINTSTS_SOF; intr_mask |= GINTSTS_SOF;
dwc2_writel(intr_mask, hsotg->regs + GINTMSK); dwc2_writel(hsotg, intr_mask, GINTMSK);
} }
hsotg->periodic_qh_count++; hsotg->periodic_qh_count++;
...@@ -1788,9 +1788,9 @@ void dwc2_hcd_qh_unlink(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) ...@@ -1788,9 +1788,9 @@ void dwc2_hcd_qh_unlink(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
hsotg->periodic_qh_count--; hsotg->periodic_qh_count--;
if (!hsotg->periodic_qh_count && if (!hsotg->periodic_qh_count &&
!hsotg->params.dma_desc_enable) { !hsotg->params.dma_desc_enable) {
intr_mask = dwc2_readl(hsotg->regs + GINTMSK); intr_mask = dwc2_readl(hsotg, GINTMSK);
intr_mask &= ~GINTSTS_SOF; 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) ...@@ -654,8 +654,8 @@ static void dwc2_get_host_hwparams(struct dwc2_hsotg *hsotg)
dwc2_force_mode(hsotg, true); dwc2_force_mode(hsotg, true);
gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ); gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ);
hptxfsiz = dwc2_readl(hsotg->regs + HPTXFSIZ); hptxfsiz = dwc2_readl(hsotg, HPTXFSIZ);
hw->host_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >> hw->host_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >>
FIFOSIZE_DEPTH_SHIFT; FIFOSIZE_DEPTH_SHIFT;
...@@ -679,13 +679,13 @@ static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg) ...@@ -679,13 +679,13 @@ static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg)
dwc2_force_mode(hsotg, false); dwc2_force_mode(hsotg, false);
gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ); gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ);
fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); fifo_count = dwc2_hsotg_tx_fifo_count(hsotg);
for (fifo = 1; fifo <= fifo_count; fifo++) { for (fifo = 1; fifo <= fifo_count; fifo++) {
hw->g_tx_fifo_size[fifo] = hw->g_tx_fifo_size[fifo] =
(dwc2_readl(hsotg->regs + DPTXFSIZN(fifo)) & (dwc2_readl(hsotg, DPTXFSIZN(fifo)) &
FIFOSIZE_DEPTH_MASK) >> FIFOSIZE_DEPTH_SHIFT; FIFOSIZE_DEPTH_MASK) >> FIFOSIZE_DEPTH_SHIFT;
} }
...@@ -713,7 +713,7 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) ...@@ -713,7 +713,7 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
* 0x45f4xxxx, 0x5531xxxx or 0x5532xxxx * 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 && if ((hw->snpsid & GSNPSID_ID_MASK) != DWC2_OTG_ID &&
(hw->snpsid & GSNPSID_ID_MASK) != DWC2_FS_IOT_ID && (hw->snpsid & GSNPSID_ID_MASK) != DWC2_FS_IOT_ID &&
(hw->snpsid & GSNPSID_ID_MASK) != DWC2_HS_IOT_ID) { (hw->snpsid & GSNPSID_ID_MASK) != DWC2_HS_IOT_ID) {
...@@ -726,11 +726,11 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) ...@@ -726,11 +726,11 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
hw->snpsid >> 12 & 0xf, hw->snpsid >> 8 & 0xf, hw->snpsid >> 12 & 0xf, hw->snpsid >> 8 & 0xf,
hw->snpsid >> 4 & 0xf, hw->snpsid & 0xf, hw->snpsid); hw->snpsid >> 4 & 0xf, hw->snpsid & 0xf, hw->snpsid);
hwcfg1 = dwc2_readl(hsotg->regs + GHWCFG1); hwcfg1 = dwc2_readl(hsotg, GHWCFG1);
hwcfg2 = dwc2_readl(hsotg->regs + GHWCFG2); hwcfg2 = dwc2_readl(hsotg, GHWCFG2);
hwcfg3 = dwc2_readl(hsotg->regs + GHWCFG3); hwcfg3 = dwc2_readl(hsotg, GHWCFG3);
hwcfg4 = dwc2_readl(hsotg->regs + GHWCFG4); hwcfg4 = dwc2_readl(hsotg, GHWCFG4);
grxfsiz = dwc2_readl(hsotg->regs + GRXFSIZ); grxfsiz = dwc2_readl(hsotg, GRXFSIZ);
/* hwcfg1 */ /* hwcfg1 */
hw->dev_ep_dirs = hwcfg1; hw->dev_ep_dirs = hwcfg1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment