This patch is doing the following:
1. Implementing the errata for LS2080.
2. Adding fixup for fdt for LS2080.

Signed-off-by: Sriram Dash <sriram.d...@nxp.com>
Signed-off-by: Rajesh Bhagat <rajesh.bha...@nxp.com>
---
Changes in v2:
  - Reworked for changes done in errata checking code.


 .../include/asm/arch-fsl-layerscape/immap_lsch3.h  |  1 +
 board/freescale/ls2080aqds/ls2080aqds.c            |  2 ++
 board/freescale/ls2080ardb/ls2080ardb.c            |  2 ++
 drivers/usb/common/fsl-dt-fixup.c                  |  3 +++
 drivers/usb/common/fsl-errata.c                    | 15 +++++++++++
 drivers/usb/host/xhci-fsl.c                        | 29 ++++++++++++++++++++++
 include/fsl_usb.h                                  |  1 +
 7 files changed, 53 insertions(+)

diff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h 
b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
index e48bbaf..9b60bd3 100644
--- a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
+++ b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
@@ -139,6 +139,7 @@
 /* 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 */
diff --git a/board/freescale/ls2080aqds/ls2080aqds.c 
b/board/freescale/ls2080aqds/ls2080aqds.c
index b3bd40a..97892f8 100644
--- a/board/freescale/ls2080aqds/ls2080aqds.c
+++ b/board/freescale/ls2080aqds/ls2080aqds.c
@@ -296,6 +296,8 @@ int ft_board_setup(void *blob, bd_t *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);
diff --git a/board/freescale/ls2080ardb/ls2080ardb.c 
b/board/freescale/ls2080ardb/ls2080ardb.c
index fb39af6..39b8ea3 100644
--- a/board/freescale/ls2080ardb/ls2080ardb.c
+++ b/board/freescale/ls2080ardb/ls2080ardb.c
@@ -275,6 +275,8 @@ int ft_board_setup(void *blob, bd_t *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);
diff --git a/drivers/usb/common/fsl-dt-fixup.c 
b/drivers/usb/common/fsl-dt-fixup.c
index 7c039cb..fd85439 100644
--- a/drivers/usb/common/fsl-dt-fixup.c
+++ b/drivers/usb/common/fsl-dt-fixup.c
@@ -125,6 +125,7 @@ void fdt_fixup_dr_usb(void *blob, bd_t *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];
@@ -190,6 +191,8 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
                                  "a007792", has_erratum_a007792);
                fdt_fixup_erratum(&usb_erratum_a005697_off, blob,
                                  "a005697", has_erratum_a005697);
+               fdt_fixup_erratum(&usb_erratum_a008751_off, blob,
+                                 "a008751", has_erratum_a008751);
 
        }
 }
diff --git a/drivers/usb/common/fsl-errata.c b/drivers/usb/common/fsl-errata.c
index 95918fc..ebe60a8 100644
--- a/drivers/usb/common/fsl-errata.c
+++ b/drivers/usb/common/fsl-errata.c
@@ -175,4 +175,19 @@ bool has_erratum_a004477(void)
        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
diff --git a/drivers/usb/host/xhci-fsl.c b/drivers/usb/host/xhci-fsl.c
index 05f09d7..d55ed87 100644
--- a/drivers/usb/host/xhci-fsl.c
+++ b/drivers/usb/host/xhci-fsl.c
@@ -15,6 +15,8 @@
 #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;
@@ -27,6 +29,31 @@ __weak int __board_usb_init(int index, enum usb_init_type 
init)
        return 0;
 }
 
+static inline bool  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 true;
+#endif
+       return false;
+}
+
+#define APPLY_ERRATUM(id)                                              \
+do {                                                                   \
+       bool ret;                                                       \
+       if (has_erratum_##id()) {                                       \
+               ret = erratum_##id();                                   \
+               if (ret <= 0)                                           \
+                       puts("Failed to apply erratum " #id "\n");      \
+       }                                                               \
+} while (0)
+
+static void fsl_apply_xhci_errata(void)
+{
+       APPLY_ERRATUM(a008751);
+}
+
 static int fsl_xhci_core_init(struct fsl_xhci *fsl_xhci)
 {
        int ret = 0;
@@ -69,6 +96,8 @@ int xhci_hcd_init(int index, struct xhci_hccr **hccr, struct 
xhci_hcor **hcor)
                return ret;
        }
 
+       fsl_apply_xhci_errata();
+
        ret = fsl_xhci_core_init(ctx);
        if (ret < 0) {
                puts("Failed to initialize xhci\n");
diff --git a/include/fsl_usb.h b/include/fsl_usb.h
index d183349..fc72fb9 100644
--- a/include/fsl_usb.h
+++ b/include/fsl_usb.h
@@ -94,5 +94,6 @@ bool has_erratum_a007798(void);
 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_ */
-- 
2.1.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to