@@ -3113,53 +3113,48 @@ def debug_dump_registers(self, option=None):
31133113 which would help diagnose the cable for proper functioning
31143114 """
31153115 if self .platform_chassis is not None :
3116- with self .rlock .acquire_timeout (RLocker .ACQUIRE_LOCK_TIMEOUT ) as lock_status :
3117- if lock_status :
3118- result = {}
3119- result ['pn' ] = self .get_part_number ()
3120- result ['sn' ] = self .get_serial_number ()
3121- result ['uart_stat' ] = self .get_uart_stat ()
3122- result ['nic_temp' ] = self .get_nic_temperature ()
3123- result ['nic_voltage' ] = self .get_nic_voltage ()
3124- result ['fw_init_status' ] = self .get_dsp_fw_init_stat ()
3125- result ['serdes_detect' ] = self .get_dsp_link_Dect ()
3126-
3127- lanes = [0 ,1 ,2 ,3 ,12 ,13 ,14 ,15 ,20 ,21 ,22 ,23 ]
3128-
3129- for ln in list (lanes ):
3130- data = self .get_serdes_params (ln )
3131- serdes = {}
3132- serdes ['ch_est' ] = struct .unpack_from ('<f' , data [ 4 : 8 ])[0 ]
3133- serdes ['of' ] = struct .unpack_from ('<H' , data [ 8 : 10 ])[0 ]
3134- serdes ['hf' ] = struct .unpack_from ('<H' , data [ 10 : 12 ])[0 ]
3135- serdes ['ctle1' ] = struct .unpack_from ('<H' , data [ 14 : 16 ])[0 ]
3136- serdes ['ctle2' ] = struct .unpack_from ('<H' , data [ 16 : 18 ])[0 ]
3137- serdes ['delta' ] = struct .unpack_from ('<h' , data [ 18 : 20 ])[0 ]
3138- serdes ['eye' ] = struct .unpack_from ('<H' , data [ 30 : 32 ])[0 ]
3139- serdes ['ppm' ] = struct .unpack_from ('<h' , data [ 40 : 42 ])[0 ]
3140- serdes ['adp_cnt' ] = struct .unpack_from ('<H' , data [ 56 : 58 ])[0 ]
3141- serdes ['adp_done' ] = struct .unpack_from ('<B' , data [ 58 : 59 ])[0 ]
3142- serdes ['agc_g1' ] = struct .unpack_from ('<H' , data [ 59 : 61 ])[0 ]
3143- serdes ['agc_g2' ] = struct .unpack_from ('<H' , data [ 61 : 63 ])[0 ]
3144- serdes ['exit_code' ] = struct .unpack_from ('<H' , data [112 :114 ])[0 ]
3145- serdes ['pll_tx' ] = struct .unpack_from ('<H' , data [ 42 : 44 ])[0 ]
3146- serdes ['pll_rx' ] = struct .unpack_from ('<H' , data [ 44 : 46 ])[0 ]
3147- serdes ['f1' ] = struct .unpack_from ('<h' , data [ 46 : 48 ])[0 ]
3148- serdes ['f2' ] = struct .unpack_from ('<h' , data [ 48 : 50 ])[0 ]
3149- serdes ['f3' ] = struct .unpack_from ('<h' , data [ 50 : 52 ])[0 ]
3150- serdes ['temp' ] = struct .unpack_from ('<b' , data [111 :112 ])[0 ]
3151-
3152- result ['serde_lane_%d' % ln ] = serdes
3153- else :
3154- self .log_error ('acquire lock timeout, failed to dump registers' )
3155- return YCable .EEPROM_ERROR
3116+ result = {}
3117+ result ['pn' ] = self .get_part_number ()
3118+ result ['sn' ] = self .get_serial_number ()
3119+ result ['uart_stat' ] = self .get_uart_stat ()
3120+ result ['nic_temp' ] = self .get_nic_temperature ()
3121+ result ['nic_voltage' ] = self .get_nic_voltage ()
3122+ result ['fw_init_status' ] = self .get_dsp_fw_init_stat ()
3123+ result ['serdes_detect' ] = self .get_dsp_link_detect ()
3124+
3125+ lanes = [0 ,1 ,2 ,3 ,12 ,13 ,14 ,15 ,20 ,21 ,22 ,23 ]
3126+
3127+ for ln in list (lanes ):
3128+ data = self .get_serdes_params (ln )
3129+ serdes = {}
3130+ serdes ['ch_est' ] = struct .unpack_from ('<f' , data [ 4 : 8 ])[0 ]
3131+ serdes ['of' ] = struct .unpack_from ('<H' , data [ 8 : 10 ])[0 ]
3132+ serdes ['hf' ] = struct .unpack_from ('<H' , data [ 10 : 12 ])[0 ]
3133+ serdes ['ctle1' ] = struct .unpack_from ('<H' , data [ 14 : 16 ])[0 ]
3134+ serdes ['ctle2' ] = struct .unpack_from ('<H' , data [ 16 : 18 ])[0 ]
3135+ serdes ['delta' ] = struct .unpack_from ('<h' , data [ 18 : 20 ])[0 ]
3136+ serdes ['eye' ] = struct .unpack_from ('<H' , data [ 30 : 32 ])[0 ]
3137+ serdes ['ppm' ] = struct .unpack_from ('<h' , data [ 40 : 42 ])[0 ]
3138+ serdes ['adp_cnt' ] = struct .unpack_from ('<H' , data [ 56 : 58 ])[0 ]
3139+ serdes ['adp_done' ] = struct .unpack_from ('<B' , data [ 58 : 59 ])[0 ]
3140+ serdes ['agc_g1' ] = struct .unpack_from ('<H' , data [ 59 : 61 ])[0 ]
3141+ serdes ['agc_g2' ] = struct .unpack_from ('<H' , data [ 61 : 63 ])[0 ]
3142+ serdes ['exit_code' ] = struct .unpack_from ('<H' , data [112 :114 ])[0 ]
3143+ serdes ['pll_tx' ] = struct .unpack_from ('<H' , data [ 42 : 44 ])[0 ]
3144+ serdes ['pll_rx' ] = struct .unpack_from ('<H' , data [ 44 : 46 ])[0 ]
3145+ serdes ['f1' ] = struct .unpack_from ('<h' , data [ 46 : 48 ])[0 ]
3146+ serdes ['f2' ] = struct .unpack_from ('<h' , data [ 48 : 50 ])[0 ]
3147+ serdes ['f3' ] = struct .unpack_from ('<h' , data [ 50 : 52 ])[0 ]
3148+ serdes ['temp' ] = struct .unpack_from ('<b' , data [111 :112 ])[0 ]
3149+
3150+ result ['serde_lane_%d' % ln ] = serdes
31563151 else :
31573152 self .log_error ("platform_chassis is not loaded, failed to dump registers" )
31583153 return YCable .EEPROM_ERROR
31593154
31603155 return result
31613156
3162- def get_dsp_link_Dect (self ):
3157+ def get_dsp_link_detect (self ):
31633158 """
31643159 This API returns rdy/sd of DSP.
31653160 The port on which this API is called for can be referred using self.port.
@@ -3197,20 +3192,24 @@ def get_dsp_fw_init_stat(self):
31973192 """
31983193
31993194 if self .platform_chassis is not None :
3200- result = {}
3201-
3202- vsc_req_form = [None ] * (YCable .VSC_CMD_ATTRIBUTE_LENGTH )
3203- vsc_req_form [YCable .VSC_BYTE_OPCODE ] = YCable .VSC_OPCODE_DSP_LOADFW_STAT
3204- status = self .send_vsc (vsc_req_form )
3205- if status != YCable .MCU_EC_NO_ERROR :
3206- self .log_error ('Get DSP firmware init status error (error code:0x%04X)' % (status ))
3207- return result
3195+ with self .rlock .acquire_timeout (RLocker .ACQUIRE_LOCK_TIMEOUT ) as lock_status :
3196+ if lock_status :
3197+ result = {}
32083198
3209- result ['err_code' ] = self .read_mmap (YCable .MIS_PAGE_VSC , 134 )
3210- result ['err_stat' ] = self .read_mmap (YCable .MIS_PAGE_VSC , 135 )
3199+ vsc_req_form = [None ] * (YCable .VSC_CMD_ATTRIBUTE_LENGTH )
3200+ vsc_req_form [YCable .VSC_BYTE_OPCODE ] = YCable .VSC_OPCODE_DSP_LOADFW_STAT
3201+ status = self .send_vsc (vsc_req_form )
3202+ if status != YCable .MCU_EC_NO_ERROR :
3203+ self .log_error ('Get DSP firmware init status error (error code:0x%04X)' % (status ))
3204+ return result
32113205
3206+ result ['err_code' ] = self .read_mmap (YCable .MIS_PAGE_VSC , 134 )
3207+ result ['err_stat' ] = self .read_mmap (YCable .MIS_PAGE_VSC , 135 )
3208+ else :
3209+ self .log_error ('acquire lock timeout, failed to get init status' )
3210+ return YCable .EEPROM_ERROR
32123211 else :
3213- self .log_error ("platform_chassis is not loaded, failed to get init. status of DSP firmware " )
3212+ self .log_error ("platform_chassis is not loaded, failed to get init status" )
32143213
32153214 return result
32163215
@@ -3229,34 +3228,38 @@ def get_uart_stat(self):
32293228 uartPort = {}
32303229 result = {}
32313230
3232- for option in range (2 ):
3233- vsc_req_form = [None ] * (YCable .VSC_CMD_ATTRIBUTE_LENGTH )
3234- vsc_req_form [YCable .VSC_BYTE_OPCODE ] = YCable .VSC_OPCODE_UART_STAT
3235- vsc_req_form [YCable .VSC_BYTE_OPTION ] = option
3236- status = self .send_vsc (vsc_req_form )
3237- if status != YCable .MCU_EC_NO_ERROR :
3238- self .log_error ('Dump Uart statstics error (error code:0x%04X)' % (status ))
3239- return result
3240-
3241- addr = 128
3242-
3243- for idx in range (1 , 3 ):
3244- cnt ['TxPktCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3245- addr += 4
3246- cnt ['RxPktCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3247- addr += 4
3248- cnt ['AckCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3249- addr += 4
3250- cnt ['NackCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3251- addr += 4
3252- cnt ['TxRetryCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3253- addr += 4
3254- cnt ['TxAbortCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3255- addr += 4
3256- uartPort ['UART%d' % idx ] = cnt
3257- if option == 0 : result ['Local' ] = uartPort
3258- else : result ['Remote' ] = uartPort
3259-
3231+ with self .rlock .acquire_timeout (RLocker .ACQUIRE_LOCK_TIMEOUT ) as lock_status :
3232+ if lock_status :
3233+ for option in range (2 ):
3234+ vsc_req_form = [None ] * (YCable .VSC_CMD_ATTRIBUTE_LENGTH )
3235+ vsc_req_form [YCable .VSC_BYTE_OPCODE ] = YCable .VSC_OPCODE_UART_STAT
3236+ vsc_req_form [YCable .VSC_BYTE_OPTION ] = option
3237+ status = self .send_vsc (vsc_req_form )
3238+ if status != YCable .MCU_EC_NO_ERROR :
3239+ self .log_error ('Dump Uart statstics error (error code:0x%04X)' % (status ))
3240+ return result
3241+
3242+ addr = 128
3243+
3244+ for idx in range (1 , 3 ):
3245+ cnt ['TxPktCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3246+ addr += 4
3247+ cnt ['RxPktCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3248+ addr += 4
3249+ cnt ['AckCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3250+ addr += 4
3251+ cnt ['NackCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3252+ addr += 4
3253+ cnt ['TxRetryCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3254+ addr += 4
3255+ cnt ['TxAbortCnt' ] = (self .read_mmap (YCable .MIS_PAGE_FC , addr + 3 ) << 24 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 2 ) << 16 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 1 ) << 8 ) | (self .read_mmap (YCable .MIS_PAGE_FC , addr + 0 ) << 0 )
3256+ addr += 4
3257+ uartPort ['UART%d' % idx ] = cnt
3258+ if option == 0 : result ['Local' ] = uartPort
3259+ else : result ['Remote' ] = uartPort
3260+ else :
3261+ self .log_error ('acquire lock timeout, failed to get uart statistics' )
3262+ return YCable .EEPROM_ERROR
32603263 else :
32613264 self .log_error ("platform_chassis is not loaded, failed to get Uart statstics" )
32623265
@@ -3276,20 +3279,25 @@ def get_serdes_params(self, lane):
32763279 raw data of serdes information
32773280 """
32783281 if self .platform_chassis is not None :
3279- ln = lane
3282+ with self .rlock .acquire_timeout (RLocker .ACQUIRE_LOCK_TIMEOUT ) as lock_status :
3283+ if lock_status :
3284+ ln = lane
32803285
3281- result = {}
3282- vsc_req_form = [None ] * (YCable .VSC_CMD_ATTRIBUTE_LENGTH )
3283- vsc_req_form [YCable .VSC_BYTE_OPCODE ] = YCable .VSC_OPCODE_SERDES_INFO
3284- vsc_req_form [YCable .VSC_BYTE_OPTION ] = 0
3285- vsc_req_form [YCable .VSC_BYTE_ADDR0 ] = ln & 0xFF
3286- vsc_req_form [YCable .VSC_BYTE_DATA0 ] = 1
3287- status = self .send_vsc (vsc_req_form )
3288- if status != YCable .MCU_EC_NO_ERROR :
3289- self .log_error ('Dump Serdes Info error (error code:0x%04X)' % (status ))
3290- return result
3291-
3292- result = self .read_mmap (YCable .MIS_PAGE_FC , 128 , 128 )
3286+ result = {}
3287+ vsc_req_form = [None ] * (YCable .VSC_CMD_ATTRIBUTE_LENGTH )
3288+ vsc_req_form [YCable .VSC_BYTE_OPCODE ] = YCable .VSC_OPCODE_SERDES_INFO
3289+ vsc_req_form [YCable .VSC_BYTE_OPTION ] = 0
3290+ vsc_req_form [YCable .VSC_BYTE_ADDR0 ] = ln & 0xFF
3291+ vsc_req_form [YCable .VSC_BYTE_DATA0 ] = 1
3292+ status = self .send_vsc (vsc_req_form )
3293+ if status != YCable .MCU_EC_NO_ERROR :
3294+ self .log_error ('Dump Serdes Info error (error code:0x%04X)' % (status ))
3295+ return result
3296+
3297+ result = self .read_mmap (YCable .MIS_PAGE_FC , 128 , 128 )
3298+ else :
3299+ self .log_error ('acquire lock timeout, failed to get serdes param' )
3300+ return YCable .EEPROM_ERROR
32933301 else :
32943302 self .log_error ("platform_chassis is not loaded, failed to get serdes params" )
32953303
0 commit comments