mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-18 14:36:06 +07:00
usb: dwc2: Use platform endianness when accessing registers
This patch switches calls to readl/writel to their dwc2_readl/dwc2_writel equivalents which preserve platform endianness. This patch is necessary to access dwc2 registers correctly on big-endian systems such as the mips based SoCs made by Lantiq. Then dwc2 can be used to replace ifx-hcd driver for Lantiq platforms found e.g. in OpenWrt. The patch was autogenerated with the following commands: $EDITOR core.h sed -i "s/\<readl\>/dwc2_readl/g" *.c hcd.h hw.h sed -i "s/\<writel\>/dwc2_writel/g" *.c hcd.h hw.h Some files were then hand-edited to fix checkpatch.pl warnings about too long lines. Signed-off-by: Antti Seppälä <a.seppala@gmail.com> Signed-off-by: Vincent Pelletier <plr.vincent@gmail.com> Signed-off-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
bba787a860
commit
95c8bc3609
File diff suppressed because it is too large
Load Diff
@ -44,16 +44,32 @@
|
||||
#include <linux/usb/phy.h>
|
||||
#include "hw.h"
|
||||
|
||||
#ifdef DWC2_LOG_WRITES
|
||||
static inline void do_write(u32 value, void *addr)
|
||||
static inline u32 dwc2_readl(const void __iomem *addr)
|
||||
{
|
||||
writel(value, addr);
|
||||
pr_info("INFO:: wrote %08x to %p\n", value, addr);
|
||||
u32 value = __raw_readl(addr);
|
||||
|
||||
/* In order to preserve endianness __raw_* operation is used. Therefore
|
||||
* a barrier is needed to ensure IO access is not re-ordered across
|
||||
* reads or writes
|
||||
*/
|
||||
mb();
|
||||
return value;
|
||||
}
|
||||
|
||||
#undef writel
|
||||
#define writel(v, a) do_write(v, a)
|
||||
static inline void dwc2_writel(u32 value, void __iomem *addr)
|
||||
{
|
||||
__raw_writel(value, addr);
|
||||
|
||||
/*
|
||||
* In order to preserve endianness __raw_* operation is used. Therefore
|
||||
* a barrier is needed to ensure IO access is not re-ordered across
|
||||
* reads or writes
|
||||
*/
|
||||
mb();
|
||||
#ifdef DWC2_LOG_WRITES
|
||||
pr_info("INFO:: wrote %08x to %p\n", value, addr);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Maximum number of Endpoints/HostChannels */
|
||||
#define MAX_EPS_CHANNELS 16
|
||||
|
@ -80,15 +80,15 @@ static const char *dwc2_op_state_str(struct dwc2_hsotg *hsotg)
|
||||
*/
|
||||
static void dwc2_handle_usb_port_intr(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 hprt0 = readl(hsotg->regs + HPRT0);
|
||||
u32 hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
||||
|
||||
if (hprt0 & HPRT0_ENACHG) {
|
||||
hprt0 &= ~HPRT0_ENA;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
}
|
||||
|
||||
/* Clear interrupt */
|
||||
writel(GINTSTS_PRTINT, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_PRTINT, hsotg->regs + GINTSTS);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -102,7 +102,7 @@ static void dwc2_handle_mode_mismatch_intr(struct dwc2_hsotg *hsotg)
|
||||
dwc2_is_host_mode(hsotg) ? "Host" : "Device");
|
||||
|
||||
/* Clear interrupt */
|
||||
writel(GINTSTS_MODEMIS, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_MODEMIS, hsotg->regs + GINTSTS);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -117,8 +117,8 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
u32 gotgctl;
|
||||
u32 gintmsk;
|
||||
|
||||
gotgint = readl(hsotg->regs + GOTGINT);
|
||||
gotgctl = readl(hsotg->regs + GOTGCTL);
|
||||
gotgint = dwc2_readl(hsotg->regs + GOTGINT);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
dev_dbg(hsotg->dev, "++OTG Interrupt gotgint=%0x [%s]\n", gotgint,
|
||||
dwc2_op_state_str(hsotg));
|
||||
|
||||
@ -126,7 +126,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
dev_dbg(hsotg->dev,
|
||||
" ++OTG Interrupt: Session End Detected++ (%s)\n",
|
||||
dwc2_op_state_str(hsotg));
|
||||
gotgctl = readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
|
||||
if (dwc2_is_device_mode(hsotg))
|
||||
dwc2_hsotg_disconnect(hsotg);
|
||||
@ -152,15 +152,15 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
hsotg->lx_state = DWC2_L0;
|
||||
}
|
||||
|
||||
gotgctl = readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl &= ~GOTGCTL_DEVHNPEN;
|
||||
writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
}
|
||||
|
||||
if (gotgint & GOTGINT_SES_REQ_SUC_STS_CHNG) {
|
||||
dev_dbg(hsotg->dev,
|
||||
" ++OTG Interrupt: Session Request Success Status Change++\n");
|
||||
gotgctl = readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
if (gotgctl & GOTGCTL_SESREQSCS) {
|
||||
if (hsotg->core_params->phy_type ==
|
||||
DWC2_PHY_TYPE_PARAM_FS
|
||||
@ -168,9 +168,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
hsotg->srp_success = 1;
|
||||
} else {
|
||||
/* Clear Session Request */
|
||||
gotgctl = readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl &= ~GOTGCTL_SESREQ;
|
||||
writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -180,7 +180,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
* Print statements during the HNP interrupt handling
|
||||
* can cause it to fail
|
||||
*/
|
||||
gotgctl = readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
/*
|
||||
* WA for 3.00a- HW is not setting cur_mode, even sometimes
|
||||
* this does not help
|
||||
@ -200,9 +200,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
* interrupt does not get handled and Linux
|
||||
* complains loudly.
|
||||
*/
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk &= ~GINTSTS_SOF;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
|
||||
/*
|
||||
* Call callback function with spin lock
|
||||
@ -216,9 +216,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
hsotg->op_state = OTG_STATE_B_HOST;
|
||||
}
|
||||
} else {
|
||||
gotgctl = readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl &= ~(GOTGCTL_HNPREQ | GOTGCTL_DEVHNPEN);
|
||||
writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
dev_dbg(hsotg->dev, "HNP Failed\n");
|
||||
dev_err(hsotg->dev,
|
||||
"Device Not Connected/Responding\n");
|
||||
@ -244,9 +244,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
hsotg->op_state = OTG_STATE_A_PERIPHERAL;
|
||||
} else {
|
||||
/* Need to disable SOF interrupt immediately */
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk &= ~GINTSTS_SOF;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
spin_unlock(&hsotg->lock);
|
||||
dwc2_hcd_start(hsotg);
|
||||
spin_lock(&hsotg->lock);
|
||||
@ -261,7 +261,7 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
dev_dbg(hsotg->dev, " ++OTG Interrupt: Debounce Done++\n");
|
||||
|
||||
/* Clear GOTGINT */
|
||||
writel(gotgint, hsotg->regs + GOTGINT);
|
||||
dwc2_writel(gotgint, hsotg->regs + GOTGINT);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -276,11 +276,11 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
|
||||
*/
|
||||
static void dwc2_handle_conn_id_status_change_intr(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
u32 gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
|
||||
/* Need to disable SOF interrupt immediately */
|
||||
gintmsk &= ~GINTSTS_SOF;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
|
||||
dev_dbg(hsotg->dev, " ++Connector ID Status Change Interrupt++ (%s)\n",
|
||||
dwc2_is_host_mode(hsotg) ? "Host" : "Device");
|
||||
@ -297,7 +297,7 @@ static void dwc2_handle_conn_id_status_change_intr(struct dwc2_hsotg *hsotg)
|
||||
}
|
||||
|
||||
/* Clear interrupt */
|
||||
writel(GINTSTS_CONIDSTSCHNG, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_CONIDSTSCHNG, hsotg->regs + GINTSTS);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -316,7 +316,7 @@ static void dwc2_handle_session_req_intr(struct dwc2_hsotg *hsotg)
|
||||
dev_dbg(hsotg->dev, "++Session Request Interrupt++\n");
|
||||
|
||||
/* Clear interrupt */
|
||||
writel(GINTSTS_SESSREQINT, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_SESSREQINT, hsotg->regs + GINTSTS);
|
||||
|
||||
/*
|
||||
* Report disconnect if there is any previous session established
|
||||
@ -339,13 +339,14 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
|
||||
dev_dbg(hsotg->dev, "%s lxstate = %d\n", __func__, hsotg->lx_state);
|
||||
|
||||
if (dwc2_is_device_mode(hsotg)) {
|
||||
dev_dbg(hsotg->dev, "DSTS=0x%0x\n", readl(hsotg->regs + DSTS));
|
||||
dev_dbg(hsotg->dev, "DSTS=0x%0x\n",
|
||||
dwc2_readl(hsotg->regs + DSTS));
|
||||
if (hsotg->lx_state == DWC2_L2) {
|
||||
u32 dctl = readl(hsotg->regs + DCTL);
|
||||
u32 dctl = dwc2_readl(hsotg->regs + DCTL);
|
||||
|
||||
/* Clear Remote Wakeup Signaling */
|
||||
dctl &= ~DCTL_RMTWKUPSIG;
|
||||
writel(dctl, hsotg->regs + DCTL);
|
||||
dwc2_writel(dctl, hsotg->regs + DCTL);
|
||||
ret = dwc2_exit_hibernation(hsotg, true);
|
||||
if (ret && (ret != -ENOTSUPP))
|
||||
dev_err(hsotg->dev, "exit hibernation failed\n");
|
||||
@ -356,11 +357,11 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
|
||||
hsotg->lx_state = DWC2_L0;
|
||||
} else {
|
||||
if (hsotg->lx_state != DWC2_L1) {
|
||||
u32 pcgcctl = readl(hsotg->regs + PCGCTL);
|
||||
u32 pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
|
||||
/* Restart the Phy Clock */
|
||||
pcgcctl &= ~PCGCTL_STOPPCLK;
|
||||
writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL);
|
||||
mod_timer(&hsotg->wkp_timer,
|
||||
jiffies + msecs_to_jiffies(71));
|
||||
} else {
|
||||
@ -370,7 +371,7 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
|
||||
}
|
||||
|
||||
/* Clear interrupt */
|
||||
writel(GINTSTS_WKUPINT, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_WKUPINT, hsotg->regs + GINTSTS);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -389,7 +390,7 @@ static void dwc2_handle_disconnect_intr(struct dwc2_hsotg *hsotg)
|
||||
/* Change to L3 (OFF) state */
|
||||
hsotg->lx_state = DWC2_L3;
|
||||
|
||||
writel(GINTSTS_DISCONNINT, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_DISCONNINT, hsotg->regs + GINTSTS);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -412,7 +413,7 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg)
|
||||
* Check the Device status register to determine if the Suspend
|
||||
* state is active
|
||||
*/
|
||||
dsts = readl(hsotg->regs + DSTS);
|
||||
dsts = dwc2_readl(hsotg->regs + DSTS);
|
||||
dev_dbg(hsotg->dev, "DSTS=0x%0x\n", dsts);
|
||||
dev_dbg(hsotg->dev,
|
||||
"DSTS.Suspend Status=%d HWCFG4.Power Optimize=%d\n",
|
||||
@ -465,7 +466,7 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg)
|
||||
|
||||
clear_int:
|
||||
/* Clear interrupt */
|
||||
writel(GINTSTS_USBSUSP, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_USBSUSP, hsotg->regs + GINTSTS);
|
||||
}
|
||||
|
||||
#define GINTMSK_COMMON (GINTSTS_WKUPINT | GINTSTS_SESSREQINT | \
|
||||
@ -483,9 +484,9 @@ static u32 dwc2_read_common_intr(struct dwc2_hsotg *hsotg)
|
||||
u32 gahbcfg;
|
||||
u32 gintmsk_common = GINTMSK_COMMON;
|
||||
|
||||
gintsts = readl(hsotg->regs + GINTSTS);
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gahbcfg = readl(hsotg->regs + GAHBCFG);
|
||||
gintsts = dwc2_readl(hsotg->regs + GINTSTS);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gahbcfg = dwc2_readl(hsotg->regs + GAHBCFG);
|
||||
|
||||
/* If any common interrupts set */
|
||||
if (gintsts & gintmsk_common)
|
||||
|
@ -76,7 +76,7 @@ static int testmode_show(struct seq_file *s, void *unused)
|
||||
int dctl;
|
||||
|
||||
spin_lock_irqsave(&hsotg->lock, flags);
|
||||
dctl = readl(hsotg->regs + DCTL);
|
||||
dctl = dwc2_readl(hsotg->regs + DCTL);
|
||||
dctl &= DCTL_TSTCTL_MASK;
|
||||
dctl >>= DCTL_TSTCTL_SHIFT;
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
@ -137,38 +137,38 @@ static int state_show(struct seq_file *seq, void *v)
|
||||
int idx;
|
||||
|
||||
seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n",
|
||||
readl(regs + DCFG),
|
||||
readl(regs + DCTL),
|
||||
readl(regs + DSTS));
|
||||
dwc2_readl(regs + DCFG),
|
||||
dwc2_readl(regs + DCTL),
|
||||
dwc2_readl(regs + DSTS));
|
||||
|
||||
seq_printf(seq, "DIEPMSK=0x%08x, DOEPMASK=0x%08x\n",
|
||||
readl(regs + DIEPMSK), readl(regs + DOEPMSK));
|
||||
dwc2_readl(regs + DIEPMSK), dwc2_readl(regs + DOEPMSK));
|
||||
|
||||
seq_printf(seq, "GINTMSK=0x%08x, GINTSTS=0x%08x\n",
|
||||
readl(regs + GINTMSK),
|
||||
readl(regs + GINTSTS));
|
||||
dwc2_readl(regs + GINTMSK),
|
||||
dwc2_readl(regs + GINTSTS));
|
||||
|
||||
seq_printf(seq, "DAINTMSK=0x%08x, DAINT=0x%08x\n",
|
||||
readl(regs + DAINTMSK),
|
||||
readl(regs + DAINT));
|
||||
dwc2_readl(regs + DAINTMSK),
|
||||
dwc2_readl(regs + DAINT));
|
||||
|
||||
seq_printf(seq, "GNPTXSTS=0x%08x, GRXSTSR=%08x\n",
|
||||
readl(regs + GNPTXSTS),
|
||||
readl(regs + GRXSTSR));
|
||||
dwc2_readl(regs + GNPTXSTS),
|
||||
dwc2_readl(regs + GRXSTSR));
|
||||
|
||||
seq_puts(seq, "\nEndpoint status:\n");
|
||||
|
||||
for (idx = 0; idx < hsotg->num_of_eps; idx++) {
|
||||
u32 in, out;
|
||||
|
||||
in = readl(regs + DIEPCTL(idx));
|
||||
out = readl(regs + DOEPCTL(idx));
|
||||
in = dwc2_readl(regs + DIEPCTL(idx));
|
||||
out = dwc2_readl(regs + DOEPCTL(idx));
|
||||
|
||||
seq_printf(seq, "ep%d: DIEPCTL=0x%08x, DOEPCTL=0x%08x",
|
||||
idx, in, out);
|
||||
|
||||
in = readl(regs + DIEPTSIZ(idx));
|
||||
out = readl(regs + DOEPTSIZ(idx));
|
||||
in = dwc2_readl(regs + DIEPTSIZ(idx));
|
||||
out = dwc2_readl(regs + DOEPTSIZ(idx));
|
||||
|
||||
seq_printf(seq, ", DIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x",
|
||||
in, out);
|
||||
@ -208,9 +208,9 @@ static int fifo_show(struct seq_file *seq, void *v)
|
||||
int idx;
|
||||
|
||||
seq_puts(seq, "Non-periodic FIFOs:\n");
|
||||
seq_printf(seq, "RXFIFO: Size %d\n", readl(regs + GRXFSIZ));
|
||||
seq_printf(seq, "RXFIFO: Size %d\n", dwc2_readl(regs + GRXFSIZ));
|
||||
|
||||
val = readl(regs + GNPTXFSIZ);
|
||||
val = dwc2_readl(regs + GNPTXFSIZ);
|
||||
seq_printf(seq, "NPTXFIFO: Size %d, Start 0x%08x\n",
|
||||
val >> FIFOSIZE_DEPTH_SHIFT,
|
||||
val & FIFOSIZE_DEPTH_MASK);
|
||||
@ -218,7 +218,7 @@ static int fifo_show(struct seq_file *seq, void *v)
|
||||
seq_puts(seq, "\nPeriodic TXFIFOs:\n");
|
||||
|
||||
for (idx = 1; idx < hsotg->num_of_eps; idx++) {
|
||||
val = readl(regs + DPTXFSIZN(idx));
|
||||
val = dwc2_readl(regs + DPTXFSIZN(idx));
|
||||
|
||||
seq_printf(seq, "\tDPTXFIFO%2d: Size %d, Start 0x%08x\n", idx,
|
||||
val >> FIFOSIZE_DEPTH_SHIFT,
|
||||
@ -270,20 +270,20 @@ static int ep_show(struct seq_file *seq, void *v)
|
||||
/* first show the register state */
|
||||
|
||||
seq_printf(seq, "\tDIEPCTL=0x%08x, DOEPCTL=0x%08x\n",
|
||||
readl(regs + DIEPCTL(index)),
|
||||
readl(regs + DOEPCTL(index)));
|
||||
dwc2_readl(regs + DIEPCTL(index)),
|
||||
dwc2_readl(regs + DOEPCTL(index)));
|
||||
|
||||
seq_printf(seq, "\tDIEPDMA=0x%08x, DOEPDMA=0x%08x\n",
|
||||
readl(regs + DIEPDMA(index)),
|
||||
readl(regs + DOEPDMA(index)));
|
||||
dwc2_readl(regs + DIEPDMA(index)),
|
||||
dwc2_readl(regs + DOEPDMA(index)));
|
||||
|
||||
seq_printf(seq, "\tDIEPINT=0x%08x, DOEPINT=0x%08x\n",
|
||||
readl(regs + DIEPINT(index)),
|
||||
readl(regs + DOEPINT(index)));
|
||||
dwc2_readl(regs + DIEPINT(index)),
|
||||
dwc2_readl(regs + DOEPINT(index)));
|
||||
|
||||
seq_printf(seq, "\tDIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x\n",
|
||||
readl(regs + DIEPTSIZ(index)),
|
||||
readl(regs + DOEPTSIZ(index)));
|
||||
dwc2_readl(regs + DIEPTSIZ(index)),
|
||||
dwc2_readl(regs + DOEPTSIZ(index)));
|
||||
|
||||
seq_puts(seq, "\n");
|
||||
seq_printf(seq, "mps %d\n", ep->ep.maxpacket);
|
||||
|
@ -56,12 +56,12 @@ static inline struct dwc2_hsotg *to_hsotg(struct usb_gadget *gadget)
|
||||
|
||||
static inline void __orr32(void __iomem *ptr, u32 val)
|
||||
{
|
||||
writel(readl(ptr) | val, ptr);
|
||||
dwc2_writel(dwc2_readl(ptr) | val, ptr);
|
||||
}
|
||||
|
||||
static inline void __bic32(void __iomem *ptr, u32 val)
|
||||
{
|
||||
writel(readl(ptr) & ~val, ptr);
|
||||
dwc2_writel(dwc2_readl(ptr) & ~val, ptr);
|
||||
}
|
||||
|
||||
static inline struct dwc2_hsotg_ep *index_to_ep(struct dwc2_hsotg *hsotg,
|
||||
@ -107,14 +107,14 @@ static inline bool using_dma(struct dwc2_hsotg *hsotg)
|
||||
*/
|
||||
static void dwc2_hsotg_en_gsint(struct dwc2_hsotg *hsotg, u32 ints)
|
||||
{
|
||||
u32 gsintmsk = readl(hsotg->regs + GINTMSK);
|
||||
u32 gsintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
u32 new_gsintmsk;
|
||||
|
||||
new_gsintmsk = gsintmsk | ints;
|
||||
|
||||
if (new_gsintmsk != gsintmsk) {
|
||||
dev_dbg(hsotg->dev, "gsintmsk now 0x%08x\n", new_gsintmsk);
|
||||
writel(new_gsintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(new_gsintmsk, hsotg->regs + GINTMSK);
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,13 +125,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)
|
||||
{
|
||||
u32 gsintmsk = readl(hsotg->regs + GINTMSK);
|
||||
u32 gsintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
u32 new_gsintmsk;
|
||||
|
||||
new_gsintmsk = gsintmsk & ~ints;
|
||||
|
||||
if (new_gsintmsk != gsintmsk)
|
||||
writel(new_gsintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(new_gsintmsk, hsotg->regs + GINTMSK);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -156,12 +156,12 @@ static void dwc2_hsotg_ctrl_epint(struct dwc2_hsotg *hsotg,
|
||||
bit <<= 16;
|
||||
|
||||
local_irq_save(flags);
|
||||
daint = readl(hsotg->regs + DAINTMSK);
|
||||
daint = dwc2_readl(hsotg->regs + DAINTMSK);
|
||||
if (en)
|
||||
daint |= bit;
|
||||
else
|
||||
daint &= ~bit;
|
||||
writel(daint, hsotg->regs + DAINTMSK);
|
||||
dwc2_writel(daint, hsotg->regs + DAINTMSK);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
@ -181,8 +181,8 @@ static void dwc2_hsotg_init_fifo(struct dwc2_hsotg *hsotg)
|
||||
hsotg->fifo_map = 0;
|
||||
|
||||
/* set RX/NPTX FIFO sizes */
|
||||
writel(hsotg->g_rx_fifo_sz, hsotg->regs + GRXFSIZ);
|
||||
writel((hsotg->g_rx_fifo_sz << FIFOSIZE_STARTADDR_SHIFT) |
|
||||
dwc2_writel(hsotg->g_rx_fifo_sz, hsotg->regs + GRXFSIZ);
|
||||
dwc2_writel((hsotg->g_rx_fifo_sz << FIFOSIZE_STARTADDR_SHIFT) |
|
||||
(hsotg->g_np_g_tx_fifo_sz << FIFOSIZE_DEPTH_SHIFT),
|
||||
hsotg->regs + GNPTXFSIZ);
|
||||
|
||||
@ -210,7 +210,7 @@ static void dwc2_hsotg_init_fifo(struct dwc2_hsotg *hsotg)
|
||||
"insufficient fifo memory");
|
||||
addr += hsotg->g_tx_fifo_sz[ep];
|
||||
|
||||
writel(val, hsotg->regs + DPTXFSIZN(ep));
|
||||
dwc2_writel(val, hsotg->regs + DPTXFSIZN(ep));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -218,13 +218,13 @@ static void dwc2_hsotg_init_fifo(struct dwc2_hsotg *hsotg)
|
||||
* all fifos are flushed before continuing
|
||||
*/
|
||||
|
||||
writel(GRSTCTL_TXFNUM(0x10) | GRSTCTL_TXFFLSH |
|
||||
dwc2_writel(GRSTCTL_TXFNUM(0x10) | GRSTCTL_TXFFLSH |
|
||||
GRSTCTL_RXFFLSH, hsotg->regs + GRSTCTL);
|
||||
|
||||
/* wait until the fifos are both flushed */
|
||||
timeout = 100;
|
||||
while (1) {
|
||||
val = readl(hsotg->regs + GRSTCTL);
|
||||
val = dwc2_readl(hsotg->regs + GRSTCTL);
|
||||
|
||||
if ((val & (GRSTCTL_TXFFLSH | GRSTCTL_RXFFLSH)) == 0)
|
||||
break;
|
||||
@ -317,7 +317,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg,
|
||||
struct dwc2_hsotg_req *hs_req)
|
||||
{
|
||||
bool periodic = is_ep_periodic(hs_ep);
|
||||
u32 gnptxsts = readl(hsotg->regs + GNPTXSTS);
|
||||
u32 gnptxsts = dwc2_readl(hsotg->regs + GNPTXSTS);
|
||||
int buf_pos = hs_req->req.actual;
|
||||
int to_write = hs_ep->size_loaded;
|
||||
void *data;
|
||||
@ -332,7 +332,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg,
|
||||
return 0;
|
||||
|
||||
if (periodic && !hsotg->dedicated_fifos) {
|
||||
u32 epsize = readl(hsotg->regs + DIEPTSIZ(hs_ep->index));
|
||||
u32 epsize = dwc2_readl(hsotg->regs + DIEPTSIZ(hs_ep->index));
|
||||
int size_left;
|
||||
int size_done;
|
||||
|
||||
@ -373,7 +373,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg,
|
||||
return -ENOSPC;
|
||||
}
|
||||
} else if (hsotg->dedicated_fifos && hs_ep->index != 0) {
|
||||
can_write = readl(hsotg->regs + DTXFSTS(hs_ep->index));
|
||||
can_write = dwc2_readl(hsotg->regs + DTXFSTS(hs_ep->index));
|
||||
|
||||
can_write &= 0xffff;
|
||||
can_write *= 4;
|
||||
@ -550,11 +550,11 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
|
||||
epsize_reg = dir_in ? DIEPTSIZ(index) : DOEPTSIZ(index);
|
||||
|
||||
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x, ep %d, dir %s\n",
|
||||
__func__, readl(hsotg->regs + epctrl_reg), index,
|
||||
__func__, dwc2_readl(hsotg->regs + epctrl_reg), index,
|
||||
hs_ep->dir_in ? "in" : "out");
|
||||
|
||||
/* If endpoint is stalled, we will restart request later */
|
||||
ctrl = readl(hsotg->regs + epctrl_reg);
|
||||
ctrl = dwc2_readl(hsotg->regs + epctrl_reg);
|
||||
|
||||
if (ctrl & DXEPCTL_STALL) {
|
||||
dev_warn(hsotg->dev, "%s: ep%d is stalled\n", __func__, index);
|
||||
@ -618,7 +618,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
|
||||
hs_ep->req = hs_req;
|
||||
|
||||
/* write size / packets */
|
||||
writel(epsize, hsotg->regs + epsize_reg);
|
||||
dwc2_writel(epsize, hsotg->regs + epsize_reg);
|
||||
|
||||
if (using_dma(hsotg) && !continuing) {
|
||||
unsigned int dma_reg;
|
||||
@ -629,7 +629,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
|
||||
*/
|
||||
|
||||
dma_reg = dir_in ? DIEPDMA(index) : DOEPDMA(index);
|
||||
writel(ureq->dma, hsotg->regs + dma_reg);
|
||||
dwc2_writel(ureq->dma, hsotg->regs + dma_reg);
|
||||
|
||||
dev_dbg(hsotg->dev, "%s: %pad => 0x%08x\n",
|
||||
__func__, &ureq->dma, dma_reg);
|
||||
@ -645,7 +645,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
|
||||
ctrl |= DXEPCTL_CNAK; /* clear NAK set by core */
|
||||
|
||||
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl);
|
||||
writel(ctrl, hsotg->regs + epctrl_reg);
|
||||
dwc2_writel(ctrl, hsotg->regs + epctrl_reg);
|
||||
|
||||
/*
|
||||
* set these, it seems that DMA support increments past the end
|
||||
@ -667,7 +667,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
|
||||
* to debugging to see what is going on.
|
||||
*/
|
||||
if (dir_in)
|
||||
writel(DIEPMSK_INTKNTXFEMPMSK,
|
||||
dwc2_writel(DIEPMSK_INTKNTXFEMPMSK,
|
||||
hsotg->regs + DIEPINT(index));
|
||||
|
||||
/*
|
||||
@ -676,13 +676,13 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
|
||||
*/
|
||||
|
||||
/* check ep is enabled */
|
||||
if (!(readl(hsotg->regs + epctrl_reg) & DXEPCTL_EPENA))
|
||||
if (!(dwc2_readl(hsotg->regs + epctrl_reg) & DXEPCTL_EPENA))
|
||||
dev_dbg(hsotg->dev,
|
||||
"ep%d: failed to become enabled (DXEPCTL=0x%08x)?\n",
|
||||
index, readl(hsotg->regs + epctrl_reg));
|
||||
index, dwc2_readl(hsotg->regs + epctrl_reg));
|
||||
|
||||
dev_dbg(hsotg->dev, "%s: DXEPCTL=0x%08x\n",
|
||||
__func__, readl(hsotg->regs + epctrl_reg));
|
||||
__func__, dwc2_readl(hsotg->regs + epctrl_reg));
|
||||
|
||||
/* enable ep interrupts */
|
||||
dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 1);
|
||||
@ -901,7 +901,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 dctl = readl(hsotg->regs + DCTL);
|
||||
int dctl = dwc2_readl(hsotg->regs + DCTL);
|
||||
|
||||
dctl &= ~DCTL_TSTCTL_MASK;
|
||||
switch (testmode) {
|
||||
@ -915,7 +915,7 @@ int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, int testmode)
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
writel(dctl, hsotg->regs + DCTL);
|
||||
dwc2_writel(dctl, hsotg->regs + DCTL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1174,14 +1174,14 @@ static void dwc2_hsotg_stall_ep0(struct dwc2_hsotg *hsotg)
|
||||
* taken effect, so no need to clear later.
|
||||
*/
|
||||
|
||||
ctrl = readl(hsotg->regs + reg);
|
||||
ctrl = dwc2_readl(hsotg->regs + reg);
|
||||
ctrl |= DXEPCTL_STALL;
|
||||
ctrl |= DXEPCTL_CNAK;
|
||||
writel(ctrl, hsotg->regs + reg);
|
||||
dwc2_writel(ctrl, hsotg->regs + reg);
|
||||
|
||||
dev_dbg(hsotg->dev,
|
||||
"written DXEPCTL=0x%08x to %08x (DXEPCTL=0x%08x)\n",
|
||||
ctrl, reg, readl(hsotg->regs + reg));
|
||||
ctrl, reg, dwc2_readl(hsotg->regs + reg));
|
||||
|
||||
/*
|
||||
* complete won't be called, so we enqueue
|
||||
@ -1225,11 +1225,11 @@ static void dwc2_hsotg_process_control(struct dwc2_hsotg *hsotg,
|
||||
switch (ctrl->bRequest) {
|
||||
case USB_REQ_SET_ADDRESS:
|
||||
hsotg->connected = 1;
|
||||
dcfg = readl(hsotg->regs + DCFG);
|
||||
dcfg = dwc2_readl(hsotg->regs + DCFG);
|
||||
dcfg &= ~DCFG_DEVADDR_MASK;
|
||||
dcfg |= (le16_to_cpu(ctrl->wValue) <<
|
||||
DCFG_DEVADDR_SHIFT) & DCFG_DEVADDR_MASK;
|
||||
writel(dcfg, hsotg->regs + DCFG);
|
||||
dwc2_writel(dcfg, hsotg->regs + DCFG);
|
||||
|
||||
dev_info(hsotg->dev, "new address %d\n", ctrl->wValue);
|
||||
|
||||
@ -1347,15 +1347,15 @@ static void dwc2_hsotg_program_zlp(struct dwc2_hsotg *hsotg,
|
||||
dev_dbg(hsotg->dev, "Receiving zero-length packet on ep%d\n",
|
||||
index);
|
||||
|
||||
writel(DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) |
|
||||
DXEPTSIZ_XFERSIZE(0), hsotg->regs +
|
||||
epsiz_reg);
|
||||
dwc2_writel(DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) |
|
||||
DXEPTSIZ_XFERSIZE(0), hsotg->regs +
|
||||
epsiz_reg);
|
||||
|
||||
ctrl = readl(hsotg->regs + epctl_reg);
|
||||
ctrl = dwc2_readl(hsotg->regs + epctl_reg);
|
||||
ctrl |= DXEPCTL_CNAK; /* clear NAK set by core */
|
||||
ctrl |= DXEPCTL_EPENA; /* ensure ep enabled */
|
||||
ctrl |= DXEPCTL_USBACTEP;
|
||||
writel(ctrl, hsotg->regs + epctl_reg);
|
||||
dwc2_writel(ctrl, hsotg->regs + epctl_reg);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1449,7 +1449,7 @@ static void dwc2_hsotg_rx_data(struct dwc2_hsotg *hsotg, int ep_idx, int size)
|
||||
|
||||
|
||||
if (!hs_req) {
|
||||
u32 epctl = readl(hsotg->regs + DOEPCTL(ep_idx));
|
||||
u32 epctl = dwc2_readl(hsotg->regs + DOEPCTL(ep_idx));
|
||||
int ptr;
|
||||
|
||||
dev_dbg(hsotg->dev,
|
||||
@ -1458,7 +1458,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 */
|
||||
for (ptr = 0; ptr < size; ptr += 4)
|
||||
(void)readl(fifo);
|
||||
(void)dwc2_readl(fifo);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1523,7 +1523,7 @@ static void dwc2_hsotg_ep0_zlp(struct dwc2_hsotg *hsotg, bool dir_in)
|
||||
*/
|
||||
static void dwc2_hsotg_handle_outdone(struct dwc2_hsotg *hsotg, int epnum)
|
||||
{
|
||||
u32 epsize = readl(hsotg->regs + DOEPTSIZ(epnum));
|
||||
u32 epsize = dwc2_readl(hsotg->regs + DOEPTSIZ(epnum));
|
||||
struct dwc2_hsotg_ep *hs_ep = hsotg->eps_out[epnum];
|
||||
struct dwc2_hsotg_req *hs_req = hs_ep->req;
|
||||
struct usb_request *req = &hs_req->req;
|
||||
@ -1595,7 +1595,7 @@ static u32 dwc2_hsotg_read_frameno(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 dsts;
|
||||
|
||||
dsts = readl(hsotg->regs + DSTS);
|
||||
dsts = dwc2_readl(hsotg->regs + DSTS);
|
||||
dsts &= DSTS_SOFFN_MASK;
|
||||
dsts >>= DSTS_SOFFN_SHIFT;
|
||||
|
||||
@ -1620,7 +1620,7 @@ static u32 dwc2_hsotg_read_frameno(struct dwc2_hsotg *hsotg)
|
||||
*/
|
||||
static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 grxstsr = readl(hsotg->regs + GRXSTSP);
|
||||
u32 grxstsr = dwc2_readl(hsotg->regs + GRXSTSP);
|
||||
u32 epnum, status, size;
|
||||
|
||||
WARN_ON(using_dma(hsotg));
|
||||
@ -1651,7 +1651,7 @@ static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg)
|
||||
dev_dbg(hsotg->dev,
|
||||
"SetupDone (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
|
||||
dwc2_hsotg_read_frameno(hsotg),
|
||||
readl(hsotg->regs + DOEPCTL(0)));
|
||||
dwc2_readl(hsotg->regs + DOEPCTL(0)));
|
||||
/*
|
||||
* Call dwc2_hsotg_handle_outdone here if it was not called from
|
||||
* GRXSTS_PKTSTS_OUTDONE. That is, if the core didn't
|
||||
@ -1669,7 +1669,7 @@ static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg)
|
||||
dev_dbg(hsotg->dev,
|
||||
"SetupRX (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
|
||||
dwc2_hsotg_read_frameno(hsotg),
|
||||
readl(hsotg->regs + DOEPCTL(0)));
|
||||
dwc2_readl(hsotg->regs + DOEPCTL(0)));
|
||||
|
||||
WARN_ON(hsotg->ep0_state != DWC2_EP0_SETUP);
|
||||
|
||||
@ -1748,15 +1748,15 @@ static void dwc2_hsotg_set_ep_maxpacket(struct dwc2_hsotg *hsotg,
|
||||
}
|
||||
|
||||
if (dir_in) {
|
||||
reg = readl(regs + DIEPCTL(ep));
|
||||
reg = dwc2_readl(regs + DIEPCTL(ep));
|
||||
reg &= ~DXEPCTL_MPS_MASK;
|
||||
reg |= mpsval;
|
||||
writel(reg, regs + DIEPCTL(ep));
|
||||
dwc2_writel(reg, regs + DIEPCTL(ep));
|
||||
} else {
|
||||
reg = readl(regs + DOEPCTL(ep));
|
||||
reg = dwc2_readl(regs + DOEPCTL(ep));
|
||||
reg &= ~DXEPCTL_MPS_MASK;
|
||||
reg |= mpsval;
|
||||
writel(reg, regs + DOEPCTL(ep));
|
||||
dwc2_writel(reg, regs + DOEPCTL(ep));
|
||||
}
|
||||
|
||||
return;
|
||||
@ -1775,14 +1775,14 @@ static void dwc2_hsotg_txfifo_flush(struct dwc2_hsotg *hsotg, unsigned int idx)
|
||||
int timeout;
|
||||
int val;
|
||||
|
||||
writel(GRSTCTL_TXFNUM(idx) | GRSTCTL_TXFFLSH,
|
||||
hsotg->regs + GRSTCTL);
|
||||
dwc2_writel(GRSTCTL_TXFNUM(idx) | GRSTCTL_TXFFLSH,
|
||||
hsotg->regs + GRSTCTL);
|
||||
|
||||
/* wait until the fifo is flushed */
|
||||
timeout = 100;
|
||||
|
||||
while (1) {
|
||||
val = readl(hsotg->regs + GRSTCTL);
|
||||
val = dwc2_readl(hsotg->regs + GRSTCTL);
|
||||
|
||||
if ((val & (GRSTCTL_TXFFLSH)) == 0)
|
||||
break;
|
||||
@ -1843,7 +1843,7 @@ static void dwc2_hsotg_complete_in(struct dwc2_hsotg *hsotg,
|
||||
struct dwc2_hsotg_ep *hs_ep)
|
||||
{
|
||||
struct dwc2_hsotg_req *hs_req = hs_ep->req;
|
||||
u32 epsize = readl(hsotg->regs + DIEPTSIZ(hs_ep->index));
|
||||
u32 epsize = dwc2_readl(hsotg->regs + DIEPTSIZ(hs_ep->index));
|
||||
int size_left, size_done;
|
||||
|
||||
if (!hs_req) {
|
||||
@ -1934,11 +1934,11 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
|
||||
u32 ints;
|
||||
u32 ctrl;
|
||||
|
||||
ints = readl(hsotg->regs + epint_reg);
|
||||
ctrl = readl(hsotg->regs + epctl_reg);
|
||||
ints = dwc2_readl(hsotg->regs + epint_reg);
|
||||
ctrl = dwc2_readl(hsotg->regs + epctl_reg);
|
||||
|
||||
/* Clear endpoint interrupts */
|
||||
writel(ints, hsotg->regs + epint_reg);
|
||||
dwc2_writel(ints, hsotg->regs + epint_reg);
|
||||
|
||||
if (!hs_ep) {
|
||||
dev_err(hsotg->dev, "%s:Interrupt for unconfigured ep%d(%s)\n",
|
||||
@ -1959,13 +1959,13 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
|
||||
ctrl |= DXEPCTL_SETEVENFR;
|
||||
else
|
||||
ctrl |= DXEPCTL_SETODDFR;
|
||||
writel(ctrl, hsotg->regs + epctl_reg);
|
||||
dwc2_writel(ctrl, hsotg->regs + epctl_reg);
|
||||
}
|
||||
|
||||
dev_dbg(hsotg->dev,
|
||||
"%s: XferCompl: DxEPCTL=0x%08x, DXEPTSIZ=%08x\n",
|
||||
__func__, readl(hsotg->regs + epctl_reg),
|
||||
readl(hsotg->regs + epsiz_reg));
|
||||
__func__, dwc2_readl(hsotg->regs + epctl_reg),
|
||||
dwc2_readl(hsotg->regs + epsiz_reg));
|
||||
|
||||
/*
|
||||
* we get OutDone from the FIFO, so we only need to look
|
||||
@ -1990,16 +1990,16 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
|
||||
dev_dbg(hsotg->dev, "%s: EPDisbld\n", __func__);
|
||||
|
||||
if (dir_in) {
|
||||
int epctl = readl(hsotg->regs + epctl_reg);
|
||||
int epctl = dwc2_readl(hsotg->regs + epctl_reg);
|
||||
|
||||
dwc2_hsotg_txfifo_flush(hsotg, hs_ep->fifo_index);
|
||||
|
||||
if ((epctl & DXEPCTL_STALL) &&
|
||||
(epctl & DXEPCTL_EPTYPE_BULK)) {
|
||||
int dctl = readl(hsotg->regs + DCTL);
|
||||
int dctl = dwc2_readl(hsotg->regs + DCTL);
|
||||
|
||||
dctl |= DCTL_CGNPINNAK;
|
||||
writel(dctl, hsotg->regs + DCTL);
|
||||
dwc2_writel(dctl, hsotg->regs + DCTL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2061,7 +2061,7 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
|
||||
*/
|
||||
static void dwc2_hsotg_irq_enumdone(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 dsts = readl(hsotg->regs + DSTS);
|
||||
u32 dsts = dwc2_readl(hsotg->regs + DSTS);
|
||||
int ep0_mps = 0, ep_mps = 8;
|
||||
|
||||
/*
|
||||
@ -2128,8 +2128,8 @@ static void dwc2_hsotg_irq_enumdone(struct dwc2_hsotg *hsotg)
|
||||
dwc2_hsotg_enqueue_setup(hsotg);
|
||||
|
||||
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
|
||||
readl(hsotg->regs + DIEPCTL0),
|
||||
readl(hsotg->regs + DOEPCTL0));
|
||||
dwc2_readl(hsotg->regs + DIEPCTL0),
|
||||
dwc2_readl(hsotg->regs + DOEPCTL0));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2156,7 +2156,7 @@ static void kill_all_requests(struct dwc2_hsotg *hsotg,
|
||||
|
||||
if (!hsotg->dedicated_fifos)
|
||||
return;
|
||||
size = (readl(hsotg->regs + DTXFSTS(ep->index)) & 0xffff) * 4;
|
||||
size = (dwc2_readl(hsotg->regs + DTXFSTS(ep->index)) & 0xffff) * 4;
|
||||
if (size < ep->fifo_size)
|
||||
dwc2_hsotg_txfifo_flush(hsotg, ep->fifo_index);
|
||||
}
|
||||
@ -2240,11 +2240,11 @@ static int dwc2_hsotg_corereset(struct dwc2_hsotg *hsotg)
|
||||
dev_dbg(hsotg->dev, "resetting core\n");
|
||||
|
||||
/* issue soft reset */
|
||||
writel(GRSTCTL_CSFTRST, hsotg->regs + GRSTCTL);
|
||||
dwc2_writel(GRSTCTL_CSFTRST, hsotg->regs + GRSTCTL);
|
||||
|
||||
timeout = 10000;
|
||||
do {
|
||||
grstctl = readl(hsotg->regs + GRSTCTL);
|
||||
grstctl = dwc2_readl(hsotg->regs + GRSTCTL);
|
||||
} while ((grstctl & GRSTCTL_CSFTRST) && timeout-- > 0);
|
||||
|
||||
if (grstctl & GRSTCTL_CSFTRST) {
|
||||
@ -2255,7 +2255,7 @@ static int dwc2_hsotg_corereset(struct dwc2_hsotg *hsotg)
|
||||
timeout = 10000;
|
||||
|
||||
while (1) {
|
||||
u32 grstctl = readl(hsotg->regs + GRSTCTL);
|
||||
u32 grstctl = dwc2_readl(hsotg->regs + GRSTCTL);
|
||||
|
||||
if (timeout-- < 0) {
|
||||
dev_info(hsotg->dev,
|
||||
@ -2295,7 +2295,7 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||||
|
||||
/* set the PLL on, remove the HNP/SRP and set the PHY */
|
||||
val = (hsotg->phyif == GUSBCFG_PHYIF8) ? 9 : 5;
|
||||
writel(hsotg->phyif | GUSBCFG_TOUTCAL(7) |
|
||||
dwc2_writel(hsotg->phyif | GUSBCFG_TOUTCAL(7) |
|
||||
(val << GUSBCFG_USBTRDTIM_SHIFT), hsotg->regs + GUSBCFG);
|
||||
|
||||
dwc2_hsotg_init_fifo(hsotg);
|
||||
@ -2303,15 +2303,15 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||||
if (!is_usb_reset)
|
||||
__orr32(hsotg->regs + DCTL, DCTL_SFTDISCON);
|
||||
|
||||
writel(DCFG_EPMISCNT(1) | DCFG_DEVSPD_HS, hsotg->regs + DCFG);
|
||||
dwc2_writel(DCFG_EPMISCNT(1) | DCFG_DEVSPD_HS, hsotg->regs + DCFG);
|
||||
|
||||
/* Clear any pending OTG interrupts */
|
||||
writel(0xffffffff, hsotg->regs + GOTGINT);
|
||||
dwc2_writel(0xffffffff, hsotg->regs + GOTGINT);
|
||||
|
||||
/* Clear any pending interrupts */
|
||||
writel(0xffffffff, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(0xffffffff, hsotg->regs + GINTSTS);
|
||||
|
||||
writel(GINTSTS_ERLYSUSP | GINTSTS_SESSREQINT |
|
||||
dwc2_writel(GINTSTS_ERLYSUSP | GINTSTS_SESSREQINT |
|
||||
GINTSTS_GOUTNAKEFF | GINTSTS_GINNAKEFF |
|
||||
GINTSTS_CONIDSTSCHNG | GINTSTS_USBRST |
|
||||
GINTSTS_RESETDET | GINTSTS_ENUMDONE |
|
||||
@ -2320,14 +2320,14 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||||
hsotg->regs + GINTMSK);
|
||||
|
||||
if (using_dma(hsotg))
|
||||
writel(GAHBCFG_GLBL_INTR_EN | GAHBCFG_DMA_EN |
|
||||
(GAHBCFG_HBSTLEN_INCR4 << GAHBCFG_HBSTLEN_SHIFT),
|
||||
hsotg->regs + GAHBCFG);
|
||||
dwc2_writel(GAHBCFG_GLBL_INTR_EN | GAHBCFG_DMA_EN |
|
||||
(GAHBCFG_HBSTLEN_INCR4 << GAHBCFG_HBSTLEN_SHIFT),
|
||||
hsotg->regs + GAHBCFG);
|
||||
else
|
||||
writel(((hsotg->dedicated_fifos) ? (GAHBCFG_NP_TXF_EMP_LVL |
|
||||
GAHBCFG_P_TXF_EMP_LVL) : 0) |
|
||||
GAHBCFG_GLBL_INTR_EN,
|
||||
hsotg->regs + GAHBCFG);
|
||||
dwc2_writel(((hsotg->dedicated_fifos) ?
|
||||
(GAHBCFG_NP_TXF_EMP_LVL |
|
||||
GAHBCFG_P_TXF_EMP_LVL) : 0) |
|
||||
GAHBCFG_GLBL_INTR_EN, hsotg->regs + GAHBCFG);
|
||||
|
||||
/*
|
||||
* If INTknTXFEmpMsk is enabled, it's important to disable ep interrupts
|
||||
@ -2335,7 +2335,7 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||||
* interrupts.
|
||||
*/
|
||||
|
||||
writel(((hsotg->dedicated_fifos && !using_dma(hsotg)) ?
|
||||
dwc2_writel(((hsotg->dedicated_fifos && !using_dma(hsotg)) ?
|
||||
DIEPMSK_TXFIFOEMPTY | DIEPMSK_INTKNTXFEMPMSK : 0) |
|
||||
DIEPMSK_EPDISBLDMSK | DIEPMSK_XFERCOMPLMSK |
|
||||
DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK |
|
||||
@ -2346,17 +2346,17 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||||
* don't need XferCompl, we get that from RXFIFO in slave mode. In
|
||||
* DMA mode we may need this.
|
||||
*/
|
||||
writel((using_dma(hsotg) ? (DIEPMSK_XFERCOMPLMSK |
|
||||
dwc2_writel((using_dma(hsotg) ? (DIEPMSK_XFERCOMPLMSK |
|
||||
DIEPMSK_TIMEOUTMSK) : 0) |
|
||||
DOEPMSK_EPDISBLDMSK | DOEPMSK_AHBERRMSK |
|
||||
DOEPMSK_SETUPMSK,
|
||||
hsotg->regs + DOEPMSK);
|
||||
|
||||
writel(0, hsotg->regs + DAINTMSK);
|
||||
dwc2_writel(0, hsotg->regs + DAINTMSK);
|
||||
|
||||
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
|
||||
readl(hsotg->regs + DIEPCTL0),
|
||||
readl(hsotg->regs + DOEPCTL0));
|
||||
dwc2_readl(hsotg->regs + DIEPCTL0),
|
||||
dwc2_readl(hsotg->regs + DOEPCTL0));
|
||||
|
||||
/* enable in and out endpoint interrupts */
|
||||
dwc2_hsotg_en_gsint(hsotg, GINTSTS_OEPINT | GINTSTS_IEPINT);
|
||||
@ -2379,7 +2379,7 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||||
__bic32(hsotg->regs + DCTL, DCTL_PWRONPRGDONE);
|
||||
}
|
||||
|
||||
dev_dbg(hsotg->dev, "DCTL=0x%08x\n", readl(hsotg->regs + DCTL));
|
||||
dev_dbg(hsotg->dev, "DCTL=0x%08x\n", dwc2_readl(hsotg->regs + DCTL));
|
||||
|
||||
/*
|
||||
* DxEPCTL_USBActEp says RO in manual, but seems to be set by
|
||||
@ -2387,23 +2387,23 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||||
*/
|
||||
|
||||
/* set to read 1 8byte packet */
|
||||
writel(DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) |
|
||||
dwc2_writel(DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) |
|
||||
DXEPTSIZ_XFERSIZE(8), hsotg->regs + DOEPTSIZ0);
|
||||
|
||||
writel(dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) |
|
||||
dwc2_writel(dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) |
|
||||
DXEPCTL_CNAK | DXEPCTL_EPENA |
|
||||
DXEPCTL_USBACTEP,
|
||||
hsotg->regs + DOEPCTL0);
|
||||
|
||||
/* enable, but don't activate EP0in */
|
||||
writel(dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) |
|
||||
dwc2_writel(dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) |
|
||||
DXEPCTL_USBACTEP, hsotg->regs + DIEPCTL0);
|
||||
|
||||
dwc2_hsotg_enqueue_setup(hsotg);
|
||||
|
||||
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
|
||||
readl(hsotg->regs + DIEPCTL0),
|
||||
readl(hsotg->regs + DOEPCTL0));
|
||||
dwc2_readl(hsotg->regs + DIEPCTL0),
|
||||
dwc2_readl(hsotg->regs + DOEPCTL0));
|
||||
|
||||
/* clear global NAKs */
|
||||
val = DCTL_CGOUTNAK | DCTL_CGNPINNAK;
|
||||
@ -2443,8 +2443,8 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
|
||||
|
||||
spin_lock(&hsotg->lock);
|
||||
irq_retry:
|
||||
gintsts = readl(hsotg->regs + GINTSTS);
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gintsts = dwc2_readl(hsotg->regs + GINTSTS);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
|
||||
dev_dbg(hsotg->dev, "%s: %08x %08x (%08x) retry %d\n",
|
||||
__func__, gintsts, gintsts & gintmsk, gintmsk, retry_count);
|
||||
@ -2452,14 +2452,14 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
|
||||
gintsts &= gintmsk;
|
||||
|
||||
if (gintsts & GINTSTS_ENUMDONE) {
|
||||
writel(GINTSTS_ENUMDONE, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_ENUMDONE, hsotg->regs + GINTSTS);
|
||||
|
||||
dwc2_hsotg_irq_enumdone(hsotg);
|
||||
}
|
||||
|
||||
if (gintsts & (GINTSTS_OEPINT | GINTSTS_IEPINT)) {
|
||||
u32 daint = readl(hsotg->regs + DAINT);
|
||||
u32 daintmsk = readl(hsotg->regs + DAINTMSK);
|
||||
u32 daint = dwc2_readl(hsotg->regs + DAINT);
|
||||
u32 daintmsk = dwc2_readl(hsotg->regs + DAINTMSK);
|
||||
u32 daint_out, daint_in;
|
||||
int ep;
|
||||
|
||||
@ -2485,7 +2485,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
|
||||
if (gintsts & GINTSTS_RESETDET) {
|
||||
dev_dbg(hsotg->dev, "%s: USBRstDet\n", __func__);
|
||||
|
||||
writel(GINTSTS_RESETDET, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_RESETDET, hsotg->regs + GINTSTS);
|
||||
|
||||
/* This event must be used only if controller is suspended */
|
||||
if (hsotg->lx_state == DWC2_L2) {
|
||||
@ -2496,13 +2496,13 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
|
||||
|
||||
if (gintsts & (GINTSTS_USBRST | GINTSTS_RESETDET)) {
|
||||
|
||||
u32 usb_status = readl(hsotg->regs + GOTGCTL);
|
||||
u32 usb_status = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
|
||||
dev_dbg(hsotg->dev, "%s: USBRst\n", __func__);
|
||||
dev_dbg(hsotg->dev, "GNPTXSTS=%08x\n",
|
||||
readl(hsotg->regs + GNPTXSTS));
|
||||
dwc2_readl(hsotg->regs + GNPTXSTS));
|
||||
|
||||
writel(GINTSTS_USBRST, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_USBRST, hsotg->regs + GINTSTS);
|
||||
|
||||
/* Report disconnection if it is not already done. */
|
||||
dwc2_hsotg_disconnect(hsotg);
|
||||
@ -2556,7 +2556,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
|
||||
|
||||
if (gintsts & GINTSTS_ERLYSUSP) {
|
||||
dev_dbg(hsotg->dev, "GINTSTS_ErlySusp\n");
|
||||
writel(GINTSTS_ERLYSUSP, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_ERLYSUSP, hsotg->regs + GINTSTS);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2568,7 +2568,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
|
||||
if (gintsts & GINTSTS_GOUTNAKEFF) {
|
||||
dev_info(hsotg->dev, "GOUTNakEff triggered\n");
|
||||
|
||||
writel(DCTL_CGOUTNAK, hsotg->regs + DCTL);
|
||||
dwc2_writel(DCTL_CGOUTNAK, hsotg->regs + DCTL);
|
||||
|
||||
dwc2_hsotg_dump(hsotg);
|
||||
}
|
||||
@ -2576,7 +2576,7 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
|
||||
if (gintsts & GINTSTS_GINNAKEFF) {
|
||||
dev_info(hsotg->dev, "GINNakEff triggered\n");
|
||||
|
||||
writel(DCTL_CGNPINNAK, hsotg->regs + DCTL);
|
||||
dwc2_writel(DCTL_CGNPINNAK, hsotg->regs + DCTL);
|
||||
|
||||
dwc2_hsotg_dump(hsotg);
|
||||
}
|
||||
@ -2634,7 +2634,7 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
|
||||
/* note, we handle this here instead of dwc2_hsotg_set_ep_maxpacket */
|
||||
|
||||
epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
|
||||
epctrl = readl(hsotg->regs + epctrl_reg);
|
||||
epctrl = dwc2_readl(hsotg->regs + epctrl_reg);
|
||||
|
||||
dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x from 0x%08x\n",
|
||||
__func__, epctrl, epctrl_reg);
|
||||
@ -2718,7 +2718,7 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
|
||||
for (i = 1; i < hsotg->num_of_eps; ++i) {
|
||||
if (hsotg->fifo_map & (1<<i))
|
||||
continue;
|
||||
val = readl(hsotg->regs + DPTXFSIZN(i));
|
||||
val = dwc2_readl(hsotg->regs + DPTXFSIZN(i));
|
||||
val = (val >> FIFOSIZE_DEPTH_SHIFT)*4;
|
||||
if (val < size)
|
||||
continue;
|
||||
@ -2747,9 +2747,9 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
|
||||
dev_dbg(hsotg->dev, "%s: write DxEPCTL=0x%08x\n",
|
||||
__func__, epctrl);
|
||||
|
||||
writel(epctrl, hsotg->regs + epctrl_reg);
|
||||
dwc2_writel(epctrl, hsotg->regs + epctrl_reg);
|
||||
dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x\n",
|
||||
__func__, readl(hsotg->regs + epctrl_reg));
|
||||
__func__, dwc2_readl(hsotg->regs + epctrl_reg));
|
||||
|
||||
/* enable the endpoint interrupt */
|
||||
dwc2_hsotg_ctrl_epint(hsotg, index, dir_in, 1);
|
||||
@ -2788,13 +2788,13 @@ static int dwc2_hsotg_ep_disable(struct usb_ep *ep)
|
||||
hs_ep->fifo_index = 0;
|
||||
hs_ep->fifo_size = 0;
|
||||
|
||||
ctrl = readl(hsotg->regs + epctrl_reg);
|
||||
ctrl = dwc2_readl(hsotg->regs + epctrl_reg);
|
||||
ctrl &= ~DXEPCTL_EPENA;
|
||||
ctrl &= ~DXEPCTL_USBACTEP;
|
||||
ctrl |= DXEPCTL_SNAK;
|
||||
|
||||
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl);
|
||||
writel(ctrl, hsotg->regs + epctrl_reg);
|
||||
dwc2_writel(ctrl, hsotg->regs + epctrl_reg);
|
||||
|
||||
/* disable endpoint interrupts */
|
||||
dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 0);
|
||||
@ -2877,7 +2877,7 @@ static int dwc2_hsotg_ep_sethalt(struct usb_ep *ep, int value)
|
||||
|
||||
if (hs_ep->dir_in) {
|
||||
epreg = DIEPCTL(index);
|
||||
epctl = readl(hs->regs + epreg);
|
||||
epctl = dwc2_readl(hs->regs + epreg);
|
||||
|
||||
if (value) {
|
||||
epctl |= DXEPCTL_STALL | DXEPCTL_SNAK;
|
||||
@ -2890,11 +2890,11 @@ static int dwc2_hsotg_ep_sethalt(struct usb_ep *ep, int value)
|
||||
xfertype == DXEPCTL_EPTYPE_INTERRUPT)
|
||||
epctl |= DXEPCTL_SETD0PID;
|
||||
}
|
||||
writel(epctl, hs->regs + epreg);
|
||||
dwc2_writel(epctl, hs->regs + epreg);
|
||||
} else {
|
||||
|
||||
epreg = DOEPCTL(index);
|
||||
epctl = readl(hs->regs + epreg);
|
||||
epctl = dwc2_readl(hs->regs + epreg);
|
||||
|
||||
if (value)
|
||||
epctl |= DXEPCTL_STALL;
|
||||
@ -2905,7 +2905,7 @@ static int dwc2_hsotg_ep_sethalt(struct usb_ep *ep, int value)
|
||||
xfertype == DXEPCTL_EPTYPE_INTERRUPT)
|
||||
epctl |= DXEPCTL_SETD0PID;
|
||||
}
|
||||
writel(epctl, hs->regs + epreg);
|
||||
dwc2_writel(epctl, hs->regs + epreg);
|
||||
}
|
||||
|
||||
hs_ep->halted = value;
|
||||
@ -2996,15 +2996,15 @@ static void dwc2_hsotg_init(struct dwc2_hsotg *hsotg)
|
||||
u32 trdtim;
|
||||
/* unmask subset of endpoint interrupts */
|
||||
|
||||
writel(DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK |
|
||||
DIEPMSK_EPDISBLDMSK | DIEPMSK_XFERCOMPLMSK,
|
||||
hsotg->regs + DIEPMSK);
|
||||
dwc2_writel(DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK |
|
||||
DIEPMSK_EPDISBLDMSK | DIEPMSK_XFERCOMPLMSK,
|
||||
hsotg->regs + DIEPMSK);
|
||||
|
||||
writel(DOEPMSK_SETUPMSK | DOEPMSK_AHBERRMSK |
|
||||
DOEPMSK_EPDISBLDMSK | DOEPMSK_XFERCOMPLMSK,
|
||||
hsotg->regs + DOEPMSK);
|
||||
dwc2_writel(DOEPMSK_SETUPMSK | DOEPMSK_AHBERRMSK |
|
||||
DOEPMSK_EPDISBLDMSK | DOEPMSK_XFERCOMPLMSK,
|
||||
hsotg->regs + DOEPMSK);
|
||||
|
||||
writel(0, hsotg->regs + DAINTMSK);
|
||||
dwc2_writel(0, hsotg->regs + DAINTMSK);
|
||||
|
||||
/* Be in disconnected state until gadget is registered */
|
||||
__orr32(hsotg->regs + DCTL, DCTL_SFTDISCON);
|
||||
@ -3012,14 +3012,14 @@ static void dwc2_hsotg_init(struct dwc2_hsotg *hsotg)
|
||||
/* setup fifos */
|
||||
|
||||
dev_dbg(hsotg->dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n",
|
||||
readl(hsotg->regs + GRXFSIZ),
|
||||
readl(hsotg->regs + GNPTXFSIZ));
|
||||
dwc2_readl(hsotg->regs + GRXFSIZ),
|
||||
dwc2_readl(hsotg->regs + GNPTXFSIZ));
|
||||
|
||||
dwc2_hsotg_init_fifo(hsotg);
|
||||
|
||||
/* set the PLL on, remove the HNP/SRP and set the PHY */
|
||||
trdtim = (hsotg->phyif == GUSBCFG_PHYIF8) ? 9 : 5;
|
||||
writel(hsotg->phyif | GUSBCFG_TOUTCAL(7) |
|
||||
dwc2_writel(hsotg->phyif | GUSBCFG_TOUTCAL(7) |
|
||||
(trdtim << GUSBCFG_USBTRDTIM_SHIFT),
|
||||
hsotg->regs + GUSBCFG);
|
||||
|
||||
@ -3310,9 +3310,9 @@ static void dwc2_hsotg_initep(struct dwc2_hsotg *hsotg,
|
||||
if (using_dma(hsotg)) {
|
||||
u32 next = DXEPCTL_NEXTEP((epnum + 1) % 15);
|
||||
if (dir_in)
|
||||
writel(next, hsotg->regs + DIEPCTL(epnum));
|
||||
dwc2_writel(next, hsotg->regs + DIEPCTL(epnum));
|
||||
else
|
||||
writel(next, hsotg->regs + DOEPCTL(epnum));
|
||||
dwc2_writel(next, hsotg->regs + DOEPCTL(epnum));
|
||||
}
|
||||
}
|
||||
|
||||
@ -3330,7 +3330,7 @@ static int dwc2_hsotg_hw_cfg(struct dwc2_hsotg *hsotg)
|
||||
|
||||
/* check hardware configuration */
|
||||
|
||||
cfg = readl(hsotg->regs + GHWCFG2);
|
||||
cfg = dwc2_readl(hsotg->regs + GHWCFG2);
|
||||
hsotg->num_of_eps = (cfg >> GHWCFG2_NUM_DEV_EP_SHIFT) & 0xF;
|
||||
/* Add ep0 */
|
||||
hsotg->num_of_eps++;
|
||||
@ -3342,7 +3342,7 @@ static int dwc2_hsotg_hw_cfg(struct dwc2_hsotg *hsotg)
|
||||
/* Same dwc2_hsotg_ep is used in both directions for ep0 */
|
||||
hsotg->eps_out[0] = hsotg->eps_in[0];
|
||||
|
||||
cfg = readl(hsotg->regs + GHWCFG1);
|
||||
cfg = dwc2_readl(hsotg->regs + GHWCFG1);
|
||||
for (i = 1, cfg >>= 2; i < hsotg->num_of_eps; i++, cfg >>= 2) {
|
||||
ep_type = cfg & 3;
|
||||
/* Direction in or both */
|
||||
@ -3361,10 +3361,10 @@ static int dwc2_hsotg_hw_cfg(struct dwc2_hsotg *hsotg)
|
||||
}
|
||||
}
|
||||
|
||||
cfg = readl(hsotg->regs + GHWCFG3);
|
||||
cfg = dwc2_readl(hsotg->regs + GHWCFG3);
|
||||
hsotg->fifo_mem = (cfg >> GHWCFG3_DFIFO_DEPTH_SHIFT);
|
||||
|
||||
cfg = readl(hsotg->regs + GHWCFG4);
|
||||
cfg = dwc2_readl(hsotg->regs + GHWCFG4);
|
||||
hsotg->dedicated_fifos = (cfg >> GHWCFG4_DED_FIFO_SHIFT) & 1;
|
||||
|
||||
dev_info(hsotg->dev, "EPs: %d, %s fifos, %d entries in SPRAM\n",
|
||||
@ -3387,19 +3387,19 @@ static void dwc2_hsotg_dump(struct dwc2_hsotg *hsotg)
|
||||
int idx;
|
||||
|
||||
dev_info(dev, "DCFG=0x%08x, DCTL=0x%08x, DIEPMSK=%08x\n",
|
||||
readl(regs + DCFG), readl(regs + DCTL),
|
||||
readl(regs + DIEPMSK));
|
||||
dwc2_readl(regs + DCFG), dwc2_readl(regs + DCTL),
|
||||
dwc2_readl(regs + DIEPMSK));
|
||||
|
||||
dev_info(dev, "GAHBCFG=0x%08x, GHWCFG1=0x%08x\n",
|
||||
readl(regs + GAHBCFG), readl(regs + GHWCFG1));
|
||||
dwc2_readl(regs + GAHBCFG), dwc2_readl(regs + GHWCFG1));
|
||||
|
||||
dev_info(dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n",
|
||||
readl(regs + GRXFSIZ), readl(regs + GNPTXFSIZ));
|
||||
dwc2_readl(regs + GRXFSIZ), dwc2_readl(regs + GNPTXFSIZ));
|
||||
|
||||
/* show periodic fifo settings */
|
||||
|
||||
for (idx = 1; idx < hsotg->num_of_eps; idx++) {
|
||||
val = readl(regs + DPTXFSIZN(idx));
|
||||
val = dwc2_readl(regs + DPTXFSIZN(idx));
|
||||
dev_info(dev, "DPTx[%d] FSize=%d, StAddr=0x%08x\n", idx,
|
||||
val >> FIFOSIZE_DEPTH_SHIFT,
|
||||
val & FIFOSIZE_STARTADDR_MASK);
|
||||
@ -3408,21 +3408,21 @@ static void dwc2_hsotg_dump(struct dwc2_hsotg *hsotg)
|
||||
for (idx = 0; idx < hsotg->num_of_eps; idx++) {
|
||||
dev_info(dev,
|
||||
"ep%d-in: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n", idx,
|
||||
readl(regs + DIEPCTL(idx)),
|
||||
readl(regs + DIEPTSIZ(idx)),
|
||||
readl(regs + DIEPDMA(idx)));
|
||||
dwc2_readl(regs + DIEPCTL(idx)),
|
||||
dwc2_readl(regs + DIEPTSIZ(idx)),
|
||||
dwc2_readl(regs + DIEPDMA(idx)));
|
||||
|
||||
val = readl(regs + DOEPCTL(idx));
|
||||
val = dwc2_readl(regs + DOEPCTL(idx));
|
||||
dev_info(dev,
|
||||
"ep%d-out: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n",
|
||||
idx, readl(regs + DOEPCTL(idx)),
|
||||
readl(regs + DOEPTSIZ(idx)),
|
||||
readl(regs + DOEPDMA(idx)));
|
||||
idx, dwc2_readl(regs + DOEPCTL(idx)),
|
||||
dwc2_readl(regs + DOEPTSIZ(idx)),
|
||||
dwc2_readl(regs + DOEPDMA(idx)));
|
||||
|
||||
}
|
||||
|
||||
dev_info(dev, "DVBUSDIS=0x%08x, DVBUSPULSE=%08x\n",
|
||||
readl(regs + DVBUSDIS), readl(regs + DVBUSPULSE));
|
||||
dwc2_readl(regs + DVBUSDIS), dwc2_readl(regs + DVBUSPULSE));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -80,10 +80,10 @@ static void dwc2_dump_channel_info(struct dwc2_hsotg *hsotg,
|
||||
if (chan == NULL)
|
||||
return;
|
||||
|
||||
hcchar = readl(hsotg->regs + HCCHAR(chan->hc_num));
|
||||
hcsplt = readl(hsotg->regs + HCSPLT(chan->hc_num));
|
||||
hctsiz = readl(hsotg->regs + HCTSIZ(chan->hc_num));
|
||||
hc_dma = readl(hsotg->regs + HCDMA(chan->hc_num));
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chan->hc_num));
|
||||
hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chan->hc_num));
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chan->hc_num));
|
||||
hc_dma = dwc2_readl(hsotg->regs + HCDMA(chan->hc_num));
|
||||
|
||||
dev_dbg(hsotg->dev, " Assigned to channel %p:\n", chan);
|
||||
dev_dbg(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n",
|
||||
@ -207,7 +207,7 @@ void dwc2_hcd_start(struct dwc2_hsotg *hsotg)
|
||||
*/
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
hprt0 |= HPRT0_RST;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
}
|
||||
|
||||
queue_delayed_work(hsotg->wq_otg, &hsotg->start_work,
|
||||
@ -228,11 +228,11 @@ static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg)
|
||||
channel = hsotg->hc_ptr_array[i];
|
||||
if (!list_empty(&channel->hc_list_entry))
|
||||
continue;
|
||||
hcchar = readl(hsotg->regs + HCCHAR(i));
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(i));
|
||||
if (hcchar & HCCHAR_CHENA) {
|
||||
hcchar &= ~(HCCHAR_CHENA | HCCHAR_EPDIR);
|
||||
hcchar |= HCCHAR_CHDIS;
|
||||
writel(hcchar, hsotg->regs + HCCHAR(i));
|
||||
dwc2_writel(hcchar, hsotg->regs + HCCHAR(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -241,11 +241,11 @@ static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg)
|
||||
channel = hsotg->hc_ptr_array[i];
|
||||
if (!list_empty(&channel->hc_list_entry))
|
||||
continue;
|
||||
hcchar = readl(hsotg->regs + HCCHAR(i));
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(i));
|
||||
if (hcchar & HCCHAR_CHENA) {
|
||||
/* Halt the channel */
|
||||
hcchar |= HCCHAR_CHDIS;
|
||||
writel(hcchar, hsotg->regs + HCCHAR(i));
|
||||
dwc2_writel(hcchar, hsotg->regs + HCCHAR(i));
|
||||
}
|
||||
|
||||
dwc2_hc_cleanup(hsotg, channel);
|
||||
@ -287,11 +287,11 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg)
|
||||
* interrupt mask and status bits and disabling subsequent host
|
||||
* channel interrupts.
|
||||
*/
|
||||
intr = readl(hsotg->regs + GINTMSK);
|
||||
intr = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
intr &= ~(GINTSTS_NPTXFEMP | GINTSTS_PTXFEMP | GINTSTS_HCHINT);
|
||||
writel(intr, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(intr, hsotg->regs + GINTMSK);
|
||||
intr = GINTSTS_NPTXFEMP | GINTSTS_PTXFEMP | GINTSTS_HCHINT;
|
||||
writel(intr, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(intr, hsotg->regs + GINTSTS);
|
||||
|
||||
/*
|
||||
* Turn off the vbus power only if the core has transitioned to device
|
||||
@ -301,7 +301,7 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg)
|
||||
if (dwc2_is_device_mode(hsotg)) {
|
||||
if (hsotg->op_state != OTG_STATE_A_SUSPEND) {
|
||||
dev_dbg(hsotg->dev, "Disconnect: PortPower off\n");
|
||||
writel(0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(0, hsotg->regs + HPRT0);
|
||||
}
|
||||
|
||||
dwc2_disable_host_interrupts(hsotg);
|
||||
@ -354,7 +354,7 @@ void dwc2_hcd_stop(struct dwc2_hsotg *hsotg)
|
||||
|
||||
/* Turn off the vbus power */
|
||||
dev_dbg(hsotg->dev, "PortPower off\n");
|
||||
writel(0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(0, hsotg->regs + HPRT0);
|
||||
}
|
||||
|
||||
/* Caller must hold driver lock */
|
||||
@ -378,7 +378,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
|
||||
if ((dev_speed == USB_SPEED_LOW) &&
|
||||
(hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) &&
|
||||
(hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI)) {
|
||||
u32 hprt0 = readl(hsotg->regs + HPRT0);
|
||||
u32 hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
||||
u32 prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
|
||||
|
||||
if (prtspd == HPRT0_SPD_FULL_SPEED)
|
||||
@ -397,7 +397,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
|
||||
return retval;
|
||||
}
|
||||
|
||||
intr_mask = readl(hsotg->regs + GINTMSK);
|
||||
intr_mask = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
if (!(intr_mask & GINTSTS_SOF)) {
|
||||
enum dwc2_transaction_type tr_type;
|
||||
|
||||
@ -1070,7 +1070,7 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
if (dbg_perio())
|
||||
dev_vdbg(hsotg->dev, "Queue periodic transactions\n");
|
||||
|
||||
tx_status = readl(hsotg->regs + HPTXSTS);
|
||||
tx_status = dwc2_readl(hsotg->regs + HPTXSTS);
|
||||
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
||||
TXSTS_QSPCAVAIL_SHIFT;
|
||||
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
|
||||
@ -1085,7 +1085,7 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
|
||||
qh_ptr = hsotg->periodic_sched_assigned.next;
|
||||
while (qh_ptr != &hsotg->periodic_sched_assigned) {
|
||||
tx_status = readl(hsotg->regs + HPTXSTS);
|
||||
tx_status = dwc2_readl(hsotg->regs + HPTXSTS);
|
||||
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
||||
TXSTS_QSPCAVAIL_SHIFT;
|
||||
if (qspcavail == 0) {
|
||||
@ -1145,7 +1145,7 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
}
|
||||
|
||||
if (hsotg->core_params->dma_enable <= 0) {
|
||||
tx_status = readl(hsotg->regs + HPTXSTS);
|
||||
tx_status = dwc2_readl(hsotg->regs + HPTXSTS);
|
||||
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
||||
TXSTS_QSPCAVAIL_SHIFT;
|
||||
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
|
||||
@ -1168,9 +1168,9 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
* level to ensure that new requests are loaded as
|
||||
* soon as possible.)
|
||||
*/
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk |= GINTSTS_PTXFEMP;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
} else {
|
||||
/*
|
||||
* Disable the Tx FIFO empty interrupt since there are
|
||||
@ -1179,9 +1179,9 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
* handlers to queue more transactions as transfer
|
||||
* states change.
|
||||
*/
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk &= ~GINTSTS_PTXFEMP;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1210,7 +1210,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
|
||||
dev_vdbg(hsotg->dev, "Queue non-periodic transactions\n");
|
||||
|
||||
tx_status = readl(hsotg->regs + GNPTXSTS);
|
||||
tx_status = dwc2_readl(hsotg->regs + GNPTXSTS);
|
||||
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
||||
TXSTS_QSPCAVAIL_SHIFT;
|
||||
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
|
||||
@ -1233,7 +1233,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
* available in the request queue or the Tx FIFO
|
||||
*/
|
||||
do {
|
||||
tx_status = readl(hsotg->regs + GNPTXSTS);
|
||||
tx_status = dwc2_readl(hsotg->regs + GNPTXSTS);
|
||||
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
||||
TXSTS_QSPCAVAIL_SHIFT;
|
||||
if (hsotg->core_params->dma_enable <= 0 && qspcavail == 0) {
|
||||
@ -1270,7 +1270,7 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
} while (hsotg->non_periodic_qh_ptr != orig_qh_ptr);
|
||||
|
||||
if (hsotg->core_params->dma_enable <= 0) {
|
||||
tx_status = readl(hsotg->regs + GNPTXSTS);
|
||||
tx_status = dwc2_readl(hsotg->regs + GNPTXSTS);
|
||||
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
|
||||
TXSTS_QSPCAVAIL_SHIFT;
|
||||
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
|
||||
@ -1290,9 +1290,9 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
* level to ensure that new requests are loaded as
|
||||
* soon as possible.)
|
||||
*/
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk |= GINTSTS_NPTXFEMP;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
} else {
|
||||
/*
|
||||
* Disable the Tx FIFO empty interrupt since there are
|
||||
@ -1301,9 +1301,9 @@ static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
|
||||
* handlers to queue more transactions as transfer
|
||||
* states change.
|
||||
*/
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk &= ~GINTSTS_NPTXFEMP;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1341,10 +1341,10 @@ void dwc2_hcd_queue_transactions(struct dwc2_hsotg *hsotg,
|
||||
* Ensure NP Tx FIFO empty interrupt is disabled when
|
||||
* there are no non-periodic transfers to process
|
||||
*/
|
||||
u32 gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
u32 gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
|
||||
gintmsk &= ~GINTSTS_NPTXFEMP;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1358,7 +1358,7 @@ static void dwc2_conn_id_status_change(struct work_struct *work)
|
||||
|
||||
dev_dbg(hsotg->dev, "%s()\n", __func__);
|
||||
|
||||
gotgctl = readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
dev_dbg(hsotg->dev, "gotgctl=%0x\n", gotgctl);
|
||||
dev_dbg(hsotg->dev, "gotgctl.b.conidsts=%d\n",
|
||||
!!(gotgctl & GOTGCTL_CONID_B));
|
||||
@ -1421,9 +1421,9 @@ static void dwc2_wakeup_detected(unsigned long data)
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
dev_dbg(hsotg->dev, "Resume: HPRT0=%0x\n", hprt0);
|
||||
hprt0 &= ~HPRT0_RES;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
dev_dbg(hsotg->dev, "Clear Resume: HPRT0=%0x\n",
|
||||
readl(hsotg->regs + HPRT0));
|
||||
dwc2_readl(hsotg->regs + HPRT0));
|
||||
|
||||
dwc2_hcd_rem_wakeup(hsotg);
|
||||
|
||||
@ -1451,30 +1451,30 @@ static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex)
|
||||
spin_lock_irqsave(&hsotg->lock, flags);
|
||||
|
||||
if (windex == hsotg->otg_port && dwc2_host_is_b_hnp_enabled(hsotg)) {
|
||||
gotgctl = readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl = dwc2_readl(hsotg->regs + GOTGCTL);
|
||||
gotgctl |= GOTGCTL_HSTSETHNPEN;
|
||||
writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
dwc2_writel(gotgctl, hsotg->regs + GOTGCTL);
|
||||
hsotg->op_state = OTG_STATE_A_SUSPEND;
|
||||
}
|
||||
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
hprt0 |= HPRT0_SUSP;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
|
||||
/* Update lx_state */
|
||||
hsotg->lx_state = DWC2_L2;
|
||||
|
||||
/* Suspend the Phy Clock */
|
||||
pcgctl = readl(hsotg->regs + PCGCTL);
|
||||
pcgctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
pcgctl |= PCGCTL_STOPPCLK;
|
||||
writel(pcgctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(pcgctl, hsotg->regs + PCGCTL);
|
||||
udelay(10);
|
||||
|
||||
/* For HNP the bus must be suspended for at least 200ms */
|
||||
if (dwc2_host_is_b_hnp_enabled(hsotg)) {
|
||||
pcgctl = readl(hsotg->regs + PCGCTL);
|
||||
pcgctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
pcgctl &= ~PCGCTL_STOPPCLK;
|
||||
writel(pcgctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(pcgctl, hsotg->regs + PCGCTL);
|
||||
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
|
||||
@ -1523,23 +1523,23 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
||||
"ClearPortFeature USB_PORT_FEAT_ENABLE\n");
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
hprt0 |= HPRT0_ENA;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
break;
|
||||
|
||||
case USB_PORT_FEAT_SUSPEND:
|
||||
dev_dbg(hsotg->dev,
|
||||
"ClearPortFeature USB_PORT_FEAT_SUSPEND\n");
|
||||
writel(0, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(0, hsotg->regs + PCGCTL);
|
||||
usleep_range(20000, 40000);
|
||||
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
hprt0 |= HPRT0_RES;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
hprt0 &= ~HPRT0_SUSP;
|
||||
msleep(USB_RESUME_TIMEOUT);
|
||||
|
||||
hprt0 &= ~HPRT0_RES;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
break;
|
||||
|
||||
case USB_PORT_FEAT_POWER:
|
||||
@ -1547,7 +1547,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
||||
"ClearPortFeature USB_PORT_FEAT_POWER\n");
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
hprt0 &= ~HPRT0_PWR;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
break;
|
||||
|
||||
case USB_PORT_FEAT_INDICATOR:
|
||||
@ -1668,7 +1668,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
||||
break;
|
||||
}
|
||||
|
||||
hprt0 = readl(hsotg->regs + HPRT0);
|
||||
hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
||||
dev_vdbg(hsotg->dev, " HPRT0: 0x%08x\n", hprt0);
|
||||
|
||||
if (hprt0 & HPRT0_CONNSTS)
|
||||
@ -1733,18 +1733,18 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
||||
"SetPortFeature - USB_PORT_FEAT_POWER\n");
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
hprt0 |= HPRT0_PWR;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
break;
|
||||
|
||||
case USB_PORT_FEAT_RESET:
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
dev_dbg(hsotg->dev,
|
||||
"SetPortFeature - USB_PORT_FEAT_RESET\n");
|
||||
pcgctl = readl(hsotg->regs + PCGCTL);
|
||||
pcgctl = dwc2_readl(hsotg->regs + PCGCTL);
|
||||
pcgctl &= ~(PCGCTL_ENBL_SLEEP_GATING | PCGCTL_STOPPCLK);
|
||||
writel(pcgctl, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(pcgctl, hsotg->regs + PCGCTL);
|
||||
/* ??? Original driver does this */
|
||||
writel(0, hsotg->regs + PCGCTL);
|
||||
dwc2_writel(0, hsotg->regs + PCGCTL);
|
||||
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
/* Clear suspend bit if resetting from suspend state */
|
||||
@ -1759,13 +1759,13 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
||||
hprt0 |= HPRT0_PWR | HPRT0_RST;
|
||||
dev_dbg(hsotg->dev,
|
||||
"In host mode, hprt0=%08x\n", hprt0);
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
}
|
||||
|
||||
/* Clear reset bit in 10ms (FS/LS) or 50ms (HS) */
|
||||
usleep_range(50000, 70000);
|
||||
hprt0 &= ~HPRT0_RST;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
hsotg->lx_state = DWC2_L0; /* Now back to On state */
|
||||
break;
|
||||
|
||||
@ -1781,7 +1781,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
|
||||
"SetPortFeature - USB_PORT_FEAT_TEST\n");
|
||||
hprt0 &= ~HPRT0_TSTCTL_MASK;
|
||||
hprt0 |= (windex >> 8) << HPRT0_TSTCTL_SHIFT;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1838,7 +1838,7 @@ static int dwc2_hcd_is_status_changed(struct dwc2_hsotg *hsotg, int port)
|
||||
|
||||
int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 hfnum = readl(hsotg->regs + HFNUM);
|
||||
u32 hfnum = dwc2_readl(hsotg->regs + HFNUM);
|
||||
|
||||
#ifdef DWC2_DEBUG_SOF
|
||||
dev_vdbg(hsotg->dev, "DWC OTG HCD GET FRAME NUMBER %d\n",
|
||||
@ -1941,11 +1941,11 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
|
||||
if (chan->xfer_started) {
|
||||
u32 hfnum, hcchar, hctsiz, hcint, hcintmsk;
|
||||
|
||||
hfnum = readl(hsotg->regs + HFNUM);
|
||||
hcchar = readl(hsotg->regs + HCCHAR(i));
|
||||
hctsiz = readl(hsotg->regs + HCTSIZ(i));
|
||||
hcint = readl(hsotg->regs + HCINT(i));
|
||||
hcintmsk = readl(hsotg->regs + HCINTMSK(i));
|
||||
hfnum = dwc2_readl(hsotg->regs + HFNUM);
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(i));
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(i));
|
||||
hcint = dwc2_readl(hsotg->regs + HCINT(i));
|
||||
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(i));
|
||||
dev_dbg(hsotg->dev, " hfnum: 0x%08x\n", hfnum);
|
||||
dev_dbg(hsotg->dev, " hcchar: 0x%08x\n", hcchar);
|
||||
dev_dbg(hsotg->dev, " hctsiz: 0x%08x\n", hctsiz);
|
||||
@ -1993,12 +1993,12 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
|
||||
dev_dbg(hsotg->dev, " periodic_channels: %d\n",
|
||||
hsotg->periodic_channels);
|
||||
dev_dbg(hsotg->dev, " periodic_usecs: %d\n", hsotg->periodic_usecs);
|
||||
np_tx_status = readl(hsotg->regs + GNPTXSTS);
|
||||
np_tx_status = dwc2_readl(hsotg->regs + GNPTXSTS);
|
||||
dev_dbg(hsotg->dev, " NP Tx Req Queue Space Avail: %d\n",
|
||||
(np_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
|
||||
dev_dbg(hsotg->dev, " NP Tx FIFO Space Avail: %d\n",
|
||||
(np_tx_status & TXSTS_FSPCAVAIL_MASK) >> TXSTS_FSPCAVAIL_SHIFT);
|
||||
p_tx_status = readl(hsotg->regs + HPTXSTS);
|
||||
p_tx_status = dwc2_readl(hsotg->regs + HPTXSTS);
|
||||
dev_dbg(hsotg->dev, " P Tx Req Queue Space Avail: %d\n",
|
||||
(p_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
|
||||
dev_dbg(hsotg->dev, " P Tx FIFO Space Avail: %d\n",
|
||||
@ -2262,7 +2262,7 @@ static void dwc2_hcd_reset_func(struct work_struct *work)
|
||||
dev_dbg(hsotg->dev, "USB RESET function called\n");
|
||||
hprt0 = dwc2_read_hprt0(hsotg);
|
||||
hprt0 &= ~HPRT0_RST;
|
||||
writel(hprt0, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0, hsotg->regs + HPRT0);
|
||||
hsotg->flags.b.port_reset_change = 1;
|
||||
}
|
||||
|
||||
@ -2790,17 +2790,17 @@ static void dwc2_hcd_free(struct dwc2_hsotg *hsotg)
|
||||
hsotg->status_buf = NULL;
|
||||
}
|
||||
|
||||
ahbcfg = readl(hsotg->regs + GAHBCFG);
|
||||
ahbcfg = dwc2_readl(hsotg->regs + GAHBCFG);
|
||||
|
||||
/* Disable all interrupts */
|
||||
ahbcfg &= ~GAHBCFG_GLBL_INTR_EN;
|
||||
writel(ahbcfg, hsotg->regs + GAHBCFG);
|
||||
writel(0, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(ahbcfg, hsotg->regs + GAHBCFG);
|
||||
dwc2_writel(0, hsotg->regs + GINTMSK);
|
||||
|
||||
if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a) {
|
||||
dctl = readl(hsotg->regs + DCTL);
|
||||
dctl = dwc2_readl(hsotg->regs + DCTL);
|
||||
dctl |= DCTL_SFTDISCON;
|
||||
writel(dctl, hsotg->regs + DCTL);
|
||||
dwc2_writel(dctl, hsotg->regs + DCTL);
|
||||
}
|
||||
|
||||
if (hsotg->wq_otg) {
|
||||
@ -2841,7 +2841,7 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq)
|
||||
|
||||
retval = -ENOMEM;
|
||||
|
||||
hcfg = readl(hsotg->regs + HCFG);
|
||||
hcfg = dwc2_readl(hsotg->regs + HCFG);
|
||||
dev_dbg(hsotg->dev, "hcfg=%08x\n", hcfg);
|
||||
|
||||
#ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
|
||||
|
@ -371,10 +371,10 @@ static inline struct usb_hcd *dwc2_hsotg_to_hcd(struct dwc2_hsotg *hsotg)
|
||||
*/
|
||||
static inline void disable_hc_int(struct dwc2_hsotg *hsotg, int chnum, u32 intr)
|
||||
{
|
||||
u32 mask = readl(hsotg->regs + HCINTMSK(chnum));
|
||||
u32 mask = dwc2_readl(hsotg->regs + HCINTMSK(chnum));
|
||||
|
||||
mask &= ~intr;
|
||||
writel(mask, hsotg->regs + HCINTMSK(chnum));
|
||||
dwc2_writel(mask, hsotg->regs + HCINTMSK(chnum));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -382,11 +382,11 @@ static inline void disable_hc_int(struct dwc2_hsotg *hsotg, int chnum, u32 intr)
|
||||
*/
|
||||
static inline int dwc2_is_host_mode(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
return (readl(hsotg->regs + GINTSTS) & GINTSTS_CURMODE_HOST) != 0;
|
||||
return (dwc2_readl(hsotg->regs + GINTSTS) & GINTSTS_CURMODE_HOST) != 0;
|
||||
}
|
||||
static inline int dwc2_is_device_mode(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
return (readl(hsotg->regs + GINTSTS) & GINTSTS_CURMODE_HOST) == 0;
|
||||
return (dwc2_readl(hsotg->regs + GINTSTS) & GINTSTS_CURMODE_HOST) == 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -395,7 +395,7 @@ static inline int dwc2_is_device_mode(struct dwc2_hsotg *hsotg)
|
||||
*/
|
||||
static inline u32 dwc2_read_hprt0(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 hprt0 = readl(hsotg->regs + HPRT0);
|
||||
u32 hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
||||
|
||||
hprt0 &= ~(HPRT0_ENA | HPRT0_CONNDET | HPRT0_ENACHG | HPRT0_OVRCURRCHG);
|
||||
return hprt0;
|
||||
@ -580,7 +580,8 @@ static inline u16 dwc2_micro_frame_num(u16 frame)
|
||||
*/
|
||||
static inline u32 dwc2_read_core_intr(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
return readl(hsotg->regs + GINTSTS) & readl(hsotg->regs + GINTMSK);
|
||||
return dwc2_readl(hsotg->regs + GINTSTS) &
|
||||
dwc2_readl(hsotg->regs + GINTMSK);
|
||||
}
|
||||
|
||||
static inline u32 dwc2_hcd_urb_get_status(struct dwc2_hcd_urb *dwc2_urb)
|
||||
@ -732,7 +733,7 @@ do { \
|
||||
qtd_list_entry); \
|
||||
if (usb_pipeint(_qtd_->urb->pipe) && \
|
||||
(_qh_)->start_split_frame != 0 && !_qtd_->complete_split) { \
|
||||
_hfnum_.d32 = readl((_hcd_)->regs + HFNUM); \
|
||||
_hfnum_.d32 = dwc2_readl((_hcd_)->regs + HFNUM); \
|
||||
switch (_hfnum_.b.frnum & 0x7) { \
|
||||
case 7: \
|
||||
(_hcd_)->hfnum_7_samples_##_letter_++; \
|
||||
|
@ -169,19 +169,19 @@ static void dwc2_per_sched_enable(struct dwc2_hsotg *hsotg, u32 fr_list_en)
|
||||
|
||||
spin_lock_irqsave(&hsotg->lock, flags);
|
||||
|
||||
hcfg = readl(hsotg->regs + HCFG);
|
||||
hcfg = dwc2_readl(hsotg->regs + HCFG);
|
||||
if (hcfg & HCFG_PERSCHEDENA) {
|
||||
/* already enabled */
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
writel(hsotg->frame_list_dma, hsotg->regs + HFLBADDR);
|
||||
dwc2_writel(hsotg->frame_list_dma, hsotg->regs + HFLBADDR);
|
||||
|
||||
hcfg &= ~HCFG_FRLISTEN_MASK;
|
||||
hcfg |= fr_list_en | HCFG_PERSCHEDENA;
|
||||
dev_vdbg(hsotg->dev, "Enabling Periodic schedule\n");
|
||||
writel(hcfg, hsotg->regs + HCFG);
|
||||
dwc2_writel(hcfg, hsotg->regs + HCFG);
|
||||
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
}
|
||||
@ -193,7 +193,7 @@ static void dwc2_per_sched_disable(struct dwc2_hsotg *hsotg)
|
||||
|
||||
spin_lock_irqsave(&hsotg->lock, flags);
|
||||
|
||||
hcfg = readl(hsotg->regs + HCFG);
|
||||
hcfg = dwc2_readl(hsotg->regs + HCFG);
|
||||
if (!(hcfg & HCFG_PERSCHEDENA)) {
|
||||
/* already disabled */
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
@ -202,7 +202,7 @@ static void dwc2_per_sched_disable(struct dwc2_hsotg *hsotg)
|
||||
|
||||
hcfg &= ~HCFG_PERSCHEDENA;
|
||||
dev_vdbg(hsotg->dev, "Disabling Periodic schedule\n");
|
||||
writel(hcfg, hsotg->regs + HCFG);
|
||||
dwc2_writel(hcfg, hsotg->regs + HCFG);
|
||||
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
}
|
||||
|
@ -148,7 +148,7 @@ static void dwc2_sof_intr(struct dwc2_hsotg *hsotg)
|
||||
dwc2_hcd_queue_transactions(hsotg, tr_type);
|
||||
|
||||
/* Clear interrupt */
|
||||
writel(GINTSTS_SOF, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_SOF, hsotg->regs + GINTSTS);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -164,7 +164,7 @@ static void dwc2_rx_fifo_level_intr(struct dwc2_hsotg *hsotg)
|
||||
if (dbg_perio())
|
||||
dev_vdbg(hsotg->dev, "--RxFIFO Level Interrupt--\n");
|
||||
|
||||
grxsts = readl(hsotg->regs + GRXSTSP);
|
||||
grxsts = dwc2_readl(hsotg->regs + GRXSTSP);
|
||||
chnum = (grxsts & GRXSTS_HCHNUM_MASK) >> GRXSTS_HCHNUM_SHIFT;
|
||||
chan = hsotg->hc_ptr_array[chnum];
|
||||
if (!chan) {
|
||||
@ -247,11 +247,11 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
||||
dev_vdbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
|
||||
|
||||
/* Every time when port enables calculate HFIR.FrInterval */
|
||||
hfir = readl(hsotg->regs + HFIR);
|
||||
hfir = dwc2_readl(hsotg->regs + HFIR);
|
||||
hfir &= ~HFIR_FRINT_MASK;
|
||||
hfir |= dwc2_calc_frame_interval(hsotg) << HFIR_FRINT_SHIFT &
|
||||
HFIR_FRINT_MASK;
|
||||
writel(hfir, hsotg->regs + HFIR);
|
||||
dwc2_writel(hfir, hsotg->regs + HFIR);
|
||||
|
||||
/* Check if we need to adjust the PHY clock speed for low power */
|
||||
if (!params->host_support_fs_ls_low_power) {
|
||||
@ -260,7 +260,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
||||
return;
|
||||
}
|
||||
|
||||
usbcfg = readl(hsotg->regs + GUSBCFG);
|
||||
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
||||
prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
|
||||
|
||||
if (prtspd == HPRT0_SPD_LOW_SPEED || prtspd == HPRT0_SPD_FULL_SPEED) {
|
||||
@ -268,11 +268,11 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
||||
if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL)) {
|
||||
/* Set PHY low power clock select for FS/LS devices */
|
||||
usbcfg |= GUSBCFG_PHY_LP_CLK_SEL;
|
||||
writel(usbcfg, hsotg->regs + GUSBCFG);
|
||||
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
||||
do_reset = 1;
|
||||
}
|
||||
|
||||
hcfg = readl(hsotg->regs + HCFG);
|
||||
hcfg = dwc2_readl(hsotg->regs + HCFG);
|
||||
fslspclksel = (hcfg & HCFG_FSLSPCLKSEL_MASK) >>
|
||||
HCFG_FSLSPCLKSEL_SHIFT;
|
||||
|
||||
@ -286,7 +286,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
||||
fslspclksel = HCFG_FSLSPCLKSEL_6_MHZ;
|
||||
hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
|
||||
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
|
||||
writel(hcfg, hsotg->regs + HCFG);
|
||||
dwc2_writel(hcfg, hsotg->regs + HCFG);
|
||||
do_reset = 1;
|
||||
}
|
||||
} else {
|
||||
@ -297,7 +297,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
||||
fslspclksel = HCFG_FSLSPCLKSEL_48_MHZ;
|
||||
hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
|
||||
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
|
||||
writel(hcfg, hsotg->regs + HCFG);
|
||||
dwc2_writel(hcfg, hsotg->regs + HCFG);
|
||||
do_reset = 1;
|
||||
}
|
||||
}
|
||||
@ -305,7 +305,7 @@ static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0,
|
||||
/* Not low power */
|
||||
if (usbcfg & GUSBCFG_PHY_LP_CLK_SEL) {
|
||||
usbcfg &= ~GUSBCFG_PHY_LP_CLK_SEL;
|
||||
writel(usbcfg, hsotg->regs + GUSBCFG);
|
||||
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
||||
do_reset = 1;
|
||||
}
|
||||
}
|
||||
@ -332,7 +332,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
|
||||
|
||||
dev_vdbg(hsotg->dev, "--Port Interrupt--\n");
|
||||
|
||||
hprt0 = readl(hsotg->regs + HPRT0);
|
||||
hprt0 = dwc2_readl(hsotg->regs + HPRT0);
|
||||
hprt0_modify = hprt0;
|
||||
|
||||
/*
|
||||
@ -388,7 +388,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg)
|
||||
}
|
||||
|
||||
/* Clear Port Interrupts */
|
||||
writel(hprt0_modify, hsotg->regs + HPRT0);
|
||||
dwc2_writel(hprt0_modify, hsotg->regs + HPRT0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -408,7 +408,7 @@ static u32 dwc2_get_actual_xfer_length(struct dwc2_hsotg *hsotg,
|
||||
{
|
||||
u32 hctsiz, count, length;
|
||||
|
||||
hctsiz = readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
|
||||
if (halt_status == DWC2_HC_XFER_COMPLETE) {
|
||||
if (chan->ep_is_in) {
|
||||
@ -491,7 +491,7 @@ static int dwc2_update_urb_state(struct dwc2_hsotg *hsotg,
|
||||
urb->status = 0;
|
||||
}
|
||||
|
||||
hctsiz = readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
|
||||
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
|
||||
dev_vdbg(hsotg->dev, " chan->xfer_len %d\n", chan->xfer_len);
|
||||
@ -514,7 +514,7 @@ void dwc2_hcd_save_data_toggle(struct dwc2_hsotg *hsotg,
|
||||
struct dwc2_host_chan *chan, int chnum,
|
||||
struct dwc2_qtd *qtd)
|
||||
{
|
||||
u32 hctsiz = readl(hsotg->regs + HCTSIZ(chnum));
|
||||
u32 hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
u32 pid = (hctsiz & TSIZ_SC_MC_PID_MASK) >> TSIZ_SC_MC_PID_SHIFT;
|
||||
|
||||
if (chan->ep_type != USB_ENDPOINT_XFER_CONTROL) {
|
||||
@ -771,9 +771,9 @@ static void dwc2_release_channel(struct dwc2_hsotg *hsotg,
|
||||
}
|
||||
}
|
||||
|
||||
haintmsk = readl(hsotg->regs + HAINTMSK);
|
||||
haintmsk = dwc2_readl(hsotg->regs + HAINTMSK);
|
||||
haintmsk &= ~(1 << chan->hc_num);
|
||||
writel(haintmsk, hsotg->regs + HAINTMSK);
|
||||
dwc2_writel(haintmsk, hsotg->regs + HAINTMSK);
|
||||
|
||||
/* Try to queue more transfers now that there's a free channel */
|
||||
tr_type = dwc2_hcd_select_transactions(hsotg);
|
||||
@ -820,9 +820,9 @@ static void dwc2_halt_channel(struct dwc2_hsotg *hsotg,
|
||||
* is enabled so that the non-periodic schedule will
|
||||
* be processed
|
||||
*/
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk |= GINTSTS_NPTXFEMP;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
} else {
|
||||
dev_vdbg(hsotg->dev, "isoc/intr\n");
|
||||
/*
|
||||
@ -839,9 +839,9 @@ static void dwc2_halt_channel(struct dwc2_hsotg *hsotg,
|
||||
* enabled so that the periodic schedule will be
|
||||
* processed
|
||||
*/
|
||||
gintmsk = readl(hsotg->regs + GINTMSK);
|
||||
gintmsk = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
gintmsk |= GINTSTS_PTXFEMP;
|
||||
writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(gintmsk, hsotg->regs + GINTMSK);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -906,7 +906,7 @@ static void dwc2_complete_periodic_xfer(struct dwc2_hsotg *hsotg,
|
||||
struct dwc2_qtd *qtd,
|
||||
enum dwc2_halt_status halt_status)
|
||||
{
|
||||
u32 hctsiz = readl(hsotg->regs + HCTSIZ(chnum));
|
||||
u32 hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
|
||||
qtd->error_count = 0;
|
||||
|
||||
@ -1184,7 +1184,7 @@ static void dwc2_update_urb_state_abn(struct dwc2_hsotg *hsotg,
|
||||
|
||||
urb->actual_length += xfer_length;
|
||||
|
||||
hctsiz = readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
|
||||
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
|
||||
dev_vdbg(hsotg->dev, " chan->start_pkt_count %d\n",
|
||||
@ -1505,10 +1505,10 @@ static void dwc2_hc_ahberr_intr(struct dwc2_hsotg *hsotg,
|
||||
|
||||
dwc2_hc_handle_tt_clear(hsotg, chan, qtd);
|
||||
|
||||
hcchar = readl(hsotg->regs + HCCHAR(chnum));
|
||||
hcsplt = readl(hsotg->regs + HCSPLT(chnum));
|
||||
hctsiz = readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hc_dma = readl(hsotg->regs + HCDMA(chnum));
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chnum));
|
||||
hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chnum));
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hc_dma = dwc2_readl(hsotg->regs + HCDMA(chnum));
|
||||
|
||||
dev_err(hsotg->dev, "AHB ERROR, Channel %d\n", chnum);
|
||||
dev_err(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", hcchar, hcsplt);
|
||||
@ -1721,10 +1721,10 @@ static bool dwc2_halt_status_ok(struct dwc2_hsotg *hsotg,
|
||||
* This code is here only as a check. This condition should
|
||||
* never happen. Ignore the halt if it does occur.
|
||||
*/
|
||||
hcchar = readl(hsotg->regs + HCCHAR(chnum));
|
||||
hctsiz = readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hcintmsk = readl(hsotg->regs + HCINTMSK(chnum));
|
||||
hcsplt = readl(hsotg->regs + HCSPLT(chnum));
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chnum));
|
||||
hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
|
||||
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(chnum));
|
||||
hcsplt = dwc2_readl(hsotg->regs + HCSPLT(chnum));
|
||||
dev_dbg(hsotg->dev,
|
||||
"%s: chan->halt_status DWC2_HC_XFER_NO_HALT_STATUS,\n",
|
||||
__func__);
|
||||
@ -1748,7 +1748,7 @@ static bool dwc2_halt_status_ok(struct dwc2_hsotg *hsotg,
|
||||
* when the halt interrupt occurs. Halt the channel again if it does
|
||||
* occur.
|
||||
*/
|
||||
hcchar = readl(hsotg->regs + HCCHAR(chnum));
|
||||
hcchar = dwc2_readl(hsotg->regs + HCCHAR(chnum));
|
||||
if (hcchar & HCCHAR_CHDIS) {
|
||||
dev_warn(hsotg->dev,
|
||||
"%s: hcchar.chdis set unexpectedly, hcchar 0x%08x, trying to halt again\n",
|
||||
@ -1808,7 +1808,7 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg,
|
||||
return;
|
||||
}
|
||||
|
||||
hcintmsk = readl(hsotg->regs + HCINTMSK(chnum));
|
||||
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(chnum));
|
||||
|
||||
if (chan->hcint & HCINTMSK_XFERCOMPL) {
|
||||
/*
|
||||
@ -1903,7 +1903,7 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg,
|
||||
dev_err(hsotg->dev,
|
||||
"hcint 0x%08x, intsts 0x%08x\n",
|
||||
chan->hcint,
|
||||
readl(hsotg->regs + GINTSTS));
|
||||
dwc2_readl(hsotg->regs + GINTSTS));
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
@ -1958,11 +1958,11 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)
|
||||
|
||||
chan = hsotg->hc_ptr_array[chnum];
|
||||
|
||||
hcint = readl(hsotg->regs + HCINT(chnum));
|
||||
hcintmsk = readl(hsotg->regs + HCINTMSK(chnum));
|
||||
hcint = dwc2_readl(hsotg->regs + HCINT(chnum));
|
||||
hcintmsk = dwc2_readl(hsotg->regs + HCINTMSK(chnum));
|
||||
if (!chan) {
|
||||
dev_err(hsotg->dev, "## hc_ptr_array for channel is NULL ##\n");
|
||||
writel(hcint, hsotg->regs + HCINT(chnum));
|
||||
dwc2_writel(hcint, hsotg->regs + HCINT(chnum));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1974,7 +1974,7 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)
|
||||
hcint, hcintmsk, hcint & hcintmsk);
|
||||
}
|
||||
|
||||
writel(hcint, hsotg->regs + HCINT(chnum));
|
||||
dwc2_writel(hcint, hsotg->regs + HCINT(chnum));
|
||||
chan->hcint = hcint;
|
||||
hcint &= hcintmsk;
|
||||
|
||||
@ -2066,7 +2066,7 @@ static void dwc2_hc_intr(struct dwc2_hsotg *hsotg)
|
||||
u32 haint;
|
||||
int i;
|
||||
|
||||
haint = readl(hsotg->regs + HAINT);
|
||||
haint = dwc2_readl(hsotg->regs + HAINT);
|
||||
if (dbg_perio()) {
|
||||
dev_vdbg(hsotg->dev, "%s()\n", __func__);
|
||||
|
||||
@ -2134,8 +2134,8 @@ irqreturn_t dwc2_handle_hcd_intr(struct dwc2_hsotg *hsotg)
|
||||
"DWC OTG HCD Finished Servicing Interrupts\n");
|
||||
dev_vdbg(hsotg->dev,
|
||||
"DWC OTG HCD gintsts=0x%08x gintmsk=0x%08x\n",
|
||||
readl(hsotg->regs + GINTSTS),
|
||||
readl(hsotg->regs + GINTMSK));
|
||||
dwc2_readl(hsotg->regs + GINTSTS),
|
||||
dwc2_readl(hsotg->regs + GINTMSK));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,7 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
|
||||
if (qh->ep_type == USB_ENDPOINT_XFER_INT)
|
||||
qh->interval = 8;
|
||||
#endif
|
||||
hprt = readl(hsotg->regs + HPRT0);
|
||||
hprt = dwc2_readl(hsotg->regs + HPRT0);
|
||||
prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
|
||||
if (prtspd == HPRT0_SPD_HIGH_SPEED &&
|
||||
(dev_speed == USB_SPEED_LOW ||
|
||||
@ -595,9 +595,9 @@ int dwc2_hcd_qh_add(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
|
||||
if (status)
|
||||
return status;
|
||||
if (!hsotg->periodic_qh_count) {
|
||||
intr_mask = readl(hsotg->regs + GINTMSK);
|
||||
intr_mask = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
intr_mask |= GINTSTS_SOF;
|
||||
writel(intr_mask, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(intr_mask, hsotg->regs + GINTMSK);
|
||||
}
|
||||
hsotg->periodic_qh_count++;
|
||||
|
||||
@ -632,9 +632,9 @@ void dwc2_hcd_qh_unlink(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
|
||||
dwc2_deschedule_periodic(hsotg, qh);
|
||||
hsotg->periodic_qh_count--;
|
||||
if (!hsotg->periodic_qh_count) {
|
||||
intr_mask = readl(hsotg->regs + GINTMSK);
|
||||
intr_mask = dwc2_readl(hsotg->regs + GINTMSK);
|
||||
intr_mask &= ~GINTSTS_SOF;
|
||||
writel(intr_mask, hsotg->regs + GINTMSK);
|
||||
dwc2_writel(intr_mask, hsotg->regs + GINTMSK);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user