/* Supplemental Configuration */
 #define SCFG_BASE              0x01fc0000
 #define SCFG_USB3PRM1CR                        0x000
+#define SCFG_USB3PRM1CR_INIT           0x27672b2a
 
 #define TP_ITYP_AV             0x00000001      /* Initiator available */
 #define TP_ITYP_TYPE(x)        (((x) & 0x6) >> 1)      /* Initiator Type */
 
 
        fdt_fixup_memory_banks(blob, base, size, 2);
 
+       fdt_fixup_dr_usb(blob, bd);
+
 #ifdef CONFIG_FSL_MC_ENET
        fdt_fixup_board_enet(blob);
        err = fsl_mc_ldpaa_exit(bd);
 
 
        fdt_fixup_memory_banks(blob, base, size, 2);
 
+       fdt_fixup_dr_usb(blob, bd);
+
 #ifdef CONFIG_FSL_MC_ENET
        fdt_fixup_board_enet(blob);
        err = fsl_mc_ldpaa_exit(bd);
 
        int usb_erratum_a007075_off = -1;
        int usb_erratum_a007792_off = -1;
        int usb_erratum_a005697_off = -1;
+       int usb_erratum_a008751_off = -1;
        int usb_mode_off = -1;
        int usb_phy_off = -1;
        char str[5];
                                        has_erratum_a005697);
                if (ret == -ENOSPC)
                        return;
+               ret = fdt_fixup_erratum(&usb_erratum_a008751_off, blob,
+                                       SNPS_DWC3, "a008751",
+                                       has_erratum_a008751);
+               if (ret == -ENOSPC)
+                       return;
+
        }
 }
 
        return false;
 }
 
+bool has_erratum_a008751(void)
+{
+       u32 svr = get_svr();
+       u32 soc = SVR_SOC_VER(svr);
+
+       switch (soc) {
+#ifdef CONFIG_ARM64
+       case SVR_LS2080:
+       case SVR_LS2085:
+               return IS_SVR_REV(svr, 1, 0);
+#endif
+       }
+       return false;
+}
+
 #endif
 
 #include <linux/usb/xhci-fsl.h>
 #include <linux/usb/dwc3.h>
 #include "xhci.h"
+#include <fsl_errata.h>
+#include <fsl_usb.h>
 
 /* Declare global data pointer */
 DECLARE_GLOBAL_DATA_PTR;
        return 0;
 }
 
+static int erratum_a008751(void)
+{
+#if defined(CONFIG_TARGET_LS2080AQDS) || defined(CONFIG_TARGET_LS2080ARDB)
+       u32 __iomem *scfg = (u32 __iomem *)SCFG_BASE;
+       writel(SCFG_USB3PRM1CR_INIT, scfg + SCFG_USB3PRM1CR / 4);
+       return 0;
+#endif
+       return 1;
+}
+
+static void fsl_apply_xhci_errata(void)
+{
+       int ret;
+       if (has_erratum_a008751()) {
+               ret = erratum_a008751();
+               if (ret != 0)
+                       puts("Failed to apply erratum a008751\n");
+       }
+}
+
 static int fsl_xhci_core_init(struct fsl_xhci *fsl_xhci)
 {
        int ret = 0;
                return ret;
        }
 
+       fsl_apply_xhci_errata();
+
        ret = fsl_xhci_core_init(ctx);
        if (ret < 0) {
                puts("Failed to initialize xhci\n");
 
 bool has_erratum_a007792(void);
 bool has_erratum_a005697(void);
 bool has_erratum_a004477(void);
+bool has_erratum_a008751(void);
 #endif
 #endif /*_ASM_FSL_USB_H_ */