xref: /rk3399_rockchip-uboot/drivers/usb/common/fsl-errata.c (revision 92623672f9d3f1b4ea12ae1e2bcc0ad9fde5d2cb)
1*92623672SSriram Dash /*
2*92623672SSriram Dash  * Freescale USB Controller
3*92623672SSriram Dash  *
4*92623672SSriram Dash  * Copyright 2013 Freescale Semiconductor, Inc.
5*92623672SSriram Dash  *
6*92623672SSriram Dash  * SPDX-License-Identifier:	GPL-2.0+
7*92623672SSriram Dash  */
8*92623672SSriram Dash 
9*92623672SSriram Dash #include <common.h>
10*92623672SSriram Dash #include <fsl_errata.h>
11*92623672SSriram Dash #include<fsl_usb.h>
12*92623672SSriram Dash 
13*92623672SSriram Dash /* USB Erratum Checking code */
14*92623672SSriram Dash #if defined(CONFIG_PPC) || defined(CONFIG_ARM)
15*92623672SSriram Dash bool has_dual_phy(void)
16*92623672SSriram Dash {
17*92623672SSriram Dash 	u32 svr = get_svr();
18*92623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
19*92623672SSriram Dash 
20*92623672SSriram Dash 	switch (soc) {
21*92623672SSriram Dash #ifdef CONFIG_PPC
22*92623672SSriram Dash 	case SVR_T1023:
23*92623672SSriram Dash 	case SVR_T1024:
24*92623672SSriram Dash 	case SVR_T1013:
25*92623672SSriram Dash 	case SVR_T1014:
26*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
27*92623672SSriram Dash 	case SVR_T1040:
28*92623672SSriram Dash 	case SVR_T1042:
29*92623672SSriram Dash 	case SVR_T1020:
30*92623672SSriram Dash 	case SVR_T1022:
31*92623672SSriram Dash 	case SVR_T2080:
32*92623672SSriram Dash 	case SVR_T2081:
33*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
34*92623672SSriram Dash 	case SVR_T4240:
35*92623672SSriram Dash 	case SVR_T4160:
36*92623672SSriram Dash 	case SVR_T4080:
37*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
38*92623672SSriram Dash #endif
39*92623672SSriram Dash 	}
40*92623672SSriram Dash 
41*92623672SSriram Dash 	return false;
42*92623672SSriram Dash }
43*92623672SSriram Dash 
44*92623672SSriram Dash bool has_erratum_a006261(void)
45*92623672SSriram Dash {
46*92623672SSriram Dash 	u32 svr = get_svr();
47*92623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
48*92623672SSriram Dash 
49*92623672SSriram Dash 	switch (soc) {
50*92623672SSriram Dash #ifdef CONFIG_PPC
51*92623672SSriram Dash 	case SVR_P1010:
52*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
53*92623672SSriram Dash 	case SVR_P2041:
54*92623672SSriram Dash 	case SVR_P2040:
55*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) ||
56*92623672SSriram Dash 			IS_SVR_REV(svr, 1, 1) || IS_SVR_REV(svr, 2, 1);
57*92623672SSriram Dash 	case SVR_P3041:
58*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) ||
59*92623672SSriram Dash 			IS_SVR_REV(svr, 1, 1) ||
60*92623672SSriram Dash 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
61*92623672SSriram Dash 	case SVR_P5010:
62*92623672SSriram Dash 	case SVR_P5020:
63*92623672SSriram Dash 	case SVR_P5021:
64*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
65*92623672SSriram Dash 	case SVR_T4240:
66*92623672SSriram Dash 	case SVR_T4160:
67*92623672SSriram Dash 	case SVR_T4080:
68*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
69*92623672SSriram Dash 	case SVR_T1040:
70*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
71*92623672SSriram Dash 	case SVR_T2080:
72*92623672SSriram Dash 	case SVR_T2081:
73*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
74*92623672SSriram Dash 	case SVR_P5040:
75*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
76*92623672SSriram Dash #endif
77*92623672SSriram Dash 	}
78*92623672SSriram Dash 
79*92623672SSriram Dash 	return false;
80*92623672SSriram Dash }
81*92623672SSriram Dash 
82*92623672SSriram Dash bool has_erratum_a007075(void)
83*92623672SSriram Dash {
84*92623672SSriram Dash 	u32 svr = get_svr();
85*92623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
86*92623672SSriram Dash 
87*92623672SSriram Dash 	switch (soc) {
88*92623672SSriram Dash #ifdef CONFIG_PPC
89*92623672SSriram Dash 	case SVR_B4860:
90*92623672SSriram Dash 	case SVR_B4420:
91*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
92*92623672SSriram Dash 	case SVR_P1010:
93*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
94*92623672SSriram Dash 	case SVR_P4080:
95*92623672SSriram Dash 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
96*92623672SSriram Dash #endif
97*92623672SSriram Dash 	}
98*92623672SSriram Dash 	return false;
99*92623672SSriram Dash }
100*92623672SSriram Dash 
101*92623672SSriram Dash bool has_erratum_a007798(void)
102*92623672SSriram Dash {
103*92623672SSriram Dash #ifdef CONFIG_PPC
104*92623672SSriram Dash 	return SVR_SOC_VER(get_svr()) == SVR_T4240 &&
105*92623672SSriram Dash 		IS_SVR_REV(get_svr(), 2, 0);
106*92623672SSriram Dash #endif
107*92623672SSriram Dash 	return false;
108*92623672SSriram Dash }
109*92623672SSriram Dash 
110*92623672SSriram Dash bool has_erratum_a007792(void)
111*92623672SSriram Dash {
112*92623672SSriram Dash 	u32 svr = get_svr();
113*92623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
114*92623672SSriram Dash 
115*92623672SSriram Dash 	switch (soc) {
116*92623672SSriram Dash #ifdef CONFIG_PPC
117*92623672SSriram Dash 	case SVR_T4240:
118*92623672SSriram Dash 	case SVR_T4160:
119*92623672SSriram Dash 	case SVR_T4080:
120*92623672SSriram Dash 		return IS_SVR_REV(svr, 2, 0);
121*92623672SSriram Dash 	case SVR_T1024:
122*92623672SSriram Dash 	case SVR_T1023:
123*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0);
124*92623672SSriram Dash 	case SVR_T1040:
125*92623672SSriram Dash 	case SVR_T1042:
126*92623672SSriram Dash 	case SVR_T1020:
127*92623672SSriram Dash 	case SVR_T1022:
128*92623672SSriram Dash 	case SVR_T2080:
129*92623672SSriram Dash 	case SVR_T2081:
130*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
131*92623672SSriram Dash #endif
132*92623672SSriram Dash 	}
133*92623672SSriram Dash 	return false;
134*92623672SSriram Dash }
135*92623672SSriram Dash 
136*92623672SSriram Dash bool has_erratum_a005697(void)
137*92623672SSriram Dash {
138*92623672SSriram Dash 	u32 svr = get_svr();
139*92623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
140*92623672SSriram Dash 
141*92623672SSriram Dash 	switch (soc) {
142*92623672SSriram Dash #ifdef CONFIG_PPC
143*92623672SSriram Dash 	case SVR_9131:
144*92623672SSriram Dash 	case SVR_9132:
145*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
146*92623672SSriram Dash #endif
147*92623672SSriram Dash 	}
148*92623672SSriram Dash 	return false;
149*92623672SSriram Dash }
150*92623672SSriram Dash 
151*92623672SSriram Dash bool has_erratum_a004477(void)
152*92623672SSriram Dash {
153*92623672SSriram Dash 	u32 svr = get_svr();
154*92623672SSriram Dash 	u32 soc = SVR_SOC_VER(svr);
155*92623672SSriram Dash 
156*92623672SSriram Dash 	switch (soc) {
157*92623672SSriram Dash #ifdef CONFIG_PPC
158*92623672SSriram Dash 	case SVR_P1010:
159*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
160*92623672SSriram Dash 	case SVR_P1022:
161*92623672SSriram Dash 	case SVR_9131:
162*92623672SSriram Dash 	case SVR_9132:
163*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
164*92623672SSriram Dash 	case SVR_P2020:
165*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) ||
166*92623672SSriram Dash 			IS_SVR_REV(svr, 2, 1);
167*92623672SSriram Dash 	case SVR_B4860:
168*92623672SSriram Dash 	case SVR_B4420:
169*92623672SSriram Dash 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
170*92623672SSriram Dash 	case SVR_P4080:
171*92623672SSriram Dash 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
172*92623672SSriram Dash #endif
173*92623672SSriram Dash 	}
174*92623672SSriram Dash 
175*92623672SSriram Dash 	return false;
176*92623672SSriram Dash }
177*92623672SSriram Dash 
178*92623672SSriram Dash #endif
179