mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-06 22:55:11 +00:00
usb: dwc2: replace ioread32/iowrite32_rep with dwc2_readl/writel_rep
dwc2_readl_rep/dwc2_writel_rep functions using readl/writel in a loop. Signed-off-by: Gevorg Sahakyan <sahakyan@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
f25c42b8d6
commit
342ccce173
2 changed files with 28 additions and 43 deletions
|
@ -1161,45 +1161,6 @@ struct dwc2_hsotg {
|
||||||
#endif /* CONFIG_USB_DWC2_PERIPHERAL || CONFIG_USB_DWC2_DUAL_ROLE */
|
#endif /* CONFIG_USB_DWC2_PERIPHERAL || CONFIG_USB_DWC2_DUAL_ROLE */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS
|
|
||||||
/*
|
|
||||||
* There are some MIPS machines that can run in either big-endian
|
|
||||||
* or little-endian mode and that use the dwc2 register without
|
|
||||||
* a byteswap in both ways.
|
|
||||||
* Unlike other architectures, MIPS apparently does not require a
|
|
||||||
* barrier before the __raw_writel() to synchronize with DMA but does
|
|
||||||
* require the barrier after the __raw_writel() to serialize a set of
|
|
||||||
* writes. This set of operations was added specifically for MIPS and
|
|
||||||
* should only be used there.
|
|
||||||
*/
|
|
||||||
static inline u32 dwc2_readl(struct dwc2_hsotg *hsotg, u32 offset)
|
|
||||||
{
|
|
||||||
u32 value = __raw_readl(hsotg->regs + offset);
|
|
||||||
|
|
||||||
/* In order to preserve endianness __raw_* operation is used. Therefore
|
|
||||||
* a barrier is needed to ensure IO access is not re-ordered across
|
|
||||||
* reads or writes
|
|
||||||
*/
|
|
||||||
mb();
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void dwc2_writel(struct dwc2_hsotg *hsotg, u32 value, u32 offset)
|
|
||||||
{
|
|
||||||
__raw_writel(value, hsotg->regs + offset);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* In order to preserve endianness __raw_* operation is used. Therefore
|
|
||||||
* a barrier is needed to ensure IO access is not re-ordered across
|
|
||||||
* reads or writes
|
|
||||||
*/
|
|
||||||
mb();
|
|
||||||
#ifdef DWC2_LOG_WRITES
|
|
||||||
pr_info("INFO:: wrote %08x to %p\n", value, hsotg->regs + offset);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* Normal architectures just use readl/write */
|
/* Normal architectures just use readl/write */
|
||||||
static inline u32 dwc2_readl(struct dwc2_hsotg *hsotg, u32 offset)
|
static inline u32 dwc2_readl(struct dwc2_hsotg *hsotg, u32 offset)
|
||||||
{
|
{
|
||||||
|
@ -1214,7 +1175,31 @@ static inline void dwc2_writel(struct dwc2_hsotg *hsotg, u32 value, u32 offset)
|
||||||
pr_info("info:: wrote %08x to %p\n", value, hsotg->regs + offset);
|
pr_info("info:: wrote %08x to %p\n", value, hsotg->regs + offset);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
static inline void dwc2_readl_rep(struct dwc2_hsotg *hsotg, u32 offset,
|
||||||
|
void *buffer, unsigned int count)
|
||||||
|
{
|
||||||
|
if (count) {
|
||||||
|
u32 *buf = buffer;
|
||||||
|
|
||||||
|
do {
|
||||||
|
u32 x = dwc2_readl(hsotg, offset);
|
||||||
|
*buf++ = x;
|
||||||
|
} while (--count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void dwc2_writel_rep(struct dwc2_hsotg *hsotg, u32 offset,
|
||||||
|
const void *buffer, unsigned int count)
|
||||||
|
{
|
||||||
|
if (count) {
|
||||||
|
const u32 *buf = buffer;
|
||||||
|
|
||||||
|
do {
|
||||||
|
dwc2_writel(hsotg, *buf++, offset);
|
||||||
|
} while (--count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Reasons for halting a host channel */
|
/* Reasons for halting a host channel */
|
||||||
enum dwc2_halt_status {
|
enum dwc2_halt_status {
|
||||||
|
|
|
@ -599,7 +599,7 @@ static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg,
|
||||||
to_write = DIV_ROUND_UP(to_write, 4);
|
to_write = DIV_ROUND_UP(to_write, 4);
|
||||||
data = hs_req->req.buf + buf_pos;
|
data = hs_req->req.buf + buf_pos;
|
||||||
|
|
||||||
iowrite32_rep(hsotg->regs + EPFIFO(hs_ep->index), data, to_write);
|
dwc2_writel_rep(hsotg, EPFIFO(hs_ep->index), data, to_write);
|
||||||
|
|
||||||
return (to_write >= can_write) ? -ENOSPC : 0;
|
return (to_write >= can_write) ? -ENOSPC : 0;
|
||||||
}
|
}
|
||||||
|
@ -2169,8 +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(hsotg->regs + EPFIFO(ep_idx),
|
dwc2_readl_rep(hsotg, EPFIFO(ep_idx),
|
||||||
hs_req->req.buf + read_ptr, to_read);
|
hs_req->req.buf + read_ptr, to_read);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue