|
@@ -3129,18 +3129,20 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
|
|
|
|
|
|
/* Force host mode to get HPTXFSIZ / GNPTXFSIZ exact power on value */
|
|
|
gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
- gusbcfg |= GUSBCFG_FORCEHOSTMODE;
|
|
|
- dwc2_writel(gusbcfg, hsotg->regs + GUSBCFG);
|
|
|
- usleep_range(100000, 150000);
|
|
|
+ if (!(gusbcfg & GUSBCFG_FORCEHOSTMODE)) {
|
|
|
+ dwc2_writel(gusbcfg | GUSBCFG_FORCEHOSTMODE,
|
|
|
+ hsotg->regs + GUSBCFG);
|
|
|
+ usleep_range(100000, 150000);
|
|
|
+ }
|
|
|
|
|
|
gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ);
|
|
|
hptxfsiz = dwc2_readl(hsotg->regs + HPTXFSIZ);
|
|
|
dev_dbg(hsotg->dev, "gnptxfsiz=%08x\n", gnptxfsiz);
|
|
|
dev_dbg(hsotg->dev, "hptxfsiz=%08x\n", hptxfsiz);
|
|
|
- gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
- gusbcfg &= ~GUSBCFG_FORCEHOSTMODE;
|
|
|
- dwc2_writel(gusbcfg, hsotg->regs + GUSBCFG);
|
|
|
- usleep_range(100000, 150000);
|
|
|
+ if (!(gusbcfg & GUSBCFG_FORCEHOSTMODE)) {
|
|
|
+ dwc2_writel(gusbcfg, hsotg->regs + GUSBCFG);
|
|
|
+ usleep_range(100000, 150000);
|
|
|
+ }
|
|
|
|
|
|
/* hwcfg2 */
|
|
|
hw->op_mode = (hwcfg2 & GHWCFG2_OP_MODE_MASK) >>
|