blob: 0dc3dd8117058b8c0c016ca0ad23d55c98d141b7 [file] [log] [blame]
Sriram Dash9e8da5c2016-06-13 09:58:34 +05301/*
2 * Freescale USB Controller
3 *
4 * Copyright 2013 Freescale Semiconductor, Inc.
5 *
6 * SPDX-License-Identifier: GPL-2.0+
7 */
8
9#include <common.h>
10#include <fsl_errata.h>
11#include<fsl_usb.h>
12
13/* USB Erratum Checking code */
14#if defined(CONFIG_PPC) || defined(CONFIG_ARM)
15bool has_dual_phy(void)
16{
17 u32 svr = get_svr();
18 u32 soc = SVR_SOC_VER(svr);
19
20 switch (soc) {
21#ifdef CONFIG_PPC
22 case SVR_T1023:
23 case SVR_T1024:
24 case SVR_T1013:
25 case SVR_T1014:
26 return IS_SVR_REV(svr, 1, 0);
27 case SVR_T1040:
28 case SVR_T1042:
29 case SVR_T1020:
30 case SVR_T1022:
31 case SVR_T2080:
32 case SVR_T2081:
33 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
34 case SVR_T4240:
35 case SVR_T4160:
36 case SVR_T4080:
37 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
38#endif
39 }
40
41 return false;
42}
43
44bool has_erratum_a006261(void)
45{
46 u32 svr = get_svr();
47 u32 soc = SVR_SOC_VER(svr);
48
49 switch (soc) {
50#ifdef CONFIG_PPC
51 case SVR_P1010:
52 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
53 case SVR_P2041:
54 case SVR_P2040:
55 return IS_SVR_REV(svr, 1, 0) ||
Sriram Dash5467da22016-08-17 11:47:54 +053056 IS_SVR_REV(svr, 1, 1) ||
57 IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
Sriram Dash9e8da5c2016-06-13 09:58:34 +053058 case SVR_P3041:
59 return IS_SVR_REV(svr, 1, 0) ||
60 IS_SVR_REV(svr, 1, 1) ||
61 IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
62 case SVR_P5010:
63 case SVR_P5020:
64 case SVR_P5021:
65 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
66 case SVR_T4240:
Sriram Dash9e8da5c2016-06-13 09:58:34 +053067 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
Sriram Dash9e8da5c2016-06-13 09:58:34 +053068 case SVR_P5040:
Sriram Dash5467da22016-08-17 11:47:54 +053069 return IS_SVR_REV(svr, 1, 0) ||
70 IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
Sriram Dash9e8da5c2016-06-13 09:58:34 +053071#endif
72 }
73
74 return false;
75}
76
77bool has_erratum_a007075(void)
78{
79 u32 svr = get_svr();
80 u32 soc = SVR_SOC_VER(svr);
81
82 switch (soc) {
83#ifdef CONFIG_PPC
84 case SVR_B4860:
85 case SVR_B4420:
86 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
87 case SVR_P1010:
88 return IS_SVR_REV(svr, 1, 0);
89 case SVR_P4080:
90 return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
91#endif
92 }
93 return false;
94}
95
96bool has_erratum_a007798(void)
97{
98#ifdef CONFIG_PPC
99 return SVR_SOC_VER(get_svr()) == SVR_T4240 &&
100 IS_SVR_REV(get_svr(), 2, 0);
101#endif
102 return false;
103}
104
105bool has_erratum_a007792(void)
106{
107 u32 svr = get_svr();
108 u32 soc = SVR_SOC_VER(svr);
109
110 switch (soc) {
111#ifdef CONFIG_PPC
112 case SVR_T4240:
113 case SVR_T4160:
114 case SVR_T4080:
115 return IS_SVR_REV(svr, 2, 0);
116 case SVR_T1024:
117 case SVR_T1023:
118 return IS_SVR_REV(svr, 1, 0);
119 case SVR_T1040:
120 case SVR_T1042:
121 case SVR_T1020:
122 case SVR_T1022:
123 case SVR_T2080:
124 case SVR_T2081:
125 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
126#endif
127 }
128 return false;
129}
130
131bool has_erratum_a005697(void)
132{
133 u32 svr = get_svr();
134 u32 soc = SVR_SOC_VER(svr);
135
136 switch (soc) {
137#ifdef CONFIG_PPC
138 case SVR_9131:
139 case SVR_9132:
140 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
141#endif
142 }
143 return false;
144}
145
146bool has_erratum_a004477(void)
147{
148 u32 svr = get_svr();
149 u32 soc = SVR_SOC_VER(svr);
150
151 switch (soc) {
152#ifdef CONFIG_PPC
153 case SVR_P1010:
154 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
155 case SVR_P1022:
156 case SVR_9131:
157 case SVR_9132:
158 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
159 case SVR_P2020:
160 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) ||
161 IS_SVR_REV(svr, 2, 1);
162 case SVR_B4860:
163 case SVR_B4420:
164 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
165 case SVR_P4080:
166 return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
167#endif
168 }
169
170 return false;
171}
172
Sriram Dash01820952016-06-13 09:58:36 +0530173bool has_erratum_a008751(void)
174{
175 u32 svr = get_svr();
176 u32 soc = SVR_SOC_VER(svr);
177
178 switch (soc) {
179#ifdef CONFIG_ARM64
Prabhakar Kushwahaac7f2422016-06-24 13:48:13 +0530180 case SVR_LS2080A:
181 case SVR_LS2085A:
Sriram Dash01820952016-06-13 09:58:36 +0530182 return IS_SVR_REV(svr, 1, 0);
183#endif
184 }
185 return false;
186}
187
Sriram Dasha1f422e2016-09-23 12:57:52 +0530188bool has_erratum_a010151(void)
189{
190 u32 svr = get_svr();
191 u32 soc = SVR_SOC_VER(svr);
192
193 switch (soc) {
194#ifdef CONFIG_ARM64
195 case SVR_LS2080A:
196 case SVR_LS2085A:
197 case SVR_LS1046A:
198 case SVR_LS1012A:
199 return IS_SVR_REV(svr, 1, 0);
200 case SVR_LS1043A:
201 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
202#endif
203#ifdef CONFIG_LS102XA
204 case SOC_VER_LS1020:
205 case SOC_VER_LS1021:
206 case SOC_VER_LS1022:
207 case SOC_VER_SLS1020:
208 return IS_SVR_REV(svr, 2, 0);
209#endif
210 }
211 return false;
212}
213
Sriram Dash9e8da5c2016-06-13 09:58:34 +0530214#endif