aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikhil Badola <nikhil.badola@freescale.com>2014-10-30 10:11:28 +0530
committerYork Sun <yorksun@freescale.com>2014-12-11 09:41:11 -0800
commitda5ce448c731321ba8cad5502a35c669b5e1bf8c (patch)
tree99d3f705c1dbb760c0337df6aca8d3045c59a571
parentecfc19f31f1fa25f739d11c81d4810f9b35b29aa (diff)
downloadu-boot-da5ce448c731321ba8cad5502a35c669b5e1bf8c.zip
u-boot-da5ce448c731321ba8cad5502a35c669b5e1bf8c.tar.gz
u-boot-da5ce448c731321ba8cad5502a35c669b5e1bf8c.tar.bz2
drivers: usb: fsl: Check USB Erratum A007792 applicability
Check USB Erratum A007792 applicability. If applicable, add corresponding property in the device tree via device tree fixup Signed-off-by: Nikhil Badola <nikhil.badola@freescale.com> Reviewed-by: York Sun <yorksun@freescale.com>
-rw-r--r--drivers/usb/host/ehci-fsl.c9
-rw-r--r--include/fsl_usb.h23
2 files changed, 32 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
index 61cd168..5d4288d 100644
--- a/drivers/usb/host/ehci-fsl.c
+++ b/drivers/usb/host/ehci-fsl.c
@@ -262,6 +262,7 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
static const char * const phys[] = { "ulpi", "utmi" };
int usb_erratum_a006261_off = -1;
int usb_erratum_a007075_off = -1;
+ int usb_erratum_a007792_off = -1;
int usb_mode_off = -1;
int usb_phy_off = -1;
char str[5];
@@ -332,6 +333,14 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
if (usb_erratum_a007075_off < 0)
return;
}
+ if (has_erratum_a007792()) {
+ usb_erratum_a007792_off = fdt_fixup_usb_erratum
+ (blob,
+ "fsl,usb-erratum-a007792",
+ usb_erratum_a007792_off);
+ if (usb_erratum_a007792_off < 0)
+ return;
+ }
}
}
#endif
diff --git a/include/fsl_usb.h b/include/fsl_usb.h
index e4902aa..d251f5d 100644
--- a/include/fsl_usb.h
+++ b/include/fsl_usb.h
@@ -145,6 +145,25 @@ static inline bool has_erratum_a007798(void)
return SVR_SOC_VER(get_svr()) == SVR_T4240 &&
IS_SVR_REV(get_svr(), 2, 0);
}
+
+static inline bool has_erratum_a007792(void)
+{
+ u32 svr = get_svr();
+ u32 soc = SVR_SOC_VER(svr);
+
+ switch (soc) {
+ case SVR_T4240:
+ case SVR_T4160:
+ return IS_SVR_REV(svr, 2, 0);
+ case SVR_T1040:
+ return IS_SVR_REV(svr, 1, 0);
+ case SVR_T2080:
+ case SVR_T2081:
+ return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
+ }
+ return false;
+}
+
#else
static inline bool has_erratum_a006261(void)
{
@@ -161,5 +180,9 @@ static inline bool has_erratum_a007798(void)
return false;
}
+static inline bool has_erratum_a007792(void)
+{
+ return false;
+}
#endif
#endif /*_ASM_FSL_USB_H_ */