From da5ce448c731321ba8cad5502a35c669b5e1bf8c Mon Sep 17 00:00:00 2001 From: Nikhil Badola Date: Thu, 30 Oct 2014 10:11:28 +0530 Subject: [PATCH] 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 Reviewed-by: York Sun --- drivers/usb/host/ehci-fsl.c | 9 +++++++++ include/fsl_usb.h | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+) 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_ */