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