1a07bdad7SShengzhou Liu /*
2a07bdad7SShengzhou Liu * Copyright 2013 - 2015 Freescale Semiconductor, Inc.
3a07bdad7SShengzhou Liu *
4a07bdad7SShengzhou Liu * SPDX-License-Identifier: GPL-2.0+
5a07bdad7SShengzhou Liu */
6a07bdad7SShengzhou Liu
7a07bdad7SShengzhou Liu #ifndef _FSL_ERRATA_H
8a07bdad7SShengzhou Liu #define _FSL_ERRATA_H
9a07bdad7SShengzhou Liu
10a07bdad7SShengzhou Liu #include <common.h>
11a07bdad7SShengzhou Liu #if defined(CONFIG_PPC)
12a07bdad7SShengzhou Liu #include <asm/processor.h>
13*73fb5838SYork Sun #elif defined(CONFIG_ARCH_LS1021A)
14a07bdad7SShengzhou Liu #include <asm/arch-ls102xa/immap_ls102xa.h>
15a07bdad7SShengzhou Liu #elif defined(CONFIG_FSL_LAYERSCAPE)
16a07bdad7SShengzhou Liu #include <asm/arch/soc.h>
17a07bdad7SShengzhou Liu #endif
18a07bdad7SShengzhou Liu
19a07bdad7SShengzhou Liu
20a07bdad7SShengzhou Liu #ifdef CONFIG_SYS_FSL_ERRATUM_A006379
has_erratum_a006379(void)21a07bdad7SShengzhou Liu static inline bool has_erratum_a006379(void)
22a07bdad7SShengzhou Liu {
23a07bdad7SShengzhou Liu u32 svr = get_svr();
24a07bdad7SShengzhou Liu if (((SVR_SOC_VER(svr) == SVR_T4240) && SVR_MAJ(svr) <= 1) ||
25a07bdad7SShengzhou Liu ((SVR_SOC_VER(svr) == SVR_T4160) && SVR_MAJ(svr) <= 1) ||
26a07bdad7SShengzhou Liu ((SVR_SOC_VER(svr) == SVR_T4080) && SVR_MAJ(svr) <= 1) ||
27a07bdad7SShengzhou Liu ((SVR_SOC_VER(svr) == SVR_B4860) && SVR_MAJ(svr) <= 2) ||
28a07bdad7SShengzhou Liu ((SVR_SOC_VER(svr) == SVR_B4420) && SVR_MAJ(svr) <= 2) ||
29a07bdad7SShengzhou Liu ((SVR_SOC_VER(svr) == SVR_T2080) && SVR_MAJ(svr) <= 1) ||
30a07bdad7SShengzhou Liu ((SVR_SOC_VER(svr) == SVR_T2081) && SVR_MAJ(svr) <= 1))
31a07bdad7SShengzhou Liu return true;
32a07bdad7SShengzhou Liu
33a07bdad7SShengzhou Liu return false;
34a07bdad7SShengzhou Liu }
35a07bdad7SShengzhou Liu #endif
36a07bdad7SShengzhou Liu
37a07bdad7SShengzhou Liu #ifdef CONFIG_SYS_FSL_ERRATUM_A007186
has_erratum_a007186(void)38a07bdad7SShengzhou Liu static inline bool has_erratum_a007186(void)
39a07bdad7SShengzhou Liu {
40a07bdad7SShengzhou Liu u32 svr = get_svr();
41a07bdad7SShengzhou Liu u32 soc = SVR_SOC_VER(svr);
42a07bdad7SShengzhou Liu
43a07bdad7SShengzhou Liu switch (soc) {
44a07bdad7SShengzhou Liu case SVR_T4240:
45a07bdad7SShengzhou Liu return IS_SVR_REV(svr, 2, 0);
46a07bdad7SShengzhou Liu case SVR_T4160:
47a07bdad7SShengzhou Liu return IS_SVR_REV(svr, 2, 0);
48a07bdad7SShengzhou Liu case SVR_B4860:
49a07bdad7SShengzhou Liu return IS_SVR_REV(svr, 2, 0);
50a07bdad7SShengzhou Liu case SVR_B4420:
51a07bdad7SShengzhou Liu return IS_SVR_REV(svr, 2, 0);
52a07bdad7SShengzhou Liu case SVR_T2081:
53a07bdad7SShengzhou Liu case SVR_T2080:
54a07bdad7SShengzhou Liu return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
55a07bdad7SShengzhou Liu }
56a07bdad7SShengzhou Liu
57a07bdad7SShengzhou Liu return false;
58a07bdad7SShengzhou Liu }
59a07bdad7SShengzhou Liu #endif
60a07bdad7SShengzhou Liu
61a46b1852SShengzhou Liu #ifdef CONFIG_SYS_FSL_ERRATUM_A008378
has_erratum_a008378(void)62a46b1852SShengzhou Liu static inline bool has_erratum_a008378(void)
63a46b1852SShengzhou Liu {
64a46b1852SShengzhou Liu u32 svr = get_svr();
65a46b1852SShengzhou Liu u32 soc = SVR_SOC_VER(svr);
66a46b1852SShengzhou Liu
67a46b1852SShengzhou Liu
68a46b1852SShengzhou Liu switch (soc) {
69*73fb5838SYork Sun #ifdef CONFIG_ARCH_LS1021A
70a46b1852SShengzhou Liu case SOC_VER_LS1020:
71a46b1852SShengzhou Liu case SOC_VER_LS1021:
72a46b1852SShengzhou Liu case SOC_VER_LS1022:
73a46b1852SShengzhou Liu case SOC_VER_SLS1020:
74a46b1852SShengzhou Liu return IS_SVR_REV(svr, 1, 0);
75a46b1852SShengzhou Liu #endif
76a46b1852SShengzhou Liu #ifdef CONFIG_PPC
77a46b1852SShengzhou Liu case SVR_T1023:
78a46b1852SShengzhou Liu case SVR_T1024:
79a46b1852SShengzhou Liu return IS_SVR_REV(svr, 1, 0);
80a46b1852SShengzhou Liu case SVR_T1020:
81a46b1852SShengzhou Liu case SVR_T1022:
82a46b1852SShengzhou Liu case SVR_T1040:
83a46b1852SShengzhou Liu case SVR_T1042:
84a46b1852SShengzhou Liu return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
85a46b1852SShengzhou Liu #endif
86a46b1852SShengzhou Liu default:
87a46b1852SShengzhou Liu return false;
88a46b1852SShengzhou Liu }
89a46b1852SShengzhou Liu }
90a46b1852SShengzhou Liu #endif
91a46b1852SShengzhou Liu
92a07bdad7SShengzhou Liu #endif /* _FSL_ERRATA_H */
93