phyecd.c (18726B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * File: phyecd.c 8 * Purpose: PHY ECD routines 9 */ 10 11 #include <sal/core/thread.h> 12 #include <soc/drv.h> 13 #include <soc/debug.h> 14 #include <soc/phy/phyctrl.h> 15 #include <shared/bsl.h> 16 #include "phyreg.h" 17 18 int phy_ecd_cable_diag_init(int l1,soc_port_t l2){phy_ctrl_t*l3;uint16 l4;l3 = 19 EXT_PHY_SW_STATE(l1,l2);SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 20 0x0f00|((0xc0)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 21 ),(l3),0x00,0x0f00|((0xc7)&0xff),0x15,(0xa01a)));SOC_IF_ERROR_RETURN( 22 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc8)&0xff),0x15,(0x0100))); 23 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc9)&0xff),0x15 24 ,(0x00ef)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcc 25 )&0xff),0x15,(0x0180)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 26 0x0f00|((0xce)&0xff),0x15,(0x4000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 27 ),(l3),0x00,0x0f00|((0xcf)&0xff),0x15,(0x4000)));SOC_IF_ERROR_RETURN( 28 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe0)&0xff),0x15,(0x0a00))); 29 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe1)&0xff),0x15 30 ,(0x0c0e)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe2 31 )&0xff),0x15,(0x0004)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 32 0x0f00|((0xe3)&0xff),0x15,(0x5000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 33 ),(l3),0x00,0x0f00|((0xe4)&0xff),0x15,(0x70cc)));SOC_IF_ERROR_RETURN( 34 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe7)&0xff),0x15,(0x00a0))); 35 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xef)&0xff),0x15 36 ,(0x409f)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd 37 )&0xff),0x15,(0x1000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 38 0x0f00|((0xcd)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 39 ),(l3),0x00,0x0f00|((0xe4)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN( 40 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe7)&0xff),0x15,(0x0000))); 41 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xef)&0xff),0x15 42 ,(0x8007)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd 43 )&0xff),0x15,(0x1000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 44 0x0f00|((0xcd)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 45 ),(l3),0x00,0x0f00|((0xef)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN( 46 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe0)&0xff),0x15,(0x00e0))); 47 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe1)&0xff),0x15 48 ,(0x0501)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe2 49 )&0xff),0x15,(0x0c06)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 50 0x0f00|((0xe3)&0xff),0x15,(0x0c06)));SOC_IF_ERROR_RETURN(phy_reg_ge_read((l1) 51 ,(l3),0x00,0x0f00|((0xc0)&0xff),0x15,(&l4)));SOC_IF_ERROR_RETURN( 52 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc0)&0xff),0x15,(0x4000)));return 53 SOC_E_NONE;}static int l5(int l1,phy_ctrl_t*l3,uint16 l6[]){ 54 SOC_IF_ERROR_RETURN(phy_reg_ge_read((l1),(l3),0x00,0x0f00|((0xc0)&0xff),0x15, 55 (&l6[0])));SOC_IF_ERROR_RETURN(phy_reg_ge_read((l1),(l3),0x00,0x0f00|((0xc1)& 56 0xff),0x15,(&l6[1])));SOC_IF_ERROR_RETURN(phy_reg_ge_read((l1),(l3),0x00, 57 0x0f00|((0xc2)&0xff),0x15,(&l6[2])));SOC_IF_ERROR_RETURN(phy_reg_ge_read((l1) 58 ,(l3),0x00,0x0f00|((0xc3)&0xff),0x15,(&l6[3])));SOC_IF_ERROR_RETURN( 59 phy_reg_ge_read((l1),(l3),0x00,0x0f00|((0xc4)&0xff),0x15,(&l6[4]))); 60 SOC_IF_ERROR_RETURN(phy_reg_ge_read((l1),(l3),0x00,0x0f00|((0xc5)&0xff),0x15, 61 (&l6[5])));return SOC_E_NONE;}int phy_ecd_cable_diag(int l1,soc_port_t l2, 62 soc_port_cable_diag_t*l7){phy_ctrl_t*l3;uint16 l8,l9;uint16 l10,l11;uint16 l12 63 [6];uint16 l13;l3 = EXT_PHY_SW_STATE(l1,l2);l9 = 0;l13 = 0; 64 SOC_IF_ERROR_RETURN(READ_PHY_REG(l1,l3,0x1,&l10));SOC_IF_ERROR_RETURN( 65 READ_PHY_REG(l1,l3,0x1,&l10));sal_usleep(10000);SOC_IF_ERROR_RETURN( 66 READ_PHY_REG(l1,l3,0x1,&l11));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3), 67 0x00,0x0f00|((0xc0)&0xff),0x15,(0x0000)));for(l8 = 0;l8<300;l8++){ 68 SOC_IF_ERROR_RETURN(l5(l1,l3,l12));if(l12[0]&0x4){l13 = 1;}if(!(l12[0]&0x0800 69 )){break;}}if(l8>300){l9|= 0x0002;}if(!(((l10&l11&0x0004)!= 0)&&(l13 == 1))){ 70 l13 = 0;SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc0)& 71 0xff),0x15,(0x9000)));for(l8 = 0;l8<300;l8++){SOC_IF_ERROR_RETURN(l5(l1,l3, 72 l12));if(!(l12[0]&0x0800)){break;}}if(l8>300){l9|= 0x0001;}if(((l12[1]&0xf000 73 ) == 0x9000)||((l12[1]&0x0f00) == 0x0900)||((l12[1]&0x00f0) == 0x0090)||((l12 74 [1]&0x000f) == 0x0009)){SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 75 0x0f00|((0xe7)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 76 ),(l3),0x00,0x0f00|((0xef)&0xff),0x15,(0x4080)));SOC_IF_ERROR_RETURN( 77 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd)&0xff),0x15,(0x1000))); 78 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd)&0xff),0x15 79 ,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc0 80 )&0xff),0x15,(0x9000)));l13 = 0;for(l8 = 0;l8<300;l8++){SOC_IF_ERROR_RETURN( 81 l5(l1,l3,l12));if(l12[0]&0x4){l13 = 1;}if(!(l12[0]&0x0800)){break;}}if(l8>300 82 ){l9|= 0x0001;}if(!l13){l9|= 0x0008;}SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 83 ),(l3),0x00,0x0f00|((0xe7)&0xff),0x15,(0x00a0)));SOC_IF_ERROR_RETURN( 84 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xef)&0xff),0x15,(0x4080))); 85 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd)&0xff),0x15 86 ,(0x1000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd 87 )&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 88 0x0f00|((0xe7)&0xff),0x15,(0x0000)));}}if(l9){return SOC_E_UNAVAIL;} 89 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc0)&0xff),0x15 90 ,(0x4000)));l7->npairs = 4;l7->fuzz_len = 10;switch((l12[1]>>12)&0x000f){case 91 1:l7->pair_state[0] = SOC_PORT_CABLE_STATE_OK;l7->pair_len[0] = l12[2]/100; 92 break;case 2:l7->pair_state[0] = SOC_PORT_CABLE_STATE_OPEN;l7->pair_len[0] = 93 l12[2]/100;break;case 3:l7->pair_state[0] = SOC_PORT_CABLE_STATE_SHORT;l7-> 94 pair_len[0] = l12[2]/100;break;case 4:l7->pair_state[0] = 95 SOC_PORT_CABLE_STATE_CROSSTALK;l7->pair_len[0] = l12[2]/100;break;default:l7 96 ->pair_state[0] = SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[0] = 0;break;} 97 switch((l12[1]>>8)&0x000f){case 1:l7->pair_state[1] = SOC_PORT_CABLE_STATE_OK 98 ;l7->pair_len[1] = l12[3]/100;break;case 2:l7->pair_state[1] = 99 SOC_PORT_CABLE_STATE_OPEN;l7->pair_len[1] = l12[3]/100;break;case 3:l7-> 100 pair_state[1] = SOC_PORT_CABLE_STATE_SHORT;l7->pair_len[1] = l12[3]/100;break 101 ;case 4:l7->pair_state[1] = SOC_PORT_CABLE_STATE_CROSSTALK;l7->pair_len[1] = 102 l12[3]/100;break;default:l7->pair_state[1] = SOC_PORT_CABLE_STATE_UNKNOWN;l7 103 ->pair_len[1] = 0;break;}switch((l12[1]>>4)&0x000f){case 1:l7->pair_state[2] = 104 SOC_PORT_CABLE_STATE_OK;l7->pair_len[2] = l12[4]/100;break;case 2:l7-> 105 pair_state[2] = SOC_PORT_CABLE_STATE_OPEN;l7->pair_len[2] = l12[4]/100;break; 106 case 3:l7->pair_state[2] = SOC_PORT_CABLE_STATE_SHORT;l7->pair_len[2] = l12[4 107 ]/100;break;case 4:l7->pair_state[2] = SOC_PORT_CABLE_STATE_CROSSTALK;l7-> 108 pair_len[2] = l12[4]/100;break;default:l7->pair_state[2] = 109 SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[2] = 0;break;}switch((l12[1]>>0)& 110 0x000f){case 1:l7->pair_state[3] = SOC_PORT_CABLE_STATE_OK;l7->pair_len[3] = 111 l12[5]/100;break;case 2:l7->pair_state[3] = SOC_PORT_CABLE_STATE_OPEN;l7-> 112 pair_len[3] = l12[5]/100;break;case 3:l7->pair_state[3] = 113 SOC_PORT_CABLE_STATE_SHORT;l7->pair_len[3] = l12[5]/100;break;case 4:l7-> 114 pair_state[3] = SOC_PORT_CABLE_STATE_CROSSTALK;l7->pair_len[3] = l12[5]/100; 115 break;default:l7->pair_state[3] = SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[3 116 ] = 0;break;}return SOC_E_NONE;}int phy_ecd_cable_diag_run_40nm(int l1, 117 soc_port_t l2,soc_port_cable_diag_t*l7,uint16 l14){phy_ctrl_t*l3;uint16 l8,l9 118 ;uint16 l10,l11;uint16 l12[6];uint16 l13,l15 = 0;l3 = EXT_PHY_SW_STATE(l1,l2) 119 ;l9 = 0;l13 = 0;SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|(( 120 0xc0)&0xff),0x15,(l14&0x3fff)));SOC_IF_ERROR_RETURN(READ_PHY_REG(l1,l3,0x1,& 121 l10));SOC_IF_ERROR_RETURN(READ_PHY_REG(l1,l3,0x1,&l10));sal_usleep(10000); 122 SOC_IF_ERROR_RETURN(READ_PHY_REG(l1,l3,0x1,&l11));SOC_IF_ERROR_RETURN(l5(l1, 123 l3,l12));if(l12[0]&0x0800){l9|= 0x0002;SOC_IF_ERROR_RETURN(phy_reg_ge_write(( 124 l1),(l3),0x00,0x0f00|((0xc0)&0xff),0x15,(l14&0x7fff)));LOG_VERBOSE( 125 BSL_LS_SOC_PHY,(BSL_META( 126 "\t->ECD engine still busy during intial flush! (u=%d p=%d) \n"),l1,l2));l13 = 127 0;return SOC_E_FAIL;}if((((l10&l11&0x0004)!= 0)&&((l14&0x1000) == 0))){if(l12 128 [0]&0x4){l13 = 1;}else{l13 = 0;}}else{SOC_IF_ERROR_RETURN(WRITE_PHY_REG(l1,l3 129 ,0x18,0x0C00));SOC_IF_ERROR_RETURN(WRITE_PHY_REG(l1,l3,0x17,0x4030)); 130 SOC_IF_ERROR_RETURN(WRITE_PHY_REG(l1,l3,0x15,0x1072));SOC_IF_ERROR_RETURN( 131 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xFB)&0xff),0x15,(0x7C00))); 132 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xFF)&0xff),0x15 133 ,(0x5F0F)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xFF 134 )&0xff),0x15,(0x5000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 135 0x0f00|((0xFB)&0xff),0x15,(0x4000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 136 ),(l3),0x00,0x0f00|((0xc0)&0xff),0x15,(l14|0x8000)));l13 = 0;for(l8 = 0;l8< 137 3000;l8++){SOC_IF_ERROR_RETURN(l5(l1,l3,l12));if(l12[0]&0x4){l13 = 1;}if(!( 138 l12[0]&0x0800)){l15 = 1;break;}sal_usleep(1000);}if((l8>= 3000)||(l15 == 0)){ 139 l9|= 0x0001;}SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|(( 140 0xFB)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3), 141 0x00,0x0f00|((0xFF)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(WRITE_PHY_REG( 142 l1,l3,0x17,0x4030));SOC_IF_ERROR_RETURN(WRITE_PHY_REG(l1,l3,0x15,0x1872)); 143 SOC_IF_ERROR_RETURN(WRITE_PHY_REG(l1,l3,0x18,0x0400));SOC_IF_ERROR_RETURN( 144 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc0)&0xff),0x15,(l14&0x7FFF)));}if( 145 l13 == 0){l9|= 0x0008;}if(l12[0]&0x8){l9|= 0x0004;}if(l9){if(l9&0x0001){ 146 LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META( 147 "\t->ECD on demand not done - busy time out! (u:%d p:%d) \n"),l1,l2));}if(l9& 148 0x0008){LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META( 149 "\t->ECD no fresh result! (u:%d p:%d)\n"),l1,l2));}if(l9&0x0004){LOG_VERBOSE( 150 BSL_LS_SOC_PHY,(BSL_META("\t->ECD result invalid! (u:%d p:%d)\n"),l1,l2));}} 151 if((l12[2] == 0x47AE)||(l12[3] == 0x47AE)||(l12[4] == 0x47AE)||(l12[5] == 152 0x47AE)){LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META( 153 "\t->ECD failure type 183! (u:%d p:%d)\n"),l1,l2));}if((l9&0xff)||((l12[2] == 154 0x47AE)||(l12[3] == 0x47AE)||(l12[4] == 0x47AE)||(l12[5] == 0x47AE))){ 155 LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META("\t->EXP_C[0]: %x\n"),l12[0])); 156 LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META("\t->EXP_C[1]: %x\n"),l12[1])); 157 LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META("\t->EXP_C[2]: %x\n"),l12[2])); 158 LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META("\t->EXP_C[3]: %x\n"),l12[3])); 159 LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META("\t->EXP_C[4]: %x\n"),l12[4])); 160 LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META("\t->EXP_C[5]: %x\n"),l12[5]));l7-> 161 pair_state[0] = SOC_PORT_CABLE_STATE_UNKNOWN;return SOC_E_FAIL;}l7->npairs = 162 4;l7->fuzz_len = 10;l7->state = SOC_PORT_CABLE_STATE_OK;switch((l12[1]>>12)& 163 0x000f){case 1:l7->pair_state[0] = SOC_PORT_CABLE_STATE_OK;l7->pair_len[0] = 164 l12[2]/100;break;case 2:l7->pair_state[0] = SOC_PORT_CABLE_STATE_OPEN;l7-> 165 pair_len[0] = l12[2]/100;break;case 3:l7->pair_state[0] = 166 SOC_PORT_CABLE_STATE_SHORT;l7->pair_len[0] = l12[2]/100;break;case 4:l7-> 167 pair_state[0] = SOC_PORT_CABLE_STATE_CROSSTALK;l7->pair_len[0] = l12[2]/100; 168 break;case 9:LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META( 169 "\t->Cabel Diag (40nm) pair A: u=%d p=%d\n, " 170 "Persistent noise present on MDI\n"),l1,l2));l7->pair_state[0] = 171 SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[0] = 0;break;default:l7->pair_state 172 [0] = SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[0] = 0;break;}switch((l12[1] 173 >>8)&0x000f){case 1:l7->pair_state[1] = SOC_PORT_CABLE_STATE_OK;l7->pair_len[ 174 1] = l12[3]/100;break;case 2:l7->pair_state[1] = SOC_PORT_CABLE_STATE_OPEN;l7 175 ->pair_len[1] = l12[3]/100;break;case 3:l7->pair_state[1] = 176 SOC_PORT_CABLE_STATE_SHORT;l7->pair_len[1] = l12[3]/100;break;case 4:l7-> 177 pair_state[1] = SOC_PORT_CABLE_STATE_CROSSTALK;l7->pair_len[1] = l12[3]/100; 178 break;case 9:LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META( 179 "\t->Cabel Diag (40nm) pair B: u=%d p=%d\n, " 180 "Persistent noise present on MDI\n"),l1,l2));l7->pair_state[0] = 181 SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[0] = 0;break;default:l7->pair_state 182 [1] = SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[1] = 0;break;}switch((l12[1] 183 >>4)&0x000f){case 1:l7->pair_state[2] = SOC_PORT_CABLE_STATE_OK;l7->pair_len[ 184 2] = l12[4]/100;break;case 2:l7->pair_state[2] = SOC_PORT_CABLE_STATE_OPEN;l7 185 ->pair_len[2] = l12[4]/100;break;case 3:l7->pair_state[2] = 186 SOC_PORT_CABLE_STATE_SHORT;l7->pair_len[2] = l12[4]/100;break;case 4:l7-> 187 pair_state[2] = SOC_PORT_CABLE_STATE_CROSSTALK;l7->pair_len[2] = l12[4]/100; 188 break;case 9:LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META( 189 "\t->Cabel Diag (40nm) pair C: u=%d p=%d\n, " 190 "Persistent noise present on MDI\n"),l1,l2));l7->pair_state[0] = 191 SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[0] = 0;break;default:l7->pair_state 192 [2] = SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[2] = 0;break;}switch((l12[1] 193 >>0)&0x000f){case 1:l7->pair_state[3] = SOC_PORT_CABLE_STATE_OK;l7->pair_len[ 194 3] = l12[5]/100;break;case 2:l7->pair_state[3] = SOC_PORT_CABLE_STATE_OPEN;l7 195 ->pair_len[3] = l12[5]/100;break;case 3:l7->pair_state[3] = 196 SOC_PORT_CABLE_STATE_SHORT;l7->pair_len[3] = l12[5]/100;break;case 4:l7-> 197 pair_state[3] = SOC_PORT_CABLE_STATE_CROSSTALK;l7->pair_len[3] = l12[5]/100; 198 break;case 9:LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META( 199 "\t->Cabel Diag (40nm) pair D: u=%d p=%d\n, " 200 "Persistent noise present on MDI\n"),l1,l2));l7->pair_state[0] = 201 SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[0] = 0;break;default:l7->pair_state 202 [3] = SOC_PORT_CABLE_STATE_UNKNOWN;l7->pair_len[3] = 0;break;}return 203 SOC_E_NONE;}int phy_ecd_cable_diag_40nm(int l1,soc_port_t l2, 204 soc_port_cable_diag_t*l7,uint16 l14){unsigned int l16 = 1;int l17 = 205 SOC_E_FAIL;do{LOG_VERBOSE(BSL_LS_SOC_PHY,(BSL_META( 206 "Cable diag 40nm run (attempt %d)\n"),l16));l17 = phy_ecd_cable_diag_run_40nm 207 (l1,l2,l7,l14);if(l17 == SOC_E_NONE){break;}}while(l16++<30);return l17;}int 208 phy_ecd_cable_diag_init_40nm(int l1,soc_port_t l2){phy_ctrl_t*l3;uint16 l4;l3 209 = EXT_PHY_SW_STATE(l1,l2);SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00 210 ,0x0f00|((0xc0)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write(( 211 l1),(l3),0x00,0x0f00|((0xc7)&0xff),0x15,(0xa01a)));SOC_IF_ERROR_RETURN( 212 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc8)&0xff),0x15,(0x0300))); 213 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc9)&0xff),0x15 214 ,(0x00ef)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcb 215 )&0xff),0x15,(0x1304)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 216 0x0f00|((0xcc)&0xff),0x15,(0x0180)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 217 ),(l3),0x00,0x0f00|((0xce)&0xff),0x15,(0x4000)));SOC_IF_ERROR_RETURN( 218 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcf)&0xff),0x15,(0x3000))); 219 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe0)&0xff),0x15 220 ,(0x0119)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe1 221 )&0xff),0x15,(0x0202)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 222 0x0f00|((0xe2)&0xff),0x15,(0x000F)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 223 ),(l3),0x00,0x0f00|((0xe3)&0xff),0x15,(0x5000)));SOC_IF_ERROR_RETURN( 224 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe4)&0xff),0x15,(0x738E))); 225 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe5)&0xff),0x15 226 ,(0x1000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe6 227 )&0xff),0x15,(0x1000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 228 0x0f00|((0xe7)&0xff),0x15,(0xAA00)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 229 ),(l3),0x00,0x0f00|((0xef)&0xff),0x15,(0x40ff)));SOC_IF_ERROR_RETURN( 230 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd)&0xff),0x15,(0x1000))); 231 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd)&0xff),0x15 232 ,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe0 233 )&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 234 0x0f00|((0xe1)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 235 ),(l3),0x00,0x0f00|((0xe2)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN( 236 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe3)&0xff),0x15,(0x0000))); 237 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe4)&0xff),0x15 238 ,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe5 239 )&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 240 0x0f00|((0xe6)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 241 ),(l3),0x00,0x0f00|((0xe7)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN( 242 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xef)&0xff),0x15,(0x0000))); 243 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe0)&0xff),0x15 244 ,(0x0b00)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe1 245 )&0xff),0x15,(0x313d)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 246 0x0f00|((0xe2)&0xff),0x15,(0x007c)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 247 ),(l3),0x00,0x0f00|((0xef)&0xff),0x15,(0x8007)));SOC_IF_ERROR_RETURN( 248 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd)&0xff),0x15,(0x1000))); 249 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xcd)&0xff),0x15 250 ,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe0 251 )&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 252 0x0f00|((0xe1)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 253 ),(l3),0x00,0x0f00|((0xe2)&0xff),0x15,(0x0000)));SOC_IF_ERROR_RETURN( 254 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xef)&0xff),0x15,(0x0000))); 255 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe0)&0xff),0x15 256 ,(0x0001)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe1 257 )&0xff),0x15,(0x0540)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 258 0x0f00|((0xe2)&0xff),0x15,(0x0e40)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 259 ),(l3),0x00,0x0f00|((0xe3)&0xff),0x15,(0x0841)));SOC_IF_ERROR_RETURN( 260 phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe4)&0xff),0x15,(0x1344))); 261 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe8)&0xff),0x15 262 ,(0x8760)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xe9 263 )&0xff),0x15,(0x4b33)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00, 264 0x0f00|((0xea)&0xff),0x15,(0x0400)));SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1 265 ),(l3),0x00,0x0f00|((0xCD)&0xff),0x15,(0x00D0)));SOC_IF_ERROR_RETURN( 266 phy_reg_ge_read((l1),(l3),0x00,0x0f00|((0xc0)&0xff),0x15,(&l4))); 267 SOC_IF_ERROR_RETURN(phy_reg_ge_write((l1),(l3),0x00,0x0f00|((0xc0)&0xff),0x15 268 ,(0x4000)));return SOC_E_NONE;}