/* 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) >>