mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-10-30 17:48:09 +00:00 
			
		
		
		
	[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:
		| @@ -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"; | ||||
| 			}; | ||||
| 	}; | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 FSSec
					FSSec