
On 06/02/2016 08:54 AM, Sriram Dash wrote:
This patch is doing the following:
- Implementing the errata for LS2080.
- Adding fixup for fdt for LS2080.
Signed-off-by: Sriram Dash sriram.dash@nxp.com Signed-off-by: Rajesh Bhagat rajesh.bhagat@nxp.com
Changes in v2:
- Reworked for changes done in errata checking code.
[...]
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;
Will there be an ever-growing list of unused variables here ?
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)
Drop the inline, let compiler decide. Also, make this an int instead of bool and return 0 on success, 1 on error.
+{ +#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)
Turn this into a function.
+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_ */