[FS][arm64] support new boars s5800-48t4s and s5800-48t8s-mars8p (#12994)
Adding platform support for FS s5800-48t4s and s5800-48t8s-mars8p. Both s5800-48t4s and s5800-48t8s-mars8p have 48 * 10/100/1000 Base-T ports, 4 * 10GE SFP+ Ports on Centec TsingMa. s5800-48t4s is different from s5800-48t8s-mars8p in that: The phy chip used by s5800-48t4s is Marvell 88e1680; The phy chip used by s5800-48t4s-mars8p is Centec ctc21108;
This commit is contained in:
parent
8788f1cc0f
commit
bb09ebe977
@ -0,0 +1,444 @@
|
||||
{
|
||||
"fibers" : [
|
||||
{
|
||||
"fiber_flg" : "E_FIBER_SFP",
|
||||
"mode" : "E_FIBER_ASIC_ASIC",
|
||||
"cs" : "0 0 0",
|
||||
"en_mode" : "E_FIBER_EN_SYSFS",
|
||||
"en" : "sfp_enable",
|
||||
"sysfs_path" : "/sys/class/sfp/sfp1/",
|
||||
"sync_fiber_present" : 1
|
||||
},
|
||||
{
|
||||
"fiber_flg" : "E_FIBER_SFP",
|
||||
"mode" : "E_FIBER_ASIC_ASIC",
|
||||
"cs" : "0 0 1",
|
||||
"en_mode" : "E_FIBER_EN_SYSFS",
|
||||
"en" : "sfp_enable",
|
||||
"sysfs_path" : "/sys/class/sfp/sfp2/",
|
||||
"sync_fiber_present" : 1
|
||||
},
|
||||
{
|
||||
"fiber_flg" : "E_FIBER_SFP",
|
||||
"mode" : "E_FIBER_ASIC_ASIC",
|
||||
"cs" : "0 0 2",
|
||||
"en_mode" : "E_FIBER_EN_SYSFS",
|
||||
"en" : "sfp_enable",
|
||||
"sysfs_path" : "/sys/class/sfp/sfp3/",
|
||||
"sync_fiber_present" : 1
|
||||
},
|
||||
{
|
||||
"fiber_flg" : "E_FIBER_SFP",
|
||||
"mode" : "E_FIBER_ASIC_ASIC",
|
||||
"cs" : "0 0 3",
|
||||
"en_mode" : "E_FIBER_EN_SYSFS",
|
||||
"en" : "sfp_enable",
|
||||
"sysfs_path" : "/sys/class/sfp/sfp4/",
|
||||
"sync_fiber_present" : 1
|
||||
}
|
||||
],
|
||||
"macleds" : {
|
||||
"polarity" : 1,
|
||||
"maps" : [
|
||||
{
|
||||
"port_id" : 14,
|
||||
"lchip" : 0,
|
||||
"ctl_id" : 0,
|
||||
"mode" : "LED_MODE_2_FORCE_OFF",
|
||||
"fixed" : 0,
|
||||
"sysfs_path" : "/sys/class/leds/port52/brightness"
|
||||
},
|
||||
{
|
||||
"port_id" : 15,
|
||||
"lchip" : 0,
|
||||
"ctl_id" : 0,
|
||||
"mode" : "LED_MODE_2_FORCE_OFF",
|
||||
"fixed" : 0,
|
||||
"sysfs_path" : "/sys/class/leds/port51/brightness"
|
||||
},
|
||||
{
|
||||
"port_id" : 12,
|
||||
"lchip" : 0,
|
||||
"ctl_id" : 0,
|
||||
"mode" : "LED_MODE_2_FORCE_OFF",
|
||||
"fixed" : 0,
|
||||
"sysfs_path" : "/sys/class/leds/port50/brightness"
|
||||
},
|
||||
{
|
||||
"port_id" : 13,
|
||||
"lchip" : 0,
|
||||
"ctl_id" : 0,
|
||||
"mode" : "LED_MODE_2_FORCE_OFF",
|
||||
"fixed" : 0,
|
||||
"sysfs_path" : "/sys/class/leds/port49/brightness"
|
||||
}
|
||||
]
|
||||
},
|
||||
"phys" : [
|
||||
{
|
||||
"macid" : 1,
|
||||
"busid" : 0,
|
||||
"addr" : 1,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 0,
|
||||
"busid" : 0,
|
||||
"addr" : 0,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 3,
|
||||
"busid" : 0,
|
||||
"addr" : 3,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 2,
|
||||
"busid" : 0,
|
||||
"addr" : 2,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 5,
|
||||
"busid" : 0,
|
||||
"addr" : 5,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 4,
|
||||
"busid" : 0,
|
||||
"addr" : 4,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 7,
|
||||
"busid" : 0,
|
||||
"addr" : 7,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 6,
|
||||
"busid" : 0,
|
||||
"addr" : 6,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 17,
|
||||
"busid" : 0,
|
||||
"addr" : 9,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 16,
|
||||
"busid" : 0,
|
||||
"addr" : 8,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 19,
|
||||
"busid" : 0,
|
||||
"addr" : 11,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 18,
|
||||
"busid" : 0,
|
||||
"addr" : 10,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 21,
|
||||
"busid" : 0,
|
||||
"addr" : 13,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 20,
|
||||
"busid" : 0,
|
||||
"addr" : 12,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 23,
|
||||
"busid" : 0,
|
||||
"addr" : 15,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 22,
|
||||
"busid" : 0,
|
||||
"addr" : 14,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 9,
|
||||
"busid" : 1,
|
||||
"addr" : 1,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 8,
|
||||
"busid" : 1,
|
||||
"addr" : 0,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 11,
|
||||
"busid" : 1,
|
||||
"addr" : 3,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 10,
|
||||
"busid" : 1,
|
||||
"addr" : 2,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 33,
|
||||
"busid" : 1,
|
||||
"addr" : 5,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 32,
|
||||
"busid" : 1,
|
||||
"addr" : 4,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 35,
|
||||
"busid" : 1,
|
||||
"addr" : 7,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 34,
|
||||
"busid" : 1,
|
||||
"addr" : 6,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 37,
|
||||
"busid" : 1,
|
||||
"addr" : 9,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 36,
|
||||
"busid" : 1,
|
||||
"addr" : 8,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 39,
|
||||
"busid" : 1,
|
||||
"addr" : 11,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 38,
|
||||
"busid" : 1,
|
||||
"addr" : 10,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 41,
|
||||
"busid" : 1,
|
||||
"addr" : 13,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 40,
|
||||
"busid" : 1,
|
||||
"addr" : 12,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 43,
|
||||
"busid" : 1,
|
||||
"addr" : 15,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 42,
|
||||
"busid" : 1,
|
||||
"addr" : 14,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 25,
|
||||
"busid" : 2,
|
||||
"addr" : 1,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 24,
|
||||
"busid" : 2,
|
||||
"addr" : 0,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 27,
|
||||
"busid" : 2,
|
||||
"addr" : 3,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 26,
|
||||
"busid" : 2,
|
||||
"addr" : 2,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 49,
|
||||
"busid" : 2,
|
||||
"addr" : 5,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 48,
|
||||
"busid" : 2,
|
||||
"addr" : 4,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 51,
|
||||
"busid" : 2,
|
||||
"addr" : 7,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 50,
|
||||
"busid" : 2,
|
||||
"addr" : 6,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 53,
|
||||
"busid" : 3,
|
||||
"addr" : 1,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 52,
|
||||
"busid" : 3,
|
||||
"addr" : 0,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 55,
|
||||
"busid" : 3,
|
||||
"addr" : 3,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 54,
|
||||
"busid" : 3,
|
||||
"addr" : 2,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 57,
|
||||
"busid" : 3,
|
||||
"addr" : 5,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 56,
|
||||
"busid" : 3,
|
||||
"addr" : 4,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 59,
|
||||
"busid" : 3,
|
||||
"addr" : 7,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 58,
|
||||
"busid" : 3,
|
||||
"addr" : 6,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
}
|
||||
],
|
||||
"ffe" : {
|
||||
"board_material" : "BOARD_MATERIAL_M4",
|
||||
"config" : [
|
||||
{
|
||||
"serdes_id" : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
|
||||
"is_dac" : 0,
|
||||
"speed" : [1000, 100, 10],
|
||||
|
||||
"mode" : "CTC_CHIP_SERDES_FFE_MODE_DEFINE",
|
||||
"cfg" : [0, 100, 15, 0]
|
||||
},
|
||||
{
|
||||
"serdes_id" : [12, 13, 14, 15],
|
||||
"is_dac" : 0,
|
||||
"speed" : [10000, 1000],
|
||||
|
||||
"mode" : "CTC_CHIP_SERDES_FFE_MODE_DEFINE",
|
||||
"cfg" : [2, 92, 15, 0]
|
||||
},
|
||||
{
|
||||
"serdes_id" : [12, 13, 14, 15],
|
||||
"is_dac" : 1,
|
||||
"speed" : [10000, 1000],
|
||||
|
||||
"mode" : "CTC_CHIP_SERDES_FFE_MODE_DEFINE",
|
||||
"cfg" : [8, 174, 0, 0]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -0,0 +1,131 @@
|
||||
#----------------- SDK Feature Support --------------
|
||||
[MPLS_SUPPORT] = 1;
|
||||
[APS_SUPPORT] = 1;
|
||||
[OAM_SUPPORT] = 1;
|
||||
[PTP_SUPPORT] = 0;
|
||||
[SYNCE_SUPPORT] = 0;
|
||||
[STACKING_SUPPORT] = 1;
|
||||
[BPE_SUPPORT] = 0;
|
||||
[IPFIX_SUPPORT] = 1;
|
||||
[MONITOR_SUPPORT] = 1;
|
||||
[OVERLAY_SUPPORT] = 1;
|
||||
[EFD_SUPPORT] = 1;
|
||||
[FCOE_SUPPORT] = 0;
|
||||
[TRILL_SUPPORT] = 0;
|
||||
[WLAN_SUPPORT] = 1;
|
||||
[NPM_SUPPORT] = 1;
|
||||
[DOT1AE_SUPPORT] = 1;
|
||||
[DTEL_SUPPORT] = 0;
|
||||
[FDBSYNC_SUPPORT] = 1;
|
||||
|
||||
#----------------- Chip Init Parameter --------------
|
||||
#Local chip number and global chip id
|
||||
[Local chip_num] = 1
|
||||
[Local chip0] = 0
|
||||
[Local chip1] = 1
|
||||
|
||||
#Cut through mode 0: Disable; 1:10/40/100G; 2:1/10/100G; 3:1/10/40G; other:Flex, refer to CUT_THROUGH_BITMAP
|
||||
[CUT_THROUGH_SPEED] = 0
|
||||
#Flex cut through mode, speed enable by bitmap, refer to ctc_port_speed_t, Notice: 10M/100M/1G treat as the same speed
|
||||
[CUT_THROUGH_BITMAP] = 0
|
||||
|
||||
#Network cpu port
|
||||
[CPU_NETWORK_PORT_EN] = 0
|
||||
[CPU_NETWORK_PORT_ID] = 47
|
||||
|
||||
#Enable parity error and multi-bit ecc recover
|
||||
[ECC_RECOVER_EN] = 0
|
||||
[TCAM_SCAN_EN] = 0
|
||||
|
||||
#----------------- KNET Init Parameter --------------
|
||||
[KNET_EN] = 0
|
||||
|
||||
#----------------- RESILIENT HASH Init Parameter --------------
|
||||
[RESILIENT_HASH_EN] = 0
|
||||
|
||||
#----------------- FTM Init Parameter --------------
|
||||
#0: default; 1: layer3; 2: ipv6
|
||||
[FTM Profile] = 0
|
||||
|
||||
#----------------- Interrupt Init Parameter --------------
|
||||
#0: pin, 1: msi
|
||||
[Interrupt_mode] = 1
|
||||
[IRQ] = 69
|
||||
|
||||
#----------------- NextHop Init Parameter --------------
|
||||
#0: SDK work in pizzbox (single chip system), 1: SDK work in multi-chip system
|
||||
[Nexthop Edit Mode] = 0
|
||||
[External Nexthop Number] = 16384
|
||||
[MPLS Tunnel Number] = 1024
|
||||
|
||||
#----------------- L2 Init Parameter --------------
|
||||
[FDB Hw Learning] = 0
|
||||
[Logic Port Num] = 1024
|
||||
#0: 128 instance per port, 1: 64 instance per port, 2: 32 instance per port
|
||||
[STP MODE] = 0
|
||||
[MAX_FID_NUM] = 5120
|
||||
#STEP:Sync fdb count per second
|
||||
[FDB_SYNC_STEP] = 100
|
||||
|
||||
#----------------- Port Init Parameter --------------
|
||||
[PORT_STATS_ACL_EN] = 0
|
||||
|
||||
#----------------- Stats Init Parameter --------------
|
||||
[STATS_PORT_EN] = 0
|
||||
[STATS_ECMP_EN] = 0
|
||||
|
||||
#----------------- BPE Init Parameter --------------
|
||||
[BPE_BR_PORT_EXTENDER_EN] = 0
|
||||
[BPE_BR_UC_MAX_ECID] = 1024
|
||||
[BPE_BR_MC_MAX_ECID] = 4096
|
||||
[BPE_BR_PORT_BASE] = 0
|
||||
|
||||
#----------------- Ipuc Init Parameter --------------
|
||||
#0: tcam use prefix 16; 1: tcam use prefix 8
|
||||
[IPUC_TCAM_PREFIX_8] = 1
|
||||
|
||||
#----------------- QoS Init Parameter --------------
|
||||
#QoS policer number support 1K/2K/4K/8K, default 4K
|
||||
[QOS_POLICER_NUM] = 4096
|
||||
#QoS port queue number support 16/8/8 BPE/4 BPE,
|
||||
#When resrc_profile.cfg exist, queue number valid,
|
||||
#Default 8 queue mode
|
||||
#8 queue = 8
|
||||
#16 queue = 16
|
||||
#4 queue BPE = 17
|
||||
#8 queue BPE = 18
|
||||
[QOS_PORT_QUEUE_NUM] = 8
|
||||
#QoS port extend queue number support 0/4, default 0
|
||||
[QOS_PORT_EXT_QUEUE_NUM] = 0
|
||||
#QoS CPU reason queue number support 128/64/32, default 128
|
||||
[QOS_CPU_QUEUE_NUM] = 128
|
||||
[QOS_INGRESS_VLAN_POLICER_NUM] = 0
|
||||
[QOS_EGRESS_VLAN_POLICER_NUM] = 0
|
||||
[QOS_POLICER_MERGE_MODE] = 0
|
||||
#QOS service queue mode, default 0,0:logic scr port + dstport enq 1:service id + dstport enq
|
||||
[QOS_SERVICE_QUEUE_MODE] = 0
|
||||
#Global enable logic dst port + dstport enq
|
||||
[QOS_SERVICE_QUEUE_EGRESS_EN] = 0
|
||||
|
||||
#----------------- Stacking Init Parameter --------------
|
||||
#0: normal mode; 1: spine-leaf mode
|
||||
[FABRIC MODE] = 0
|
||||
[STACKING VERSION] = 1
|
||||
|
||||
#----------------- SDK&SAI Debug Level Init Parameter --------------
|
||||
# SDK_DEBUG_TO_SYSLOG should be enable, 1 : enable ; 0 : disable
|
||||
[SDK_DEBUG_TO_SYSLOG] = 0;
|
||||
|
||||
# Level same as SAI_LOG_LEVEL : 0 : debug ; 1 : info ; 2 : notice ; 3 : warning ; 4 : error ; 5 : critical
|
||||
[DEBUG_LOG_LEVEL_SDK] = 1 ;
|
||||
[DEBUG_LOG_LEVEL_SAI] = 0;
|
||||
|
||||
# CTC_ERROR_RETURN(g_error_on) in SDK to syslog, 1 : enable ; 0 : disable
|
||||
[DEBUG_SDK_G_ERROR_ON] = 0;
|
||||
|
||||
# SDK debug module id (scope from 1 ~47,detail to see sdk_debug_module_t.csv),default all modules
|
||||
[DEBUG_SDK_MODULE] = 0;
|
||||
|
||||
# part of SDK, 1 : enable in part ; 0 : disable in part
|
||||
[DEBUG_SDK_CTC] = 0;
|
||||
[DEBUG_SDK_SYS] = 1;
|
@ -0,0 +1,281 @@
|
||||
#Generated by 'CTC DataPath Tools' on Thu Aug 12 17:34:17 2021
|
||||
#Version 1.0, Supported by TsingMa SDK
|
||||
|
||||
|
||||
#SERDES_MODE : 0-NONE, 1-XFI, 2-SGMII, 3-Not Support, 4-QSGMII, 5-XAUI, 6-DXAUI, 7-XLG, 8-CG, 9-SGMII2G5
|
||||
# 10-USXGMII-S, 11-USXGMII-M2G5, 12-USXGMII-M5G, 13-XXVG, 14-LG, 15-100BASE-FX
|
||||
#SERDES_RX_POLY: 0-Normal, 1-Inverse
|
||||
#SERDES_SWITCH : 0-Not Support Dynamic Switch, 1-Support Dynamic Switch
|
||||
|
||||
[WLAN_ENABLE] = 1
|
||||
[DOT1AE_ENABLE] = 1
|
||||
|
||||
[CORE_PLLA] = 600
|
||||
#{
|
||||
[SERDES_ITEM]
|
||||
#repeat 32 step 6
|
||||
[SERDES_ID] = 0
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 1
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 2
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 3
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 4
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 5
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 6
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 7
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 8
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 9
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 10
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 11
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 12
|
||||
[SERDES_MODE] = 1
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 13
|
||||
[SERDES_MODE] = 1
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 14
|
||||
[SERDES_MODE] = 1
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 15
|
||||
[SERDES_MODE] = 1
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 16
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 17
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 18
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 19
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 20
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 21
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 22
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 23
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 24
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 25
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 26
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 1
|
||||
|
||||
[SERDES_ID] = 27
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 1
|
||||
|
||||
[SERDES_ID] = 28
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 29
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 30
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 1
|
||||
|
||||
[SERDES_ID] = 31
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 1
|
||||
|
||||
#repeat end
|
||||
#}
|
||||
|
||||
|
||||
#[SERDES_TO_LPORT]
|
||||
#{
|
||||
# | QSGMII/USXGMII-M2G5 | USXGMII-M5G | USXGMII-S | 100BASE-FX | SGMII/SGMII2G5/XFI | XAUI/DXAUI | XLG | XXVG | LG | CG
|
||||
#---------|---------------------|-------------|-----------|------------|--------------------|------------|-----|------|----|---
|
||||
#serdes 0 |0 /1 /2 /3 |0 /1 |0 |0 |0 |0 |0 |NA |NA |NA
|
||||
#serdes 1 |4 /5 /6 /7 |4 /5 |1 |1 |1 |0 |0 |NA |NA |NA
|
||||
#serdes 2 |16/17/18/19 |16/17 |2 |2 |2 |0 |0 |NA |NA |NA
|
||||
#serdes 3 |20/21/22/23 |20/21 |3 |3 |3 |0 |0 |NA |NA |NA
|
||||
#serdes 4 |8 /9 /10/11 |8 /9 |8 |8 |8 |8 |8 |NA |NA |NA
|
||||
#serdes 5 |32/33/34/35 |32/33 |9 |9 |9 |8 |8 |NA |NA |NA
|
||||
#serdes 6 |36/37/38/39 |36/37 |10 |10 |10 |8 |8 |NA |NA |NA
|
||||
#serdes 7 |40/41/42/43 |40/41 |11 |11 |11 |8 |8 |NA |NA |NA
|
||||
#serdes 8 |24/25/26/27 |24/25 |24 |24 |24 |24 |24 |NA |NA |NA
|
||||
#serdes 9 |48/49/50/51 |48/49 |25 |25 |25 |24 |24 |NA |NA |NA
|
||||
#serdes 10|52/53/54/55 |52/53 |26 |26 |26 |24 |24 |NA |NA |NA
|
||||
#serdes 11|56/57/58/59 |56/57 |27 |27 |27 |24 |24 |NA |NA |NA
|
||||
#serdes 12|NA |NA |NA |12 |12 |12 |12 |NA |NA |NA
|
||||
#serdes 13|NA |NA |NA |13 |13 |12 |12 |NA |NA |NA
|
||||
#serdes 14|NA |NA |NA |14 |14 |12 |12 |NA |NA |NA
|
||||
#serdes 15|NA |NA |NA |15 |15 |12 |12 |NA |NA |NA
|
||||
#serdes 16|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 17|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 18|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 19|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 20|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 21|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 22|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 23|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 24|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 25|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 26|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 27|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 28|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 29|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 30|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#serdes 31|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#}
|
70
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s-mars8p/buffers.json.j2
Executable file
70
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s-mars8p/buffers.json.j2
Executable file
@ -0,0 +1,70 @@
|
||||
{# Default values which will be used if no actual configura available #}
|
||||
{% set default_cable = '40m' %}
|
||||
{% set default_ports_num = 54 -%}
|
||||
|
||||
{# Port configuration to cable length look-up table #}
|
||||
{# Each record describes mapping of DUT (DUT port) role and neighbor role to cable length #}
|
||||
{# Roles described in the minigraph #}
|
||||
{% set ports2cable = {
|
||||
'torrouter_server' : '5m',
|
||||
'leafrouter_torrouter' : '40m',
|
||||
'spinerouter_leafrouter' : '300m'
|
||||
}
|
||||
%}
|
||||
|
||||
{%- macro cable_length(port_name) -%}
|
||||
{%- set cable_len = [] -%}
|
||||
{%- for local_port in DEVICE_NEIGHBOR -%}
|
||||
{%- if local_port == port_name -%}
|
||||
{%- if DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[local_port].name] -%}
|
||||
{%- set neighbor = DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[local_port].name] -%}
|
||||
{%- set neighbor_role = neighbor.type -%}
|
||||
{%- set roles1 = switch_role + '_' + neighbor_role %}
|
||||
{%- set roles2 = neighbor_role + '_' + switch_role -%}
|
||||
{%- set roles1 = roles1 | lower -%}
|
||||
{%- set roles2 = roles2 | lower -%}
|
||||
{%- if roles1 in ports2cable -%}
|
||||
{%- if cable_len.append(ports2cable[roles1]) -%}{%- endif -%}
|
||||
{%- elif roles2 in ports2cable -%}
|
||||
{%- if cable_len.append(ports2cable[roles2]) -%}{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
{%- if cable_len -%}
|
||||
{{ cable_len.0 }}
|
||||
{%- else -%}
|
||||
{{ default_cable }}
|
||||
{%- endif -%}
|
||||
{% endmacro %}
|
||||
|
||||
{%- if DEVICE_METADATA is defined %}
|
||||
{%- set switch_role = DEVICE_METADATA['localhost']['type'] %}
|
||||
{%- endif -%}
|
||||
|
||||
{# Generate list of ports if not defined #}
|
||||
{% if PORT is not defined %}
|
||||
{% set PORT = [] %}
|
||||
{% for port_idx in range(1,default_ports_num+1) %}
|
||||
{% if PORT.append("Ethernet%d" % (port_idx)) %}{% endif %}
|
||||
{% endfor %}
|
||||
{% endif -%}
|
||||
|
||||
{% set port_names_list = [] %}
|
||||
{% for port in PORT %}
|
||||
{%- if port_names_list.append(port) %}{% endif %}
|
||||
{% endfor %}
|
||||
{% set port_names = port_names_list | join(',') -%}
|
||||
|
||||
{
|
||||
"CABLE_LENGTH": {
|
||||
"AZURE": {
|
||||
{% for port in PORT %}
|
||||
{% set cable = cable_length(port) -%}
|
||||
"{{ port }}": "{{ cable }}"{%- if not loop.last -%},{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,21 @@
|
||||
# PG lossless profiles.
|
||||
# speed cable size xon xoff threshold
|
||||
1000 5m 34816 18432 16384 0
|
||||
10000 5m 34816 18432 16384 0
|
||||
25000 5m 34816 18432 16384 0
|
||||
40000 5m 34816 18432 16384 0
|
||||
50000 5m 34816 18432 16384 0
|
||||
100000 5m 36864 18432 18432 0
|
||||
1000 40m 36864 18432 18432 0
|
||||
10000 40m 36864 18432 18432 0
|
||||
25000 40m 39936 18432 21504 0
|
||||
40000 40m 41984 18432 23552 0
|
||||
50000 40m 41984 18432 23552 0
|
||||
100000 40m 54272 18432 35840 0
|
||||
1000 300m 49152 18432 30720 0
|
||||
10000 300m 49152 18432 30720 0
|
||||
25000 300m 71680 18432 53248 0
|
||||
40000 300m 94208 18432 75776 0
|
||||
50000 300m 94208 18432 75776 0
|
||||
100000 300m 184320 18432 165888 0
|
||||
|
@ -0,0 +1,53 @@
|
||||
# name lanes alias index speed fec
|
||||
Ethernet0 1 eth-0-1 0 1000 none
|
||||
Ethernet1 0 eth-0-2 1 1000 none
|
||||
Ethernet2 3 eth-0-3 2 1000 none
|
||||
Ethernet3 2 eth-0-4 3 1000 none
|
||||
Ethernet4 5 eth-0-5 4 1000 none
|
||||
Ethernet5 4 eth-0-6 5 1000 none
|
||||
Ethernet6 7 eth-0-7 6 1000 none
|
||||
Ethernet7 6 eth-0-8 7 1000 none
|
||||
Ethernet8 17 eth-0-9 8 1000 none
|
||||
Ethernet9 16 eth-0-10 9 1000 none
|
||||
Ethernet10 19 eth-0-11 10 1000 none
|
||||
Ethernet11 18 eth-0-12 11 1000 none
|
||||
Ethernet12 21 eth-0-13 12 1000 none
|
||||
Ethernet13 20 eth-0-14 13 1000 none
|
||||
Ethernet14 23 eth-0-15 14 1000 none
|
||||
Ethernet15 22 eth-0-16 15 1000 none
|
||||
Ethernet16 9 eth-0-17 16 1000 none
|
||||
Ethernet17 8 eth-0-18 17 1000 none
|
||||
Ethernet18 11 eth-0-19 18 1000 none
|
||||
Ethernet19 10 eth-0-20 19 1000 none
|
||||
Ethernet20 33 eth-0-21 20 1000 none
|
||||
Ethernet21 32 eth-0-22 21 1000 none
|
||||
Ethernet22 35 eth-0-23 22 1000 none
|
||||
Ethernet23 34 eth-0-24 23 1000 none
|
||||
Ethernet24 37 eth-0-25 24 1000 none
|
||||
Ethernet25 36 eth-0-26 25 1000 none
|
||||
Ethernet26 39 eth-0-27 26 1000 none
|
||||
Ethernet27 38 eth-0-28 27 1000 none
|
||||
Ethernet28 41 eth-0-29 28 1000 none
|
||||
Ethernet29 40 eth-0-30 29 1000 none
|
||||
Ethernet30 43 eth-0-31 30 1000 none
|
||||
Ethernet31 42 eth-0-32 31 1000 none
|
||||
Ethernet32 25 eth-0-33 32 1000 none
|
||||
Ethernet33 24 eth-0-34 33 1000 none
|
||||
Ethernet34 27 eth-0-35 34 1000 none
|
||||
Ethernet35 26 eth-0-36 35 1000 none
|
||||
Ethernet36 49 eth-0-37 36 1000 none
|
||||
Ethernet37 48 eth-0-38 37 1000 none
|
||||
Ethernet38 51 eth-0-39 38 1000 none
|
||||
Ethernet39 50 eth-0-40 39 1000 none
|
||||
Ethernet40 53 eth-0-41 40 1000 none
|
||||
Ethernet41 52 eth-0-42 41 1000 none
|
||||
Ethernet42 55 eth-0-43 42 1000 none
|
||||
Ethernet43 54 eth-0-44 43 1000 none
|
||||
Ethernet44 57 eth-0-45 44 1000 none
|
||||
Ethernet45 56 eth-0-46 45 1000 none
|
||||
Ethernet46 59 eth-0-47 46 1000 none
|
||||
Ethernet47 58 eth-0-48 47 1000 none
|
||||
Ethernet48 13 eth-0-49 48 10000 none
|
||||
Ethernet49 12 eth-0-50 49 10000 none
|
||||
Ethernet50 15 eth-0-51 50 10000 none
|
||||
Ethernet51 14 eth-0-52 51 10000 none
|
1
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s-mars8p/qos.json.j2
Executable file
1
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s-mars8p/qos.json.j2
Executable file
@ -0,0 +1 @@
|
||||
{%- include 'qos_config.j2' %}
|
@ -0,0 +1,4 @@
|
||||
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/S5800-48t4s-mars8p-chip-profile.txt
|
||||
SAI_HW_PORT_PROFILE_ID_CONFIG_FILE=/usr/share/sonic/hwsku/S5800-48t4s-mars8p-datapath.txt
|
||||
SAI_PLATFORM_CFG_FILE=/usr/share/sonic/hwsku/S5800-48t4s-mars8p-board.json
|
||||
SAI_PHY_DRIVER_PATH=/usr/lib/phy_drv/E530-48t4x-mars8p
|
@ -0,0 +1,471 @@
|
||||
{
|
||||
"fibers" : [
|
||||
{
|
||||
"fiber_flg" : "E_FIBER_SFP",
|
||||
"mode" : "E_FIBER_ASIC_ASIC",
|
||||
"cs" : "0 0 0",
|
||||
"en_mode" : "E_FIBER_EN_SYSFS",
|
||||
"en" : "sfp_enable",
|
||||
"sysfs_path" : "/sys/class/sfp/sfp1/",
|
||||
"sync_fiber_present" : 1
|
||||
},
|
||||
{
|
||||
"fiber_flg" : "E_FIBER_SFP",
|
||||
"mode" : "E_FIBER_ASIC_ASIC",
|
||||
"cs" : "0 0 1",
|
||||
"en_mode" : "E_FIBER_EN_SYSFS",
|
||||
"en" : "sfp_enable",
|
||||
"sysfs_path" : "/sys/class/sfp/sfp2/",
|
||||
"sync_fiber_present" : 1
|
||||
},
|
||||
{
|
||||
"fiber_flg" : "E_FIBER_SFP",
|
||||
"mode" : "E_FIBER_ASIC_ASIC",
|
||||
"cs" : "0 0 2",
|
||||
"en_mode" : "E_FIBER_EN_SYSFS",
|
||||
"en" : "sfp_enable",
|
||||
"sysfs_path" : "/sys/class/sfp/sfp3/",
|
||||
"sync_fiber_present" : 1
|
||||
},
|
||||
{
|
||||
"fiber_flg" : "E_FIBER_SFP",
|
||||
"mode" : "E_FIBER_ASIC_ASIC",
|
||||
"cs" : "0 0 3",
|
||||
"en_mode" : "E_FIBER_EN_SYSFS",
|
||||
"en" : "sfp_enable",
|
||||
"sysfs_path" : "/sys/class/sfp/sfp4/",
|
||||
"sync_fiber_present" : 1
|
||||
}
|
||||
],
|
||||
"macleds" : {
|
||||
"polarity" : 1,
|
||||
"maps" : [
|
||||
{
|
||||
"port_id" : 14,
|
||||
"lchip" : 0,
|
||||
"ctl_id" : 0,
|
||||
"mode" : "LED_MODE_2_FORCE_OFF",
|
||||
"fixed" : 0,
|
||||
"sysfs_path" : "/sys/class/leds/port52/brightness"
|
||||
},
|
||||
{
|
||||
"port_id" : 15,
|
||||
"lchip" : 0,
|
||||
"ctl_id" : 0,
|
||||
"mode" : "LED_MODE_2_FORCE_OFF",
|
||||
"fixed" : 0,
|
||||
"sysfs_path" : "/sys/class/leds/port51/brightness"
|
||||
},
|
||||
{
|
||||
"port_id" : 12,
|
||||
"lchip" : 0,
|
||||
"ctl_id" : 0,
|
||||
"mode" : "LED_MODE_2_FORCE_OFF",
|
||||
"fixed" : 0,
|
||||
"sysfs_path" : "/sys/class/leds/port50/brightness"
|
||||
},
|
||||
{
|
||||
"port_id" : 13,
|
||||
"lchip" : 0,
|
||||
"ctl_id" : 0,
|
||||
"mode" : "LED_MODE_2_FORCE_OFF",
|
||||
"fixed" : 0,
|
||||
"sysfs_path" : "/sys/class/leds/port49/brightness"
|
||||
}
|
||||
]
|
||||
},
|
||||
"phys" : [
|
||||
{
|
||||
"macid" : 1,
|
||||
"busid" : 0,
|
||||
"addr" : 1,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 0,
|
||||
"busid" : 0,
|
||||
"addr" : 0,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 3,
|
||||
"busid" : 0,
|
||||
"addr" : 3,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 2,
|
||||
"busid" : 0,
|
||||
"addr" : 2,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 5,
|
||||
"busid" : 0,
|
||||
"addr" : 5,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 4,
|
||||
"busid" : 0,
|
||||
"addr" : 4,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 7,
|
||||
"busid" : 0,
|
||||
"addr" : 7,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 6,
|
||||
"busid" : 0,
|
||||
"addr" : 6,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 17,
|
||||
"busid" : 0,
|
||||
"addr" : 9,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 16,
|
||||
"busid" : 0,
|
||||
"addr" : 8,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 19,
|
||||
"busid" : 0,
|
||||
"addr" : 11,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 18,
|
||||
"busid" : 0,
|
||||
"addr" : 10,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 21,
|
||||
"busid" : 0,
|
||||
"addr" : 13,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 20,
|
||||
"busid" : 0,
|
||||
"addr" : 12,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 23,
|
||||
"busid" : 0,
|
||||
"addr" : 15,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 22,
|
||||
"busid" : 0,
|
||||
"addr" : 14,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 9,
|
||||
"busid" : 1,
|
||||
"addr" : 1,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 8,
|
||||
"busid" : 1,
|
||||
"addr" : 0,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 11,
|
||||
"busid" : 1,
|
||||
"addr" : 3,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 10,
|
||||
"busid" : 1,
|
||||
"addr" : 2,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 33,
|
||||
"busid" : 1,
|
||||
"addr" : 5,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 32,
|
||||
"busid" : 1,
|
||||
"addr" : 4,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 35,
|
||||
"busid" : 1,
|
||||
"addr" : 7,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 34,
|
||||
"busid" : 1,
|
||||
"addr" : 6,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 37,
|
||||
"busid" : 1,
|
||||
"addr" : 9,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 36,
|
||||
"busid" : 1,
|
||||
"addr" : 8,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 39,
|
||||
"busid" : 1,
|
||||
"addr" : 11,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 38,
|
||||
"busid" : 1,
|
||||
"addr" : 10,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 41,
|
||||
"busid" : 1,
|
||||
"addr" : 13,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 40,
|
||||
"busid" : 1,
|
||||
"addr" : 12,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 43,
|
||||
"busid" : 1,
|
||||
"addr" : 15,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 42,
|
||||
"busid" : 1,
|
||||
"addr" : 14,
|
||||
"base_port" : 8,
|
||||
"last_port" : 15
|
||||
},
|
||||
{
|
||||
"macid" : 25,
|
||||
"busid" : 2,
|
||||
"addr" : 1,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 24,
|
||||
"busid" : 2,
|
||||
"addr" : 0,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 27,
|
||||
"busid" : 2,
|
||||
"addr" : 3,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 26,
|
||||
"busid" : 2,
|
||||
"addr" : 2,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 49,
|
||||
"busid" : 2,
|
||||
"addr" : 5,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 48,
|
||||
"busid" : 2,
|
||||
"addr" : 4,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 51,
|
||||
"busid" : 2,
|
||||
"addr" : 7,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 50,
|
||||
"busid" : 2,
|
||||
"addr" : 6,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 53,
|
||||
"busid" : 3,
|
||||
"addr" : 1,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 52,
|
||||
"busid" : 3,
|
||||
"addr" : 0,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 55,
|
||||
"busid" : 3,
|
||||
"addr" : 3,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 54,
|
||||
"busid" : 3,
|
||||
"addr" : 2,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 57,
|
||||
"busid" : 3,
|
||||
"addr" : 5,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 56,
|
||||
"busid" : 3,
|
||||
"addr" : 4,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 59,
|
||||
"busid" : 3,
|
||||
"addr" : 7,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
},
|
||||
{
|
||||
"macid" : 58,
|
||||
"busid" : 3,
|
||||
"addr" : 6,
|
||||
"base_port" : 0,
|
||||
"last_port" : 7
|
||||
}
|
||||
],
|
||||
"ffe" : {
|
||||
"board_material" : "BOARD_MATERIAL_M4",
|
||||
"config" : [
|
||||
{
|
||||
"serdes_id" : [12, 13, 14, 15],
|
||||
"is_dac" : 0,
|
||||
"speed" : [10000, 1000],
|
||||
|
||||
"mode" : "CTC_CHIP_SERDES_FFE_MODE_DEFINE",
|
||||
"cfg" : [2, 92, 15, 0]
|
||||
},
|
||||
{
|
||||
"serdes_id" : [12, 13, 14, 15],
|
||||
"is_dac" : 1,
|
||||
"speed" : [10000, 1000],
|
||||
|
||||
"mode" : "CTC_CHIP_SERDES_FFE_MODE_DEFINE",
|
||||
"cfg" : [8, 174, 0, 0]
|
||||
}
|
||||
]
|
||||
},
|
||||
"chip_interrupt" : {
|
||||
"intr_mode" : 1,
|
||||
"intr_group_config" : [
|
||||
{
|
||||
"group" : 0,
|
||||
"irq" : 0,
|
||||
"prio" : 120,
|
||||
"desc" : "json msi interrupt group",
|
||||
"interval" : 1000
|
||||
}
|
||||
],
|
||||
"intr_config" : [
|
||||
{ "group" : 0, "intr" : 0 },
|
||||
{ "group" : 0, "intr" : 1 },
|
||||
{ "group" : -1, "intr" : 2 },
|
||||
{ "group" : 0, "intr" : 3 },
|
||||
{ "group" : 0, "intr" : 4 },
|
||||
{ "group" : 0, "intr" : 5 },
|
||||
{ "group" : 0, "intr" : 6 },
|
||||
{ "group" : 0, "intr" : 7 },
|
||||
{ "group" : 0, "intr" : 9 },
|
||||
{ "group" : 0, "intr" : 10 },
|
||||
{ "group" : 0, "intr" : 11 },
|
||||
{ "group" : 0, "intr" : 21 },
|
||||
{ "group" : 0, "intr" : 17 },
|
||||
{ "group" : 0, "intr" : 12 },
|
||||
{ "group" : 0, "intr" : 13 },
|
||||
{ "group" : 0, "intr" : 14 },
|
||||
{ "group" : 0, "intr" : 15 },
|
||||
{ "group" : -1, "intr" : 16 },
|
||||
{ "group" : 0, "intr" : 20 },
|
||||
{ "group" : 0, "intr" : 18 },
|
||||
{ "group" : 0, "intr" : 22 }
|
||||
]
|
||||
}
|
||||
}
|
131
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s/S5800-48t4s-chip-profile.txt
Executable file
131
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s/S5800-48t4s-chip-profile.txt
Executable file
@ -0,0 +1,131 @@
|
||||
#----------------- SDK Feature Support --------------
|
||||
[MPLS_SUPPORT] = 1;
|
||||
[APS_SUPPORT] = 1;
|
||||
[OAM_SUPPORT] = 1;
|
||||
[PTP_SUPPORT] = 0;
|
||||
[SYNCE_SUPPORT] = 0;
|
||||
[STACKING_SUPPORT] = 1;
|
||||
[BPE_SUPPORT] = 0;
|
||||
[IPFIX_SUPPORT] = 1;
|
||||
[MONITOR_SUPPORT] = 1;
|
||||
[OVERLAY_SUPPORT] = 1;
|
||||
[EFD_SUPPORT] = 1;
|
||||
[FCOE_SUPPORT] = 0;
|
||||
[TRILL_SUPPORT] = 0;
|
||||
[WLAN_SUPPORT] = 1;
|
||||
[NPM_SUPPORT] = 1;
|
||||
[DOT1AE_SUPPORT] = 1;
|
||||
[DTEL_SUPPORT] = 0;
|
||||
[FDBSYNC_SUPPORT] = 1;
|
||||
|
||||
#----------------- Chip Init Parameter --------------
|
||||
#Local chip number and global chip id
|
||||
[Local chip_num] = 1
|
||||
[Local chip0] = 0
|
||||
[Local chip1] = 1
|
||||
|
||||
#Cut through mode 0: Disable; 1:10/40/100G; 2:1/10/100G; 3:1/10/40G; other:Flex, refer to CUT_THROUGH_BITMAP
|
||||
[CUT_THROUGH_SPEED] = 0
|
||||
#Flex cut through mode, speed enable by bitmap, refer to ctc_port_speed_t, Notice: 10M/100M/1G treat as the same speed
|
||||
[CUT_THROUGH_BITMAP] = 0
|
||||
|
||||
#Network cpu port
|
||||
[CPU_NETWORK_PORT_EN] = 0
|
||||
[CPU_NETWORK_PORT_ID] = 47
|
||||
|
||||
#Enable parity error and multi-bit ecc recover
|
||||
[ECC_RECOVER_EN] = 0
|
||||
[TCAM_SCAN_EN] = 0
|
||||
|
||||
#----------------- KNET Init Parameter --------------
|
||||
[KNET_EN] = 0
|
||||
|
||||
#----------------- RESILIENT HASH Init Parameter --------------
|
||||
[RESILIENT_HASH_EN] = 0
|
||||
|
||||
#----------------- FTM Init Parameter --------------
|
||||
#0: not use; 1: default; 2: layer3; 3: ipv6
|
||||
[FTM Profile] = 0
|
||||
|
||||
#----------------- Interrupt Init Parameter --------------
|
||||
#0: pin, 1: msi
|
||||
[Interrupt_mode] = 1
|
||||
[IRQ] = 69
|
||||
|
||||
#----------------- NextHop Init Parameter --------------
|
||||
#0: SDK work in pizzbox (single chip system), 1: SDK work in multi-chip system
|
||||
[Nexthop Edit Mode] = 0
|
||||
[External Nexthop Number] = 16384
|
||||
[MPLS Tunnel Number] = 1024
|
||||
|
||||
#----------------- L2 Init Parameter --------------
|
||||
[FDB Hw Learning] = 0
|
||||
[Logic Port Num] = 1024
|
||||
#0: 128 instance per port, 1: 64 instance per port, 2: 32 instance per port
|
||||
[STP MODE] = 0
|
||||
[MAX_FID_NUM] = 5120
|
||||
#STEP:Sync fdb count per second
|
||||
[FDB_SYNC_STEP] = 100
|
||||
|
||||
#----------------- Port Init Parameter --------------
|
||||
[PORT_STATS_ACL_EN] = 0
|
||||
|
||||
#----------------- Stats Init Parameter --------------
|
||||
[STATS_PORT_EN] = 0
|
||||
[STATS_ECMP_EN] = 0
|
||||
|
||||
#----------------- BPE Init Parameter --------------
|
||||
[BPE_BR_PORT_EXTENDER_EN] = 0
|
||||
[BPE_BR_UC_MAX_ECID] = 1024
|
||||
[BPE_BR_MC_MAX_ECID] = 4096
|
||||
[BPE_BR_PORT_BASE] = 0
|
||||
|
||||
#----------------- Ipuc Init Parameter --------------
|
||||
#0: tcam use prefix 16; 1: tcam use prefix 8
|
||||
[IPUC_TCAM_PREFIX_8] = 1
|
||||
|
||||
#----------------- QoS Init Parameter --------------
|
||||
#QoS policer number support 1K/2K/4K/8K, default 4K
|
||||
[QOS_POLICER_NUM] = 4096
|
||||
#QoS port queue number support 16/8/8 BPE/4 BPE,
|
||||
#When resrc_profile.cfg exist, queue number valid,
|
||||
#Default 8 queue mode
|
||||
#8 queue = 8
|
||||
#16 queue = 16
|
||||
#4 queue BPE = 17
|
||||
#8 queue BPE = 18
|
||||
[QOS_PORT_QUEUE_NUM] = 8
|
||||
#QoS port extend queue number support 0/4, default 0
|
||||
[QOS_PORT_EXT_QUEUE_NUM] = 0
|
||||
#QoS CPU reason queue number support 128/64/32, default 128
|
||||
[QOS_CPU_QUEUE_NUM] = 128
|
||||
[QOS_INGRESS_VLAN_POLICER_NUM] = 0
|
||||
[QOS_EGRESS_VLAN_POLICER_NUM] = 0
|
||||
[QOS_POLICER_MERGE_MODE] = 0
|
||||
#QOS service queue mode, default 0,0:logic scr port + dstport enq 1:service id + dstport enq
|
||||
[QOS_SERVICE_QUEUE_MODE] = 0
|
||||
#Global enable logic dst port + dstport enq
|
||||
[QOS_SERVICE_QUEUE_EGRESS_EN] = 0
|
||||
|
||||
#----------------- Stacking Init Parameter --------------
|
||||
#0: normal mode; 1: spine-leaf mode
|
||||
[FABRIC MODE] = 0
|
||||
[STACKING VERSION] = 1
|
||||
|
||||
#----------------- SDK&SAI Debug Level Init Parameter --------------
|
||||
# SDK_DEBUG_TO_SYSLOG should be enable, 1 : enable ; 0 : disable
|
||||
[SDK_DEBUG_TO_SYSLOG] = 0;
|
||||
|
||||
# Level same as SAI_LOG_LEVEL : 0 : debug ; 1 : info ; 2 : notice ; 3 : warning ; 4 : error ; 5 : critical
|
||||
[DEBUG_LOG_LEVEL_SDK] = 1 ;
|
||||
[DEBUG_LOG_LEVEL_SAI] = 0;
|
||||
|
||||
# CTC_ERROR_RETURN(g_error_on) in SDK to syslog, 1 : enable ; 0 : disable
|
||||
[DEBUG_SDK_G_ERROR_ON] = 0;
|
||||
|
||||
# SDK debug module id (scope from 1 ~47,detail to see sdk_debug_module_t.csv),default all modules
|
||||
[DEBUG_SDK_MODULE] = 0;
|
||||
|
||||
# part of SDK, 1 : enable in part ; 0 : disable in part
|
||||
[DEBUG_SDK_CTC] = 0;
|
||||
[DEBUG_SDK_SYS] = 1;
|
@ -0,0 +1,281 @@
|
||||
#Generated by 'CTC DataPath Tools' on Fri Aug 9 14:48:37 2019
|
||||
#Version 1.0, Supported by TsingMa SDK
|
||||
|
||||
|
||||
#SERDES_MODE : 0-NONE, 1-XFI, 2-SGMII, 3-Not Support, 4-QSGMII, 5-XAUI, 6-DXAUI, 7-XLG, 8-CG, 9-SGMII2G5
|
||||
# 10-USXGMII-S, 11-USXGMII-M2G5, 12-USXGMII-M5G, 13-XXVG, 14-LG, 15-100BASE-FX
|
||||
#SERDES_RX_POLY: 0-Normal, 1-Inverse
|
||||
#SERDES_SWITCH : 0-Not Support Dynamic Switch, 1-Support Dynamic Switch
|
||||
|
||||
[WLAN_ENABLE] = 1
|
||||
[DOT1AE_ENABLE] = 1
|
||||
|
||||
[CORE_PLLA] = 600
|
||||
#{
|
||||
[SERDES_ITEM]
|
||||
#repeat 32 step 6
|
||||
[SERDES_ID] = 0
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 1
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 2
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 3
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 4
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 5
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 6
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 7
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 8
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 9
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 10
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 11
|
||||
[SERDES_MODE] = 4
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 0
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 12
|
||||
[SERDES_MODE] = 1
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 13
|
||||
[SERDES_MODE] = 1
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 14
|
||||
[SERDES_MODE] = 1
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 15
|
||||
[SERDES_MODE] = 1
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 16
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 17
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 18
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 19
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 20
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 21
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 22
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 23
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 24
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 25
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 26
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 1
|
||||
|
||||
[SERDES_ID] = 27
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 1
|
||||
|
||||
[SERDES_ID] = 28
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 0
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 29
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 0
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 0
|
||||
|
||||
[SERDES_ID] = 30
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 1
|
||||
|
||||
[SERDES_ID] = 31
|
||||
[SERDES_MODE] = 3
|
||||
[SERDES_RX_POLY] = 1
|
||||
[SERDES_TX_POLY] = 1
|
||||
[SERDES_SWITCH] = 1
|
||||
[SERDES_GROUP] = 1
|
||||
|
||||
#repeat end
|
||||
#}
|
||||
|
||||
|
||||
[SERDES_TO_LPORT]
|
||||
#{
|
||||
| QSGMII/USXGMII-M2G5 | USXGMII-M5G | USXGMII-S | 100BASE-FX | SGMII/SGMII2G5/XFI | XAUI/DXAUI | XLG | XXVG | LG | CG
|
||||
---------|---------------------|-------------|-----------|------------|--------------------|------------|-----|------|----|---
|
||||
serdes 0 |0 /1 /2 /3 |0 /1 |0 |0 |0 |0 |0 |NA |NA |NA
|
||||
serdes 1 |4 /5 /6 /7 |4 /5 |1 |1 |1 |0 |0 |NA |NA |NA
|
||||
serdes 2 |16/17/18/19 |16/17 |2 |2 |2 |0 |0 |NA |NA |NA
|
||||
serdes 3 |20/21/22/23 |20/21 |3 |3 |3 |0 |0 |NA |NA |NA
|
||||
serdes 4 |8 /9 /10/11 |8 /9 |8 |8 |8 |8 |8 |NA |NA |NA
|
||||
serdes 5 |32/33/34/35 |32/33 |9 |9 |9 |8 |8 |NA |NA |NA
|
||||
serdes 6 |36/37/38/39 |36/37 |10 |10 |10 |8 |8 |NA |NA |NA
|
||||
serdes 7 |40/41/42/43 |40/41 |11 |11 |11 |8 |8 |NA |NA |NA
|
||||
serdes 8 |24/25/26/27 |24/25 |24 |24 |24 |24 |24 |NA |NA |NA
|
||||
serdes 9 |48/49/50/51 |48/49 |25 |25 |25 |24 |24 |NA |NA |NA
|
||||
serdes 10|52/53/54/55 |52/53 |26 |26 |26 |24 |24 |NA |NA |NA
|
||||
serdes 11|56/57/58/59 |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 12|NA |NA |NA |12 |12 |12 |12 |NA |NA |NA
|
||||
serdes 13|NA |NA |NA |13 |13 |12 |12 |NA |NA |NA
|
||||
serdes 14|NA |NA |NA |14 |14 |12 |12 |NA |NA |NA
|
||||
serdes 15|NA |NA |NA |15 |15 |12 |12 |NA |NA |NA
|
||||
serdes 16|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 17|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 18|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 19|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 20|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 21|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 22|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 23|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 24|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 25|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 26|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 27|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 28|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 29|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 30|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
serdes 31|NA |NA |NA |NA |NA |NA |NA |NA |NA |NA
|
||||
#}
|
70
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s/buffers.json.j2
Executable file
70
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s/buffers.json.j2
Executable file
@ -0,0 +1,70 @@
|
||||
{# Default values which will be used if no actual configura available #}
|
||||
{% set default_cable = '40m' %}
|
||||
{% set default_ports_num = 54 -%}
|
||||
|
||||
{# Port configuration to cable length look-up table #}
|
||||
{# Each record describes mapping of DUT (DUT port) role and neighbor role to cable length #}
|
||||
{# Roles described in the minigraph #}
|
||||
{% set ports2cable = {
|
||||
'torrouter_server' : '5m',
|
||||
'leafrouter_torrouter' : '40m',
|
||||
'spinerouter_leafrouter' : '300m'
|
||||
}
|
||||
%}
|
||||
|
||||
{%- macro cable_length(port_name) -%}
|
||||
{%- set cable_len = [] -%}
|
||||
{%- for local_port in DEVICE_NEIGHBOR -%}
|
||||
{%- if local_port == port_name -%}
|
||||
{%- if DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[local_port].name] -%}
|
||||
{%- set neighbor = DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[local_port].name] -%}
|
||||
{%- set neighbor_role = neighbor.type -%}
|
||||
{%- set roles1 = switch_role + '_' + neighbor_role %}
|
||||
{%- set roles2 = neighbor_role + '_' + switch_role -%}
|
||||
{%- set roles1 = roles1 | lower -%}
|
||||
{%- set roles2 = roles2 | lower -%}
|
||||
{%- if roles1 in ports2cable -%}
|
||||
{%- if cable_len.append(ports2cable[roles1]) -%}{%- endif -%}
|
||||
{%- elif roles2 in ports2cable -%}
|
||||
{%- if cable_len.append(ports2cable[roles2]) -%}{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
{%- if cable_len -%}
|
||||
{{ cable_len.0 }}
|
||||
{%- else -%}
|
||||
{{ default_cable }}
|
||||
{%- endif -%}
|
||||
{% endmacro %}
|
||||
|
||||
{%- if DEVICE_METADATA is defined %}
|
||||
{%- set switch_role = DEVICE_METADATA['localhost']['type'] %}
|
||||
{%- endif -%}
|
||||
|
||||
{# Generate list of ports if not defined #}
|
||||
{% if PORT is not defined %}
|
||||
{% set PORT = [] %}
|
||||
{% for port_idx in range(1,default_ports_num+1) %}
|
||||
{% if PORT.append("Ethernet%d" % (port_idx)) %}{% endif %}
|
||||
{% endfor %}
|
||||
{% endif -%}
|
||||
|
||||
{% set port_names_list = [] %}
|
||||
{% for port in PORT %}
|
||||
{%- if port_names_list.append(port) %}{% endif %}
|
||||
{% endfor %}
|
||||
{% set port_names = port_names_list | join(',') -%}
|
||||
|
||||
{
|
||||
"CABLE_LENGTH": {
|
||||
"AZURE": {
|
||||
{% for port in PORT %}
|
||||
{% set cable = cable_length(port) -%}
|
||||
"{{ port }}": "{{ cable }}"{%- if not loop.last -%},{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,21 @@
|
||||
# PG lossless profiles.
|
||||
# speed cable size xon xoff threshold
|
||||
1000 5m 34816 18432 16384 0
|
||||
10000 5m 34816 18432 16384 0
|
||||
25000 5m 34816 18432 16384 0
|
||||
40000 5m 34816 18432 16384 0
|
||||
50000 5m 34816 18432 16384 0
|
||||
100000 5m 36864 18432 18432 0
|
||||
1000 40m 36864 18432 18432 0
|
||||
10000 40m 36864 18432 18432 0
|
||||
25000 40m 39936 18432 21504 0
|
||||
40000 40m 41984 18432 23552 0
|
||||
50000 40m 41984 18432 23552 0
|
||||
100000 40m 54272 18432 35840 0
|
||||
1000 300m 49152 18432 30720 0
|
||||
10000 300m 49152 18432 30720 0
|
||||
25000 300m 71680 18432 53248 0
|
||||
40000 300m 94208 18432 75776 0
|
||||
50000 300m 94208 18432 75776 0
|
||||
100000 300m 184320 18432 165888 0
|
||||
|
@ -0,0 +1,53 @@
|
||||
# name lanes alias index speed fec
|
||||
Ethernet0 1 eth-0-1 0 1000 none
|
||||
Ethernet1 0 eth-0-2 1 1000 none
|
||||
Ethernet2 3 eth-0-3 2 1000 none
|
||||
Ethernet3 2 eth-0-4 3 1000 none
|
||||
Ethernet4 5 eth-0-5 4 1000 none
|
||||
Ethernet5 4 eth-0-6 5 1000 none
|
||||
Ethernet6 7 eth-0-7 6 1000 none
|
||||
Ethernet7 6 eth-0-8 7 1000 none
|
||||
Ethernet8 17 eth-0-9 8 1000 none
|
||||
Ethernet9 16 eth-0-10 9 1000 none
|
||||
Ethernet10 19 eth-0-11 10 1000 none
|
||||
Ethernet11 18 eth-0-12 11 1000 none
|
||||
Ethernet12 21 eth-0-13 12 1000 none
|
||||
Ethernet13 20 eth-0-14 13 1000 none
|
||||
Ethernet14 23 eth-0-15 14 1000 none
|
||||
Ethernet15 22 eth-0-16 15 1000 none
|
||||
Ethernet16 9 eth-0-17 16 1000 none
|
||||
Ethernet17 8 eth-0-18 17 1000 none
|
||||
Ethernet18 11 eth-0-19 18 1000 none
|
||||
Ethernet19 10 eth-0-20 19 1000 none
|
||||
Ethernet20 33 eth-0-21 20 1000 none
|
||||
Ethernet21 32 eth-0-22 21 1000 none
|
||||
Ethernet22 35 eth-0-23 22 1000 none
|
||||
Ethernet23 34 eth-0-24 23 1000 none
|
||||
Ethernet24 37 eth-0-25 24 1000 none
|
||||
Ethernet25 36 eth-0-26 25 1000 none
|
||||
Ethernet26 39 eth-0-27 26 1000 none
|
||||
Ethernet27 38 eth-0-28 27 1000 none
|
||||
Ethernet28 41 eth-0-29 28 1000 none
|
||||
Ethernet29 40 eth-0-30 29 1000 none
|
||||
Ethernet30 43 eth-0-31 30 1000 none
|
||||
Ethernet31 42 eth-0-32 31 1000 none
|
||||
Ethernet32 25 eth-0-33 32 1000 none
|
||||
Ethernet33 24 eth-0-34 33 1000 none
|
||||
Ethernet34 27 eth-0-35 34 1000 none
|
||||
Ethernet35 26 eth-0-36 35 1000 none
|
||||
Ethernet36 49 eth-0-37 36 1000 none
|
||||
Ethernet37 48 eth-0-38 37 1000 none
|
||||
Ethernet38 51 eth-0-39 38 1000 none
|
||||
Ethernet39 50 eth-0-40 39 1000 none
|
||||
Ethernet40 53 eth-0-41 40 1000 none
|
||||
Ethernet41 52 eth-0-42 41 1000 none
|
||||
Ethernet42 55 eth-0-43 42 1000 none
|
||||
Ethernet43 54 eth-0-44 43 1000 none
|
||||
Ethernet44 57 eth-0-45 44 1000 none
|
||||
Ethernet45 56 eth-0-46 45 1000 none
|
||||
Ethernet46 59 eth-0-47 46 1000 none
|
||||
Ethernet47 58 eth-0-48 47 1000 none
|
||||
Ethernet48 13 eth-0-49 48 10000 none
|
||||
Ethernet49 12 eth-0-50 49 10000 none
|
||||
Ethernet50 15 eth-0-51 50 10000 none
|
||||
Ethernet51 14 eth-0-52 51 10000 none
|
1
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s/qos.json.j2
Executable file
1
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s/qos.json.j2
Executable file
@ -0,0 +1 @@
|
||||
{%- include 'qos_config.j2' %}
|
4
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s/sai.profile
Executable file
4
device/fs/arm64-fs_s5800_48t4s-r0/S5800-48t4s/sai.profile
Executable file
@ -0,0 +1,4 @@
|
||||
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/S5800-48t4s-chip-profile.txt
|
||||
SAI_HW_PORT_PROFILE_ID_CONFIG_FILE=/usr/share/sonic/hwsku/S5800-48t4s-datapath.txt
|
||||
SAI_PLATFORM_CFG_FILE=/usr/share/sonic/hwsku/S5800-48t4s-board.json
|
||||
SAI_PHY_DRIVER_PATH=/usr/lib/phy_drv/E530-48t4x-p
|
1
device/fs/arm64-fs_s5800_48t4s-r0/default_sku
Normal file
1
device/fs/arm64-fs_s5800_48t4s-r0/default_sku
Normal file
@ -0,0 +1 @@
|
||||
S5800-48t4s-mars8p l2
|
12
device/fs/arm64-fs_s5800_48t4s-r0/fancontrol
Normal file
12
device/fs/arm64-fs_s5800_48t4s-r0/fancontrol
Normal file
@ -0,0 +1,12 @@
|
||||
# Configuration file generated by pwmconfig, changes will be lost
|
||||
INTERVAL=10
|
||||
DEVPATH=hwmon1=devices/platform/soc/soc:fan-ctc5236
|
||||
DEVNAME=hwmon1=ctc5236fan
|
||||
FCTEMPS=hwmon1/pwm1=hwmon1/temp1_input hwmon1/pwm2=hwmon1/temp1_input hwmon1/pwm3=hwmon1/temp1_input
|
||||
FCFANS=hwmon1/pwm1=hwmon1/fan1_input hwmon1/pwm2=hwmon1/fan2_input hwmon1/pwm3=hwmon1/fan3_input
|
||||
MINTEMP=hwmon1/pwm1=30 hwmon1/pwm2=30 hwmon1/pwm3=30
|
||||
MAXTEMP=hwmon1/pwm1=90 hwmon1/pwm2=90 hwmon1/pwm3=90
|
||||
MINSTART=hwmon1/pwm1=12 hwmon1/pwm2=12 hwmon1/pwm3=12
|
||||
MINSTOP=hwmon1/pwm1=6 hwmon1/pwm2=6 hwmon1/pwm3=6
|
||||
MINPWM=hwmon1/pwm1=6 hwmon1/pwm2=6 hwmon1/pwm3=6
|
||||
MAXPWM=hwmon1/pwm1=18 hwmon1/pwm2=18 hwmon1/pwm3=18
|
0
device/fs/arm64-fs_s5800_48t4s-r0/installer.conf
Normal file
0
device/fs/arm64-fs_s5800_48t4s-r0/installer.conf
Normal file
1
device/fs/arm64-fs_s5800_48t4s-r0/platform_asic
Normal file
1
device/fs/arm64-fs_s5800_48t4s-r0/platform_asic
Normal file
@ -0,0 +1 @@
|
||||
centec
|
@ -0,0 +1,8 @@
|
||||
{
|
||||
"chassis": {
|
||||
"S5800-48t4s": {
|
||||
"component": {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
13
device/fs/arm64-fs_s5800_48t4s-r0/platform_reboot
Executable file
13
device/fs/arm64-fs_s5800_48t4s-r0/platform_reboot
Executable file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
def main():
|
||||
# reboot the system
|
||||
with open('/sys/class/gpio/export', 'w') as file:
|
||||
file.write('502\n')
|
||||
with open('/sys/class/gpio/gpio502/direction', 'w') as file:
|
||||
file.write('out\n')
|
||||
with open('/sys/class/gpio/gpio502/value', 'w') as file:
|
||||
file.write('1\n')
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
22
device/fs/arm64-fs_s5800_48t4s-r0/plugins/eeprom.py
Executable file
22
device/fs/arm64-fs_s5800_48t4s-r0/plugins/eeprom.py
Executable file
@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#############################################################################
|
||||
# FS S5800-48T4S
|
||||
#
|
||||
# Platform and model specific eeprom subclass, inherits from the base class,
|
||||
# and provides the followings:
|
||||
# - the eeprom format definition
|
||||
# - specific encoder/decoder if there is special need
|
||||
#############################################################################
|
||||
|
||||
try:
|
||||
from sonic_eeprom import eeprom_tlvinfo
|
||||
except ImportError as e:
|
||||
raise ImportError (str(e) + "- required module not found")
|
||||
|
||||
|
||||
class board(eeprom_tlvinfo.TlvInfoDecoder):
|
||||
|
||||
def __init__(self, name, path, cpld_root, ro):
|
||||
self.eeprom_path = "/dev/mtd3"
|
||||
super(board, self).__init__(self.eeprom_path, 0, '', True)
|
98
device/fs/arm64-fs_s5800_48t4s-r0/plugins/led_control.py
Executable file
98
device/fs/arm64-fs_s5800_48t4s-r0/plugins/led_control.py
Executable file
@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# led_control.py
|
||||
#
|
||||
# Platform-specific LED control functionality for SONiC
|
||||
#
|
||||
|
||||
try:
|
||||
from sonic_led.led_control_base import LedControlBase
|
||||
import syslog
|
||||
from socket import *
|
||||
from select import *
|
||||
except ImportError as e:
|
||||
raise ImportError(str(e) + " - required module not found")
|
||||
|
||||
|
||||
def DBG_PRINT(str):
|
||||
syslog.openlog("fs-led")
|
||||
syslog.syslog(syslog.LOG_INFO, str)
|
||||
syslog.closelog()
|
||||
|
||||
|
||||
class LedControl(LedControlBase):
|
||||
"""Platform specific LED control class"""
|
||||
|
||||
|
||||
# Helper method to map SONiC port name to index
|
||||
def _port_name_to_index(self, port_name):
|
||||
# Strip "Ethernet" off port name
|
||||
if not port_name.startswith(self.SONIC_PORT_NAME_PREFIX):
|
||||
return -1
|
||||
|
||||
port_idx = int(port_name[len(self.SONIC_PORT_NAME_PREFIX):])
|
||||
return port_idx + 1
|
||||
|
||||
def _port_state_to_mode(self, port_idx, state):
|
||||
if state == "up":
|
||||
return self.LED_MODE_UP[0] if (port_idx < 49) else self.LED_MODE_UP[1]
|
||||
else:
|
||||
return self.LED_MODE_DOWN[0] if (port_idx < 49) else self.LED_MODE_DOWN[1]
|
||||
|
||||
def _port_led_mode_update(self, port_idx, ledMode):
|
||||
with open(self.f_led.format("port{}".format(port_idx)), 'w') as led_file:
|
||||
led_file.write(str(ledMode))
|
||||
|
||||
def _initSystemLed(self):
|
||||
try:
|
||||
with open(self.f_led.format("system"), 'w') as led_file:
|
||||
led_file.write("1")
|
||||
DBG_PRINT("init system led to normal")
|
||||
with open(self.f_led.format("idn"), 'w') as led_file:
|
||||
led_file.write("1")
|
||||
DBG_PRINT("init idn led to off")
|
||||
except IOError as e:
|
||||
DBG_PRINT(str(e))
|
||||
|
||||
def _initPanelLed(self):
|
||||
with open(self.f_led.format("port1"), 'r') as led_file:
|
||||
shouldInit = (int(led_file.read()) == 0)
|
||||
|
||||
if shouldInit == True:
|
||||
for idx in range(1, 53):
|
||||
defmode = self._port_state_to_mode(idx, "down")
|
||||
with open(self.f_led.format("port{}".format(idx)), 'w') as led_file:
|
||||
led_file.write(str(defmode))
|
||||
DBG_PRINT("init port{} led to mode={}".format(idx, defmode))
|
||||
|
||||
def _initDefaultConfig(self):
|
||||
DBG_PRINT("start init led")
|
||||
|
||||
self._initSystemLed()
|
||||
self._initPanelLed()
|
||||
|
||||
DBG_PRINT("init led done")
|
||||
|
||||
|
||||
# Concrete implementation of port_link_state_change() method
|
||||
def port_link_state_change(self, portname, state):
|
||||
port_idx = self._port_name_to_index(portname)
|
||||
ledMode = self._port_state_to_mode(port_idx, state)
|
||||
with open(self.f_led.format("port{}".format(port_idx)), 'r') as led_file:
|
||||
saveMode = int(led_file.read())
|
||||
|
||||
if ledMode == saveMode:
|
||||
return
|
||||
|
||||
self._port_led_mode_update(port_idx, ledMode)
|
||||
DBG_PRINT("update {} led mode from {} to {}".format(portname, saveMode, ledMode))
|
||||
|
||||
|
||||
# Constructor
|
||||
def __init__(self):
|
||||
self.SONIC_PORT_NAME_PREFIX = "Ethernet"
|
||||
self.LED_MODE_UP = [2, 11]
|
||||
self.LED_MODE_DOWN = [1, 7]
|
||||
|
||||
self.f_led = "/sys/class/leds/{}/brightness"
|
||||
self._initDefaultConfig()
|
72
device/fs/arm64-fs_s5800_48t4s-r0/plugins/psuutil.py
Executable file
72
device/fs/arm64-fs_s5800_48t4s-r0/plugins/psuutil.py
Executable file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#############################################################################
|
||||
# FS
|
||||
#
|
||||
# Module contains an implementation of SONiC PSU Base API and
|
||||
# provides the PSUs status which are available in the platform
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
try:
|
||||
from sonic_psu.psu_base import PsuBase
|
||||
except ImportError as e:
|
||||
raise ImportError (str(e) + "- required module not found")
|
||||
|
||||
class PsuUtil(PsuBase):
|
||||
"""Platform-specific PSUutil class"""
|
||||
|
||||
def __init__(self):
|
||||
PsuBase.__init__(self)
|
||||
|
||||
self.psu_path = "/sys/class/psu/psu{}/"
|
||||
self.psu_presence = "psu_presence"
|
||||
self.psu_oper_status = "psu_status"
|
||||
|
||||
def get_num_psus(self):
|
||||
"""
|
||||
Retrieves the number of PSUs available on the device
|
||||
|
||||
:return: An integer, the number of PSUs available on the device
|
||||
"""
|
||||
return 2
|
||||
|
||||
def get_psu_status(self, index):
|
||||
"""
|
||||
Retrieves the oprational status of power supply unit (PSU) defined
|
||||
by 1-based index <index>
|
||||
|
||||
:param index: An integer, 1-based index of the PSU of which to query status
|
||||
:return: Boolean, True if PSU is operating properly, False if PSU is faulty
|
||||
"""
|
||||
if index is None:
|
||||
return False
|
||||
|
||||
status = 0
|
||||
try:
|
||||
with open(self.psu_path.format(index) + self.psu_oper_status, 'r') as power_status:
|
||||
status = int(power_status.read())
|
||||
except IOError:
|
||||
return False
|
||||
|
||||
return status == 1
|
||||
|
||||
def get_psu_presence(self, index):
|
||||
"""
|
||||
Retrieves the presence status of power supply unit (PSU) defined
|
||||
by 1-based index <index>
|
||||
|
||||
:param index: An integer, 1-based index of the PSU of which to query status
|
||||
:return: Boolean, True if PSU is plugged, False if not
|
||||
"""
|
||||
if index is None:
|
||||
return False
|
||||
|
||||
status = 0
|
||||
try:
|
||||
with open(self.psu_path.format(index) + self.psu_presence, 'r') as presence_status:
|
||||
status = int(presence_status.read())
|
||||
except IOError:
|
||||
return False
|
||||
|
||||
return status == 1
|
166
device/fs/arm64-fs_s5800_48t4s-r0/plugins/sfputil.py
Executable file
166
device/fs/arm64-fs_s5800_48t4s-r0/plugins/sfputil.py
Executable file
@ -0,0 +1,166 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# sfputil.py
|
||||
#
|
||||
# Platform-specific SFP transceiver interface for SONiC
|
||||
#
|
||||
|
||||
try:
|
||||
import time
|
||||
from socket import *
|
||||
from select import *
|
||||
from sonic_sfp.sfputilbase import SfpUtilBase
|
||||
except ImportError as e:
|
||||
raise ImportError("%s - required module not found" % str(e))
|
||||
|
||||
|
||||
def DBG_PRINT(str):
|
||||
print(str + "\n")
|
||||
|
||||
SFP_STATUS_INSERTED = '1'
|
||||
SFP_STATUS_REMOVED = '0'
|
||||
|
||||
class SfpUtil(SfpUtilBase):
|
||||
"""Platform-specific SfpUtil class"""
|
||||
|
||||
@property
|
||||
def port_start(self):
|
||||
return self.PORT_START
|
||||
|
||||
@property
|
||||
def port_end(self):
|
||||
return self.PORT_END
|
||||
|
||||
@property
|
||||
def sfp_base(self):
|
||||
return self.SFP_BASE
|
||||
|
||||
@property
|
||||
def qsfp_ports(self):
|
||||
return ()
|
||||
|
||||
@property
|
||||
def port_to_eeprom_mapping(self):
|
||||
return self.eeprom_mapping
|
||||
|
||||
def is_logical_port(self, port_name):
|
||||
return True
|
||||
|
||||
def get_eeprom_data(self, port):
|
||||
ret = None
|
||||
port_num = self.get_logical_to_physical(port)[0] + 1
|
||||
if port_num < self.port_start or port_num > self.port_end:
|
||||
return ret
|
||||
if port_num < self.sfp_base:
|
||||
return ret
|
||||
try:
|
||||
with open(self.eeprom_mapping[port_num], 'r') as eeprom_file:
|
||||
ret = eeprom_file.read()
|
||||
except IOError as e:
|
||||
DBG_PRINT(str(e))
|
||||
|
||||
return ret
|
||||
|
||||
def __init__(self):
|
||||
self.SONIC_PORT_NAME_PREFIX = "Ethernet"
|
||||
self.PORT_START = 0
|
||||
self.PORT_END = 51
|
||||
self.SFP_BASE = 48
|
||||
self.PORTS_IN_BLOCK = 52
|
||||
self.logical = []
|
||||
self.physical_to_logical = {}
|
||||
self.logical_to_physical = {}
|
||||
self.logical_to_asic = {}
|
||||
self.data = {'valid':0, 'last':0}
|
||||
|
||||
self.eeprom_mapping = {}
|
||||
self.f_sfp_present = "/sys/class/sfp/sfp{}/sfp_presence"
|
||||
self.f_sfp_enable = "/sys/class/sfp/sfp{}/sfp_enable"
|
||||
for x in range(self.port_start, self.sfp_base):
|
||||
self.eeprom_mapping[x] = None
|
||||
for x in range(self.sfp_base, self.port_end + 1):
|
||||
self.eeprom_mapping[x] = "/sys/class/sfp/sfp{}/sfp_eeprom".format(x - self.sfp_base + 1)
|
||||
self.presence = {}
|
||||
for x in range(self.sfp_base, self.port_end + 1):
|
||||
self.presence[x] = False;
|
||||
|
||||
SfpUtilBase.__init__(self)
|
||||
|
||||
for x in range(self.sfp_base, self.port_end + 1):
|
||||
self.logical.append('Ethernet' + str(x))
|
||||
|
||||
def get_presence(self, port_num):
|
||||
# Check for invalid port_num
|
||||
if port_num < self.port_start or port_num > self.port_end:
|
||||
return False
|
||||
if port_num < self.sfp_base:
|
||||
return False
|
||||
try:
|
||||
with open(self.f_sfp_present.format(port_num - self.sfp_base + 1), 'r') as sfp_file:
|
||||
return 1 == int(sfp_file.read())
|
||||
except IOError as e:
|
||||
DBG_PRINT(str(e))
|
||||
|
||||
return False
|
||||
|
||||
def get_low_power_mode(self, port_num):
|
||||
# Check for invalid port_num
|
||||
if port_num < self.port_start or port_num > self.port_end:
|
||||
return False
|
||||
|
||||
return False
|
||||
|
||||
def set_low_power_mode(self, port_num, lpmode):
|
||||
# Check for invalid port_num
|
||||
if port_num < self.port_start or port_num > self.port_end:
|
||||
return False
|
||||
|
||||
return False
|
||||
|
||||
def reset(self, port_num):
|
||||
# Check for invalid port_num
|
||||
if port_num < self.port_start or port_num > self.port_end:
|
||||
return False
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def read_porttab_mappings(self, porttabfile, asic_inst = 0):
|
||||
for x in range(self.sfp_base, self.port_end + 1):
|
||||
self.logical_to_physical['Ethernet' + str(x)] = [x]
|
||||
self.logical_to_asic['Ethernet' + str(x)] = 0
|
||||
self.physical_to_logical[x] = ['Ethernet' + str(x)]
|
||||
|
||||
def get_transceiver_change_event(self, timeout=2000):
|
||||
now = time.time()
|
||||
port_dict = {}
|
||||
|
||||
if timeout < 1000:
|
||||
timeout = 1000
|
||||
timeout = (timeout) / float(1000) # Convert to secs
|
||||
|
||||
if now < (self.data['last'] + timeout) and self.data['valid']:
|
||||
return True, {}
|
||||
|
||||
for x in range(self.sfp_base, self.port_end + 1):
|
||||
presence = self.get_presence(x)
|
||||
if presence != self.presence[x]:
|
||||
self.presence[x] = presence
|
||||
# index in port_config.ini
|
||||
if presence:
|
||||
port_dict[x] = SFP_STATUS_INSERTED
|
||||
else:
|
||||
port_dict[x] = SFP_STATUS_REMOVED
|
||||
|
||||
if bool(port_dict):
|
||||
self.data['last'] = now
|
||||
self.data['valid'] = 1
|
||||
return True, port_dict
|
||||
else:
|
||||
time.sleep(0.5)
|
||||
return True, {}
|
||||
|
||||
def get_transceiver_info_dict(self, port_num):
|
||||
transceiver_info_dict = SfpUtilBase.get_transceiver_info_dict(self, port_num)
|
||||
transceiver_info_dict['vendor_rev'] = transceiver_info_dict['hardware_rev']
|
||||
return transceiver_info_dict
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
@ -10,6 +10,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(CENTEC_E530_48T4X_P_PLATFORM_MODULE)
|
||||
$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(CENTEC_E530_24X2C_PLATFORM_MODULE)
|
||||
$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(CENTEC_E530_48S4X_PLATFORM_MODULE)
|
||||
$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(CENTEC_E530_24X2Q_PLATFORM_MODULE)
|
||||
$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(FS_S5800_48T4S_PLATFORM_MODULE)
|
||||
|
||||
ifeq ($(INSTALL_DEBUG_TOOLS),y)
|
||||
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_DBG_IMAGES)
|
||||
|
12
platform/centec-arm64/platform-modules-fs.mk
Normal file
12
platform/centec-arm64/platform-modules-fs.mk
Normal file
@ -0,0 +1,12 @@
|
||||
# fs s5800_48t4s Platform modules
|
||||
|
||||
FS_S5800_48T4S_PLATFORM_MODULE_VERSION =1.0
|
||||
|
||||
export FS_S5800_48T4S_PLATFORM_MODULE_VERSION
|
||||
|
||||
FS_S5800_48T4S_PLATFORM_MODULE = platform-modules-s5800-48t4s_$(FS_S5800_48T4S_PLATFORM_MODULE_VERSION)_arm64.deb
|
||||
|
||||
$(FS_S5800_48T4S_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-fs
|
||||
$(FS_S5800_48T4S_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON)
|
||||
$(FS_S5800_48T4S_PLATFORM_MODULE)_PLATFORM = arm64-fs_s5800_48t4s-r0
|
||||
SONIC_DPKG_DEBS += $(FS_S5800_48T4S_PLATFORM_MODULE)
|
@ -6,6 +6,7 @@ include $(PLATFORM_PATH)/one-image.mk
|
||||
include $(PLATFORM_PATH)/libsaithrift-dev.mk
|
||||
include $(PLATFORM_PATH)/tsingma-bsp.mk
|
||||
include $(PLATFORM_PATH)/platform-modules-centec-e530.mk
|
||||
include $(PLATFORM_PATH)/platform-modules-fs.mk
|
||||
|
||||
SONIC_ALL += $(SONIC_ONE_IMAGE) \
|
||||
$(DOCKER_FPM)
|
||||
|
3
platform/centec-arm64/sonic-platform-modules-fs/48t4s/modules/Makefile
Executable file
3
platform/centec-arm64/sonic-platform-modules-fs/48t4s/modules/Makefile
Executable file
@ -0,0 +1,3 @@
|
||||
KBUILD_EXTRA_SYMBOLS = /sonic/platform/centec-arm64/sonic-platform-modules-fs/pca954x/Module.symvers
|
||||
|
||||
obj-m := fs_s5800_48t4s_platform.o
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=FS modules init
|
||||
After=local-fs.target
|
||||
Before=syncd.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=-/etc/init.d/platform-modules-s5800-48t4s start
|
||||
ExecStop=-/etc/init.d/platform-modules-s5800-48t4s stop
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
15
platform/centec-arm64/sonic-platform-modules-fs/48t4s/setup.py
Executable file
15
platform/centec-arm64/sonic-platform-modules-fs/48t4s/setup.py
Executable file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
from setuptools import setup
|
||||
os.listdir
|
||||
|
||||
setup(
|
||||
name='sonic_platform',
|
||||
version='1.0',
|
||||
description='Module to initialize fs s5800-48t4s platforms',
|
||||
|
||||
packages=['sonic_platform'],
|
||||
package_dir={'sonic_platform': 'sonic_platform'},
|
||||
)
|
||||
|
@ -0,0 +1,3 @@
|
||||
__all__ = ["platform", "chassis", "sfp", "eeprom", "psu", "thermal", "fan", "fan_drawer", "led"]
|
||||
from . import platform
|
||||
|
242
platform/centec-arm64/sonic-platform-modules-fs/48t4s/sonic_platform/chassis.py
Executable file
242
platform/centec-arm64/sonic-platform-modules-fs/48t4s/sonic_platform/chassis.py
Executable file
@ -0,0 +1,242 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Name: chassis.py, version: 1.0
|
||||
#
|
||||
# Description: Module contains the definitions of SONiC platform APIs
|
||||
#
|
||||
|
||||
try:
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
from sonic_platform_base.chassis_base import ChassisBase
|
||||
from sonic_platform.eeprom import Eeprom
|
||||
from sonic_platform.fan_drawer import FanDrawer
|
||||
from sonic_platform.thermal import Thermal
|
||||
from sonic_platform.sfp import Sfp
|
||||
from sonic_platform.psu import Psu
|
||||
|
||||
except ImportError as e:
|
||||
raise ImportError(str(e) + "- required module not found")
|
||||
|
||||
NUM_FAN_TRAY = 1
|
||||
NUM_THERMAL = 1
|
||||
NUM_PORT = 52
|
||||
NUM_PSU = 2
|
||||
|
||||
REBOOT_CAUSE_DIR = "/host/reboot-cause/"
|
||||
REBOOT_CAUSE_FILE = os.path.join(REBOOT_CAUSE_DIR, "reboot-cause.txt")
|
||||
|
||||
class Chassis(ChassisBase):
|
||||
|
||||
# System status LED
|
||||
_led = None
|
||||
|
||||
def __init__(self):
|
||||
ChassisBase.__init__(self)
|
||||
|
||||
self.sfp_presence = {}
|
||||
|
||||
# Initialize EEPROM
|
||||
self._eeprom = Eeprom()
|
||||
# Initialize FAN
|
||||
for i in range(NUM_FAN_TRAY):
|
||||
fandrawer = FanDrawer(i)
|
||||
self._fan_drawer_list.append(fandrawer)
|
||||
self._fan_list.extend(fandrawer._fan_list)
|
||||
# Initialize THERMAL
|
||||
for index in range(0, NUM_THERMAL):
|
||||
thermal = Thermal(index)
|
||||
self._thermal_list.append(thermal)
|
||||
# Initialize SFP
|
||||
for index in range(0, NUM_PORT):
|
||||
sfp = Sfp(index)
|
||||
self._sfp_list.append(sfp)
|
||||
self.sfp_presence[int(index)] = False
|
||||
# Initialize PSU
|
||||
for index in range(0, NUM_PSU):
|
||||
psu = Psu(index + 1)
|
||||
self._psu_list.append(psu)
|
||||
|
||||
##############################################
|
||||
# Device methods
|
||||
##############################################
|
||||
|
||||
def get_name(self):
|
||||
"""
|
||||
Retrieves the name of the chassis
|
||||
Returns:
|
||||
string: The name of the chassis
|
||||
"""
|
||||
return self._eeprom.modelstr()
|
||||
|
||||
def get_presence(self):
|
||||
"""
|
||||
Retrieves the presence of the chassis
|
||||
Returns:
|
||||
bool: True if chassis is present, False if not
|
||||
"""
|
||||
return True
|
||||
|
||||
def get_model(self):
|
||||
"""
|
||||
Retrieves the model number (or part number) of the chassis
|
||||
Returns:
|
||||
string: Model/part number of chassis
|
||||
"""
|
||||
return self._eeprom.part_number_str()
|
||||
|
||||
def get_serial(self):
|
||||
"""
|
||||
Retrieves the serial number of the chassis
|
||||
Returns:
|
||||
string: Serial number of chassis
|
||||
"""
|
||||
return self._eeprom.serial_number_str()
|
||||
|
||||
def get_status(self):
|
||||
"""
|
||||
Retrieves the operational status of the chassis
|
||||
Returns:
|
||||
bool: A boolean value, True if chassis is operating properly
|
||||
False if not
|
||||
"""
|
||||
return True
|
||||
|
||||
##############################################
|
||||
# Chassis methods
|
||||
##############################################
|
||||
|
||||
def get_base_mac(self):
|
||||
"""
|
||||
Retrieves the base MAC address for the chassis
|
||||
|
||||
Returns:
|
||||
A string containing the MAC address in the format
|
||||
'XX:XX:XX:XX:XX:XX'
|
||||
"""
|
||||
return self._eeprom.base_mac_addr()
|
||||
|
||||
def get_serial_number(self):
|
||||
"""
|
||||
Retrieves the hardware serial number for the chassis
|
||||
|
||||
Returns:
|
||||
A string containing the hardware serial number for this chassis.
|
||||
"""
|
||||
return self._eeprom.serial_number_str()
|
||||
|
||||
def get_system_eeprom_info(self):
|
||||
"""
|
||||
Retrieves the full content of system EEPROM information for the chassis
|
||||
|
||||
Returns:
|
||||
A dictionary where keys are the type code defined in
|
||||
OCP ONIE TlvInfo EEPROM format and values are their corresponding
|
||||
values.
|
||||
Ex. { '0x21':'AG9064', '0x22':'V1.0', '0x23':'AG9064-0109867821',
|
||||
'0x24':'001c0f000fcd0a', '0x25':'02/03/2018 16:22:00',
|
||||
'0x26':'01', '0x27':'REV01', '0x28':'AG9064-C2358-16G'}
|
||||
"""
|
||||
return self._eeprom.system_eeprom_info()
|
||||
|
||||
def get_reboot_cause(self):
|
||||
"""
|
||||
Retrieves the cause of the previous reboot
|
||||
Returns:
|
||||
A tuple (string, string) where the first element is a string
|
||||
containing the cause of the previous reboot. This string must be
|
||||
one of the predefined strings in this class. If the first string
|
||||
is "REBOOT_CAUSE_HARDWARE_OTHER", the second string can be used
|
||||
to pass a description of the reboot cause.
|
||||
"""
|
||||
if os.path.exists(REBOOT_CAUSE_FILE):
|
||||
with open(REBOOT_CAUSE_FILE) as reboot_cause_file:
|
||||
reboot_cause = reboot_cause_file.readline()
|
||||
if re.search(r'User issued', reboot_cause) is None:
|
||||
return (self.REBOOT_CAUSE_POWER_LOSS, None)
|
||||
else:
|
||||
return (self.REBOOT_CAUSE_NON_HARDWARE, None)
|
||||
else:
|
||||
return (self.REBOOT_CAUSE_POWER_LOSS, None)
|
||||
|
||||
def get_change_event(self, timeout=2000):
|
||||
"""
|
||||
Returns a nested dictionary containing all devices which have
|
||||
experienced a change at chassis level
|
||||
|
||||
Args:
|
||||
timeout: Timeout in milliseconds (optional). If timeout == 0,
|
||||
this method will block until a change is detected.
|
||||
|
||||
Returns:
|
||||
(bool, dict):
|
||||
- True if call successful, False if not;
|
||||
- A nested dictionary where key is a device type,
|
||||
value is a dictionary with key:value pairs in the
|
||||
format of {'device_id':'device_event'},
|
||||
where device_id is the device ID for this device and
|
||||
device_event,
|
||||
status='1' represents device inserted,
|
||||
status='0' represents device removed.
|
||||
Ex. {'fan':{'0':'0', '2':'1'}, 'sfp':{'11':'0'}}
|
||||
indicates that fan 0 has been removed, fan 2
|
||||
has been inserted and sfp 11 has been removed.
|
||||
"""
|
||||
SFP_STATUS_INSERTED = '1'
|
||||
SFP_STATUS_REMOVED = '0'
|
||||
|
||||
old = time.time()
|
||||
timeout = (timeout) / float(1000) # Convert to secs
|
||||
port_dict = {}
|
||||
|
||||
while time.time() - old < timeout or timeout == 0:
|
||||
for sfp in self._sfp_list:
|
||||
sfp_presence = sfp.get_presence()
|
||||
if sfp_presence != self.sfp_presence[sfp._index]:
|
||||
self.sfp_presence[sfp._index] = sfp_presence
|
||||
if sfp_presence:
|
||||
port_dict[sfp._index] = SFP_STATUS_INSERTED
|
||||
else:
|
||||
port_dict[sfp._index] = SFP_STATUS_REMOVED
|
||||
|
||||
if not bool(port_dict):
|
||||
time.sleep(0.5)
|
||||
else:
|
||||
break
|
||||
|
||||
ret_dict = {'sfp': port_dict}
|
||||
return True, ret_dict
|
||||
|
||||
def get_num_psus(self):
|
||||
return len(self._psu_list)
|
||||
|
||||
def get_psu(self, psu_index):
|
||||
return self._psu_list[psu_index]
|
||||
|
||||
def initizalize_system_led(self):
|
||||
from .led import SystemLed
|
||||
Chassis._led = SystemLed()
|
||||
|
||||
def set_status_led(self, color):
|
||||
"""
|
||||
Sets the state of the system LED
|
||||
|
||||
Args:
|
||||
color: A string representing the color with which to set the
|
||||
system LED
|
||||
|
||||
Returns:
|
||||
bool: True if system LED state is set successfully, False if not
|
||||
"""
|
||||
return False if not Chassis._led else Chassis._led.set_status(color)
|
||||
|
||||
def get_status_led(self):
|
||||
"""
|
||||
Gets the state of the system LED
|
||||
|
||||
Returns:
|
||||
A string, one of the valid LED color strings which could be vendor
|
||||
specified.
|
||||
"""
|
||||
return None if not Chassis._led else Chassis._led.get_status()
|
@ -0,0 +1,111 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Name: eeprom.py, version: 1.0
|
||||
#
|
||||
# Description: Module contains the definitions of SONiC platform APIs
|
||||
#
|
||||
|
||||
try:
|
||||
from sonic_eeprom import eeprom_tlvinfo
|
||||
import binascii
|
||||
except ImportError as e:
|
||||
raise ImportError(str(e) + "- required module not found")
|
||||
|
||||
class Eeprom(eeprom_tlvinfo.TlvInfoDecoder):
|
||||
|
||||
def __init__(self):
|
||||
self.__eeprom_path = "/dev/mtd3"
|
||||
super(Eeprom, self).__init__(self.__eeprom_path, 0, '', True)
|
||||
self.__eeprom_tlv_dict = dict()
|
||||
try:
|
||||
self.open_eeprom()
|
||||
self.__eeprom_data = self.read_eeprom()
|
||||
except:
|
||||
self.__eeprom_data = "N/A"
|
||||
raise RuntimeError("Eeprom is not Programmed")
|
||||
else:
|
||||
eeprom = self.__eeprom_data
|
||||
|
||||
if not self.is_valid_tlvinfo_header(eeprom):
|
||||
return
|
||||
|
||||
total_length = (eeprom[9] << 8) | eeprom[10]
|
||||
tlv_index = self._TLV_INFO_HDR_LEN
|
||||
tlv_end = self._TLV_INFO_HDR_LEN + total_length
|
||||
|
||||
while (tlv_index + 2) < len(eeprom) and tlv_index < tlv_end:
|
||||
if not self.is_valid_tlv(eeprom[tlv_index:]):
|
||||
break
|
||||
|
||||
tlv = eeprom[tlv_index:tlv_index + 2
|
||||
+ eeprom[tlv_index + 1]]
|
||||
code = "0x%02X" % (tlv[0])
|
||||
|
||||
if tlv[0] == self._TLV_CODE_VENDOR_EXT:
|
||||
value = str((tlv[2] << 24) | (tlv[3] << 16) |
|
||||
(tlv[4] << 8) | tlv[5])
|
||||
value += str(tlv[6:6 + tlv[1]])
|
||||
else:
|
||||
name, value = self.decoder(None, tlv)
|
||||
|
||||
self.__eeprom_tlv_dict[code] = value
|
||||
if eeprom[tlv_index] == self._TLV_CODE_CRC_32:
|
||||
break
|
||||
|
||||
tlv_index += eeprom[tlv_index+1] + 2
|
||||
|
||||
def serial_number_str(self):
|
||||
(is_valid, results) = self.get_tlv_field(
|
||||
self.__eeprom_data, self._TLV_CODE_SERIAL_NUMBER)
|
||||
if not is_valid:
|
||||
return "N/A"
|
||||
return results[2].decode('ascii')
|
||||
|
||||
def base_mac_addr(self):
|
||||
(is_valid, t) = self.get_tlv_field(
|
||||
self.__eeprom_data, self._TLV_CODE_MAC_BASE)
|
||||
if not is_valid or t[1] != 6:
|
||||
return super(TlvInfoDecoder, self).switchaddrstr(e)
|
||||
|
||||
return ":".join([binascii.b2a_hex(T) for T in t[2]])
|
||||
|
||||
def modelstr(self):
|
||||
(is_valid, results) = self.get_tlv_field(
|
||||
self.__eeprom_data, self._TLV_CODE_PRODUCT_NAME)
|
||||
if not is_valid:
|
||||
return "N/A"
|
||||
|
||||
return results[2].decode('ascii')
|
||||
|
||||
def part_number_str(self):
|
||||
(is_valid, results) = self.get_tlv_field(
|
||||
self.__eeprom_data, self._TLV_CODE_PART_NUMBER)
|
||||
if not is_valid:
|
||||
return "N/A"
|
||||
|
||||
return results[2].decode('ascii')
|
||||
|
||||
def serial_tag_str(self):
|
||||
(is_valid, results) = self.get_tlv_field(
|
||||
self.__eeprom_data, self._TLV_CODE_SERVICE_TAG)
|
||||
if not is_valid:
|
||||
return "N/A"
|
||||
|
||||
return results[2].decode('ascii')
|
||||
|
||||
def revision_str(self):
|
||||
(is_valid, results) = self.get_tlv_field(
|
||||
self.__eeprom_data, self._TLV_CODE_DEVICE_VERSION)
|
||||
if not is_valid:
|
||||
return "N/A"
|
||||
|
||||
return results[2].decode('ascii')
|
||||
|
||||
def system_eeprom_info(self):
|
||||
"""
|
||||
Returns a dictionary, where keys are the type code defined in
|
||||
ONIE EEPROM format and values are their corresponding values
|
||||
found in the system EEPROM.
|
||||
"""
|
||||
return self.__eeprom_tlv_dict
|
||||
|
@ -0,0 +1,186 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#############################################################################
|
||||
# Celestica
|
||||
#
|
||||
# Module contains an implementation of SONiC Platform Base API and
|
||||
# provides the fan status which are available in the platform
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
import math
|
||||
import os.path
|
||||
|
||||
try:
|
||||
from sonic_platform_base.fan_base import FanBase
|
||||
except ImportError as e:
|
||||
raise ImportError(str(e) + "- required module not found")
|
||||
|
||||
FAN_PATH = "/sys/class/hwmon/hwmon1/"
|
||||
FAN_MAX_PWM = 255
|
||||
FAN_FAN_PWM = "pwm{}"
|
||||
FAN_FAN_INPUT = "fan{}_input"
|
||||
FAN_MAX_RPM = 9000
|
||||
FAN_NAME_LIST = ["FAN-1", "FAN-2", "FAN-3", "FAN-4"]
|
||||
|
||||
class Fan(FanBase):
|
||||
"""Platform-specific Fan class"""
|
||||
|
||||
def __init__(self, fan_tray_index, fan_index=0):
|
||||
self.fan_index = fan_index
|
||||
self.fan_tray_index = fan_tray_index
|
||||
|
||||
FanBase.__init__(self)
|
||||
|
||||
def __read_txt_file(self, file_path):
|
||||
try:
|
||||
with open(file_path, 'r') as fd:
|
||||
data = fd.read()
|
||||
return data.strip()
|
||||
except IOError:
|
||||
pass
|
||||
return ""
|
||||
|
||||
def __write_txt_file(self, file_path, value):
|
||||
try:
|
||||
with open(file_path, 'w') as fd:
|
||||
fd.write(str(value))
|
||||
except IOError:
|
||||
return False
|
||||
return True
|
||||
|
||||
def __search_file_by_name(self, directory, file_name):
|
||||
for dirpath, dirnames, files in os.walk(directory):
|
||||
for name in files:
|
||||
file_path = os.path.join(dirpath, name)
|
||||
if name in file_name:
|
||||
return file_path
|
||||
return None
|
||||
|
||||
def get_direction(self):
|
||||
"""
|
||||
Retrieves the direction of fan
|
||||
Returns:
|
||||
A string, either FAN_DIRECTION_INTAKE or FAN_DIRECTION_EXHAUST
|
||||
depending on fan direction
|
||||
"""
|
||||
direction = self.FAN_DIRECTION_EXHAUST
|
||||
return direction
|
||||
|
||||
def get_speed(self):
|
||||
"""
|
||||
Retrieves the speed of fan as a percentage of full speed
|
||||
Returns:
|
||||
An integer, the percentage of full fan speed, in the range 0 (off)
|
||||
to 100 (full speed)
|
||||
|
||||
Note:
|
||||
speed = pwm_in/255*100
|
||||
"""
|
||||
speed = 0
|
||||
fan_speed_sysfs_name = "fan{}_input".format(self.fan_index+1)
|
||||
fan_speed_sysfs_path = self.__search_file_by_name(
|
||||
FAN_PATH, fan_speed_sysfs_name)
|
||||
fan_speed_rpm = self.__read_txt_file(fan_speed_sysfs_path) or 0
|
||||
speed = math.ceil(float(fan_speed_rpm) * 100 / FAN_MAX_RPM)
|
||||
|
||||
return int(speed)
|
||||
|
||||
def get_target_speed(self):
|
||||
"""
|
||||
Retrieves the target (expected) speed of the fan
|
||||
Returns:
|
||||
An integer, the percentage of full fan speed, in the range 0 (off)
|
||||
to 100 (full speed)
|
||||
|
||||
Note:
|
||||
speed_pc = pwm_target/255*100
|
||||
|
||||
0 : when PWM mode is use
|
||||
pwm : when pwm mode is not use
|
||||
"""
|
||||
# target = 0
|
||||
# fan_target_sysfs_name = "pwm{}".format(self.fan_index+1)
|
||||
# fan_target_sysfs_path = self.__search_file_by_name(
|
||||
# FAN_PATH, fan_target_sysfs_name)
|
||||
# fan_target_pwm = self.__read_txt_file(fan_target_sysfs_path) or 0
|
||||
# target = math.ceil(float(fan_target_pwm) * 100 / FAN_MAX_PWM)
|
||||
|
||||
# return target
|
||||
speed = 0
|
||||
fan_speed_sysfs_name = "fan{}_input".format(self.fan_index+1)
|
||||
fan_speed_sysfs_path = self.__search_file_by_name(
|
||||
FAN_PATH, fan_speed_sysfs_name)
|
||||
fan_speed_rpm = self.__read_txt_file(fan_speed_sysfs_path) or 0
|
||||
speed = math.ceil(float(fan_speed_rpm) * 100 / FAN_MAX_RPM)
|
||||
|
||||
return speed
|
||||
|
||||
def get_speed_tolerance(self):
|
||||
"""
|
||||
Retrieves the speed tolerance of the fan
|
||||
Returns:
|
||||
An integer, the percentage of variance from target speed which is
|
||||
considered tolerable
|
||||
"""
|
||||
return 10
|
||||
|
||||
def set_speed(self, speed):
|
||||
"""
|
||||
Sets the fan speed
|
||||
Args:
|
||||
speed: An integer, the percentage of full fan speed to set fan to,
|
||||
in the range 0 (off) to 100 (full speed)
|
||||
Returns:
|
||||
A boolean, True if speed is set successfully, False if not
|
||||
|
||||
Note:
|
||||
Depends on pwm or target mode is selected:
|
||||
1) pwm = speed_pc * 255 <-- Currently use this mode.
|
||||
2) target_pwm = speed_pc * 100 / 255
|
||||
2.1) set pwm{}_enable to 3
|
||||
|
||||
"""
|
||||
pwm = speed * 255 / 100
|
||||
fan_target_sysfs_name = "pwm{}".format(self.fan_index+1)
|
||||
fan_target_sysfs_path = self.__search_file_by_name(
|
||||
FAN_PATH, fan_target_sysfs_name)
|
||||
return self.__write_txt_file(fan_target_sysfs_path, int(pwm))
|
||||
|
||||
def set_status_led(self, color):
|
||||
"""
|
||||
Sets the state of the fan module status LED
|
||||
Args:
|
||||
color: A string representing the color with which to set the
|
||||
fan module status LED
|
||||
Returns:
|
||||
bool: always True
|
||||
"""
|
||||
return True
|
||||
|
||||
def get_name(self):
|
||||
"""
|
||||
Retrieves the name of the device
|
||||
Returns:
|
||||
string: The name of the device
|
||||
"""
|
||||
fan_name = FAN_NAME_LIST[self.fan_index]
|
||||
|
||||
return fan_name
|
||||
|
||||
def get_presence(self):
|
||||
"""
|
||||
Retrieves the presence of the FAN
|
||||
Returns:
|
||||
bool: always True
|
||||
"""
|
||||
|
||||
return True
|
||||
|
||||
def get_status(self):
|
||||
"""
|
||||
Retrieves the status of the FAN
|
||||
Returns:
|
||||
bool: always True
|
||||
"""
|
||||
return True
|
@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
########################################################################
|
||||
# FS S5800 48t4s
|
||||
#
|
||||
# Module contains an implementation of SONiC Platform Base API and
|
||||
# provides the Fan-Drawers' information available in the platform.
|
||||
#
|
||||
########################################################################
|
||||
|
||||
try:
|
||||
from sonic_platform_base.fan_drawer_base import FanDrawerBase
|
||||
from sonic_platform.fan import Fan
|
||||
except ImportError as e:
|
||||
raise ImportError(str(e) + "- required module not found")
|
||||
|
||||
FS_FANS_PER_FANTRAY = 3
|
||||
|
||||
|
||||
class FanDrawer(FanDrawerBase):
|
||||
"""FS S5800 48t4s Platform-specific Fan class"""
|
||||
|
||||
def __init__(self, fantray_index):
|
||||
|
||||
FanDrawerBase.__init__(self)
|
||||
self.fantrayindex = fantray_index
|
||||
for i in range(FS_FANS_PER_FANTRAY):
|
||||
self._fan_list.append(Fan(fantray_index, i))
|
||||
|
||||
def get_name(self):
|
||||
"""
|
||||
Retrieves the fan drawer name
|
||||
Returns:
|
||||
string: The name of the device
|
||||
"""
|
||||
return "FanTray{}".format(self.fantrayindex)
|
@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# Module contains an implementation of SONiC Platform Base API and
|
||||
# provides the led status which are available in the platform
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
class SystemLed(object):
|
||||
STATUS_LED_COLOR_GREEN = 'green'
|
||||
STATUS_LED_COLOR_ORANGE = 'orange'
|
||||
STATUS_LED_COLOR_OFF = 'off'
|
||||
|
||||
SYSTEM_LED_PATH = '/sys/class/leds/system/brightness'
|
||||
|
||||
def set_status(self, color):
|
||||
status = False
|
||||
|
||||
if color == SystemLed.STATUS_LED_COLOR_GREEN:
|
||||
with open(SystemLed.SYSTEM_LED_PATH, 'w') as led:
|
||||
led.write('1')
|
||||
status = True
|
||||
elif color == SystemLed.STATUS_LED_COLOR_OFF:
|
||||
with open(SystemLed.SYSTEM_LED_PATH, 'w') as led:
|
||||
led.write('3')
|
||||
status = True
|
||||
elif color == SystemLed.STATUS_LED_COLOR_ORANGE:
|
||||
with open(SystemLed.SYSTEM_LED_PATH, 'w') as led:
|
||||
led.write('2')
|
||||
status = True
|
||||
|
||||
return status
|
||||
|
||||
def get_status(self):
|
||||
with open(SystemLed.SYSTEM_LED_PATH, 'r') as led:
|
||||
if led.read().rstrip('\n') == '1':
|
||||
return SystemLed.STATUS_LED_COLOR_GREEN
|
||||
elif led.read().rstrip('\n') == '3':
|
||||
return SystemLed.STATUS_LED_COLOR_OFF
|
||||
else:
|
||||
return SystemLed.STATUS_LED_COLOR_ORANGE
|
@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Name: platform.py, version: 1.0
|
||||
#
|
||||
# Description: Module contains the definitions of SONiC platform APIs for FS S5800-48t4s
|
||||
#
|
||||
|
||||
|
||||
try:
|
||||
from sonic_platform_base.platform_base import PlatformBase
|
||||
from sonic_platform.chassis import Chassis
|
||||
except ImportError as e:
|
||||
raise ImportError(str(e) + "- required module not found")
|
||||
|
||||
|
||||
class Platform(PlatformBase):
|
||||
|
||||
def __init__(self):
|
||||
PlatformBase.__init__(self)
|
||||
self._chassis = Chassis()
|
||||
|
@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import imp
|
||||
import os
|
||||
|
||||
try:
|
||||
from sonic_platform_base.psu_base import PsuBase
|
||||
from sonic_py_common import device_info
|
||||
except ImportError as e:
|
||||
raise ImportError("%s - required module not found" % e)
|
||||
|
||||
USR_SHARE_SONIC_PATH = "/usr/share/sonic"
|
||||
HOST_DEVICE_PATH = USR_SHARE_SONIC_PATH + "/device"
|
||||
CONTAINER_PLATFORM_PATH = USR_SHARE_SONIC_PATH + "/platform"
|
||||
|
||||
class Psu(PsuBase):
|
||||
"""FS Platform-specific PSU class"""
|
||||
|
||||
def __init__(self, index):
|
||||
self._index = index
|
||||
self._fan_list = []
|
||||
PsuBase.__init__(self)
|
||||
|
||||
if os.path.isdir(CONTAINER_PLATFORM_PATH):
|
||||
platform_path = CONTAINER_PLATFORM_PATH
|
||||
else:
|
||||
platform = device_info.get_platform()
|
||||
if platform is None:
|
||||
return
|
||||
platform_path = os.path.join(HOST_DEVICE_PATH, platform)
|
||||
|
||||
module_file = "/".join([platform_path, "plugins", "psuutil.py"])
|
||||
module = imp.load_source("psuutil", module_file)
|
||||
psu_util_class = getattr(module, "PsuUtil")
|
||||
self._psuutil = psu_util_class()
|
||||
|
||||
def _get_psuutil(self):
|
||||
return self._psuutil
|
||||
|
||||
def get_presence(self):
|
||||
return self._get_psuutil().get_psu_presence(self._index)
|
||||
|
||||
def get_powergood_status(self):
|
||||
return self._get_psuutil().get_psu_status(self._index)
|
@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import imp
|
||||
import os
|
||||
|
||||
try:
|
||||
from sonic_platform_base.sfp_base import SfpBase
|
||||
from sonic_py_common import device_info
|
||||
except ImportError as e:
|
||||
raise ImportError("%s - required module not found" % e)
|
||||
|
||||
USR_SHARE_SONIC_PATH = "/usr/share/sonic"
|
||||
HOST_DEVICE_PATH = USR_SHARE_SONIC_PATH + "/device"
|
||||
CONTAINER_PLATFORM_PATH = USR_SHARE_SONIC_PATH + "/platform"
|
||||
|
||||
class Sfp(SfpBase):
|
||||
"""
|
||||
Platform-specific sfp class
|
||||
|
||||
Unimplemented methods:
|
||||
- get_model
|
||||
- get_serial
|
||||
- get_status
|
||||
- get_transceiver_info
|
||||
- get_transceiver_bulk_status
|
||||
- get_transceiver_threshold_info
|
||||
- get_reset_status
|
||||
- get_rx_los
|
||||
- get_tx_fault
|
||||
- get_tx_disable_channel
|
||||
- get_power_override
|
||||
- get_temperature
|
||||
- get_voltage
|
||||
- get_tx_bias
|
||||
- get_rx_power
|
||||
- get_tx_power
|
||||
- tx_disable_channel
|
||||
- set_power_override
|
||||
"""
|
||||
|
||||
def __init__(self, index):
|
||||
self._index = index
|
||||
SfpBase.__init__(self)
|
||||
|
||||
if os.path.isdir(CONTAINER_PLATFORM_PATH):
|
||||
platform_path = CONTAINER_PLATFORM_PATH
|
||||
else:
|
||||
platform = device_info.get_platform()
|
||||
if platform is None:
|
||||
return
|
||||
platform_path = os.path.join(HOST_DEVICE_PATH, platform)
|
||||
|
||||
module_file = "/".join([platform_path, "plugins", "sfputil.py"])
|
||||
module = imp.load_source("sfputil", module_file)
|
||||
sfp_util_class = getattr(module, "SfpUtil")
|
||||
self._sfputil = sfp_util_class()
|
||||
|
||||
def get_id(self):
|
||||
return self._index
|
||||
|
||||
def get_name(self):
|
||||
return "Ethernet{}".format(self._index)
|
||||
|
||||
def get_lpmode(self):
|
||||
return False
|
||||
|
||||
def set_lpmode(self, lpmode):
|
||||
return False
|
||||
|
||||
def get_tx_disable(self):
|
||||
return False
|
||||
|
||||
def tx_disable(self, tx_disable):
|
||||
return False
|
||||
|
||||
def reset(self):
|
||||
pass
|
||||
|
||||
def clear_interrupt(self):
|
||||
return False
|
||||
|
||||
def get_interrupt_file(self):
|
||||
return None
|
||||
|
||||
def _get_sfputil(self):
|
||||
return self._sfputil
|
||||
|
||||
def get_presence(self):
|
||||
return self._get_sfputil().get_presence(self._index)
|
||||
|
||||
def get_transceiver_info(self):
|
||||
return self._get_sfputil().get_transceiver_info_dict(self._index)
|
||||
|
||||
def get_transceiver_bulk_status(self):
|
||||
return self._get_sfputil().get_transceiver_dom_info_dict(self._index)
|
||||
|
||||
def get_transceiver_threshold_info(self):
|
||||
return self._get_sfputil().get_transceiver_dom_threshold_info_dict(self._index)
|
||||
|
||||
def get_transceiver_change_event(self, timeout):
|
||||
return self._get_sfputil().get_transceiver_change_event(timeout)
|
@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#############################################################################
|
||||
# Celestica
|
||||
#
|
||||
# Thermal contains an implementation of SONiC Platform Base API and
|
||||
# provides the thermal device status which are available in the platform
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
import os
|
||||
import os.path
|
||||
|
||||
try:
|
||||
from sonic_platform_base.thermal_base import ThermalBase
|
||||
except ImportError as e:
|
||||
raise ImportError(str(e) + "- required module not found")
|
||||
|
||||
|
||||
class Thermal(ThermalBase):
|
||||
"""Platform-specific Thermal class"""
|
||||
|
||||
THERMAL_NAME_LIST = []
|
||||
CPUBOARD_SS_PATH = "/sys/class/hwmon/hwmon1"
|
||||
|
||||
def __init__(self, thermal_index):
|
||||
self.index = thermal_index
|
||||
self.high_threshold = float(112)
|
||||
|
||||
# Add thermal name
|
||||
self.THERMAL_NAME_LIST.append("ASIC")
|
||||
|
||||
# Set hwmon path
|
||||
self.ss_index, self.hwmon_path = 1, self.CPUBOARD_SS_PATH
|
||||
self.ss_key = self.THERMAL_NAME_LIST[self.index - 1]
|
||||
|
||||
def __read_txt_file(self, file_path):
|
||||
try:
|
||||
with open(file_path, 'r') as fd:
|
||||
data = fd.read()
|
||||
return data.strip()
|
||||
except IOError:
|
||||
raise IOError("Unable to open %s file !" % file_path)
|
||||
|
||||
def __get_temp(self, temp_file):
|
||||
temp_file_path = os.path.join(self.hwmon_path, temp_file)
|
||||
raw_temp = self.__read_txt_file(temp_file_path)
|
||||
temp = float(raw_temp)/1000
|
||||
return float("{:.3f}".format(temp))
|
||||
|
||||
def __set_threshold(self, file_name, temperature):
|
||||
temp_file_path = os.path.join(self.hwmon_path, file_name)
|
||||
try:
|
||||
with open(temp_file_path, 'w') as fd:
|
||||
fd.write(str(temperature))
|
||||
return True
|
||||
except IOError:
|
||||
return False
|
||||
|
||||
def get_temperature(self):
|
||||
"""
|
||||
Retrieves current temperature reading from thermal
|
||||
Returns:
|
||||
A float number of current temperature in Celsius up to nearest thousandth
|
||||
of one degree Celsius, e.g. 30.125
|
||||
"""
|
||||
temp_file = "temp{}_input".format(self.ss_index)
|
||||
return self.__get_temp(temp_file)
|
||||
|
||||
def get_high_threshold(self):
|
||||
"""
|
||||
Retrieves the high threshold temperature of thermal
|
||||
Returns:
|
||||
A float number, the high threshold temperature of thermal in Celsius
|
||||
up to nearest thousandth of one degree Celsius, e.g. 30.125
|
||||
"""
|
||||
return self.high_threshold
|
||||
|
||||
def set_high_threshold(self, temperature):
|
||||
"""
|
||||
Sets the high threshold temperature of thermal
|
||||
Args :
|
||||
temperature: A float number up to nearest thousandth of one degree Celsius,
|
||||
e.g. 30.125
|
||||
Returns:
|
||||
A boolean, True if threshold is set successfully, False if not
|
||||
"""
|
||||
self.high_threshold = float(temperature)
|
||||
return True
|
||||
|
||||
def get_name(self):
|
||||
"""
|
||||
Retrieves the name of the thermal device
|
||||
Returns:
|
||||
string: The name of the thermal device
|
||||
"""
|
||||
return self.THERMAL_NAME_LIST[self.index]
|
||||
|
||||
def get_presence(self):
|
||||
"""
|
||||
Retrieves the presence of the PSU
|
||||
Returns:
|
||||
bool: True if PSU is present, False if not
|
||||
"""
|
||||
temp_file = "temp{}_input".format(self.ss_index)
|
||||
temp_file_path = os.path.join(self.hwmon_path, temp_file)
|
||||
return os.path.isfile(temp_file_path)
|
||||
|
||||
def get_status(self):
|
||||
"""
|
||||
Retrieves the operational status of the device
|
||||
Returns:
|
||||
A boolean value, True if device is operating properly, False if not
|
||||
"""
|
||||
if not self.get_presence():
|
||||
return False
|
||||
|
||||
return True
|
15
platform/centec-arm64/sonic-platform-modules-fs/LICENSE
Normal file
15
platform/centec-arm64/sonic-platform-modules-fs/LICENSE
Normal file
@ -0,0 +1,15 @@
|
||||
Copyright (C) 2022 FS
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
@ -0,0 +1 @@
|
||||
platform drivers for FS for the SONiC project
|
@ -0,0 +1,6 @@
|
||||
sonic-platform-modules-fs (1.0) unstable; urgency=low
|
||||
|
||||
* Initial release
|
||||
|
||||
-- Sec <sec@feisu.com> Mon, 22 Nov 2022 14:50:00 +0800
|
||||
|
@ -0,0 +1 @@
|
||||
9
|
11
platform/centec-arm64/sonic-platform-modules-fs/debian/control
Executable file
11
platform/centec-arm64/sonic-platform-modules-fs/debian/control
Executable file
@ -0,0 +1,11 @@
|
||||
Source: sonic-platform-modules-fs
|
||||
Section: main
|
||||
Priority: extra
|
||||
Maintainer: Sec <sec@feisu.com>
|
||||
Build-Depends: debhelper (>= 8.0.0), bzip2
|
||||
Standards-Version: 3.9.3
|
||||
|
||||
Package: platform-modules-s5800-48t4s
|
||||
Architecture: arm64
|
||||
Depends: linux-image-5.10.0-18-2-arm64-unsigned
|
||||
Description: kernel modules for platform devices such as fan, led, sfp
|
@ -0,0 +1,80 @@
|
||||
#!/bin/bash
|
||||
# This script load/unload fs kernel modules
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: platform-modules-s5800-48t4s
|
||||
# Required-Start:
|
||||
# Required-Stop:
|
||||
# Should-Start:
|
||||
# Should-Stop:
|
||||
# Default-Start: S
|
||||
# Default-Stop: 0 6
|
||||
# Short-Description: Load FS kernel modules
|
||||
### END INIT INFO
|
||||
|
||||
function install_python_api_package()
|
||||
{
|
||||
device="/usr/share/sonic/device"
|
||||
platform=$(/usr/local/bin/sonic-cfggen -H -v DEVICE_METADATA.localhost.platform)
|
||||
|
||||
rv=$(pip3 show sonic-platform > /dev/null 2>/dev/null)
|
||||
if [ $? -ne 0 ]; then
|
||||
rv=$(pip3 install $device/$platform/sonic_platform-1.0-py3-none-any.whl)
|
||||
fi
|
||||
}
|
||||
|
||||
function load_kernel_modules()
|
||||
{
|
||||
hwaddr=`fw_printenv ethaddr | awk -F = '{print $2}'`
|
||||
if [ "$hwaddr" != "" ]; then
|
||||
ifconfig eth0 hw ether $hwaddr
|
||||
fi
|
||||
depmod -a
|
||||
modprobe ctc-i2c-mux-pca954x
|
||||
modprobe fs_s5800_48t4s_platform
|
||||
modprobe fan-ctc5236
|
||||
modprobe dal
|
||||
modprobe tun
|
||||
modprobe tap
|
||||
}
|
||||
|
||||
function remove_kernel_modules()
|
||||
{
|
||||
modprobe -r tap
|
||||
modprobe -r tun
|
||||
modprobe -r dal
|
||||
modprobe -r fan-ctc5236
|
||||
modprobe -r fs_s5800_48t4s_platform
|
||||
modprobe -r ctc-i2c-mux-pca954x
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo -n "Load FS kernel modules... "
|
||||
|
||||
load_kernel_modules
|
||||
install_python_api_package
|
||||
|
||||
echo "done."
|
||||
;;
|
||||
|
||||
stop)
|
||||
echo -n "Unload FS kernel modules... "
|
||||
|
||||
remove_kernel_modules
|
||||
|
||||
echo "done."
|
||||
;;
|
||||
|
||||
force-reload|restart)
|
||||
echo "Not supported"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: /etc/init.d/platform-modules-s5800-48t4s {start|stop}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
@ -0,0 +1 @@
|
||||
48t4s/modules/sonic_platform-1.0-py3-none-any.whl usr/share/sonic/device/arm64-fs_s5800_48t4s-r0
|
@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
hw_ver=`dd if=/dev/mtd2 bs=1 skip=4115 count=1 2>/dev/null | hexdump | awk '{print $2}'`
|
||||
if [[ 0x$hw_ver -ge 0x30 ]] && [[ 0x$hw_ver -ne 0x44 ]]; then
|
||||
sed -i "s/S5800-48t4s /S5800-48t4s-mars8p /g" /usr/share/sonic/device/arm64-fs_s5800_48t4s-r0/default_sku
|
||||
fi
|
||||
|
||||
systemctl enable 48t4s_platform.service
|
||||
systemctl start 48t4s_platform.service
|
98
platform/centec-arm64/sonic-platform-modules-fs/debian/rules
Executable file
98
platform/centec-arm64/sonic-platform-modules-fs/debian/rules
Executable file
@ -0,0 +1,98 @@
|
||||
#!/usr/bin/make -f
|
||||
# -*- makefile -*-
|
||||
# Sample debian/rules that uses debhelper.
|
||||
# This file was originally written by Joey Hess and Craig Small.
|
||||
# As a special exception, when this file is copied by dh-make into a
|
||||
# dh-make output file, you may use that output file without restriction.
|
||||
# This special exception was added by Craig Small in version 0.37 of dh-make.
|
||||
|
||||
include /usr/share/dpkg/pkg-info.mk
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
export INSTALL_MOD_DIR:=extra
|
||||
|
||||
PACKAGE_PRE_NAME := platform-modules-s5800
|
||||
KVERSION ?= $(shell uname -r)
|
||||
KERNEL_SRC := /lib/modules/$(KVERSION)
|
||||
MOD_SRC_DIR:= $(shell pwd)
|
||||
MODULE_DIRS:= 48t4s
|
||||
MODULE_DIR := modules
|
||||
SERVICE_DIR := service
|
||||
CLASSES_DIR := classes
|
||||
CONF_DIR := conf
|
||||
KDAL_DIR := ../../centec/centec-dal/
|
||||
FAN_DIR := fan
|
||||
PCA954X_DIR := pca954x
|
||||
|
||||
%:
|
||||
dh $@
|
||||
|
||||
clean:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean
|
||||
|
||||
build:
|
||||
#make modules -C $(KERNEL_SRC)/build M=$(MODULE_SRC)
|
||||
(for mod in $(KDAL_DIR); do \
|
||||
make modules -C $(KERNEL_SRC)/build M=$(MOD_SRC_DIR)/$${mod}/; \
|
||||
done)
|
||||
(for mod in $(FAN_DIR); do \
|
||||
make modules -C $(KERNEL_SRC)/build M=$(MOD_SRC_DIR)/$${mod}/; \
|
||||
done)
|
||||
(for mod in $(PCA954X_DIR); do \
|
||||
make modules -C $(KERNEL_SRC)/build M=$(MOD_SRC_DIR)/$${mod}/; \
|
||||
done)
|
||||
(for mod in $(MODULE_DIRS); do \
|
||||
make modules -C $(KERNEL_SRC)/build M=$(MOD_SRC_DIR)/$${mod}/modules; \
|
||||
cd $${mod}; \
|
||||
python3 setup.py bdist_wheel -d $(MOD_SRC_DIR)/$${mod}/modules; \
|
||||
cd -; \
|
||||
done)
|
||||
|
||||
binary: binary-arch binary-indep
|
||||
# Nothing to do
|
||||
|
||||
binary-arch:
|
||||
# Nothing to do
|
||||
|
||||
#install: build
|
||||
#dh_testdir
|
||||
#dh_testroot
|
||||
#dh_clean -k
|
||||
#dh_installdirs
|
||||
|
||||
binary-indep:
|
||||
dh_testdir
|
||||
dh_installdirs
|
||||
|
||||
# Custom package commands
|
||||
(for mod in $(MODULE_DIRS); do \
|
||||
dh_installdirs -p$(PACKAGE_PRE_NAME)-$${mod} $(KERNEL_SRC)/$(INSTALL_MOD_DIR); \
|
||||
dh_installdirs -p$(PACKAGE_PRE_NAME)-$${mod} lib/systemd/system; \
|
||||
dh_installdirs -p$(PACKAGE_PRE_NAME)-$${mod} etc; \
|
||||
cp $(MOD_SRC_DIR)/$${mod}/$(MODULE_DIR)/*.ko debian/$(PACKAGE_PRE_NAME)-$${mod}/$(KERNEL_SRC)/$(INSTALL_MOD_DIR); \
|
||||
cp $(MOD_SRC_DIR)/$(KDAL_DIR)/*.ko debian/$(PACKAGE_PRE_NAME)-$${mod}/$(KERNEL_SRC)/$(INSTALL_MOD_DIR); \
|
||||
cp $(MOD_SRC_DIR)/$(FAN_DIR)/*.ko debian/$(PACKAGE_PRE_NAME)-$${mod}/$(KERNEL_SRC)/$(INSTALL_MOD_DIR); \
|
||||
cp $(MOD_SRC_DIR)/$(PCA954X_DIR)/*.ko debian/$(PACKAGE_PRE_NAME)-$${mod}/$(KERNEL_SRC)/$(INSTALL_MOD_DIR); \
|
||||
cp $(MOD_SRC_DIR)/$${mod}/$(SERVICE_DIR)/*.service debian/$(PACKAGE_PRE_NAME)-$${mod}/lib/systemd/system/; \
|
||||
done)
|
||||
# Resuming debhelper scripts
|
||||
dh_testroot
|
||||
dh_install
|
||||
dh_installchangelogs
|
||||
dh_installdocs
|
||||
dh_systemd_enable
|
||||
dh_installinit
|
||||
dh_systemd_start
|
||||
dh_link
|
||||
dh_fixperms
|
||||
dh_compress
|
||||
dh_strip
|
||||
dh_installdeb
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb
|
||||
.PHONY: build binary binary-arch binary-indep clean
|
1
platform/centec-arm64/sonic-platform-modules-fs/fan
Symbolic link
1
platform/centec-arm64/sonic-platform-modules-fs/fan
Symbolic link
@ -0,0 +1 @@
|
||||
../sonic-platform-modules-e530/fan
|
1
platform/centec-arm64/sonic-platform-modules-fs/pca954x
Symbolic link
1
platform/centec-arm64/sonic-platform-modules-fs/pca954x
Symbolic link
@ -0,0 +1 @@
|
||||
../sonic-platform-modules-e530/pca954x/
|
@ -79,5 +79,12 @@
|
||||
ramdisk = "initramfs";
|
||||
fdt = "ctc_fdt";
|
||||
};
|
||||
|
||||
arm64-fs_s5800_48t4s-r0 {
|
||||
description = "config for arm64-fs_s5800_48t4s-r0";
|
||||
kernel = "kernel_ctc";
|
||||
ramdisk = "initramfs";
|
||||
fdt = "ctc_fdt";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user