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) || 56f413d1caSSriram Dash IS_SVR_REV(svr, 1, 1) || 57f413d1caSSriram 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: 69f413d1caSSriram Dash return IS_SVR_REV(svr, 1, 0) || 70f413d1caSSriram 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 142*8545c541Sjerry.huang@nxp.com #ifdef ONFIG_ARM64 143*8545c541Sjerry.huang@nxp.com case SVR_LS1012A: 144*8545c541Sjerry.huang@nxp.com return IS_SVR_REV(svr, 1, 0); 145*8545c541Sjerry.huang@nxp.com #endif 14692623672SSriram Dash } 14792623672SSriram Dash return false; 14892623672SSriram Dash } 14992623672SSriram Dash 15092623672SSriram Dash bool has_erratum_a004477(void) 15192623672SSriram Dash { 15292623672SSriram Dash u32 svr = get_svr(); 15392623672SSriram Dash u32 soc = SVR_SOC_VER(svr); 15492623672SSriram Dash 15592623672SSriram Dash switch (soc) { 15692623672SSriram Dash #ifdef CONFIG_PPC 15792623672SSriram Dash case SVR_P1010: 15892623672SSriram Dash return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); 15992623672SSriram Dash case SVR_P1022: 16092623672SSriram Dash case SVR_9131: 16192623672SSriram Dash case SVR_9132: 16292623672SSriram Dash return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); 16392623672SSriram Dash case SVR_P2020: 16492623672SSriram Dash return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) || 16592623672SSriram Dash IS_SVR_REV(svr, 2, 1); 16692623672SSriram Dash case SVR_B4860: 16792623672SSriram Dash case SVR_B4420: 16892623672SSriram Dash return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); 16992623672SSriram Dash case SVR_P4080: 17092623672SSriram Dash return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0); 17192623672SSriram Dash #endif 17292623672SSriram Dash } 17392623672SSriram Dash 17492623672SSriram Dash return false; 17592623672SSriram Dash } 17692623672SSriram Dash 177ef53b8c4SSriram Dash bool has_erratum_a008751(void) 178ef53b8c4SSriram Dash { 179ef53b8c4SSriram Dash u32 svr = get_svr(); 180ef53b8c4SSriram Dash u32 soc = SVR_SOC_VER(svr); 181ef53b8c4SSriram Dash 182ef53b8c4SSriram Dash switch (soc) { 183ef53b8c4SSriram Dash #ifdef CONFIG_ARM64 18449cdce16SPrabhakar Kushwaha case SVR_LS2080A: 18549cdce16SPrabhakar Kushwaha case SVR_LS2085A: 186ef53b8c4SSriram Dash return IS_SVR_REV(svr, 1, 0); 187ef53b8c4SSriram Dash #endif 188ef53b8c4SSriram Dash } 189ef53b8c4SSriram Dash return false; 190ef53b8c4SSriram Dash } 191ef53b8c4SSriram Dash 1924c043712SSriram Dash bool has_erratum_a010151(void) 1934c043712SSriram Dash { 1944c043712SSriram Dash u32 svr = get_svr(); 1954c043712SSriram Dash u32 soc = SVR_SOC_VER(svr); 1964c043712SSriram Dash 1974c043712SSriram Dash switch (soc) { 1984c043712SSriram Dash #ifdef CONFIG_ARM64 1994c043712SSriram Dash case SVR_LS2080A: 2004c043712SSriram Dash case SVR_LS2085A: 2014c043712SSriram Dash case SVR_LS1046A: 2024c043712SSriram Dash case SVR_LS1012A: 2034c043712SSriram Dash return IS_SVR_REV(svr, 1, 0); 2044c043712SSriram Dash case SVR_LS1043A: 2054c043712SSriram Dash return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); 2064c043712SSriram Dash #endif 2074c043712SSriram Dash #ifdef CONFIG_LS102XA 2084c043712SSriram Dash case SOC_VER_LS1020: 2094c043712SSriram Dash case SOC_VER_LS1021: 2104c043712SSriram Dash case SOC_VER_LS1022: 2114c043712SSriram Dash case SOC_VER_SLS1020: 2124c043712SSriram Dash return IS_SVR_REV(svr, 2, 0); 2134c043712SSriram Dash #endif 2144c043712SSriram Dash } 2154c043712SSriram Dash return false; 2164c043712SSriram Dash } 2174c043712SSriram Dash 21892623672SSriram Dash #endif 219