mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-10-31 01:57:48 +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_24X2C_PLATFORM_MODULE) | ||||||
| $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(CENTEC_E530_48S4X_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 += $(CENTEC_E530_24X2Q_PLATFORM_MODULE) | ||||||
|  | $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(FS_S5800_48T4S_PLATFORM_MODULE) | ||||||
|  |  | ||||||
| ifeq ($(INSTALL_DEBUG_TOOLS),y) | ifeq ($(INSTALL_DEBUG_TOOLS),y) | ||||||
| $(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_DBG_IMAGES) | $(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)/libsaithrift-dev.mk | ||||||
| include $(PLATFORM_PATH)/tsingma-bsp.mk | include $(PLATFORM_PATH)/tsingma-bsp.mk | ||||||
| include $(PLATFORM_PATH)/platform-modules-centec-e530.mk | include $(PLATFORM_PATH)/platform-modules-centec-e530.mk | ||||||
|  | include $(PLATFORM_PATH)/platform-modules-fs.mk | ||||||
|  |  | ||||||
| SONIC_ALL += $(SONIC_ONE_IMAGE) \ | SONIC_ALL += $(SONIC_ONE_IMAGE) \ | ||||||
|              $(DOCKER_FPM) |              $(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"; | 			ramdisk = "initramfs"; | ||||||
| 			fdt = "ctc_fdt"; | 			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