xref: /rk3399_rockchip-uboot/drivers/usb/common/fsl-errata.c (revision 4c043712e9910ef1d612aedbd8304a1f7348ef5f)
192623672SSriram Dash /*
292623672SSriram Dash  * Freescale USB Controller
392623672SSriram Dash  *
492623672SSriram Dash  * Copyright 2013 Freescale Semiconductor, Inc.
592623672SSriram Dash  *
692623672SSriram Dash  * SPDX-License-Identifier:	GPL-2.0+
792623672SSriram Dash  */
892623672SSriram Dash 
992623672SSriram Dash #include <common.h>
1092623672SSriram Dash #include <fsl_errata.h>
1192623672SSriram Dash #include<fsl_usb.h>
1292623672SSriram Dash 
1392623672SSriram Dash /* USB Erratum Checking code */
1492623672SSriram Dash #if defined(CONFIG_PPC) || defined(CONFIG_ARM)
1592623672SSriram Dash bool has_dual_phy(void)
1692623672SSriram Dash {
1792623672SSriram Dash 	u32 svr = get_svr();
1892623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
1992623672SSriram Dash 
2092623672SSriram Dash 	switch (soc) {
2192623672SSriram Dash #ifdef CONFIG_PPC
2292623672SSriram Dash 	case SVR_T1023:
2392623672SSriram Dash 	case SVR_T1024:
2492623672SSriram Dash 	case SVR_T1013:
2592623672SSriram Dash 	case SVR_T1014:
2692623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
2792623672SSriram Dash 	case SVR_T1040:
2892623672SSriram Dash 	case SVR_T1042:
2992623672SSriram Dash 	case SVR_T1020:
3092623672SSriram Dash 	case SVR_T1022:
3192623672SSriram Dash 	case SVR_T2080:
3292623672SSriram Dash 	case SVR_T2081:
3392623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
3492623672SSriram Dash 	case SVR_T4240:
3592623672SSriram Dash 	case SVR_T4160:
3692623672SSriram Dash 	case SVR_T4080:
3792623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
3892623672SSriram Dash #endif
3992623672SSriram Dash 	}
4092623672SSriram Dash 
4192623672SSriram Dash 	return false;
4292623672SSriram Dash }
4392623672SSriram Dash 
4492623672SSriram Dash bool has_erratum_a006261(void)
4592623672SSriram Dash {
4692623672SSriram Dash 	u32 svr = get_svr();
4792623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
4892623672SSriram Dash 
4992623672SSriram Dash 	switch (soc) {
5092623672SSriram Dash #ifdef CONFIG_PPC
5192623672SSriram Dash 	case SVR_P1010:
5292623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
5392623672SSriram Dash 	case SVR_P2041:
5492623672SSriram Dash 	case SVR_P2040:
5592623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) ||
5692623672SSriram Dash 			IS_SVR_REV(svr, 1, 1) || IS_SVR_REV(svr, 2, 1);
5792623672SSriram Dash 	case SVR_P3041:
5892623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) ||
5992623672SSriram Dash 			IS_SVR_REV(svr, 1, 1) ||
6092623672SSriram Dash 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
6192623672SSriram Dash 	case SVR_P5010:
6292623672SSriram Dash 	case SVR_P5020:
6392623672SSriram Dash 	case SVR_P5021:
6492623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
6592623672SSriram Dash 	case SVR_T4240:
6692623672SSriram Dash 	case SVR_T4160:
6792623672SSriram Dash 	case SVR_T4080:
6892623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
6992623672SSriram Dash 	case SVR_T1040:
7092623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
7192623672SSriram Dash 	case SVR_T2080:
7292623672SSriram Dash 	case SVR_T2081:
7392623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
7492623672SSriram Dash 	case SVR_P5040:
7592623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
7692623672SSriram Dash #endif
7792623672SSriram Dash 	}
7892623672SSriram Dash 
7992623672SSriram Dash 	return false;
8092623672SSriram Dash }
8192623672SSriram Dash 
8292623672SSriram Dash bool has_erratum_a007075(void)
8392623672SSriram Dash {
8492623672SSriram Dash 	u32 svr = get_svr();
8592623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
8692623672SSriram Dash 
8792623672SSriram Dash 	switch (soc) {
8892623672SSriram Dash #ifdef CONFIG_PPC
8992623672SSriram Dash 	case SVR_B4860:
9092623672SSriram Dash 	case SVR_B4420:
9192623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
9292623672SSriram Dash 	case SVR_P1010:
9392623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
9492623672SSriram Dash 	case SVR_P4080:
9592623672SSriram Dash 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
9692623672SSriram Dash #endif
9792623672SSriram Dash 	}
9892623672SSriram Dash 	return false;
9992623672SSriram Dash }
10092623672SSriram Dash 
10192623672SSriram Dash bool has_erratum_a007798(void)
10292623672SSriram Dash {
10392623672SSriram Dash #ifdef CONFIG_PPC
10492623672SSriram Dash 	return SVR_SOC_VER(get_svr()) == SVR_T4240 &&
10592623672SSriram Dash 		IS_SVR_REV(get_svr(), 2, 0);
10692623672SSriram Dash #endif
10792623672SSriram Dash 	return false;
10892623672SSriram Dash }
10992623672SSriram Dash 
11092623672SSriram Dash bool has_erratum_a007792(void)
11192623672SSriram Dash {
11292623672SSriram Dash 	u32 svr = get_svr();
11392623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
11492623672SSriram Dash 
11592623672SSriram Dash 	switch (soc) {
11692623672SSriram Dash #ifdef CONFIG_PPC
11792623672SSriram Dash 	case SVR_T4240:
11892623672SSriram Dash 	case SVR_T4160:
11992623672SSriram Dash 	case SVR_T4080:
12092623672SSriram Dash 		return IS_SVR_REV(svr, 2, 0);
12192623672SSriram Dash 	case SVR_T1024:
12292623672SSriram Dash 	case SVR_T1023:
12392623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
12492623672SSriram Dash 	case SVR_T1040:
12592623672SSriram Dash 	case SVR_T1042:
12692623672SSriram Dash 	case SVR_T1020:
12792623672SSriram Dash 	case SVR_T1022:
12892623672SSriram Dash 	case SVR_T2080:
12992623672SSriram Dash 	case SVR_T2081:
13092623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
13192623672SSriram Dash #endif
13292623672SSriram Dash 	}
13392623672SSriram Dash 	return false;
13492623672SSriram Dash }
13592623672SSriram Dash 
13692623672SSriram Dash bool has_erratum_a005697(void)
13792623672SSriram Dash {
13892623672SSriram Dash 	u32 svr = get_svr();
13992623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
14092623672SSriram Dash 
14192623672SSriram Dash 	switch (soc) {
14292623672SSriram Dash #ifdef CONFIG_PPC
14392623672SSriram Dash 	case SVR_9131:
14492623672SSriram Dash 	case SVR_9132:
14592623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
14692623672SSriram Dash #endif
14792623672SSriram Dash 	}
14892623672SSriram Dash 	return false;
14992623672SSriram Dash }
15092623672SSriram Dash 
15192623672SSriram Dash bool has_erratum_a004477(void)
15292623672SSriram Dash {
15392623672SSriram Dash 	u32 svr = get_svr();
15492623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
15592623672SSriram Dash 
15692623672SSriram Dash 	switch (soc) {
15792623672SSriram Dash #ifdef CONFIG_PPC
15892623672SSriram Dash 	case SVR_P1010:
15992623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
16092623672SSriram Dash 	case SVR_P1022:
16192623672SSriram Dash 	case SVR_9131:
16292623672SSriram Dash 	case SVR_9132:
16392623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
16492623672SSriram Dash 	case SVR_P2020:
16592623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) ||
16692623672SSriram Dash 			IS_SVR_REV(svr, 2, 1);
16792623672SSriram Dash 	case SVR_B4860:
16892623672SSriram Dash 	case SVR_B4420:
16992623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
17092623672SSriram Dash 	case SVR_P4080:
17192623672SSriram Dash 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
17292623672SSriram Dash #endif
17392623672SSriram Dash 	}
17492623672SSriram Dash 
17592623672SSriram Dash 	return false;
17692623672SSriram Dash }
17792623672SSriram Dash 
178ef53b8c4SSriram Dash bool has_erratum_a008751(void)
179ef53b8c4SSriram Dash {
180ef53b8c4SSriram Dash 	u32 svr = get_svr();
181ef53b8c4SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
182ef53b8c4SSriram Dash 
183ef53b8c4SSriram Dash 	switch (soc) {
184ef53b8c4SSriram Dash #ifdef CONFIG_ARM64
18549cdce16SPrabhakar Kushwaha 	case SVR_LS2080A:
18649cdce16SPrabhakar Kushwaha 	case SVR_LS2085A:
187ef53b8c4SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
188ef53b8c4SSriram Dash #endif
189ef53b8c4SSriram Dash 	}
190ef53b8c4SSriram Dash 	return false;
191ef53b8c4SSriram Dash }
192ef53b8c4SSriram Dash 
193*4c043712SSriram Dash bool has_erratum_a010151(void)
194*4c043712SSriram Dash {
195*4c043712SSriram Dash 	u32 svr = get_svr();
196*4c043712SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
197*4c043712SSriram Dash 
198*4c043712SSriram Dash 	switch (soc) {
199*4c043712SSriram Dash #ifdef CONFIG_ARM64
200*4c043712SSriram Dash 	case SVR_LS2080A:
201*4c043712SSriram Dash 	case SVR_LS2085A:
202*4c043712SSriram Dash 	case SVR_LS1046A:
203*4c043712SSriram Dash 	case SVR_LS1012A:
204*4c043712SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
205*4c043712SSriram Dash 	case SVR_LS1043A:
206*4c043712SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
207*4c043712SSriram Dash #endif
208*4c043712SSriram Dash #ifdef CONFIG_LS102XA
209*4c043712SSriram Dash 	case SOC_VER_LS1020:
210*4c043712SSriram Dash 	case SOC_VER_LS1021:
211*4c043712SSriram Dash 	case SOC_VER_LS1022:
212*4c043712SSriram Dash 	case SOC_VER_SLS1020:
213*4c043712SSriram Dash 		return IS_SVR_REV(svr, 2, 0);
214*4c043712SSriram Dash #endif
215*4c043712SSriram Dash 	}
216*4c043712SSriram Dash 	return false;
217*4c043712SSriram Dash }
218*4c043712SSriram Dash 
21992623672SSriram Dash #endif
220