|
@@ -402,7 +402,9 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool select_phy, int irq)
|
|
|
|
|
|
hsotg->total_fifo_size = hsotg->hwcfg3 >> GHWCFG3_DFIFO_DEPTH_SHIFT &
|
|
|
GHWCFG3_DFIFO_DEPTH_MASK >> GHWCFG3_DFIFO_DEPTH_SHIFT;
|
|
|
- hsotg->rx_fifo_size = readl(hsotg->regs + GRXFSIZ);
|
|
|
+ hsotg->rx_fifo_size = (readl(hsotg->regs + GRXFSIZ) &
|
|
|
+ GRXFSIZ_DEPTH_MASK) >>
|
|
|
+ GRXFSIZ_DEPTH_SHIFT;
|
|
|
hsotg->nperio_tx_fifo_size =
|
|
|
readl(hsotg->regs + GNPTXFSIZ) >> 16 & 0xffff;
|
|
|
|
|
@@ -507,7 +509,7 @@ void dwc2_disable_host_interrupts(struct dwc2_hsotg *hsotg)
|
|
|
static void dwc2_config_fifos(struct dwc2_hsotg *hsotg)
|
|
|
{
|
|
|
struct dwc2_core_params *params = hsotg->core_params;
|
|
|
- u32 nptxfsiz, hptxfsiz, dfifocfg;
|
|
|
+ u32 nptxfsiz, hptxfsiz, dfifocfg, grxfsiz;
|
|
|
|
|
|
if (!params->enable_dynamic_fifo)
|
|
|
return;
|
|
@@ -520,9 +522,12 @@ static void dwc2_config_fifos(struct dwc2_hsotg *hsotg)
|
|
|
params->host_perio_tx_fifo_size);
|
|
|
|
|
|
/* Rx FIFO */
|
|
|
- dev_dbg(hsotg->dev, "initial grxfsiz=%08x\n",
|
|
|
- readl(hsotg->regs + GRXFSIZ));
|
|
|
- writel(params->host_rx_fifo_size, hsotg->regs + GRXFSIZ);
|
|
|
+ grxfsiz = readl(hsotg->regs + GRXFSIZ);
|
|
|
+ dev_dbg(hsotg->dev, "initial grxfsiz=%08x\n", grxfsiz);
|
|
|
+ grxfsiz &= ~GRXFSIZ_DEPTH_MASK;
|
|
|
+ grxfsiz |= params->host_rx_fifo_size <<
|
|
|
+ GRXFSIZ_DEPTH_SHIFT & GRXFSIZ_DEPTH_MASK;
|
|
|
+ writel(grxfsiz, hsotg->regs + GRXFSIZ);
|
|
|
dev_dbg(hsotg->dev, "new grxfsiz=%08x\n", readl(hsotg->regs + GRXFSIZ));
|
|
|
|
|
|
/* Non-periodic Tx FIFO */
|
|
@@ -2115,7 +2120,9 @@ int dwc2_set_param_host_rx_fifo_size(struct dwc2_hsotg *hsotg, int val)
|
|
|
int valid = 1;
|
|
|
int retval = 0;
|
|
|
|
|
|
- if (val < 16 || val > readl(hsotg->regs + GRXFSIZ))
|
|
|
+ if (val < 16 || val > (readl(hsotg->regs + GRXFSIZ) &
|
|
|
+ GRXFSIZ_DEPTH_MASK) >>
|
|
|
+ GRXFSIZ_DEPTH_SHIFT)
|
|
|
valid = 0;
|
|
|
|
|
|
if (!valid) {
|
|
@@ -2123,7 +2130,9 @@ int dwc2_set_param_host_rx_fifo_size(struct dwc2_hsotg *hsotg, int val)
|
|
|
dev_err(hsotg->dev,
|
|
|
"%d invalid for host_rx_fifo_size. Check HW configuration.\n",
|
|
|
val);
|
|
|
- val = readl(hsotg->regs + GRXFSIZ);
|
|
|
+ val = (readl(hsotg->regs + GRXFSIZ) &
|
|
|
+ GRXFSIZ_DEPTH_MASK) >>
|
|
|
+ GRXFSIZ_DEPTH_SHIFT;
|
|
|
dev_dbg(hsotg->dev, "Setting host_rx_fifo_size to %d\n", val);
|
|
|
retval = -EINVAL;
|
|
|
}
|