xref: /rk3399_rockchip-uboot/drivers/usb/common/fsl-errata.c (revision f413d1cae89143ad45b066b3d3bc602deafcb50a)
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) ||
56*f413d1caSSriram Dash 			IS_SVR_REV(svr, 1, 1) ||
57*f413d1caSSriram Dash 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
5892623672SSriram Dash 	case SVR_P3041:
5992623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) ||
6092623672SSriram Dash 			IS_SVR_REV(svr, 1, 1) ||
6192623672SSriram Dash 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
6292623672SSriram Dash 	case SVR_P5010:
6392623672SSriram Dash 	case SVR_P5020:
6492623672SSriram Dash 	case SVR_P5021:
6592623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
6692623672SSriram Dash 	case SVR_T4240:
6792623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
6892623672SSriram Dash 	case SVR_P5040:
69*f413d1caSSriram Dash 		return IS_SVR_REV(svr, 1, 0) ||
70*f413d1caSSriram Dash 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
7192623672SSriram Dash #endif
7292623672SSriram Dash 	}
7392623672SSriram Dash 
7492623672SSriram Dash 	return false;
7592623672SSriram Dash }
7692623672SSriram Dash 
7792623672SSriram Dash bool has_erratum_a007075(void)
7892623672SSriram Dash {
7992623672SSriram Dash 	u32 svr = get_svr();
8092623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
8192623672SSriram Dash 
8292623672SSriram Dash 	switch (soc) {
8392623672SSriram Dash #ifdef CONFIG_PPC
8492623672SSriram Dash 	case SVR_B4860:
8592623672SSriram Dash 	case SVR_B4420:
8692623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
8792623672SSriram Dash 	case SVR_P1010:
8892623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
8992623672SSriram Dash 	case SVR_P4080:
9092623672SSriram Dash 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
9192623672SSriram Dash #endif
9292623672SSriram Dash 	}
9392623672SSriram Dash 	return false;
9492623672SSriram Dash }
9592623672SSriram Dash 
9692623672SSriram Dash bool has_erratum_a007798(void)
9792623672SSriram Dash {
9892623672SSriram Dash #ifdef CONFIG_PPC
9992623672SSriram Dash 	return SVR_SOC_VER(get_svr()) == SVR_T4240 &&
10092623672SSriram Dash 		IS_SVR_REV(get_svr(), 2, 0);
10192623672SSriram Dash #endif
10292623672SSriram Dash 	return false;
10392623672SSriram Dash }
10492623672SSriram Dash 
10592623672SSriram Dash bool has_erratum_a007792(void)
10692623672SSriram Dash {
10792623672SSriram Dash 	u32 svr = get_svr();
10892623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
10992623672SSriram Dash 
11092623672SSriram Dash 	switch (soc) {
11192623672SSriram Dash #ifdef CONFIG_PPC
11292623672SSriram Dash 	case SVR_T4240:
11392623672SSriram Dash 	case SVR_T4160:
11492623672SSriram Dash 	case SVR_T4080:
11592623672SSriram Dash 		return IS_SVR_REV(svr, 2, 0);
11692623672SSriram Dash 	case SVR_T1024:
11792623672SSriram Dash 	case SVR_T1023:
11892623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
11992623672SSriram Dash 	case SVR_T1040:
12092623672SSriram Dash 	case SVR_T1042:
12192623672SSriram Dash 	case SVR_T1020:
12292623672SSriram Dash 	case SVR_T1022:
12392623672SSriram Dash 	case SVR_T2080:
12492623672SSriram Dash 	case SVR_T2081:
12592623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
12692623672SSriram Dash #endif
12792623672SSriram Dash 	}
12892623672SSriram Dash 	return false;
12992623672SSriram Dash }
13092623672SSriram Dash 
13192623672SSriram Dash bool has_erratum_a005697(void)
13292623672SSriram Dash {
13392623672SSriram Dash 	u32 svr = get_svr();
13492623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
13592623672SSriram Dash 
13692623672SSriram Dash 	switch (soc) {
13792623672SSriram Dash #ifdef CONFIG_PPC
13892623672SSriram Dash 	case SVR_9131:
13992623672SSriram Dash 	case SVR_9132:
14092623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
14192623672SSriram Dash #endif
14292623672SSriram Dash 	}
14392623672SSriram Dash 	return false;
14492623672SSriram Dash }
14592623672SSriram Dash 
14692623672SSriram Dash bool has_erratum_a004477(void)
14792623672SSriram Dash {
14892623672SSriram Dash 	u32 svr = get_svr();
14992623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
15092623672SSriram Dash 
15192623672SSriram Dash 	switch (soc) {
15292623672SSriram Dash #ifdef CONFIG_PPC
15392623672SSriram Dash 	case SVR_P1010:
15492623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
15592623672SSriram Dash 	case SVR_P1022:
15692623672SSriram Dash 	case SVR_9131:
15792623672SSriram Dash 	case SVR_9132:
15892623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
15992623672SSriram Dash 	case SVR_P2020:
16092623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) ||
16192623672SSriram Dash 			IS_SVR_REV(svr, 2, 1);
16292623672SSriram Dash 	case SVR_B4860:
16392623672SSriram Dash 	case SVR_B4420:
16492623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
16592623672SSriram Dash 	case SVR_P4080:
16692623672SSriram Dash 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
16792623672SSriram Dash #endif
16892623672SSriram Dash 	}
16992623672SSriram Dash 
17092623672SSriram Dash 	return false;
17192623672SSriram Dash }
17292623672SSriram Dash 
173ef53b8c4SSriram Dash bool has_erratum_a008751(void)
174ef53b8c4SSriram Dash {
175ef53b8c4SSriram Dash 	u32 svr = get_svr();
176ef53b8c4SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
177ef53b8c4SSriram Dash 
178ef53b8c4SSriram Dash 	switch (soc) {
179ef53b8c4SSriram Dash #ifdef CONFIG_ARM64
18049cdce16SPrabhakar Kushwaha 	case SVR_LS2080A:
18149cdce16SPrabhakar Kushwaha 	case SVR_LS2085A:
182ef53b8c4SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
183ef53b8c4SSriram Dash #endif
184ef53b8c4SSriram Dash 	}
185ef53b8c4SSriram Dash 	return false;
186ef53b8c4SSriram Dash }
187ef53b8c4SSriram Dash 
18892623672SSriram Dash #endif
189