drivers: usb: fsl: Workaround for Erratum A004477

Add a delay of 1 microsecond before issuing soft reset to the
controller to let ongoing ULPI transaction complete.
This prevents corruption of ULPI Function Control Register which
eventually prevents phy clock from entering to low power mode

Signed-off-by: Nikhil Badola <nikhil.badola@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
This commit is contained in:
Nikhil Badola
2014-11-21 17:25:21 +05:30
committed by York Sun
parent 7fc63cca61
commit 0dc78ff857
4 changed files with 49 additions and 0 deletions

View File

@@ -209,6 +209,30 @@ static inline bool has_erratum_a005697(void)
return false;
}
static inline bool has_erratum_a004477(void)
{
u32 svr = get_svr();
u32 soc = SVR_SOC_VER(svr);
switch (soc) {
case SVR_P1010:
return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
case SVR_P1022:
case SVR_9131:
case SVR_9132:
return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
case SVR_P2020:
return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) ||
IS_SVR_REV(svr, 2, 1);
case SVR_B4860:
case SVR_B4420:
return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
case SVR_P4080:
return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
}
return false;
}
#else
static inline bool has_dual_phy(void)
{
@@ -239,5 +263,10 @@ static inline bool has_erratum_a005697(void)
{
return false;
}
static inline bool has_erratum_a004477(void)
{
return false;
}
#endif
#endif /*_ASM_FSL_USB_H_ */