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