Skip to content

Commit 030a382

Browse files
authored
[Credo][Ycable] fix incorrect uart statistics (#296)
Description The original get_uart_stat() will only report the last record of the uart statistic due to all record shared the same object instance. Motivation and Context How Has This Been Tested? Signed-off-by: xinyu <[email protected]>
1 parent bd6574a commit 030a382

File tree

1 file changed

+32
-19
lines changed

1 file changed

+32
-19
lines changed

sonic_y_cable/credo/y_cable_credo.py

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3153,8 +3153,7 @@ def get_uart_stat(self):
31533153
"""
31543154

31553155
if self.platform_chassis is not None:
3156-
cnt = {}
3157-
uartPort = {}
3156+
31583157
result = {}
31593158

31603159
for option in range(2):
@@ -3166,27 +3165,41 @@ def get_uart_stat(self):
31663165
self.log_error('Dump Uart statstics error (error code:0x%04X)' % (status))
31673166
return result
31683167

3169-
addr = 128
3170-
3171-
for idx in range(1, 3):
3172-
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)
3173-
addr += 4
3174-
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)
3175-
addr += 4
3176-
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)
3177-
addr += 4
3178-
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)
3179-
addr += 4
3180-
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)
3181-
addr += 4
3182-
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)
3183-
addr += 4
3184-
uartPort['UART%d' % idx] = cnt
3168+
data = self.read_mmap(YCable.MIS_PAGE_FC, 128, 64)
3169+
ver = self.read_mmap(YCable.MIS_PAGE_VSC, 130, 1)
3170+
3171+
uartPort = {}
3172+
cnt = {}
3173+
cnt['TxPktCnt'] = struct.unpack_from('<I', data[ 0 : 4])[0]
3174+
cnt['RxPktCnt'] = struct.unpack_from('<I', data[ 4 : 8])[0]
3175+
cnt['AckCnt'] = struct.unpack_from('<I', data[ 8 : 12])[0]
3176+
cnt['NackCnt'] = struct.unpack_from('<I', data[ 12 : 16])[0]
3177+
cnt['TxRetryCnt'] = struct.unpack_from('<I', data[ 16 : 20])[0]
3178+
cnt['TxAbortCnt'] = struct.unpack_from('<I', data[ 20 : 24])[0]
3179+
3180+
if ver == 1:
3181+
cnt['RxErrorCnt'] = struct.unpack_from('<I', data[ 48 : 52])[0]
3182+
3183+
uartPort['UART1'] = cnt
3184+
3185+
cnt = {}
3186+
cnt['TxPktCnt'] = struct.unpack_from('<I', data[ 24 : 28])[0]
3187+
cnt['RxPktCnt'] = struct.unpack_from('<I', data[ 28 : 32])[0]
3188+
cnt['AckCnt'] = struct.unpack_from('<I', data[ 32 : 36])[0]
3189+
cnt['NackCnt'] = struct.unpack_from('<I', data[ 36 : 40])[0]
3190+
cnt['TxRetryCnt'] = struct.unpack_from('<I', data[ 40 : 44])[0]
3191+
cnt['TxAbortCnt'] = struct.unpack_from('<I', data[ 44 : 48])[0]
3192+
3193+
if ver == 1:
3194+
cnt['RxErrorCnt'] = struct.unpack_from('<I', data[ 52 : 56])[0]
3195+
3196+
uartPort['UART2'] = cnt
3197+
31853198
if option == 0: result['Local'] = uartPort
31863199
else: result['Remote'] = uartPort
31873200

31883201
else:
3189-
self.log_error("platform_chassis is not loaded, failed to get Uart statstics")
3202+
self.log_error("platform_chassis is not loaded, failed to get Uart statistics")
31903203

31913204
return result
31923205

0 commit comments

Comments
 (0)